diff options
author | (quasar) nebula <qznebula@protonmail.com> | 2025-02-19 17:14:14 -0400 |
---|---|---|
committer | (quasar) nebula <qznebula@protonmail.com> | 2025-03-02 08:24:13 -0400 |
commit | 0b44cbc30a1b9f311f9908db5a82d68f4d93febb (patch) | |
tree | b79baeb97d4f5357625e327046ae2ebdbc78c2f5 | |
parent | c175c01397a12055082904395511ed8822536604 (diff) |
content: listTracksByDate: mind order of release
-rw-r--r-- | src/content/dependencies/listTracksByDate.js | 89 |
1 files changed, 47 insertions, 42 deletions
diff --git a/src/content/dependencies/listTracksByDate.js b/src/content/dependencies/listTracksByDate.js index b2cba5e6..66ca4af5 100644 --- a/src/content/dependencies/listTracksByDate.js +++ b/src/content/dependencies/listTracksByDate.js @@ -5,49 +5,54 @@ export default { contentDependencies: ['generateListingPage', 'linkAlbum', 'linkTrack'], extraDependencies: ['language', 'wikiData'], - sprawl({trackData}) { - return {trackData}; - }, + sprawl: ({trackData}) => ({trackData}), query({trackData}, spec) { - return { - spec, + const query = {spec}; + + query.tracks = + sortAlbumsTracksChronologically( + trackData.filter(track => track.date)); + + query.chunks = + chunkByProperties(query.tracks, ['album', 'date']); - chunks: - chunkByProperties( - sortAlbumsTracksChronologically( - trackData.filter(track => track.date)), - ['album', 'date']), - }; + return query; }, - relations(relation, query) { - return { - page: relation('generateListingPage', query.spec), + relations: (relation, query) => ({ + page: + relation('generateListingPage', query.spec), - albumLinks: - query.chunks - .map(({album}) => relation('linkAlbum', album)), + albumLinks: + query.chunks + .map(({album}) => relation('linkAlbum', album)), - trackLinks: - query.chunks - .map(({chunk}) => chunk - .map(track => relation('linkTrack', track))), - }; - }, + trackLinks: + query.chunks + .map(({chunk}) => chunk + .map(track => relation('linkTrack', track))), + }), - data(query) { - return { - dates: - query.chunks - .map(({date}) => date), + data: (query) => ({ + dates: + query.chunks + .map(({date}) => date), - secreleases: - query.chunks.map(({chunk}) => - chunk.map(track => - track.mainReleaseTrack !== null)), - }; - }, + rereleases: + query.chunks + .map(({chunk}) => chunk + .map(track => + // Check if the index of this track... + query.tracks.indexOf(track) > + // ...is greater than the *smallest* index + // of any of this track's *other* releases. + // (It won't be greater than its own index, + // so we can use otherReleases here, rather + // than allReleases.) + Math.min(... + track.otherReleases.map(t => query.tracks.indexOf(t))))), + }), generate(data, relations, {language}) { return relations.page.slots({ @@ -65,20 +70,20 @@ export default { chunkRows: stitchArrays({ trackLinks: relations.trackLinks, - secreleases: data.secreleases, - }).map(({trackLinks, secreleases}) => + rereleases: data.rereleases, + }).map(({trackLinks, rereleases}) => stitchArrays({ trackLink: trackLinks, - secrelease: secreleases, - }).map(({trackLink, secrelease}) => - (secrelease + rerelease: rereleases, + }).map(({trackLink, rerelease}) => + (rerelease ? {stringsKey: 'rerelease', track: trackLink} : {track: trackLink}))), chunkRowAttributes: - data.secreleases.map(secreleases => - secreleases.map(secrelease => - (secrelease + data.rereleases.map(rereleases => + rereleases.map(rerelease => + (rerelease ? {class: 'rerelease'} : null))), }); |