]>
Commit | Line | Data |
---|---|---|
2f01fe57 AD |
1 | /* |
2 | Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. | |
3 | Available via Academic Free License >= 2.1 OR the modified BSD license. | |
4 | see: http://dojotoolkit.org/license for details | |
5 | */ | |
6 | ||
7 | ||
8 | if(!dojo._hasResource["dijit.Tree"]){ | |
9 | dojo._hasResource["dijit.Tree"]=true; | |
10 | dojo.provide("dijit.Tree"); | |
11 | dojo.require("dojo.fx"); | |
12 | dojo.require("dojo.DeferredList"); | |
13 | dojo.require("dijit._Widget"); | |
14 | dojo.require("dijit._Templated"); | |
15 | dojo.require("dijit._Container"); | |
16 | dojo.require("dijit._Contained"); | |
17 | dojo.require("dijit._CssStateMixin"); | |
18 | dojo.require("dojo.cookie"); | |
19 | dojo.declare("dijit._TreeNode",[dijit._Widget,dijit._Templated,dijit._Container,dijit._Contained,dijit._CssStateMixin],{item:null,isTreeNode:true,label:"",isExpandable:null,isExpanded:false,state:"UNCHECKED",templateString:dojo.cache("dijit","templates/TreeNode.html","<div class=\"dijitTreeNode\" waiRole=\"presentation\"\n\t><div dojoAttachPoint=\"rowNode\" class=\"dijitTreeRow\" waiRole=\"presentation\" dojoAttachEvent=\"onmouseenter:_onMouseEnter, onmouseleave:_onMouseLeave, onclick:_onClick, ondblclick:_onDblClick\"\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\"\n\t\t\tclass=\"dijitTreeContent\" waiRole=\"presentation\">\n\t\t\t<img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint=\"iconNode\" class=\"dijitIcon dijitTreeIcon\" waiRole=\"presentation\"\n\t\t\t/><span dojoAttachPoint=\"labelNode\" class=\"dijitTreeLabel\" wairole=\"treeitem\" tabindex=\"-1\" waiState=\"selected-false\" dojoAttachEvent=\"onfocus:_onLabelFocus\"></span>\n\t\t</span\n\t></div>\n\t<div dojoAttachPoint=\"containerNode\" class=\"dijitTreeContainer\" waiRole=\"presentation\" style=\"display: none;\"></div>\n</div>\n"),baseClass:"dijitTreeNode",cssStateNodes:{rowNode:"dijitTreeRow",labelNode:"dijitTreeLabel"},attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{label:{node:"labelNode",type:"innerText"},tooltip:{node:"rowNode",type:"attribute",attribute:"title"}}),postCreate:function(){ | |
20 | this.inherited(arguments); | |
21 | this._setExpando(); | |
22 | this._updateItemClasses(this.item); | |
23 | if(this.isExpandable){ | |
24 | dijit.setWaiState(this.labelNode,"expanded",this.isExpanded); | |
25 | } | |
26 | },_setIndentAttr:function(_1){ | |
27 | this.indent=_1; | |
28 | var _2=(Math.max(_1,0)*this.tree._nodePixelIndent)+"px"; | |
29 | dojo.style(this.domNode,"backgroundPosition",_2+" 0px"); | |
30 | dojo.style(this.rowNode,this.isLeftToRight()?"paddingLeft":"paddingRight",_2); | |
31 | dojo.forEach(this.getChildren(),function(_3){ | |
32 | _3.set("indent",_1+1); | |
33 | }); | |
34 | },markProcessing:function(){ | |
35 | this.state="LOADING"; | |
36 | this._setExpando(true); | |
37 | },unmarkProcessing:function(){ | |
38 | this._setExpando(false); | |
39 | },_updateItemClasses:function(_4){ | |
40 | var _5=this.tree,_6=_5.model; | |
41 | if(_5._v10Compat&&_4===_6.root){ | |
42 | _4=null; | |
43 | } | |
44 | this._applyClassAndStyle(_4,"icon","Icon"); | |
45 | this._applyClassAndStyle(_4,"label","Label"); | |
46 | this._applyClassAndStyle(_4,"row","Row"); | |
47 | },_applyClassAndStyle:function(_7,_8,_9){ | |
48 | var _a="_"+_8+"Class"; | |
49 | var _b=_8+"Node"; | |
50 | if(this[_a]){ | |
51 | dojo.removeClass(this[_b],this[_a]); | |
52 | } | |
53 | this[_a]=this.tree["get"+_9+"Class"](_7,this.isExpanded); | |
54 | if(this[_a]){ | |
55 | dojo.addClass(this[_b],this[_a]); | |
56 | } | |
57 | dojo.style(this[_b],this.tree["get"+_9+"Style"](_7,this.isExpanded)||{}); | |
58 | },_updateLayout:function(){ | |
59 | var _c=this.getParent(); | |
60 | if(!_c||_c.rowNode.style.display=="none"){ | |
61 | dojo.addClass(this.domNode,"dijitTreeIsRoot"); | |
62 | }else{ | |
63 | dojo.toggleClass(this.domNode,"dijitTreeIsLast",!this.getNextSibling()); | |
64 | } | |
65 | },_setExpando:function(_d){ | |
66 | var _e=["dijitTreeExpandoLoading","dijitTreeExpandoOpened","dijitTreeExpandoClosed","dijitTreeExpandoLeaf"],_f=["*","-","+","*"],idx=_d?0:(this.isExpandable?(this.isExpanded?1:2):3); | |
67 | dojo.removeClass(this.expandoNode,_e); | |
68 | dojo.addClass(this.expandoNode,_e[idx]); | |
69 | this.expandoNodeText.innerHTML=_f[idx]; | |
70 | },expand:function(){ | |
71 | if(this._expandDeferred){ | |
72 | return this._expandDeferred; | |
73 | } | |
74 | this._wipeOut&&this._wipeOut.stop(); | |
75 | this.isExpanded=true; | |
76 | dijit.setWaiState(this.labelNode,"expanded","true"); | |
77 | dijit.setWaiRole(this.containerNode,"group"); | |
78 | dojo.addClass(this.contentNode,"dijitTreeContentExpanded"); | |
79 | this._setExpando(); | |
80 | this._updateItemClasses(this.item); | |
81 | if(this==this.tree.rootNode){ | |
82 | dijit.setWaiState(this.tree.domNode,"expanded","true"); | |
83 | } | |
84 | var def,_10=dojo.fx.wipeIn({node:this.containerNode,duration:dijit.defaultDuration,onEnd:function(){ | |
85 | def.callback(true); | |
86 | }}); | |
87 | def=(this._expandDeferred=new dojo.Deferred(function(){ | |
88 | _10.stop(); | |
89 | })); | |
90 | _10.play(); | |
91 | return def; | |
92 | },collapse:function(){ | |
93 | if(!this.isExpanded){ | |
94 | return; | |
95 | } | |
96 | if(this._expandDeferred){ | |
97 | this._expandDeferred.cancel(); | |
98 | delete this._expandDeferred; | |
99 | } | |
100 | this.isExpanded=false; | |
101 | dijit.setWaiState(this.labelNode,"expanded","false"); | |
102 | if(this==this.tree.rootNode){ | |
103 | dijit.setWaiState(this.tree.domNode,"expanded","false"); | |
104 | } | |
105 | dojo.removeClass(this.contentNode,"dijitTreeContentExpanded"); | |
106 | this._setExpando(); | |
107 | this._updateItemClasses(this.item); | |
108 | if(!this._wipeOut){ | |
109 | this._wipeOut=dojo.fx.wipeOut({node:this.containerNode,duration:dijit.defaultDuration}); | |
110 | } | |
111 | this._wipeOut.play(); | |
112 | },indent:0,setChildItems:function(_11){ | |
113 | var _12=this.tree,_13=_12.model,_14=[]; | |
114 | dojo.forEach(this.getChildren(),function(_15){ | |
115 | dijit._Container.prototype.removeChild.call(this,_15); | |
116 | },this); | |
117 | this.state="LOADED"; | |
118 | if(_11&&_11.length>0){ | |
119 | this.isExpandable=true; | |
120 | dojo.forEach(_11,function(_16){ | |
121 | var id=_13.getIdentity(_16),_17=_12._itemNodesMap[id],_18; | |
122 | if(_17){ | |
123 | for(var i=0;i<_17.length;i++){ | |
124 | if(_17[i]&&!_17[i].getParent()){ | |
125 | _18=_17[i]; | |
126 | _18.set("indent",this.indent+1); | |
127 | break; | |
128 | } | |
129 | } | |
130 | } | |
131 | if(!_18){ | |
132 | _18=this.tree._createTreeNode({item:_16,tree:_12,isExpandable:_13.mayHaveChildren(_16),label:_12.getLabel(_16),tooltip:_12.getTooltip(_16),dir:_12.dir,lang:_12.lang,indent:this.indent+1}); | |
133 | if(_17){ | |
134 | _17.push(_18); | |
135 | }else{ | |
136 | _12._itemNodesMap[id]=[_18]; | |
137 | } | |
138 | } | |
139 | this.addChild(_18); | |
140 | if(this.tree.autoExpand||this.tree._state(_16)){ | |
141 | _14.push(_12._expandNode(_18)); | |
142 | } | |
143 | },this); | |
144 | dojo.forEach(this.getChildren(),function(_19,idx){ | |
145 | _19._updateLayout(); | |
146 | }); | |
147 | }else{ | |
148 | this.isExpandable=false; | |
149 | } | |
150 | if(this._setExpando){ | |
151 | this._setExpando(false); | |
152 | } | |
153 | this._updateItemClasses(this.item); | |
154 | if(this==_12.rootNode){ | |
155 | var fc=this.tree.showRoot?this:this.getChildren()[0]; | |
156 | if(fc){ | |
157 | fc.setFocusable(true); | |
158 | _12.lastFocused=fc; | |
159 | }else{ | |
160 | _12.domNode.setAttribute("tabIndex","0"); | |
161 | } | |
162 | } | |
163 | return new dojo.DeferredList(_14); | |
164 | },removeChild:function(_1a){ | |
165 | this.inherited(arguments); | |
166 | var _1b=this.getChildren(); | |
167 | if(_1b.length==0){ | |
168 | this.isExpandable=false; | |
169 | this.collapse(); | |
170 | } | |
171 | dojo.forEach(_1b,function(_1c){ | |
172 | _1c._updateLayout(); | |
173 | }); | |
174 | },makeExpandable:function(){ | |
175 | this.isExpandable=true; | |
176 | this._setExpando(false); | |
177 | },_onLabelFocus:function(evt){ | |
178 | this.tree._onNodeFocus(this); | |
179 | },setSelected:function(_1d){ | |
180 | dijit.setWaiState(this.labelNode,"selected",_1d); | |
181 | dojo.toggleClass(this.rowNode,"dijitTreeRowSelected",_1d); | |
182 | },setFocusable:function(_1e){ | |
183 | this.labelNode.setAttribute("tabIndex",_1e?"0":"-1"); | |
184 | },_onClick:function(evt){ | |
185 | this.tree._onClick(this,evt); | |
186 | },_onDblClick:function(evt){ | |
187 | this.tree._onDblClick(this,evt); | |
188 | },_onMouseEnter:function(evt){ | |
189 | this.tree._onNodeMouseEnter(this,evt); | |
190 | },_onMouseLeave:function(evt){ | |
191 | this.tree._onNodeMouseLeave(this,evt); | |
192 | }}); | |
193 | dojo.declare("dijit.Tree",[dijit._Widget,dijit._Templated],{store:null,model:null,query:null,label:"",showRoot:true,childrenAttr:["children"],path:[],selectedItem:null,openOnClick:false,openOnDblClick:false,templateString:dojo.cache("dijit","templates/Tree.html","<div class=\"dijitTree dijitTreeContainer\" waiRole=\"tree\"\n\tdojoAttachEvent=\"onkeypress:_onKeyPress\">\n\t<div class=\"dijitInline dijitTreeIndent\" style=\"position: absolute; top: -9999px\" dojoAttachPoint=\"indentDetector\"></div>\n</div>\n"),persist:true,autoExpand:false,dndController:null,dndParams:["onDndDrop","itemCreator","onDndCancel","checkAcceptance","checkItemAcceptance","dragThreshold","betweenThreshold"],onDndDrop:null,itemCreator:null,onDndCancel:null,checkAcceptance:null,checkItemAcceptance:null,dragThreshold:5,betweenThreshold:0,_nodePixelIndent:19,_publish:function(_1f,_20){ | |
194 | dojo.publish(this.id,[dojo.mixin({tree:this,event:_1f},_20||{})]); | |
195 | },postMixInProperties:function(){ | |
196 | this.tree=this; | |
197 | if(this.autoExpand){ | |
198 | this.persist=false; | |
199 | } | |
200 | this._itemNodesMap={}; | |
201 | if(!this.cookieName){ | |
202 | this.cookieName=this.id+"SaveStateCookie"; | |
203 | } | |
204 | this._loadDeferred=new dojo.Deferred(); | |
205 | this.inherited(arguments); | |
206 | },postCreate:function(){ | |
207 | this._initState(); | |
208 | if(!this.model){ | |
209 | this._store2model(); | |
210 | } | |
211 | this.connect(this.model,"onChange","_onItemChange"); | |
212 | this.connect(this.model,"onChildrenChange","_onItemChildrenChange"); | |
213 | this.connect(this.model,"onDelete","_onItemDelete"); | |
214 | this._load(); | |
215 | this.inherited(arguments); | |
216 | if(this.dndController){ | |
217 | if(dojo.isString(this.dndController)){ | |
218 | this.dndController=dojo.getObject(this.dndController); | |
219 | } | |
220 | var _21={}; | |
221 | for(var i=0;i<this.dndParams.length;i++){ | |
222 | if(this[this.dndParams[i]]){ | |
223 | _21[this.dndParams[i]]=this[this.dndParams[i]]; | |
224 | } | |
225 | } | |
226 | this.dndController=new this.dndController(this,_21); | |
227 | } | |
228 | },_store2model:function(){ | |
229 | this._v10Compat=true; | |
230 | dojo.deprecated("Tree: from version 2.0, should specify a model object rather than a store/query"); | |
231 | var _22={id:this.id+"_ForestStoreModel",store:this.store,query:this.query,childrenAttrs:this.childrenAttr}; | |
232 | if(this.params.mayHaveChildren){ | |
233 | _22.mayHaveChildren=dojo.hitch(this,"mayHaveChildren"); | |
234 | } | |
235 | if(this.params.getItemChildren){ | |
236 | _22.getChildren=dojo.hitch(this,function(_23,_24,_25){ | |
237 | this.getItemChildren((this._v10Compat&&_23===this.model.root)?null:_23,_24,_25); | |
238 | }); | |
239 | } | |
240 | this.model=new dijit.tree.ForestStoreModel(_22); | |
241 | this.showRoot=Boolean(this.label); | |
242 | },onLoad:function(){ | |
243 | },_load:function(){ | |
244 | this.model.getRoot(dojo.hitch(this,function(_26){ | |
245 | var rn=(this.rootNode=this.tree._createTreeNode({item:_26,tree:this,isExpandable:true,label:this.label||this.getLabel(_26),indent:this.showRoot?0:-1})); | |
246 | if(!this.showRoot){ | |
247 | rn.rowNode.style.display="none"; | |
248 | } | |
249 | this.domNode.appendChild(rn.domNode); | |
250 | var _27=this.model.getIdentity(_26); | |
251 | if(this._itemNodesMap[_27]){ | |
252 | this._itemNodesMap[_27].push(rn); | |
253 | }else{ | |
254 | this._itemNodesMap[_27]=[rn]; | |
255 | } | |
256 | rn._updateLayout(); | |
257 | this._expandNode(rn).addCallback(dojo.hitch(this,function(){ | |
258 | this._loadDeferred.callback(true); | |
259 | this.onLoad(); | |
260 | })); | |
261 | }),function(err){ | |
262 | console.error(this,": error loading root: ",err); | |
263 | }); | |
264 | },getNodesByItem:function(_28){ | |
265 | if(!_28){ | |
266 | return []; | |
267 | } | |
268 | var _29=dojo.isString(_28)?_28:this.model.getIdentity(_28); | |
269 | return [].concat(this._itemNodesMap[_29]); | |
270 | },_setSelectedItemAttr:function(_2a){ | |
271 | var _2b=this.get("selectedItem"); | |
272 | var _2c=(!_2a||dojo.isString(_2a))?_2a:this.model.getIdentity(_2a); | |
273 | if(_2c==_2b?this.model.getIdentity(_2b):null){ | |
274 | return; | |
275 | } | |
276 | var _2d=this._itemNodesMap[_2c]; | |
277 | this._selectNode((_2d&&_2d[0])||null); | |
278 | },_getSelectedItemAttr:function(){ | |
279 | return this.selectedNode&&this.selectedNode.item; | |
280 | },_setPathAttr:function(_2e){ | |
281 | var d=new dojo.Deferred(); | |
282 | this._selectNode(null); | |
283 | if(!_2e||!_2e.length){ | |
284 | d.resolve(true); | |
285 | return d; | |
286 | } | |
287 | this._loadDeferred.addCallback(dojo.hitch(this,function(){ | |
288 | if(!this.rootNode){ | |
289 | d.reject(new Error("!this.rootNode")); | |
290 | return; | |
291 | } | |
292 | if(_2e[0]!==this.rootNode.item&&(dojo.isString(_2e[0])&&_2e[0]!=this.model.getIdentity(this.rootNode.item))){ | |
293 | d.reject(new Error(this.id+":path[0] doesn't match this.rootNode.item. Maybe you are using the wrong tree.")); | |
294 | return; | |
295 | } | |
296 | _2e.shift(); | |
297 | var _2f=this.rootNode; | |
298 | function _30(){ | |
299 | var _31=_2e.shift(),_32=dojo.isString(_31)?_31:this.model.getIdentity(_31); | |
300 | dojo.some(this._itemNodesMap[_32],function(n){ | |
301 | if(n.getParent()==_2f){ | |
302 | _2f=n; | |
303 | return true; | |
304 | } | |
305 | return false; | |
306 | }); | |
307 | if(_2e.length){ | |
308 | this._expandNode(_2f).addCallback(dojo.hitch(this,_30)); | |
309 | }else{ | |
310 | this._selectNode(_2f); | |
311 | d.resolve(true); | |
312 | } | |
313 | }; | |
314 | this._expandNode(_2f).addCallback(dojo.hitch(this,_30)); | |
315 | })); | |
316 | return d; | |
317 | },_getPathAttr:function(){ | |
318 | if(!this.selectedNode){ | |
319 | return; | |
320 | } | |
321 | var res=[]; | |
322 | var _33=this.selectedNode; | |
323 | while(_33&&_33!==this.rootNode){ | |
324 | res.unshift(_33.item); | |
325 | _33=_33.getParent(); | |
326 | } | |
327 | res.unshift(this.rootNode.item); | |
328 | return res; | |
329 | },mayHaveChildren:function(_34){ | |
330 | },getItemChildren:function(_35,_36){ | |
331 | },getLabel:function(_37){ | |
332 | return this.model.getLabel(_37); | |
333 | },getIconClass:function(_38,_39){ | |
334 | return (!_38||this.model.mayHaveChildren(_38))?(_39?"dijitFolderOpened":"dijitFolderClosed"):"dijitLeaf"; | |
335 | },getLabelClass:function(_3a,_3b){ | |
336 | },getRowClass:function(_3c,_3d){ | |
337 | },getIconStyle:function(_3e,_3f){ | |
338 | },getLabelStyle:function(_40,_41){ | |
339 | },getRowStyle:function(_42,_43){ | |
340 | },getTooltip:function(_44){ | |
341 | return ""; | |
342 | },_onKeyPress:function(e){ | |
343 | if(e.altKey){ | |
344 | return; | |
345 | } | |
346 | var dk=dojo.keys; | |
347 | var _45=dijit.getEnclosingWidget(e.target); | |
348 | if(!_45){ | |
349 | return; | |
350 | } | |
351 | var key=e.charOrCode; | |
352 | if(typeof key=="string"){ | |
353 | if(!e.altKey&&!e.ctrlKey&&!e.shiftKey&&!e.metaKey){ | |
354 | this._onLetterKeyNav({node:_45,key:key.toLowerCase()}); | |
355 | dojo.stopEvent(e); | |
356 | } | |
357 | }else{ | |
358 | if(this._curSearch){ | |
359 | clearTimeout(this._curSearch.timer); | |
360 | delete this._curSearch; | |
361 | } | |
362 | var map=this._keyHandlerMap; | |
363 | if(!map){ | |
364 | map={}; | |
365 | map[dk.ENTER]="_onEnterKey"; | |
366 | map[this.isLeftToRight()?dk.LEFT_ARROW:dk.RIGHT_ARROW]="_onLeftArrow"; | |
367 | map[this.isLeftToRight()?dk.RIGHT_ARROW:dk.LEFT_ARROW]="_onRightArrow"; | |
368 | map[dk.UP_ARROW]="_onUpArrow"; | |
369 | map[dk.DOWN_ARROW]="_onDownArrow"; | |
370 | map[dk.HOME]="_onHomeKey"; | |
371 | map[dk.END]="_onEndKey"; | |
372 | this._keyHandlerMap=map; | |
373 | } | |
374 | if(this._keyHandlerMap[key]){ | |
375 | this[this._keyHandlerMap[key]]({node:_45,item:_45.item,evt:e}); | |
376 | dojo.stopEvent(e); | |
377 | } | |
378 | } | |
379 | },_onEnterKey:function(_46,evt){ | |
380 | this._publish("execute",{item:_46.item,node:_46.node}); | |
381 | this._selectNode(_46.node); | |
382 | this.onClick(_46.item,_46.node,evt); | |
383 | },_onDownArrow:function(_47){ | |
384 | var _48=this._getNextNode(_47.node); | |
385 | if(_48&&_48.isTreeNode){ | |
386 | this.focusNode(_48); | |
387 | } | |
388 | },_onUpArrow:function(_49){ | |
389 | var _4a=_49.node; | |
390 | var _4b=_4a.getPreviousSibling(); | |
391 | if(_4b){ | |
392 | _4a=_4b; | |
393 | while(_4a.isExpandable&&_4a.isExpanded&&_4a.hasChildren()){ | |
394 | var _4c=_4a.getChildren(); | |
395 | _4a=_4c[_4c.length-1]; | |
396 | } | |
397 | }else{ | |
398 | var _4d=_4a.getParent(); | |
399 | if(!(!this.showRoot&&_4d===this.rootNode)){ | |
400 | _4a=_4d; | |
401 | } | |
402 | } | |
403 | if(_4a&&_4a.isTreeNode){ | |
404 | this.focusNode(_4a); | |
405 | } | |
406 | },_onRightArrow:function(_4e){ | |
407 | var _4f=_4e.node; | |
408 | if(_4f.isExpandable&&!_4f.isExpanded){ | |
409 | this._expandNode(_4f); | |
410 | }else{ | |
411 | if(_4f.hasChildren()){ | |
412 | _4f=_4f.getChildren()[0]; | |
413 | if(_4f&&_4f.isTreeNode){ | |
414 | this.focusNode(_4f); | |
415 | } | |
416 | } | |
417 | } | |
418 | },_onLeftArrow:function(_50){ | |
419 | var _51=_50.node; | |
420 | if(_51.isExpandable&&_51.isExpanded){ | |
421 | this._collapseNode(_51); | |
422 | }else{ | |
423 | var _52=_51.getParent(); | |
424 | if(_52&&_52.isTreeNode&&!(!this.showRoot&&_52===this.rootNode)){ | |
425 | this.focusNode(_52); | |
426 | } | |
427 | } | |
428 | },_onHomeKey:function(){ | |
429 | var _53=this._getRootOrFirstNode(); | |
430 | if(_53){ | |
431 | this.focusNode(_53); | |
432 | } | |
433 | },_onEndKey:function(_54){ | |
434 | var _55=this.rootNode; | |
435 | while(_55.isExpanded){ | |
436 | var c=_55.getChildren(); | |
437 | _55=c[c.length-1]; | |
438 | } | |
439 | if(_55&&_55.isTreeNode){ | |
440 | this.focusNode(_55); | |
441 | } | |
442 | },multiCharSearchDuration:250,_onLetterKeyNav:function(_56){ | |
443 | var cs=this._curSearch; | |
444 | if(cs){ | |
445 | cs.pattern=cs.pattern+_56.key; | |
446 | clearTimeout(cs.timer); | |
447 | }else{ | |
448 | cs=this._curSearch={pattern:_56.key,startNode:_56.node}; | |
449 | } | |
450 | var _57=this; | |
451 | cs.timer=setTimeout(function(){ | |
452 | delete _57._curSearch; | |
453 | },this.multiCharSearchDuration); | |
454 | var _58=cs.startNode; | |
455 | do{ | |
456 | _58=this._getNextNode(_58); | |
457 | if(!_58){ | |
458 | _58=this._getRootOrFirstNode(); | |
459 | } | |
460 | }while(_58!==cs.startNode&&(_58.label.toLowerCase().substr(0,cs.pattern.length)!=cs.pattern)); | |
461 | if(_58&&_58.isTreeNode){ | |
462 | if(_58!==cs.startNode){ | |
463 | this.focusNode(_58); | |
464 | } | |
465 | } | |
466 | },_onClick:function(_59,e){ | |
467 | var _5a=e.target,_5b=(_5a==_59.expandoNode||_5a==_59.expandoNodeText); | |
468 | if((this.openOnClick&&_59.isExpandable)||_5b){ | |
469 | if(_59.isExpandable){ | |
470 | this._onExpandoClick({node:_59}); | |
471 | } | |
472 | }else{ | |
473 | this._publish("execute",{item:_59.item,node:_59,evt:e}); | |
474 | this.onClick(_59.item,_59,e); | |
475 | this.focusNode(_59); | |
476 | } | |
477 | if(!_5b){ | |
478 | this._selectNode(_59); | |
479 | } | |
480 | dojo.stopEvent(e); | |
481 | },_onDblClick:function(_5c,e){ | |
482 | var _5d=e.target,_5e=(_5d==_5c.expandoNode||_5d==_5c.expandoNodeText); | |
483 | if((this.openOnDblClick&&_5c.isExpandable)||_5e){ | |
484 | if(_5c.isExpandable){ | |
485 | this._onExpandoClick({node:_5c}); | |
486 | } | |
487 | }else{ | |
488 | this._publish("execute",{item:_5c.item,node:_5c,evt:e}); | |
489 | this.onDblClick(_5c.item,_5c,e); | |
490 | this.focusNode(_5c); | |
491 | } | |
492 | if(!_5e){ | |
493 | this._selectNode(_5c); | |
494 | } | |
495 | dojo.stopEvent(e); | |
496 | },_onExpandoClick:function(_5f){ | |
497 | var _60=_5f.node; | |
498 | this.focusNode(_60); | |
499 | if(_60.isExpanded){ | |
500 | this._collapseNode(_60); | |
501 | }else{ | |
502 | this._expandNode(_60); | |
503 | } | |
504 | },onClick:function(_61,_62,evt){ | |
505 | },onDblClick:function(_63,_64,evt){ | |
506 | },onOpen:function(_65,_66){ | |
507 | },onClose:function(_67,_68){ | |
508 | },_getNextNode:function(_69){ | |
509 | if(_69.isExpandable&&_69.isExpanded&&_69.hasChildren()){ | |
510 | return _69.getChildren()[0]; | |
511 | }else{ | |
512 | while(_69&&_69.isTreeNode){ | |
513 | var _6a=_69.getNextSibling(); | |
514 | if(_6a){ | |
515 | return _6a; | |
516 | } | |
517 | _69=_69.getParent(); | |
518 | } | |
519 | return null; | |
520 | } | |
521 | },_getRootOrFirstNode:function(){ | |
522 | return this.showRoot?this.rootNode:this.rootNode.getChildren()[0]; | |
523 | },_collapseNode:function(_6b){ | |
524 | if(_6b._expandNodeDeferred){ | |
525 | delete _6b._expandNodeDeferred; | |
526 | } | |
527 | if(_6b.isExpandable){ | |
528 | if(_6b.state=="LOADING"){ | |
529 | return; | |
530 | } | |
531 | _6b.collapse(); | |
532 | this.onClose(_6b.item,_6b); | |
533 | if(_6b.item){ | |
534 | this._state(_6b.item,false); | |
535 | this._saveState(); | |
536 | } | |
537 | } | |
538 | },_expandNode:function(_6c,_6d){ | |
539 | if(_6c._expandNodeDeferred&&!_6d){ | |
540 | return _6c._expandNodeDeferred; | |
541 | } | |
542 | var _6e=this.model,_6f=_6c.item,_70=this; | |
543 | switch(_6c.state){ | |
544 | case "UNCHECKED": | |
545 | _6c.markProcessing(); | |
546 | var def=(_6c._expandNodeDeferred=new dojo.Deferred()); | |
547 | _6e.getChildren(_6f,function(_71){ | |
548 | _6c.unmarkProcessing(); | |
549 | var _72=_6c.setChildItems(_71); | |
550 | var ed=_70._expandNode(_6c,true); | |
551 | _72.addCallback(function(){ | |
552 | ed.addCallback(function(){ | |
553 | def.callback(); | |
554 | }); | |
555 | }); | |
556 | },function(err){ | |
557 | console.error(_70,": error loading root children: ",err); | |
558 | }); | |
559 | break; | |
560 | default: | |
561 | def=(_6c._expandNodeDeferred=_6c.expand()); | |
562 | this.onOpen(_6c.item,_6c); | |
563 | if(_6f){ | |
564 | this._state(_6f,true); | |
565 | this._saveState(); | |
566 | } | |
567 | } | |
568 | return def; | |
569 | },focusNode:function(_73){ | |
570 | dijit.focus(_73.labelNode); | |
571 | },_selectNode:function(_74){ | |
572 | if(this.selectedNode&&!this.selectedNode._destroyed){ | |
573 | this.selectedNode.setSelected(false); | |
574 | } | |
575 | if(_74){ | |
576 | _74.setSelected(true); | |
577 | } | |
578 | this.selectedNode=_74; | |
579 | },_onNodeFocus:function(_75){ | |
580 | if(_75&&_75!=this.lastFocused){ | |
581 | if(this.lastFocused&&!this.lastFocused._destroyed){ | |
582 | this.lastFocused.setFocusable(false); | |
583 | } | |
584 | _75.setFocusable(true); | |
585 | this.lastFocused=_75; | |
586 | } | |
587 | },_onNodeMouseEnter:function(_76){ | |
588 | },_onNodeMouseLeave:function(_77){ | |
589 | },_onItemChange:function(_78){ | |
590 | var _79=this.model,_7a=_79.getIdentity(_78),_7b=this._itemNodesMap[_7a]; | |
591 | if(_7b){ | |
592 | var _7c=this.getLabel(_78),_7d=this.getTooltip(_78); | |
593 | dojo.forEach(_7b,function(_7e){ | |
594 | _7e.set({item:_78,label:_7c,tooltip:_7d}); | |
595 | _7e._updateItemClasses(_78); | |
596 | }); | |
597 | } | |
598 | },_onItemChildrenChange:function(_7f,_80){ | |
599 | var _81=this.model,_82=_81.getIdentity(_7f),_83=this._itemNodesMap[_82]; | |
600 | if(_83){ | |
601 | dojo.forEach(_83,function(_84){ | |
602 | _84.setChildItems(_80); | |
603 | }); | |
604 | } | |
605 | },_onItemDelete:function(_85){ | |
606 | var _86=this.model,_87=_86.getIdentity(_85),_88=this._itemNodesMap[_87]; | |
607 | if(_88){ | |
608 | dojo.forEach(_88,function(_89){ | |
609 | var _8a=_89.getParent(); | |
610 | if(_8a){ | |
611 | _8a.removeChild(_89); | |
612 | } | |
613 | _89.destroyRecursive(); | |
614 | }); | |
615 | delete this._itemNodesMap[_87]; | |
616 | } | |
617 | },_initState:function(){ | |
618 | if(this.persist){ | |
619 | var _8b=dojo.cookie(this.cookieName); | |
620 | this._openedItemIds={}; | |
621 | if(_8b){ | |
622 | dojo.forEach(_8b.split(","),function(_8c){ | |
623 | this._openedItemIds[_8c]=true; | |
624 | },this); | |
625 | } | |
626 | } | |
627 | },_state:function(_8d,_8e){ | |
628 | if(!this.persist){ | |
629 | return false; | |
630 | } | |
631 | var id=this.model.getIdentity(_8d); | |
632 | if(arguments.length===1){ | |
633 | return this._openedItemIds[id]; | |
634 | } | |
635 | if(_8e){ | |
636 | this._openedItemIds[id]=true; | |
637 | }else{ | |
638 | delete this._openedItemIds[id]; | |
639 | } | |
640 | },_saveState:function(){ | |
641 | if(!this.persist){ | |
642 | return; | |
643 | } | |
644 | var ary=[]; | |
645 | for(var id in this._openedItemIds){ | |
646 | ary.push(id); | |
647 | } | |
648 | dojo.cookie(this.cookieName,ary.join(","),{expires:365}); | |
649 | },destroy:function(){ | |
650 | if(this._curSearch){ | |
651 | clearTimeout(this._curSearch.timer); | |
652 | delete this._curSearch; | |
653 | } | |
654 | if(this.rootNode){ | |
655 | this.rootNode.destroyRecursive(); | |
656 | } | |
657 | if(this.dndController&&!dojo.isString(this.dndController)){ | |
658 | this.dndController.destroy(); | |
659 | } | |
660 | this.rootNode=null; | |
661 | this.inherited(arguments); | |
662 | },destroyRecursive:function(){ | |
663 | this.destroy(); | |
664 | },resize:function(_8f){ | |
665 | if(_8f){ | |
666 | dojo.marginBox(this.domNode,_8f); | |
667 | dojo.style(this.domNode,"overflow","auto"); | |
668 | } | |
669 | this._nodePixelIndent=dojo.marginBox(this.tree.indentDetector).w; | |
670 | if(this.tree.rootNode){ | |
671 | this.tree.rootNode.set("indent",this.showRoot?0:-1); | |
672 | } | |
673 | },_createTreeNode:function(_90){ | |
674 | return new dijit._TreeNode(_90); | |
675 | }}); | |
676 | dojo.require("dijit.tree.TreeStoreModel"); | |
677 | dojo.require("dijit.tree.ForestStoreModel"); | |
678 | } |