empede/templates/queue.html
2023-05-02 11:04:08 +02:00

48 lines
No EOL
1.2 KiB
HTML

{# Template #}
<!DOCTYPE html>
<div class="queue-header">
<div class="queue-next">Next in queue</div>
<button class="queue-clear" role="button" hx-delete="/queue">
<span class="material-symbols-outlined">playlist_remove</span>
Clear
</div>
</div>
<ul class="queue">
{% for item in queue %}
<li {% if item.playing %}class="playing"{% endif %}>
<div class="albumart">
<img
src="/art?path={{ item.file|urlencode }}"
onerror="this.style.opacity = 0"
alt="Album art"
title="Album art"
>
</div>
<div class="metadata">
<div class="song__name" title="Song name">{{ item.title }}</div>
{% if let Some(artist) = item.artist %}
<div class="song__artist" title="Artist">{{ artist }}</div>
{% endif %}
</div>
</li>
{% endfor %}
</ul>
<script>
htmx.onLoad(() => {
const isReduced = window
.matchMedia("(prefers-reduced-motion: reduce)")
.matches;
new Sortable(document.querySelector(".queue"), {
animation: isReduced ? 0 : 100,
onEnd: (event) => fetch("/queue/move", {
method: "POST",
headers: {"content-type": "application/json"},
body: JSON.stringify({from: event.oldIndex, to: event.newIndex}),
}),
});
});
</script>