You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
117 lines
4.9 KiB
117 lines
4.9 KiB
4 weeks ago
|
{% extends "/Bases/StandardWebPage.html.twig" %}
|
||
|
|
||
|
{% block content %}
|
||
|
|
||
|
|
||
|
<script src="/Static/JS/ThirdParty/abcjs-basic.js"></script>
|
||
|
<!--<script src="/Static/JS/ThirdParty/abcjs-plugin-min.js"></script>-->
|
||
|
<link rel="stylesheet" href="/Static/CSS/ThirdParty/abcjs-audio.css">
|
||
|
|
||
|
|
||
|
<div class="InnerContent">
|
||
|
<div>
|
||
|
<div class="container">
|
||
|
<div class="left">
|
||
|
<div class="DLContainer">
|
||
|
<h2>{{ "Tune Set Overview"|translate }}</h2>
|
||
|
<dl>
|
||
|
<dt>{{ "Description"|translate }}</dt>
|
||
|
<dd>{{ TuneSetDetails.Description }}</dd>
|
||
|
</dl>
|
||
|
</div>
|
||
|
<div id="RatingContainer">
|
||
|
<h2>{{ "Rating"|translate }}</h2>
|
||
|
<div class="RatingButtons">
|
||
|
{% if _SESSION_.IS_LOGGED_IN %}
|
||
|
<button id="DislikeButton" onclick="VoteOnTune('DISLIKE');" {% if MyVote == -1 %}class="active"{% endif %}>👎</button>
|
||
|
<button id="LikeButton" onclick="VoteOnTune('LIKE');" {% if MyVote == 1 %}class="active"{% endif %}>👍</button>
|
||
|
{% else %}
|
||
|
<em>{{ "Log in to vote"|translate }}</em>
|
||
|
{% endif %}
|
||
|
</div>
|
||
|
<div class="Counts">
|
||
|
|
|
||
|
<span>👎 <span id="DislikeCount">{{ TuneSetDetails.Dislikes }}</span></span>
|
||
|
|
|
||
|
<span>👍 <span id="LikeCount">{{ TuneSetDetails.Likes }}</span></span>
|
||
|
|
|
||
|
<span>⭐ <span id="BookmarkCount">{{ TuneSetDetails.Bookmarks }}</span></span>
|
||
|
|
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="center">
|
||
|
<div>
|
||
|
{% for tune in TunesInSet %}
|
||
|
<pre id="NotationContainer--{{ tune.TuneID }}"></pre>
|
||
|
{% endfor %}
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="right">
|
||
|
<h2>{{ "Audio"|translate }}</h2>
|
||
|
<div id="MIDI--{{ TuneSetDetails.ID }}"></div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
|
||
|
<script>
|
||
|
if (!window.ABCJS) {
|
||
|
console.error("ABCJS library failed to load.");
|
||
|
}
|
||
|
</script>
|
||
|
<script>
|
||
|
document.addEventListener("DOMContentLoaded", function () {
|
||
|
function populateABC(targetTuneID)
|
||
|
{
|
||
|
API_GET_TEXT("/V1/GetABCFile.php?tune-variant-id=" + targetTuneID)
|
||
|
.then(payload => {
|
||
|
// Ensure required DOM elements exist
|
||
|
const notationContainer = document.getElementById("NotationContainer--" + targetTuneID);
|
||
|
|
||
|
if (!notationContainer) {
|
||
|
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",
|
||
|
},
|
||
|
}
|
||
|
);
|
||
|
|
||
|
// 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);
|
||
|
});
|
||
|
}
|
||
|
{% for tune in TunesInSet %}
|
||
|
populateABC('{{ tune.TuneID }}');
|
||
|
{% endfor %}
|
||
|
});
|
||
|
</script>
|
||
|
{% endblock %}
|