jqtree 1.7.0 → 1.7.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/.github/workflows/ci.yml +2 -10
- package/.github/workflows/codeql-analysis.yml +2 -2
- package/bower.json +1 -1
- package/docs/Gemfile.lock +34 -37
- package/docs/_config.yml +1 -1
- package/docs/_entries/10_changelog.md +4 -0
- package/docs/package.json +7 -7
- package/docs/pnpm-lock.yaml +387 -269
- 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/tree.jquery.js +3 -3
- package/lib/dragAndDropHandler.js +21 -10
- package/lib/elementsRenderer.js +25 -15
- package/lib/mouse.widget.js +12 -1
- package/lib/node.js +13 -10
- package/lib/nodeElement.js +19 -12
- package/lib/saveStateHandler.js +1 -1
- package/lib/scrollHandler.js +7 -3
- package/lib/selectNodeHandler.js +1 -1
- package/lib/simple.widget.js +2 -0
- package/lib/test/jqTree/accessibility.test.js +37 -0
- package/lib/test/jqTree/events.test.js +73 -77
- package/lib/test/node.test.js +7 -4
- package/lib/version.js +1 -1
- package/package.json +36 -40
- package/src/dragAndDropHandler.ts +24 -10
- package/src/elementsRenderer.ts +49 -42
- package/src/jqtreeOptions.ts +3 -3
- 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/jqTree/accessibility.test.ts +25 -0
- package/src/test/jqTree/events.test.ts +79 -93
- package/src/test/jqTree/methods.test.ts +1 -1
- package/src/test/node.test.ts +6 -4
- package/src/test/nodeUtil.test.ts +1 -1
- package/src/tree.jquery.ts +1 -1
- package/src/version.ts +1 -1
- package/tree.jquery.debug.js +100 -54
- 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
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import getGiven from "givens";
|
|
2
2
|
import { rest } from "msw";
|
|
3
3
|
import { setupServer } from "msw/node";
|
|
4
|
+
import { waitFor } from "@testing-library/dom";
|
|
4
5
|
import "../../tree.jquery";
|
|
5
6
|
import exampleData from "../support/exampleData";
|
|
6
7
|
import { titleSpan } from "../support/testUtil";
|
|
@@ -41,17 +42,15 @@ describe("tree.click", () => {
|
|
|
41
42
|
given.$tree.tree({ data: exampleData });
|
|
42
43
|
});
|
|
43
44
|
|
|
44
|
-
it("fires tree.click", () =>
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
const treeClickEvent = e as ClickNodeEvent;
|
|
45
|
+
it("fires tree.click", () => {
|
|
46
|
+
const onClick = jest.fn();
|
|
47
|
+
given.$tree.on("tree.click", onClick);
|
|
48
48
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
})
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
}));
|
|
49
|
+
given.titleSpan.trigger("click");
|
|
50
|
+
expect(onClick).toHaveBeenCalledWith(
|
|
51
|
+
expect.objectContaining({ node: given.node1 })
|
|
52
|
+
);
|
|
53
|
+
});
|
|
55
54
|
});
|
|
56
55
|
|
|
57
56
|
describe("tree.contextmenu", () => {
|
|
@@ -70,17 +69,15 @@ describe("tree.contextmenu", () => {
|
|
|
70
69
|
given.$tree.tree({ data: exampleData });
|
|
71
70
|
});
|
|
72
71
|
|
|
73
|
-
it("fires tree.contextmenu", () =>
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
const treeClickEvent = e as ClickNodeEvent;
|
|
72
|
+
it("fires tree.contextmenu", () => {
|
|
73
|
+
const onContextMenu = jest.fn();
|
|
74
|
+
given.$tree.on("tree.contextmenu", onContextMenu);
|
|
77
75
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
})
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
}));
|
|
76
|
+
given.titleSpan.trigger("contextmenu");
|
|
77
|
+
expect(onContextMenu).toHaveBeenCalledWith(
|
|
78
|
+
expect.objectContaining({ node: given.node1 })
|
|
79
|
+
);
|
|
80
|
+
});
|
|
84
81
|
});
|
|
85
82
|
|
|
86
83
|
describe("tree.dblclick", () => {
|
|
@@ -99,17 +96,15 @@ describe("tree.dblclick", () => {
|
|
|
99
96
|
given.$tree.tree({ data: exampleData });
|
|
100
97
|
});
|
|
101
98
|
|
|
102
|
-
it("fires tree.dblclick", () =>
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
const treeClickEvent = e as ClickNodeEvent;
|
|
99
|
+
it("fires tree.dblclick", () => {
|
|
100
|
+
const onDoubleClick = jest.fn();
|
|
101
|
+
given.$tree.on("tree.dblclick", onDoubleClick);
|
|
106
102
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
})
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
}));
|
|
103
|
+
given.titleSpan.trigger("dblclick");
|
|
104
|
+
expect(onDoubleClick).toHaveBeenCalledWith(
|
|
105
|
+
expect.objectContaining({ node: given.node1 })
|
|
106
|
+
);
|
|
107
|
+
});
|
|
113
108
|
});
|
|
114
109
|
|
|
115
110
|
describe("tree.init", () => {
|
|
@@ -120,22 +115,17 @@ describe("tree.init", () => {
|
|
|
120
115
|
given("$tree", () => $("#tree1"));
|
|
121
116
|
|
|
122
117
|
context("with json data", () => {
|
|
123
|
-
it("is called", () =>
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
given.$tree.tree({
|
|
136
|
-
data: exampleData,
|
|
137
|
-
});
|
|
138
|
-
}));
|
|
118
|
+
it("is called", () => {
|
|
119
|
+
const onInit = jest.fn();
|
|
120
|
+
given.$tree.on("tree.init", onInit);
|
|
121
|
+
|
|
122
|
+
given.$tree.tree({
|
|
123
|
+
data: exampleData,
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
// eslint-disable-next-line jest/prefer-called-with
|
|
127
|
+
expect(onInit).toHaveBeenCalled();
|
|
128
|
+
});
|
|
139
129
|
});
|
|
140
130
|
|
|
141
131
|
context("with data loaded from an url", () => {
|
|
@@ -147,20 +137,17 @@ describe("tree.init", () => {
|
|
|
147
137
|
);
|
|
148
138
|
});
|
|
149
139
|
|
|
150
|
-
it("is called", () =>
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
given.$tree.tree({ dataUrl: "/tree/" });
|
|
163
|
-
}));
|
|
140
|
+
it("is called", async () => {
|
|
141
|
+
const onInit = jest.fn();
|
|
142
|
+
given.$tree.on("tree.init", onInit);
|
|
143
|
+
|
|
144
|
+
given.$tree.tree({ dataUrl: "/tree/" });
|
|
145
|
+
|
|
146
|
+
await waitFor(() => {
|
|
147
|
+
// eslint-disable-next-line jest/prefer-called-with
|
|
148
|
+
expect(onInit).toHaveBeenCalled();
|
|
149
|
+
});
|
|
150
|
+
});
|
|
164
151
|
});
|
|
165
152
|
});
|
|
166
153
|
|
|
@@ -172,16 +159,15 @@ describe("tree.load_data", () => {
|
|
|
172
159
|
given("$tree", () => $("#tree1"));
|
|
173
160
|
|
|
174
161
|
context("when the tree is initialized with data", () => {
|
|
175
|
-
it("fires tree.load_data", () =>
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
})
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
}));
|
|
162
|
+
it("fires tree.load_data", () => {
|
|
163
|
+
const onLoadData = jest.fn();
|
|
164
|
+
given.$tree.on("tree.load_data", onLoadData);
|
|
165
|
+
|
|
166
|
+
given.$tree.tree({ data: exampleData });
|
|
167
|
+
expect(onLoadData).toHaveBeenCalledWith(
|
|
168
|
+
expect.objectContaining({ tree_data: exampleData })
|
|
169
|
+
);
|
|
170
|
+
});
|
|
185
171
|
});
|
|
186
172
|
});
|
|
187
173
|
|
|
@@ -203,35 +189,35 @@ describe("tree.select", () => {
|
|
|
203
189
|
});
|
|
204
190
|
});
|
|
205
191
|
|
|
206
|
-
it("fires tree.
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
192
|
+
it("fires tree.select", () => {
|
|
193
|
+
const onSelect = jest.fn();
|
|
194
|
+
given.$tree.on("tree.select", onSelect);
|
|
195
|
+
|
|
196
|
+
given.titleSpan.trigger("click");
|
|
197
|
+
expect(onSelect).toHaveBeenCalledWith(
|
|
198
|
+
expect.objectContaining({
|
|
199
|
+
node: given.node1,
|
|
200
|
+
deselected_node: null,
|
|
201
|
+
})
|
|
202
|
+
);
|
|
203
|
+
});
|
|
218
204
|
|
|
219
205
|
context("when the node was selected", () => {
|
|
220
206
|
beforeEach(() => {
|
|
221
207
|
given.$tree.tree("selectNode", given.node1);
|
|
222
208
|
});
|
|
223
209
|
|
|
224
|
-
it("fires tree.select with node is null", () =>
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
const treeClickEvent = e as ClickNodeEvent;
|
|
228
|
-
|
|
229
|
-
expect(treeClickEvent.node).toBeNull();
|
|
230
|
-
expect(treeClickEvent.previous_node).toBe(given.node1);
|
|
231
|
-
done();
|
|
232
|
-
});
|
|
210
|
+
it("fires tree.select with node is null", () => {
|
|
211
|
+
const onSelect = jest.fn();
|
|
212
|
+
given.$tree.on("tree.select", onSelect);
|
|
233
213
|
|
|
234
|
-
|
|
235
|
-
|
|
214
|
+
given.titleSpan.trigger("click");
|
|
215
|
+
expect(onSelect).toHaveBeenCalledWith(
|
|
216
|
+
expect.objectContaining({
|
|
217
|
+
node: null,
|
|
218
|
+
previous_node: given.node1,
|
|
219
|
+
})
|
|
220
|
+
);
|
|
221
|
+
});
|
|
236
222
|
});
|
|
237
223
|
});
|
|
@@ -984,7 +984,7 @@ describe("refresh", () => {
|
|
|
984
984
|
|
|
985
985
|
it("rerenders the tree", () => {
|
|
986
986
|
const tree = given.$tree.tree("getTree");
|
|
987
|
-
tree.children[0].name = "node1a";
|
|
987
|
+
(tree.children[0] as INode).name = "node1a";
|
|
988
988
|
|
|
989
989
|
expect(given.$tree).toHaveTreeStructure([
|
|
990
990
|
expect.objectContaining({ name: "node1" }),
|
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.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