fix: per-span hover highlight, use • as artist separator everywhere

- CSS: target #player-artist-name span:hover and #np-artist-name span:hover so only the hovered artist name highlights, not all at once
- change artist separator from / to • in song items, player bar, now playing overlay, album header

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
HoneyandClaude Sonnet 4.6 committed 2026-04-28 00:51:38 +02:00
1 parent 90c76fe9a7
commit a61436669e
4 files changed
+7 -7

No files matched your search

+1 -1
View File
@@ -39,7 +39,7 @@ export function makeSongItem(s, idx, list, { noArtistLink = false, noAlbumLink =
return noArtistLink return noArtistLink
? `<span style="color:var(--text2)">${esc(name)}</span>` ? `<span style="color:var(--text2)">${esc(name)}</span>`
: `<span class="song-link" onclick="event.stopPropagation();s_goArtist(event,'${esc(name)}','${aid}')">${esc(name)}</span>`; : `<span class="song-link" onclick="event.stopPropagation();s_goArtist(event,'${esc(name)}','${aid}')">${esc(name)}</span>`;
}).join('<span style="color:var(--text3)"> / </span>') }).join('<span style="color:var(--text3)"> • </span>')
: ''; : '';
const albumHtml = !noAlbumLink && (s.albumId||s.album) 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>` ? `<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>`
+3 -3
View File
@@ -31,7 +31,7 @@ export function updatePlayerUI(s) {
? artistParts.map((name, i) => { ? artistParts.map((name, i) => {
const aid = i === 0 ? (s.artistId || '') : ''; const aid = i === 0 ? (s.artistId || '') : '';
return `<span style="cursor:pointer" onclick="s_goArtist(event,'${esc(name)}','${aid}')">${esc(name)}</span>`; return `<span style="cursor:pointer" onclick="s_goArtist(event,'${esc(name)}','${aid}')">${esc(name)}</span>`;
}).join('<span style="color:var(--text3)"> / </span>') }).join('<span style="color:var(--text3)"> • </span>')
: '—'; : '—';
document.getElementById('player-album-sep').style.display = s.album ? '' : 'none'; document.getElementById('player-album-sep').style.display = s.album ? '' : 'none';
document.getElementById('player-album-name').textContent = s.album || ''; document.getElementById('player-album-name').textContent = s.album || '';
@@ -70,7 +70,7 @@ export function _syncNpDirect(s) {
? parts.map((name, i) => { ? parts.map((name, i) => {
const aid = i === 0 ? (s.artistId || '') : ''; const aid = i === 0 ? (s.artistId || '') : '';
return `<span style="cursor:pointer" onclick="closeNowPlaying();s_goArtist(event,'${esc(name)}','${aid}')">${esc(name)}</span>`; return `<span style="cursor:pointer" onclick="closeNowPlaying();s_goArtist(event,'${esc(name)}','${aid}')">${esc(name)}</span>`;
}).join('<span style="opacity:.5"> / </span>') }).join('<span style="opacity:.5"> • </span>')
: '—'; : '—';
} }
const asep = document.getElementById('np-album-sep'); if(asep) asep.style.display = s.album ? '' : 'none'; const asep = document.getElementById('np-album-sep'); if(asep) asep.style.display = s.album ? '' : 'none';
@@ -365,7 +365,7 @@ export function _restoreLastPlayed() {
? artistParts.map((name, i) => { ? artistParts.map((name, i) => {
const aid = i === 0 ? (s.artistId || '') : ''; const aid = i === 0 ? (s.artistId || '') : '';
return `<span style="cursor:pointer" onclick="s_goArtist(event,'${esc(name)}','${aid}')">${esc(name)}</span>`; return `<span style="cursor:pointer" onclick="s_goArtist(event,'${esc(name)}','${aid}')">${esc(name)}</span>`;
}).join('<span style="color:var(--text3)"> / </span>') }).join('<span style="color:var(--text3)"> • </span>')
: '—'; : '—';
document.getElementById('player-album-sep').style.display = s.album ? '' : 'none'; document.getElementById('player-album-sep').style.display = s.album ? '' : 'none';
document.getElementById('player-album-name').textContent = s.album || ''; document.getElementById('player-album-name').textContent = s.album || '';
+1 -1
View File
@@ -426,7 +426,7 @@ export async function loadAlbumDetail(album) {
artistEl.innerHTML = albumArtistParts.map((name, i) => { artistEl.innerHTML = albumArtistParts.map((name, i) => {
const aid = i === 0 ? (album.artistId || '') : ''; const aid = i === 0 ? (album.artistId || '') : '';
return `<span class="song-link" onclick="s_goArtist(event,${JSON.stringify(name)},${JSON.stringify(aid)})">${esc(name)}</span>`; return `<span class="song-link" onclick="s_goArtist(event,${JSON.stringify(name)},${JSON.stringify(aid)})">${esc(name)}</span>`;
}).join('<span style="color:var(--text3)"> / </span>') || ''; }).join('<span style="color:var(--text3)"> • </span>') || '';
const cw = document.getElementById('album-cover-wrap'); const cw = document.getElementById('album-cover-wrap');
const cv = coverUrl(album.coverArt, 300); const cv = coverUrl(album.coverArt, 300);
cw.innerHTML = cv ? `<img src="${cv}" onerror="this.parentNode.innerHTML='<div class=\\'no-art\\'>💿</div>'">` : '<div class="no-art">💿</div>'; cw.innerHTML = cv ? `<img src="${cv}" onerror="this.parentNode.innerHTML='<div class=\\'no-art\\'>💿</div>'">` : '<div class="no-art">💿</div>';
+2 -2
View File
@@ -193,7 +193,7 @@ nav{flex:1;overflow-y:auto;padding:4px 10px}
/* Player bar clickable title/artist */ /* Player bar clickable title/artist */
.player-title:hover{color:var(--accent);text-decoration:underline} .player-title:hover{color:var(--accent);text-decoration:underline}
#player-artist-name{color:var(--text2)} #player-artist-name{color:var(--text2)}
#player-artist-name:hover{color:var(--accent-2,#f0b840)} #player-artist-name span:hover{color:var(--accent-2,#f0b840)}
#player-album-name{color:var(--text3)} #player-album-name{color:var(--text3)}
#player-album-name:hover{color:var(--accent)} #player-album-name:hover{color:var(--accent)}
@@ -537,7 +537,7 @@ nav{flex:1;overflow-y:auto;padding:4px 10px}
.np-text{flex:1;min-width:0} .np-text{flex:1;min-width:0}
.np-title{font-size:22px;font-weight:800;letter-spacing:-.4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-bottom:5px} .np-title{font-size:22px;font-weight:800;letter-spacing:-.4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-bottom:5px}
.np-artist{font-size:15px;color:rgba(255,255,255,.65);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .15s} .np-artist{font-size:15px;color:rgba(255,255,255,.65);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .15s}
#np-artist-name:hover,#np-album-name:hover{color:var(--accent);cursor:pointer} #np-artist-name span:hover,#np-album-name:hover{color:var(--accent);cursor:pointer}
.np-star{ .np-star{
background:none;border:none;cursor:pointer; background:none;border:none;cursor:pointer;
padding:8px;margin-left:8px;flex-shrink:0; padding:8px;margin-left:8px;flex-shrink:0;