@hyperbook/markdown 0.18.0 → 0.19.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.
@@ -0,0 +1,46 @@
1
+ hyperbook.abc = (function () {
2
+ const els = document.querySelectorAll(".directive-abc-music");
3
+
4
+ for (let el of els) {
5
+ const tuneEl = el.getElementsByClassName("tune")[0];
6
+ const playerEl = el.getElementsByClassName("player")[0];
7
+
8
+ const tune = atob(el.getAttribute("data-tune"));
9
+ const editor = el.getAttribute("data-editor");
10
+
11
+ if (editor == "true") {
12
+ const editorEl = el.getElementsByClassName("editor")[0];
13
+ editorEl.value = tune;
14
+ let editor = new ABCJS.Editor(editorEl.id, {
15
+ canvas_id: tuneEl,
16
+ synth: {
17
+ el: playerEl,
18
+ options: {
19
+ displayRestart: true,
20
+ displayPlay: true,
21
+ displayProgress: true,
22
+ },
23
+ },
24
+ abcjsParams: {
25
+ responsive: "resize",
26
+ },
27
+ });
28
+ } else {
29
+ const visualObj = ABCJS.renderAbc(tuneEl, tune, {
30
+ responsive: "resize",
31
+ })[0];
32
+ if (ABCJS.synth.supportsAudio()) {
33
+ var synthControl = new ABCJS.synth.SynthController();
34
+ synthControl.load(playerEl, null, {
35
+ displayRestart: true,
36
+ displayPlay: true,
37
+ displayProgress: true,
38
+ });
39
+ synthControl.setTune(visualObj, false);
40
+ } else {
41
+ playerEl.innerHTML =
42
+ "<div class='audio-error'>Audio is not supported in this browser.</div>";
43
+ }
44
+ }
45
+ }
46
+ })();
@@ -0,0 +1,193 @@
1
+ .directive-abc-music .editor {
2
+ width: 100%;
3
+ margin-bottom: 8px;
4
+ font-family: hyperbook-code, monospace;
5
+ height: 150px;
6
+ line-height: 1.2;
7
+ }
8
+
9
+ .abcjs-inline-audio {
10
+ height: 26px;
11
+ padding: 0 5px;
12
+ border-radius: 3px;
13
+ background-color: #424242;
14
+ display: flex;
15
+ align-items: center;
16
+ box-sizing: border-box;
17
+ }
18
+
19
+ .abcjs-inline-audio.abcjs-disabled {
20
+ opacity: 0.5;
21
+ }
22
+
23
+ .abcjs-inline-audio .abcjs-btn {
24
+ display: block;
25
+ width: 28px;
26
+ height: 34px;
27
+ margin-right: 2px;
28
+ padding: 7px 4px;
29
+
30
+ background: none !important;
31
+ border: 1px solid transparent;
32
+ box-sizing: border-box;
33
+ line-height: 1;
34
+ }
35
+
36
+ .abcjs-btn g {
37
+ fill: #f4f4f4;
38
+ stroke: #f4f4f4;
39
+ }
40
+
41
+ .abcjs-inline-audio .abcjs-btn:hover g {
42
+ fill: #cccccc;
43
+ stroke: #cccccc;
44
+ }
45
+
46
+ .abcjs-inline-audio .abcjs-midi-selection.abcjs-pushed {
47
+ border: 1px solid #cccccc;
48
+ background-color: #666666;
49
+ box-sizing: border-box;
50
+ }
51
+
52
+ .abcjs-inline-audio .abcjs-midi-loop.abcjs-pushed {
53
+ border: 1px solid #cccccc;
54
+ background-color: #666666;
55
+ box-sizing: border-box;
56
+ }
57
+
58
+ .abcjs-inline-audio .abcjs-midi-reset.abcjs-pushed {
59
+ border: 1px solid #cccccc;
60
+ background-color: #666666;
61
+ box-sizing: border-box;
62
+ }
63
+
64
+ .abcjs-inline-audio .abcjs-midi-start .abcjs-pause-svg {
65
+ display: none;
66
+ }
67
+
68
+ .abcjs-inline-audio .abcjs-midi-start .abcjs-loading-svg {
69
+ display: none;
70
+ }
71
+
72
+ .abcjs-inline-audio .abcjs-midi-start.abcjs-pushed .abcjs-play-svg {
73
+ display: none;
74
+ }
75
+
76
+ .abcjs-inline-audio .abcjs-midi-start.abcjs-loading .abcjs-play-svg {
77
+ display: none;
78
+ }
79
+
80
+ .abcjs-inline-audio .abcjs-midi-start.abcjs-pushed .abcjs-pause-svg {
81
+ display: block;
82
+ }
83
+
84
+ .abcjs-inline-audio .abcjs-midi-progress-background {
85
+ background-color: #424242;
86
+ height: 10px;
87
+ border-radius: 5px;
88
+ border: 2px solid #cccccc;
89
+ margin: 0 8px 0 15px;
90
+ position: relative;
91
+ flex: 1;
92
+ padding: 0;
93
+ box-sizing: border-box;
94
+ }
95
+
96
+ .abcjs-inline-audio .abcjs-midi-progress-indicator {
97
+ width: 20px;
98
+ margin-left: -10px; /* half of the width */
99
+ height: 14px;
100
+ background-color: #f4f4f4;
101
+ position: absolute;
102
+ display: inline-block;
103
+ border-radius: 6px;
104
+ top: -4px;
105
+ left: 0;
106
+ box-sizing: border-box;
107
+ }
108
+
109
+ .abcjs-inline-audio .abcjs-midi-clock {
110
+ margin-left: 4px;
111
+ margin-top: 1px;
112
+ margin-right: 2px;
113
+ display: inline-block;
114
+ font-family: sans-serif;
115
+ font-size: 16px;
116
+ box-sizing: border-box;
117
+ color: #f4f4f4;
118
+ }
119
+
120
+ .abcjs-inline-audio .abcjs-tempo-wrapper {
121
+ font-size: 10px;
122
+ color: #f4f4f4;
123
+ box-sizing: border-box;
124
+ display: flex;
125
+ align-items: center;
126
+ }
127
+
128
+ .abcjs-inline-audio .abcjs-midi-tempo {
129
+ border-radius: 2px;
130
+ border: none;
131
+ margin: 0 2px 0 4px;
132
+ width: 42px;
133
+ padding-left: 2px;
134
+ box-sizing: border-box;
135
+ }
136
+
137
+ .abcjs-inline-audio .abcjs-loading .abcjs-loading-svg {
138
+ display: inherit;
139
+ }
140
+
141
+ .abcjs-inline-audio .abcjs-loading {
142
+ outline: none;
143
+ animation-name: abcjs-spin;
144
+ animation-duration: 1s;
145
+ animation-iteration-count: infinite;
146
+ animation-timing-function: linear;
147
+
148
+ }
149
+ .abcjs-inline-audio .abcjs-loading-svg circle {
150
+ stroke: #f4f4f4;
151
+ }
152
+
153
+ @keyframes abcjs-spin {
154
+ from {transform:rotate(0deg);}
155
+ to {transform:rotate(360deg);}
156
+ }
157
+
158
+ /* Adding the class "abcjs-large" will make the control easier on a touch device. */
159
+ .abcjs-large .abcjs-inline-audio {
160
+ height: 52px;
161
+ }
162
+ .abcjs-large .abcjs-btn {
163
+ width: 56px;
164
+ height: 52px;
165
+ font-size: 28px;
166
+ padding: 6px 8px;
167
+ }
168
+ .abcjs-large .abcjs-midi-progress-background {
169
+ height: 20px;
170
+ border: 4px solid #cccccc;
171
+ }
172
+ .abcjs-large .abcjs-midi-progress-indicator {
173
+ height: 28px;
174
+ top: -8px;
175
+ width: 40px;
176
+ }
177
+ .abcjs-large .abcjs-midi-clock {
178
+ font-size: 32px;
179
+ margin-right: 10px;
180
+ margin-left: 10px;
181
+ margin-top: -1px;
182
+ }
183
+ .abcjs-large .abcjs-midi-tempo {
184
+ font-size: 20px;
185
+ width: 50px;
186
+ }
187
+ .abcjs-large .abcjs-tempo-wrapper {
188
+ font-size: 20px;
189
+ }
190
+
191
+ .abcjs-css-warning {
192
+ display: none;
193
+ }
package/dist/index.js CHANGED
@@ -72463,6 +72463,70 @@ var remarkDirectiveGeogebra_default = (ctx) => () => {
72463
72463
  };
