source: Dev/trunk/src/client/dojo/dnd/Avatar.js @ 485

Last change on this file since 485 was 483, checked in by hendrikvanantwerpen, 11 years ago

Added Dojo 1.9.3 release.

File size: 3.3 KB
Line 
1define([
2        "../_base/declare",
3        "../_base/window",
4        "../dom",
5        "../dom-attr",
6        "../dom-class",
7        "../dom-construct",
8        "../hccss",
9        "../query"
10], function(declare, win, dom, domAttr, domClass, domConstruct, has, query){
11
12// module:
13//              dojo/dnd/Avatar
14
15return declare("dojo.dnd.Avatar", null, {
16        // summary:
17        //              Object that represents transferred DnD items visually
18        // manager: Object
19        //              a DnD manager object
20
21        constructor: function(manager){
22                this.manager = manager;
23                this.construct();
24        },
25
26        // methods
27        construct: function(){
28                // summary:
29                //              constructor function;
30                //              it is separate so it can be (dynamically) overwritten in case of need
31
32                var a = domConstruct.create("table", {
33                                "class": "dojoDndAvatar",
34                                style: {
35                                        position: "absolute",
36                                        zIndex:   "1999",
37                                        margin:   "0px"
38                                }
39                        }),
40                        source = this.manager.source, node,
41                        b = domConstruct.create("tbody", null, a),
42                        tr = domConstruct.create("tr", null, b),
43                        td = domConstruct.create("td", null, tr),
44                        k = Math.min(5, this.manager.nodes.length), i = 0;
45
46                if(has("highcontrast")){
47                        domConstruct.create("span", {
48                                id : "a11yIcon",
49                                innerHTML : this.manager.copy ? '+' : "<"
50                        }, td)
51                }
52                domConstruct.create("span", {
53                        innerHTML: source.generateText ? this._generateText() : ""
54                }, td);
55
56                // we have to set the opacity on IE only after the node is live
57                domAttr.set(tr, {
58                        "class": "dojoDndAvatarHeader",
59                        style: {opacity: 0.9}
60                });
61                for(; i < k; ++i){
62                        if(source.creator){
63                                // create an avatar representation of the node
64                                node = source._normalizedCreator(source.getItem(this.manager.nodes[i].id).data, "avatar").node;
65                        }else{
66                                // or just clone the node and hope it works
67                                node = this.manager.nodes[i].cloneNode(true);
68                                if(node.tagName.toLowerCase() == "tr"){
69                                        // insert extra table nodes
70                                        var table = domConstruct.create("table"),
71                                                tbody = domConstruct.create("tbody", null, table);
72                                        tbody.appendChild(node);
73                                        node = table;
74                                }
75                        }
76                        node.id = "";
77                        tr = domConstruct.create("tr", null, b);
78                        td = domConstruct.create("td", null, tr);
79                        td.appendChild(node);
80                        domAttr.set(tr, {
81                                "class": "dojoDndAvatarItem",
82                                style: {opacity: (9 - i) / 10}
83                        });
84                }
85                this.node = a;
86        },
87        destroy: function(){
88                // summary:
89                //              destructor for the avatar; called to remove all references so it can be garbage-collected
90                domConstruct.destroy(this.node);
91                this.node = false;
92        },
93        update: function(){
94                // summary:
95                //              updates the avatar to reflect the current DnD state
96                domClass.toggle(this.node, "dojoDndAvatarCanDrop", this.manager.canDropFlag);
97                if(has("highcontrast")){
98                        var icon = dom.byId("a11yIcon");
99                        var text = '+';   // assume canDrop && copy
100                        if (this.manager.canDropFlag && !this.manager.copy){
101                                text = '< '; // canDrop && move
102                        }else if (!this.manager.canDropFlag && !this.manager.copy){
103                                text = "o"; //!canDrop && move
104                        }else if(!this.manager.canDropFlag){
105                                text = 'x';  // !canDrop && copy
106                        }
107                        icon.innerHTML=text;
108                }
109                // replace text
110                query(("tr.dojoDndAvatarHeader td span" +(has("highcontrast") ? " span" : "")), this.node).forEach(
111                        function(node){
112                                node.innerHTML = this.manager.source.generateText ? this._generateText() : "";
113                        }, this);
114        },
115        _generateText: function(){
116                // summary:
117                //              generates a proper text to reflect copying or moving of items
118                return this.manager.nodes.length.toString();
119        }
120});
121
122});
Note: See TracBrowser for help on using the repository browser.