vibe-editor 0.0.4 → 0.0.5
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 +65 -61
- package/src/scripts/js/Core.js +28 -9
- package/src/scripts/js/entry.js +6 -5
- package/src/scripts/js/gui/Annotations.js +27 -12
- package/src/scripts/js/gui/ScoreManipulator.js +6 -4
- package/src/scripts/js/gui/Tabbar.js +13 -4
- package/src/scripts/js/handlers/AnnotationChangeHandler.js +13 -1
- package/src/scripts/js/handlers/InsertModeHandler.js +3 -3
- package/src/scripts/js/handlers/PhantomElementHandler.js +3 -10
- package/src/scripts/js/handlers/WindowHandler.js +7 -7
- package/src/scripts/js/scripts/Core.js +932 -0
- package/src/scripts/js/scripts/MusicProcessor.js +810 -0
- package/src/scripts/js/scripts/VIBE.js +219 -0
- package/src/scripts/js/scripts/datastructures/MeasureMatrix.js +156 -0
- package/src/scripts/js/scripts/gui/Annotations.js +549 -0
- package/src/scripts/js/scripts/gui/Cursor.js +203 -0
- package/src/scripts/js/scripts/gui/PhantomElement.js +132 -0
- package/src/scripts/js/scripts/gui/ScoreManipulator.js +188 -0
- package/src/scripts/js/scripts/gui/Tabbar.js +705 -0
- package/src/scripts/js/{gui/Toolbar copy.js → scripts/gui/Toolbar.js} +15 -11
- package/src/scripts/js/scripts/handlers/AnnotationChangeHandler.js +650 -0
- package/src/scripts/js/scripts/handlers/ClickModeHandler.js +535 -0
- package/src/scripts/js/{gui → scripts/handlers}/CustomAnnotationShapeDrawer.js +34 -17
- package/src/scripts/js/{handlers/ModHandler.js → scripts/handlers/CustomToolbarHandler.js} +54 -66
- package/src/scripts/js/scripts/handlers/GlobalKeyboardHandler.js +372 -0
- package/src/scripts/js/scripts/handlers/Handler.js +2 -0
- package/src/scripts/js/{handlers/InsertModeHandler_deprecated.js → scripts/handlers/InsertModeHandler.js} +117 -164
- package/src/scripts/js/scripts/handlers/KeyModeHandler.js +405 -0
- package/src/scripts/js/scripts/handlers/LabelHandler.js +463 -0
- package/src/scripts/js/scripts/handlers/NoteDragHandler.js +97 -0
- package/src/scripts/js/scripts/handlers/PhantomElementHandler.js +168 -0
- package/src/scripts/js/scripts/handlers/ScoreManipulatorHandler.js +233 -0
- package/src/scripts/js/scripts/handlers/SidebarHandler.js +506 -0
- package/src/scripts/js/scripts/handlers/TooltipHandler.js +132 -0
- package/src/scripts/js/scripts/handlers/WindowHandler.js +278 -0
- package/src/scripts/js/scripts/utils/MEIOperations.js +2121 -0
- package/src/scripts/js/{utils/Mouse2MEI.js → scripts/utils/Mouse2SVG.js} +225 -57
- package/src/scripts/js/scripts/utils/SVGEditor.js +453 -0
- package/src/scripts/js/scripts/utils/Types.js +2 -0
- package/src/scripts/js/{utils/VerovioWrapper copy.js → scripts/utils/VerovioWrapper.js} +35 -21
- package/src/scripts/js/scripts/utils/coordinates.js +54 -0
- package/src/scripts/js/utils/Mouse2SVG.js +11 -4
- package/src/scripts/js/utils/VerovioWrapper.js +4 -4
- package/src/scripts/js/utils/coordinates.js +26 -2
- package/src/scripts/js/.DS_Store +0 -0
- package/src/scripts/js/MusicPlayer.js +0 -572
- package/src/scripts/js/datastructures/ScoreGraph copy.js +0 -432
- package/src/scripts/js/gui/CustomAnnotationDrawer.js +0 -114
- package/src/scripts/js/handlers/AnnotationDragHandler.js +0 -113
- package/src/scripts/js/handlers/AnnotationLineHandler.js +0 -113
- package/src/scripts/js/handlers/ArticulationHandler.js +0 -20
- package/src/scripts/js/handlers/HarmonyHandler.js +0 -282
- package/src/scripts/js/handlers/InsertModeHandler copy.js +0 -423
- package/src/scripts/js/handlers/KeyModeHandler copy.js +0 -407
- package/src/scripts/js/handlers/KeyModeHandler_deprecated.js +0 -411
- package/src/scripts/js/handlers/NoteDragHandler copy.js +0 -148
- package/src/scripts/js/handlers/NoteDragHandler_deprecated.js +0 -150
- package/src/scripts/js/handlers/SelectionHandler.js +0 -262
- package/src/scripts/js/utils/RectWrapper.js +0 -10
- package/src/scripts/js/utils/SVGFiller.js +0 -245
- package/src/scripts/js/utils/VerovioWrapperLocal.js +0 -156
- package/src/scripts/js/utils/firefoxBBoxes.js +0 -143
- package/src/styles/vibe.css +0 -785
- /package/src/scripts/js/{assets → scripts/assets}/mei_template.js +0 -0
- /package/src/scripts/js/{constants.js → scripts/constants.js} +0 -0
- /package/src/scripts/js/{datastructures → scripts/datastructures}/ScoreGraph.js +0 -0
- /package/src/scripts/js/{datastructures → scripts/datastructures}/ScoreGraph_deprecated.js +0 -0
- /package/src/scripts/js/{datastructures → scripts/datastructures}/ScoreNode.js +0 -0
- /package/src/scripts/js/{gui → scripts/gui}/HarmonyLabel.js +0 -0
- /package/src/scripts/js/{gui → scripts/gui}/Label.js +0 -0
- /package/src/scripts/js/{gui → scripts/gui}/TempoLabel.js +0 -0
- /package/src/scripts/js/{handlers → scripts/handlers}/DeleteHandler.js +0 -0
- /package/src/scripts/js/{utils → scripts/utils}/DOMCreator.js +0 -0
- /package/src/scripts/js/{utils → scripts/utils}/MEIConverter.js +0 -0
- /package/src/scripts/js/{utils → scripts/utils}/ReactWrapper.js +0 -0
- /package/src/scripts/js/{utils → scripts/utils}/convenienceQueries.js +0 -0
- /package/src/scripts/js/{utils → scripts/utils}/mappings.js +0 -0
- /package/src/scripts/js/{utils → scripts/utils}/random.js +0 -0
@@ -0,0 +1,219 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
const constants_1 = require("./constants");
|
4
|
+
const Core_1 = require("./Core");
|
5
|
+
const dc = require("./utils/DOMCreator");
|
6
|
+
const Tabbar_1 = require("./gui/Tabbar");
|
7
|
+
/**
|
8
|
+
* Main Class for the Verovio Interface for Browser based Editing
|
9
|
+
*/
|
10
|
+
class VIBE {
|
11
|
+
/**
|
12
|
+
*
|
13
|
+
* @param container Container in which the editor will be displayed
|
14
|
+
* @param options options from Class implementing H5P functionality
|
15
|
+
*/
|
16
|
+
constructor(container = null, options, meiCallback) {
|
17
|
+
var _a;
|
18
|
+
this.isFullContainer = false;
|
19
|
+
if ((container === null || container === void 0 ? void 0 : container.id) === null) {
|
20
|
+
throw new Error("The editor's container must have an id");
|
21
|
+
}
|
22
|
+
if (container === null) {
|
23
|
+
container = document.body;
|
24
|
+
container.id = "editorInBody";
|
25
|
+
}
|
26
|
+
if (container === null || container === void 0 ? void 0 : container.classList.contains("vibe-container")) {
|
27
|
+
this.isFullContainer = true;
|
28
|
+
Array.from(container.children).forEach(c => {
|
29
|
+
if (c.id != "svgContainer")
|
30
|
+
c.remove();
|
31
|
+
});
|
32
|
+
}
|
33
|
+
else {
|
34
|
+
(_a = container === null || container === void 0 ? void 0 : container.classList) === null || _a === void 0 ? void 0 : _a.add("vibe-container");
|
35
|
+
}
|
36
|
+
this.container = container;
|
37
|
+
this.options = options;
|
38
|
+
this.tabbar = new Tabbar_1.default(this.options, this.container.id); //new Toolbar(this.options, this.container.id)
|
39
|
+
this.meiChangedCallback = meiCallback;
|
40
|
+
this.loadScripts();
|
41
|
+
this.setMutationObserver();
|
42
|
+
}
|
43
|
+
/**
|
44
|
+
* Load verovio script from the internet.
|
45
|
+
* Makes sure that only one script instance is in the DOM.
|
46
|
+
*/
|
47
|
+
loadScripts() {
|
48
|
+
var src = "https://www.verovio.org/javascript/" + constants_1.constants._VEROVIO_VERSION_ + "/verovio-toolkit.js";
|
49
|
+
var scriptId = "verovioScript";
|
50
|
+
var script = document.querySelector("#" + scriptId) || document.createElement('script');
|
51
|
+
script.src = src;
|
52
|
+
if (script.id === "") {
|
53
|
+
script.id = scriptId;
|
54
|
+
}
|
55
|
+
if (script.getAttribute("loaded") === null) {
|
56
|
+
script.setAttribute("loaded", "false");
|
57
|
+
}
|
58
|
+
if (script.getAttribute("loaded") === "true") {
|
59
|
+
this.initGUI().then(() => {
|
60
|
+
// if(this.meiChangedCallback != undefined){
|
61
|
+
// this.setMEIChangedCallback(this.meiChangedCallback)
|
62
|
+
// }
|
63
|
+
});
|
64
|
+
}
|
65
|
+
if (document.getElementById(scriptId) === null) {
|
66
|
+
var prior = document.getElementsByTagName('script')[0];
|
67
|
+
script.async = false;
|
68
|
+
prior.parentNode.insertBefore(script, prior);
|
69
|
+
script.onload = function () {
|
70
|
+
script.setAttribute("loaded", "true");
|
71
|
+
};
|
72
|
+
}
|
73
|
+
}
|
74
|
+
/**
|
75
|
+
* Observes if the script is already loaded. Fires initGUI() when Attribute "loaded" changes to "true"
|
76
|
+
*/
|
77
|
+
setMutationObserver() {
|
78
|
+
var that = this;
|
79
|
+
var observer = new MutationObserver(function (mutations) {
|
80
|
+
mutations.forEach(function (mutation) {
|
81
|
+
if (mutation.type === "attributes") {
|
82
|
+
var t = mutation.target;
|
83
|
+
if (mutation.attributeName === "loaded" && t.getAttribute(mutation.attributeName) === "true") {
|
84
|
+
that.initGUI().then(() => {
|
85
|
+
// if(that.meiChangedCallback != undefined){
|
86
|
+
// that.setMEIChangedCallback(that.meiChangedCallback)
|
87
|
+
// }
|
88
|
+
});
|
89
|
+
}
|
90
|
+
}
|
91
|
+
});
|
92
|
+
});
|
93
|
+
observer.observe(document.getElementById("verovioScript"), {
|
94
|
+
attributes: true
|
95
|
+
});
|
96
|
+
}
|
97
|
+
/**
|
98
|
+
* Init gui on load.
|
99
|
+
* Toolbars are predefined.
|
100
|
+
*/
|
101
|
+
initGUI() {
|
102
|
+
return new Promise((resolve) => {
|
103
|
+
var btnGrpClass = "btn-group-md me-2";
|
104
|
+
// MAIN/ Permanent TOOLBAR
|
105
|
+
// parentElement for dropdown
|
106
|
+
this.container.append(dc.makeNewDiv("handlerGroup", btnGrpClass, { role: "group" })); //"me-2 h-100"))
|
107
|
+
//parentElement for Notebuttons
|
108
|
+
this.container.append(dc.makeNewDiv("noteGroup", btnGrpClass, { role: "group" }));
|
109
|
+
//parentElement for Dotbuttons
|
110
|
+
this.container.append(dc.makeNewDiv("dotGroup", btnGrpClass, { role: "group" }));
|
111
|
+
//parentElement for local modifier Buttons
|
112
|
+
this.container.append(dc.makeNewDiv("modGroup", btnGrpClass, { role: "group" }));
|
113
|
+
//parentElement for local accidental Buttons
|
114
|
+
this.container.append(dc.makeNewDiv("accidGroup", btnGrpClass, { role: "group" }));
|
115
|
+
//parentElement for local articulation Buttons
|
116
|
+
this.container.append(dc.makeNewDiv("articGroup", btnGrpClass, { role: "group" }));
|
117
|
+
//sidebarList
|
118
|
+
this.container.append(dc.makeNewDiv("sidebarContainer", "sidebar closedSidebar"));
|
119
|
+
//parentElement for sidebar open/close
|
120
|
+
this.container.append(dc.makeNewDiv("sideBarGroup", btnGrpClass, { role: "group" }));
|
121
|
+
//parentElement for playback
|
122
|
+
this.container.append(dc.makeNewDiv("soundGroup", btnGrpClass, { role: "group" }));
|
123
|
+
//parentElement for zoom
|
124
|
+
this.container.append(dc.makeNewDiv("zoomGroup", btnGrpClass, { role: "group" }));
|
125
|
+
//parentElement for colorPicker
|
126
|
+
this.container.append(dc.makeNewDiv("colorGroup", btnGrpClass, { role: "group" }));
|
127
|
+
//parentElement for midi device selection
|
128
|
+
this.container.append(dc.makeNewDiv("midiSelectGroup", btnGrpClass, { role: "group" }));
|
129
|
+
//parentElement for fileselect group
|
130
|
+
this.container.append(dc.makeNewDiv("fileSelectGroup", btnGrpClass, { role: "group" }));
|
131
|
+
// parentElement for toolbarTop
|
132
|
+
this.container.append(dc.makeNewDiv("btnToolbar", "btn-toolbar d-inline-flex align-items-stretch", { role: "toolbar" }));
|
133
|
+
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
134
|
+
// CUSTOM TOOLBAR
|
135
|
+
// parentElement for customToolbar
|
136
|
+
this.container.append(dc.makeNewDiv("customToolbar", "btn-toolbar align-items-stretch", { role: "toolbar" }));
|
137
|
+
// and now the tabs
|
138
|
+
this.container.append(dc.makeNewDiv("notationTabGroup", btnGrpClass, { role: "group" }));
|
139
|
+
this.container.append(dc.makeNewDiv("articulationTabGroup", btnGrpClass, { role: "group" }));
|
140
|
+
this.container.append(dc.makeNewDiv("annotationTabGroup", btnGrpClass, { role: "group" }));
|
141
|
+
//this.container.append(dc.makeNewDiv("melismaTabGroup", btnGrpClass, {role: "group"}))
|
142
|
+
this.tabbar.createToolbars();
|
143
|
+
resolve(this.createCoreInstance());
|
144
|
+
});
|
145
|
+
}
|
146
|
+
createCoreInstance() {
|
147
|
+
return new Promise(resolve => {
|
148
|
+
var _a, _b;
|
149
|
+
//attach mei first time
|
150
|
+
this.coreInstance = new Core_1.default(this.container.id);
|
151
|
+
if (!this.isFullContainer) {
|
152
|
+
this.container.append(dc.makeNewDiv(constants_1.constants._TARGETDIVID_, ""));
|
153
|
+
}
|
154
|
+
else {
|
155
|
+
const sc = this.container.querySelector("#svgContainer");
|
156
|
+
sc.parentElement.append(sc);
|
157
|
+
}
|
158
|
+
var initEvent = new Event("vibeInit");
|
159
|
+
var data;
|
160
|
+
var isUrl = false;
|
161
|
+
if (((_a = this.options) === null || _a === void 0 ? void 0 : _a.meiURL) != undefined) {
|
162
|
+
data = this.options.meiURL;
|
163
|
+
isUrl = true;
|
164
|
+
}
|
165
|
+
else if (((_b = this.options) === null || _b === void 0 ? void 0 : _b.data) != undefined) {
|
166
|
+
data = this.options.data;
|
167
|
+
}
|
168
|
+
else if (this.options === null) {
|
169
|
+
data = null;
|
170
|
+
}
|
171
|
+
this.coreInstance.setMEIChangedCallback(this.meiChangedCallback);
|
172
|
+
if (!this.isFullContainer) {
|
173
|
+
this.coreInstance.loadData(data, isUrl).then(() => {
|
174
|
+
this.container.dispatchEvent(initEvent);
|
175
|
+
resolve();
|
176
|
+
});
|
177
|
+
}
|
178
|
+
else {
|
179
|
+
this.coreInstance.loadWithExistingSVG(this.container, data, isUrl).then(() => {
|
180
|
+
this.container.dispatchEvent(initEvent);
|
181
|
+
resolve();
|
182
|
+
});
|
183
|
+
}
|
184
|
+
this.tabbar
|
185
|
+
.setImportCallback(this.coreInstance.loadDataHandler)
|
186
|
+
.setAlignCallback(this.coreInstance.alignFunctionHandler)
|
187
|
+
.setGetMEICallback(this.coreInstance.getMEI.bind(this.coreInstance));
|
188
|
+
//block everthing when firefox is not at least version 114.0
|
189
|
+
if (navigator.userAgent.toLowerCase().includes("firefox")) {
|
190
|
+
const userAgent = navigator.userAgent;
|
191
|
+
const firefoxVersion = parseFloat(userAgent.split("Firefox/")[1]);
|
192
|
+
const isAtLeast114 = firefoxVersion >= 114.0;
|
193
|
+
if (!isAtLeast114) {
|
194
|
+
var div = document.createElement("div");
|
195
|
+
div.id = "ff_warning";
|
196
|
+
this.container.insertAdjacentElement("beforebegin", div);
|
197
|
+
div.append(this.container);
|
198
|
+
div.textContent = "This application can't be used with your current Firefox version (" + navigator.userAgent.match(/Firefox\/(\d+(\.\d+)?)/)[1] + ").\n Please update at least to version 114.0.2 or use another browser.";
|
199
|
+
}
|
200
|
+
}
|
201
|
+
});
|
202
|
+
}
|
203
|
+
/**
|
204
|
+
*
|
205
|
+
* @param meiChangedCallback Function in which the mei will be used by the calling instance
|
206
|
+
*/
|
207
|
+
setMEIChangedCallback(meiChangedCallback) {
|
208
|
+
this.meiChangedCallback = meiChangedCallback;
|
209
|
+
this.coreInstance.setMEIChangedCallback(this.meiChangedCallback);
|
210
|
+
}
|
211
|
+
/**
|
212
|
+
* Get Core Instance to manipulate svg output
|
213
|
+
* @returns
|
214
|
+
*/
|
215
|
+
getCore() {
|
216
|
+
return this.coreInstance;
|
217
|
+
}
|
218
|
+
}
|
219
|
+
exports.default = VIBE;
|
@@ -0,0 +1,156 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
//@ts-ignore
|
4
|
+
//const $ = H5P.jQuery;
|
5
|
+
class MeasureMatrix {
|
6
|
+
constructor(rows = null, cols = null) {
|
7
|
+
this.rows = rows;
|
8
|
+
this.cols = cols;
|
9
|
+
this.matrix = null;
|
10
|
+
if (cols !== null && rows !== null) {
|
11
|
+
// empty matrix
|
12
|
+
this.matrix = new Array();
|
13
|
+
for (var i = 0; i < cols; i++) {
|
14
|
+
let col = new Array();
|
15
|
+
for (var j = 0; j < rows; j++) {
|
16
|
+
var staff = {};
|
17
|
+
col.push(staff);
|
18
|
+
}
|
19
|
+
this.matrix.push(col);
|
20
|
+
}
|
21
|
+
}
|
22
|
+
}
|
23
|
+
populateFromMEI(mei) {
|
24
|
+
var _a, _b, _c, _d, _e, _f;
|
25
|
+
this.matrix = new Array();
|
26
|
+
this.cols = mei.querySelectorAll("measure").length;
|
27
|
+
this.rows = mei.querySelector("measure").querySelectorAll("staff").length;
|
28
|
+
var measures = mei.querySelectorAll("measure");
|
29
|
+
for (var i = 0; i < this.cols; i++) {
|
30
|
+
let col = new Array();
|
31
|
+
let measure = measures[i];
|
32
|
+
let prevMeasure;
|
33
|
+
if (i == 0) {
|
34
|
+
prevMeasure = measure;
|
35
|
+
}
|
36
|
+
else {
|
37
|
+
prevMeasure = measures[i - 1];
|
38
|
+
}
|
39
|
+
let staves = measure.querySelectorAll("staff");
|
40
|
+
let prevStaves = prevMeasure.querySelectorAll("staff");
|
41
|
+
for (var j = 0; j < this.rows; j++) {
|
42
|
+
let staffDef = mei.querySelector("staffDef[n=\"" + (j + 1).toString() + "\"]");
|
43
|
+
let staff = {};
|
44
|
+
let clefs = i === 0 ? [] : prevStaves[j].querySelectorAll("clef");
|
45
|
+
let keysigs = i === 0 ? [] : staves[j].querySelectorAll("keySig");
|
46
|
+
let meterSigs = staves[j].querySelectorAll("meterSig");
|
47
|
+
let clefIdx;
|
48
|
+
if (clefs.length > 0) {
|
49
|
+
if (i === 0) {
|
50
|
+
clefIdx = 0;
|
51
|
+
}
|
52
|
+
else {
|
53
|
+
clefIdx = clefs.length - 1;
|
54
|
+
}
|
55
|
+
let clefShape = clefs[clefIdx].getAttribute("shape");
|
56
|
+
staff.clef = clefShape;
|
57
|
+
}
|
58
|
+
else {
|
59
|
+
if (i > 0) {
|
60
|
+
staff.clef = this.matrix[i - 1][j].clef;
|
61
|
+
staff.clefline = this.matrix[i - 1][j].clefline;
|
62
|
+
staff.clefdisplacement = this.matrix[i - 1][j].clefdisplacement;
|
63
|
+
}
|
64
|
+
else {
|
65
|
+
staff.clef = ((_a = staffDef.querySelector("clef")) === null || _a === void 0 ? void 0 : _a.getAttribute("shape")) || staffDef.getAttribute("clef.shape");
|
66
|
+
staff.clefline = ((_b = staffDef.querySelector("clef")) === null || _b === void 0 ? void 0 : _b.getAttribute("line")) || staffDef.getAttribute("clef.line");
|
67
|
+
staff.clefdisplacement = ((_c = staffDef.querySelector("clef")) === null || _c === void 0 ? void 0 : _c.getAttribute("dis")) ? ((_d = staffDef.querySelector("clef")) === null || _d === void 0 ? void 0 : _d.getAttribute("dis")) + ((_e = staffDef.querySelector("clef")) === null || _e === void 0 ? void 0 : _e.getAttribute("dis.place")) : null;
|
68
|
+
}
|
69
|
+
}
|
70
|
+
if (keysigs.length > 0) {
|
71
|
+
let lastIdx = keysigs.length - 1;
|
72
|
+
let keysig = keysigs[lastIdx].getAttribute("sig");
|
73
|
+
staff.keysig = keysig;
|
74
|
+
}
|
75
|
+
else if (i > 0) {
|
76
|
+
staff.keysig = this.matrix[i - 1][j].keysig;
|
77
|
+
}
|
78
|
+
else {
|
79
|
+
if (staffDef.querySelector("keySig") === null) {
|
80
|
+
staff.keysig = "0";
|
81
|
+
}
|
82
|
+
else {
|
83
|
+
staff.keysig = ((_f = staffDef.querySelector("keySig")) === null || _f === void 0 ? void 0 : _f.getAttribute("sig")) || staffDef.getAttribute("keysig");
|
84
|
+
}
|
85
|
+
}
|
86
|
+
if (meterSigs.length > 0) {
|
87
|
+
let lastIdx = meterSigs.length - 1;
|
88
|
+
let unit = meterSigs[lastIdx].getAttribute("unit");
|
89
|
+
let count = meterSigs[lastIdx].getAttribute("count");
|
90
|
+
staff.meterSig = { unit: unit, count: count };
|
91
|
+
}
|
92
|
+
else if (i > 0) {
|
93
|
+
staff.meterSig = this.matrix[i - 1][j].meterSig;
|
94
|
+
}
|
95
|
+
else {
|
96
|
+
if (staffDef.querySelector("meterSig") !== null) {
|
97
|
+
staff.meterSig = { unit: staffDef.querySelector("meterSig").getAttribute("unit"), count: staffDef.querySelector("meterSig").getAttribute("count") };
|
98
|
+
}
|
99
|
+
else if (staffDef.getAttribute("meter.unit") !== null) {
|
100
|
+
staff.meterSig = { unit: staffDef.getAttribute("meter.unit"), count: staffDef.getAttribute("meter.count") };
|
101
|
+
}
|
102
|
+
else {
|
103
|
+
staff.meterSig = null;
|
104
|
+
}
|
105
|
+
}
|
106
|
+
col.push(staff);
|
107
|
+
}
|
108
|
+
this.matrix.push(col);
|
109
|
+
}
|
110
|
+
//console.log(this.matrix)
|
111
|
+
}
|
112
|
+
addMeasure(n = 1) {
|
113
|
+
for (var i = 0; i < n; i++) {
|
114
|
+
let col = new Array();
|
115
|
+
for (var j = 0; j < this.rows; j++) {
|
116
|
+
var staff = {};
|
117
|
+
col.push(staff);
|
118
|
+
}
|
119
|
+
this.matrix.push(col);
|
120
|
+
}
|
121
|
+
this.cols += n;
|
122
|
+
}
|
123
|
+
addStaff(n = 1) {
|
124
|
+
for (var i = 0; i < this.cols; i++) {
|
125
|
+
for (var j = 0; j < n; j++) {
|
126
|
+
var staff = {};
|
127
|
+
this.matrix[i].push(staff);
|
128
|
+
}
|
129
|
+
}
|
130
|
+
this.rows += n;
|
131
|
+
}
|
132
|
+
/**
|
133
|
+
* Get StaffType from matrix for [staff][measure]
|
134
|
+
* @param row measure index = attribute("n")-1
|
135
|
+
* @param col staff index = attribute("n")-1
|
136
|
+
* @returns
|
137
|
+
*/
|
138
|
+
get(row, col) {
|
139
|
+
if (!isNaN(parseInt(row.toString())) && !isNaN(parseInt(col.toString()))) {
|
140
|
+
if (typeof row === "string") {
|
141
|
+
row = parseInt(row.toString()) - 1;
|
142
|
+
}
|
143
|
+
if (typeof col === "string") {
|
144
|
+
col = parseInt(col.toString()) - 1;
|
145
|
+
}
|
146
|
+
return this.matrix[row][col];
|
147
|
+
}
|
148
|
+
else {
|
149
|
+
return null;
|
150
|
+
}
|
151
|
+
}
|
152
|
+
getDimensions() {
|
153
|
+
return { rows: this.rows, cols: this.cols };
|
154
|
+
}
|
155
|
+
}
|
156
|
+
exports.default = MeasureMatrix;
|