From 541bb378ddece2eab135a8066a16994e94436dea Mon Sep 17 00:00:00 2001 From: Giulio Cesare Solaroli Date: Mon, 03 Oct 2011 16:04:12 +0000 Subject: Merge pull request #1 from gcsolaroli/master First version of the restructured repository --- (limited to 'frontend/beta/js/YUI-extensions/tree/TreeLoader.js') diff --git a/frontend/beta/js/YUI-extensions/tree/TreeLoader.js b/frontend/beta/js/YUI-extensions/tree/TreeLoader.js new file mode 100644 index 0000000..34989bd --- a/dev/null +++ b/frontend/beta/js/YUI-extensions/tree/TreeLoader.js @@ -0,0 +1,107 @@ +YAHOO.ext.tree.TreeLoader = function(config){ + this.baseParams = {}; + this.requestMethod = 'POST'; + YAHOO.ext.util.Config.apply(this, config); + + this.events = { + 'beforeload' : true, + 'load' : true, + 'loadexception' : true + }; +}; + +YAHOO.extendX(YAHOO.ext.tree.TreeLoader, YAHOO.ext.util.Observable, { + load : function(node, callback){ + if(node.attributes.children){ // preloaded json children + var cs = node.attributes.children; + for(var i = 0, len = cs.length; i < len; i++){ + node.appendChild(this.createNode(cs[i])); + } + if(typeof callback == 'function'){ + callback(); + } + }else if(this.dataUrl){ + this.requestData(node, callback); + } + }, + + getParams: function(node){ + var buf = [], bp = this.baseParams; + for(var key in bp){ + if(typeof bp[key] != 'function'){ + buf.push(encodeURIComponent(key), '=', encodeURIComponent(bp[key]), '&'); + } + } + buf.push('node=', encodeURIComponent(node.id)); + return buf.join(''); + }, + + requestData : function(node, callback){ + if(this.fireEvent('beforeload', this, node, callback) !== false){ + var params = this.getParams(node); + var cb = { + success: this.handleResponse, + failure: this.handleFailure, + scope: this, + argument: {callback: callback, node: node} + }; + this.transId = YAHOO.util.Connect.asyncRequest(this.requestMethod, this.dataUrl, cb, params); + }else{ + // if the load is cancelled, make sure we notify + // the node that we are done + if(typeof callback == 'function'){ + callback(); + } + } + }, + + isLoading : function(){ + return this.transId ? true : false; + }, + + abort : function(){ + if(this.isLoading()){ + YAHOO.util.Connect.abort(this.transId); + } + }, + + createNode : function(attr){ + if(this.applyLoader !== false){ + attr.loader = this; + } + return(attr.leaf ? + new YAHOO.ext.tree.TreeNode(attr) : + new YAHOO.ext.tree.AsyncTreeNode(attr)); + }, + + processResponse : function(response, node, callback){ + var json = response.responseText; + try { + var o = eval('('+json+')'); + for(var i = 0, len = o.length; i < len; i++){ + node.appendChild(this.createNode(o[i])); + } + if(typeof callback == 'function'){ + callback(); + } + }catch(e){ + this.handleFailure(response); + } + }, + + handleResponse : function(response){ + this.transId = false; + var a = response.argument; + this.processResponse(response, a.node, a.callback); + this.fireEvent('load', this, a.node, response); + }, + + handleFailure : function(response){ + this.transId = false; + var a = response.argument; + this.fireEvent('loadexception', this, a.node, response); + if(typeof a.callback == 'function'){ + a.callback(); + } + } +}); -- cgit v0.9.0.2