MCPcopy Create free account
hub / github.com/CoderLine/alphaTab / DragDrop

Class DragDrop

packages/playground/src/components/DragDrop.ts:12–64  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

10 * load a dropped file into the alphaTab API. Does not render any DOM of its own.
11 */
12export class DragDrop {
13 private over = (e: DragEvent) => {
14 e.stopPropagation();
15 e.preventDefault();
16 if (e.dataTransfer) {
17 e.dataTransfer.dropEffect = 'copy';
18 }
19 if (!this.dragging) {
20 this.dragging = true;
21 this.options.onEnter?.();
22 }
23 };
24 private leave = (e: DragEvent) => {
25 // The dragleave fires on every child element transition. Reset only when leaving the document.
26 if (e.relatedTarget === null) {
27 this.dragging = false;
28 this.options.onLeave?.();
29 }
30 };
31 private drop = (e: DragEvent) => {
32 e.stopPropagation();
33 e.preventDefault();
34 this.dragging = false;
35 this.options.onLeave?.();
36 const files = e.dataTransfer?.files;
37 if (files && files.length === 1) {
38 const reader = new FileReader();
39 reader.onload = data => {
40 if (data.target?.result) {
41 this.api.load(data.target.result, [0]);
42 }
43 };
44 reader.readAsArrayBuffer(files[0]);
45 }
46 };
47
48 private dragging = false;
49
50 constructor(
51 private api: alphaTab.AlphaTabApi,
52 private options: DragDropOptions = {}
53 ) {
54 document.addEventListener('dragover', this.over);
55 document.addEventListener('dragleave', this.leave);
56 document.addEventListener('drop', this.drop);
57 }
58
59 dispose(): void {
60 document.removeEventListener('dragover', this.over);
61 document.removeEventListener('dragleave', this.leave);
62 document.removeEventListener('drop', this.drop);
63 }
64}

Callers

nothing calls this directly

Calls 2

preventDefaultMethod · 0.65
loadMethod · 0.65

Tested by

no test coverage detected