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,618 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
const dc = require("../utils/DOMCreator");
|
4
|
+
const bootstrap_1 = require("bootstrap");
|
5
|
+
//import Toggle from "bootstrap5-toggle"
|
6
|
+
const interactjs_1 = require("interactjs");
|
7
|
+
const constants_1 = require("../constants");
|
8
|
+
const cq = require("../utils/convenienceQueries");
|
9
|
+
const buttonStyleDarkOutline = "btn btn-outline-dark btn-sm";
|
10
|
+
const buttonStyleDark = "btn btn-dark btn-md";
|
11
|
+
const smuflFont = "smufl";
|
12
|
+
const alterBtn = "alterBtn";
|
13
|
+
const selectedFlag = "selected";
|
14
|
+
/**
|
15
|
+
* Actually this class is deprecated due to different approaches in toggling between symbols and mods.
|
16
|
+
* use Tabbar instead.
|
17
|
+
*/
|
18
|
+
class Toolbar {
|
19
|
+
//private task: Evaluation
|
20
|
+
constructor(options = null, containerId) {
|
21
|
+
this.createAnnotListFunction = (function (e) {
|
22
|
+
var t = e.target;
|
23
|
+
if (t.closest(".vse-container").id !== this.containerId)
|
24
|
+
return;
|
25
|
+
this.createAnnotList(e);
|
26
|
+
}).bind(this);
|
27
|
+
this.closeHandlerMouse = (function closeHandlerMouse(e) {
|
28
|
+
e.preventDefault();
|
29
|
+
Array.from(cq.getContainer(this.containerId).querySelectorAll(".dropdown-toggle")).forEach(dd => {
|
30
|
+
//this.closeDropdown(dd)
|
31
|
+
});
|
32
|
+
}).bind(this);
|
33
|
+
// Macht momentan nix
|
34
|
+
this.closeHandlerKey = (function closeHandlerMouse(e) {
|
35
|
+
if (!cq.hasActiveElement(this.containerId))
|
36
|
+
return;
|
37
|
+
if (e.key === "Escape") {
|
38
|
+
//e.preventDefault()
|
39
|
+
Array.from(cq.getContainer(this.containerId).querySelectorAll(".dropdown-toggle")).forEach(dd => {
|
40
|
+
//this.closeDropdown(dd)
|
41
|
+
});
|
42
|
+
}
|
43
|
+
}).bind(this);
|
44
|
+
/**
|
45
|
+
* MAke Buttons in Toolbar selectable exclusively
|
46
|
+
*/
|
47
|
+
this.exclusiveSelectHandler = (function exclusiveSelectHandler(e) {
|
48
|
+
this.exclusiveSelect(e);
|
49
|
+
}).bind(this);
|
50
|
+
this.sidebarHandler = (function sidebarHandler(e) {
|
51
|
+
//toggle
|
52
|
+
if (this.sidebar.classList.contains("closedSidebar")) {
|
53
|
+
//document.getElementById("sidebarContainer").style.width = sidebarWidthRatio
|
54
|
+
Array.from(cq.getContainer(this.containerId).querySelectorAll(".closedSidebar")).forEach(el => {
|
55
|
+
el.classList.remove("closedSidebar");
|
56
|
+
el.classList.add("openSidebar");
|
57
|
+
});
|
58
|
+
//btnToolbar.style.marginLeft = sidebarWidthRatio
|
59
|
+
}
|
60
|
+
else {
|
61
|
+
//document.getElementById("sidebarContainer").style.width = "0"
|
62
|
+
Array.from(cq.getContainer(this.containerId).querySelectorAll(".openSidebar")).forEach(el => {
|
63
|
+
el.removeAttribute("style");
|
64
|
+
el.classList.add("closedSidebar");
|
65
|
+
el.classList.remove("openSidebar");
|
66
|
+
});
|
67
|
+
//btnToolbar.style.marginLeft = "0"
|
68
|
+
}
|
69
|
+
}).bind(this);
|
70
|
+
/**
|
71
|
+
* Creates second toolbar depending on selected option
|
72
|
+
*/
|
73
|
+
this.customToolbarHandler = (function customToolbarHandler(e) {
|
74
|
+
var target = e.target;
|
75
|
+
var tID = target.id;
|
76
|
+
this.removeAllCustomGroups();
|
77
|
+
switch (tID) {
|
78
|
+
case "clickInsert":
|
79
|
+
this.clickInsertHandler();
|
80
|
+
break;
|
81
|
+
case "keyMode":
|
82
|
+
this.keyModeHandler();
|
83
|
+
break;
|
84
|
+
case "activateAnnot":
|
85
|
+
this.annotHandler();
|
86
|
+
break;
|
87
|
+
case "activateHarm":
|
88
|
+
this.harmHandler();
|
89
|
+
break;
|
90
|
+
}
|
91
|
+
if (target.textContent === cq.getContainer(this.containerId).querySelector("#insertMode").textContent) {
|
92
|
+
this.removeAllCustomGroups();
|
93
|
+
}
|
94
|
+
}).bind(this);
|
95
|
+
this.containerId = containerId;
|
96
|
+
if (options !== null) {
|
97
|
+
this.options = options;
|
98
|
+
}
|
99
|
+
}
|
100
|
+
createToolbars() {
|
101
|
+
this.sideBarGroup = cq.getContainer(this.containerId).querySelector("#sideBarGroup");
|
102
|
+
var toggleBtn = dc.makeNewButton("", "toggleSidebar", buttonStyleDarkOutline + " closedSidebar");
|
103
|
+
this.sideBarGroup.append(toggleBtn);
|
104
|
+
this.createSideBar();
|
105
|
+
this.createMainToolbar();
|
106
|
+
this.createCustomToolbar();
|
107
|
+
this.addElementsToBootstrap();
|
108
|
+
this.setListeners();
|
109
|
+
}
|
110
|
+
createSideBar() {
|
111
|
+
this.createModList();
|
112
|
+
cq.getContainer(this.containerId).querySelectorAll("#sidebarList a, #timeDiv, #tempoDiv").forEach(sa => {
|
113
|
+
sa.setAttribute("draggable", "true");
|
114
|
+
});
|
115
|
+
this.createAnnotList();
|
116
|
+
this.optionalButtons();
|
117
|
+
}
|
118
|
+
createModList() {
|
119
|
+
this.sidebar = cq.getContainer(this.containerId).querySelector("#sidebarContainer");
|
120
|
+
var accordeon = dc.makeNewDiv("sidebarList", "accordion");
|
121
|
+
this.sidebar.appendChild(accordeon);
|
122
|
+
//Keysignatures
|
123
|
+
accordeon.appendChild(this.createKeySigAccItem());
|
124
|
+
//Music Key
|
125
|
+
accordeon.appendChild(this.createClefAccItem());
|
126
|
+
//Time Signature
|
127
|
+
accordeon.appendChild(this.createTimeSigAccItem());
|
128
|
+
//Tempo
|
129
|
+
//accordeon.appendChild(this.createTempoAccItem())
|
130
|
+
}
|
131
|
+
createKeySigAccItem() {
|
132
|
+
var keySelectItem = dc.makeNewAccordionItem("sidebarList", "selectKey", "selectKeyHeader", "selectKeyBtn", "Key", buttonStyleDark, "selectKeyDiv");
|
133
|
+
var keyListCMajRow = dc.makeNewDiv("keyListCDIV", "row");
|
134
|
+
var keyListCMaj = dc.makeNewDiv("keyListC", "list-group flex-fill col");
|
135
|
+
keySelectItem.querySelector("#selectKeyDiv").appendChild(keyListCMajRow);
|
136
|
+
keyListCMajRow.appendChild(keyListCMaj);
|
137
|
+
keyListCMaj.appendChild(dc.makeNewAElement("======", "KeyCMaj", "list-group-item list-group-item-action " + smuflFont, "#", true));
|
138
|
+
var keyListSignedRow = dc.makeNewDiv("keyListCrossDIV", "col row g-0");
|
139
|
+
var keyListCross = dc.makeNewDiv("keyListCross", "list-group flex-fill col");
|
140
|
+
keySelectItem.querySelector("#selectKeyDiv").appendChild(keyListSignedRow);
|
141
|
+
keyListSignedRow.appendChild(keyListCross);
|
142
|
+
keyListCross.appendChild(dc.makeNewAElement("======", "KeyGMaj", "list-group-item list-group-item-action " + smuflFont, "#", true));
|
143
|
+
keyListCross.appendChild(dc.makeNewAElement("======", "KeyDMaj", "list-group-item list-group-item-action " + smuflFont, "#", true));
|
144
|
+
keyListCross.appendChild(dc.makeNewAElement("======", "KeyAMaj", "list-group-item list-group-item-action " + smuflFont, "#", true));
|
145
|
+
keyListCross.appendChild(dc.makeNewAElement("======", "KeyEMaj", "list-group-item list-group-item-action " + smuflFont, "#", true));
|
146
|
+
keyListCross.appendChild(dc.makeNewAElement("======", "KeyBMaj", "list-group-item list-group-item-action " + smuflFont, "#", true));
|
147
|
+
keyListCross.appendChild(dc.makeNewAElement("======", "KeyF#Maj", "list-group-item list-group-item-action " + smuflFont, "#", true));
|
148
|
+
var keyListB = dc.makeNewDiv("keyListB", "list-group flex-fill col");
|
149
|
+
keyListSignedRow.appendChild(keyListB);
|
150
|
+
keyListB.appendChild(dc.makeNewAElement("======", "KeyFMaj", "list-group-item list-group-item-action " + smuflFont, "#", true));
|
151
|
+
keyListB.appendChild(dc.makeNewAElement("======", "KeyBbMaj", "list-group-item list-group-item-action " + smuflFont, "#", true));
|
152
|
+
keyListB.appendChild(dc.makeNewAElement("======", "KeyEbMaj", "list-group-item list-group-item-action " + smuflFont, "#", true));
|
153
|
+
keyListB.appendChild(dc.makeNewAElement("======", "KeyAbMaj", "list-group-item list-group-item-action " + smuflFont, "#", true));
|
154
|
+
keyListB.appendChild(dc.makeNewAElement("======", "KeyDbMaj", "list-group-item list-group-item-action " + smuflFont, "#", true));
|
155
|
+
keyListB.appendChild(dc.makeNewAElement("======", "KeyGbMaj", "list-group-item list-group-item-action " + smuflFont, "#", true));
|
156
|
+
return keySelectItem;
|
157
|
+
}
|
158
|
+
createClefAccItem() {
|
159
|
+
//Music Key
|
160
|
+
var clefSelectItem = dc.makeNewAccordionItem("sidebarList", "selectClef", "selectClefHeader", "selectClefBtn", "Clef", buttonStyleDark, "selectClefDiv");
|
161
|
+
var clefList = dc.makeNewDiv("clefList", "list-group flex-fill");
|
162
|
+
clefSelectItem.querySelector("#selectClefDiv").appendChild(clefList);
|
163
|
+
clefList.appendChild(dc.makeNewAElement("", "GClef", "list-group-item list-group-item-action " + smuflFont, "#", true));
|
164
|
+
clefList.appendChild(dc.makeNewAElement("", "CClef", "list-group-item list-group-item-action " + smuflFont, "#", true));
|
165
|
+
clefList.appendChild(dc.makeNewAElement("", "FClef", "list-group-item list-group-item-action " + smuflFont, "#", true));
|
166
|
+
return clefSelectItem;
|
167
|
+
}
|
168
|
+
createTimeSigAccItem() {
|
169
|
+
//Time Signature
|
170
|
+
var timeSelectItem = dc.makeNewAccordionItem("sidebarList", "selectTime", "selectTimeHeader", "selectTimeBtn", "Time", buttonStyleDark, "selectTimeDiv");
|
171
|
+
var timeDiv = dc.makeNewDiv("timeDiv", "row align-items-start");
|
172
|
+
var countDiv = dc.makeNewDiv("countDiv", "col");
|
173
|
+
var tcdatalistname = "timeCountDatalist";
|
174
|
+
var timeCount = dc.makeNewInput("timeCount", "text", "", null, tcdatalistname);
|
175
|
+
//create list for time code select
|
176
|
+
var tcOptionValues = new Array();
|
177
|
+
for (var i = 0; i < 16; i++) {
|
178
|
+
tcOptionValues.push((i + 1).toString());
|
179
|
+
}
|
180
|
+
var tcDatalist = dc.makeNewSelect("timeCount", tcOptionValues);
|
181
|
+
//countDiv.appendChild(timeCount)
|
182
|
+
countDiv.appendChild(tcDatalist);
|
183
|
+
var slashDiv = dc.makeNewDiv("slash", "col");
|
184
|
+
slashDiv.textContent = "/";
|
185
|
+
var unitDiv = dc.makeNewDiv("unitDiv", "col");
|
186
|
+
var tudatalistname = "timeUnitDatalist";
|
187
|
+
var timeUnit = dc.makeNewInput("timeUnit", "text", "", null, tudatalistname);
|
188
|
+
//create list for time units select
|
189
|
+
var tuOptionValues = new Array();
|
190
|
+
for (var i = 0; i <= 16; i++) {
|
191
|
+
if (Number.isInteger(Math.log2(i))) {
|
192
|
+
tuOptionValues.push(i.toString());
|
193
|
+
}
|
194
|
+
}
|
195
|
+
var tuDataList = dc.makeNewSelect("timeUnit", tuOptionValues);
|
196
|
+
unitDiv.appendChild(tuDataList);
|
197
|
+
timeSelectItem.querySelector("#selectTimeDiv").appendChild(timeDiv);
|
198
|
+
timeDiv.appendChild(countDiv);
|
199
|
+
timeDiv.appendChild(slashDiv);
|
200
|
+
timeDiv.appendChild(unitDiv);
|
201
|
+
return timeSelectItem;
|
202
|
+
}
|
203
|
+
createTempoAccItem() {
|
204
|
+
var tempoItem = dc.makeNewAccordionItem("sidebarList", "selectTempo", "selectTempoHeader", "selectTempoBtn", "Tempo", buttonStyleDark, "selectTempoDiv");
|
205
|
+
var tempoDiv = dc.makeNewDiv("tempoDiv", "row align-items-start");
|
206
|
+
var tempoRefDurDiv = dc.makeNewDiv("tempoRefDurDif", "col");
|
207
|
+
var tcdatalistname = "timeCountDatalist";
|
208
|
+
var timeCount = dc.makeNewInput("timeCount", "text", "", null, tcdatalistname);
|
209
|
+
//create list for time code select
|
210
|
+
var tcOptionValues = new Array();
|
211
|
+
for (var i = 0; i <= 16; i++) {
|
212
|
+
if (Number.isInteger(Math.log2(i))) {
|
213
|
+
tcOptionValues.push(i.toString());
|
214
|
+
tcOptionValues.push(i.toString() + ".");
|
215
|
+
}
|
216
|
+
}
|
217
|
+
var tcDatalist = dc.makeNewSelect("timeCount", tcOptionValues);
|
218
|
+
tempoRefDurDiv.appendChild(tcDatalist);
|
219
|
+
var equal = dc.makeNewDiv("equal", "col");
|
220
|
+
equal.textContent = "=";
|
221
|
+
var unitDiv = dc.makeNewDiv("unitDiv", "col");
|
222
|
+
var timeUnit = dc.makeNewInput("timeUnit", "text", "", null);
|
223
|
+
unitDiv.appendChild(timeUnit);
|
224
|
+
tempoItem.querySelector("#selectTempoDiv").appendChild(tempoDiv);
|
225
|
+
tempoDiv.appendChild(tempoRefDurDiv);
|
226
|
+
tempoDiv.appendChild(equal);
|
227
|
+
tempoDiv.appendChild(unitDiv);
|
228
|
+
return tempoItem;
|
229
|
+
}
|
230
|
+
optionalButtons() {
|
231
|
+
if (typeof this.sidebar === "undefined") {
|
232
|
+
return;
|
233
|
+
}
|
234
|
+
// if(typeof this.options.taskType !== "undefined"){
|
235
|
+
// var submitButton = dc.makeNewButton("Submit", "submitScore", buttonStyle)
|
236
|
+
// this.sidebar.appendChild(submitButton)
|
237
|
+
// switch(this.options.taskType){
|
238
|
+
// case "simpleSubmit":
|
239
|
+
// this.task = new SimpleSubmit()
|
240
|
+
// break;
|
241
|
+
// }
|
242
|
+
// }
|
243
|
+
}
|
244
|
+
createAnnotList() {
|
245
|
+
var _a, _b;
|
246
|
+
(_a = cq.getContainer(this.containerId).querySelector("#annotList")) === null || _a === void 0 ? void 0 : _a.remove();
|
247
|
+
var annotList = document.createElement("div");
|
248
|
+
annotList.setAttribute("id", "annotList");
|
249
|
+
annotList.classList.add("list-group");
|
250
|
+
var that = this;
|
251
|
+
(_b = cq.getContainer(this.containerId).querySelectorAll("#annotationCanvas > g")) === null || _b === void 0 ? void 0 : _b.forEach(c => {
|
252
|
+
var text = c.querySelector(".annotDiv").textContent || c.querySelector(".annotDiv").getAttribute("data-text");
|
253
|
+
var a = dc.makeNewAElement(text, "", "list-group-item list-group-item-action list-group-item-primary", "#");
|
254
|
+
a.setAttribute("refId", c.id);
|
255
|
+
a.setAttribute("contenteditable", "true");
|
256
|
+
a.addEventListener("click", function () {
|
257
|
+
var _a;
|
258
|
+
Array.from(cq.getContainer(that.containerId).querySelectorAll(".selected")).forEach(s => s.classList.remove(selectedFlag));
|
259
|
+
cq.getContainer(that.containerId).querySelector("#" + c.id).focus();
|
260
|
+
(_a = cq.getContainer(that.containerId).querySelector("#" + c.id).querySelector(".annotLinkedText, .annotStaticText")) === null || _a === void 0 ? void 0 : _a.classList.add(selectedFlag);
|
261
|
+
});
|
262
|
+
a.addEventListener("blur", function (e) {
|
263
|
+
var t = e.target;
|
264
|
+
cq.getContainer(that.containerId).querySelector("#" + t.getAttribute("refid")).querySelector(".annotDiv").textContent = t.textContent;
|
265
|
+
});
|
266
|
+
a.addEventListener("keydown", function (e) {
|
267
|
+
var t = e.target;
|
268
|
+
if (e.code === "Enter") {
|
269
|
+
t.blur();
|
270
|
+
}
|
271
|
+
else if (e.code === "Space") {
|
272
|
+
e.preventDefault();
|
273
|
+
document.execCommand("insertText", false, ' ');
|
274
|
+
}
|
275
|
+
});
|
276
|
+
annotList.appendChild(a);
|
277
|
+
});
|
278
|
+
this.sidebar.appendChild(annotList);
|
279
|
+
}
|
280
|
+
createButtonsMainToolbar() {
|
281
|
+
var that = this;
|
282
|
+
// Buttons können in eigenes package ausgelagert werden (Editor)
|
283
|
+
var handlerDropdown = dc.makeNewDiv("insertDropdown", "dropdown-menu");
|
284
|
+
handlerDropdown.append(dc.makeNewAElement("Mouse Input", "clickInsert", "dropdown-item", "#"));
|
285
|
+
handlerDropdown.append(dc.makeNewAElement("Keyboard Input", "keyMode", "dropdown-item", "#"));
|
286
|
+
//handlerDropdown.append(dc.makeNewAElement("Select Mode", "activateSelect", "dropdown-item", "#"))
|
287
|
+
handlerDropdown.append(dc.makeNewAElement("Annotations", "activateAnnot", "dropdown-item", "#"));
|
288
|
+
//handlerDropdown.append(dc.makeNewAElement("Harmony Mode", "activateHarm", "dropdown-item", "#"))
|
289
|
+
this.handlerGroup = cq.getContainer(this.containerId).querySelector("#handlerGroup");
|
290
|
+
this.handlerGroup.append(dc.makeNewButton(" ", "insertMode", buttonStyleDarkOutline + " empty", "dropdown"));
|
291
|
+
this.handlerGroup.append(handlerDropdown);
|
292
|
+
this.noteButtonGroup = cq.getContainer(this.containerId).querySelector("#noteGroup");
|
293
|
+
this.noteButtonGroup.append(dc.makeNewButton("𝅝", "fullNote", buttonStyleDarkOutline + " " + smuflFont, "", true));
|
294
|
+
this.noteButtonGroup.append(dc.makeNewButton("𝅗𝅥", "halfNote", buttonStyleDarkOutline + " " + smuflFont, "", true));
|
295
|
+
this.noteButtonGroup.append(dc.makeNewButton("𝅘𝅥", "quarterNote", buttonStyleDarkOutline + " " + smuflFont, "", true));
|
296
|
+
this.noteButtonGroup.append(dc.makeNewButton("𝅘𝅥𝅮", "eigthNote", buttonStyleDarkOutline + " " + smuflFont, "", true));
|
297
|
+
this.noteButtonGroup.append(dc.makeNewButton("𝅘𝅥𝅯", "sixteenthNote", buttonStyleDarkOutline + " " + smuflFont, "", true));
|
298
|
+
this.noteButtonGroup.append(dc.makeNewButton("𝅘𝅥𝅰", "thirtysecondNote", buttonStyleDarkOutline + " " + smuflFont, "", true));
|
299
|
+
this.dotButtonGroup = cq.getContainer(this.containerId).querySelector("#dotGroup");
|
300
|
+
this.dotButtonGroup.append(dc.makeNewButton(".", "oneDot", buttonStyleDarkOutline + " " + smuflFont, "", true));
|
301
|
+
this.dotButtonGroup.append(dc.makeNewButton(". .", "twoDot", buttonStyleDarkOutline + " " + smuflFont, "", true));
|
302
|
+
this.modButtonGroup = cq.getContainer(this.containerId).querySelector("#modGroup");
|
303
|
+
this.modButtonGroup.appendChild(dc.makeNewButton("𝄽𝄾", "pauseNote", buttonStyleDarkOutline + " " + smuflFont, "", true));
|
304
|
+
this.modButtonGroup.appendChild(dc.makeNewButton("⁀", "tieNotes", buttonStyleDarkOutline + " " + smuflFont, "", true));
|
305
|
+
this.modButtonGroup.appendChild(dc.makeNewButton("♫", "organizeBeams", buttonStyleDarkOutline + " " + smuflFont, "", true));
|
306
|
+
this.modButtonGroup.appendChild(dc.makeNewButton("♭", "alterDown", buttonStyleDarkOutline + " " + smuflFont + " " + alterBtn, "", true));
|
307
|
+
this.modButtonGroup.appendChild(dc.makeNewButton("♯", "alterUp", buttonStyleDarkOutline + " " + smuflFont + " " + alterBtn, "", true));
|
308
|
+
this.modButtonGroup.appendChild(dc.makeNewButton("♮", "alterNeutral", buttonStyleDarkOutline + " " + smuflFont + " " + alterBtn, "", true));
|
309
|
+
this.modButtonGroup.appendChild(dc.makeNewButton("𝄫", "alterDDown", buttonStyleDarkOutline + " " + smuflFont + " " + alterBtn, "", true));
|
310
|
+
this.modButtonGroup.appendChild(dc.makeNewButton("𝄪", "alterDUp", buttonStyleDarkOutline + " " + smuflFont + " " + alterBtn, "", true));
|
311
|
+
this.modButtonGroup.addEventListener("click", this.exclusiveSelectHandler);
|
312
|
+
this.soundGroup = cq.getContainer(this.containerId).querySelector("#soundGroup");
|
313
|
+
this.soundGroup.appendChild(dc.makeNewButton("", "playBtn", buttonStyleDarkOutline));
|
314
|
+
//this.soundGroup.appendChild(dc.makeNewButton("", "pauseBtn", buttonStyleDarkOutline))
|
315
|
+
this.soundGroup.appendChild(dc.makeNewButton("", "rewindBtn", buttonStyleDarkOutline));
|
316
|
+
this.fileSelectGroup = cq.getContainer(this.containerId).querySelector("#fileSelectGroup");
|
317
|
+
this.fileSelectGroup.append(dc.makeNewInput("importXML", "file", ""));
|
318
|
+
this.fileSelectGroup.append(dc.makeNewButton("Import File", "importXMLBtn", buttonStyleDarkOutline));
|
319
|
+
this.fileSelectGroup.append(dc.makeNewButton("Export MEI", "exportFileBtn", buttonStyleDarkOutline));
|
320
|
+
var showBBToggle = dc.makeNewToggle("showBB", buttonStyleDark, "BBoxes", "showBBDiv");
|
321
|
+
this.setToggleLogic(showBBToggle, function () { cq.getContainer(that.containerId).classList.add("debug"); }, function () { cq.getContainer(that.containerId).classList.remove("debug"); });
|
322
|
+
this.fileSelectGroup.append(showBBToggle);
|
323
|
+
}
|
324
|
+
/**
|
325
|
+
*
|
326
|
+
* @param el element to set logic for
|
327
|
+
* @param callBackChecked additional code to execute when toggle is checked
|
328
|
+
* @param callBackUnchecked additional code to execute when toggle is unchecked
|
329
|
+
* @param switchPair pair of words to change between when toggled
|
330
|
+
*/
|
331
|
+
setToggleLogic(el, callbackChecked = null, callbackUnchecked = null, switchPair = new Array()) {
|
332
|
+
if (switchPair.length > 2 || switchPair.length === 1) {
|
333
|
+
throw new Error("switchPair Array must have exaclty 2 strings");
|
334
|
+
}
|
335
|
+
el.addEventListener("click", function (e) {
|
336
|
+
e.preventDefault();
|
337
|
+
var target = e.target;
|
338
|
+
if (target.tagName.toLowerCase() !== "label")
|
339
|
+
return;
|
340
|
+
var label = e.target;
|
341
|
+
var input = label.previousElementSibling;
|
342
|
+
if (input.checked === true) {
|
343
|
+
if (switchPair.length > 0)
|
344
|
+
label.textContent = switchPair[0];
|
345
|
+
input.checked = false;
|
346
|
+
callbackUnchecked();
|
347
|
+
}
|
348
|
+
else {
|
349
|
+
if (switchPair.length > 0)
|
350
|
+
label.textContent = switchPair[1];
|
351
|
+
input.checked = true;
|
352
|
+
callbackChecked();
|
353
|
+
}
|
354
|
+
});
|
355
|
+
}
|
356
|
+
createInsertSelect() {
|
357
|
+
//InsertSelect DropdownMenu
|
358
|
+
this.insertSelectGroup = dc.makeNewDiv("insertGroup", "customGroup btn-group-sm me-2 h-100", { role: "group" });
|
359
|
+
var toggle = dc.makeNewToggle("insertToggle", buttonStyleDarkOutline, "Replace", "insertToggleDiv");
|
360
|
+
toggle.addEventListener("click", function (e) {
|
361
|
+
e.preventDefault();
|
362
|
+
var target = e.target;
|
363
|
+
if (target.tagName.toLowerCase() !== "label")
|
364
|
+
return;
|
365
|
+
var label = e.target;
|
366
|
+
var input = label.previousElementSibling;
|
367
|
+
if (label.textContent === "Replace") {
|
368
|
+
label.textContent = "Insert";
|
369
|
+
input.checked = false;
|
370
|
+
}
|
371
|
+
else {
|
372
|
+
label.textContent = "Replace";
|
373
|
+
input.checked = true;
|
374
|
+
}
|
375
|
+
});
|
376
|
+
this.insertSelectGroup.append(toggle);
|
377
|
+
}
|
378
|
+
createButtonsKeyMode() {
|
379
|
+
//ChordGroup
|
380
|
+
this.chordGroupKM = dc.makeNewDiv("chordGroupKM", "customGroup btn-group-sm me-2 h-100", { role: "group" });
|
381
|
+
this.chordGroupKM.append(dc.makeNewButton("CHORD", "chordButton", buttonStyleDarkOutline));
|
382
|
+
this.chordGroupKM.addEventListener("click", this.exclusiveSelectHandler);
|
383
|
+
//OctaveGroup
|
384
|
+
this.octaveGroupKM = dc.makeNewDiv("octaveGroupKM", "btn-group-sm me-2 h-100", { role: "group" });
|
385
|
+
let oct = dc.makeNewButton("", "subkontraOct", buttonStyleDarkOutline);
|
386
|
+
oct.innerHTML = "C" + "0".sub();
|
387
|
+
this.octaveGroupKM.appendChild(oct);
|
388
|
+
oct = dc.makeNewButton("", "kontraOct", buttonStyleDarkOutline);
|
389
|
+
oct.innerHTML = "C" + "1".sub();
|
390
|
+
this.octaveGroupKM.appendChild(oct);
|
391
|
+
oct = dc.makeNewButton("", "greatOct", buttonStyleDarkOutline);
|
392
|
+
oct.innerHTML = "C" + "2".sub();
|
393
|
+
this.octaveGroupKM.appendChild(oct);
|
394
|
+
oct = dc.makeNewButton("", "smallOct", buttonStyleDarkOutline);
|
395
|
+
oct.innerHTML = "C" + "3".sub();
|
396
|
+
this.octaveGroupKM.appendChild(oct);
|
397
|
+
oct = dc.makeNewButton("", "LineOct1", buttonStyleDarkOutline);
|
398
|
+
oct.innerHTML = "C" + "4".sub();
|
399
|
+
this.octaveGroupKM.appendChild(oct);
|
400
|
+
oct = dc.makeNewButton("", "LineOct2", buttonStyleDarkOutline);
|
401
|
+
oct.innerHTML = "C" + "5".sub();
|
402
|
+
this.octaveGroupKM.appendChild(oct);
|
403
|
+
oct = dc.makeNewButton("", "LineOct3", buttonStyleDarkOutline);
|
404
|
+
oct.innerHTML = "C" + "6".sub();
|
405
|
+
this.octaveGroupKM.appendChild(oct);
|
406
|
+
oct = dc.makeNewButton("", "LineOct4", buttonStyleDarkOutline);
|
407
|
+
oct.innerHTML = "C" + "7".sub();
|
408
|
+
this.octaveGroupKM.appendChild(oct);
|
409
|
+
oct = dc.makeNewButton("", "LineOct5", buttonStyleDarkOutline);
|
410
|
+
oct.innerHTML = "C" + "8".sub();
|
411
|
+
this.octaveGroupKM.appendChild(oct);
|
412
|
+
Array.from(this.octaveGroupKM.children).forEach(btn => {
|
413
|
+
btn.addEventListener("click", this.exclusiveSelectHandler);
|
414
|
+
});
|
415
|
+
}
|
416
|
+
createButtonsAnnotationMode() {
|
417
|
+
this.annotGroupKM = dc.makeNewDiv("annotGroupKM", "customGroup btn-group-sm me-2 h-100", { role: "group" });
|
418
|
+
this.annotGroupKM.append(dc.makeNewButton("TEXT", "staticTextButton", buttonStyleDarkOutline));
|
419
|
+
this.annotGroupKM.append(dc.makeNewButton("LINKED ANNOTATION", "linkedAnnotButton", buttonStyleDarkOutline + " selected"));
|
420
|
+
this.annotGroupKM.append(dc.makeNewButton("HARMONY", "harmonyAnnotButton", buttonStyleDarkOutline));
|
421
|
+
this.annotGroupKM.addEventListener("click", this.exclusiveSelectHandler);
|
422
|
+
}
|
423
|
+
createMainToolbar() {
|
424
|
+
this.createButtonsMainToolbar();
|
425
|
+
var btnToolbar = cq.getContainer(this.containerId).querySelector("#btnToolbar");
|
426
|
+
btnToolbar.appendChild(this.sideBarGroup);
|
427
|
+
btnToolbar.parentElement.insertBefore(this.sidebar, btnToolbar.parentElement.firstChild); // important for ~ selector
|
428
|
+
btnToolbar.appendChild(this.handlerGroup);
|
429
|
+
btnToolbar.appendChild(this.noteButtonGroup);
|
430
|
+
btnToolbar.appendChild(this.dotButtonGroup);
|
431
|
+
btnToolbar.appendChild(this.modButtonGroup);
|
432
|
+
btnToolbar.appendChild(this.soundGroup);
|
433
|
+
btnToolbar.appendChild(this.fileSelectGroup);
|
434
|
+
}
|
435
|
+
createCustomToolbar() {
|
436
|
+
this.createButtonsKeyMode();
|
437
|
+
this.createInsertSelect();
|
438
|
+
this.createButtonsAnnotationMode();
|
439
|
+
this.customToolbar = cq.getContainer(this.containerId).querySelector("#customToolbar");
|
440
|
+
}
|
441
|
+
removeAllCustomGroups() {
|
442
|
+
Array.from(this.customToolbar.children).forEach(c => {
|
443
|
+
c.remove();
|
444
|
+
});
|
445
|
+
}
|
446
|
+
addElementsToBootstrap() {
|
447
|
+
//attach bootstrap functionality to Elements
|
448
|
+
// Array.from(document.querySelectorAll(".btn")).forEach(b => {
|
449
|
+
// new Button(b)
|
450
|
+
// })
|
451
|
+
Array.from(cq.getContainer(this.containerId).querySelectorAll(".dropdown-toggle")).forEach(dd => {
|
452
|
+
new bootstrap_1.Dropdown(dd);
|
453
|
+
});
|
454
|
+
Array.from(cq.getContainer(this.containerId).querySelectorAll(".collapsed")).forEach(c => {
|
455
|
+
new bootstrap_1.Collapse(c);
|
456
|
+
});
|
457
|
+
// Array.from(cq.getContainer(this.containerId).querySelectorAll("*[type=\"checkbox\"][data-toggle=\"toggle\"]")).forEach(t => {
|
458
|
+
// new Toggle(t)
|
459
|
+
// })
|
460
|
+
}
|
461
|
+
setListeners() {
|
462
|
+
cq.getContainer(this.containerId).querySelectorAll("#handlerGroup *").forEach(el => {
|
463
|
+
el.addEventListener("click", this.closeHandlerMouse);
|
464
|
+
});
|
465
|
+
// achtung: nie preventDefault in einem Document anwenden
|
466
|
+
document.addEventListener("keydown", this.closeHandlerKey);
|
467
|
+
//document.getElementsByClassName("vse-container")[0]?.addEventListener("click", this.closeHandlerMouse)
|
468
|
+
cq.getContainer(this.containerId).querySelectorAll("#dotGroup button, #noteGroup button, #modGroup button").forEach(el => {
|
469
|
+
el.addEventListener("click", this.exclusiveSelectHandler);
|
470
|
+
});
|
471
|
+
cq.getContainer(this.containerId).querySelector("#toggleSidebar").addEventListener("click", this.sidebarHandler);
|
472
|
+
cq.getContainer(this.containerId).querySelectorAll("#insertDropdown a").forEach(a => {
|
473
|
+
a.addEventListener("click", this.customToolbarHandler);
|
474
|
+
});
|
475
|
+
// document.querySelectorAll("#sidebarContainer * a").forEach(el => {
|
476
|
+
// el.addEventListener("click", this.sidebarHandler)
|
477
|
+
// })
|
478
|
+
// Why do I have to control this manually???
|
479
|
+
cq.getContainer(this.containerId).querySelectorAll(".accordion-button").forEach(ac => {
|
480
|
+
ac.addEventListener("hidden.bs.collapse", () => {
|
481
|
+
ac.classList.add("show");
|
482
|
+
});
|
483
|
+
ac.addEventListener("hide.bs.collapse", () => {
|
484
|
+
ac.classList.add("show");
|
485
|
+
});
|
486
|
+
});
|
487
|
+
cq.getContainer(this.containerId).addEventListener("annotChanged", this.createAnnotListFunction, true);
|
488
|
+
// interact("#" + this.containerId + " #annotList")
|
489
|
+
// .resizable({
|
490
|
+
// // resize from all edges and corners
|
491
|
+
// edges: { left: false, right: false, bottom: false, top: true },
|
492
|
+
// listeners: { move: this.resizeListListener.bind(this) },
|
493
|
+
// })
|
494
|
+
//FileSelection
|
495
|
+
cq.getContainer(this.containerId).querySelector("#importXMLBtn").addEventListener("click", function () {
|
496
|
+
var impF = this.parentElement.querySelector("#importXML");
|
497
|
+
impF.setAttribute("accept", [".musicxml", ".mei"].join(", "));
|
498
|
+
impF.click();
|
499
|
+
});
|
500
|
+
var that = this;
|
501
|
+
cq.getContainer(this.containerId).querySelector("#importXML").addEventListener("change", function (e) {
|
502
|
+
var fr = new FileReader();
|
503
|
+
fr.onload = function () {
|
504
|
+
that.importCallback("", fr.result, false, constants_1.constants._TARGETDIVID_);
|
505
|
+
};
|
506
|
+
fr.readAsText(this.files[0]);
|
507
|
+
}, false);
|
508
|
+
cq.getContainer(this.containerId).querySelector("#exportFileBtn").addEventListener("click", function () {
|
509
|
+
that.getMEICallback("").then(mei => {
|
510
|
+
var d = new Date();
|
511
|
+
var fileName = d.getUTCFullYear()
|
512
|
+
+ ("0" + d.getDate()).slice(-2)
|
513
|
+
+ ("0" + d.getMonth()).slice(-2)
|
514
|
+
+ "_"
|
515
|
+
+ ("0" + d.getHours()).slice(-2)
|
516
|
+
+ ("0" + d.getMinutes()).slice(-2)
|
517
|
+
+ ("0" + d.getSeconds()).slice(-2)
|
518
|
+
+ "_"
|
519
|
+
+ "vseScore_" + that.containerId + ".mei";
|
520
|
+
that.download(fileName, mei);
|
521
|
+
});
|
522
|
+
});
|
523
|
+
}
|
524
|
+
download(file, text) {
|
525
|
+
//creating an invisible element
|
526
|
+
var element = document.createElement('a');
|
527
|
+
element.setAttribute('href', 'data:text/plain;charset=utf-8, '
|
528
|
+
+ encodeURIComponent(text));
|
529
|
+
element.setAttribute('download', file);
|
530
|
+
document.body.appendChild(element);
|
531
|
+
element.click();
|
532
|
+
document.body.removeChild(element);
|
533
|
+
}
|
534
|
+
removeListeners() {
|
535
|
+
cq.getContainer(this.containerId).querySelectorAll("#handlerGroup *").forEach(el => {
|
536
|
+
el.removeEventListener("click", this.closeHandlerMouse);
|
537
|
+
});
|
538
|
+
document.removeEventListener("keydown", this.closeHandlerKey);
|
539
|
+
//document.getElementsByClassName("vse-container")[0].removeEventListener("click", this.closeHandlerMouse)
|
540
|
+
cq.getContainer(this.containerId).querySelectorAll(".btn-group-sm button").forEach(el => {
|
541
|
+
el.removeEventListener("click", this.exclusiveSelectHandler);
|
542
|
+
});
|
543
|
+
cq.getContainer(this.containerId).querySelector("#toggleSidebar").removeEventListener("click", this.sidebarHandler);
|
544
|
+
cq.getContainer(this.containerId).querySelectorAll("#insertDropdown a").forEach(a => {
|
545
|
+
a.removeEventListener("click", this.customToolbarHandler);
|
546
|
+
});
|
547
|
+
// document.querySelectorAll("#sidebarContainer * a").forEach(el => {
|
548
|
+
// el.removeEventListener("click", this.sidebarHandler)
|
549
|
+
// })
|
550
|
+
cq.getContainer(this.containerId).removeEventListener("annotChanged", this.createAnnotListFunction);
|
551
|
+
interactjs_1.default("#annotList").unset();
|
552
|
+
}
|
553
|
+
closeDropdown(ddButton) {
|
554
|
+
if (ddButton.classList.contains("show")) {
|
555
|
+
ddButton.classList.remove("show");
|
556
|
+
ddButton.removeAttribute("data-popper-placement");
|
557
|
+
ddButton.setAttribute("aria-expanded", "false");
|
558
|
+
ddButton.nextElementSibling.classList.remove("show");
|
559
|
+
ddButton.nextElementSibling.removeAttribute("data-popper-placement");
|
560
|
+
}
|
561
|
+
}
|
562
|
+
resizeListListener(event) {
|
563
|
+
event.stopImmediatePropagation();
|
564
|
+
var target = event.target;
|
565
|
+
var y = (parseFloat(target.getAttribute('data-y')) || 0);
|
566
|
+
target.style.height = event.rect.height + 'px';
|
567
|
+
y += event.deltaRect.top;
|
568
|
+
target.style.transform = 'translate(0px,' + y + 'px)';
|
569
|
+
target.setAttribute('data-y', y.toString());
|
570
|
+
var sibling = target.previousElementSibling;
|
571
|
+
var sbb = sibling.getBoundingClientRect();
|
572
|
+
sbb.height = sbb.height + y;
|
573
|
+
}
|
574
|
+
exclusiveSelect(e) {
|
575
|
+
var select;
|
576
|
+
var target = e.target;
|
577
|
+
var tagname = "button";
|
578
|
+
if (target.tagName.toLowerCase() === tagname) {
|
579
|
+
Array.from(target.parentElement.children).forEach(btn => {
|
580
|
+
if (btn.tagName.toLowerCase() === tagname && btn !== target) {
|
581
|
+
btn.classList.remove(selectedFlag);
|
582
|
+
}
|
583
|
+
});
|
584
|
+
if (!target.classList.contains(selectedFlag)) {
|
585
|
+
target.classList.add(selectedFlag);
|
586
|
+
}
|
587
|
+
else if (["modGroup", "dotGroup", "chordGroupKM"].some(id => id === target.parentElement.id) && target.classList.contains(selectedFlag)) {
|
588
|
+
target.classList.remove(selectedFlag);
|
589
|
+
}
|
590
|
+
}
|
591
|
+
}
|
592
|
+
clickInsertHandler() {
|
593
|
+
this.customToolbar.appendChild(this.insertSelectGroup);
|
594
|
+
}
|
595
|
+
keyModeHandler() {
|
596
|
+
this.customToolbar.appendChild(this.insertSelectGroup);
|
597
|
+
this.customToolbar.appendChild(this.chordGroupKM);
|
598
|
+
this.customToolbar.appendChild(this.octaveGroupKM);
|
599
|
+
}
|
600
|
+
harmHandler() {
|
601
|
+
this.removeAllCustomGroups();
|
602
|
+
}
|
603
|
+
annotHandler() {
|
604
|
+
//this.removeAllCustomGroups()
|
605
|
+
this.customToolbar.append(this.annotGroupKM);
|
606
|
+
}
|
607
|
+
/**
|
608
|
+
* Callback from Core, so that imported mei or musicxml can be loaded in the editor
|
609
|
+
* @param importCallback
|
610
|
+
*/
|
611
|
+
setImportCallback(importCallback) {
|
612
|
+
this.importCallback = importCallback;
|
613
|
+
}
|
614
|
+
setGetMEICallback(getMEICallback) {
|
615
|
+
this.getMEICallback = getMEICallback;
|
616
|
+
}
|
617
|
+
}
|
618
|
+
exports.default = Toolbar;
|