text: 
  dojo.provide("dojo.widget.TreeLoadingControllerV3");dojo.require("dojo.widget.TreeBasicControllerV3");dojo.require("dojo.event.*");dojo.require("dojo.json");dojo.require("dojo.io.*");dojo.require("dojo.Deferred");dojo.require("dojo.DeferredList");dojo.declare("dojo.Error",Error,function(message,extra){this.message=message;this.extra=extra;this.stack=(new Error()).stack;});dojo.declare("dojo.CommunicationError",dojo.Error,function(){this.name="CommunicationError";});dojo.declare("dojo.LockedError",dojo.Error,function(){this.name="LockedError";});dojo.declare("dojo.FormatError",dojo.Error,function(){this.name="FormatError";});dojo.declare("dojo.RpcError",dojo.Error,function(){this.name="RpcError";});dojo.widget.defineWidget("dojo.widget.TreeLoadingControllerV3",dojo.widget.TreeBasicControllerV3,{RpcUrl:"",RpcActionParam:"action",preventCache:true,checkValidRpcResponse:function(type,obj){if(type!="load"){var extra={};for(var i=1;i<arguments.length;i++){dojo.lang.mixin(extra,arguments[i]);}
  return new dojo.CommunicationError(obj,extra);}
  if(typeof obj!="object"){return new dojo.FormatError("Wrong server answer format "+(obj&&obj.toSource?obj.toSource():obj)+" type "+(typeof obj),obj);}
  if(!dojo.lang.isUndefined(obj.error)){return new dojo.RpcError(obj.error,obj);}
  return false;},getDeferredBindHandler:function(deferred){return dojo.lang.hitch(this,function(type,obj){var error=this.checkValidRpcResponse.apply(this,arguments);if(error){deferred.errback(error);return;}
  deferred.callback(obj);});},getRpcUrl:function(action){if(this.RpcUrl=="local"){var dir=document.location.href.substr(0,document.location.href.lastIndexOf("/"));var localUrl=dir+"/local/"+action;return localUrl;}
  if(!this.RpcUrl){dojo.raise("Empty RpcUrl: can't load");}
  var url=this.RpcUrl;if(url.indexOf("/")!=0){var protocol=document.location.href.replace(/:\/\/.*/,"");var prefix=document.location.href.substring(protocol.length+3);if(prefix.lastIndexOf("/")!=prefix.length-1){prefix=prefix.replace(/\/[^\/]+$/,"/");}
  if(prefix.lastIndexOf("/")!=prefix.length-1){prefix=prefix+"/";}
  url=protocol+"://"+prefix+url;}
  return url+(url.indexOf("?")>-1?"&":"?")+this.RpcActionParam+"="+action;},loadProcessResponse:function(node,result){if(!dojo.lang.isArray(result)){throw new dojo.FormatError("loadProcessResponse: Not array loaded: "+result);}
  node.setChildren(result);},runRpc:function(kw){var _this=this;var deferred=new dojo.Deferred();dojo.io.bind({url:kw.url,handle:this.getDeferredBindHandler(deferred),mimetype:"text/javascript",preventCache:this.preventCache,sync:kw.sync,content:{data:dojo.json.serialize(kw.params)}});return deferred;},loadRemote:function(node,sync){var _this=this;var params={node:this.getInfo(node),tree:this.getInfo(node.tree)};var deferred=this.runRpc({url:this.getRpcUrl("getChildren"),sync:sync,params:params});deferred.addCallback(function(res){return _this.loadProcessResponse(node,res);});return deferred;},batchExpandTimeout:0,recurseToLevel:function(widget,level,callFunc,callObj,skipFirst,sync){if(level==0){return;}
  if(!skipFirst){var deferred=callFunc.call(callObj,widget,sync);}else{var deferred=dojo.Deferred.prototype.makeCalled();}
  var _this=this;var recurseOnExpand=function(){var children=widget.children;var deferreds=[];for(var i=0;i<children.length;i++){deferreds.push(_this.recurseToLevel(children[i],level-1,callFunc,callObj,sync));}
  return new dojo.DeferredList(deferreds);};deferred.addCallback(recurseOnExpand);return deferred;},expandToLevel:function(nodeOrTree,level,sync){return this.recurseToLevel(nodeOrTree,nodeOrTree.isTree?level+1:level,this.expand,this,nodeOrTree.isTree,sync);},loadToLevel:function(nodeOrTree,level,sync){return this.recurseToLevel(nodeOrTree,nodeOrTree.isTree?level+1:level,this.loadIfNeeded,this,nodeOrTree.isTree,sync);},loadAll:function(nodeOrTree,sync){return this.loadToLevel(nodeOrTree,Number.POSITIVE_INFINITY,sync);},expand:function(node,sync){var _this=this;var deferred=this.startProcessing(node);deferred.addCallback(function(){return _this.loadIfNeeded(node,sync);});deferred.addCallback(function(res){dojo.widget.TreeBasicControllerV3.prototype.expand(node);return res;});deferred.addBoth(function(res){_this.finishProcessing(node);return res;});return deferred;},loadIfNeeded:function(node,sync){var deferred;if(node.state==node.loadStates.UNCHECKED&&node.isFolder&&!node.children.length){deferred=this.loadRemote(node,sync);}else{deferred=new dojo.Deferred();deferred.callback();}
  return deferred;},runStages:function(check,prepare,make,finalize,expose,args){var _this=this;if(check&&!check.apply(this,args)){return false;}
  var deferred=dojo.Deferred.prototype.makeCalled();if(prepare){deferred.addCallback(function(){return prepare.apply(_this,args);});}
  if(make){deferred.addCallback(function(){var res=make.apply(_this,args);return res;});}
  if(finalize){deferred.addBoth(function(res){finalize.apply(_this,args);return res;});}
  if(expose){deferred.addCallback(function(res){expose.apply(_this,args);return res;});}
  return deferred;},startProcessing:function(nodesArray){var deferred=new dojo.Deferred();var nodes=dojo.lang.isArray(nodesArray)?nodesArray:arguments;for(var i=0;i<nodes.length;i++){if(nodes[i].isLocked()){deferred.errback(new dojo.LockedError("item locked "+nodes[i],nodes[i]));return deferred;}
  if(nodes[i].isTreeNode){nodes[i].markProcessing();}
  nodes[i].lock();}
  deferred.callback();return deferred;},finishProcessing:function(nodesArray){var nodes=dojo.lang.isArray(nodesArray)?nodesArray:arguments;for(var i=0;i<nodes.length;i++){if(!nodes[i].hasLock()){continue;}
  nodes[i].unlock();if(nodes[i].isTreeNode){nodes[i].unmarkProcessing();}}},refreshChildren:function(nodeOrTree,sync){return this.runStages(null,this.prepareRefreshChildren,this.doRefreshChildren,this.finalizeRefreshChildren,this.exposeRefreshChildren,arguments);},prepareRefreshChildren:function(nodeOrTree,sync){var deferred=this.startProcessing(nodeOrTree);nodeOrTree.destroyChildren();nodeOrTree.state=nodeOrTree.loadStates.UNCHECKED;return deferred;},doRefreshChildren:function(nodeOrTree,sync){return this.loadRemote(nodeOrTree,sync);},finalizeRefreshChildren:function(nodeOrTree,sync){this.finishProcessing(nodeOrTree);},exposeRefreshChildren:function(nodeOrTree,sync){nodeOrTree.expand();},move:function(child,newParent,index){return this.runStages(this.canMove,this.prepareMove,this.doMove,this.finalizeMove,this.exposeMove,arguments);},doMove:function(child,newParent,index){child.tree.move(child,newParent,index);return true;},prepareMove:function(child,newParent,index,sync){var deferred=this.startProcessing(newParent);deferred.addCallback(dojo.lang.hitch(this,function(){return this.loadIfNeeded(newParent,sync);}));return deferred;},finalizeMove:function(child,newParent){this.finishProcessing(newParent);},prepareCreateChild:function(parent,index,data,sync){var deferred=this.startProcessing(parent);deferred.addCallback(dojo.lang.hitch(this,function(){return this.loadIfNeeded(parent,sync);}));return deferred;},finalizeCreateChild:function(parent){this.finishProcessing(parent);},prepareClone:function(child,newParent,index,deep,sync){var deferred=this.startProcessing(child,newParent);deferred.addCallback(dojo.lang.hitch(this,function(){return this.loadIfNeeded(newParent,sync);}));return deferred;},finalizeClone:function(child,newParent){this.finishProcessing(child,newParent);}});