diff options
Diffstat (limited to 'includes/js/dojo/dnd/Container.js')
-rw-r--r-- | includes/js/dojo/dnd/Container.js | 311 |
1 files changed, 0 insertions, 311 deletions
diff --git a/includes/js/dojo/dnd/Container.js b/includes/js/dojo/dnd/Container.js deleted file mode 100644 index 92b3211..0000000 --- a/includes/js/dojo/dnd/Container.js +++ /dev/null @@ -1,311 +0,0 @@ -if(!dojo._hasResource["dojo.dnd.Container"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. -dojo._hasResource["dojo.dnd.Container"] = true; -dojo.provide("dojo.dnd.Container"); - -dojo.require("dojo.dnd.common"); -dojo.require("dojo.parser"); - -/* - Container states: - "" - normal state - "Over" - mouse over a container - Container item states: - "" - normal state - "Over" - mouse over a container item -*/ - -dojo.declare("dojo.dnd.Container", null, { - // summary: a Container object, which knows when mouse hovers over it, - // and know over which element it hovers - - // object attributes (for markup) - skipForm: false, - - constructor: function(node, params){ - // summary: a constructor of the Container - // node: Node: node or node's id to build the container on - // params: Object: a dict of parameters, recognized parameters are: - // creator: Function: a creator function, which takes a data item, and returns an object like that: - // {node: newNode, data: usedData, type: arrayOfStrings} - // skipForm: Boolean: don't start the drag operation, if clicked on form elements - // _skipStartup: Boolean: skip startup(), which collects children, for deferred initialization - // (this is used in the markup mode) - this.node = dojo.byId(node); - if(!params){ params = {}; } - this.creator = params.creator || null; - this.skipForm = params.skipForm; - this.defaultCreator = dojo.dnd._defaultCreator(this.node); - - // 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", this, "onSelectStart"), - dojo.connect(this.node, "onselectstart", this, "onSelectStart") - ]; - }, - - // object attributes (for markup) - creator: function(){}, // creator function, dummy at the moment - - // abstract access to the map - getItem: function(/*String*/ key){ - // summary: returns a data item by its key (id) - return this.map[key]; // Object - }, - setItem: function(/*String*/ key, /*Object*/ data){ - // summary: associates a data item with its key (id) - this.map[key] = data; - }, - delItem: function(/*String*/ key){ - // summary: removes a data item from the map by its key (id) - delete this.map[key]; - }, - forInItems: function(/*Function*/ f, /*Object?*/ o){ - // summary: iterates over a data map skipping members, which - // are present in the empty object (IE and/or 3rd-party libraries). - o = o || dojo.global; - var m = this.map, e = dojo.dnd._empty; - for(var i in this.map){ - if(i in e){ continue; } - f.call(o, m[i], i, m); - } - }, - clearItems: function(){ - // summary: removes all data items from the map - this.map = {}; - }, - - // methods - getAllNodes: function(){ - // summary: returns a list (an array) of all valid child nodes - return dojo.query("> .dojoDndItem", this.parent); // NodeList - }, - insertNodes: function(data, before, anchor){ - // summary: inserts an array of new nodes before/after an anchor node - // data: Array: a list of data items, which should be processed by the creator function - // before: Boolean: insert before the anchor, if true, and after the anchor otherwise - // anchor: Node: the anchor node to be used as a point of insertion - if(!this.parent.firstChild){ - anchor = null; - }else if(before){ - if(!anchor){ - anchor = this.parent.firstChild; - } - }else{ - if(anchor){ - anchor = anchor.nextSibling; - } - } - if(anchor){ - for(var i = 0; i < data.length; ++i){ - var t = this._normalizedCreator(data[i]); - this.setItem(t.node.id, {data: t.data, type: t.type}); - this.parent.insertBefore(t.node, anchor); - } - }else{ - for(var i = 0; i < data.length; ++i){ - var t = this._normalizedCreator(data[i]); - this.setItem(t.node.id, {data: t.data, type: t.type}); - this.parent.appendChild(t.node); - } - } - return this; // self - }, - destroy: function(){ - // summary: prepares the object to be garbage-collected - dojo.forEach(this.events, dojo.disconnect); - this.clearItems(); - this.node = this.parent = this.current; - }, - - // markup methods - markupFactory: function(params, node){ - params._skipStartup = true; - return new dojo.dnd.Container(node, params); - }, - startup: function(){ - // summary: collects valid child items and populate the map - - // set up the real parent node - this.parent = this.node; - if(this.parent.tagName.toLowerCase() == "table"){ - var c = this.parent.getElementsByTagName("tbody"); - if(c && c.length){ this.parent = c[0]; } - } - - // process specially marked children - this.getAllNodes().forEach(function(node){ - if(!node.id){ node.id = dojo.dnd.getUniqueId(); } - var type = node.getAttribute("dndType"), - data = node.getAttribute("dndData"); - this.setItem(node.id, { - data: data ? data : node.innerHTML, - type: type ? type.split(/\s*,\s*/) : ["text"] - }); - }, this); - }, - - // 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(); - }, - onSelectStart: function(e){ - // summary: event processor for onselectevent and ondragevent - // e: Event: mouse event - if(!this.skipForm || !dojo.dnd.isFormElement(e)){ - dojo.stopEvent(e); - } - }, - - // utilities - 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 - }, - _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; - }, - _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); - }, - _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(parent == this.parent && dojo.hasClass(node, "dojoDndItem")){ return node; } - } - } - return null; - }, - _normalizedCreator: function(item, hint){ - // summary: adds all necessary data to the output of the user-supplied creator function - var t = (this.creator ? this.creator : this.defaultCreator)(item, hint); - if(!dojo.isArray(t.type)){ t.type = ["text"]; } - if(!t.node.id){ t.node.id = dojo.dnd.getUniqueId(); } - dojo.addClass(t.node, "dojoDndItem"); - return t; - } -}); - -dojo.dnd._createNode = function(tag){ - // summary: returns a function, which creates an element of given tag - // (SPAN by default) and sets its innerHTML to given text - // tag: String: a tag name or empty for SPAN - if(!tag){ return dojo.dnd._createSpan; } - return function(text){ // Function - var n = dojo.doc.createElement(tag); - n.innerHTML = text; - return n; - }; -}; - -dojo.dnd._createTrTd = function(text){ - // summary: creates a TR/TD structure with given text as an innerHTML of TD - // text: String: a text for TD - var tr = dojo.doc.createElement("tr"); - var td = dojo.doc.createElement("td"); - td.innerHTML = text; - tr.appendChild(td); - return tr; // Node -}; - -dojo.dnd._createSpan = function(text){ - // summary: creates a SPAN element with given text as its innerHTML - // text: String: a text for SPAN - var n = dojo.doc.createElement("span"); - n.innerHTML = text; - return n; // Node -}; - -// dojo.dnd._defaultCreatorNodes: Object: a dicitionary, which maps container tag names to child tag names -dojo.dnd._defaultCreatorNodes = {ul: "li", ol: "li", div: "div", p: "div"}; - -dojo.dnd._defaultCreator = function(node){ - // summary: takes a container node, and returns an appropriate creator function - // node: Node: a container node - var tag = node.tagName.toLowerCase(); - var c = tag == "table" ? dojo.dnd._createTrTd : dojo.dnd._createNode(dojo.dnd._defaultCreatorNodes[tag]); - return function(item, hint){ // Function - var isObj = dojo.isObject(item) && item; - var data = (isObj && item.data) ? item.data : item; - var type = (isObj && item.type) ? item.type : ["text"]; - var t = String(data), n = (hint == "avatar" ? dojo.dnd._createSpan : c)(t); - n.id = dojo.dnd.getUniqueId(); - return {node: n, data: data, type: type}; - }; -}; - -} |