vibe-editor 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +51 -0
  3. package/package.json +56 -0
  4. package/src/fonts/bravura/FONTLOG.txt +243 -0
  5. package/src/fonts/bravura/OFL-FAQ.txt +369 -0
  6. package/src/fonts/bravura/OFL.txt +94 -0
  7. package/src/fonts/bravura/bravura-text.md +153 -0
  8. package/src/fonts/bravura/bravura_metadata.json +34718 -0
  9. package/src/fonts/bravura/eot/Bravura.eot +0 -0
  10. package/src/fonts/bravura/eot/BravuraText.eot +0 -0
  11. package/src/fonts/bravura/otf/Bravura.otf +0 -0
  12. package/src/fonts/bravura/otf/BravuraText.otf +0 -0
  13. package/src/fonts/bravura/svg/Bravura.svg +3517 -0
  14. package/src/fonts/bravura/svg/BravuraText.svg +18879 -0
  15. package/src/fonts/bravura/woff/Bravura.woff +0 -0
  16. package/src/fonts/bravura/woff/BravuraText.woff +0 -0
  17. package/src/fonts/colaborate/ColabBol-webfont.eot +0 -0
  18. package/src/fonts/colaborate/ColabBol-webfont.svg +976 -0
  19. package/src/fonts/colaborate/ColabBol-webfont.ttf +0 -0
  20. package/src/fonts/colaborate/ColabBol-webfont.woff +0 -0
  21. package/src/fonts/colaborate/ColabLig-webfont.eot +0 -0
  22. package/src/fonts/colaborate/ColabLig-webfont.svg +976 -0
  23. package/src/fonts/colaborate/ColabLig-webfont.ttf +0 -0
  24. package/src/fonts/colaborate/ColabLig-webfont.woff +0 -0
  25. package/src/fonts/colaborate/ColabMed-webfont.eot +0 -0
  26. package/src/fonts/colaborate/ColabMed-webfont.svg +976 -0
  27. package/src/fonts/colaborate/ColabMed-webfont.ttf +0 -0
  28. package/src/fonts/colaborate/ColabMed-webfont.woff +0 -0
  29. package/src/fonts/colaborate/ColabReg-webfont.eot +0 -0
  30. package/src/fonts/colaborate/ColabReg-webfont.svg +976 -0
  31. package/src/fonts/colaborate/ColabReg-webfont.ttf +0 -0
  32. package/src/fonts/colaborate/ColabReg-webfont.woff +0 -0
  33. package/src/fonts/colaborate/ColabThi-webfont.eot +0 -0
  34. package/src/fonts/colaborate/ColabThi-webfont.svg +970 -0
  35. package/src/fonts/colaborate/ColabThi-webfont.ttf +0 -0
  36. package/src/fonts/colaborate/ColabThi-webfont.woff +0 -0
  37. package/src/images/GUI/.DS_Store +0 -0
  38. package/src/images/GUI/backward-fast-solid.svg +1 -0
  39. package/src/images/GUI/bars-solid.svg +1 -0
  40. package/src/images/GUI/caret-left-solid.svg +1 -0
  41. package/src/images/GUI/caret-right-solid.svg +1 -0
  42. package/src/images/GUI/edit-solid.svg +1 -0
  43. package/src/images/GUI/pause-solid.svg +1 -0
  44. package/src/images/GUI/play-solid.svg +1 -0
  45. package/src/images/GUI/triplet.svg +21 -0
  46. package/src/images/GUI/zoomin.svg +1 -0
  47. package/src/images/GUI/zoomout.svg +1 -0
  48. package/src/images/bravura_notes/.DS_Store +0 -0
  49. package/src/images/bravura_notes/16th.svg +1 -0
  50. package/src/images/bravura_notes/32th.svg +1 -0
  51. package/src/images/bravura_notes/alterDDown.svg +1 -0
  52. package/src/images/bravura_notes/alterDUp.svg +1 -0
  53. package/src/images/bravura_notes/alterDown.svg +1 -0
  54. package/src/images/bravura_notes/alterNeutral.svg +1 -0
  55. package/src/images/bravura_notes/alterUp.svg +1 -0
  56. package/src/images/bravura_notes/beams.svg +1 -0
  57. package/src/images/bravura_notes/eigth.svg +1 -0
  58. package/src/images/bravura_notes/full.svg +1 -0
  59. package/src/images/bravura_notes/half.svg +1 -0
  60. package/src/images/bravura_notes/oneDot.svg +1 -0
  61. package/src/images/bravura_notes/pauseNote.svg +1 -0
  62. package/src/images/bravura_notes/quarter.svg +1 -0
  63. package/src/images/bravura_notes/tie.svg +1 -0
  64. package/src/images/bravura_notes/twoDot.svg +1 -0
  65. package/src/scripts/js/.DS_Store +0 -0
  66. package/src/scripts/js/Core.js +887 -0
  67. package/src/scripts/js/MusicPlayer.js +572 -0
  68. package/src/scripts/js/MusicProcessor.js +652 -0
  69. package/src/scripts/js/VerovioScoreEditor.js +183 -0
  70. package/src/scripts/js/assets/mei_template.js +161 -0
  71. package/src/scripts/js/constants.js +20 -0
  72. package/src/scripts/js/datastructures/MeasureMatrix.js +235 -0
  73. package/src/scripts/js/datastructures/ScoreGraph.js +432 -0
  74. package/src/scripts/js/datastructures/ScoreNode.js +78 -0
  75. package/src/scripts/js/entry.js +4 -0
  76. package/src/scripts/js/gui/Annotations.js +456 -0
  77. package/src/scripts/js/gui/Cursor.js +203 -0
  78. package/src/scripts/js/gui/CustomAnnotationDrawer.js +114 -0
  79. package/src/scripts/js/gui/CustomAnnotationShapeDrawer.js +114 -0
  80. package/src/scripts/js/gui/HarmonyLabel.js +104 -0
  81. package/src/scripts/js/gui/Label.js +2 -0
  82. package/src/scripts/js/gui/PhantomElement.js +132 -0
  83. package/src/scripts/js/gui/ScoreManipulator.js +156 -0
  84. package/src/scripts/js/gui/Tabbar.js +675 -0
  85. package/src/scripts/js/gui/TempoLabel.js +60 -0
  86. package/src/scripts/js/gui/Toolbar copy.js +614 -0
  87. package/src/scripts/js/gui/Toolbar.js +618 -0
  88. package/src/scripts/js/handlers/AnnotationChangeHandler.js +567 -0
  89. package/src/scripts/js/handlers/AnnotationDragHandler.js +113 -0
  90. package/src/scripts/js/handlers/AnnotationLineHandler.js +113 -0
  91. package/src/scripts/js/handlers/ArticulationHandler.js +20 -0
  92. package/src/scripts/js/handlers/ClickModeHandler.js +265 -0
  93. package/src/scripts/js/handlers/CustomAnnotationShapeDrawer.js +131 -0
  94. package/src/scripts/js/handlers/CustomToolbarHandler.js +297 -0
  95. package/src/scripts/js/handlers/DeleteHandler.js +102 -0
  96. package/src/scripts/js/handlers/GlobalKeyboardHandler.js +367 -0
  97. package/src/scripts/js/handlers/Handler.js +2 -0
  98. package/src/scripts/js/handlers/HarmonyHandler.js +282 -0
  99. package/src/scripts/js/handlers/InsertModeHandler copy.js +423 -0
  100. package/src/scripts/js/handlers/InsertModeHandler.js +380 -0
  101. package/src/scripts/js/handlers/InsertModeHandler_deprecated.js +424 -0
  102. package/src/scripts/js/handlers/KeyModeHandler copy.js +407 -0
  103. package/src/scripts/js/handlers/KeyModeHandler.js +456 -0
  104. package/src/scripts/js/handlers/KeyModeHandler_deprecated.js +411 -0
  105. package/src/scripts/js/handlers/LabelHandler.js +461 -0
  106. package/src/scripts/js/handlers/ModHandler.js +311 -0
  107. package/src/scripts/js/handlers/NoteDragHandler copy.js +148 -0
  108. package/src/scripts/js/handlers/NoteDragHandler.js +97 -0
  109. package/src/scripts/js/handlers/NoteDragHandler_deprecated.js +150 -0
  110. package/src/scripts/js/handlers/PhantomElementHandler.js +168 -0
  111. package/src/scripts/js/handlers/ScoreManipulatorHandler.js +135 -0
  112. package/src/scripts/js/handlers/SelectionHandler.js +218 -0
  113. package/src/scripts/js/handlers/SideBarHandler.js +499 -0
  114. package/src/scripts/js/handlers/TooltipHandler.js +132 -0
  115. package/src/scripts/js/handlers/WindowHandler.js +257 -0
  116. package/src/scripts/js/utils/DOMCreator.js +174 -0
  117. package/src/scripts/js/utils/MEIConverter.js +64 -0
  118. package/src/scripts/js/utils/MEIOperations.js +2112 -0
  119. package/src/scripts/js/utils/Mouse2MEI.js +735 -0
  120. package/src/scripts/js/utils/Mouse2SVG.js +737 -0
  121. package/src/scripts/js/utils/SVGEditor.js +352 -0
  122. package/src/scripts/js/utils/SVGFiller.js +245 -0
  123. package/src/scripts/js/utils/Types.js +2 -0
  124. package/src/scripts/js/utils/VerovioWrapper copy.js +156 -0
  125. package/src/scripts/js/utils/VerovioWrapper.js +165 -0
  126. package/src/scripts/js/utils/VerovioWrapperLocal.js +156 -0
  127. package/src/scripts/js/utils/convenienceQueries.js +37 -0
  128. package/src/scripts/js/utils/coordinates.js +54 -0
  129. package/src/scripts/js/utils/firefoxBBoxes.js +143 -0
  130. package/src/scripts/js/utils/mappings.js +332 -0
  131. package/src/scripts/js/utils/random.js +45 -0
  132. package/src/styles/VerovioScoreEditor.css +694 -0
