a simple web player for subsonic tinysub.devins.page
subsonic navidrome javascript
11
fork

Configure Feed

Select the types of activity you want to include in your feed.

chore: hide most queue actions on desktop

not needed, they are accessible through context menu and simply clutter the queue

to play a track, just double click or use context menu, or select and press enter

intergrav 4761672c dd095bb6

+29 -16
+16 -1
src/css/components.css
··· 245 245 /* queue - actions column */ 246 246 #queue #queue-table th:nth-child(6), 247 247 #queue #queue-table td:nth-child(6) { 248 - max-width: 160px; 248 + text-align: right; 249 249 overflow: visible; 250 250 white-space: normal; 251 251 } ··· 308 308 309 309 #queue #queue-table .queue-favorite.favorited { 310 310 opacity: 1; 311 + } 312 + 313 + #queue #queue-table .queue-play, 314 + #queue #queue-table .queue-play-next, 315 + #queue #queue-table .queue-move-up, 316 + #queue #queue-table .queue-move-down { 317 + display: none; 311 318 } 312 319 313 320 /* FOOTER */ ··· 470 477 #queue-table td:nth-child(4), 471 478 #queue-table td:nth-child(5) { 472 479 display: none; 480 + } 481 + 482 + /* queue - show action buttons */ 483 + #queue #queue-table .queue-play, 484 + #queue #queue-table .queue-play-next, 485 + #queue #queue-table .queue-move-up, 486 + #queue #queue-table .queue-move-down { 487 + display: inline-block; 473 488 } 474 489 475 490 #sidebar {
+13 -15
src/js/events.js
··· 75 75 updateLyricDisplay(ui.player.currentTime); 76 76 } 77 77 }); 78 + let lastScrobbledSongId = null; 79 + ui.player.addEventListener("play", () => { 80 + if ( 81 + state.settings.scrobbling && 82 + isValidQueueIndex(state.queueIndex, state.queue.length) 83 + ) { 84 + const songId = state.queue[state.queueIndex]?.id; 85 + if (songId && songId !== lastScrobbledSongId) { 86 + lastScrobbledSongId = songId; 87 + state.api.nowPlaying(songId).catch(() => {}); 88 + } 89 + } 90 + }); 78 91 79 92 // playback controls 80 93 ui.playBtn.addEventListener("click", togglePlayback); ··· 183 196 initVirtualScroller(); 184 197 setupKeyboardShortcuts(); 185 198 setupMediaSessionHandlers(); 186 - 187 - // setup now playing scrobble listener 188 - let lastScrobbledSongId = null; 189 - ui.player.addEventListener("play", () => { 190 - if ( 191 - state.settings.scrobbling && 192 - isValidQueueIndex(state.queueIndex, state.queue.length) 193 - ) { 194 - const songId = state.queue[state.queueIndex]?.id; 195 - if (songId && songId !== lastScrobbledSongId) { 196 - lastScrobbledSongId = songId; 197 - state.api.nowPlaying(songId).catch(() => {}); 198 - } 199 - } 200 - }); 201 199 });