plotboilerplate 1.15.0 → 1.17.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.
Files changed (237) hide show
  1. package/README.md +1 -0
  2. package/changelog.md +65 -0
  3. package/dist/index.esm.js +760 -667
  4. package/dist/index.esm.js.map +1 -1
  5. package/dist/index.esm.min.js +1 -1
  6. package/dist/index.esm.min.js.map +1 -1
  7. package/dist/plotboilerplate.browser.min.js +1 -1
  8. package/dist/plotboilerplate.browser.min.js.map +1 -1
  9. package/dist/plotboilerplate.js +765 -571
  10. package/dist/plotboilerplate.min.js +1 -1
  11. package/package.json +1 -1
  12. package/src/cjs/BezierPath.d.ts +32 -14
  13. package/src/cjs/BezierPath.js +65 -24
  14. package/src/cjs/BezierPath.js.map +1 -1
  15. package/src/cjs/Bounds.d.ts +33 -1
  16. package/src/cjs/Bounds.js +38 -1
  17. package/src/cjs/Bounds.js.map +1 -1
  18. package/src/cjs/Circle.d.ts +15 -13
  19. package/src/cjs/Circle.js +16 -34
  20. package/src/cjs/Circle.js.map +1 -1
  21. package/src/cjs/CircleSector.d.ts +17 -16
  22. package/src/cjs/CircleSector.js +12 -24
  23. package/src/cjs/CircleSector.js.map +1 -1
  24. package/src/cjs/CubicBezierCurve.d.ts +16 -15
  25. package/src/cjs/CubicBezierCurve.js +57 -94
  26. package/src/cjs/CubicBezierCurve.js.map +1 -1
  27. package/src/cjs/KeyHandler.d.ts +10 -3
  28. package/src/cjs/KeyHandler.js +28 -23
  29. package/src/cjs/KeyHandler.js.map +1 -1
  30. package/src/cjs/Line.d.ts +2 -15
  31. package/src/cjs/Line.js +6 -31
  32. package/src/cjs/Line.js.map +1 -1
  33. package/src/cjs/MouseHandler.js +43 -53
  34. package/src/cjs/MouseHandler.js.map +1 -1
  35. package/src/cjs/PBImage.d.ts +15 -13
  36. package/src/cjs/PBImage.js +11 -15
  37. package/src/cjs/PBImage.js.map +1 -1
  38. package/src/cjs/PBText.d.ts +13 -12
  39. package/src/cjs/PBText.js +8 -12
  40. package/src/cjs/PBText.js.map +1 -1
  41. package/src/cjs/PlotBoilerplate.d.ts +3 -1
  42. package/src/cjs/PlotBoilerplate.js +9 -2
  43. package/src/cjs/PlotBoilerplate.js.map +1 -1
  44. package/src/cjs/Polygon.d.ts +23 -14
  45. package/src/cjs/Polygon.js +22 -35
  46. package/src/cjs/Polygon.js.map +1 -1
  47. package/src/cjs/Triangle.d.ts +15 -13
  48. package/src/cjs/Triangle.js +23 -64
  49. package/src/cjs/Triangle.js.map +1 -1
  50. package/src/cjs/VEllipse.d.ts +14 -9
  51. package/src/cjs/VEllipse.js +10 -18
  52. package/src/cjs/VEllipse.js.map +1 -1
  53. package/src/cjs/VEllipseSector.d.ts +15 -1
  54. package/src/cjs/VEllipseSector.js +11 -1
  55. package/src/cjs/VEllipseSector.js.map +1 -1
  56. package/src/cjs/Vector.d.ts +3 -15
  57. package/src/cjs/Vector.js +9 -49
  58. package/src/cjs/Vector.js.map +1 -1
  59. package/src/cjs/VertTuple.d.ts +15 -1
  60. package/src/cjs/VertTuple.js +14 -19
  61. package/src/cjs/VertTuple.js.map +1 -1
  62. package/src/cjs/Vertex.d.ts +23 -13
  63. package/src/cjs/Vertex.js +24 -22
  64. package/src/cjs/Vertex.js.map +1 -1
  65. package/src/cjs/VertexListeners.d.ts +12 -8
  66. package/src/cjs/VertexListeners.js +18 -25
  67. package/src/cjs/VertexListeners.js.map +1 -1
  68. package/src/cjs/draw.d.ts +45 -3
  69. package/src/cjs/draw.js +149 -6
  70. package/src/cjs/draw.js.map +1 -1
  71. package/src/cjs/drawgl.d.ts +41 -3
  72. package/src/cjs/drawgl.js +45 -3
  73. package/src/cjs/drawgl.js.map +1 -1
  74. package/src/cjs/drawutilssvg.d.ts +69 -4
  75. package/src/cjs/drawutilssvg.js +147 -16
  76. package/src/cjs/drawutilssvg.js.map +1 -1
  77. package/src/cjs/index.d.ts +0 -1
  78. package/src/cjs/index.js +0 -1
  79. package/src/cjs/index.js.map +1 -1
  80. package/src/cjs/interfaces/DrawLib.d.ts +64 -27
  81. package/src/cjs/interfaces/DrawLib.js +3 -0
  82. package/src/cjs/interfaces/DrawLib.js.map +1 -1
  83. package/src/cjs/interfaces/core.d.ts +2 -12
  84. package/src/cjs/interfaces/core.js +1 -0
  85. package/src/cjs/interfaces/core.js.map +1 -1
  86. package/src/cjs/module.d.ts +1 -3
  87. package/src/cjs/module.js +2 -5
  88. package/src/cjs/module.js.map +1 -1
  89. package/src/cjs/utils/creategui.js +16 -2
  90. package/src/cjs/utils/datastructures/Color.d.ts +3 -1
  91. package/src/cjs/utils/datastructures/Color.js +17 -6
  92. package/src/cjs/utils/datastructures/Color.js.map +1 -1
  93. package/src/cjs/utils/datastructures/Girih.d.ts +5 -0
  94. package/src/cjs/utils/datastructures/Girih.js +18 -14
  95. package/src/cjs/utils/datastructures/Girih.js.map +1 -1
  96. package/src/cjs/utils/datastructures/GirihPenroseRhombus.js +42 -25
  97. package/src/cjs/utils/datastructures/GirihPenroseRhombus.js.map +1 -1
  98. package/src/cjs/utils/datastructures/GirihTile.js +2 -13
  99. package/src/cjs/utils/datastructures/GirihTile.js.map +1 -1
  100. package/src/cjs/utils/helpers/BezierPathInteractionHelper.d.ts +17 -1
  101. package/src/cjs/utils/helpers/BezierPathInteractionHelper.js +50 -32
  102. package/src/cjs/utils/helpers/BezierPathInteractionHelper.js.map +1 -1
  103. package/src/cjs/utils/io/DndFileHandler.d.ts +63 -0
  104. package/src/cjs/utils/io/DndFileHandler.js +112 -0
  105. package/src/cjs/utils/io/DndFileHandler.js.map +1 -0
  106. package/src/cjs/utils/io/FileDrop.d.ts +98 -0
  107. package/src/cjs/utils/io/FileDrop.js +142 -0
  108. package/src/cjs/utils/io/FileDrop.js.map +1 -0
  109. package/src/esm/BezierPath.d.ts +32 -14
  110. package/src/esm/BezierPath.js +65 -24
  111. package/src/esm/BezierPath.js.map +1 -1
  112. package/src/esm/Bounds.d.ts +33 -1
  113. package/src/esm/Bounds.js +38 -1
  114. package/src/esm/Bounds.js.map +1 -1
  115. package/src/esm/Circle.d.ts +15 -13
  116. package/src/esm/Circle.js +16 -34
  117. package/src/esm/Circle.js.map +1 -1
  118. package/src/esm/CircleSector.d.ts +17 -16
  119. package/src/esm/CircleSector.js +12 -24
  120. package/src/esm/CircleSector.js.map +1 -1
  121. package/src/esm/CubicBezierCurve.d.ts +16 -15
  122. package/src/esm/CubicBezierCurve.js +57 -94
  123. package/src/esm/CubicBezierCurve.js.map +1 -1
  124. package/src/esm/KeyHandler.d.ts +10 -3
  125. package/src/esm/KeyHandler.js +28 -23
  126. package/src/esm/KeyHandler.js.map +1 -1
  127. package/src/esm/Line.d.ts +2 -15
  128. package/src/esm/Line.js +6 -31
  129. package/src/esm/Line.js.map +1 -1
  130. package/src/esm/MouseHandler.js +43 -53
  131. package/src/esm/MouseHandler.js.map +1 -1
  132. package/src/esm/PBImage.d.ts +15 -13
  133. package/src/esm/PBImage.js +11 -15
  134. package/src/esm/PBImage.js.map +1 -1
  135. package/src/esm/PBText.d.ts +13 -12
  136. package/src/esm/PBText.js +8 -12
  137. package/src/esm/PBText.js.map +1 -1
  138. package/src/esm/PlotBoilerplate.d.ts +3 -1
  139. package/src/esm/PlotBoilerplate.js +9 -2
  140. package/src/esm/PlotBoilerplate.js.map +1 -1
  141. package/src/esm/Polygon.d.ts +23 -14
  142. package/src/esm/Polygon.js +22 -35
  143. package/src/esm/Polygon.js.map +1 -1
  144. package/src/esm/Triangle.d.ts +15 -13
  145. package/src/esm/Triangle.js +23 -64
  146. package/src/esm/Triangle.js.map +1 -1
  147. package/src/esm/VEllipse.d.ts +14 -9
  148. package/src/esm/VEllipse.js +10 -18
  149. package/src/esm/VEllipse.js.map +1 -1
  150. package/src/esm/VEllipseSector.d.ts +15 -1
  151. package/src/esm/VEllipseSector.js +11 -1
  152. package/src/esm/VEllipseSector.js.map +1 -1
  153. package/src/esm/Vector.d.ts +3 -15
  154. package/src/esm/Vector.js +9 -49
  155. package/src/esm/Vector.js.map +1 -1
  156. package/src/esm/VertTuple.d.ts +15 -1
  157. package/src/esm/VertTuple.js +14 -19
  158. package/src/esm/VertTuple.js.map +1 -1
  159. package/src/esm/Vertex.d.ts +23 -13
  160. package/src/esm/Vertex.js +24 -22
  161. package/src/esm/Vertex.js.map +1 -1
  162. package/src/esm/VertexListeners.d.ts +12 -8
  163. package/src/esm/VertexListeners.js +18 -25
  164. package/src/esm/VertexListeners.js.map +1 -1
  165. package/src/esm/draw.d.ts +45 -3
  166. package/src/esm/draw.js +147 -6
  167. package/src/esm/draw.js.map +1 -1
  168. package/src/esm/drawgl.d.ts +41 -3
  169. package/src/esm/drawgl.js +44 -3
  170. package/src/esm/drawgl.js.map +1 -1
  171. package/src/esm/drawutilssvg.d.ts +69 -4
  172. package/src/esm/drawutilssvg.js +146 -16
  173. package/src/esm/drawutilssvg.js.map +1 -1
  174. package/src/esm/index.d.ts +0 -1
  175. package/src/esm/index.js +0 -1
  176. package/src/esm/index.js.map +1 -1
  177. package/src/esm/interfaces/DrawLib.d.ts +64 -27
  178. package/src/esm/interfaces/DrawLib.js +3 -0
  179. package/src/esm/interfaces/DrawLib.js.map +1 -1
  180. package/src/esm/interfaces/core.d.ts +2 -12
  181. package/src/esm/interfaces/core.js +1 -0
  182. package/src/esm/interfaces/core.js.map +1 -1
  183. package/src/esm/module.d.ts +1 -3
  184. package/src/esm/module.js +5 -4
  185. package/src/esm/module.js.map +1 -1
  186. package/src/esm/utils/datastructures/Color.d.ts +3 -1
  187. package/src/esm/utils/datastructures/Color.js +17 -6
  188. package/src/esm/utils/datastructures/Color.js.map +1 -1
  189. package/src/esm/utils/datastructures/Girih.d.ts +5 -0
  190. package/src/esm/utils/datastructures/Girih.js +18 -14
  191. package/src/esm/utils/datastructures/Girih.js.map +1 -1
  192. package/src/esm/utils/datastructures/GirihPenroseRhombus.js +42 -25
  193. package/src/esm/utils/datastructures/GirihPenroseRhombus.js.map +1 -1
  194. package/src/esm/utils/datastructures/GirihTile.js +2 -13
  195. package/src/esm/utils/datastructures/GirihTile.js.map +1 -1
  196. package/src/esm/utils/helpers/BezierPathInteractionHelper.d.ts +17 -1
  197. package/src/esm/utils/helpers/BezierPathInteractionHelper.js +49 -32
  198. package/src/esm/utils/helpers/BezierPathInteractionHelper.js.map +1 -1
  199. package/src/esm/utils/io/DndFileHandler.d.ts +63 -0
  200. package/src/esm/utils/io/DndFileHandler.js +106 -0
  201. package/src/esm/utils/io/DndFileHandler.js.map +1 -0
  202. package/src/esm/utils/io/FileDrop.d.ts +98 -0
  203. package/src/esm/utils/io/FileDrop.js +136 -0
  204. package/src/esm/utils/io/FileDrop.js.map +1 -0
  205. package/src/ts/BezierPath.ts +78 -22
  206. package/src/ts/Bounds.ts +40 -1
  207. package/src/ts/Circle.ts +187 -200
  208. package/src/ts/CircleSector.ts +141 -141
  209. package/src/ts/CubicBezierCurve.ts +738 -810
  210. package/src/ts/KeyHandler.ts +221 -212
  211. package/src/ts/Line.ts +48 -80
  212. package/src/ts/MouseHandler.ts +356 -368
  213. package/src/ts/PBImage.ts +67 -69
  214. package/src/ts/PBText.ts +16 -14
  215. package/src/ts/PlotBoilerplate.ts +9 -2
  216. package/src/ts/Polygon.ts +34 -34
  217. package/src/ts/Triangle.ts +444 -489
  218. package/src/ts/VEllipse.ts +18 -17
  219. package/src/ts/VEllipseSector.ts +20 -1
  220. package/src/ts/Vector.ts +124 -160
  221. package/src/ts/VertTuple.ts +333 -338
  222. package/src/ts/Vertex.ts +35 -21
  223. package/src/ts/VertexListeners.ts +248 -266
  224. package/src/ts/draw.ts +201 -6
  225. package/src/ts/drawgl.ts +47 -3
  226. package/src/ts/drawutilssvg.ts +187 -16
  227. package/src/ts/index.ts +0 -1
  228. package/src/ts/interfaces/DrawLib.ts +72 -27
  229. package/src/ts/interfaces/core.ts +3 -13
  230. package/src/ts/module.ts +2 -4
  231. package/src/ts/utils/datastructures/Color.ts +17 -6
  232. package/src/ts/utils/datastructures/Girih.ts +204 -209
  233. package/src/ts/utils/datastructures/GirihPenroseRhombus.ts +170 -152
  234. package/src/ts/utils/datastructures/GirihTile.ts +394 -419
  235. package/src/ts/utils/helpers/BezierPathInteractionHelper.ts +56 -34
  236. package/src/ts/utils/io/FileDrop.ts +178 -0
  237. package/src/ts/SVGBuilder.ts +0 -109
