From f6bd91ea9beef64e0ff0865560219a64a367bb5b Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Sun, 22 May 2022 12:00:01 -0300 Subject: divide referenced-by lists by configurable groups ...instead of hard-coding 'em --- src/misc-templates.js | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) (limited to 'src/misc-templates.js') diff --git a/src/misc-templates.js b/src/misc-templates.js index 58c45f5..d381750 100644 --- a/src/misc-templates.js +++ b/src/misc-templates.js @@ -242,6 +242,52 @@ export function getAlbumStylesheet(album, {to}) { ].filter(Boolean).join('\n'); } +// Divided track lists + +export function generateTrackListDividedByGroups(tracks, { + getTrackItem, + language, + wikiData, +}) { + const { divideTrackListsByGroups: groups } = wikiData.wikiInfo; + + if (!groups?.length) { + return html.tag('ul', tracks.map(t => getTrackItem(t))); + } + + const lists = Object.fromEntries(groups.map(group => [group.directory, {group, tracks: []}])); + const other = []; + + for (const track of tracks) { + const { album } = track; + const group = groups.find(g => g.albums.includes(album)); + if (group) { + lists[group.directory].tracks.push(track); + } else { + other.push(track); + } + } + + const ddul = tracks => fixWS` +
+ `; + + return html.tag('dl', Object.values(lists) + .filter(({ tracks }) => tracks.length) + .flatMap(({ group, tracks }) => [ + html.tag('dt', language.formatString('trackList.group', {group: group.name})), + ddul(tracks) + ]) + .concat(other.length ? [ + `
${language.formatString('trackList.group', { + group: language.formatString('trackList.group.other') + })}
`, + ddul(other) + ] : [])); +} + // Fancy lookin' links export function fancifyURL(url, {language, album = false} = {}) { -- cgit 1.3.0-6-gf8a5