tree-element 0.3.1 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/lib/classNames.js +4 -4
- package/lib/classNames.js.map +1 -1
- package/lib/dataLoader.d.ts +0 -1
- package/lib/dataLoader.d.ts.map +1 -1
- package/lib/dataLoader.js +6 -6
- package/lib/dataLoader.js.map +1 -1
- package/lib/elementsRenderer.d.ts +4 -2
- package/lib/elementsRenderer.d.ts.map +1 -1
- package/lib/elementsRenderer.js +35 -21
- package/lib/elementsRenderer.js.map +1 -1
- package/lib/index.d.ts +10 -4
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +75 -18
- package/lib/index.js.map +1 -1
- package/lib/keyHandler.d.ts +14 -3
- package/lib/keyHandler.d.ts.map +1 -1
- package/lib/keyHandler.js +61 -32
- package/lib/keyHandler.js.map +1 -1
- package/lib/methodTypes.d.ts +3 -0
- package/lib/methodTypes.d.ts.map +1 -1
- package/lib/nodeElement/folderElement.d.ts +1 -1
- package/lib/nodeElement/folderElement.d.ts.map +1 -1
- package/lib/nodeElement/folderElement.js +4 -4
- package/lib/nodeElement/folderElement.js.map +1 -1
- package/lib/nodeElement/index.d.ts +3 -2
- package/lib/nodeElement/index.d.ts.map +1 -1
- package/lib/nodeElement/index.js +15 -12
- package/lib/nodeElement/index.js.map +1 -1
- package/lib/options.d.ts +13 -0
- package/lib/options.d.ts.map +1 -1
- package/lib/selectNodeHandler.d.ts +3 -0
- package/lib/selectNodeHandler.d.ts.map +1 -1
- package/lib/selectNodeHandler.js +54 -22
- package/lib/selectNodeHandler.js.map +1 -1
- package/lib/setDefaultOptions.d.ts.map +1 -1
- package/lib/setDefaultOptions.js +5 -4
- package/lib/setDefaultOptions.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 +19 -19
- package/src/classNames.ts +4 -4
- package/src/dataLoader.ts +6 -9
- package/src/elementsRenderer.ts +42 -24
- package/src/index.ts +83 -24
- package/src/keyHandler.ts +84 -34
- package/src/methodTypes.ts +6 -0
- package/src/nodeElement/folderElement.ts +4 -4
- package/src/nodeElement/index.ts +20 -17
- package/src/options.ts +13 -0
- package/src/selectNodeHandler.ts +58 -25
- package/src/setDefaultOptions.ts +5 -4
- package/src/version.ts +1 -1
- package/tree_element.css +16 -0
- package/tree_element.debug.js +260 -124
- package/tree_element.debug.js.map +1 -1
- package/tree_element.js +2 -2
- package/tree_element.js.map +1 -1
package/src/selectNodeHandler.ts
CHANGED
|
@@ -128,9 +128,9 @@ export default class SelectNodeHandler {
|
|
|
128
128
|
this.selectedNodes.delete(node.id);
|
|
129
129
|
|
|
130
130
|
if (includeChildren) {
|
|
131
|
-
node.iterate(() => {
|
|
132
|
-
if (
|
|
133
|
-
this.selectedNodes.delete(
|
|
131
|
+
node.iterate((child: Node) => {
|
|
132
|
+
if (child.id != null) {
|
|
133
|
+
this.selectedNodes.delete(child.id);
|
|
134
134
|
}
|
|
135
135
|
return true;
|
|
136
136
|
});
|
|
@@ -149,37 +149,32 @@ export default class SelectNodeHandler {
|
|
|
149
149
|
* mustToggle: support deselecting the selected node
|
|
150
150
|
*/
|
|
151
151
|
public selectSingleNode(node: Node, optionsParam?: SelectNodeOptions) {
|
|
152
|
-
|
|
153
|
-
const selectOptions = { ...defaultOptions, ...optionsParam };
|
|
154
|
-
|
|
155
|
-
const canSelect = (): boolean => {
|
|
156
|
-
if (!this.getSelectable()) {
|
|
157
|
-
return false;
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
const onCanSelectNode = this.getOnCanSelectNode();
|
|
161
|
-
return onCanSelectNode ? onCanSelectNode(node) : true;
|
|
162
|
-
};
|
|
163
|
-
|
|
164
|
-
if (!canSelect()) {
|
|
152
|
+
if (!this.canSelect(node)) {
|
|
165
153
|
return;
|
|
166
154
|
}
|
|
167
155
|
|
|
168
|
-
const
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
156
|
+
const defaultOptions = { mustSetFocus: true, mustToggle: true };
|
|
157
|
+
const selectOptions = { ...defaultOptions, ...optionsParam };
|
|
158
|
+
|
|
159
|
+
const otherSelectedNodes = this.getSelectedNodes().filter(
|
|
160
|
+
(selectedNode) => selectedNode !== node,
|
|
161
|
+
);
|
|
172
162
|
|
|
173
163
|
if (this.isNodeSelected(node)) {
|
|
174
|
-
if (
|
|
175
|
-
|
|
164
|
+
if (otherSelectedNodes.length) {
|
|
165
|
+
// Part of a multiple selection: keep only this node selected
|
|
166
|
+
for (const otherNode of otherSelectedNodes) {
|
|
167
|
+
this.deselectNode(otherNode);
|
|
168
|
+
}
|
|
169
|
+
} else if (selectOptions.mustToggle) {
|
|
170
|
+
this.deselectNode(node);
|
|
176
171
|
this.triggerEvent("tree.deselect", { node });
|
|
177
172
|
}
|
|
178
173
|
} else {
|
|
179
|
-
const deselectedNode =
|
|
174
|
+
const deselectedNode = otherSelectedNodes[0] ?? null;
|
|
180
175
|
|
|
181
|
-
|
|
182
|
-
|
|
176
|
+
for (const otherNode of otherSelectedNodes) {
|
|
177
|
+
this.deselectNode(otherNode);
|
|
183
178
|
}
|
|
184
179
|
|
|
185
180
|
this.addToSelection(node);
|
|
@@ -195,4 +190,42 @@ export default class SelectNodeHandler {
|
|
|
195
190
|
this.updateTabStop();
|
|
196
191
|
this.saveState();
|
|
197
192
|
}
|
|
193
|
+
|
|
194
|
+
/* Add a node to the selection, or remove it when it is selected, without
|
|
195
|
+
* changing the other selected nodes.
|
|
196
|
+
* Checks if the node is selectable and saves the state.
|
|
197
|
+
*/
|
|
198
|
+
public toggleNodeInSelection(node: Node, mustSetFocus = true): void {
|
|
199
|
+
if (!this.canSelect(node)) {
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
if (this.isNodeSelected(node)) {
|
|
204
|
+
this.deselectNode(node);
|
|
205
|
+
this.triggerEvent("tree.deselect", { node });
|
|
206
|
+
} else {
|
|
207
|
+
this.addToSelection(node);
|
|
208
|
+
this.openParents(node);
|
|
209
|
+
this.getNodeElementForNode(node).select(mustSetFocus);
|
|
210
|
+
|
|
211
|
+
this.triggerEvent("tree.select", { deselectedNode: null, node });
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
this.updateTabStop();
|
|
215
|
+
this.saveState();
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
private canSelect(node: Node): boolean {
|
|
219
|
+
if (!this.getSelectable()) {
|
|
220
|
+
return false;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
const onCanSelectNode = this.getOnCanSelectNode();
|
|
224
|
+
return onCanSelectNode ? onCanSelectNode(node) : true;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
private deselectNode(node: Node): void {
|
|
228
|
+
this.removeFromSelection(node);
|
|
229
|
+
this.getNodeElementForNode(node).deselect();
|
|
230
|
+
}
|
|
198
231
|
}
|
package/src/setDefaultOptions.ts
CHANGED
|
@@ -10,11 +10,11 @@ import { Node } from "./node";
|
|
|
10
10
|
* --tree-element-toggler-color.
|
|
11
11
|
*/
|
|
12
12
|
const triangle = (points: string): string =>
|
|
13
|
-
`<svg width="0.
|
|
13
|
+
`<svg width="0.8em" height="0.8em" viewBox="0 0 10 10" focusable="false"><polygon points="${points}" fill="currentColor"/></svg>`;
|
|
14
14
|
|
|
15
|
-
export const triangleDown = triangle("0.5,
|
|
16
|
-
export const triangleLeft = triangle("9,0.5 9,9.5
|
|
17
|
-
export const triangleRight = triangle("
|
|
15
|
+
export const triangleDown = triangle("0.5,0.5 9.5,0.5 5,9.5");
|
|
16
|
+
export const triangleLeft = triangle("9.5,0.5 9.5,9.5 0.5,5");
|
|
17
|
+
export const triangleRight = triangle("0.5,0.5 0.5,9.5 9.5,5");
|
|
18
18
|
|
|
19
19
|
const defaults: TreeElementOptions = {
|
|
20
20
|
animationSpeed: "fast",
|
|
@@ -29,6 +29,7 @@ const defaults: TreeElementOptions = {
|
|
|
29
29
|
// dataUrl: undefined,
|
|
30
30
|
dragAndDrop: false,
|
|
31
31
|
keyboardSupport: true,
|
|
32
|
+
multiSelect: false,
|
|
32
33
|
nodeClass: Node,
|
|
33
34
|
// onCanMove: undefined, // Can this node be moved?
|
|
34
35
|
// onCanMoveTo: undefined, // Can this node be moved to this position? function(moved_node, target_node, position)
|
package/src/version.ts
CHANGED
package/tree_element.css
CHANGED
|
@@ -86,6 +86,22 @@ ul.tree-element .tree-element-title {
|
|
|
86
86
|
vertical-align: middle;
|
|
87
87
|
}
|
|
88
88
|
|
|
89
|
+
/* The li is the treeitem, so it gets the focus. Show the focus ring around
|
|
90
|
+
the title, not around the li with all its children. */
|
|
91
|
+
|
|
92
|
+
ul.tree-element li.tree-element-common:focus {
|
|
93
|
+
outline: none;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
ul.tree-element li.tree-element-common:focus-visible
|
|
97
|
+
> .tree-element-element
|
|
98
|
+
.tree-element-title {
|
|
99
|
+
/* Same as the default focus ring of the browser. Browsers without
|
|
100
|
+
-webkit-focus-ring-color ignore the second line. */
|
|
101
|
+
outline: auto;
|
|
102
|
+
outline-color: -webkit-focus-ring-color;
|
|
103
|
+
}
|
|
104
|
+
|
|
89
105
|
/* Line up with the titles of folders, after the toggler */
|
|
90
106
|
|
|
91
107
|
ul.tree-element .tree-element-title-button-left {
|