@@ -12,7 +12,7 @@
12
12
  * @modified 2020-03-25 Ported this class from vanilla-JS to Typescript.
13
13
  * @modified 2020-04-08 Fixed the click event (internally fired a 'mouseup' event) (1.0.10)
14
14
  * @modified 2020-04-08 Added the optional 'name' property. (1.0.11)
15
- * @modified 2020-04-08 The new version always installs internal listenrs to track drag events even
15
+ * @modified 2020-04-08 The new version always installs internal listenrs to track drag events even
16
16
  * if there is no external drag listener installed (1.1.0).
17
17
  * @modified 2020-10-04 Added extended JSDoc comments.
18
18
  * @modified 2020-11-25 Added the `isTouchEvent` param.
@@ -23,406 +23,394 @@
23
23
  * @public
24
24
  **/
25
25
 
26
-
27
26
  import { XYCoords } from "./interfaces";
28
27
 
29
28
  export interface XMouseParams {
30
- button : number;
31
- element : HTMLElement | SVGElement;
32
- isTouchEvent : boolean;
33
- name : string;
34
- pos : {x:number,y:number};
35
- leftButton : boolean;
36
- middleButton : boolean;
37
- rightButton : boolean;
38
- mouseDownPos : {x:number,y:number};
39
- draggedFrom : {x:number,y:number};
40
- wasDragged : boolean;
41
- dragAmount : {x:number,y:number};
29
+ button: number;
30
+ element: HTMLElement | SVGElement;
31
+ isTouchEvent: boolean;
32
+ name: string;
33
+ pos: { x: number; y: number };
34
+ leftButton: boolean;
35
+ middleButton: boolean;
36
+ rightButton: boolean;
37
+ mouseDownPos: { x: number; y: number };
38
+ draggedFrom: { x: number; y: number };
39
+ wasDragged: boolean;
40
+ dragAmount: { x: number; y: number };
42
41
  }
