tree-element 0.1.1 → 0.2.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 (148) hide show
  1. package/README.md +33 -29
  2. package/lib/animation.js +5 -5
  3. package/lib/animation.js.map +1 -1
  4. package/lib/classNames.d.ts.map +1 -1
  5. package/lib/classNames.js +2 -2
  6. package/lib/classNames.js.map +1 -1
  7. package/lib/dataLoader.d.ts.map +1 -1
  8. package/lib/dataLoader.js +14 -20
  9. package/lib/dataLoader.js.map +1 -1
  10. package/lib/dragAndDropHandler/binarySearch.js +3 -3
  11. package/lib/dragAndDropHandler/binarySearch.js.map +1 -1
  12. package/lib/dragAndDropHandler/dragElement.d.ts.map +1 -1
  13. package/lib/dragAndDropHandler/dragElement.js +9 -12
  14. package/lib/dragAndDropHandler/dragElement.js.map +1 -1
  15. package/lib/dragAndDropHandler/generateHitAreas.d.ts.map +1 -1
  16. package/lib/dragAndDropHandler/generateHitAreas.js +25 -25
  17. package/lib/dragAndDropHandler/generateHitAreas.js.map +1 -1
  18. package/lib/dragAndDropHandler/index.d.ts.map +1 -1
  19. package/lib/dragAndDropHandler/index.js +90 -114
  20. package/lib/dragAndDropHandler/index.js.map +1 -1
  21. package/lib/dragAndDropHandler/iterateVisibleNodes.d.ts.map +1 -1
  22. package/lib/dragAndDropHandler/iterateVisibleNodes.js +10 -10
  23. package/lib/dragAndDropHandler/iterateVisibleNodes.js.map +1 -1
  24. package/lib/dragAndDropHandler/types.d.ts.map +1 -1
  25. package/lib/elementsRenderer.d.ts +15 -6
  26. package/lib/elementsRenderer.d.ts.map +1 -1
  27. package/lib/elementsRenderer.js +157 -121
  28. package/lib/elementsRenderer.js.map +1 -1
  29. package/lib/events.d.ts.map +1 -1
  30. package/lib/index.d.ts +5 -5
  31. package/lib/index.d.ts.map +1 -1
  32. package/lib/index.js +249 -252
  33. package/lib/index.js.map +1 -1
  34. package/lib/keyHandler.d.ts +2 -3
  35. package/lib/keyHandler.d.ts.map +1 -1
  36. package/lib/keyHandler.js +26 -25
  37. package/lib/keyHandler.js.map +1 -1
  38. package/lib/methodTypes.d.ts +1 -1
  39. package/lib/methodTypes.d.ts.map +1 -1
  40. package/lib/mouseHandler.d.ts.map +1 -1
  41. package/lib/mouseHandler.js +26 -42
  42. package/lib/mouseHandler.js.map +1 -1
  43. package/lib/mouseUtils.d.ts.map +1 -1
  44. package/lib/mouseUtils.js +2 -2
  45. package/lib/mouseUtils.js.map +1 -1
  46. package/lib/node.d.ts +2 -1
  47. package/lib/node.d.ts.map +1 -1
  48. package/lib/node.js +36 -35
  49. package/lib/node.js.map +1 -1
  50. package/lib/nodeElement/borderDropHint.d.ts.map +1 -1
  51. package/lib/nodeElement/borderDropHint.js +4 -5
  52. package/lib/nodeElement/borderDropHint.js.map +1 -1
  53. package/lib/nodeElement/folderElement.d.ts +7 -4
  54. package/lib/nodeElement/folderElement.d.ts.map +1 -1
  55. package/lib/nodeElement/folderElement.js +61 -42
  56. package/lib/nodeElement/folderElement.js.map +1 -1
  57. package/lib/nodeElement/ghostDropHint.d.ts.map +1 -1
  58. package/lib/nodeElement/ghostDropHint.js +5 -9
  59. package/lib/nodeElement/ghostDropHint.js.map +1 -1
  60. package/lib/nodeElement/index.d.ts +2 -1
  61. package/lib/nodeElement/index.d.ts.map +1 -1
  62. package/lib/nodeElement/index.js +34 -26
  63. package/lib/nodeElement/index.js.map +1 -1
  64. package/lib/nodeUtils.d.ts.map +1 -1
  65. package/lib/nodeUtils.js +1 -1
  66. package/lib/nodeUtils.js.map +1 -1
  67. package/lib/options.d.ts.map +1 -1
  68. package/lib/positionUtils.js +3 -3
  69. package/lib/positionUtils.js.map +1 -1
  70. package/lib/requestUrl.d.ts +1 -1
  71. package/lib/requestUrl.d.ts.map +1 -1
  72. package/lib/requestUrl.js +4 -6
  73. package/lib/requestUrl.js.map +1 -1
  74. package/lib/saveStateHandler.d.ts.map +1 -1
  75. package/lib/saveStateHandler.js +38 -48
  76. package/lib/saveStateHandler.js.map +1 -1
  77. package/lib/scrollHandler/containerScrollParent.d.ts.map +1 -1
  78. package/lib/scrollHandler/containerScrollParent.js +9 -11
  79. package/lib/scrollHandler/containerScrollParent.js.map +1 -1
  80. package/lib/scrollHandler/createScrollParent.d.ts.map +1 -1
  81. package/lib/scrollHandler/createScrollParent.js +10 -10
  82. package/lib/scrollHandler/createScrollParent.js.map +1 -1
  83. package/lib/scrollHandler/documentScrollParent.d.ts.map +1 -1
  84. package/lib/scrollHandler/documentScrollParent.js +16 -19
  85. package/lib/scrollHandler/documentScrollParent.js.map +1 -1
  86. package/lib/scrollHandler/scrollParent.d.ts.map +1 -1
  87. package/lib/scrollHandler/scrollParent.js +11 -17
  88. package/lib/scrollHandler/scrollParent.js.map +1 -1
  89. package/lib/scrollHandler.d.ts.map +1 -1
  90. package/lib/scrollHandler.js +11 -14
  91. package/lib/scrollHandler.js.map +1 -1
  92. package/lib/selectNodeHandler.d.ts +2 -2
  93. package/lib/selectNodeHandler.d.ts.map +1 -1
  94. package/lib/selectNodeHandler.js +45 -54
  95. package/lib/selectNodeHandler.js.map +1 -1
  96. package/lib/setDefaultOptions.d.ts.map +1 -1
  97. package/lib/setDefaultOptions.js +23 -28
  98. package/lib/setDefaultOptions.js.map +1 -1
  99. package/lib/triggerCustomEvent.d.ts.map +1 -1
  100. package/lib/triggerCustomEvent.js +2 -2
  101. package/lib/triggerCustomEvent.js.map +1 -1
  102. package/lib/util.d.ts.map +1 -1
  103. package/lib/util.js +2 -2
  104. package/lib/util.js.map +1 -1
  105. package/lib/version.d.ts +1 -1
  106. package/lib/version.js +1 -1
  107. package/lib/version.js.map +1 -1
  108. package/package.json +5 -3
  109. package/src/animation.ts +1 -1
  110. package/src/classNames.ts +52 -52
  111. package/src/dataLoader.ts +68 -71
  112. package/src/dragAndDropHandler/binarySearch.ts +17 -17
  113. package/src/dragAndDropHandler/dragElement.ts +50 -50
  114. package/src/dragAndDropHandler/generateHitAreas.ts +156 -161
  115. package/src/dragAndDropHandler/index.ts +342 -351
  116. package/src/dragAndDropHandler/iterateVisibleNodes.ts +59 -63
  117. package/src/dragAndDropHandler/types.ts +5 -5
  118. package/src/elementsRenderer.ts +351 -298
  119. package/src/events.ts +216 -216
  120. package/src/header.txt +1 -1
  121. package/src/index.ts +52 -82
  122. package/src/keyHandler.ts +125 -115
  123. package/src/methodTypes.ts +4 -7
  124. package/src/mouseHandler.ts +314 -317
  125. package/src/mouseUtils.ts +14 -14
  126. package/src/node.ts +761 -766
  127. package/src/nodeElement/borderDropHint.ts +25 -25
  128. package/src/nodeElement/folderElement.ts +135 -112
  129. package/src/nodeElement/ghostDropHint.ts +62 -62
  130. package/src/nodeElement/index.ts +88 -74
  131. package/src/nodeUtils.ts +5 -5
  132. package/src/options.ts +6 -2
  133. package/src/requestUrl.ts +3 -3
  134. package/src/saveStateHandler.ts +204 -206
  135. package/src/scrollHandler/containerScrollParent.ts +49 -52
  136. package/src/scrollHandler/createScrollParent.ts +27 -27
  137. package/src/scrollHandler/documentScrollParent.ts +70 -70
  138. package/src/scrollHandler/scrollParent.ts +98 -98
  139. package/src/scrollHandler.ts +45 -45
  140. package/src/selectNodeHandler.ts +176 -166
  141. package/src/setDefaultOptions.ts +25 -22
  142. package/src/triggerCustomEvent.ts +7 -3
  143. package/src/util.ts +2 -2
  144. package/src/version.ts +1 -1
  145. package/tree_element.debug.js +3752 -3784
  146. package/tree_element.debug.js.map +1 -1
  147. package/tree_element.js +2 -2
  148. package/tree_element.js.map +1 -1
