From 263f32444d5158582520615d9d8520bc562e6918 Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Wed, 25 Mar 2026 10:14:00 -0300 Subject: content: generateDividedTrackList (just rename) --- .../dependencies/generateDividedTrackList.js | 137 +++++++++++++++++++++ src/content/dependencies/generateTrackInfoPage.js | 4 +- .../generateTrackListDividedByGroups.js | 137 --------------------- 3 files changed, 139 insertions(+), 139 deletions(-) create mode 100644 src/content/dependencies/generateDividedTrackList.js delete mode 100644 src/content/dependencies/generateTrackListDividedByGroups.js diff --git a/src/content/dependencies/generateDividedTrackList.js b/src/content/dependencies/generateDividedTrackList.js new file mode 100644 index 00000000..f255fbaf --- /dev/null +++ b/src/content/dependencies/generateDividedTrackList.js @@ -0,0 +1,137 @@ +import {empty, filterMultipleArrays, stitchArrays} from '#sugar'; + +export default { + sprawl: ({wikiInfo}) => ({ + divideTrackListsByGroups: + wikiInfo.divideTrackListsByGroups, + }), + + query(sprawl, tracks, _contextTrack) { + const dividingGroups = sprawl.divideTrackListsByGroups; + + const groupings = new Map(); + const ungroupedTracks = []; + + // Entry order matters! Add blank lists for each group + // in the order that those groups are provided. + for (const group of dividingGroups) { + groupings.set(group, []); + } + + for (const track of tracks) { + const firstMatchingGroup = + dividingGroups.find(group => group.albums.includes(track.album)); + + if (firstMatchingGroup) { + groupings.get(firstMatchingGroup).push(track); + } else { + ungroupedTracks.push(track); + } + } + + const groups = Array.from(groupings.keys()); + const groupedTracks = Array.from(groupings.values()); + + // Drop the empty lists, so just the groups which + // at least a single track matched are left. + filterMultipleArrays( + groups, + groupedTracks, + (_group, tracks) => !empty(tracks)); + + return {groups, groupedTracks, ungroupedTracks}; + }, + + relations: (relation, query, sprawl, tracks, contextTrack) => ({ + flatList: + (empty(sprawl.divideTrackListsByGroups) + ? relation('generateNearbyTrackList', tracks, contextTrack, []) + : null), + + contentHeading: + relation('generateContentHeading'), + + groupLinks: + query.groups + .map(group => relation('linkGroup', group)), + + groupedTrackLists: + query.groupedTracks + .map(tracks => relation('generateNearbyTrackList', tracks, contextTrack, [])), + + ungroupedTrackList: + (empty(query.ungroupedTracks) + ? null + : relation('generateNearbyTrackList', query.ungroupedTracks, contextTrack, [])), + }), + + data: (query, _sprawl, _tracks) => ({ + groupNames: + query.groups + .map(group => group.name), + }), + + slots: { + headingString: { + type: 'string', + }, + }, + + generate: (data, relations, slots, {html, language}) => + relations.flatList ?? + + html.tag('dl', {class: 'division-list'}, + {[html.onlyIfContent]: true}, + + language.encapsulate('trackList', listCapsule => [ + stitchArrays({ + groupName: data.groupNames, + groupLink: relations.groupLinks, + trackList: relations.groupedTrackLists, + }).map(({ + groupName, + groupLink, + trackList, + }) => [ + language.encapsulate(listCapsule, 'fromGroup', capsule => + (slots.headingString + ? relations.contentHeading.clone().slots({ + tag: 'dt', + + title: + language.$(capsule, { + group: groupLink + }), + + stickyTitle: + language.$(slots.headingString, 'sticky', 'fromGroup', { + group: groupName, + }), + }) + : html.tag('dt', + language.$(capsule, { + group: groupLink + })))), + + html.tag('dd', trackList), + ]), + + relations.ungroupedTrackList && [ + language.encapsulate(listCapsule, 'fromOther', capsule => + (slots.headingString + ? relations.contentHeading.clone().slots({ + tag: 'dt', + + title: + language.$(capsule), + + stickyTitle: + language.$(slots.headingString, 'sticky', 'fromOther'), + }) + : html.tag('dt', + language.$(capsule)))), + + html.tag('dd', relations.ungroupedTrackList), + ], + ])), +}; diff --git a/src/content/dependencies/generateTrackInfoPage.js b/src/content/dependencies/generateTrackInfoPage.js index 6280b07e..9ff47ec3 100644 --- a/src/content/dependencies/generateTrackInfoPage.js +++ b/src/content/dependencies/generateTrackInfoPage.js @@ -98,12 +98,12 @@ export default { relation('generateNearbyTrackList', track.sampledTracks, track, []), referencedByTracksList: - relation('generateTrackListDividedByGroups', + relation('generateDividedTrackList', query.mainReleaseTrack.referencedByTracks, track), sampledByTracksList: - relation('generateTrackListDividedByGroups', + relation('generateDividedTrackList', query.mainReleaseTrack.sampledByTracks, track), diff --git a/src/content/dependencies/generateTrackListDividedByGroups.js b/src/content/dependencies/generateTrackListDividedByGroups.js deleted file mode 100644 index f255fbaf..00000000 --- a/src/content/dependencies/generateTrackListDividedByGroups.js +++ /dev/null @@ -1,137 +0,0 @@ -import {empty, filterMultipleArrays, stitchArrays} from '#sugar'; - -export default { - sprawl: ({wikiInfo}) => ({ - divideTrackListsByGroups: - wikiInfo.divideTrackListsByGroups, - }), - - query(sprawl, tracks, _contextTrack) { - const dividingGroups = sprawl.divideTrackListsByGroups; - - const groupings = new Map(); - const ungroupedTracks = []; - - // Entry order matters! Add blank lists for each group - // in the order that those groups are provided. - for (const group of dividingGroups) { - groupings.set(group, []); - } - - for (const track of tracks) { - const firstMatchingGroup = - dividingGroups.find(group => group.albums.includes(track.album)); - - if (firstMatchingGroup) { - groupings.get(firstMatchingGroup).push(track); - } else { - ungroupedTracks.push(track); - } - } - - const groups = Array.from(groupings.keys()); - const groupedTracks = Array.from(groupings.values()); - - // Drop the empty lists, so just the groups which - // at least a single track matched are left. - filterMultipleArrays( - groups, - groupedTracks, - (_group, tracks) => !empty(tracks)); - - return {groups, groupedTracks, ungroupedTracks}; - }, - - relations: (relation, query, sprawl, tracks, contextTrack) => ({ - flatList: - (empty(sprawl.divideTrackListsByGroups) - ? relation('generateNearbyTrackList', tracks, contextTrack, []) - : null), - - contentHeading: - relation('generateContentHeading'), - - groupLinks: - query.groups - .map(group => relation('linkGroup', group)), - - groupedTrackLists: - query.groupedTracks - .map(tracks => relation('generateNearbyTrackList', tracks, contextTrack, [])), - - ungroupedTrackList: - (empty(query.ungroupedTracks) - ? null - : relation('generateNearbyTrackList', query.ungroupedTracks, contextTrack, [])), - }), - - data: (query, _sprawl, _tracks) => ({ - groupNames: - query.groups - .map(group => group.name), - }), - - slots: { - headingString: { - type: 'string', - }, - }, - - generate: (data, relations, slots, {html, language}) => - relations.flatList ?? - - html.tag('dl', {class: 'division-list'}, - {[html.onlyIfContent]: true}, - - language.encapsulate('trackList', listCapsule => [ - stitchArrays({ - groupName: data.groupNames, - groupLink: relations.groupLinks, - trackList: relations.groupedTrackLists, - }).map(({ - groupName, - groupLink, - trackList, - }) => [ - language.encapsulate(listCapsule, 'fromGroup', capsule => - (slots.headingString - ? relations.contentHeading.clone().slots({ - tag: 'dt', - - title: - language.$(capsule, { - group: groupLink - }), - - stickyTitle: - language.$(slots.headingString, 'sticky', 'fromGroup', { - group: groupName, - }), - }) - : html.tag('dt', - language.$(capsule, { - group: groupLink - })))), - - html.tag('dd', trackList), - ]), - - relations.ungroupedTrackList && [ - language.encapsulate(listCapsule, 'fromOther', capsule => - (slots.headingString - ? relations.contentHeading.clone().slots({ - tag: 'dt', - - title: - language.$(capsule), - - stickyTitle: - language.$(slots.headingString, 'sticky', 'fromOther'), - }) - : html.tag('dt', - language.$(capsule)))), - - html.tag('dd', relations.ungroupedTrackList), - ], - ])), -}; -- cgit 1.3.0-6-gf8a5