jqtree 1.8.2 → 1.8.3

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.
Files changed (222) hide show
  1. package/bower.json +1 -1
  2. package/package.json +20 -19
  3. package/src/dragAndDropHandler/generateHitAreas.ts +47 -43
  4. package/src/nodeElement/ghostDropHint.ts +3 -37
  5. package/src/nodeElement/index.ts +1 -1
  6. package/src/saveStateHandler.ts +43 -59
  7. package/src/version.ts +1 -1
  8. package/tree.jquery.debug.js +69 -106
  9. package/tree.jquery.debug.js.map +1 -1
  10. package/tree.jquery.js +2 -2
  11. package/tree.jquery.js.map +1 -1
  12. package/.editorconfig +0 -12
  13. package/.eslintrc +0 -48
  14. package/.github/workflows/ci.yml +0 -68
  15. package/.github/workflows/codeql-analysis.yml +0 -32
  16. package/.github/workflows/size.yml +0 -24
  17. package/.github/workflows/static.yml +0 -57
  18. package/.prettier +0 -3
  19. package/config/.postcssrc +0 -6
  20. package/config/babel.config.json +0 -11
  21. package/config/babel.coverage.config.json +0 -4
  22. package/config/jest.config.js +0 -24
  23. package/config/jest.polyfills.js +0 -14
  24. package/config/playwright.config.js +0 -18
  25. package/config/production +0 -6
  26. package/config/rollup.config.mjs +0 -71
  27. package/css/jqtree.postcss +0 -193
  28. package/devserver/devserver.js +0 -7
  29. package/devserver/devserver_scroll.js +0 -8
  30. package/devserver/index.html +0 -22
  31. package/devserver/test_index.html +0 -22
  32. package/devserver/test_scroll.html +0 -28
  33. package/devserver/test_scroll_container.html +0 -39
  34. package/docs/.ruby-version +0 -1
  35. package/docs/Gemfile +0 -5
  36. package/docs/Gemfile.lock +0 -82
  37. package/docs/_config.yml +0 -126
  38. package/docs/_entries/events/index.md +0 -6
  39. package/docs/_entries/events/tree-click.md +0 -37
  40. package/docs/_entries/events/tree-close.md +0 -15
  41. package/docs/_entries/events/tree-contextmenu.md +0 -21
  42. package/docs/_entries/events/tree-dblclick.md +0 -19
  43. package/docs/_entries/events/tree-init.md +0 -15
  44. package/docs/_entries/events/tree-load-data.md +0 -15
  45. package/docs/_entries/events/tree-loading-data.md +0 -27
  46. package/docs/_entries/events/tree-move.md +0 -73
  47. package/docs/_entries/events/tree-open.md +0 -15
  48. package/docs/_entries/events/tree-refresh.md +0 -12
  49. package/docs/_entries/events/tree-select.md +0 -28
  50. package/docs/_entries/functions/addnodeafter.md +0 -20
  51. package/docs/_entries/functions/addnodebefore.md +0 -8
  52. package/docs/_entries/functions/addparentnode.md +0 -20
  53. package/docs/_entries/functions/appendnode.md +0 -50
  54. package/docs/_entries/functions/closenode.md +0 -23
  55. package/docs/_entries/functions/destroy.md +0 -12
  56. package/docs/_entries/functions/getnodebycallback.md +0 -24
  57. package/docs/_entries/functions/getnodebyhtmlelement.md +0 -29
  58. package/docs/_entries/functions/getnodebyid.md +0 -21
  59. package/docs/_entries/functions/getselectednode.md +0 -10
  60. package/docs/_entries/functions/getstate.md +0 -19
  61. package/docs/_entries/functions/gettree.md +0 -12
  62. package/docs/_entries/functions/index.md +0 -6
  63. package/docs/_entries/functions/is-node-selected.md +0 -11
  64. package/docs/_entries/functions/isdragging.md +0 -12
  65. package/docs/_entries/functions/loaddata.md +0 -46
  66. package/docs/_entries/functions/loaddatafromurl.md +0 -55
  67. package/docs/_entries/functions/movedown.md +0 -8
  68. package/docs/_entries/functions/movenode.md +0 -15
  69. package/docs/_entries/functions/moveup.md +0 -8
  70. package/docs/_entries/functions/opennode.md +0 -44
  71. package/docs/_entries/functions/prependnode.md +0 -21
  72. package/docs/_entries/functions/refresh.md +0 -12
  73. package/docs/_entries/functions/reload.md +0 -22
  74. package/docs/_entries/functions/removenode.md +0 -12
  75. package/docs/_entries/functions/scrolltonode.md +0 -13
  76. package/docs/_entries/functions/selectnode.md +0 -45
  77. package/docs/_entries/functions/setoption.md +0 -12
  78. package/docs/_entries/functions/setstate.md +0 -8
  79. package/docs/_entries/functions/toggle.md +0 -25
  80. package/docs/_entries/functions/tojson.md +0 -13
  81. package/docs/_entries/functions/updatenode.md +0 -50
  82. package/docs/_entries/general/changelog.md +0 -434
  83. package/docs/_entries/general/demo.html +0 -28
  84. package/docs/_entries/general/downloads.md +0 -9
  85. package/docs/_entries/general/examples.md +0 -8
  86. package/docs/_entries/general/features.md +0 -15
  87. package/docs/_entries/general/index.md +0 -7
  88. package/docs/_entries/general/introduction.md +0 -9
  89. package/docs/_entries/general/requirements.md +0 -6
  90. package/docs/_entries/general/tutorial.md +0 -71
  91. package/docs/_entries/general/usecases.md +0 -15
  92. package/docs/_entries/multiple_selection/add-to-selection.md +0 -21
  93. package/docs/_entries/multiple_selection/get-selected-nodes.md +0 -10
  94. package/docs/_entries/multiple_selection/index.md +0 -9
  95. package/docs/_entries/multiple_selection/remove-from-selection.md +0 -11
  96. package/docs/_entries/node/children.md +0 -12
  97. package/docs/_entries/node/getdata.md +0 -17
  98. package/docs/_entries/node/getlevel.md +0 -13
  99. package/docs/_entries/node/getnextnode.md +0 -12
  100. package/docs/_entries/node/getnextsibling.md +0 -10
  101. package/docs/_entries/node/getnextvisiblenode.md +0 -15
  102. package/docs/_entries/node/getpreviousnode.md +0 -12
  103. package/docs/_entries/node/getprevioussibling.md +0 -10
  104. package/docs/_entries/node/getpreviousvisiblenode.md +0 -15
  105. package/docs/_entries/node/index.md +0 -13
  106. package/docs/_entries/node/parent.md +0 -10
  107. package/docs/_entries/options/animationspeed.md +0 -7
  108. package/docs/_entries/options/autoescape.md +0 -6
  109. package/docs/_entries/options/autoopen.md +0 -28
  110. package/docs/_entries/options/buttonleft.md +0 -12
  111. package/docs/_entries/options/closedicon.md +0 -26
  112. package/docs/_entries/options/data-url.md +0 -45
  113. package/docs/_entries/options/data.md +0 -46
  114. package/docs/_entries/options/datafilter.md +0 -17
  115. package/docs/_entries/options/draganddrop.md +0 -18
  116. package/docs/_entries/options/index.md +0 -6
  117. package/docs/_entries/options/keyboardsupport.md +0 -14
  118. package/docs/_entries/options/oncanmove.md +0 -22
  119. package/docs/_entries/options/oncanmoveto.md +0 -22
  120. package/docs/_entries/options/oncanselectnode.md +0 -26
  121. package/docs/_entries/options/oncreateli.md +0 -22
  122. package/docs/_entries/options/ondragmove.md +0 -20
  123. package/docs/_entries/options/ondragstop.md +0 -20
  124. package/docs/_entries/options/onismovehandle.md +0 -17
  125. package/docs/_entries/options/onloadfailed.md +0 -15
  126. package/docs/_entries/options/onloading.md +0 -22
  127. package/docs/_entries/options/openedicon.md +0 -26
  128. package/docs/_entries/options/openfolderdelay.md +0 -15
  129. package/docs/_entries/options/rtl.md +0 -18
  130. package/docs/_entries/options/savestate.md +0 -39
  131. package/docs/_entries/options/selectable.md +0 -18
  132. package/docs/_entries/options/showemptyfolder.md +0 -26
  133. package/docs/_entries/options/slide.md +0 -12
  134. package/docs/_entries/options/start_dnd_delay.md +0 -13
  135. package/docs/_entries/options/tabindex.md +0 -14
  136. package/docs/_entries/options/usecontextmenu.md +0 -14
  137. package/docs/_examples/01_load_json_data.html +0 -45
  138. package/docs/_examples/02_load_json_data_from_server.html +0 -29
  139. package/docs/_examples/03_drag_and_drop.html +0 -42
  140. package/docs/_examples/04_save_state.html +0 -46
  141. package/docs/_examples/05_load_on_demand.html +0 -68
  142. package/docs/_examples/06_autoescape.html +0 -45
  143. package/docs/_examples/07_autoscroll.html +0 -42
  144. package/docs/_examples/08_multiple_select.html +0 -60
  145. package/docs/_examples/09_custom_html.html +0 -61
  146. package/docs/_examples/10_icon_buttons.html +0 -26
  147. package/docs/_examples/11_right-to-left.html +0 -25
  148. package/docs/_examples/12_button_on_right.html +0 -26
  149. package/docs/_examples/13_drag_outside.html +0 -48
  150. package/docs/_examples/14_filter.html +0 -111
  151. package/docs/_layouts/example.html +0 -7
  152. package/docs/_layouts/page.html +0 -26
  153. package/docs/documentation.css +0 -3
  154. package/docs/index.html +0 -65
  155. package/docs/package.json +0 -22
  156. package/docs/pnpm-lock.yaml +0 -892
  157. package/docs/postcss.config.js +0 -7
  158. package/docs/static/bower.json +0 -8
  159. package/docs/static/bower_components/fontawesome/css/all.min.css +0 -9
  160. package/docs/static/bower_components/fontawesome/webfonts/fa-brands-400.ttf +0 -0
  161. package/docs/static/bower_components/fontawesome/webfonts/fa-brands-400.woff2 +0 -0
  162. package/docs/static/bower_components/fontawesome/webfonts/fa-regular-400.ttf +0 -0
  163. package/docs/static/bower_components/fontawesome/webfonts/fa-regular-400.woff2 +0 -0
  164. package/docs/static/bower_components/fontawesome/webfonts/fa-solid-900.ttf +0 -0
  165. package/docs/static/bower_components/fontawesome/webfonts/fa-solid-900.woff2 +0 -0
  166. package/docs/static/bower_components/fontawesome/webfonts/fa-v4compatibility.ttf +0 -0
  167. package/docs/static/bower_components/fontawesome/webfonts/fa-v4compatibility.woff2 +0 -0
  168. package/docs/static/bower_components/jquery/dist/jquery.js +0 -10704
  169. package/docs/static/bower_components/jquery/dist/jquery.min.js +0 -2
  170. package/docs/static/bower_components/jquery-mockjax/dist/jquery.mockjax.js +0 -1061
  171. package/docs/static/documentation.js +0 -26
  172. package/docs/static/example.postcss +0 -68
  173. package/docs/static/example_data.js +0 -122
  174. package/docs/static/examples/autoescape.js +0 -17
  175. package/docs/static/examples/autoscroll.js +0 -6
  176. package/docs/static/examples/button-on-right.js +0 -13
  177. package/docs/static/examples/custom_html.js +0 -27
  178. package/docs/static/examples/drag-outside.js +0 -37
  179. package/docs/static/examples/drag_and_drop.js +0 -13
  180. package/docs/static/examples/filter.js +0 -63
  181. package/docs/static/examples/icon_buttons.js +0 -12
  182. package/docs/static/examples/load_json_data.js +0 -16
  183. package/docs/static/examples/load_json_data_from_server.js +0 -9
  184. package/docs/static/examples/load_on_demand.js +0 -19
  185. package/docs/static/examples/multiple_select.js +0 -23
  186. package/docs/static/examples/right-to-left.js +0 -11
  187. package/docs/static/examples/save_state.js +0 -11
  188. package/docs/static/monokai.css +0 -70
  189. package/docs/static/spinner.gif +0 -0
  190. package/docs/tailwind.config.js +0 -16
  191. package/sitemap.txt +0 -14
  192. package/src/playwright/.eslintrc +0 -5
  193. package/src/playwright/coverage.ts +0 -38
  194. package/src/playwright/playwright.test.ts +0 -401
  195. package/src/playwright/playwright.test.ts-snapshots/with-dragAndDrop-moves-a-node-1-Chromium-darwin.png +0 -0
  196. package/src/playwright/playwright.test.ts-snapshots/with-dragAndDrop-moves-a-node-1-Chromium-linux.png +0 -0
  197. package/src/playwright/playwright.test.ts-snapshots/without-dragAndDrop-displays-a-tree-1-Chromium-darwin.png +0 -0
  198. package/src/playwright/playwright.test.ts-snapshots/without-dragAndDrop-displays-a-tree-1-Chromium-linux.png +0 -0
  199. package/src/playwright/playwright.test.ts-snapshots/without-dragAndDrop-selects-a-node-1-Chromium-darwin.png +0 -0
  200. package/src/playwright/playwright.test.ts-snapshots/without-dragAndDrop-selects-a-node-1-Chromium-linux.png +0 -0
  201. package/src/playwright/testUtils.ts +0 -153
  202. package/src/test/.eslintrc +0 -17
  203. package/src/test/global.d.ts +0 -1
  204. package/src/test/jqTree/accessibility.test.ts +0 -25
  205. package/src/test/jqTree/create.test.ts +0 -54
  206. package/src/test/jqTree/events.test.ts +0 -290
  207. package/src/test/jqTree/keyboard.test.ts +0 -247
  208. package/src/test/jqTree/loadOnDemand.test.ts +0 -198
  209. package/src/test/jqTree/methods.test.ts +0 -1491
  210. package/src/test/jqTree/mouse.test.ts +0 -82
  211. package/src/test/jqTree/options.test.ts +0 -595
  212. package/src/test/node.test.ts +0 -1396
  213. package/src/test/nodeUtils.test.ts +0 -21
  214. package/src/test/position.test.ts +0 -30
  215. package/src/test/support/exampleData.ts +0 -23
  216. package/src/test/support/jqTreeMatchers.ts +0 -68
  217. package/src/test/support/matchers.d.ts +0 -31
  218. package/src/test/support/setupTests.ts +0 -5
  219. package/src/test/support/testUtil.ts +0 -30
  220. package/src/test/support/treeStructure.ts +0 -39
  221. package/src/test/util.test.ts +0 -27
  222. package/tsconfig.json +0 -24
