a:94:{s:9:"#provides";s:16:"dojox.grid._View";s:9:"#resource";s:13:"grid/_View.js";s:9:"#requires";a:7:{i:0;a:3:{i:0;s:6:"common";i:1;s:13:"dijit._Widget";i:2;s:5:"dijit";}i:1;a:3:{i:0;s:6:"common";i:1;s:16:"dijit._Templated";i:2;s:5:"dijit";}i:2;a:2:{i:0;s:6:"common";i:1;s:19:"dojox.grid._Builder";}i:3;a:2:{i:0;s:6:"common";i:1;s:18:"dojox.html.metrics";}i:4;a:2:{i:0;s:6:"common";i:1;s:15:"dojox.grid.util";}i:5;a:3:{i:0;s:6:"common";i:1;s:15:"dojo.dnd.Source";i:2;s:4:"dojo";}i:6;a:3:{i:0;s:6:"common";i:1;s:16:"dojo.dnd.Manager";i:2;s:4:"dojo";}}s:16:"dojox.grid._View";a:5:{s:4:"type";s:8:"Function";s:6:"chains";a:2:{s:9:"prototype";a:1:{i:0;s:13:"dijit._Widget";}s:4:"call";a:2:{i:0;s:13:"dijit._Widget";i:1;s:16:"dijit._Templated";}}s:6:"mixins";a:1:{s:9:"prototype";a:1:{i:0;s:26:"dijit._Templated.prototype";}}s:7:"summary";s:228:"A collection of grid columns. A grid is comprised of a set of views that stack horizontally. Grid creates views automatically based on grid's layout structure. Users should typically not need to access individual views directly.";s:9:"classlike";b:1;}s:29:"dojox.grid._View.defaultWidth";a:3:{s:9:"prototype";s:16:"dojox.grid._View";s:4:"type";s:6:"String";s:7:"summary";s:25:"Default width of the view";}s:26:"dojox.grid._View.viewWidth";a:4:{s:9:"prototype";s:16:"dojox.grid._View";s:8:"instance";s:16:"dojox.grid._View";s:4:"type";s:6:"String";s:7:"summary";s:37:"Width for the view, in valid css unit";}s:29:"dojox.grid._View.templatePath";a:2:{s:9:"prototype";s:16:"dojox.grid._View";s:7:"summary";s:0:"";}s:26:"dojox.grid._View.themeable";a:2:{s:9:"prototype";s:16:"dojox.grid._View";s:7:"summary";s:0:"";}s:25:"dojox.grid._View.classTag";a:2:{s:9:"prototype";s:16:"dojox.grid._View";s:7:"summary";s:0:"";}s:29:"dojox.grid._View.marginBottom";a:2:{s:9:"prototype";s:16:"dojox.grid._View";s:7:"summary";s:0:"";}s:23:"dojox.grid._View.rowPad";a:2:{s:9:"prototype";s:16:"dojox.grid._View";s:7:"summary";s:0:"";}s:32:"dojox.grid._View._togglingColumn";a:5:{s:9:"prototype";s:16:"dojox.grid._View";s:8:"instance";s:16:"dojox.grid._View";s:4:"type";s:3:"int";s:7:"summary";s:47:"Width of the column being toggled (-1 for none)";s:7:"private";b:1;}s:36:"dojox.grid._View.postMixInProperties";a:4:{s:9:"prototype";s:16:"dojox.grid._View";s:4:"type";s:8:"Function";s:6:"source";s:22:" this.rowNodes = [];";s:7:"summary";s:0:"";}s:27:"dojox.grid._View.postCreate";a:4:{s:9:"prototype";s:16:"dojox.grid._View";s:4:"type";s:8:"Function";s:6:"source";s:647:" this.connect(this.scrollboxNode,"onscroll","doscroll"); dojox.grid.util.funnelEvents(this.contentNode, this, "doContentEvent", [ 'mouseover', 'mouseout', 'click', 'dblclick', 'contextmenu', 'mousedown' ]); dojox.grid.util.funnelEvents(this.headerNode, this, "doHeaderEvent", [ 'dblclick', 'mouseover', 'mouseout', 'mousemove', 'mousedown', 'click', 'contextmenu' ]); this.content = new dojox.grid._ContentBuilder(this); this.header = new dojox.grid._HeaderBuilder(this); //BiDi: in RTL case, style width='9000em' causes scrolling problem in head node if(!dojo._isBodyLtr()){ this.headerNodeContainer.style.width = ""; }";s:7:"summary";s:0:"";}s:24:"dojox.grid._View.destroy";a:4:{s:9:"prototype";s:16:"dojox.grid._View";s:4:"type";s:8:"Function";s:6:"source";s:211:" dojo.destroy(this.headerNode); delete this.headerNode; dojo.forEach(this.rowNodes, dojo.destroy); this.rowNodes = []; if(this.source){ this.source.destroy(); } this.inherited(arguments);";s:7:"summary";s:0:"";}s:22:"dojox.grid._View.focus";a:4:{s:9:"prototype";s:16:"dojox.grid._View";s:4:"type";s:8:"Function";s:6:"source";s:118:" if(dojo.isWebKit || dojo.isOpera){ this.hiddenFocusNode.focus(); }else{ this.scrollboxNode.focus(); }";s:7:"summary";s:0:"";}s:29:"dojox.grid._View.setStructure";a:5:{s:9:"prototype";s:16:"dojox.grid._View";s:4:"type";s:8:"Function";s:10:"parameters";a:1:{s:11:"inStructure";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:623:" var vs = (this.structure = inStructure); // FIXME: similar logic is duplicated in layout if(vs.width && !isNaN(vs.width)){ this.viewWidth = vs.width + 'em'; }else{ this.viewWidth = vs.width || (vs.noscroll ? 'auto' : this.viewWidth); //|| this.defaultWidth; } this.onBeforeRow = vs.onBeforeRow; this.onAfterRow = vs.onAfterRow; this.noscroll = vs.noscroll; if(this.noscroll){ this.scrollboxNode.style.overflow = "hidden"; } this.simpleStructure = Boolean(vs.cells.length == 1); // bookkeeping this.testFlexCells(); // accomodate new structure this.updateStructure();";s:7:"summary";s:0:"";}s:30:"dojox.grid._View.testFlexCells";a:4:{s:9:"prototype";s:16:"dojox.grid._View";s:4:"type";s:8:"Function";s:6:"source";s:3403:"dojo.provide("dojox.grid._View"); dojo.require("dijit._Widget"); dojo.require("dijit._Templated"); dojo.require("dojox.grid._Builder"); dojo.require("dojox.html.metrics"); dojo.require("dojox.grid.util"); dojo.require("dojo.dnd.Source"); dojo.require("dojo.dnd.Manager"); (function(){ // private var getStyleText = function(inNode, inStyleText){ return inNode.style.cssText == undefined ? inNode.getAttribute("style") : inNode.style.cssText; }; // public dojo.declare('dojox.grid._View', [dijit._Widget, dijit._Templated], { // summary: // A collection of grid columns. A grid is comprised of a set of views that stack horizontally. // Grid creates views automatically based on grid's layout structure. // Users should typically not need to access individual views directly. // // defaultWidth: String // Default width of the view defaultWidth: "18em", // viewWidth: String // Width for the view, in valid css unit viewWidth: "", templatePath: dojo.moduleUrl("dojox.grid","resources/View.html"), themeable: false, classTag: 'dojoxGrid', marginBottom: 0, rowPad: 2, // _togglingColumn: int // Width of the column being toggled (-1 for none) _togglingColumn: -1, postMixInProperties: function(){ this.rowNodes = []; }, postCreate: function(){ this.connect(this.scrollboxNode,"onscroll","doscroll"); dojox.grid.util.funnelEvents(this.contentNode, this, "doContentEvent", [ 'mouseover', 'mouseout', 'click', 'dblclick', 'contextmenu', 'mousedown' ]); dojox.grid.util.funnelEvents(this.headerNode, this, "doHeaderEvent", [ 'dblclick', 'mouseover', 'mouseout', 'mousemove', 'mousedown', 'click', 'contextmenu' ]); this.content = new dojox.grid._ContentBuilder(this); this.header = new dojox.grid._HeaderBuilder(this); //BiDi: in RTL case, style width='9000em' causes scrolling problem in head node if(!dojo._isBodyLtr()){ this.headerNodeContainer.style.width = ""; } }, destroy: function(){ dojo.destroy(this.headerNode); delete this.headerNode; dojo.forEach(this.rowNodes, dojo.destroy); this.rowNodes = []; if(this.source){ this.source.destroy(); } this.inherited(arguments); }, // focus focus: function(){ if(dojo.isWebKit || dojo.isOpera){ this.hiddenFocusNode.focus(); }else{ this.scrollboxNode.focus(); } }, setStructure: function(inStructure){ var vs = (this.structure = inStructure); // FIXME: similar logic is duplicated in layout if(vs.width && !isNaN(vs.width)){ this.viewWidth = vs.width + 'em'; }else{ this.viewWidth = vs.width || (vs.noscroll ? 'auto' : this.viewWidth); //|| this.defaultWidth; } this.onBeforeRow = vs.onBeforeRow; this.onAfterRow = vs.onAfterRow; this.noscroll = vs.noscroll; if(this.noscroll){ this.scrollboxNode.style.overflow = "hidden"; } this.simpleStructure = Boolean(vs.cells.length == 1); // bookkeeping this.testFlexCells(); // accomodate new structure this.updateStructure(); }, testFlexCells: function(){ // FIXME: cheater, this function does double duty as initializer and tester this.flexCells = false; for(var j=0, row; (row=this.structure.cells[j]); j++){ for(var i=0, cell; (cell=row[i]); i++){ cell.view = this; this.flexCells = this.flexCells || cell.isFlex(); } } return this.flexCells;";s:7:"summary";s:0:"";}s:32:"dojox.grid._View.updateStructure";a:4:{s:9:"prototype";s:16:"dojox.grid._View";s:4:"type";s:8:"Function";s:6:"source";s:3590:"dojo.provide("dojox.grid._View"); dojo.require("dijit._Widget"); dojo.require("dijit._Templated"); dojo.require("dojox.grid._Builder"); dojo.require("dojox.html.metrics"); dojo.require("dojox.grid.util"); dojo.require("dojo.dnd.Source"); dojo.require("dojo.dnd.Manager"); (function(){ // private var getStyleText = function(inNode, inStyleText){ return inNode.style.cssText == undefined ? inNode.getAttribute("style") : inNode.style.cssText; }; // public dojo.declare('dojox.grid._View', [dijit._Widget, dijit._Templated], { // summary: // A collection of grid columns. A grid is comprised of a set of views that stack horizontally. // Grid creates views automatically based on grid's layout structure. // Users should typically not need to access individual views directly. // // defaultWidth: String // Default width of the view defaultWidth: "18em", // viewWidth: String // Width for the view, in valid css unit viewWidth: "", templatePath: dojo.moduleUrl("dojox.grid","resources/View.html"), themeable: false, classTag: 'dojoxGrid', marginBottom: 0, rowPad: 2, // _togglingColumn: int // Width of the column being toggled (-1 for none) _togglingColumn: -1, postMixInProperties: function(){ this.rowNodes = []; }, postCreate: function(){ this.connect(this.scrollboxNode,"onscroll","doscroll"); dojox.grid.util.funnelEvents(this.contentNode, this, "doContentEvent", [ 'mouseover', 'mouseout', 'click', 'dblclick', 'contextmenu', 'mousedown' ]); dojox.grid.util.funnelEvents(this.headerNode, this, "doHeaderEvent", [ 'dblclick', 'mouseover', 'mouseout', 'mousemove', 'mousedown', 'click', 'contextmenu' ]); this.content = new dojox.grid._ContentBuilder(this); this.header = new dojox.grid._HeaderBuilder(this); //BiDi: in RTL case, style width='9000em' causes scrolling problem in head node if(!dojo._isBodyLtr()){ this.headerNodeContainer.style.width = ""; } }, destroy: function(){ dojo.destroy(this.headerNode); delete this.headerNode; dojo.forEach(this.rowNodes, dojo.destroy); this.rowNodes = []; if(this.source){ this.source.destroy(); } this.inherited(arguments); }, // focus focus: function(){ if(dojo.isWebKit || dojo.isOpera){ this.hiddenFocusNode.focus(); }else{ this.scrollboxNode.focus(); } }, setStructure: function(inStructure){ var vs = (this.structure = inStructure); // FIXME: similar logic is duplicated in layout if(vs.width && !isNaN(vs.width)){ this.viewWidth = vs.width + 'em'; }else{ this.viewWidth = vs.width || (vs.noscroll ? 'auto' : this.viewWidth); //|| this.defaultWidth; } this.onBeforeRow = vs.onBeforeRow; this.onAfterRow = vs.onAfterRow; this.noscroll = vs.noscroll; if(this.noscroll){ this.scrollboxNode.style.overflow = "hidden"; } this.simpleStructure = Boolean(vs.cells.length == 1); // bookkeeping this.testFlexCells(); // accomodate new structure this.updateStructure(); }, testFlexCells: function(){ // FIXME: cheater, this function does double duty as initializer and tester this.flexCells = false; for(var j=0, row; (row=this.structure.cells[j]); j++){ for(var i=0, cell; (cell=row[i]); i++){ cell.view = this; this.flexCells = this.flexCells || cell.isFlex(); } } return this.flexCells; }, updateStructure: function(){ // header builder needs to update table map this.header.update(); // content builder needs to update markup cache this.content.update();";s:7:"summary";s:0:"";}s:34:"dojox.grid._View.getScrollbarWidth";a:5:{s:9:"prototype";s:16:"dojox.grid._View";s:4:"type";s:8:"Function";s:6:"source";s:342:" var hasScrollSpace = this.hasVScrollbar(); var overflow = dojo.style(this.scrollboxNode, "overflow"); if(this.noscroll || !overflow || overflow == "hidden"){ hasScrollSpace = false; }else if(overflow == "scroll"){ hasScrollSpace = true; } return (hasScrollSpace ? dojox.html.metrics.getScrollbar().w : 0); // Integer";s:7:"returns";s:7:"Integer";s:7:"summary";s:0:"";}s:32:"dojox.grid._View.getColumnsWidth";a:5:{s:9:"prototype";s:16:"dojox.grid._View";s:4:"type";s:8:"Function";s:6:"source";s:67:" return this.headerContentNode.firstChild.offsetWidth; // Integer";s:7:"returns";s:7:"Integer";s:7:"summary";s:0:"";}s:32:"dojox.grid._View.setColumnsWidth";a:5:{s:9:"prototype";s:16:"dojox.grid._View";s:4:"type";s:8:"Function";s:10:"parameters";a:1:{s:5:"width";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:127:" this.headerContentNode.firstChild.style.width = width + 'px'; if(this.viewWidth){ this.viewWidth = width + 'px'; }";s:7:"summary";s:0:"";}s:25:"dojox.grid._View.getWidth";a:5:{s:9:"prototype";s:16:"dojox.grid._View";s:4:"type";s:8:"Function";s:6:"source";s:94:" return this.viewWidth || (this.getColumnsWidth()+this.getScrollbarWidth()) +'px'; // String";s:7:"returns";s:6:"String";s:7:"summary";s:0:"";}s:32:"dojox.grid._View.getContentWidth";a:5:{s:9:"prototype";s:16:"dojox.grid._View";s:4:"type";s:8:"Function";s:6:"source";s:103:" return Math.max(0, dojo._getContentBox(this.domNode).w - this.getScrollbarWidth()) + 'px'; // String";s:7:"returns";s:6:"String";s:7:"summary";s:0:"";}s:23:"dojox.grid._View.render";a:5:{s:9:"prototype";s:16:"dojox.grid._View";s:4:"type";s:8:"Function";s:6:"source";s:2903:" this.scrollboxNode.style.height = ''; this.renderHeader(); if(this._togglingColumn >= 0){ this.setColumnsWidth(this.getColumnsWidth() - this._togglingColumn); this._togglingColumn = -1; } var cells = this.grid.layout.cells; var getSibling = dojo.hitch(this, function(node, before){ var inc = before?-1:1; var idx = this.header.getCellNodeIndex(node) + inc; var cell = cells[idx]; while(cell && cell.getHeaderNode() && cell.getHeaderNode().style.display == "none"){ idx += inc; cell = cells[idx]; } if(cell){ return cell.getHeaderNode(); } return null; }); if(this.grid.columnReordering && this.simpleStructure){ if(this.source){ this.source.destroy(); } this.source = new dojo.dnd.Source(this.headerContentNode.firstChild.rows[0], { horizontal: true, accept: [ "gridColumn_" + this.grid.id ], viewIndex: this.index, onMouseDown: dojo.hitch(this, function(e){ this.header.decorateEvent(e); if((this.header.overRightResizeArea(e) || this.header.overLeftResizeArea(e)) && this.header.canResize(e) && !this.header.moveable){ this.header.beginColumnResize(e); }else{ if(this.grid.headerMenu){ this.grid.headerMenu.onCancel(true); } // IE reports a left click as 1, where everything else reports 0 if(e.button === (dojo.isIE ? 1 : 0)){ dojo.dnd.Source.prototype.onMouseDown.call(this.source, e); } } }), _markTargetAnchor: dojo.hitch(this, function(before){ var src = this.source; if(src.current == src.targetAnchor && src.before == before){ return; } if(src.targetAnchor && getSibling(src.targetAnchor, src.before)){ src._removeItemClass(getSibling(src.targetAnchor, src.before), src.before ? "After" : "Before"); } dojo.dnd.Source.prototype._markTargetAnchor.call(src, before); if(src.targetAnchor && getSibling(src.targetAnchor, src.before)){ src._addItemClass(getSibling(src.targetAnchor, src.before), src.before ? "After" : "Before"); } }), _unmarkTargetAnchor: dojo.hitch(this, function(){ var src = this.source; if(!src.targetAnchor){ return; } if(src.targetAnchor && getSibling(src.targetAnchor, src.before)){ src._removeItemClass(getSibling(src.targetAnchor, src.before), src.before ? "After" : "Before"); } dojo.dnd.Source.prototype._unmarkTargetAnchor.call(src); }), destroy: dojo.hitch(this, function(){ dojo.disconnect(this._source_conn); dojo.unsubscribe(this._source_sub); dojo.dnd.Source.prototype.destroy.call(this.source); }) }); this._source_conn = dojo.connect(this.source, "onDndDrop", this, "_onDndDrop"); this._source_sub = dojo.subscribe("/dnd/drop/before", this, "_onDndDropBefore"); this.source.startup(); }";s:6:"chains";a:1:{s:4:"call";a:4:{i:0;s:37:"dojo.dnd.Source.prototype.onMouseDown";i:1;s:43:"dojo.dnd.Source.prototype._markTargetAnchor";i:2;s:45:"dojo.dnd.Source.prototype._unmarkTargetAnchor";i:3;s:33:"dojo.dnd.Source.prototype.destroy";}}s:7:"summary";s:0:"";}s:33:"dojox.grid._View._onDndDropBefore";a:6:{s:9:"prototype";s:16:"dojox.grid._View";s:4:"type";s:8:"Function";s:10:"parameters";a:3:{s:6:"source";a:1:{s:4:"type";s:0:"";}s:5:"nodes";a:1:{s:4:"type";s:0:"";}s:4:"copy";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:519:" if(dojo.dnd.manager().target !== this.source){ return; } this.source._targetNode = this.source.targetAnchor; this.source._beforeTarget = this.source.before; var views = this.grid.views.views; var srcView = views[source.viewIndex]; var tgtView = views[this.index]; if(tgtView != srcView){ var s = srcView.convertColPctToFixed(); var t = tgtView.convertColPctToFixed(); if(s || t){ setTimeout(function(){ srcView.update(); tgtView.update(); }, 50); } }";s:7:"private";b:1;s:7:"summary";s:0:"";}s:27:"dojox.grid._View._onDndDrop";a:6:{s:9:"prototype";s:16:"dojox.grid._View";s:4:"type";s:8:"Function";s:10:"parameters";a:3:{s:6:"source";a:1:{s:4:"type";s:0:"";}s:5:"nodes";a:1:{s:4:"type";s:0:"";}s:4:"copy";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:1055:" if(dojo.dnd.manager().target !== this.source){ if(dojo.dnd.manager().source === this.source){ this._removingColumn = true; } return; } var getIdx = function(n){ return n ? dojo.attr(n, "idx") : null; } var w = dojo.marginBox(nodes[0]).w; if(source.viewIndex !== this.index){ var views = this.grid.views.views; var srcView = views[source.viewIndex]; var tgtView = views[this.index]; if(srcView.viewWidth && srcView.viewWidth != "auto"){ srcView.setColumnsWidth(srcView.getColumnsWidth() - w); } if(tgtView.viewWidth && tgtView.viewWidth != "auto"){ tgtView.setColumnsWidth(tgtView.getColumnsWidth()); } } var stn = this.source._targetNode; var stb = this.source._beforeTarget; var layout = this.grid.layout; var idx = this.index; delete this.source._targetNode; delete this.source._beforeTarget; window.setTimeout(function(){ layout.moveColumn( source.viewIndex, idx, getIdx(nodes[0]), getIdx(stn), stb ); }, 1);";s:7:"private";b:1;s:7:"summary";s:0:"";}s:29:"dojox.grid._View.renderHeader";a:4:{s:9:"prototype";s:16:"dojox.grid._View";s:4:"type";s:8:"Function";s:6:"source";s:331:" this.headerContentNode.innerHTML = this.header.generateHtml(this._getHeaderContent); if(this.flexCells){ this.contentWidth = this.getContentWidth(); this.headerContentNode.firstChild.style.width = this.contentWidth; } dojox.grid.util.fire(this, "onAfterRow", [-1, this.structure.cells, this.headerContentNode]);";s:7:"summary";s:0:"";}s:34:"dojox.grid._View._getHeaderContent";a:6:{s:9:"prototype";s:16:"dojox.grid._View";s:4:"type";s:8:"Function";s:10:"parameters";a:1:{s:6:"inCell";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:589:" var n = inCell.name || inCell.grid.getCellName(inCell); var ret = [ '
'); }else{ ret = ret.concat([ ' ', inCell.grid.sortInfo > 0 ? 'dojoxGridSortUp' : 'dojoxGridSortDown', '">
', inCell.grid.sortInfo > 0 ? '▲' : '▼', '
' ]); } ret = ret.concat([n, '
']); return ret.join('');";s:7:"private";b:1;s:7:"summary";s:0:"";}s:23:"dojox.grid._View.resize";a:4:{s:9:"prototype";s:16:"dojox.grid._View";s:4:"type";s:8:"Function";s:6:"source";s:44:" this.adaptHeight(); this.adaptWidth();";s:7:"summary";s:0:"";}s:30:"dojox.grid._View.hasHScrollbar";a:6:{s:9:"prototype";s:16:"dojox.grid._View";s:4:"type";s:8:"Function";s:10:"parameters";a:1:{s:5:"reset";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:456:" if(this._hasHScroll == undefined || reset){ if(this.noscroll){ this._hasHScroll = false; }else{ var style = dojo.style(this.scrollboxNode, "overflow"); if(style == "hidden"){ this._hasHScroll = false; }else if(style == "scroll"){ this._hasHScroll = true; }else{ this._hasHScroll = (this.scrollboxNode.offsetWidth < this.contentNode.offsetWidth); } } } return this._hasHScroll; // Boolean";s:7:"returns";s:7:"Boolean";s:7:"summary";s:0:"";}s:30:"dojox.grid._View.hasVScrollbar";a:6:{s:9:"prototype";s:16:"dojox.grid._View";s:4:"type";s:8:"Function";s:10:"parameters";a:1:{s:5:"reset";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:458:" if(this._hasVScroll == undefined || reset){ if(this.noscroll){ this._hasVScroll = false; }else{ var style = dojo.style(this.scrollboxNode, "overflow"); if(style == "hidden"){ this._hasVScroll = false; }else if(style == "scroll"){ this._hasVScroll = true; }else{ this._hasVScroll = (this.scrollboxNode.offsetHeight < this.contentNode.offsetHeight); } } } return this._hasVScroll; // Boolean";s:7:"returns";s:7:"Boolean";s:7:"summary";s:0:"";}s:37:"dojox.grid._View.convertColPctToFixed";a:5:{s:9:"prototype";s:16:"dojox.grid._View";s:4:"type";s:8:"Function";s:6:"source";s:12223:"dojo.provide("dojox.grid._View"); dojo.require("dijit._Widget"); dojo.require("dijit._Templated"); dojo.require("dojox.grid._Builder"); dojo.require("dojox.html.metrics"); dojo.require("dojox.grid.util"); dojo.require("dojo.dnd.Source"); dojo.require("dojo.dnd.Manager"); (function(){ // private var getStyleText = function(inNode, inStyleText){ return inNode.style.cssText == undefined ? inNode.getAttribute("style") : inNode.style.cssText; }; // public dojo.declare('dojox.grid._View', [dijit._Widget, dijit._Templated], { // summary: // A collection of grid columns. A grid is comprised of a set of views that stack horizontally. // Grid creates views automatically based on grid's layout structure. // Users should typically not need to access individual views directly. // // defaultWidth: String // Default width of the view defaultWidth: "18em", // viewWidth: String // Width for the view, in valid css unit viewWidth: "", templatePath: dojo.moduleUrl("dojox.grid","resources/View.html"), themeable: false, classTag: 'dojoxGrid', marginBottom: 0, rowPad: 2, // _togglingColumn: int // Width of the column being toggled (-1 for none) _togglingColumn: -1, postMixInProperties: function(){ this.rowNodes = []; }, postCreate: function(){ this.connect(this.scrollboxNode,"onscroll","doscroll"); dojox.grid.util.funnelEvents(this.contentNode, this, "doContentEvent", [ 'mouseover', 'mouseout', 'click', 'dblclick', 'contextmenu', 'mousedown' ]); dojox.grid.util.funnelEvents(this.headerNode, this, "doHeaderEvent", [ 'dblclick', 'mouseover', 'mouseout', 'mousemove', 'mousedown', 'click', 'contextmenu' ]); this.content = new dojox.grid._ContentBuilder(this); this.header = new dojox.grid._HeaderBuilder(this); //BiDi: in RTL case, style width='9000em' causes scrolling problem in head node if(!dojo._isBodyLtr()){ this.headerNodeContainer.style.width = ""; } }, destroy: function(){ dojo.destroy(this.headerNode); delete this.headerNode; dojo.forEach(this.rowNodes, dojo.destroy); this.rowNodes = []; if(this.source){ this.source.destroy(); } this.inherited(arguments); }, // focus focus: function(){ if(dojo.isWebKit || dojo.isOpera){ this.hiddenFocusNode.focus(); }else{ this.scrollboxNode.focus(); } }, setStructure: function(inStructure){ var vs = (this.structure = inStructure); // FIXME: similar logic is duplicated in layout if(vs.width && !isNaN(vs.width)){ this.viewWidth = vs.width + 'em'; }else{ this.viewWidth = vs.width || (vs.noscroll ? 'auto' : this.viewWidth); //|| this.defaultWidth; } this.onBeforeRow = vs.onBeforeRow; this.onAfterRow = vs.onAfterRow; this.noscroll = vs.noscroll; if(this.noscroll){ this.scrollboxNode.style.overflow = "hidden"; } this.simpleStructure = Boolean(vs.cells.length == 1); // bookkeeping this.testFlexCells(); // accomodate new structure this.updateStructure(); }, testFlexCells: function(){ // FIXME: cheater, this function does double duty as initializer and tester this.flexCells = false; for(var j=0, row; (row=this.structure.cells[j]); j++){ for(var i=0, cell; (cell=row[i]); i++){ cell.view = this; this.flexCells = this.flexCells || cell.isFlex(); } } return this.flexCells; }, updateStructure: function(){ // header builder needs to update table map this.header.update(); // content builder needs to update markup cache this.content.update(); }, getScrollbarWidth: function(){ var hasScrollSpace = this.hasVScrollbar(); var overflow = dojo.style(this.scrollboxNode, "overflow"); if(this.noscroll || !overflow || overflow == "hidden"){ hasScrollSpace = false; }else if(overflow == "scroll"){ hasScrollSpace = true; } return (hasScrollSpace ? dojox.html.metrics.getScrollbar().w : 0); // Integer }, getColumnsWidth: function(){ return this.headerContentNode.firstChild.offsetWidth; // Integer }, setColumnsWidth: function(width){ this.headerContentNode.firstChild.style.width = width + 'px'; if(this.viewWidth){ this.viewWidth = width + 'px'; } }, getWidth: function(){ return this.viewWidth || (this.getColumnsWidth()+this.getScrollbarWidth()) +'px'; // String }, getContentWidth: function(){ return Math.max(0, dojo._getContentBox(this.domNode).w - this.getScrollbarWidth()) + 'px'; // String }, render: function(){ this.scrollboxNode.style.height = ''; this.renderHeader(); if(this._togglingColumn >= 0){ this.setColumnsWidth(this.getColumnsWidth() - this._togglingColumn); this._togglingColumn = -1; } var cells = this.grid.layout.cells; var getSibling = dojo.hitch(this, function(node, before){ var inc = before?-1:1; var idx = this.header.getCellNodeIndex(node) + inc; var cell = cells[idx]; while(cell && cell.getHeaderNode() && cell.getHeaderNode().style.display == "none"){ idx += inc; cell = cells[idx]; } if(cell){ return cell.getHeaderNode(); } return null; }); if(this.grid.columnReordering && this.simpleStructure){ if(this.source){ this.source.destroy(); } this.source = new dojo.dnd.Source(this.headerContentNode.firstChild.rows[0], { horizontal: true, accept: [ "gridColumn_" + this.grid.id ], viewIndex: this.index, onMouseDown: dojo.hitch(this, function(e){ this.header.decorateEvent(e); if((this.header.overRightResizeArea(e) || this.header.overLeftResizeArea(e)) && this.header.canResize(e) && !this.header.moveable){ this.header.beginColumnResize(e); }else{ if(this.grid.headerMenu){ this.grid.headerMenu.onCancel(true); } // IE reports a left click as 1, where everything else reports 0 if(e.button === (dojo.isIE ? 1 : 0)){ dojo.dnd.Source.prototype.onMouseDown.call(this.source, e); } } }), _markTargetAnchor: dojo.hitch(this, function(before){ var src = this.source; if(src.current == src.targetAnchor && src.before == before){ return; } if(src.targetAnchor && getSibling(src.targetAnchor, src.before)){ src._removeItemClass(getSibling(src.targetAnchor, src.before), src.before ? "After" : "Before"); } dojo.dnd.Source.prototype._markTargetAnchor.call(src, before); if(src.targetAnchor && getSibling(src.targetAnchor, src.before)){ src._addItemClass(getSibling(src.targetAnchor, src.before), src.before ? "After" : "Before"); } }), _unmarkTargetAnchor: dojo.hitch(this, function(){ var src = this.source; if(!src.targetAnchor){ return; } if(src.targetAnchor && getSibling(src.targetAnchor, src.before)){ src._removeItemClass(getSibling(src.targetAnchor, src.before), src.before ? "After" : "Before"); } dojo.dnd.Source.prototype._unmarkTargetAnchor.call(src); }), destroy: dojo.hitch(this, function(){ dojo.disconnect(this._source_conn); dojo.unsubscribe(this._source_sub); dojo.dnd.Source.prototype.destroy.call(this.source); }) }); this._source_conn = dojo.connect(this.source, "onDndDrop", this, "_onDndDrop"); this._source_sub = dojo.subscribe("/dnd/drop/before", this, "_onDndDropBefore"); this.source.startup(); } }, _onDndDropBefore: function(source, nodes, copy){ if(dojo.dnd.manager().target !== this.source){ return; } this.source._targetNode = this.source.targetAnchor; this.source._beforeTarget = this.source.before; var views = this.grid.views.views; var srcView = views[source.viewIndex]; var tgtView = views[this.index]; if(tgtView != srcView){ var s = srcView.convertColPctToFixed(); var t = tgtView.convertColPctToFixed(); if(s || t){ setTimeout(function(){ srcView.update(); tgtView.update(); }, 50); } } }, _onDndDrop: function(source, nodes, copy){ if(dojo.dnd.manager().target !== this.source){ if(dojo.dnd.manager().source === this.source){ this._removingColumn = true; } return; } var getIdx = function(n){ return n ? dojo.attr(n, "idx") : null; } var w = dojo.marginBox(nodes[0]).w; if(source.viewIndex !== this.index){ var views = this.grid.views.views; var srcView = views[source.viewIndex]; var tgtView = views[this.index]; if(srcView.viewWidth && srcView.viewWidth != "auto"){ srcView.setColumnsWidth(srcView.getColumnsWidth() - w); } if(tgtView.viewWidth && tgtView.viewWidth != "auto"){ tgtView.setColumnsWidth(tgtView.getColumnsWidth()); } } var stn = this.source._targetNode; var stb = this.source._beforeTarget; var layout = this.grid.layout; var idx = this.index; delete this.source._targetNode; delete this.source._beforeTarget; window.setTimeout(function(){ layout.moveColumn( source.viewIndex, idx, getIdx(nodes[0]), getIdx(stn), stb ); }, 1); }, renderHeader: function(){ this.headerContentNode.innerHTML = this.header.generateHtml(this._getHeaderContent); if(this.flexCells){ this.contentWidth = this.getContentWidth(); this.headerContentNode.firstChild.style.width = this.contentWidth; } dojox.grid.util.fire(this, "onAfterRow", [-1, this.structure.cells, this.headerContentNode]); }, // note: not called in 'view' context _getHeaderContent: function(inCell){ var n = inCell.name || inCell.grid.getCellName(inCell); var ret = [ '
'); }else{ ret = ret.concat([ ' ', inCell.grid.sortInfo > 0 ? 'dojoxGridSortUp' : 'dojoxGridSortDown', '">
', inCell.grid.sortInfo > 0 ? '▲' : '▼', '
' ]); } ret = ret.concat([n, '
']); return ret.join(''); }, resize: function(){ this.adaptHeight(); this.adaptWidth(); }, hasHScrollbar: function(reset){ if(this._hasHScroll == undefined || reset){ if(this.noscroll){ this._hasHScroll = false; }else{ var style = dojo.style(this.scrollboxNode, "overflow"); if(style == "hidden"){ this._hasHScroll = false; }else if(style == "scroll"){ this._hasHScroll = true; }else{ this._hasHScroll = (this.scrollboxNode.offsetWidth < this.contentNode.offsetWidth); } } } return this._hasHScroll; // Boolean }, hasVScrollbar: function(reset){ if(this._hasVScroll == undefined || reset){ if(this.noscroll){ this._hasVScroll = false; }else{ var style = dojo.style(this.scrollboxNode, "overflow"); if(style == "hidden"){ this._hasVScroll = false; }else if(style == "scroll"){ this._hasVScroll = true; }else{ this._hasVScroll = (this.scrollboxNode.offsetHeight < this.contentNode.offsetHeight); } } } return this._hasVScroll; // Boolean }, convertColPctToFixed: function(){ // Fix any percentage widths to be pixel values var hasPct = false; var cellNodes = dojo.query("th", this.headerContentNode); var fixedWidths = dojo.map(cellNodes, function(c, vIdx){ var w = c.style.width; dojo.attr(c, "vIdx", vIdx); if(w && w.slice(-1) == "%"){ hasPct = true; }else if(w && w.slice(-2) == "px"){ return window.parseInt(w, 10); } return dojo.contentBox(c).w; }); if(hasPct){ dojo.forEach(this.grid.layout.cells, function(cell, idx){ if(cell.view == this){ var cellNode = cell.view.getHeaderCellNode(cell.index); if(cellNode && dojo.hasAttr(cellNode, "vIdx")){ var vIdx = window.parseInt(dojo.attr(cellNode, "vIdx")); this.setColWidth(idx, fixedWidths[vIdx]); cellNodes[vIdx].style.width = cell.unitWidth; dojo.removeAttr(cellNode, "vIdx"); } } }, this); return true; } return false;";s:7:"returns";s:22:"Integer|String|Boolean";s:7:"summary";s:0:"";}s:28:"dojox.grid._View.adaptHeight";a:5:{s:9:"prototype";s:16:"dojox.grid._View";s:4:"type";s:8:"Function";s:10:"parameters";a:1:{s:11:"minusScroll";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:238:" if(!this.grid._autoHeight){ var h = this.domNode.clientHeight; if(minusScroll){ h -= dojox.html.metrics.getScrollbar().h; } dojox.grid.util.setStyleHeightPx(this.scrollboxNode, h); } this.hasVScrollbar(true);";s:7:"summary";s:0:"";}s:27:"dojox.grid._View.adaptWidth";a:4:{s:9:"prototype";s:16:"dojox.grid._View";s:4:"type";s:8:"Function";s:6:"source";s:670:" if(this.flexCells){ // the view content width this.contentWidth = this.getContentWidth(); this.headerContentNode.firstChild.style.width = this.contentWidth; } // FIXME: it should be easier to get w from this.scrollboxNode.clientWidth, // but clientWidth seemingly does not include scrollbar width in some cases var w = this.scrollboxNode.offsetWidth - this.getScrollbarWidth(); if(!this._removingColumn){ w = Math.max(w, this.getColumnsWidth()) + 'px'; }else{ w = Math.min(w, this.getColumnsWidth()) + 'px'; this._removingColumn = false; } var cn = this.contentNode; cn.style.width = w; this.hasHScrollbar(true);";s:7:"summary";s:0:"";}s:24:"dojox.grid._View.setSize";a:5:{s:9:"prototype";s:16:"dojox.grid._View";s:4:"type";s:8:"Function";s:10:"parameters";a:2:{s:1:"w";a:1:{s:4:"type";s:0:"";}s:1:"h";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:160:" var ds = this.domNode.style; var hs = this.headerNode.style; if(w){ ds.width = w; hs.width = w; } ds.height = (h >= 0 ? h + 'px' : '');";s:7:"summary";s:0:"";}s:26:"dojox.grid._View.renderRow";a:5:{s:9:"prototype";s:16:"dojox.grid._View";s:4:"type";s:8:"Function";s:10:"parameters";a:1:{s:10:"inRowIndex";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:417:" var rowNode = this.createRowNode(inRowIndex); this.buildRow(inRowIndex, rowNode); this.grid.edit.restore(this, inRowIndex); if(this._pendingUpdate){ window.clearTimeout(this._pendingUpdate); } this._pendingUpdate = window.setTimeout(dojo.hitch(this, function(){ window.clearTimeout(this._pendingUpdate); delete this._pendingUpdate; this.grid._resize(); }), 50); return rowNode;";s:7:"summary";s:0:"";}s:30:"dojox.grid._View.createRowNode";a:5:{s:9:"prototype";s:16:"dojox.grid._View";s:4:"type";s:8:"Function";s:10:"parameters";a:1:{s:10:"inRowIndex";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:272:" var node = document.createElement("div"); node.className = this.classTag + 'Row'; dojo.attr(node,"role","row"); node[dojox.grid.util.gridViewTag] = this.id; node[dojox.grid.util.rowIndexTag] = inRowIndex; this.rowNodes[inRowIndex] = node; return node;";s:7:"summary";s:0:"";}s:25:"dojox.grid._View.buildRow";a:5:{s:9:"prototype";s:16:"dojox.grid._View";s:4:"type";s:8:"Function";s:10:"parameters";a:2:{s:10:"inRowIndex";a:1:{s:4:"type";s:0:"";}s:9:"inRowNode";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:88:" this.buildRowContent(inRowIndex, inRowNode); this.styleRow(inRowIndex, inRowNode);";s:7:"summary";s:0:"";}s:32:"dojox.grid._View.buildRowContent";a:5:{s:9:"prototype";s:16:"dojox.grid._View";s:4:"type";s:8:"Function";s:10:"parameters";a:2:{s:10:"inRowIndex";a:1:{s:4:"type";s:0:"";}s:9:"inRowNode";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:336:" inRowNode.innerHTML = this.content.generateHtml(inRowIndex, inRowIndex); if(this.flexCells && this.contentWidth){ // FIXME: accessing firstChild here breaks encapsulation inRowNode.firstChild.style.width = this.contentWidth; } dojox.grid.util.fire(this, "onAfterRow", [inRowIndex, this.structure.cells, inRowNode]);";s:7:"summary";s:0:"";}s:27:"dojox.grid._View.rowRemoved";a:2:{s:9:"prototype";s:16:"dojox.grid._View";s:7:"summary";s:0:"";}s:27:"dojox.grid._View.getRowNode";a:5:{s:9:"prototype";s:16:"dojox.grid._View";s:4:"type";s:8:"Function";s:10:"parameters";a:1:{s:10:"inRowIndex";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:36:" return this.rowNodes[inRowIndex];";s:7:"summary";s:0:"";}s:28:"dojox.grid._View.getCellNode";a:5:{s:9:"prototype";s:16:"dojox.grid._View";s:4:"type";s:8:"Function";s:10:"parameters";a:2:{s:10:"inRowIndex";a:1:{s:4:"type";s:0:"";}s:11:"inCellIndex";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:113:" var row = this.getRowNode(inRowIndex); if(row){ return this.content.getCellNode(row, inCellIndex); }";s:7:"summary";s:0:"";}s:34:"dojox.grid._View.getHeaderCellNode";a:5:{s:9:"prototype";s:16:"dojox.grid._View";s:4:"type";s:8:"Function";s:10:"parameters";a:1:{s:11:"inCellIndex";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:108:" if(this.headerContentNode){ return this.header.getCellNode(this.headerContentNode, inCellIndex); }";s:7:"summary";s:0:"";}s:25:"dojox.grid._View.styleRow";a:5:{s:9:"prototype";s:16:"dojox.grid._View";s:4:"type";s:8:"Function";s:10:"parameters";a:2:{s:10:"inRowIndex";a:1:{s:4:"type";s:0:"";}s:9:"inRowNode";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:91:" inRowNode._style = getStyleText(inRowNode); this.styleRowNode(inRowIndex, inRowNode);";s:7:"summary";s:0:"";}s:29:"dojox.grid._View.styleRowNode";a:5:{s:9:"prototype";s:16:"dojox.grid._View";s:4:"type";s:8:"Function";s:10:"parameters";a:2:{s:10:"inRowIndex";a:1:{s:4:"type";s:0:"";}s:9:"inRowNode";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:70:" if(inRowNode){ this.doStyleRowNode(inRowIndex, inRowNode); }";s:7:"summary";s:0:"";}s:31:"dojox.grid._View.doStyleRowNode";a:5:{s:9:"prototype";s:16:"dojox.grid._View";s:4:"type";s:8:"Function";s:10:"parameters";a:2:{s:10:"inRowIndex";a:1:{s:4:"type";s:0:"";}s:9:"inRowNode";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:49:" this.grid.styleRowNode(inRowIndex, inRowNode);";s:7:"summary";s:0:"";}s:26:"dojox.grid._View.updateRow";a:5:{s:9:"prototype";s:16:"dojox.grid._View";s:4:"type";s:8:"Function";s:10:"parameters";a:1:{s:10:"inRowIndex";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:156:" var rowNode = this.getRowNode(inRowIndex); if(rowNode){ rowNode.style.height = ''; this.buildRow(inRowIndex, rowNode); } return rowNode;";s:7:"summary";s:0:"";}s:32:"dojox.grid._View.updateRowStyles";a:5:{s:9:"prototype";s:16:"dojox.grid._View";s:4:"type";s:8:"Function";s:10:"parameters";a:1:{s:10:"inRowIndex";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:62:" this.styleRowNode(inRowIndex, this.getRowNode(inRowIndex));";s:7:"summary";s:0:"";}s:24:"dojox.grid._View.lastTop";a:3:{s:9:"prototype";s:16:"dojox.grid._View";s:8:"instance";s:16:"dojox.grid._View";s:7:"summary";s:0:"";}s:28:"dojox.grid._View.firstScroll";a:3:{s:9:"prototype";s:16:"dojox.grid._View";s:8:"instance";s:16:"dojox.grid._View";s:7:"summary";s:0:"";}s:25:"dojox.grid._View.doscroll";a:6:{s:9:"prototype";s:16:"dojox.grid._View";s:4:"type";s:8:"Function";s:10:"parameters";a:1:{s:7:"inEvent";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:17172:"dojo.provide("dojox.grid._View"); dojo.require("dijit._Widget"); dojo.require("dijit._Templated"); dojo.require("dojox.grid._Builder"); dojo.require("dojox.html.metrics"); dojo.require("dojox.grid.util"); dojo.require("dojo.dnd.Source"); dojo.require("dojo.dnd.Manager"); (function(){ // private var getStyleText = function(inNode, inStyleText){ return inNode.style.cssText == undefined ? inNode.getAttribute("style") : inNode.style.cssText; }; // public dojo.declare('dojox.grid._View', [dijit._Widget, dijit._Templated], { // summary: // A collection of grid columns. A grid is comprised of a set of views that stack horizontally. // Grid creates views automatically based on grid's layout structure. // Users should typically not need to access individual views directly. // // defaultWidth: String // Default width of the view defaultWidth: "18em", // viewWidth: String // Width for the view, in valid css unit viewWidth: "", templatePath: dojo.moduleUrl("dojox.grid","resources/View.html"), themeable: false, classTag: 'dojoxGrid', marginBottom: 0, rowPad: 2, // _togglingColumn: int // Width of the column being toggled (-1 for none) _togglingColumn: -1, postMixInProperties: function(){ this.rowNodes = []; }, postCreate: function(){ this.connect(this.scrollboxNode,"onscroll","doscroll"); dojox.grid.util.funnelEvents(this.contentNode, this, "doContentEvent", [ 'mouseover', 'mouseout', 'click', 'dblclick', 'contextmenu', 'mousedown' ]); dojox.grid.util.funnelEvents(this.headerNode, this, "doHeaderEvent", [ 'dblclick', 'mouseover', 'mouseout', 'mousemove', 'mousedown', 'click', 'contextmenu' ]); this.content = new dojox.grid._ContentBuilder(this); this.header = new dojox.grid._HeaderBuilder(this); //BiDi: in RTL case, style width='9000em' causes scrolling problem in head node if(!dojo._isBodyLtr()){ this.headerNodeContainer.style.width = ""; } }, destroy: function(){ dojo.destroy(this.headerNode); delete this.headerNode; dojo.forEach(this.rowNodes, dojo.destroy); this.rowNodes = []; if(this.source){ this.source.destroy(); } this.inherited(arguments); }, // focus focus: function(){ if(dojo.isWebKit || dojo.isOpera){ this.hiddenFocusNode.focus(); }else{ this.scrollboxNode.focus(); } }, setStructure: function(inStructure){ var vs = (this.structure = inStructure); // FIXME: similar logic is duplicated in layout if(vs.width && !isNaN(vs.width)){ this.viewWidth = vs.width + 'em'; }else{ this.viewWidth = vs.width || (vs.noscroll ? 'auto' : this.viewWidth); //|| this.defaultWidth; } this.onBeforeRow = vs.onBeforeRow; this.onAfterRow = vs.onAfterRow; this.noscroll = vs.noscroll; if(this.noscroll){ this.scrollboxNode.style.overflow = "hidden"; } this.simpleStructure = Boolean(vs.cells.length == 1); // bookkeeping this.testFlexCells(); // accomodate new structure this.updateStructure(); }, testFlexCells: function(){ // FIXME: cheater, this function does double duty as initializer and tester this.flexCells = false; for(var j=0, row; (row=this.structure.cells[j]); j++){ for(var i=0, cell; (cell=row[i]); i++){ cell.view = this; this.flexCells = this.flexCells || cell.isFlex(); } } return this.flexCells; }, updateStructure: function(){ // header builder needs to update table map this.header.update(); // content builder needs to update markup cache this.content.update(); }, getScrollbarWidth: function(){ var hasScrollSpace = this.hasVScrollbar(); var overflow = dojo.style(this.scrollboxNode, "overflow"); if(this.noscroll || !overflow || overflow == "hidden"){ hasScrollSpace = false; }else if(overflow == "scroll"){ hasScrollSpace = true; } return (hasScrollSpace ? dojox.html.metrics.getScrollbar().w : 0); // Integer }, getColumnsWidth: function(){ return this.headerContentNode.firstChild.offsetWidth; // Integer }, setColumnsWidth: function(width){ this.headerContentNode.firstChild.style.width = width + 'px'; if(this.viewWidth){ this.viewWidth = width + 'px'; } }, getWidth: function(){ return this.viewWidth || (this.getColumnsWidth()+this.getScrollbarWidth()) +'px'; // String }, getContentWidth: function(){ return Math.max(0, dojo._getContentBox(this.domNode).w - this.getScrollbarWidth()) + 'px'; // String }, render: function(){ this.scrollboxNode.style.height = ''; this.renderHeader(); if(this._togglingColumn >= 0){ this.setColumnsWidth(this.getColumnsWidth() - this._togglingColumn); this._togglingColumn = -1; } var cells = this.grid.layout.cells; var getSibling = dojo.hitch(this, function(node, before){ var inc = before?-1:1; var idx = this.header.getCellNodeIndex(node) + inc; var cell = cells[idx]; while(cell && cell.getHeaderNode() && cell.getHeaderNode().style.display == "none"){ idx += inc; cell = cells[idx]; } if(cell){ return cell.getHeaderNode(); } return null; }); if(this.grid.columnReordering && this.simpleStructure){ if(this.source){ this.source.destroy(); } this.source = new dojo.dnd.Source(this.headerContentNode.firstChild.rows[0], { horizontal: true, accept: [ "gridColumn_" + this.grid.id ], viewIndex: this.index, onMouseDown: dojo.hitch(this, function(e){ this.header.decorateEvent(e); if((this.header.overRightResizeArea(e) || this.header.overLeftResizeArea(e)) && this.header.canResize(e) && !this.header.moveable){ this.header.beginColumnResize(e); }else{ if(this.grid.headerMenu){ this.grid.headerMenu.onCancel(true); } // IE reports a left click as 1, where everything else reports 0 if(e.button === (dojo.isIE ? 1 : 0)){ dojo.dnd.Source.prototype.onMouseDown.call(this.source, e); } } }), _markTargetAnchor: dojo.hitch(this, function(before){ var src = this.source; if(src.current == src.targetAnchor && src.before == before){ return; } if(src.targetAnchor && getSibling(src.targetAnchor, src.before)){ src._removeItemClass(getSibling(src.targetAnchor, src.before), src.before ? "After" : "Before"); } dojo.dnd.Source.prototype._markTargetAnchor.call(src, before); if(src.targetAnchor && getSibling(src.targetAnchor, src.before)){ src._addItemClass(getSibling(src.targetAnchor, src.before), src.before ? "After" : "Before"); } }), _unmarkTargetAnchor: dojo.hitch(this, function(){ var src = this.source; if(!src.targetAnchor){ return; } if(src.targetAnchor && getSibling(src.targetAnchor, src.before)){ src._removeItemClass(getSibling(src.targetAnchor, src.before), src.before ? "After" : "Before"); } dojo.dnd.Source.prototype._unmarkTargetAnchor.call(src); }), destroy: dojo.hitch(this, function(){ dojo.disconnect(this._source_conn); dojo.unsubscribe(this._source_sub); dojo.dnd.Source.prototype.destroy.call(this.source); }) }); this._source_conn = dojo.connect(this.source, "onDndDrop", this, "_onDndDrop"); this._source_sub = dojo.subscribe("/dnd/drop/before", this, "_onDndDropBefore"); this.source.startup(); } }, _onDndDropBefore: function(source, nodes, copy){ if(dojo.dnd.manager().target !== this.source){ return; } this.source._targetNode = this.source.targetAnchor; this.source._beforeTarget = this.source.before; var views = this.grid.views.views; var srcView = views[source.viewIndex]; var tgtView = views[this.index]; if(tgtView != srcView){ var s = srcView.convertColPctToFixed(); var t = tgtView.convertColPctToFixed(); if(s || t){ setTimeout(function(){ srcView.update(); tgtView.update(); }, 50); } } }, _onDndDrop: function(source, nodes, copy){ if(dojo.dnd.manager().target !== this.source){ if(dojo.dnd.manager().source === this.source){ this._removingColumn = true; } return; } var getIdx = function(n){ return n ? dojo.attr(n, "idx") : null; } var w = dojo.marginBox(nodes[0]).w; if(source.viewIndex !== this.index){ var views = this.grid.views.views; var srcView = views[source.viewIndex]; var tgtView = views[this.index]; if(srcView.viewWidth && srcView.viewWidth != "auto"){ srcView.setColumnsWidth(srcView.getColumnsWidth() - w); } if(tgtView.viewWidth && tgtView.viewWidth != "auto"){ tgtView.setColumnsWidth(tgtView.getColumnsWidth()); } } var stn = this.source._targetNode; var stb = this.source._beforeTarget; var layout = this.grid.layout; var idx = this.index; delete this.source._targetNode; delete this.source._beforeTarget; window.setTimeout(function(){ layout.moveColumn( source.viewIndex, idx, getIdx(nodes[0]), getIdx(stn), stb ); }, 1); }, renderHeader: function(){ this.headerContentNode.innerHTML = this.header.generateHtml(this._getHeaderContent); if(this.flexCells){ this.contentWidth = this.getContentWidth(); this.headerContentNode.firstChild.style.width = this.contentWidth; } dojox.grid.util.fire(this, "onAfterRow", [-1, this.structure.cells, this.headerContentNode]); }, // note: not called in 'view' context _getHeaderContent: function(inCell){ var n = inCell.name || inCell.grid.getCellName(inCell); var ret = [ '
'); }else{ ret = ret.concat([ ' ', inCell.grid.sortInfo > 0 ? 'dojoxGridSortUp' : 'dojoxGridSortDown', '">
', inCell.grid.sortInfo > 0 ? '▲' : '▼', '
' ]); } ret = ret.concat([n, '
']); return ret.join(''); }, resize: function(){ this.adaptHeight(); this.adaptWidth(); }, hasHScrollbar: function(reset){ if(this._hasHScroll == undefined || reset){ if(this.noscroll){ this._hasHScroll = false; }else{ var style = dojo.style(this.scrollboxNode, "overflow"); if(style == "hidden"){ this._hasHScroll = false; }else if(style == "scroll"){ this._hasHScroll = true; }else{ this._hasHScroll = (this.scrollboxNode.offsetWidth < this.contentNode.offsetWidth); } } } return this._hasHScroll; // Boolean }, hasVScrollbar: function(reset){ if(this._hasVScroll == undefined || reset){ if(this.noscroll){ this._hasVScroll = false; }else{ var style = dojo.style(this.scrollboxNode, "overflow"); if(style == "hidden"){ this._hasVScroll = false; }else if(style == "scroll"){ this._hasVScroll = true; }else{ this._hasVScroll = (this.scrollboxNode.offsetHeight < this.contentNode.offsetHeight); } } } return this._hasVScroll; // Boolean }, convertColPctToFixed: function(){ // Fix any percentage widths to be pixel values var hasPct = false; var cellNodes = dojo.query("th", this.headerContentNode); var fixedWidths = dojo.map(cellNodes, function(c, vIdx){ var w = c.style.width; dojo.attr(c, "vIdx", vIdx); if(w && w.slice(-1) == "%"){ hasPct = true; }else if(w && w.slice(-2) == "px"){ return window.parseInt(w, 10); } return dojo.contentBox(c).w; }); if(hasPct){ dojo.forEach(this.grid.layout.cells, function(cell, idx){ if(cell.view == this){ var cellNode = cell.view.getHeaderCellNode(cell.index); if(cellNode && dojo.hasAttr(cellNode, "vIdx")){ var vIdx = window.parseInt(dojo.attr(cellNode, "vIdx")); this.setColWidth(idx, fixedWidths[vIdx]); cellNodes[vIdx].style.width = cell.unitWidth; dojo.removeAttr(cellNode, "vIdx"); } } }, this); return true; } return false; }, adaptHeight: function(minusScroll){ if(!this.grid._autoHeight){ var h = this.domNode.clientHeight; if(minusScroll){ h -= dojox.html.metrics.getScrollbar().h; } dojox.grid.util.setStyleHeightPx(this.scrollboxNode, h); } this.hasVScrollbar(true); }, adaptWidth: function(){ if(this.flexCells){ // the view content width this.contentWidth = this.getContentWidth(); this.headerContentNode.firstChild.style.width = this.contentWidth; } // FIXME: it should be easier to get w from this.scrollboxNode.clientWidth, // but clientWidth seemingly does not include scrollbar width in some cases var w = this.scrollboxNode.offsetWidth - this.getScrollbarWidth(); if(!this._removingColumn){ w = Math.max(w, this.getColumnsWidth()) + 'px'; }else{ w = Math.min(w, this.getColumnsWidth()) + 'px'; this._removingColumn = false; } var cn = this.contentNode; cn.style.width = w; this.hasHScrollbar(true); }, setSize: function(w, h){ var ds = this.domNode.style; var hs = this.headerNode.style; if(w){ ds.width = w; hs.width = w; } ds.height = (h >= 0 ? h + 'px' : ''); }, renderRow: function(inRowIndex){ var rowNode = this.createRowNode(inRowIndex); this.buildRow(inRowIndex, rowNode); this.grid.edit.restore(this, inRowIndex); if(this._pendingUpdate){ window.clearTimeout(this._pendingUpdate); } this._pendingUpdate = window.setTimeout(dojo.hitch(this, function(){ window.clearTimeout(this._pendingUpdate); delete this._pendingUpdate; this.grid._resize(); }), 50); return rowNode; }, createRowNode: function(inRowIndex){ var node = document.createElement("div"); node.className = this.classTag + 'Row'; dojo.attr(node,"role","row"); node[dojox.grid.util.gridViewTag] = this.id; node[dojox.grid.util.rowIndexTag] = inRowIndex; this.rowNodes[inRowIndex] = node; return node; }, buildRow: function(inRowIndex, inRowNode){ this.buildRowContent(inRowIndex, inRowNode); this.styleRow(inRowIndex, inRowNode); }, buildRowContent: function(inRowIndex, inRowNode){ inRowNode.innerHTML = this.content.generateHtml(inRowIndex, inRowIndex); if(this.flexCells && this.contentWidth){ // FIXME: accessing firstChild here breaks encapsulation inRowNode.firstChild.style.width = this.contentWidth; } dojox.grid.util.fire(this, "onAfterRow", [inRowIndex, this.structure.cells, inRowNode]); }, rowRemoved:function(inRowIndex){ this.grid.edit.save(this, inRowIndex); delete this.rowNodes[inRowIndex]; }, getRowNode: function(inRowIndex){ return this.rowNodes[inRowIndex]; }, getCellNode: function(inRowIndex, inCellIndex){ var row = this.getRowNode(inRowIndex); if(row){ return this.content.getCellNode(row, inCellIndex); } }, getHeaderCellNode: function(inCellIndex){ if(this.headerContentNode){ return this.header.getCellNode(this.headerContentNode, inCellIndex); } }, // styling styleRow: function(inRowIndex, inRowNode){ inRowNode._style = getStyleText(inRowNode); this.styleRowNode(inRowIndex, inRowNode); }, styleRowNode: function(inRowIndex, inRowNode){ if(inRowNode){ this.doStyleRowNode(inRowIndex, inRowNode); } }, doStyleRowNode: function(inRowIndex, inRowNode){ this.grid.styleRowNode(inRowIndex, inRowNode); }, // updating updateRow: function(inRowIndex){ var rowNode = this.getRowNode(inRowIndex); if(rowNode){ rowNode.style.height = ''; this.buildRow(inRowIndex, rowNode); } return rowNode; }, updateRowStyles: function(inRowIndex){ this.styleRowNode(inRowIndex, this.getRowNode(inRowIndex)); }, // scrolling lastTop: 0, firstScroll:0, doscroll: function(inEvent){ //var s = dojo.marginBox(this.headerContentNode.firstChild); var isLtr = dojo._isBodyLtr(); if(this.firstScroll < 2){ if((!isLtr && this.firstScroll == 1) || (isLtr && this.firstScroll == 0)){ var s = dojo.marginBox(this.headerNodeContainer); if(dojo.isIE){ this.headerNodeContainer.style.width = s.w + this.getScrollbarWidth() + 'px'; }else if(dojo.isMoz){ //TODO currently only for FF, not sure for safari and opera this.headerNodeContainer.style.width = s.w - this.getScrollbarWidth() + 'px'; //this.headerNodeContainer.style.width = s.w + 'px'; //set scroll to right in FF this.scrollboxNode.scrollLeft = isLtr ? this.scrollboxNode.clientWidth - this.scrollboxNode.scrollWidth : this.scrollboxNode.scrollWidth - this.scrollboxNode.clientWidth; } } this.firstScroll++; } this.headerNode.scrollLeft = this.scrollboxNode.scrollLeft; // 'lastTop' is a semaphore to prevent feedback-loop with setScrollTop below var top = this.scrollboxNode.scrollTop; if(top != this.lastTop){ this.grid.scrollTo(top); }";s:7:"returns";s:22:"Integer|String|Boolean";s:7:"summary";s:0:"";}s:29:"dojox.grid._View.setScrollTop";a:6:{s:9:"prototype";s:16:"dojox.grid._View";s:4:"type";s:8:"Function";s:10:"parameters";a:1:{s:5:"inTop";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:17394:"dojo.provide("dojox.grid._View"); dojo.require("dijit._Widget"); dojo.require("dijit._Templated"); dojo.require("dojox.grid._Builder"); dojo.require("dojox.html.metrics"); dojo.require("dojox.grid.util"); dojo.require("dojo.dnd.Source"); dojo.require("dojo.dnd.Manager"); (function(){ // private var getStyleText = function(inNode, inStyleText){ return inNode.style.cssText == undefined ? inNode.getAttribute("style") : inNode.style.cssText; }; // public dojo.declare('dojox.grid._View', [dijit._Widget, dijit._Templated], { // summary: // A collection of grid columns. A grid is comprised of a set of views that stack horizontally. // Grid creates views automatically based on grid's layout structure. // Users should typically not need to access individual views directly. // // defaultWidth: String // Default width of the view defaultWidth: "18em", // viewWidth: String // Width for the view, in valid css unit viewWidth: "", templatePath: dojo.moduleUrl("dojox.grid","resources/View.html"), themeable: false, classTag: 'dojoxGrid', marginBottom: 0, rowPad: 2, // _togglingColumn: int // Width of the column being toggled (-1 for none) _togglingColumn: -1, postMixInProperties: function(){ this.rowNodes = []; }, postCreate: function(){ this.connect(this.scrollboxNode,"onscroll","doscroll"); dojox.grid.util.funnelEvents(this.contentNode, this, "doContentEvent", [ 'mouseover', 'mouseout', 'click', 'dblclick', 'contextmenu', 'mousedown' ]); dojox.grid.util.funnelEvents(this.headerNode, this, "doHeaderEvent", [ 'dblclick', 'mouseover', 'mouseout', 'mousemove', 'mousedown', 'click', 'contextmenu' ]); this.content = new dojox.grid._ContentBuilder(this); this.header = new dojox.grid._HeaderBuilder(this); //BiDi: in RTL case, style width='9000em' causes scrolling problem in head node if(!dojo._isBodyLtr()){ this.headerNodeContainer.style.width = ""; } }, destroy: function(){ dojo.destroy(this.headerNode); delete this.headerNode; dojo.forEach(this.rowNodes, dojo.destroy); this.rowNodes = []; if(this.source){ this.source.destroy(); } this.inherited(arguments); }, // focus focus: function(){ if(dojo.isWebKit || dojo.isOpera){ this.hiddenFocusNode.focus(); }else{ this.scrollboxNode.focus(); } }, setStructure: function(inStructure){ var vs = (this.structure = inStructure); // FIXME: similar logic is duplicated in layout if(vs.width && !isNaN(vs.width)){ this.viewWidth = vs.width + 'em'; }else{ this.viewWidth = vs.width || (vs.noscroll ? 'auto' : this.viewWidth); //|| this.defaultWidth; } this.onBeforeRow = vs.onBeforeRow; this.onAfterRow = vs.onAfterRow; this.noscroll = vs.noscroll; if(this.noscroll){ this.scrollboxNode.style.overflow = "hidden"; } this.simpleStructure = Boolean(vs.cells.length == 1); // bookkeeping this.testFlexCells(); // accomodate new structure this.updateStructure(); }, testFlexCells: function(){ // FIXME: cheater, this function does double duty as initializer and tester this.flexCells = false; for(var j=0, row; (row=this.structure.cells[j]); j++){ for(var i=0, cell; (cell=row[i]); i++){ cell.view = this; this.flexCells = this.flexCells || cell.isFlex(); } } return this.flexCells; }, updateStructure: function(){ // header builder needs to update table map this.header.update(); // content builder needs to update markup cache this.content.update(); }, getScrollbarWidth: function(){ var hasScrollSpace = this.hasVScrollbar(); var overflow = dojo.style(this.scrollboxNode, "overflow"); if(this.noscroll || !overflow || overflow == "hidden"){ hasScrollSpace = false; }else if(overflow == "scroll"){ hasScrollSpace = true; } return (hasScrollSpace ? dojox.html.metrics.getScrollbar().w : 0); // Integer }, getColumnsWidth: function(){ return this.headerContentNode.firstChild.offsetWidth; // Integer }, setColumnsWidth: function(width){ this.headerContentNode.firstChild.style.width = width + 'px'; if(this.viewWidth){ this.viewWidth = width + 'px'; } }, getWidth: function(){ return this.viewWidth || (this.getColumnsWidth()+this.getScrollbarWidth()) +'px'; // String }, getContentWidth: function(){ return Math.max(0, dojo._getContentBox(this.domNode).w - this.getScrollbarWidth()) + 'px'; // String }, render: function(){ this.scrollboxNode.style.height = ''; this.renderHeader(); if(this._togglingColumn >= 0){ this.setColumnsWidth(this.getColumnsWidth() - this._togglingColumn); this._togglingColumn = -1; } var cells = this.grid.layout.cells; var getSibling = dojo.hitch(this, function(node, before){ var inc = before?-1:1; var idx = this.header.getCellNodeIndex(node) + inc; var cell = cells[idx]; while(cell && cell.getHeaderNode() && cell.getHeaderNode().style.display == "none"){ idx += inc; cell = cells[idx]; } if(cell){ return cell.getHeaderNode(); } return null; }); if(this.grid.columnReordering && this.simpleStructure){ if(this.source){ this.source.destroy(); } this.source = new dojo.dnd.Source(this.headerContentNode.firstChild.rows[0], { horizontal: true, accept: [ "gridColumn_" + this.grid.id ], viewIndex: this.index, onMouseDown: dojo.hitch(this, function(e){ this.header.decorateEvent(e); if((this.header.overRightResizeArea(e) || this.header.overLeftResizeArea(e)) && this.header.canResize(e) && !this.header.moveable){ this.header.beginColumnResize(e); }else{ if(this.grid.headerMenu){ this.grid.headerMenu.onCancel(true); } // IE reports a left click as 1, where everything else reports 0 if(e.button === (dojo.isIE ? 1 : 0)){ dojo.dnd.Source.prototype.onMouseDown.call(this.source, e); } } }), _markTargetAnchor: dojo.hitch(this, function(before){ var src = this.source; if(src.current == src.targetAnchor && src.before == before){ return; } if(src.targetAnchor && getSibling(src.targetAnchor, src.before)){ src._removeItemClass(getSibling(src.targetAnchor, src.before), src.before ? "After" : "Before"); } dojo.dnd.Source.prototype._markTargetAnchor.call(src, before); if(src.targetAnchor && getSibling(src.targetAnchor, src.before)){ src._addItemClass(getSibling(src.targetAnchor, src.before), src.before ? "After" : "Before"); } }), _unmarkTargetAnchor: dojo.hitch(this, function(){ var src = this.source; if(!src.targetAnchor){ return; } if(src.targetAnchor && getSibling(src.targetAnchor, src.before)){ src._removeItemClass(getSibling(src.targetAnchor, src.before), src.before ? "After" : "Before"); } dojo.dnd.Source.prototype._unmarkTargetAnchor.call(src); }), destroy: dojo.hitch(this, function(){ dojo.disconnect(this._source_conn); dojo.unsubscribe(this._source_sub); dojo.dnd.Source.prototype.destroy.call(this.source); }) }); this._source_conn = dojo.connect(this.source, "onDndDrop", this, "_onDndDrop"); this._source_sub = dojo.subscribe("/dnd/drop/before", this, "_onDndDropBefore"); this.source.startup(); } }, _onDndDropBefore: function(source, nodes, copy){ if(dojo.dnd.manager().target !== this.source){ return; } this.source._targetNode = this.source.targetAnchor; this.source._beforeTarget = this.source.before; var views = this.grid.views.views; var srcView = views[source.viewIndex]; var tgtView = views[this.index]; if(tgtView != srcView){ var s = srcView.convertColPctToFixed(); var t = tgtView.convertColPctToFixed(); if(s || t){ setTimeout(function(){ srcView.update(); tgtView.update(); }, 50); } } }, _onDndDrop: function(source, nodes, copy){ if(dojo.dnd.manager().target !== this.source){ if(dojo.dnd.manager().source === this.source){ this._removingColumn = true; } return; } var getIdx = function(n){ return n ? dojo.attr(n, "idx") : null; } var w = dojo.marginBox(nodes[0]).w; if(source.viewIndex !== this.index){ var views = this.grid.views.views; var srcView = views[source.viewIndex]; var tgtView = views[this.index]; if(srcView.viewWidth && srcView.viewWidth != "auto"){ srcView.setColumnsWidth(srcView.getColumnsWidth() - w); } if(tgtView.viewWidth && tgtView.viewWidth != "auto"){ tgtView.setColumnsWidth(tgtView.getColumnsWidth()); } } var stn = this.source._targetNode; var stb = this.source._beforeTarget; var layout = this.grid.layout; var idx = this.index; delete this.source._targetNode; delete this.source._beforeTarget; window.setTimeout(function(){ layout.moveColumn( source.viewIndex, idx, getIdx(nodes[0]), getIdx(stn), stb ); }, 1); }, renderHeader: function(){ this.headerContentNode.innerHTML = this.header.generateHtml(this._getHeaderContent); if(this.flexCells){ this.contentWidth = this.getContentWidth(); this.headerContentNode.firstChild.style.width = this.contentWidth; } dojox.grid.util.fire(this, "onAfterRow", [-1, this.structure.cells, this.headerContentNode]); }, // note: not called in 'view' context _getHeaderContent: function(inCell){ var n = inCell.name || inCell.grid.getCellName(inCell); var ret = [ '
'); }else{ ret = ret.concat([ ' ', inCell.grid.sortInfo > 0 ? 'dojoxGridSortUp' : 'dojoxGridSortDown', '">
', inCell.grid.sortInfo > 0 ? '▲' : '▼', '
' ]); } ret = ret.concat([n, '
']); return ret.join(''); }, resize: function(){ this.adaptHeight(); this.adaptWidth(); }, hasHScrollbar: function(reset){ if(this._hasHScroll == undefined || reset){ if(this.noscroll){ this._hasHScroll = false; }else{ var style = dojo.style(this.scrollboxNode, "overflow"); if(style == "hidden"){ this._hasHScroll = false; }else if(style == "scroll"){ this._hasHScroll = true; }else{ this._hasHScroll = (this.scrollboxNode.offsetWidth < this.contentNode.offsetWidth); } } } return this._hasHScroll; // Boolean }, hasVScrollbar: function(reset){ if(this._hasVScroll == undefined || reset){ if(this.noscroll){ this._hasVScroll = false; }else{ var style = dojo.style(this.scrollboxNode, "overflow"); if(style == "hidden"){ this._hasVScroll = false; }else if(style == "scroll"){ this._hasVScroll = true; }else{ this._hasVScroll = (this.scrollboxNode.offsetHeight < this.contentNode.offsetHeight); } } } return this._hasVScroll; // Boolean }, convertColPctToFixed: function(){ // Fix any percentage widths to be pixel values var hasPct = false; var cellNodes = dojo.query("th", this.headerContentNode); var fixedWidths = dojo.map(cellNodes, function(c, vIdx){ var w = c.style.width; dojo.attr(c, "vIdx", vIdx); if(w && w.slice(-1) == "%"){ hasPct = true; }else if(w && w.slice(-2) == "px"){ return window.parseInt(w, 10); } return dojo.contentBox(c).w; }); if(hasPct){ dojo.forEach(this.grid.layout.cells, function(cell, idx){ if(cell.view == this){ var cellNode = cell.view.getHeaderCellNode(cell.index); if(cellNode && dojo.hasAttr(cellNode, "vIdx")){ var vIdx = window.parseInt(dojo.attr(cellNode, "vIdx")); this.setColWidth(idx, fixedWidths[vIdx]); cellNodes[vIdx].style.width = cell.unitWidth; dojo.removeAttr(cellNode, "vIdx"); } } }, this); return true; } return false; }, adaptHeight: function(minusScroll){ if(!this.grid._autoHeight){ var h = this.domNode.clientHeight; if(minusScroll){ h -= dojox.html.metrics.getScrollbar().h; } dojox.grid.util.setStyleHeightPx(this.scrollboxNode, h); } this.hasVScrollbar(true); }, adaptWidth: function(){ if(this.flexCells){ // the view content width this.contentWidth = this.getContentWidth(); this.headerContentNode.firstChild.style.width = this.contentWidth; } // FIXME: it should be easier to get w from this.scrollboxNode.clientWidth, // but clientWidth seemingly does not include scrollbar width in some cases var w = this.scrollboxNode.offsetWidth - this.getScrollbarWidth(); if(!this._removingColumn){ w = Math.max(w, this.getColumnsWidth()) + 'px'; }else{ w = Math.min(w, this.getColumnsWidth()) + 'px'; this._removingColumn = false; } var cn = this.contentNode; cn.style.width = w; this.hasHScrollbar(true); }, setSize: function(w, h){ var ds = this.domNode.style; var hs = this.headerNode.style; if(w){ ds.width = w; hs.width = w; } ds.height = (h >= 0 ? h + 'px' : ''); }, renderRow: function(inRowIndex){ var rowNode = this.createRowNode(inRowIndex); this.buildRow(inRowIndex, rowNode); this.grid.edit.restore(this, inRowIndex); if(this._pendingUpdate){ window.clearTimeout(this._pendingUpdate); } this._pendingUpdate = window.setTimeout(dojo.hitch(this, function(){ window.clearTimeout(this._pendingUpdate); delete this._pendingUpdate; this.grid._resize(); }), 50); return rowNode; }, createRowNode: function(inRowIndex){ var node = document.createElement("div"); node.className = this.classTag + 'Row'; dojo.attr(node,"role","row"); node[dojox.grid.util.gridViewTag] = this.id; node[dojox.grid.util.rowIndexTag] = inRowIndex; this.rowNodes[inRowIndex] = node; return node; }, buildRow: function(inRowIndex, inRowNode){ this.buildRowContent(inRowIndex, inRowNode); this.styleRow(inRowIndex, inRowNode); }, buildRowContent: function(inRowIndex, inRowNode){ inRowNode.innerHTML = this.content.generateHtml(inRowIndex, inRowIndex); if(this.flexCells && this.contentWidth){ // FIXME: accessing firstChild here breaks encapsulation inRowNode.firstChild.style.width = this.contentWidth; } dojox.grid.util.fire(this, "onAfterRow", [inRowIndex, this.structure.cells, inRowNode]); }, rowRemoved:function(inRowIndex){ this.grid.edit.save(this, inRowIndex); delete this.rowNodes[inRowIndex]; }, getRowNode: function(inRowIndex){ return this.rowNodes[inRowIndex]; }, getCellNode: function(inRowIndex, inCellIndex){ var row = this.getRowNode(inRowIndex); if(row){ return this.content.getCellNode(row, inCellIndex); } }, getHeaderCellNode: function(inCellIndex){ if(this.headerContentNode){ return this.header.getCellNode(this.headerContentNode, inCellIndex); } }, // styling styleRow: function(inRowIndex, inRowNode){ inRowNode._style = getStyleText(inRowNode); this.styleRowNode(inRowIndex, inRowNode); }, styleRowNode: function(inRowIndex, inRowNode){ if(inRowNode){ this.doStyleRowNode(inRowIndex, inRowNode); } }, doStyleRowNode: function(inRowIndex, inRowNode){ this.grid.styleRowNode(inRowIndex, inRowNode); }, // updating updateRow: function(inRowIndex){ var rowNode = this.getRowNode(inRowIndex); if(rowNode){ rowNode.style.height = ''; this.buildRow(inRowIndex, rowNode); } return rowNode; }, updateRowStyles: function(inRowIndex){ this.styleRowNode(inRowIndex, this.getRowNode(inRowIndex)); }, // scrolling lastTop: 0, firstScroll:0, doscroll: function(inEvent){ //var s = dojo.marginBox(this.headerContentNode.firstChild); var isLtr = dojo._isBodyLtr(); if(this.firstScroll < 2){ if((!isLtr && this.firstScroll == 1) || (isLtr && this.firstScroll == 0)){ var s = dojo.marginBox(this.headerNodeContainer); if(dojo.isIE){ this.headerNodeContainer.style.width = s.w + this.getScrollbarWidth() + 'px'; }else if(dojo.isMoz){ //TODO currently only for FF, not sure for safari and opera this.headerNodeContainer.style.width = s.w - this.getScrollbarWidth() + 'px'; //this.headerNodeContainer.style.width = s.w + 'px'; //set scroll to right in FF this.scrollboxNode.scrollLeft = isLtr ? this.scrollboxNode.clientWidth - this.scrollboxNode.scrollWidth : this.scrollboxNode.scrollWidth - this.scrollboxNode.clientWidth; } } this.firstScroll++; } this.headerNode.scrollLeft = this.scrollboxNode.scrollLeft; // 'lastTop' is a semaphore to prevent feedback-loop with setScrollTop below var top = this.scrollboxNode.scrollTop; if(top != this.lastTop){ this.grid.scrollTo(top); } }, setScrollTop: function(inTop){ // 'lastTop' is a semaphore to prevent feedback-loop with doScroll above this.lastTop = inTop; this.scrollboxNode.scrollTop = inTop; return this.scrollboxNode.scrollTop;";s:7:"returns";s:22:"Integer|String|Boolean";s:7:"summary";s:0:"";}s:31:"dojox.grid._View.doContentEvent";a:5:{s:9:"prototype";s:16:"dojox.grid._View";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:75:" if(this.content.decorateEvent(e)){ this.grid.onContentEvent(e); }";s:7:"summary";s:0:"";}s:30:"dojox.grid._View.doHeaderEvent";a:5:{s:9:"prototype";s:16:"dojox.grid._View";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:73:" if(this.header.decorateEvent(e)){ this.grid.onHeaderEvent(e); }";s:7:"summary";s:0:"";}s:37:"dojox.grid._View.dispatchContentEvent";a:5:{s:9:"prototype";s:16:"dojox.grid._View";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:40:" return this.content.dispatchEvent(e);";s:7:"summary";s:0:"";}s:36:"dojox.grid._View.dispatchHeaderEvent";a:5:{s:9:"prototype";s:16:"dojox.grid._View";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:39:" return this.header.dispatchEvent(e);";s:7:"summary";s:0:"";}s:28:"dojox.grid._View.setColWidth";a:5:{s:9:"prototype";s:16:"dojox.grid._View";s:4:"type";s:8:"Function";s:10:"parameters";a:2:{s:7:"inIndex";a:1:{s:4:"type";s:0:"";}s:7:"inWidth";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:51:" this.grid.setCellWidth(inIndex, inWidth + 'px');";s:7:"summary";s:0:"";}s:23:"dojox.grid._View.update";a:4:{s:9:"prototype";s:16:"dojox.grid._View";s:4:"type";s:8:"Function";s:6:"source";s:263:" this.content.update(); this.grid.update(); //get scroll after update or scroll left setting goes wrong on IE. //See trac: #8040 var left = this.scrollboxNode.scrollLeft; this.scrollboxNode.scrollLeft = left; this.headerNode.scrollLeft = left;";s:7:"summary";s:0:"";}s:25:"dojox.grid._View.rowNodes";a:2:{s:8:"instance";s:16:"dojox.grid._View";s:7:"summary";s:0:"";}s:24:"dojox.grid._View.content";a:2:{s:8:"instance";s:16:"dojox.grid._View";s:7:"summary";s:0:"";}s:23:"dojox.grid._View.header";a:2:{s:8:"instance";s:16:"dojox.grid._View";s:7:"summary";s:0:"";}s:48:"dojox.grid._View.headerNodeContainer.style.width";a:2:{s:8:"instance";s:16:"dojox.grid._View";s:7:"summary";s:0:"";}s:26:"dojox.grid._View.structure";a:2:{s:8:"instance";s:16:"dojox.grid._View";s:7:"summary";s:0:"";}s:28:"dojox.grid._View.onBeforeRow";a:2:{s:8:"instance";s:16:"dojox.grid._View";s:7:"summary";s:0:"";}s:27:"dojox.grid._View.onAfterRow";a:2:{s:8:"instance";s:16:"dojox.grid._View";s:7:"summary";s:0:"";}s:25:"dojox.grid._View.noscroll";a:2:{s:8:"instance";s:16:"dojox.grid._View";s:7:"summary";s:0:"";}s:45:"dojox.grid._View.scrollboxNode.style.overflow";a:2:{s:8:"instance";s:16:"dojox.grid._View";s:7:"summary";s:0:"";}s:32:"dojox.grid._View.simpleStructure";a:2:{s:8:"instance";s:16:"dojox.grid._View";s:7:"summary";s:0:"";}s:26:"dojox.grid._View.flexCells";a:2:{s:8:"instance";s:16:"dojox.grid._View";s:7:"summary";s:0:"";}s:57:"dojox.grid._View.headerContentNode.firstChild.style.width";a:2:{s:8:"instance";s:16:"dojox.grid._View";s:7:"summary";s:0:"";}s:43:"dojox.grid._View.scrollboxNode.style.height";a:2:{s:8:"instance";s:16:"dojox.grid._View";s:7:"summary";s:0:"";}s:23:"dojox.grid._View.source";a:2:{s:8:"instance";s:16:"dojox.grid._View";s:7:"summary";s:0:"";}s:29:"dojox.grid._View._source_conn";a:3:{s:8:"instance";s:16:"dojox.grid._View";s:7:"private";b:1;s:7:"summary";s:0:"";}s:28:"dojox.grid._View._source_sub";a:3:{s:8:"instance";s:16:"dojox.grid._View";s:7:"private";b:1;s:7:"summary";s:0:"";}s:35:"dojox.grid._View.source._targetNode";a:3:{s:8:"instance";s:16:"dojox.grid._View";s:7:"private";b:1;s:7:"summary";s:0:"";}s:37:"dojox.grid._View.source._beforeTarget";a:3:{s:8:"instance";s:16:"dojox.grid._View";s:7:"private";b:1;s:7:"summary";s:0:"";}s:32:"dojox.grid._View._removingColumn";a:3:{s:8:"instance";s:16:"dojox.grid._View";s:7:"private";b:1;s:7:"summary";s:0:"";}s:44:"dojox.grid._View.headerContentNode.innerHTML";a:2:{s:8:"instance";s:16:"dojox.grid._View";s:7:"summary";s:0:"";}s:29:"dojox.grid._View.contentWidth";a:2:{s:8:"instance";s:16:"dojox.grid._View";s:7:"summary";s:0:"";}s:28:"dojox.grid._View._hasHScroll";a:3:{s:8:"instance";s:16:"dojox.grid._View";s:7:"private";b:1;s:7:"summary";s:0:"";}s:28:"dojox.grid._View._hasVScroll";a:3:{s:8:"instance";s:16:"dojox.grid._View";s:7:"private";b:1;s:7:"summary";s:0:"";}s:31:"dojox.grid._View._pendingUpdate";a:3:{s:8:"instance";s:16:"dojox.grid._View";s:7:"private";b:1;s:7:"summary";s:0:"";}s:41:"dojox.grid._View.scrollboxNode.scrollLeft";a:2:{s:8:"instance";s:16:"dojox.grid._View";s:7:"summary";s:0:"";}s:38:"dojox.grid._View.headerNode.scrollLeft";a:2:{s:8:"instance";s:16:"dojox.grid._View";s:7:"summary";s:0:"";}s:40:"dojox.grid._View.scrollboxNode.scrollTop";a:2:{s:8:"instance";s:16:"dojox.grid._View";s:7:"summary";s:0:"";}s:22:"dojox.grid._GridAvatar";a:4:{s:4:"type";s:8:"Function";s:6:"chains";a:2:{s:9:"prototype";a:1:{i:0;s:15:"dojo.dnd.Avatar";}s:4:"call";a:1:{i:0;s:15:"dojo.dnd.Avatar";}}s:9:"classlike";b:1;s:7:"summary";s:0:"";}s:32:"dojox.grid._GridAvatar.construct";a:4:{s:9:"prototype";s:22:"dojox.grid._GridAvatar";s:4:"type";s:8:"Function";s:6:"source";s:1761:" var dd = dojo.doc; var a = dd.createElement("table"); a.cellPadding = a.cellSpacing = "0"; a.className = "dojoxGridDndAvatar"; a.style.position = "absolute"; a.style.zIndex = 1999; a.style.margin = "0px"; // to avoid dojo.marginBox() problems with table's margins var b = dd.createElement("tbody"); var tr = dd.createElement("tr"); var td = dd.createElement("td"); var img = dd.createElement("td"); tr.className = "dojoxGridDndAvatarItem"; img.className = "dojoxGridDndAvatarItemImage"; img.style.width = "16px"; var source = this.manager.source, node; if(source.creator){ // create an avatar representation of the node node = source._normailzedCreator(source.getItem(this.manager.nodes[0].id).data, "avatar").node; }else{ // or just clone the node and hope it works node = this.manager.nodes[0].cloneNode(true); if(node.tagName.toLowerCase() == "tr"){ // insert extra table nodes var table = dd.createElement("table"), tbody = dd.createElement("tbody"); tbody.appendChild(node); table.appendChild(tbody); node = table; }else if(node.tagName.toLowerCase() == "th"){ // insert extra table nodes var table = dd.createElement("table"), tbody = dd.createElement("tbody"), r = dd.createElement("tr"); table.cellPadding = table.cellSpacing = "0"; r.appendChild(node); tbody.appendChild(r); table.appendChild(tbody); node = table; } } node.id = ""; td.appendChild(node); tr.appendChild(img); tr.appendChild(td); dojo.style(tr, "opacity", 0.9); b.appendChild(tr); a.appendChild(b); this.node = a; var m = dojo.dnd.manager(); this.oldOffsetY = m.OFFSET_Y; m.OFFSET_Y = 1;";s:7:"summary";s:0:"";}s:30:"dojox.grid._GridAvatar.destroy";a:4:{s:9:"prototype";s:22:"dojox.grid._GridAvatar";s:4:"type";s:8:"Function";s:6:"source";s:79:" dojo.dnd.manager().OFFSET_Y = this.oldOffsetY; this.inherited(arguments);";s:7:"summary";s:0:"";}s:27:"dojox.grid._GridAvatar.node";a:2:{s:8:"instance";s:22:"dojox.grid._GridAvatar";s:7:"summary";s:0:"";}s:33:"dojox.grid._GridAvatar.oldOffsetY";a:2:{s:8:"instance";s:22:"dojox.grid._GridAvatar";s:7:"summary";s:0:"";}s:10:"makeAvatar";a:4:{s:4:"type";s:8:"Function";s:6:"source";s:156:" var src = this.source; if(src.viewIndex !== undefined){ return new dojox.grid._GridAvatar(this); } return oldMakeAvatar.call(dojo.dnd.manager());";s:6:"chains";a:1:{s:4:"call";a:1:{i:0;s:13:"oldMakeAvatar";}}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:"";}}