jqtree 1.7.0 → 1.7.2
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/.github/workflows/ci.yml +2 -15
- package/.github/workflows/codeql-analysis.yml +2 -2
- package/.github/workflows/size.yml +24 -0
- package/README.md +1 -1
- package/bower.json +1 -1
- package/docs/Gemfile.lock +39 -40
- package/docs/_config.yml +1 -1
- package/docs/_entries/03_features.md +1 -1
- package/docs/_entries/10_changelog.md +9 -0
- package/docs/_entries/16_closedicon.md +17 -3
- package/docs/_entries/31_openedicon.md +17 -3
- package/docs/package.json +7 -7
- package/docs/pnpm-lock.yaml +378 -284
- package/docs/static/bower.json +2 -2
- package/docs/static/bower_components/fontawesome/css/all.min.css +6 -2
- package/docs/static/bower_components/fontawesome/webfonts/fa-brands-400.ttf +0 -0
- package/docs/static/bower_components/fontawesome/webfonts/fa-brands-400.woff2 +0 -0
- package/docs/static/bower_components/fontawesome/webfonts/fa-regular-400.ttf +0 -0
- package/docs/static/bower_components/fontawesome/webfonts/fa-regular-400.woff2 +0 -0
- package/docs/static/bower_components/fontawesome/webfonts/fa-solid-900.ttf +0 -0
- package/docs/static/bower_components/fontawesome/webfonts/fa-solid-900.woff2 +0 -0
- package/docs/static/bower_components/fontawesome/webfonts/fa-v4compatibility.ttf +0 -0
- package/docs/static/bower_components/fontawesome/webfonts/fa-v4compatibility.woff2 +0 -0
- package/docs/static/bower_components/jquery/dist/jquery.js +813 -1102
- package/docs/static/bower_components/jquery/dist/jquery.min.js +2 -2
- package/docs/static/documentation.css +104 -222
- package/docs/static/examples/autoescape.js +15 -17
- package/docs/static/examples/autoscroll.js +5 -7
- package/docs/static/examples/button-on-right.js +4 -6
- package/docs/static/examples/custom_html.js +22 -24
- package/docs/static/examples/drag-outside.js +23 -25
- package/docs/static/examples/drag_and_drop.js +4 -6
- package/docs/static/examples/icon_buttons.js +3 -5
- package/docs/static/examples/load_json_data.js +14 -16
- package/docs/static/examples/load_json_data_from_server.js +1 -3
- package/docs/static/examples/load_on_demand.js +3 -5
- package/docs/static/examples/multiple_select.js +19 -21
- package/docs/static/examples/right-to-left.js +2 -4
- package/docs/static/examples/save_state.js +2 -4
- package/docs/tree.jquery.js +3 -3
- package/lib/dataLoader.js +3 -3
- package/lib/dragAndDropHandler.js +22 -11
- package/lib/elementsRenderer.js +26 -16
- package/lib/keyHandler.js +1 -1
- package/lib/mouse.widget.js +13 -2
- package/lib/node.js +17 -14
- package/lib/nodeElement.js +20 -13
- package/lib/playwright/coverage.js +11 -16
- package/lib/playwright/playwright.test.js +37 -58
- package/lib/playwright/testUtils.js +27 -44
- package/lib/saveStateHandler.js +2 -2
- package/lib/scrollHandler.js +8 -4
- package/lib/selectNodeHandler.js +2 -2
- package/lib/simple.widget.js +5 -3
- package/lib/test/jqTree/accessibility.test.js +37 -0
- package/lib/test/jqTree/events.test.js +73 -77
- package/lib/test/jqTree/loadOnDemand.test.js +5 -4
- package/lib/test/jqTree/methods.test.js +2 -2
- package/lib/test/jqTree/options.test.js +43 -2
- package/lib/test/node.test.js +7 -4
- package/lib/tree.jquery.js +5 -5
- package/lib/version.js +1 -1
- package/package.json +37 -41
- package/src/dragAndDropHandler.ts +24 -10
- package/src/elementsRenderer.ts +57 -50
- package/src/jqtreeOptions.ts +5 -5
- package/src/mouse.widget.ts +12 -0
- package/src/node.ts +10 -5
- package/src/nodeElement.ts +27 -21
- package/src/saveStateHandler.ts +1 -1
- package/src/scrollHandler.ts +6 -2
- package/src/selectNodeHandler.ts +1 -1
- package/src/simple.widget.ts +2 -0
- package/src/test/.eslintrc +2 -1
- package/src/test/jqTree/accessibility.test.ts +25 -0
- package/src/test/jqTree/events.test.ts +79 -93
- package/src/test/jqTree/loadOnDemand.test.ts +6 -5
- package/src/test/jqTree/methods.test.ts +27 -27
- package/src/test/jqTree/options.test.ts +61 -8
- package/src/test/node.test.ts +6 -4
- package/src/test/nodeUtil.test.ts +1 -1
- package/src/tree.jquery.d.ts +20 -11
- package/src/tree.jquery.ts +1 -1
- package/src/version.ts +1 -1
- package/tree.jquery.debug.js +143 -97
- package/tree.jquery.debug.js.map +1 -1
- package/tree.jquery.js +3 -3
- package/tree.jquery.js.map +1 -1
- package/tsconfig.json +1 -0
- package/.tool-versions +0 -1
- package/docs/static/bower_components/fontawesome/webfonts/fa-brands-400.eot +0 -0
- package/docs/static/bower_components/fontawesome/webfonts/fa-brands-400.svg +0 -3717
- package/docs/static/bower_components/fontawesome/webfonts/fa-brands-400.woff +0 -0
- package/docs/static/bower_components/fontawesome/webfonts/fa-regular-400.eot +0 -0
- package/docs/static/bower_components/fontawesome/webfonts/fa-regular-400.svg +0 -801
- package/docs/static/bower_components/fontawesome/webfonts/fa-regular-400.woff +0 -0
- package/docs/static/bower_components/fontawesome/webfonts/fa-solid-900.eot +0 -0
- package/docs/static/bower_components/fontawesome/webfonts/fa-solid-900.svg +0 -5028
- package/docs/static/bower_components/fontawesome/webfonts/fa-solid-900.woff +0 -0
|
@@ -164,6 +164,56 @@ describe("autoOpen", () => {
|
|
|
164
164
|
});
|
|
165
165
|
});
|
|
166
166
|
|
|
167
|
+
describe("closedIcon", () => {
|
|
168
|
+
it("renders a string", () => {
|
|
169
|
+
const $tree = $("#tree1");
|
|
170
|
+
$tree.tree({
|
|
171
|
+
closedIcon: "closed",
|
|
172
|
+
data: exampleData,
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
const $button = $tree.find("a.jqtree-toggler:first");
|
|
176
|
+
expect($button.text()).toBe("closed");
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
it("escapes html", () => {
|
|
180
|
+
const $tree = $("#tree1");
|
|
181
|
+
$tree.tree({
|
|
182
|
+
closedIcon: "<span>test</span>",
|
|
183
|
+
data: exampleData,
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
const $button = $tree.find("a.jqtree-toggler:first");
|
|
187
|
+
expect($button.text()).toBe("<span>test</span>");
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
it("renders a jquery element", () => {
|
|
191
|
+
const $tree = $("#tree1");
|
|
192
|
+
$tree.tree({
|
|
193
|
+
closedIcon: $("<span class='abc'>test</span>"),
|
|
194
|
+
data: exampleData,
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
const $span = $tree.find("a.jqtree-toggler:first span.abc");
|
|
198
|
+
expect($span.text()).toBe("test");
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
it("renders a html element", () => {
|
|
202
|
+
const closedIcon = document.createElement("span");
|
|
203
|
+
closedIcon.className = "abc";
|
|
204
|
+
closedIcon.textContent = "test";
|
|
205
|
+
|
|
206
|
+
const $tree = $("#tree1");
|
|
207
|
+
$tree.tree({
|
|
208
|
+
closedIcon,
|
|
209
|
+
data: exampleData,
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
const $span = $tree.find("a.jqtree-toggler:first span.abc");
|
|
213
|
+
expect($span.text()).toBe("test");
|
|
214
|
+
});
|
|
215
|
+
});
|
|
216
|
+
|
|
167
217
|
describe("dataUrl", () => {
|
|
168
218
|
const exampleStructure = [
|
|
169
219
|
expect.objectContaining({ name: "node1" }),
|
|
@@ -201,7 +251,7 @@ describe("dataUrl", () => {
|
|
|
201
251
|
const data = nodeName ? [nodeName] : exampleData;
|
|
202
252
|
|
|
203
253
|
return response(ctx.status(200), ctx.json(data));
|
|
204
|
-
})
|
|
254
|
+
}),
|
|
205
255
|
);
|
|
206
256
|
});
|
|
207
257
|
|
|
@@ -323,7 +373,7 @@ describe("onGetStateFromStorage and onSetStateFromStorage", () => {
|
|
|
323
373
|
JSON.stringify({
|
|
324
374
|
open_nodes: [123],
|
|
325
375
|
selected_node: [123],
|
|
326
|
-
})
|
|
376
|
+
}),
|
|
327
377
|
);
|
|
328
378
|
|
|
329
379
|
it("restores the state", () => {
|
|
@@ -351,8 +401,11 @@ describe("onLoadFailed", () => {
|
|
|
351
401
|
beforeEach(() => {
|
|
352
402
|
server.use(
|
|
353
403
|
rest.get("/tree/", (_request, response, ctx) =>
|
|
354
|
-
response(
|
|
355
|
-
|
|
404
|
+
response(
|
|
405
|
+
ctx.status(500),
|
|
406
|
+
ctx.body("Internal server error"),
|
|
407
|
+
),
|
|
408
|
+
),
|
|
356
409
|
);
|
|
357
410
|
});
|
|
358
411
|
|
|
@@ -366,7 +419,7 @@ describe("onLoadFailed", () => {
|
|
|
366
419
|
|
|
367
420
|
await waitFor(() => {
|
|
368
421
|
expect(onLoadFailed).toHaveBeenCalledWith(
|
|
369
|
-
expect.objectContaining({ status: 500 })
|
|
422
|
+
expect.objectContaining({ status: 500 }),
|
|
370
423
|
);
|
|
371
424
|
});
|
|
372
425
|
});
|
|
@@ -432,7 +485,7 @@ describe("saveState", () => {
|
|
|
432
485
|
|
|
433
486
|
it("saves the state to local storage", () => {
|
|
434
487
|
expect(localStorage.getItem("tree")).toBe(
|
|
435
|
-
'{"open_nodes":[123],"selected_node":[123]}'
|
|
488
|
+
'{"open_nodes":[123],"selected_node":[123]}',
|
|
436
489
|
);
|
|
437
490
|
});
|
|
438
491
|
});
|
|
@@ -442,7 +495,7 @@ describe("saveState", () => {
|
|
|
442
495
|
|
|
443
496
|
it("uses the string as a key", () => {
|
|
444
497
|
expect(localStorage.getItem("my-state")).toBe(
|
|
445
|
-
'{"open_nodes":[123],"selected_node":[123]}'
|
|
498
|
+
'{"open_nodes":[123],"selected_node":[123]}',
|
|
446
499
|
);
|
|
447
500
|
});
|
|
448
501
|
});
|
|
@@ -462,7 +515,7 @@ describe("saveState", () => {
|
|
|
462
515
|
beforeEach(() => {
|
|
463
516
|
localStorage.setItem(
|
|
464
517
|
"tree",
|
|
465
|
-
'{"open_nodes":[123],"selected_node":[123]}'
|
|
518
|
+
'{"open_nodes":[123],"selected_node":[123]}',
|
|
466
519
|
);
|
|
467
520
|
|
|
468
521
|
given.$tree.tree({
|
package/src/test/node.test.ts
CHANGED
|
@@ -164,7 +164,7 @@ describe("addChild", () => {
|
|
|
164
164
|
});
|
|
165
165
|
|
|
166
166
|
it("sets the parent of the child", () => {
|
|
167
|
-
expect(given.node.children[0]
|
|
167
|
+
expect(given.node.children[0]?.parent).toEqual(given.node);
|
|
168
168
|
});
|
|
169
169
|
});
|
|
170
170
|
|
|
@@ -538,14 +538,16 @@ describe("getLastChild", () => {
|
|
|
538
538
|
context("when its last child is open and has children", () => {
|
|
539
539
|
beforeEach(() => {
|
|
540
540
|
const child2 = given.node.children[1];
|
|
541
|
-
child2
|
|
542
|
-
child2
|
|
541
|
+
child2?.append("child2a");
|
|
542
|
+
child2?.append("child2b");
|
|
543
543
|
});
|
|
544
544
|
|
|
545
545
|
context("and the last child is open", () => {
|
|
546
546
|
beforeEach(() => {
|
|
547
547
|
const child2 = given.node.children[1];
|
|
548
|
-
child2
|
|
548
|
+
if (child2) {
|
|
549
|
+
child2.is_open = true;
|
|
550
|
+
}
|
|
549
551
|
});
|
|
550
552
|
|
|
551
553
|
it("returns the last child of that child", () => {
|
package/src/tree.jquery.d.ts
CHANGED
|
@@ -34,6 +34,11 @@ interface ClickNodeEvent {
|
|
|
34
34
|
previous_node?: INode;
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
+
interface SelectNodeOptions {
|
|
38
|
+
mustToggle?: boolean;
|
|
39
|
+
mustSetFocus?: boolean;
|
|
40
|
+
}
|
|
41
|
+
|
|
37
42
|
interface SavedState {
|
|
38
43
|
open_nodes: NodeId[];
|
|
39
44
|
selected_node: NodeId[];
|
|
@@ -44,7 +49,7 @@ interface IJQTreeOptions {
|
|
|
44
49
|
autoEscape?: boolean;
|
|
45
50
|
autoOpen?: boolean | number | string;
|
|
46
51
|
buttonLeft?: boolean;
|
|
47
|
-
closedIcon?: string |
|
|
52
|
+
closedIcon?: string | HTMLElement | JQuery<HTMLElement>;
|
|
48
53
|
data?: NodeData[];
|
|
49
54
|
dataFilter?: (data: NodeData[]) => NodeData[];
|
|
50
55
|
dataUrl?: DataUrl;
|
|
@@ -61,7 +66,7 @@ interface IJQTreeOptions {
|
|
|
61
66
|
onLoading?: (isLoading: boolean, node: INode, $el: JQuery) => void;
|
|
62
67
|
onGetStateFromStorage?: () => string;
|
|
63
68
|
onSetStateFromStorage?: (data: string) => void;
|
|
64
|
-
openedIcon?: string |
|
|
69
|
+
openedIcon?: string | HTMLElement | JQuery<HTMLElement>;
|
|
65
70
|
openFolderDelay?: number | false;
|
|
66
71
|
rtl?: boolean;
|
|
67
72
|
selectable?: boolean;
|
|
@@ -79,17 +84,17 @@ interface IJQTreePlugin {
|
|
|
79
84
|
(
|
|
80
85
|
behavior: "addNodeAfter",
|
|
81
86
|
newNodeInfo: NodeData,
|
|
82
|
-
existingNode: INode
|
|
87
|
+
existingNode: INode,
|
|
83
88
|
): INode | null;
|
|
84
89
|
(
|
|
85
90
|
behavior: "addNodeBefore",
|
|
86
91
|
newNodeInfo: NodeData,
|
|
87
|
-
existingNode: INode
|
|
92
|
+
existingNode: INode,
|
|
88
93
|
): INode | null;
|
|
89
94
|
(
|
|
90
95
|
behavior: "addParentNode",
|
|
91
96
|
newNodeInfo: NodeData,
|
|
92
|
-
existingNode: INode
|
|
97
|
+
existingNode: INode,
|
|
93
98
|
): INode | null;
|
|
94
99
|
(behavior: "addToSelection", node: INode, mustSetFocus?: boolean): JQuery;
|
|
95
100
|
(behavior: "appendNode", newNodeInfo: NodeData, parentNode?: INode): INode;
|
|
@@ -97,7 +102,7 @@ interface IJQTreePlugin {
|
|
|
97
102
|
(behavior: "destroy"): void;
|
|
98
103
|
(
|
|
99
104
|
behavior: "getNodeByCallback",
|
|
100
|
-
callback: (node: INode) => boolean
|
|
105
|
+
callback: (node: INode) => boolean,
|
|
101
106
|
): INode | null;
|
|
102
107
|
(behavior: "getNodeByHtmlElement", element: Element | JQuery): INode | null;
|
|
103
108
|
(behavior: "getNodeById", id: NodeId): INode | null;
|
|
@@ -116,14 +121,14 @@ interface IJQTreePlugin {
|
|
|
116
121
|
behavior: "loadDataFromUrl",
|
|
117
122
|
param1?: string | null | INode,
|
|
118
123
|
param2?: INode | null | (() => void),
|
|
119
|
-
param3?: () => void
|
|
124
|
+
param3?: () => void,
|
|
120
125
|
): JQuery;
|
|
121
126
|
(behavior: "moveDown"): JQuery;
|
|
122
127
|
(
|
|
123
128
|
behavior: "moveNode",
|
|
124
129
|
node: INode,
|
|
125
130
|
targetNode: INode,
|
|
126
|
-
position: string
|
|
131
|
+
position: string,
|
|
127
132
|
): JQuery;
|
|
128
133
|
(behavior: "moveUp"): JQuery;
|
|
129
134
|
(behavior: "openNode", node: INode): JQuery;
|
|
@@ -131,13 +136,13 @@ interface IJQTreePlugin {
|
|
|
131
136
|
(
|
|
132
137
|
behavior: "openNode",
|
|
133
138
|
node: INode,
|
|
134
|
-
onFinished: (node: INode) => void
|
|
139
|
+
onFinished: (node: INode) => void,
|
|
135
140
|
): JQuery;
|
|
136
141
|
(
|
|
137
142
|
behavior: "openNode",
|
|
138
143
|
node: INode,
|
|
139
144
|
slide: boolean,
|
|
140
|
-
onFinished?: (node: INode) => void
|
|
145
|
+
onFinished?: (node: INode) => void,
|
|
141
146
|
): JQuery;
|
|
142
147
|
(behavior: "prependNode", newNodeInfo: NodeData, parentNode?: INode): INode;
|
|
143
148
|
(behavior: "refresh"): JQuery;
|
|
@@ -145,7 +150,11 @@ interface IJQTreePlugin {
|
|
|
145
150
|
(behavior: "removeFromSelection", node: INode): JQuery;
|
|
146
151
|
(behavior: "removeNode", node: INode): JQuery;
|
|
147
152
|
(behavior: "scrollToNode", node: INode): JQuery;
|
|
148
|
-
(
|
|
153
|
+
(
|
|
154
|
+
behavior: "selectNode",
|
|
155
|
+
node: INode | null,
|
|
156
|
+
optionsParam?: SelectNodeOptions,
|
|
157
|
+
): JQuery;
|
|
149
158
|
(behavior: "setOption", option: string, value: unknown): JQuery;
|
|
150
159
|
(behavior: "setState", options: Record<string, unknown>): JQuery;
|
|
151
160
|
(behavior: "toggle", node: INode, slideParam?: boolean): JQuery;
|
package/src/tree.jquery.ts
CHANGED
|
@@ -777,7 +777,7 @@ export class JqTreeWidget extends MouseWidget<JQTreeOptions> {
|
|
|
777
777
|
// Set initial state, either by restoring the state or auto-opening nodes
|
|
778
778
|
// result: must load nodes on demand?
|
|
779
779
|
private setInitialState(): boolean {
|
|
780
|
-
const restoreState = (): boolean
|
|
780
|
+
const restoreState = (): [boolean, boolean] => {
|
|
781
781
|
// result: is state restored, must load on demand?
|
|
782
782
|
if (!this.options.saveState) {
|
|
783
783
|
return [false, false];
|
package/src/version.ts
CHANGED