📄 tree.js
字号:
/* Copyright (c) 2004-2008, 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["dijit.Tree"]){dojo._hasResource["dijit.Tree"]=true;dojo.provide("dijit.Tree");dojo.require("dojo.fx");dojo.require("dijit._Widget");dojo.require("dijit._Templated");dojo.require("dijit._Container");dojo.require("dojo.cookie");dojo.declare("dijit._TreeNode",[dijit._Widget,dijit._Templated,dijit._Container,dijit._Contained],{item:null,isTreeNode:true,label:"",isExpandable:null,isExpanded:false,state:"UNCHECKED",templateString:"<div class=\"dijitTreeNode\" waiRole=\"presentation\"\n\t><div dojoAttachPoint=\"rowNode\" class=\"dijitTreeRow\" waiRole=\"presentation\"\n\t\t><img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint=\"expandoNode\" class=\"dijitTreeExpando\" waiRole=\"presentation\"\n\t\t><span dojoAttachPoint=\"expandoNodeText\" class=\"dijitExpandoText\" waiRole=\"presentation\"\n\t\t></span\n\t\t><span dojoAttachPoint=\"contentNode\" dojoAttachEvent=\"onmouseenter:_onMouseEnter, onmouseleave:_onMouseLeave\"\n\t\t\tclass=\"dijitTreeContent\" waiRole=\"presentation\">\n\t\t\t<img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint=\"iconNode\" class=\"dijitTreeIcon\" waiRole=\"presentation\"\n\t\t\t><span dojoAttachPoint=\"labelNode\" class=\"dijitTreeLabel\" wairole=\"treeitem\" tabindex=\"-1\" waiState=\"selected-false\" dojoAttachEvent=\"onfocus:_onNodeFocus\"></span>\n\t\t</span\n\t></div>\n\t<div dojoAttachPoint=\"containerNode\" class=\"dijitTreeContainer\" waiRole=\"presentation\" style=\"display: none;\"></div>\n</div>\n",postCreate:function(){this.setLabelNode(this.label);this._setExpando();this._updateItemClasses(this.item);if(this.isExpandable){dijit.setWaiState(this.labelNode,"expanded",this.isExpanded);}},markProcessing:function(){this.state="LOADING";this._setExpando(true);},unmarkProcessing:function(){this._setExpando(false);},_updateItemClasses:function(_1){var _2=this.tree,_3=_2.model;if(_2._v10Compat&&_1===_3.root){_1=null;}this.iconNode.className="dijitTreeIcon "+_2.getIconClass(_1,this.isExpanded);this.labelNode.className="dijitTreeLabel "+_2.getLabelClass(_1,this.isExpanded);},_updateLayout:function(){var _4=this.getParent();if(!_4||_4.rowNode.style.display=="none"){dojo.addClass(this.domNode,"dijitTreeIsRoot");}else{dojo.toggleClass(this.domNode,"dijitTreeIsLast",!this.getNextSibling());}},_setExpando:function(_5){var _6=["dijitTreeExpandoLoading","dijitTreeExpandoOpened","dijitTreeExpandoClosed","dijitTreeExpandoLeaf"];var _7=["*","-","+","*"];var _8=_5?0:(this.isExpandable?(this.isExpanded?1:2):3);dojo.forEach(_6,function(s){dojo.removeClass(this.expandoNode,s);},this);dojo.addClass(this.expandoNode,_6[_8]);this.expandoNodeText.innerHTML=_7[_8];},expand:function(){if(this.isExpanded){return;}this._wipeOut&&this._wipeOut.stop();this.isExpanded=true;dijit.setWaiState(this.labelNode,"expanded","true");dijit.setWaiRole(this.containerNode,"group");this.contentNode.className="dijitTreeContent dijitTreeContentExpanded";this._setExpando();this._updateItemClasses(this.item);if(!this._wipeIn){this._wipeIn=dojo.fx.wipeIn({node:this.containerNode,duration:dijit.defaultDuration});}this._wipeIn.play();},collapse:function(){if(!this.isExpanded){return;}this._wipeIn&&this._wipeIn.stop();this.isExpanded=false;dijit.setWaiState(this.labelNode,"expanded","false");this.contentNode.className="dijitTreeContent";this._setExpando();this._updateItemClasses(this.item);if(!this._wipeOut){this._wipeOut=dojo.fx.wipeOut({node:this.containerNode,duration:dijit.defaultDuration});}this._wipeOut.play();},setLabelNode:function(_a){this.labelNode.innerHTML="";this.labelNode.appendChild(dojo.doc.createTextNode(_a));},setChildItems:function(_b){var _c=this.tree,_d=_c.model;this.getChildren().forEach(function(_e){dijit._Container.prototype.removeChild.call(this,_e);},this);this.state="LOADED";if(_b&&_b.length>0){this.isExpandable=true;dojo.forEach(_b,function(_f){var id=_d.getIdentity(_f),_11=_c._itemNodeMap[id],_12=(_11&&!_11.getParent())?_11:this.tree._createTreeNode({item:_f,tree:_c,isExpandable:_d.mayHaveChildren(_f),label:_c.getLabel(_f)});this.addChild(_12);_c._itemNodeMap[id]=_12;if(this.tree.persist){if(_c._openedItemIds[id]){_c._expandNode(_12);}}},this);dojo.forEach(this.getChildren(),function(_13,idx){_13._updateLayout();});}else{this.isExpandable=false;}if(this._setExpando){this._setExpando(false);}if(this==_c.rootNode){var fc=this.tree.showRoot?this:this.getChildren()[0],_16=fc?fc.labelNode:this.domNode;_16.setAttribute("tabIndex","0");_c.lastFocused=fc;}},removeChild:function(_17){this.inherited(arguments);var _18=this.getChildren();if(_18.length==0){this.isExpandable=false;this.collapse();}dojo.forEach(_18,function(_19){_19._updateLayout();});},makeExpandable:function(){this.isExpandable=true;this._setExpando(false);},_onNodeFocus:function(evt){var _1b=dijit.getEnclosingWidget(evt.target);this.tree._onTreeFocus(_1b);},_onMouseEnter:function(evt){dojo.addClass(this.contentNode,"dijitTreeNodeHover");},_onMouseLeave:function(evt){dojo.removeClass(this.contentNode,"dijitTreeNodeHover");}});dojo.declare("dijit.Tree",[dijit._Widget,dijit._Templated],{store:null,model:null,query:null,label:"",showRoot:true,childrenAttr:["children"],openOnClick:false,templateString:"<div class=\"dijitTreeContainer\" waiRole=\"tree\"\n\tdojoAttachEvent=\"onclick:_onClick,onkeypress:_onKeyPress\">\n</div>\n",isExpandable:true,isTree:true,persist:true,dndController:null,dndParams:["onDndDrop","itemCreator","onDndCancel","checkAcceptance","checkItemAcceptance","dragThreshold"],onDndDrop:null,itemCreator:null,onDndCancel:null,checkAcceptance:null,checkItemAcceptance:null,dragThreshold:0,_publish:function(_1e,_1f){dojo.publish(this.id,[dojo.mixin({tree:this,event:_1e},_1f||{})]);},postMixInProperties:function(){this.tree=this;this._itemNodeMap={};if(!this.cookieName){this.cookieName=this.id+"SaveStateCookie";}},postCreate:function(){if(this.persist){var _20=dojo.cookie(this.cookieName);this._openedItemIds={};if(_20){dojo.forEach(_20.split(","),function(_21){this._openedItemIds[_21]=true;},this);}}if(!this.model){this._store2model();}this.connect(this.model,"onChange","_onItemChange");this.connect(this.model,"onChildrenChange","_onItemChildrenChange");this.connect(this.model,"onDelete","_onItemDelete");this._load();this.inherited(arguments);if(this.dndController){if(dojo.isString(this.dndController)){this.dndController=dojo.getObject(this.dndController);}var _22={};for(var i=0;i<this.dndParams.length;i++){if(this[this.dndParams[i]]){_22[this.dndParams[i]]=this[this.dndParams[i]];}}this.dndController=new this.dndController(this,_22);}},_store2model:function(){this._v10Compat=true;dojo.deprecated("Tree: from version 2.0, should specify a model object rather than a store/query");var _24={id:this.id+"_ForestStoreModel",store:this.store,query:this.query,childrenAttrs:this.childrenAttr};if(this.params.mayHaveChildren){_24.mayHaveChildren=dojo.hitch(this,"mayHaveChildren");}if(this.params.getItemChildren){_24.getChildren=dojo.hitch(this,function(_25,_26,_27){this.getItemChildren((this._v10Compat&&_25===this.model.root)?null:_25,_26,_27);});}this.model=new dijit.tree.ForestStoreModel(_24);this.showRoot=Boolean(this.label);},_load:function(){this.model.getRoot(dojo.hitch(this,function(_28){var rn=this.rootNode=this.tree._createTreeNode({item:_28,tree:this,isExpandable:true,label:this.label||this.getLabel(_28)});if(!this.showRoot){rn.rowNode.style.display="none";}this.domNode.appendChild(rn.domNode);this._itemNodeMap[this.model.getIdentity(_28)]=rn;rn._updateLayout();this._expandNode(rn);}),function(err){console.error(this,": error loading root: ",err);});},mayHaveChildren:function(_2b){},getItemChildren:function(_2c,_2d){},getLabel:function(_2e){return this.model.getLabel(_2e);},getIconClass:function(_2f,_30){return (!_2f||this.model.mayHaveChildren(_2f))?(_30?"dijitFolderOpened":"dijitFolderClosed"):"dijitLeaf";},getLabelClass:function(_31,_32){},_onKeyPress:function(e){if(e.altKey){return;}var dk=dojo.keys;var _35=dijit.getEnclosingWidget(e.target);if(!_35){return;}var key=e.charOrCode;if(typeof key=="string"){if(!e.altKey&&!e.ctrlKey&&!e.shiftKey&&!e.metaKey){this._onLetterKeyNav({node:_35,key:key.toLowerCase()});dojo.stopEvent(e);}}else{var map=this._keyHandlerMap;if(!map){map={};map[dk.ENTER]="_onEnterKey";map[this.isLeftToRight()?dk.LEFT_ARROW:dk.RIGHT_ARROW]="_onLeftArrow";map[this.isLeftToRight()?dk.RIGHT_ARROW:dk.LEFT_ARROW]="_onRightArrow";map[dk.UP_ARROW]="_onUpArrow";map[dk.DOWN_ARROW]="_onDownArrow";map[dk.HOME]="_onHomeKey";map[dk.END]="_onEndKey";this._keyHandlerMap=map;}if(this._keyHandlerMap[key]){this[this._keyHandlerMap[key]]({node:_35,item:_35.item});dojo.stopEvent(e);}}},_onEnterKey:function(_38){this._publish("execute",{item:_38.item,node:_38.node});this.onClick(_38.item,_38.node);},_onDownArrow:function(_39){var _3a=this._getNextNode(_39.node);if(_3a&&_3a.isTreeNode){this.focusNode(_3a);}},_onUpArrow:function(_3b){var _3c=_3b.node;var _3d=_3c.getPreviousSibling();if(_3d){_3c=_3d;while(_3c.isExpandable&&_3c.isExpanded&&_3c.hasChildren()){var _3e=_3c.getChildren();_3c=_3e[_3e.length-1];}}else{var _3f=_3c.getParent();if(!(!this.showRoot&&_3f===this.rootNode)){_3c=_3f;}}if(_3c&&_3c.isTreeNode){this.focusNode(_3c);}},_onRightArrow:function(_40){var _41=_40.node;if(_41.isExpandable&&!_41.isExpanded){this._expandNode(_41);}else{if(_41.hasChildren()){_41=_41.getChildren()[0];if(_41&&_41.isTreeNode){this.focusNode(_41);}}}},_onLeftArrow:function(_42){var _43=_42.node;if(_43.isExpandable&&_43.isExpanded){this._collapseNode(_43);}else{var _44=_43.getParent();if(_44&&_44.isTreeNode&&!(!this.showRoot&&_44===this.rootNode)){this.focusNode(_44);}}},_onHomeKey:function(){var _45=this._getRootOrFirstNode();if(_45){this.focusNode(_45);}},_onEndKey:function(_46){var _47=this;while(_47.isExpanded){var c=_47.getChildren();_47=c[c.length-1];}if(_47&&_47.isTreeNode){this.focusNode(_47);}},_onLetterKeyNav:function(_49){var _4a=_49.node,_4b=_4a,key=_49.key;do{_4a=this._getNextNode(_4a);if(!_4a){_4a=this._getRootOrFirstNode();}}while(_4a!==_4b&&(_4a.label.charAt(0).toLowerCase()!=key));if(_4a&&_4a.isTreeNode){if(_4a!==_4b){this.focusNode(_4a);}}},_onClick:function(e){var _4e=e.target;var _4f=dijit.getEnclosingWidget(_4e);if(!_4f||!_4f.isTreeNode){return;}if((this.openOnClick&&_4f.isExpandable)||(_4e==_4f.expandoNode||_4e==_4f.expandoNodeText)){if(_4f.isExpandable){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -