tree-element 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +33 -29
- package/lib/animation.js +5 -5
- package/lib/animation.js.map +1 -1
- package/lib/classNames.d.ts.map +1 -1
- package/lib/classNames.js +2 -2
- package/lib/classNames.js.map +1 -1
- package/lib/dataLoader.d.ts.map +1 -1
- package/lib/dataLoader.js +14 -20
- package/lib/dataLoader.js.map +1 -1
- package/lib/dragAndDropHandler/binarySearch.js +3 -3
- package/lib/dragAndDropHandler/binarySearch.js.map +1 -1
- package/lib/dragAndDropHandler/dragElement.d.ts.map +1 -1
- package/lib/dragAndDropHandler/dragElement.js +9 -12
- package/lib/dragAndDropHandler/dragElement.js.map +1 -1
- package/lib/dragAndDropHandler/generateHitAreas.d.ts.map +1 -1
- package/lib/dragAndDropHandler/generateHitAreas.js +25 -25
- package/lib/dragAndDropHandler/generateHitAreas.js.map +1 -1
- package/lib/dragAndDropHandler/index.d.ts.map +1 -1
- package/lib/dragAndDropHandler/index.js +90 -114
- package/lib/dragAndDropHandler/index.js.map +1 -1
- package/lib/dragAndDropHandler/iterateVisibleNodes.d.ts.map +1 -1
- package/lib/dragAndDropHandler/iterateVisibleNodes.js +10 -10
- package/lib/dragAndDropHandler/iterateVisibleNodes.js.map +1 -1
- package/lib/dragAndDropHandler/types.d.ts.map +1 -1
- package/lib/elementsRenderer.d.ts +15 -6
- package/lib/elementsRenderer.d.ts.map +1 -1
- package/lib/elementsRenderer.js +157 -121
- package/lib/elementsRenderer.js.map +1 -1
- package/lib/events.d.ts.map +1 -1
- package/lib/index.d.ts +5 -5
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +249 -252
- package/lib/index.js.map +1 -1
- package/lib/keyHandler.d.ts +2 -3
- package/lib/keyHandler.d.ts.map +1 -1
- package/lib/keyHandler.js +26 -25
- package/lib/keyHandler.js.map +1 -1
- package/lib/methodTypes.d.ts +1 -1
- package/lib/methodTypes.d.ts.map +1 -1
- package/lib/mouseHandler.d.ts.map +1 -1
- package/lib/mouseHandler.js +26 -42
- package/lib/mouseHandler.js.map +1 -1
- package/lib/mouseUtils.d.ts.map +1 -1
- package/lib/mouseUtils.js +2 -2
- package/lib/mouseUtils.js.map +1 -1
- package/lib/node.d.ts +2 -1
- package/lib/node.d.ts.map +1 -1
- package/lib/node.js +36 -35
- package/lib/node.js.map +1 -1
- package/lib/nodeElement/borderDropHint.d.ts.map +1 -1
- package/lib/nodeElement/borderDropHint.js +4 -5
- package/lib/nodeElement/borderDropHint.js.map +1 -1
- package/lib/nodeElement/folderElement.d.ts +7 -4
- package/lib/nodeElement/folderElement.d.ts.map +1 -1
- package/lib/nodeElement/folderElement.js +61 -42
- package/lib/nodeElement/folderElement.js.map +1 -1
- package/lib/nodeElement/ghostDropHint.d.ts.map +1 -1
- package/lib/nodeElement/ghostDropHint.js +5 -9
- package/lib/nodeElement/ghostDropHint.js.map +1 -1
- package/lib/nodeElement/index.d.ts +2 -1
- package/lib/nodeElement/index.d.ts.map +1 -1
- package/lib/nodeElement/index.js +34 -26
- package/lib/nodeElement/index.js.map +1 -1
- package/lib/nodeUtils.d.ts.map +1 -1
- package/lib/nodeUtils.js +1 -1
- package/lib/nodeUtils.js.map +1 -1
- package/lib/options.d.ts.map +1 -1
- package/lib/positionUtils.js +3 -3
- package/lib/positionUtils.js.map +1 -1
- package/lib/requestUrl.d.ts +1 -1
- package/lib/requestUrl.d.ts.map +1 -1
- package/lib/requestUrl.js +4 -6
- package/lib/requestUrl.js.map +1 -1
- package/lib/saveStateHandler.d.ts.map +1 -1
- package/lib/saveStateHandler.js +38 -48
- package/lib/saveStateHandler.js.map +1 -1
- package/lib/scrollHandler/containerScrollParent.d.ts.map +1 -1
- package/lib/scrollHandler/containerScrollParent.js +9 -11
- package/lib/scrollHandler/containerScrollParent.js.map +1 -1
- package/lib/scrollHandler/createScrollParent.d.ts.map +1 -1
- package/lib/scrollHandler/createScrollParent.js +10 -10
- package/lib/scrollHandler/createScrollParent.js.map +1 -1
- package/lib/scrollHandler/documentScrollParent.d.ts.map +1 -1
- package/lib/scrollHandler/documentScrollParent.js +16 -19
- package/lib/scrollHandler/documentScrollParent.js.map +1 -1
- package/lib/scrollHandler/scrollParent.d.ts.map +1 -1
- package/lib/scrollHandler/scrollParent.js +11 -17
- package/lib/scrollHandler/scrollParent.js.map +1 -1
- package/lib/scrollHandler.d.ts.map +1 -1
- package/lib/scrollHandler.js +11 -14
- package/lib/scrollHandler.js.map +1 -1
- package/lib/selectNodeHandler.d.ts +2 -2
- package/lib/selectNodeHandler.d.ts.map +1 -1
- package/lib/selectNodeHandler.js +45 -54
- package/lib/selectNodeHandler.js.map +1 -1
- package/lib/setDefaultOptions.d.ts.map +1 -1
- package/lib/setDefaultOptions.js +23 -28
- package/lib/setDefaultOptions.js.map +1 -1
- package/lib/triggerCustomEvent.d.ts.map +1 -1
- package/lib/triggerCustomEvent.js +2 -2
- package/lib/triggerCustomEvent.js.map +1 -1
- package/lib/util.d.ts.map +1 -1
- package/lib/util.js +2 -2
- package/lib/util.js.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/lib/version.js.map +1 -1
- package/package.json +5 -3
- package/src/animation.ts +1 -1
- package/src/classNames.ts +52 -52
- package/src/dataLoader.ts +68 -71
- package/src/dragAndDropHandler/binarySearch.ts +17 -17
- package/src/dragAndDropHandler/dragElement.ts +50 -50
- package/src/dragAndDropHandler/generateHitAreas.ts +156 -161
- package/src/dragAndDropHandler/index.ts +342 -351
- package/src/dragAndDropHandler/iterateVisibleNodes.ts +59 -63
- package/src/dragAndDropHandler/types.ts +5 -5
- package/src/elementsRenderer.ts +351 -298
- package/src/events.ts +216 -216
- package/src/header.txt +1 -1
- package/src/index.ts +52 -82
- package/src/keyHandler.ts +125 -115
- package/src/methodTypes.ts +4 -7
- package/src/mouseHandler.ts +314 -317
- package/src/mouseUtils.ts +14 -14
- package/src/node.ts +761 -766
- package/src/nodeElement/borderDropHint.ts +25 -25
- package/src/nodeElement/folderElement.ts +135 -112
- package/src/nodeElement/ghostDropHint.ts +62 -62
- package/src/nodeElement/index.ts +88 -74
- package/src/nodeUtils.ts +5 -5
- package/src/options.ts +6 -2
- package/src/requestUrl.ts +3 -3
- package/src/saveStateHandler.ts +204 -206
- package/src/scrollHandler/containerScrollParent.ts +49 -52
- package/src/scrollHandler/createScrollParent.ts +27 -27
- package/src/scrollHandler/documentScrollParent.ts +70 -70
- package/src/scrollHandler/scrollParent.ts +98 -98
- package/src/scrollHandler.ts +45 -45
- package/src/selectNodeHandler.ts +176 -166
- package/src/setDefaultOptions.ts +25 -22
- package/src/triggerCustomEvent.ts +7 -3
- package/src/util.ts +2 -2
- package/src/version.ts +1 -1
- package/tree_element.debug.js +3752 -3784
- package/tree_element.debug.js.map +1 -1
- package/tree_element.js +2 -2
- package/tree_element.js.map +1 -1
|
@@ -4,48 +4,24 @@ import DragElement from './dragElement.js';
|
|
|
4
4
|
import generateHitAreas from './generateHitAreas.js';
|
|
5
5
|
|
|
6
6
|
class DragAndDropHandler {
|
|
7
|
-
currentItem;
|
|
8
|
-
hitAreas;
|
|
9
|
-
hoveredArea;
|
|
10
|
-
isDragging;
|
|
11
|
-
_autoEscape;
|
|
12
|
-
_classNames;
|
|
13
|
-
_dragElement;
|
|
14
|
-
_getNodeElement;
|
|
15
|
-
_getNodeElementForNode;
|
|
16
|
-
_getScrollLeft;
|
|
17
|
-
_getTree;
|
|
18
|
-
_onCanMove;
|
|
19
|
-
_onCanMoveTo;
|
|
20
|
-
_onDragMove;
|
|
21
|
-
_onDragStop;
|
|
22
|
-
_onIsMoveHandle;
|
|
23
|
-
_openFolderDelay;
|
|
24
|
-
_openFolderTimer;
|
|
25
|
-
_openNode;
|
|
26
|
-
_previousGhost;
|
|
27
|
-
_refreshElements;
|
|
28
|
-
_slide;
|
|
29
|
-
_treeElement;
|
|
30
|
-
_triggerEvent;
|
|
31
7
|
constructor({
|
|
32
|
-
autoEscape,
|
|
33
|
-
classNames,
|
|
34
|
-
getNodeElement,
|
|
35
|
-
getNodeElementForNode,
|
|
36
|
-
getScrollLeft,
|
|
37
|
-
getTree,
|
|
38
|
-
onCanMove,
|
|
39
|
-
onCanMoveTo,
|
|
40
|
-
onDragMove,
|
|
41
|
-
onDragStop,
|
|
42
|
-
onIsMoveHandle,
|
|
43
|
-
openFolderDelay,
|
|
44
|
-
openNode,
|
|
45
|
-
refreshElements,
|
|
46
|
-
slide,
|
|
47
|
-
treeElement,
|
|
48
|
-
triggerEvent
|
|
8
|
+
_autoEscape: autoEscape,
|
|
9
|
+
_classNames: classNames,
|
|
10
|
+
_getNodeElement: getNodeElement,
|
|
11
|
+
_getNodeElementForNode: getNodeElementForNode,
|
|
12
|
+
_getScrollLeft: getScrollLeft,
|
|
13
|
+
_getTree: getTree,
|
|
14
|
+
_onCanMove: onCanMove,
|
|
15
|
+
_onCanMoveTo: onCanMoveTo,
|
|
16
|
+
_onDragMove: onDragMove,
|
|
17
|
+
_onDragStop: onDragStop,
|
|
18
|
+
_onIsMoveHandle: onIsMoveHandle,
|
|
19
|
+
_openFolderDelay: openFolderDelay,
|
|
20
|
+
_openNode: openNode,
|
|
21
|
+
_refreshElements: refreshElements,
|
|
22
|
+
_slide: slide,
|
|
23
|
+
_treeElement: treeElement,
|
|
24
|
+
_triggerEvent: triggerEvent
|
|
49
25
|
}) {
|
|
50
26
|
this._autoEscape = autoEscape;
|
|
51
27
|
this._classNames = classNames;
|
|
@@ -64,16 +40,16 @@ class DragAndDropHandler {
|
|
|
64
40
|
this._slide = slide;
|
|
65
41
|
this._treeElement = treeElement;
|
|
66
42
|
this._triggerEvent = triggerEvent;
|
|
67
|
-
this.
|
|
68
|
-
this.
|
|
69
|
-
this.
|
|
70
|
-
this.
|
|
43
|
+
this._hoveredArea = null;
|
|
44
|
+
this._hitAreas = [];
|
|
45
|
+
this._isDragging = false;
|
|
46
|
+
this._currentItem = null;
|
|
71
47
|
this._dragElement = null;
|
|
72
48
|
this._openFolderTimer = null;
|
|
73
49
|
this._previousGhost = null;
|
|
74
50
|
}
|
|
75
|
-
|
|
76
|
-
|
|
51
|
+
_mouseCapture(positionInfo) {
|
|
52
|
+
let element = positionInfo.target;
|
|
77
53
|
if (!this._mustCaptureElement(element)) {
|
|
78
54
|
return null;
|
|
79
55
|
}
|
|
@@ -82,25 +58,25 @@ class DragAndDropHandler {
|
|
|
82
58
|
}
|
|
83
59
|
let nodeElement = this._getNodeElement(element);
|
|
84
60
|
if (nodeElement && this._onCanMove) {
|
|
85
|
-
if (!this._onCanMove(nodeElement.
|
|
61
|
+
if (!this._onCanMove(nodeElement._node)) {
|
|
86
62
|
nodeElement = null;
|
|
87
63
|
}
|
|
88
64
|
}
|
|
89
|
-
this.
|
|
90
|
-
return this.
|
|
65
|
+
this._currentItem = nodeElement;
|
|
66
|
+
return this._currentItem != null;
|
|
91
67
|
}
|
|
92
|
-
|
|
93
|
-
if (!this.
|
|
68
|
+
_mouseDrag(positionInfo) {
|
|
69
|
+
if (!this._currentItem || !this._dragElement) {
|
|
94
70
|
return false;
|
|
95
71
|
}
|
|
96
|
-
this._dragElement.
|
|
97
|
-
|
|
98
|
-
if (area && this._canMoveToArea(area, this.
|
|
72
|
+
this._dragElement._move(positionInfo.pageX, positionInfo.pageY);
|
|
73
|
+
let area = this._findHoveredArea(positionInfo.pageX, positionInfo.pageY);
|
|
74
|
+
if (area && this._canMoveToArea(area, this._currentItem)) {
|
|
99
75
|
if (!area.node.isFolder()) {
|
|
100
76
|
this._stopOpenFolderTimer();
|
|
101
77
|
}
|
|
102
|
-
if (this.
|
|
103
|
-
this.
|
|
78
|
+
if (this._hoveredArea !== area) {
|
|
79
|
+
this._hoveredArea = area;
|
|
104
80
|
|
|
105
81
|
// If this is a closed folder, start timer to open it
|
|
106
82
|
if (this._mustOpenFolderTimer(area)) {
|
|
@@ -113,64 +89,64 @@ class DragAndDropHandler {
|
|
|
113
89
|
} else {
|
|
114
90
|
this._removeDropHint();
|
|
115
91
|
this._stopOpenFolderTimer();
|
|
116
|
-
this.
|
|
92
|
+
this._hoveredArea = area;
|
|
117
93
|
}
|
|
118
94
|
if (!area) {
|
|
119
95
|
if (this._onDragMove) {
|
|
120
|
-
this._onDragMove(this.
|
|
96
|
+
this._onDragMove(this._currentItem._node, positionInfo.originalEvent);
|
|
121
97
|
}
|
|
122
98
|
}
|
|
123
99
|
return true;
|
|
124
100
|
}
|
|
125
|
-
|
|
126
|
-
if (!this.
|
|
101
|
+
_mouseStart(positionInfo) {
|
|
102
|
+
if (!this._currentItem) {
|
|
127
103
|
return false;
|
|
128
104
|
}
|
|
129
|
-
this.
|
|
130
|
-
|
|
105
|
+
this._refresh();
|
|
106
|
+
let {
|
|
131
107
|
left,
|
|
132
108
|
top
|
|
133
109
|
} = getElementPosition(positionInfo.target);
|
|
134
|
-
|
|
110
|
+
let node = this._currentItem._node;
|
|
135
111
|
this._dragElement = new DragElement({
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
112
|
+
_autoEscape: this._autoEscape ?? true,
|
|
113
|
+
_classNames: this._classNames,
|
|
114
|
+
_nodeName: node.name,
|
|
115
|
+
_offsetX: positionInfo.pageX - left,
|
|
116
|
+
_offsetY: positionInfo.pageY - top,
|
|
117
|
+
_treeElement: this._treeElement
|
|
142
118
|
});
|
|
143
|
-
this.
|
|
144
|
-
this.
|
|
119
|
+
this._isDragging = true;
|
|
120
|
+
this._currentItem._element.classList.add(this._classNames.moving);
|
|
145
121
|
return true;
|
|
146
122
|
}
|
|
147
|
-
|
|
123
|
+
_mouseStop(positionInfo) {
|
|
148
124
|
this._moveItem(positionInfo);
|
|
149
125
|
this._clear();
|
|
150
126
|
this._removeHover();
|
|
151
127
|
this._removeDropHint();
|
|
152
128
|
this._removeHitAreas();
|
|
153
|
-
|
|
154
|
-
if (this.
|
|
155
|
-
this.
|
|
156
|
-
this.
|
|
129
|
+
let currentItem = this._currentItem;
|
|
130
|
+
if (this._currentItem) {
|
|
131
|
+
this._currentItem._element.classList.remove(this._classNames.moving);
|
|
132
|
+
this._currentItem = null;
|
|
157
133
|
}
|
|
158
|
-
this.
|
|
159
|
-
if (!this.
|
|
134
|
+
this._isDragging = false;
|
|
135
|
+
if (!this._hoveredArea && currentItem) {
|
|
160
136
|
if (this._onDragStop) {
|
|
161
|
-
this._onDragStop(currentItem.
|
|
137
|
+
this._onDragStop(currentItem._node, positionInfo.originalEvent);
|
|
162
138
|
}
|
|
163
139
|
}
|
|
164
140
|
return false;
|
|
165
141
|
}
|
|
166
|
-
|
|
142
|
+
_refresh() {
|
|
167
143
|
this._removeHitAreas();
|
|
168
|
-
if (this.
|
|
169
|
-
|
|
144
|
+
if (this._currentItem) {
|
|
145
|
+
let currentNode = this._currentItem._node;
|
|
170
146
|
this._generateHitAreas(currentNode);
|
|
171
|
-
this.
|
|
172
|
-
if (this.
|
|
173
|
-
this.
|
|
147
|
+
this._currentItem = this._getNodeElementForNode(currentNode);
|
|
148
|
+
if (this._isDragging) {
|
|
149
|
+
this._currentItem._element.classList.add(this._classNames.moving);
|
|
174
150
|
}
|
|
175
151
|
}
|
|
176
152
|
}
|
|
@@ -178,20 +154,20 @@ class DragAndDropHandler {
|
|
|
178
154
|
if (!this._onCanMoveTo) {
|
|
179
155
|
return true;
|
|
180
156
|
}
|
|
181
|
-
return this._onCanMoveTo(currentItem.
|
|
157
|
+
return this._onCanMoveTo(currentItem._node, area.node, area.position);
|
|
182
158
|
}
|
|
183
159
|
_clear() {
|
|
184
160
|
if (this._dragElement) {
|
|
185
|
-
this._dragElement.
|
|
161
|
+
this._dragElement._remove();
|
|
186
162
|
this._dragElement = null;
|
|
187
163
|
}
|
|
188
164
|
}
|
|
189
165
|
_findHoveredArea(x, y) {
|
|
190
|
-
|
|
166
|
+
let dimensions = this._getTreeDimensions();
|
|
191
167
|
if (x < dimensions.left || y < dimensions.top || x > dimensions.right || y > dimensions.bottom) {
|
|
192
168
|
return null;
|
|
193
169
|
}
|
|
194
|
-
return binarySearch(this.
|
|
170
|
+
return binarySearch(this._hitAreas, area => {
|
|
195
171
|
if (y < area.top) {
|
|
196
172
|
return 1;
|
|
197
173
|
} else if (y > area.bottom) {
|
|
@@ -202,19 +178,19 @@ class DragAndDropHandler {
|
|
|
202
178
|
});
|
|
203
179
|
}
|
|
204
180
|
_generateHitAreas(currentNode) {
|
|
205
|
-
|
|
181
|
+
let tree = this._getTree();
|
|
206
182
|
if (!tree) {
|
|
207
|
-
this.
|
|
183
|
+
this._hitAreas = [];
|
|
208
184
|
} else {
|
|
209
|
-
this.
|
|
185
|
+
this._hitAreas = generateHitAreas(tree, currentNode, this._getTreeDimensions().bottom);
|
|
210
186
|
}
|
|
211
187
|
}
|
|
212
188
|
_getTreeDimensions() {
|
|
213
189
|
// Return the dimensions of the tree. Add a margin to the bottom to allow
|
|
214
190
|
// to drag-and-drop after the last element.
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
191
|
+
let treePosition = getElementPosition(this._treeElement);
|
|
192
|
+
let left = treePosition.left + this._getScrollLeft();
|
|
193
|
+
let top = treePosition.top;
|
|
218
194
|
return {
|
|
219
195
|
bottom: top + this._treeElement.clientHeight + 16,
|
|
220
196
|
left,
|
|
@@ -225,16 +201,16 @@ class DragAndDropHandler {
|
|
|
225
201
|
|
|
226
202
|
/* Move the dragged node to the selected position in the tree. */
|
|
227
203
|
_moveItem(positionInfo) {
|
|
228
|
-
if (this.
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
204
|
+
if (this._currentItem && this._hoveredArea?.position && this._canMoveToArea(this._hoveredArea, this._currentItem)) {
|
|
205
|
+
let movedNode = this._currentItem._node;
|
|
206
|
+
let targetNode = this._hoveredArea.node;
|
|
207
|
+
let position = this._hoveredArea.position;
|
|
208
|
+
let previousParent = movedNode.parent;
|
|
233
209
|
if (position === "inside") {
|
|
234
|
-
this.
|
|
210
|
+
this._hoveredArea.node.is_open = true;
|
|
235
211
|
}
|
|
236
|
-
|
|
237
|
-
|
|
212
|
+
let doMove = () => {
|
|
213
|
+
let tree = this._getTree();
|
|
238
214
|
if (tree) {
|
|
239
215
|
tree.moveNode(movedNode, targetNode, position);
|
|
240
216
|
this._treeElement.textContent = "";
|
|
@@ -256,11 +232,11 @@ class DragAndDropHandler {
|
|
|
256
232
|
}
|
|
257
233
|
}
|
|
258
234
|
_mustCaptureElement(element) {
|
|
259
|
-
|
|
235
|
+
let nodeName = element.nodeName;
|
|
260
236
|
return nodeName !== "INPUT" && nodeName !== "SELECT" && nodeName !== "TEXTAREA";
|
|
261
237
|
}
|
|
262
238
|
_mustOpenFolderTimer(area) {
|
|
263
|
-
|
|
239
|
+
let node = area.node;
|
|
264
240
|
return node.isFolder() && !node.is_open && area.position === "inside";
|
|
265
241
|
}
|
|
266
242
|
_removeDropHint() {
|
|
@@ -269,20 +245,20 @@ class DragAndDropHandler {
|
|
|
269
245
|
}
|
|
270
246
|
}
|
|
271
247
|
_removeHitAreas() {
|
|
272
|
-
this.
|
|
248
|
+
this._hitAreas = [];
|
|
273
249
|
}
|
|
274
250
|
_removeHover() {
|
|
275
|
-
this.
|
|
251
|
+
this._hoveredArea = null;
|
|
276
252
|
}
|
|
277
253
|
_startOpenFolderTimer(folder) {
|
|
278
|
-
|
|
254
|
+
let openFolder = () => {
|
|
279
255
|
void this._openNode(folder, this._slide).then(() => {
|
|
280
|
-
this.
|
|
256
|
+
this._refresh();
|
|
281
257
|
this._updateDropHint();
|
|
282
258
|
});
|
|
283
259
|
};
|
|
284
260
|
this._stopOpenFolderTimer();
|
|
285
|
-
|
|
261
|
+
let openFolderDelay = this._openFolderDelay;
|
|
286
262
|
if (openFolderDelay !== false) {
|
|
287
263
|
this._openFolderTimer = window.setTimeout(openFolder, openFolderDelay);
|
|
288
264
|
}
|
|
@@ -294,7 +270,7 @@ class DragAndDropHandler {
|
|
|
294
270
|
}
|
|
295
271
|
}
|
|
296
272
|
_updateDropHint() {
|
|
297
|
-
if (!this.
|
|
273
|
+
if (!this._hoveredArea) {
|
|
298
274
|
return;
|
|
299
275
|
}
|
|
300
276
|
|
|
@@ -302,8 +278,8 @@ class DragAndDropHandler {
|
|
|
302
278
|
this._removeDropHint();
|
|
303
279
|
|
|
304
280
|
// add new drop hint
|
|
305
|
-
|
|
306
|
-
this._previousGhost = nodeElement.
|
|
281
|
+
let nodeElement = this._getNodeElementForNode(this._hoveredArea.node);
|
|
282
|
+
this._previousGhost = nodeElement._addDropHint(this._hoveredArea.position);
|
|
307
283
|
}
|
|
308
284
|
}
|
|
309
285
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/dragAndDropHandler/index.ts"],"sourcesContent":["import type { ClassNames } from \"../classNames\";\nimport type {\n GetScrollLeft,\n GetTree,\n OpenNode,\n RefreshElements,\n TriggerEvent,\n} from \"../methodTypes\";\nimport type { PositionInfo } from \"../mouseUtils\";\nimport type { Node } from \"../node\";\nimport type NodeElement from \"../nodeElement\";\nimport type {\n DragMethod,\n OnCanMove,\n OnCanMoveTo,\n OnIsMoveHandle,\n} from \"../options\";\nimport type { DropHint, HitArea } from \"./types\";\n\nimport { getElementPosition } from \"../positionUtils\";\nimport binarySearch from \"./binarySearch\";\nimport DragElement from \"./dragElement\";\nimport generateHitAreas from \"./generateHitAreas\";\n\ninterface Dimensions {\n bottom: number;\n left: number;\n right: number;\n top: number;\n}\n\ninterface DragAndDropHandlerParams {\n autoEscape?: boolean;\n classNames: ClassNames;\n getNodeElement: GetNodeElement;\n getNodeElementForNode: GetNodeElementForNode;\n getScrollLeft: GetScrollLeft;\n getTree: GetTree;\n onCanMove?: OnCanMove;\n onCanMoveTo?: OnCanMoveTo;\n onDragMove?: DragMethod;\n onDragStop?: DragMethod;\n onIsMoveHandle?: OnIsMoveHandle;\n openFolderDelay: false | number;\n openNode: OpenNode;\n refreshElements: RefreshElements;\n slide: boolean;\n treeElement: HTMLElement;\n triggerEvent: TriggerEvent;\n}\ntype GetNodeElement = (element: HTMLElement) => NodeElement | null;\n\ntype GetNodeElementForNode = (node: Node) => NodeElement;\n\nexport class DragAndDropHandler {\n public currentItem: NodeElement | null;\n public hitAreas: HitArea[];\n public hoveredArea: HitArea | null;\n public isDragging: boolean;\n\n private autoEscape?: boolean;\n private classNames: ClassNames;\n private dragElement: DragElement | null;\n private getNodeElement: GetNodeElement;\n private getNodeElementForNode: GetNodeElementForNode;\n private getScrollLeft: GetScrollLeft;\n private getTree: GetTree;\n private onCanMove?: OnCanMove;\n private onCanMoveTo?: OnCanMoveTo;\n private onDragMove?: DragMethod;\n private onDragStop?: DragMethod;\n private onIsMoveHandle?: OnIsMoveHandle;\n private openFolderDelay: false | number;\n private openFolderTimer: null | number;\n private openNode: OpenNode;\n private previousGhost: DropHint | null;\n private refreshElements: RefreshElements;\n private slide: boolean;\n private treeElement: HTMLElement;\n private triggerEvent: TriggerEvent;\n\n constructor({\n autoEscape,\n classNames,\n getNodeElement,\n getNodeElementForNode,\n getScrollLeft,\n getTree,\n onCanMove,\n onCanMoveTo,\n onDragMove,\n onDragStop,\n onIsMoveHandle,\n openFolderDelay,\n openNode,\n refreshElements,\n slide,\n treeElement,\n triggerEvent,\n }: DragAndDropHandlerParams) {\n this.autoEscape = autoEscape;\n this.classNames = classNames;\n this.getNodeElement = getNodeElement;\n this.getNodeElementForNode = getNodeElementForNode;\n this.getScrollLeft = getScrollLeft;\n this.getTree = getTree;\n this.onCanMove = onCanMove;\n this.onCanMoveTo = onCanMoveTo;\n this.onDragMove = onDragMove;\n this.onDragStop = onDragStop;\n this.onIsMoveHandle = onIsMoveHandle;\n this.openFolderDelay = openFolderDelay;\n this.openNode = openNode;\n this.refreshElements = refreshElements;\n this.slide = slide;\n this.treeElement = treeElement;\n this.triggerEvent = triggerEvent;\n\n this.hoveredArea = null;\n this.hitAreas = [];\n this.isDragging = false;\n this.currentItem = null;\n\n this.dragElement = null;\n this.openFolderTimer = null;\n this.previousGhost = null;\n }\n\n public mouseCapture(positionInfo: PositionInfo): boolean | null {\n const element = positionInfo.target;\n\n if (!this.mustCaptureElement(element)) {\n return null;\n }\n\n if (this.onIsMoveHandle && !this.onIsMoveHandle(element)) {\n return null;\n }\n\n let nodeElement = this.getNodeElement(element);\n\n if (nodeElement && this.onCanMove) {\n if (!this.onCanMove(nodeElement.node)) {\n nodeElement = null;\n }\n }\n\n this.currentItem = nodeElement;\n return this.currentItem != null;\n }\n\n public mouseDrag(positionInfo: PositionInfo): boolean {\n if (!this.currentItem || !this.dragElement) {\n return false;\n }\n\n this.dragElement.move(positionInfo.pageX, positionInfo.pageY);\n\n const area = this.findHoveredArea(\n positionInfo.pageX,\n positionInfo.pageY,\n );\n\n if (area && this.canMoveToArea(area, this.currentItem)) {\n if (!area.node.isFolder()) {\n this.stopOpenFolderTimer();\n }\n\n if (this.hoveredArea !== area) {\n this.hoveredArea = area;\n\n // If this is a closed folder, start timer to open it\n if (this.mustOpenFolderTimer(area)) {\n this.startOpenFolderTimer(area.node);\n } else {\n this.stopOpenFolderTimer();\n }\n\n this.updateDropHint();\n }\n } else {\n this.removeDropHint();\n this.stopOpenFolderTimer();\n this.hoveredArea = area;\n }\n\n if (!area) {\n if (this.onDragMove) {\n this.onDragMove(\n this.currentItem.node,\n positionInfo.originalEvent,\n );\n }\n }\n\n return true;\n }\n\n public mouseStart(positionInfo: PositionInfo): boolean {\n if (!this.currentItem) {\n return false;\n }\n\n this.refresh();\n\n const { left, top } = getElementPosition(positionInfo.target);\n\n const node = this.currentItem.node;\n\n this.dragElement = new DragElement({\n autoEscape: this.autoEscape ?? true,\n classNames: this.classNames,\n nodeName: node.name,\n offsetX: positionInfo.pageX - left,\n offsetY: positionInfo.pageY - top,\n treeElement: this.treeElement,\n });\n\n this.isDragging = true;\n this.currentItem.element.classList.add(this.classNames.moving);\n\n return true;\n }\n\n public mouseStop(positionInfo: PositionInfo): boolean {\n this.moveItem(positionInfo);\n this.clear();\n this.removeHover();\n this.removeDropHint();\n this.removeHitAreas();\n\n const currentItem = this.currentItem;\n\n if (this.currentItem) {\n this.currentItem.element.classList.remove(this.classNames.moving);\n this.currentItem = null;\n }\n\n this.isDragging = false;\n\n if (!this.hoveredArea && currentItem) {\n if (this.onDragStop) {\n this.onDragStop(currentItem.node, positionInfo.originalEvent);\n }\n }\n\n return false;\n }\n\n public refresh(): void {\n this.removeHitAreas();\n\n if (this.currentItem) {\n const currentNode = this.currentItem.node;\n this.generateHitAreas(currentNode);\n this.currentItem = this.getNodeElementForNode(currentNode);\n\n if (this.isDragging) {\n this.currentItem.element.classList.add(this.classNames.moving);\n }\n }\n }\n\n private canMoveToArea(area: HitArea, currentItem: NodeElement): boolean {\n if (!this.onCanMoveTo) {\n return true;\n }\n\n return this.onCanMoveTo(currentItem.node, area.node, area.position);\n }\n\n private clear(): void {\n if (this.dragElement) {\n this.dragElement.remove();\n this.dragElement = null;\n }\n }\n\n private findHoveredArea(x: number, y: number): HitArea | null {\n const dimensions = this.getTreeDimensions();\n\n if (\n x < dimensions.left ||\n y < dimensions.top ||\n x > dimensions.right ||\n y > dimensions.bottom\n ) {\n return null;\n }\n\n return binarySearch<HitArea>(this.hitAreas, (area) => {\n if (y < area.top) {\n return 1;\n } else if (y > area.bottom) {\n return -1;\n } else {\n return 0;\n }\n });\n }\n\n private generateHitAreas(currentNode: Node): void {\n const tree = this.getTree();\n\n if (!tree) {\n this.hitAreas = [];\n } else {\n this.hitAreas = generateHitAreas(\n tree,\n currentNode,\n this.getTreeDimensions().bottom,\n );\n }\n }\n\n private getTreeDimensions(): Dimensions {\n // Return the dimensions of the tree. Add a margin to the bottom to allow\n // to drag-and-drop after the last element.\n const treePosition = getElementPosition(this.treeElement);\n const left = treePosition.left + this.getScrollLeft();\n const top = treePosition.top;\n\n return {\n bottom: top + this.treeElement.clientHeight + 16,\n left,\n right: left + this.treeElement.clientWidth,\n top,\n };\n }\n\n /* Move the dragged node to the selected position in the tree. */\n private moveItem(positionInfo: PositionInfo): void {\n if (\n this.currentItem &&\n this.hoveredArea?.position &&\n this.canMoveToArea(this.hoveredArea, this.currentItem)\n ) {\n const movedNode = this.currentItem.node;\n const targetNode = this.hoveredArea.node;\n const position = this.hoveredArea.position;\n const previousParent = movedNode.parent;\n\n if (position === \"inside\") {\n this.hoveredArea.node.is_open = true;\n }\n\n const doMove = (): void => {\n const tree = this.getTree();\n\n if (tree) {\n tree.moveNode(movedNode, targetNode, position);\n\n this.treeElement.textContent = \"\";\n this.refreshElements(null);\n }\n };\n\n if (this.triggerEvent(\"tree.move\", {\n moveInfo: {\n doMove,\n movedNode,\n originalEvent: positionInfo.originalEvent,\n position,\n previousParent,\n targetNode,\n },\n })) {\n doMove();\n }\n }\n }\n\n private mustCaptureElement(element: HTMLElement): boolean {\n const nodeName = element.nodeName;\n\n return (\n nodeName !== \"INPUT\" &&\n nodeName !== \"SELECT\" &&\n nodeName !== \"TEXTAREA\"\n );\n }\n\n private mustOpenFolderTimer(area: HitArea): boolean {\n const node = area.node;\n\n return node.isFolder() && !node.is_open && area.position === \"inside\";\n }\n\n private removeDropHint(): void {\n if (this.previousGhost) {\n this.previousGhost.remove();\n }\n }\n\n private removeHitAreas(): void {\n this.hitAreas = [];\n }\n\n private removeHover(): void {\n this.hoveredArea = null;\n }\n\n private startOpenFolderTimer(folder: Node): void {\n const openFolder = (): void => {\n void this.openNode(folder, this.slide).then(() => {\n this.refresh();\n this.updateDropHint();\n });\n };\n\n this.stopOpenFolderTimer();\n\n const openFolderDelay = this.openFolderDelay;\n\n if (openFolderDelay !== false) {\n this.openFolderTimer = window.setTimeout(\n openFolder,\n openFolderDelay,\n );\n }\n }\n\n private stopOpenFolderTimer(): void {\n if (this.openFolderTimer) {\n clearTimeout(this.openFolderTimer);\n this.openFolderTimer = null;\n }\n }\n\n private updateDropHint(): void {\n if (!this.hoveredArea) {\n return;\n }\n\n // remove previous drop hint\n this.removeDropHint();\n\n // add new drop hint\n const nodeElement = this.getNodeElementForNode(this.hoveredArea.node);\n this.previousGhost = nodeElement.addDropHint(this.hoveredArea.position);\n }\n}\n"],"names":["autoEscape","classNames","dragElement","getNodeElement","getNodeElementForNode","getScrollLeft","getTree","onCanMove","onCanMoveTo","onDragMove","onDragStop","onIsMoveHandle","openFolderDelay","openFolderTimer","openNode","previousGhost","refreshElements","slide","treeElement","triggerEvent","mustCaptureElement","findHoveredArea","canMoveToArea","stopOpenFolderTimer","mustOpenFolderTimer","startOpenFolderTimer","updateDropHint","removeDropHint","moveItem","clear","removeHover","removeHitAreas","generateHitAreas","getTreeDimensions"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/dragAndDropHandler/index.ts"],"sourcesContent":["import type { ClassNames } from \"../classNames\";\nimport type {\n GetScrollLeft,\n GetTree,\n OpenNode,\n RefreshElements,\n TriggerEvent,\n} from \"../methodTypes\";\nimport type { PositionInfo } from \"../mouseUtils\";\nimport type { Node } from \"../node\";\nimport type NodeElement from \"../nodeElement\";\nimport type {\n DragMethod,\n OnCanMove,\n OnCanMoveTo,\n OnIsMoveHandle,\n} from \"../options\";\nimport type { DropHint, HitArea } from \"./types\";\n\nimport { getElementPosition } from \"../positionUtils\";\nimport binarySearch from \"./binarySearch\";\nimport DragElement from \"./dragElement\";\nimport generateHitAreas from \"./generateHitAreas\";\n\ninterface Dimensions {\n bottom: number;\n left: number;\n right: number;\n top: number;\n}\n\ninterface DragAndDropHandlerParams {\n autoEscape?: boolean;\n classNames: ClassNames;\n getNodeElement: GetNodeElement;\n getNodeElementForNode: GetNodeElementForNode;\n getScrollLeft: GetScrollLeft;\n getTree: GetTree;\n onCanMove?: OnCanMove;\n onCanMoveTo?: OnCanMoveTo;\n onDragMove?: DragMethod;\n onDragStop?: DragMethod;\n onIsMoveHandle?: OnIsMoveHandle;\n openFolderDelay: false | number;\n openNode: OpenNode;\n refreshElements: RefreshElements;\n slide: boolean;\n treeElement: HTMLElement;\n triggerEvent: TriggerEvent;\n}\ntype GetNodeElement = (element: HTMLElement) => NodeElement | null;\n\ntype GetNodeElementForNode = (node: Node) => NodeElement;\n\nexport class DragAndDropHandler {\n public currentItem: NodeElement | null;\n public hitAreas: HitArea[];\n public hoveredArea: HitArea | null;\n public isDragging: boolean;\n\n private autoEscape?: boolean;\n private classNames: ClassNames;\n private dragElement: DragElement | null;\n private getNodeElement: GetNodeElement;\n private getNodeElementForNode: GetNodeElementForNode;\n private getScrollLeft: GetScrollLeft;\n private getTree: GetTree;\n private onCanMove?: OnCanMove;\n private onCanMoveTo?: OnCanMoveTo;\n private onDragMove?: DragMethod;\n private onDragStop?: DragMethod;\n private onIsMoveHandle?: OnIsMoveHandle;\n private openFolderDelay: false | number;\n private openFolderTimer: null | number;\n private openNode: OpenNode;\n private previousGhost: DropHint | null;\n private refreshElements: RefreshElements;\n private slide: boolean;\n private treeElement: HTMLElement;\n private triggerEvent: TriggerEvent;\n\n constructor({\n autoEscape,\n classNames,\n getNodeElement,\n getNodeElementForNode,\n getScrollLeft,\n getTree,\n onCanMove,\n onCanMoveTo,\n onDragMove,\n onDragStop,\n onIsMoveHandle,\n openFolderDelay,\n openNode,\n refreshElements,\n slide,\n treeElement,\n triggerEvent,\n }: DragAndDropHandlerParams) {\n this.autoEscape = autoEscape;\n this.classNames = classNames;\n this.getNodeElement = getNodeElement;\n this.getNodeElementForNode = getNodeElementForNode;\n this.getScrollLeft = getScrollLeft;\n this.getTree = getTree;\n this.onCanMove = onCanMove;\n this.onCanMoveTo = onCanMoveTo;\n this.onDragMove = onDragMove;\n this.onDragStop = onDragStop;\n this.onIsMoveHandle = onIsMoveHandle;\n this.openFolderDelay = openFolderDelay;\n this.openNode = openNode;\n this.refreshElements = refreshElements;\n this.slide = slide;\n this.treeElement = treeElement;\n this.triggerEvent = triggerEvent;\n\n this.hoveredArea = null;\n this.hitAreas = [];\n this.isDragging = false;\n this.currentItem = null;\n\n this.dragElement = null;\n this.openFolderTimer = null;\n this.previousGhost = null;\n }\n\n public mouseCapture(positionInfo: PositionInfo): boolean | null {\n const element = positionInfo.target;\n\n if (!this.mustCaptureElement(element)) {\n return null;\n }\n\n if (this.onIsMoveHandle && !this.onIsMoveHandle(element)) {\n return null;\n }\n\n let nodeElement = this.getNodeElement(element);\n\n if (nodeElement && this.onCanMove) {\n if (!this.onCanMove(nodeElement.node)) {\n nodeElement = null;\n }\n }\n\n this.currentItem = nodeElement;\n return this.currentItem != null;\n }\n\n public mouseDrag(positionInfo: PositionInfo): boolean {\n if (!this.currentItem || !this.dragElement) {\n return false;\n }\n\n this.dragElement.move(positionInfo.pageX, positionInfo.pageY);\n\n const area = this.findHoveredArea(positionInfo.pageX, positionInfo.pageY);\n\n if (area && this.canMoveToArea(area, this.currentItem)) {\n if (!area.node.isFolder()) {\n this.stopOpenFolderTimer();\n }\n\n if (this.hoveredArea !== area) {\n this.hoveredArea = area;\n\n // If this is a closed folder, start timer to open it\n if (this.mustOpenFolderTimer(area)) {\n this.startOpenFolderTimer(area.node);\n } else {\n this.stopOpenFolderTimer();\n }\n\n this.updateDropHint();\n }\n } else {\n this.removeDropHint();\n this.stopOpenFolderTimer();\n this.hoveredArea = area;\n }\n\n if (!area) {\n if (this.onDragMove) {\n this.onDragMove(this.currentItem.node, positionInfo.originalEvent);\n }\n }\n\n return true;\n }\n\n public mouseStart(positionInfo: PositionInfo): boolean {\n if (!this.currentItem) {\n return false;\n }\n\n this.refresh();\n\n const { left, top } = getElementPosition(positionInfo.target);\n\n const node = this.currentItem.node;\n\n this.dragElement = new DragElement({\n autoEscape: this.autoEscape ?? true,\n classNames: this.classNames,\n nodeName: node.name,\n offsetX: positionInfo.pageX - left,\n offsetY: positionInfo.pageY - top,\n treeElement: this.treeElement,\n });\n\n this.isDragging = true;\n this.currentItem.element.classList.add(this.classNames.moving);\n\n return true;\n }\n\n public mouseStop(positionInfo: PositionInfo): boolean {\n this.moveItem(positionInfo);\n this.clear();\n this.removeHover();\n this.removeDropHint();\n this.removeHitAreas();\n\n const currentItem = this.currentItem;\n\n if (this.currentItem) {\n this.currentItem.element.classList.remove(this.classNames.moving);\n this.currentItem = null;\n }\n\n this.isDragging = false;\n\n if (!this.hoveredArea && currentItem) {\n if (this.onDragStop) {\n this.onDragStop(currentItem.node, positionInfo.originalEvent);\n }\n }\n\n return false;\n }\n\n public refresh(): void {\n this.removeHitAreas();\n\n if (this.currentItem) {\n const currentNode = this.currentItem.node;\n this.generateHitAreas(currentNode);\n this.currentItem = this.getNodeElementForNode(currentNode);\n\n if (this.isDragging) {\n this.currentItem.element.classList.add(this.classNames.moving);\n }\n }\n }\n\n private canMoveToArea(area: HitArea, currentItem: NodeElement): boolean {\n if (!this.onCanMoveTo) {\n return true;\n }\n\n return this.onCanMoveTo(currentItem.node, area.node, area.position);\n }\n\n private clear(): void {\n if (this.dragElement) {\n this.dragElement.remove();\n this.dragElement = null;\n }\n }\n\n private findHoveredArea(x: number, y: number): HitArea | null {\n const dimensions = this.getTreeDimensions();\n\n if (\n x < dimensions.left ||\n y < dimensions.top ||\n x > dimensions.right ||\n y > dimensions.bottom\n ) {\n return null;\n }\n\n return binarySearch<HitArea>(this.hitAreas, (area) => {\n if (y < area.top) {\n return 1;\n } else if (y > area.bottom) {\n return -1;\n } else {\n return 0;\n }\n });\n }\n\n private generateHitAreas(currentNode: Node): void {\n const tree = this.getTree();\n\n if (!tree) {\n this.hitAreas = [];\n } else {\n this.hitAreas = generateHitAreas(\n tree,\n currentNode,\n this.getTreeDimensions().bottom,\n );\n }\n }\n\n private getTreeDimensions(): Dimensions {\n // Return the dimensions of the tree. Add a margin to the bottom to allow\n // to drag-and-drop after the last element.\n const treePosition = getElementPosition(this.treeElement);\n const left = treePosition.left + this.getScrollLeft();\n const top = treePosition.top;\n\n return {\n bottom: top + this.treeElement.clientHeight + 16,\n left,\n right: left + this.treeElement.clientWidth,\n top,\n };\n }\n\n /* Move the dragged node to the selected position in the tree. */\n private moveItem(positionInfo: PositionInfo): void {\n if (\n this.currentItem &&\n this.hoveredArea?.position &&\n this.canMoveToArea(this.hoveredArea, this.currentItem)\n ) {\n const movedNode = this.currentItem.node;\n const targetNode = this.hoveredArea.node;\n const position = this.hoveredArea.position;\n const previousParent = movedNode.parent;\n\n if (position === \"inside\") {\n this.hoveredArea.node.is_open = true;\n }\n\n const doMove = (): void => {\n const tree = this.getTree();\n\n if (tree) {\n tree.moveNode(movedNode, targetNode, position);\n\n this.treeElement.textContent = \"\";\n this.refreshElements(null);\n }\n };\n\n if (\n this.triggerEvent(\"tree.move\", {\n moveInfo: {\n doMove,\n movedNode,\n originalEvent: positionInfo.originalEvent,\n position,\n previousParent,\n targetNode,\n },\n })\n ) {\n doMove();\n }\n }\n }\n\n private mustCaptureElement(element: HTMLElement): boolean {\n const nodeName = element.nodeName;\n\n return (\n nodeName !== \"INPUT\" && nodeName !== \"SELECT\" && nodeName !== \"TEXTAREA\"\n );\n }\n\n private mustOpenFolderTimer(area: HitArea): boolean {\n const node = area.node;\n\n return node.isFolder() && !node.is_open && area.position === \"inside\";\n }\n\n private removeDropHint(): void {\n if (this.previousGhost) {\n this.previousGhost.remove();\n }\n }\n\n private removeHitAreas(): void {\n this.hitAreas = [];\n }\n\n private removeHover(): void {\n this.hoveredArea = null;\n }\n\n private startOpenFolderTimer(folder: Node): void {\n const openFolder = (): void => {\n void this.openNode(folder, this.slide).then(() => {\n this.refresh();\n this.updateDropHint();\n });\n };\n\n this.stopOpenFolderTimer();\n\n const openFolderDelay = this.openFolderDelay;\n\n if (openFolderDelay !== false) {\n this.openFolderTimer = window.setTimeout(openFolder, openFolderDelay);\n }\n }\n\n private stopOpenFolderTimer(): void {\n if (this.openFolderTimer) {\n clearTimeout(this.openFolderTimer);\n this.openFolderTimer = null;\n }\n }\n\n private updateDropHint(): void {\n if (!this.hoveredArea) {\n return;\n }\n\n // remove previous drop hint\n this.removeDropHint();\n\n // add new drop hint\n const nodeElement = this.getNodeElementForNode(this.hoveredArea.node);\n this.previousGhost = nodeElement.addDropHint(this.hoveredArea.position);\n }\n}\n"],"names":["autoEscape","classNames","getNodeElement","getNodeElementForNode","getScrollLeft","getTree","onCanMove","onCanMoveTo","onDragMove","onDragStop","onIsMoveHandle","openFolderDelay","openNode","refreshElements","slide","treeElement","triggerEvent","hoveredArea","hitAreas","isDragging","currentItem","dragElement","openFolderTimer","previousGhost","mouseCapture","mustCaptureElement","node","mouseDrag","move","findHoveredArea","canMoveToArea","stopOpenFolderTimer","mustOpenFolderTimer","startOpenFolderTimer","updateDropHint","removeDropHint","mouseStart","refresh","element","mouseStop","moveItem","clear","removeHover","removeHitAreas","generateHitAreas","remove","getTreeDimensions","addDropHint"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iterateVisibleNodes.d.ts","sourceRoot":"","sources":["../../src/dragAndDropHandler/iterateVisibleNodes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAEpC,UAAU,OAAO;
|
|
1
|
+
{"version":3,"file":"iterateVisibleNodes.d.ts","sourceRoot":"","sources":["../../src/dragAndDropHandler/iterateVisibleNodes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAEpC,UAAU,OAAO;IACf,qBAAqB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC;IACnE,kBAAkB,EAAE,CAClB,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,IAAI,GAAG,IAAI,EACrB,OAAO,EAAE,WAAW,KACjB,IAAI,CAAC;IACV,eAAe,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACtC,UAAU,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,GAAG,IAAI,EAAE,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IAQ9E,gBAAgB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC;CACjE;AAED,QAAA,MAAM,mBAAmB,GACvB,MAAM,IAAI,EACV,+FAMG,OAAO,SAuDX,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
handleAfterOpenFolder,
|
|
3
|
-
handleClosedFolder,
|
|
4
|
-
handleFirstNode,
|
|
5
|
-
handleNode,
|
|
6
|
-
handleOpenFolder
|
|
1
|
+
let iterateVisibleNodes = (tree, {
|
|
2
|
+
_handleAfterOpenFolder: handleAfterOpenFolder,
|
|
3
|
+
_handleClosedFolder: handleClosedFolder,
|
|
4
|
+
_handleFirstNode: handleFirstNode,
|
|
5
|
+
_handleNode: handleNode,
|
|
6
|
+
_handleOpenFolder: handleOpenFolder
|
|
7
7
|
}) => {
|
|
8
8
|
let isFirstNode = true;
|
|
9
|
-
|
|
9
|
+
let iterate = (node, nextNode) => {
|
|
10
10
|
let mustIterateInside = (node.is_open === true || !node.element) && node.hasChildren();
|
|
11
11
|
let element = null;
|
|
12
12
|
|
|
@@ -28,14 +28,14 @@ const iterateVisibleNodes = (tree, {
|
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
30
|
if (mustIterateInside) {
|
|
31
|
-
|
|
31
|
+
let childrenLength = node.children.length;
|
|
32
32
|
node.children.forEach((_, i) => {
|
|
33
|
-
|
|
33
|
+
let child = node.children[i];
|
|
34
34
|
if (child) {
|
|
35
35
|
if (i === childrenLength - 1) {
|
|
36
36
|
iterate(child, null);
|
|
37
37
|
} else {
|
|
38
|
-
|
|
38
|
+
let nextChild = node.children[i + 1];
|
|
39
39
|
if (nextChild) {
|
|
40
40
|
iterate(child, nextChild);
|
|
41
41
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iterateVisibleNodes.js","sources":["../../src/dragAndDropHandler/iterateVisibleNodes.ts"],"sourcesContent":["import type { Node } from \"../node\";\n\ninterface Options {\n
|
|
1
|
+
{"version":3,"file":"iterateVisibleNodes.js","sources":["../../src/dragAndDropHandler/iterateVisibleNodes.ts"],"sourcesContent":["import type { Node } from \"../node\";\n\ninterface Options {\n handleAfterOpenFolder: (node: Node, nextNode: Node | null) => void;\n handleClosedFolder: (\n node: Node,\n nextNode: Node | null,\n element: HTMLElement,\n ) => void;\n handleFirstNode: (node: Node) => void;\n handleNode: (node: Node, nextNode: Node | null, element: HTMLElement) => void;\n\n /*\n override\n return\n - true: continue iterating\n - false: stop iterating\n */\n handleOpenFolder: (node: Node, element: HTMLElement) => boolean;\n}\n\nconst iterateVisibleNodes = (\n tree: Node,\n {\n handleAfterOpenFolder,\n handleClosedFolder,\n handleFirstNode,\n handleNode,\n handleOpenFolder,\n }: Options,\n) => {\n let isFirstNode = true;\n\n const iterate = (node: Node, nextNode: Node | null): void => {\n let mustIterateInside =\n (node.is_open === true || !node.element) && node.hasChildren();\n\n let element: HTMLElement | null = null;\n\n // Is the element visible?\n if (node.element?.offsetParent) {\n element = node.element;\n\n if (isFirstNode) {\n handleFirstNode(node);\n isFirstNode = false;\n }\n\n if (!node.hasChildren()) {\n handleNode(node, nextNode, node.element);\n } else if (node.is_open) {\n if (!handleOpenFolder(node, node.element)) {\n mustIterateInside = false;\n }\n } else {\n handleClosedFolder(node, nextNode, element);\n }\n }\n\n if (mustIterateInside) {\n const childrenLength = node.children.length;\n node.children.forEach((_, i) => {\n const child = node.children[i];\n\n if (child) {\n if (i === childrenLength - 1) {\n iterate(child, null);\n } else {\n const nextChild = node.children[i + 1];\n\n if (nextChild) {\n iterate(child, nextChild);\n }\n }\n }\n });\n\n if (node.is_open && element) {\n handleAfterOpenFolder(node, nextNode);\n }\n }\n };\n\n iterate(tree, null);\n};\n\nexport default iterateVisibleNodes;\n"],"names":[],"mappings":"AAqBA,IAAM,mBAAmB,GAAG,CAC1B,IAAU,EACV;EACE,sBAAA,EAAA,qBAAqB;EACrB,mBAAA,EAAA,kBAAkB;EAClB,gBAAA,EAAA,eAAe;EACf,WAAA,EAAA,UAAU;AACV,EAAA,iBAAA,EAAA;AACO,CAAC,KACP;EACH,IAAI,WAAW,GAAG,IAAI;AAEtB,EAAA,IAAM,OAAO,GAAG,CAAC,IAAU,EAAE,QAAqB,KAAW;AAC3D,IAAA,IAAI,iBAAiB,GACnB,CAAC,IAAI,CAAC,OAAO,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,WAAW,EAAE;IAEhE,IAAI,OAA2B,GAAG,IAAI;;AAEtC;AACA,IAAA,IAAI,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE;MAC9B,OAAO,GAAG,IAAI,CAAC,OAAO;AAEtB,MAAA,IAAI,WAAW,EAAE;QACf,eAAe,CAAC,IAAI,CAAC;AACrB,QAAA,WAAW,GAAG,KAAK;AACrB,MAAA;AAEA,MAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;QACvB,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC;AAC1C,MAAA,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;QACvB,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE;AACzC,UAAA,iBAAiB,GAAG,KAAK;AAC3B,QAAA;AACF,MAAA,CAAC,MAAM;AACL,QAAA,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC;AAC7C,MAAA;AACF,IAAA;AAEA,IAAA,IAAI,iBAAiB,EAAE;AACrB,MAAA,IAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM;MAC3C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;AAC9B,QAAA,IAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAE9B,QAAA,IAAI,KAAK,EAAE;AACT,UAAA,IAAI,CAAC,KAAK,cAAc,GAAG,CAAC,EAAE;AAC5B,YAAA,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;AACtB,UAAA,CAAC,MAAM;YACL,IAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;AAEtC,YAAA,IAAI,SAAS,EAAE;AACb,cAAA,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC;AAC3B,YAAA;AACF,UAAA;AACF,QAAA;AACF,MAAA,CAAC,CAAC;AAEF,MAAA,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,EAAE;AAC3B,QAAA,qBAAqB,CAAC,IAAI,EAAE,QAAQ,CAAC;AACvC,MAAA;AACF,IAAA;EACF,CAAC;AAED,EAAA,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;AACrB;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/dragAndDropHandler/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE9C,MAAM,WAAW,QAAQ;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/dragAndDropHandler/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE9C,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,QAAQ,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;CACb"}
|
|
@@ -19,35 +19,44 @@ interface ElementsRendererParams {
|
|
|
19
19
|
tabIndex?: number;
|
|
20
20
|
}
|
|
21
21
|
export default class ElementsRenderer {
|
|
22
|
-
closedIconElement?:
|
|
23
|
-
openedIconElement?:
|
|
22
|
+
closedIconElement?: globalThis.Node;
|
|
23
|
+
openedIconElement?: globalThis.Node;
|
|
24
24
|
private autoEscape;
|
|
25
25
|
private buttonLeft;
|
|
26
26
|
private classNames;
|
|
27
|
+
private closedFolderTemplate;
|
|
27
28
|
private dragAndDrop;
|
|
28
29
|
private getTree;
|
|
30
|
+
private groupUlTemplate;
|
|
29
31
|
private htmlElement;
|
|
30
32
|
private isNodeSelected;
|
|
33
|
+
private nodeTemplate;
|
|
31
34
|
private onCreateLi?;
|
|
35
|
+
private openedFolderTemplate;
|
|
36
|
+
private rootUlTemplate;
|
|
32
37
|
private rtl?;
|
|
33
38
|
private setNodeElement;
|
|
34
39
|
private showEmptyFolder;
|
|
35
40
|
private tabIndex?;
|
|
36
41
|
constructor({ autoEscape, buttonLeft, classNames, closedIcon, dragAndDrop, getTree, htmlElement, isNodeSelected, onCreateLi, openedIcon, rtl, setNodeElement, showEmptyFolder, tabIndex, }: ElementsRendererParams);
|
|
37
42
|
render(fromNode: Node | null): void;
|
|
43
|
+
renderChildren(node: Node): HTMLUListElement | null;
|
|
38
44
|
renderFromNode(node: Node): void;
|
|
39
45
|
renderFromRoot(): void;
|
|
40
46
|
private attachNodeData;
|
|
41
47
|
private createButtonElement;
|
|
42
48
|
private createDomElements;
|
|
43
49
|
private createFolderLi;
|
|
50
|
+
private createFolderTemplate;
|
|
44
51
|
private createLi;
|
|
52
|
+
private createLiTemplate;
|
|
45
53
|
private createNodeLi;
|
|
46
|
-
private
|
|
47
|
-
private
|
|
54
|
+
private createNodeTemplate;
|
|
55
|
+
private createTitleSpanTemplate;
|
|
56
|
+
private createUlTemplate;
|
|
57
|
+
private fillTitleSpan;
|
|
48
58
|
private getButtonClasses;
|
|
49
|
-
private
|
|
50
|
-
private setTreeItemAriaAttributes;
|
|
59
|
+
private mustRenderChildren;
|
|
51
60
|
}
|
|
52
61
|
export {};
|
|
53
62
|
//# sourceMappingURL=elementsRenderer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"elementsRenderer.d.ts","sourceRoot":"","sources":["../src/elementsRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAIzD,UAAU,sBAAsB;
|
|
1
|
+
{"version":3,"file":"elementsRenderer.d.ts","sourceRoot":"","sources":["../src/elementsRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAIzD,UAAU,sBAAsB;IAC9B,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,WAAW,CAAC;IACzB,cAAc,EAAE,cAAc,CAAC;IAC/B,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,cAAc,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAC3D,eAAe,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAaD,MAAM,CAAC,OAAO,OAAO,gBAAgB;IAC5B,iBAAiB,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC;IACpC,iBAAiB,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC;IAC3C,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,oBAAoB,CAAgB;IAC5C,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,eAAe,CAAmB;IAC1C,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,UAAU,CAAC,CAAa;IAChC,OAAO,CAAC,oBAAoB,CAAgB;IAC5C,OAAO,CAAC,cAAc,CAAmB;IACzC,OAAO,CAAC,GAAG,CAAC,CAAU;IACtB,OAAO,CAAC,cAAc,CAA6C;IACnE,OAAO,CAAC,eAAe,CAAU;IACjC,OAAO,CAAC,QAAQ,CAAC,CAAS;gBAEd,EACV,UAAU,EACV,UAAU,EACV,UAAU,EACV,UAAU,EACV,WAAW,EACX,OAAO,EACP,WAAW,EACX,cAAc,EACd,UAAU,EACV,UAAU,EACV,GAAG,EACH,cAAc,EACd,eAAe,EACf,QAAQ,GACT,EAAE,sBAAsB;IAuBlB,MAAM,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI;IAWnC,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,gBAAgB,GAAG,IAAI;IAanD,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAchC,cAAc,IAAI,IAAI;IAU7B,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,iBAAiB;IAsBzB,OAAO,CAAC,cAAc;IAkCtB,OAAO,CAAC,oBAAoB;IA0C5B,OAAO,CAAC,QAAQ;IAoBhB,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,YAAY;IAqBpB,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,uBAAuB;IAkB/B,OAAO,CAAC,gBAAgB;IA6BxB,OAAO,CAAC,aAAa;IA0BrB,OAAO,CAAC,gBAAgB;IAiBxB,OAAO,CAAC,kBAAkB;CAG3B"}
|