tree-element 0.1.0 → 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 (149) hide show
  1. package/README.md +49 -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 +18 -21
  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 +11 -4
  30. package/lib/events.d.ts.map +1 -1
  31. package/lib/index.d.ts +5 -5
  32. package/lib/index.d.ts.map +1 -1
  33. package/lib/index.js +249 -252
  34. package/lib/index.js.map +1 -1
  35. package/lib/keyHandler.d.ts +2 -3
  36. package/lib/keyHandler.d.ts.map +1 -1
  37. package/lib/keyHandler.js +26 -25
  38. package/lib/keyHandler.js.map +1 -1
  39. package/lib/methodTypes.d.ts +1 -1
  40. package/lib/methodTypes.d.ts.map +1 -1
  41. package/lib/mouseHandler.d.ts.map +1 -1
  42. package/lib/mouseHandler.js +26 -42
  43. package/lib/mouseHandler.js.map +1 -1
  44. package/lib/mouseUtils.d.ts.map +1 -1
  45. package/lib/mouseUtils.js +2 -2
  46. package/lib/mouseUtils.js.map +1 -1
  47. package/lib/node.d.ts +2 -1
  48. package/lib/node.d.ts.map +1 -1
  49. package/lib/node.js +36 -35
  50. package/lib/node.js.map +1 -1
  51. package/lib/nodeElement/borderDropHint.d.ts.map +1 -1
  52. package/lib/nodeElement/borderDropHint.js +4 -5
  53. package/lib/nodeElement/borderDropHint.js.map +1 -1
  54. package/lib/nodeElement/folderElement.d.ts +7 -4
  55. package/lib/nodeElement/folderElement.d.ts.map +1 -1
  56. package/lib/nodeElement/folderElement.js +61 -42
  57. package/lib/nodeElement/folderElement.js.map +1 -1
  58. package/lib/nodeElement/ghostDropHint.d.ts.map +1 -1
  59. package/lib/nodeElement/ghostDropHint.js +5 -9
  60. package/lib/nodeElement/ghostDropHint.js.map +1 -1
  61. package/lib/nodeElement/index.d.ts +2 -1
  62. package/lib/nodeElement/index.d.ts.map +1 -1
  63. package/lib/nodeElement/index.js +34 -26
  64. package/lib/nodeElement/index.js.map +1 -1
  65. package/lib/nodeUtils.d.ts.map +1 -1
  66. package/lib/nodeUtils.js +1 -1
  67. package/lib/nodeUtils.js.map +1 -1
  68. package/lib/options.d.ts.map +1 -1
  69. package/lib/positionUtils.js +3 -3
  70. package/lib/positionUtils.js.map +1 -1
  71. package/lib/requestUrl.d.ts +1 -1
  72. package/lib/requestUrl.d.ts.map +1 -1
  73. package/lib/requestUrl.js +4 -6
  74. package/lib/requestUrl.js.map +1 -1
  75. package/lib/saveStateHandler.d.ts.map +1 -1
  76. package/lib/saveStateHandler.js +38 -48
  77. package/lib/saveStateHandler.js.map +1 -1
  78. package/lib/scrollHandler/containerScrollParent.d.ts.map +1 -1
  79. package/lib/scrollHandler/containerScrollParent.js +9 -11
  80. package/lib/scrollHandler/containerScrollParent.js.map +1 -1
  81. package/lib/scrollHandler/createScrollParent.d.ts.map +1 -1
  82. package/lib/scrollHandler/createScrollParent.js +10 -10
  83. package/lib/scrollHandler/createScrollParent.js.map +1 -1
  84. package/lib/scrollHandler/documentScrollParent.d.ts.map +1 -1
  85. package/lib/scrollHandler/documentScrollParent.js +16 -19
  86. package/lib/scrollHandler/documentScrollParent.js.map +1 -1
  87. package/lib/scrollHandler/scrollParent.d.ts.map +1 -1
  88. package/lib/scrollHandler/scrollParent.js +11 -17
  89. package/lib/scrollHandler/scrollParent.js.map +1 -1
  90. package/lib/scrollHandler.d.ts.map +1 -1
  91. package/lib/scrollHandler.js +11 -14
  92. package/lib/scrollHandler.js.map +1 -1
  93. package/lib/selectNodeHandler.d.ts +2 -2
  94. package/lib/selectNodeHandler.d.ts.map +1 -1
  95. package/lib/selectNodeHandler.js +45 -54
  96. package/lib/selectNodeHandler.js.map +1 -1
  97. package/lib/setDefaultOptions.d.ts.map +1 -1
  98. package/lib/setDefaultOptions.js +23 -28
  99. package/lib/setDefaultOptions.js.map +1 -1
  100. package/lib/triggerCustomEvent.d.ts.map +1 -1
  101. package/lib/triggerCustomEvent.js +2 -2
  102. package/lib/triggerCustomEvent.js.map +1 -1
  103. package/lib/util.d.ts.map +1 -1
  104. package/lib/util.js +2 -2
  105. package/lib/util.js.map +1 -1
  106. package/lib/version.d.ts +1 -1
  107. package/lib/version.js +1 -1
  108. package/lib/version.js.map +1 -1
  109. package/package.json +7 -3
  110. package/src/animation.ts +1 -1
  111. package/src/classNames.ts +52 -52
  112. package/src/dataLoader.ts +68 -70
  113. package/src/dragAndDropHandler/binarySearch.ts +17 -17
  114. package/src/dragAndDropHandler/dragElement.ts +50 -50
  115. package/src/dragAndDropHandler/generateHitAreas.ts +156 -161
  116. package/src/dragAndDropHandler/index.ts +342 -351
  117. package/src/dragAndDropHandler/iterateVisibleNodes.ts +59 -63
  118. package/src/dragAndDropHandler/types.ts +5 -5
  119. package/src/elementsRenderer.ts +351 -298
  120. package/src/events.ts +216 -209
  121. package/src/header.txt +1 -1
  122. package/src/index.ts +52 -82
  123. package/src/keyHandler.ts +125 -115
  124. package/src/methodTypes.ts +4 -7
  125. package/src/mouseHandler.ts +314 -317
  126. package/src/mouseUtils.ts +14 -14
  127. package/src/node.ts +761 -766
  128. package/src/nodeElement/borderDropHint.ts +25 -25
  129. package/src/nodeElement/folderElement.ts +135 -112
  130. package/src/nodeElement/ghostDropHint.ts +62 -62
  131. package/src/nodeElement/index.ts +88 -74
  132. package/src/nodeUtils.ts +5 -5
  133. package/src/options.ts +6 -2
  134. package/src/requestUrl.ts +3 -3
  135. package/src/saveStateHandler.ts +204 -206
  136. package/src/scrollHandler/containerScrollParent.ts +49 -52
  137. package/src/scrollHandler/createScrollParent.ts +27 -27
  138. package/src/scrollHandler/documentScrollParent.ts +70 -70
  139. package/src/scrollHandler/scrollParent.ts +98 -98
  140. package/src/scrollHandler.ts +45 -45
  141. package/src/selectNodeHandler.ts +176 -166
  142. package/src/setDefaultOptions.ts +25 -22
  143. package/src/triggerCustomEvent.ts +7 -3
  144. package/src/util.ts +2 -2
  145. package/src/version.ts +1 -1
  146. package/tree_element.debug.js +3770 -3799
  147. package/tree_element.debug.js.map +1 -1
  148. package/tree_element.js +2 -2
  149. package/tree_element.js.map +1 -1
