Project

General

Profile

Statistics
| Revision:

root / trunk / web / dojo / dijit / Tree.js @ 11

History | View | Annotate | Download (19.7 KB)

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
}