tree-element 0.4.0 → 0.4.1
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 +22 -20
- package/lib/dataLoader.d.ts.map +1 -1
- package/lib/dataLoader.js +4 -1
- package/lib/dataLoader.js.map +1 -1
- package/lib/dragAndDropHandler/generateHitAreas.d.ts.map +1 -1
- package/lib/dragAndDropHandler/generateHitAreas.js +3 -2
- package/lib/dragAndDropHandler/generateHitAreas.js.map +1 -1
- package/lib/dragAndDropHandler/index.d.ts +2 -4
- package/lib/dragAndDropHandler/index.d.ts.map +1 -1
- package/lib/dragAndDropHandler/index.js +2 -9
- package/lib/dragAndDropHandler/index.js.map +1 -1
- package/lib/elementsRenderer.d.ts +7 -2
- package/lib/elementsRenderer.d.ts.map +1 -1
- package/lib/elementsRenderer.js +70 -23
- package/lib/elementsRenderer.js.map +1 -1
- package/lib/events.d.ts +13 -7
- package/lib/events.d.ts.map +1 -1
- package/lib/folderOpenState.d.ts +8 -0
- package/lib/folderOpenState.d.ts.map +1 -0
- package/lib/folderOpenState.js +22 -0
- package/lib/folderOpenState.js.map +1 -0
- package/lib/index.d.ts +17 -16
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +93 -49
- package/lib/index.js.map +1 -1
- package/lib/keyHandler.d.ts +2 -0
- package/lib/keyHandler.d.ts.map +1 -1
- package/lib/keyHandler.js +18 -0
- package/lib/keyHandler.js.map +1 -1
- package/lib/mouseHandler.d.ts.map +1 -1
- package/lib/mouseHandler.js +12 -12
- package/lib/mouseHandler.js.map +1 -1
- package/lib/node.d.ts +12 -10
- package/lib/node.d.ts.map +1 -1
- package/lib/node.js +12 -10
- package/lib/node.js.map +1 -1
- package/lib/nodeElement/folderElement.d.ts +7 -5
- package/lib/nodeElement/folderElement.d.ts.map +1 -1
- package/lib/nodeElement/folderElement.js +33 -53
- package/lib/nodeElement/folderElement.js.map +1 -1
- package/lib/options.d.ts +19 -17
- package/lib/options.d.ts.map +1 -1
- package/lib/options.js +12 -0
- package/lib/options.js.map +1 -0
- package/lib/saveStateHandler.d.ts.map +1 -1
- package/lib/saveStateHandler.js +6 -6
- package/lib/saveStateHandler.js.map +1 -1
- package/lib/selectNodeHandler.d.ts.map +1 -1
- package/lib/selectNodeHandler.js +13 -1
- package/lib/selectNodeHandler.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 +35 -29
- package/src/dataLoader.ts +3 -1
- package/src/dragAndDropHandler/generateHitAreas.ts +3 -2
- package/src/dragAndDropHandler/index.ts +3 -17
- package/src/elementsRenderer.ts +84 -33
- package/src/events.ts +13 -7
- package/src/folderOpenState.ts +38 -0
- package/src/index.ts +109 -59
- package/src/keyHandler.ts +20 -0
- package/src/mouseHandler.ts +15 -13
- package/src/node.ts +12 -10
- package/src/nodeElement/folderElement.ts +45 -70
- package/src/options.ts +36 -17
- package/src/saveStateHandler.ts +5 -8
- package/src/selectNodeHandler.ts +12 -1
- package/src/version.ts +1 -1
- package/tree_element.css +32 -5
- package/tree_element.debug.js +291 -165
- package/tree_element.debug.js.map +1 -1
- package/tree_element.js +2 -2
- package/tree_element.js.map +1 -1
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { slideDown, slideUp } from '../animation.js';
|
|
2
|
+
import { setTogglerOpenState, setFolderLiOpenState } from '../folderOpenState.js';
|
|
2
3
|
import NodeElement from './index.js';
|
|
3
4
|
|
|
4
5
|
class FolderElement extends NodeElement {
|
|
5
6
|
constructor({
|
|
6
7
|
_classNames: classNames,
|
|
7
|
-
_closedIconElement: closedIconElement,
|
|
8
8
|
_getScrollLeft: getScrollLeft,
|
|
9
|
+
_icons: icons,
|
|
9
10
|
_multiSelect: multiSelect,
|
|
10
11
|
_node: node,
|
|
11
|
-
_openedIconElement: openedIconElement,
|
|
12
12
|
_renderChildren: renderChildren,
|
|
13
13
|
_tabIndex: tabIndex,
|
|
14
14
|
_treeElement: treeElement,
|
|
@@ -22,8 +22,7 @@ class FolderElement extends NodeElement {
|
|
|
22
22
|
_tabIndex: tabIndex,
|
|
23
23
|
_treeElement: treeElement
|
|
24
24
|
});
|
|
25
|
-
this.
|
|
26
|
-
this._openedIconElement = openedIconElement;
|
|
25
|
+
this._icons = icons;
|
|
27
26
|
this._renderChildren = renderChildren;
|
|
28
27
|
this._triggerEvent = triggerEvent;
|
|
29
28
|
}
|
|
@@ -32,30 +31,11 @@ class FolderElement extends NodeElement {
|
|
|
32
31
|
return;
|
|
33
32
|
}
|
|
34
33
|
this._node.is_open = false;
|
|
35
|
-
if (
|
|
36
|
-
this.
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
let button = this._getButton();
|
|
42
|
-
button.classList.add(this._classNames.closed);
|
|
43
|
-
button.replaceChildren();
|
|
44
|
-
let closedIconElement = this._closedIconElement;
|
|
45
|
-
if (closedIconElement) {
|
|
46
|
-
let icon = closedIconElement.cloneNode(true);
|
|
47
|
-
button.append(icon);
|
|
34
|
+
if (this._isRendered()) {
|
|
35
|
+
this._setButtonState(false);
|
|
36
|
+
await this._setUlState(this._getUl(), false, slide, animationSpeed);
|
|
37
|
+
this._setElementState(false);
|
|
48
38
|
}
|
|
49
|
-
let ul = this._getUl();
|
|
50
|
-
if (ul) {
|
|
51
|
-
if (slide) {
|
|
52
|
-
await slideUp(ul, animationSpeed);
|
|
53
|
-
} else {
|
|
54
|
-
ul.style.display = "none";
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
this._element.classList.add(this._classNames.closed);
|
|
58
|
-
this._element.setAttribute("aria-expanded", "false");
|
|
59
39
|
this._triggerEvent("tree.close", {
|
|
60
40
|
node: this._node
|
|
61
41
|
});
|
|
@@ -65,33 +45,17 @@ class FolderElement extends NodeElement {
|
|
|
65
45
|
return;
|
|
66
46
|
}
|
|
67
47
|
this._node.is_open = true;
|
|
68
|
-
if (!this._isRendered()) {
|
|
69
|
-
// The folder is rendered open when its parent is opened
|
|
70
|
-
this._triggerEvent("tree.open", {
|
|
71
|
-
node: this._node
|
|
72
|
-
});
|
|
73
|
-
return;
|
|
74
|
-
}
|
|
75
|
-
let button = this._getButton();
|
|
76
|
-
button.classList.remove(this._classNames.closed);
|
|
77
|
-
button.replaceChildren();
|
|
78
|
-
let openedIconElement = this._openedIconElement;
|
|
79
|
-
if (openedIconElement) {
|
|
80
|
-
let icon = openedIconElement.cloneNode(true);
|
|
81
|
-
button.append(icon);
|
|
82
|
-
}
|
|
83
48
|
|
|
84
|
-
//
|
|
85
|
-
|
|
86
|
-
if (
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
49
|
+
// A folder that is not rendered is rendered open when its parent is
|
|
50
|
+
// opened
|
|
51
|
+
if (this._isRendered()) {
|
|
52
|
+
this._setButtonState(true);
|
|
53
|
+
|
|
54
|
+
// The children are rendered the first time the folder is opened
|
|
55
|
+
let ul = this._getUl() ?? this._renderChildren(this._node);
|
|
56
|
+
await this._setUlState(ul, true, slide, animationSpeed);
|
|
57
|
+
this._setElementState(true);
|
|
92
58
|
}
|
|
93
|
-
this._element.classList.remove(this._classNames.closed);
|
|
94
|
-
this._element.setAttribute("aria-expanded", "true");
|
|
95
59
|
this._triggerEvent("tree.open", {
|
|
96
60
|
node: this._node
|
|
97
61
|
});
|
|
@@ -102,6 +66,22 @@ class FolderElement extends NodeElement {
|
|
|
102
66
|
_getButton() {
|
|
103
67
|
return this._element.querySelector(`:scope > .${this._classNames.element} > .${this._classNames.toggler}`);
|
|
104
68
|
}
|
|
69
|
+
_setButtonState(isOpen) {
|
|
70
|
+
setTogglerOpenState(this._getButton(), isOpen, this._classNames, this._icons);
|
|
71
|
+
}
|
|
72
|
+
_setElementState(isOpen) {
|
|
73
|
+
setFolderLiOpenState(this._element, isOpen, this._classNames);
|
|
74
|
+
}
|
|
75
|
+
async _setUlState(ul, isOpen, slide, animationSpeed) {
|
|
76
|
+
if (!ul) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
if (slide) {
|
|
80
|
+
await (isOpen ? slideDown : slideUp)(ul, animationSpeed);
|
|
81
|
+
} else {
|
|
82
|
+
ul.style.display = isOpen ? "block" : "none";
|
|
83
|
+
}
|
|
84
|
+
}
|
|
105
85
|
}
|
|
106
86
|
|
|
107
87
|
export { FolderElement as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"folderElement.js","sources":["../../src/nodeElement/folderElement.ts"],"sourcesContent":["import type { AnimationSpeed } from \"../animation\";\nimport type { TriggerEvent } from \"../methodTypes\";\nimport type { Node, Position } from \"../node\";\nimport type { NodeElementParams } from \"./index\";\n\nimport { slideDown, slideUp } from \"../animation\";\nimport NodeElement from \"./index\";\n\nexport type RenderChildren = (node: Node) => HTMLUListElement | null;\n\ninterface FolderElementParams extends NodeElementParams {\n
|
|
1
|
+
{"version":3,"file":"folderElement.js","sources":["../../src/nodeElement/folderElement.ts"],"sourcesContent":["import type { AnimationSpeed } from \"../animation\";\nimport type { FolderIcons } from \"../folderOpenState\";\nimport type { TriggerEvent } from \"../methodTypes\";\nimport type { Node, Position } from \"../node\";\nimport type { NodeElementParams } from \"./index\";\n\nimport { slideDown, slideUp } from \"../animation\";\nimport { setFolderLiOpenState, setTogglerOpenState } from \"../folderOpenState\";\nimport NodeElement from \"./index\";\n\nexport type RenderChildren = (node: Node) => HTMLUListElement | null;\n\ninterface FolderElementParams extends NodeElementParams {\n icons: FolderIcons;\n renderChildren: RenderChildren;\n triggerEvent: TriggerEvent;\n}\n\nclass FolderElement extends NodeElement {\n private icons: FolderIcons;\n private renderChildren: RenderChildren;\n private triggerEvent: TriggerEvent;\n\n constructor({\n classNames,\n getScrollLeft,\n icons,\n multiSelect,\n node,\n renderChildren,\n tabIndex,\n treeElement,\n triggerEvent,\n }: FolderElementParams) {\n super({\n classNames,\n getScrollLeft,\n multiSelect,\n node,\n tabIndex,\n treeElement,\n });\n\n this.icons = icons;\n this.renderChildren = renderChildren;\n this.triggerEvent = triggerEvent;\n }\n\n public async close(\n slide: boolean,\n animationSpeed: AnimationSpeed,\n ): Promise<void> {\n if (!this.node.is_open) {\n return;\n }\n\n this.node.is_open = false;\n\n if (this.isRendered()) {\n this.setButtonState(false);\n await this.setUlState(this.getUl(), false, slide, animationSpeed);\n this.setElementState(false);\n }\n\n this.triggerEvent(\"tree.close\", { node: this.node });\n }\n\n public async open(\n slide: boolean,\n animationSpeed: AnimationSpeed,\n ): Promise<void> {\n if (this.node.is_open) {\n return;\n }\n\n this.node.is_open = true;\n\n // A folder that is not rendered is rendered open when its parent is\n // opened\n if (this.isRendered()) {\n this.setButtonState(true);\n\n // The children are rendered the first time the folder is opened\n const ul = this.getUl() ?? this.renderChildren(this.node);\n await this.setUlState(ul, true, slide, animationSpeed);\n\n this.setElementState(true);\n }\n\n this.triggerEvent(\"tree.open\", { node: this.node });\n }\n\n protected mustShowBorderDropHint(position: Position): boolean {\n return !this.node.is_open && position === \"inside\";\n }\n\n private getButton(): HTMLElement {\n return this.element.querySelector(\n `:scope > .${this.classNames.element} > .${this.classNames.toggler}`,\n ) as HTMLElement;\n }\n\n private setButtonState(isOpen: boolean): void {\n setTogglerOpenState(this.getButton(), isOpen, this.classNames, this.icons);\n }\n\n private setElementState(isOpen: boolean): void {\n setFolderLiOpenState(this.element, isOpen, this.classNames);\n }\n\n private async setUlState(\n ul: HTMLUListElement | null,\n isOpen: boolean,\n slide: boolean,\n animationSpeed: AnimationSpeed,\n ): Promise<void> {\n if (!ul) {\n return;\n }\n\n if (slide) {\n await (isOpen ? slideDown : slideUp)(ul, animationSpeed);\n } else {\n ul.style.display = isOpen ? \"block\" : \"none\";\n }\n }\n}\n\nexport default FolderElement;\n"],"names":["icons","renderChildren","triggerEvent","close","node","isRendered","setButtonState","setUlState","getUl","setElementState","open","mustShowBorderDropHint","getButton","element","classNames"],"mappings":"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"}
|
package/lib/options.d.ts
CHANGED
|
@@ -11,10 +11,15 @@ export type OnCreateLi = (node: Node, el: HTMLElement, isSelected: boolean) => v
|
|
|
11
11
|
export type OnGetStateFromStorage = (() => string) | undefined;
|
|
12
12
|
export type OnIsMoveHandle = (el: HTMLElement) => boolean;
|
|
13
13
|
export type OnSetStateFromStorage = ((data: string) => void) | undefined;
|
|
14
|
+
export declare const changeableOptions: readonly ["animationSpeed", "dataUrl", "dragAndDrop", "keyboardSupport", "multiSelect", "onCanSelectNode", "selectable", "slide", "startDndDelay", "tabIndex"];
|
|
15
|
+
/**
|
|
16
|
+
* The options that `setOption` can change.
|
|
17
|
+
*/
|
|
18
|
+
export type ChangeableOption = (typeof changeableOptions)[number];
|
|
14
19
|
export interface TreeElementOptions {
|
|
15
20
|
/**
|
|
16
|
-
* The duration of the slide animation: `"fast"` is
|
|
17
|
-
*
|
|
21
|
+
* The duration of the slide animation: `"fast"` is 200 milliseconds,
|
|
22
|
+
* `"slow"` is 600, and a number is milliseconds.
|
|
18
23
|
*
|
|
19
24
|
* @defaultValue `"fast"`, or `0` when the user prefers reduced motion
|
|
20
25
|
* (`prefers-reduced-motion: reduce`).
|
|
@@ -36,7 +41,7 @@ export interface TreeElementOptions {
|
|
|
36
41
|
*/
|
|
37
42
|
ariaLabelledBy?: string;
|
|
38
43
|
/**
|
|
39
|
-
* Escape node names. With `false`, names are inserted as
|
|
44
|
+
* Escape node names. With `false`, names are inserted as HTML—only do
|
|
40
45
|
* that for data you control.
|
|
41
46
|
*
|
|
42
47
|
* @defaultValue `true`
|
|
@@ -61,10 +66,10 @@ export interface TreeElementOptions {
|
|
|
61
66
|
*/
|
|
62
67
|
buttonLeft: boolean;
|
|
63
68
|
/**
|
|
64
|
-
* The prefix of the
|
|
69
|
+
* The prefix of the CSS classes the widget puts on the elements it
|
|
65
70
|
* creates: with `"my-tree"` a title gets `my-tree-title` instead of
|
|
66
|
-
* `tree-element-title`. The bundled
|
|
67
|
-
* change it only if you bring your own
|
|
71
|
+
* `tree-element-title`. The bundled style sheet uses the default prefix,
|
|
72
|
+
* so change it only if you bring your own CSS. See
|
|
68
73
|
* [Styling](/guide/styling#changing-the-class-names).
|
|
69
74
|
*
|
|
70
75
|
* @defaultValue `"tree-element"`
|
|
@@ -72,12 +77,12 @@ export interface TreeElementOptions {
|
|
|
72
77
|
*/
|
|
73
78
|
classPrefix: string;
|
|
74
79
|
/**
|
|
75
|
-
* The icon of a closed folder. A string is inserted as
|
|
76
|
-
* cloned for every node.
|
|
80
|
+
* The icon of a closed folder. A string is inserted as HTML, and an element
|
|
81
|
+
* is cloned for every node.
|
|
77
82
|
*
|
|
78
83
|
* Type: `HTMLElement | string`
|
|
79
84
|
*
|
|
80
|
-
* @defaultValue An
|
|
85
|
+
* @defaultValue An SVG triangle pointing right, or left when `rtl` is
|
|
81
86
|
* true. It is sized in em and filled with `currentColor`.
|
|
82
87
|
* @group Appearance
|
|
83
88
|
*/
|
|
@@ -105,7 +110,7 @@ export interface TreeElementOptions {
|
|
|
105
110
|
*/
|
|
106
111
|
dataFilter?: DataFilter;
|
|
107
112
|
/**
|
|
108
|
-
* A
|
|
113
|
+
* A URL to fetch the data from, or a function that returns one. The
|
|
109
114
|
* function is called with the node that is being loaded, and without an
|
|
110
115
|
* argument for the initial load. See
|
|
111
116
|
* [Loading on demand](/guide/loading-on-demand).
|
|
@@ -137,9 +142,6 @@ export interface TreeElementOptions {
|
|
|
137
142
|
* focus instead of the selection, and `Space` adds the focused node or
|
|
138
143
|
* removes it. See [Selection](/guide/selection#multiple-nodes).
|
|
139
144
|
*
|
|
140
|
-
* Set it in the constructor; changing it with `setOption` is not
|
|
141
|
-
* supported.
|
|
142
|
-
*
|
|
143
145
|
* @defaultValue `false`
|
|
144
146
|
* @group Selection
|
|
145
147
|
*/
|
|
@@ -220,7 +222,7 @@ export interface TreeElementOptions {
|
|
|
220
222
|
*/
|
|
221
223
|
onDragStop?: DragMethod;
|
|
222
224
|
/**
|
|
223
|
-
* Read the saved state, as a
|
|
225
|
+
* Read the saved state, as a JSON string, from somewhere other than
|
|
224
226
|
* `localStorage`.
|
|
225
227
|
*
|
|
226
228
|
* Type: `() => string`
|
|
@@ -238,7 +240,7 @@ export interface TreeElementOptions {
|
|
|
238
240
|
*/
|
|
239
241
|
onIsMoveHandle?: OnIsMoveHandle;
|
|
240
242
|
/**
|
|
241
|
-
* Write the state, as a
|
|
243
|
+
* Write the state, as a JSON string, to somewhere other than
|
|
242
244
|
* `localStorage`.
|
|
243
245
|
*
|
|
244
246
|
* Type: `(state: string) => void`
|
|
@@ -251,7 +253,7 @@ export interface TreeElementOptions {
|
|
|
251
253
|
*
|
|
252
254
|
* Type: `HTMLElement | string`
|
|
253
255
|
*
|
|
254
|
-
* @defaultValue An
|
|
256
|
+
* @defaultValue An SVG triangle pointing down, sized in em and filled with
|
|
255
257
|
* `currentColor`.
|
|
256
258
|
* @group Appearance
|
|
257
259
|
*/
|
|
@@ -273,7 +275,7 @@ export interface TreeElementOptions {
|
|
|
273
275
|
rtl?: boolean;
|
|
274
276
|
/**
|
|
275
277
|
* Remember the open and selected nodes in `localStorage`. A string is used
|
|
276
|
-
* as the storage key
|
|
278
|
+
* as the storage key, and `true` uses `tree`. See
|
|
277
279
|
* [Saving state](/guide/saving-state).
|
|
278
280
|
*
|
|
279
281
|
* @defaultValue `false`
|
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,CAAC;AAEtD,MAAM,MAAM,UAAU,GAAG,CACvB,IAAI,EAAE,IAAI,EACV,EAAE,EAAE,WAAW,EACf,UAAU,EAAE,OAAO,KAChB,IAAI,CAAC;AAEV,MAAM,MAAM,qBAAqB,GAAG,CAAC,MAAM,MAAM,CAAC,GAAG,SAAS,CAAC;AAE/D,MAAM,MAAM,cAAc,GAAG,CAAC,EAAE,EAAE,WAAW,KAAK,OAAO,CAAC;AAE1D,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;
|
|
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,CAAC;AAEtD,MAAM,MAAM,UAAU,GAAG,CACvB,IAAI,EAAE,IAAI,EACV,EAAE,EAAE,WAAW,EACf,UAAU,EAAE,OAAO,KAChB,IAAI,CAAC;AAEV,MAAM,MAAM,qBAAqB,GAAG,CAAC,MAAM,MAAM,CAAC,GAAG,SAAS,CAAC;AAE/D,MAAM,MAAM,cAAc,GAAG,CAAC,EAAE,EAAE,WAAW,KAAK,OAAO,CAAC;AAE1D,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;AAMzE,eAAO,MAAM,iBAAiB,gKAWpB,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAElE,MAAM,WAAW,kBAAkB;IACjC;;;;;;;OAOG;IACH,cAAc,EAAE,cAAc,CAAC;IAC/B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;;OAMG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB;;;;;;;OAOG;IACH,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC;IAC3B;;;;;;OAMG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB;;;;;;;;;OASG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC;IAClB;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;OAKG;IACH,WAAW,EAAE,OAAO,CAAC;IACrB;;;;;;OAMG;IACH,eAAe,EAAE,OAAO,CAAC;IACzB;;;;;;;;OAQG;IACH,WAAW,EAAE,OAAO,CAAC;IACrB;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,SAAS,EAAE,OAAO,IAAI,CAAC;IACvB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;;;;;;;OAOG;IACH,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAC9C;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC;;;;;;;OAOG;IACH,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAC9C;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB;;;;;;OAMG;IACH,eAAe,EAAE,KAAK,GAAG,MAAM,CAAC;IAChC;;;;;OAKG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC;IACd;;;;;;;OAOG;IACH,SAAS,EAAE,OAAO,GAAG,MAAM,CAAC;IAC5B;;;;;OAKG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB;;;;;OAKG;IACH,eAAe,EAAE,OAAO,CAAC;IACzB;;;;;OAKG;IACH,KAAK,EAAE,OAAO,CAAC;IACf;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;;;OAOG;IACH,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,KAAK,eAAe,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,MAAM,CAAC"}
|
package/lib/options.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/* The options that setOption can change. The others are read once, in the
|
|
2
|
+
* constructor, so changing them later would have no effect or leave the tree
|
|
3
|
+
* in an inconsistent state.
|
|
4
|
+
*/
|
|
5
|
+
let changeableOptions = ["animationSpeed", "dataUrl", "dragAndDrop", "keyboardSupport", "multiSelect", "onCanSelectNode", "selectable", "slide", "startDndDelay", "tabIndex"];
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* The options that `setOption` can change.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
export { changeableOptions };
|
|
12
|
+
//# sourceMappingURL=options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.js","sources":["../src/options.ts"],"sourcesContent":["import type { AnimationSpeed } from \"./animation\";\nimport type { Node, NodeData } from \"./node\";\n\nexport type DataFilter = (data: unknown) => NodeData[];\n\nexport type DataUrl = DataUrlFunction | string;\n\nexport type DragMethod = (node: Node, event: Event | Touch) => void;\n\nexport type IconElement = HTMLElement | string;\n\nexport type OnCanMove = ((node: Node) => boolean) | undefined;\n\nexport type OnCanMoveTo = (\n node: Node,\n targetNode: Node,\n positionName: string,\n) => boolean;\n\nexport type OnCanSelectNode = (node: Node) => boolean;\n\nexport type OnCreateLi = (\n node: Node,\n el: HTMLElement,\n isSelected: boolean,\n) => void;\n\nexport type OnGetStateFromStorage = (() => string) | undefined;\n\nexport type OnIsMoveHandle = (el: HTMLElement) => boolean;\n\nexport type OnSetStateFromStorage = ((data: string) => void) | undefined;\n\n/* The options that setOption can change. The others are read once, in the\n * constructor, so changing them later would have no effect or leave the tree\n * in an inconsistent state.\n */\nexport const changeableOptions = [\n \"animationSpeed\",\n \"dataUrl\",\n \"dragAndDrop\",\n \"keyboardSupport\",\n \"multiSelect\",\n \"onCanSelectNode\",\n \"selectable\",\n \"slide\",\n \"startDndDelay\",\n \"tabIndex\",\n] as const;\n\n/**\n * The options that `setOption` can change.\n */\nexport type ChangeableOption = (typeof changeableOptions)[number];\n\nexport interface TreeElementOptions {\n /**\n * The duration of the slide animation: `\"fast\"` is 200 milliseconds,\n * `\"slow\"` is 600, and a number is milliseconds.\n *\n * @defaultValue `\"fast\"`, or `0` when the user prefers reduced motion\n * (`prefers-reduced-motion: reduce`).\n * @group Appearance\n */\n animationSpeed: AnimationSpeed;\n /**\n * The accessible name of the tree, set as `aria-label` on the root `ul`.\n * Use `ariaLabelledBy` instead when the name is visible on the page.\n *\n * @group Appearance\n */\n ariaLabel?: string;\n /**\n * The id of the element that names the tree, set as `aria-labelledby` on\n * the root `ul`.\n *\n * @group Appearance\n */\n ariaLabelledBy?: string;\n /**\n * Escape node names. With `false`, names are inserted as HTML—only do\n * that for data you control.\n *\n * @defaultValue `true`\n * @group Data\n */\n autoEscape: boolean;\n /**\n * Which levels are open initially: `false` none, `true` all, a number that\n * many levels starting at `0` (so `0` opens the top level, `1` the first\n * two levels).\n *\n * @defaultValue `false`\n * @group Appearance\n */\n autoOpen: boolean | number;\n /**\n * Put the open/close button before the node title. With `false` it goes\n * after it.\n *\n * @defaultValue `true`\n * @group Appearance\n */\n buttonLeft: boolean;\n /**\n * The prefix of the CSS classes the widget puts on the elements it\n * creates: with `\"my-tree\"` a title gets `my-tree-title` instead of\n * `tree-element-title`. The bundled style sheet uses the default prefix,\n * so change it only if you bring your own CSS. See\n * [Styling](/guide/styling#changing-the-class-names).\n *\n * @defaultValue `\"tree-element\"`\n * @group Appearance\n */\n classPrefix: string;\n /**\n * The icon of a closed folder. A string is inserted as HTML, and an element\n * is cloned for every node.\n *\n * Type: `HTMLElement | string`\n *\n * @defaultValue An SVG triangle pointing right, or left when `rtl` is\n * true. It is sized in em and filled with `currentColor`.\n * @group Appearance\n */\n closedIcon?: IconElement;\n /**\n * The class that every element of the widget gets.\n *\n * @defaultValue `\"<classPrefix>-common\"`\n * @group Appearance\n */\n commonClassName?: string;\n /**\n * The nodes of the tree. See [Data](/guide/data) for the format.\n *\n * @group Data\n */\n data?: NodeData[];\n /**\n * Transforms a response from `dataUrl` into node data. Use it when the\n * server wraps the nodes in another object.\n *\n * Type: `(data: unknown) => NodeData[]`\n *\n * @group Data\n */\n dataFilter?: DataFilter;\n /**\n * A URL to fetch the data from, or a function that returns one. The\n * function is called with the node that is being loaded, and without an\n * argument for the initial load. See\n * [Loading on demand](/guide/loading-on-demand).\n *\n * Type: `string | ((node?: Node) => string)`\n *\n * @defaultValue The element's `data-url` attribute.\n * @group Data\n */\n dataUrl?: DataUrl;\n /**\n * Let the user move nodes by dragging them.\n *\n * @defaultValue `false`\n * @group Drag and drop\n */\n dragAndDrop: boolean;\n /**\n * Handle the keyboard when the focus is on the tree. See\n * [Selection](/guide/selection#keyboard-navigation).\n *\n * @defaultValue `true`\n * @group Selection\n */\n keyboardSupport: boolean;\n /**\n * Let the user select multiple nodes: a click adds a node to the\n * selection, or removes it when it is selected. The arrow keys move the\n * focus instead of the selection, and `Space` adds the focused node or\n * removes it. See [Selection](/guide/selection#multiple-nodes).\n *\n * @defaultValue `false`\n * @group Selection\n */\n multiSelect: boolean;\n /**\n * The class used to create nodes. Subclass [`Node`](/reference/node) to\n * add your own methods. The `Node` class is not exposed on the global\n * `TreeElement`, so this option needs the `lib` build.\n *\n * @example\n * ```js\n * import TreeElement from \"tree-element/lib/index.js\";\n * import { Node } from \"tree-element/lib/node.js\";\n *\n * class MyNode extends Node {\n * fullName() {\n * return this.getParent()\n * ? `${this.getParent().name}/${this.name}`\n * : this.name;\n * }\n * }\n *\n * new TreeElement({ data, htmlElement, nodeClass: MyNode });\n * ```\n *\n * @defaultValue `Node`\n * @group Advanced\n */\n nodeClass: typeof Node;\n /**\n * Called before a drag starts. Return `false` to keep the node in place.\n *\n * Type: `(node: Node) => boolean`\n *\n * @group Drag and drop\n */\n onCanMove?: OnCanMove;\n /**\n * Called for a possible drop. `position` is `\"before\"`, `\"after\"` or\n * `\"inside\"`. Return `false` to refuse the drop.\n *\n * Type: `(movedNode: Node, targetNode: Node, position: string) => boolean`\n *\n * @group Drag and drop\n */\n onCanMoveTo?: OnCanMoveTo;\n /**\n * Called before a node is selected. Return `false` to refuse.\n *\n * Type: `(node: Node) => boolean`\n *\n * @group Selection\n */\n onCanSelectNode?: OnCanSelectNode;\n /**\n * Called after the `li` of a node is created, so you can add to it. See\n * [Styling](/guide/styling#customizing-the-markup).\n *\n * Type: `(node: Node, li: HTMLElement, isSelected: boolean) => void`\n *\n * @group Appearance\n */\n onCreateLi?: OnCreateLi;\n /**\n * Called while a node is being dragged.\n *\n * Type: `(node: Node, event: Event | Touch) => void`\n *\n * @group Drag and drop\n */\n onDragMove?: DragMethod;\n /**\n * Called when a drag ends.\n *\n * Type: `(node: Node, event: Event | Touch) => void`\n *\n * @group Drag and drop\n */\n onDragStop?: DragMethod;\n /**\n * Read the saved state, as a JSON string, from somewhere other than\n * `localStorage`.\n *\n * Type: `() => string`\n *\n * @group State\n */\n onGetStateFromStorage?: OnGetStateFromStorage;\n /**\n * Decides whether an element inside a node starts a drag. Without it, the\n * whole node is a handle.\n *\n * Type: `(element: HTMLElement) => boolean`\n *\n * @group Drag and drop\n */\n onIsMoveHandle?: OnIsMoveHandle;\n /**\n * Write the state, as a JSON string, to somewhere other than\n * `localStorage`.\n *\n * Type: `(state: string) => void`\n *\n * @group State\n */\n onSetStateFromStorage?: OnSetStateFromStorage;\n /**\n * The icon of an open folder.\n *\n * Type: `HTMLElement | string`\n *\n * @defaultValue An SVG triangle pointing down, sized in em and filled with\n * `currentColor`.\n * @group Appearance\n */\n openedIcon?: IconElement;\n /**\n * How long, in milliseconds, a closed folder has to be hovered during a\n * drag before it opens. `false` never opens folders while dragging.\n *\n * @defaultValue `500`\n * @group Drag and drop\n */\n openFolderDelay: false | number;\n /**\n * Mirror the tree for right-to-left languages.\n *\n * @defaultValue The element's `data-rtl` attribute, otherwise `false`.\n * @group Appearance\n */\n rtl?: boolean;\n /**\n * Remember the open and selected nodes in `localStorage`. A string is used\n * as the storage key, and `true` uses `tree`. See\n * [Saving state](/guide/saving-state).\n *\n * @defaultValue `false`\n * @group State\n */\n saveState: boolean | string;\n /**\n * Allow the user to select nodes.\n *\n * @defaultValue `true`\n * @group Selection\n */\n selectable: boolean;\n /**\n * Render a node with `children: []` as a folder instead of as a leaf.\n *\n * @defaultValue `false`\n * @group Appearance\n */\n showEmptyFolder: boolean;\n /**\n * Animate opening and closing folders.\n *\n * @defaultValue `true`\n * @group Appearance\n */\n slide: boolean;\n /**\n * How long, in milliseconds, the mouse has to be held down on a node\n * before a drag starts.\n *\n * @defaultValue `300`\n * @group Drag and drop\n */\n startDndDelay?: number;\n /**\n * The `tabindex` of the selected node's title, which is what makes the\n * tree focusable. When no node is selected, the first node gets it. The\n * other nodes get `-1`.\n *\n * @defaultValue `0`\n * @group Selection\n */\n tabIndex?: number;\n /**\n * The class of the root `ul`.\n *\n * @defaultValue The value of `classPrefix`.\n * @group Appearance\n */\n treeClassName?: string;\n /**\n * Handle right clicks on a node: the browser menu is suppressed and\n * [`tree.contextmenu`](/reference/events#tree-contextmenu) is dispatched\n * instead.\n *\n * @defaultValue `true`\n * @group Selection\n */\n useContextMenu: boolean;\n}\n\ntype DataUrlFunction = (node?: Node) => string;\n"],"names":[],"mappings":"AAiCA;AACA;AACA;AACA;AACO,IAAM,iBAAiB,GAAG,CAC/B,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,OAAO,EACP,eAAe,EACf,UAAU;;AAGZ;AACA;AACA;;"}
|
|
@@ -1 +1 @@
|
|
|
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;
|
|
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;IAOtC,QAAQ,IAAI,UAAU;IAgCtB,mBAAmB,IAAI,IAAI,GAAG,UAAU;IAUxC,SAAS,IAAI,IAAI;IAoBjB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO;IAcrC,uBAAuB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAyCtE,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,kBAAkB;CAgB3B"}
|
package/lib/saveStateHandler.js
CHANGED
|
@@ -25,9 +25,7 @@ class SaveStateHandler {
|
|
|
25
25
|
this._saveStateOption = saveState;
|
|
26
26
|
}
|
|
27
27
|
_getNodeIdToBeSelected() {
|
|
28
|
-
|
|
29
|
-
return null;
|
|
30
|
-
}
|
|
28
|
+
// Without the saveState option there is no state
|
|
31
29
|
let state = this._getStateFromStorage();
|
|
32
30
|
return state?.selected_node ? state.selected_node[0] ?? null : null;
|
|
33
31
|
}
|
|
@@ -156,17 +154,19 @@ class SaveStateHandler {
|
|
|
156
154
|
this._removeFromSelection(node);
|
|
157
155
|
}
|
|
158
156
|
}
|
|
157
|
+
|
|
158
|
+
// result: is a node selected?
|
|
159
159
|
_selectInitialNodes(nodeIds) {
|
|
160
|
-
let
|
|
160
|
+
let isNodeSelected = false;
|
|
161
161
|
for (let nodeId of nodeIds) {
|
|
162
162
|
let node = this._getNodeById(nodeId);
|
|
163
163
|
if (!node) {
|
|
164
164
|
continue;
|
|
165
165
|
}
|
|
166
|
-
selectCount += 1;
|
|
167
166
|
this._addToSelection(node);
|
|
167
|
+
isNodeSelected = true;
|
|
168
168
|
}
|
|
169
|
-
return
|
|
169
|
+
return isNodeSelected;
|
|
170
170
|
}
|
|
171
171
|
}
|
|
172
172
|
|
|
@@ -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 return state?.selected_node ? (state.selected_node[0] ?? null) : null;\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 for (const node of this.getSelectedNodes()) {\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 return jsonData ? this.parseState(jsonData) : null;\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 const mustLoadOnDemand = state.open_nodes\n ? this.openInitialNodes(state.open_nodes)\n : false;\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 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 } else {\n newNodesIds.push(nodeId);\n }\n }\n\n nodeIds = newNodesIds;\n\n if (state.selected_node && this.selectInitialNodes(state.selected_node)) {\n this.refreshElements(null);\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 return typeof this.saveStateOption === \"string\"\n ? this.saveStateOption\n : \"tree\";\n }\n\n private loadFromStorage(): null | string {\n return this.onGetStateFromStorage\n ? this.onGetStateFromStorage()\n : localStorage.getItem(this.getKeyName());\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 mustLoadOnDemand = true;\n } else {\n node.is_open = 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 for (const node of selectedNodes) {\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 continue;\n }\n\n selectCount += 1;\n\n this.addToSelection(node);\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
|
+
{"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 // Without the saveState option there is no state\n const state = this.getStateFromStorage();\n\n return state?.selected_node ? (state.selected_node[0] ?? null) : null;\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 for (const node of this.getSelectedNodes()) {\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 return jsonData ? this.parseState(jsonData) : null;\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 const mustLoadOnDemand = state.open_nodes\n ? this.openInitialNodes(state.open_nodes)\n : false;\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 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 } else {\n newNodesIds.push(nodeId);\n }\n }\n\n nodeIds = newNodesIds;\n\n if (state.selected_node && this.selectInitialNodes(state.selected_node)) {\n this.refreshElements(null);\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 return typeof this.saveStateOption === \"string\"\n ? this.saveStateOption\n : \"tree\";\n }\n\n private loadFromStorage(): null | string {\n return this.onGetStateFromStorage\n ? this.onGetStateFromStorage()\n : localStorage.getItem(this.getKeyName());\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 mustLoadOnDemand = true;\n } else {\n node.is_open = 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 for (const node of selectedNodes) {\n this.removeFromSelection(node);\n }\n }\n\n // result: is a node selected?\n private selectInitialNodes(nodeIds: NodeId[]): boolean {\n let isNodeSelected = false;\n\n for (const nodeId of nodeIds) {\n const node = this.getNodeById(nodeId);\n\n if (!node) {\n continue;\n }\n\n this.addToSelection(node);\n isNodeSelected = true;\n }\n\n return isNodeSelected;\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":"selectNodeHandler.d.ts","sourceRoot":"","sources":["../src/selectNodeHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,qBAAqB,EACrB,WAAW,EACX,YAAY,EACb,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,IAAI,EAAU,MAAM,QAAQ,CAAC;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEjD,MAAM,WAAW,iBAAiB;IAChC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,UAAU,2BAA2B;IACnC,WAAW,EAAE,WAAW,CAAC;IACzB,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,kBAAkB,EAAE,MAAM,eAAe,GAAG,SAAS,CAAC;IACtD,aAAa,EAAE,MAAM,OAAO,CAAC;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED,MAAM,CAAC,OAAO,OAAO,iBAAiB;IACpC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,qBAAqB,CAAwB;IACrD,OAAO,CAAC,kBAAkB,CAAoC;IAC9D,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,kBAAkB,CAAc;IACxC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,aAAa,CAAa;gBAEtB,EACV,WAAW,EACX,qBAAqB,EACrB,kBAAkB,EAClB,aAAa,EACb,WAAW,EACX,SAAS,EACT,YAAY,EACZ,aAAa,GACd,EAAE,2BAA2B;IAavB,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAQhC,KAAK,IAAI,IAAI;IAKb,eAAe,IAAI,IAAI,GAAG,IAAI;IAM9B,gBAAgB,IAAI,IAAI,EAAE;IAiB1B,qBAAqB,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,EAAE;IAmB3C,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO;IAOnC,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,eAAe,UAAQ,GAAG,IAAI;IA6B9D,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,EAAE,iBAAiB;
|
|
1
|
+
{"version":3,"file":"selectNodeHandler.d.ts","sourceRoot":"","sources":["../src/selectNodeHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,qBAAqB,EACrB,WAAW,EACX,YAAY,EACb,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,IAAI,EAAU,MAAM,QAAQ,CAAC;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEjD,MAAM,WAAW,iBAAiB;IAChC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,UAAU,2BAA2B;IACnC,WAAW,EAAE,WAAW,CAAC;IACzB,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,kBAAkB,EAAE,MAAM,eAAe,GAAG,SAAS,CAAC;IACtD,aAAa,EAAE,MAAM,OAAO,CAAC;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED,MAAM,CAAC,OAAO,OAAO,iBAAiB;IACpC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,qBAAqB,CAAwB;IACrD,OAAO,CAAC,kBAAkB,CAAoC;IAC9D,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,kBAAkB,CAAc;IACxC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,aAAa,CAAa;gBAEtB,EACV,WAAW,EACX,qBAAqB,EACrB,kBAAkB,EAClB,aAAa,EACb,WAAW,EACX,SAAS,EACT,YAAY,EACZ,aAAa,GACd,EAAE,2BAA2B;IAavB,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAQhC,KAAK,IAAI,IAAI;IAKb,eAAe,IAAI,IAAI,GAAG,IAAI;IAM9B,gBAAgB,IAAI,IAAI,EAAE;IAiB1B,qBAAqB,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,EAAE;IAmB3C,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO;IAOnC,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,eAAe,UAAQ,GAAG,IAAI;IA6B9D,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,EAAE,iBAAiB;IA0D7D,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,UAAO,GAAG,IAAI;IAoBnE,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,YAAY;CAIrB"}
|
package/lib/selectNodeHandler.js
CHANGED
|
@@ -114,6 +114,11 @@ class SelectNodeHandler {
|
|
|
114
114
|
for (let otherNode of otherSelectedNodes) {
|
|
115
115
|
this._deselectNode(otherNode);
|
|
116
116
|
}
|
|
117
|
+
for (let otherNode of otherSelectedNodes) {
|
|
118
|
+
this._triggerEvent("tree.deselect", {
|
|
119
|
+
node: otherNode
|
|
120
|
+
});
|
|
121
|
+
}
|
|
117
122
|
} else if (selectOptions.mustToggle) {
|
|
118
123
|
this._deselectNode(node);
|
|
119
124
|
this._triggerEvent("tree.deselect", {
|
|
@@ -121,13 +126,20 @@ class SelectNodeHandler {
|
|
|
121
126
|
});
|
|
122
127
|
}
|
|
123
128
|
} else {
|
|
124
|
-
|
|
129
|
+
// tree.select reports the first deselected node; the others, from a
|
|
130
|
+
// multiple selection, get a tree.deselect.
|
|
131
|
+
let [deselectedNode = null, ...alsoDeselectedNodes] = otherSelectedNodes;
|
|
125
132
|
for (let otherNode of otherSelectedNodes) {
|
|
126
133
|
this._deselectNode(otherNode);
|
|
127
134
|
}
|
|
128
135
|
this._addToSelection(node);
|
|
129
136
|
this._openParents(node);
|
|
130
137
|
this._getNodeElementForNode(node)._select(selectOptions.mustSetFocus);
|
|
138
|
+
for (let otherNode of alsoDeselectedNodes) {
|
|
139
|
+
this._triggerEvent("tree.deselect", {
|
|
140
|
+
node: otherNode
|
|
141
|
+
});
|
|
142
|
+
}
|
|
131
143
|
this._triggerEvent("tree.select", {
|
|
132
144
|
deselectedNode,
|
|
133
145
|
node
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selectNodeHandler.js","sources":["../src/selectNodeHandler.ts"],"sourcesContent":["import type {\n GetNodeById,\n GetNodeElementForNode,\n OpenParents,\n TriggerEvent,\n} from \"./methodTypes\";\nimport type { Node, NodeId } from \"./node\";\nimport type { OnCanSelectNode } from \"./options\";\n\nexport interface SelectNodeOptions {\n mustSetFocus?: boolean;\n mustToggle?: boolean;\n}\n\ninterface SelectNodeHandlerParameters {\n getNodeById: GetNodeById;\n getNodeElementForNode: GetNodeElementForNode;\n getOnCanSelectNode: () => OnCanSelectNode | undefined;\n getSelectable: () => boolean;\n openParents: OpenParents;\n saveState: () => void;\n triggerEvent: TriggerEvent;\n updateTabStop: () => void;\n}\n\nexport default class SelectNodeHandler {\n private getNodeById: GetNodeById;\n private getNodeElementForNode: GetNodeElementForNode;\n private getOnCanSelectNode: () => OnCanSelectNode | undefined;\n private getSelectable: () => boolean;\n private openParents: OpenParents;\n private saveState: () => void;\n private selectedNodes: Set<NodeId>;\n private selectedSingleNode: Node | null;\n private triggerEvent: TriggerEvent;\n private updateTabStop: () => void;\n\n constructor({\n getNodeById,\n getNodeElementForNode,\n getOnCanSelectNode,\n getSelectable,\n openParents,\n saveState,\n triggerEvent,\n updateTabStop,\n }: SelectNodeHandlerParameters) {\n this.getNodeById = getNodeById;\n this.getNodeElementForNode = getNodeElementForNode;\n this.getOnCanSelectNode = getOnCanSelectNode;\n this.getSelectable = getSelectable;\n this.openParents = openParents;\n this.saveState = saveState;\n this.selectedNodes = new Set<NodeId>();\n this.selectedSingleNode = null;\n this.triggerEvent = triggerEvent;\n this.updateTabStop = updateTabStop;\n }\n\n public addToSelection(node: Node): void {\n if (node.id == null) {\n this.selectedSingleNode = node;\n } else {\n this.selectedNodes.add(node.id);\n }\n }\n\n public clear(): void {\n this.selectedNodes.clear();\n this.selectedSingleNode = null;\n }\n\n public getSelectedNode(): Node | null {\n const selectedNodes = this.getSelectedNodes();\n\n return selectedNodes.length ? (selectedNodes[0] ?? null) : null;\n }\n\n public getSelectedNodes(): Node[] {\n if (this.selectedSingleNode) {\n return [this.selectedSingleNode];\n }\n\n const selectedNodes: Node[] = [];\n\n this.selectedNodes.forEach((id) => {\n const node = this.getNodeById(id);\n if (node) {\n selectedNodes.push(node);\n }\n });\n\n return selectedNodes;\n }\n\n public getSelectedNodesUnder(parent: Node): Node[] {\n if (this.selectedSingleNode) {\n return parent.isParentOf(this.selectedSingleNode)\n ? [this.selectedSingleNode]\n : [];\n }\n\n const selectedNodes: Node[] = [];\n\n this.selectedNodes.forEach((id) => {\n const node = this.getNodeById(id);\n if (node && parent.isParentOf(node)) {\n selectedNodes.push(node);\n }\n });\n\n return selectedNodes;\n }\n\n public isNodeSelected(node: Node): boolean {\n if (node.id != null) {\n return this.selectedNodes.has(node.id);\n }\n return this.selectedSingleNode ? this.selectedSingleNode === node : false;\n }\n\n public removeFromSelection(node: Node, includeChildren = false): void {\n if (node.id == null) {\n if (this.selectedSingleNode === node) {\n this.selectedSingleNode = null;\n }\n } else {\n this.selectedNodes.delete(node.id);\n\n if (includeChildren) {\n node.iterate((child: Node) => {\n if (child.id != null) {\n this.selectedNodes.delete(child.id);\n }\n return true;\n });\n }\n }\n }\n\n /* Select a single node.\n * Renders the changed elements.\n * Deselects if the node is currently selected (if the mustToggle is on).\n * Deselects the previously selected node.\n * Check if the node is selectable.\n * Saves the state.\n * Options:\n * mustSetFocus: set the focus to the selected node\n * mustToggle: support deselecting the selected node\n */\n public selectSingleNode(node: Node, optionsParam?: SelectNodeOptions) {\n if (!this.canSelect(node)) {\n return;\n }\n\n const defaultOptions = { mustSetFocus: true, mustToggle: true };\n const selectOptions = { ...defaultOptions, ...optionsParam };\n\n const otherSelectedNodes = this.getSelectedNodes().filter(\n (selectedNode) => selectedNode !== node,\n );\n\n if (this.isNodeSelected(node)) {\n if (otherSelectedNodes.length) {\n // Part of a multiple selection: keep only this node selected\n for (const otherNode of otherSelectedNodes) {\n this.deselectNode(otherNode);\n }\n } else if (selectOptions.mustToggle) {\n this.deselectNode(node);\n this.triggerEvent(\"tree.deselect\", { node });\n }\n } else {\n const deselectedNode = otherSelectedNodes[0] ?? null;\n\n for (const otherNode of otherSelectedNodes) {\n this.deselectNode(otherNode);\n }\n\n this.addToSelection(node);\n this.openParents(node);\n this.getNodeElementForNode(node).select(selectOptions.mustSetFocus);\n\n this.triggerEvent(\"tree.select\", {\n deselectedNode,\n node,\n });\n }\n\n this.updateTabStop();\n this.saveState();\n }\n\n /* Add a node to the selection, or remove it when it is selected, without\n * changing the other selected nodes.\n * Checks if the node is selectable and saves the state.\n */\n public toggleNodeInSelection(node: Node, mustSetFocus = true): void {\n if (!this.canSelect(node)) {\n return;\n }\n\n if (this.isNodeSelected(node)) {\n this.deselectNode(node);\n this.triggerEvent(\"tree.deselect\", { node });\n } else {\n this.addToSelection(node);\n this.openParents(node);\n this.getNodeElementForNode(node).select(mustSetFocus);\n\n this.triggerEvent(\"tree.select\", { deselectedNode: null, node });\n }\n\n this.updateTabStop();\n this.saveState();\n }\n\n private canSelect(node: Node): boolean {\n if (!this.getSelectable()) {\n return false;\n }\n\n const onCanSelectNode = this.getOnCanSelectNode();\n return onCanSelectNode ? onCanSelectNode(node) : true;\n }\n\n private deselectNode(node: Node): void {\n this.removeFromSelection(node);\n this.getNodeElementForNode(node).deselect();\n }\n}\n"],"names":["getNodeById","getNodeElementForNode","getOnCanSelectNode","getSelectable","openParents","saveState","selectedNodes","selectedSingleNode","triggerEvent","updateTabStop","addToSelection","clear","getSelectedNode","getSelectedNodes","getSelectedNodesUnder","isNodeSelected","removeFromSelection","selectSingleNode","canSelect","deselectNode","select","toggleNodeInSelection","deselect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"selectNodeHandler.js","sources":["../src/selectNodeHandler.ts"],"sourcesContent":["import type {\n GetNodeById,\n GetNodeElementForNode,\n OpenParents,\n TriggerEvent,\n} from \"./methodTypes\";\nimport type { Node, NodeId } from \"./node\";\nimport type { OnCanSelectNode } from \"./options\";\n\nexport interface SelectNodeOptions {\n mustSetFocus?: boolean;\n mustToggle?: boolean;\n}\n\ninterface SelectNodeHandlerParameters {\n getNodeById: GetNodeById;\n getNodeElementForNode: GetNodeElementForNode;\n getOnCanSelectNode: () => OnCanSelectNode | undefined;\n getSelectable: () => boolean;\n openParents: OpenParents;\n saveState: () => void;\n triggerEvent: TriggerEvent;\n updateTabStop: () => void;\n}\n\nexport default class SelectNodeHandler {\n private getNodeById: GetNodeById;\n private getNodeElementForNode: GetNodeElementForNode;\n private getOnCanSelectNode: () => OnCanSelectNode | undefined;\n private getSelectable: () => boolean;\n private openParents: OpenParents;\n private saveState: () => void;\n private selectedNodes: Set<NodeId>;\n private selectedSingleNode: Node | null;\n private triggerEvent: TriggerEvent;\n private updateTabStop: () => void;\n\n constructor({\n getNodeById,\n getNodeElementForNode,\n getOnCanSelectNode,\n getSelectable,\n openParents,\n saveState,\n triggerEvent,\n updateTabStop,\n }: SelectNodeHandlerParameters) {\n this.getNodeById = getNodeById;\n this.getNodeElementForNode = getNodeElementForNode;\n this.getOnCanSelectNode = getOnCanSelectNode;\n this.getSelectable = getSelectable;\n this.openParents = openParents;\n this.saveState = saveState;\n this.selectedNodes = new Set<NodeId>();\n this.selectedSingleNode = null;\n this.triggerEvent = triggerEvent;\n this.updateTabStop = updateTabStop;\n }\n\n public addToSelection(node: Node): void {\n if (node.id == null) {\n this.selectedSingleNode = node;\n } else {\n this.selectedNodes.add(node.id);\n }\n }\n\n public clear(): void {\n this.selectedNodes.clear();\n this.selectedSingleNode = null;\n }\n\n public getSelectedNode(): Node | null {\n const selectedNodes = this.getSelectedNodes();\n\n return selectedNodes.length ? (selectedNodes[0] ?? null) : null;\n }\n\n public getSelectedNodes(): Node[] {\n if (this.selectedSingleNode) {\n return [this.selectedSingleNode];\n }\n\n const selectedNodes: Node[] = [];\n\n this.selectedNodes.forEach((id) => {\n const node = this.getNodeById(id);\n if (node) {\n selectedNodes.push(node);\n }\n });\n\n return selectedNodes;\n }\n\n public getSelectedNodesUnder(parent: Node): Node[] {\n if (this.selectedSingleNode) {\n return parent.isParentOf(this.selectedSingleNode)\n ? [this.selectedSingleNode]\n : [];\n }\n\n const selectedNodes: Node[] = [];\n\n this.selectedNodes.forEach((id) => {\n const node = this.getNodeById(id);\n if (node && parent.isParentOf(node)) {\n selectedNodes.push(node);\n }\n });\n\n return selectedNodes;\n }\n\n public isNodeSelected(node: Node): boolean {\n if (node.id != null) {\n return this.selectedNodes.has(node.id);\n }\n return this.selectedSingleNode ? this.selectedSingleNode === node : false;\n }\n\n public removeFromSelection(node: Node, includeChildren = false): void {\n if (node.id == null) {\n if (this.selectedSingleNode === node) {\n this.selectedSingleNode = null;\n }\n } else {\n this.selectedNodes.delete(node.id);\n\n if (includeChildren) {\n node.iterate((child: Node) => {\n if (child.id != null) {\n this.selectedNodes.delete(child.id);\n }\n return true;\n });\n }\n }\n }\n\n /* Select a single node.\n * Renders the changed elements.\n * Deselects if the node is currently selected (if the mustToggle is on).\n * Deselects the previously selected node.\n * Check if the node is selectable.\n * Saves the state.\n * Options:\n * mustSetFocus: set the focus to the selected node\n * mustToggle: support deselecting the selected node\n */\n public selectSingleNode(node: Node, optionsParam?: SelectNodeOptions) {\n if (!this.canSelect(node)) {\n return;\n }\n\n const defaultOptions = { mustSetFocus: true, mustToggle: true };\n const selectOptions = { ...defaultOptions, ...optionsParam };\n\n const otherSelectedNodes = this.getSelectedNodes().filter(\n (selectedNode) => selectedNode !== node,\n );\n\n if (this.isNodeSelected(node)) {\n if (otherSelectedNodes.length) {\n // Part of a multiple selection: keep only this node selected\n for (const otherNode of otherSelectedNodes) {\n this.deselectNode(otherNode);\n }\n\n for (const otherNode of otherSelectedNodes) {\n this.triggerEvent(\"tree.deselect\", { node: otherNode });\n }\n } else if (selectOptions.mustToggle) {\n this.deselectNode(node);\n this.triggerEvent(\"tree.deselect\", { node });\n }\n } else {\n // tree.select reports the first deselected node; the others, from a\n // multiple selection, get a tree.deselect.\n const [deselectedNode = null, ...alsoDeselectedNodes] =\n otherSelectedNodes;\n\n for (const otherNode of otherSelectedNodes) {\n this.deselectNode(otherNode);\n }\n\n this.addToSelection(node);\n this.openParents(node);\n this.getNodeElementForNode(node).select(selectOptions.mustSetFocus);\n\n for (const otherNode of alsoDeselectedNodes) {\n this.triggerEvent(\"tree.deselect\", { node: otherNode });\n }\n\n this.triggerEvent(\"tree.select\", {\n deselectedNode,\n node,\n });\n }\n\n this.updateTabStop();\n this.saveState();\n }\n\n /* Add a node to the selection, or remove it when it is selected, without\n * changing the other selected nodes.\n * Checks if the node is selectable and saves the state.\n */\n public toggleNodeInSelection(node: Node, mustSetFocus = true): void {\n if (!this.canSelect(node)) {\n return;\n }\n\n if (this.isNodeSelected(node)) {\n this.deselectNode(node);\n this.triggerEvent(\"tree.deselect\", { node });\n } else {\n this.addToSelection(node);\n this.openParents(node);\n this.getNodeElementForNode(node).select(mustSetFocus);\n\n this.triggerEvent(\"tree.select\", { deselectedNode: null, node });\n }\n\n this.updateTabStop();\n this.saveState();\n }\n\n private canSelect(node: Node): boolean {\n if (!this.getSelectable()) {\n return false;\n }\n\n const onCanSelectNode = this.getOnCanSelectNode();\n return onCanSelectNode ? onCanSelectNode(node) : true;\n }\n\n private deselectNode(node: Node): void {\n this.removeFromSelection(node);\n this.getNodeElementForNode(node).deselect();\n }\n}\n"],"names":["getNodeById","getNodeElementForNode","getOnCanSelectNode","getSelectable","openParents","saveState","selectedNodes","selectedSingleNode","triggerEvent","updateTabStop","addToSelection","clear","getSelectedNode","getSelectedNodes","getSelectedNodesUnder","isNodeSelected","removeFromSelection","selectSingleNode","canSelect","deselectNode","select","toggleNodeInSelection","deselect"],"mappings":"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"}
|
package/lib/version.d.ts
CHANGED
package/lib/version.js
CHANGED
package/lib/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sources":["../src/version.ts"],"sourcesContent":["// Generated by config/generateVersion.mjs. Do not edit.\nconst version = \"0.4.
|
|
1
|
+
{"version":3,"file":"version.js","sources":["../src/version.ts"],"sourcesContent":["// Generated by config/generateVersion.mjs. Do not edit.\nconst version = \"0.4.1\";\n\nexport default version;\n"],"names":[],"mappings":"AAAA;AACA,IAAM,OAAO,GAAG;;"}
|