@@ -4,8 +4,8 @@ import type { PositionInfo } from "./mouseUtils";
4
4
  import type { Node } from "./node";
5
5
 
6
6
  import {
7
- getPositionInfoFromMouseEvent,
8
- getPositionInfoFromTouch,
7
+ getPositionInfoFromMouseEvent,
8
+ getPositionInfoFromTouch,
9
9
  } from "./mouseUtils";
10
10
 
11
11
  export type GetMouseDelay = () => number;
@@ -14,378 +14,375 @@ export type MouseCapture = (positionInfo: PositionInfo) => boolean | null;
14
14
  export type MouseStart = (positionInfo: PositionInfo) => boolean;
15
15
 
16
16
  interface ClickTarget {
17
- node: Node;
18
- type: "button" | "label";
17
+ node: Node;
18
+ type: "button" | "label";
19
19
  }
20
20
 
21
21
  interface MouseHandlerParams {
22
- classNames: ClassNames;
23
- element: HTMLElement;
24
- getMouseDelay: () => number;
25
- getNode: GetNode;
26
- onClickButton: (node: Node) => void;
27
- onClickTitle: (node: Node) => void;
28
- onMouseCapture: MouseCapture;
29
- onMouseDrag: (positionInfo: PositionInfo) => void;
30
- onMouseStart: MouseStart;
31
- onMouseStop: (positionInfo: PositionInfo) => void;
32
- triggerEvent: TriggerEvent;
33
- useContextMenu: boolean;
22
+ classNames: ClassNames;
23
+ element: HTMLElement;
24
+ getMouseDelay: () => number;
25
+ getNode: GetNode;
26
+ onClickButton: (node: Node) => void;
27
+ onClickTitle: (node: Node) => void;
28
+ onMouseCapture: MouseCapture;
29
+ onMouseDrag: (positionInfo: PositionInfo) => void;
30
+ onMouseStart: MouseStart;
31
+ onMouseStop: (positionInfo: PositionInfo) => void;
32
+ triggerEvent: TriggerEvent;
33
+ useContextMenu: boolean;
34
34
  }
