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(); } }); }