@@ -1,62 +1,62 @@
1
1
  import type { ClassNames } from "../classNames";
2
2
 
3
3
  interface DragElementParams {
4
- autoEscape: boolean;
5
- classNames: ClassNames;
6
- nodeName: string;
7
- offsetX: number;
8
- offsetY: number;
9
- treeElement: HTMLElement;
4
+ autoEscape: boolean;
5
+ classNames: ClassNames;
6
+ nodeName: string;
7
+ offsetX: number;
8
+ offsetY: number;
9
+ treeElement: HTMLElement;
10
10
  }
11
11
 
12
12
  class DragElement {
13
- private element: HTMLElement;
14
- private offsetX: number;
15
- private offsetY: number;
16
-
17
- constructor({
18
- autoEscape,
19
- classNames,
20
- nodeName,
21
- offsetX,
22
- offsetY,
23
- treeElement,
24
- }: DragElementParams) {
25
- this.offsetX = offsetX;
26
- this.offsetY = offsetY;
27
-
28
- this.element = this.createElement(nodeName, autoEscape, classNames);
29
-
30
- treeElement.appendChild(this.element);
13
+ private element: HTMLElement;
14
+ private offsetX: number;
15
+ private offsetY: number;
16
+
17
+ constructor({
18
+ autoEscape,
19
+ classNames,
20
+ nodeName,
21
+ offsetX,
22
+ offsetY,
23
+ treeElement,
24
+ }: DragElementParams) {
25
+ this.offsetX = offsetX;
26
+ this.offsetY = offsetY;
27
+
28
+ this.element = this.createElement(nodeName, autoEscape, classNames);
29
+
30
+ treeElement.appendChild(this.element);
31
+ }
32
+
33
+ public move(pageX: number, pageY: number): void {
34
+ this.element.style.left = `${pageX - this.offsetX}px`;
35
+ this.element.style.top = `${pageY - this.offsetY}px`;
36
+ }
37
+
38
+ public remove(): void {
39
+ this.element.remove();
40
+ }
41
+
42
+ private createElement(
43
+ nodeName: string,
44
+ autoEscape: boolean,
45
+ classNames: ClassNames,
46
+ ) {
47
+ const element = document.createElement("span");
48
+ element.classList.add(classNames.title, classNames.dragging);
49
+
50
+ if (autoEscape) {
51
+ element.textContent = nodeName;
52
+ } else {
53
+ element.innerHTML = nodeName;
31
54
  }
32
55
 
33
- public move(pageX: number, pageY: number): void {
34
- this.element.style.left = `${pageX - this.offsetX}px`;
35
- this.element.style.top = `${pageY - this.offsetY}px`;
36
- }
37
-
38
- public remove(): void {
39
- this.element.remove();
40
- }
41
-
42
- private createElement(
43
- nodeName: string,
44
- autoEscape: boolean,
45
- classNames: ClassNames,
46
- ) {
47
- const element = document.createElement("span");
48
- element.classList.add(classNames.title, classNames.dragging);
56
+ element.style.position = "absolute";
49
57
 
50
- if (autoEscape) {
51
- element.textContent = nodeName;
52
- } else {
53
- element.innerHTML = nodeName;
54
- }
55
-
56
- element.style.position = "absolute";
57
-
58
- return element;
59
- }
58
+ return element;
59
+ }
60
60
  }
61
61
 
62
62
  export default DragElement;
@@ -5,191 +5,186 @@ import { getOffsetTop } from "../positionUtils";
5
5
  import iterateVisibleNodes from "./iterateVisibleNodes";
6
6
 
7
7
  interface HitPosition {
8
- node: Node;
9
- position: null | Position;
10
- top: number;
8
+ node: Node;
9
+ position: null | Position;
10
+ top: number;
11
11
  }
12
12
 
13
13
  export const generateHitPositions = (
14
- tree: Node,
15
- currentNode: Node,
14
+ tree: Node,
15
+ currentNode: Node,
16
16
  ): HitPosition[] => {
17
- const hitPositions: HitPosition[] = [];
18
- let lastTop = 0;
19
-
20
- const addHitPosition = (
21
- node: Node,
22
- position: null | Position,
23
- top: number,
24
- ) => {
25
- hitPositions.push({
26
- node,
27
- position,
28
- top,
29
- });
30
- lastTop = top;
31
- };
32
-
33
- const handleAfterOpenFolder = (node: Node, nextNode: Node | null) => {
34
- if (node === currentNode || nextNode === currentNode) {
35
- // Cannot move before or after current item
36
- addHitPosition(node, null, lastTop);
37
- } else {
38
- addHitPosition(node, "after", lastTop);
39
- }
40
- };
41
-
42
- const handleClosedFolder = (
43
- node: Node,
44
- nextNode: Node | null,
45
- element: HTMLElement,
46
- ) => {
47
- const top = getOffsetTop(element);
48
-
49
- if (node === currentNode) {
50
- // Cannot move after current item
51
- addHitPosition(node, null, top);
52
- } else {
53
- addHitPosition(node, "inside", top);
54
-
55
- // Cannot move before current item
56
- if (nextNode !== currentNode) {
57
- addHitPosition(node, "after", top);
58
- }
59
- }
60
- };
61
-
62
- const handleFirstNode = (node: Node) => {
63
- if (node !== currentNode && node.element) {
64
- addHitPosition(node, "before", getOffsetTop(node.element));
65
- }
66
- };
67
-
68
- const handleNode = (
69
- node: Node,
70
- nextNode: Node | null,
71
- element: HTMLElement,
72
- ) => {
73
- const top = getOffsetTop(element);
74
-
75
- if (node === currentNode) {
76
- // Cannot move inside current item
77
- addHitPosition(node, null, top);
78
- } else {
79
- addHitPosition(node, "inside", top);
80
- }
81
-
82
- if (nextNode === currentNode || node === currentNode) {
83
- // Cannot move before or after current item
84
- addHitPosition(node, null, top);
85
- } else {
86
- addHitPosition(node, "after", top);
87
- }
88
- };
89
-
90
- const handleOpenFolder = (node: Node, element: HTMLElement) => {
91
- if (node === currentNode) {
92
- // Cannot move inside current item
93
-
94
- // Dnd over the current element is not possible: add a position with type None for the top and the bottom.
95
- const top = getOffsetTop(element);
96
- const height = element.clientHeight;
97
- addHitPosition(node, null, top);
98
-
99
- if (height > 5) {
100
- // Subtract 5 pixels to allow more space for the next element.
101
- addHitPosition(node, null, top + height - 5);
102
- }
103
-
104
- // Stop iterating
105
- return false;
106
- }
107
-
108
- // Cannot move before current item
109
- if (node.children[0] !== currentNode) {
110
- addHitPosition(node, "inside", getOffsetTop(element));
111
- }
112
-
113
- // Continue iterating
114
- return true;
115
- };
116
-
117
- iterateVisibleNodes(tree, {
118
- handleAfterOpenFolder,
119
- handleClosedFolder,
120
- handleFirstNode,
121
- handleNode,
122
- handleOpenFolder,
17
+ const hitPositions: HitPosition[] = [];
18
+ let lastTop = 0;
19
+
20
+ const addHitPosition = (
21
+ node: Node,
22
+ position: null | Position,
23
+ top: number,
24
+ ) => {
25
+ hitPositions.push({
26
+ node,
27
+ position,
28
+ top,
123
29
  });
30
+ lastTop = top;
31
+ };
32
+
33
+ const handleAfterOpenFolder = (node: Node, nextNode: Node | null) => {
34
+ if (node === currentNode || nextNode === currentNode) {
35
+ // Cannot move before or after current item
36
+ addHitPosition(node, null, lastTop);
37
+ } else {
38
+ addHitPosition(node, "after", lastTop);
39
+ }
40
+ };
41
+
42
+ const handleClosedFolder = (
43
+ node: Node,
44
+ nextNode: Node | null,
45
+ element: HTMLElement,
46
+ ) => {
47
+ const top = getOffsetTop(element);
48
+
49
+ if (node === currentNode) {
50
+ // Cannot move after current item
51
+ addHitPosition(node, null, top);
52
+ } else {
53
+ addHitPosition(node, "inside", top);
54
+
55
+ // Cannot move before current item
56
+ if (nextNode !== currentNode) {
57
+ addHitPosition(node, "after", top);
58
+ }
59
+ }
60
+ };
124
61
 
125
- return hitPositions;
126
- };
62
+ const handleFirstNode = (node: Node) => {
63
+ if (node !== currentNode && node.element) {
64
+ addHitPosition(node, "before", getOffsetTop(node.element));
65
+ }
66
+ };
67
+
68
+ const handleNode = (
69
+ node: Node,
70
+ nextNode: Node | null,
71
+ element: HTMLElement,
72
+ ) => {
73
+ const top = getOffsetTop(element);
74
+
75
+ if (node === currentNode) {
76
+ // Cannot move inside current item
77
+ addHitPosition(node, null, top);
78
+ } else {
79
+ addHitPosition(node, "inside", top);
80
+ }
127
81
 
128
- export const generateHitAreasForGroup = (
129
- hitAreas: HitArea[],
130
- positionsInGroup: HitPosition[],
131
- top: number,
132
- bottom: number,
133
- ) => {
134
- // limit positions in group
135
- const positionCount = Math.min(positionsInGroup.length, 4);
82
+ if (nextNode === currentNode || node === currentNode) {
83
+ // Cannot move before or after current item
84
+ addHitPosition(node, null, top);
85
+ } else {
86
+ addHitPosition(node, "after", top);
87
+ }
88
+ };
89
+
90
+ const handleOpenFolder = (node: Node, element: HTMLElement) => {
91
+ if (node === currentNode) {
92
+ // Cannot move inside current item
136
93
 
137
- const areaHeight = Math.round((bottom - top) / positionCount);
138
- let areaTop = top;
94
+ // Dnd over the current element is not possible: add a position with type None for the top and the bottom.
95
+ const top = getOffsetTop(element);
96
+ const height = element.clientHeight;
97
+ addHitPosition(node, null, top);
139
98
 
140
- for (let i = 0; i < positionCount; i++) {
141
- const position = positionsInGroup[i] as HitPosition;
99
+ if (height > 5) {
100
+ // Subtract 5 pixels to allow more space for the next element.
101
+ addHitPosition(node, null, top + height - 5);
102
+ }
142
103
 
143
- if (position.position) {
144
- hitAreas.push({
145
- bottom: areaTop + areaHeight,
146
- node: position.node,
147
- position: position.position,
148
- top: areaTop,
149
- });
150
- }
104
+ // Stop iterating
105
+ return false;
106
+ }
151
107
 
152
- areaTop += areaHeight;
108
+ // Cannot move before current item
109
+ if (node.children[0] !== currentNode) {
110
+ addHitPosition(node, "inside", getOffsetTop(element));
153
111
  }
112
+
113
+ // Continue iterating
114
+ return true;
115
+ };
116
+
117
+ iterateVisibleNodes(tree, {
118
+ handleAfterOpenFolder,
119
+ handleClosedFolder,
120
+ handleFirstNode,
121
+ handleNode,
122
+ handleOpenFolder,
123
+ });
124
+
125
+ return hitPositions;
154
126
  };
155
127
 
156
- export const generateHitAreasFromPositions = (
157
- hitPositions: HitPosition[],
158
- treeBottom: number,
159
- ): HitArea[] => {
160
- if (!hitPositions.length) {
161
- return [];
128
+ export const generateHitAreasForGroup = (
129
+ hitAreas: HitArea[],
130
+ positionsInGroup: HitPosition[],
131
+ top: number,
132
+ bottom: number,
133
+ ) => {
134
+ // limit positions in group
135
+ const positionCount = Math.min(positionsInGroup.length, 4);
136
+
137
+ const areaHeight = Math.round((bottom - top) / positionCount);
138
+ let areaTop = top;
139
+
140
+ for (let i = 0; i < positionCount; i++) {
141
+ const position = positionsInGroup[i] as HitPosition;
142
+
143
+ if (position.position) {
144
+ hitAreas.push({
145
+ bottom: areaTop + areaHeight,
146
+ node: position.node,
147
+ position: position.position,
148
+ top: areaTop,
149
+ });
162
150
  }
163
151
 
164
- let previousTop = (hitPositions[0] as HitPosition).top;
165
- let group: HitPosition[] = [];
166
- const hitAreas: HitArea[] = [];
152
+ areaTop += areaHeight;
153
+ }
154
+ };
155
+
156
+ export const generateHitAreasFromPositions = (
157
+ hitPositions: HitPosition[],
158
+ treeBottom: number,
159
+ ): HitArea[] => {
160
+ if (!hitPositions.length) {
161
+ return [];
162
+ }
167
163
 
168
- for (const position of hitPositions) {
169
- if (position.top !== previousTop && group.length) {
170
- generateHitAreasForGroup(
171
- hitAreas,
172
- group,
173
- previousTop,
174
- position.top,
175
- );
164
+ let previousTop = (hitPositions[0] as HitPosition).top;
165
+ let group: HitPosition[] = [];
166
+ const hitAreas: HitArea[] = [];
176
167
 
177
- previousTop = position.top;
178
- group = [];
179
- }
168
+ for (const position of hitPositions) {
169
+ if (position.top !== previousTop && group.length) {
170
+ generateHitAreasForGroup(hitAreas, group, previousTop, position.top);
180
171
 
181
- group.push(position);
172
+ previousTop = position.top;
173
+ group = [];
182
174
  }
183
175
 
184
- generateHitAreasForGroup(hitAreas, group, previousTop, treeBottom);
176
+ group.push(position);
177
+ }
178
+
179
+ generateHitAreasForGroup(hitAreas, group, previousTop, treeBottom);
185
180
 
186
- return hitAreas;
181
+ return hitAreas;
187
182
  };
188
183
 
189
184
  const generateHitAreas = (tree: Node, currentNode: Node, treeBottom: number) =>
190
- generateHitAreasFromPositions(
191
- generateHitPositions(tree, currentNode),
192
- treeBottom,
193
- );
185
+ generateHitAreasFromPositions(
186
+ generateHitPositions(tree, currentNode),
187
+ treeBottom,
188
+ );
194
189
 
195
190
  export default generateHitAreas;