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.
Files changed (132) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +51 -0
  3. package/package.json +56 -0
  4. package/src/fonts/bravura/FONTLOG.txt +243 -0
  5. package/src/fonts/bravura/OFL-FAQ.txt +369 -0
  6. package/src/fonts/bravura/OFL.txt +94 -0
  7. package/src/fonts/bravura/bravura-text.md +153 -0
  8. package/src/fonts/bravura/bravura_metadata.json +34718 -0
  9. package/src/fonts/bravura/eot/Bravura.eot +0 -0
  10. package/src/fonts/bravura/eot/BravuraText.eot +0 -0
  11. package/src/fonts/bravura/otf/Bravura.otf +0 -0
  12. package/src/fonts/bravura/otf/BravuraText.otf +0 -0
  13. package/src/fonts/bravura/svg/Bravura.svg +3517 -0
  14. package/src/fonts/bravura/svg/BravuraText.svg +18879 -0
  15. package/src/fonts/bravura/woff/Bravura.woff +0 -0
  16. package/src/fonts/bravura/woff/BravuraText.woff +0 -0
  17. package/src/fonts/colaborate/ColabBol-webfont.eot +0 -0
  18. package/src/fonts/colaborate/ColabBol-webfont.svg +976 -0
  19. package/src/fonts/colaborate/ColabBol-webfont.ttf +0 -0
  20. package/src/fonts/colaborate/ColabBol-webfont.woff +0 -0
  21. package/src/fonts/colaborate/ColabLig-webfont.eot +0 -0
  22. package/src/fonts/colaborate/ColabLig-webfont.svg +976 -0
  23. package/src/fonts/colaborate/ColabLig-webfont.ttf +0 -0
  24. package/src/fonts/colaborate/ColabLig-webfont.woff +0 -0
  25. package/src/fonts/colaborate/ColabMed-webfont.eot +0 -0
  26. package/src/fonts/colaborate/ColabMed-webfont.svg +976 -0
  27. package/src/fonts/colaborate/ColabMed-webfont.ttf +0 -0
  28. package/src/fonts/colaborate/ColabMed-webfont.woff +0 -0
  29. package/src/fonts/colaborate/ColabReg-webfont.eot +0 -0
  30. package/src/fonts/colaborate/ColabReg-webfont.svg +976 -0
  31. package/src/fonts/colaborate/ColabReg-webfont.ttf +0 -0
  32. package/src/fonts/colaborate/ColabReg-webfont.woff +0 -0
  33. package/src/fonts/colaborate/ColabThi-webfont.eot +0 -0
  34. package/src/fonts/colaborate/ColabThi-webfont.svg +970 -0
  35. package/src/fonts/colaborate/ColabThi-webfont.ttf +0 -0
  36. package/src/fonts/colaborate/ColabThi-webfont.woff +0 -0
  37. package/src/images/GUI/.DS_Store +0 -0
  38. package/src/images/GUI/backward-fast-solid.svg +1 -0
  39. package/src/images/GUI/bars-solid.svg +1 -0
  40. package/src/images/GUI/caret-left-solid.svg +1 -0
  41. package/src/images/GUI/caret-right-solid.svg +1 -0
  42. package/src/images/GUI/edit-solid.svg +1 -0
  43. package/src/images/GUI/pause-solid.svg +1 -0
  44. package/src/images/GUI/play-solid.svg +1 -0
  45. package/src/images/GUI/triplet.svg +21 -0
  46. package/src/images/GUI/zoomin.svg +1 -0
  47. package/src/images/GUI/zoomout.svg +1 -0
  48. package/src/images/bravura_notes/.DS_Store +0 -0
  49. package/src/images/bravura_notes/16th.svg +1 -0
  50. package/src/images/bravura_notes/32th.svg +1 -0
  51. package/src/images/bravura_notes/alterDDown.svg +1 -0
  52. package/src/images/bravura_notes/alterDUp.svg +1 -0
  53. package/src/images/bravura_notes/alterDown.svg +1 -0
  54. package/src/images/bravura_notes/alterNeutral.svg +1 -0
  55. package/src/images/bravura_notes/alterUp.svg +1 -0
  56. package/src/images/bravura_notes/beams.svg +1 -0
  57. package/src/images/bravura_notes/eigth.svg +1 -0
  58. package/src/images/bravura_notes/full.svg +1 -0
  59. package/src/images/bravura_notes/half.svg +1 -0
  60. package/src/images/bravura_notes/oneDot.svg +1 -0
  61. package/src/images/bravura_notes/pauseNote.svg +1 -0
  62. package/src/images/bravura_notes/quarter.svg +1 -0
  63. package/src/images/bravura_notes/tie.svg +1 -0
  64. package/src/images/bravura_notes/twoDot.svg +1 -0
  65. package/src/scripts/js/.DS_Store +0 -0
  66. package/src/scripts/js/Core.js +887 -0
  67. package/src/scripts/js/MusicPlayer.js +572 -0
  68. package/src/scripts/js/MusicProcessor.js +652 -0
  69. package/src/scripts/js/VerovioScoreEditor.js +183 -0
  70. package/src/scripts/js/assets/mei_template.js +161 -0
  71. package/src/scripts/js/constants.js +20 -0
  72. package/src/scripts/js/datastructures/MeasureMatrix.js +235 -0
  73. package/src/scripts/js/datastructures/ScoreGraph.js +432 -0
  74. package/src/scripts/js/datastructures/ScoreNode.js +78 -0
  75. package/src/scripts/js/entry.js +4 -0
  76. package/src/scripts/js/gui/Annotations.js +456 -0
  77. package/src/scripts/js/gui/Cursor.js +203 -0
  78. package/src/scripts/js/gui/CustomAnnotationDrawer.js +114 -0
  79. package/src/scripts/js/gui/CustomAnnotationShapeDrawer.js +114 -0
  80. package/src/scripts/js/gui/HarmonyLabel.js +104 -0
  81. package/src/scripts/js/gui/Label.js +2 -0
  82. package/src/scripts/js/gui/PhantomElement.js +132 -0
  83. package/src/scripts/js/gui/ScoreManipulator.js +156 -0
  84. package/src/scripts/js/gui/Tabbar.js +675 -0
  85. package/src/scripts/js/gui/TempoLabel.js +60 -0
  86. package/src/scripts/js/gui/Toolbar copy.js +614 -0
  87. package/src/scripts/js/gui/Toolbar.js +618 -0
  88. package/src/scripts/js/handlers/AnnotationChangeHandler.js +567 -0
  89. package/src/scripts/js/handlers/AnnotationDragHandler.js +113 -0
  90. package/src/scripts/js/handlers/AnnotationLineHandler.js +113 -0
  91. package/src/scripts/js/handlers/ArticulationHandler.js +20 -0
  92. package/src/scripts/js/handlers/ClickModeHandler.js +265 -0
  93. package/src/scripts/js/handlers/CustomAnnotationShapeDrawer.js +131 -0
  94. package/src/scripts/js/handlers/CustomToolbarHandler.js +297 -0
  95. package/src/scripts/js/handlers/DeleteHandler.js +102 -0
  96. package/src/scripts/js/handlers/GlobalKeyboardHandler.js +367 -0
  97. package/src/scripts/js/handlers/Handler.js +2 -0
  98. package/src/scripts/js/handlers/HarmonyHandler.js +282 -0
  99. package/src/scripts/js/handlers/InsertModeHandler copy.js +423 -0
  100. package/src/scripts/js/handlers/InsertModeHandler.js +380 -0
  101. package/src/scripts/js/handlers/InsertModeHandler_deprecated.js +424 -0
  102. package/src/scripts/js/handlers/KeyModeHandler copy.js +407 -0
  103. package/src/scripts/js/handlers/KeyModeHandler.js +456 -0
  104. package/src/scripts/js/handlers/KeyModeHandler_deprecated.js +411 -0
  105. package/src/scripts/js/handlers/LabelHandler.js +461 -0
  106. package/src/scripts/js/handlers/ModHandler.js +311 -0
  107. package/src/scripts/js/handlers/NoteDragHandler copy.js +148 -0
  108. package/src/scripts/js/handlers/NoteDragHandler.js +97 -0
  109. package/src/scripts/js/handlers/NoteDragHandler_deprecated.js +150 -0
  110. package/src/scripts/js/handlers/PhantomElementHandler.js +168 -0
  111. package/src/scripts/js/handlers/ScoreManipulatorHandler.js +135 -0
  112. package/src/scripts/js/handlers/SelectionHandler.js +218 -0
  113. package/src/scripts/js/handlers/SideBarHandler.js +499 -0
  114. package/src/scripts/js/handlers/TooltipHandler.js +132 -0
  115. package/src/scripts/js/handlers/WindowHandler.js +257 -0
  116. package/src/scripts/js/utils/DOMCreator.js +174 -0
  117. package/src/scripts/js/utils/MEIConverter.js +64 -0
  118. package/src/scripts/js/utils/MEIOperations.js +2112 -0
  119. package/src/scripts/js/utils/Mouse2MEI.js +735 -0
  120. package/src/scripts/js/utils/Mouse2SVG.js +737 -0
  121. package/src/scripts/js/utils/SVGEditor.js +352 -0
  122. package/src/scripts/js/utils/SVGFiller.js +245 -0
  123. package/src/scripts/js/utils/Types.js +2 -0
  124. package/src/scripts/js/utils/VerovioWrapper copy.js +156 -0
  125. package/src/scripts/js/utils/VerovioWrapper.js +165 -0
  126. package/src/scripts/js/utils/VerovioWrapperLocal.js +156 -0
  127. package/src/scripts/js/utils/convenienceQueries.js +37 -0
  128. package/src/scripts/js/utils/coordinates.js +54 -0
  129. package/src/scripts/js/utils/firefoxBBoxes.js +143 -0
  130. package/src/scripts/js/utils/mappings.js +332 -0
  131. package/src/scripts/js/utils/random.js +45 -0
  132. package/src/styles/VerovioScoreEditor.css +694 -0
