vibe-editor 0.0.6 → 0.0.7

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vibe-editor",
3
- "version": "0.0.6",
3
+ "version": "0.0.7",
4
4
  "main": "src/scripts/js/scripts/VIBE.js",
5
5
  "keywords": [],
6
6
  "author": "Matthias Nowakowski",
@@ -104,7 +104,7 @@ class Core {
104
104
  this.undoAnnotationStacks.push([annotCanvas, annotList]);
105
105
  annotCanvas.replaceWith(annotstate[0]);
106
106
  annotList.replaceWith(annotstate[1]);
107
- this.keyboardHandler.resetListeners();
107
+ this.globalKeyboardHandler.resetListeners();
108
108
  this.container.dispatchEvent(new Event("annotationCanvasChanged"));
109
109
  }
110
110
  resolve(true);
@@ -136,7 +136,7 @@ class Core {
136
136
  this.undoAnnotationStacks.push([annotCanvas, annotList]);
137
137
  annotCanvas.replaceWith(annotstate[0]);
138
138
  annotList.replaceWith(annotstate[1]);
139
- this.keyboardHandler.resetListeners();
139
+ this.globalKeyboardHandler.resetListeners();
140
140
  }
141
141
  resolve(true);
142
142
  return;
@@ -303,6 +303,7 @@ class Core {
303
303
  d = new XMLSerializer().serializeToString(data);
304
304
  u = false;
305
305
  break;
306
+ case null:
306
307
  case undefined:
307
308
  d = new mei_template_1.default().emptyMEI();
308
309
  u = false;
@@ -472,6 +473,7 @@ class Core {
472
473
  this.labelHandler
473
474
  .setContainerId(this.containerId)
474
475
  .setCurrentMEI(this.currentMEIDoc)
476
+ .setm2s(this.m2s)
475
477
  .reset();
476
478
  this.insertModeHandler
477
479
  .setContainerId(this.containerId)
@@ -480,7 +482,7 @@ class Core {
480
482
  .setMusicProcessor(this.musicProcessor)
481
483
  .setDeleteHandler(this.deleteHandler)
482
484
  .setLabelHandler(this.labelHandler)
483
- .activateHarmonyMode()
485
+ //.activateHarmonyMode()
484
486
  //.activateSelectionMode()
485
487
  .setInsertCallback(this.insert)
486
488
  .setDeleteCallback(this.delete)
@@ -634,7 +636,6 @@ class Core {
634
636
  (_a = document.getElementById(this.containerId).querySelector("#interactionOverlay #scoreRects")) === null || _a === void 0 ? void 0 : _a.remove();
635
637
  var scoreRects = document.createElementNS(constants_1.constants._SVGNS_, "svg");
636
638
  scoreRects.setAttribute("id", "scoreRects");
637
- //scoreRects.setAttribute("viewBox", ["0", "0", rootWidth.toString(), rootHeigth.toString()].join(" "))
638
639
  Array.from(refSVG.attributes).forEach(a => {
639
640
  if (!["id", "width", "height"].includes(a.name)) {
640
641
  this.interactionOverlay.setAttribute(a.name, a.value);
@@ -644,20 +645,28 @@ class Core {
644
645
  refSVG.insertAdjacentElement("beforebegin", this.interactionOverlay);
645
646
  if (loadBBoxes) {
646
647
  var svgBoxes = Array.from(document.getElementById(this.containerId)
647
- .querySelectorAll(".definition-scale :is(g,path)")) //".definition-scale path, .definition-scale .bounding-box"))
648
+ .querySelectorAll(".definition-scale :is(g,path)"))
648
649
  .filter(el => {
649
650
  var condition = !["system", "measure", "layer", "ledgerLines", "flag"].some(cn => el.classList.contains(cn));
650
651
  return condition;
651
652
  });
652
653
  var reorderedBoxes = new Array(); // reorder so that dependent elements are already in array
653
- svgBoxes.forEach(sb => {
654
- if (sb.querySelector(":scope > use, :scope > rect, :scope > path") === null) {
655
- reorderedBoxes.push(sb);
656
- }
657
- else {
658
- reorderedBoxes.unshift(sb);
659
- }
654
+ var classOrder = ["harm", "slur", "tie", "tupleNum", "tupletBracket", "clef", "meterSig", "keySig", "notehead", "stem", "rest", "barLine", "staff"];
655
+ let filteredElements;
656
+ classOrder.forEach(c => {
657
+ filteredElements = svgBoxes.filter(e => e.classList.contains(c));
658
+ reorderedBoxes.push(...filteredElements);
660
659
  });
660
+ filteredElements = svgBoxes.filter(e => e.classList.length === 0 || !classOrder.some(c => e.classList.contains(c)));
661
+ // {
662
+ // if(e.classList.length === 0){
663
+ // return e
664
+ // }
665
+ // if(!classOrder.some(c => e.classList.contains(c))){
666
+ // return e
667
+ // }
668
+ // })
669
+ reorderedBoxes.push(...filteredElements);
661
670
  // staff always has to be on top of sibling elements, so that one can interact with score elements
662
671
  reorderedBoxes = reorderedBoxes.reverse();
663
672
  async function computeCoords(box, interactionOverlay) {
@@ -182,7 +182,7 @@ class VIBE {
182
182
  });
183
183
  }
184
184
  this.tabbar
185
- .setImportCallback(this.coreInstance.loadDataHandler)
185
+ .setLoadDataCallback(this.coreInstance.loadDataHandler)
186
186
  .setAlignCallback(this.coreInstance.alignFunctionHandler)
187
187
  .setGetMEICallback(this.coreInstance.getMEI.bind(this.coreInstance));
188
188
  //block everthing when firefox is not at least version 114.0
@@ -25,7 +25,7 @@ class HarmonyLabel {
25
25
  this.isText = true;
26
26
  }
27
27
  else if (isEmpty) {
28
- this.element.dispatchEvent(new Event("emptyHarmonyText"));
28
+ this.element.textContent = "";
29
29
  }
30
30
  else {
31
31
  this.isBassoContinuo = true;
@@ -366,6 +366,7 @@ class Tabbar {
366
366
  }
367
367
  this.colorGroup.append(ReactWrapper.createColorPicker("colorPicker", handleColor.bind(this)));
368
368
  this.fileSelectGroup = cq.getContainer(this.containerId).querySelector("#fileSelectGroup");
369
+ this.fileSelectGroup.append(dc.makeNewButton("Empty Score", "emptyScoreBtn", buttonStyleDarkOutline));
369
370
  this.fileSelectGroup.append(dc.makeNewInput("importAudioFile", "file", ""));
370
371
  this.fileSelectGroup.append(dc.makeNewButton("Import Audiofile", "importAudioFileBtn", buttonStyleDarkOutline));
371
372
  this.fileSelectGroup.append(dc.makeNewInput("importXML", "file", ""));
@@ -516,10 +517,11 @@ class Tabbar {
516
517
  cq.getContainer(this.containerId).querySelector("#importXML").addEventListener("input", function (e) {
517
518
  var fr = new FileReader();
518
519
  fr.onload = function () {
519
- that.importCallback("", fr.result, false, constants_1.constants._TARGETDIVID_).then(mei => {
520
+ that.loadDataCallback("", fr.result, false, constants_1.constants._TARGETDIVID_).then(mei => {
520
521
  var meiXml = meioperations.mergeSectionScoreDefToLayer(mei);
521
- meiXml = meioperations.mergeArticToParent(meiXml);
522
- that.importCallback("", meiXml, false, constants_1.constants._TARGETDIVID_);
522
+ meiXml = meioperations.mergeNotechildrenToAttributes(meiXml);
523
+ meiXml = meioperations.adjustOrderNumbers(meiXml);
524
+ that.loadDataCallback("", meiXml, false, constants_1.constants._TARGETDIVID_);
523
525
  that.align(null, null);
524
526
  });
525
527
  };
@@ -560,6 +562,9 @@ class Tabbar {
560
562
  that.download(fileName, mei);
561
563
  });
562
564
  });
565
+ cq.getContainer(this.containerId).querySelector("#emptyScoreBtn").addEventListener("click", function () {
566
+ that.loadDataCallback("", null, false, constants_1.constants._TARGETDIVID_).then(() => cq.getContainer(that.containerId).querySelectorAll("#annotationCanvas > g").forEach(g => g.remove()));
567
+ });
563
568
  }
564
569
  /**
565
570
  * Call the alignCallback with parameters. Only when the audioBlob and audioFile are defined, an alignment can take place.
@@ -673,8 +678,8 @@ class Tabbar {
673
678
  * Callback from Core, so that imported mei or musicxml can be loaded in the editor
674
679
  * @param importCallback
675
680
  */
676
- setImportCallback(importCallback) {
677
- this.importCallback = importCallback;
681
+ setLoadDataCallback(loadDataCallback) {
682
+ this.loadDataCallback = loadDataCallback;
678
683
  return this;
679
684
  }
680
685
  setAlignCallback(alignCallback) {
@@ -27,6 +27,8 @@ class AnnotationChangeHandler {
27
27
  this.dragAnnotEndEvent = new Event("dragAnnotEnd");
28
28
  this.isInteracting = false;
29
29
  this.factor = 100;
30
+ this.positionx = 0;
31
+ this.positiony = 0;
30
32
  }
31
33
  setListeners() {
32
34
  //if(document.getElementById(this.containerId).querySelector(".sidebar.openSidebar") != null) return
@@ -74,7 +76,7 @@ class AnnotationChangeHandler {
74
76
  that.interactTarget.dispatchEvent(that.annotResizedEvent);
75
77
  that.isInteracting = false;
76
78
  }
77
- },
79
+ }
78
80
  })
79
81
  .draggable({
80
82
  listeners: {
@@ -86,12 +88,12 @@ class AnnotationChangeHandler {
86
88
  that.isInteracting = false;
87
89
  }
88
90
  },
89
- modifiers: [
90
- interactjs_1.default.modifiers.restrictRect({
91
- restriction: 'parent',
92
- endOnly: true
93
- })
94
- ]
91
+ // modifiers: [
92
+ // interact.modifiers.restrictRect({
93
+ // restriction: 'parent',
94
+ // endOnly: true
95
+ // })
96
+ // ]
95
97
  });
96
98
  this.lineListener = interactjs_1.default("#" + this.containerId + " #interactionOverlay .lineDragRect.x1")
97
99
  .draggable({
@@ -29,6 +29,8 @@ class DeleteHandler {
29
29
  this.backSpaceHandler = (function backSpaceHandler(e) {
30
30
  if (!cq.hasActiveElement(this.containerId))
31
31
  return;
32
+ if (cq.getContainer(this.containerId).querySelector("[contenteditable=\"true\"]"))
33
+ return;
32
34
  if (e.code !== "Backspace")
33
35
  return;
34
36
  var hasRests = false;
@@ -63,52 +63,65 @@ class InsertModeHandler {
63
63
  .resetListeners();
64
64
  this.deleteHandler.setListeners();
65
65
  (_a = this.annotations) === null || _a === void 0 ? void 0 : _a.setm2s(this.m2s);
66
+ this.labelHandler.deactivateHarmonyHighlight();
66
67
  //this.annotations?.updateCanvas()
67
68
  //this.annotations?.resetTextListeners() // annotations should also be interactable when in notation mode
68
69
  //this.activateSelectionMode()
69
70
  }
70
71
  activateAnnotationMode() {
71
- var _a;
72
+ var _a, _b;
72
73
  this.insertDeactivate();
73
74
  var that = this;
74
75
  this.keyMode = false;
75
76
  this.clickInsertMode = false;
76
- var selectedButton = (_a = this.container.querySelector("#annotGroupKM button.selected")) === null || _a === void 0 ? void 0 : _a.id;
77
- switch (selectedButton) {
78
- case "harmonyAnnotButton":
79
- this.activateHarmonyMode();
80
- this.harmonyMode = true;
81
- this.annotationMode = false;
82
- break;
83
- case "staticTextButton":
84
- case "linkedAnnotButton":
85
- this.container.classList.remove("harmonyMode");
86
- this.annotationMode = true;
87
- this.harmonyMode = false;
88
- if (this.annotations == undefined) {
89
- this.annotations = new Annotations_1.default(this.containerId);
90
- }
91
- else {
92
- this.annotations.updateCanvas();
93
- }
94
- this.annotations.setAnnotationCanvas(cq.getInteractOverlay(this.containerId).querySelector("#annotationCanvas"));
95
- this.annotations.updateLinkedTexts();
96
- break;
77
+ var selectedButtonId = (_a = this.container.querySelector("#annotGroupKM button.selected")) === null || _a === void 0 ? void 0 : _a.id;
78
+ setAnnotationState(selectedButtonId);
79
+ // the annotationgroup buttons are just created, when AnnnotationTabBtn is clicked
80
+ (_b = Array.from(this.container.querySelectorAll("#annotGroupKM button"))) === null || _b === void 0 ? void 0 : _b.forEach(b => {
81
+ b.addEventListener("click", setButtonId);
82
+ });
83
+ function setButtonId(e) {
84
+ selectedButtonId = e.target.id;
85
+ setAnnotationState(selectedButtonId);
86
+ }
87
+ function setAnnotationState(selectedButtonId) {
88
+ switch (selectedButtonId) {
89
+ case "harmonyAnnotButton":
90
+ that.harmonyMode = true;
91
+ that.annotationMode = false;
92
+ that.isGlobal = false;
93
+ that.activateHarmonyMode();
94
+ break;
95
+ case "staticTextButton":
96
+ case "linkedAnnotButton":
97
+ that.container.classList.remove("harmonyMode");
98
+ that.annotationMode = true;
99
+ that.harmonyMode = false;
100
+ if (that.annotations == undefined) {
101
+ that.annotations = new Annotations_1.default(that.containerId);
102
+ }
103
+ else {
104
+ that.annotations.updateCanvas();
105
+ }
106
+ that.annotations.setAnnotationCanvas(cq.getInteractOverlay(that.containerId).querySelector("#annotationCanvas"));
107
+ that.annotations.updateLinkedTexts();
108
+ break;
109
+ }
110
+ that.annotations
111
+ .setContainerId(that.containerId)
112
+ .setm2s(that.m2s)
113
+ .setMusicProcessor(that.musicPlayer)
114
+ //.setToFront()
115
+ .setListeners()
116
+ .setMenuClickHandler();
97
117
  }
98
- this.annotations
99
- .setContainerId(this.containerId)
100
- .setm2s(this.m2s)
101
- .setMusicProcessor(this.musicPlayer)
102
- //.setToFront()
103
- .setListeners()
104
- .setMenuClickHandler();
105
118
  }
106
119
  activateHarmonyMode() {
107
120
  if (this.labelHandler == undefined) {
108
121
  this.labelHandler = new LabelHandler_1.default(this.containerId);
109
122
  }
110
123
  //Activate/ Deactivate Global functions according to selected harmonymode
111
- if (this.container.querySelector("#activateHarm.selected, #harmonyAnnotButton.selected") !== null) {
124
+ if (!this.isGlobal) {
112
125
  this.insertDeactivate();
113
126
  this.container.classList.add("harmonyMode");
114
127
  this.isGlobal = false;
@@ -183,7 +183,7 @@ class LabelHandler {
183
183
  * Open Inputbox for (first) selected Note
184
184
  */
185
185
  harmonyLabelHandler(e) {
186
- var nextNote = this.vrvSVG.querySelector(".note.marked, .chord.marked");
186
+ var nextNote = this.vrvSVG.querySelector(".note.marked, .chord.marked, .rest.marked");
187
187
  if (nextNote === null) {
188
188
  return;
189
189
  }
@@ -328,7 +328,7 @@ class LabelHandler {
328
328
  if (refElementClass === "harm") { // change existing harm
329
329
  let harmLabel = label;
330
330
  harmLabel.modifyLabel(text);
331
- //this.currentMEI.getElementById(harmLabel.getElement().id).replaceWith(harmLabel.getElement())
331
+ this.currentMEI.getElementById(harmLabel.getElement().id).replaceWith(harmLabel.getElement());
332
332
  }
333
333
  else if (["note", "chord"].some(cn => refElementClass === cn)) { //create new harm
334
334
  let harmLabel = this.setLabel(labelDiv.textContent, labelDiv.closest("g").getAttribute("refElementId"));
@@ -382,8 +382,8 @@ class LabelHandler {
382
382
  text.setAttribute("y", (posy).toString());
383
383
  textForeignObject.setAttribute("x", "0");
384
384
  textForeignObject.setAttribute("y", "0");
385
- textForeignObject.setAttribute("height", "1000"); //(textDiv.clientHeight + 2 * rectPadding).toString())
386
- textForeignObject.setAttribute("width", "1000"); //(textDiv.clientHeight + 2 * rectPadding).toString())
385
+ // textForeignObject.setAttribute("height", "1000") //(textDiv.clientHeight + 2 * rectPadding).toString())
386
+ // textForeignObject.setAttribute("width", "1000")//(textDiv.clientHeight + 2 * rectPadding).toString())
387
387
  this.labelCanvas.appendChild(textGroup);
388
388
  textGroup.appendChild(text);
389
389
  textForeignObject.appendChild(textDiv);
@@ -89,7 +89,13 @@ class PhantomElementHandler {
89
89
  }
90
90
  this.isTrackingMouse = true;
91
91
  var target = e.target;
92
- target = target.closest("g");
92
+ try {
93
+ target = target.closest("g");
94
+ }
95
+ catch (error) {
96
+ console.log(e, target);
97
+ return;
98
+ }
93
99
  var options = {};
94
100
  if (target === null || target === void 0 ? void 0 : target.classList.contains("staffLine")) {
95
101
  options["staffLineId"] = target.id;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.setArticulation = exports.getTimestamp = exports.getElementTimestampById = exports.insertTempo = exports.insertMeter = exports.replaceMeterInScoreDef = exports.insertKey = exports.replaceKeyInScoreDef = exports.insertClef = exports.replaceClefinScoreDef = exports.paste = exports.createTuplet = exports.addLayerForStaff = exports.removeStaff = exports.addStaff = exports.removeMeasure = exports.addMeasure = exports.cleanUp = exports.elementIsOverfilling = exports.changeDur = exports.changeDurationsInLayer = exports.fillLayerWithRests = exports.fillWithRests = exports.disableFeatures = exports.changeMeter = exports.transposeByStep = exports.mergeArticToParent = exports.mergeSectionScoreDefToLayer = exports.adjustAccids = exports.extrapolateMeter = exports.getAbsoluteRatio = exports.connectNotes = exports.addToMEI = exports.getMeterRatioLocal = exports.removeFromMEI = void 0;
3
+ exports.setArticulation = exports.getTimestamp = exports.getElementTimestampById = exports.insertTempo = exports.insertMeter = exports.replaceMeterInScoreDef = exports.insertKey = exports.replaceKeyInScoreDef = exports.insertClef = exports.replaceClefinScoreDef = exports.paste = exports.createTuplet = exports.addLayerForStaff = exports.removeStaff = exports.addStaff = exports.removeMeasure = exports.addMeasure = exports.adjustOrderNumbers = exports.cleanUp = exports.elementIsOverfilling = exports.changeDur = exports.changeDurationsInLayer = exports.fillLayerWithRests = exports.fillWithRests = exports.disableFeatures = exports.changeMeter = exports.transposeByStep = exports.mergeNotechildrenToAttributes = exports.mergeArticToParent = exports.mergeSectionScoreDefToLayer = exports.adjustAccids = exports.extrapolateMeter = exports.getAbsoluteRatio = exports.connectNotes = exports.addToMEI = exports.getMeterRatioLocal = exports.removeFromMEI = void 0;
4
4
  const meiConverter = require("./MEIConverter");
5
5
  const random_1 = require("./random");
6
6
  const constants_1 = require("../constants");
@@ -980,6 +980,14 @@ function mergeArticToParent(currentMEI) {
980
980
  return currentMEI;
981
981
  }
982
982
  exports.mergeArticToParent = mergeArticToParent;
983
+ function mergeNotechildrenToAttributes(currentMEI) {
984
+ currentMEI.querySelectorAll("note > *").forEach(a => {
985
+ a.parentElement.setAttribute(a.tagName, a.getAttribute(a.tagName));
986
+ a.remove();
987
+ });
988
+ return currentMEI;
989
+ }
990
+ exports.mergeNotechildrenToAttributes = mergeNotechildrenToAttributes;
983
991
  /**
984
992
  * Transpose marked notes according to direcion (up or down)
985
993
  * @param currentMEI
@@ -1137,65 +1145,6 @@ function fillLayerWithRests(layer, currentMEI) {
1137
1145
  }
1138
1146
  }
1139
1147
  exports.fillLayerWithRests = fillLayerWithRests;
1140
- /**
1141
- * Fill Empty Space with rest
1142
- * @deprecated
1143
- * @param currentMEI
1144
- */
1145
- function _fillWithRests(currentMEI) {
1146
- var staffDef = currentMEI.getElementsByTagName("staffDef").item(0);
1147
- var meterCount;
1148
- var meterUnit;
1149
- var meterRatio;
1150
- if (staffDef.getAttribute(constants_1.constants._METERCOUNT_) !== null && staffDef.getAttribute(constants_1.constants._METERUNIT_) !== null) {
1151
- meterCount = staffDef.getAttribute(constants_1.constants._METERCOUNT_);
1152
- meterUnit = staffDef.getAttribute(constants_1.constants._METERUNIT_);
1153
- meterRatio = parseInt(meterCount) / parseInt(meterUnit);
1154
- }
1155
- else {
1156
- var meterRatio = getMeterRatioGlobal(currentMEI);
1157
- meterCount = (meterRatio * 4).toString();
1158
- meterUnit = "4";
1159
- }
1160
- currentMEI.querySelectorAll("measure").forEach(m => {
1161
- m.querySelectorAll("staff").forEach(s => {
1162
- s.querySelectorAll("layer").forEach((l, idx) => {
1163
- //mRest for empty Layer
1164
- if (l.childElementCount === 0) {
1165
- if (idx === 0) {
1166
- var restEl = document.createElementNS(constants_1.constants._MEINS_, "mRest");
1167
- l.appendChild(restEl);
1168
- }
1169
- else { // remove 1+ empty layer
1170
- l.remove();
1171
- }
1172
- }
1173
- else {
1174
- var actualMeterFill = getAbsoluteRatio(l);
1175
- var ratioDiff = Math.abs(actualMeterFill - meterRatio);
1176
- var smallestValue = gcd(ratioDiff);
1177
- //var restDurs = findDotsRecursive(ratioDiff, gcd(ratioDiff))
1178
- if (Number.isInteger(ratioDiff / smallestValue) && ratioDiff > 0) {
1179
- var leftRatio = ratioDiff;
1180
- var durArr = new Array();
1181
- while (!Number.isInteger(1 / leftRatio)) {
1182
- var leftRatio = ratioDiff - smallestValue;
1183
- durArr.push(1 / smallestValue);
1184
- }
1185
- durArr.push(1 / leftRatio);
1186
- durArr = durArr.reverse();
1187
- durArr.forEach(dur => {
1188
- var newRest = currentMEI.createElementNS(constants_1.constants._MEINS_, "rest");
1189
- newRest.setAttribute("dur", dur.toString());
1190
- l.appendChild(newRest);
1191
- });
1192
- }
1193
- //console.log(document.getElementById(l.id), ratioDiff, gcd(ratioDiff), durArr)
1194
- }
1195
- });
1196
- });
1197
- });
1198
- }
1199
1148
  /**
1200
1149
  * Replace given id with rest
1201
1150
  * @param element element from svg
@@ -1519,6 +1468,27 @@ function adjustRests(currentMEI) {
1519
1468
  }
1520
1469
  });
1521
1470
  }
1471
+ function adjustOrderNumbers(currentMEI) {
1472
+ function setN(nodeList) {
1473
+ var tagCounter = new Map();
1474
+ nodeList.forEach(n => {
1475
+ if (!tagCounter.has(n.tagName)) {
1476
+ tagCounter.set(n.tagName, 1);
1477
+ }
1478
+ n.setAttribute("n", tagCounter.get(n.tagName).toString());
1479
+ tagCounter.set(n.tagName, tagCounter.get(n.tagName) + 1);
1480
+ });
1481
+ }
1482
+ setN(currentMEI.querySelectorAll("measure"));
1483
+ currentMEI.querySelectorAll("measure").forEach(m => {
1484
+ setN(m.querySelectorAll("staff"));
1485
+ });
1486
+ currentMEI.querySelectorAll("staff").forEach(s => {
1487
+ setN(s.querySelectorAll("layer"));
1488
+ });
1489
+ return currentMEI;
1490
+ }
1491
+ exports.adjustOrderNumbers = adjustOrderNumbers;
1522
1492
  /**
1523
1493
  * Give harm new start id if related note was included in chord during process
1524
1494
  * @param currentMEI
@@ -427,9 +427,24 @@ class SVGEditor {
427
427
  }
428
428
  setActiveLayer() {
429
429
  var container = cq.getContainer(this.containerId);
430
- if (!container.querySelector(".layer.activeLayer")) {
431
- container.querySelectorAll(".layer[n='1']").forEach(l => l.classList.add("activeLayer"));
432
- }
430
+ var staffN = "0";
431
+ // find out if all staves have at least one active layer
432
+ container.querySelectorAll(".staff").forEach(s => {
433
+ var n = s.getAttribute("n");
434
+ if (parseInt(n) > parseInt(staffN))
435
+ staffN = n;
436
+ });
437
+ var i = 1;
438
+ do {
439
+ let activeLayer = container.querySelector(`.staff[n='${i}'] > .layer.activeLayer`);
440
+ if (!activeLayer) {
441
+ container.querySelectorAll(`.staff[n='${i}'] > .layer[n='1']`).forEach(l => l.classList.add("activeLayer"));
442
+ }
443
+ i += 1;
444
+ } while (i <= parseInt(staffN));
445
+ // if (!container.querySelector(".layer.activeLayer")) {
446
+ // container.querySelectorAll(".layer[n='1']").forEach(l => l.classList.add("activeLayer"))
447
+ // }
433
448
  container.querySelectorAll(".activeLayer").forEach(al => {
434
449
  var staffN = al.closest(".staff").getAttribute("n");
435
450
  var layerN = al.getAttribute("n");
@@ -471,7 +471,7 @@ text{
471
471
 
472
472
 
473
473
 
474
- .annotLinkedText .annotFO{
474
+ .annotLinkedText .annotDiv{
475
475
  /*background-color: rgba(255, 255, 153, 0.8);*/
476
476
  background-color: rgba(0, 0, 0, 0.1);
477
477
  border-radius: 0px 10px 10px 10px;
@@ -618,17 +618,20 @@ g.currentlyPlaying *{
618
618
  .labelDiv{
619
619
  border: 2px solid black;
620
620
  border-radius: 10px;
621
- height: fit-content;
621
+ /* height: fit-content;
622
622
  width: fit-content;
623
- min-width: 50px;
623
+ min-width: 50px; */
624
624
  background-color: beige;
625
- font-size: 40px;
626
- font-family: 'Times New Roman', Times, serif;
625
+ /* font-size: 40px;
626
+ font-family: 'Times New Roman', Times, serif; */
627
627
  }
628
628
 
629
- .labekFO{
629
+ .labelFO{
630
+ font-size: 16pt;
631
+ font-family: 'Times New Roman', Times, serif;
632
+ text-align: center;
633
+ width: 10%;
630
634
  height: 100%;
631
- width: 100%;
632
635
  }
633
636
 
634
637
  /* KEYMODE */