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
package/lib/nodeElement/index.js
CHANGED
|
@@ -2,45 +2,46 @@ import BorderDropHint from './borderDropHint.js';
|
|
|
2
2
|
import GhostDropHint from './ghostDropHint.js';
|
|
3
3
|
|
|
4
4
|
class NodeElement {
|
|
5
|
-
element;
|
|
6
|
-
node;
|
|
7
|
-
_classNames;
|
|
8
|
-
_getScrollLeft;
|
|
9
|
-
_tabIndex;
|
|
10
|
-
_treeElement;
|
|
11
5
|
constructor({
|
|
12
|
-
classNames,
|
|
13
|
-
getScrollLeft,
|
|
14
|
-
node,
|
|
15
|
-
tabIndex,
|
|
16
|
-
treeElement
|
|
6
|
+
_classNames: classNames,
|
|
7
|
+
_getScrollLeft: getScrollLeft,
|
|
8
|
+
_node: node,
|
|
9
|
+
_tabIndex: tabIndex,
|
|
10
|
+
_treeElement: treeElement
|
|
17
11
|
}) {
|
|
18
12
|
this._classNames = classNames;
|
|
19
13
|
this._getScrollLeft = getScrollLeft;
|
|
20
|
-
this.
|
|
14
|
+
this._node = node;
|
|
21
15
|
this._tabIndex = tabIndex;
|
|
22
16
|
this._treeElement = treeElement;
|
|
23
|
-
|
|
24
|
-
|
|
17
|
+
|
|
18
|
+
// The root node has no element of its own; it uses the tree element.
|
|
19
|
+
this._element = node.element ?? this._treeElement;
|
|
25
20
|
}
|
|
26
|
-
|
|
21
|
+
_addDropHint(position) {
|
|
27
22
|
if (this._mustShowBorderDropHint(position)) {
|
|
28
|
-
return new BorderDropHint(this.
|
|
23
|
+
return new BorderDropHint(this._element, this._getScrollLeft(), this._classNames);
|
|
29
24
|
} else {
|
|
30
|
-
return new GhostDropHint(this.
|
|
25
|
+
return new GhostDropHint(this._node, this._element, position, this._classNames);
|
|
31
26
|
}
|
|
32
27
|
}
|
|
33
|
-
|
|
34
|
-
this.
|
|
35
|
-
|
|
28
|
+
_deselect() {
|
|
29
|
+
if (!this._isRendered()) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
this._element.classList.remove(this._classNames.selected);
|
|
33
|
+
let titleSpan = this._getTitleSpan();
|
|
36
34
|
titleSpan.removeAttribute("tabindex");
|
|
37
35
|
titleSpan.setAttribute("aria-selected", "false");
|
|
38
36
|
titleSpan.blur();
|
|
39
37
|
}
|
|
40
|
-
|
|
41
|
-
this.
|
|
42
|
-
|
|
43
|
-
|
|
38
|
+
_select(mustSetFocus) {
|
|
39
|
+
if (!this._isRendered()) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
this._element.classList.add(this._classNames.selected);
|
|
43
|
+
let titleSpan = this._getTitleSpan();
|
|
44
|
+
let tabIndex = this._tabIndex;
|
|
44
45
|
|
|
45
46
|
// Check for null or undefined
|
|
46
47
|
if (tabIndex != null) {
|
|
@@ -52,10 +53,17 @@ class NodeElement {
|
|
|
52
53
|
}
|
|
53
54
|
}
|
|
54
55
|
_getTitleSpan() {
|
|
55
|
-
return this.
|
|
56
|
+
return this._element.querySelector(`:scope > .${this._classNames.element} > span.${this._classNames.title}`);
|
|
56
57
|
}
|
|
57
58
|
_getUl() {
|
|
58
|
-
return this.
|
|
59
|
+
return this._element.querySelector(":scope > ul");
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/* A node inside a closed folder is not rendered. Its selected and open
|
|
63
|
+
* state is applied when it is rendered.
|
|
64
|
+
*/
|
|
65
|
+
_isRendered() {
|
|
66
|
+
return Boolean(this._node.element);
|
|
59
67
|
}
|
|
60
68
|
_mustShowBorderDropHint(position) {
|
|
61
69
|
return position === "inside";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/nodeElement/index.ts"],"sourcesContent":["import type { ClassNames } from \"../classNames\";\nimport type { DropHint } from \"../dragAndDropHandler/types\";\nimport type { GetScrollLeft } from \"../methodTypes\";\nimport type { Node, Position } from \"../node\";\n\nimport BorderDropHint from \"./borderDropHint\";\nimport GhostDropHint from \"./ghostDropHint\";\n\nexport interface NodeElementParams {\n
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/nodeElement/index.ts"],"sourcesContent":["import type { ClassNames } from \"../classNames\";\nimport type { DropHint } from \"../dragAndDropHandler/types\";\nimport type { GetScrollLeft } from \"../methodTypes\";\nimport type { Node, Position } from \"../node\";\n\nimport BorderDropHint from \"./borderDropHint\";\nimport GhostDropHint from \"./ghostDropHint\";\n\nexport interface NodeElementParams {\n classNames: ClassNames;\n getScrollLeft: GetScrollLeft;\n node: Node;\n tabIndex?: number;\n treeElement: HTMLElement;\n}\n\nclass NodeElement {\n public element: HTMLElement;\n public node: Node;\n protected classNames: ClassNames;\n private getScrollLeft: GetScrollLeft;\n private tabIndex?: number;\n private treeElement: HTMLElement;\n\n constructor({\n classNames,\n getScrollLeft,\n node,\n tabIndex,\n treeElement,\n }: NodeElementParams) {\n this.classNames = classNames;\n this.getScrollLeft = getScrollLeft;\n this.node = node;\n this.tabIndex = tabIndex;\n this.treeElement = treeElement;\n\n // The root node has no element of its own; it uses the tree element.\n this.element = node.element ?? this.treeElement;\n }\n\n public addDropHint(position: Position): DropHint {\n if (this.mustShowBorderDropHint(position)) {\n return new BorderDropHint(\n this.element,\n this.getScrollLeft(),\n this.classNames,\n );\n } else {\n return new GhostDropHint(\n this.node,\n this.element,\n position,\n this.classNames,\n );\n }\n }\n\n public deselect(): void {\n if (!this.isRendered()) {\n return;\n }\n\n this.element.classList.remove(this.classNames.selected);\n\n const titleSpan = this.getTitleSpan();\n titleSpan.removeAttribute(\"tabindex\");\n titleSpan.setAttribute(\"aria-selected\", \"false\");\n\n titleSpan.blur();\n }\n\n public select(mustSetFocus: boolean): void {\n if (!this.isRendered()) {\n return;\n }\n\n this.element.classList.add(this.classNames.selected);\n\n const titleSpan = this.getTitleSpan();\n const tabIndex = this.tabIndex;\n\n // Check for null or undefined\n if (tabIndex != null) {\n titleSpan.setAttribute(\"tabindex\", tabIndex.toString());\n }\n\n titleSpan.setAttribute(\"aria-selected\", \"true\");\n\n if (mustSetFocus) {\n titleSpan.focus();\n }\n }\n\n protected getTitleSpan(): HTMLSpanElement {\n return this.element.querySelector(\n `:scope > .${this.classNames.element} > span.${this.classNames.title}`,\n ) as HTMLSpanElement;\n }\n\n protected getUl(): HTMLUListElement | null {\n return this.element.querySelector(\":scope > ul\");\n }\n\n /* A node inside a closed folder is not rendered. Its selected and open\n * state is applied when it is rendered.\n */\n protected isRendered(): boolean {\n return Boolean(this.node.element);\n }\n\n protected mustShowBorderDropHint(position: Position): boolean {\n return position === \"inside\";\n }\n}\n\nexport default NodeElement;\n"],"names":["classNames","getScrollLeft","node","tabIndex","treeElement","element","addDropHint","mustShowBorderDropHint","deselect","isRendered","getTitleSpan","select","getUl"],"mappings":"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"}
|
package/lib/nodeUtils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodeUtils.d.ts","sourceRoot":"","sources":["../src/nodeUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEnD,UAAU,sBAAuB,SAAQ,UAAU;
|
|
1
|
+
{"version":3,"file":"nodeUtils.d.ts","sourceRoot":"","sources":["../src/nodeUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEnD,UAAU,sBAAuB,SAAQ,UAAU;IACjD,QAAQ,EAAE,QAAQ,EAAE,CAAC;CACtB;AAED,eAAO,MAAM,wBAAwB,GACnC,MAAM,QAAQ,KACb,IAAI,IAAI,sBAGqB,CAAC"}
|
package/lib/nodeUtils.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
let isNodeRecordWithChildren = data => typeof data === "object" && "children" in data && data.children instanceof Array;
|
|
2
2
|
|
|
3
3
|
export { isNodeRecordWithChildren };
|
|
4
4
|
//# sourceMappingURL=nodeUtils.js.map
|
package/lib/nodeUtils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodeUtils.js","sources":["../src/nodeUtils.ts"],"sourcesContent":["import type { NodeData, NodeRecord } from \"./node\";\n\ninterface NodeRecordWithChildren extends NodeRecord {\n
|
|
1
|
+
{"version":3,"file":"nodeUtils.js","sources":["../src/nodeUtils.ts"],"sourcesContent":["import type { NodeData, NodeRecord } from \"./node\";\n\ninterface NodeRecordWithChildren extends NodeRecord {\n children: NodeData[];\n}\n\nexport const isNodeRecordWithChildren = (\n data: NodeData,\n): data is NodeRecordWithChildren =>\n typeof data === \"object\" &&\n \"children\" in data &&\n data.children instanceof Array;\n"],"names":[],"mappings":"IAMa,wBAAwB,GACnC,IAAc,IAEd,OAAO,IAAI,KAAK,QAAQ,IACxB,UAAU,IAAI,IAAI,IAClB,IAAI,CAAC,QAAQ,YAAY;;"}
|
package/lib/options.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAE7C,MAAM,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,QAAQ,EAAE,CAAC;AAEvD,MAAM,MAAM,OAAO,GAAG,eAAe,GAAG,MAAM,CAAC;AAE/C,MAAM,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,KAAK,IAAI,CAAC;AAEpE,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,MAAM,CAAC;AAE/C,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;AAE9D,MAAM,MAAM,WAAW,GAAG,CACxB,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,IAAI,EAChB,YAAY,EAAE,MAAM,KACjB,OAAO,CAAC;AAEb,MAAM,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"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"}
|
package/lib/positionUtils.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// Get the top position of the HTML element.
|
|
2
|
-
|
|
2
|
+
let getOffsetTop = element => getElementPosition(element).top;
|
|
3
3
|
|
|
4
4
|
// Get the top left position of the HTML element.
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
let getElementPosition = element => {
|
|
6
|
+
let rect = element.getBoundingClientRect();
|
|
7
7
|
return {
|
|
8
8
|
left: rect.x + window.scrollX,
|
|
9
9
|
top: rect.y + window.scrollY
|
package/lib/positionUtils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"positionUtils.js","sources":["../src/positionUtils.ts"],"sourcesContent":["interface TopLeftPosition {\n left: number;\n top: number;\n}\n\n// Get the top position of the HTML element.\nexport const getOffsetTop = (element: HTMLElement): number =>\n getElementPosition(element).top;\n\n// Get the top left position of the HTML element.\nexport const getElementPosition = (element: HTMLElement): TopLeftPosition => {\n const rect = element.getBoundingClientRect();\n\n return {\n left: rect.x + window.scrollX,\n top: rect.y + window.scrollY,\n };\n};\n"],"names":[],"mappings":"AAKA;AACO,
|
|
1
|
+
{"version":3,"file":"positionUtils.js","sources":["../src/positionUtils.ts"],"sourcesContent":["interface TopLeftPosition {\n left: number;\n top: number;\n}\n\n// Get the top position of the HTML element.\nexport const getOffsetTop = (element: HTMLElement): number =>\n getElementPosition(element).top;\n\n// Get the top left position of the HTML element.\nexport const getElementPosition = (element: HTMLElement): TopLeftPosition => {\n const rect = element.getBoundingClientRect();\n\n return {\n left: rect.x + window.scrollX,\n top: rect.y + window.scrollY,\n };\n};\n"],"names":[],"mappings":"AAKA;AACO,IAAM,YAAY,GAAI,OAAoB,IAC/C,kBAAkB,CAAC,OAAO,CAAC,CAAC;;AAE9B;AACO,IAAM,kBAAkB,GAAI,OAAoB,IAAsB;AAC3E,EAAA,IAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE;EAE5C,OAAO;AACL,IAAA,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO;AAC7B,IAAA,GAAG,EAAE,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC;GACtB;AACH;;"}
|
package/lib/requestUrl.d.ts
CHANGED
package/lib/requestUrl.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requestUrl.d.ts","sourceRoot":"","sources":["../src/requestUrl.ts"],"names":[],"mappings":"AAaA,cAAM,UAAU;IACd,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,GAAG,CAAM;gBAEL,QAAQ,EAAE,MAAM;IAU5B,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAIzC,
|
|
1
|
+
{"version":3,"file":"requestUrl.d.ts","sourceRoot":"","sources":["../src/requestUrl.ts"],"names":[],"mappings":"AAaA,cAAM,UAAU;IACd,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,GAAG,CAAM;gBAEL,QAAQ,EAAE,MAAM;IAU5B,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAIzC,KAAK;CAON;AAED,eAAe,UAAU,CAAC"}
|
package/lib/requestUrl.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Url class for absolute and relative urls.
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
let isAbsoluteUrl = inputUrl => {
|
|
4
4
|
try {
|
|
5
5
|
new URL(inputUrl);
|
|
6
6
|
return true;
|
|
@@ -8,10 +8,8 @@ const isAbsoluteUrl = inputUrl => {
|
|
|
8
8
|
return false;
|
|
9
9
|
}
|
|
10
10
|
};
|
|
11
|
-
|
|
11
|
+
let LOCALHOST = "http://localhost";
|
|
12
12
|
class RequestUrl {
|
|
13
|
-
_isAbsolute;
|
|
14
|
-
_url;
|
|
15
13
|
constructor(inputUrl) {
|
|
16
14
|
if (isAbsoluteUrl(inputUrl)) {
|
|
17
15
|
this._url = new URL(inputUrl);
|
|
@@ -21,10 +19,10 @@ class RequestUrl {
|
|
|
21
19
|
this._isAbsolute = false;
|
|
22
20
|
}
|
|
23
21
|
}
|
|
24
|
-
|
|
22
|
+
_setSearchParam(key, value) {
|
|
25
23
|
this._url.searchParams.set(key, value);
|
|
26
24
|
}
|
|
27
|
-
|
|
25
|
+
_value() {
|
|
28
26
|
if (this._isAbsolute) {
|
|
29
27
|
return this._url.href;
|
|
30
28
|
} else {
|
package/lib/requestUrl.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requestUrl.js","sources":["../src/requestUrl.ts"],"sourcesContent":["// Url class for absolute and relative urls.\n\nconst isAbsoluteUrl = (inputUrl: string) => {\n try {\n new URL(inputUrl);\n return true;\n } catch {\n return false;\n }\n}
|
|
1
|
+
{"version":3,"file":"requestUrl.js","sources":["../src/requestUrl.ts"],"sourcesContent":["// Url class for absolute and relative urls.\n\nconst isAbsoluteUrl = (inputUrl: string) => {\n try {\n new URL(inputUrl);\n return true;\n } catch {\n return false;\n }\n};\n\nconst LOCALHOST = \"http://localhost\";\n\nclass RequestUrl {\n private isAbsolute: boolean;\n private url: URL;\n\n constructor(inputUrl: string) {\n if (isAbsoluteUrl(inputUrl)) {\n this.url = new URL(inputUrl);\n this.isAbsolute = true;\n } else {\n this.url = new URL(inputUrl, LOCALHOST);\n this.isAbsolute = false;\n }\n }\n\n setSearchParam(key: string, value: string) {\n this.url.searchParams.set(key, value);\n }\n\n value() {\n if (this.isAbsolute) {\n return this.url.href;\n } else {\n return this.url.href.slice(LOCALHOST.length);\n }\n }\n}\n\nexport default RequestUrl;\n"],"names":["url","isAbsolute","setSearchParam","value"],"mappings":"AAAA;;AAEA,IAAM,aAAa,GAAI,QAAgB,IAAK;EAC1C,IAAI;IACF,IAAI,GAAG,CAAC,QAAQ,CAAC;AACjB,IAAA,OAAO,IAAI;AACb,EAAA,CAAC,CAAC,MAAM;AACN,IAAA,OAAO,KAAK;AACd,EAAA;AACF,CAAC;AAED,IAAM,SAAS,GAAG,kBAAkB;AAEpC,MAAM,UAAU,CAAC;EAIf,WAAW,CAAC,QAAgB,EAAE;AAC5B,IAAA,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE;AAC3B,MAAA,IAAI,CAACA,IAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC;MAC5B,IAAI,CAACC,WAAU,GAAG,IAAI;AACxB,IAAA,CAAC,MAAM;MACL,IAAI,CAACD,IAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC;MACvC,IAAI,CAACC,WAAU,GAAG,KAAK;AACzB,IAAA;AACF,EAAA;AAEAC,EAAAA,eAAcA,CAAC,GAAW,EAAE,KAAa,EAAE;IACzC,IAAI,CAACF,IAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;AACvC,EAAA;AAEAG,EAAAA,MAAKA,GAAG;IACN,IAAI,IAAI,CAACF,WAAU,EAAE;AACnB,MAAA,OAAO,IAAI,CAACD,IAAG,CAAC,IAAI;AACtB,IAAA,CAAC,MAAM;MACL,OAAO,IAAI,CAACA,IAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC;AAC9C,IAAA;AACF,EAAA;AACF;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"saveStateHandler.d.ts","sourceRoot":"","sources":["../src/saveStateHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"saveStateHandler.d.ts","sourceRoot":"","sources":["../src/saveStateHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,OAAO,EACP,QAAQ,EACR,eAAe,EACf,mBAAmB,EACpB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAQ,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC3C,OAAO,KAAK,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAI9E,MAAM,WAAW,UAAU;IACzB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,UAAU,sBAAsB;IAC9B,cAAc,EAAE,cAAc,CAAC;IAC/B,WAAW,EAAE,WAAW,CAAC;IACzB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAC9C,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAC9C,QAAQ,EAAE,QAAQ,CAAC;IACnB,eAAe,EAAE,eAAe,CAAC;IACjC,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,SAAS,EAAE,OAAO,GAAG,MAAM,CAAC;CAC7B;AAED,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACnC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,qBAAqB,CAAC,CAAwB;IACtD,OAAO,CAAC,qBAAqB,CAAC,CAAwB;IACtD,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,mBAAmB,CAAsB;IACjD,OAAO,CAAC,eAAe,CAAmB;gBAE9B,EACV,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,OAAO,EACP,qBAAqB,EACrB,qBAAqB,EACrB,QAAQ,EACR,eAAe,EACf,mBAAmB,EACnB,SAAS,GACV,EAAE,sBAAsB;IAalB,qBAAqB,IAAI,MAAM,GAAG,IAAI;IActC,QAAQ,IAAI,UAAU;IAgCtB,mBAAmB,IAAI,IAAI,GAAG,UAAU;IAcxC,SAAS,IAAI,IAAI;IAoBjB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO;IAgBrC,uBAAuB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IA2CtE,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,kBAAkB;CAe3B"}
|
package/lib/saveStateHandler.js
CHANGED
|
@@ -1,27 +1,17 @@
|
|
|
1
1
|
import { isInt } from './util.js';
|
|
2
2
|
|
|
3
3
|
class SaveStateHandler {
|
|
4
|
-
_addToSelection;
|
|
5
|
-
_getNodeById;
|
|
6
|
-
_getSelectedNodes;
|
|
7
|
-
_getTree;
|
|
8
|
-
_onGetStateFromStorage;
|
|
9
|
-
_onSetStateFromStorage;
|
|
10
|
-
_openNode;
|
|
11
|
-
_refreshElements;
|
|
12
|
-
_removeFromSelection;
|
|
13
|
-
_saveStateOption;
|
|
14
4
|
constructor({
|
|
15
|
-
addToSelection,
|
|
16
|
-
getNodeById,
|
|
17
|
-
getSelectedNodes,
|
|
18
|
-
getTree,
|
|
19
|
-
onGetStateFromStorage,
|
|
20
|
-
onSetStateFromStorage,
|
|
21
|
-
openNode,
|
|
22
|
-
refreshElements,
|
|
23
|
-
removeFromSelection,
|
|
24
|
-
saveState
|
|
5
|
+
_addToSelection: addToSelection,
|
|
6
|
+
_getNodeById: getNodeById,
|
|
7
|
+
_getSelectedNodes: getSelectedNodes,
|
|
8
|
+
_getTree: getTree,
|
|
9
|
+
_onGetStateFromStorage: onGetStateFromStorage,
|
|
10
|
+
_onSetStateFromStorage: onSetStateFromStorage,
|
|
11
|
+
_openNode: openNode,
|
|
12
|
+
_refreshElements: refreshElements,
|
|
13
|
+
_removeFromSelection: removeFromSelection,
|
|
14
|
+
_saveState: saveState
|
|
25
15
|
}) {
|
|
26
16
|
this._addToSelection = addToSelection;
|
|
27
17
|
this._getNodeById = getNodeById;
|
|
@@ -34,20 +24,20 @@ class SaveStateHandler {
|
|
|
34
24
|
this._removeFromSelection = removeFromSelection;
|
|
35
25
|
this._saveStateOption = saveState;
|
|
36
26
|
}
|
|
37
|
-
|
|
27
|
+
_getNodeIdToBeSelected() {
|
|
38
28
|
if (!this._saveStateOption) {
|
|
39
29
|
return null;
|
|
40
30
|
}
|
|
41
|
-
|
|
31
|
+
let state = this._getStateFromStorage();
|
|
42
32
|
if (state?.selected_node) {
|
|
43
33
|
return state.selected_node[0] ?? null;
|
|
44
34
|
} else {
|
|
45
35
|
return null;
|
|
46
36
|
}
|
|
47
37
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
38
|
+
_getState() {
|
|
39
|
+
let getOpenNodeIds = () => {
|
|
40
|
+
let openNodes = [];
|
|
51
41
|
this._getTree()?.iterate(node => {
|
|
52
42
|
if (node.is_open && node.id && node.hasChildren()) {
|
|
53
43
|
openNodes.push(node.id);
|
|
@@ -56,8 +46,8 @@ class SaveStateHandler {
|
|
|
56
46
|
});
|
|
57
47
|
return openNodes;
|
|
58
48
|
};
|
|
59
|
-
|
|
60
|
-
|
|
49
|
+
let getSelectedNodeIds = () => {
|
|
50
|
+
let selectedNodeIds = [];
|
|
61
51
|
this._getSelectedNodes().forEach(node => {
|
|
62
52
|
if (node.id != null) {
|
|
63
53
|
selectedNodeIds.push(node.id);
|
|
@@ -70,22 +60,22 @@ class SaveStateHandler {
|
|
|
70
60
|
selected_node: getSelectedNodeIds()
|
|
71
61
|
};
|
|
72
62
|
}
|
|
73
|
-
|
|
63
|
+
_getStateFromStorage() {
|
|
74
64
|
if (!this._saveStateOption) {
|
|
75
65
|
return null;
|
|
76
66
|
}
|
|
77
|
-
|
|
67
|
+
let jsonData = this._loadFromStorage();
|
|
78
68
|
if (jsonData) {
|
|
79
69
|
return this._parseState(jsonData);
|
|
80
70
|
} else {
|
|
81
71
|
return null;
|
|
82
72
|
}
|
|
83
73
|
}
|
|
84
|
-
|
|
74
|
+
_saveState() {
|
|
85
75
|
if (!this._saveStateOption) {
|
|
86
76
|
return;
|
|
87
77
|
}
|
|
88
|
-
|
|
78
|
+
let state = JSON.stringify(this._getState());
|
|
89
79
|
if (this._onSetStateFromStorage) {
|
|
90
80
|
this._onSetStateFromStorage(state);
|
|
91
81
|
} else {
|
|
@@ -94,11 +84,11 @@ class SaveStateHandler {
|
|
|
94
84
|
}
|
|
95
85
|
|
|
96
86
|
/*
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
87
|
+
Set initial state
|
|
88
|
+
Don't handle nodes that are loaded on demand
|
|
89
|
+
result: must load on demand (boolean)
|
|
90
|
+
*/
|
|
91
|
+
_setInitialState(state) {
|
|
102
92
|
let mustLoadOnDemand = false;
|
|
103
93
|
if (state.open_nodes) {
|
|
104
94
|
mustLoadOnDemand = this._openInitialNodes(state.open_nodes);
|
|
@@ -109,15 +99,15 @@ class SaveStateHandler {
|
|
|
109
99
|
}
|
|
110
100
|
return mustLoadOnDemand;
|
|
111
101
|
}
|
|
112
|
-
async
|
|
102
|
+
async _setInitialStateOnDemand(state) {
|
|
113
103
|
let nodeIds = state.open_nodes;
|
|
114
|
-
|
|
104
|
+
let openNodes = async () => {
|
|
115
105
|
if (!nodeIds) {
|
|
116
106
|
return;
|
|
117
107
|
}
|
|
118
|
-
|
|
119
|
-
for (
|
|
120
|
-
|
|
108
|
+
let newNodesIds = [];
|
|
109
|
+
for (let nodeId of nodeIds) {
|
|
110
|
+
let node = this._getNodeById(nodeId);
|
|
121
111
|
if (!node) {
|
|
122
112
|
newNodesIds.push(nodeId);
|
|
123
113
|
} else {
|
|
@@ -137,7 +127,7 @@ class SaveStateHandler {
|
|
|
137
127
|
}
|
|
138
128
|
}
|
|
139
129
|
};
|
|
140
|
-
|
|
130
|
+
let loadAndOpenNode = async node => {
|
|
141
131
|
await this._openNode(node, false);
|
|
142
132
|
await openNodes();
|
|
143
133
|
};
|
|
@@ -159,8 +149,8 @@ class SaveStateHandler {
|
|
|
159
149
|
}
|
|
160
150
|
_openInitialNodes(nodeIds) {
|
|
161
151
|
let mustLoadOnDemand = false;
|
|
162
|
-
for (
|
|
163
|
-
|
|
152
|
+
for (let nodeId of nodeIds) {
|
|
153
|
+
let node = this._getNodeById(nodeId);
|
|
164
154
|
if (node) {
|
|
165
155
|
if (!node.load_on_demand) {
|
|
166
156
|
node.is_open = true;
|
|
@@ -172,7 +162,7 @@ class SaveStateHandler {
|
|
|
172
162
|
return mustLoadOnDemand;
|
|
173
163
|
}
|
|
174
164
|
_parseState(jsonData) {
|
|
175
|
-
|
|
165
|
+
let state = JSON.parse(jsonData);
|
|
176
166
|
|
|
177
167
|
// Check if selected_node is an int (instead of an array)
|
|
178
168
|
if (state.selected_node && isInt(state.selected_node)) {
|
|
@@ -182,15 +172,15 @@ class SaveStateHandler {
|
|
|
182
172
|
return state;
|
|
183
173
|
}
|
|
184
174
|
_resetSelection() {
|
|
185
|
-
|
|
175
|
+
let selectedNodes = this._getSelectedNodes();
|
|
186
176
|
selectedNodes.forEach(node => {
|
|
187
177
|
this._removeFromSelection(node);
|
|
188
178
|
});
|
|
189
179
|
}
|
|
190
180
|
_selectInitialNodes(nodeIds) {
|
|
191
181
|
let selectCount = 0;
|
|
192
|
-
for (
|
|
193
|
-
|
|
182
|
+
for (let nodeId of nodeIds) {
|
|
183
|
+
let node = this._getNodeById(nodeId);
|
|
194
184
|
if (node) {
|
|
195
185
|
selectCount += 1;
|
|
196
186
|
this._addToSelection(node);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"saveStateHandler.js","sources":["../src/saveStateHandler.ts"],"sourcesContent":["import type {\n AddToSelection,\n GetNodeById,\n GetSelectedNodes,\n GetTree,\n OpenNode,\n RefreshElements,\n RemoveFromSelection,\n} from \"./methodTypes\";\nimport type { Node, NodeId } from \"./node\";\nimport type { OnGetStateFromStorage, OnSetStateFromStorage } from \"./options\";\n\nimport { isInt } from \"./util\";\n\nexport interface SavedState {\n open_nodes?: NodeId[];\n selected_node?: NodeId[];\n}\n\ninterface SaveStateHandlerParams {\n addToSelection: AddToSelection;\n getNodeById: GetNodeById;\n getSelectedNodes: GetSelectedNodes;\n getTree: GetTree;\n onGetStateFromStorage?: OnGetStateFromStorage;\n onSetStateFromStorage?: OnSetStateFromStorage;\n openNode: OpenNode;\n refreshElements: RefreshElements;\n removeFromSelection: RemoveFromSelection;\n saveState: boolean | string;\n}\n\nexport default class SaveStateHandler {\n private addToSelection: AddToSelection;\n private getNodeById: GetNodeById;\n private getSelectedNodes: GetSelectedNodes;\n private getTree: GetTree;\n private onGetStateFromStorage?: OnGetStateFromStorage;\n private onSetStateFromStorage?: OnSetStateFromStorage;\n private openNode: OpenNode;\n private refreshElements: RefreshElements;\n private removeFromSelection: RemoveFromSelection;\n private saveStateOption: boolean | string;\n\n constructor({\n addToSelection,\n getNodeById,\n getSelectedNodes,\n getTree,\n onGetStateFromStorage,\n onSetStateFromStorage,\n openNode,\n refreshElements,\n removeFromSelection,\n saveState,\n }: SaveStateHandlerParams) {\n this.addToSelection = addToSelection;\n this.getNodeById = getNodeById;\n this.getSelectedNodes = getSelectedNodes;\n this.getTree = getTree;\n this.onGetStateFromStorage = onGetStateFromStorage;\n this.onSetStateFromStorage = onSetStateFromStorage;\n this.openNode = openNode;\n this.refreshElements = refreshElements;\n this.removeFromSelection = removeFromSelection;\n this.saveStateOption = saveState;\n }\n\n public getNodeIdToBeSelected(): NodeId | null {\n if (!this.saveStateOption) {\n return null;\n }\n\n const state = this.getStateFromStorage();\n\n if (state?.selected_node) {\n return state.selected_node[0] ?? null;\n } else {\n return null;\n }\n }\n\n public getState(): SavedState {\n const getOpenNodeIds = (): NodeId[] => {\n const openNodes: NodeId[] = [];\n\n this.getTree()?.iterate((node: Node) => {\n if (node.is_open && node.id && node.hasChildren()) {\n openNodes.push(node.id);\n }\n return true;\n });\n\n return openNodes;\n };\n\n const getSelectedNodeIds = (): NodeId[] => {\n const selectedNodeIds: NodeId[] = [];\n\n this.getSelectedNodes().forEach((node) => {\n if (node.id != null) {\n selectedNodeIds.push(node.id);\n }\n });\n\n return selectedNodeIds;\n };\n\n return {\n open_nodes: getOpenNodeIds(),\n selected_node: getSelectedNodeIds(),\n };\n }\n\n public getStateFromStorage(): null | SavedState {\n if (!this.saveStateOption) {\n return null;\n }\n\n const jsonData = this.loadFromStorage();\n\n if (jsonData) {\n return this.parseState(jsonData);\n } else {\n return null;\n }\n }\n\n public saveState(): void {\n if (!this.saveStateOption) {\n return;\n }\n\n const state = JSON.stringify(this.getState());\n\n if (this.onSetStateFromStorage) {\n this.onSetStateFromStorage(state);\n } else {\n localStorage.setItem(this.getKeyName(), state);\n }\n }\n\n /*\n Set initial state\n Don't handle nodes that are loaded on demand\n\n result: must load on demand (boolean)\n */\n public setInitialState(state: SavedState): boolean {\n let mustLoadOnDemand = false;\n\n if (state.open_nodes) {\n mustLoadOnDemand = this.openInitialNodes(state.open_nodes);\n }\n\n this.resetSelection();\n\n if (state.selected_node) {\n this.selectInitialNodes(state.selected_node);\n }\n\n return mustLoadOnDemand;\n }\n\n public async setInitialStateOnDemand(\n state: SavedState,\n ): Promise<void> {\n let nodeIds = state.open_nodes;\n\n const openNodes = async () => {\n if (!nodeIds) {\n return;\n }\n\n const newNodesIds = [];\n\n for (const nodeId of nodeIds) {\n const node = this.getNodeById(nodeId);\n\n if (!node) {\n newNodesIds.push(nodeId);\n } else {\n if (!node.is_loading) {\n if (node.load_on_demand) {\n await loadAndOpenNode(node);\n } else {\n await this.openNode(node, false);\n }\n }\n }\n }\n\n nodeIds = newNodesIds;\n\n if (state.selected_node) {\n if (this.selectInitialNodes(state.selected_node)) {\n this.refreshElements(null);\n }\n }\n };\n\n const loadAndOpenNode = async (node: Node) => {\n await this.openNode(node, false);\n await openNodes();\n };\n\n await openNodes();\n }\n\n private getKeyName(): string {\n if (typeof this.saveStateOption === \"string\") {\n return this.saveStateOption;\n } else {\n return \"tree\";\n }\n }\n\n private loadFromStorage(): null | string {\n if (this.onGetStateFromStorage) {\n return this.onGetStateFromStorage();\n } else {\n return localStorage.getItem(this.getKeyName());\n }\n }\n\n private openInitialNodes(nodeIds: NodeId[]): boolean {\n let mustLoadOnDemand = false;\n\n for (const nodeId of nodeIds) {\n const node = this.getNodeById(nodeId);\n\n if (node) {\n if (!node.load_on_demand) {\n node.is_open = true;\n } else {\n mustLoadOnDemand = true;\n }\n }\n }\n\n return mustLoadOnDemand;\n }\n\n private parseState(jsonData: string): SavedState {\n const state = JSON.parse(jsonData) as Record<string, unknown>;\n\n // Check if selected_node is an int (instead of an array)\n if (state.selected_node && isInt(state.selected_node)) {\n // Convert to array\n state.selected_node = [state.selected_node];\n }\n\n return state;\n }\n\n private resetSelection(): void {\n const selectedNodes = this.getSelectedNodes();\n\n selectedNodes.forEach((node) => {\n this.removeFromSelection(node);\n });\n }\n\n private selectInitialNodes(nodeIds: NodeId[]): boolean {\n let selectCount = 0;\n\n for (const nodeId of nodeIds) {\n const node = this.getNodeById(nodeId);\n\n if (node) {\n selectCount += 1;\n\n this.addToSelection(node);\n }\n }\n\n return selectCount !== 0;\n }\n}\n"],"names":["addToSelection","getNodeById","getSelectedNodes","getTree","onGetStateFromStorage","onSetStateFromStorage","openNode","refreshElements","removeFromSelection","saveStateOption","loadFromStorage","parseState","getKeyName","openInitialNodes","resetSelection","selectInitialNodes"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"saveStateHandler.js","sources":["../src/saveStateHandler.ts"],"sourcesContent":["import type {\n AddToSelection,\n GetNodeById,\n GetSelectedNodes,\n GetTree,\n OpenNode,\n RefreshElements,\n RemoveFromSelection,\n} from \"./methodTypes\";\nimport type { Node, NodeId } from \"./node\";\nimport type { OnGetStateFromStorage, OnSetStateFromStorage } from \"./options\";\n\nimport { isInt } from \"./util\";\n\nexport interface SavedState {\n open_nodes?: NodeId[];\n selected_node?: NodeId[];\n}\n\ninterface SaveStateHandlerParams {\n addToSelection: AddToSelection;\n getNodeById: GetNodeById;\n getSelectedNodes: GetSelectedNodes;\n getTree: GetTree;\n onGetStateFromStorage?: OnGetStateFromStorage;\n onSetStateFromStorage?: OnSetStateFromStorage;\n openNode: OpenNode;\n refreshElements: RefreshElements;\n removeFromSelection: RemoveFromSelection;\n saveState: boolean | string;\n}\n\nexport default class SaveStateHandler {\n private addToSelection: AddToSelection;\n private getNodeById: GetNodeById;\n private getSelectedNodes: GetSelectedNodes;\n private getTree: GetTree;\n private onGetStateFromStorage?: OnGetStateFromStorage;\n private onSetStateFromStorage?: OnSetStateFromStorage;\n private openNode: OpenNode;\n private refreshElements: RefreshElements;\n private removeFromSelection: RemoveFromSelection;\n private saveStateOption: boolean | string;\n\n constructor({\n addToSelection,\n getNodeById,\n getSelectedNodes,\n getTree,\n onGetStateFromStorage,\n onSetStateFromStorage,\n openNode,\n refreshElements,\n removeFromSelection,\n saveState,\n }: SaveStateHandlerParams) {\n this.addToSelection = addToSelection;\n this.getNodeById = getNodeById;\n this.getSelectedNodes = getSelectedNodes;\n this.getTree = getTree;\n this.onGetStateFromStorage = onGetStateFromStorage;\n this.onSetStateFromStorage = onSetStateFromStorage;\n this.openNode = openNode;\n this.refreshElements = refreshElements;\n this.removeFromSelection = removeFromSelection;\n this.saveStateOption = saveState;\n }\n\n public getNodeIdToBeSelected(): NodeId | null {\n if (!this.saveStateOption) {\n return null;\n }\n\n const state = this.getStateFromStorage();\n\n if (state?.selected_node) {\n return state.selected_node[0] ?? null;\n } else {\n return null;\n }\n }\n\n public getState(): SavedState {\n const getOpenNodeIds = (): NodeId[] => {\n const openNodes: NodeId[] = [];\n\n this.getTree()?.iterate((node: Node) => {\n if (node.is_open && node.id && node.hasChildren()) {\n openNodes.push(node.id);\n }\n return true;\n });\n\n return openNodes;\n };\n\n const getSelectedNodeIds = (): NodeId[] => {\n const selectedNodeIds: NodeId[] = [];\n\n this.getSelectedNodes().forEach((node) => {\n if (node.id != null) {\n selectedNodeIds.push(node.id);\n }\n });\n\n return selectedNodeIds;\n };\n\n return {\n open_nodes: getOpenNodeIds(),\n selected_node: getSelectedNodeIds(),\n };\n }\n\n public getStateFromStorage(): null | SavedState {\n if (!this.saveStateOption) {\n return null;\n }\n\n const jsonData = this.loadFromStorage();\n\n if (jsonData) {\n return this.parseState(jsonData);\n } else {\n return null;\n }\n }\n\n public saveState(): void {\n if (!this.saveStateOption) {\n return;\n }\n\n const state = JSON.stringify(this.getState());\n\n if (this.onSetStateFromStorage) {\n this.onSetStateFromStorage(state);\n } else {\n localStorage.setItem(this.getKeyName(), state);\n }\n }\n\n /*\n Set initial state\n Don't handle nodes that are loaded on demand\n\n result: must load on demand (boolean)\n */\n public setInitialState(state: SavedState): boolean {\n let mustLoadOnDemand = false;\n\n if (state.open_nodes) {\n mustLoadOnDemand = this.openInitialNodes(state.open_nodes);\n }\n\n this.resetSelection();\n\n if (state.selected_node) {\n this.selectInitialNodes(state.selected_node);\n }\n\n return mustLoadOnDemand;\n }\n\n public async setInitialStateOnDemand(state: SavedState): Promise<void> {\n let nodeIds = state.open_nodes;\n\n const openNodes = async () => {\n if (!nodeIds) {\n return;\n }\n\n const newNodesIds = [];\n\n for (const nodeId of nodeIds) {\n const node = this.getNodeById(nodeId);\n\n if (!node) {\n newNodesIds.push(nodeId);\n } else {\n if (!node.is_loading) {\n if (node.load_on_demand) {\n await loadAndOpenNode(node);\n } else {\n await this.openNode(node, false);\n }\n }\n }\n }\n\n nodeIds = newNodesIds;\n\n if (state.selected_node) {\n if (this.selectInitialNodes(state.selected_node)) {\n this.refreshElements(null);\n }\n }\n };\n\n const loadAndOpenNode = async (node: Node) => {\n await this.openNode(node, false);\n await openNodes();\n };\n\n await openNodes();\n }\n\n private getKeyName(): string {\n if (typeof this.saveStateOption === \"string\") {\n return this.saveStateOption;\n } else {\n return \"tree\";\n }\n }\n\n private loadFromStorage(): null | string {\n if (this.onGetStateFromStorage) {\n return this.onGetStateFromStorage();\n } else {\n return localStorage.getItem(this.getKeyName());\n }\n }\n\n private openInitialNodes(nodeIds: NodeId[]): boolean {\n let mustLoadOnDemand = false;\n\n for (const nodeId of nodeIds) {\n const node = this.getNodeById(nodeId);\n\n if (node) {\n if (!node.load_on_demand) {\n node.is_open = true;\n } else {\n mustLoadOnDemand = true;\n }\n }\n }\n\n return mustLoadOnDemand;\n }\n\n private parseState(jsonData: string): SavedState {\n const state = JSON.parse(jsonData) as Record<string, unknown>;\n\n // Check if selected_node is an int (instead of an array)\n if (state.selected_node && isInt(state.selected_node)) {\n // Convert to array\n state.selected_node = [state.selected_node];\n }\n\n return state;\n }\n\n private resetSelection(): void {\n const selectedNodes = this.getSelectedNodes();\n\n selectedNodes.forEach((node) => {\n this.removeFromSelection(node);\n });\n }\n\n private selectInitialNodes(nodeIds: NodeId[]): boolean {\n let selectCount = 0;\n\n for (const nodeId of nodeIds) {\n const node = this.getNodeById(nodeId);\n\n if (node) {\n selectCount += 1;\n\n this.addToSelection(node);\n }\n }\n\n return selectCount !== 0;\n }\n}\n"],"names":["addToSelection","getNodeById","getSelectedNodes","getTree","onGetStateFromStorage","onSetStateFromStorage","openNode","refreshElements","removeFromSelection","saveStateOption","getNodeIdToBeSelected","getStateFromStorage","getState","loadFromStorage","parseState","saveState","getKeyName","setInitialState","openInitialNodes","resetSelection","selectInitialNodes","setInitialStateOnDemand"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"containerScrollParent.d.ts","sourceRoot":"","sources":["../../src/scrollHandler/containerScrollParent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"containerScrollParent.d.ts","sourceRoot":"","sources":["../../src/scrollHandler/containerScrollParent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,yBAAyB,EACzB,uBAAuB,EACxB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,CAAC,OAAO,OAAO,qBAAsB,SAAQ,YAAY;IAC7D,OAAO,CAAC,kBAAkB,CAAC,CAAS;IACpC,OAAO,CAAC,eAAe,CAAC,CAAS;IAE1B,aAAa;IAOpB,SAAS,CAAC,+BAA+B,CACvC,KAAK,EAAE,MAAM,GACZ,yBAAyB,GAAG,SAAS;IAkBxC,SAAS,CAAC,6BAA6B,CACrC,KAAK,EAAE,MAAM,GACZ,SAAS,GAAG,uBAAuB;IAYtC,OAAO,CAAC,qBAAqB;IAS7B,OAAO,CAAC,kBAAkB;CAK3B"}
|
|
@@ -2,20 +2,18 @@ import { getElementPosition, getOffsetTop } from '../positionUtils.js';
|
|
|
2
2
|
import { ScrollParent } from './scrollParent.js';
|
|
3
3
|
|
|
4
4
|
class ContainerScrollParent extends ScrollParent {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
stopScrolling() {
|
|
8
|
-
super.stopScrolling();
|
|
5
|
+
_stopScrolling() {
|
|
6
|
+
super._stopScrolling();
|
|
9
7
|
this._horizontalScrollDirection = undefined;
|
|
10
8
|
this._verticalScrollDirection = undefined;
|
|
11
9
|
}
|
|
12
10
|
_getNewHorizontalScrollDirection(pageX) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
11
|
+
let scrollParentOffset = getElementPosition(this._container);
|
|
12
|
+
let containerWidth = this._container.getBoundingClientRect().width;
|
|
13
|
+
let rightEdge = scrollParentOffset.left + containerWidth;
|
|
14
|
+
let leftEdge = scrollParentOffset.left;
|
|
15
|
+
let isNearRightEdge = pageX > rightEdge - 20;
|
|
16
|
+
let isNearLeftEdge = pageX < leftEdge + 20;
|
|
19
17
|
if (isNearRightEdge) {
|
|
20
18
|
return "right";
|
|
21
19
|
} else if (isNearLeftEdge) {
|
|
@@ -34,7 +32,7 @@ class ContainerScrollParent extends ScrollParent {
|
|
|
34
32
|
}
|
|
35
33
|
_getScrollParentBottom() {
|
|
36
34
|
if (this._scrollParentBottom == null) {
|
|
37
|
-
|
|
35
|
+
let containerHeight = this._container.getBoundingClientRect().height;
|
|
38
36
|
this._scrollParentBottom = this._getScrollParentTop() + containerHeight;
|
|
39
37
|
}
|
|
40
38
|
return this._scrollParentBottom;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"containerScrollParent.js","sources":["../../src/scrollHandler/containerScrollParent.ts"],"sourcesContent":["import type {\n
|
|
1
|
+
{"version":3,"file":"containerScrollParent.js","sources":["../../src/scrollHandler/containerScrollParent.ts"],"sourcesContent":["import type {\n HorizontalScrollDirection,\n VerticalScrollDirection,\n} from \"./scrollParent\";\n\nimport { getElementPosition, getOffsetTop } from \"../positionUtils\";\nimport { ScrollParent } from \"./scrollParent\";\n\nexport default class ContainerScrollParent extends ScrollParent {\n private scrollParentBottom?: number;\n private scrollParentTop?: number;\n\n public stopScrolling() {\n super.stopScrolling();\n\n this.horizontalScrollDirection = undefined;\n this.verticalScrollDirection = undefined;\n }\n\n protected getNewHorizontalScrollDirection(\n pageX: number,\n ): HorizontalScrollDirection | undefined {\n const scrollParentOffset = getElementPosition(this.container);\n const containerWidth = this.container.getBoundingClientRect().width;\n\n const rightEdge = scrollParentOffset.left + containerWidth;\n const leftEdge = scrollParentOffset.left;\n const isNearRightEdge = pageX > rightEdge - 20;\n const isNearLeftEdge = pageX < leftEdge + 20;\n\n if (isNearRightEdge) {\n return \"right\";\n } else if (isNearLeftEdge) {\n return \"left\";\n }\n\n return undefined;\n }\n\n protected getNewVerticalScrollDirection(\n pageY: number,\n ): undefined | VerticalScrollDirection {\n if (pageY < this.getScrollParentTop()) {\n return \"top\";\n }\n\n if (pageY > this.getScrollParentBottom()) {\n return \"bottom\";\n }\n\n return undefined;\n }\n\n private getScrollParentBottom() {\n if (this.scrollParentBottom == null) {\n const containerHeight = this.container.getBoundingClientRect().height;\n this.scrollParentBottom = this.getScrollParentTop() + containerHeight;\n }\n\n return this.scrollParentBottom;\n }\n\n private getScrollParentTop() {\n this.scrollParentTop ??= getOffsetTop(this.container);\n\n return this.scrollParentTop;\n }\n}\n"],"names":["stopScrolling","horizontalScrollDirection","verticalScrollDirection","getNewHorizontalScrollDirection","container","getNewVerticalScrollDirection","getScrollParentTop","getScrollParentBottom","scrollParentBottom","scrollParentTop"],"mappings":";;;AAQe,MAAM,qBAAqB,SAAS,YAAY,CAAC;AAIvDA,EAAAA,cAAaA,GAAG;IACrB,KAAK,CAACA,cAAa,EAAE;IAErB,IAAI,CAACC,0BAAyB,GAAG,SAAS;IAC1C,IAAI,CAACC,wBAAuB,GAAG,SAAS;AAC1C,EAAA;EAEUC,gCAA+BA,CACvC,KAAa,EAC0B;AACvC,IAAA,IAAM,kBAAkB,GAAG,kBAAkB,CAAC,IAAI,CAACC,UAAS,CAAC;IAC7D,IAAM,cAAc,GAAG,IAAI,CAACA,UAAS,CAAC,qBAAqB,EAAE,CAAC,KAAK;AAEnE,IAAA,IAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,GAAG,cAAc;AAC1D,IAAA,IAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI;AACxC,IAAA,IAAM,eAAe,GAAG,KAAK,GAAG,SAAS,GAAG,EAAE;AAC9C,IAAA,IAAM,cAAc,GAAG,KAAK,GAAG,QAAQ,GAAG,EAAE;AAE5C,IAAA,IAAI,eAAe,EAAE;AACnB,MAAA,OAAO,OAAO;IAChB,CAAC,MAAM,IAAI,cAAc,EAAE;AACzB,MAAA,OAAO,MAAM;AACf,IAAA;AAEA,IAAA,OAAO,SAAS;AAClB,EAAA;EAEUC,8BAA6BA,CACrC,KAAa,EACwB;AACrC,IAAA,IAAI,KAAK,GAAG,IAAI,CAACC,mBAAkB,EAAE,EAAE;AACrC,MAAA,OAAO,KAAK;AACd,IAAA;AAEA,IAAA,IAAI,KAAK,GAAG,IAAI,CAACC,sBAAqB,EAAE,EAAE;AACxC,MAAA,OAAO,QAAQ;AACjB,IAAA;AAEA,IAAA,OAAO,SAAS;AAClB,EAAA;AAEQA,EAAAA,sBAAqBA,GAAG;AAC9B,IAAA,IAAI,IAAI,CAACC,mBAAkB,IAAI,IAAI,EAAE;MACnC,IAAM,eAAe,GAAG,IAAI,CAACJ,UAAS,CAAC,qBAAqB,EAAE,CAAC,MAAM;MACrE,IAAI,CAACI,mBAAkB,GAAG,IAAI,CAACF,mBAAkB,EAAE,GAAG,eAAe;AACvE,IAAA;IAEA,OAAO,IAAI,CAACE,mBAAkB;AAChC,EAAA;AAEQF,EAAAA,mBAAkBA,GAAG;IAC3B,IAAI,CAACG,gBAAe,KAAK,YAAY,CAAC,IAAI,CAACL,UAAS,CAAC;IAErD,OAAO,IAAI,CAACK,gBAAe;AAC7B,EAAA;AACF;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createScrollParent.d.ts","sourceRoot":"","sources":["../../src/scrollHandler/createScrollParent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAkCnD,QAAA,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"createScrollParent.d.ts","sourceRoot":"","sources":["../../src/scrollHandler/createScrollParent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAkCnD,QAAA,MAAM,kBAAkB,GACtB,aAAa,WAAW,EACxB,iBAAiB,MAAM,IAAI,KAC1B,YAWF,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import ContainerScrollParent from './containerScrollParent.js';
|
|
2
2
|
import DocumentScrollParent from './documentScrollParent.js';
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
let isOverflow = overflowValue => overflowValue === "auto" || overflowValue === "scroll";
|
|
5
|
+
let hasOverFlow = element => {
|
|
6
|
+
let style = getComputedStyle(element);
|
|
7
7
|
return isOverflow(style.overflowX) || isOverflow(style.overflowY);
|
|
8
8
|
};
|
|
9
|
-
|
|
9
|
+
let getParentWithOverflow = treeElement => {
|
|
10
10
|
if (hasOverFlow(treeElement)) {
|
|
11
11
|
return treeElement;
|
|
12
12
|
}
|
|
@@ -19,17 +19,17 @@ const getParentWithOverflow = treeElement => {
|
|
|
19
19
|
}
|
|
20
20
|
return null;
|
|
21
21
|
};
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
let createScrollParent = (treeElement, refreshHitAreas) => {
|
|
23
|
+
let container = getParentWithOverflow(treeElement);
|
|
24
24
|
if (container && container.tagName !== "HTML") {
|
|
25
25
|
return new ContainerScrollParent({
|
|
26
|
-
container,
|
|
27
|
-
refreshHitAreas
|
|
26
|
+
_container: container,
|
|
27
|
+
_refreshHitAreas: refreshHitAreas
|
|
28
28
|
});
|
|
29
29
|
} else {
|
|
30
30
|
return new DocumentScrollParent({
|
|
31
|
-
refreshHitAreas,
|
|
32
|
-
treeElement
|
|
31
|
+
_refreshHitAreas: refreshHitAreas,
|
|
32
|
+
_treeElement: treeElement
|
|
33
33
|
});
|
|
34
34
|
}
|
|
35
35
|
};
|