@@ -0,0 +1,183 @@
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 VerovioScoreEditor
9
+ */
10
+ class VerovioScoreEditor {
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
+ if ((container === null || container === void 0 ? void 0 : container.id) === null) {
19
+ throw new Error("The editor's container must have an id");
20
+ }
21
+ if (container === null) {
22
+ container = document.body;
23
+ container.id = "editorInBody";
24
+ }
25
+ (_a = container === null || container === void 0 ? void 0 : container.classList) === null || _a === void 0 ? void 0 : _a.add("vse-container");
26
+ this.container = container;
27
+ this.options = options;
28
+ this.meiChangedCallback = meiCallback;
29
+ this.loadScripts();
30
+ this.setMutationObserver();
31
+ }
32
+ /**
33
+ * Load verovio script.
34
+ * Makes sure that only one script instance is in the DOM.
35
+ *
36
+ */
37
+ loadScripts() {
38
+ var src = "https://www.verovio.org/javascript/" + constants_1.constants._VEROVIO_VERSION_ + "/verovio-toolkit.js";
39
+ var scriptId = "verovioScript";
40
+ var script = document.querySelector("#" + scriptId) || document.createElement('script');
41
+ script.src = src;
42
+ if (script.id === "") {
43
+ script.id = scriptId;
44
+ }
45
+ if (script.getAttribute("loaded") === null) {
46
+ script.setAttribute("loaded", "false");
47
+ }
48
+ if (script.getAttribute("loaded") === "true") {
49
+ this.initGUI().then(() => {
50
+ if (this.meiChangedCallback != undefined) {
51
+ this.setMEIChangedCallback(this.meiChangedCallback);
52
+ }
53
+ });
54
+ }
55
+ if (document.getElementById(scriptId) === null) {
56
+ var prior = document.getElementsByTagName('script')[0];
57
+ script.async = false;
58
+ prior.parentNode.insertBefore(script, prior);
59
+ script.onload = function () {
60
+ script.setAttribute("loaded", "true");
61
+ };
62
+ }
63
+ }
64
+ /**
65
+ * Observes if the script is already loaded. Fires initGUI() when Attribute "loaded" changes to "true"
66
+ */
67
+ setMutationObserver() {
68
+ var that = this;
69
+ var observer = new MutationObserver(function (mutations) {
70
+ mutations.forEach(function (mutation) {
71
+ if (mutation.type === "attributes") {
72
+ var t = mutation.target;
73
+ if (mutation.attributeName === "loaded" && t.getAttribute(mutation.attributeName) === "true") {
74
+ that.initGUI().then(() => {
75
+ if (that.meiChangedCallback != undefined) {
76
+ that.setMEIChangedCallback(that.meiChangedCallback);
77
+ }
78
+ });
79
+ }
80
+ }
81
+ });
82
+ });
83
+ observer.observe(document.getElementById("verovioScript"), {
84
+ attributes: true
85
+ });
86
+ }
87
+ /**
88
+ * Init everything on load
89
+ * @param container container provided by H5P
90
+ */
91
+ initGUI() {
92
+ return new Promise((resolve) => {
93
+ var _a, _b;
94
+ var btnGrpClass = "btn-group-sm me-2";
95
+ // MAIN/ Permanent TOOLBAR
96
+ // parentElement for dropdown
97
+ this.container.append(dc.makeNewDiv("handlerGroup", btnGrpClass, { role: "group" })); //"me-2 h-100"))
98
+ //parentElement for Notebuttons
99
+ this.container.append(dc.makeNewDiv("noteGroup", btnGrpClass, { role: "group" }));
100
+ //parentElement for Dotbuttons
101
+ this.container.append(dc.makeNewDiv("dotGroup", btnGrpClass, { role: "group" }));
102
+ //parentElement for local modifier Buttons
103
+ this.container.append(dc.makeNewDiv("modGroup", btnGrpClass, { role: "group" }));
104
+ //parentElement for local accidental Buttons
105
+ this.container.append(dc.makeNewDiv("accidGroup", btnGrpClass, { role: "group" }));
106
+ //sidebarList
107
+ this.container.append(dc.makeNewDiv("sidebarContainer", "sidebar closedSidebar"));
108
+ //parentElement for sidebar open/close
109
+ this.container.append(dc.makeNewDiv("sideBarGroup", btnGrpClass, { role: "group" }));
110
+ //parentElement for playback
111
+ this.container.append(dc.makeNewDiv("soundGroup", btnGrpClass, { role: "group" }));
112
+ //parentElement for zoom
113
+ this.container.append(dc.makeNewDiv("zoomGroup", btnGrpClass, { role: "group" }));
114
+ //parentElement for midi device selection
115
+ this.container.append(dc.makeNewDiv("midiSelectGroup", btnGrpClass, { role: "group" }));
116
+ //parentElement for fileselect group
117
+ this.container.append(dc.makeNewDiv("fileSelectGroup", btnGrpClass, { role: "group" }));
118
+ // parentElement for toolbarTop
119
+ this.container.append(dc.makeNewDiv("btnToolbar", "btn-toolbar d-inline-flex align-items-stretch", { role: "toolbar" }));
120
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
121
+ // CUSTOM TOOLBAR
122
+ // parentElement for customToolbar
123
+ this.container.append(dc.makeNewDiv("customToolbar", "btn-toolbar align-items-stretch", { role: "toolbar" }));
124
+ // and now the tabs
125
+ this.container.append(dc.makeNewDiv("notationTabGroup", btnGrpClass, { role: "group" }));
126
+ this.container.append(dc.makeNewDiv("articulationTabGroup", btnGrpClass, { role: "group" }));
127
+ this.container.append(dc.makeNewDiv("annotationTabGroup", btnGrpClass, { role: "group" }));
128
+ //this.container.append(dc.makeNewDiv("melismaTabGroup", btnGrpClass, {role: "group"}))
129
+ var tb = new Tabbar_1.default(this.options, this.container.id); //new Toolbar(this.options, this.container.id)
130
+ tb.createToolbars();
131
+ //attach mei first time
132
+ this.coreInstance = new Core_1.default(this.container.id);
133
+ this.container.append(dc.makeNewDiv(constants_1.constants._TARGETDIVID_, ""));
134
+ var initEvent = new Event("vseInit");
135
+ var data;
136
+ var isUrl = false;
137
+ if (((_a = this.options) === null || _a === void 0 ? void 0 : _a.meiURL) != undefined) {
138
+ data = this.options.meiURL;
139
+ isUrl = true;
140
+ }
141
+ else if (((_b = this.options) === null || _b === void 0 ? void 0 : _b.data) != undefined) {
142
+ data = this.options.data;
143
+ }
144
+ else if (this.options === null) {
145
+ data = null;
146
+ }
147
+ this.coreInstance.loadData(data, isUrl).then(() => {
148
+ this.container.dispatchEvent(initEvent);
149
+ resolve();
150
+ });
151
+ tb
152
+ .setImportCallback(this.coreInstance.loadDataFunction)
153
+ .setAlignCallback(this.coreInstance.alignFunctionCall)
154
+ .setGetMEICallback(this.coreInstance.getMEI.bind(this.coreInstance));
155
+ //block everthing when firefox (use at least version 114.0.2)
156
+ if (navigator.userAgent.toLowerCase().includes("firefox")) {
157
+ if (!navigator.userAgent.match("Firefox.*")[0].includes("114.0")) {
158
+ var div = document.createElement("div");
159
+ div.id = "ff_warning";
160
+ this.container.insertAdjacentElement("beforebegin", div);
161
+ div.append(this.container);
162
+ 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.";
163
+ }
164
+ }
165
+ });
166
+ }
167
+ /**
168
+ *
169
+ * @param meiChangedCallback Function in which the mei will be used by the calling instance
170
+ */
171
+ setMEIChangedCallback(meiChangedCallback) {
172
+ this.meiChangedCallback = meiChangedCallback;
173
+ this.coreInstance.setMEIChangedCallback(this.meiChangedCallback);
174
+ }
175
+ /**
176
+ * Get Core Instance to manipulate svg output
177
+ * @returns
178
+ */
179
+ getCore() {
180
+ return this.coreInstance;
181
+ }
182
+ }
183
+ exports.default = VerovioScoreEditor;
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const constants_1 = require("../constants");
4
+ const random_1 = require("../utils/random");
5
+ class MeiTemplate {
6
+ /**
7
+ * Create templates for MEI-Componets to be inserted
8
+ * @param xml xml document provided to be altered
9
+ */
10
+ constructor(xml) {
11
+ this.xmlDoc = xml;
12
+ this.isEmpty = true;
13
+ }
14
+ emptyMEI() {
15
+ this.isEmpty = true;
16
+ var mei = document.createElementNS(constants_1.constants._MEINS_, "mei");
17
+ //mei.setAttribute("xmlns", "http://www.music-encoding.org/ns/mei");
18
+ //mei.setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink");
19
+ mei.setAttribute("meiversion", "4.0.0");
20
+ mei.appendChild(this.createMeiHead());
21
+ mei.appendChild(this.createMusic());
22
+ var meiString = mei.outerHTML;
23
+ meiString = meiString.replace(/def/gi, "Def");
24
+ meiString = meiString.replace(/\grp/gi, "Grp");
25
+ meiString = meiString.replace(/\head/gi, "Head");
26
+ meiString = meiString.replace(/space/gi, "Space");
27
+ return meiString;
28
+ }
29
+ createMusic() {
30
+ var newElem = document.createElement("music");
31
+ newElem.appendChild(this.createBody());
32
+ return newElem;
33
+ }
34
+ createBody() {
35
+ var newElem = document.createElement("body");
36
+ newElem.appendChild(this.createMDiv());
37
+ return newElem;
38
+ }
39
+ createMDiv() {
40
+ var newElem = document.createElement("mdiv");
41
+ newElem.appendChild(this.createScore());
42
+ return newElem;
43
+ }
44
+ createScore() {
45
+ var newElem = document.createElement("score");
46
+ newElem.appendChild(this.createScoreDef());
47
+ newElem.appendChild(this.createSection());
48
+ return newElem;
49
+ }
50
+ createSection() {
51
+ var newElem = document.createElement("section");
52
+ newElem.appendChild(this.createMeasure());
53
+ return newElem;
54
+ }
55
+ createScoreDef() {
56
+ var newElem = document.createElement("scoreDef");
57
+ newElem.appendChild(this.createStaffGrp());
58
+ return newElem;
59
+ }
60
+ createStaffGrp() {
61
+ var newElem = document.createElement("staffGrp");
62
+ newElem.appendChild(this.createStaffDef());
63
+ return newElem;
64
+ }
65
+ createStaffDef(n = 1, lines = 5, meterCount = 4, meterUnit = 4) {
66
+ var newElem = document.createElement("staffDef");
67
+ newElem.setAttribute("n", n.toString());
68
+ newElem.setAttribute("lines", lines.toString());
69
+ newElem.setAttribute("meter.count", meterCount.toString());
70
+ newElem.setAttribute("meter.unit", meterUnit.toString());
71
+ newElem.appendChild(this.createClef());
72
+ newElem.appendChild(this.createKeySig());
73
+ return newElem;
74
+ }
75
+ createClef(shape = "G", line = 2) {
76
+ var newElem = document.createElement("clef");
77
+ newElem.setAttribute("shape", shape);
78
+ newElem.setAttribute("line", line.toString());
79
+ return newElem;
80
+ }
81
+ createKeySig(mode = "major", sig = "0") {
82
+ var newElem = document.createElementNS(constants_1.constants._MEINS_, "keySig");
83
+ newElem.setAttribute("mode", mode);
84
+ newElem.setAttribute("sig", sig);
85
+ return newElem;
86
+ }
87
+ createMeterSig(count, unit) {
88
+ var newElem = document.createElementNS(constants_1.constants._MEINS_, "meterSig");
89
+ newElem.setAttribute("count", count);
90
+ newElem.setAttribute("unit", unit);
91
+ return newElem;
92
+ }
93
+ createMeiHead() {
94
+ var newElem = document.createElement("meiHead");
95
+ return newElem;
96
+ }
97
+ /**
98
+ * Return Measure to be inserted into new MEI
99
+ * @param n number count of measures in current staff
100
+ */
101
+ createMeasure(n = 1, staffCount = 1, layerCount = 1) {
102
+ var newElem = document.createElement("measure");
103
+ newElem.setAttribute("n", n.toString());
104
+ for (let i = 0; i < staffCount; i++) {
105
+ newElem.appendChild(this.createStaff(i + 1, layerCount));
106
+ }
107
+ return newElem;
108
+ }
109
+ createStaff(n = 1, layerCount = 1) {
110
+ var newElem = document.createElement("staff");
111
+ newElem.setAttribute("n", n.toString());
112
+ newElem.appendChild(this.createLayer(1));
113
+ return newElem;
114
+ }
115
+ createLayer(n = 1) {
116
+ var newElem = document.createElement("layer");
117
+ newElem.setAttribute("n", n.toString());
118
+ if (this.isEmpty) {
119
+ newElem.appendChild(this.createMRest());
120
+ }
121
+ return newElem;
122
+ }
123
+ createMSpace() {
124
+ var newElem = document.createElementNS(constants_1.constants._MEINS_, "mSpace");
125
+ return newElem;
126
+ }
127
+ createMRest() {
128
+ var newElem = document.createElementNS(constants_1.constants._MEINS_, "mRest");
129
+ return newElem;
130
+ }
131
+ createTempo(mm, mmUnit, tstamp = null, startId = null) {
132
+ var newElement = document.createElementNS(constants_1.constants._MEINS_, "tempo");
133
+ newElement.setAttribute("id", random_1.uuidv4());
134
+ newElement.setAttribute("place", "above");
135
+ if (startId === null && tstamp === null) {
136
+ throw new Error("Tempo MUST either have timestamp or startId");
137
+ }
138
+ if (tstamp !== null)
139
+ newElement.setAttribute("tstamp", tstamp);
140
+ if (startId !== null)
141
+ newElement.setAttribute("startId", startId);
142
+ newElement.setAttribute("mm", mm);
143
+ newElement.setAttribute("mm.unit", mmUnit);
144
+ newElement.setAttribute("midi.bpm", (parseFloat(mm) * parseFloat(mmUnit)).toString());
145
+ newElement.setAttribute("staff", "1");
146
+ var rend = document.createElementNS(constants_1.constants._MEINS_, "rend");
147
+ rend.setAttribute("id", random_1.uuidv4());
148
+ rend.setAttribute("fontname", "VerovioText");
149
+ rend.textContent = "__";
150
+ newElement.appendChild(rend);
151
+ newElement.textContent = "__ = " + mm;
152
+ return newElement;
153
+ }
154
+ appendToRoot(node) {
155
+ if (this.xmlDoc instanceof XMLDocument) {
156
+ var refElem = this.xmlDoc.getElementsByTagName("measure").item(0);
157
+ refElem.parentNode.appendChild(node);
158
+ }
159
+ }
160
+ }
161
+ exports.default = MeiTemplate;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.constants = void 0;
4
+ var constants;
5
+ (function (constants) {
6
+ constants["_TARGETDIVID_"] = "svgContainer";
7
+ constants["_TARGETDIVID_WITH_IDSELECTOR_"] = "#svgContainer";
8
+ constants["_MEASURE_"] = "measure";
9
+ constants["_NOTE_"] = "note";
10
+ constants["_NOTE_WITH_CLASSSELECTOR_"] = ".note";
11
+ constants["_STAFF_WITH_CLASSSELECTOR_"] = ".staff";
12
+ constants["_NOTEHEAD_"] = "notehead";
13
+ constants["_vrvSVGID_"] = "vrvSVG";
14
+ constants["_vrvSVGID_WITH_IDSELECTOR_"] = "#vrvSVG";
15
+ constants["_VEROVIO_VERSION_"] = "3.6.0";
16
+ constants["_METERUNIT_"] = "meter.unit";
17
+ constants["_METERCOUNT_"] = "meter.count";
18
+ constants["_SVGNS_"] = "http://www.w3.org/2000/svg";
19
+ constants["_MEINS_"] = "http://www.music-encoding.org/ns/mei";
20
+ })(constants = exports.constants || (exports.constants = {}));
@@ -0,0 +1,235 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const mappings_1 = require("../utils/mappings");
4
+ //@ts-ignore
5
+ //const $ = H5P.jQuery;
6
+ class MeasureMatrix {
7
+ constructor(rows = null, cols = null) {
8
+ this.rows = rows;
9
+ this.cols = cols;
10
+ this.matrix = null;
11
+ if (cols !== null && rows !== null) {
12
+ // empty matrix
13
+ this.matrix = new Array();
14
+ for (var i = 0; i < cols; i++) {
15
+ let col = new Array();
16
+ for (var j = 0; j < rows; j++) {
17
+ var staff = {};
18
+ col.push(staff);
19
+ }
20
+ this.matrix.push(col);
21
+ }
22
+ }
23
+ }
24
+ /**
25
+ * @deprecated
26
+ * @param svg
27
+ */
28
+ populateFromSVG(svg) {
29
+ this.matrix = new Array();
30
+ this.cols = svg.querySelectorAll(".measure").length;
31
+ this.rows = svg.querySelector(".measure").querySelectorAll(".staff").length;
32
+ var measures = svg.querySelectorAll(".measure");
33
+ for (var i = 0; i < this.cols; i++) {
34
+ let col = new Array();
35
+ let measure = measures[i];
36
+ let prevMeasure;
37
+ if (i == 0) {
38
+ prevMeasure = measure;
39
+ }
40
+ else {
41
+ prevMeasure = measures[i - 1];
42
+ }
43
+ let staves = measure.querySelectorAll(".staff");
44
+ let prevStaves = prevMeasure.querySelectorAll(".staff");
45
+ for (var j = 0; j < this.rows; j++) {
46
+ let staff = {};
47
+ let clefs = prevStaves[j].querySelectorAll(".clef");
48
+ let keysigs = staves[j].querySelectorAll(".keySig");
49
+ let meterSigs = staves[j].querySelectorAll(".meterSig");
50
+ if (clefs.length > 0) {
51
+ let clefIdx;
52
+ if (i === 0) {
53
+ clefIdx = 0;
54
+ }
55
+ else {
56
+ clefIdx = clefs.length - 1;
57
+ }
58
+ let clefShape = clefs[clefIdx].querySelector("use").getAttribute("xlink:href");
59
+ if (clefShape.includes("-")) {
60
+ let clefRegex = /^(.*?)-/g;
61
+ clefShape = clefRegex.exec(clefShape)[0];
62
+ clefShape = clefShape.slice(0, -1);
63
+ }
64
+ clefShape = mappings_1.idToClef.get(clefShape);
65
+ staff.clef = clefShape;
66
+ }
67
+ else {
68
+ staff.clef = this.matrix[i - 1][j].clef;
69
+ }
70
+ if (keysigs.length > 0) {
71
+ let lastIdx = keysigs.length - 1;
72
+ let keysigcount = keysigs[lastIdx].querySelectorAll("use").length;
73
+ let keysig = keysigs[lastIdx].querySelector("use").getAttribute("xlink:href") === "#E262" ? "f" : "s";
74
+ keysig = keysigcount.toString() + keysig;
75
+ staff.keysig = keysig;
76
+ }
77
+ else if (i > 0) {
78
+ staff.keysig = this.matrix[i - 1][j].keysig;
79
+ }
80
+ else { // if first measure has no accidentials
81
+ staff.keysig = "0";
82
+ }
83
+ if (meterSigs.length > 0) {
84
+ let lastIdx = meterSigs.length - 1;
85
+ let unit = meterSigs[lastIdx].getAttribute("unit");
86
+ let count = meterSigs[lastIdx].getAttribute("count");
87
+ staff.meterSig = { unit: unit, count: count };
88
+ }
89
+ else if (i > 0) {
90
+ staff.meterSig = this.matrix[i - 1][j].meterSig;
91
+ }
92
+ else {
93
+ if (staves[j].querySelector("metersig") === null) {
94
+ staff.meterSig = null;
95
+ }
96
+ else {
97
+ staff.meterSig = { unit: staves[j].querySelector("metersig").getAttribute("unit"), count: staves[j].querySelector("metersig").getAttribute("count") };
98
+ }
99
+ }
100
+ col.push(staff);
101
+ }
102
+ this.matrix.push(col);
103
+ }
104
+ //console.log(this.matrix)
105
+ }
106
+ populateFromMEI(mei) {
107
+ var _a, _b;
108
+ this.matrix = new Array();
109
+ this.cols = mei.querySelectorAll("measure").length;
110
+ this.rows = mei.querySelector("measure").querySelectorAll("staff").length;
111
+ var measures = mei.querySelectorAll("measure");
112
+ for (var i = 0; i < this.cols; i++) {
113
+ let col = new Array();
114
+ let measure = measures[i];
115
+ let prevMeasure;
116
+ if (i == 0) {
117
+ prevMeasure = measure;
118
+ }
119
+ else {
120
+ prevMeasure = measures[i - 1];
121
+ }
122
+ let staves = measure.querySelectorAll("staff");
123
+ let prevStaves = prevMeasure.querySelectorAll("staff");
124
+ for (var j = 0; j < this.rows; j++) {
125
+ let staffDef = mei.querySelector("staffDef[n=\"" + (j + 1).toString() + "\"]");
126
+ let staff = {};
127
+ let clefs = i === 0 ? [] : prevStaves[j].querySelectorAll("clef");
128
+ let keysigs = i === 0 ? [] : staves[j].querySelectorAll("keySig");
129
+ let meterSigs = staves[j].querySelectorAll("meterSig");
130
+ let clefIdx;
131
+ if (clefs.length > 0) {
132
+ if (i === 0) {
133
+ clefIdx = 0;
134
+ }
135
+ else {
136
+ clefIdx = clefs.length - 1;
137
+ }
138
+ let clefShape = clefs[clefIdx].getAttribute("shape");
139
+ staff.clef = clefShape;
140
+ }
141
+ else {
142
+ if (i > 0) {
143
+ staff.clef = this.matrix[i - 1][j].clef;
144
+ }
145
+ else {
146
+ staff.clef = ((_a = staffDef.querySelector("clef")) === null || _a === void 0 ? void 0 : _a.getAttribute("shape")) || staffDef.getAttribute("clef.shape");
147
+ }
148
+ }
149
+ if (keysigs.length > 0) {
150
+ let lastIdx = keysigs.length - 1;
151
+ let keysig = keysigs[lastIdx].getAttribute("sig");
152
+ staff.keysig = keysig;
153
+ }
154
+ else if (i > 0) {
155
+ staff.keysig = this.matrix[i - 1][j].keysig;
156
+ }
157
+ else {
158
+ if (staffDef.querySelector("keySig") === null) {
159
+ staff.keysig = "0";
160
+ }
161
+ else {
162
+ staff.keysig = ((_b = staffDef.querySelector("keySig")) === null || _b === void 0 ? void 0 : _b.getAttribute("sig")) || staffDef.getAttribute("keysig");
163
+ }
164
+ }
165
+ if (meterSigs.length > 0) {
166
+ let lastIdx = meterSigs.length - 1;
167
+ let unit = meterSigs[lastIdx].getAttribute("unit");
168
+ let count = meterSigs[lastIdx].getAttribute("count");
169
+ staff.meterSig = { unit: unit, count: count };
170
+ }
171
+ else if (i > 0) {
172
+ staff.meterSig = this.matrix[i - 1][j].meterSig;
173
+ }
174
+ else {
175
+ if (staffDef.querySelector("meterSig") !== null) {
176
+ staff.meterSig = { unit: staffDef.querySelector("meterSig").getAttribute("unit"), count: staffDef.querySelector("meterSig").getAttribute("count") };
177
+ }
178
+ else if (staffDef.getAttribute("meter.unit") !== null) {
179
+ staff.meterSig = { unit: staffDef.getAttribute("meter.unit"), count: staffDef.getAttribute("meter.count") };
180
+ }
181
+ else {
182
+ staff.meterSig = null;
183
+ }
184
+ }
185
+ col.push(staff);
186
+ }
187
+ this.matrix.push(col);
188
+ }
189
+ //console.log(this.matrix)
190
+ }
191
+ addMeasure(n = 1) {
192
+ for (var i = 0; i < n; i++) {
193
+ let col = new Array();
194
+ for (var j = 0; j < this.rows; j++) {
195
+ var staff = {};
196
+ col.push(staff);
197
+ }
198
+ this.matrix.push(col);
199
+ }
200
+ this.cols += n;
201
+ }
202
+ addStaff(n = 1) {
203
+ for (var i = 0; i < this.cols; i++) {
204
+ for (var j = 0; j < n; j++) {
205
+ var staff = {};
206
+ this.matrix[i].push(staff);
207
+ }
208
+ }
209
+ this.rows += n;
210
+ }
211
+ /**
212
+ * Get StaffType from matrix for [staff][measure]
213
+ * @param row measure index = attribute("n")-1
214
+ * @param col staff index = attribute("n")-1
215
+ * @returns
216
+ */
217
+ get(row, col) {
218
+ if (!isNaN(parseInt(row.toString())) && !isNaN(parseInt(col.toString()))) {
219
+ if (typeof row === "string") {
220
+ row = parseInt(row.toString()) - 1;
221
+ }
222
+ if (typeof col === "string") {
223
+ col = parseInt(col.toString()) - 1;
224
+ }
225
+ return this.matrix[row][col];
226
+ }
227
+ else {
228
+ return null;
229
+ }
230
+ }
231
+ getDimensions() {
232
+ return { rows: this.rows, cols: this.cols };
233
+ }
234
+ }
235
+ exports.default = MeasureMatrix;