plotboilerplate 1.15.0 → 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/changelog.md +24 -0
- package/dist/index.esm.js +574 -428
- 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 +574 -428
- package/dist/plotboilerplate.min.js +1 -1
- package/package.json +1 -1
- package/src/cjs/BezierPath.d.ts +33 -1
- package/src/cjs/BezierPath.js +80 -13
- 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 +15 -1
- package/src/cjs/PBText.js +11 -1
- package/src/cjs/PBText.js.map +1 -1
- package/src/cjs/PlotBoilerplate.js +1 -1
- package/src/cjs/PlotBoilerplate.js.map +1 -1
- package/src/cjs/Polygon.d.ts +16 -1
- package/src/cjs/Polygon.js +37 -23
- 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 +25 -1
- package/src/cjs/Vertex.js +38 -11
- 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/utils/creategui.js +1 -1
- 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 +33 -1
- package/src/esm/BezierPath.js +80 -13
- 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 +15 -1
- package/src/esm/PBText.js +11 -1
- package/src/esm/PBText.js.map +1 -1
- package/src/esm/PlotBoilerplate.js +1 -1
- package/src/esm/PlotBoilerplate.js.map +1 -1
- package/src/esm/Polygon.d.ts +16 -1
- package/src/esm/Polygon.js +37 -23
- 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 +25 -1
- package/src/esm/Vertex.js +38 -11
- 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/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 +96 -11
- 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 +20 -1
- package/src/ts/PlotBoilerplate.ts +1 -1
- package/src/ts/Polygon.ts +48 -22
- 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 +52 -10
- package/src/ts/VertexListeners.ts +248 -266
- package/src/ts/utils/helpers/BezierPathInteractionHelper.ts +61 -30
- package/src/ts/utils/io/FileDrop.ts +178 -0
|
@@ -118,7 +118,11 @@ export class BezierPathInteractionHelper {
|
|
|
118
118
|
private currentA: Vertex; // Position on the curve
|
|
119
119
|
private currentB: Vertex; // mouse/touch position
|
|
120
120
|
|
|
121
|
+
private _mouseHandler: MouseHandler;
|
|
122
|
+
private _touchHandler: AlloyFinger;
|
|
121
123
|
private _keyHandler: KeyHandler;
|
|
124
|
+
private _mouseEnterListener: () => void;
|
|
125
|
+
private _mouseLeaveListener: () => void;
|
|
122
126
|
|
|
123
127
|
/**
|
|
124
128
|
* Pre: all paths must have been added to the PlotBoilerplate's drawable buffer (use the add(Drawable) function).
|
|
@@ -173,8 +177,16 @@ export class BezierPathInteractionHelper {
|
|
|
173
177
|
this.addPath(paths[i]);
|
|
174
178
|
}
|
|
175
179
|
|
|
176
|
-
this.
|
|
177
|
-
|
|
180
|
+
this._mouseEnterListener = () => {
|
|
181
|
+
this.mouseIsOver = true;
|
|
182
|
+
};
|
|
183
|
+
this._mouseLeaveListener = () => {
|
|
184
|
+
this.mouseIsOver = false;
|
|
185
|
+
this._clearMoveEvent();
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
this._mouseHandler = this._installMouseListener();
|
|
189
|
+
this._touchHandler = this._installTouchListener();
|
|
178
190
|
this._keyHandler = this._installKeyListener();
|
|
179
191
|
|
|
180
192
|
// Paths might have changed by auto-adjustment.
|
|
@@ -249,6 +261,28 @@ export class BezierPathInteractionHelper {
|
|
|
249
261
|
this._handleMoveEvent(this.currentB.x, this.currentB.y);
|
|
250
262
|
}
|
|
251
263
|
|
|
264
|
+
/**
|
|
265
|
+
* This function should invalidate any installed listeners and invalidate this object.
|
|
266
|
+
* After calling this function the object might not hold valid data any more and
|
|
267
|
+
* should not be used any more.
|
|
268
|
+
*
|
|
269
|
+
* @method destroy
|
|
270
|
+
* @instance
|
|
271
|
+
* @memberof BezierPathInteractionHelper
|
|
272
|
+
* @return {void}
|
|
273
|
+
**/
|
|
274
|
+
destroy(): void {
|
|
275
|
+
for (var i = 0; i < this.paths.length; i++) {
|
|
276
|
+
this._removeDefaultPathListeners(this.paths[i]);
|
|
277
|
+
// removePathVertexDragStartListeners(this.paths[i], listener);
|
|
278
|
+
}
|
|
279
|
+
this.paths = [];
|
|
280
|
+
this.pb.canvas.removeEventListener("mouseenter", this._mouseEnterListener);
|
|
281
|
+
this.pb.canvas.removeEventListener("mouseleave", this._mouseLeaveListener);
|
|
282
|
+
this._mouseHandler.destroy();
|
|
283
|
+
this._keyHandler.destroy();
|
|
284
|
+
}
|
|
285
|
+
|
|
252
286
|
// +---------------------------------------------------------------------------------
|
|
253
287
|
// | A helper function to locate a given path instance inside the array.
|
|
254
288
|
// |
|
|
@@ -335,6 +369,7 @@ export class BezierPathInteractionHelper {
|
|
|
335
369
|
curStartControl = path.bezierCurves[i + 1].startControlPoint;
|
|
336
370
|
}
|
|
337
371
|
} else {
|
|
372
|
+
// TODO: remove drag listener from removed vertex!
|
|
338
373
|
deletedVertIndices.push(i);
|
|
339
374
|
}
|
|
340
375
|
}
|
|
@@ -361,6 +396,7 @@ export class BezierPathInteractionHelper {
|
|
|
361
396
|
private _replacePathAt(pathIndex: number, newPath: BezierPath): void {
|
|
362
397
|
const oldPath: BezierPath = this.paths[pathIndex];
|
|
363
398
|
this.pb.remove(oldPath, false, true); // Remove with vertices
|
|
399
|
+
oldPath.destroy();
|
|
364
400
|
this._removeDefaultPathListeners(oldPath);
|
|
365
401
|
BezierPathInteractionHelper.setPathAutoAdjust(newPath);
|
|
366
402
|
this.paths[pathIndex] = newPath;
|
|
@@ -396,36 +432,38 @@ export class BezierPathInteractionHelper {
|
|
|
396
432
|
// +---------------------------------------------------------------------------------
|
|
397
433
|
// | Called once upon initialization.
|
|
398
434
|
// +-------------------------------
|
|
399
|
-
private _installTouchListener():
|
|
435
|
+
private _installTouchListener(): AlloyFinger {
|
|
400
436
|
var _self: BezierPathInteractionHelper = this;
|
|
401
437
|
const afProps = {
|
|
402
438
|
// Todo: which event types does AlloyFinger use?
|
|
403
|
-
touchStart: function (
|
|
439
|
+
touchStart: function (_event: TouchEvent) {
|
|
404
440
|
_self.mouseIsOver = true;
|
|
405
441
|
},
|
|
406
|
-
touchMove: function (
|
|
407
|
-
if (_self.pb.getDraggedElementCount() == 0 &&
|
|
442
|
+
touchMove: function (event: TouchEvent) {
|
|
443
|
+
if (_self.pb.getDraggedElementCount() == 0 && event.touches.length > 0) {
|
|
408
444
|
// console.log('touchmove');
|
|
409
|
-
_self._handleMoveEvent(
|
|
445
|
+
_self._handleMoveEvent(event.touches[0].clientX, event.touches[0].clientY);
|
|
410
446
|
}
|
|
411
447
|
},
|
|
412
|
-
touchEnd: function (
|
|
448
|
+
touchEnd: function (_event: TouchEvent) {
|
|
413
449
|
_self.mouseIsOver = false;
|
|
414
450
|
_self._clearMoveEvent();
|
|
415
451
|
}
|
|
416
452
|
};
|
|
417
453
|
// new AlloyFinger(this.pb.canvas, afProps);
|
|
418
|
-
if (window["createAlloyFinger"])
|
|
419
|
-
window["createAlloyFinger"](this.pb.eventCatcher ? this.pb.eventCatcher : this.pb.canvas, afProps);
|
|
420
|
-
else
|
|
454
|
+
if (window["createAlloyFinger"]) {
|
|
455
|
+
return window["createAlloyFinger"](this.pb.eventCatcher ? this.pb.eventCatcher : this.pb.canvas, afProps);
|
|
456
|
+
} else {
|
|
457
|
+
return new AlloyFinger(this.pb.eventCatcher ? this.pb.eventCatcher : this.pb.canvas, afProps);
|
|
458
|
+
}
|
|
421
459
|
}
|
|
422
460
|
|
|
423
461
|
// +---------------------------------------------------------------------------------
|
|
424
462
|
// | Called once upon initialization.
|
|
425
463
|
// +-------------------------------
|
|
426
|
-
private _installMouseListener():
|
|
464
|
+
private _installMouseListener(): MouseHandler {
|
|
427
465
|
var _self: BezierPathInteractionHelper = this;
|
|
428
|
-
new MouseHandler(this.pb.canvas)
|
|
466
|
+
var mouseHandler = new MouseHandler(this.pb.canvas)
|
|
429
467
|
.up(function (e: XMouseEvent) {
|
|
430
468
|
if (e.params.wasDragged) return;
|
|
431
469
|
if (_self._keyHandler.isDown("shift")) return;
|
|
@@ -470,13 +508,16 @@ export class BezierPathInteractionHelper {
|
|
|
470
508
|
_self._handleMoveEvent(e.params.pos.x, e.params.pos.y);
|
|
471
509
|
});
|
|
472
510
|
|
|
473
|
-
_self.pb.canvas.addEventListener("mouseenter", function () {
|
|
474
|
-
|
|
475
|
-
});
|
|
476
|
-
_self.pb.canvas.addEventListener("mouseleave", function () {
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
});
|
|
511
|
+
// _self.pb.canvas.addEventListener("mouseenter", function () {
|
|
512
|
+
// _self.mouseIsOver = true;
|
|
513
|
+
// });
|
|
514
|
+
// _self.pb.canvas.addEventListener("mouseleave", function () {
|
|
515
|
+
// _self.mouseIsOver = false;
|
|
516
|
+
// _self._clearMoveEvent();
|
|
517
|
+
// });
|
|
518
|
+
this.pb.canvas.addEventListener("mouseenter", this._mouseEnterListener);
|
|
519
|
+
this.pb.canvas.addEventListener("mouseleave", this._mouseLeaveListener);
|
|
520
|
+
return mouseHandler;
|
|
480
521
|
}
|
|
481
522
|
|
|
482
523
|
// +---------------------------------------------------------------------------------
|
|
@@ -491,16 +532,6 @@ export class BezierPathInteractionHelper {
|
|
|
491
532
|
});
|
|
492
533
|
}
|
|
493
534
|
|
|
494
|
-
// +---------------------------------------------------------------------------------
|
|
495
|
-
// | Adds vertex listeners to all path points.
|
|
496
|
-
// |
|
|
497
|
-
// | @param {BezierPath} path - The path to add vertex listeners to.
|
|
498
|
-
// +-------------------------------
|
|
499
|
-
// TODO: THIS CAN BE REMOVED?
|
|
500
|
-
// private _addDefaultPathListeners( path:BezierPath ) : void {
|
|
501
|
-
// BezierPathInteractionHelper.addPathVertexDragListeners( path, this._updateMinDistance );
|
|
502
|
-
// };
|
|
503
|
-
|
|
504
535
|
// +---------------------------------------------------------------------------------
|
|
505
536
|
// | Removes vertex listeners from all path points.
|
|
506
537
|
// |
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A basic IO handler for file drop (Drag-and-drop).
|
|
3
|
+
*
|
|
4
|
+
* Example use:
|
|
5
|
+
* ```javascript
|
|
6
|
+
* var body = document.getElememtByTagName("body")[0];
|
|
7
|
+
* var fileDrop = new FileDrop(body);
|
|
8
|
+
* fileDrop.onFileJSONDropped(function (jsonObject) {
|
|
9
|
+
* console.log("jsonObject", jsonObject);
|
|
10
|
+
* });
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* @author Ikaros Kappler
|
|
14
|
+
* @date 2021-10-13
|
|
15
|
+
* @modified 2022-01-31 (ported from the ngdg project, then generalized)
|
|
16
|
+
* @version 2.0.0
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
type IDroppedCallbackJSON = (jsonData: object) => void;
|
|
20
|
+
type IDroppedCallbackText = (textData: string) => void;
|
|
21
|
+
type IDroppedCallbackBinary = (binaryData: Blob, file: File) => void;
|
|
22
|
+
|
|
23
|
+
export class FileDrop {
|
|
24
|
+
/**
|
|
25
|
+
* The 'dropzone' element.
|
|
26
|
+
* @private
|
|
27
|
+
* @memberof FileDrop
|
|
28
|
+
* @member {HTMLElement}
|
|
29
|
+
*/
|
|
30
|
+
private element: HTMLElement;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* The JSON file drop callback.
|
|
34
|
+
* @private
|
|
35
|
+
* @memberof FileDrop
|
|
36
|
+
* @member {HTMLElement}
|
|
37
|
+
*/
|
|
38
|
+
private fileDroppedCallbackJSON: IDroppedCallbackJSON | null;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* The text file drop callback.
|
|
42
|
+
* @private
|
|
43
|
+
* @memberof FileDrop
|
|
44
|
+
* @member {HTMLElement}
|
|
45
|
+
*/
|
|
46
|
+
private fileDroppedCallbackText: IDroppedCallbackText | null;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* The binary file drop callback.
|
|
50
|
+
* @private
|
|
51
|
+
* @memberof FileDrop
|
|
52
|
+
* @member {HTMLElement}
|
|
53
|
+
*/
|
|
54
|
+
private fileDroppedCallbackBinary: IDroppedCallbackBinary | null;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
*
|
|
58
|
+
* @param {HTMLElement} element - The element you wish to operate as the drop zone (like <body/>).
|
|
59
|
+
*/
|
|
60
|
+
constructor(element: HTMLElement) {
|
|
61
|
+
this.element = element;
|
|
62
|
+
|
|
63
|
+
// Init the drop listeners
|
|
64
|
+
element.addEventListener("drop", this.handleDropEvent.bind(this));
|
|
65
|
+
element.addEventListener("dragover", this.handleDragOverEvent.bind(this));
|
|
66
|
+
element.addEventListener("dragleave", this.handleDragLeaveEvent.bind(this));
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Install the JSON (MIME type json*) file drop callback. Note than only one callback can be installed
|
|
71
|
+
* in this implementation. Calling this method multiple times will overwrite previously
|
|
72
|
+
* installed listeners.
|
|
73
|
+
*
|
|
74
|
+
* The callback will receive the dropped file content as an object (parsed JSON).
|
|
75
|
+
*
|
|
76
|
+
* @param {(data:object)=>void} callback
|
|
77
|
+
*/
|
|
78
|
+
onFileJSONDropped(callback: IDroppedCallbackJSON) {
|
|
79
|
+
this.fileDroppedCallbackJSON = callback;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Install the text file (MIME type text/plain) drop callback. Note than only one callback can be installed
|
|
84
|
+
* in this implementation. Calling this method multiple times will overwrite previously
|
|
85
|
+
* installed listeners.
|
|
86
|
+
*
|
|
87
|
+
* The callback will receive the dropped file content as a string.
|
|
88
|
+
*
|
|
89
|
+
* @param {(data:object)=>void} callback
|
|
90
|
+
*/
|
|
91
|
+
onFileTextDropped(callback: IDroppedCallbackText) {
|
|
92
|
+
this.fileDroppedCallbackText = callback;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Internally handle a drop event.
|
|
97
|
+
*
|
|
98
|
+
* @param {DragEvent} event
|
|
99
|
+
* @returns {void}
|
|
100
|
+
*/
|
|
101
|
+
private handleDropEvent = (event: DragEvent) => {
|
|
102
|
+
event.preventDefault();
|
|
103
|
+
event.stopPropagation();
|
|
104
|
+
this.element.style.opacity = "1.0";
|
|
105
|
+
|
|
106
|
+
if (!event.dataTransfer.files || event.dataTransfer.files.length === 0) {
|
|
107
|
+
// No files were dropped
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
if (event.dataTransfer.files.length > 1) {
|
|
111
|
+
// Multiple file drop is not nupported
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
if (!this.fileDroppedCallbackJSON) {
|
|
115
|
+
// No handling callback defined.
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
if (event.dataTransfer.files[0]) {
|
|
119
|
+
const file: File = event.dataTransfer.files[0];
|
|
120
|
+
// console.log("file", file);
|
|
121
|
+
if (file.type.match(/json.*/) && this.fileDroppedCallbackJSON) {
|
|
122
|
+
var reader = new FileReader();
|
|
123
|
+
reader.onload = (readEvent: ProgressEvent<FileReader>) => {
|
|
124
|
+
// Finished reading file data.
|
|
125
|
+
const jsonObject: object = JSON.parse(readEvent.target.result as string);
|
|
126
|
+
// TODO: what happens on fail?
|
|
127
|
+
this.fileDroppedCallbackJSON(jsonObject);
|
|
128
|
+
};
|
|
129
|
+
reader.readAsText(file); // start reading the file data.
|
|
130
|
+
} else if (file.type.match(/text\/plain.*/) && this.fileDroppedCallbackText) {
|
|
131
|
+
var reader = new FileReader();
|
|
132
|
+
reader.onload = (readEvent: ProgressEvent<FileReader>) => {
|
|
133
|
+
// Finished reading file data.
|
|
134
|
+
this.fileDroppedCallbackText(readEvent.target.result as string);
|
|
135
|
+
};
|
|
136
|
+
reader.readAsText(file); // start reading the file data.
|
|
137
|
+
} else if (this.fileDroppedCallbackBinary) {
|
|
138
|
+
var reader = new FileReader();
|
|
139
|
+
reader.onload = (readEvent: ProgressEvent<FileReader>) => {
|
|
140
|
+
// Finished reading file data.
|
|
141
|
+
this.fileDroppedCallbackBinary(new Blob([readEvent.target.result]), file);
|
|
142
|
+
};
|
|
143
|
+
reader.readAsBinaryString(file); // start reading the file data.
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Toggles the drop sensitive element's opacity to 0.5.
|
|
150
|
+
*
|
|
151
|
+
* @param {DragEvent} event - The event.
|
|
152
|
+
*/
|
|
153
|
+
private handleDragOverEvent = (event: DragEvent) => {
|
|
154
|
+
event.preventDefault();
|
|
155
|
+
event.stopPropagation();
|
|
156
|
+
this.element.style.opacity = "0.5";
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Restored the drop sensitive element's opacity back to 1.0.
|
|
161
|
+
*
|
|
162
|
+
* @param {DragEvent} event - The event.
|
|
163
|
+
*/
|
|
164
|
+
private handleDragLeaveEvent = (event: DragEvent) => {
|
|
165
|
+
event.preventDefault();
|
|
166
|
+
event.stopPropagation();
|
|
167
|
+
this.element.style.opacity = "1.0";
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Removes all listeners (drop, dragover and dragleave).
|
|
172
|
+
*/
|
|
173
|
+
destroy() {
|
|
174
|
+
this.element.removeEventListener("drop", this.handleDropEvent);
|
|
175
|
+
this.element.removeEventListener("dragover", this.handleDragOverEvent);
|
|
176
|
+
this.element.removeEventListener("dragleave", this.handleDragLeaveEvent);
|
|
177
|
+
}
|
|
178
|
+
}
|