|
|
@ -8,11 +8,11 @@ |
|
|
|
|
|
|
|
|
|
|
|
<div class="InnerContent"> |
|
|
|
<h1>{{ TuneDetails.Title }}</h1> |
|
|
|
<div> |
|
|
|
<div class="container"> |
|
|
|
<div class="left"> |
|
|
|
<div class="DLContainer"> |
|
|
|
<h2>{{ "Tune Overview"|translate }}</h2> |
|
|
|
<dl> |
|
|
|
<dt>{{ "Time Signature"|translate }}</dt> |
|
|
|
<dd>{{ TuneDetails.TimeSignature }}</dd> |
|
|
@ -46,70 +46,6 @@ |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
<div class="InnerContent"> |
|
|
|
<h1> |
|
|
|
{{ "Dances for"|translate }} |
|
|
|
"{{ TuneDetails.Title }}" |
|
|
|
<span> |
|
|
|
<sup> |
|
|
|
<a href="/tune/{{ TuneDetails.ID }}/suggest-dance"> |
|
|
|
{{ "Suggest another"|translate }} |
|
|
|
</a> |
|
|
|
</sup> |
|
|
|
</span> |
|
|
|
</h1> |
|
|
|
{% for x in Dances %} |
|
|
|
<div> |
|
|
|
<button class="accordion">{{ TuneDetails.Title }}</button> |
|
|
|
<div class="panel"> |
|
|
|
<h2>Steps</h2> |
|
|
|
<table> |
|
|
|
<thead> |
|
|
|
<tr> |
|
|
|
<th colspan="2">{{ "Bars"|translate }}</th> |
|
|
|
<th>{{ "Description"|translate }}</th> |
|
|
|
</tr> |
|
|
|
</thead> |
|
|
|
<tbody> |
|
|
|
{% for step in TuneDetails.Steps %} |
|
|
|
<tr> |
|
|
|
<th>{{ step.BarCountAtStart }}</th> |
|
|
|
<th>{{ step.BarCountAtEnd }}</th> |
|
|
|
<td>{{ step.Description }}</td> |
|
|
|
</tr> |
|
|
|
{% endfor %} |
|
|
|
</tbody> |
|
|
|
</table> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
{% endfor %} |
|
|
|
</div> |
|
|
|
|
|
|
|
<script> |
|
|
|
var acc = document.getElementsByClassName("accordion"); |
|
|
|
var i; |
|
|
|
|
|
|
|
for (i = 0; i < acc.length; i++) { |
|
|
|
acc[i].addEventListener("click", function() { |
|
|
|
/* Toggle between adding and removing the "active" class, |
|
|
|
to highlight the button that controls the panel */ |
|
|
|
this.classList.toggle("active"); |
|
|
|
|
|
|
|
/* Toggle between hiding and showing the active panel */ |
|
|
|
var panel = this.nextElementSibling; |
|
|
|
if (panel.style.display === "block") { |
|
|
|
panel.style.display = "none"; |
|
|
|
} else { |
|
|
|
panel.style.display = "block"; |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
</script> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<script> |
|
|
|
if (!window.ABCJS) { |
|
|
|
console.error("ABCJS library failed to load."); |
|
|
@ -117,57 +53,53 @@ |
|
|
|
</script> |
|
|
|
<script> |
|
|
|
document.addEventListener("DOMContentLoaded", function () { |
|
|
|
function RenderABC(targetTuneID) { |
|
|
|
API_GET("/V1/GetABCFile.php?tune-variant-id=" + targetTuneID) |
|
|
|
.then(payload => { |
|
|
|
// Ensure required DOM elements exist |
|
|
|
const notationContainer = document.getElementById("NotationContainer--" + targetTuneID); |
|
|
|
const rawABCContainer = document.getElementById("RawABCReadout--" + targetTuneID); |
|
|
|
const midiContainer = document.getElementById("MIDI--" + targetTuneID); |
|
|
|
|
|
|
|
if (!notationContainer || !rawABCContainer || !midiContainer) { |
|
|
|
console.error(`Missing DOM elements for targetTuneID: ${targetTuneID}`); |
|
|
|
return; |
|
|
|
const targetTuneID = '{{ TuneDetails.ID }}'; |
|
|
|
API_GET("/V1/GetABCFile.php?tune-variant-id=" + targetTuneID) |
|
|
|
.then(payload => { |
|
|
|
// Ensure required DOM elements exist |
|
|
|
const notationContainer = document.getElementById("NotationContainer--" + targetTuneID); |
|
|
|
const rawABCContainer = document.getElementById("RawABCReadout--" + targetTuneID); |
|
|
|
const midiContainer = document.getElementById("MIDI--" + targetTuneID); |
|
|
|
|
|
|
|
if (!notationContainer || !rawABCContainer || !midiContainer) { |
|
|
|
console.error(`Missing DOM elements for targetTuneID: ${targetTuneID}`); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
console.log(window.ABCJS); |
|
|
|
|
|
|
|
// Render the ABC notation |
|
|
|
const tunes = window.ABCJS.renderAbc( |
|
|
|
notationContainer.id, |
|
|
|
payload, |
|
|
|
{ |
|
|
|
add_classes: true, |
|
|
|
format: { |
|
|
|
gchordfont: "Atkinson Hyperlegible", |
|
|
|
annotationfont: "Atkinson Hyperlegible", |
|
|
|
headerfont: "Atkinson Hyperlegible", |
|
|
|
infofont: "Atkinson Hyperlegible", |
|
|
|
repeatfont: "Atkinson Hyperlegible", |
|
|
|
tempofont: "Atkinson Hyperlegible", |
|
|
|
titlefont: "Atkinson Hyperlegible", |
|
|
|
voicefont: "Atkinson Hyperlegible", |
|
|
|
wordsfont: "Atkinson Hyperlegible", |
|
|
|
}, |
|
|
|
} |
|
|
|
); |
|
|
|
|
|
|
|
console.log(window.ABCJS); |
|
|
|
|
|
|
|
// Render the ABC notation |
|
|
|
const tunes = window.ABCJS.renderAbc( |
|
|
|
notationContainer.id, |
|
|
|
payload, |
|
|
|
{ |
|
|
|
add_classes: true, |
|
|
|
format: { |
|
|
|
gchordfont: "Atkinson Hyperlegible", |
|
|
|
annotationfont: "Atkinson Hyperlegible", |
|
|
|
headerfont: "Atkinson Hyperlegible", |
|
|
|
infofont: "Atkinson Hyperlegible", |
|
|
|
repeatfont: "Atkinson Hyperlegible", |
|
|
|
tempofont: "Atkinson Hyperlegible", |
|
|
|
titlefont: "Atkinson Hyperlegible", |
|
|
|
voicefont: "Atkinson Hyperlegible", |
|
|
|
wordsfont: "Atkinson Hyperlegible", |
|
|
|
}, |
|
|
|
} |
|
|
|
); |
|
|
|
|
|
|
|
// Display raw ABC notation |
|
|
|
rawABCContainer.innerHTML = payload; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
window.ABCJS.startAnimation(notationContainer.id, tunes[0], { |
|
|
|
showCursor: true, |
|
|
|
}); |
|
|
|
}) |
|
|
|
.catch(error => { |
|
|
|
console.error("Error fetching ABC data:", error); |
|
|
|
}); |
|
|
|
} |
|
|
|
// Display raw ABC notation |
|
|
|
rawABCContainer.innerHTML = payload; |
|
|
|
|
|
|
|
|
|
|
|
RenderABC('{{ TuneDetails.ID }}'); |
|
|
|
|
|
|
|
window.ABCJS.startAnimation(notationContainer.id, tunes[0], { |
|
|
|
showCursor: true, |
|
|
|
}); |
|
|
|
}) |
|
|
|
.catch(error => { |
|
|
|
console.error("Error fetching ABC data:", error); |
|
|
|
}); |
|
|
|
}); |
|
|
|
</script> |
|
|
|
{% endblock %} |