From ef68436ac04da078ffdcacd7e1f785473a303d45 Mon Sep 17 00:00:00 2001 From: Giulio Cesare Solaroli Date: Sun, 02 Oct 2011 23:56:18 +0000 Subject: First version of the newly restructured repository --- (limited to 'frontend/beta/js/YUI-extensions/tree/TreePanel.js') diff --git a/frontend/beta/js/YUI-extensions/tree/TreePanel.js b/frontend/beta/js/YUI-extensions/tree/TreePanel.js new file mode 100644 index 0000000..202c0d0 --- a/dev/null +++ b/frontend/beta/js/YUI-extensions/tree/TreePanel.js @@ -0,0 +1,213 @@ +YAHOO.namespace('ext.tree'); + +YAHOO.ext.tree.TreePanel = function(el, config){ + YAHOO.ext.tree.TreePanel.superclass.constructor.call(this); + this.el = getEl(el); + this.id = this.el.id; + YAHOO.ext.util.Config.apply(this, config || {}, { + rootVisible : true, + lines : true, + enableDD : false, + hlDrop : true/*, + hlColor: null, + ddGroup : 'TreeDD' + hlBaseColor : 'FFFFFF'*/ + + }); + YAHOO.ext.util.Config.apply(this.events, { + 'beforeload' : true, + 'load' : true, + 'textchange' : true, + 'beforeexpand' : true, + 'beforecollapse' : true, + 'expand' : true, + 'collapse' : true, + 'disabledchange' : true, + 'beforeclick':true, + 'click':true, + 'dblclick':true, + 'contentmenu':true, + 'beforechildrenrendered':true, + /** + * @event startdrag + * Fires when a node starts being dragged + * @param {YAHOO.ext.tree.TreePanel} this + * @param {YAHOO.ext.tree.TreeNode} node + * @param {event} e The raw browser event + */ + 'startdrag' : true, + /** + * @event enddrag + * Fires when a drag operation is complete + * @param {YAHOO.ext.tree.TreePanel} this + * @param {YAHOO.ext.tree.TreeNode} node + * @param {event} e The raw browser event + */ + 'enddrag' : true, + /** + * @event dragdrop + * Fires when a dragged node is dropped on a valid DD target + * @param {YAHOO.ext.tree.TreePanel} this + * @param {YAHOO.ext.tree.TreeNode} node + * @param {DD} dd The dd it was dropped on + * @param {event} e The raw browser event + */ + 'dragdrop' : true, + /** + * @event beforenodedrop + * Fires when a DD object is dropped on a node in this tree for preprocessing. This event can cancel. + * @param {Object} dropEvent + */ + 'beforenodedrop' : true, + /** + * @event nodedrop + * Fires after a DD object is dropped on a node in this tree + * @param {Object} dropEvent + */ + 'nodedrop' : true, + /** + * @event nodedragover + * Fires when a tree node is being target + * @param {Object} dragOverEvent + */ + 'nodedragover' : true + }); + if(this.singleExpand){ + this.on('beforeexpand', this.restrictExpand, this, true); + } + // problem with safari and animation + // I am investigating + if(YAHOO.ext.util.Browser.isSafari){ + this.animate = false; + } +}; +YAHOO.extendX(YAHOO.ext.tree.TreePanel, YAHOO.ext.data.Tree, { + restrictExpand : function(node){ + var p = node.parentNode; + if(p){ + if(p.expandedChild && p.expandedChild.parentNode == p){ + p.expandedChild.collapse(); + } + p.expandedChild = node; + } + }, + + setRootNode : function(node){ + YAHOO.ext.tree.TreePanel.superclass.setRootNode.call(this, node); + if(!this.rootVisible){ + node.ui = new YAHOO.ext.tree.RootTreeNodeUI(node); + } + return node; + }, + + getEl : function(){ + return this.el; + }, + + getLoader : function(){ + return this.loader; + }, + + expandAll : function(){ + this.root.expand(true); + }, + + collapseAll : function(){ + this.root.collapse(true); + }, + + getSelectionModel : function(){ + if(!this.selModel){ + this.selModel = new YAHOO.ext.tree.DefaultSelectionModel(); + } + return this.selModel; + }, + + expandPath : function(path, attr, callback){ + attr = attr || 'id'; + var keys = path.split(this.pathSeparator); + var curNode = this.root; + if(curNode.attributes[attr] != keys[1]){ // invalid root + if(callback){ + callback(false, null); + } + return; + } + var index = 1; + var f = function(){ + if(++index == keys.length){ + if(callback){ + callback(true, curNode); + } + return; + } + var c = curNode.findChild(attr, keys[index]); + if(!c){ + if(callback){ + callback(false, curNode); + } + return; + } + curNode = c; + c.expand(false, false, f); + } + curNode.expand(false, false, f); + }, + + selectPath : function(path, attr, callback){ + attr = attr || 'id'; + var keys = path.split(this.pathSeparator); + var v = keys.pop(); + if(keys.length > 0){ + var f = function(success, node){ + if(success && node){ + var n = node.findChild(attr, v); + if(n){ + n.select(); + if(callback){ + callback(true, n); + } + } + }else{ + if(callback){ + callback(false, n); + } + } + }; + this.expandPath(keys.join(this.pathSeparator), attr, f); + }else{ + this.root.select(); + if(callback){ + callback(true, this.root); + } + } + }, + + render : function(){ + this.container = this.el.createChild({tag:'ul', + cls:'ytree-root-ct ' + + (this.lines ? 'ytree-lines' : 'ytree-no-lines')}); + + if(this.containerScroll){ + YAHOO.ext.dd.ScrollManager.register(this.el); + } + + if((this.enableDD || this.enableDrop) && !this.dropZone){ + this.dropZone = new YAHOO.ext.tree.TreeDropZone(this, this.dropConfig || { + ddGroup: this.ddGroup || 'TreeDD' + }); + } + if((this.enableDD || this.enableDrag) && !this.dragZone){ + this.dragZone = new YAHOO.ext.tree.TreeDragZone(this, this.dragConfig || { + ddGroup: this.ddGroup || 'TreeDD', + scroll: this.ddScroll + }); + } + this.getSelectionModel().init(this); + this.root.render(); + if(!this.rootVisible){ + this.root.renderChildren(); + } + return this; + } +}); -- cgit v0.9.0.2