tree-element 0.1.0 → 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 +49 -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 +18 -21
- 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 +11 -4
- 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 +7 -3
- package/src/animation.ts +1 -1
- package/src/classNames.ts +52 -52
- package/src/dataLoader.ts +68 -70
- 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 -209
- 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 +3770 -3799
- package/tree_element.debug.js.map +1 -1
- package/tree_element.js +2 -2
- package/tree_element.js.map +1 -1
package/lib/mouseHandler.js
CHANGED
|
@@ -1,35 +1,19 @@
|
|
|
1
1
|
import { getPositionInfoFromMouseEvent, getPositionInfoFromTouch } from './mouseUtils.js';
|
|
2
2
|
|
|
3
3
|
class MouseHandler {
|
|
4
|
-
_classNames;
|
|
5
|
-
_element;
|
|
6
|
-
_getMouseDelay;
|
|
7
|
-
_getNode;
|
|
8
|
-
_isMouseDelayMet;
|
|
9
|
-
_isMouseStarted;
|
|
10
|
-
_mouseDelayTimer;
|
|
11
|
-
_mouseDownInfo;
|
|
12
|
-
_onClickButton;
|
|
13
|
-
_onClickTitle;
|
|
14
|
-
_onMouseCapture;
|
|
15
|
-
_onMouseDrag;
|
|
16
|
-
_onMouseStart;
|
|
17
|
-
_onMouseStop;
|
|
18
|
-
_triggerEvent;
|
|
19
|
-
_useContextMenu;
|
|
20
4
|
constructor({
|
|
21
|
-
classNames,
|
|
22
|
-
element,
|
|
23
|
-
getMouseDelay,
|
|
24
|
-
getNode,
|
|
25
|
-
onClickButton,
|
|
26
|
-
onClickTitle,
|
|
27
|
-
onMouseCapture,
|
|
28
|
-
onMouseDrag,
|
|
29
|
-
onMouseStart,
|
|
30
|
-
onMouseStop,
|
|
31
|
-
triggerEvent,
|
|
32
|
-
useContextMenu
|
|
5
|
+
_classNames: classNames,
|
|
6
|
+
_element: element,
|
|
7
|
+
_getMouseDelay: getMouseDelay,
|
|
8
|
+
_getNode: getNode,
|
|
9
|
+
_onClickButton: onClickButton,
|
|
10
|
+
_onClickTitle: onClickTitle,
|
|
11
|
+
_onMouseCapture: onMouseCapture,
|
|
12
|
+
_onMouseDrag: onMouseDrag,
|
|
13
|
+
_onMouseStart: onMouseStart,
|
|
14
|
+
_onMouseStop: onMouseStop,
|
|
15
|
+
_triggerEvent: triggerEvent,
|
|
16
|
+
_useContextMenu: useContextMenu
|
|
33
17
|
}) {
|
|
34
18
|
this._classNames = classNames;
|
|
35
19
|
this._element = element;
|
|
@@ -59,7 +43,7 @@ class MouseHandler {
|
|
|
59
43
|
this._isMouseDelayMet = false;
|
|
60
44
|
this._mouseDownInfo = null;
|
|
61
45
|
}
|
|
62
|
-
|
|
46
|
+
_deinit() {
|
|
63
47
|
this._element.removeEventListener("click", this._handleClick);
|
|
64
48
|
this._element.removeEventListener("dblclick", this._handleDblclick);
|
|
65
49
|
if (this._useContextMenu) {
|
|
@@ -70,9 +54,9 @@ class MouseHandler {
|
|
|
70
54
|
this._removeMouseMoveEventListeners();
|
|
71
55
|
}
|
|
72
56
|
_getClickTarget(element) {
|
|
73
|
-
|
|
57
|
+
let button = element.closest(`.${this._classNames.toggler}`);
|
|
74
58
|
if (button) {
|
|
75
|
-
|
|
59
|
+
let node = this._getNode(button);
|
|
76
60
|
if (node) {
|
|
77
61
|
return {
|
|
78
62
|
node,
|
|
@@ -80,9 +64,9 @@ class MouseHandler {
|
|
|
80
64
|
};
|
|
81
65
|
}
|
|
82
66
|
} else {
|
|
83
|
-
|
|
67
|
+
let treeElement = element.closest(`.${this._classNames.element}`);
|
|
84
68
|
if (treeElement) {
|
|
85
|
-
|
|
69
|
+
let node = this._getNode(treeElement);
|
|
86
70
|
if (node) {
|
|
87
71
|
return {
|
|
88
72
|
node,
|
|
@@ -97,7 +81,7 @@ class MouseHandler {
|
|
|
97
81
|
if (!e.target) {
|
|
98
82
|
return;
|
|
99
83
|
}
|
|
100
|
-
|
|
84
|
+
let clickTarget = this._getClickTarget(e.target);
|
|
101
85
|
if (!clickTarget) {
|
|
102
86
|
return;
|
|
103
87
|
}
|
|
@@ -123,9 +107,9 @@ class MouseHandler {
|
|
|
123
107
|
if (!e.target) {
|
|
124
108
|
return;
|
|
125
109
|
}
|
|
126
|
-
|
|
110
|
+
let div = e.target.closest(`ul.${this._classNames.tree} .${this._classNames.element}`);
|
|
127
111
|
if (div) {
|
|
128
|
-
|
|
112
|
+
let node = this._getNode(div);
|
|
129
113
|
if (node) {
|
|
130
114
|
e.preventDefault();
|
|
131
115
|
e.stopPropagation();
|
|
@@ -142,7 +126,7 @@ class MouseHandler {
|
|
|
142
126
|
if (!e.target) {
|
|
143
127
|
return;
|
|
144
128
|
}
|
|
145
|
-
|
|
129
|
+
let clickTarget = this._getClickTarget(e.target);
|
|
146
130
|
if (clickTarget?.type === "label") {
|
|
147
131
|
this._triggerEvent("tree.dblclick", {
|
|
148
132
|
node: clickTarget.node,
|
|
@@ -207,7 +191,7 @@ class MouseHandler {
|
|
|
207
191
|
document.addEventListener("touchend", this._touchEnd, {
|
|
208
192
|
passive: false
|
|
209
193
|
});
|
|
210
|
-
|
|
194
|
+
let mouseDelay = this._getMouseDelay();
|
|
211
195
|
if (mouseDelay) {
|
|
212
196
|
this._startMouseDelayTimer(mouseDelay);
|
|
213
197
|
} else {
|
|
@@ -219,7 +203,7 @@ class MouseHandler {
|
|
|
219
203
|
if (e.button !== 0) {
|
|
220
204
|
return;
|
|
221
205
|
}
|
|
222
|
-
|
|
206
|
+
let result = this._handleMouseDown(getPositionInfoFromMouseEvent(e));
|
|
223
207
|
if (result && e.cancelable) {
|
|
224
208
|
e.preventDefault();
|
|
225
209
|
}
|
|
@@ -251,7 +235,7 @@ class MouseHandler {
|
|
|
251
235
|
if (e.touches.length > 1) {
|
|
252
236
|
return;
|
|
253
237
|
}
|
|
254
|
-
|
|
238
|
+
let touch = e.touches[0];
|
|
255
239
|
if (!touch) {
|
|
256
240
|
return;
|
|
257
241
|
}
|
|
@@ -261,7 +245,7 @@ class MouseHandler {
|
|
|
261
245
|
if (e.touches.length > 1) {
|
|
262
246
|
return;
|
|
263
247
|
}
|
|
264
|
-
|
|
248
|
+
let touch = e.touches[0];
|
|
265
249
|
if (!touch) {
|
|
266
250
|
return;
|
|
267
251
|
}
|
|
@@ -271,7 +255,7 @@ class MouseHandler {
|
|
|
271
255
|
if (e.touches.length > 1) {
|
|
272
256
|
return;
|
|
273
257
|
}
|
|
274
|
-
|
|
258
|
+
let touch = e.touches[0];
|
|
275
259
|
if (!touch) {
|
|
276
260
|
return;
|
|
277
261
|
}
|
package/lib/mouseHandler.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mouseHandler.js","sources":["../src/mouseHandler.ts"],"sourcesContent":["import type { ClassNames } from \"./classNames\";\nimport type { TriggerEvent } from \"./methodTypes\";\nimport type { PositionInfo } from \"./mouseUtils\";\nimport type { Node } from \"./node\";\n\nimport {\n getPositionInfoFromMouseEvent,\n getPositionInfoFromTouch,\n} from \"./mouseUtils\";\n\nexport type GetMouseDelay = () => number;\nexport type GetNode = (element: HTMLElement) => Node | null;\nexport type MouseCapture = (positionInfo: PositionInfo) => boolean | null;\nexport type MouseStart = (positionInfo: PositionInfo) => boolean;\n\ninterface ClickTarget {\n node: Node;\n type: \"button\" | \"label\";\n}\n\ninterface MouseHandlerParams {\n classNames: ClassNames;\n element: HTMLElement;\n getMouseDelay: () => number;\n getNode: GetNode;\n onClickButton: (node: Node) => void;\n onClickTitle: (node: Node) => void;\n onMouseCapture: MouseCapture;\n onMouseDrag: (positionInfo: PositionInfo) => void;\n onMouseStart: MouseStart;\n onMouseStop: (positionInfo: PositionInfo) => void;\n triggerEvent: TriggerEvent;\n useContextMenu: boolean;\n}\n\nclass MouseHandler {\n private classNames: ClassNames;\n private element: HTMLElement;\n private getMouseDelay: GetMouseDelay;\n private getNode: GetNode;\n\n private isMouseDelayMet: boolean;\n\n private isMouseStarted: boolean;\n\n private mouseDelayTimer: null | number;\n\n private mouseDownInfo: null | PositionInfo;\n private onClickButton: (node: Node) => void;\n private onClickTitle: (node: Node) => void;\n\n private onMouseCapture: MouseCapture;\n\n private onMouseDrag: (positionInfo: PositionInfo) => void;\n\n private onMouseStart: MouseStart;\n\n private onMouseStop: (positionInfo: PositionInfo) => void;\n\n private triggerEvent: TriggerEvent;\n private useContextMenu: boolean;\n constructor({\n classNames,\n element,\n getMouseDelay,\n getNode,\n onClickButton,\n onClickTitle,\n onMouseCapture,\n onMouseDrag,\n onMouseStart,\n onMouseStop,\n triggerEvent,\n useContextMenu,\n }: MouseHandlerParams) {\n this.classNames = classNames;\n this.element = element;\n this.getMouseDelay = getMouseDelay;\n this.getNode = getNode;\n this.onClickButton = onClickButton;\n this.onClickTitle = onClickTitle;\n this.onMouseCapture = onMouseCapture;\n this.onMouseDrag = onMouseDrag;\n this.onMouseStart = onMouseStart;\n this.onMouseStop = onMouseStop;\n this.triggerEvent = triggerEvent;\n this.useContextMenu = useContextMenu;\n\n element.addEventListener(\"click\", this.handleClick);\n element.addEventListener(\"dblclick\", this.handleDblclick);\n element.addEventListener(\"mousedown\", this.mouseDown, {\n passive: false,\n });\n element.addEventListener(\"touchstart\", this.touchStart, {\n passive: false,\n });\n\n if (useContextMenu) {\n element.addEventListener(\"contextmenu\", this.handleContextmenu);\n }\n\n this.isMouseStarted = false;\n this.mouseDelayTimer = null;\n this.isMouseDelayMet = false;\n this.mouseDownInfo = null;\n }\n public deinit(): void {\n this.element.removeEventListener(\"click\", this.handleClick);\n this.element.removeEventListener(\"dblclick\", this.handleDblclick);\n\n if (this.useContextMenu) {\n this.element.removeEventListener(\n \"contextmenu\",\n this.handleContextmenu,\n );\n }\n\n this.element.removeEventListener(\"mousedown\", this.mouseDown);\n this.element.removeEventListener(\"touchstart\", this.touchStart);\n this.removeMouseMoveEventListeners();\n }\n private getClickTarget(element: HTMLElement): ClickTarget | null {\n const button = element.closest<HTMLElement>(\n `.${this.classNames.toggler}`,\n );\n\n if (button) {\n const node = this.getNode(button);\n\n if (node) {\n return {\n node,\n type: \"button\",\n };\n }\n } else {\n const treeElement = element.closest<HTMLElement>(\n `.${this.classNames.element}`,\n );\n\n if (treeElement) {\n const node = this.getNode(treeElement);\n if (node) {\n return {\n node,\n type: \"label\",\n };\n }\n }\n }\n\n return null;\n }\n private handleClick = (e: MouseEvent): void => {\n if (!e.target) {\n return;\n }\n\n const clickTarget = this.getClickTarget(e.target as HTMLElement);\n\n if (!clickTarget) {\n return;\n }\n\n switch (clickTarget.type) {\n case \"button\":\n this.onClickButton(clickTarget.node);\n\n e.preventDefault();\n e.stopPropagation();\n break;\n\n case \"label\": {\n if (this.triggerEvent(\"tree.click\", {\n node: clickTarget.node,\n originalEvent: e,\n })) {\n this.onClickTitle(clickTarget.node);\n }\n break;\n }\n }\n };\n\n private handleContextmenu = (e: MouseEvent) => {\n if (!e.target) {\n return;\n }\n\n const div = (e.target as HTMLElement).closest<HTMLElement>(\n `ul.${this.classNames.tree} .${this.classNames.element}`,\n );\n\n if (div) {\n const node = this.getNode(div);\n if (node) {\n e.preventDefault();\n e.stopPropagation();\n\n this.triggerEvent(\"tree.contextmenu\", {\n node,\n originalEvent: e,\n });\n return false;\n }\n }\n\n return null;\n };\n\n private handleDblclick = (e: MouseEvent): void => {\n if (!e.target) {\n return;\n }\n\n const clickTarget = this.getClickTarget(e.target as HTMLElement);\n\n if (clickTarget?.type === \"label\") {\n this.triggerEvent(\"tree.dblclick\", {\n node: clickTarget.node,\n originalEvent: e,\n });\n }\n };\n\n private handleMouseDown(positionInfo: PositionInfo): boolean {\n // We may have missed mouseup (out of window)\n if (this.isMouseStarted) {\n this.handleMouseUp(positionInfo);\n }\n\n this.mouseDownInfo = positionInfo;\n\n if (!this.onMouseCapture(positionInfo)) {\n return false;\n }\n\n this.handleStartMouse();\n\n return true;\n }\n\n private handleMouseMove(\n e: MouseEvent | TouchEvent,\n positionInfo: PositionInfo,\n ): void {\n if (this.isMouseStarted) {\n this.onMouseDrag(positionInfo);\n\n if (e.cancelable) {\n e.preventDefault();\n }\n return;\n }\n\n if (!this.isMouseDelayMet) {\n return;\n }\n\n if (this.mouseDownInfo) {\n this.isMouseStarted = this.onMouseStart(this.mouseDownInfo);\n }\n\n if (this.isMouseStarted) {\n this.onMouseDrag(positionInfo);\n\n if (e.cancelable) {\n e.preventDefault();\n }\n } else {\n this.handleMouseUp(positionInfo);\n }\n }\n private handleMouseUp(positionInfo: PositionInfo): void {\n this.removeMouseMoveEventListeners();\n this.isMouseDelayMet = false;\n this.mouseDownInfo = null;\n\n if (this.isMouseStarted) {\n this.isMouseStarted = false;\n this.onMouseStop(positionInfo);\n }\n }\n\n private handleStartMouse(): void {\n document.addEventListener(\"mousemove\", this.mouseMove, {\n passive: false,\n });\n document.addEventListener(\"touchmove\", this.touchMove, {\n passive: false,\n });\n document.addEventListener(\"mouseup\", this.mouseUp, { passive: false });\n document.addEventListener(\"touchend\", this.touchEnd, {\n passive: false,\n });\n\n const mouseDelay = this.getMouseDelay();\n\n if (mouseDelay) {\n this.startMouseDelayTimer(mouseDelay);\n } else {\n this.isMouseDelayMet = true;\n }\n }\n\n private mouseDown = (e: MouseEvent): void => {\n // Left mouse button?\n if (e.button !== 0) {\n return;\n }\n\n const result = this.handleMouseDown(getPositionInfoFromMouseEvent(e));\n\n if (result && e.cancelable) {\n e.preventDefault();\n }\n };\n\n private mouseMove = (e: MouseEvent): void => {\n this.handleMouseMove(e, getPositionInfoFromMouseEvent(e));\n };\n\n private mouseUp = (e: MouseEvent): void => {\n this.handleMouseUp(getPositionInfoFromMouseEvent(e));\n };\n\n private removeMouseMoveEventListeners() {\n document.removeEventListener(\"mousemove\", this.mouseMove);\n document.removeEventListener(\"touchmove\", this.touchMove);\n document.removeEventListener(\"mouseup\", this.mouseUp);\n document.removeEventListener(\"touchend\", this.touchEnd);\n }\n\n private startMouseDelayTimer(mouseDelay: number): void {\n if (this.mouseDelayTimer) {\n clearTimeout(this.mouseDelayTimer);\n }\n\n this.mouseDelayTimer = window.setTimeout(() => {\n if (this.mouseDownInfo) {\n this.isMouseDelayMet = true;\n }\n }, mouseDelay);\n\n this.isMouseDelayMet = false;\n }\n\n private touchEnd = (e: TouchEvent): void => {\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.touches[0];\n\n if (!touch) {\n return;\n }\n\n this.handleMouseUp(getPositionInfoFromTouch(touch, e));\n };\n\n private touchMove = (e: TouchEvent): void => {\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.touches[0];\n\n if (!touch) {\n return;\n }\n\n this.handleMouseMove(e, getPositionInfoFromTouch(touch, e));\n };\n\n private touchStart = (e: TouchEvent): void => {\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.touches[0];\n\n if (!touch) {\n return;\n }\n\n this.handleMouseDown(getPositionInfoFromTouch(touch, e));\n };\n}\n\nexport default MouseHandler;\n"],"names":["classNames","element","getMouseDelay","getNode","isMouseDelayMet","isMouseStarted","mouseDelayTimer","mouseDownInfo","onClickButton","onClickTitle","onMouseCapture","onMouseDrag","onMouseStart","onMouseStop","triggerEvent","useContextMenu","handleClick","handleDblclick","mouseDown","touchStart","handleContextmenu","removeMouseMoveEventListeners","getClickTarget","handleMouseDown","handleMouseUp","handleStartMouse","handleMouseMove","mouseMove","touchMove","mouseUp","touchEnd","startMouseDelayTimer"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mouseHandler.js","sources":["../src/mouseHandler.ts"],"sourcesContent":["import type { ClassNames } from \"./classNames\";\nimport type { TriggerEvent } from \"./methodTypes\";\nimport type { PositionInfo } from \"./mouseUtils\";\nimport type { Node } from \"./node\";\n\nimport {\n getPositionInfoFromMouseEvent,\n getPositionInfoFromTouch,\n} from \"./mouseUtils\";\n\nexport type GetMouseDelay = () => number;\nexport type GetNode = (element: HTMLElement) => Node | null;\nexport type MouseCapture = (positionInfo: PositionInfo) => boolean | null;\nexport type MouseStart = (positionInfo: PositionInfo) => boolean;\n\ninterface ClickTarget {\n node: Node;\n type: \"button\" | \"label\";\n}\n\ninterface MouseHandlerParams {\n classNames: ClassNames;\n element: HTMLElement;\n getMouseDelay: () => number;\n getNode: GetNode;\n onClickButton: (node: Node) => void;\n onClickTitle: (node: Node) => void;\n onMouseCapture: MouseCapture;\n onMouseDrag: (positionInfo: PositionInfo) => void;\n onMouseStart: MouseStart;\n onMouseStop: (positionInfo: PositionInfo) => void;\n triggerEvent: TriggerEvent;\n useContextMenu: boolean;\n}\n\nclass MouseHandler {\n private classNames: ClassNames;\n private element: HTMLElement;\n private getMouseDelay: GetMouseDelay;\n private getNode: GetNode;\n\n private isMouseDelayMet: boolean;\n\n private isMouseStarted: boolean;\n\n private mouseDelayTimer: null | number;\n\n private mouseDownInfo: null | PositionInfo;\n private onClickButton: (node: Node) => void;\n private onClickTitle: (node: Node) => void;\n\n private onMouseCapture: MouseCapture;\n\n private onMouseDrag: (positionInfo: PositionInfo) => void;\n\n private onMouseStart: MouseStart;\n\n private onMouseStop: (positionInfo: PositionInfo) => void;\n\n private triggerEvent: TriggerEvent;\n private useContextMenu: boolean;\n constructor({\n classNames,\n element,\n getMouseDelay,\n getNode,\n onClickButton,\n onClickTitle,\n onMouseCapture,\n onMouseDrag,\n onMouseStart,\n onMouseStop,\n triggerEvent,\n useContextMenu,\n }: MouseHandlerParams) {\n this.classNames = classNames;\n this.element = element;\n this.getMouseDelay = getMouseDelay;\n this.getNode = getNode;\n this.onClickButton = onClickButton;\n this.onClickTitle = onClickTitle;\n this.onMouseCapture = onMouseCapture;\n this.onMouseDrag = onMouseDrag;\n this.onMouseStart = onMouseStart;\n this.onMouseStop = onMouseStop;\n this.triggerEvent = triggerEvent;\n this.useContextMenu = useContextMenu;\n\n element.addEventListener(\"click\", this.handleClick);\n element.addEventListener(\"dblclick\", this.handleDblclick);\n element.addEventListener(\"mousedown\", this.mouseDown, {\n passive: false,\n });\n element.addEventListener(\"touchstart\", this.touchStart, {\n passive: false,\n });\n\n if (useContextMenu) {\n element.addEventListener(\"contextmenu\", this.handleContextmenu);\n }\n\n this.isMouseStarted = false;\n this.mouseDelayTimer = null;\n this.isMouseDelayMet = false;\n this.mouseDownInfo = null;\n }\n public deinit(): void {\n this.element.removeEventListener(\"click\", this.handleClick);\n this.element.removeEventListener(\"dblclick\", this.handleDblclick);\n\n if (this.useContextMenu) {\n this.element.removeEventListener(\"contextmenu\", this.handleContextmenu);\n }\n\n this.element.removeEventListener(\"mousedown\", this.mouseDown);\n this.element.removeEventListener(\"touchstart\", this.touchStart);\n this.removeMouseMoveEventListeners();\n }\n private getClickTarget(element: HTMLElement): ClickTarget | null {\n const button = element.closest<HTMLElement>(`.${this.classNames.toggler}`);\n\n if (button) {\n const node = this.getNode(button);\n\n if (node) {\n return {\n node,\n type: \"button\",\n };\n }\n } else {\n const treeElement = element.closest<HTMLElement>(\n `.${this.classNames.element}`,\n );\n\n if (treeElement) {\n const node = this.getNode(treeElement);\n if (node) {\n return {\n node,\n type: \"label\",\n };\n }\n }\n }\n\n return null;\n }\n private handleClick = (e: MouseEvent): void => {\n if (!e.target) {\n return;\n }\n\n const clickTarget = this.getClickTarget(e.target as HTMLElement);\n\n if (!clickTarget) {\n return;\n }\n\n switch (clickTarget.type) {\n case \"button\":\n this.onClickButton(clickTarget.node);\n\n e.preventDefault();\n e.stopPropagation();\n break;\n\n case \"label\": {\n if (\n this.triggerEvent(\"tree.click\", {\n node: clickTarget.node,\n originalEvent: e,\n })\n ) {\n this.onClickTitle(clickTarget.node);\n }\n break;\n }\n }\n };\n\n private handleContextmenu = (e: MouseEvent) => {\n if (!e.target) {\n return;\n }\n\n const div = (e.target as HTMLElement).closest<HTMLElement>(\n `ul.${this.classNames.tree} .${this.classNames.element}`,\n );\n\n if (div) {\n const node = this.getNode(div);\n if (node) {\n e.preventDefault();\n e.stopPropagation();\n\n this.triggerEvent(\"tree.contextmenu\", {\n node,\n originalEvent: e,\n });\n return false;\n }\n }\n\n return null;\n };\n\n private handleDblclick = (e: MouseEvent): void => {\n if (!e.target) {\n return;\n }\n\n const clickTarget = this.getClickTarget(e.target as HTMLElement);\n\n if (clickTarget?.type === \"label\") {\n this.triggerEvent(\"tree.dblclick\", {\n node: clickTarget.node,\n originalEvent: e,\n });\n }\n };\n\n private handleMouseDown(positionInfo: PositionInfo): boolean {\n // We may have missed mouseup (out of window)\n if (this.isMouseStarted) {\n this.handleMouseUp(positionInfo);\n }\n\n this.mouseDownInfo = positionInfo;\n\n if (!this.onMouseCapture(positionInfo)) {\n return false;\n }\n\n this.handleStartMouse();\n\n return true;\n }\n\n private handleMouseMove(\n e: MouseEvent | TouchEvent,\n positionInfo: PositionInfo,\n ): void {\n if (this.isMouseStarted) {\n this.onMouseDrag(positionInfo);\n\n if (e.cancelable) {\n e.preventDefault();\n }\n return;\n }\n\n if (!this.isMouseDelayMet) {\n return;\n }\n\n if (this.mouseDownInfo) {\n this.isMouseStarted = this.onMouseStart(this.mouseDownInfo);\n }\n\n if (this.isMouseStarted) {\n this.onMouseDrag(positionInfo);\n\n if (e.cancelable) {\n e.preventDefault();\n }\n } else {\n this.handleMouseUp(positionInfo);\n }\n }\n private handleMouseUp(positionInfo: PositionInfo): void {\n this.removeMouseMoveEventListeners();\n this.isMouseDelayMet = false;\n this.mouseDownInfo = null;\n\n if (this.isMouseStarted) {\n this.isMouseStarted = false;\n this.onMouseStop(positionInfo);\n }\n }\n\n private handleStartMouse(): void {\n document.addEventListener(\"mousemove\", this.mouseMove, {\n passive: false,\n });\n document.addEventListener(\"touchmove\", this.touchMove, {\n passive: false,\n });\n document.addEventListener(\"mouseup\", this.mouseUp, { passive: false });\n document.addEventListener(\"touchend\", this.touchEnd, {\n passive: false,\n });\n\n const mouseDelay = this.getMouseDelay();\n\n if (mouseDelay) {\n this.startMouseDelayTimer(mouseDelay);\n } else {\n this.isMouseDelayMet = true;\n }\n }\n\n private mouseDown = (e: MouseEvent): void => {\n // Left mouse button?\n if (e.button !== 0) {\n return;\n }\n\n const result = this.handleMouseDown(getPositionInfoFromMouseEvent(e));\n\n if (result && e.cancelable) {\n e.preventDefault();\n }\n };\n\n private mouseMove = (e: MouseEvent): void => {\n this.handleMouseMove(e, getPositionInfoFromMouseEvent(e));\n };\n\n private mouseUp = (e: MouseEvent): void => {\n this.handleMouseUp(getPositionInfoFromMouseEvent(e));\n };\n\n private removeMouseMoveEventListeners() {\n document.removeEventListener(\"mousemove\", this.mouseMove);\n document.removeEventListener(\"touchmove\", this.touchMove);\n document.removeEventListener(\"mouseup\", this.mouseUp);\n document.removeEventListener(\"touchend\", this.touchEnd);\n }\n\n private startMouseDelayTimer(mouseDelay: number): void {\n if (this.mouseDelayTimer) {\n clearTimeout(this.mouseDelayTimer);\n }\n\n this.mouseDelayTimer = window.setTimeout(() => {\n if (this.mouseDownInfo) {\n this.isMouseDelayMet = true;\n }\n }, mouseDelay);\n\n this.isMouseDelayMet = false;\n }\n\n private touchEnd = (e: TouchEvent): void => {\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.touches[0];\n\n if (!touch) {\n return;\n }\n\n this.handleMouseUp(getPositionInfoFromTouch(touch, e));\n };\n\n private touchMove = (e: TouchEvent): void => {\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.touches[0];\n\n if (!touch) {\n return;\n }\n\n this.handleMouseMove(e, getPositionInfoFromTouch(touch, e));\n };\n\n private touchStart = (e: TouchEvent): void => {\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.touches[0];\n\n if (!touch) {\n return;\n }\n\n this.handleMouseDown(getPositionInfoFromTouch(touch, e));\n };\n}\n\nexport default MouseHandler;\n"],"names":["classNames","element","getMouseDelay","getNode","onClickButton","onClickTitle","onMouseCapture","onMouseDrag","onMouseStart","onMouseStop","triggerEvent","useContextMenu","handleClick","handleDblclick","mouseDown","touchStart","handleContextmenu","isMouseStarted","mouseDelayTimer","isMouseDelayMet","mouseDownInfo","deinit","removeMouseMoveEventListeners","getClickTarget","handleMouseDown","handleMouseUp","handleStartMouse","handleMouseMove","mouseMove","touchMove","mouseUp","touchEnd","startMouseDelayTimer"],"mappings":"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"}
|
package/lib/mouseUtils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mouseUtils.d.ts","sourceRoot":"","sources":["../src/mouseUtils.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;
|
|
1
|
+
{"version":3,"file":"mouseUtils.d.ts","sourceRoot":"","sources":["../src/mouseUtils.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,KAAK,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,eAAO,MAAM,6BAA6B,GAAI,GAAG,UAAU,KAAG,YAK5D,CAAC;AAEH,eAAO,MAAM,wBAAwB,GACnC,OAAO,KAAK,EACZ,GAAG,UAAU,KACZ,YAKD,CAAC"}
|
package/lib/mouseUtils.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
let getPositionInfoFromMouseEvent = e => ({
|
|
2
2
|
originalEvent: e,
|
|
3
3
|
pageX: e.pageX,
|
|
4
4
|
pageY: e.pageY,
|
|
5
5
|
target: e.target
|
|
6
6
|
});
|
|
7
|
-
|
|
7
|
+
let getPositionInfoFromTouch = (touch, e) => ({
|
|
8
8
|
originalEvent: e,
|
|
9
9
|
pageX: touch.pageX,
|
|
10
10
|
pageY: touch.pageY,
|
package/lib/mouseUtils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mouseUtils.js","sources":["../src/mouseUtils.ts"],"sourcesContent":["export interface PositionInfo {\n
|
|
1
|
+
{"version":3,"file":"mouseUtils.js","sources":["../src/mouseUtils.ts"],"sourcesContent":["export interface PositionInfo {\n originalEvent: Event;\n pageX: number;\n pageY: number;\n target: HTMLElement;\n}\n\nexport const getPositionInfoFromMouseEvent = (e: MouseEvent): PositionInfo => ({\n originalEvent: e,\n pageX: e.pageX,\n pageY: e.pageY,\n target: e.target as HTMLElement,\n});\n\nexport const getPositionInfoFromTouch = (\n touch: Touch,\n e: TouchEvent,\n): PositionInfo => ({\n originalEvent: e,\n pageX: touch.pageX,\n pageY: touch.pageY,\n target: touch.target as HTMLElement,\n});\n"],"names":[],"mappings":"AAOO,IAAM,6BAA6B,GAAI,CAAa,KAAoB;AAC7E,EAAA,aAAa,EAAE,CAAC;EAChB,KAAK,EAAE,CAAC,CAAC,KAAK;EACd,KAAK,EAAE,CAAC,CAAC,KAAK;EACd,MAAM,EAAE,CAAC,CAAC;AACZ,CAAC;IAEY,wBAAwB,GAAG,CACtC,KAAY,EACZ,CAAa,MACK;AAClB,EAAA,aAAa,EAAE,CAAC;EAChB,KAAK,EAAE,KAAK,CAAC,KAAK;EAClB,KAAK,EAAE,KAAK,CAAC,KAAK;EAClB,MAAM,EAAE,KAAK,CAAC;AAChB,CAAC;;"}
|
package/lib/node.d.ts
CHANGED
|
@@ -30,7 +30,8 @@ export declare class Node {
|
|
|
30
30
|
[key: string]: unknown;
|
|
31
31
|
/** The child nodes. */
|
|
32
32
|
children: Node[];
|
|
33
|
-
/** The `li` element, once the node is rendered.
|
|
33
|
+
/** The `li` element, once the node is rendered. Nodes inside a closed
|
|
34
|
+
* folder are rendered when the folder is opened. */
|
|
34
35
|
element?: HTMLElement;
|
|
35
36
|
/** The id from the node data. */
|
|
36
37
|
id?: NodeId;
|
package/lib/node.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;AAE3C,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAErC,MAAM,WAAW,UAAU;
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"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"}
|
package/lib/node.js
CHANGED
|
@@ -30,7 +30,8 @@ class Node {
|
|
|
30
30
|
|
|
31
31
|
/** The child nodes. */
|
|
32
32
|
children;
|
|
33
|
-
/** The `li` element, once the node is rendered.
|
|
33
|
+
/** The `li` element, once the node is rendered. Nodes inside a closed
|
|
34
|
+
* folder are rendered when the folder is opened. */
|
|
34
35
|
element;
|
|
35
36
|
/** The id from the node data. */
|
|
36
37
|
id;
|
|
@@ -82,8 +83,8 @@ class Node {
|
|
|
82
83
|
if (!this.parent) {
|
|
83
84
|
return null;
|
|
84
85
|
} else {
|
|
85
|
-
|
|
86
|
-
|
|
86
|
+
let node = this._createNode(nodeInfo);
|
|
87
|
+
let childIndex = this.parent.getChildIndex(this);
|
|
87
88
|
this.parent.addChildAtPosition(node, childIndex + 1);
|
|
88
89
|
node._loadChildrenFromData(nodeInfo);
|
|
89
90
|
return node;
|
|
@@ -100,8 +101,8 @@ class Node {
|
|
|
100
101
|
if (!this.parent) {
|
|
101
102
|
return null;
|
|
102
103
|
} else {
|
|
103
|
-
|
|
104
|
-
|
|
104
|
+
let node = this._createNode(nodeInfo);
|
|
105
|
+
let childIndex = this.parent.getChildIndex(this);
|
|
105
106
|
this.parent.addChildAtPosition(node, childIndex);
|
|
106
107
|
node._loadChildrenFromData(nodeInfo);
|
|
107
108
|
return node;
|
|
@@ -146,12 +147,12 @@ class Node {
|
|
|
146
147
|
if (!this.parent) {
|
|
147
148
|
return null;
|
|
148
149
|
} else {
|
|
149
|
-
|
|
150
|
+
let newParent = this._createNode(nodeInfo);
|
|
150
151
|
if (this.tree) {
|
|
151
152
|
newParent._setParent(this.tree);
|
|
152
153
|
}
|
|
153
|
-
|
|
154
|
-
for (
|
|
154
|
+
let originalParent = this.parent;
|
|
155
|
+
for (let child of originalParent.children) {
|
|
155
156
|
newParent.addChild(child);
|
|
156
157
|
}
|
|
157
158
|
originalParent.children = [];
|
|
@@ -167,7 +168,7 @@ class Node {
|
|
|
167
168
|
* @group Changing the tree
|
|
168
169
|
*/
|
|
169
170
|
append(nodeInfo) {
|
|
170
|
-
|
|
171
|
+
let node = this._createNode(nodeInfo);
|
|
171
172
|
this.addChild(node);
|
|
172
173
|
node._loadChildrenFromData(nodeInfo);
|
|
173
174
|
return node;
|
|
@@ -185,7 +186,7 @@ class Node {
|
|
|
185
186
|
* @group Searching
|
|
186
187
|
*/
|
|
187
188
|
filter(f) {
|
|
188
|
-
|
|
189
|
+
let result = [];
|
|
189
190
|
this.iterate(node => {
|
|
190
191
|
if (f(node)) {
|
|
191
192
|
result.push(node);
|
|
@@ -220,12 +221,12 @@ class Node {
|
|
|
220
221
|
* @group Reading data back
|
|
221
222
|
*/
|
|
222
223
|
getData(includeParent = false) {
|
|
223
|
-
|
|
224
|
+
let getDataFromNodes = nodes => {
|
|
224
225
|
return nodes.map(node => {
|
|
225
|
-
|
|
226
|
-
for (
|
|
226
|
+
let tmpNode = {};
|
|
227
|
+
for (let k in node) {
|
|
227
228
|
if (["parent", "children", "element", "idMapping", "load_on_demand", "nodeClass", "tree", "isEmptyFolder"].indexOf(k) === -1 && Object.prototype.hasOwnProperty.call(node, k)) {
|
|
228
|
-
|
|
229
|
+
let v = node[k];
|
|
229
230
|
tmpNode[k] = v;
|
|
230
231
|
}
|
|
231
232
|
}
|
|
@@ -252,7 +253,7 @@ class Node {
|
|
|
252
253
|
if (!this.hasChildren()) {
|
|
253
254
|
return null;
|
|
254
255
|
} else {
|
|
255
|
-
|
|
256
|
+
let lastChild = this.children[this.children.length - 1];
|
|
256
257
|
if (!(lastChild.hasChildren() && lastChild.is_open)) {
|
|
257
258
|
return lastChild;
|
|
258
259
|
} else {
|
|
@@ -289,7 +290,7 @@ class Node {
|
|
|
289
290
|
} else if (!this.parent) {
|
|
290
291
|
return null;
|
|
291
292
|
} else {
|
|
292
|
-
|
|
293
|
+
let nextSibling = this.getNextSibling();
|
|
293
294
|
if (nextSibling) {
|
|
294
295
|
return nextSibling;
|
|
295
296
|
} else {
|
|
@@ -307,7 +308,7 @@ class Node {
|
|
|
307
308
|
if (!this.parent) {
|
|
308
309
|
return null;
|
|
309
310
|
} else {
|
|
310
|
-
|
|
311
|
+
let nextIndex = this.parent.getChildIndex(this) + 1;
|
|
311
312
|
if (nextIndex < this.parent.children.length) {
|
|
312
313
|
return this.parent.children[nextIndex] ?? null;
|
|
313
314
|
} else {
|
|
@@ -330,7 +331,7 @@ class Node {
|
|
|
330
331
|
if (!this.parent) {
|
|
331
332
|
return null;
|
|
332
333
|
} else {
|
|
333
|
-
|
|
334
|
+
let nextSibling = this.getNextSibling();
|
|
334
335
|
if (nextSibling) {
|
|
335
336
|
// Next sibling
|
|
336
337
|
return nextSibling;
|
|
@@ -387,7 +388,7 @@ class Node {
|
|
|
387
388
|
* @group Searching
|
|
388
389
|
*/
|
|
389
390
|
getNodeByNameMustExist(name) {
|
|
390
|
-
|
|
391
|
+
let node = this.getNodeByCallback(n => n.name === name);
|
|
391
392
|
if (!node) {
|
|
392
393
|
throw new Error(`Node with name ${name} not found`);
|
|
393
394
|
}
|
|
@@ -431,7 +432,7 @@ class Node {
|
|
|
431
432
|
if (!this.parent) {
|
|
432
433
|
return null;
|
|
433
434
|
} else {
|
|
434
|
-
|
|
435
|
+
let previousSibling = this.getPreviousSibling();
|
|
435
436
|
if (!previousSibling) {
|
|
436
437
|
return this.getParent();
|
|
437
438
|
} else if (previousSibling.hasChildren()) {
|
|
@@ -451,7 +452,7 @@ class Node {
|
|
|
451
452
|
if (!this.parent) {
|
|
452
453
|
return null;
|
|
453
454
|
} else {
|
|
454
|
-
|
|
455
|
+
let previousIndex = this.parent.getChildIndex(this) - 1;
|
|
455
456
|
if (previousIndex >= 0) {
|
|
456
457
|
return this.parent.children[previousIndex] ?? null;
|
|
457
458
|
} else {
|
|
@@ -470,7 +471,7 @@ class Node {
|
|
|
470
471
|
if (!this.parent) {
|
|
471
472
|
return null;
|
|
472
473
|
} else {
|
|
473
|
-
|
|
474
|
+
let previousSibling = this.getPreviousSibling();
|
|
474
475
|
if (!previousSibling) {
|
|
475
476
|
return this.getParent();
|
|
476
477
|
} else if (!previousSibling.hasChildren() || !previousSibling.is_open) {
|
|
@@ -498,15 +499,15 @@ class Node {
|
|
|
498
499
|
* @hidden
|
|
499
500
|
*/
|
|
500
501
|
initFromData(data) {
|
|
501
|
-
|
|
502
|
+
let addNode = nodeData => {
|
|
502
503
|
this.setData(nodeData);
|
|
503
504
|
if (isNodeRecordWithChildren(nodeData) && nodeData.children.length) {
|
|
504
505
|
addChildren(nodeData.children);
|
|
505
506
|
}
|
|
506
507
|
};
|
|
507
|
-
|
|
508
|
-
for (
|
|
509
|
-
|
|
508
|
+
let addChildren = childrenData => {
|
|
509
|
+
for (let child of childrenData) {
|
|
510
|
+
let node = this._createNode();
|
|
510
511
|
node.initFromData(child);
|
|
511
512
|
this.addChild(node);
|
|
512
513
|
}
|
|
@@ -553,9 +554,9 @@ class Node {
|
|
|
553
554
|
* @group Searching
|
|
554
555
|
*/
|
|
555
556
|
iterate(callback) {
|
|
556
|
-
|
|
557
|
-
for (
|
|
558
|
-
|
|
557
|
+
let _iterate = (node, level) => {
|
|
558
|
+
for (let child of node.children) {
|
|
559
|
+
let result = callback(child, level);
|
|
559
560
|
if (result && child.hasChildren()) {
|
|
560
561
|
_iterate(child, level + 1);
|
|
561
562
|
}
|
|
@@ -571,8 +572,8 @@ class Node {
|
|
|
571
572
|
*/
|
|
572
573
|
loadFromData(data) {
|
|
573
574
|
this.removeChildren();
|
|
574
|
-
for (
|
|
575
|
-
|
|
575
|
+
for (let childData of data) {
|
|
576
|
+
let node = this._createNode(childData);
|
|
576
577
|
this.addChild(node);
|
|
577
578
|
if (isNodeRecordWithChildren(childData)) {
|
|
578
579
|
node.loadFromData(childData.children);
|
|
@@ -630,7 +631,7 @@ class Node {
|
|
|
630
631
|
* @group Changing the tree
|
|
631
632
|
*/
|
|
632
633
|
prepend(nodeInfo) {
|
|
633
|
-
|
|
634
|
+
let node = this._createNode(nodeInfo);
|
|
634
635
|
this.addChildAtPosition(node, 0);
|
|
635
636
|
node._loadChildrenFromData(nodeInfo);
|
|
636
637
|
return node;
|
|
@@ -692,9 +693,9 @@ class Node {
|
|
|
692
693
|
} else if (typeof o === "string") {
|
|
693
694
|
this.name = o;
|
|
694
695
|
} else if (typeof o === "object") {
|
|
695
|
-
for (
|
|
696
|
+
for (let key in o) {
|
|
696
697
|
if (Object.prototype.hasOwnProperty.call(o, key)) {
|
|
697
|
-
|
|
698
|
+
let value = o[key];
|
|
698
699
|
if (key === "label" || key === "name") {
|
|
699
700
|
// You can use the 'label' key instead of 'name'; this is a legacy feature
|
|
700
701
|
if (typeof value === "string") {
|
|
@@ -709,7 +710,7 @@ class Node {
|
|
|
709
710
|
}
|
|
710
711
|
}
|
|
711
712
|
_createNode(nodeData) {
|
|
712
|
-
|
|
713
|
+
let nodeClass = this._getNodeClass();
|
|
713
714
|
return new nodeClass(nodeData);
|
|
714
715
|
}
|
|
715
716
|
_doRemoveChild(node) {
|