diff options
Diffstat (limited to 'src/content/dependencies/generateArtistInfoPageTracksChunk.js')
| -rw-r--r-- | src/content/dependencies/generateArtistInfoPageTracksChunk.js | 47 |
1 files changed, 35 insertions, 12 deletions
diff --git a/src/content/dependencies/generateArtistInfoPageTracksChunk.js b/src/content/dependencies/generateArtistInfoPageTracksChunk.js index f6d70901..7d00fdd6 100644 --- a/src/content/dependencies/generateArtistInfoPageTracksChunk.js +++ b/src/content/dependencies/generateArtistInfoPageTracksChunk.js @@ -1,13 +1,8 @@ -import {unique} from '#sugar'; +import {sortAlbumsTracksChronologically} from '#sort'; +import {empty, unique} from '#sugar'; import {getTotalDuration} from '#wiki-data'; export default { - contentDependencies: [ - 'generateArtistInfoPageChunk', - 'generateArtistInfoPageTracksChunkItem', - 'linkAlbum', - ], - relations: (relation, artist, album, trackContribLists) => ({ template: relation('generateArtistInfoPageChunk'), @@ -24,7 +19,7 @@ export default { trackContribs)), }), - data(_artist, album, trackContribLists) { + data(artist, album, trackContribLists) { const data = {}; const contribs = @@ -49,19 +44,47 @@ export default { data.durationApproximate = durationTerms.length > 1; + const tracks = + trackContribLists.map(contribs => contribs[0].thing); + + data.numLinkingOtherReleases = + tracks.filter(track => { + if (empty(track.otherReleases)) return false; + + const releases = + sortAlbumsTracksChronologically(track.allReleases.slice()); + + // later releases always link to first release + if (track !== releases[0]) return true; + + // first releases only link to later credited releases + return tracks.slice(1).some(track => { + const contribs = [ + ...track.artistContribs, + ...track.contributorContribs, + ]; + + return contribs.some(contrib => contrib.artist === artist); + }); + }).length; + return data; }, - generate: (data, relations) => + generate: (data, relations, {html}) => relations.template.slots({ mode: 'album', - - albumLink: relations.albumLink, + link: relations.albumLink, dates: data.dates, duration: data.duration, durationApproximate: data.durationApproximate, - items: relations.items, + list: + html.tag('ul', + data.numLinkingOtherReleases > 1 && + {class: 'offset-tooltips'}, + + relations.items), }), }; |