fix: lyrics race condition, PC scroll, artwork matching, accidental artist/album taps
- nowplaying: add cancellation token to _loadNpLyrics to prevent stale async calls overwriting newer results (synced→plain race condition) - nowplaying: replace scrollIntoView with explicit container.scrollTo to prevent page-level scroll on desktop (topbar shifting / gap at edge) - backend: remove results[0] fallback in lookupItunesTrackMeta — only use exact title+artist match to avoid embedding wrong artwork - components/views: makeSongItem accepts noArtistLink/noAlbumLink opts; album-detail disables both, playlist-detail disables artist link Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
1 parent
14e8226d1d
commit
9da48b88d8
4 files changed
+27
-9
No files matched your search
+10
-5
@@ -27,19 +27,24 @@ export function makeAlbumCard(a) {
|
||||
}
|
||||
|
||||
// ─── SONG LIST ITEM (library) ───
|
||||
export function makeSongItem(s, idx, list) {
|
||||
export function makeSongItem(s, idx, list, { noArtistLink = false, noAlbumLink = false } = {}) {
|
||||
const el = document.createElement('div');
|
||||
if(s.starred && !s._starred) s._starred = true;
|
||||
el.className = 'song-item' + (S.queue[S.qIdx]?.id === s.id ? ' playing' : '');
|
||||
const cv = coverUrl(s.coverArt, 60);
|
||||
const artistHtml = s.artistId||s.artist
|
||||
? (noArtistLink
|
||||
? `<span style="color:var(--text2)">${esc(s.artist||'')}</span>`
|
||||
: `<span class="song-link" onclick="event.stopPropagation();s_goArtist(event,'${esc(s.artist||'')}','${s.artistId||''}')">${esc(s.artist||'')}</span>`)
|
||||
: '';
|
||||
const albumHtml = !noAlbumLink && (s.albumId||s.album)
|
||||
? `<span style="color:var(--text3)"> · </span><span class="song-link" onclick="event.stopPropagation();s_goAlbum(event,'${s.albumId||''}','${esc(s.album||'')}','${esc(s.artist||'')}','${s.artistId||''}')">${esc(s.album||'')}</span>`
|
||||
: '';
|
||||
el.innerHTML = `<div class="song-num">${idx+1}</div>
|
||||
<div class="song-thumb">${cv ? `<img src="${cv}" loading="lazy" onerror="this.parentNode.innerHTML='<div class=\\'no-art\\'>♪</div>'">` : '<div class="no-art">♪</div>'}</div>
|
||||
<div class="song-info">
|
||||
<div class="song-title">${esc(s.title)}</div>
|
||||
<div class="song-artist">
|
||||
${s.artistId||s.artist ? `<span class="song-link" onclick="event.stopPropagation();s_goArtist(event,'${esc(s.artist||'')}','${s.artistId||''}')">${esc(s.artist||'')}</span>` : ''}
|
||||
${s.albumId||s.album ? `<span style="color:var(--text3)"> · </span><span class="song-link" onclick="event.stopPropagation();s_goAlbum(event,'${s.albumId||''}','${esc(s.album||'')}','${esc(s.artist||'')}','${s.artistId||''}')">${esc(s.album||'')}</span>` : ''}
|
||||
</div>
|
||||
<div class="song-artist">${artistHtml}${albumHtml}</div>
|
||||
</div>
|
||||
<div class="song-meta">
|
||||
<span class="song-dur">${formatDur(s.duration)}</span>
|
||||
|
||||
Reference in new issue
Block a user