diff options
Diffstat (limited to 'src/content')
-rw-r--r-- | src/content/dependencies/generateTrackInfoPageOtherReleasesList.js | 86 |
1 files changed, 65 insertions, 21 deletions
diff --git a/src/content/dependencies/generateTrackInfoPageOtherReleasesList.js b/src/content/dependencies/generateTrackInfoPageOtherReleasesList.js index ebd76577..550c86b3 100644 --- a/src/content/dependencies/generateTrackInfoPageOtherReleasesList.js +++ b/src/content/dependencies/generateTrackInfoPageOtherReleasesList.js @@ -1,22 +1,42 @@ -import {stitchArrays} from '#sugar'; +import {onlyItem, stitchArrays} from '#sugar'; export default { contentDependencies: ['linkTrack'], extraDependencies: ['html', 'language'], - relations: (relation, track) => ({ + query(track) { + const query = {}; + + query.singleSingle = + onlyItem( + track.otherReleases.filter(track => track.album.style === 'single')); + + query.regularReleases = + (query.singleSingle + ? track.otherReleases.filter(track => track !== query.singleSingle) + : track.otherReleases); + + return query; + }, + + relations: (relation, query, _track) => ({ + singleLink: + (query.singleSingle + ? relation('linkTrack', query.singleSingle) + : null), + trackLinks: - track.otherReleases + query.regularReleases .map(track => relation('linkTrack', track)), }), - data: (track) => ({ + data: (query, _track) => ({ albumNames: - track.otherReleases + query.regularReleases .map(track => track.album.name), albumColors: - track.otherReleases + query.regularReleases .map(track => track.album.color), }), @@ -24,19 +44,43 @@ export default { html.tag('p', {[html.onlyIfContent]: true}, - language.$('releaseInfo.alsoReleasedOn', { - [language.onlyIfOptions]: ['albums'], - - albums: - language.formatConjunctionList( - stitchArrays({ - trackLink: relations.trackLinks, - albumName: data.albumNames, - albumColor: data.albumColors, - }).map(({trackLink, albumName, albumColor}) => - trackLink.slots({ - content: language.sanitize(albumName), - color: albumColor, - }))), - })), + language.encapsulate('releaseInfo.alsoReleased', capsule => + language.encapsulate(capsule, workingCapsule => { + const workingOptions = {}; + + let any = false; + + const albumList = + language.formatConjunctionList( + stitchArrays({ + trackLink: relations.trackLinks, + albumName: data.albumNames, + albumColor: data.albumColors, + }).map(({trackLink, albumName, albumColor}) => + trackLink.slots({ + content: language.sanitize(albumName), + color: albumColor, + }))); + + if (!html.isBlank(albumList)) { + any = true; + workingCapsule += '.onAlbums'; + workingOptions.albums = albumList; + } + + if (relations.singleLink) { + any = true; + workingCapsule += '.asSingle'; + workingOptions.single = + relations.singleLink.slots({ + content: language.$(capsule, 'single'), + }); + } + + if (any) { + return language.$(workingCapsule, workingOptions); + } else { + return html.blank(); + } + }))), }; |