12345678 |
- /*
- Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
- Available via Academic Free License >= 2.1 OR the modified BSD license.
- see: http://dojotoolkit.org/license for details
- */
- if(!dojo._hasResource["dojox.grid._TreeView"]){dojo._hasResource["dojox.grid._TreeView"]=true;dojo.provide("dojox.grid._TreeView");dojo.require("dijit._Widget");dojo.require("dijit._Templated");dojo.require("dojox.grid._View");dojo.declare("dojox.grid._Expando",[dijit._Widget,dijit._Templated],{open:false,toggleClass:"",itemId:"",cellIdx:-1,view:null,rowNode:null,rowIdx:-1,expandoCell:null,level:0,templateString:"<div class=\"dojoxGridExpando\"\n\t><div class=\"dojoxGridExpandoNode\" dojoAttachEvent=\"onclick:onToggle\"\n\t\t><div class=\"dojoxGridExpandoNodeInner\" dojoAttachPoint=\"expandoInner\"></div\n\t></div\n></div>\n",_toggleRows:function(_1,_2){if(!_1||!this.rowNode){return;}if(dojo.query("table.dojoxGridRowTableNeedsRowUpdate").length){if(this._initialized){this.view.grid.updateRow(this.rowIdx);}return;}var _3=this;var g=this.view.grid;if(g.treeModel){var p=this._tableRow?dojo.attr(this._tableRow,"dojoxTreeGridPath"):"";if(p){dojo.query("tr[dojoxTreeGridPath^=\""+p+"/\"]",this.rowNode).forEach(function(n){var en=dojo.query(".dojoxGridExpando",n)[0];if(en&&en.parentNode&&en.parentNode.parentNode&&!dojo.hasClass(en.parentNode.parentNode,"dojoxGridNoChildren")){var ew=dijit.byNode(en);if(ew){ew._toggleRows(_1,ew.open&&_2);}}n.style.display=_2?"":"none";});}}else{dojo.query("tr."+_1,this.rowNode).forEach(function(n){if(dojo.hasClass(n,"dojoxGridExpandoRow")){var en=dojo.query(".dojoxGridExpando",n)[0];if(en){var ew=dijit.byNode(en);var _4=ew?ew.toggleClass:en.getAttribute("toggleClass");var _5=ew?ew.open:_3.expandoCell.getOpenState(en.getAttribute("itemId"));_3._toggleRows(_4,_5&&_2);}}n.style.display=_2?"":"none";});}},setOpen:function(_6){if(_6&&dojo.hasClass(this.domNode,"dojoxGridExpandoLoading")){_6=false;}var _7=this.view;var _8=_7.grid;var _9=_8.store;var _a=_8.treeModel;var d=this;var _b=this.rowIdx;var me=_8._by_idx[_b];if(!me){return;}if(_a&&!this._loadedChildren){if(_6){var _c=_8.getItem(dojo.attr(this._tableRow,"dojoxTreeGridPath"));if(_c){this.expandoInner.innerHTML="o";dojo.addClass(this.domNode,"dojoxGridExpandoLoading");_a.getChildren(_c,function(_d){d._loadedChildren=true;d._setOpen(_6);});}else{this._setOpen(_6);}}else{this._setOpen(_6);}}else{if(!_a&&_9){if(_6){var _e=_8._by_idx[this.rowIdx];if(_e&&!_9.isItemLoaded(_e.item)){this.expandoInner.innerHTML="o";dojo.addClass(this.domNode,"dojoxGridExpandoLoading");_9.loadItem({item:_e.item,onItem:dojo.hitch(this,function(i){var _f=_9.getIdentity(i);_8._by_idty[_f]=_8._by_idx[this.rowIdx]={idty:_f,item:i};this._setOpen(_6);})});}else{this._setOpen(_6);}}else{this._setOpen(_6);}}else{this._setOpen(_6);}}},_setOpen:function(_10){if(_10&&this._tableRow&&dojo.hasClass(this._tableRow,"dojoxGridNoChildren")){this._setOpen(false);return;}this.expandoInner.innerHTML=_10?"-":"+";dojo.removeClass(this.domNode,"dojoxGridExpandoLoading");dojo.toggleClass(this.domNode,"dojoxGridExpandoOpened",_10);if(this._tableRow){dojo.toggleClass(this._tableRow,"dojoxGridRowCollapsed",!_10);var _11=dojo.attr(this._tableRow,"dojoxTreeGridBaseClasses");var _12="";if(_10){_12=dojo.trim((" "+_11+" ").replace(" dojoxGridRowCollapsed "," "));}else{if((" "+_11+" ").indexOf(" dojoxGridRowCollapsed ")<0){_12=_11+(_11?" ":"")+"dojoxGridRowCollapsed";}else{_12=_11;}}dojo.attr(this._tableRow,"dojoxTreeGridBaseClasses",_12);}var _13=(this.open!==_10);this.open=_10;if(this.expandoCell&&this.itemId){this.expandoCell.openStates[this.itemId]=_10;}var v=this.view;var g=v.grid;if(this.toggleClass&&_13){if(!this._tableRow||!this._tableRow.style.display){this._toggleRows(this.toggleClass,_10);}}if(v&&this._initialized&&this.rowIdx>=0){g.rowHeightChanged(this.rowIdx);g.postresize();v.hasVScrollbar(true);}this._initialized=true;},onToggle:function(e){this.setOpen(!this.open);dojo.stopEvent(e);},setRowNode:function(_14,_15,_16){if(this.cellIdx<0||!this.itemId){return false;}this._initialized=false;this.view=_16;this.rowNode=_15;this.rowIdx=_14;this.expandoCell=_16.structure.cells[0][this.cellIdx];var d=this.domNode;if(d&&d.parentNode&&d.parentNode.parentNode){this._tableRow=d.parentNode.parentNode;}this.open=this.expandoCell.getOpenState(this.itemId);if(_16.grid.treeModel){dojo.style(this.domNode,"marginLeft",(this.level*18)+"px");if(this.domNode.parentNode){dojo.style(this.domNode.parentNode,"backgroundPosition",((this.level*18)+(3))+"px");}}this.setOpen(this.open);return true;}});dojo.declare("dojox.grid._TreeContentBuilder",dojox.grid._ContentBuilder,{generateHtml:function(_17,_18){var _19=this.getTableArray(),v=this.view,row=v.structure.cells[0],_1a=this.grid.getItem(_18),_1b=this.grid,_1c=this.grid.store;dojox.grid.util.fire(this.view,"onBeforeRow",[_18,[row]]);var _1d=function(_1e,_1f,_20,_21,_22,_23){if(!_23){if(_19[0].indexOf("dojoxGridRowTableNeedsRowUpdate")==-1){_19[0]=_19[0].replace("dojoxGridRowTable","dojoxGridRowTable dojoxGridRowTableNeedsRowUpdate");}return;}var _24=_19.length;_21=_21||[];var _25=_21.join("|");var _26=_21[_21.length-1];var _27=_26+(_20?" dojoxGridSummaryRow":"");var _28="";if(_1b.treeModel&&_1f&&!_1b.treeModel.mayHaveChildren(_1f)){_27+=" dojoxGridNoChildren";}_19.push("<tr style=\""+_28+"\" class=\""+_27+"\" dojoxTreeGridPath=\""+_22.join("/")+"\" dojoxTreeGridBaseClasses=\""+_27+"\">");var _29=_1e+1;var _2a=null;for(var i=0,_2b;(_2b=row[i]);i++){var m=_2b.markup,cc=_2b.customClasses=[],cs=_2b.customStyles=[];m[5]=_2b.formatAtLevel(_22,_1f,_1e,_20,_26,cc);m[1]=cc.join(" ");m[3]=cs.join(";");_19.push.apply(_19,m);if(!_2a&&_2b.level===_29&&_2b.parentCell){_2a=_2b.parentCell;}}_19.push("</tr>");if(_1f&&_1c&&_1c.isItem(_1f)){var _2c=_1c.getIdentity(_1f);if(typeof _1b._by_idty_paths[_2c]=="undefined"){_1b._by_idty_paths[_2c]=_22.join("/");}}var _2d;var _2e;var _2f;var _30;var _31=_22.concat([]);if(_1b.treeModel&&_1f){if(_1b.treeModel.mayHaveChildren(_1f)){_2d=v.structure.cells[0][_1b.expandoCell||0];_2e=_2d.getOpenState(_1f)&&_23;_2f=new dojox.grid.TreePath(_22.join("/"),_1b);_30=_2f.children(true)||[];dojo.forEach(_30,function(_32,idx){var _33=_25.split("|");_33.push(_33[_33.length-1]+"-"+idx);_31.push(idx);_1d(_29,_32,false,_33,_31,_2e);_31.pop();});}}else{if(_1f&&_2a&&!_20){_2d=v.structure.cells[0][_2a.level];_2e=_2d.getOpenState(_1f)&&_23;if(_1c.hasAttribute(_1f,_2a.field)){var _34=_25.split("|");_34.pop();_2f=new dojox.grid.TreePath(_22.join("/"),_1b);_30=_2f.children(true)||[];if(_30.length){_19[_24]="<tr class=\""+_34.join(" ")+" dojoxGridExpandoRow\" dojoxTreeGridPath=\""+_22.join("/")+"\">";dojo.forEach(_30,function(_35,idx){var _36=_25.split("|");_36.push(_36[_36.length-1]+"-"+idx);_31.push(idx);_1d(_29,_35,false,_36,_31,_2e);_31.pop();});_31.push(_30.length);_1d(_1e,_1f,true,_21,_31,_2e);}else{_19[_24]="<tr class=\""+_26+" dojoxGridNoChildren\" dojoxTreeGridPath=\""+_22.join("/")+"\">";}}else{if(!_1c.isItemLoaded(_1f)){_19[0]=_19[0].replace("dojoxGridRowTable","dojoxGridRowTable dojoxGridRowTableNeedsRowUpdate");}else{_19[_24]="<tr class=\""+_26+" dojoxGridNoChildren\" dojoxTreeGridPath=\""+_22.join("/")+"\">";}}}else{if(_1f&&!_20&&_21.length>1){_19[_24]="<tr class=\""+_21[_21.length-2]+"\" dojoxTreeGridPath=\""+_22.join("/")+"\">";}}}};_1d(0,_1a,false,["dojoxGridRowToggle-"+_18],[_18],true);_19.push("</table>");return _19.join("");},findTarget:function(_37,_38){var n=_37;while(n&&(n!=this.domNode)){if(n.tagName&&n.tagName.toLowerCase()=="tr"){break;}n=n.parentNode;}return (n!=this.domNode)?n:null;},getCellNode:function(_39,_3a){var _3b=dojo.query("td[idx='"+_3a+"']",_39)[0];if(_3b&&_3b.parentNode&&!dojo.hasClass(_3b.parentNode,"dojoxGridSummaryRow")){return _3b;}},decorateEvent:function(e){e.rowNode=this.findRowTarget(e.target);if(!e.rowNode){return false;}e.rowIndex=dojo.attr(e.rowNode,"dojoxTreeGridPath");this.baseDecorateEvent(e);e.cell=this.grid.getCell(e.cellIndex);return true;}});dojo.declare("dojox.grid._TreeView",[dojox.grid._View],{_contentBuilderClass:dojox.grid._TreeContentBuilder,_onDndDrop:function(_3c,_3d,_3e){if(this.grid&&this.grid.aggregator){this.grid.aggregator.clearSubtotalCache();}this.inherited(arguments);},postCreate:function(){this.inherited(arguments);this.connect(this.grid,"_cleanupExpandoCache","_cleanupExpandoCache");},_cleanupExpandoCache:function(_3f,_40,_41){if(_3f==-1){return;}dojo.forEach(this.grid.layout.cells,function(_42){if(typeof _42["openStates"]!="undefined"){if(_40 in _42.openStates){delete _42.openStates[_40];}}});if(typeof _3f=="string"&&_3f.indexOf("/")>-1){var _43=new dojox.grid.TreePath(_3f,this.grid);var _44=_43.parent();while(_44){_43=_44;_44=_43.parent();}var _45=_43.item();if(!_45){return;}var _46=this.grid.store.getIdentity(_45);if(typeof this._expandos[_46]!="undefined"){for(var i in this._expandos[_46]){var exp=this._expandos[_46][i];if(exp){exp.destroy();}delete this._expandos[_46][i];}delete this._expandos[_46];}}else{for(var i in this._expandos){if(typeof this._expandos[i]!="undefined"){for(var j in this._expandos[i]){var exp=this._expandos[i][j];if(exp){exp.destroy();}}}}this._expandos={};}},postMixInProperties:function(){this.inherited(arguments);this._expandos={};},onBeforeRow:function(_47,_48){var g=this.grid;if(g._by_idx&&g._by_idx[_47]&&g._by_idx[_47].idty){var _49=g._by_idx[_47].idty;this._expandos[_49]=this._expandos[_49]||{};}this.inherited(arguments);},onAfterRow:function(_4a,_4b,_4c){dojo.forEach(dojo.query("span.dojoxGridExpando",_4c),function(n){if(n&&n.parentNode){var tc=n.getAttribute("toggleClass");var _4d;var _4e;var g=this.grid;if(g._by_idx&&g._by_idx[_4a]&&g._by_idx[_4a].idty){_4d=g._by_idx[_4a].idty;_4e=this._expandos[_4d][tc];}if(_4e){dojo.place(_4e.domNode,n,"replace");_4e.itemId=n.getAttribute("itemId");_4e.cellIdx=parseInt(n.getAttribute("cellIdx"),10);if(isNaN(_4e.cellIdx)){_4e.cellIdx=-1;}}else{_4e=dojo.parser.parse(n.parentNode)[0];if(_4d){this._expandos[_4d][tc]=_4e;}}if(!_4e.setRowNode(_4a,_4c,this)){_4e.domNode.parentNode.removeChild(_4e.domNode);}}},this);var alt=false;var _4f=this;dojo.query("tr[dojoxTreeGridPath]",_4c).forEach(function(n){dojo.toggleClass(n,"dojoxGridSubRowAlt",alt);dojo.attr(n,"dojoxTreeGridBaseClasses",n.className);alt=!alt;_4f.grid.rows.styleRowNode(dojo.attr(n,"dojoxTreeGridPath"),n);});this.inherited(arguments);},updateRowStyles:function(_50){var _51=dojo.query("tr[dojoxTreeGridPath='"+_50+"']",this.domNode);if(_51.length){this.styleRowNode(_50,_51[0]);}},getCellNode:function(_52,_53){var row=dojo.query("tr[dojoxTreeGridPath='"+_52+"']",this.domNode)[0];if(row){return this.content.getCellNode(row,_53);}}});}
|