72464
72464
  };
72465
72465
 
72466
+ // src/remarkDirectiveAbcMusic.ts
72467
+ var remarkDirectiveAbcMusic_default = (ctx) => () => {
72468
+ const name = "abc-music";
72469
+ return (tree, file) => {
72470
+ visit(tree, function(node3) {
72471
+ if (node3.type === "code" && node3.lang === "abcjs") {
72472
+ const data = node3.data || (node3.data = {});
72473
+ node3.type = "directive";
72474
+ node3.lang = "";
72475
+ expectContainerDirective(node3, file, name);
72476
+ registerDirective(
72477
+ file,
72478
+ name,
72479
+ ["abcjs-basic-min.js", "client.js"],
72480
+ ["style.css"]
72481
+ );
72482
+ console.log(node3);
72483
+ const value = node3.value || toString2(node3.children);
72484
+ const editor = node3.meta?.includes("editor");
72485
+ console.log(editor);
72486
+ data.hName = "div";
72487
+ data.hProperties = {
72488
+ class: "directive-abc-music",
72489
+ "data-tune": Buffer.from(value).toString("base64"),
72490
+ "data-editor": editor ? "true" : "false"
72491
+ };
72492
+ data.hChildren = [
72493
+ {
72494
+ type: "element",
72495
+ tagName: "div",
72496
+ properties: {
72497
+ class: "tune"
72498
+ },
72499
+ children: [
72500
+ {
72501
+ type: "text",
72502
+ value
72503
+ }
72504
+ ]
72505
+ },
72506
+ ...editor ? [
72507
+ {
72508
+ type: "element",
72509
+ tagName: "textarea",
72510
+ properties: {
72511
+ class: "editor",
72512
+ id: hash(node3),
72513
+ spellcheck: "false"
72514
+ }
72515
+ }
72516
+ ] : [],
72517
+ {
72518
+ type: "element",
72519
+ tagName: "div",
72520
+ properties: {
72521
+ class: "player"
72522
+ }
72523
+ }
72524
+ ];
72525
+ }
72526
+ });
72527
+ };
72528
+ };
72529
+
72466
72530
  // src/process.ts
72467
72531
  var remark = (ctx) => {
72468
72532
  const remarkPlugins = [
@@ -72494,6 +72558,7 @@ var remark = (ctx) => {
72494
72558
  remarkDirectiveSlideshow_default(ctx),
72495
72559
  remarkDirectiveScratchblock_default(ctx),
72496
72560
  remarkDirectiveMermaid_default(ctx),
72561
+ remarkDirectiveAbcMusic_default(ctx),
72497
72562
  remarkDirectiveExcalidraw_default(ctx),
72498
72563
  remarkDirectiveStruktog_default(ctx),
72499
72564
  remarkDirectiveGeogebra_default(ctx),