jqtree 1.7.4 → 1.8.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.
Files changed (94) hide show
  1. package/.eslintrc +5 -1
  2. package/bower.json +1 -1
  3. package/config/babel.config.json +1 -1
  4. package/config/production +2 -0
  5. package/devserver/devserver_scroll.js +8 -0
  6. package/devserver/test_scroll.html +28 -0
  7. package/devserver/test_scroll_container.html +39 -0
  8. package/docs/_config.yml +1 -1
  9. package/docs/_entries/general/changelog.md +12 -0
  10. package/docs/package.json +1 -1
  11. package/docs/pnpm-lock.yaml +30 -30
  12. package/package.json +31 -27
  13. package/src/dataLoader.ts +44 -19
  14. package/src/dragAndDropHandler/dragElement.ts +42 -0
  15. package/src/dragAndDropHandler/hitAreasGenerator.ts +175 -0
  16. package/src/dragAndDropHandler/index.ts +470 -0
  17. package/src/dragAndDropHandler/types.ts +12 -0
  18. package/src/dragAndDropHandler/visibleNodeIterator.ts +97 -0
  19. package/src/elementsRenderer.ts +75 -40
  20. package/src/jqtreeMethodTypes.ts +40 -0
  21. package/src/jqtreeOptions.ts +43 -25
  22. package/src/keyHandler.ts +59 -38
  23. package/src/mouse.widget.ts +3 -3
  24. package/src/mouseWidgetTypes.ts +6 -0
  25. package/src/node.ts +32 -48
  26. package/src/nodeElement/borderDropHint.ts +32 -0
  27. package/src/nodeElement/folderElement.ts +133 -0
  28. package/src/nodeElement/ghostDropHint.ts +68 -0
  29. package/src/nodeElement/index.ts +101 -0
  30. package/src/nodeUtils.ts +10 -0
  31. package/src/playwright/coverage.ts +1 -4
  32. package/src/playwright/playwright.test.ts +203 -15
  33. package/src/playwright/testUtils.ts +23 -15
  34. package/src/saveStateHandler.ts +75 -26
  35. package/src/scrollHandler/containerScrollParent.ts +177 -0
  36. package/src/scrollHandler/createScrollParent.ts +50 -0
  37. package/src/scrollHandler/documentScrollParent.ts +182 -0
  38. package/src/scrollHandler/types.ts +7 -0
  39. package/src/scrollHandler.ts +36 -248
  40. package/src/selectNodeHandler.ts +10 -16
  41. package/src/test/jqTree/keyboard.test.ts +18 -23
  42. package/src/test/jqTree/loadOnDemand.test.ts +2 -3
  43. package/src/test/jqTree/methods.test.ts +33 -4
  44. package/src/test/jqTree/options.test.ts +15 -4
  45. package/src/test/node.test.ts +85 -26
  46. package/src/test/nodeUtils.test.ts +21 -0
  47. package/src/tree.jquery.ts +262 -83
  48. package/src/util.ts +3 -0
  49. package/src/version.ts +1 -1
  50. package/tree.jquery.debug.js +1922 -2608
  51. package/tree.jquery.debug.js.map +1 -1
  52. package/tree.jquery.js +2 -2
  53. package/tree.jquery.js.map +1 -1
  54. package/lib/dataLoader.js +0 -124
  55. package/lib/dragAndDropHandler.js +0 -596
  56. package/lib/elementsRenderer.js +0 -268
  57. package/lib/jqtreeOptions.js +0 -1
  58. package/lib/keyHandler.js +0 -115
  59. package/lib/mouse.widget.js +0 -256
  60. package/lib/node.js +0 -717
  61. package/lib/nodeElement.js +0 -277
  62. package/lib/playwright/coverage.js +0 -96
  63. package/lib/playwright/playwright.test.js +0 -228
  64. package/lib/playwright/testUtils.js +0 -184
  65. package/lib/saveStateHandler.js +0 -278
  66. package/lib/scrollHandler.js +0 -250
  67. package/lib/selectNodeHandler.js +0 -129
  68. package/lib/simple.widget.js +0 -159
  69. package/lib/test/global.d.js +0 -3
  70. package/lib/test/jqTree/accessibility.test.js +0 -37
  71. package/lib/test/jqTree/create.test.js +0 -48
  72. package/lib/test/jqTree/events.test.js +0 -210
  73. package/lib/test/jqTree/keyboard.test.js +0 -225
  74. package/lib/test/jqTree/loadOnDemand.test.js +0 -218
  75. package/lib/test/jqTree/methods.test.js +0 -1347
  76. package/lib/test/jqTree/options.test.js +0 -548
  77. package/lib/test/node.test.js +0 -1160
  78. package/lib/test/nodeUtil.test.js +0 -27
  79. package/lib/test/support/exampleData.js +0 -36
  80. package/lib/test/support/jqTreeMatchers.js +0 -70
  81. package/lib/test/support/matchers.d.js +0 -1
  82. package/lib/test/support/setupTests.js +0 -7
  83. package/lib/test/support/testUtil.js +0 -32
  84. package/lib/test/support/treeStructure.js +0 -39
  85. package/lib/test/util.test.js +0 -26
  86. package/lib/tree.jquery.d.js +0 -1
  87. package/lib/tree.jquery.js +0 -1106
  88. package/lib/types.js +0 -1
  89. package/lib/typings.d.js +0 -2
  90. package/lib/util.js +0 -18
  91. package/lib/version.js +0 -9
  92. package/src/dragAndDropHandler.ts +0 -719
  93. package/src/nodeElement.ts +0 -272
  94. package/src/types.ts +0 -19