35
35
 
36
36
  class MouseHandler {
37
- private classNames: ClassNames;
38
- private element: HTMLElement;
39
- private getMouseDelay: GetMouseDelay;
40
- private getNode: GetNode;
41
-
42
- private isMouseDelayMet: boolean;
43
-
44
- private isMouseStarted: boolean;
45
-
46
- private mouseDelayTimer: null | number;
47
-
48
- private mouseDownInfo: null | PositionInfo;
49
- private onClickButton: (node: Node) => void;
50
- private onClickTitle: (node: Node) => void;
51
-
52
- private onMouseCapture: MouseCapture;
53
-
54
- private onMouseDrag: (positionInfo: PositionInfo) => void;
55
-
56
- private onMouseStart: MouseStart;
57
-
58
- private onMouseStop: (positionInfo: PositionInfo) => void;
59
-
60
- private triggerEvent: TriggerEvent;
61
- private useContextMenu: boolean;
62
- constructor({
63
- classNames,
64
- element,
65
- getMouseDelay,
66
- getNode,
67
- onClickButton,
68
- onClickTitle,
69
- onMouseCapture,
70
- onMouseDrag,
71
- onMouseStart,
72
- onMouseStop,
73
- triggerEvent,
74
- useContextMenu,
75
- }: MouseHandlerParams) {
76
- this.classNames = classNames;
77
- this.element = element;
78
- this.getMouseDelay = getMouseDelay;
79
- this.getNode = getNode;
80
- this.onClickButton = onClickButton;
81
- this.onClickTitle = onClickTitle;
82
- this.onMouseCapture = onMouseCapture;
83
- this.onMouseDrag = onMouseDrag;
84
- this.onMouseStart = onMouseStart;
85
- this.onMouseStop = onMouseStop;
86
- this.triggerEvent = triggerEvent;
87
- this.useContextMenu = useContextMenu;
88
-
89
- element.addEventListener("click", this.handleClick);
90
- element.addEventListener("dblclick", this.handleDblclick);
91
- element.addEventListener("mousedown", this.mouseDown, {
92
- passive: false,
93
- });
94
- element.addEventListener("touchstart", this.touchStart, {
95
- passive: false,
96
- });
97
-
98
- if (useContextMenu) {
99
- element.addEventListener("contextmenu", this.handleContextmenu);
100
- }
101
-
102
- this.isMouseStarted = false;
103
- this.mouseDelayTimer = null;
104
- this.isMouseDelayMet = false;
105
- this.mouseDownInfo = null;
37
+ private classNames: ClassNames;
38
+ private element: HTMLElement;
39
+ private getMouseDelay: GetMouseDelay;
40
+ private getNode: GetNode;
41
+
42
+ private isMouseDelayMet: boolean;
43
+
44
+ private isMouseStarted: boolean;
45
+
46
+ private mouseDelayTimer: null | number;
47
+
48
+ private mouseDownInfo: null | PositionInfo;
49
+ private onClickButton: (node: Node) => void;
50
+ private onClickTitle: (node: Node) => void;
51
+
52
+ private onMouseCapture: MouseCapture;
53
+
54
+ private onMouseDrag: (positionInfo: PositionInfo) => void;
55
+
56
+ private onMouseStart: MouseStart;
57
+
58
+ private onMouseStop: (positionInfo: PositionInfo) => void;
59
+
60
+ private triggerEvent: TriggerEvent;
61
+ private useContextMenu: boolean;
62
+ constructor({
63
+ classNames,
64
+ element,
65
+ getMouseDelay,
66
+ getNode,
67
+ onClickButton,
68
+ onClickTitle,
69
+ onMouseCapture,
70
+ onMouseDrag,
71
+ onMouseStart,
72
+ onMouseStop,
73
+ triggerEvent,
74
+ useContextMenu,
75
+ }: MouseHandlerParams) {
76
+ this.classNames = classNames;
77
+ this.element = element;
78
+ this.getMouseDelay = getMouseDelay;
79
+ this.getNode = getNode;
80
+ this.onClickButton = onClickButton;
81
+ this.onClickTitle = onClickTitle;
82
+ this.onMouseCapture = onMouseCapture;
83
+ this.onMouseDrag = onMouseDrag;
84
+ this.onMouseStart = onMouseStart;
85
+ this.onMouseStop = onMouseStop;
86
+ this.triggerEvent = triggerEvent;
87
+ this.useContextMenu = useContextMenu;
88
+
89
+ element.addEventListener("click", this.handleClick);
90
+ element.addEventListener("dblclick", this.handleDblclick);
91
+ element.addEventListener("mousedown", this.mouseDown, {
92
+ passive: false,
93
+ });
94
+ element.addEventListener("touchstart", this.touchStart, {
95
+ passive: false,
96
+ });
97
+
98
+ if (useContextMenu) {
99
+ element.addEventListener("contextmenu", this.handleContextmenu);
106
100
  }
107
- public deinit(): void {
108
- this.element.removeEventListener("click", this.handleClick);
109
- this.element.removeEventListener("dblclick", this.handleDblclick);
110
-
111
- if (this.useContextMenu) {
112
- this.element.removeEventListener(
113
- "contextmenu",
114
- this.handleContextmenu,
115
- );
116
- }
117
101
 
118
- this.element.removeEventListener("mousedown", this.mouseDown);
119
- this.element.removeEventListener("touchstart", this.touchStart);
120
- this.removeMouseMoveEventListeners();
102
+ this.isMouseStarted = false;
103
+ this.mouseDelayTimer = null;
104
+ this.isMouseDelayMet = false;
105
+ this.mouseDownInfo = null;
106
+ }
107
+ public deinit(): void {
108
+ this.element.removeEventListener("click", this.handleClick);
109
+ this.element.removeEventListener("dblclick", this.handleDblclick);
110
+
111
+ if (this.useContextMenu) {
112
+ this.element.removeEventListener("contextmenu", this.handleContextmenu);
121
113
  }
122
- private getClickTarget(element: HTMLElement): ClickTarget | null {
123
- const button = element.closest<HTMLElement>(
124
- `.${this.classNames.toggler}`,
125
- );
126
-
127
- if (button) {
128
- const node = this.getNode(button);
129
-
130
- if (node) {
131
- return {
132
- node,
133
- type: "button",
134
- };
135
- }
136
- } else {
137
- const treeElement = element.closest<HTMLElement>(
138
- `.${this.classNames.element}`,
139
- );
140
-
141
- if (treeElement) {
142
- const node = this.getNode(treeElement);
143
- if (node) {
144
- return {
145
- node,
146
- type: "label",
147
- };
148
- }
149
- }
114
+
115
+ this.element.removeEventListener("mousedown", this.mouseDown);
116
+ this.element.removeEventListener("touchstart", this.touchStart);
117
+ this.removeMouseMoveEventListeners();
118
+ }
119
+ private getClickTarget(element: HTMLElement): ClickTarget | null {
120
+ const button = element.closest<HTMLElement>(`.${this.classNames.toggler}`);
121
+
122
+ if (button) {
123
+ const node = this.getNode(button);
124
+
125
+ if (node) {
126
+ return {
127
+ node,
128
+ type: "button",
129
+ };
130
+ }
131
+ } else {
132
+ const treeElement = element.closest<HTMLElement>(
133
+ `.${this.classNames.element}`,
134
+ );
135
+
136
+ if (treeElement) {
137
+ const node = this.getNode(treeElement);
138
+ if (node) {
139
+ return {
140
+ node,
141
+ type: "label",
142
+ };
150
143
  }
144
+ }
145
+ }
151
146
 
152
- return null;
147
+ return null;
148
+ }
149
+ private handleClick = (e: MouseEvent): void => {
150
+ if (!e.target) {
151
+ return;
153
152
  }
154
- private handleClick = (e: MouseEvent): void => {
155
- if (!e.target) {
156
- return;
157
- }
158
153
 
159
- const clickTarget = this.getClickTarget(e.target as HTMLElement);
154
+ const clickTarget = this.getClickTarget(e.target as HTMLElement);
160
155
 
161
- if (!clickTarget) {
162
- return;
163
- }
156
+ if (!clickTarget) {
157
+ return;
158
+ }
164
159
 
165
- switch (clickTarget.type) {
166
- case "button":
167
- this.onClickButton(clickTarget.node);
168
-
169
- e.preventDefault();
170
- e.stopPropagation();
171
- break;
172
-
173
- case "label": {
174
- if (this.triggerEvent("tree.click", {
175
- node: clickTarget.node,
176
- originalEvent: e,
177
- })) {
178
- this.onClickTitle(clickTarget.node);
179
- }
180
- break;
181
- }
160
+ switch (clickTarget.type) {
161
+ case "button":
162
+ this.onClickButton(clickTarget.node);
163
+
164
+ e.preventDefault();
165
+ e.stopPropagation();
166
+ break;
167
+
168
+ case "label": {
169
+ if (
170
+ this.triggerEvent("tree.click", {
171
+ node: clickTarget.node,
172
+ originalEvent: e,
173
+ })
174
+ ) {
175
+ this.onClickTitle(clickTarget.node);
182
176
  }
183
- };
177
+ break;
178
+ }
179
+ }
180
+ };
184
181
 
185
- private handleContextmenu = (e: MouseEvent) => {
186
- if (!e.target) {
187
- return;
188
- }
182
+ private handleContextmenu = (e: MouseEvent) => {
183
+ if (!e.target) {
184
+ return;
185
+ }
189
186
 
190
- const div = (e.target as HTMLElement).closest<HTMLElement>(
191
- `ul.${this.classNames.tree} .${this.classNames.element}`,
192
- );
193
-
194
- if (div) {
195
- const node = this.getNode(div);
196
- if (node) {
197
- e.preventDefault();
198
- e.stopPropagation();
199
-
200
- this.triggerEvent("tree.contextmenu", {
201
- node,
202
- originalEvent: e,
203
- });
204
- return false;
205
- }
206
- }
187
+ const div = (e.target as HTMLElement).closest<HTMLElement>(
188
+ `ul.${this.classNames.tree} .${this.classNames.element}`,
189
+ );
207
190
 
208
- return null;
209
- };
191
+ if (div) {
192
+ const node = this.getNode(div);
193
+ if (node) {
194
+ e.preventDefault();
195
+ e.stopPropagation();
210
196
 
211
- private handleDblclick = (e: MouseEvent): void => {
212
- if (!e.target) {
213
- return;
214
- }
197
+ this.triggerEvent("tree.contextmenu", {
198
+ node,
199
+ originalEvent: e,
200
+ });
201
+ return false;
202
+ }
203
+ }
215
204
 
216
- const clickTarget = this.getClickTarget(e.target as HTMLElement);
205
+ return null;
206
+ };
217
207
 
218
- if (clickTarget?.type === "label") {
219
- this.triggerEvent("tree.dblclick", {
220
- node: clickTarget.node,
221
- originalEvent: e,
222
- });
223
- }
224
- };
208
+ private handleDblclick = (e: MouseEvent): void => {
209
+ if (!e.target) {
210
+ return;
211
+ }
225
212
 
226
- private handleMouseDown(positionInfo: PositionInfo): boolean {
227
- // We may have missed mouseup (out of window)
228
- if (this.isMouseStarted) {
229
- this.handleMouseUp(positionInfo);
230
- }
213
+ const clickTarget = this.getClickTarget(e.target as HTMLElement);
231
214
 
232
- this.mouseDownInfo = positionInfo;
215
+ if (clickTarget?.type === "label") {
216
+ this.triggerEvent("tree.dblclick", {
217
+ node: clickTarget.node,
218
+ originalEvent: e,
219
+ });
220
+ }
221
+ };
233
222
 
234
- if (!this.onMouseCapture(positionInfo)) {
235
- return false;
236
- }
223
+ private handleMouseDown(positionInfo: PositionInfo): boolean {
224
+ // We may have missed mouseup (out of window)
225
+ if (this.isMouseStarted) {
226
+ this.handleMouseUp(positionInfo);
227
+ }
237
228
 
238
- this.handleStartMouse();
229
+ this.mouseDownInfo = positionInfo;
239
230
 
240
- return true;
231
+ if (!this.onMouseCapture(positionInfo)) {
232
+ return false;
241
233
  }
242
234
 
243
- private handleMouseMove(
244
- e: MouseEvent | TouchEvent,
245
- positionInfo: PositionInfo,
246
- ): void {
247
- if (this.isMouseStarted) {
248
- this.onMouseDrag(positionInfo);
249
-
250
- if (e.cancelable) {
251
- e.preventDefault();
252
- }
253
- return;
254
- }
235
+ this.handleStartMouse();
255
236
 
256
- if (!this.isMouseDelayMet) {
257
- return;
258
- }
237
+ return true;
238
+ }
259
239
 
260
- if (this.mouseDownInfo) {
261
- this.isMouseStarted = this.onMouseStart(this.mouseDownInfo);
262
- }
263
-
264
- if (this.isMouseStarted) {
265
- this.onMouseDrag(positionInfo);
240
+ private handleMouseMove(
241
+ e: MouseEvent | TouchEvent,
242
+ positionInfo: PositionInfo,
243
+ ): void {
244
+ if (this.isMouseStarted) {
245
+ this.onMouseDrag(positionInfo);
266
246
 
267
- if (e.cancelable) {
268
- e.preventDefault();
269
- }
270
- } else {
271
- this.handleMouseUp(positionInfo);
272
- }
247
+ if (e.cancelable) {
248
+ e.preventDefault();
249
+ }
250
+ return;
273
251
  }
274
- private handleMouseUp(positionInfo: PositionInfo): void {
275
- this.removeMouseMoveEventListeners();
276
- this.isMouseDelayMet = false;
277
- this.mouseDownInfo = null;
278
-
279
- if (this.isMouseStarted) {
280
- this.isMouseStarted = false;
281
- this.onMouseStop(positionInfo);
282
- }
283
- }
284
-
285
- private handleStartMouse(): void {
286
- document.addEventListener("mousemove", this.mouseMove, {
287
- passive: false,
288
- });
289
- document.addEventListener("touchmove", this.touchMove, {
290
- passive: false,
291
- });
292
- document.addEventListener("mouseup", this.mouseUp, { passive: false });
293
- document.addEventListener("touchend", this.touchEnd, {
294
- passive: false,
295
- });
296
252
 
297
- const mouseDelay = this.getMouseDelay();
298
-
299
- if (mouseDelay) {
300
- this.startMouseDelayTimer(mouseDelay);
301
- } else {
302
- this.isMouseDelayMet = true;
303
- }
253
+ if (!this.isMouseDelayMet) {
254
+ return;
304
255
  }
305
256
 
306
- private mouseDown = (e: MouseEvent): void => {
307
- // Left mouse button?
308
- if (e.button !== 0) {
309
- return;
310
- }
257
+ if (this.mouseDownInfo) {
258
+ this.isMouseStarted = this.onMouseStart(this.mouseDownInfo);
259
+ }
311
260
 
312
- const result = this.handleMouseDown(getPositionInfoFromMouseEvent(e));
261
+ if (this.isMouseStarted) {
262
+ this.onMouseDrag(positionInfo);
313
263
 
314
- if (result && e.cancelable) {
315
- e.preventDefault();
316
- }
317
- };
264
+ if (e.cancelable) {
265
+ e.preventDefault();
266
+ }
267
+ } else {
268
+ this.handleMouseUp(positionInfo);
269
+ }
270
+ }
271
+ private handleMouseUp(positionInfo: PositionInfo): void {
272
+ this.removeMouseMoveEventListeners();
273
+ this.isMouseDelayMet = false;
274
+ this.mouseDownInfo = null;
275
+
276
+ if (this.isMouseStarted) {
277
+ this.isMouseStarted = false;
278
+ this.onMouseStop(positionInfo);
279
+ }
280
+ }
281
+
282
+ private handleStartMouse(): void {
283
+ document.addEventListener("mousemove", this.mouseMove, {
284
+ passive: false,
285
+ });
286
+ document.addEventListener("touchmove", this.touchMove, {
287
+ passive: false,
288
+ });
289
+ document.addEventListener("mouseup", this.mouseUp, { passive: false });
290
+ document.addEventListener("touchend", this.touchEnd, {
291
+ passive: false,
292
+ });
293
+
294
+ const mouseDelay = this.getMouseDelay();
295
+
296
+ if (mouseDelay) {
297
+ this.startMouseDelayTimer(mouseDelay);
298
+ } else {
299
+ this.isMouseDelayMet = true;
300
+ }
301
+ }
318
302
 
319
- private mouseMove = (e: MouseEvent): void => {
320
- this.handleMouseMove(e, getPositionInfoFromMouseEvent(e));
321
- };
303
+ private mouseDown = (e: MouseEvent): void => {
304
+ // Left mouse button?
305
+ if (e.button !== 0) {
306
+ return;
307
+ }
322
308
 
323
- private mouseUp = (e: MouseEvent): void => {
324
- this.handleMouseUp(getPositionInfoFromMouseEvent(e));
325
- };
309
+ const result = this.handleMouseDown(getPositionInfoFromMouseEvent(e));
326
310
 
327
- private removeMouseMoveEventListeners() {
328
- document.removeEventListener("mousemove", this.mouseMove);
329
- document.removeEventListener("touchmove", this.touchMove);
330
- document.removeEventListener("mouseup", this.mouseUp);
331
- document.removeEventListener("touchend", this.touchEnd);
311
+ if (result && e.cancelable) {
312
+ e.preventDefault();
313
+ }
314
+ };
315
+
316
+ private mouseMove = (e: MouseEvent): void => {
317
+ this.handleMouseMove(e, getPositionInfoFromMouseEvent(e));
318
+ };
319
+
320
+ private mouseUp = (e: MouseEvent): void => {
321
+ this.handleMouseUp(getPositionInfoFromMouseEvent(e));
322
+ };
323
+
324
+ private removeMouseMoveEventListeners() {
325
+ document.removeEventListener("mousemove", this.mouseMove);
326
+ document.removeEventListener("touchmove", this.touchMove);
327
+ document.removeEventListener("mouseup", this.mouseUp);
328
+ document.removeEventListener("touchend", this.touchEnd);
329
+ }
330
+
331
+ private startMouseDelayTimer(mouseDelay: number): void {
332
+ if (this.mouseDelayTimer) {
333
+ clearTimeout(this.mouseDelayTimer);
332
334
  }
333
335
 
334
- private startMouseDelayTimer(mouseDelay: number): void {
335
- if (this.mouseDelayTimer) {
336
- clearTimeout(this.mouseDelayTimer);
337
- }
336
+ this.mouseDelayTimer = window.setTimeout(() => {
337
+ if (this.mouseDownInfo) {
338
+ this.isMouseDelayMet = true;
339
+ }
340
+ }, mouseDelay);
338
341
 
339
- this.mouseDelayTimer = window.setTimeout(() => {
340
- if (this.mouseDownInfo) {
341
- this.isMouseDelayMet = true;
342
- }
343
- }, mouseDelay);
342
+ this.isMouseDelayMet = false;
343
+ }
344
344
 
345
- this.isMouseDelayMet = false;
345
+ private touchEnd = (e: TouchEvent): void => {
346
+ if (e.touches.length > 1) {
347
+ return;
346
348
  }
347
349
 
348
- private touchEnd = (e: TouchEvent): void => {
349
- if (e.touches.length > 1) {
350
- return;
351
- }
352
-
353
- const touch = e.touches[0];
350
+ const touch = e.touches[0];
354
351
 
355
- if (!touch) {
356
- return;
357
- }
352
+ if (!touch) {
353
+ return;
354
+ }
358
355
 
359
- this.handleMouseUp(getPositionInfoFromTouch(touch, e));
360
- };
356
+ this.handleMouseUp(getPositionInfoFromTouch(touch, e));
357
+ };
361
358
 
362
- private touchMove = (e: TouchEvent): void => {
363
- if (e.touches.length > 1) {
364
- return;
365
- }
359
+ private touchMove = (e: TouchEvent): void => {
360
+ if (e.touches.length > 1) {
361
+ return;
362
+ }
366
363
 
367
- const touch = e.touches[0];
364
+ const touch = e.touches[0];
368
365
 
369
- if (!touch) {
370
- return;
371
- }
366
+ if (!touch) {
367
+ return;
368
+ }
372
369
 
373
- this.handleMouseMove(e, getPositionInfoFromTouch(touch, e));
374
- };
370
+ this.handleMouseMove(e, getPositionInfoFromTouch(touch, e));
371
+ };
375
372
 
376
- private touchStart = (e: TouchEvent): void => {
377
- if (e.touches.length > 1) {
378
- return;
379
- }
373
+ private touchStart = (e: TouchEvent): void => {
374
+ if (e.touches.length > 1) {
375
+ return;
376
+ }
380
377
 
381
- const touch = e.touches[0];
378
+ const touch = e.touches[0];
382
379
 
383
- if (!touch) {
384
- return;
385
- }
380
+ if (!touch) {
381
+ return;
382
+ }
386
383
 
387
- this.handleMouseDown(getPositionInfoFromTouch(touch, e));
388
- };
384
+ this.handleMouseDown(getPositionInfoFromTouch(touch, e));
385
+ };
389
386
  }
390
387
 
391
388
  export default MouseHandler;