1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
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();
}
});
}
|