From bfe389e20902a27f0c2b29eb2abef8fcfe0fc62c Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Tue, 23 Apr 2024 17:05:35 -0300 Subject: content: generateTrackChronologyLinks: align sort orders --- .../dependencies/generateChronologyLinks.js | 3 +- .../dependencies/generateTrackChronologyLinks.js | 36 +++++++++++++++++----- src/content/util/getChronologyRelations.js | 4 ++- 3 files changed, 33 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/content/dependencies/generateChronologyLinks.js b/src/content/dependencies/generateChronologyLinks.js index b769a5aa..7f24ded7 100644 --- a/src/content/dependencies/generateChronologyLinks.js +++ b/src/content/dependencies/generateChronologyLinks.js @@ -21,10 +21,11 @@ export default { headingString: v.isString, contributions: v.strictArrayOf(v.validateProperties({ index: v.isCountingNumber, + only: v.isBoolean, + artistDirectory: v.isDirectory, artistLink: v.isHTML, previousLink: v.isHTML, nextLink: v.isHTML, - only: v.isBoolean, })), })), } diff --git a/src/content/dependencies/generateTrackChronologyLinks.js b/src/content/dependencies/generateTrackChronologyLinks.js index 15c2cae9..24e56698 100644 --- a/src/content/dependencies/generateTrackChronologyLinks.js +++ b/src/content/dependencies/generateTrackChronologyLinks.js @@ -74,16 +74,36 @@ export default { }; } - return { - scopeSwitcher: - relation('generateChronologyLinksScopeSwitcher'), + const relations = {}; - wiki: - getScopedRelations(null), + relations.scopeSwitcher = + relation('generateChronologyLinksScopeSwitcher'); - album: - getScopedRelations(track.album), - }; + relations.wiki = + getScopedRelations(null); + + relations.album = + getScopedRelations(track.album); + + for (const setKey of [ + 'artistChronologyContributions', + 'coverArtistChronologyContributions', + ]) { + const wikiSet = relations.wiki[setKey]; + const albumSet = relations.album[setKey]; + + const wikiArtistDirectories = + wikiSet + .map(({artistDirectory}) => artistDirectory); + + albumSet.sort((a, b) => + (a.index === b.index + ? (wikiArtistDirectories.indexOf(a.artistDirectory) + - wikiArtistDirectories.indexOf(b.artistDirectory)) + : 0)); + } + + return relations; }, generate(relations) { diff --git a/src/content/util/getChronologyRelations.js b/src/content/util/getChronologyRelations.js index e4475ff8..c601a990 100644 --- a/src/content/util/getChronologyRelations.js +++ b/src/content/util/getChronologyRelations.js @@ -42,10 +42,12 @@ export default function getChronologyRelations(thing, { return { index: index + 1, + artistDirectory: artist.directory, + only: !(previous || next), + artistLink: linkArtist(artist), previousLink: previous ? linkThing(previous) : null, nextLink: next ? linkThing(next) : null, - only: !(previous || next), }; }).filter(Boolean) .sort((a, b) => -- cgit 1.3.0-6-gf8a5