diff --git a/js/ui.js b/js/ui.js index fc44dd8..9fd303e 100644 --- a/js/ui.js +++ b/js/ui.js @@ -1,5 +1,5 @@ //js/ui.js -import { SVG_PLAY, SVG_DOWNLOAD, SVG_MENU, SVG_HEART, formatTime, createPlaceholder, trackDataStore, hasExplicitContent, getTrackArtists, getTrackTitle, calculateTotalDuration, formatDuration } from './utils.js'; +import { SVG_PLAY, SVG_DOWNLOAD, SVG_MENU, SVG_HEART, formatTime, createPlaceholder, trackDataStore, hasExplicitContent, getTrackArtists, getTrackTitle, calculateTotalDuration, formatDuration, escapeHtml } from './utils.js'; import { openLyricsPanel } from './lyrics.js'; import { recentActivityManager, backgroundSettings, trackListSettings, cardSettings } from './storage.js'; import { db } from './db.js'; @@ -198,10 +198,10 @@ export class UIRenderer {
- ${trackTitle} + ${escapeHtml(trackTitle)} ${explicitBadge}
-
${trackArtists}${yearDisplay}
+
${escapeHtml(trackArtists)}${yearDisplay}
${formatTime(track.duration)}
@@ -327,7 +327,7 @@ export class UIRenderer { // Actually Base uses type for data attributes. play-card uses data-type="user-playlist" which is correct. id: playlist.id, href: `#userplaylist/${playlist.id}`, - title: playlist.name, + title: escapeHtml(playlist.name), subtitle: `${playlist.tracks ? playlist.tracks.length : (playlist.numberOfTracks || 0)} tracks`, imageHTML: imageHTML, actionButtonsHTML: ` @@ -370,9 +370,9 @@ export class UIRenderer { type: 'album', id: album.id, href: `#album/${album.id}`, - title: `${album.title} ${explicitBadge}`, - subtitle: `${album.artist?.name ?? ''} • ${yearDisplay}${typeLabel}`, - imageHTML: `${album.title}`, + title: `${escapeHtml(album.title)} ${explicitBadge}`, + subtitle: `${escapeHtml(album.artist?.name ?? '')} • ${yearDisplay}${typeLabel}`, + imageHTML: `${escapeHtml(album.title)}`, actionButtonsHTML: `