dojox.grid.DataGrid extension: Allowing browser context menu

Grid example with un-disabled right click. Requested by mjv_ (129.42.208.*) on freenode.

HTML

<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/dojo/1.5/dijit/themes/claro/claro.css">
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/dojo/1.5/dojox/grid/resources/Grid.css">
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/dojo/1.5/dojox/grid/resources/claroGrid.css">
<div id="grid"></div>

CSS

#grid { height: 500px; }

JavaScript

dojo.require('dojo.data.ItemFileReadStore');
dojo.require('dojox.grid.DataGrid');

dojo.ready(function() {
    
    dojo.declare('kgf.dojox.grid._FocusManager', dojox.grid._FocusManager, {
        //extension to remove yet another contextmenu dojo.stopEvent
        doContextMenu: function() {}
    });
    
    dojo.declare('kgf.dojox.grid.DataGrid', dojox.grid.DataGrid, {
        createManagers: function() {
            this.rows = new dojox.grid._RowManager(this);
            //hook up our extended _FocusManager
            this.focus = new kgf.dojox.grid._FocusManager(this);
            this.edit = new dojox.grid._EditManager(this);
        },
        //clobber original callbacks that call dojo.stopEvent
        onRowContextMenu: function(e) {},
        onHeaderContextMenu: function(e) {}
    });
    
    ifrs = new dojo.data.ItemFileReadStore({data: {
        identifier: 'id',
        label: 'name',
        items: [
            {id: 1, name: 'foo'},
            {id: 2, name: 'bar'}
        ]
    }});
    
    var grid = new kgf.dojox.grid.DataGrid({
        id: 'grid',
        store: ifrs,
        structure: [
            { field: 'id', name: 'ID', width: '10%' },
            { field: 'name', name: 'Name', width: '90%' }
        ]
    }, dojo.byId('grid'));
    grid.startup();
});