tree-element 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +221 -0
- package/lib/animation.d.ts +5 -0
- package/lib/animation.d.ts.map +1 -0
- package/lib/animation.js +39 -0
- package/lib/animation.js.map +1 -0
- package/lib/classNames.d.ts +34 -0
- package/lib/classNames.d.ts.map +1 -0
- package/lib/classNames.js +39 -0
- package/lib/classNames.js.map +1 -0
- package/lib/dataLoader.d.ts +25 -0
- package/lib/dataLoader.d.ts.map +1 -0
- package/lib/dataLoader.js +69 -0
- package/lib/dataLoader.js.map +1 -0
- package/lib/dragAndDropHandler/binarySearch.d.ts +3 -0
- package/lib/dragAndDropHandler/binarySearch.d.ts.map +1 -0
- package/lib/dragAndDropHandler/binarySearch.js +23 -0
- package/lib/dragAndDropHandler/binarySearch.js.map +1 -0
- package/lib/dragAndDropHandler/dragElement.d.ts +20 -0
- package/lib/dragAndDropHandler/dragElement.d.ts.map +1 -0
- package/lib/dragAndDropHandler/dragElement.js +39 -0
- package/lib/dragAndDropHandler/dragElement.js.map +1 -0
- package/lib/dragAndDropHandler/generateHitAreas.d.ts +13 -0
- package/lib/dragAndDropHandler/generateHitAreas.d.ts.map +1 -0
- package/lib/dragAndDropHandler/generateHitAreas.js +130 -0
- package/lib/dragAndDropHandler/generateHitAreas.js.map +1 -0
- package/lib/dragAndDropHandler/index.d.ts +76 -0
- package/lib/dragAndDropHandler/index.d.ts.map +1 -0
- package/lib/dragAndDropHandler/index.js +311 -0
- package/lib/dragAndDropHandler/index.js.map +1 -0
- package/lib/dragAndDropHandler/iterateVisibleNodes.d.ts +11 -0
- package/lib/dragAndDropHandler/iterateVisibleNodes.d.ts.map +1 -0
- package/lib/dragAndDropHandler/iterateVisibleNodes.js +54 -0
- package/lib/dragAndDropHandler/iterateVisibleNodes.js.map +1 -0
- package/lib/dragAndDropHandler/types.d.ts +11 -0
- package/lib/dragAndDropHandler/types.d.ts.map +1 -0
- package/lib/elementsRenderer.d.ts +53 -0
- package/lib/elementsRenderer.d.ts.map +1 -0
- package/lib/elementsRenderer.js +251 -0
- package/lib/elementsRenderer.js.map +1 -0
- package/lib/events.d.ts +224 -0
- package/lib/events.d.ts.map +1 -0
- package/lib/index.d.ts +367 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +1098 -0
- package/lib/index.js.map +1 -0
- package/lib/keyHandler.d.ts +29 -0
- package/lib/keyHandler.d.ts.map +1 -0
- package/lib/keyHandler.js +107 -0
- package/lib/keyHandler.js.map +1 -0
- package/lib/methodTypes.d.ts +21 -0
- package/lib/methodTypes.d.ts.map +1 -0
- package/lib/mouseHandler.d.ts +60 -0
- package/lib/mouseHandler.d.ts.map +1 -0
- package/lib/mouseHandler.js +283 -0
- package/lib/mouseHandler.js.map +1 -0
- package/lib/mouseUtils.d.ts +9 -0
- package/lib/mouseUtils.d.ts.map +1 -0
- package/lib/mouseUtils.js +15 -0
- package/lib/mouseUtils.js.map +1 -0
- package/lib/node.d.ts +320 -0
- package/lib/node.d.ts.map +1 -0
- package/lib/node.js +737 -0
- package/lib/node.js.map +1 -0
- package/lib/nodeElement/borderDropHint.d.ts +9 -0
- package/lib/nodeElement/borderDropHint.d.ts.map +1 -0
- package/lib/nodeElement/borderDropHint.js +24 -0
- package/lib/nodeElement/borderDropHint.js.map +1 -0
- package/lib/nodeElement/folderElement.d.ts +22 -0
- package/lib/nodeElement/folderElement.d.ts.map +1 -0
- package/lib/nodeElement/folderElement.js +100 -0
- package/lib/nodeElement/folderElement.js.map +1 -0
- package/lib/nodeElement/ghostDropHint.d.ts +18 -0
- package/lib/nodeElement/ghostDropHint.d.ts.map +1 -0
- package/lib/nodeElement/ghostDropHint.js +67 -0
- package/lib/nodeElement/ghostDropHint.js.map +1 -0
- package/lib/nodeElement/index.d.ts +28 -0
- package/lib/nodeElement/index.d.ts.map +1 -0
- package/lib/nodeElement/index.js +66 -0
- package/lib/nodeElement/index.js.map +1 -0
- package/lib/nodeUtils.d.ts +7 -0
- package/lib/nodeUtils.d.ts.map +1 -0
- package/lib/nodeUtils.js +4 -0
- package/lib/nodeUtils.js.map +1 -0
- package/lib/options.d.ts +310 -0
- package/lib/options.d.ts.map +1 -0
- package/lib/package.json +3 -0
- package/lib/positionUtils.d.ts +8 -0
- package/lib/positionUtils.d.ts.map +1 -0
- package/lib/positionUtils.js +14 -0
- package/lib/positionUtils.js.map +1 -0
- package/lib/requestUrl.d.ts +9 -0
- package/lib/requestUrl.d.ts.map +1 -0
- package/lib/requestUrl.js +37 -0
- package/lib/requestUrl.js.map +1 -0
- package/lib/saveStateHandler.d.ts +46 -0
- package/lib/saveStateHandler.d.ts.map +1 -0
- package/lib/saveStateHandler.js +204 -0
- package/lib/saveStateHandler.js.map +1 -0
- package/lib/scrollHandler/containerScrollParent.d.ts +12 -0
- package/lib/scrollHandler/containerScrollParent.d.ts.map +1 -0
- package/lib/scrollHandler/containerScrollParent.js +49 -0
- package/lib/scrollHandler/containerScrollParent.js.map +1 -0
- package/lib/scrollHandler/createScrollParent.d.ts +4 -0
- package/lib/scrollHandler/createScrollParent.d.ts.map +1 -0
- package/lib/scrollHandler/createScrollParent.js +38 -0
- package/lib/scrollHandler/createScrollParent.js.map +1 -0
- package/lib/scrollHandler/documentScrollParent.d.ts +22 -0
- package/lib/scrollHandler/documentScrollParent.d.ts.map +1 -0
- package/lib/scrollHandler/documentScrollParent.js +71 -0
- package/lib/scrollHandler/documentScrollParent.js.map +1 -0
- package/lib/scrollHandler/scrollParent.d.ts +26 -0
- package/lib/scrollHandler/scrollParent.d.ts.map +1 -0
- package/lib/scrollHandler/scrollParent.js +79 -0
- package/lib/scrollHandler/scrollParent.js.map +1 -0
- package/lib/scrollHandler.d.ts +20 -0
- package/lib/scrollHandler.d.ts.map +1 -0
- package/lib/scrollHandler.js +41 -0
- package/lib/scrollHandler.js.map +1 -0
- package/lib/selectNodeHandler.d.ts +38 -0
- package/lib/selectNodeHandler.d.ts.map +1 -0
- package/lib/selectNodeHandler.js +166 -0
- package/lib/selectNodeHandler.js.map +1 -0
- package/lib/setDefaultOptions.d.ts +4 -0
- package/lib/setDefaultOptions.d.ts.map +1 -0
- package/lib/setDefaultOptions.js +86 -0
- package/lib/setDefaultOptions.js.map +1 -0
- package/lib/triggerCustomEvent.d.ts +3 -0
- package/lib/triggerCustomEvent.d.ts.map +1 -0
- package/lib/triggerCustomEvent.js +13 -0
- package/lib/triggerCustomEvent.js.map +1 -0
- package/lib/util.d.ts +3 -0
- package/lib/util.d.ts.map +1 -0
- package/lib/util.js +5 -0
- package/lib/util.js.map +1 -0
- package/lib/version.d.ts +3 -0
- package/lib/version.d.ts.map +1 -0
- package/lib/version.js +5 -0
- package/lib/version.js.map +1 -0
- package/package.json +110 -0
- package/src/animation.ts +48 -0
- package/src/classNames.ts +70 -0
- package/src/dataLoader.ts +92 -0
- package/src/dragAndDropHandler/binarySearch.ts +27 -0
- package/src/dragAndDropHandler/dragElement.ts +62 -0
- package/src/dragAndDropHandler/generateHitAreas.ts +195 -0
- package/src/dragAndDropHandler/index.ts +442 -0
- package/src/dragAndDropHandler/iterateVisibleNodes.ts +91 -0
- package/src/dragAndDropHandler/types.ts +12 -0
- package/src/elementsRenderer.ts +367 -0
- package/src/events.ts +237 -0
- package/src/header.txt +16 -0
- package/src/index.ts +1290 -0
- package/src/keyHandler.ts +139 -0
- package/src/methodTypes.ts +44 -0
- package/src/mouseHandler.ts +391 -0
- package/src/mouseUtils.ts +23 -0
- package/src/node.ts +831 -0
- package/src/nodeElement/borderDropHint.ts +37 -0
- package/src/nodeElement/folderElement.ts +140 -0
- package/src/nodeElement/ghostDropHint.ts +84 -0
- package/src/nodeElement/index.ts +103 -0
- package/src/nodeUtils.ts +12 -0
- package/src/options.ts +325 -0
- package/src/positionUtils.ts +18 -0
- package/src/requestUrl.ts +41 -0
- package/src/saveStateHandler.ts +279 -0
- package/src/scrollHandler/containerScrollParent.ts +71 -0
- package/src/scrollHandler/createScrollParent.ts +51 -0
- package/src/scrollHandler/documentScrollParent.ts +104 -0
- package/src/scrollHandler/scrollParent.ts +117 -0
- package/src/scrollHandler.ts +55 -0
- package/src/selectNodeHandler.ts +192 -0
- package/src/setDefaultOptions.ts +79 -0
- package/src/triggerCustomEvent.ts +14 -0
- package/src/util.ts +5 -0
- package/src/version.ts +4 -0
- package/tree_element.css +195 -0
- package/tree_element.debug.js +4153 -0
- package/tree_element.debug.js.map +1 -0
- package/tree_element.js +21 -0
- package/tree_element.js.map +1 -0
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
import { getBoolString } from './util.js';
|
|
2
|
+
|
|
3
|
+
class ElementsRenderer {
|
|
4
|
+
closedIconElement;
|
|
5
|
+
openedIconElement;
|
|
6
|
+
_autoEscape;
|
|
7
|
+
_buttonLeft;
|
|
8
|
+
_classNames;
|
|
9
|
+
_dragAndDrop;
|
|
10
|
+
_getTree;
|
|
11
|
+
_htmlElement;
|
|
12
|
+
_isNodeSelected;
|
|
13
|
+
_onCreateLi;
|
|
14
|
+
_rtl;
|
|
15
|
+
_setNodeElement;
|
|
16
|
+
_showEmptyFolder;
|
|
17
|
+
_tabIndex;
|
|
18
|
+
constructor({
|
|
19
|
+
autoEscape,
|
|
20
|
+
buttonLeft,
|
|
21
|
+
classNames,
|
|
22
|
+
closedIcon,
|
|
23
|
+
dragAndDrop,
|
|
24
|
+
getTree,
|
|
25
|
+
htmlElement,
|
|
26
|
+
isNodeSelected,
|
|
27
|
+
onCreateLi,
|
|
28
|
+
openedIcon,
|
|
29
|
+
rtl,
|
|
30
|
+
setNodeElement,
|
|
31
|
+
showEmptyFolder,
|
|
32
|
+
tabIndex
|
|
33
|
+
}) {
|
|
34
|
+
this._autoEscape = autoEscape;
|
|
35
|
+
this._buttonLeft = buttonLeft;
|
|
36
|
+
this._classNames = classNames;
|
|
37
|
+
this._dragAndDrop = dragAndDrop;
|
|
38
|
+
this._getTree = getTree;
|
|
39
|
+
this._htmlElement = htmlElement;
|
|
40
|
+
this._isNodeSelected = isNodeSelected;
|
|
41
|
+
this._onCreateLi = onCreateLi;
|
|
42
|
+
this._rtl = rtl;
|
|
43
|
+
this._setNodeElement = setNodeElement;
|
|
44
|
+
this._showEmptyFolder = showEmptyFolder;
|
|
45
|
+
this._tabIndex = tabIndex;
|
|
46
|
+
this.openedIconElement = this._createButtonElement(openedIcon ?? "+");
|
|
47
|
+
this.closedIconElement = this._createButtonElement(closedIcon ?? "-");
|
|
48
|
+
}
|
|
49
|
+
render(fromNode) {
|
|
50
|
+
if (fromNode?.parent) {
|
|
51
|
+
this.renderFromNode(fromNode);
|
|
52
|
+
} else {
|
|
53
|
+
this.renderFromRoot();
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
renderFromNode(node) {
|
|
57
|
+
if (!node.element) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const currentLi = node.element;
|
|
61
|
+
const newLi = this._createLi(node, node.getLevel());
|
|
62
|
+
currentLi.replaceWith(newLi);
|
|
63
|
+
|
|
64
|
+
// create children
|
|
65
|
+
this._createDomElements(newLi, node.children, false, node.getLevel() + 1);
|
|
66
|
+
}
|
|
67
|
+
renderFromRoot() {
|
|
68
|
+
this._htmlElement.textContent = '';
|
|
69
|
+
const tree = this._getTree();
|
|
70
|
+
if (tree) {
|
|
71
|
+
this._createDomElements(this._htmlElement, tree.children, true, 1);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
_attachNodeData(node, li) {
|
|
75
|
+
node.element = li;
|
|
76
|
+
this._setNodeElement(li, node);
|
|
77
|
+
}
|
|
78
|
+
_createButtonElement(value) {
|
|
79
|
+
if (typeof value === "string") {
|
|
80
|
+
// convert value to html
|
|
81
|
+
const div = document.createElement("div");
|
|
82
|
+
div.innerHTML = value;
|
|
83
|
+
return document.createTextNode(div.innerHTML);
|
|
84
|
+
} else if (value.nodeType) {
|
|
85
|
+
return value;
|
|
86
|
+
} else {
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
_createDomElements(element, children, isRootNode, level) {
|
|
91
|
+
const ul = this._createUl(isRootNode);
|
|
92
|
+
element.appendChild(ul);
|
|
93
|
+
for (const child of children) {
|
|
94
|
+
const li = this._createLi(child, level);
|
|
95
|
+
ul.appendChild(li);
|
|
96
|
+
if (child.hasChildren()) {
|
|
97
|
+
this._createDomElements(li, child.children, false, level + 1);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
_createFolderLi(node, level, isSelected) {
|
|
102
|
+
const buttonClasses = this._getButtonClasses(node);
|
|
103
|
+
const folderClasses = this._getFolderClasses(node, isSelected);
|
|
104
|
+
const iconElement = node.is_open ? this.openedIconElement : this.closedIconElement;
|
|
105
|
+
|
|
106
|
+
// li
|
|
107
|
+
const li = document.createElement("li");
|
|
108
|
+
li.className = `${this._classNames.common} ${folderClasses}`;
|
|
109
|
+
li.setAttribute("role", "none");
|
|
110
|
+
|
|
111
|
+
// div
|
|
112
|
+
const div = document.createElement("div");
|
|
113
|
+
div.className = `${this._classNames.element} ${this._classNames.common}`;
|
|
114
|
+
div.setAttribute("role", "none");
|
|
115
|
+
li.appendChild(div);
|
|
116
|
+
|
|
117
|
+
// button link
|
|
118
|
+
const buttonLink = document.createElement("a");
|
|
119
|
+
buttonLink.className = buttonClasses;
|
|
120
|
+
if (iconElement) {
|
|
121
|
+
buttonLink.appendChild(iconElement.cloneNode(true));
|
|
122
|
+
}
|
|
123
|
+
if (this._buttonLeft) {
|
|
124
|
+
div.appendChild(buttonLink);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// title span
|
|
128
|
+
const titleSpan = this._createTitleSpan(node.name, isSelected, true, level);
|
|
129
|
+
titleSpan.setAttribute("aria-expanded", getBoolString(node.is_open));
|
|
130
|
+
div.appendChild(titleSpan);
|
|
131
|
+
if (!this._buttonLeft) {
|
|
132
|
+
div.appendChild(buttonLink);
|
|
133
|
+
}
|
|
134
|
+
return li;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/* Create the <li> element
|
|
138
|
+
* Attach it to node.element.
|
|
139
|
+
* Call onCreateLi
|
|
140
|
+
*/
|
|
141
|
+
_createLi(node, level) {
|
|
142
|
+
const isSelected = this._isNodeSelected(node);
|
|
143
|
+
const mustShowFolder = node.isFolder() || node.isEmptyFolder && this._showEmptyFolder;
|
|
144
|
+
const li = mustShowFolder ? this._createFolderLi(node, level, isSelected) : this._createNodeLi(node, level, isSelected);
|
|
145
|
+
this._attachNodeData(node, li);
|
|
146
|
+
if (this._onCreateLi) {
|
|
147
|
+
this._onCreateLi(node, li, isSelected);
|
|
148
|
+
}
|
|
149
|
+
return li;
|
|
150
|
+
}
|
|
151
|
+
_createNodeLi(node, level, isSelected) {
|
|
152
|
+
const liClasses = [this._classNames.common];
|
|
153
|
+
if (isSelected) {
|
|
154
|
+
liClasses.push(this._classNames.selected);
|
|
155
|
+
}
|
|
156
|
+
const classString = liClasses.join(" ");
|
|
157
|
+
|
|
158
|
+
// li
|
|
159
|
+
const li = document.createElement("li");
|
|
160
|
+
li.className = classString;
|
|
161
|
+
li.setAttribute("role", "none");
|
|
162
|
+
|
|
163
|
+
// div
|
|
164
|
+
const div = document.createElement("div");
|
|
165
|
+
div.className = `${this._classNames.element} ${this._classNames.common}`;
|
|
166
|
+
div.setAttribute("role", "none");
|
|
167
|
+
li.appendChild(div);
|
|
168
|
+
|
|
169
|
+
// title span
|
|
170
|
+
const titleSpan = this._createTitleSpan(node.name, isSelected, false, level);
|
|
171
|
+
div.appendChild(titleSpan);
|
|
172
|
+
return li;
|
|
173
|
+
}
|
|
174
|
+
_createTitleSpan(nodeName, isSelected, isFolder, level) {
|
|
175
|
+
const titleSpan = document.createElement("span");
|
|
176
|
+
let classes = `${this._classNames.title} ${this._classNames.common}`;
|
|
177
|
+
if (isFolder) {
|
|
178
|
+
classes += ` ${this._classNames.titleFolder}`;
|
|
179
|
+
}
|
|
180
|
+
classes += ` ${this._buttonLeft ? this._classNames.titleButtonLeft : this._classNames.titleButtonRight}`;
|
|
181
|
+
titleSpan.className = classes;
|
|
182
|
+
if (isSelected) {
|
|
183
|
+
const tabIndex = this._tabIndex;
|
|
184
|
+
if (tabIndex !== undefined) {
|
|
185
|
+
titleSpan.setAttribute("tabindex", `${tabIndex}`);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
this._setTreeItemAriaAttributes(titleSpan, nodeName, level, isSelected);
|
|
189
|
+
if (this._autoEscape) {
|
|
190
|
+
titleSpan.textContent = nodeName;
|
|
191
|
+
} else {
|
|
192
|
+
titleSpan.innerHTML = nodeName;
|
|
193
|
+
}
|
|
194
|
+
return titleSpan;
|
|
195
|
+
}
|
|
196
|
+
_createUl(isRootNode) {
|
|
197
|
+
let classString;
|
|
198
|
+
let role;
|
|
199
|
+
if (!isRootNode) {
|
|
200
|
+
classString = "";
|
|
201
|
+
role = "group";
|
|
202
|
+
} else {
|
|
203
|
+
classString = this._classNames.tree;
|
|
204
|
+
role = "tree";
|
|
205
|
+
if (this._rtl) {
|
|
206
|
+
classString += ` ${this._classNames.rtl}`;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
if (this._dragAndDrop) {
|
|
210
|
+
classString += ` ${this._classNames.dnd}`;
|
|
211
|
+
}
|
|
212
|
+
const ul = document.createElement("ul");
|
|
213
|
+
ul.className = `${this._classNames.common} ${classString}`;
|
|
214
|
+
ul.setAttribute("role", role);
|
|
215
|
+
return ul;
|
|
216
|
+
}
|
|
217
|
+
_getButtonClasses(node) {
|
|
218
|
+
const classes = [this._classNames.toggler, this._classNames.common];
|
|
219
|
+
if (!node.is_open) {
|
|
220
|
+
classes.push(this._classNames.closed);
|
|
221
|
+
}
|
|
222
|
+
if (this._buttonLeft) {
|
|
223
|
+
classes.push(this._classNames.togglerLeft);
|
|
224
|
+
} else {
|
|
225
|
+
classes.push(this._classNames.togglerRight);
|
|
226
|
+
}
|
|
227
|
+
return classes.join(" ");
|
|
228
|
+
}
|
|
229
|
+
_getFolderClasses(node, isSelected) {
|
|
230
|
+
const classes = [this._classNames.folder];
|
|
231
|
+
if (!node.is_open) {
|
|
232
|
+
classes.push(this._classNames.closed);
|
|
233
|
+
}
|
|
234
|
+
if (isSelected) {
|
|
235
|
+
classes.push(this._classNames.selected);
|
|
236
|
+
}
|
|
237
|
+
if (node.is_loading) {
|
|
238
|
+
classes.push(this._classNames.loading);
|
|
239
|
+
}
|
|
240
|
+
return classes.join(" ");
|
|
241
|
+
}
|
|
242
|
+
_setTreeItemAriaAttributes(element, name, level, isSelected) {
|
|
243
|
+
element.setAttribute("aria-label", name);
|
|
244
|
+
element.setAttribute("aria-level", `${level}`);
|
|
245
|
+
element.setAttribute("aria-selected", getBoolString(isSelected));
|
|
246
|
+
element.setAttribute("role", "treeitem");
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
export { ElementsRenderer as default };
|
|
251
|
+
//# sourceMappingURL=elementsRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elementsRenderer.js","sources":["../src/elementsRenderer.ts"],"sourcesContent":["import type { ClassNames } from \"./classNames\";\nimport type { GetTree, IsNodeSelected } from \"./methodTypes\";\nimport type { Node } from \"./node\";\nimport type { IconElement, OnCreateLi } from \"./options\";\n\nimport { getBoolString } from \"./util\";\n\ninterface ElementsRendererParams {\n autoEscape: boolean;\n buttonLeft: boolean;\n classNames: ClassNames;\n closedIcon?: IconElement;\n dragAndDrop: boolean;\n getTree: GetTree;\n htmlElement: HTMLElement;\n isNodeSelected: IsNodeSelected;\n onCreateLi?: OnCreateLi;\n openedIcon?: IconElement;\n rtl?: boolean;\n setNodeElement: (element: HTMLElement, node: Node) => void;\n showEmptyFolder: boolean;\n tabIndex?: number;\n}\n\nexport default class ElementsRenderer {\n public closedIconElement?: HTMLElement | Text;\n public openedIconElement?: HTMLElement | Text;\n private autoEscape: boolean;\n private buttonLeft: boolean;\n private classNames: ClassNames;\n private dragAndDrop: boolean;\n private getTree: GetTree;\n private htmlElement: HTMLElement;\n private isNodeSelected: IsNodeSelected;\n private onCreateLi?: OnCreateLi;\n private rtl?: boolean;\n private setNodeElement: (element: HTMLElement, node: Node) => void;\n private showEmptyFolder: boolean;\n private tabIndex?: number;\n\n constructor({\n autoEscape,\n buttonLeft,\n classNames,\n closedIcon,\n dragAndDrop,\n getTree,\n htmlElement,\n isNodeSelected,\n onCreateLi,\n openedIcon,\n rtl,\n setNodeElement,\n showEmptyFolder,\n tabIndex,\n }: ElementsRendererParams) {\n this.autoEscape = autoEscape;\n this.buttonLeft = buttonLeft;\n this.classNames = classNames;\n this.dragAndDrop = dragAndDrop;\n this.getTree = getTree;\n this.htmlElement = htmlElement;\n this.isNodeSelected = isNodeSelected;\n this.onCreateLi = onCreateLi;\n this.rtl = rtl;\n this.setNodeElement = setNodeElement;\n this.showEmptyFolder = showEmptyFolder;\n this.tabIndex = tabIndex;\n this.openedIconElement = this.createButtonElement(openedIcon ?? \"+\");\n this.closedIconElement = this.createButtonElement(closedIcon ?? \"-\");\n }\n\n public render(fromNode: Node | null): void {\n if (fromNode?.parent) {\n this.renderFromNode(fromNode);\n } else {\n this.renderFromRoot();\n }\n }\n\n public renderFromNode(node: Node): void {\n if (!node.element) {\n return;\n }\n\n const currentLi = node.element;\n const newLi = this.createLi(node, node.getLevel());\n currentLi.replaceWith(newLi);\n\n // create children\n this.createDomElements(newLi, node.children, false, node.getLevel() + 1);\n }\n\n public renderFromRoot(): void {\n this.htmlElement.textContent = '';\n\n const tree = this.getTree();\n\n if (tree) {\n this.createDomElements(this.htmlElement, tree.children, true, 1);\n }\n }\n\n private attachNodeData(node: Node, li: HTMLElement): void {\n node.element = li;\n this.setNodeElement(li, node);\n }\n\n private createButtonElement(\n value: IconElement,\n ): HTMLElement | Text | undefined {\n if (typeof value === \"string\") {\n // convert value to html\n const div = document.createElement(\"div\");\n div.innerHTML = value;\n\n return document.createTextNode(div.innerHTML);\n } else if (value.nodeType) {\n return value;\n } else {\n return undefined;\n }\n }\n\n private createDomElements(\n element: Element,\n children: Node[],\n isRootNode: boolean,\n level: number,\n ): void {\n const ul = this.createUl(isRootNode);\n element.appendChild(ul);\n\n for (const child of children) {\n const li = this.createLi(child, level);\n ul.appendChild(li);\n\n if (child.hasChildren()) {\n this.createDomElements(li, child.children, false, level + 1);\n }\n }\n }\n\n private createFolderLi(\n node: Node,\n level: number,\n isSelected: boolean,\n ): HTMLLIElement {\n const buttonClasses = this.getButtonClasses(node);\n const folderClasses = this.getFolderClasses(node, isSelected);\n\n const iconElement = node.is_open\n ? this.openedIconElement\n : this.closedIconElement;\n\n // li\n const li = document.createElement(\"li\");\n li.className = `${this.classNames.common} ${folderClasses}`;\n li.setAttribute(\"role\", \"none\");\n\n // div\n const div = document.createElement(\"div\");\n div.className = `${this.classNames.element} ${this.classNames.common}`;\n div.setAttribute(\"role\", \"none\");\n\n li.appendChild(div);\n\n // button link\n const buttonLink = document.createElement(\"a\");\n buttonLink.className = buttonClasses;\n\n if (iconElement) {\n buttonLink.appendChild(iconElement.cloneNode(true));\n }\n\n if (this.buttonLeft) {\n div.appendChild(buttonLink);\n }\n\n // title span\n const titleSpan = this.createTitleSpan(\n node.name,\n isSelected,\n true,\n level,\n );\n titleSpan.setAttribute(\"aria-expanded\", getBoolString(node.is_open));\n div.appendChild(titleSpan);\n\n if (!this.buttonLeft) {\n div.appendChild(buttonLink);\n }\n\n return li;\n }\n\n /* Create the <li> element\n * Attach it to node.element.\n * Call onCreateLi\n */\n private createLi(node: Node, level: number): HTMLLIElement {\n const isSelected = this.isNodeSelected(node);\n\n const mustShowFolder =\n node.isFolder() || (node.isEmptyFolder && this.showEmptyFolder);\n\n const li = mustShowFolder\n ? this.createFolderLi(node, level, isSelected)\n : this.createNodeLi(node, level, isSelected);\n\n this.attachNodeData(node, li);\n\n if (this.onCreateLi) {\n this.onCreateLi(node, li, isSelected);\n }\n\n return li;\n }\n\n private createNodeLi(\n node: Node,\n level: number,\n isSelected: boolean,\n ): HTMLLIElement {\n const liClasses = [this.classNames.common];\n\n if (isSelected) {\n liClasses.push(this.classNames.selected);\n }\n\n const classString = liClasses.join(\" \");\n\n // li\n const li = document.createElement(\"li\");\n li.className = classString;\n li.setAttribute(\"role\", \"none\");\n\n // div\n const div = document.createElement(\"div\");\n div.className = `${this.classNames.element} ${this.classNames.common}`;\n div.setAttribute(\"role\", \"none\");\n\n li.appendChild(div);\n\n // title span\n const titleSpan = this.createTitleSpan(\n node.name,\n isSelected,\n false,\n level,\n );\n div.appendChild(titleSpan);\n\n return li;\n }\n\n private createTitleSpan(\n nodeName: string,\n isSelected: boolean,\n isFolder: boolean,\n level: number,\n ): HTMLSpanElement {\n const titleSpan = document.createElement(\"span\");\n\n let classes = `${this.classNames.title} ${this.classNames.common}`;\n\n if (isFolder) {\n classes += ` ${this.classNames.titleFolder}`;\n }\n\n classes += ` ${this.buttonLeft ? this.classNames.titleButtonLeft : this.classNames.titleButtonRight}`;\n\n titleSpan.className = classes;\n\n if (isSelected) {\n const tabIndex = this.tabIndex;\n\n if (tabIndex !== undefined) {\n titleSpan.setAttribute(\"tabindex\", `${tabIndex}`);\n }\n }\n\n this.setTreeItemAriaAttributes(titleSpan, nodeName, level, isSelected);\n\n if (this.autoEscape) {\n titleSpan.textContent = nodeName;\n } else {\n titleSpan.innerHTML = nodeName;\n }\n\n return titleSpan;\n }\n\n private createUl(isRootNode: boolean): HTMLUListElement {\n let classString;\n let role;\n\n if (!isRootNode) {\n classString = \"\";\n role = \"group\";\n } else {\n classString = this.classNames.tree;\n role = \"tree\";\n\n if (this.rtl) {\n classString += ` ${this.classNames.rtl}`;\n }\n }\n\n if (this.dragAndDrop) {\n classString += ` ${this.classNames.dnd}`;\n }\n\n const ul = document.createElement(\"ul\");\n ul.className = `${this.classNames.common} ${classString}`;\n\n ul.setAttribute(\"role\", role);\n\n return ul;\n }\n\n private getButtonClasses(node: Node): string {\n const classes = [this.classNames.toggler, this.classNames.common];\n\n if (!node.is_open) {\n classes.push(this.classNames.closed);\n }\n\n if (this.buttonLeft) {\n classes.push(this.classNames.togglerLeft);\n } else {\n classes.push(this.classNames.togglerRight);\n }\n\n return classes.join(\" \");\n }\n\n private getFolderClasses(node: Node, isSelected: boolean): string {\n const classes = [this.classNames.folder];\n\n if (!node.is_open) {\n classes.push(this.classNames.closed);\n }\n\n if (isSelected) {\n classes.push(this.classNames.selected);\n }\n\n if (node.is_loading) {\n classes.push(this.classNames.loading);\n }\n\n return classes.join(\" \");\n }\n\n private setTreeItemAriaAttributes(\n element: HTMLElement,\n name: string,\n level: number,\n isSelected: boolean,\n ) {\n element.setAttribute(\"aria-label\", name);\n element.setAttribute(\"aria-level\", `${level}`);\n element.setAttribute(\"aria-selected\", getBoolString(isSelected));\n element.setAttribute(\"role\", \"treeitem\");\n }\n}\n"],"names":["autoEscape","buttonLeft","classNames","dragAndDrop","getTree","htmlElement","isNodeSelected","onCreateLi","rtl","setNodeElement","showEmptyFolder","tabIndex","createButtonElement","createLi","createDomElements","attachNodeData","createUl","createFolderLi","getButtonClasses","getFolderClasses","createTitleSpan","createNodeLi","setTreeItemAriaAttributes"],"mappings":"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"}
|
package/lib/events.d.ts
ADDED
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import type { Node, NodeData, Position } from "./node.js";
|
|
2
|
+
export interface MoveInfo {
|
|
3
|
+
doMove: () => void;
|
|
4
|
+
movedNode: Node;
|
|
5
|
+
originalEvent: Event;
|
|
6
|
+
position: Position;
|
|
7
|
+
previousParent: Node | null;
|
|
8
|
+
targetNode: Node;
|
|
9
|
+
}
|
|
10
|
+
export type TreeEvent<Name extends TreeEventName = TreeEventName> = CustomEvent<TreeEvents[Name]>;
|
|
11
|
+
export type TreeEventName = keyof TreeEvents;
|
|
12
|
+
export interface TreeEvents {
|
|
13
|
+
/**
|
|
14
|
+
* Dispatched once, after the tree is rendered for the first time. With
|
|
15
|
+
* `dataUrl` this is after the data has arrived, so it is the moment the
|
|
16
|
+
* api is safe to use:
|
|
17
|
+
*
|
|
18
|
+
* ```js
|
|
19
|
+
* element.addEventListener("tree.init", () => {
|
|
20
|
+
* tree.selectNode(tree.getNodeByName("node1"));
|
|
21
|
+
* });
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
24
|
+
* No `detail`.
|
|
25
|
+
*
|
|
26
|
+
* With inline `data`, the tree is rendered inside the constructor, so
|
|
27
|
+
* this event has already fired by the time the constructor returns. Add
|
|
28
|
+
* the listener to the element _before_ creating the tree:
|
|
29
|
+
*
|
|
30
|
+
* ```js
|
|
31
|
+
* const element = document.getElementById("tree1");
|
|
32
|
+
*
|
|
33
|
+
* element.addEventListener("tree.init", () => {
|
|
34
|
+
* // ...
|
|
35
|
+
* });
|
|
36
|
+
*
|
|
37
|
+
* const tree = new TreeElement({ data, htmlElement: element });
|
|
38
|
+
* ```
|
|
39
|
+
*
|
|
40
|
+
* @group Lifecycle
|
|
41
|
+
*/
|
|
42
|
+
"tree.init": undefined;
|
|
43
|
+
/**
|
|
44
|
+
* Dispatched after the tree has been re-rendered. No `detail`.
|
|
45
|
+
*
|
|
46
|
+
* @group Lifecycle
|
|
47
|
+
*/
|
|
48
|
+
"tree.refresh": undefined;
|
|
49
|
+
/**
|
|
50
|
+
* Dispatched when a node title is clicked. Call `preventDefault()` to
|
|
51
|
+
* stop the tree from selecting the node:
|
|
52
|
+
*
|
|
53
|
+
* ```js
|
|
54
|
+
* element.addEventListener("tree.click", (e) => {
|
|
55
|
+
* e.preventDefault();
|
|
56
|
+
* console.log("clicked", e.detail.node.name, "but not selected");
|
|
57
|
+
* });
|
|
58
|
+
* ```
|
|
59
|
+
*
|
|
60
|
+
* @group Mouse
|
|
61
|
+
*/
|
|
62
|
+
"tree.click": {
|
|
63
|
+
node: Node;
|
|
64
|
+
originalEvent: MouseEvent;
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* Dispatched when a node title is double clicked.
|
|
68
|
+
*
|
|
69
|
+
* @group Mouse
|
|
70
|
+
*/
|
|
71
|
+
"tree.dblclick": {
|
|
72
|
+
node: Node;
|
|
73
|
+
originalEvent: MouseEvent;
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* Dispatched on a right click on a node, unless `useContextMenu` is
|
|
77
|
+
* `false`. The browser's own menu is suppressed.
|
|
78
|
+
*
|
|
79
|
+
* @group Mouse
|
|
80
|
+
*/
|
|
81
|
+
"tree.contextmenu": {
|
|
82
|
+
node: Node;
|
|
83
|
+
originalEvent: MouseEvent;
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* Dispatched when a folder is opened, after the animation.
|
|
87
|
+
*
|
|
88
|
+
* @group Opening and closing
|
|
89
|
+
*/
|
|
90
|
+
"tree.open": {
|
|
91
|
+
node: Node;
|
|
92
|
+
};
|
|
93
|
+
/**
|
|
94
|
+
* Dispatched when a folder is closed, after the animation.
|
|
95
|
+
*
|
|
96
|
+
* @group Opening and closing
|
|
97
|
+
*/
|
|
98
|
+
"tree.close": {
|
|
99
|
+
node: Node;
|
|
100
|
+
};
|
|
101
|
+
/**
|
|
102
|
+
* Dispatched when a node is selected. A deselection is
|
|
103
|
+
* [`tree.deselect`](#tree-deselect) instead, so `node` is always a node
|
|
104
|
+
* here.
|
|
105
|
+
*
|
|
106
|
+
* ```js
|
|
107
|
+
* element.addEventListener("tree.select", (e) => {
|
|
108
|
+
* console.log("selected", e.detail.node.name);
|
|
109
|
+
* });
|
|
110
|
+
* ```
|
|
111
|
+
*
|
|
112
|
+
* @group Selection
|
|
113
|
+
*/
|
|
114
|
+
"tree.select": {
|
|
115
|
+
/** The node that was selected before, if any. */
|
|
116
|
+
deselectedNode: Node | null;
|
|
117
|
+
/** The node that is now selected. */
|
|
118
|
+
node: Node;
|
|
119
|
+
};
|
|
120
|
+
/**
|
|
121
|
+
* Dispatched when the selected node is deselected, which happens when it
|
|
122
|
+
* is clicked again or passed to `selectNode` again. No `tree.select` is
|
|
123
|
+
* dispatched for it.
|
|
124
|
+
*
|
|
125
|
+
* ```js
|
|
126
|
+
* element.addEventListener("tree.deselect", (e) => {
|
|
127
|
+
* console.log("deselected", e.detail.node.name);
|
|
128
|
+
* });
|
|
129
|
+
* ```
|
|
130
|
+
*
|
|
131
|
+
* Selecting another node does not dispatch it — that is a `tree.select`
|
|
132
|
+
* with the previous node in `deselectedNode`. It is also not dispatched
|
|
133
|
+
* with `mustToggle: false`, or by `selectNode(null)`,
|
|
134
|
+
* `removeFromSelection`, `removeNode`, `loadData` and restoring a saved
|
|
135
|
+
* state.
|
|
136
|
+
*
|
|
137
|
+
* @group Selection
|
|
138
|
+
*/
|
|
139
|
+
"tree.deselect": {
|
|
140
|
+
node: Node;
|
|
141
|
+
};
|
|
142
|
+
/**
|
|
143
|
+
* Dispatched when a node is dropped after a drag.
|
|
144
|
+
*
|
|
145
|
+
* | `detail` | Type |
|
|
146
|
+
* | ------------------------- | --------------------------------- |
|
|
147
|
+
* | `moveInfo.movedNode` | `Node` |
|
|
148
|
+
* | `moveInfo.targetNode` | `Node` |
|
|
149
|
+
* | `moveInfo.position` | `"before" \| "after" \| "inside"` |
|
|
150
|
+
* | `moveInfo.previousParent` | `Node \| null` |
|
|
151
|
+
* | `moveInfo.originalEvent` | `Event` |
|
|
152
|
+
* | `moveInfo.doMove` | `() => void` |
|
|
153
|
+
*
|
|
154
|
+
* Call `preventDefault()` to keep the tree as it is, and
|
|
155
|
+
* `moveInfo.doMove()` to apply the move later. See
|
|
156
|
+
* [Drag and drop](/guide/drag-and-drop#reacting-to-a-move).
|
|
157
|
+
*
|
|
158
|
+
* @group Drag and drop
|
|
159
|
+
*/
|
|
160
|
+
"tree.move": {
|
|
161
|
+
/** @hidden The fields are in the table above. */
|
|
162
|
+
moveInfo: MoveInfo;
|
|
163
|
+
};
|
|
164
|
+
/**
|
|
165
|
+
* Dispatched when data is set on the tree, both from the `data` option
|
|
166
|
+
* and from a url.
|
|
167
|
+
*
|
|
168
|
+
* @group Loading data
|
|
169
|
+
*/
|
|
170
|
+
"tree.set_data": {
|
|
171
|
+
/** The node whose children were replaced, if it was a subtree. */
|
|
172
|
+
node?: Node;
|
|
173
|
+
treeData?: NodeData[];
|
|
174
|
+
};
|
|
175
|
+
/**
|
|
176
|
+
* Dispatched when a request starts.
|
|
177
|
+
*
|
|
178
|
+
* @group Loading data
|
|
179
|
+
*/
|
|
180
|
+
"tree.loading_data": {
|
|
181
|
+
element: HTMLElement;
|
|
182
|
+
/** The node whose children are loading, if it is a subtree. */
|
|
183
|
+
node?: Node;
|
|
184
|
+
};
|
|
185
|
+
/**
|
|
186
|
+
* Dispatched when a request finishes. It is dispatched when the request
|
|
187
|
+
* fails too; a [`tree.load_failed`](#tree-load-failed) follows it.
|
|
188
|
+
*
|
|
189
|
+
* @group Loading data
|
|
190
|
+
*/
|
|
191
|
+
"tree.loaded_data": {
|
|
192
|
+
element: HTMLElement;
|
|
193
|
+
/** The node whose children were loaded, if it was a subtree. */
|
|
194
|
+
node?: Node;
|
|
195
|
+
};
|
|
196
|
+
/**
|
|
197
|
+
* Dispatched when a request returns an error status, after
|
|
198
|
+
* `tree.loaded_data`:
|
|
199
|
+
*
|
|
200
|
+
* ```js
|
|
201
|
+
* element.addEventListener("tree.load_failed", (e) => {
|
|
202
|
+
* console.error("loading the tree failed", e.detail.response.status);
|
|
203
|
+
* });
|
|
204
|
+
* ```
|
|
205
|
+
*
|
|
206
|
+
* @group Loading data
|
|
207
|
+
*/
|
|
208
|
+
"tree.load_failed": {
|
|
209
|
+
response: Response;
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
type TreeEventMap = {
|
|
213
|
+
[Name in TreeEventName]: TreeEvent<Name>;
|
|
214
|
+
};
|
|
215
|
+
declare global {
|
|
216
|
+
interface DocumentEventMap extends TreeEventMap {
|
|
217
|
+
}
|
|
218
|
+
interface HTMLElementEventMap extends TreeEventMap {
|
|
219
|
+
}
|
|
220
|
+
interface WindowEventMap extends TreeEventMap {
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
export {};
|
|
224
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAEvD,MAAM,WAAW,QAAQ;IACrB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,SAAS,EAAE,IAAI,CAAC;IAChB,aAAa,EAAE,KAAK,CAAC;IACrB,QAAQ,EAAE,QAAQ,CAAC;IACnB,cAAc,EAAE,IAAI,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,IAAI,CAAC;CACpB;AAGD,MAAM,MAAM,SAAS,CAAC,IAAI,SAAS,aAAa,GAAG,aAAa,IAAI,WAAW,CAC3E,UAAU,CAAC,IAAI,CAAC,CACnB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,MAAM,UAAU,CAAC;AAO7C,MAAM,WAAW,UAAU;IACvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,WAAW,EAAE,SAAS,CAAC;IACvB;;;;OAIG;IACH,cAAc,EAAE,SAAS,CAAC;IAC1B;;;;;;;;;;;;OAYG;IACH,YAAY,EAAE;QACV,IAAI,EAAE,IAAI,CAAC;QACX,aAAa,EAAE,UAAU,CAAC;KAC7B,CAAC;IACF;;;;OAIG;IACH,eAAe,EAAE;QACb,IAAI,EAAE,IAAI,CAAC;QACX,aAAa,EAAE,UAAU,CAAC;KAC7B,CAAC;IACF;;;;;OAKG;IACH,kBAAkB,EAAE;QAChB,IAAI,EAAE,IAAI,CAAC;QACX,aAAa,EAAE,UAAU,CAAC;KAC7B,CAAC;IACF;;;;OAIG;IACH,WAAW,EAAE;QACT,IAAI,EAAE,IAAI,CAAC;KACd,CAAC;IACF;;;;OAIG;IACH,YAAY,EAAE;QACV,IAAI,EAAE,IAAI,CAAC;KACd,CAAC;IACF;;;;;;;;;;;;OAYG;IACH,aAAa,EAAE;QACX,iDAAiD;QACjD,cAAc,EAAE,IAAI,GAAG,IAAI,CAAC;QAC5B,qCAAqC;QACrC,IAAI,EAAE,IAAI,CAAC;KACd,CAAC;IACF;;;;;;;;;;;;;;;;;;OAkBG;IACH,eAAe,EAAE;QACb,IAAI,EAAE,IAAI,CAAC;KACd,CAAC;IACF;;;;;;;;;;;;;;;;;OAiBG;IACH,WAAW,EAAE;QACT,iDAAiD;QACjD,QAAQ,EAAE,QAAQ,CAAC;KACtB,CAAC;IACF;;;;;OAKG;IACH,eAAe,EAAE;QACb,kEAAkE;QAClE,IAAI,CAAC,EAAE,IAAI,CAAC;QACZ,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;KACzB,CAAC;IACF;;;;OAIG;IACH,mBAAmB,EAAE;QACjB,OAAO,EAAE,WAAW,CAAC;QACrB,+DAA+D;QAC/D,IAAI,CAAC,EAAE,IAAI,CAAC;KACf,CAAC;IACF;;;;;OAKG;IACH,kBAAkB,EAAE;QAChB,OAAO,EAAE,WAAW,CAAC;QACrB,gEAAgE;QAChE,IAAI,CAAC,EAAE,IAAI,CAAC;KACf,CAAC;IACF;;;;;;;;;;;OAWG;IACH,kBAAkB,EAAE;QAChB,QAAQ,EAAE,QAAQ,CAAC;KACtB,CAAC;CACL;AAGD,KAAK,YAAY,GAAG;KACf,IAAI,IAAI,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC;CAC3C,CAAC;AAGF,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,gBAAiB,SAAQ,YAAY;KAAI;IAEnD,UAAU,mBAAoB,SAAQ,YAAY;KAAI;IAEtD,UAAU,cAAe,SAAQ,YAAY;KAAI;CACpD"}
|