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;
|