plotboilerplate 1.12.10 → 1.16.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.
- package/README.md +5 -1
- package/changelog.md +50 -0
- package/dist/index.esm.js +999 -510
- package/dist/index.esm.js.map +1 -1
- package/dist/index.esm.min.js +1 -1
- package/dist/index.esm.min.js.map +1 -1
- package/dist/plotboilerplate.browser.min.js +1 -1
- package/dist/plotboilerplate.browser.min.js.map +1 -1
- package/dist/plotboilerplate.js +1013 -509
- package/dist/plotboilerplate.min.js +1 -1
- package/package.json +1 -1
- package/src/cjs/BezierPath.d.ts +45 -2
- package/src/cjs/BezierPath.js +114 -18
- package/src/cjs/BezierPath.js.map +1 -1
- package/src/cjs/Circle.d.ts +25 -10
- package/src/cjs/Circle.js +38 -33
- package/src/cjs/Circle.js.map +1 -1
- package/src/cjs/CircleSector.d.ts +27 -13
- package/src/cjs/CircleSector.js +38 -23
- package/src/cjs/CircleSector.js.map +1 -1
- package/src/cjs/CubicBezierCurve.d.ts +17 -1
- package/src/cjs/CubicBezierCurve.js +78 -79
- package/src/cjs/CubicBezierCurve.js.map +1 -1
- package/src/cjs/KeyHandler.d.ts +10 -3
- package/src/cjs/KeyHandler.js +28 -23
- package/src/cjs/KeyHandler.js.map +1 -1
- package/src/cjs/Line.d.ts +2 -1
- package/src/cjs/Line.js +19 -18
- package/src/cjs/Line.js.map +1 -1
- package/src/cjs/MouseHandler.js +43 -53
- package/src/cjs/MouseHandler.js.map +1 -1
- package/src/cjs/PBImage.d.ts +16 -1
- package/src/cjs/PBImage.js +13 -3
- package/src/cjs/PBImage.js.map +1 -1
- package/src/cjs/PBText.d.ts +130 -0
- package/src/cjs/PBText.js +76 -0
- package/src/cjs/PBText.js.map +1 -0
- package/src/cjs/PlotBoilerplate.d.ts +2 -1
- package/src/cjs/PlotBoilerplate.js +44 -16
- package/src/cjs/PlotBoilerplate.js.map +1 -1
- package/src/cjs/Polygon.d.ts +37 -1
- package/src/cjs/Polygon.js +131 -54
- package/src/cjs/Polygon.js.map +1 -1
- package/src/cjs/Triangle.d.ts +16 -1
- package/src/cjs/Triangle.js +50 -54
- package/src/cjs/Triangle.js.map +1 -1
- package/src/cjs/VEllipse.d.ts +16 -1
- package/src/cjs/VEllipse.js +25 -12
- package/src/cjs/VEllipse.js.map +1 -1
- package/src/cjs/VEllipseSector.d.ts +15 -1
- package/src/cjs/VEllipseSector.js +11 -1
- package/src/cjs/VEllipseSector.js.map +1 -1
- package/src/cjs/Vector.d.ts +3 -1
- package/src/cjs/Vector.js +32 -36
- package/src/cjs/Vector.js.map +1 -1
- package/src/cjs/VertTuple.d.ts +15 -1
- package/src/cjs/VertTuple.js +14 -19
- package/src/cjs/VertTuple.js.map +1 -1
- package/src/cjs/Vertex.d.ts +66 -4
- package/src/cjs/Vertex.js +99 -17
- package/src/cjs/Vertex.js.map +1 -1
- package/src/cjs/VertexListeners.d.ts +12 -8
- package/src/cjs/VertexListeners.js +18 -25
- package/src/cjs/VertexListeners.js.map +1 -1
- package/src/cjs/draw.d.ts +30 -2
- package/src/cjs/draw.js +51 -6
- package/src/cjs/draw.js.map +1 -1
- package/src/cjs/drawgl.d.ts +29 -2
- package/src/cjs/drawgl.js +21 -4
- package/src/cjs/drawgl.js.map +1 -1
- package/src/cjs/drawutilssvg.d.ts +25 -7
- package/src/cjs/drawutilssvg.js +62 -14
- package/src/cjs/drawutilssvg.js.map +1 -1
- package/src/cjs/entry.js +1 -0
- package/src/cjs/index.d.ts +1 -0
- package/src/cjs/index.js +1 -0
- package/src/cjs/index.js.map +1 -1
- package/src/cjs/interfaces/DrawLib.d.ts +27 -6
- package/src/cjs/interfaces/DrawLib.js +3 -0
- package/src/cjs/interfaces/DrawLib.js.map +1 -1
- package/src/cjs/interfaces/core.d.ts +9 -1
- package/src/cjs/interfaces/core.js +1 -0
- package/src/cjs/interfaces/core.js.map +1 -1
- package/src/cjs/utils/creategui.js +1 -1
- package/src/cjs/utils/findInVertexArray.d.ts +19 -0
- package/src/cjs/utils/findInVertexArray.js +29 -0
- package/src/cjs/utils/findInVertexArray.js.map +1 -0
- package/src/cjs/utils/helpers/BezierPathInteractionHelper.d.ts +15 -0
- package/src/cjs/utils/helpers/BezierPathInteractionHelper.js +55 -28
- package/src/cjs/utils/helpers/BezierPathInteractionHelper.js.map +1 -1
- package/src/cjs/utils/io/DndFileHandler.d.ts +63 -0
- package/src/cjs/utils/io/DndFileHandler.js +112 -0
- package/src/cjs/utils/io/DndFileHandler.js.map +1 -0
- package/src/cjs/utils/io/FileDrop.d.ts +98 -0
- package/src/cjs/utils/io/FileDrop.js +142 -0
- package/src/cjs/utils/io/FileDrop.js.map +1 -0
- package/src/esm/BezierPath.d.ts +45 -2
- package/src/esm/BezierPath.js +114 -18
- package/src/esm/BezierPath.js.map +1 -1
- package/src/esm/Circle.d.ts +25 -10
- package/src/esm/Circle.js +38 -33
- package/src/esm/Circle.js.map +1 -1
- package/src/esm/CircleSector.d.ts +27 -13
- package/src/esm/CircleSector.js +38 -23
- package/src/esm/CircleSector.js.map +1 -1
- package/src/esm/CubicBezierCurve.d.ts +17 -1
- package/src/esm/CubicBezierCurve.js +78 -79
- package/src/esm/CubicBezierCurve.js.map +1 -1
- package/src/esm/KeyHandler.d.ts +10 -3
- package/src/esm/KeyHandler.js +28 -23
- package/src/esm/KeyHandler.js.map +1 -1
- package/src/esm/Line.d.ts +2 -1
- package/src/esm/Line.js +19 -18
- package/src/esm/Line.js.map +1 -1
- package/src/esm/MouseHandler.js +43 -53
- package/src/esm/MouseHandler.js.map +1 -1
- package/src/esm/PBImage.d.ts +16 -1
- package/src/esm/PBImage.js +13 -3
- package/src/esm/PBImage.js.map +1 -1
- package/src/esm/PBText.d.ts +130 -0
- package/src/esm/PBText.js +71 -0
- package/src/esm/PBText.js.map +1 -0
- package/src/esm/PlotBoilerplate.d.ts +2 -1
- package/src/esm/PlotBoilerplate.js +44 -16
- package/src/esm/PlotBoilerplate.js.map +1 -1
- package/src/esm/Polygon.d.ts +37 -1
- package/src/esm/Polygon.js +131 -54
- package/src/esm/Polygon.js.map +1 -1
- package/src/esm/Triangle.d.ts +16 -1
- package/src/esm/Triangle.js +50 -54
- package/src/esm/Triangle.js.map +1 -1
- package/src/esm/VEllipse.d.ts +16 -1
- package/src/esm/VEllipse.js +25 -12
- package/src/esm/VEllipse.js.map +1 -1
- package/src/esm/VEllipseSector.d.ts +15 -1
- package/src/esm/VEllipseSector.js +11 -1
- package/src/esm/VEllipseSector.js.map +1 -1
- package/src/esm/Vector.d.ts +3 -1
- package/src/esm/Vector.js +32 -36
- package/src/esm/Vector.js.map +1 -1
- package/src/esm/VertTuple.d.ts +15 -1
- package/src/esm/VertTuple.js +14 -19
- package/src/esm/VertTuple.js.map +1 -1
- package/src/esm/Vertex.d.ts +66 -4
- package/src/esm/Vertex.js +99 -17
- package/src/esm/Vertex.js.map +1 -1
- package/src/esm/VertexListeners.d.ts +12 -8
- package/src/esm/VertexListeners.js +18 -25
- package/src/esm/VertexListeners.js.map +1 -1
- package/src/esm/draw.d.ts +30 -2
- package/src/esm/draw.js +51 -6
- package/src/esm/draw.js.map +1 -1
- package/src/esm/drawgl.d.ts +29 -2
- package/src/esm/drawgl.js +21 -4
- package/src/esm/drawgl.js.map +1 -1
- package/src/esm/drawutilssvg.d.ts +25 -7
- package/src/esm/drawutilssvg.js +62 -14
- package/src/esm/drawutilssvg.js.map +1 -1
- package/src/esm/entry.js +1 -0
- package/src/esm/index.d.ts +1 -0
- package/src/esm/index.js +1 -0
- package/src/esm/index.js.map +1 -1
- package/src/esm/interfaces/DrawLib.d.ts +27 -6
- package/src/esm/interfaces/DrawLib.js +3 -0
- package/src/esm/interfaces/DrawLib.js.map +1 -1
- package/src/esm/interfaces/core.d.ts +9 -1
- package/src/esm/interfaces/core.js +1 -0
- package/src/esm/interfaces/core.js.map +1 -1
- package/src/esm/utils/findInVertexArray.d.ts +19 -0
- package/src/esm/utils/findInVertexArray.js +25 -0
- package/src/esm/utils/findInVertexArray.js.map +1 -0
- package/src/esm/utils/helpers/BezierPathInteractionHelper.d.ts +15 -0
- package/src/esm/utils/helpers/BezierPathInteractionHelper.js +54 -28
- package/src/esm/utils/helpers/BezierPathInteractionHelper.js.map +1 -1
- package/src/esm/utils/io/DndFileHandler.d.ts +63 -0
- package/src/esm/utils/io/DndFileHandler.js +106 -0
- package/src/esm/utils/io/DndFileHandler.js.map +1 -0
- package/src/esm/utils/io/FileDrop.d.ts +98 -0
- package/src/esm/utils/io/FileDrop.js +136 -0
- package/src/esm/utils/io/FileDrop.js.map +1 -0
- package/src/ts/BezierPath.ts +133 -16
- package/src/ts/Circle.ts +213 -200
- package/src/ts/CircleSector.ts +171 -141
- package/src/ts/CubicBezierCurve.ts +777 -810
- package/src/ts/KeyHandler.ts +221 -212
- package/src/ts/Line.ts +77 -80
- package/src/ts/MouseHandler.ts +356 -368
- package/src/ts/PBImage.ts +81 -68
- package/src/ts/PBText.ts +166 -0
- package/src/ts/PlotBoilerplate.ts +48 -20
- package/src/ts/Polygon.ts +519 -451
- package/src/ts/Triangle.ts +484 -489
- package/src/ts/VEllipse.ts +36 -11
- package/src/ts/VEllipseSector.ts +20 -1
- package/src/ts/Vector.ts +164 -160
- package/src/ts/VertTuple.ts +333 -338
- package/src/ts/Vertex.ts +117 -16
- package/src/ts/VertexListeners.ts +248 -266
- package/src/ts/draw.ts +71 -8
- package/src/ts/drawgl.ts +48 -8
- package/src/ts/drawutilssvg.ts +94 -17
- package/src/ts/index.ts +1 -0
- package/src/ts/interfaces/DrawLib.ts +30 -4
- package/src/ts/interfaces/core.ts +9 -0
- package/src/ts/utils/findInVertexArray.ts +28 -0
- package/src/ts/utils/helpers/BezierPathInteractionHelper.ts +61 -30
- package/src/ts/utils/io/FileDrop.ts +178 -0
- package/dist/plotboilerplate.browser.min.js.LICENSE.txt +0 -8
- package/src/ts/utils/algorithms/clearPolygonDuplicateVertices.ts~ +0 -5
- package/src/ts/utils/algorithms/findPolygonSelfIntersections.ts~ +0 -45
- package/src/ts/utils/algorithms/sh-tmp.ts~ +0 -59
- package/src/ts/utils/algorithms/splitPolygonToNonIntersecting.ts~ +0 -113
- package/src/ts/utils/algorithms/sutherlandHodgman.ts~ +0 -88
package/src/ts/MouseHandler.ts
CHANGED
|
@@ -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
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
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
|
-
|
|
44
|
+
params: XMouseParams;
|
|
46
45
|
}
|
|
47
46
|
export class XWheelEvent extends WheelEvent {
|
|
48
|
-
|
|
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
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
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
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
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
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
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
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
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
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
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
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
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
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
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
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
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
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
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
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
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
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
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
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
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
|
}
|