diff options
Diffstat (limited to 'src/content/dependencies/linkOtherReleaseOnArtistInfoPage.js')
-rw-r--r-- | src/content/dependencies/linkOtherReleaseOnArtistInfoPage.js | 48 |
1 files changed, 45 insertions, 3 deletions
diff --git a/src/content/dependencies/linkOtherReleaseOnArtistInfoPage.js b/src/content/dependencies/linkOtherReleaseOnArtistInfoPage.js index d3f7853a..ec856631 100644 --- a/src/content/dependencies/linkOtherReleaseOnArtistInfoPage.js +++ b/src/content/dependencies/linkOtherReleaseOnArtistInfoPage.js @@ -1,20 +1,62 @@ +import {sortAlbumsTracksChronologically, sortContributionsChronologically} + from '#sort'; +import {chunkArtistTrackContributions} from '#wiki-data'; + export default { contentDependencies: ['generateColorStyleAttribute'], extraDependencies: ['html', 'language'], - relations: (relation, track) => ({ + query(track, artist) { + const relevantInfoPageChunkingContributions = + track.allReleases + .flatMap(release => [ + ...release.artistContribs, + ...release.contributorContribs, + ]) + .filter(c => c.artist === artist); + + sortContributionsChronologically( + relevantInfoPageChunkingContributions, + sortAlbumsTracksChronologically); + + const contributionChunks = + chunkArtistTrackContributions(relevantInfoPageChunkingContributions); + + const trackChunks = + contributionChunks + .map(chunksInAlbum => chunksInAlbum + .map(chunksInTrack => chunksInTrack[0].thing)); + + const trackChunksForThisAlbum = + trackChunks + .filter(tracks => tracks[0].album === track.album); + + const containingChunkIndex = + trackChunksForThisAlbum + .findIndex(tracks => tracks.includes(track)); + + return {containingChunkIndex}; + }, + + relations: (relation, _query, track, _artist) => ({ colorStyle: relation('generateColorStyleAttribute', track.album.color), }), - data: (track) => ({ + data: (query, track, _artist) => ({ albumName: track.album.name, + + albumDirectory: + track.album.directory, + + containingChunkIndex: + query.containingChunkIndex, }), generate: (data, relations, {html, language}) => html.tag('a', - {href: '#'}, + {href: `#tracks-${data.albumDirectory}-${data.containingChunkIndex}`}, relations.colorStyle.slot('context', 'primary-only'), language.sanitize(data.albumName)), }; |