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.
- package/LICENSE +21 -0
- package/README.md +51 -0
- package/package.json +56 -0
- package/src/fonts/bravura/FONTLOG.txt +243 -0
- package/src/fonts/bravura/OFL-FAQ.txt +369 -0
- package/src/fonts/bravura/OFL.txt +94 -0
- package/src/fonts/bravura/bravura-text.md +153 -0
- package/src/fonts/bravura/bravura_metadata.json +34718 -0
- package/src/fonts/bravura/eot/Bravura.eot +0 -0
- package/src/fonts/bravura/eot/BravuraText.eot +0 -0
- package/src/fonts/bravura/otf/Bravura.otf +0 -0
- package/src/fonts/bravura/otf/BravuraText.otf +0 -0
- package/src/fonts/bravura/svg/Bravura.svg +3517 -0
- package/src/fonts/bravura/svg/BravuraText.svg +18879 -0
- package/src/fonts/bravura/woff/Bravura.woff +0 -0
- package/src/fonts/bravura/woff/BravuraText.woff +0 -0
- package/src/fonts/colaborate/ColabBol-webfont.eot +0 -0
- package/src/fonts/colaborate/ColabBol-webfont.svg +976 -0
- package/src/fonts/colaborate/ColabBol-webfont.ttf +0 -0
- package/src/fonts/colaborate/ColabBol-webfont.woff +0 -0
- package/src/fonts/colaborate/ColabLig-webfont.eot +0 -0
- package/src/fonts/colaborate/ColabLig-webfont.svg +976 -0
- package/src/fonts/colaborate/ColabLig-webfont.ttf +0 -0
- package/src/fonts/colaborate/ColabLig-webfont.woff +0 -0
- package/src/fonts/colaborate/ColabMed-webfont.eot +0 -0
- package/src/fonts/colaborate/ColabMed-webfont.svg +976 -0
- package/src/fonts/colaborate/ColabMed-webfont.ttf +0 -0
- package/src/fonts/colaborate/ColabMed-webfont.woff +0 -0
- package/src/fonts/colaborate/ColabReg-webfont.eot +0 -0
- package/src/fonts/colaborate/ColabReg-webfont.svg +976 -0
- package/src/fonts/colaborate/ColabReg-webfont.ttf +0 -0
- package/src/fonts/colaborate/ColabReg-webfont.woff +0 -0
- package/src/fonts/colaborate/ColabThi-webfont.eot +0 -0
- package/src/fonts/colaborate/ColabThi-webfont.svg +970 -0
- package/src/fonts/colaborate/ColabThi-webfont.ttf +0 -0
- package/src/fonts/colaborate/ColabThi-webfont.woff +0 -0
- package/src/images/GUI/.DS_Store +0 -0
- package/src/images/GUI/backward-fast-solid.svg +1 -0
- package/src/images/GUI/bars-solid.svg +1 -0
- package/src/images/GUI/caret-left-solid.svg +1 -0
- package/src/images/GUI/caret-right-solid.svg +1 -0
- package/src/images/GUI/edit-solid.svg +1 -0
- package/src/images/GUI/pause-solid.svg +1 -0
- package/src/images/GUI/play-solid.svg +1 -0
- package/src/images/GUI/triplet.svg +21 -0
- package/src/images/GUI/zoomin.svg +1 -0
- package/src/images/GUI/zoomout.svg +1 -0
- package/src/images/bravura_notes/.DS_Store +0 -0
- package/src/images/bravura_notes/16th.svg +1 -0
- package/src/images/bravura_notes/32th.svg +1 -0
- package/src/images/bravura_notes/alterDDown.svg +1 -0
- package/src/images/bravura_notes/alterDUp.svg +1 -0
- package/src/images/bravura_notes/alterDown.svg +1 -0
- package/src/images/bravura_notes/alterNeutral.svg +1 -0
- package/src/images/bravura_notes/alterUp.svg +1 -0
- package/src/images/bravura_notes/beams.svg +1 -0
- package/src/images/bravura_notes/eigth.svg +1 -0
- package/src/images/bravura_notes/full.svg +1 -0
- package/src/images/bravura_notes/half.svg +1 -0
- package/src/images/bravura_notes/oneDot.svg +1 -0
- package/src/images/bravura_notes/pauseNote.svg +1 -0
- package/src/images/bravura_notes/quarter.svg +1 -0
- package/src/images/bravura_notes/tie.svg +1 -0
- package/src/images/bravura_notes/twoDot.svg +1 -0
- package/src/scripts/js/.DS_Store +0 -0
- package/src/scripts/js/Core.js +887 -0
- package/src/scripts/js/MusicPlayer.js +572 -0
- package/src/scripts/js/MusicProcessor.js +652 -0
- package/src/scripts/js/VerovioScoreEditor.js +183 -0
- package/src/scripts/js/assets/mei_template.js +161 -0
- package/src/scripts/js/constants.js +20 -0
- package/src/scripts/js/datastructures/MeasureMatrix.js +235 -0
- package/src/scripts/js/datastructures/ScoreGraph.js +432 -0
- package/src/scripts/js/datastructures/ScoreNode.js +78 -0
- package/src/scripts/js/entry.js +4 -0
- package/src/scripts/js/gui/Annotations.js +456 -0
- package/src/scripts/js/gui/Cursor.js +203 -0
- package/src/scripts/js/gui/CustomAnnotationDrawer.js +114 -0
- package/src/scripts/js/gui/CustomAnnotationShapeDrawer.js +114 -0
- package/src/scripts/js/gui/HarmonyLabel.js +104 -0
- package/src/scripts/js/gui/Label.js +2 -0
- package/src/scripts/js/gui/PhantomElement.js +132 -0
- package/src/scripts/js/gui/ScoreManipulator.js +156 -0
- package/src/scripts/js/gui/Tabbar.js +675 -0
- package/src/scripts/js/gui/TempoLabel.js +60 -0
- package/src/scripts/js/gui/Toolbar copy.js +614 -0
- package/src/scripts/js/gui/Toolbar.js +618 -0
- package/src/scripts/js/handlers/AnnotationChangeHandler.js +567 -0
- package/src/scripts/js/handlers/AnnotationDragHandler.js +113 -0
- package/src/scripts/js/handlers/AnnotationLineHandler.js +113 -0
- package/src/scripts/js/handlers/ArticulationHandler.js +20 -0
- package/src/scripts/js/handlers/ClickModeHandler.js +265 -0
- package/src/scripts/js/handlers/CustomAnnotationShapeDrawer.js +131 -0
- package/src/scripts/js/handlers/CustomToolbarHandler.js +297 -0
- package/src/scripts/js/handlers/DeleteHandler.js +102 -0
- package/src/scripts/js/handlers/GlobalKeyboardHandler.js +367 -0
- package/src/scripts/js/handlers/Handler.js +2 -0
- package/src/scripts/js/handlers/HarmonyHandler.js +282 -0
- package/src/scripts/js/handlers/InsertModeHandler copy.js +423 -0
- package/src/scripts/js/handlers/InsertModeHandler.js +380 -0
- package/src/scripts/js/handlers/InsertModeHandler_deprecated.js +424 -0
- package/src/scripts/js/handlers/KeyModeHandler copy.js +407 -0
- package/src/scripts/js/handlers/KeyModeHandler.js +456 -0
- package/src/scripts/js/handlers/KeyModeHandler_deprecated.js +411 -0
- package/src/scripts/js/handlers/LabelHandler.js +461 -0
- package/src/scripts/js/handlers/ModHandler.js +311 -0
- package/src/scripts/js/handlers/NoteDragHandler copy.js +148 -0
- package/src/scripts/js/handlers/NoteDragHandler.js +97 -0
- package/src/scripts/js/handlers/NoteDragHandler_deprecated.js +150 -0
- package/src/scripts/js/handlers/PhantomElementHandler.js +168 -0
- package/src/scripts/js/handlers/ScoreManipulatorHandler.js +135 -0
- package/src/scripts/js/handlers/SelectionHandler.js +218 -0
- package/src/scripts/js/handlers/SideBarHandler.js +499 -0
- package/src/scripts/js/handlers/TooltipHandler.js +132 -0
- package/src/scripts/js/handlers/WindowHandler.js +257 -0
- package/src/scripts/js/utils/DOMCreator.js +174 -0
- package/src/scripts/js/utils/MEIConverter.js +64 -0
- package/src/scripts/js/utils/MEIOperations.js +2112 -0
- package/src/scripts/js/utils/Mouse2MEI.js +735 -0
- package/src/scripts/js/utils/Mouse2SVG.js +737 -0
- package/src/scripts/js/utils/SVGEditor.js +352 -0
- package/src/scripts/js/utils/SVGFiller.js +245 -0
- package/src/scripts/js/utils/Types.js +2 -0
- package/src/scripts/js/utils/VerovioWrapper copy.js +156 -0
- package/src/scripts/js/utils/VerovioWrapper.js +165 -0
- package/src/scripts/js/utils/VerovioWrapperLocal.js +156 -0
- package/src/scripts/js/utils/convenienceQueries.js +37 -0
- package/src/scripts/js/utils/coordinates.js +54 -0
- package/src/scripts/js/utils/firefoxBBoxes.js +143 -0
- package/src/scripts/js/utils/mappings.js +332 -0
- package/src/scripts/js/utils/random.js +45 -0
- 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;
|