add more types to editor picks
This commit is contained in:
parent
8bb3b285b1
commit
599b11cfc4
2 changed files with 61 additions and 20 deletions
71
js/ui.js
71
js/ui.js
|
|
@ -1519,6 +1519,27 @@ export class UIRenderer {
|
|||
}
|
||||
}
|
||||
|
||||
createTrackCardHTML(track) {
|
||||
const explicitBadge = hasExplicitContent(track) ? this.createExplicitBadge() : '';
|
||||
const qualityBadge = createQualityBadgeHTML(track);
|
||||
const isCompact = cardSettings.isCompactAlbum();
|
||||
|
||||
return this.createBaseCardHTML({
|
||||
type: 'track',
|
||||
id: track.id,
|
||||
href: `/track/${track.id}`,
|
||||
title: `${escapeHtml(getTrackTitle(track))} ${explicitBadge} ${qualityBadge}`,
|
||||
subtitle: escapeHtml(getTrackArtists(track)),
|
||||
imageHTML: `<img src="${this.api.getCoverUrl(track.album?.cover)}" alt="${escapeHtml(track.title)}" class="card-image" loading="lazy">`,
|
||||
actionButtonsHTML: `
|
||||
<button class="like-btn card-like-btn" data-action="toggle-like" data-type="track" title="Add to Liked">
|
||||
${this.createHeartIcon(false)}
|
||||
</button>
|
||||
`,
|
||||
isCompact,
|
||||
});
|
||||
}
|
||||
|
||||
async renderHomeEditorsPicks(forceRefresh = false) {
|
||||
const picksContainer = document.getElementById('home-editors-picks');
|
||||
const section = document.getElementById('home-editors-picks-section');
|
||||
|
|
@ -1538,32 +1559,52 @@ export class UIRenderer {
|
|||
const response = await fetch('/editors-picks.json');
|
||||
if (!response.ok) throw new Error("Failed to load editor's picks");
|
||||
|
||||
const data = await response.json();
|
||||
const albumIds = data.albums || [];
|
||||
const items = await response.json();
|
||||
|
||||
if (albumIds.length === 0) {
|
||||
if (!Array.isArray(items) || items.length === 0) {
|
||||
picksContainer.innerHTML = createPlaceholder("No editor's picks available.");
|
||||
return;
|
||||
}
|
||||
|
||||
// Fetch album details
|
||||
const albums = [];
|
||||
for (const albumId of albumIds.slice(0, 12)) {
|
||||
// Fetch details for each item
|
||||
const cardsHTML = [];
|
||||
const itemsToStore = [];
|
||||
|
||||
for (const item of items.slice(0, 12)) {
|
||||
try {
|
||||
const result = await this.api.getAlbum(albumId);
|
||||
if (result && result.album) albums.push(result.album);
|
||||
if (item.type === 'album') {
|
||||
const result = await this.api.getAlbum(item.id);
|
||||
if (result && result.album) {
|
||||
cardsHTML.push(this.createAlbumCardHTML(result.album));
|
||||
itemsToStore.push({ el: null, data: result.album, type: 'album' });
|
||||
}
|
||||
} else if (item.type === 'artist') {
|
||||
const artist = await this.api.getArtist(item.id);
|
||||
if (artist) {
|
||||
cardsHTML.push(this.createArtistCardHTML(artist));
|
||||
itemsToStore.push({ el: null, data: artist, type: 'artist' });
|
||||
}
|
||||
} else if (item.type === 'track') {
|
||||
const track = await this.api.getTrackMetadata(item.id);
|
||||
if (track) {
|
||||
cardsHTML.push(this.createTrackCardHTML(track));
|
||||
itemsToStore.push({ el: null, data: track, type: 'track' });
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.warn(`Failed to load album ${albumId}:`, e);
|
||||
console.warn(`Failed to load ${item.type} ${item.id}:`, e);
|
||||
}
|
||||
}
|
||||
|
||||
if (albums.length > 0) {
|
||||
picksContainer.innerHTML = albums.map((a) => this.createAlbumCardHTML(a)).join('');
|
||||
albums.forEach((a) => {
|
||||
const el = picksContainer.querySelector(`[data-album-id="${a.id}"]`);
|
||||
if (cardsHTML.length > 0) {
|
||||
picksContainer.innerHTML = cardsHTML.join('');
|
||||
itemsToStore.forEach((item, index) => {
|
||||
const type = item.type;
|
||||
const id = item.data.id;
|
||||
const el = picksContainer.querySelector(`[data-${type}-id="${id}"]`);
|
||||
if (el) {
|
||||
trackDataStore.set(el, a);
|
||||
this.updateLikeState(el, 'album', a.id);
|
||||
trackDataStore.set(el, item.data);
|
||||
this.updateLikeState(el, type, id);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"name": "Editor's Picks",
|
||||
"description": "Curated selection of standout albums handpicked by the monochrome team",
|
||||
"albums": ["4527433", "90502209"]
|
||||
}
|
||||
[
|
||||
{ "type": "album", "id": "4527433" },
|
||||
{ "type": "album", "id": "90502209" },
|
||||
{ "type": "track", "id": "279082605" }
|
||||
]
|
||||
|
|
|
|||
Loading…
Reference in a new issue