@@ -0,0 +1,567 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const constants_1 = require("../constants");
4
+ const interactjs_1 = require("interactjs");
5
+ const cq = require("../utils/convenienceQueries");
6
+ const coordinates = require("../utils/coordinates");
7
+ /**
8
+ * Handle Interaction with annotation text and shape elements (drag & resize)
9
+ */
10
+ class AnnotationChangeHandler {
11
+ constructor(containerId) {
12
+ // change to function after implementation
13
+ this.selectHandler = (function selectHandler(e) {
14
+ var target = e.target;
15
+ if (target.tagName === "rect") {
16
+ var bbox = target.getBoundingClientRect();
17
+ this.attachCornerCircle(target, bbox.x, bbox.y);
18
+ }
19
+ //TODO: Circles etc
20
+ }).bind(this);
21
+ this.setContainerId(containerId);
22
+ //this.update()
23
+ this.annotResizedEvent = new Event("annotResized");
24
+ this.dragAnnotStartEvent = new Event("dragAnnotStart");
25
+ this.dragAnnotEndEvent = new Event("dragAnnotEnd");
26
+ this.isInteracting = false;
27
+ this.factor = 100;
28
+ }
29
+ setListeners() {
30
+ //if(document.getElementById(this.containerId).querySelector(".sidebar.openSidebar") != null) return
31
+ var that = this;
32
+ this.shapeListener = interactjs_1.default("#" + this.containerId + " #interactionOverlay .customAnnotShape")
33
+ .resizable({
34
+ // resize from all edges and corners
35
+ edges: { left: true, right: true, bottom: true, top: true },
36
+ listeners: {
37
+ move: this.resizeShapeListener.bind(this),
38
+ end(event) {
39
+ that.interactionOverlay.dispatchEvent(new Event("annotationCanvasChanged"));
40
+ that.deleteTempDistances();
41
+ that.interactTarget.dispatchEvent(that.annotResizedEvent);
42
+ that.isInteracting = false;
43
+ }
44
+ },
45
+ })
46
+ .draggable({
47
+ listeners: {
48
+ move: this.dragShapeListener.bind(this),
49
+ end(event) {
50
+ that.interactionOverlay.dispatchEvent(new Event("annotationCanvasChanged"));
51
+ that.deleteTempDistances();
52
+ that.interactTarget.dispatchEvent(that.dragAnnotEndEvent);
53
+ that.isInteracting = false;
54
+ }
55
+ },
56
+ modifiers: [
57
+ interactjs_1.default.modifiers.restrictRect({
58
+ restriction: 'parent',
59
+ endOnly: true
60
+ })
61
+ ]
62
+ });
63
+ this.textListener = interactjs_1.default("#" + this.containerId + " #interactionOverlay .annotLinkedText, #" + this.containerId + " #interactionOverlay .annotStaticText")
64
+ .resizable({
65
+ // resize from all edges and corners
66
+ edges: { left: true, right: true, bottom: true, top: true },
67
+ listeners: {
68
+ move: this.resizeTextListener.bind(this),
69
+ end(event) {
70
+ that.deleteTempDistances();
71
+ that.interactionOverlay.dispatchEvent(new Event("annotationCanvasChanged"));
72
+ that.interactTarget.dispatchEvent(that.annotResizedEvent);
73
+ that.isInteracting = false;
74
+ }
75
+ },
76
+ })
77
+ .draggable({
78
+ listeners: {
79
+ move: this.dragTextListener.bind(this),
80
+ end(event) {
81
+ that.interactionOverlay.dispatchEvent(new Event("annotationCanvasChanged"));
82
+ that.deleteTempDistances();
83
+ that.interactTarget.dispatchEvent(that.dragAnnotEndEvent);
84
+ that.isInteracting = false;
85
+ }
86
+ },
87
+ modifiers: [
88
+ interactjs_1.default.modifiers.restrictRect({
89
+ restriction: 'parent',
90
+ endOnly: true
91
+ })
92
+ ]
93
+ });
94
+ this.lineListener = interactjs_1.default("#" + this.containerId + " #interactionOverlay .lineDragRect.x1")
95
+ .draggable({
96
+ listeners: {
97
+ move: this.dragLineListener.bind(this),
98
+ end(event) {
99
+ that.snapToObj();
100
+ that.interactionOverlay.dispatchEvent(new Event("annotationCanvasChanged"));
101
+ that.deleteTempDistances();
102
+ that.interactTarget.dispatchEvent(that.dragAnnotEndEvent);
103
+ that.isInteracting = false;
104
+ }
105
+ },
106
+ modifiers: [
107
+ interactjs_1.default.modifiers.restrictRect({
108
+ restriction: 'parent',
109
+ endOnly: true
110
+ })
111
+ ]
112
+ });
113
+ }
114
+ removeListeners() {
115
+ var _a, _b, _c;
116
+ //interact(".customAnnotShape, .annotLinkedText, .lineDragRect").unset()
117
+ (_a = this.shapeListener) === null || _a === void 0 ? void 0 : _a.unset();
118
+ (_b = this.lineListener) === null || _b === void 0 ? void 0 : _b.unset();
119
+ (_c = this.textListener) === null || _c === void 0 ? void 0 : _c.unset();
120
+ }
121
+ resetListeners() {
122
+ this.removeListeners();
123
+ this.setListeners();
124
+ }
125
+ // SHAPES
126
+ dragShapeListener(event) {
127
+ var target = event.target;
128
+ this.interactTarget = target;
129
+ if (!this.isInteracting) {
130
+ this.interactTarget.dispatchEvent(this.dragAnnotStartEvent);
131
+ }
132
+ this.isInteracting = true;
133
+ //var pt = coordinates.transformToDOMMatrixCoordinates(event.clientX, event.clientY, this.interactionOverlay) //new DOMPoint(event.clientX, event.clientY)
134
+ var pt = coordinates.transformToDOMMatrixCoordinates(event.clientX, event.clientY, cq.getInteractOverlay(this.containerId).querySelector("#annotationCanvas")); //new DOMPoint(event.clientX, event.clientY)
135
+ var edx = pt.x; //pt.matrixTransform(this.canvasMatrix).x
136
+ var edy = pt.y; //pt.matrixTransform(this.canvasMatrix).y
137
+ //var ptDist = coordinates.transformToDOMMatrixCoordinates(target.getBoundingClientRect().x, event.target.getBoundingClientRect().y, this.interactionOverlay)// new DOMPoint(target.getBoundingClientRect().x, event.target.getBoundingClientRect().y)
138
+ var ptDist = coordinates.transformToDOMMatrixCoordinates(target.getBoundingClientRect().x, target.getBoundingClientRect().y, cq.getInteractOverlay(this.containerId).querySelector("#annotationCanvas"));
139
+ var distX = (parseFloat(target.getAttribute('distX'))) || edx - ptDist.x; //ptDist.matrixTransform(this.canvasMatrix).x
140
+ var distY = (parseFloat(target.getAttribute('distY'))) || edy - ptDist.y; //ptDist.matrixTransform(this.canvasMatrix).y
141
+ target.setAttribute("distX", distX.toString());
142
+ target.setAttribute("distY", distY.toString());
143
+ target.setAttribute("x", (edx - distX).toString());
144
+ target.setAttribute("y", (edy - distY).toString());
145
+ var targetParent = target.parentElement;
146
+ var line = targetParent.querySelector(":scope > .annotLine");
147
+ //pt = coordinates.transformToDOMMatrixCoordinates(target.getBoundingClientRect().x, event.target.getBoundingClientRect().y, this.interactionOverlay) //new DOMPoint(target.getBoundingClientRect().x, target.getBoundingClientRect().y)
148
+ pt = coordinates.transformToDOMMatrixCoordinates(target.getBoundingClientRect().x, target.getBoundingClientRect().y, cq.getInteractOverlay(this.containerId).querySelector("#annotationCanvas"));
149
+ var rectX = pt.x.toString(); //pt.matrixTransform(this.canvasMatrix).x.toString()
150
+ var rectY = pt.y.toString(); //pt.matrixTransform(this.canvasMatrix).y.toString()
151
+ if (line !== null) {
152
+ line.setAttribute("x1", rectX);
153
+ line.setAttribute("y1", rectY);
154
+ }
155
+ var dragRects = targetParent === null || targetParent === void 0 ? void 0 : targetParent.querySelectorAll(".lineDragRect");
156
+ if (dragRects.length > 0) {
157
+ dragRects.forEach(dr => {
158
+ if (dr.classList.contains("x1")) {
159
+ dr.setAttribute("x", rectX);
160
+ dr.setAttribute("y", rectY);
161
+ }
162
+ });
163
+ }
164
+ }
165
+ resizeShapeListener(event) {
166
+ var target = event.target;
167
+ this.interactTarget = target;
168
+ // update overal dimensions
169
+ var pt = coordinates.getDOMMatrixCoordinates(event.rect, cq.getInteractOverlay(this.containerId).querySelector("#annotationCanvas"));
170
+ target.style.width = pt.width + 'px';
171
+ target.style.height = pt.height + 'px';
172
+ // translate when resizing from top or left edges
173
+ if (event.edges.top === true || event.edges.left === true) {
174
+ var edgesPt = coordinates.transformToDOMMatrixCoordinates(event.clientX, event.clientY, cq.getInteractOverlay(this.containerId).querySelector("#annotationCanvas")); // new DOMPoint(event.clientX, event.clientY)
175
+ var edx = edgesPt.x; //pt.matrixTransform(this.canvasMatrix).x
176
+ var edy = edgesPt.y; //pt.matrixTransform(this.canvasMatrix).y
177
+ var ptDist = coordinates.transformToDOMMatrixCoordinates(target.getBoundingClientRect().x, event.target.getBoundingClientRect().y, cq.getInteractOverlay(this.containerId).querySelector("#annotationCanvas")); //new DOMPoint(target.getBoundingClientRect().x, event.target.getBoundingClientRect().y)
178
+ var distX = (parseFloat(target.getAttribute('distX'))) || edx - ptDist.x; //ptDist.matrixTransform(this.canvasMatrix).x
179
+ var distY = (parseFloat(target.getAttribute('distY'))) || edy - ptDist.y; //ptDist.matrixTransform(this.canvasMatrix).y
180
+ target.setAttribute("distX", distX.toString());
181
+ target.setAttribute("distY", distY.toString());
182
+ if (event.edges.left === true)
183
+ target.setAttribute("x", (edx - distX).toString());
184
+ if (event.edges.top === true)
185
+ target.setAttribute("y", (edy - distY).toString());
186
+ //target.textContent = Math.round(event.rect.width) + '\u00D7' + Math.round(event.rect.height)
187
+ }
188
+ //update attached line
189
+ var targetParent = target.parentElement;
190
+ var line = targetParent === null || targetParent === void 0 ? void 0 : targetParent.querySelector(".annotLine");
191
+ var dragRects = targetParent === null || targetParent === void 0 ? void 0 : targetParent.querySelectorAll(".lineDragRect");
192
+ var rectX = pt.x.toString(); //ptTL.matrixTransform(this.canvasMatrix).x.toString()
193
+ var rectY = pt.y.toString(); //ptTL.matrixTransform(this.canvasMatrix).y.toString()
194
+ if (line !== null) {
195
+ line.setAttribute("x1", rectX);
196
+ line.setAttribute("y1", rectY);
197
+ }
198
+ if (dragRects.length > 0) {
199
+ dragRects.forEach(dr => {
200
+ if (dr.classList.contains("x1")) {
201
+ dr.setAttribute("x", rectX);
202
+ dr.setAttribute("y", rectY);
203
+ }
204
+ });
205
+ }
206
+ }
207
+ // TEXTBOXES
208
+ resizeTextListener(event) {
209
+ var target = event.target.querySelector(".annotFO");
210
+ this.interactTarget = target;
211
+ //this.canvasMatrix = (document.getElementById("annotationCanvas") as unknown as SVGGraphicsElement).getScreenCTM().inverse()
212
+ // update overal dimensions
213
+ var ptTL = coordinates.getDOMMatrixCoordinates(event.rect, cq.getInteractOverlay(this.containerId).querySelector("#annotationCanvas"));
214
+ target.style.width = ptTL.width + 'px';
215
+ target.style.height = ptTL.height + 'px';
216
+ // translate when resizing from top or left edges
217
+ if (event.edges.top === true || event.edges.left === true) {
218
+ var pt = coordinates.transformToDOMMatrixCoordinates(event.clientX, event.clientY, cq.getInteractOverlay(this.containerId).querySelector("#annotationCanvas")); //new DOMPoint(event.clientX, event.clientY)
219
+ var edx = pt.x; //.matrixTransform(this.canvasMatrix).x
220
+ var edy = pt.y; //matrixTransform(this.canvasMatrix).y
221
+ var ptDist = coordinates.transformToDOMMatrixCoordinates(target.getBoundingClientRect().x, event.target.getBoundingClientRect().y, cq.getInteractOverlay(this.containerId).querySelector("#annotationCanvas")); //new DOMPoint(target.getBoundingClientRect().x, event.target.getBoundingClientRect().y)
222
+ var distX = (parseFloat(target.getAttribute('distX'))) || edx - ptDist.x; //matrixTransform(this.canvasMatrix).x
223
+ var distY = (parseFloat(target.getAttribute('distY'))) || edy - ptDist.y; //matrixTransform(this.canvasMatrix).y
224
+ target.setAttribute("distX", distX.toString());
225
+ target.setAttribute("distY", distY.toString());
226
+ if (event.edges.left === true)
227
+ target.setAttribute("x", (edx - distX).toString());
228
+ if (event.edges.top === true)
229
+ target.setAttribute("y", (edy - distY).toString());
230
+ //target.textContent = Math.round(event.rect.width) + '\u00D7' + Math.round(event.rect.height)
231
+ }
232
+ //update attached line
233
+ var targetParent = target.closest("g");
234
+ var line = targetParent === null || targetParent === void 0 ? void 0 : targetParent.querySelector(".annotLine");
235
+ var dragRects = targetParent === null || targetParent === void 0 ? void 0 : targetParent.querySelectorAll(".lineDragRect");
236
+ var rectX = ptTL.x.toString(); //.matrixTransform(this.canvasMatrix).x.toString()
237
+ var rectY = ptTL.y.toString(); //).matrixTransform(this.canvasMatrix).y.toString()
238
+ if (line !== null) {
239
+ line.setAttribute("x2", rectX);
240
+ line.setAttribute("y2", rectY);
241
+ }
242
+ if (dragRects.length > 0) {
243
+ dragRects.forEach(dr => {
244
+ if (dr.classList.contains("x2")) {
245
+ dr.setAttribute("x", rectX);
246
+ dr.setAttribute("y", rectY);
247
+ }
248
+ });
249
+ }
250
+ }
251
+ dragTextListener(event) {
252
+ var target = event.target.querySelector(".annotFO");
253
+ this.interactTarget = target;
254
+ if (!this.isInteracting) {
255
+ this.interactTarget.dispatchEvent(this.dragAnnotStartEvent);
256
+ }
257
+ this.isInteracting = true;
258
+ //this.canvasMatrix = (document.getElementById("annotationCanvas") as unknown as SVGGraphicsElement).getScreenCTM().inverse()
259
+ var pt = coordinates.transformToDOMMatrixCoordinates(event.clientX, event.clientY, cq.getInteractOverlay(this.containerId).querySelector("#annotationCanvas")); //new DOMPoint(event.clientX, event.clientY)
260
+ var edx = pt.x; //matrixTransform(this.canvasMatrix).x
261
+ var edy = pt.y; //matrixTransform(this.canvasMatrix).y
262
+ var ptDist = coordinates.transformToDOMMatrixCoordinates(target.getBoundingClientRect().x, target.getBoundingClientRect().y, cq.getInteractOverlay(this.containerId).querySelector("#annotationCanvas")); //new DOMPoint(target.getBoundingClientRect().x, event.target.getBoundingClientRect().y)
263
+ var distX = (parseFloat(target.getAttribute('distX'))) || edx - ptDist.x; //matrixTransform(this.canvasMatrix).x
264
+ var distY = (parseFloat(target.getAttribute('distY'))) || edy - ptDist.y; //matrixTransform(this.canvasMatrix).y
265
+ target.setAttribute("distX", distX.toString());
266
+ target.setAttribute("distY", distY.toString());
267
+ target.setAttribute("x", (edx - distX).toString());
268
+ target.setAttribute("y", (edy - distY).toString());
269
+ var targetParent = target.closest("g");
270
+ var line = targetParent.querySelector(".annotLine");
271
+ var dragRects = targetParent.querySelectorAll(".lineDragRect");
272
+ pt = coordinates.transformToDOMMatrixCoordinates(target.getBoundingClientRect().x, target.getBoundingClientRect().y, cq.getInteractOverlay(this.containerId).querySelector("#annotationCanvas")); //new DOMPoint(target.getBoundingClientRect().x, target.getBoundingClientRect().y)
273
+ var rectX = pt.x.toString(); //.matrixTransform(this.canvasMatrix).x.toString()
274
+ var rectY = pt.y.toString(); //matrixTransform(this.canvasMatrix).y.toString()
275
+ if (line !== null) {
276
+ line.setAttribute("x2", rectX);
277
+ line.setAttribute("y2", rectY);
278
+ }
279
+ if (dragRects.length > 0) {
280
+ dragRects.forEach(dr => {
281
+ if (dr.classList.contains("x2")) {
282
+ dr.setAttribute("x", rectX);
283
+ dr.setAttribute("y", rectY);
284
+ }
285
+ });
286
+ }
287
+ }
288
+ //LINES
289
+ dragLineListener(event) {
290
+ //if(document.getElementById(this.containerId).querySelector(".sidebar.openSidebar") != null) return
291
+ var target = event.target;
292
+ this.interactTarget = target;
293
+ if (!this.isInteracting) {
294
+ this.interactTarget.dispatchEvent(this.dragAnnotStartEvent);
295
+ }
296
+ this.isInteracting = true;
297
+ //this.canvasMatrix = (document.getElementById("annotationCanvas") as unknown as SVGGraphicsElement).getScreenCTM().inverse()
298
+ this.dragedRect = target;
299
+ var pt = coordinates.transformToDOMMatrixCoordinates(event.clientX, event.clientY, cq.getInteractOverlay(this.containerId).querySelector("#annotationCanvas")); //new DOMPoint(event.clientX, event.clientY)
300
+ var edx = pt.x; //matrixTransform(this.canvasMatrix).x
301
+ var edy = pt.y; //matrixTransform(this.canvasMatrix).y
302
+ target.setAttribute("x", edx.toString());
303
+ target.setAttribute("y", edy.toString());
304
+ var targetParent = target.closest("g");
305
+ var line = targetParent.querySelector(".annotLine");
306
+ pt = coordinates.transformToDOMMatrixCoordinates(target.getBoundingClientRect().x, target.getBoundingClientRect().y, cq.getInteractOverlay(this.containerId).querySelector("#annotationCanvas"));
307
+ var rectX = pt.x.toString(); //.matrixTransform(this.canvasMatrix).x.toString()
308
+ var rectY = pt.y.toString(); //matrixTransform(this.canvasMatrix).y.toString()
309
+ if (target.classList.contains("x1")) {
310
+ line.setAttribute("x1", rectX);
311
+ line.setAttribute("y1", rectY);
312
+ this.highlightNextAttachObject(target);
313
+ }
314
+ this.interactionOverlay.dispatchEvent(new Event("annotChanged"));
315
+ }
316
+ /**
317
+ * Highlight the next Element where the lineDragRect could attach to
318
+ * @param lineDragRect
319
+ * @returns
320
+ */
321
+ highlightNextAttachObject(lineDragRect) {
322
+ var pt = coordinates.transformToDOMMatrixCoordinates(lineDragRect.getBoundingClientRect().x, lineDragRect.getBoundingClientRect().y, cq.getInteractOverlay(this.containerId).querySelector("#annotationCanvas"));
323
+ var posx = pt.x;
324
+ var posy = pt.y;
325
+ var nextScoreObj = this.m2s.findScoreTarget(posx, posy);
326
+ var nextShapeObj = this.findCustomShapeTarget(posx, posy);
327
+ var possibleCoords = new Array();
328
+ var shapeCoord;
329
+ if (nextShapeObj !== null) {
330
+ var shapept = coordinates.transformToDOMMatrixCoordinates(nextShapeObj.getBoundingClientRect().x, nextShapeObj.getBoundingClientRect().y, cq.getInteractOverlay(this.containerId).querySelector("#annotationCanvas"));
331
+ shapeCoord = {
332
+ obj: nextShapeObj,
333
+ x: shapept.x,
334
+ y: shapept.y
335
+ };
336
+ possibleCoords.push(shapeCoord);
337
+ }
338
+ if (nextScoreObj != undefined) {
339
+ var measurept = coordinates.transformToDOMMatrixCoordinates(nextScoreObj.parentMeasure.getBoundingClientRect().x, nextScoreObj.parentMeasure.getBoundingClientRect().y, cq.getInteractOverlay(this.containerId).querySelector("#annotationCanvas"));
340
+ var measureCoord = {
341
+ obj: nextScoreObj.parentMeasure,
342
+ x: measurept.x,
343
+ y: measurept.y
344
+ };
345
+ possibleCoords.push(measureCoord);
346
+ var staffpt = coordinates.transformToDOMMatrixCoordinates(nextScoreObj.parentStaff.getBoundingClientRect().x, nextScoreObj.parentStaff.getBoundingClientRect().y, cq.getInteractOverlay(this.containerId).querySelector("#annotationCanvas"));
347
+ var staffCoord = {
348
+ obj: nextScoreObj.parentStaff,
349
+ x: staffpt.x,
350
+ y: staffpt.y
351
+ };
352
+ possibleCoords.push(staffCoord);
353
+ var notept = coordinates.transformToDOMMatrixCoordinates(document.getElementById(nextScoreObj.id).getBoundingClientRect().x, document.getElementById(nextScoreObj.id).getBoundingClientRect().y, this.interactionOverlay);
354
+ var noteCoord = {
355
+ obj: cq.getVrvSVG(this.containerId).querySelector("#" + nextScoreObj.id),
356
+ x: notept.x,
357
+ y: notept.y
358
+ };
359
+ possibleCoords.push(noteCoord);
360
+ }
361
+ var tempDist = Math.pow(10, 10);
362
+ var objToHighlight;
363
+ var objCoord;
364
+ possibleCoords.forEach(coord => {
365
+ var dist = Math.sqrt(Math.abs(coord.x - posx) ** 2 + Math.abs(coord.y - posy) ** 2);
366
+ if (dist < tempDist) {
367
+ tempDist = dist;
368
+ objToHighlight = coord.obj;
369
+ objCoord = coord;
370
+ }
371
+ });
372
+ this.updateAnnotationIDs(objToHighlight, lineDragRect, objCoord);
373
+ return objToHighlight;
374
+ }
375
+ /**
376
+ * Find nearest Custom Shape to given Position (e.g. Mouse)
377
+ * @param posx
378
+ * @param posy
379
+ * @returns
380
+ */
381
+ findCustomShapeTarget(posx, posy) {
382
+ var shapes = Array.from(this.interactionOverlay.querySelectorAll(".customAnnotShape"));
383
+ var nextShape;
384
+ var tempDist = Math.pow(10, 10);
385
+ shapes.forEach(s => {
386
+ var pt = coordinates.transformToDOMMatrixCoordinates(s.getBoundingClientRect().x, s.getBoundingClientRect().y, cq.getInteractOverlay(this.containerId).querySelector("#annotationCanvas"));
387
+ //var spt = pt.matrixTransform(this.rootMatrix)
388
+ var dist = Math.sqrt(Math.abs(pt.x - posx) ** 2 + Math.abs(pt.y - posy) ** 2);
389
+ if (dist < tempDist) {
390
+ tempDist = dist;
391
+ nextShape = s;
392
+ }
393
+ });
394
+ if (nextShape == undefined) {
395
+ return null;
396
+ }
397
+ return nextShape;
398
+ }
399
+ /**
400
+ * Update Set of saved Annotations and their relations to Shapes or Score
401
+ * @param objToAttach
402
+ * @param lineDragRect
403
+ */
404
+ updateAnnotationIDs(objToAttach, lineDragRect, objCoord) {
405
+ var line;
406
+ var targetx;
407
+ var targety;
408
+ var highlightRect;
409
+ var parentGroup = lineDragRect.closest("g");
410
+ var otaBBox = objToAttach.getBoundingClientRect();
411
+ this.annotations.some(annot => {
412
+ if (annot.sourceID = parentGroup.id) {
413
+ var pt = coordinates.getDOMMatrixCoordinates(otaBBox, cq.getInteractOverlay(this.containerId).querySelector("#annotationCanvas"));
414
+ annot.targetID = objToAttach.id;
415
+ targetx = pt.x;
416
+ targety = pt.y;
417
+ // draw rect for highlighting
418
+ if (parentGroup.querySelector(".highlightAnnotation") === null) {
419
+ highlightRect = document.createElementNS(constants_1.constants._SVGNS_, "rect");
420
+ parentGroup.insertBefore(highlightRect, parentGroup.firstChild);
421
+ }
422
+ else {
423
+ highlightRect = parentGroup.querySelector(".highlightAnnotation");
424
+ }
425
+ var highlightMargin = 0;
426
+ highlightRect.classList.add("highlightAnnotation");
427
+ highlightRect.setAttribute("x", (targetx - highlightMargin).toString());
428
+ highlightRect.setAttribute("y", (targety - highlightMargin).toString());
429
+ highlightRect.setAttribute("height", (pt.height + 2 * highlightMargin).toString());
430
+ highlightRect.setAttribute("width", (pt.width + 2 * highlightMargin).toString());
431
+ return annot.sourceID === parentGroup.id;
432
+ }
433
+ });
434
+ this.snapCoords = {
435
+ obj: line,
436
+ x: targetx,
437
+ y: targety
438
+ };
439
+ // this.container.querySelectorAll("*[fill=green]").forEach(fg => {
440
+ // fg.removeAttribute("fill")
441
+ // })
442
+ //objToAttach.setAttribute("fill", "green")
443
+ // some rules for custom shapes
444
+ if (objToAttach.classList.contains("customAnnotShape")) {
445
+ parentGroup.querySelector(".highlightAnnotation").remove();
446
+ // ensure that only one shape is attached
447
+ if (parentGroup.querySelector(".customAnnotShape") !== null) {
448
+ var prevShape = parentGroup.querySelector(".customAnnotShape");
449
+ parentGroup.parentElement.appendChild(prevShape);
450
+ }
451
+ parentGroup.insertBefore(objToAttach, parentGroup.firstChild);
452
+ var newAnnot = {
453
+ sourceID: objToAttach.id,
454
+ targetID: new Array()
455
+ };
456
+ // get annotated elements into shape info
457
+ var shapeBBox = objToAttach.getBoundingClientRect();
458
+ var shapeX = shapeBBox.x;
459
+ var shapeY = shapeBBox.y;
460
+ this.m2s.getNoteBBoxes().forEach(bb => {
461
+ if (bb.x >= shapeX &&
462
+ bb.x <= shapeX + shapeBBox.width &&
463
+ bb.y >= shapeY &&
464
+ bb.y <= shapeY + shapeBBox.height) {
465
+ newAnnot.targetID.push(bb.id);
466
+ }
467
+ });
468
+ this.annotations.push(newAnnot);
469
+ }
470
+ }
471
+ /**
472
+ * Delete attributes from Elements which are just used temporarily to resize or drag objects
473
+ */
474
+ deleteTempDistances() {
475
+ var _a;
476
+ (_a = cq.getInteractOverlay(this.containerId)) === null || _a === void 0 ? void 0 : _a.querySelector("#annotationCanvas").querySelectorAll("*[distX], *[distY]").forEach(d => {
477
+ d.removeAttribute("distX");
478
+ d.removeAttribute("distY");
479
+ });
480
+ }
481
+ /**
482
+ * Snap Annotation Pointer to highlighted Object
483
+ */
484
+ snapToObj() {
485
+ this.dragedRect.setAttribute("x", this.snapCoords.x.toString());
486
+ this.dragedRect.setAttribute("y", this.snapCoords.y.toString());
487
+ var line = this.dragedRect.closest("g").querySelector(".annotLine");
488
+ line.setAttribute("x1", this.snapCoords.x.toString());
489
+ line.setAttribute("y1", this.snapCoords.y.toString());
490
+ // clean up after snap
491
+ this.interactionOverlay.querySelector("#annotationCanvas").querySelectorAll("g").forEach(el => {
492
+ var shapeChild = el.querySelector(".customAnnotShape");
493
+ var highlightChild = el.querySelector(".highlightAnnotation");
494
+ if (shapeChild !== null && el.childElementCount === 1) {
495
+ el.parentElement.appendChild(shapeChild);
496
+ document.getElementById(el.id).remove();
497
+ }
498
+ if (shapeChild !== null && highlightChild !== null) {
499
+ el.parentElement.appendChild(shapeChild);
500
+ }
501
+ });
502
+ }
503
+ update() {
504
+ this.setContainerId(this.containerId);
505
+ //this.updateCallback()
506
+ this.rootBBox = this.interactionOverlay.getBoundingClientRect();
507
+ this.rootMatrix = this.interactionOverlay.getScreenCTM().inverse();
508
+ this.customShapes = Array.from(this.interactionOverlay.querySelectorAll(".customAnnotShape"));
509
+ //this.resetListeners()
510
+ return this;
511
+ }
512
+ setUpdateCallback(updateCallback) {
513
+ this.updateCallback = updateCallback;
514
+ return this;
515
+ }
516
+ setAnnotations(annotations) {
517
+ var _a, _b, _c, _d;
518
+ this.annotations = annotations;
519
+ var newFactor = parseInt((_b = (_a = cq.getContainer(this.containerId).querySelector("#svgContainer").style) === null || _a === void 0 ? void 0 : _a.width) === null || _b === void 0 ? void 0 : _b.split("%")[0]) || 100;
520
+ if (newFactor === this.factor)
521
+ return this;
522
+ var that = this;
523
+ function setXYWH(element) {
524
+ var x = parseFloat(element.getAttribute("x")) / that.factor * newFactor;
525
+ var y = parseFloat(element.getAttribute("y")) / that.factor * newFactor;
526
+ var w = parseFloat(element.getAttribute("width")) / that.factor * newFactor;
527
+ var h = parseFloat(element.getAttribute("height")) / that.factor * newFactor;
528
+ element.setAttribute("x", x.toString());
529
+ element.setAttribute("y", y.toString());
530
+ element.setAttribute("width", w.toString());
531
+ element.setAttribute("height", h.toString());
532
+ }
533
+ function setLineCoords(line) {
534
+ var x1 = parseFloat(line.getAttribute("x1")) / that.factor * newFactor;
535
+ var y1 = parseFloat(line.getAttribute("y1")) / that.factor * newFactor;
536
+ var x2 = parseFloat(line.getAttribute("x2")) / that.factor * newFactor;
537
+ var y2 = parseFloat(line.getAttribute("y2")) / that.factor * newFactor;
538
+ line.setAttribute("x1", x1.toString());
539
+ line.setAttribute("y1", y1.toString());
540
+ line.setAttribute("x2", x2.toString());
541
+ line.setAttribute("y2", y2.toString());
542
+ }
543
+ this.annotationCanvas.querySelectorAll(":scope > *").forEach(a => {
544
+ if (a.tagName === "rect") {
545
+ setXYWH(a);
546
+ }
547
+ else {
548
+ a.querySelectorAll("[x][y][width][height]").forEach(e => setXYWH(e));
549
+ a.querySelectorAll("line").forEach(l => setLineCoords(l));
550
+ }
551
+ });
552
+ that.factor = parseInt((_d = (_c = cq.getContainer(this.containerId).querySelector("#svgContainer").style) === null || _c === void 0 ? void 0 : _c.width) === null || _d === void 0 ? void 0 : _d.split("%")[0]);
553
+ return this;
554
+ }
555
+ setm2s(m2s) {
556
+ this.m2s = m2s;
557
+ return this;
558
+ }
559
+ setContainerId(id) {
560
+ this.containerId = id;
561
+ this.container = document.getElementById(id);
562
+ this.interactionOverlay = cq.getInteractOverlay(id);
563
+ this.annotationCanvas = this.interactionOverlay.querySelector("#annotationCanvas");
564
+ return this;
565
+ }
566
+ }
567
+ exports.default = AnnotationChangeHandler;