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,156 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
//@ts-ignore
|
4
|
+
//const $ = H5P.jQuery;
|
5
|
+
/**
|
6
|
+
* A wrapper around the verovio web worker to permit mocking in tests.
|
7
|
+
*/
|
8
|
+
class VerovioWrapper {
|
9
|
+
constructor() {
|
10
|
+
//@ts-ignore
|
11
|
+
this.vrvToolkit = new verovio.toolkit() || null;
|
12
|
+
this.r = 1;
|
13
|
+
if (this.isRetina()) {
|
14
|
+
this.r = 2;
|
15
|
+
}
|
16
|
+
this.widthValue = 2500;
|
17
|
+
this.options = {
|
18
|
+
// from: 'mei',
|
19
|
+
footer: 'none',
|
20
|
+
header: 'none',
|
21
|
+
pageMarginLeft: 50,
|
22
|
+
pageMarginTop: 100,
|
23
|
+
pageMarginBottom: 0,
|
24
|
+
font: 'Bravura',
|
25
|
+
//adjustPageWidth: 0,
|
26
|
+
//adjustPageHeight: 0,
|
27
|
+
noJustification: 1,
|
28
|
+
pageWidth: (this.widthValue / (window.devicePixelRatio / this.r)) / (screen.availHeight / window.innerWidth),
|
29
|
+
//svgRemoveXlink: true,
|
30
|
+
svgViewBox: true,
|
31
|
+
//svgBoundingBoxes: true
|
32
|
+
//pageHeight: 60000
|
33
|
+
};
|
34
|
+
this.vrvToolkit.setOptions(this.options);
|
35
|
+
}
|
36
|
+
/**
|
37
|
+
* Detect, if retina display is used.
|
38
|
+
* This will be important to adjust the pagewith with the given zoom level
|
39
|
+
* @returns
|
40
|
+
*/
|
41
|
+
isRetina() {
|
42
|
+
if (window.matchMedia) {
|
43
|
+
var mq = window.matchMedia("only screen and (min--moz-device-pixel-ratio: 1.3), only screen and (-o-min-device-pixel-ratio: 2.6/2), only screen and (-webkit-min-device-pixel-ratio: 1.3), only screen and (min-device-pixel-ratio: 1.3), only screen and (min-resolution: 1.3dppx)");
|
44
|
+
return (mq && mq.matches);
|
45
|
+
}
|
46
|
+
}
|
47
|
+
setMessage(data) {
|
48
|
+
this.r = 1;
|
49
|
+
if (this.isRetina()) {
|
50
|
+
this.r = 2;
|
51
|
+
}
|
52
|
+
this.vrvToolkit.setOptions({
|
53
|
+
//pageWidth: (this.vrvToolkit.getOptions().pageWidth / (window.devicePixelRatio / this.r)) / (screen.availHeight / window.innerWidth)
|
54
|
+
pageWidth: (this.widthValue / (window.devicePixelRatio / this.r)) / (screen.availHeight / window.innerWidth)
|
55
|
+
});
|
56
|
+
this.data = data || null;
|
57
|
+
var result = {
|
58
|
+
id: data.id
|
59
|
+
};
|
60
|
+
switch (data.action) {
|
61
|
+
case 'renderData':
|
62
|
+
result.mei = this.renderData();
|
63
|
+
break;
|
64
|
+
case 'getElementAttr':
|
65
|
+
result.attributes = this.getElementAttr();
|
66
|
+
break;
|
67
|
+
case 'getTimeForElement':
|
68
|
+
result.time = this.getTimeForElement();
|
69
|
+
break;
|
70
|
+
case "getTimesForElement":
|
71
|
+
result.times = this.getTimesForElement();
|
72
|
+
case 'edit':
|
73
|
+
result.result = this.edit();
|
74
|
+
break;
|
75
|
+
case 'getMEI':
|
76
|
+
result.mei = this.getMEI();
|
77
|
+
break;
|
78
|
+
case 'editInfo':
|
79
|
+
result.info = this.editInfo();
|
80
|
+
break;
|
81
|
+
case 'renderToSVG':
|
82
|
+
result.svg = this.renderToSVG();
|
83
|
+
break;
|
84
|
+
case 'renderToMidi':
|
85
|
+
result.midi = this.renderToMidi();
|
86
|
+
default:
|
87
|
+
break;
|
88
|
+
}
|
89
|
+
return result;
|
90
|
+
}
|
91
|
+
getID() {
|
92
|
+
return this.data.id;
|
93
|
+
}
|
94
|
+
renderData() {
|
95
|
+
var meiString;
|
96
|
+
if (this.data.isUrl) {
|
97
|
+
const req = new XMLHttpRequest();
|
98
|
+
req.open('GET', this.data.mei, false);
|
99
|
+
//req.onload = () => req.status === 200 ? resolve(req.response) : reject(Error(req.statusText));
|
100
|
+
//req.onerror = (e) => reject(Error(`Network Error: ` + e));
|
101
|
+
req.send();
|
102
|
+
if (req.status === 200) {
|
103
|
+
meiString = req.response;
|
104
|
+
}
|
105
|
+
}
|
106
|
+
else {
|
107
|
+
meiString = this.data.mei;
|
108
|
+
}
|
109
|
+
return this.vrvToolkit.renderData(meiString, {});
|
110
|
+
}
|
111
|
+
getElementAttr() {
|
112
|
+
return this.vrvToolkit.getElementAttr(this.data.elementId);
|
113
|
+
}
|
114
|
+
getTimeForElement() {
|
115
|
+
return this.vrvToolkit.getTimeForElement(this.data.elementId);
|
116
|
+
}
|
117
|
+
getTimesForElement() {
|
118
|
+
return this.vrvToolkit.getTimesForElement(this.data.elementId);
|
119
|
+
}
|
120
|
+
edit() {
|
121
|
+
return this.vrvToolkit.edit(this.data.editorAction);
|
122
|
+
}
|
123
|
+
getMEI() {
|
124
|
+
return this.vrvToolkit.getMEI({
|
125
|
+
pageNo: 0,
|
126
|
+
scoreBased: true
|
127
|
+
});
|
128
|
+
}
|
129
|
+
editInfo() {
|
130
|
+
return this.vrvToolkit.editInfo();
|
131
|
+
}
|
132
|
+
renderToSVG() {
|
133
|
+
return this.vrvToolkit.renderToSVG(1);
|
134
|
+
}
|
135
|
+
renderToMidi() {
|
136
|
+
return this.vrvToolkit.renderToMIDI();
|
137
|
+
}
|
138
|
+
/**
|
139
|
+
* Get Toolkit instance to use any method of verovio outside of score editor.
|
140
|
+
* FOr all available methods go to: https://book.verovio.org/toolkit-reference/toolkit-methods.html
|
141
|
+
* @returns toolkit instance
|
142
|
+
*/
|
143
|
+
getToolkit() {
|
144
|
+
return this.vrvToolkit;
|
145
|
+
}
|
146
|
+
getOptions() {
|
147
|
+
return this.options;
|
148
|
+
}
|
149
|
+
setWidthValue(wv) {
|
150
|
+
this.widthValue = wv;
|
151
|
+
}
|
152
|
+
setHeightValue(hv) {
|
153
|
+
this.heightValue = hv;
|
154
|
+
}
|
155
|
+
}
|
156
|
+
exports.default = VerovioWrapper;
|
@@ -0,0 +1,165 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
const midi_1 = require("@tonejs/midi");
|
4
|
+
const buffer_1 = require("buffer");
|
5
|
+
//@ts-ignore
|
6
|
+
//const $ = H5P.jQuery;
|
7
|
+
/**
|
8
|
+
* A wrapper around the verovio web worker to permit mocking in tests.
|
9
|
+
*/
|
10
|
+
class VerovioWrapper {
|
11
|
+
constructor() {
|
12
|
+
//@ts-ignore
|
13
|
+
this.vrvToolkit = new verovio.toolkit() || null;
|
14
|
+
this.r = 1;
|
15
|
+
// if (this.isRetina()) {
|
16
|
+
// this.r = 2
|
17
|
+
// }
|
18
|
+
this.widthValue = 1500;
|
19
|
+
var pageWidth = (this.widthValue / (window.devicePixelRatio / this.r)) / (screen.availHeight / window.innerWidth);
|
20
|
+
this.options = {
|
21
|
+
footer: 'none',
|
22
|
+
header: 'none',
|
23
|
+
pageMarginLeft: 50,
|
24
|
+
pageMarginTop: 50,
|
25
|
+
adjustPageHeight: true,
|
26
|
+
font: 'Bravura',
|
27
|
+
pageWidth: pageWidth / 2,
|
28
|
+
//pageHeight: pageWidth / 4,
|
29
|
+
//justifyVertically: true,
|
30
|
+
svgViewBox: true,
|
31
|
+
};
|
32
|
+
this.vrvToolkit.setOptions(this.options);
|
33
|
+
}
|
34
|
+
/**
|
35
|
+
* Detect, if retina display is used.
|
36
|
+
* This will be important to adjust the pagewith with the given zoom level
|
37
|
+
* @returns
|
38
|
+
*/
|
39
|
+
isRetina() {
|
40
|
+
if (window.matchMedia) {
|
41
|
+
var mq = window.matchMedia("only screen and (min--moz-device-pixel-ratio: 1.3), only screen and (-o-min-device-pixel-ratio: 2.6/2), only screen and (-webkit-min-device-pixel-ratio: 1.3), only screen and (min-device-pixel-ratio: 1.3), only screen and (min-resolution: 1.3dppx)");
|
42
|
+
return (mq && mq.matches);
|
43
|
+
}
|
44
|
+
}
|
45
|
+
setMessage(data) {
|
46
|
+
this.r = 1;
|
47
|
+
if (this.isRetina()) {
|
48
|
+
this.r = 2;
|
49
|
+
}
|
50
|
+
this.vrvToolkit.setOptions({
|
51
|
+
//pageWidth: (this.vrvToolkit.getOptions().pageWidth / (window.devicePixelRatio / this.r)) / (screen.availHeight / window.innerWidth)
|
52
|
+
pageWidth: (this.widthValue / (window.devicePixelRatio / this.r)) / (screen.availHeight / window.innerWidth)
|
53
|
+
});
|
54
|
+
this.data = data || null;
|
55
|
+
var result = {
|
56
|
+
id: data.id
|
57
|
+
};
|
58
|
+
switch (data.action) {
|
59
|
+
case 'renderData':
|
60
|
+
result.svg = this.renderData();
|
61
|
+
break;
|
62
|
+
case 'getElementAttr':
|
63
|
+
result.attributes = this.getElementAttr();
|
64
|
+
break;
|
65
|
+
case 'getTimeForElement':
|
66
|
+
result.time = this.getTimeForElement();
|
67
|
+
break;
|
68
|
+
case "getTimesForElement":
|
69
|
+
result.times = this.getTimesForElement();
|
70
|
+
case 'edit':
|
71
|
+
result.result = this.edit();
|
72
|
+
break;
|
73
|
+
case 'getMEI':
|
74
|
+
result.mei = this.getMEI();
|
75
|
+
break;
|
76
|
+
case 'editInfo':
|
77
|
+
result.info = this.editInfo();
|
78
|
+
break;
|
79
|
+
case 'renderToSVG':
|
80
|
+
result.svg = this.renderToSVG(data.pageNo);
|
81
|
+
break;
|
82
|
+
case 'renderToMidi':
|
83
|
+
result.midi = this.renderToMidi();
|
84
|
+
default:
|
85
|
+
break;
|
86
|
+
}
|
87
|
+
return result;
|
88
|
+
}
|
89
|
+
getID() {
|
90
|
+
return this.data.id;
|
91
|
+
}
|
92
|
+
renderData() {
|
93
|
+
var meiString;
|
94
|
+
if (this.data.isUrl) {
|
95
|
+
const req = new XMLHttpRequest();
|
96
|
+
req.open('GET', this.data.mei, false);
|
97
|
+
//req.onload = () => req.status === 200 ? resolve(req.response) : reject(Error(req.statusText));
|
98
|
+
//req.onerror = (e) => reject(Error(`Network Error: ` + e));
|
99
|
+
req.send();
|
100
|
+
if (req.status === 200) {
|
101
|
+
meiString = req.response;
|
102
|
+
}
|
103
|
+
}
|
104
|
+
else {
|
105
|
+
meiString = this.data.mei;
|
106
|
+
}
|
107
|
+
var render = this.vrvToolkit.renderData(meiString, {});
|
108
|
+
// when page count reaches 2 then each one should be rendered seperately
|
109
|
+
return render;
|
110
|
+
}
|
111
|
+
getElementAttr() {
|
112
|
+
return this.vrvToolkit.getElementAttr(this.data.elementId);
|
113
|
+
}
|
114
|
+
getTimeForElement() {
|
115
|
+
return this.vrvToolkit.getTimeForElement(this.data.elementId);
|
116
|
+
}
|
117
|
+
getTimesForElement() {
|
118
|
+
return this.vrvToolkit.getTimesForElement(this.data.elementId);
|
119
|
+
}
|
120
|
+
edit() {
|
121
|
+
return this.vrvToolkit.edit(this.data.editorAction);
|
122
|
+
}
|
123
|
+
getMEI() {
|
124
|
+
return this.vrvToolkit.getMEI({
|
125
|
+
pageNo: 0,
|
126
|
+
scoreBased: true
|
127
|
+
});
|
128
|
+
}
|
129
|
+
editInfo() {
|
130
|
+
return this.vrvToolkit.editInfo();
|
131
|
+
}
|
132
|
+
renderToSVG(pageNo) {
|
133
|
+
return this.vrvToolkit.renderToSVG(pageNo);
|
134
|
+
}
|
135
|
+
renderToMidi() {
|
136
|
+
return this.vrvToolkit.renderToMIDI();
|
137
|
+
}
|
138
|
+
getMidiJSON() {
|
139
|
+
var midiString = this.renderToMidi();
|
140
|
+
var buffer = buffer_1.Buffer.from(midiString, "base64");
|
141
|
+
return new midi_1.Midi(buffer);
|
142
|
+
}
|
143
|
+
/**
|
144
|
+
* Get Toolkit instance to use any method of verovio outside of score editor.
|
145
|
+
* FOr all available methods go to: https://book.verovio.org/toolkit-reference/toolkit-methods.html
|
146
|
+
* @returns toolkit instance
|
147
|
+
*/
|
148
|
+
getToolkit() {
|
149
|
+
return this.vrvToolkit;
|
150
|
+
}
|
151
|
+
getOptions() {
|
152
|
+
return this.options;
|
153
|
+
}
|
154
|
+
setWidthValue(wv) {
|
155
|
+
this.options.pageWidth = wv;
|
156
|
+
this.vrvToolkit.setOptions(this.options);
|
157
|
+
}
|
158
|
+
setHeightValue(hv) {
|
159
|
+
if (typeof hv === "string")
|
160
|
+
hv = parseFloat(hv);
|
161
|
+
this.options.pageHeight = hv + 250;
|
162
|
+
this.vrvToolkit.setOptions(this.options);
|
163
|
+
}
|
164
|
+
}
|
165
|
+
exports.default = VerovioWrapper;
|
@@ -0,0 +1,156 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
const verovio_1 = require("verovio");
|
4
|
+
//@ts-ignore
|
5
|
+
//const $ = H5P.jQuery;
|
6
|
+
/**
|
7
|
+
* A wrapper around the verovio web worker to permit mocking in tests.
|
8
|
+
*/
|
9
|
+
class VerovioWrapper {
|
10
|
+
constructor() {
|
11
|
+
this.vrvToolkit = new verovio_1.default.toolkit() || null;
|
12
|
+
this.r = 1;
|
13
|
+
if (this.isRetina()) {
|
14
|
+
this.r = 2;
|
15
|
+
}
|
16
|
+
this.widthValue = 2500;
|
17
|
+
this.options = {
|
18
|
+
// from: 'mei',
|
19
|
+
footer: 'none',
|
20
|
+
header: 'none',
|
21
|
+
pageMarginLeft: 50,
|
22
|
+
pageMarginTop: 100,
|
23
|
+
pageMarginBottom: 0,
|
24
|
+
font: 'Bravura',
|
25
|
+
//adjustPageWidth: 0,
|
26
|
+
//adjustPageHeight: 0,
|
27
|
+
noJustification: 1,
|
28
|
+
pageWidth: (this.widthValue / (window.devicePixelRatio / this.r)) / (screen.availHeight / window.innerWidth),
|
29
|
+
//svgRemoveXlink: true,
|
30
|
+
svgViewBox: true,
|
31
|
+
//svgBoundingBoxes: true
|
32
|
+
//pageHeight: 60000
|
33
|
+
};
|
34
|
+
this.vrvToolkit.setOptions(this.options);
|
35
|
+
}
|
36
|
+
/**
|
37
|
+
* Detect, if retina display is used.
|
38
|
+
* This will be important to adjust the pagewith with the given zoom level
|
39
|
+
* @returns
|
40
|
+
*/
|
41
|
+
isRetina() {
|
42
|
+
if (window.matchMedia) {
|
43
|
+
var mq = window.matchMedia("only screen and (min--moz-device-pixel-ratio: 1.3), only screen and (-o-min-device-pixel-ratio: 2.6/2), only screen and (-webkit-min-device-pixel-ratio: 1.3), only screen and (min-device-pixel-ratio: 1.3), only screen and (min-resolution: 1.3dppx)");
|
44
|
+
return (mq && mq.matches);
|
45
|
+
}
|
46
|
+
}
|
47
|
+
setMessage(data) {
|
48
|
+
this.r = 1;
|
49
|
+
if (this.isRetina()) {
|
50
|
+
this.r = 2;
|
51
|
+
}
|
52
|
+
this.vrvToolkit.setOptions({
|
53
|
+
//pageWidth: (this.vrvToolkit.getOptions().pageWidth / (window.devicePixelRatio / this.r)) / (screen.availHeight / window.innerWidth)
|
54
|
+
pageWidth: (this.widthValue / (window.devicePixelRatio / this.r)) / (screen.availHeight / window.innerWidth)
|
55
|
+
});
|
56
|
+
this.data = data || null;
|
57
|
+
var result = {
|
58
|
+
id: data.id
|
59
|
+
};
|
60
|
+
switch (data.action) {
|
61
|
+
case 'renderData':
|
62
|
+
result.mei = this.renderData();
|
63
|
+
break;
|
64
|
+
case 'getElementAttr':
|
65
|
+
result.attributes = this.getElementAttr();
|
66
|
+
break;
|
67
|
+
case 'getTimeForElement':
|
68
|
+
result.time = this.getTimeForElement();
|
69
|
+
break;
|
70
|
+
case "getTimesForElement":
|
71
|
+
result.times = this.getTimesForElement();
|
72
|
+
case 'edit':
|
73
|
+
result.result = this.edit();
|
74
|
+
break;
|
75
|
+
case 'getMEI':
|
76
|
+
result.mei = this.getMEI();
|
77
|
+
break;
|
78
|
+
case 'editInfo':
|
79
|
+
result.info = this.editInfo();
|
80
|
+
break;
|
81
|
+
case 'renderToSVG':
|
82
|
+
result.svg = this.renderToSVG();
|
83
|
+
break;
|
84
|
+
case 'renderToMidi':
|
85
|
+
result.midi = this.renderToMidi();
|
86
|
+
default:
|
87
|
+
break;
|
88
|
+
}
|
89
|
+
return result;
|
90
|
+
}
|
91
|
+
getID() {
|
92
|
+
return this.data.id;
|
93
|
+
}
|
94
|
+
renderData() {
|
95
|
+
var meiString;
|
96
|
+
if (this.data.isUrl) {
|
97
|
+
const req = new XMLHttpRequest();
|
98
|
+
req.open('GET', this.data.mei, false);
|
99
|
+
//req.onload = () => req.status === 200 ? resolve(req.response) : reject(Error(req.statusText));
|
100
|
+
//req.onerror = (e) => reject(Error(`Network Error: ` + e));
|
101
|
+
req.send();
|
102
|
+
if (req.status === 200) {
|
103
|
+
meiString = req.response;
|
104
|
+
}
|
105
|
+
}
|
106
|
+
else {
|
107
|
+
meiString = this.data.mei;
|
108
|
+
}
|
109
|
+
return this.vrvToolkit.renderData(meiString, {});
|
110
|
+
}
|
111
|
+
getElementAttr() {
|
112
|
+
return this.vrvToolkit.getElementAttr(this.data.elementId);
|
113
|
+
}
|
114
|
+
getTimeForElement() {
|
115
|
+
return this.vrvToolkit.getTimeForElement(this.data.elementId);
|
116
|
+
}
|
117
|
+
getTimesForElement() {
|
118
|
+
return this.vrvToolkit.getTimesForElement(this.data.elementId);
|
119
|
+
}
|
120
|
+
edit() {
|
121
|
+
return this.vrvToolkit.edit(this.data.editorAction);
|
122
|
+
}
|
123
|
+
getMEI() {
|
124
|
+
return this.vrvToolkit.getMEI({
|
125
|
+
pageNo: 0,
|
126
|
+
scoreBased: true
|
127
|
+
});
|
128
|
+
}
|
129
|
+
editInfo() {
|
130
|
+
return this.vrvToolkit.editInfo();
|
131
|
+
}
|
132
|
+
renderToSVG() {
|
133
|
+
return this.vrvToolkit.renderToSVG(1);
|
134
|
+
}
|
135
|
+
renderToMidi() {
|
136
|
+
return this.vrvToolkit.renderToMIDI();
|
137
|
+
}
|
138
|
+
/**
|
139
|
+
* Get Toolkit instance to use any method of verovio outside of score editor.
|
140
|
+
* FOr all available methods go to: https://book.verovio.org/toolkit-reference/toolkit-methods.html
|
141
|
+
* @returns toolkit instance
|
142
|
+
*/
|
143
|
+
getToolkit() {
|
144
|
+
return this.vrvToolkit;
|
145
|
+
}
|
146
|
+
getOptions() {
|
147
|
+
return this.options;
|
148
|
+
}
|
149
|
+
setWidthValue(wv) {
|
150
|
+
this.widthValue = wv;
|
151
|
+
}
|
152
|
+
setHeightValue(hv) {
|
153
|
+
this.heightValue = hv;
|
154
|
+
}
|
155
|
+
}
|
156
|
+
exports.default = VerovioWrapper;
|
@@ -0,0 +1,37 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.hasActiveElement = exports.getBySelector = exports.getContainer = exports.getInteractOverlay = exports.getVrvSVG = void 0;
|
4
|
+
function getVrvSVG(containerId, pageNo = 1) {
|
5
|
+
return document.querySelector("#" + containerId + " #vrvSVG");
|
6
|
+
}
|
7
|
+
exports.getVrvSVG = getVrvSVG;
|
8
|
+
function getInteractOverlay(containerId) {
|
9
|
+
return document.querySelector("#" + containerId + " #interactionOverlay");
|
10
|
+
}
|
11
|
+
exports.getInteractOverlay = getInteractOverlay;
|
12
|
+
function getContainer(id) {
|
13
|
+
return document.getElementById(id);
|
14
|
+
}
|
15
|
+
exports.getContainer = getContainer;
|
16
|
+
/**
|
17
|
+
* Get any element by defining parent, target an selector. Booleans will define if the strings are handeled as ids
|
18
|
+
*/
|
19
|
+
function getBySelector(parent, parentModulator, target, targetModulator, selector, all = false) {
|
20
|
+
if (parentModulator !== null) {
|
21
|
+
parent = parentModulator + parent;
|
22
|
+
}
|
23
|
+
if (targetModulator) {
|
24
|
+
target = targetModulator + target;
|
25
|
+
}
|
26
|
+
if (all) {
|
27
|
+
return Array.from(document.querySelectorAll(parent + " " + selector + " " + target));
|
28
|
+
}
|
29
|
+
else {
|
30
|
+
return document.querySelector(parent + " " + selector + " " + target);
|
31
|
+
}
|
32
|
+
}
|
33
|
+
exports.getBySelector = getBySelector;
|
34
|
+
function hasActiveElement(containerId) {
|
35
|
+
return document.getElementById(containerId).classList.contains("activeContainer");
|
36
|
+
}
|
37
|
+
exports.hasActiveElement = hasActiveElement;
|
@@ -0,0 +1,54 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.transformToDOMMatrixCoordinates = exports.getDOMMatrixCoordinates = void 0;
|
4
|
+
/**
|
5
|
+
* Get DOMMatrix coordnates of element according to parent canvas class. Returns null if no canvas is found. If element is DOMRect, canvas must be provided
|
6
|
+
* @param element
|
7
|
+
* @param canvas provide canvas for element, otherwise closest canvas class will be retrieved
|
8
|
+
* @returns
|
9
|
+
*/
|
10
|
+
function getDOMMatrixCoordinates(element, canvas = null) {
|
11
|
+
if (canvas === null) {
|
12
|
+
canvas = element instanceof Element ? element.closest(".canvas") : null;
|
13
|
+
if (element instanceof DOMRect) {
|
14
|
+
throw new Error("Canvas must be provided, if input is instance of DOMRect. Actual instance: " + element.constructor.name);
|
15
|
+
}
|
16
|
+
if (canvas === null)
|
17
|
+
return;
|
18
|
+
}
|
19
|
+
if (canvas.id === "vrvSVG")
|
20
|
+
canvas = canvas.previousElementSibling;
|
21
|
+
var canvasMatrix = canvas.getScreenCTM().inverse();
|
22
|
+
//var elementBBox = !(element instanceof Element) ? element : element.getBoundingClientRect()
|
23
|
+
var elementBBox;
|
24
|
+
try {
|
25
|
+
elementBBox = element.getBoundingClientRect();
|
26
|
+
}
|
27
|
+
catch (error) {
|
28
|
+
elementBBox = element;
|
29
|
+
}
|
30
|
+
var ptLT = new DOMPoint(elementBBox.left, elementBBox.top);
|
31
|
+
ptLT = ptLT.matrixTransform(canvasMatrix);
|
32
|
+
var ptRB = new DOMPoint(elementBBox.right, elementBBox.bottom);
|
33
|
+
ptRB = ptRB.matrixTransform(canvasMatrix);
|
34
|
+
var width = ptRB.x - ptLT.x;
|
35
|
+
var height = ptRB.y - ptLT.y;
|
36
|
+
return { left: ptLT.x, top: ptLT.y, right: ptRB.x, bottom: ptRB.y, width: width, height: height, x: ptLT.x, y: ptLT.y };
|
37
|
+
}
|
38
|
+
exports.getDOMMatrixCoordinates = getDOMMatrixCoordinates;
|
39
|
+
/**
|
40
|
+
* Transforms the given coordinates for a given canvas
|
41
|
+
* @param x
|
42
|
+
* @param y
|
43
|
+
* @param canvas
|
44
|
+
* @returns
|
45
|
+
*/
|
46
|
+
function transformToDOMMatrixCoordinates(x, y, canvas) {
|
47
|
+
if (canvas.id === "vrvSVG")
|
48
|
+
canvas = canvas.previousElementSibling;
|
49
|
+
var canvasMatrix = canvas.getScreenCTM().inverse();
|
50
|
+
var pt = new DOMPoint(x, y);
|
51
|
+
pt = pt.matrixTransform(canvasMatrix);
|
52
|
+
return { x: pt.x, y: pt.y };
|
53
|
+
}
|
54
|
+
exports.transformToDOMMatrixCoordinates = transformToDOMMatrixCoordinates;
|