diff options
Diffstat (limited to 'includes/js/dojo/dnd/Avatar.js')
-rw-r--r-- | includes/js/dojo/dnd/Avatar.js | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/includes/js/dojo/dnd/Avatar.js b/includes/js/dojo/dnd/Avatar.js new file mode 100644 index 0000000..33ccb07 --- /dev/null +++ b/includes/js/dojo/dnd/Avatar.js @@ -0,0 +1,82 @@ +if(!dojo._hasResource["dojo.dnd.Avatar"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo.dnd.Avatar"] = true; +dojo.provide("dojo.dnd.Avatar"); + +dojo.require("dojo.dnd.common"); + +dojo.declare("dojo.dnd.Avatar", null, { + // summary: an object, which represents transferred DnD items visually + // manager: Object: a DnD manager object + + constructor: function(manager){ + this.manager = manager; + this.construct(); + }, + + // methods + construct: function(){ + // summary: a constructor function; + // it is separate so it can be (dynamically) overwritten in case of need + var a = dojo.doc.createElement("table"); + a.className = "dojoDndAvatar"; + a.style.position = "absolute"; + a.style.zIndex = 1999; + a.style.margin = "0px"; // to avoid dojo.marginBox() problems with table's margins + var b = dojo.doc.createElement("tbody"); + var tr = dojo.doc.createElement("tr"); + tr.className = "dojoDndAvatarHeader"; + var td = dojo.doc.createElement("td"); + td.innerHTML = this._generateText(); + tr.appendChild(td); + dojo.style(tr, "opacity", 0.9); + b.appendChild(tr); + var k = Math.min(5, this.manager.nodes.length); + var source = this.manager.source; + for(var i = 0; i < k; ++i){ + tr = dojo.doc.createElement("tr"); + tr.className = "dojoDndAvatarItem"; + td = dojo.doc.createElement("td"); + if(source.creator){ + // create an avatar representation of the node + node = source._normalizedCreator(source.getItem(this.manager.nodes[i].id).data, "avatar").node; + }else{ + // or just clone the node and hope it works + node = this.manager.nodes[i].cloneNode(true); + if(node.tagName.toLowerCase() == "tr"){ + // insert extra table nodes + var table = dojo.doc.createElement("table"), + tbody = dojo.doc.createElement("tbody"); + tbody.appendChild(node); + table.appendChild(tbody); + node = table; + } + } + node.id = ""; + td.appendChild(node); + tr.appendChild(td); + dojo.style(tr, "opacity", (9 - i) / 10); + b.appendChild(tr); + } + a.appendChild(b); + this.node = a; + }, + destroy: function(){ + // summary: a desctructor for the avatar, called to remove all references so it can be garbage-collected + dojo._destroyElement(this.node); + this.node = false; + }, + update: function(){ + // summary: updates the avatar to reflect the current DnD state + dojo[(this.manager.canDropFlag ? "add" : "remove") + "Class"](this.node, "dojoDndAvatarCanDrop"); + // replace text + dojo.query("tr.dojoDndAvatarHeader td").forEach(function(node){ + node.innerHTML = this._generateText(); + }, this); + }, + _generateText: function(){ + // summary: generates a proper text to reflect copying or moving of items + return this.manager.nodes.length.toString(); + } +}); + +} |