2023-12-28 04:55:06 +01:00
|
|
|
<!DOCTYPE html>
|
2023-12-30 15:02:13 +01:00
|
|
|
<html lang="en" xmlns="http://www.w3.org/1999/html">
|
2023-12-28 04:55:06 +01:00
|
|
|
<head>
|
|
|
|
<meta charset="UTF-8" />
|
|
|
|
<title>Sanic</title>
|
|
|
|
<link rel="stylesheet" href="style.css" />
|
2023-12-29 16:55:51 +01:00
|
|
|
<link rel="icon" href="/favicon.ico" sizes="16x16 32x32 48x48 64x64" type="image/png" />
|
2023-12-28 04:55:06 +01:00
|
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<main>
|
|
|
|
<div id="nav">
|
2023-12-30 15:02:13 +01:00
|
|
|
<div id="control-admin">
|
|
|
|
<button id="connection-state">❌ Disconnected</button> <!-- ❌ Cross Mark -->
|
2023-12-28 04:55:06 +01:00
|
|
|
<button>Login</button>
|
|
|
|
<button>Config</button>
|
2023-12-29 16:55:51 +01:00
|
|
|
<button id="control-update-db" disabled="disabled">Update DB</button>
|
2023-12-28 04:55:06 +01:00
|
|
|
</div>
|
|
|
|
<div>
|
2023-12-30 15:02:13 +01:00
|
|
|
<div class="spaced">
|
2023-12-29 16:55:51 +01:00
|
|
|
<button id="control-previous">⏮︎</button> <!-- ⏮️ Last Track Button -->
|
|
|
|
<button id="control-stop">⏹︎</button> <!-- ⏹️ Stop Button -->
|
|
|
|
<button id="control-play-pause">⏵︎</button> <!-- ▶️ Play or ⏸️ Pause Button -->
|
|
|
|
<button id="control-next">⏭︎</button> <!-- ⏭️ Next Track Button -->
|
2023-12-28 04:55:06 +01:00
|
|
|
</div>
|
|
|
|
<div>
|
2023-12-29 16:55:51 +01:00
|
|
|
<label for="control-progress"></label>
|
|
|
|
<input type="range" id="control-progress" name="progress" min="0" step="1" />
|
2023-12-28 04:55:06 +01:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div>
|
2023-12-30 15:02:13 +01:00
|
|
|
<div class="spaced">
|
|
|
|
<button id="control-repeat">🔘 repeat</button>
|
|
|
|
<button id="control-shuffle">🔘 shuffle</button>
|
|
|
|
</div>
|
|
|
|
<div class="spaced">
|
|
|
|
<label for="control-xfade">xfade</label>
|
2023-12-29 16:55:51 +01:00
|
|
|
<div>
|
|
|
|
<button id="control-xfade-minus">➖</button>
|
|
|
|
<input type="number" id="control-xfade" name="xfade" value="00" />
|
|
|
|
<button id="control-xfade-plus">➕</button>
|
|
|
|
</div>
|
|
|
|
</div>
|
2023-12-30 15:02:13 +01:00
|
|
|
<div class="spaced">
|
|
|
|
<button id="control-volume-down">🔉</button> <!-- 🔉 Speaker with sound wave -->
|
|
|
|
<input id="control-volume" name="volume" type="range" min="0" max="100" value="50" />
|
|
|
|
<button id="control-volume-up">🔊</button> <!-- 🔊 Speaker with sound waves -->
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div>
|
|
|
|
<p>Now playing:</p>
|
|
|
|
<div>
|
|
|
|
<label for="control-track">Track:</label>
|
|
|
|
<input type="text" id="control-track" name="track" disabled="disabled" />
|
|
|
|
</div>
|
|
|
|
<div>
|
|
|
|
<label for="control-time">Time:</label>
|
|
|
|
<input type="text" id="control-time" name="time" value="00:00:00/00:00:00" disabled="disabled" />
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div>
|
|
|
|
<img id="sanic-logo" alt="sanic logo" src="/img/sanic-logo.webp" />
|
|
|
|
<div>Sanic © 2023</div>
|
2023-12-28 04:55:06 +01:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div id="queue">
|
|
|
|
<table>
|
|
|
|
<thead>
|
|
|
|
<tr>
|
|
|
|
<td>Pos</td>
|
|
|
|
<td>Artists</td>
|
|
|
|
<td>Track</td>
|
|
|
|
<td>Album</td>
|
|
|
|
<td>Length</td>
|
|
|
|
<td>Actions</td>
|
|
|
|
</tr>
|
|
|
|
</thead>
|
2023-12-29 16:55:51 +01:00
|
|
|
<tbody></tbody>
|
2023-12-28 04:55:06 +01:00
|
|
|
</table>
|
|
|
|
</div>
|
|
|
|
<div id="browser">browser</div>
|
|
|
|
<div id="result">result</div>
|
|
|
|
</main>
|
2023-12-29 16:55:51 +01:00
|
|
|
<script src="controls.js"></script>
|
2023-12-28 04:55:06 +01:00
|
|
|
<script>
|
|
|
|
// create example elements in queue
|
2023-12-29 16:55:51 +01:00
|
|
|
const queue = document.querySelector("#queue tbody");
|
2023-12-28 04:55:06 +01:00
|
|
|
for (let i = 0; i < 100; i++) {
|
|
|
|
const tr = document.createElement("tr");
|
|
|
|
|
|
|
|
const pos = document.createElement("td");
|
|
|
|
pos.appendChild(document.createTextNode(i.toString()));
|
|
|
|
tr.appendChild(pos);
|
|
|
|
|
|
|
|
const artist = document.createElement("td");
|
|
|
|
artist.appendChild(document.createTextNode(`Artist ${i.toString()}`));
|
|
|
|
tr.appendChild(artist);
|
|
|
|
|
|
|
|
const track = document.createElement("td");
|
|
|
|
track.appendChild(document.createTextNode(`Track ${i.toString()}`));
|
|
|
|
tr.appendChild(track);
|
|
|
|
|
|
|
|
const album = document.createElement("td");
|
|
|
|
album.appendChild(document.createTextNode(`Album ${i.toString()}`));
|
|
|
|
tr.appendChild(album);
|
|
|
|
|
|
|
|
const length = document.createElement("td");
|
|
|
|
length.appendChild(document.createTextNode("1:23"));
|
|
|
|
tr.appendChild(length);
|
|
|
|
|
|
|
|
const actions = document.createElement("td");
|
|
|
|
const del = document.createElement("button");
|
|
|
|
del.innerHTML = "🗑";
|
|
|
|
actions.appendChild(del);
|
|
|
|
tr.appendChild(actions);
|
|
|
|
|
|
|
|
queue.appendChild(tr);
|
|
|
|
}
|
|
|
|
</script>
|
|
|
|
</body>
|
|
|
|
</html>
|