a:52:{s:9:"#provides";s:24:"dojox.grid._FocusManager";s:9:"#resource";s:21:"grid/_FocusManager.js";s:9:"#requires";a:1:{i:0;a:2:{i:0;s:6:"common";i:1;s:15:"dojox.grid.util";}}s:24:"dojox.grid._FocusManager";a:5:{s:4:"type";s:8:"Function";s:7:"summary";s:154:"Controls grid cell focus. Owned by grid and used internally for focusing. Note: grid cell actually receives keyboard input only when cell is being edited.";s:10:"parameters";a:1:{s:6:"inGrid";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:630:" this.grid = inGrid; this.cell = null; this.rowIndex = -1; this._connects = []; this._connects.push(dojo.connect(this.grid.domNode, "onfocus", this, "doFocus")); this._connects.push(dojo.connect(this.grid.domNode, "onblur", this, "doBlur")); this._connects.push(dojo.connect(this.grid.lastFocusNode, "onfocus", this, "doLastNodeFocus")); this._connects.push(dojo.connect(this.grid.lastFocusNode, "onblur", this, "doLastNodeBlur")); this._connects.push(dojo.connect(this.grid,"_onFetchComplete", this, "_delayedCellFocus")); this._connects.push(dojo.connect(this.grid,"postrender", this, "_delayedHeaderFocus"));";s:9:"classlike";b:1;}s:32:"dojox.grid._FocusManager.destroy";a:4:{s:9:"prototype";s:24:"dojox.grid._FocusManager";s:4:"type";s:8:"Function";s:6:"source";s:88:" dojo.forEach(this._connects, dojo.disconnect); delete this.grid; delete this.cell;";s:7:"summary";s:0:"";}s:37:"dojox.grid._FocusManager._colHeadNode";a:4:{s:9:"prototype";s:24:"dojox.grid._FocusManager";s:8:"instance";s:24:"dojox.grid._FocusManager";s:7:"private";b:1;s:7:"summary";s:0:"";}s:41:"dojox.grid._FocusManager._colHeadFocusIdx";a:4:{s:9:"prototype";s:24:"dojox.grid._FocusManager";s:8:"instance";s:24:"dojox.grid._FocusManager";s:7:"private";b:1;s:7:"summary";s:0:"";}s:35:"dojox.grid._FocusManager.tabbingOut";a:3:{s:9:"prototype";s:24:"dojox.grid._FocusManager";s:8:"instance";s:24:"dojox.grid._FocusManager";s:7:"summary";s:0:"";}s:35:"dojox.grid._FocusManager.focusClass";a:2:{s:9:"prototype";s:24:"dojox.grid._FocusManager";s:7:"summary";s:0:"";}s:34:"dojox.grid._FocusManager.focusView";a:3:{s:9:"prototype";s:24:"dojox.grid._FocusManager";s:8:"instance";s:24:"dojox.grid._FocusManager";s:7:"summary";s:0:"";}s:38:"dojox.grid._FocusManager.initFocusView";a:4:{s:9:"prototype";s:24:"dojox.grid._FocusManager";s:4:"type";s:8:"Function";s:6:"source";s:106:" this.focusView = this.grid.views.getFirstScrollingView() || this.focusView; this._initColumnHeaders();";s:7:"summary";s:0:"";}s:36:"dojox.grid._FocusManager.isFocusCell";a:6:{s:9:"prototype";s:24:"dojox.grid._FocusManager";s:4:"type";s:8:"Function";s:10:"parameters";a:2:{s:6:"inCell";a:2:{s:4:"type";s:6:"object";s:7:"summary";s:16:"grid cell object";}s:10:"inRowIndex";a:2:{s:4:"type";s:3:"int";s:7:"summary";s:14:"grid row index";}}s:6:"source";s:64:" return (this.cell == inCell) && (this.rowIndex == inRowIndex);";s:7:"summary";s:35:"states if the given cell is focused";s:14:"return_summary";s:38:"true of the given grid cell is focused";}s:40:"dojox.grid._FocusManager.isLastFocusCell";a:4:{s:9:"prototype";s:24:"dojox.grid._FocusManager";s:4:"type";s:8:"Function";s:6:"source";s:140:" if(this.cell){ return (this.rowIndex == this.grid.rowCount-1) && (this.cell.index == this.grid.layout.cellCount-1); } return false;";s:7:"summary";s:0:"";}s:41:"dojox.grid._FocusManager.isFirstFocusCell";a:4:{s:9:"prototype";s:24:"dojox.grid._FocusManager";s:4:"type";s:8:"Function";s:6:"source";s:94:" if(this.cell){ return (this.rowIndex == 0) && (this.cell.index == 0); } return false;";s:7:"summary";s:0:"";}s:38:"dojox.grid._FocusManager.isNoFocusCell";a:4:{s:9:"prototype";s:24:"dojox.grid._FocusManager";s:4:"type";s:8:"Function";s:6:"source";s:43:" return (this.rowIndex < 0) || !this.cell;";s:7:"summary";s:0:"";}s:36:"dojox.grid._FocusManager.isNavHeader";a:5:{s:9:"prototype";s:24:"dojox.grid._FocusManager";s:4:"type";s:8:"Function";s:6:"source";s:31:" return (!!this._colHeadNode);";s:7:"summary";s:57:"states whether currently navigating among column headers.";s:14:"return_summary";s:53:"true if focus is on a column header; false otherwise.";}s:39:"dojox.grid._FocusManager.getHeaderIndex";a:5:{s:9:"prototype";s:24:"dojox.grid._FocusManager";s:4:"type";s:8:"Function";s:6:"source";s:119:" if(this._colHeadNode){ return dojo.indexOf(this._findHeaderCells(), this._colHeadNode); }else{ return -1; }";s:7:"summary";s:67:"if one of the column headers currently has focus, return its index.";s:14:"return_summary";s:61:"index of the focused column header, or -1 if none have focus.";}s:42:"dojox.grid._FocusManager._focusifyCellNode";a:6:{s:9:"prototype";s:24:"dojox.grid._FocusManager";s:4:"type";s:8:"Function";s:10:"parameters";a:1:{s:6:"inBork";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:346:" var n = this.cell && this.cell.getNode(this.rowIndex); if(n){ dojo.toggleClass(n, this.focusClass, inBork); if(inBork){ var sl = this.scrollIntoView(); try{ if(!this.grid.edit.isEditing()){ dojox.grid.util.fire(n, "focus"); if(sl){ this.cell.view.scrollboxNode.scrollLeft = sl; } } }catch(e){} } }";s:7:"private";b:1;s:7:"summary";s:0:"";}s:42:"dojox.grid._FocusManager._delayedCellFocus";a:5:{s:9:"prototype";s:24:"dojox.grid._FocusManager";s:4:"type";s:8:"Function";s:6:"source";s:271:" if(this.isNavHeader()){ return; } var n = this.cell && this.cell.getNode(this.rowIndex); if(n){ try{ if(!this.grid.edit.isEditing()){ dojo.toggleClass(n, this.focusClass, true); dojox.grid.util.fire(n, "focus"); } } catch(e){} }";s:7:"private";b:1;s:7:"summary";s:0:"";}s:44:"dojox.grid._FocusManager._delayedHeaderFocus";a:5:{s:9:"prototype";s:24:"dojox.grid._FocusManager";s:4:"type";s:8:"Function";s:6:"source";s:84:" if(this.isNavHeader()){ this.focusHeader(); //this may need clickSelect? }";s:7:"private";b:1;s:7:"summary";s:0:"";}s:43:"dojox.grid._FocusManager._initColumnHeaders";a:5:{s:9:"prototype";s:24:"dojox.grid._FocusManager";s:4:"type";s:8:"Function";s:6:"source";s:355:" this._connects.push(dojo.connect(this.grid.viewsHeaderNode, "onblur", this, "doBlurHeader")); var headers = this._findHeaderCells(); for(var i = 0; i < headers.length; i++){ this._connects.push(dojo.connect(headers[i], "onfocus", this, "doColHeaderFocus")); this._connects.push(dojo.connect(headers[i], "onblur", this, "doColHeaderBlur")); }";s:7:"private";b:1;s:7:"summary";s:0:"";}s:41:"dojox.grid._FocusManager._findHeaderCells";a:5:{s:9:"prototype";s:24:"dojox.grid._FocusManager";s:4:"type";s:8:"Function";s:6:"source";s:4336:"dojo.provide("dojox.grid._FocusManager"); dojo.require("dojox.grid.util"); // focus management dojo.declare("dojox.grid._FocusManager", null, { // summary: // Controls grid cell focus. Owned by grid and used internally for focusing. // Note: grid cell actually receives keyboard input only when cell is being edited. constructor: function(inGrid){ this.grid = inGrid; this.cell = null; this.rowIndex = -1; this._connects = []; this._connects.push(dojo.connect(this.grid.domNode, "onfocus", this, "doFocus")); this._connects.push(dojo.connect(this.grid.domNode, "onblur", this, "doBlur")); this._connects.push(dojo.connect(this.grid.lastFocusNode, "onfocus", this, "doLastNodeFocus")); this._connects.push(dojo.connect(this.grid.lastFocusNode, "onblur", this, "doLastNodeBlur")); this._connects.push(dojo.connect(this.grid,"_onFetchComplete", this, "_delayedCellFocus")); this._connects.push(dojo.connect(this.grid,"postrender", this, "_delayedHeaderFocus")); }, destroy: function(){ dojo.forEach(this._connects, dojo.disconnect); delete this.grid; delete this.cell; }, _colHeadNode: null, _colHeadFocusIdx: null, tabbingOut: false, focusClass: "dojoxGridCellFocus", focusView: null, initFocusView: function(){ this.focusView = this.grid.views.getFirstScrollingView() || this.focusView; this._initColumnHeaders(); }, isFocusCell: function(inCell, inRowIndex){ // summary: // states if the given cell is focused // inCell: object // grid cell object // inRowIndex: int // grid row index // returns: // true of the given grid cell is focused return (this.cell == inCell) && (this.rowIndex == inRowIndex); }, isLastFocusCell: function(){ if(this.cell){ return (this.rowIndex == this.grid.rowCount-1) && (this.cell.index == this.grid.layout.cellCount-1); } return false; }, isFirstFocusCell: function(){ if(this.cell){ return (this.rowIndex == 0) && (this.cell.index == 0); } return false; }, isNoFocusCell: function(){ return (this.rowIndex < 0) || !this.cell; }, isNavHeader: function(){ // summary: // states whether currently navigating among column headers. // returns: // true if focus is on a column header; false otherwise. return (!!this._colHeadNode); }, getHeaderIndex: function(){ // summary: // if one of the column headers currently has focus, return its index. // returns: // index of the focused column header, or -1 if none have focus. if(this._colHeadNode){ return dojo.indexOf(this._findHeaderCells(), this._colHeadNode); }else{ return -1; } }, _focusifyCellNode: function(inBork){ var n = this.cell && this.cell.getNode(this.rowIndex); if(n){ dojo.toggleClass(n, this.focusClass, inBork); if(inBork){ var sl = this.scrollIntoView(); try{ if(!this.grid.edit.isEditing()){ dojox.grid.util.fire(n, "focus"); if(sl){ this.cell.view.scrollboxNode.scrollLeft = sl; } } }catch(e){} } } }, _delayedCellFocus: function(){ if(this.isNavHeader()){ return; } var n = this.cell && this.cell.getNode(this.rowIndex); if(n){ try{ if(!this.grid.edit.isEditing()){ dojo.toggleClass(n, this.focusClass, true); dojox.grid.util.fire(n, "focus"); } } catch(e){} } }, _delayedHeaderFocus: function(){ if(this.isNavHeader()){ this.focusHeader(); //this may need clickSelect? } }, _initColumnHeaders: function(){ this._connects.push(dojo.connect(this.grid.viewsHeaderNode, "onblur", this, "doBlurHeader")); var headers = this._findHeaderCells(); for(var i = 0; i < headers.length; i++){ this._connects.push(dojo.connect(headers[i], "onfocus", this, "doColHeaderFocus")); this._connects.push(dojo.connect(headers[i], "onblur", this, "doColHeaderBlur")); } }, _findHeaderCells: function(){ // This should be a one liner: // dojo.query("th[tabindex=-1]", this.grid.viewsHeaderNode); // But there is a bug in dojo.query() for IE -- see trac #7037. var allHeads = dojo.query("th", this.grid.viewsHeaderNode); var headers = []; for (var i = 0; i < allHeads.length; i++){ var aHead = allHeads[i]; var hasTabIdx = dojo.hasAttr(aHead, "tabindex"); var tabindex = dojo.attr(aHead, "tabindex"); if (hasTabIdx && tabindex < 0) { headers.push(aHead); } } return headers;";s:7:"private";b:1;s:7:"summary";s:0:"";}s:39:"dojox.grid._FocusManager.scrollIntoView";a:4:{s:9:"prototype";s:24:"dojox.grid._FocusManager";s:4:"type";s:8:"Function";s:6:"source";s:758:" var info = (this.cell ? this._scrollInfo(this.cell) : null); if(!info || !info.s){ return null; } var rt = this.grid.scroller.findScrollTop(this.rowIndex); // place cell within horizontal view if(info.n && info.sr){ if(info.n.offsetLeft + info.n.offsetWidth > info.sr.l + info.sr.w){ info.s.scrollLeft = info.n.offsetLeft + info.n.offsetWidth - info.sr.w; }else if(info.n.offsetLeft < info.sr.l){ info.s.scrollLeft = info.n.offsetLeft; } } // place cell within vertical view if(info.r && info.sr){ if(rt + info.r.offsetHeight > info.sr.t + info.sr.h){ this.grid.setScrollTop(rt + info.r.offsetHeight - info.sr.h); }else if(rt < info.sr.t){ this.grid.setScrollTop(rt); } } return info.s.scrollLeft;";s:7:"summary";s:0:"";}s:36:"dojox.grid._FocusManager._scrollInfo";a:6:{s:9:"prototype";s:24:"dojox.grid._FocusManager";s:4:"type";s:8:"Function";s:10:"parameters";a:2:{s:4:"cell";a:1:{s:4:"type";s:0:"";}s:7:"domNode";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:365:" if(cell){ var cl = cell, sbn = cl.view.scrollboxNode, sbnr = { w: sbn.clientWidth, l: sbn.scrollLeft, t: sbn.scrollTop, h: sbn.clientHeight }, rn = cl.view.getRowNode(this.rowIndex); return { c: cl, s: sbn, sr: sbnr, n: (domNode ? domNode : cell.getNode(this.rowIndex)), r: rn }; } return null;";s:7:"private";b:1;s:7:"summary";s:0:"";}s:38:"dojox.grid._FocusManager._scrollHeader";a:6:{s:9:"prototype";s:24:"dojox.grid._FocusManager";s:4:"type";s:8:"Function";s:10:"parameters";a:1:{s:10:"currentIdx";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:667:" var info = null; if(this._colHeadNode){ var cell = this.grid.getCell(currentIdx); info = this._scrollInfo(cell, cell.getNode(0)); } if(info && info.s && info.sr && info.n){ // scroll horizontally as needed. var scroll = info.sr.l + info.sr.w; if(info.n.offsetLeft + info.n.offsetWidth > scroll){ info.s.scrollLeft = info.n.offsetLeft + info.n.offsetWidth - info.sr.w; }else if(info.n.offsetLeft < info.sr.l){ info.s.scrollLeft = info.n.offsetLeft; }else if(dojo.isIE <= 7 && cell && cell.view.headerNode){ // Trac 7158: scroll dojoxGridHeader for IE7 and lower cell.view.headerNode.scrollLeft = info.s.scrollLeft; } }";s:7:"private";b:1;s:7:"summary";s:0:"";}s:33:"dojox.grid._FocusManager.styleRow";a:5:{s:9:"prototype";s:24:"dojox.grid._FocusManager";s:4:"type";s:8:"Function";s:10:"parameters";a:1:{s:5:"inRow";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:9:" return;";s:7:"summary";s:0:"";}s:38:"dojox.grid._FocusManager.setFocusIndex";a:5:{s:9:"prototype";s:24:"dojox.grid._FocusManager";s:4:"type";s:8:"Function";s:10:"parameters";a:2:{s:10:"inRowIndex";a:2:{s:4:"type";s:3:"int";s:7:"summary";s:14:"grid row index";}s:11:"inCellIndex";a:2:{s:4:"type";s:3:"int";s:7:"summary";s:15:"grid cell index";}}s:6:"source";s:64:" this.setFocusCell(this.grid.getCell(inCellIndex), inRowIndex);";s:7:"summary";s:27:"focuses the given grid cell";}s:37:"dojox.grid._FocusManager.setFocusCell";a:5:{s:9:"prototype";s:24:"dojox.grid._FocusManager";s:4:"type";s:8:"Function";s:10:"parameters";a:2:{s:6:"inCell";a:2:{s:4:"type";s:6:"object";s:7:"summary";s:16:"grid cell object";}s:10:"inRowIndex";a:2:{s:4:"type";s:3:"int";s:7:"summary";s:14:"grid row index";}}s:6:"source";s:598:" if(inCell && !this.isFocusCell(inCell, inRowIndex)){ this.tabbingOut = false; this._colHeadNode = this._colHeadFocusIdx = null; this.focusGridView(); this._focusifyCellNode(false); this.cell = inCell; this.rowIndex = inRowIndex; this._focusifyCellNode(true); } // even if this cell isFocusCell, the document focus may need to be rejiggered // call opera on delay to prevent keypress from altering focus if(dojo.isOpera){ setTimeout(dojo.hitch(this.grid, 'onCellFocus', this.cell, this.rowIndex), 1); }else{ this.grid.onCellFocus(this.cell, this.rowIndex); }";s:7:"summary";s:27:"focuses the given grid cell";}s:29:"dojox.grid._FocusManager.next";a:4:{s:9:"prototype";s:24:"dojox.grid._FocusManager";s:4:"type";s:8:"Function";s:6:"source";s:529:" if(this.cell){ var row=this.rowIndex, col=this.cell.index+1, cc=this.grid.layout.cellCount-1, rc=this.grid.rowCount-1; if(col > cc){ col = 0; row++; } if(row > rc){ col = cc; row = rc; } if(this.grid.edit.isEditing()){ //when editing, only navigate to editable cells var nextCell = this.grid.getCell(col); if (!this.isLastFocusCell() && !nextCell.editable){ this.cell=nextCell; this.rowIndex=row; this.next(); return; } } this.setFocusIndex(row, col); }";s:7:"summary";s:20:"focus next grid cell";}s:33:"dojox.grid._FocusManager.previous";a:4:{s:9:"prototype";s:24:"dojox.grid._FocusManager";s:4:"type";s:8:"Function";s:6:"source";s:515:" if(this.cell){ var row=(this.rowIndex || 0), col=(this.cell.index || 0) - 1; if(col < 0){ col = this.grid.layout.cellCount-1; row--; } if(row < 0){ row = 0; col = 0; } if(this.grid.edit.isEditing()){ //when editing, only navigate to editable cells var prevCell = this.grid.getCell(col); if (!this.isFirstFocusCell() && !prevCell.editable){ this.cell=prevCell; this.rowIndex=row; this.previous(); return; } } this.setFocusIndex(row, col); }";s:7:"summary";s:24:"focus previous grid cell";}s:29:"dojox.grid._FocusManager.move";a:5:{s:9:"prototype";s:24:"dojox.grid._FocusManager";s:4:"type";s:8:"Function";s:10:"parameters";a:2:{s:10:"inRowDelta";a:2:{s:4:"type";s:3:"int";s:7:"summary";s:36:"vertical distance from current focus";}s:10:"inColDelta";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:10081:"dojo.provide("dojox.grid._FocusManager"); dojo.require("dojox.grid.util"); // focus management dojo.declare("dojox.grid._FocusManager", null, { // summary: // Controls grid cell focus. Owned by grid and used internally for focusing. // Note: grid cell actually receives keyboard input only when cell is being edited. constructor: function(inGrid){ this.grid = inGrid; this.cell = null; this.rowIndex = -1; this._connects = []; this._connects.push(dojo.connect(this.grid.domNode, "onfocus", this, "doFocus")); this._connects.push(dojo.connect(this.grid.domNode, "onblur", this, "doBlur")); this._connects.push(dojo.connect(this.grid.lastFocusNode, "onfocus", this, "doLastNodeFocus")); this._connects.push(dojo.connect(this.grid.lastFocusNode, "onblur", this, "doLastNodeBlur")); this._connects.push(dojo.connect(this.grid,"_onFetchComplete", this, "_delayedCellFocus")); this._connects.push(dojo.connect(this.grid,"postrender", this, "_delayedHeaderFocus")); }, destroy: function(){ dojo.forEach(this._connects, dojo.disconnect); delete this.grid; delete this.cell; }, _colHeadNode: null, _colHeadFocusIdx: null, tabbingOut: false, focusClass: "dojoxGridCellFocus", focusView: null, initFocusView: function(){ this.focusView = this.grid.views.getFirstScrollingView() || this.focusView; this._initColumnHeaders(); }, isFocusCell: function(inCell, inRowIndex){ // summary: // states if the given cell is focused // inCell: object // grid cell object // inRowIndex: int // grid row index // returns: // true of the given grid cell is focused return (this.cell == inCell) && (this.rowIndex == inRowIndex); }, isLastFocusCell: function(){ if(this.cell){ return (this.rowIndex == this.grid.rowCount-1) && (this.cell.index == this.grid.layout.cellCount-1); } return false; }, isFirstFocusCell: function(){ if(this.cell){ return (this.rowIndex == 0) && (this.cell.index == 0); } return false; }, isNoFocusCell: function(){ return (this.rowIndex < 0) || !this.cell; }, isNavHeader: function(){ // summary: // states whether currently navigating among column headers. // returns: // true if focus is on a column header; false otherwise. return (!!this._colHeadNode); }, getHeaderIndex: function(){ // summary: // if one of the column headers currently has focus, return its index. // returns: // index of the focused column header, or -1 if none have focus. if(this._colHeadNode){ return dojo.indexOf(this._findHeaderCells(), this._colHeadNode); }else{ return -1; } }, _focusifyCellNode: function(inBork){ var n = this.cell && this.cell.getNode(this.rowIndex); if(n){ dojo.toggleClass(n, this.focusClass, inBork); if(inBork){ var sl = this.scrollIntoView(); try{ if(!this.grid.edit.isEditing()){ dojox.grid.util.fire(n, "focus"); if(sl){ this.cell.view.scrollboxNode.scrollLeft = sl; } } }catch(e){} } } }, _delayedCellFocus: function(){ if(this.isNavHeader()){ return; } var n = this.cell && this.cell.getNode(this.rowIndex); if(n){ try{ if(!this.grid.edit.isEditing()){ dojo.toggleClass(n, this.focusClass, true); dojox.grid.util.fire(n, "focus"); } } catch(e){} } }, _delayedHeaderFocus: function(){ if(this.isNavHeader()){ this.focusHeader(); //this may need clickSelect? } }, _initColumnHeaders: function(){ this._connects.push(dojo.connect(this.grid.viewsHeaderNode, "onblur", this, "doBlurHeader")); var headers = this._findHeaderCells(); for(var i = 0; i < headers.length; i++){ this._connects.push(dojo.connect(headers[i], "onfocus", this, "doColHeaderFocus")); this._connects.push(dojo.connect(headers[i], "onblur", this, "doColHeaderBlur")); } }, _findHeaderCells: function(){ // This should be a one liner: // dojo.query("th[tabindex=-1]", this.grid.viewsHeaderNode); // But there is a bug in dojo.query() for IE -- see trac #7037. var allHeads = dojo.query("th", this.grid.viewsHeaderNode); var headers = []; for (var i = 0; i < allHeads.length; i++){ var aHead = allHeads[i]; var hasTabIdx = dojo.hasAttr(aHead, "tabindex"); var tabindex = dojo.attr(aHead, "tabindex"); if (hasTabIdx && tabindex < 0) { headers.push(aHead); } } return headers; }, scrollIntoView: function(){ var info = (this.cell ? this._scrollInfo(this.cell) : null); if(!info || !info.s){ return null; } var rt = this.grid.scroller.findScrollTop(this.rowIndex); // place cell within horizontal view if(info.n && info.sr){ if(info.n.offsetLeft + info.n.offsetWidth > info.sr.l + info.sr.w){ info.s.scrollLeft = info.n.offsetLeft + info.n.offsetWidth - info.sr.w; }else if(info.n.offsetLeft < info.sr.l){ info.s.scrollLeft = info.n.offsetLeft; } } // place cell within vertical view if(info.r && info.sr){ if(rt + info.r.offsetHeight > info.sr.t + info.sr.h){ this.grid.setScrollTop(rt + info.r.offsetHeight - info.sr.h); }else if(rt < info.sr.t){ this.grid.setScrollTop(rt); } } return info.s.scrollLeft; }, _scrollInfo: function(cell, domNode){ if(cell){ var cl = cell, sbn = cl.view.scrollboxNode, sbnr = { w: sbn.clientWidth, l: sbn.scrollLeft, t: sbn.scrollTop, h: sbn.clientHeight }, rn = cl.view.getRowNode(this.rowIndex); return { c: cl, s: sbn, sr: sbnr, n: (domNode ? domNode : cell.getNode(this.rowIndex)), r: rn }; } return null; }, _scrollHeader: function(currentIdx){ var info = null; if(this._colHeadNode){ var cell = this.grid.getCell(currentIdx); info = this._scrollInfo(cell, cell.getNode(0)); } if(info && info.s && info.sr && info.n){ // scroll horizontally as needed. var scroll = info.sr.l + info.sr.w; if(info.n.offsetLeft + info.n.offsetWidth > scroll){ info.s.scrollLeft = info.n.offsetLeft + info.n.offsetWidth - info.sr.w; }else if(info.n.offsetLeft < info.sr.l){ info.s.scrollLeft = info.n.offsetLeft; }else if(dojo.isIE <= 7 && cell && cell.view.headerNode){ // Trac 7158: scroll dojoxGridHeader for IE7 and lower cell.view.headerNode.scrollLeft = info.s.scrollLeft; } } }, styleRow: function(inRow){ return; }, setFocusIndex: function(inRowIndex, inCellIndex){ // summary: // focuses the given grid cell // inRowIndex: int // grid row index // inCellIndex: int // grid cell index this.setFocusCell(this.grid.getCell(inCellIndex), inRowIndex); }, setFocusCell: function(inCell, inRowIndex){ // summary: // focuses the given grid cell // inCell: object // grid cell object // inRowIndex: int // grid row index if(inCell && !this.isFocusCell(inCell, inRowIndex)){ this.tabbingOut = false; this._colHeadNode = this._colHeadFocusIdx = null; this.focusGridView(); this._focusifyCellNode(false); this.cell = inCell; this.rowIndex = inRowIndex; this._focusifyCellNode(true); } // even if this cell isFocusCell, the document focus may need to be rejiggered // call opera on delay to prevent keypress from altering focus if(dojo.isOpera){ setTimeout(dojo.hitch(this.grid, 'onCellFocus', this.cell, this.rowIndex), 1); }else{ this.grid.onCellFocus(this.cell, this.rowIndex); } }, next: function(){ // summary: // focus next grid cell if(this.cell){ var row=this.rowIndex, col=this.cell.index+1, cc=this.grid.layout.cellCount-1, rc=this.grid.rowCount-1; if(col > cc){ col = 0; row++; } if(row > rc){ col = cc; row = rc; } if(this.grid.edit.isEditing()){ //when editing, only navigate to editable cells var nextCell = this.grid.getCell(col); if (!this.isLastFocusCell() && !nextCell.editable){ this.cell=nextCell; this.rowIndex=row; this.next(); return; } } this.setFocusIndex(row, col); } }, previous: function(){ // summary: // focus previous grid cell if(this.cell){ var row=(this.rowIndex || 0), col=(this.cell.index || 0) - 1; if(col < 0){ col = this.grid.layout.cellCount-1; row--; } if(row < 0){ row = 0; col = 0; } if(this.grid.edit.isEditing()){ //when editing, only navigate to editable cells var prevCell = this.grid.getCell(col); if (!this.isFirstFocusCell() && !prevCell.editable){ this.cell=prevCell; this.rowIndex=row; this.previous(); return; } } this.setFocusIndex(row, col); } }, move: function(inRowDelta, inColDelta) { // summary: // focus grid cell or column header based on position relative to current focus // inRowDelta: int // vertical distance from current focus // inColDelta: int // horizontal distance from current focus // Handle column headers. if(this.isNavHeader()){ var headers = this._findHeaderCells(); var currentIdx = dojo.indexOf(headers, this._colHeadNode); currentIdx += inColDelta; if((currentIdx >= 0) && (currentIdx < headers.length)){ this._colHeadNode = headers[currentIdx]; this._colHeadFocusIdx = currentIdx; this._scrollHeader(currentIdx); this._colHeadNode.focus(); } }else{ if(this.cell){ // Handle grid proper. var sc = this.grid.scroller, r = this.rowIndex, rc = this.grid.rowCount-1, row = Math.min(rc, Math.max(0, r+inRowDelta)); if(inRowDelta){ if(inRowDelta>0){ if(row > sc.getLastPageRow(sc.page)){ //need to load additional data, let scroller do that this.grid.setScrollTop(this.grid.scrollTop+sc.findScrollTop(row)-sc.findScrollTop(r)); } }else if(inRowDelta<0){ if(row <= sc.getPageRow(sc.page)){ //need to load additional data, let scroller do that this.grid.setScrollTop(this.grid.scrollTop-sc.findScrollTop(r)-sc.findScrollTop(row)); } } } var cc = this.grid.layout.cellCount-1, i = this.cell.index, col = Math.min(cc, Math.max(0, i+inColDelta)); this.setFocusIndex(row, col); if(inRowDelta){ this.grid.updateRow(r); } } }";s:7:"summary";s:76:"focus grid cell or column header based on position relative to current focus";}s:36:"dojox.grid._FocusManager.previousKey";a:5:{s:9:"prototype";s:24:"dojox.grid._FocusManager";s:4:"type";s:8:"Function";s:10:"parameters";a:1:{s:1:"e";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:201:" if(this.grid.edit.isEditing()){ dojo.stopEvent(e); this.previous(); }else if(!this.isNavHeader()){ this.focusHeader(); dojo.stopEvent(e); }else{ this.tabOut(this.grid.domNode); }";s:7:"summary";s:0:"";}s:32:"dojox.grid._FocusManager.nextKey";a:5:{s:9:"prototype";s:24:"dojox.grid._FocusManager";s:4:"type";s:8:"Function";s:10:"parameters";a:1:{s:1:"e";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:868:" var isEmpty = this.grid.rowCount == 0; if(e.target === this.grid.domNode){ this.focusHeader(); dojo.stopEvent(e); }else if(this.isNavHeader()){ // if tabbing from col header, then go to grid proper. If grid is empty this.grid.rowCount == 0 this._colHeadNode = this._colHeadFocusIdx= null; if(this.isNoFocusCell() && !isEmpty){ this.setFocusIndex(0, 0); }else if(this.cell && !isEmpty){ if(this.focusView && !this.focusView.rowNodes[this.rowIndex]){ // if rowNode for current index is undefined (likely as a result of a sort and because of #7304) // scroll to that row this.grid.scrollToRow(this.rowIndex); } this.focusGrid(); }else{ this.tabOut(this.grid.lastFocusNode); } }else if(this.grid.edit.isEditing()){ dojo.stopEvent(e); this.next(); }else{ this.tabOut(this.grid.lastFocusNode); }";s:7:"summary";s:0:"";}s:31:"dojox.grid._FocusManager.tabOut";a:5:{s:9:"prototype";s:24:"dojox.grid._FocusManager";s:4:"type";s:8:"Function";s:10:"parameters";a:1:{s:11:"inFocusNode";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:48:" this.tabbingOut = true; inFocusNode.focus();";s:7:"summary";s:0:"";}s:38:"dojox.grid._FocusManager.focusGridView";a:4:{s:9:"prototype";s:24:"dojox.grid._FocusManager";s:4:"type";s:8:"Function";s:6:"source";s:48:" dojox.grid.util.fire(this.focusView, "focus");";s:7:"summary";s:0:"";}s:34:"dojox.grid._FocusManager.focusGrid";a:5:{s:9:"prototype";s:24:"dojox.grid._FocusManager";s:4:"type";s:8:"Function";s:10:"parameters";a:1:{s:15:"inSkipFocusCell";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:55:" this.focusGridView(); this._focusifyCellNode(true);";s:7:"summary";s:0:"";}s:36:"dojox.grid._FocusManager.focusHeader";a:4:{s:9:"prototype";s:24:"dojox.grid._FocusManager";s:4:"type";s:8:"Function";s:6:"source";s:383:" var headerNodes = this._findHeaderCells(); if (!this._colHeadFocusIdx) { if (this.isNoFocusCell()) { this._colHeadFocusIdx = 0; } else { this._colHeadFocusIdx = this.cell.index; } } this._colHeadNode = headerNodes[this._colHeadFocusIdx]; if(this._colHeadNode){ dojox.grid.util.fire(this._colHeadNode, "focus"); this._focusifyCellNode(false); }";s:7:"summary";s:0:"";}s:32:"dojox.grid._FocusManager.doFocus";a:5:{s:9:"prototype";s:24:"dojox.grid._FocusManager";s:4:"type";s:8:"Function";s:10:"parameters";a:1:{s:1:"e";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:12189:"dojo.provide("dojox.grid._FocusManager"); dojo.require("dojox.grid.util"); // focus management dojo.declare("dojox.grid._FocusManager", null, { // summary: // Controls grid cell focus. Owned by grid and used internally for focusing. // Note: grid cell actually receives keyboard input only when cell is being edited. constructor: function(inGrid){ this.grid = inGrid; this.cell = null; this.rowIndex = -1; this._connects = []; this._connects.push(dojo.connect(this.grid.domNode, "onfocus", this, "doFocus")); this._connects.push(dojo.connect(this.grid.domNode, "onblur", this, "doBlur")); this._connects.push(dojo.connect(this.grid.lastFocusNode, "onfocus", this, "doLastNodeFocus")); this._connects.push(dojo.connect(this.grid.lastFocusNode, "onblur", this, "doLastNodeBlur")); this._connects.push(dojo.connect(this.grid,"_onFetchComplete", this, "_delayedCellFocus")); this._connects.push(dojo.connect(this.grid,"postrender", this, "_delayedHeaderFocus")); }, destroy: function(){ dojo.forEach(this._connects, dojo.disconnect); delete this.grid; delete this.cell; }, _colHeadNode: null, _colHeadFocusIdx: null, tabbingOut: false, focusClass: "dojoxGridCellFocus", focusView: null, initFocusView: function(){ this.focusView = this.grid.views.getFirstScrollingView() || this.focusView; this._initColumnHeaders(); }, isFocusCell: function(inCell, inRowIndex){ // summary: // states if the given cell is focused // inCell: object // grid cell object // inRowIndex: int // grid row index // returns: // true of the given grid cell is focused return (this.cell == inCell) && (this.rowIndex == inRowIndex); }, isLastFocusCell: function(){ if(this.cell){ return (this.rowIndex == this.grid.rowCount-1) && (this.cell.index == this.grid.layout.cellCount-1); } return false; }, isFirstFocusCell: function(){ if(this.cell){ return (this.rowIndex == 0) && (this.cell.index == 0); } return false; }, isNoFocusCell: function(){ return (this.rowIndex < 0) || !this.cell; }, isNavHeader: function(){ // summary: // states whether currently navigating among column headers. // returns: // true if focus is on a column header; false otherwise. return (!!this._colHeadNode); }, getHeaderIndex: function(){ // summary: // if one of the column headers currently has focus, return its index. // returns: // index of the focused column header, or -1 if none have focus. if(this._colHeadNode){ return dojo.indexOf(this._findHeaderCells(), this._colHeadNode); }else{ return -1; } }, _focusifyCellNode: function(inBork){ var n = this.cell && this.cell.getNode(this.rowIndex); if(n){ dojo.toggleClass(n, this.focusClass, inBork); if(inBork){ var sl = this.scrollIntoView(); try{ if(!this.grid.edit.isEditing()){ dojox.grid.util.fire(n, "focus"); if(sl){ this.cell.view.scrollboxNode.scrollLeft = sl; } } }catch(e){} } } }, _delayedCellFocus: function(){ if(this.isNavHeader()){ return; } var n = this.cell && this.cell.getNode(this.rowIndex); if(n){ try{ if(!this.grid.edit.isEditing()){ dojo.toggleClass(n, this.focusClass, true); dojox.grid.util.fire(n, "focus"); } } catch(e){} } }, _delayedHeaderFocus: function(){ if(this.isNavHeader()){ this.focusHeader(); //this may need clickSelect? } }, _initColumnHeaders: function(){ this._connects.push(dojo.connect(this.grid.viewsHeaderNode, "onblur", this, "doBlurHeader")); var headers = this._findHeaderCells(); for(var i = 0; i < headers.length; i++){ this._connects.push(dojo.connect(headers[i], "onfocus", this, "doColHeaderFocus")); this._connects.push(dojo.connect(headers[i], "onblur", this, "doColHeaderBlur")); } }, _findHeaderCells: function(){ // This should be a one liner: // dojo.query("th[tabindex=-1]", this.grid.viewsHeaderNode); // But there is a bug in dojo.query() for IE -- see trac #7037. var allHeads = dojo.query("th", this.grid.viewsHeaderNode); var headers = []; for (var i = 0; i < allHeads.length; i++){ var aHead = allHeads[i]; var hasTabIdx = dojo.hasAttr(aHead, "tabindex"); var tabindex = dojo.attr(aHead, "tabindex"); if (hasTabIdx && tabindex < 0) { headers.push(aHead); } } return headers; }, scrollIntoView: function(){ var info = (this.cell ? this._scrollInfo(this.cell) : null); if(!info || !info.s){ return null; } var rt = this.grid.scroller.findScrollTop(this.rowIndex); // place cell within horizontal view if(info.n && info.sr){ if(info.n.offsetLeft + info.n.offsetWidth > info.sr.l + info.sr.w){ info.s.scrollLeft = info.n.offsetLeft + info.n.offsetWidth - info.sr.w; }else if(info.n.offsetLeft < info.sr.l){ info.s.scrollLeft = info.n.offsetLeft; } } // place cell within vertical view if(info.r && info.sr){ if(rt + info.r.offsetHeight > info.sr.t + info.sr.h){ this.grid.setScrollTop(rt + info.r.offsetHeight - info.sr.h); }else if(rt < info.sr.t){ this.grid.setScrollTop(rt); } } return info.s.scrollLeft; }, _scrollInfo: function(cell, domNode){ if(cell){ var cl = cell, sbn = cl.view.scrollboxNode, sbnr = { w: sbn.clientWidth, l: sbn.scrollLeft, t: sbn.scrollTop, h: sbn.clientHeight }, rn = cl.view.getRowNode(this.rowIndex); return { c: cl, s: sbn, sr: sbnr, n: (domNode ? domNode : cell.getNode(this.rowIndex)), r: rn }; } return null; }, _scrollHeader: function(currentIdx){ var info = null; if(this._colHeadNode){ var cell = this.grid.getCell(currentIdx); info = this._scrollInfo(cell, cell.getNode(0)); } if(info && info.s && info.sr && info.n){ // scroll horizontally as needed. var scroll = info.sr.l + info.sr.w; if(info.n.offsetLeft + info.n.offsetWidth > scroll){ info.s.scrollLeft = info.n.offsetLeft + info.n.offsetWidth - info.sr.w; }else if(info.n.offsetLeft < info.sr.l){ info.s.scrollLeft = info.n.offsetLeft; }else if(dojo.isIE <= 7 && cell && cell.view.headerNode){ // Trac 7158: scroll dojoxGridHeader for IE7 and lower cell.view.headerNode.scrollLeft = info.s.scrollLeft; } } }, styleRow: function(inRow){ return; }, setFocusIndex: function(inRowIndex, inCellIndex){ // summary: // focuses the given grid cell // inRowIndex: int // grid row index // inCellIndex: int // grid cell index this.setFocusCell(this.grid.getCell(inCellIndex), inRowIndex); }, setFocusCell: function(inCell, inRowIndex){ // summary: // focuses the given grid cell // inCell: object // grid cell object // inRowIndex: int // grid row index if(inCell && !this.isFocusCell(inCell, inRowIndex)){ this.tabbingOut = false; this._colHeadNode = this._colHeadFocusIdx = null; this.focusGridView(); this._focusifyCellNode(false); this.cell = inCell; this.rowIndex = inRowIndex; this._focusifyCellNode(true); } // even if this cell isFocusCell, the document focus may need to be rejiggered // call opera on delay to prevent keypress from altering focus if(dojo.isOpera){ setTimeout(dojo.hitch(this.grid, 'onCellFocus', this.cell, this.rowIndex), 1); }else{ this.grid.onCellFocus(this.cell, this.rowIndex); } }, next: function(){ // summary: // focus next grid cell if(this.cell){ var row=this.rowIndex, col=this.cell.index+1, cc=this.grid.layout.cellCount-1, rc=this.grid.rowCount-1; if(col > cc){ col = 0; row++; } if(row > rc){ col = cc; row = rc; } if(this.grid.edit.isEditing()){ //when editing, only navigate to editable cells var nextCell = this.grid.getCell(col); if (!this.isLastFocusCell() && !nextCell.editable){ this.cell=nextCell; this.rowIndex=row; this.next(); return; } } this.setFocusIndex(row, col); } }, previous: function(){ // summary: // focus previous grid cell if(this.cell){ var row=(this.rowIndex || 0), col=(this.cell.index || 0) - 1; if(col < 0){ col = this.grid.layout.cellCount-1; row--; } if(row < 0){ row = 0; col = 0; } if(this.grid.edit.isEditing()){ //when editing, only navigate to editable cells var prevCell = this.grid.getCell(col); if (!this.isFirstFocusCell() && !prevCell.editable){ this.cell=prevCell; this.rowIndex=row; this.previous(); return; } } this.setFocusIndex(row, col); } }, move: function(inRowDelta, inColDelta) { // summary: // focus grid cell or column header based on position relative to current focus // inRowDelta: int // vertical distance from current focus // inColDelta: int // horizontal distance from current focus // Handle column headers. if(this.isNavHeader()){ var headers = this._findHeaderCells(); var currentIdx = dojo.indexOf(headers, this._colHeadNode); currentIdx += inColDelta; if((currentIdx >= 0) && (currentIdx < headers.length)){ this._colHeadNode = headers[currentIdx]; this._colHeadFocusIdx = currentIdx; this._scrollHeader(currentIdx); this._colHeadNode.focus(); } }else{ if(this.cell){ // Handle grid proper. var sc = this.grid.scroller, r = this.rowIndex, rc = this.grid.rowCount-1, row = Math.min(rc, Math.max(0, r+inRowDelta)); if(inRowDelta){ if(inRowDelta>0){ if(row > sc.getLastPageRow(sc.page)){ //need to load additional data, let scroller do that this.grid.setScrollTop(this.grid.scrollTop+sc.findScrollTop(row)-sc.findScrollTop(r)); } }else if(inRowDelta<0){ if(row <= sc.getPageRow(sc.page)){ //need to load additional data, let scroller do that this.grid.setScrollTop(this.grid.scrollTop-sc.findScrollTop(r)-sc.findScrollTop(row)); } } } var cc = this.grid.layout.cellCount-1, i = this.cell.index, col = Math.min(cc, Math.max(0, i+inColDelta)); this.setFocusIndex(row, col); if(inRowDelta){ this.grid.updateRow(r); } } } }, previousKey: function(e){ if(this.grid.edit.isEditing()){ dojo.stopEvent(e); this.previous(); }else if(!this.isNavHeader()){ this.focusHeader(); dojo.stopEvent(e); }else{ this.tabOut(this.grid.domNode); } }, nextKey: function(e) { var isEmpty = this.grid.rowCount == 0; if(e.target === this.grid.domNode){ this.focusHeader(); dojo.stopEvent(e); }else if(this.isNavHeader()){ // if tabbing from col header, then go to grid proper. If grid is empty this.grid.rowCount == 0 this._colHeadNode = this._colHeadFocusIdx= null; if(this.isNoFocusCell() && !isEmpty){ this.setFocusIndex(0, 0); }else if(this.cell && !isEmpty){ if(this.focusView && !this.focusView.rowNodes[this.rowIndex]){ // if rowNode for current index is undefined (likely as a result of a sort and because of #7304) // scroll to that row this.grid.scrollToRow(this.rowIndex); } this.focusGrid(); }else{ this.tabOut(this.grid.lastFocusNode); } }else if(this.grid.edit.isEditing()){ dojo.stopEvent(e); this.next(); }else{ this.tabOut(this.grid.lastFocusNode); } }, tabOut: function(inFocusNode){ this.tabbingOut = true; inFocusNode.focus(); }, focusGridView: function(){ dojox.grid.util.fire(this.focusView, "focus"); }, focusGrid: function(inSkipFocusCell){ this.focusGridView(); this._focusifyCellNode(true); }, focusHeader: function(){ var headerNodes = this._findHeaderCells(); if (!this._colHeadFocusIdx) { if (this.isNoFocusCell()) { this._colHeadFocusIdx = 0; } else { this._colHeadFocusIdx = this.cell.index; } } this._colHeadNode = headerNodes[this._colHeadFocusIdx]; if(this._colHeadNode){ dojox.grid.util.fire(this._colHeadNode, "focus"); this._focusifyCellNode(false); } }, doFocus: function(e){ // trap focus only for grid dom node if(e && e.target != e.currentTarget){ dojo.stopEvent(e); return; } // do not focus for scrolling if grid is about to blur if(!this.tabbingOut){ this.focusHeader(); } this.tabbingOut = false; dojo.stopEvent(e);";s:7:"summary";s:0:"";}s:31:"dojox.grid._FocusManager.doBlur";a:5:{s:9:"prototype";s:24:"dojox.grid._FocusManager";s:4:"type";s:8:"Function";s:10:"parameters";a:1:{s:1:"e";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:27:" dojo.stopEvent(e); // FF2";s:7:"summary";s:0:"";}s:37:"dojox.grid._FocusManager.doBlurHeader";a:5:{s:9:"prototype";s:24:"dojox.grid._FocusManager";s:4:"type";s:8:"Function";s:10:"parameters";a:1:{s:1:"e";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:27:" dojo.stopEvent(e); // FF2";s:7:"summary";s:0:"";}s:40:"dojox.grid._FocusManager.doLastNodeFocus";a:5:{s:9:"prototype";s:24:"dojox.grid._FocusManager";s:4:"type";s:8:"Function";s:10:"parameters";a:1:{s:1:"e";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:282:" if (this.tabbingOut){ this._focusifyCellNode(false); }else if(this.grid.rowCount >0){ if (this.isNoFocusCell()){ this.setFocusIndex(0,0); } this._focusifyCellNode(true); }else { this.focusHeader(); } this.tabbingOut = false; dojo.stopEvent(e); // FF2";s:7:"summary";s:0:"";}s:39:"dojox.grid._FocusManager.doLastNodeBlur";a:5:{s:9:"prototype";s:24:"dojox.grid._FocusManager";s:4:"type";s:8:"Function";s:10:"parameters";a:1:{s:1:"e";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:28:" dojo.stopEvent(e); // FF2";s:7:"summary";s:0:"";}s:41:"dojox.grid._FocusManager.doColHeaderFocus";a:5:{s:9:"prototype";s:24:"dojox.grid._FocusManager";s:4:"type";s:8:"Function";s:10:"parameters";a:1:{s:1:"e";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:97:" dojo.toggleClass(e.target, this.focusClass, true); this._scrollHeader(this.getHeaderIndex());";s:7:"summary";s:0:"";}s:40:"dojox.grid._FocusManager.doColHeaderBlur";a:5:{s:9:"prototype";s:24:"dojox.grid._FocusManager";s:4:"type";s:8:"Function";s:10:"parameters";a:1:{s:1:"e";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:53:" dojo.toggleClass(e.target, this.focusClass, false);";s:7:"summary";s:0:"";}s:29:"dojox.grid._FocusManager.cell";a:2:{s:8:"instance";s:24:"dojox.grid._FocusManager";s:7:"summary";s:0:"";}s:33:"dojox.grid._FocusManager.rowIndex";a:2:{s:8:"instance";s:24:"dojox.grid._FocusManager";s:7:"summary";s:0:"";}s:59:"dojox.grid._FocusManager.cell.view.scrollboxNode.scrollLeft";a:2:{s:8:"instance";s:24:"dojox.grid._FocusManager";s:7:"summary";s:0:"";}s:38:"dojox.grid._FocusManager.grid.rowCount";a:2:{s:8:"instance";s:24:"dojox.grid._FocusManager";s:7:"summary";s:0:"";}s:29:"dojox.grid._FocusManager.grid";a:2:{s:8:"instance";s:24:"dojox.grid._FocusManager";s:7:"summary";s:0:"";}s:34:"dojox.grid._FocusManager._connects";a:3:{s:8:"instance";s:24:"dojox.grid._FocusManager";s:7:"private";b:1;s:7:"summary";s:0:"";}s:10:"dojox.grid";a:2:{s:4:"type";s:6:"Object";s:7:"summary";s:0:"";}s:5:"dojox";a:2:{s:4:"type";s:6:"Object";s:7:"summary";s:0:"";}}