@@ -1,272 +0,0 @@
1
- import { Position, Node } from "./node";
2
- import { JqTreeWidget } from "./tree.jquery";
3
- import { DropHint } from "./types";
4
-
5
- export type OnFinishOpenNode = (node: Node) => void;
6
-
7
- export class NodeElement {
8
- public node: Node;
9
- public $element: JQuery<HTMLElement>;
10
- protected treeWidget: JqTreeWidget;
11
-
12
- constructor(node: Node, treeWidget: JqTreeWidget) {
13
- this.init(node, treeWidget);
14
- }
15
-
16
- public init(node: Node, treeWidget: JqTreeWidget): void {
17
- this.node = node;
18
- this.treeWidget = treeWidget;
19
-
20
- if (!node.element) {
21
- const element = this.treeWidget.element.get(0);
22
-
23
- if (element) {
24
- node.element = element;
25
- }
26
- }
27
-
28
- if (node.element) {
29
- this.$element = jQuery(node.element);
30
- }
31
- }
32
-
33
- public addDropHint(position: number): DropHint {
34
- if (this.mustShowBorderDropHint(position)) {
35
- return new BorderDropHint(
36
- this.$element,
37
- this.treeWidget._getScrollLeft(),
38
- );
39
- } else {
40
- return new GhostDropHint(this.node, this.$element, position);
41
- }
42
- }
43
-
44
- public select(mustSetFocus: boolean): void {
45
- const $li = this.getLi();
46
-
47
- $li.addClass("jqtree-selected");
48
-
49
- const $span = this.getSpan();
50
- $span.attr("tabindex", this.treeWidget.options.tabIndex ?? null);
51
- $span.attr("aria-selected", "true");
52
-
53
- if (mustSetFocus) {
54
- $span.trigger("focus");
55
- }
56
- }
57
-
58
- public deselect(): void {
59
- const $li = this.getLi();
60
-
61
- $li.removeClass("jqtree-selected");
62
-
63
- const $span = this.getSpan();
64
- $span.removeAttr("tabindex");
65
- $span.attr("aria-selected", "false");
66
-
67
- $span.trigger("blur");
68
- }
69
-
70
- protected getUl(): JQuery<HTMLElement> {
71
- return this.$element.children("ul:first");
72
- }
73
-
74
- protected getSpan(): JQuery<HTMLElement> {
75
- return this.$element
76
- .children(".jqtree-element")
77
- .find("span.jqtree-title");
78
- }
79
-
80
- protected getLi(): JQuery<HTMLElement> {
81
- return this.$element;
82
- }
83
-
84
- protected mustShowBorderDropHint(position: Position): boolean {
85
- return position === Position.Inside;
86
- }
87
- }
88
-
89
- export class FolderElement extends NodeElement {
90
- public open(
91
- onFinished: OnFinishOpenNode | null,
92
- slide = true,
93
- animationSpeed: JQuery.Duration = "fast",
94
- ): void {
95
- if (this.node.is_open) {
96
- return;
97
- }
98
-
99
- this.node.is_open = true;
100
-
101
- const $button = this.getButton();
102
- $button.removeClass("jqtree-closed");
103
- $button.html("");
104
-
105
- const buttonEl = $button.get(0);
106
-
107
- if (buttonEl) {
108
- const openedIconElement =
109
- this.treeWidget.renderer.openedIconElement;
110
-
111
- if (openedIconElement) {
112
- const icon = openedIconElement.cloneNode(true);
113
- buttonEl.appendChild(icon);
114
- }
115
- }
116
-
117
- const doOpen = (): void => {
118
- const $li = this.getLi();
119
- $li.removeClass("jqtree-closed");
120
-
121
- const $titleSpan = this.getSpan();
122
- $titleSpan.attr("aria-expanded", "true");
123
-
124
- if (onFinished) {
125
- onFinished(this.node);
126
- }
127
-
128
- this.treeWidget._triggerEvent("tree.open", {
129
- node: this.node,
130
- });
131
- };
132
-
133
- if (slide) {
134
- this.getUl().slideDown(animationSpeed, doOpen);
135
- } else {
136
- this.getUl().show();
137
- doOpen();
138
- }
139
- }
140
-
141
- public close(
142
- slide = true,
143
- animationSpeed: JQuery.Duration | undefined = "fast",
144
- ): void {
145
- if (!this.node.is_open) {
146
- return;
147
- }
148
-
149
- this.node.is_open = false;
150
-
151
- const $button = this.getButton();
152
- $button.addClass("jqtree-closed");
153
- $button.html("");
154
-
155
- const buttonEl = $button.get(0);
156
-
157
- if (buttonEl) {
158
- const closedIconElement =
159
- this.treeWidget.renderer.closedIconElement;
160
-
161
- if (closedIconElement) {
162
- const icon = closedIconElement.cloneNode(true);
163
- buttonEl.appendChild(icon);
164
- }
165
- }
166
-
167
- const doClose = (): void => {
168
- const $li = this.getLi();
169
- $li.addClass("jqtree-closed");
170
-
171
- const $titleSpan = this.getSpan();
172
- $titleSpan.attr("aria-expanded", "false");
173
-
174
- this.treeWidget._triggerEvent("tree.close", {
175
- node: this.node,
176
- });
177
- };
178
-
179
- if (slide) {
180
- this.getUl().slideUp(animationSpeed, doClose);
181
- } else {
182
- this.getUl().hide();
183
- doClose();
184
- }
185
- }
186
-
187
- protected mustShowBorderDropHint(position: Position): boolean {
188
- return !this.node.is_open && position === Position.Inside;
189
- }
190
-
191
- private getButton(): JQuery {
192
- return this.$element
193
- .children(".jqtree-element")
194
- .find("a.jqtree-toggler");
195
- }
196
- }
197
-
198
- export class BorderDropHint implements DropHint {
199
- private $hint: JQuery<Element>;
200
-
201
- constructor($element: JQuery<Element>, scrollLeft: number) {
202
- const $div = $element.children(".jqtree-element");
203
-
204
- const elWidth = $element.width() || 0;
205
- const width = Math.max(elWidth + scrollLeft - 4, 0);
206
-
207
- const elHeight = $div.outerHeight() || 0;
208
- const height = Math.max(elHeight - 4, 0);
209
-
210
- this.$hint = jQuery('<span class="jqtree-border"></span>');
211
- $div.append(this.$hint);
212
-
213
- this.$hint.css({ width, height });
214
- }
215
-
216
- public remove(): void {
217
- this.$hint.remove();
218
- }
219
- }
220
-
221
- class GhostDropHint implements DropHint {
222
- private $element: JQuery<Element>;
223
- private node: Node;
224
- private $ghost: JQuery;
225
-
226
- constructor(node: Node, $element: JQuery<Element>, position: Position) {
227
- this.$element = $element;
228
-
229
- this.node = node;
230
- this.$ghost = jQuery(
231
- `<li class="jqtree_common jqtree-ghost"><span class="jqtree_common jqtree-circle"></span>
232
- <span class="jqtree_common jqtree-line"></span></li>`,
233
- );
234
-
235
- if (position === Position.After) {
236
- this.moveAfter();
237
- } else if (position === Position.Before) {
238
- this.moveBefore();
239
- } else if (position === Position.Inside) {
240
- if (node.isFolder() && node.is_open) {
241
- this.moveInsideOpenFolder();
242
- } else {
243
- this.moveInside();
244
- }
245
- }
246
- }
247
-
248
- public remove(): void {
249
- this.$ghost.remove();
250
- }
251
-
252
- public moveAfter(): void {
253
- this.$element.after(this.$ghost);
254
- }
255
-
256
- public moveBefore(): void {
257
- this.$element.before(this.$ghost);
258
- }
259
-
260
- public moveInsideOpenFolder(): void {
261
- const childElement = this.node.children[0]?.element;
262
-
263
- if (childElement) {
264
- jQuery(childElement).before(this.$ghost);
265
- }
266
- }
267
-
268
- public moveInside(): void {
269
- this.$element.after(this.$ghost);
270
- this.$ghost.addClass("jqtree-inside");
271
- }
272
- }
package/src/types.ts DELETED
@@ -1,19 +0,0 @@
1
- import { Node, Position } from "./node";
2
-
3
- export interface DropHint {
4
- remove: () => void;
5
- }
6
-
7
- export interface HitArea {
8
- top: number;
9
- bottom: number;
10
- node: Node;
11
- position: Position;
12
- }
13
-
14
- export interface PositionInfo {
15
- pageX: number | undefined;
16
- pageY: number | undefined;
17
- target: HTMLElement;
18
- originalEvent: Event;
19
- }