summaryrefslogtreecommitdiff
path: root/includes/js/dijit/_tree/dndContainer.js
diff options
context:
space:
mode:
Diffstat (limited to 'includes/js/dijit/_tree/dndContainer.js')
-rw-r--r--includes/js/dijit/_tree/dndContainer.js150
1 files changed, 150 insertions, 0 deletions
diff --git a/includes/js/dijit/_tree/dndContainer.js b/includes/js/dijit/_tree/dndContainer.js
new file mode 100644
index 0000000..308e5ea
--- /dev/null
+++ b/includes/js/dijit/_tree/dndContainer.js
@@ -0,0 +1,150 @@
+if(!dojo._hasResource["dijit._tree.dndContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._tree.dndContainer"] = true;
+dojo.provide("dijit._tree.dndContainer");
+dojo.require("dojo.dnd.common");
+dojo.require("dojo.dnd.Container");
+
+dojo.declare("dijit._tree.dndContainer",
+ null,
+ {
+ constructor: function(tree, params){
+ // summary: a constructor of the Container
+ // tree: Node: node or node's id to build the container on
+ // params: Object: a dict of parameters, which gets mixed into the object
+ this.tree = tree;
+ this.node = tree.domNode; // TODO: rename; it's not a TreeNode but the whole Tree
+ dojo.mixin(this, params);
+
+ // class-specific variables
+ this.map = {};
+ this.current = null; // current TreeNode
+
+ // states
+ this.containerState = "";
+ dojo.addClass(this.node, "dojoDndContainer");
+
+ // mark up children
+ if(!(params && params._skipStartup)){
+ this.startup();
+ }
+
+ // set up events
+ this.events = [
+ dojo.connect(this.node, "onmouseover", this, "onMouseOver"),
+ dojo.connect(this.node, "onmouseout", this, "onMouseOut"),
+
+ // cancel text selection and text dragging
+ dojo.connect(this.node, "ondragstart", dojo, "stopEvent"),
+ dojo.connect(this.node, "onselectstart", dojo, "stopEvent")
+ ];
+ },
+
+
+ // abstract access to the map
+ getItem: function(/*String*/ key){
+ // summary: returns a data item by its key (id)
+ //console.log("Container getItem()", arguments,this.map, this.map[key], this.selection[key]);
+ return this.selection[key];
+ //return this.map[key]; // Object
+ },
+
+ // mouse events
+ onMouseOver: function(e){
+ // summary: event processor for onmouseover
+ // e: Event: mouse event
+
+ // handle when mouse has just moved over the Tree itself (not a TreeNode, but the Tree)
+ var rt = e.relatedTarget; // the previous location
+ while(rt){
+ if(rt == this.node){ break; }
+ try{
+ rt = rt.parentNode;
+ }catch(x){
+ rt = null;
+ }
+ }
+ if(!rt){
+ this._changeState("Container", "Over");
+ this.onOverEvent();
+ }
+
+ // code below is for handling depending on which TreeNode we are over
+ var n = this._getChildByEvent(e); // the TreeNode
+ if(this.current == n){ return; }
+ if(this.current){ this._removeItemClass(this.current, "Over"); }
+ if(n){ this._addItemClass(n, "Over"); }
+ this.current = n;
+ },
+
+ onMouseOut: function(e){
+ // summary: event processor for onmouseout
+ // e: Event: mouse event
+ for(var n = e.relatedTarget; n;){
+ if(n == this.node){ return; }
+ try{
+ n = n.parentNode;
+ }catch(x){
+ n = null;
+ }
+ }
+ if(this.current){
+ this._removeItemClass(this.current, "Over");
+ this.current = null;
+ }
+ this._changeState("Container", "");
+ this.onOutEvent();
+ },
+
+ _changeState: function(type, newState){
+ // summary: changes a named state to new state value
+ // type: String: a name of the state to change
+ // newState: String: new state
+ var prefix = "dojoDnd" + type;
+ var state = type.toLowerCase() + "State";
+ //dojo.replaceClass(this.node, prefix + newState, prefix + this[state]);
+ dojo.removeClass(this.node, prefix + this[state]);
+ dojo.addClass(this.node, prefix + newState);
+ this[state] = newState;
+ },
+
+ _getChildByEvent: function(e){
+ // summary: gets a child, which is under the mouse at the moment, or null
+ // e: Event: a mouse event
+ var node = e.target;
+ if(node){
+ for(var parent = node.parentNode; parent; node = parent, parent = node.parentNode){
+ if(dojo.hasClass(node, "dijitTreeContent")){ return node; }
+ }
+ }
+ return null;
+ },
+
+ markupFactory: function(tree, params){
+ params._skipStartup = true;
+ return new dijit._tree.dndContainer(tree, params);
+ },
+
+ _addItemClass: function(node, type){
+ // summary: adds a class with prefix "dojoDndItem"
+ // node: Node: a node
+ // type: String: a variable suffix for a class name
+ dojo.addClass(node, "dojoDndItem" + type);
+ },
+
+ _removeItemClass: function(node, type){
+ // summary: removes a class with prefix "dojoDndItem"
+ // node: Node: a node
+ // type: String: a variable suffix for a class name
+ dojo.removeClass(node, "dojoDndItem" + type);
+ },
+
+ onOverEvent: function(){
+ // summary: this function is called once, when mouse is over our container
+ },
+
+ onOutEvent: function(){
+ // summary: this function is called once, when mouse is out of our container
+ }
+});
+
+}