83 lines
2.7 KiB
JavaScript
83 lines
2.7 KiB
JavaScript
|
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();
|
||
|
}
|
||
|
});
|
||
|
|
||
|
}
|