@@ -1,290 +0,0 @@
1
- import getGiven from "givens";
2
- import { http, HttpResponse } from "msw";
3
- import { setupServer } from "msw/node";
4
- import { waitFor } from "@testing-library/dom";
5
- import { userEvent } from "@testing-library/user-event";
6
- import "../../tree.jquery";
7
- import exampleData from "../support/exampleData";
8
- import { titleSpan } from "../support/testUtil";
9
-
10
- const context = describe;
11
-
12
- beforeEach(() => {
13
- $("body").append('<div id="tree1"></div>');
14
- });
15
-
16
- afterEach(() => {
17
- const $tree = $("#tree1");
18
- $tree.tree("destroy");
19
- $tree.remove();
20
- });
21
-
22
- describe("tree.click", () => {
23
- interface Vars {
24
- node1: INode;
25
- titleSpan: JQuery<HTMLElement>;
26
- $tree: JQuery<HTMLElement>;
27
- }
28
-
29
- const given = getGiven<Vars>();
30
- given("node1", () => given.$tree.tree("getNodeByNameMustExist", "node1"));
31
- given("titleSpan", () => titleSpan(given.node1.element));
32
- given("$tree", () => $("#tree1"));
33
-
34
- beforeEach(() => {
35
- given.$tree.tree({ data: exampleData });
36
- });
37
-
38
- it("fires tree.click", async () => {
39
- const onClick = jest.fn();
40
- given.$tree.on("tree.click", onClick);
41
-
42
- await userEvent.click(given.titleSpan.get(0) as HTMLElement);
43
- expect(onClick).toHaveBeenCalledWith(
44
- expect.objectContaining({ node: given.node1 }),
45
- );
46
- });
47
- });
48
-
49
- describe("tree.contextmenu", () => {
50
- interface Vars {
51
- node1: INode;
52
- titleSpan: JQuery<HTMLElement>;
53
- $tree: JQuery<HTMLElement>;
54
- }
55
-
56
- const given = getGiven<Vars>();
57
- given("node1", () => given.$tree.tree("getNodeByNameMustExist", "node1"));
58
- given("titleSpan", () => titleSpan(given.node1.element));
59
- given("$tree", () => $("#tree1"));
60
-
61
- beforeEach(() => {
62
- given.$tree.tree({ data: exampleData });
63
- });
64
-
65
- it("fires tree.contextmenu", async () => {
66
- const onContextMenu = jest.fn();
67
- given.$tree.on("tree.contextmenu", onContextMenu);
68
-
69
- await userEvent.pointer({
70
- target: given.titleSpan.get(0) as HTMLElement,
71
- keys: "[MouseRight]",
72
- });
73
- expect(onContextMenu).toHaveBeenCalledWith(
74
- expect.objectContaining({ node: given.node1 }),
75
- );
76
- });
77
- });
78
-
79
- describe("tree.dblclick", () => {
80
- interface Vars {
81
- node1: INode;
82
- titleSpan: JQuery<HTMLElement>;
83
- $tree: JQuery<HTMLElement>;
84
- }
85
-
86
- const given = getGiven<Vars>();
87
- given("node1", () => given.$tree.tree("getNodeByNameMustExist", "node1"));
88
- given("titleSpan", () => titleSpan(given.node1.element));
89
- given("$tree", () => $("#tree1"));
90
-
91
- beforeEach(() => {
92
- given.$tree.tree({ data: exampleData });
93
- });
94
-
95
- it("fires tree.dblclick", async () => {
96
- const onDoubleClick = jest.fn();
97
- given.$tree.on("tree.dblclick", onDoubleClick);
98
-
99
- await userEvent.dblClick(given.titleSpan.get(0) as HTMLElement);
100
- expect(onDoubleClick).toHaveBeenCalledWith(
101
- expect.objectContaining({ node: given.node1 }),
102
- );
103
- });
104
- });
105
-
106
- describe("tree.init", () => {
107
- interface Vars {
108
- $tree: JQuery<HTMLElement>;
109
- }
110
- const given = getGiven<Vars>();
111
- given("$tree", () => $("#tree1"));
112
-
113
- context("with json data", () => {
114
- it("is called", () => {
115
- const onInit = jest.fn();
116
- given.$tree.on("tree.init", onInit);
117
-
118
- given.$tree.tree({
119
- data: exampleData,
120
- });
121
-
122
- // eslint-disable-next-line jest/prefer-called-with
123
- expect(onInit).toHaveBeenCalled();
124
- });
125
- });
126
-
127
- context("with data loaded from an url", () => {
128
- const server = setupServer(
129
- http.get("/tree/", () => HttpResponse.json(exampleData)),
130
- );
131
- beforeEach(() => {
132
- server.listen();
133
- });
134
-
135
- afterAll(() => {
136
- server.close();
137
- });
138
-
139
- it("is called", async () => {
140
- const onInit = jest.fn();
141
- given.$tree.on("tree.init", onInit);
142
-
143
- given.$tree.tree({ dataUrl: "/tree/" });
144
-
145
- await waitFor(() => {
146
- // eslint-disable-next-line jest/prefer-called-with
147
- expect(onInit).toHaveBeenCalled();
148
- });
149
- });
150
- });
151
- });
152
-
153
- describe("tree.load_data", () => {
154
- interface Vars {
155
- $tree: JQuery<HTMLElement>;
156
- }
157
- const given = getGiven<Vars>();
158
- given("$tree", () => $("#tree1"));
159
-
160
- context("when the tree is initialized with data", () => {
161
- it("fires tree.load_data", () => {
162
- const onLoadData = jest.fn();
163
- given.$tree.on("tree.load_data", onLoadData);
164
-
165
- given.$tree.tree({ data: exampleData });
166
- expect(onLoadData).toHaveBeenCalledWith(
167
- expect.objectContaining({ tree_data: exampleData }),
168
- );
169
- });
170
- });
171
- });
172
-
173
- describe("tree.select", () => {
174
- interface Vars {
175
- node1: INode;
176
- titleSpan: JQuery<HTMLElement>;
177
- $tree: JQuery<HTMLElement>;
178
- }
179
-
180
- const given = getGiven<Vars>();
181
- given("node1", () => given.$tree.tree("getNodeByNameMustExist", "node1"));
182
- given("titleSpan", () => titleSpan(given.node1.element));
183
- given("$tree", () => $("#tree1"));
184
-
185
- beforeEach(() => {
186
- given.$tree.tree({
187
- data: exampleData,
188
- });
189
- });
190
-
191
- it("fires tree.select", async () => {
192
- const onSelect = jest.fn();
193
- given.$tree.on("tree.select", onSelect);
194
-
195
- await userEvent.click(given.titleSpan.get(0) as HTMLElement);
196
- expect(onSelect).toHaveBeenCalledWith(
197
- expect.objectContaining({
198
- node: given.node1,
199
- deselected_node: null,
200
- }),
201
- );
202
- });
203
-
204
- context("when the node was selected", () => {
205
- beforeEach(() => {
206
- given.$tree.tree("selectNode", given.node1);
207
- });
208
-
209
- it("fires tree.select with node is null", async () => {
210
- const onSelect = jest.fn();
211
- given.$tree.on("tree.select", onSelect);
212
-
213
- await userEvent.click(given.titleSpan.get(0) as HTMLElement);
214
- expect(onSelect).toHaveBeenCalledWith(
215
- expect.objectContaining({
216
- node: null,
217
- previous_node: given.node1,
218
- }),
219
- );
220
- });
221
- });
222
- });
223
-
224
- describe("tree.loading_data", () => {
225
- const server = setupServer(
226
- http.get("/tree/", () => HttpResponse.json(exampleData)),
227
- );
228
- beforeEach(() => {
229
- server.listen();
230
- });
231
-
232
- afterAll(() => {
233
- server.close();
234
- });
235
-
236
- it("fires tree.loading_data when the data is loading from an url", async () => {
237
- const $tree = $("#tree1");
238
-
239
- const onLoading = jest.fn();
240
- $tree.on("tree.loading_data", onLoading);
241
-
242
- $tree.tree({ dataUrl: "/tree/" });
243
-
244
- await waitFor(() => {
245
- expect(onLoading).toHaveBeenCalledWith(
246
- expect.objectContaining({
247
- isLoading: true,
248
- node: null,
249
- }),
250
- );
251
- });
252
-
253
- await waitFor(() => {
254
- expect(onLoading).toHaveBeenCalledWith(
255
- expect.objectContaining({
256
- isLoading: false,
257
- node: null,
258
- }),
259
- );
260
- });
261
- });
262
- });
263
-
264
- describe("onLoading", () => {
265
- const server = setupServer(
266
- http.get("/tree/", () => HttpResponse.json(exampleData)),
267
- );
268
- beforeEach(() => {
269
- server.listen();
270
- });
271
-
272
- afterAll(() => {
273
- server.close();
274
- });
275
-
276
- it("calls onLoading", async () => {
277
- const $tree = $("#tree1");
278
- const onLoading = jest.fn();
279
-
280
- $tree.tree({ dataUrl: "/tree/", onLoading });
281
-
282
- await waitFor(() => {
283
- expect(onLoading).toHaveBeenCalledWith(false, null, $tree);
284
- });
285
-
286
- await waitFor(() => {
287
- expect(onLoading).toHaveBeenCalledWith(false, null, $tree);
288
- });
289
- });
290
- });
@@ -1,247 +0,0 @@
1
- import getGiven from "givens";
2
- import { userEvent } from "@testing-library/user-event";
3
- import "../../tree.jquery";
4
- import exampleData from "../support/exampleData";
5
-
6
- const context = describe;
7
-
8
- beforeEach(() => {
9
- $("body").append('<div id="tree1"></div>');
10
- });
11
-
12
- afterEach(() => {
13
- const $tree = $("#tree1");
14
- $tree.tree("destroy");
15
- $tree.remove();
16
- });
17
-
18
- describe("keyboard support", () => {
19
- interface Vars {
20
- autoOpen: boolean;
21
- initialSelectedNode: INode | null;
22
- pressedKey: string;
23
- $tree: JQuery<HTMLElement>;
24
- }
25
-
26
- const given = getGiven<Vars>();
27
- given("autoOpen", () => false);
28
- given("initialSelectedNode", () => null);
29
- given("$tree", () => $("#tree1"));
30
-
31
- beforeEach(async () => {
32
- given.$tree.tree({
33
- animationSpeed: 0,
34
- autoOpen: given.autoOpen,
35
- data: exampleData,
36
- });
37
-
38
- if (given.initialSelectedNode) {
39
- given.$tree.tree("selectNode", given.initialSelectedNode);
40
- }
41
-
42
- await userEvent.keyboard(`{${given.pressedKey}}`);
43
- });
44
-
45
- context("with key down", () => {
46
- given("pressedKey", () => "ArrowDown");
47
-
48
- context("when a node is selected", () => {
49
- given("initialSelectedNode", () =>
50
- given.$tree.tree("getNodeByNameMustExist", "node1"),
51
- );
52
-
53
- it("selects the next node", () => {
54
- expect(given.$tree).toHaveTreeStructure([
55
- expect.objectContaining({ name: "node1", selected: false }),
56
- expect.objectContaining({ name: "node2", selected: true }),
57
- ]);
58
- });
59
- });
60
-
61
- context("when no node is selected", () => {
62
- it("does nothing", () => {
63
- expect(given.$tree.tree("getSelectedNode")).toBe(false);
64
- });
65
- });
66
-
67
- context("when the last node is selected", () => {
68
- given("initialSelectedNode", () =>
69
- given.$tree.tree("getNodeByNameMustExist", "node2"),
70
- );
71
-
72
- it("keeps the node selected", () => {
73
- expect(given.$tree.tree("getSelectedNode")).toMatchObject({
74
- name: "node2",
75
- });
76
- });
77
- });
78
- });
79
-
80
- context("with key up", () => {
81
- given("pressedKey", () => "ArrowUp");
82
-
83
- context("when a node is selected", () => {
84
- given("initialSelectedNode", () =>
85
- given.$tree.tree("getNodeByNameMustExist", "node2"),
86
- );
87
-
88
- it("selects the next node", () => {
89
- expect(given.$tree).toHaveTreeStructure([
90
- expect.objectContaining({ name: "node1", selected: true }),
91
- expect.objectContaining({ name: "node2", selected: false }),
92
- ]);
93
- });
94
- });
95
-
96
- context("when no node is selected", () => {
97
- it("does nothing", () => {
98
- expect(given.$tree.tree("getSelectedNode")).toBe(false);
99
- });
100
- });
101
- });
102
-
103
- context("with key right", () => {
104
- given("pressedKey", () => "ArrowRight");
105
-
106
- context("when a closed folder is selected", () => {
107
- given("initialSelectedNode", () =>
108
- given.$tree.tree("getNodeByNameMustExist", "node1"),
109
- );
110
-
111
- it("opens the folder", () => {
112
- expect(given.$tree).toHaveTreeStructure([
113
- expect.objectContaining({
114
- name: "node1",
115
- open: true,
116
- selected: true,
117
- }),
118
- expect.objectContaining({
119
- name: "node2",
120
- open: false,
121
- selected: false,
122
- }),
123
- ]);
124
- });
125
- });
126
-
127
- context("when an open folder is selected", () => {
128
- given("autoOpen", () => true);
129
- given("initialSelectedNode", () =>
130
- given.$tree.tree("getNodeByNameMustExist", "node1"),
131
- );
132
-
133
- it("selects the first child", () => {
134
- expect(given.$tree).toHaveTreeStructure([
135
- expect.objectContaining({
136
- name: "node1",
137
- open: true,
138
- selected: false,
139
- children: [
140
- expect.objectContaining({
141
- name: "child1",
142
- selected: true,
143
- }),
144
- expect.objectContaining({
145
- name: "child2",
146
- selected: false,
147
- }),
148
- ],
149
- }),
150
- expect.objectContaining({
151
- name: "node2",
152
- selected: false,
153
- }),
154
- ]);
155
- });
156
- });
157
-
158
- context("when no node is selected", () => {
159
- it("does nothing", () => {
160
- expect(given.$tree.tree("getSelectedNode")).toBe(false);
161
- });
162
- });
163
-
164
- context("when a child is selected", () => {
165
- given("initialSelectedNode", () =>
166
- given.$tree.tree("getNodeByNameMustExist", "child1"),
167
- );
168
-
169
- it("does nothing", () => {
170
- expect(given.$tree.tree("getSelectedNode")).toMatchObject({
171
- name: "child1",
172
- });
173
- });
174
- });
175
- });
176
- context("with key left", () => {
177
- given("pressedKey", () => "ArrowLeft");
178
-
179
- context("when a closed folder is selected", () => {
180
- given("initialSelectedNode", () =>
181
- given.$tree.tree("getNodeByNameMustExist", "node3"),
182
- );
183
-
184
- it("selects the previous node", () => {
185
- expect(given.$tree).toHaveTreeStructure([
186
- expect.objectContaining({
187
- name: "node1",
188
- selected: false,
189
- }),
190
- expect.objectContaining({
191
- name: "node2",
192
- selected: true,
193
- children: [
194
- expect.objectContaining({
195
- name: "node3",
196
- open: false,
197
- selected: false,
198
- }),
199
- ],
200
- }),
201
- ]);
202
- });
203
- });
204
-
205
- context("when an open folder is selected", () => {
206
- given("autoOpen", () => true);
207
- given("initialSelectedNode", () =>
208
- given.$tree.tree("getNodeByNameMustExist", "node2"),
209
- );
210
-
211
- it("closes the folder", () => {
212
- expect(given.$tree).toHaveTreeStructure([
213
- expect.objectContaining({
214
- name: "node1",
215
- open: true,
216
- selected: false,
217
- }),
218
- expect.objectContaining({
219
- name: "node2",
220
- open: false,
221
- selected: true,
222
- }),
223
- ]);
224
- });
225
- });
226
-
227
- context("when no node is selected", () => {
228
- it("does nothing", () => {
229
- expect(given.$tree.tree("getSelectedNode")).toBe(false);
230
- });
231
- });
232
- });
233
-
234
- context("with page up key", () => {
235
- given("pressedKey", () => "PageUp");
236
-
237
- given("initialSelectedNode", () =>
238
- given.$tree.tree("getNodeByNameMustExist", "child1"),
239
- );
240
-
241
- it("does nothing", () => {
242
- expect(given.$tree.tree("getSelectedNode")).toMatchObject({
243
- name: "child1",
244
- });
245
- });
246
- });
247
- });