yzt
2023-05-26 2f70f6727314edd84d8ec2bfe3ce832803f1ea77
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
define([
    "dojo/aspect", // aspect.after
    "dojo/_base/declare", // declare
    "dojo/dom-class", // domClass.add domClass.remove domClass.replace
    "dojo/_base/lang", // lang.mixin lang.hitch
    "dojo/on",
    "dojo/touch"
], function(aspect, declare, domClass, lang, on, touch){
 
    // module:
    //      dijit/tree/_dndContainer
 
    /*=====
     var __Args = {
     // summary:
     //     A dict of parameters for Tree source configuration.
     // isSource: Boolean?
     //     Can be used as a DnD source. Defaults to true.
     // accept: String[]
     //     List of accepted types (text strings) for a target; defaults to
     //     ["text", "treeNode"]
     // copyOnly: Boolean?
     //     Copy items, if true, use a state of Ctrl key otherwise,
     // dragThreshold: Number
     //     The move delay in pixels before detecting a drag; 0 by default
     // betweenThreshold: Integer
     //     Distance from upper/lower edge of node to allow drop to reorder nodes
     };
     =====*/
 
    return declare("dijit.tree._dndContainer", null, {
 
        // summary:
        //      This is a base class for `dijit/tree/_dndSelector`, and isn't meant to be used directly.
        //      It's modeled after `dojo/dnd/Container`.
        // tags:
        //      protected
 
        /*=====
         // current: TreeNode
         //     The currently hovered TreeNode.  Not set to anything for keyboard operation.  (TODO: change?)
         current: null,
         =====*/
 
        constructor: function(tree, params){
            // summary:
            //      A constructor of the Container
            // tree: Node
            //      Node or node's id to build the container on
            // params: __Args
            //      A dict of parameters, which gets mixed into the object
            // tags:
            //      private
            this.tree = tree;
            this.node = tree.domNode;   // TODO: rename; it's not a TreeNode but the whole Tree
            lang.mixin(this, params);
 
            // states
            this.containerState = "";
            domClass.add(this.node, "dojoDndContainer");
 
            // set up events
            this.events = [
                // Mouse (or touch) enter/leave on Tree itself
                on(this.node, touch.enter, lang.hitch(this, "onOverEvent")),
                on(this.node, touch.leave, lang.hitch(this, "onOutEvent")),
 
                // switching between TreeNodes
                aspect.after(this.tree, "_onNodeMouseEnter", lang.hitch(this, "onMouseOver"), true),
                aspect.after(this.tree, "_onNodeMouseLeave", lang.hitch(this, "onMouseOut"), true),
 
                // cancel text selection and text dragging
                on(this.node, "dragstart, selectstart", function(evt){
                    evt.preventDefault();
                })
            ];
        },
 
        destroy: function(){
            // summary:
            //      Prepares this object to be garbage-collected
 
            var h;
            while(h = this.events.pop()){
                h.remove();
            }
 
            // this.clearItems();
            this.node = this.parent = null;
        },
 
        // mouse events
        onMouseOver: function(widget /*===== , evt =====*/){
            // summary:
            //      Called when mouse is moved over a TreeNode
            // widget: TreeNode
            // evt: Event
            // tags:
            //      protected
            this.current = widget;
        },
 
        onMouseOut: function(/*===== widget, evt =====*/){
            // summary:
            //      Called when mouse is moved away from a TreeNode
            // widget: TreeNode
            // evt: Event
            // tags:
            //      protected
            this.current = null;
        },
 
        _changeState: function(type, newState){
            // summary:
            //      Changes a named state to new state value
            // type: String
            //      A name of the state to change
            // newState: String
            //      new state
            var prefix = "dojoDnd" + type;
            var state = type.toLowerCase() + "State";
            //domClass.replace(this.node, prefix + newState, prefix + this[state]);
            domClass.replace(this.node, prefix + newState, prefix + this[state]);
            this[state] = newState;
        },
 
        _addItemClass: function(node, type){
            // summary:
            //      Adds a class with prefix "dojoDndItem"
            // node: Node
            //      A node
            // type: String
            //      A variable suffix for a class name
            domClass.add(node, "dojoDndItem" + type);
        },
 
        _removeItemClass: function(node, type){
            // summary:
            //      Removes a class with prefix "dojoDndItem"
            // node: Node
            //      A node
            // type: String
            //      A variable suffix for a class name
            domClass.remove(node, "dojoDndItem" + type);
        },
 
        onOverEvent: function(){
            // summary:
            //      This function is called once, when mouse is over our container
            // tags:
            //      protected
            this._changeState("Container", "Over");
        },
 
        onOutEvent: function(){
            // summary:
            //      This function is called once, when mouse is out of our container
            // tags:
            //      protected
            this._changeState("Container", "");
        }
    });
});