43
42
 
44
43
  export class XMouseEvent extends MouseEvent {
45
- params: XMouseParams;
44
+ params: XMouseParams;
46
45
  }
47
46
  export class XWheelEvent extends WheelEvent {
48
- params: XMouseParams;
47
+ params: XMouseParams;
49
48
  }
50
49
 
51
- export type XMouseCallback = (e:XMouseEvent)=>void;
52
-
53
- export type XWheelCallback = (e:XWheelEvent)=>void;
54
-
50
+ export type XMouseCallback = (e: XMouseEvent) => void;
55
51
 
52
+ export type XWheelCallback = (e: XWheelEvent) => void;
56
53
 
57
54
  /**
58
- * @classdesc A simple mouse handler for demos.
55
+ * @classdesc A simple mouse handler for demos.
59
56
  * Use to avoid load massive libraries like jQuery.
60
57
  *
61
58
  * @requires XYCoords
62
59
  */
63
60
  export class MouseHandler {
61
+ private name: string;
62
+ private element: HTMLElement | SVGElement;
63
+ private mouseDownPos: { x: number; y: number } | undefined = undefined;
64
+ private mouseDragPos: { x: number; y: number } | undefined = undefined;
65
+ // TODO: cc
66
+ // private mousePos : { x:number, y:number }|undefined = undefined;
67
+ private mouseButton: number = -1;
68
+ private listeners: Record<string, XMouseCallback> = {};
69
+ private installed: Record<string, boolean> = {};
70
+ private handlers: Record<string, XMouseCallback> = {};
64
71
 
65
- private name : string;
66
- private element : HTMLElement | SVGElement;
67
- private mouseDownPos : { x:number, y:number }|undefined = undefined;
68
- private mouseDragPos : { x:number, y:number }|undefined = undefined;
69
- // TODO: cc
70
- // private mousePos : { x:number, y:number }|undefined = undefined;
71
- private mouseButton : number = -1;
72
- private listeners : Record<string,XMouseCallback> = {};
73
- private installed : Record<string,boolean> = {};
74
- private handlers : Record<string,XMouseCallback> = {};
75
-
76
- /**
77
- * The constructor.
78
- *
79
- * Pass the DOM element you want to receive mouse events from.
80
- *
81
- * Usage
82
- * =====
83
- * @example
84
- * // Javascript
85
- * new MouseHandler( document.getElementById('mycanvas') )
86
- * .drag( function(e) {
87
- * console.log( 'Mouse dragged: ' + JSON.stringify(e) );
88
- * if( e.params.leftMouse ) ;
89
- * else if( e.params.rightMouse ) ;
90
- * } )
91
- * .move( function(e) {
92
- * console.log( 'Mouse moved: ' + JSON.stringify(e.params) );
93
- * } )
94
- * .up( function(e) {
95
- * console.log( 'Mouse up. Was dragged?', e.params.wasDragged );
96
- * } )
97
- * .down( function(e) {
98
- * console.log( 'Mouse down.' );
99
- * } )
100
- * .click( function(e) {
101
- * console.log( 'Click.' );
102
- * } )
103
- * .wheel( function(e) {
104
- * console.log( 'Wheel. delta='+e.deltaY );
105
- * } )
106
- *
107
- * @example
108
- * // Typescript
109
- * new MouseHandler( document.getElementById('mycanvas') )
110
- * .drag( (e:XMouseEvent) => {
111
- * console.log( 'Mouse dragged: ' + JSON.stringify(e) );
112
- * if( e.params.leftMouse ) ;
113
- * else if( e.params.rightMouse ) ;
114
- * } )
115
- * .move( (e:XMouseEvent) => {
116
- * console.log( 'Mouse moved: ' + JSON.stringify(e.params) );
117
- * } )
118
- * .up( (e:XMouseEvent) => {
119
- * console.log( 'Mouse up. Was dragged?', e.params.wasDragged );
120
- * } )
121
- * .down( (e:XMouseEvent) => {
122
- * console.log( 'Mouse down.' );
123
- * } )
124
- * .click( (e:XMouseEvent) => {
125
- * console.log( 'Click.' );
126
- * } )
127
- * .wheel( (e:XWheelEvent) => {
128
- * console.log( 'Wheel. delta='+e.deltaY );
129
- * } )
130
- *
131
- * @constructor
132
- * @instance
133
- * @memberof MouseHandler
134
- * @param {HTMLElement} element
135
- **/
136
- constructor( element:HTMLElement | SVGElement, name?:string ) {
137
- // +----------------------------------------------------------------------
138
- // | Some private vars to store the current mouse/position/button state.
139
- // +-------------------------------------------------
140
- this.name = name;
141
- this.element = element;
142
- this.mouseDownPos = null;
143
- this.mouseDragPos = null;
144
- // this.mousePos = null;
145
- this.mouseButton = -1;
146
- this.listeners = {};
147
- this.installed = {};
148
- this.handlers = {};
72
+ /**
73
+ * The constructor.
74
+ *
75
+ * Pass the DOM element you want to receive mouse events from.
76
+ *
77
+ * Usage
78
+ * =====
79
+ * @example
80
+ * // Javascript
81
+ * new MouseHandler( document.getElementById('mycanvas') )
82
+ * .drag( function(e) {
83
+ * console.log( 'Mouse dragged: ' + JSON.stringify(e) );
84
+ * if( e.params.leftMouse ) ;
85
+ * else if( e.params.rightMouse ) ;
86
+ * } )
87
+ * .move( function(e) {
88
+ * console.log( 'Mouse moved: ' + JSON.stringify(e.params) );
89
+ * } )
90
+ * .up( function(e) {
91
+ * console.log( 'Mouse up. Was dragged?', e.params.wasDragged );
92
+ * } )
93
+ * .down( function(e) {
94
+ * console.log( 'Mouse down.' );
95
+ * } )
96
+ * .click( function(e) {
97
+ * console.log( 'Click.' );
98
+ * } )
99
+ * .wheel( function(e) {
100
+ * console.log( 'Wheel. delta='+e.deltaY );
101
+ * } )
102
+ *
103
+ * @example
104
+ * // Typescript
105
+ * new MouseHandler( document.getElementById('mycanvas') )
106
+ * .drag( (e:XMouseEvent) => {
107
+ * console.log( 'Mouse dragged: ' + JSON.stringify(e) );
108
+ * if( e.params.leftMouse ) ;
109
+ * else if( e.params.rightMouse ) ;
110
+ * } )
111
+ * .move( (e:XMouseEvent) => {
112
+ * console.log( 'Mouse moved: ' + JSON.stringify(e.params) );
113
+ * } )
114
+ * .up( (e:XMouseEvent) => {
115
+ * console.log( 'Mouse up. Was dragged?', e.params.wasDragged );
116
+ * } )
117
+ * .down( (e:XMouseEvent) => {
118
+ * console.log( 'Mouse down.' );
119
+ * } )
120
+ * .click( (e:XMouseEvent) => {
121
+ * console.log( 'Click.' );
122
+ * } )
123
+ * .wheel( (e:XWheelEvent) => {
124
+ * console.log( 'Wheel. delta='+e.deltaY );
125
+ * } )
126
+ *
127
+ * @constructor
128
+ * @instance
129
+ * @memberof MouseHandler
130
+ * @param {HTMLElement} element
131
+ **/
132
+ constructor(element: HTMLElement | SVGElement, name?: string) {
133
+ // +----------------------------------------------------------------------
134
+ // | Some private vars to store the current mouse/position/button state.
135
+ // +-------------------------------------------------
136
+ this.name = name;
137
+ this.element = element;
138
+ this.mouseDownPos = null;
139
+ this.mouseDragPos = null;
140
+ // this.mousePos = null;
141
+ this.mouseButton = -1;
142
+ this.listeners = {};
143
+ this.installed = {};
144
+ this.handlers = {};
149
145
 
150
- // +----------------------------------------------------------------------
151
- // | Define the internal event handlers.
152
- // |
153
- // | They will dispatch the modified event (relative mouse position,
154
- // | drag offset, ...) to the callbacks.
155
- // +-------------------------------------------------
156
- const _self : MouseHandler = this;
157
- this.handlers['mousemove'] = (e:MouseEvent) => {
158
- if( _self.listeners.mousemove ) _self.listeners.mousemove( _self.mkParams(e,'mousemove') );
159
- if( _self.mouseDragPos && _self.listeners.drag ) _self.listeners.drag( _self.mkParams(e,'drag') );
160
- if( _self.mouseDownPos ) _self.mouseDragPos = _self.relPos(e);
161
- }
162
- this.handlers['mouseup'] = (e:MouseEvent) => {
163
- if( _self.listeners.mouseup ) _self.listeners.mouseup( _self.mkParams(e,'mouseup') );
164
- _self.mouseDragPos = undefined;
165
- _self.mouseDownPos = undefined;
166
- _self.mouseButton = -1;
167
- }
168
- this.handlers['mousedown'] = (e:MouseEvent) => {
169
- _self.mouseDragPos = _self.relPos(e);
170
- _self.mouseDownPos = _self.relPos(e);
171
- _self.mouseButton = e.button;
172
- if( _self.listeners.mousedown ) _self.listeners.mousedown( _self.mkParams(e,'mousedown') );
173
- }
174
- this.handlers['click'] = (e:MouseEvent) => {
175
- if( _self.listeners.click ) _self.listeners.click( _self.mkParams(e,'click') );
176
- }
177
- this.handlers['wheel'] = (e:MouseEvent) => {
178
- if( _self.listeners.wheel ) _self.listeners.wheel( _self.mkParams(e,'wheel') );
179
- }
180
-
181
- this.element.addEventListener('mousemove',this.handlers['mousemove']);
182
- this.element.addEventListener('mouseup',this.handlers['mouseup']);
183
- this.element.addEventListener('mousedown',this.handlers['mousedown']);
184
- this.element.addEventListener('click',this.handlers['click']);
185
- this.element.addEventListener('wheel',this.handlers['wheel']);
186
- }
187
-
188
- /**
189
- * Get relative position from the given MouseEvent.
190
- *
191
- * @name relPos
192
- * @memberof MouseHandler
193
- * @instance
194
- * @private
195
- * @param {MouseEvent} e - The mouse event to get the relative position for.
196
- * @return {XYCoords} The relative mouse coordinates.
197
- */
198
- private relPos(e:MouseEvent) : XYCoords {
199
- return { x : e.offsetX,
200
- y : e.offsetY
201
- };
146
+ // +----------------------------------------------------------------------
147
+ // | Define the internal event handlers.
148
+ // |
149
+ // | They will dispatch the modified event (relative mouse position,
150
+ // | drag offset, ...) to the callbacks.
151
+ // +-------------------------------------------------
152
+ const _self: MouseHandler = this;
153
+ this.handlers["mousemove"] = (e: MouseEvent) => {
154
+ if (_self.listeners.mousemove) _self.listeners.mousemove(_self.mkParams(e, "mousemove"));
155
+ if (_self.mouseDragPos && _self.listeners.drag) _self.listeners.drag(_self.mkParams(e, "drag"));
156
+ if (_self.mouseDownPos) _self.mouseDragPos = _self.relPos(e);
157
+ };
158
+ this.handlers["mouseup"] = (e: MouseEvent) => {
159
+ if (_self.listeners.mouseup) _self.listeners.mouseup(_self.mkParams(e, "mouseup"));
160
+ _self.mouseDragPos = undefined;
161
+ _self.mouseDownPos = undefined;
162
+ _self.mouseButton = -1;
163
+ };
164
+ this.handlers["mousedown"] = (e: MouseEvent) => {
165
+ _self.mouseDragPos = _self.relPos(e);
166
+ _self.mouseDownPos = _self.relPos(e);
167
+ _self.mouseButton = e.button;
168
+ if (_self.listeners.mousedown) _self.listeners.mousedown(_self.mkParams(e, "mousedown"));
169
+ };
170
+ this.handlers["click"] = (e: MouseEvent) => {
171
+ if (_self.listeners.click) _self.listeners.click(_self.mkParams(e, "click"));
172
+ };
173
+ this.handlers["wheel"] = (e: MouseEvent) => {
174
+ if (_self.listeners.wheel) _self.listeners.wheel(_self.mkParams(e, "wheel"));
202
175
  };
203
176
 
177
+ this.element.addEventListener("mousemove", this.handlers["mousemove"] as EventListener);
178
+ this.element.addEventListener("mouseup", this.handlers["mouseup"] as EventListener);
179
+ this.element.addEventListener("mousedown", this.handlers["mousedown"] as EventListener);
180
+ this.element.addEventListener("click", this.handlers["click"] as EventListener);
181
+ this.element.addEventListener("wheel", this.handlers["wheel"] as EventListener);
182
+ }
204
183
 
205
- /**
206
- * Build the extended event params.
207
- *
208
- * @name mkParams
209
- * @memberof MouseHandler
210
- * @instance
211
- * @private
212
- * @param {MouseEvent} e - The mouse event to get the relative position for.
213
- * @param {string} eventName - The name of the firing event.
214
- * @return {XMouseEvent}
215
- */
216
- private mkParams( e:MouseEvent, eventName:string ) : XMouseEvent {
217
- const rel : {x:number,y:number} = this.relPos(e);
218
- const xEvent : XMouseEvent = ((e as unknown) as XMouseEvent);
219
- xEvent.params = {
220
- element : this.element,
221
- name : eventName,
222
- isTouchEvent : false,
223
- pos : rel,
224
- button : this.mouseButton,
225
- leftButton : this.mouseButton==0,
226
- middleButton : this.mouseButton==1,
227
- rightButton : this.mouseButton==2,
228
- mouseDownPos : this.mouseDownPos,
229
- draggedFrom : this.mouseDragPos,
230
- wasDragged : (this.mouseDownPos!=null&&(this.mouseDownPos.x!=rel.x||this.mouseDownPos.y!=rel.y)),
231
- dragAmount : (this.mouseDownPos!=null?{x:rel.x-this.mouseDragPos.x,y:rel.y-this.mouseDragPos.y}:{x:0,y:0})
232
- };
233
- return xEvent;
234
- }
235
-
236
-
237
- /**
238
- * Install a new listener.
239
- * Please note that this mouse handler can only handle one listener per event type.
240
- *
241
- * @name listenFor
242
- * @memberof MouseHandler
243
- * @instance
244
- * @private
245
- * @param {string} eventName - The name of the firing event to listen for.
246
- * @return {void}
247
- */
248
- private listenFor( eventName:string ) {
249
- if( this.installed[eventName] ) return;
250
- // In the new version 1.1.0 has all internal listeners installed by default.
251
- this.installed[eventName] = true;
252
- }
253
-
254
-
255
- /**
256
- * Un-install a new listener.
257
- *
258
- * @name listenFor
259
- * @memberof MouseHandler
260
- * @instance
261
- * @private
262
- * @param {string} eventName - The name of the firing event to unlisten for.
263
- * @return {void}
264
- */
265
- private unlistenFor( eventName:string ) {
266
- if( !this.installed[eventName] ) return;
267
- // In the new version 1.1.0 has all internal listeners installed by default.
268
- delete this.installed[eventName];
269
- }
270
-
184
+ /**
185
+ * Get relative position from the given MouseEvent.
186
+ *
187
+ * @name relPos
188
+ * @memberof MouseHandler
189
+ * @instance
190
+ * @private
191
+ * @param {MouseEvent} e - The mouse event to get the relative position for.
192
+ * @return {XYCoords} The relative mouse coordinates.
193
+ */
194
+ private relPos(e: MouseEvent): XYCoords {
195
+ return { x: e.offsetX, y: e.offsetY };
196
+ }
271
197
 
272
- /**
273
- * Installer function to listen for a specific event: mouse-drag.
274
- * Pass your callbacks here.
275
- *
276
- * Note: this support chaining.
277
- *
278
- * @name drag
279
- * @memberof MouseHandler
280
- * @instance
281
- * @param {XMouseCallback} callback - The drag-callback to listen for.
282
- * @return {MouseHandler} this
283
- */
284
- drag( callback:XMouseCallback ) : MouseHandler {
285
- if( this.listeners.drag ) this.throwAlreadyInstalled('drag');
286
- this.listeners.drag = callback;
287
- this.listenFor('mousedown');
288
- this.listenFor('mousemove');
289
- this.listenFor('mouseup');
290
- return this;
198
+ /**
199
+ * Build the extended event params.
200
+ *
201
+ * @name mkParams
202
+ * @memberof MouseHandler
203
+ * @instance
204
+ * @private
205
+ * @param {MouseEvent} e - The mouse event to get the relative position for.
206
+ * @param {string} eventName - The name of the firing event.
207
+ * @return {XMouseEvent}
208
+ */
209
+ private mkParams(e: MouseEvent, eventName: string): XMouseEvent {
210
+ const rel: { x: number; y: number } = this.relPos(e);
211
+ const xEvent: XMouseEvent = e as unknown as XMouseEvent;
212
+ xEvent.params = {
213
+ element: this.element,
214
+ name: eventName,
215
+ isTouchEvent: false,
216
+ pos: rel,
217
+ button: this.mouseButton,
218
+ leftButton: this.mouseButton == 0,
219
+ middleButton: this.mouseButton == 1,
220
+ rightButton: this.mouseButton == 2,
221
+ mouseDownPos: this.mouseDownPos,
222
+ draggedFrom: this.mouseDragPos,
223
+ wasDragged: this.mouseDownPos != null && (this.mouseDownPos.x != rel.x || this.mouseDownPos.y != rel.y),
224
+ dragAmount: this.mouseDownPos != null ? { x: rel.x - this.mouseDragPos.x, y: rel.y - this.mouseDragPos.y } : { x: 0, y: 0 }
291
225
  };
226
+ return xEvent;
227
+ }
292
228
 
293
- /**
294
- * Installer function to listen for a specific event: mouse-move.
295
- * Pass your callbacks here.
296
- *
297
- * Note: this support chaining.
298
- *
299
- * @name move
300
- * @memberof MouseHandler
301
- * @instance
302
- * @param {XMouseCallback} callback - The move-callback to listen for.
303
- * @return {MouseHandler} this
304
- */
305
- move( callback:(e:XMouseEvent)=>void ) : MouseHandler {
306
- if( this.listeners.mousemove ) this.throwAlreadyInstalled('mousemove');
307
- this.listenFor('mousemove');
308
- this.listeners.mousemove = callback;
309
- return this;
310
- };
229
+ /**
230
+ * Install a new listener.
231
+ * Please note that this mouse handler can only handle one listener per event type.
232
+ *
233
+ * @name listenFor
234
+ * @memberof MouseHandler
235
+ * @instance
236
+ * @private
237
+ * @param {string} eventName - The name of the firing event to listen for.
238
+ * @return {void}
239
+ */
240
+ private listenFor(eventName: string) {
241
+ if (this.installed[eventName]) return;
242
+ // In the new version 1.1.0 has all internal listeners installed by default.
243
+ this.installed[eventName] = true;
244
+ }
311
245
 
312
- /**
313
- * Installer function to listen for a specific event: mouse-up.
314
- * Pass your callbacks here.
315
- *
316
- * Note: this support chaining.
317
- *
318
- * @name up
319
- * @memberof MouseHandler
320
- * @instance
321
- * @param {XMouseCallback} callback - The up-callback to listen for.
322
- * @return {MouseHandler} this
323
- */
324
- up( callback:(e:XMouseEvent)=>void ) : MouseHandler {
325
- if( this.listeners.mouseup ) this.throwAlreadyInstalled('mouseup');
326
- this.listenFor('mouseup');
327
- this.listeners.mouseup = callback;
328
- return this;
329
- };
246
+ /**
247
+ * Un-install a new listener.
248
+ *
249
+ * @name listenFor
250
+ * @memberof MouseHandler
251
+ * @instance
252
+ * @private
253
+ * @param {string} eventName - The name of the firing event to unlisten for.
254
+ * @return {void}
255
+ */
256
+ private unlistenFor(eventName: string) {
257
+ if (!this.installed[eventName]) return;
258
+ // In the new version 1.1.0 has all internal listeners installed by default.
259
+ delete this.installed[eventName];
260
+ }
330
261
 
331
- /**
332
- * Installer function to listen for a specific event: mouse-down.
333
- * Pass your callbacks here.
334
- *
335
- * Note: this support chaining.
336
- *
337
- * @name down
338
- * @memberof MouseHandler
339
- * @instance
340
- * @param {XMouseCallback} callback - The down-callback to listen for.
341
- * @return {MouseHandler} this
342
- */
343
- down( callback:(e:XMouseEvent)=>void ) : MouseHandler {
344
- if( this.listeners.mousedown ) this.throwAlreadyInstalled('mousedown');
345
- this.listenFor('mousedown');
346
- this.listeners.mousedown = callback;
347
- return this;
348
- };
262
+ /**
263
+ * Installer function to listen for a specific event: mouse-drag.
264
+ * Pass your callbacks here.
265
+ *
266
+ * Note: this support chaining.
267
+ *
268
+ * @name drag
269
+ * @memberof MouseHandler
270
+ * @instance
271
+ * @param {XMouseCallback} callback - The drag-callback to listen for.
272
+ * @return {MouseHandler} this
273
+ */
274
+ drag(callback: XMouseCallback): MouseHandler {
275
+ if (this.listeners.drag) this.throwAlreadyInstalled("drag");
276
+ this.listeners.drag = callback;
277
+ this.listenFor("mousedown");
278
+ this.listenFor("mousemove");
279
+ this.listenFor("mouseup");
280
+ return this;
281
+ }
349
282
 
350
- /**
351
- * Installer function to listen for a specific event: mouse-click.
352
- * Pass your callbacks here.
353
- *
354
- * Note: this support chaining.
355
- *
356
- * @name click
357
- * @memberof MouseHandler
358
- * @instance
359
- * @param {XMouseCallback} callback - The click-callback to listen for.
360
- * @return {MouseHandler} this
361
- */
362
- click( callback:(e:XMouseEvent)=>void ) : MouseHandler {
363
- if( this.listeners.click ) this.throwAlreadyInstalled('click');
364
- this.listenFor('click');
365
- this.listeners.click = callback;
366
- return this;
367
- };
283
+ /**
284
+ * Installer function to listen for a specific event: mouse-move.
285
+ * Pass your callbacks here.
286
+ *
287
+ * Note: this support chaining.
288
+ *
289
+ * @name move
290
+ * @memberof MouseHandler
291
+ * @instance
292
+ * @param {XMouseCallback} callback - The move-callback to listen for.
293
+ * @return {MouseHandler} this
294
+ */
295
+ move(callback: (e: XMouseEvent) => void): MouseHandler {
296
+ if (this.listeners.mousemove) this.throwAlreadyInstalled("mousemove");
297
+ this.listenFor("mousemove");
298
+ this.listeners.mousemove = callback;
299
+ return this;
300
+ }
368
301
 
369
- /**
370
- * Installer function to listen for a specific event: mouse-wheel.
371
- * Pass your callbacks here.
372
- *
373
- * Note: this support chaining.
374
- *
375
- * @name wheel
376
- * @memberof MouseHandler
377
- * @instance
378
- * @param {XWheelCallback} callback - The wheel-callback to listen for.
379
- * @return {MouseHandler} this
380
- */
381
- wheel( callback:(e:XWheelEvent)=>void ) : MouseHandler {
382
- if( this.listeners.wheel ) this.throwAlreadyInstalled('wheel');
383
- this.listenFor('wheel');
384
- this.listeners.wheel = callback;
385
- return this;
386
- };
302
+ /**
303
+ * Installer function to listen for a specific event: mouse-up.
304
+ * Pass your callbacks here.
305
+ *
306
+ * Note: this support chaining.
307
+ *
308
+ * @name up
309
+ * @memberof MouseHandler
310
+ * @instance
311
+ * @param {XMouseCallback} callback - The up-callback to listen for.
312
+ * @return {MouseHandler} this
313
+ */
314
+ up(callback: (e: XMouseEvent) => void): MouseHandler {
315
+ if (this.listeners.mouseup) this.throwAlreadyInstalled("mouseup");
316
+ this.listenFor("mouseup");
317
+ this.listeners.mouseup = callback;
318
+ return this;
319
+ }
387
320
 
321
+ /**
322
+ * Installer function to listen for a specific event: mouse-down.
323
+ * Pass your callbacks here.
324
+ *
325
+ * Note: this support chaining.
326
+ *
327
+ * @name down
328
+ * @memberof MouseHandler
329
+ * @instance
330
+ * @param {XMouseCallback} callback - The down-callback to listen for.
331
+ * @return {MouseHandler} this
332
+ */
333
+ down(callback: (e: XMouseEvent) => void): MouseHandler {
334
+ if (this.listeners.mousedown) this.throwAlreadyInstalled("mousedown");
335
+ this.listenFor("mousedown");
336
+ this.listeners.mousedown = callback;
337
+ return this;
338
+ }
388
339
 
389
- /**
390
- * An internal function to throw events.
391
- *
392
- * @name throwAlreadyInstalled
393
- * @memberof MouseHandler
394
- * @instance
395
- * @private
396
- * @param {string} name - The name of the event.
397
- * @return {void}
398
- */
399
- private throwAlreadyInstalled( name:string ) {
400
- throw `This MouseHandler already has a '${name}' callback. To keep the code simple there is only room for one.`;
401
- };
340
+ /**
341
+ * Installer function to listen for a specific event: mouse-click.
342
+ * Pass your callbacks here.
343
+ *
344
+ * Note: this support chaining.
345
+ *
346
+ * @name click
347
+ * @memberof MouseHandler
348
+ * @instance
349
+ * @param {XMouseCallback} callback - The click-callback to listen for.
350
+ * @return {MouseHandler} this
351
+ */
352
+ click(callback: (e: XMouseEvent) => void): MouseHandler {
353
+ if (this.listeners.click) this.throwAlreadyInstalled("click");
354
+ this.listenFor("click");
355
+ this.listeners.click = callback;
356
+ return this;
357
+ }
358
+
359
+ /**
360
+ * Installer function to listen for a specific event: mouse-wheel.
361
+ * Pass your callbacks here.
362
+ *
363
+ * Note: this support chaining.
364
+ *
365
+ * @name wheel
366
+ * @memberof MouseHandler
367
+ * @instance
368
+ * @param {XWheelCallback} callback - The wheel-callback to listen for.
369
+ * @return {MouseHandler} this
370
+ */
371
+ wheel(callback: (e: XWheelEvent) => void): MouseHandler {
372
+ if (this.listeners.wheel) this.throwAlreadyInstalled("wheel");
373
+ this.listenFor("wheel");
374
+ this.listeners.wheel = callback as XMouseCallback;
375
+ return this;
376
+ }
402
377
 
378
+ /**
379
+ * An internal function to throw events.
380
+ *
381
+ * @name throwAlreadyInstalled
382
+ * @memberof MouseHandler
383
+ * @instance
384
+ * @private
385
+ * @param {string} name - The name of the event.
386
+ * @return {void}
387
+ */
388
+ private throwAlreadyInstalled(name: string) {
389
+ throw `This MouseHandler already has a '${name}' callback. To keep the code simple there is only room for one.`;
390
+ }
403
391
 
404
- /**
405
- * Call this when your work is done.
406
- *
407
- * The function will un-install all event listeners.
408
- *
409
- * @name destroy
410
- * @memberof MouseHandler
411
- * @instance
412
- * @private
413
- * @return {void}
414
- */
415
- destroy() {
416
- this.unlistenFor('mousedown');
417
- this.unlistenFor('mousemove');
418
- this.unlistenFor('moseup');
419
- this.unlistenFor('click');
420
- this.unlistenFor('wheel');
392
+ /**
393
+ * Call this when your work is done.
394
+ *
395
+ * The function will un-install all event listeners.
396
+ *
397
+ * @name destroy
398
+ * @memberof MouseHandler
399
+ * @instance
400
+ * @private
401
+ * @return {void}
402
+ */
403
+ destroy() {
404
+ this.unlistenFor("mousedown");
405
+ this.unlistenFor("mousemove");
406
+ this.unlistenFor("moseup");
407
+ this.unlistenFor("click");
408
+ this.unlistenFor("wheel");
421
409
 
422
- this.element.removeEventListener('mousemove',this.handlers['mousemove']);
423
- this.element.removeEventListener('mouseup',this.handlers['mousedown']);
424
- this.element.removeEventListener('mousedown',this.handlers['mousedown']);
425
- this.element.removeEventListener('click',this.handlers['click']);
426
- this.element.removeEventListener('wheel',this.handlers['wheel']);
427
- }
410
+ this.element.removeEventListener("mousemove", this.handlers["mousemove"] as EventListener);
411
+ this.element.removeEventListener("mouseup", this.handlers["mousedown"] as EventListener);
412
+ this.element.removeEventListener("mousedown", this.handlers["mousedown"] as EventListener);
413
+ this.element.removeEventListener("click", this.handlers["click"] as EventListener);
414
+ this.element.removeEventListener("wheel", this.handlers["wheel"] as EventListener);
415
+ }
428
416
  }