tree-element 0.1.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/LICENSE +201 -0
- package/README.md +221 -0
- package/lib/animation.d.ts +5 -0
- package/lib/animation.d.ts.map +1 -0
- package/lib/animation.js +39 -0
- package/lib/animation.js.map +1 -0
- package/lib/classNames.d.ts +34 -0
- package/lib/classNames.d.ts.map +1 -0
- package/lib/classNames.js +39 -0
- package/lib/classNames.js.map +1 -0
- package/lib/dataLoader.d.ts +25 -0
- package/lib/dataLoader.d.ts.map +1 -0
- package/lib/dataLoader.js +69 -0
- package/lib/dataLoader.js.map +1 -0
- package/lib/dragAndDropHandler/binarySearch.d.ts +3 -0
- package/lib/dragAndDropHandler/binarySearch.d.ts.map +1 -0
- package/lib/dragAndDropHandler/binarySearch.js +23 -0
- package/lib/dragAndDropHandler/binarySearch.js.map +1 -0
- package/lib/dragAndDropHandler/dragElement.d.ts +20 -0
- package/lib/dragAndDropHandler/dragElement.d.ts.map +1 -0
- package/lib/dragAndDropHandler/dragElement.js +39 -0
- package/lib/dragAndDropHandler/dragElement.js.map +1 -0
- package/lib/dragAndDropHandler/generateHitAreas.d.ts +13 -0
- package/lib/dragAndDropHandler/generateHitAreas.d.ts.map +1 -0
- package/lib/dragAndDropHandler/generateHitAreas.js +130 -0
- package/lib/dragAndDropHandler/generateHitAreas.js.map +1 -0
- package/lib/dragAndDropHandler/index.d.ts +76 -0
- package/lib/dragAndDropHandler/index.d.ts.map +1 -0
- package/lib/dragAndDropHandler/index.js +311 -0
- package/lib/dragAndDropHandler/index.js.map +1 -0
- package/lib/dragAndDropHandler/iterateVisibleNodes.d.ts +11 -0
- package/lib/dragAndDropHandler/iterateVisibleNodes.d.ts.map +1 -0
- package/lib/dragAndDropHandler/iterateVisibleNodes.js +54 -0
- package/lib/dragAndDropHandler/iterateVisibleNodes.js.map +1 -0
- package/lib/dragAndDropHandler/types.d.ts +11 -0
- package/lib/dragAndDropHandler/types.d.ts.map +1 -0
- package/lib/elementsRenderer.d.ts +53 -0
- package/lib/elementsRenderer.d.ts.map +1 -0
- package/lib/elementsRenderer.js +251 -0
- package/lib/elementsRenderer.js.map +1 -0
- package/lib/events.d.ts +224 -0
- package/lib/events.d.ts.map +1 -0
- package/lib/index.d.ts +367 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +1098 -0
- package/lib/index.js.map +1 -0
- package/lib/keyHandler.d.ts +29 -0
- package/lib/keyHandler.d.ts.map +1 -0
- package/lib/keyHandler.js +107 -0
- package/lib/keyHandler.js.map +1 -0
- package/lib/methodTypes.d.ts +21 -0
- package/lib/methodTypes.d.ts.map +1 -0
- package/lib/mouseHandler.d.ts +60 -0
- package/lib/mouseHandler.d.ts.map +1 -0
- package/lib/mouseHandler.js +283 -0
- package/lib/mouseHandler.js.map +1 -0
- package/lib/mouseUtils.d.ts +9 -0
- package/lib/mouseUtils.d.ts.map +1 -0
- package/lib/mouseUtils.js +15 -0
- package/lib/mouseUtils.js.map +1 -0
- package/lib/node.d.ts +320 -0
- package/lib/node.d.ts.map +1 -0
- package/lib/node.js +737 -0
- package/lib/node.js.map +1 -0
- package/lib/nodeElement/borderDropHint.d.ts +9 -0
- package/lib/nodeElement/borderDropHint.d.ts.map +1 -0
- package/lib/nodeElement/borderDropHint.js +24 -0
- package/lib/nodeElement/borderDropHint.js.map +1 -0
- package/lib/nodeElement/folderElement.d.ts +22 -0
- package/lib/nodeElement/folderElement.d.ts.map +1 -0
- package/lib/nodeElement/folderElement.js +100 -0
- package/lib/nodeElement/folderElement.js.map +1 -0
- package/lib/nodeElement/ghostDropHint.d.ts +18 -0
- package/lib/nodeElement/ghostDropHint.d.ts.map +1 -0
- package/lib/nodeElement/ghostDropHint.js +67 -0
- package/lib/nodeElement/ghostDropHint.js.map +1 -0
- package/lib/nodeElement/index.d.ts +28 -0
- package/lib/nodeElement/index.d.ts.map +1 -0
- package/lib/nodeElement/index.js +66 -0
- package/lib/nodeElement/index.js.map +1 -0
- package/lib/nodeUtils.d.ts +7 -0
- package/lib/nodeUtils.d.ts.map +1 -0
- package/lib/nodeUtils.js +4 -0
- package/lib/nodeUtils.js.map +1 -0
- package/lib/options.d.ts +310 -0
- package/lib/options.d.ts.map +1 -0
- package/lib/package.json +3 -0
- package/lib/positionUtils.d.ts +8 -0
- package/lib/positionUtils.d.ts.map +1 -0
- package/lib/positionUtils.js +14 -0
- package/lib/positionUtils.js.map +1 -0
- package/lib/requestUrl.d.ts +9 -0
- package/lib/requestUrl.d.ts.map +1 -0
- package/lib/requestUrl.js +37 -0
- package/lib/requestUrl.js.map +1 -0
- package/lib/saveStateHandler.d.ts +46 -0
- package/lib/saveStateHandler.d.ts.map +1 -0
- package/lib/saveStateHandler.js +204 -0
- package/lib/saveStateHandler.js.map +1 -0
- package/lib/scrollHandler/containerScrollParent.d.ts +12 -0
- package/lib/scrollHandler/containerScrollParent.d.ts.map +1 -0
- package/lib/scrollHandler/containerScrollParent.js +49 -0
- package/lib/scrollHandler/containerScrollParent.js.map +1 -0
- package/lib/scrollHandler/createScrollParent.d.ts +4 -0
- package/lib/scrollHandler/createScrollParent.d.ts.map +1 -0
- package/lib/scrollHandler/createScrollParent.js +38 -0
- package/lib/scrollHandler/createScrollParent.js.map +1 -0
- package/lib/scrollHandler/documentScrollParent.d.ts +22 -0
- package/lib/scrollHandler/documentScrollParent.d.ts.map +1 -0
- package/lib/scrollHandler/documentScrollParent.js +71 -0
- package/lib/scrollHandler/documentScrollParent.js.map +1 -0
- package/lib/scrollHandler/scrollParent.d.ts +26 -0
- package/lib/scrollHandler/scrollParent.d.ts.map +1 -0
- package/lib/scrollHandler/scrollParent.js +79 -0
- package/lib/scrollHandler/scrollParent.js.map +1 -0
- package/lib/scrollHandler.d.ts +20 -0
- package/lib/scrollHandler.d.ts.map +1 -0
- package/lib/scrollHandler.js +41 -0
- package/lib/scrollHandler.js.map +1 -0
- package/lib/selectNodeHandler.d.ts +38 -0
- package/lib/selectNodeHandler.d.ts.map +1 -0
- package/lib/selectNodeHandler.js +166 -0
- package/lib/selectNodeHandler.js.map +1 -0
- package/lib/setDefaultOptions.d.ts +4 -0
- package/lib/setDefaultOptions.d.ts.map +1 -0
- package/lib/setDefaultOptions.js +86 -0
- package/lib/setDefaultOptions.js.map +1 -0
- package/lib/triggerCustomEvent.d.ts +3 -0
- package/lib/triggerCustomEvent.d.ts.map +1 -0
- package/lib/triggerCustomEvent.js +13 -0
- package/lib/triggerCustomEvent.js.map +1 -0
- package/lib/util.d.ts +3 -0
- package/lib/util.d.ts.map +1 -0
- package/lib/util.js +5 -0
- package/lib/util.js.map +1 -0
- package/lib/version.d.ts +3 -0
- package/lib/version.d.ts.map +1 -0
- package/lib/version.js +5 -0
- package/lib/version.js.map +1 -0
- package/package.json +110 -0
- package/src/animation.ts +48 -0
- package/src/classNames.ts +70 -0
- package/src/dataLoader.ts +92 -0
- package/src/dragAndDropHandler/binarySearch.ts +27 -0
- package/src/dragAndDropHandler/dragElement.ts +62 -0
- package/src/dragAndDropHandler/generateHitAreas.ts +195 -0
- package/src/dragAndDropHandler/index.ts +442 -0
- package/src/dragAndDropHandler/iterateVisibleNodes.ts +91 -0
- package/src/dragAndDropHandler/types.ts +12 -0
- package/src/elementsRenderer.ts +367 -0
- package/src/events.ts +237 -0
- package/src/header.txt +16 -0
- package/src/index.ts +1290 -0
- package/src/keyHandler.ts +139 -0
- package/src/methodTypes.ts +44 -0
- package/src/mouseHandler.ts +391 -0
- package/src/mouseUtils.ts +23 -0
- package/src/node.ts +831 -0
- package/src/nodeElement/borderDropHint.ts +37 -0
- package/src/nodeElement/folderElement.ts +140 -0
- package/src/nodeElement/ghostDropHint.ts +84 -0
- package/src/nodeElement/index.ts +103 -0
- package/src/nodeUtils.ts +12 -0
- package/src/options.ts +325 -0
- package/src/positionUtils.ts +18 -0
- package/src/requestUrl.ts +41 -0
- package/src/saveStateHandler.ts +279 -0
- package/src/scrollHandler/containerScrollParent.ts +71 -0
- package/src/scrollHandler/createScrollParent.ts +51 -0
- package/src/scrollHandler/documentScrollParent.ts +104 -0
- package/src/scrollHandler/scrollParent.ts +117 -0
- package/src/scrollHandler.ts +55 -0
- package/src/selectNodeHandler.ts +192 -0
- package/src/setDefaultOptions.ts +79 -0
- package/src/triggerCustomEvent.ts +14 -0
- package/src/util.ts +5 -0
- package/src/version.ts +4 -0
- package/tree_element.css +195 -0
- package/tree_element.debug.js +4153 -0
- package/tree_element.debug.js.map +1 -0
- package/tree_element.js +21 -0
- package/tree_element.js.map +1 -0
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
import { getElementPosition } from '../positionUtils.js';
|
|
2
|
+
import binarySearch from './binarySearch.js';
|
|
3
|
+
import DragElement from './dragElement.js';
|
|
4
|
+
import generateHitAreas from './generateHitAreas.js';
|
|
5
|
+
|
|
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
|
+
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
|
|
49
|
+
}) {
|
|
50
|
+
this._autoEscape = autoEscape;
|
|
51
|
+
this._classNames = classNames;
|
|
52
|
+
this._getNodeElement = getNodeElement;
|
|
53
|
+
this._getNodeElementForNode = getNodeElementForNode;
|
|
54
|
+
this._getScrollLeft = getScrollLeft;
|
|
55
|
+
this._getTree = getTree;
|
|
56
|
+
this._onCanMove = onCanMove;
|
|
57
|
+
this._onCanMoveTo = onCanMoveTo;
|
|
58
|
+
this._onDragMove = onDragMove;
|
|
59
|
+
this._onDragStop = onDragStop;
|
|
60
|
+
this._onIsMoveHandle = onIsMoveHandle;
|
|
61
|
+
this._openFolderDelay = openFolderDelay;
|
|
62
|
+
this._openNode = openNode;
|
|
63
|
+
this._refreshElements = refreshElements;
|
|
64
|
+
this._slide = slide;
|
|
65
|
+
this._treeElement = treeElement;
|
|
66
|
+
this._triggerEvent = triggerEvent;
|
|
67
|
+
this.hoveredArea = null;
|
|
68
|
+
this.hitAreas = [];
|
|
69
|
+
this.isDragging = false;
|
|
70
|
+
this.currentItem = null;
|
|
71
|
+
this._dragElement = null;
|
|
72
|
+
this._openFolderTimer = null;
|
|
73
|
+
this._previousGhost = null;
|
|
74
|
+
}
|
|
75
|
+
mouseCapture(positionInfo) {
|
|
76
|
+
const element = positionInfo.target;
|
|
77
|
+
if (!this._mustCaptureElement(element)) {
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
if (this._onIsMoveHandle && !this._onIsMoveHandle(element)) {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
let nodeElement = this._getNodeElement(element);
|
|
84
|
+
if (nodeElement && this._onCanMove) {
|
|
85
|
+
if (!this._onCanMove(nodeElement.node)) {
|
|
86
|
+
nodeElement = null;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
this.currentItem = nodeElement;
|
|
90
|
+
return this.currentItem != null;
|
|
91
|
+
}
|
|
92
|
+
mouseDrag(positionInfo) {
|
|
93
|
+
if (!this.currentItem || !this._dragElement) {
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
this._dragElement.move(positionInfo.pageX, positionInfo.pageY);
|
|
97
|
+
const area = this._findHoveredArea(positionInfo.pageX, positionInfo.pageY);
|
|
98
|
+
if (area && this._canMoveToArea(area, this.currentItem)) {
|
|
99
|
+
if (!area.node.isFolder()) {
|
|
100
|
+
this._stopOpenFolderTimer();
|
|
101
|
+
}
|
|
102
|
+
if (this.hoveredArea !== area) {
|
|
103
|
+
this.hoveredArea = area;
|
|
104
|
+
|
|
105
|
+
// If this is a closed folder, start timer to open it
|
|
106
|
+
if (this._mustOpenFolderTimer(area)) {
|
|
107
|
+
this._startOpenFolderTimer(area.node);
|
|
108
|
+
} else {
|
|
109
|
+
this._stopOpenFolderTimer();
|
|
110
|
+
}
|
|
111
|
+
this._updateDropHint();
|
|
112
|
+
}
|
|
113
|
+
} else {
|
|
114
|
+
this._removeDropHint();
|
|
115
|
+
this._stopOpenFolderTimer();
|
|
116
|
+
this.hoveredArea = area;
|
|
117
|
+
}
|
|
118
|
+
if (!area) {
|
|
119
|
+
if (this._onDragMove) {
|
|
120
|
+
this._onDragMove(this.currentItem.node, positionInfo.originalEvent);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
125
|
+
mouseStart(positionInfo) {
|
|
126
|
+
if (!this.currentItem) {
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
this.refresh();
|
|
130
|
+
const {
|
|
131
|
+
left,
|
|
132
|
+
top
|
|
133
|
+
} = getElementPosition(positionInfo.target);
|
|
134
|
+
const node = this.currentItem.node;
|
|
135
|
+
this._dragElement = new DragElement({
|
|
136
|
+
autoEscape: this._autoEscape ?? true,
|
|
137
|
+
classNames: this._classNames,
|
|
138
|
+
nodeName: node.name,
|
|
139
|
+
offsetX: positionInfo.pageX - left,
|
|
140
|
+
offsetY: positionInfo.pageY - top,
|
|
141
|
+
treeElement: this._treeElement
|
|
142
|
+
});
|
|
143
|
+
this.isDragging = true;
|
|
144
|
+
this.currentItem.element.classList.add(this._classNames.moving);
|
|
145
|
+
return true;
|
|
146
|
+
}
|
|
147
|
+
mouseStop(positionInfo) {
|
|
148
|
+
this._moveItem(positionInfo);
|
|
149
|
+
this._clear();
|
|
150
|
+
this._removeHover();
|
|
151
|
+
this._removeDropHint();
|
|
152
|
+
this._removeHitAreas();
|
|
153
|
+
const currentItem = this.currentItem;
|
|
154
|
+
if (this.currentItem) {
|
|
155
|
+
this.currentItem.element.classList.remove(this._classNames.moving);
|
|
156
|
+
this.currentItem = null;
|
|
157
|
+
}
|
|
158
|
+
this.isDragging = false;
|
|
159
|
+
if (!this.hoveredArea && currentItem) {
|
|
160
|
+
if (this._onDragStop) {
|
|
161
|
+
this._onDragStop(currentItem.node, positionInfo.originalEvent);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
refresh() {
|
|
167
|
+
this._removeHitAreas();
|
|
168
|
+
if (this.currentItem) {
|
|
169
|
+
const currentNode = this.currentItem.node;
|
|
170
|
+
this._generateHitAreas(currentNode);
|
|
171
|
+
this.currentItem = this._getNodeElementForNode(currentNode);
|
|
172
|
+
if (this.isDragging) {
|
|
173
|
+
this.currentItem.element.classList.add(this._classNames.moving);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
_canMoveToArea(area, currentItem) {
|
|
178
|
+
if (!this._onCanMoveTo) {
|
|
179
|
+
return true;
|
|
180
|
+
}
|
|
181
|
+
return this._onCanMoveTo(currentItem.node, area.node, area.position);
|
|
182
|
+
}
|
|
183
|
+
_clear() {
|
|
184
|
+
if (this._dragElement) {
|
|
185
|
+
this._dragElement.remove();
|
|
186
|
+
this._dragElement = null;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
_findHoveredArea(x, y) {
|
|
190
|
+
const dimensions = this._getTreeDimensions();
|
|
191
|
+
if (x < dimensions.left || y < dimensions.top || x > dimensions.right || y > dimensions.bottom) {
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
194
|
+
return binarySearch(this.hitAreas, area => {
|
|
195
|
+
if (y < area.top) {
|
|
196
|
+
return 1;
|
|
197
|
+
} else if (y > area.bottom) {
|
|
198
|
+
return -1;
|
|
199
|
+
} else {
|
|
200
|
+
return 0;
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
_generateHitAreas(currentNode) {
|
|
205
|
+
const tree = this._getTree();
|
|
206
|
+
if (!tree) {
|
|
207
|
+
this.hitAreas = [];
|
|
208
|
+
} else {
|
|
209
|
+
this.hitAreas = generateHitAreas(tree, currentNode, this._getTreeDimensions().bottom);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
_getTreeDimensions() {
|
|
213
|
+
// Return the dimensions of the tree. Add a margin to the bottom to allow
|
|
214
|
+
// to drag-and-drop after the last element.
|
|
215
|
+
const treePosition = getElementPosition(this._treeElement);
|
|
216
|
+
const left = treePosition.left + this._getScrollLeft();
|
|
217
|
+
const top = treePosition.top;
|
|
218
|
+
return {
|
|
219
|
+
bottom: top + this._treeElement.clientHeight + 16,
|
|
220
|
+
left,
|
|
221
|
+
right: left + this._treeElement.clientWidth,
|
|
222
|
+
top
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/* Move the dragged node to the selected position in the tree. */
|
|
227
|
+
_moveItem(positionInfo) {
|
|
228
|
+
if (this.currentItem && this.hoveredArea?.position && this._canMoveToArea(this.hoveredArea, this.currentItem)) {
|
|
229
|
+
const movedNode = this.currentItem.node;
|
|
230
|
+
const targetNode = this.hoveredArea.node;
|
|
231
|
+
const position = this.hoveredArea.position;
|
|
232
|
+
const previousParent = movedNode.parent;
|
|
233
|
+
if (position === "inside") {
|
|
234
|
+
this.hoveredArea.node.is_open = true;
|
|
235
|
+
}
|
|
236
|
+
const doMove = () => {
|
|
237
|
+
const tree = this._getTree();
|
|
238
|
+
if (tree) {
|
|
239
|
+
tree.moveNode(movedNode, targetNode, position);
|
|
240
|
+
this._treeElement.textContent = "";
|
|
241
|
+
this._refreshElements(null);
|
|
242
|
+
}
|
|
243
|
+
};
|
|
244
|
+
if (this._triggerEvent("tree.move", {
|
|
245
|
+
moveInfo: {
|
|
246
|
+
doMove,
|
|
247
|
+
movedNode,
|
|
248
|
+
originalEvent: positionInfo.originalEvent,
|
|
249
|
+
position,
|
|
250
|
+
previousParent,
|
|
251
|
+
targetNode
|
|
252
|
+
}
|
|
253
|
+
})) {
|
|
254
|
+
doMove();
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
_mustCaptureElement(element) {
|
|
259
|
+
const nodeName = element.nodeName;
|
|
260
|
+
return nodeName !== "INPUT" && nodeName !== "SELECT" && nodeName !== "TEXTAREA";
|
|
261
|
+
}
|
|
262
|
+
_mustOpenFolderTimer(area) {
|
|
263
|
+
const node = area.node;
|
|
264
|
+
return node.isFolder() && !node.is_open && area.position === "inside";
|
|
265
|
+
}
|
|
266
|
+
_removeDropHint() {
|
|
267
|
+
if (this._previousGhost) {
|
|
268
|
+
this._previousGhost.remove();
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
_removeHitAreas() {
|
|
272
|
+
this.hitAreas = [];
|
|
273
|
+
}
|
|
274
|
+
_removeHover() {
|
|
275
|
+
this.hoveredArea = null;
|
|
276
|
+
}
|
|
277
|
+
_startOpenFolderTimer(folder) {
|
|
278
|
+
const openFolder = () => {
|
|
279
|
+
void this._openNode(folder, this._slide).then(() => {
|
|
280
|
+
this.refresh();
|
|
281
|
+
this._updateDropHint();
|
|
282
|
+
});
|
|
283
|
+
};
|
|
284
|
+
this._stopOpenFolderTimer();
|
|
285
|
+
const openFolderDelay = this._openFolderDelay;
|
|
286
|
+
if (openFolderDelay !== false) {
|
|
287
|
+
this._openFolderTimer = window.setTimeout(openFolder, openFolderDelay);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
_stopOpenFolderTimer() {
|
|
291
|
+
if (this._openFolderTimer) {
|
|
292
|
+
clearTimeout(this._openFolderTimer);
|
|
293
|
+
this._openFolderTimer = null;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
_updateDropHint() {
|
|
297
|
+
if (!this.hoveredArea) {
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
// remove previous drop hint
|
|
302
|
+
this._removeDropHint();
|
|
303
|
+
|
|
304
|
+
// add new drop hint
|
|
305
|
+
const nodeElement = this._getNodeElementForNode(this.hoveredArea.node);
|
|
306
|
+
this._previousGhost = nodeElement.addDropHint(this.hoveredArea.position);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
export { DragAndDropHandler };
|
|
311
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +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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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Node } from "../node.js";
|
|
2
|
+
interface Options {
|
|
3
|
+
handleAfterOpenFolder: (node: Node, nextNode: Node | null) => void;
|
|
4
|
+
handleClosedFolder: (node: Node, nextNode: Node | null, element: HTMLElement) => void;
|
|
5
|
+
handleFirstNode: (node: Node) => void;
|
|
6
|
+
handleNode: (node: Node, nextNode: Node | null, element: HTMLElement) => void;
|
|
7
|
+
handleOpenFolder: (node: Node, element: HTMLElement) => boolean;
|
|
8
|
+
}
|
|
9
|
+
declare const iterateVisibleNodes: (tree: Node, { handleAfterOpenFolder, handleClosedFolder, handleFirstNode, handleNode, handleOpenFolder, }: Options) => void;
|
|
10
|
+
export default iterateVisibleNodes;
|
|
11
|
+
//# sourceMappingURL=iterateVisibleNodes.d.ts.map
|
|
@@ -0,0 +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;IACb,qBAAqB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC;IACnE,kBAAkB,EAAE,CAChB,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,IAAI,GAAG,IAAI,EACrB,OAAO,EAAE,WAAW,KACnB,IAAI,CAAC;IACV,eAAe,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACtC,UAAU,EAAE,CACR,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,IAAI,GAAG,IAAI,EACrB,OAAO,EAAE,WAAW,KACnB,IAAI,CAAC;IAQV,gBAAgB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC;CACnE;AAED,QAAA,MAAM,mBAAmB,GACrB,MAAM,IAAI,EACV,+FAMG,OAAO,SAuDb,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
const iterateVisibleNodes = (tree, {
|
|
2
|
+
handleAfterOpenFolder,
|
|
3
|
+
handleClosedFolder,
|
|
4
|
+
handleFirstNode,
|
|
5
|
+
handleNode,
|
|
6
|
+
handleOpenFolder
|
|
7
|
+
}) => {
|
|
8
|
+
let isFirstNode = true;
|
|
9
|
+
const iterate = (node, nextNode) => {
|
|
10
|
+
let mustIterateInside = (node.is_open === true || !node.element) && node.hasChildren();
|
|
11
|
+
let element = null;
|
|
12
|
+
|
|
13
|
+
// Is the element visible?
|
|
14
|
+
if (node.element?.offsetParent) {
|
|
15
|
+
element = node.element;
|
|
16
|
+
if (isFirstNode) {
|
|
17
|
+
handleFirstNode(node);
|
|
18
|
+
isFirstNode = false;
|
|
19
|
+
}
|
|
20
|
+
if (!node.hasChildren()) {
|
|
21
|
+
handleNode(node, nextNode, node.element);
|
|
22
|
+
} else if (node.is_open) {
|
|
23
|
+
if (!handleOpenFolder(node, node.element)) {
|
|
24
|
+
mustIterateInside = false;
|
|
25
|
+
}
|
|
26
|
+
} else {
|
|
27
|
+
handleClosedFolder(node, nextNode, element);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
if (mustIterateInside) {
|
|
31
|
+
const childrenLength = node.children.length;
|
|
32
|
+
node.children.forEach((_, i) => {
|
|
33
|
+
const child = node.children[i];
|
|
34
|
+
if (child) {
|
|
35
|
+
if (i === childrenLength - 1) {
|
|
36
|
+
iterate(child, null);
|
|
37
|
+
} else {
|
|
38
|
+
const nextChild = node.children[i + 1];
|
|
39
|
+
if (nextChild) {
|
|
40
|
+
iterate(child, nextChild);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
if (node.is_open && element) {
|
|
46
|
+
handleAfterOpenFolder(node, nextNode);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
iterate(tree, null);
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
export { iterateVisibleNodes as default };
|
|
54
|
+
//# sourceMappingURL=iterateVisibleNodes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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: (\n node: Node,\n nextNode: Node | null,\n element: HTMLElement,\n ) => 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":"AAyBA,MAAM,mBAAmB,GAAG,CACxB,IAAU,EACV;EACI,qBAAqB;EACrB,kBAAkB;EAClB,eAAe;EACf,UAAU;AACV,EAAA;AACK,CAAC,KACT;EACD,IAAI,WAAW,GAAG,IAAI;AAEtB,EAAA,MAAM,OAAO,GAAG,CAAC,IAAU,EAAE,QAAqB,KAAW;AACzD,IAAA,IAAI,iBAAiB,GACjB,CAAC,IAAI,CAAC,OAAO,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,WAAW,EAAE;IAElE,IAAI,OAA2B,GAAG,IAAI;;AAEtC;AACA,IAAA,IAAI,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE;MAC5B,OAAO,GAAG,IAAI,CAAC,OAAO;AAEtB,MAAA,IAAI,WAAW,EAAE;QACb,eAAe,CAAC,IAAI,CAAC;AACrB,QAAA,WAAW,GAAG,KAAK;AACvB,MAAA;AAEA,MAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;QACrB,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC;AAC5C,MAAA,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;QACrB,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE;AACvC,UAAA,iBAAiB,GAAG,KAAK;AAC7B,QAAA;AACJ,MAAA,CAAC,MAAM;AACH,QAAA,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC;AAC/C,MAAA;AACJ,IAAA;AAEA,IAAA,IAAI,iBAAiB,EAAE;AACnB,MAAA,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM;MAC3C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;AAC5B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAE9B,QAAA,IAAI,KAAK,EAAE;AACP,UAAA,IAAI,CAAC,KAAK,cAAc,GAAG,CAAC,EAAE;AAC1B,YAAA,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;AACxB,UAAA,CAAC,MAAM;YACH,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;AAEtC,YAAA,IAAI,SAAS,EAAE;AACX,cAAA,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC;AAC7B,YAAA;AACJ,UAAA;AACJ,QAAA;AACJ,MAAA,CAAC,CAAC;AAEF,MAAA,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,EAAE;AACzB,QAAA,qBAAqB,CAAC,IAAI,EAAE,QAAQ,CAAC;AACzC,MAAA;AACJ,IAAA;EACJ,CAAC;AAED,EAAA,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;AACvB;;"}
|
|
@@ -0,0 +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;IACrB,MAAM,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,OAAO;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,QAAQ,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;CACf"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { ClassNames } from "./classNames.js";
|
|
2
|
+
import type { GetTree, IsNodeSelected } from "./methodTypes.js";
|
|
3
|
+
import type { Node } from "./node.js";
|
|
4
|
+
import type { IconElement, OnCreateLi } from "./options.js";
|
|
5
|
+
interface ElementsRendererParams {
|
|
6
|
+
autoEscape: boolean;
|
|
7
|
+
buttonLeft: boolean;
|
|
8
|
+
classNames: ClassNames;
|
|
9
|
+
closedIcon?: IconElement;
|
|
10
|
+
dragAndDrop: boolean;
|
|
11
|
+
getTree: GetTree;
|
|
12
|
+
htmlElement: HTMLElement;
|
|
13
|
+
isNodeSelected: IsNodeSelected;
|
|
14
|
+
onCreateLi?: OnCreateLi;
|
|
15
|
+
openedIcon?: IconElement;
|
|
16
|
+
rtl?: boolean;
|
|
17
|
+
setNodeElement: (element: HTMLElement, node: Node) => void;
|
|
18
|
+
showEmptyFolder: boolean;
|
|
19
|
+
tabIndex?: number;
|
|
20
|
+
}
|
|
21
|
+
export default class ElementsRenderer {
|
|
22
|
+
closedIconElement?: HTMLElement | Text;
|
|
23
|
+
openedIconElement?: HTMLElement | Text;
|
|
24
|
+
private autoEscape;
|
|
25
|
+
private buttonLeft;
|
|
26
|
+
private classNames;
|
|
27
|
+
private dragAndDrop;
|
|
28
|
+
private getTree;
|
|
29
|
+
private htmlElement;
|
|
30
|
+
private isNodeSelected;
|
|
31
|
+
private onCreateLi?;
|
|
32
|
+
private rtl?;
|
|
33
|
+
private setNodeElement;
|
|
34
|
+
private showEmptyFolder;
|
|
35
|
+
private tabIndex?;
|
|
36
|
+
constructor({ autoEscape, buttonLeft, classNames, closedIcon, dragAndDrop, getTree, htmlElement, isNodeSelected, onCreateLi, openedIcon, rtl, setNodeElement, showEmptyFolder, tabIndex, }: ElementsRendererParams);
|
|
37
|
+
render(fromNode: Node | null): void;
|
|
38
|
+
renderFromNode(node: Node): void;
|
|
39
|
+
renderFromRoot(): void;
|
|
40
|
+
private attachNodeData;
|
|
41
|
+
private createButtonElement;
|
|
42
|
+
private createDomElements;
|
|
43
|
+
private createFolderLi;
|
|
44
|
+
private createLi;
|
|
45
|
+
private createNodeLi;
|
|
46
|
+
private createTitleSpan;
|
|
47
|
+
private createUl;
|
|
48
|
+
private getButtonClasses;
|
|
49
|
+
private getFolderClasses;
|
|
50
|
+
private setTreeItemAriaAttributes;
|
|
51
|
+
}
|
|
52
|
+
export {};
|
|
53
|
+
//# sourceMappingURL=elementsRenderer.d.ts.map
|
|
@@ -0,0 +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;IAC5B,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;CACrB;AAED,MAAM,CAAC,OAAO,OAAO,gBAAgB;IAC1B,iBAAiB,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IACvC,iBAAiB,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC9C,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,UAAU,CAAC,CAAa;IAChC,OAAO,CAAC,GAAG,CAAC,CAAU;IACtB,OAAO,CAAC,cAAc,CAA6C;IACnE,OAAO,CAAC,eAAe,CAAU;IACjC,OAAO,CAAC,QAAQ,CAAC,CAAS;gBAEd,EACR,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,GACX,EAAE,sBAAsB;IAiBlB,MAAM,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI;IAQnC,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAahC,cAAc,IAAI,IAAI;IAU7B,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,mBAAmB;IAgB3B,OAAO,CAAC,iBAAiB;IAmBzB,OAAO,CAAC,cAAc;IAyDtB,OAAO,CAAC,QAAQ;IAmBhB,OAAO,CAAC,YAAY;IAqCpB,OAAO,CAAC,eAAe;IAqCvB,OAAO,CAAC,QAAQ;IA4BhB,OAAO,CAAC,gBAAgB;IAgBxB,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,yBAAyB;CAWpC"}
|