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,432 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
const ScoreNode_1 = require("./ScoreNode");
|
4
|
+
const cq = require("../utils/convenienceQueries");
|
5
|
+
const meiNodeSelector = "note, rest, mRest, chord, layer";
|
6
|
+
const documentNodeSelector = ".clef, .meterSig, .keySig, .note, .rest, .mRest, .chord"; //, .layer"
|
7
|
+
const documentNodeSelector2 = ".clef, .meterSig, .keySig, .layer .note, .layer .rest, .layer .mRest, .layer .chord"; //, :scope > .layer"
|
8
|
+
class ScoreGraph {
|
9
|
+
constructor(xmlDoc, containerId, miditimes) {
|
10
|
+
this.containerId = containerId;
|
11
|
+
this.container = document.getElementById(containerId);
|
12
|
+
this.vrvSVG = cq.getVrvSVG(containerId);
|
13
|
+
this.interactionOverlay = cq.getInteractOverlay(containerId);
|
14
|
+
this.populate(xmlDoc, miditimes);
|
15
|
+
}
|
16
|
+
/**
|
17
|
+
* @deprecated
|
18
|
+
* Use function populate instead
|
19
|
+
* @param xmlDoc
|
20
|
+
*/
|
21
|
+
altPop(xmlDoc) {
|
22
|
+
var documentNodes = Array.from(cq.getVrvSVG(this.containerId).querySelectorAll(documentNodeSelector));
|
23
|
+
var documentNodes = documentNodes.filter(dn => {
|
24
|
+
if (!dn.classList.contains("note")) {
|
25
|
+
return dn;
|
26
|
+
}
|
27
|
+
if (dn.classList.contains("note")) {
|
28
|
+
if (dn.closest(".chord") === null) {
|
29
|
+
return dn;
|
30
|
+
}
|
31
|
+
}
|
32
|
+
});
|
33
|
+
var nodeCoodrs = new Map();
|
34
|
+
var root = cq.getVrvSVG(this.containerId);
|
35
|
+
var rootBBox = root.getBoundingClientRect();
|
36
|
+
documentNodes.forEach(dn => {
|
37
|
+
var dnx = dn.getBoundingClientRect().x - rootBBox.x - root.scrollLeft - window.pageXOffset;
|
38
|
+
var dny = dn.getBoundingClientRect().y - rootBBox.y - root.scrollTop - window.pageYOffset;
|
39
|
+
nodeCoodrs.set(dn, { x: dnx, y: dny });
|
40
|
+
});
|
41
|
+
for (const [key, value] of nodeCoodrs.entries()) {
|
42
|
+
var closestLeft;
|
43
|
+
var closestRight;
|
44
|
+
var closestTop;
|
45
|
+
var closestDown;
|
46
|
+
for (const [key, value] of nodeCoodrs.entries()) {
|
47
|
+
//TODO
|
48
|
+
}
|
49
|
+
}
|
50
|
+
}
|
51
|
+
/**
|
52
|
+
* Populate scoreGraoh according to mei
|
53
|
+
* Add midi timeCode
|
54
|
+
* @param xmlDoc
|
55
|
+
* @param miditimes
|
56
|
+
*/
|
57
|
+
populate(xmlDoc, miditimes) {
|
58
|
+
var _a, _b, _c;
|
59
|
+
this.graph = new Map();
|
60
|
+
this.midiTimes = miditimes;
|
61
|
+
xmlDoc.querySelectorAll(meiNodeSelector).forEach(e => {
|
62
|
+
if ((e.tagName === "note" && e.closest("chord") !== null)) { // || (e.tagName === "layer" && e.children.length > 0)){
|
63
|
+
return;
|
64
|
+
}
|
65
|
+
this.graph.set(e.id, new ScoreNode_1.default(e.id));
|
66
|
+
});
|
67
|
+
cq.getVrvSVG(this.containerId).querySelectorAll(documentNodeSelector).forEach(e => {
|
68
|
+
if ((e.classList.contains("note") && e.closest(".chord") !== null)) {
|
69
|
+
return;
|
70
|
+
}
|
71
|
+
this.graph.set(e.id, new ScoreNode_1.default(e.id));
|
72
|
+
});
|
73
|
+
var layerCount = 0;
|
74
|
+
xmlDoc.querySelectorAll("layer").forEach(l => {
|
75
|
+
if (parseInt(l.getAttribute("n")) > layerCount) {
|
76
|
+
layerCount = parseInt(l.getAttribute("n"));
|
77
|
+
}
|
78
|
+
});
|
79
|
+
var staffCount = 0;
|
80
|
+
xmlDoc.querySelectorAll("staff").forEach(l => {
|
81
|
+
if (parseInt(l.getAttribute("n")) > staffCount) {
|
82
|
+
staffCount = parseInt(l.getAttribute("n"));
|
83
|
+
}
|
84
|
+
});
|
85
|
+
// Assign left/right nodes
|
86
|
+
var layerArray;
|
87
|
+
for (var s = 0; s < staffCount; s++) {
|
88
|
+
for (var i = 0; i < layerCount; i++) {
|
89
|
+
layerArray = Array.from(xmlDoc.querySelectorAll("staff[n=\"" + (s + 1).toString() + "\"] > layer[n=\"" + (i + 1).toString() + "\"]"));
|
90
|
+
var elements = new Array();
|
91
|
+
layerArray.forEach(l => {
|
92
|
+
if (cq.getVrvSVG(this.containerId).querySelector("#" + l.id) === null)
|
93
|
+
return;
|
94
|
+
let staff = cq.getVrvSVG(this.containerId).querySelector("#" + l.id).closest(".measure").querySelector(".staff[n='" + l.closest("staff").getAttribute("n") + "']");
|
95
|
+
var documentNodes = Array.from(staff.querySelectorAll(documentNodeSelector2));
|
96
|
+
var documentNodes = documentNodes.filter(dn => {
|
97
|
+
if (!dn.classList.contains("note")) {
|
98
|
+
return dn;
|
99
|
+
}
|
100
|
+
if (dn.classList.contains("note")) {
|
101
|
+
if (dn.closest(".chord") === null) {
|
102
|
+
return dn;
|
103
|
+
}
|
104
|
+
}
|
105
|
+
});
|
106
|
+
elements.push(...documentNodes);
|
107
|
+
});
|
108
|
+
elements.forEach((el, idx) => {
|
109
|
+
var currentNode = this.graph.get(el.id);
|
110
|
+
var prevSibling = idx === 0 ? null : this.graph.get(elements[idx - 1].id);
|
111
|
+
var nextSibling = idx === elements.length - 1 ? null : this.graph.get(elements[idx + 1].id);
|
112
|
+
if (idx > 0) {
|
113
|
+
currentNode.setLeft(prevSibling);
|
114
|
+
}
|
115
|
+
else { // empty Node at beginning of Layer
|
116
|
+
this.graph.set("BOL" + i.toString(), new ScoreNode_1.default("BOL" + i.toString()));
|
117
|
+
this.graph.get("BOL" + i.toString()).setLeft(null);
|
118
|
+
this.graph.get("BOL" + i.toString()).setUp(null);
|
119
|
+
this.graph.get("BOL" + i.toString()).setDown(null);
|
120
|
+
this.graph.get("BOL" + i.toString()).setRight(currentNode);
|
121
|
+
currentNode.setLeft(this.graph.get("BOL" + i.toString()));
|
122
|
+
}
|
123
|
+
currentNode.setRight(nextSibling);
|
124
|
+
});
|
125
|
+
}
|
126
|
+
}
|
127
|
+
//Assign up/down nodes
|
128
|
+
if (this.midiTimes == undefined) {
|
129
|
+
// miditimes contain svg Elements (not mei Elements!!!)
|
130
|
+
// first: direct up/down references
|
131
|
+
for (const [key, value] of this.midiTimes.entries()) {
|
132
|
+
var originArr = value;
|
133
|
+
var arr = new Array();
|
134
|
+
originArr.forEach(el => {
|
135
|
+
var chord = el.closest(".chord");
|
136
|
+
if (chord !== null && arr.indexOf(chord) === -1) {
|
137
|
+
arr.push(chord);
|
138
|
+
}
|
139
|
+
else if (chord === null) {
|
140
|
+
arr.push(el);
|
141
|
+
}
|
142
|
+
});
|
143
|
+
arr.forEach((note, idx) => {
|
144
|
+
var current = note;
|
145
|
+
var upSibling = idx === 0 ? null : this.graph.get(arr[idx - 1].id);
|
146
|
+
var downSibling = idx === arr.length - 1 ? null : this.graph.get(arr[idx + 1].id);
|
147
|
+
var currentNode = this.graph.get(current.id);
|
148
|
+
if (typeof currentNode.getTimeCode() === "undefined") {
|
149
|
+
currentNode.setTimeCode(key);
|
150
|
+
}
|
151
|
+
currentNode.setUp(upSibling);
|
152
|
+
currentNode.setDown(downSibling);
|
153
|
+
});
|
154
|
+
}
|
155
|
+
}
|
156
|
+
//DEAL WITH MRESTS
|
157
|
+
var staves = cq.getVrvSVG(this.containerId).querySelectorAll(".staff");
|
158
|
+
for (var i = 0; i < staves.length - 1; i++) {
|
159
|
+
var staffElements = staves[i].querySelectorAll(documentNodeSelector);
|
160
|
+
var emptyElements = staves[i + 1].querySelectorAll(".clef, .meterSig, .keySig, .mRest, .layer");
|
161
|
+
staffElements.forEach((se, idx) => {
|
162
|
+
var gn = this.graph.get(se.id);
|
163
|
+
if ((gn === null || gn === void 0 ? void 0 : gn.getDown()) === null || (gn === null || gn === void 0 ? void 0 : gn.getDown()) == undefined) {
|
164
|
+
var tempIdx = idx;
|
165
|
+
if (idx >= emptyElements.length) {
|
166
|
+
tempIdx = emptyElements.length - 1;
|
167
|
+
}
|
168
|
+
var gnEmpty = this.graph.get(emptyElements[tempIdx].id);
|
169
|
+
if ((gnEmpty === null || gnEmpty === void 0 ? void 0 : gnEmpty.getUp()) === null || (gnEmpty === null || gnEmpty === void 0 ? void 0 : gnEmpty.getUp()) == undefined) {
|
170
|
+
gn === null || gn === void 0 ? void 0 : gn.setDown(gnEmpty);
|
171
|
+
gnEmpty === null || gnEmpty === void 0 ? void 0 : gnEmpty.setUp(gn);
|
172
|
+
}
|
173
|
+
}
|
174
|
+
});
|
175
|
+
}
|
176
|
+
//extra iteration for Beginning of Layer
|
177
|
+
var currBol = null;
|
178
|
+
var prevBol = null;
|
179
|
+
for (const [key, value] of this.graph.entries()) {
|
180
|
+
if (key.indexOf("BOL") !== -1) {
|
181
|
+
currBol = value;
|
182
|
+
var bolIdx = key[key.length - 1];
|
183
|
+
if (bolIdx !== "0") {
|
184
|
+
currBol.setUp(prevBol);
|
185
|
+
if (prevBol !== null) {
|
186
|
+
prevBol.setDown(currBol);
|
187
|
+
}
|
188
|
+
}
|
189
|
+
prevBol = value;
|
190
|
+
}
|
191
|
+
}
|
192
|
+
//if there are no direct up/down references, assign closest references
|
193
|
+
for (const [key, value] of this.graph.entries()) {
|
194
|
+
var currentNode = value;
|
195
|
+
var leftNode = currentNode.getLeft();
|
196
|
+
var rightNode = currentNode.getRight();
|
197
|
+
if (currentNode.getUp() == undefined) {
|
198
|
+
currentNode.setUp(null);
|
199
|
+
}
|
200
|
+
if (currentNode.getDown() == undefined) {
|
201
|
+
currentNode.setDown(null);
|
202
|
+
}
|
203
|
+
// Get closest Node for UP reference
|
204
|
+
//check left
|
205
|
+
var closestTimeUp = 10 ** 10;
|
206
|
+
var upSet = null;
|
207
|
+
if (this.targetNodeIsLeftOrRight(currentNode, currentNode.getUp()) && leftNode !== null) {
|
208
|
+
if (leftNode.getUp() !== null && typeof leftNode.getDown() !== "undefined") {
|
209
|
+
closestTimeUp = (currentNode === null || currentNode === void 0 ? void 0 : currentNode.getTimeCode()) - ((_a = leftNode === null || leftNode === void 0 ? void 0 : leftNode.getUp()) === null || _a === void 0 ? void 0 : _a.getTimeCode()) || 0;
|
210
|
+
upSet = leftNode === null || leftNode === void 0 ? void 0 : leftNode.getUp();
|
211
|
+
}
|
212
|
+
}
|
213
|
+
//check right
|
214
|
+
if (this.targetNodeIsLeftOrRight(currentNode, currentNode.getUp()) && rightNode !== null) {
|
215
|
+
if (rightNode.getUp() !== null && typeof rightNode.getDown() !== "undefined") {
|
216
|
+
if ((((_b = rightNode.getUp()) === null || _b === void 0 ? void 0 : _b.getTimeCode()) - (currentNode === null || currentNode === void 0 ? void 0 : currentNode.getTimeCode())) < closestTimeUp) {
|
217
|
+
upSet = rightNode === null || rightNode === void 0 ? void 0 : rightNode.getUp();
|
218
|
+
}
|
219
|
+
}
|
220
|
+
}
|
221
|
+
if (upSet !== null && upSet !== currentNode && !this.targetNodeIsLeftOrRight(currentNode, upSet)) {
|
222
|
+
currentNode.setUp(upSet);
|
223
|
+
}
|
224
|
+
// Get closest Node for DOWN reference
|
225
|
+
// check left
|
226
|
+
var closestTimeDown = 10 ** 10;
|
227
|
+
var downSet = null;
|
228
|
+
if (this.targetNodeIsLeftOrRight(currentNode, currentNode.getDown()) && leftNode !== null) {
|
229
|
+
if (leftNode.getDown() !== null && typeof leftNode.getDown() !== "undefined") {
|
230
|
+
closestTimeDown = (currentNode === null || currentNode === void 0 ? void 0 : currentNode.getTimeCode()) - ((_c = leftNode === null || leftNode === void 0 ? void 0 : leftNode.getDown()) === null || _c === void 0 ? void 0 : _c.getTimeCode()) || 0;
|
231
|
+
downSet = leftNode.getDown();
|
232
|
+
}
|
233
|
+
}
|
234
|
+
// check right
|
235
|
+
if (this.targetNodeIsLeftOrRight(currentNode, currentNode.getDown()) && rightNode !== null) {
|
236
|
+
if (rightNode.getDown() !== null && rightNode.getDown() != undefined) {
|
237
|
+
if ((rightNode.getDown().getTimeCode() - currentNode.getTimeCode()) < closestTimeDown) {
|
238
|
+
downSet = rightNode.getDown();
|
239
|
+
}
|
240
|
+
}
|
241
|
+
}
|
242
|
+
if (downSet !== null && downSet !== currentNode && !this.targetNodeIsLeftOrRight(currentNode, downSet)) {
|
243
|
+
currentNode.setDown(downSet);
|
244
|
+
}
|
245
|
+
}
|
246
|
+
}
|
247
|
+
targetNodeIsLeftOrRight(startNode, targetNode) {
|
248
|
+
return this.targetIsNodeRight(startNode, targetNode) || this.targetIsNodeLeft(startNode, targetNode);
|
249
|
+
}
|
250
|
+
targetIsNodeLeft(startNode, targetNode) {
|
251
|
+
var tempNode = startNode;
|
252
|
+
var isLeft = false;
|
253
|
+
while (tempNode !== null) {
|
254
|
+
if (tempNode !== null) {
|
255
|
+
if (tempNode == undefined) {
|
256
|
+
return isLeft;
|
257
|
+
}
|
258
|
+
tempNode = tempNode.getLeft();
|
259
|
+
}
|
260
|
+
if (tempNode === targetNode) {
|
261
|
+
isLeft = true;
|
262
|
+
}
|
263
|
+
}
|
264
|
+
return isLeft;
|
265
|
+
}
|
266
|
+
targetIsNodeRight(startNode, targetNode) {
|
267
|
+
var tempNode = startNode;
|
268
|
+
var isRight = false;
|
269
|
+
while (tempNode !== null) {
|
270
|
+
if (tempNode !== null) {
|
271
|
+
if (tempNode == undefined) {
|
272
|
+
return isRight;
|
273
|
+
}
|
274
|
+
tempNode = tempNode.getRight();
|
275
|
+
}
|
276
|
+
if (tempNode === targetNode) {
|
277
|
+
isRight = true;
|
278
|
+
}
|
279
|
+
}
|
280
|
+
return isRight;
|
281
|
+
}
|
282
|
+
getCurrentNode() {
|
283
|
+
return this.currentNode;
|
284
|
+
}
|
285
|
+
setCurrentNodeById(id) {
|
286
|
+
var _a, _b;
|
287
|
+
if (id == undefined)
|
288
|
+
return;
|
289
|
+
var lastNode = this.currentNode;
|
290
|
+
this.currentNode = this.graph.get(id) || this.graph.get((_b = (_a = document.getElementById(id)) === null || _a === void 0 ? void 0 : _a.closest(".chord")) === null || _b === void 0 ? void 0 : _b.id) || lastNode;
|
291
|
+
if (this.currentNode == undefined) {
|
292
|
+
console.log(lastNode);
|
293
|
+
throw new Error("CurrentNode undefined although id is given: " + id);
|
294
|
+
}
|
295
|
+
}
|
296
|
+
setContainerId(containerId) {
|
297
|
+
this.containerId = containerId;
|
298
|
+
}
|
299
|
+
nextUp() {
|
300
|
+
var _a;
|
301
|
+
if (this.currentNode != undefined && ((_a = this.currentNode) === null || _a === void 0 ? void 0 : _a.getUp()) !== null) {
|
302
|
+
this.currentNode = this.currentNode.getUp();
|
303
|
+
}
|
304
|
+
return this.currentNode;
|
305
|
+
}
|
306
|
+
nextDown() {
|
307
|
+
var _a;
|
308
|
+
if (this.currentNode != undefined && ((_a = this.currentNode) === null || _a === void 0 ? void 0 : _a.getDown()) !== null) {
|
309
|
+
this.currentNode = this.currentNode.getDown();
|
310
|
+
}
|
311
|
+
return this.currentNode;
|
312
|
+
}
|
313
|
+
nextRight() {
|
314
|
+
var _a;
|
315
|
+
if (this.currentNode != undefined && ((_a = this.currentNode) === null || _a === void 0 ? void 0 : _a.getRight()) !== null) {
|
316
|
+
this.currentNode = this.currentNode.getRight();
|
317
|
+
}
|
318
|
+
return this.currentNode;
|
319
|
+
}
|
320
|
+
nextLeft() {
|
321
|
+
var _a;
|
322
|
+
if (this.currentNode != undefined && ((_a = this.currentNode) === null || _a === void 0 ? void 0 : _a.getLeft()) !== null) {
|
323
|
+
this.currentNode = this.currentNode.getLeft();
|
324
|
+
}
|
325
|
+
return this.currentNode;
|
326
|
+
}
|
327
|
+
nextMeasureRight() {
|
328
|
+
while (this.getCurrentNode().getRight().getDocElement().closest(".measure").id ===
|
329
|
+
this.getCurrentNode().getDocElement().closest(".measure").id) {
|
330
|
+
this.nextRight();
|
331
|
+
}
|
332
|
+
return this.currentNode;
|
333
|
+
}
|
334
|
+
nextMeasureLeft() {
|
335
|
+
while (this.getCurrentNode().getLeft().getDocElement().closest(".measure").id ===
|
336
|
+
this.getCurrentNode().getDocElement().closest(".measure").id) {
|
337
|
+
this.nextLeft();
|
338
|
+
}
|
339
|
+
return this.currentNode;
|
340
|
+
}
|
341
|
+
/**
|
342
|
+
* Go to next Element with given classname.
|
343
|
+
* Whatever comes first according to the classNames array.
|
344
|
+
* @param classNames
|
345
|
+
* @param direction
|
346
|
+
* @returns
|
347
|
+
*/
|
348
|
+
getNextClass(classNames, direction) {
|
349
|
+
var _a;
|
350
|
+
if (typeof classNames === "string")
|
351
|
+
classNames = [classNames];
|
352
|
+
var currentId = (_a = this.currentNode) === null || _a === void 0 ? void 0 : _a.getId();
|
353
|
+
if ([null, undefined].some(id => id == currentId))
|
354
|
+
return;
|
355
|
+
var nextIsNull = false;
|
356
|
+
do {
|
357
|
+
switch (direction) {
|
358
|
+
case "ArrowLeft":
|
359
|
+
case "left":
|
360
|
+
this.nextLeft();
|
361
|
+
break;
|
362
|
+
case "ArrowRight":
|
363
|
+
case "right":
|
364
|
+
this.nextRight();
|
365
|
+
break;
|
366
|
+
case "ArrowUp":
|
367
|
+
case "up":
|
368
|
+
this.nextUp();
|
369
|
+
break;
|
370
|
+
case "ArrowDown":
|
371
|
+
case "down":
|
372
|
+
this.nextDown();
|
373
|
+
break;
|
374
|
+
default:
|
375
|
+
console.error(direction + " is not allowed. Use left, right, up or down");
|
376
|
+
return;
|
377
|
+
}
|
378
|
+
nextIsNull = [null, undefined].some(n => this.currentNode == n);
|
379
|
+
} while (!classNames.some(cn => { var _a, _b; return (_b = (_a = this.currentNode) === null || _a === void 0 ? void 0 : _a.getDocElement()) === null || _b === void 0 ? void 0 : _b.classList.contains(cn); }) && !nextIsNull);
|
380
|
+
if (nextIsNull) {
|
381
|
+
this.setCurrentNodeById(currentId);
|
382
|
+
}
|
383
|
+
return this.currentNode;
|
384
|
+
}
|
385
|
+
/**
|
386
|
+
* Find node based on class Names. Will not change state and pointers of the graph.
|
387
|
+
* To change this.currentNode, use getNextClass instead.
|
388
|
+
* @param classNames
|
389
|
+
* @param direction
|
390
|
+
* @returns
|
391
|
+
*/
|
392
|
+
lookUp(classNames, direction) {
|
393
|
+
var _a;
|
394
|
+
if (typeof classNames === "string")
|
395
|
+
classNames = [classNames];
|
396
|
+
var currentId = (_a = this.currentNode) === null || _a === void 0 ? void 0 : _a.getId();
|
397
|
+
if ([null, undefined].some(id => id == currentId))
|
398
|
+
return;
|
399
|
+
var isNull = false;
|
400
|
+
var node = this.currentNode;
|
401
|
+
do {
|
402
|
+
switch (direction) {
|
403
|
+
case "ArrowLeft":
|
404
|
+
case "left":
|
405
|
+
node = node.getLeft();
|
406
|
+
break;
|
407
|
+
case "ArrowRight":
|
408
|
+
case "right":
|
409
|
+
node = node.getRight();
|
410
|
+
break;
|
411
|
+
case "ArrowUp":
|
412
|
+
case "up":
|
413
|
+
node = node.getUp();
|
414
|
+
break;
|
415
|
+
case "ArrowDown":
|
416
|
+
case "down":
|
417
|
+
node = node.getDown();
|
418
|
+
break;
|
419
|
+
default:
|
420
|
+
console.error(direction + " is not allowed. Use left, right, up or down");
|
421
|
+
return;
|
422
|
+
}
|
423
|
+
isNull = [null, undefined].some(n => node == n);
|
424
|
+
} while (!classNames.some(cn => { var _a; return (_a = node === null || node === void 0 ? void 0 : node.getDocElement()) === null || _a === void 0 ? void 0 : _a.classList.contains(cn); }) && !isNull);
|
425
|
+
return node;
|
426
|
+
}
|
427
|
+
//Check if ScoreGraph is at beginning of layer
|
428
|
+
isBOL() {
|
429
|
+
return this.currentNode.getLeft() === null && this.currentNode.getId().indexOf("BOL") !== -1;
|
430
|
+
}
|
431
|
+
}
|
432
|
+
exports.default = ScoreGraph;
|
@@ -0,0 +1,78 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
class ScoreNode {
|
4
|
+
constructor(id) {
|
5
|
+
this.id = id;
|
6
|
+
this.setDocElement();
|
7
|
+
}
|
8
|
+
hasNodeAnywhere(sn) {
|
9
|
+
if ([this.up, this.down, this.left, this.right].indexOf(sn) > -1) {
|
10
|
+
return true;
|
11
|
+
}
|
12
|
+
return false;
|
13
|
+
}
|
14
|
+
printElements() {
|
15
|
+
var u, d, r, l;
|
16
|
+
u = d = r = l = null;
|
17
|
+
var c = document.getElementById(this.id);
|
18
|
+
if (this.up !== null) {
|
19
|
+
u = document.getElementById(this.up.id);
|
20
|
+
}
|
21
|
+
if (this.down !== null) {
|
22
|
+
d = document.getElementById(this.down.id);
|
23
|
+
}
|
24
|
+
if (this.left !== null) {
|
25
|
+
l = document.getElementById(this.left.id);
|
26
|
+
}
|
27
|
+
if (this.right !== null) {
|
28
|
+
r = document.getElementById(this.right.id);
|
29
|
+
}
|
30
|
+
console.log("CURRENT", c, "UP", u, "DOWN", d, "LEFT", l, "RIGHT", r);
|
31
|
+
}
|
32
|
+
isBOL() {
|
33
|
+
return this.id.indexOf("BOL") > -1;
|
34
|
+
}
|
35
|
+
isLayer() {
|
36
|
+
return document.getElementById(this.id).classList.contains("layer");
|
37
|
+
}
|
38
|
+
getId() {
|
39
|
+
return this.id;
|
40
|
+
}
|
41
|
+
getUp() {
|
42
|
+
return this.up;
|
43
|
+
}
|
44
|
+
getDown() {
|
45
|
+
return this.down;
|
46
|
+
}
|
47
|
+
getLeft() {
|
48
|
+
return this.left;
|
49
|
+
}
|
50
|
+
getRight() {
|
51
|
+
return this.right;
|
52
|
+
}
|
53
|
+
getTimeCode() {
|
54
|
+
return this.timeCode;
|
55
|
+
}
|
56
|
+
getDocElement() {
|
57
|
+
return this.docElement || document.getElementById(this.id) || null;
|
58
|
+
}
|
59
|
+
setUp(sn) {
|
60
|
+
this.up = sn;
|
61
|
+
}
|
62
|
+
setDown(sn) {
|
63
|
+
this.down = sn;
|
64
|
+
}
|
65
|
+
setLeft(sn) {
|
66
|
+
this.left = sn;
|
67
|
+
}
|
68
|
+
setRight(sn) {
|
69
|
+
this.right = sn;
|
70
|
+
}
|
71
|
+
setTimeCode(tc) {
|
72
|
+
this.timeCode = tc;
|
73
|
+
}
|
74
|
+
setDocElement() {
|
75
|
+
this.docElement = document.getElementById(this.id);
|
76
|
+
}
|
77
|
+
}
|
78
|
+
exports.default = ScoreNode;
|