New file |
0,0 → 1,146 |
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; |
dojo.mixin(this, params); |
|
// class-specific variables |
this.map = {}; |
this.current = null; |
|
// 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 |
var n = e.relatedTarget; |
while(n){ |
if(n == this.node){ break; } |
try{ |
n = n.parentNode; |
}catch(x){ |
n = null; |
} |
} |
if(!n){ |
this._changeState("Container", "Over"); |
this.onOverEvent(); |
} |
n = this._getChildByEvent(e); |
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 && dojo.hasClass(node,"dijitTreeLabel")){ |
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 |
console.log("onOverEvent parent"); |
}, |
|
onOutEvent: function(){ |
// summary: this function is called once, when mouse is out of our container |
} |
}); |
|
} |