diff options
author | (quasar) nebula <qznebula@protonmail.com> | 2025-09-11 08:26:25 -0300 |
---|---|---|
committer | (quasar) nebula <qznebula@protonmail.com> | 2025-09-11 08:26:25 -0300 |
commit | c191171847198a911c63a8342746ff884dd3ed4a (patch) | |
tree | b95043f33a5e7339f1380f6d033b186648cc1447 /src/content | |
parent | 2f7f2264c54aef4da050dc438cba8a408293235f (diff) |
content, data: Album.showAlbumInTracksWithoutArtists preview
Diffstat (limited to 'src/content')
-rw-r--r-- | src/content/dependencies/generateReleaseInfoContributionsLine.js | 3 | ||||
-rw-r--r-- | src/content/dependencies/generateTrackReleaseInfo.js | 35 |
2 files changed, 34 insertions, 4 deletions
diff --git a/src/content/dependencies/generateReleaseInfoContributionsLine.js b/src/content/dependencies/generateReleaseInfoContributionsLine.js index f93403d9..a597b68a 100644 --- a/src/content/dependencies/generateReleaseInfoContributionsLine.js +++ b/src/content/dependencies/generateReleaseInfoContributionsLine.js @@ -11,6 +11,8 @@ export default { stringKey: {type: 'string'}, featuringStringKey: {type: 'string'}, + additionalStringOptions: {validate: v => v.isObject}, + chronologyKind: {type: 'string'}, }, @@ -27,5 +29,6 @@ export default { normalStringKey: slots.stringKey, normalFeaturingStringKey: slots.featuringStringKey, + additionalStringOptions: slots.additionalStringOptions, }), }; diff --git a/src/content/dependencies/generateTrackReleaseInfo.js b/src/content/dependencies/generateTrackReleaseInfo.js index fa64ac22..45d47ecc 100644 --- a/src/content/dependencies/generateTrackReleaseInfo.js +++ b/src/content/dependencies/generateTrackReleaseInfo.js @@ -1,7 +1,10 @@ +import {compareArrays} from '#sugar'; + export default { contentDependencies: [ 'generateReleaseInfoContributionsLine', 'generateReleaseInfoListenLine', + 'linkAlbum', ], extraDependencies: ['html', 'language'], @@ -17,6 +20,9 @@ export default { relations.listenLine = relation('generateReleaseInfoListenLine', track); + relations.albumLink = + relation('linkAlbum', track.album); + return relations; }, @@ -27,6 +33,16 @@ export default { data.date = track.date; data.duration = track.duration; + const {album} = track; + + data.showAlbum = + album.showAlbumInTracksWithoutArtists && + track.artistContribs.every(({annotation}) => !annotation) && + compareArrays( + track.artistContribs.map(({artist}) => artist), + album.artistContribs.map(({artist}) => artist), + {checkOrder: true}); + if ( track.hasUniqueCoverArt && +track.coverArtDate !== +track.date @@ -45,10 +61,21 @@ export default { {[html.joinChildren]: html.tag('br')}, [ - relations.artistContributionsLine.slots({ - stringKey: capsule + '.by', - featuringStringKey: capsule + '.by.featuring', - chronologyKind: 'track', + language.encapsulate(capsule, 'by', capsule => { + const withAlbum = + (data.showAlbum ? '.withAlbum' : ''); + + const albumOptions = + (data.showAlbum ? {album: relations.albumLink} : {}); + + return relations.artistContributionsLine.slots({ + stringKey: capsule + withAlbum, + featuringStringKey: capsule + '.featuring' + withAlbum, + + additionalStringOptions: albumOptions, + + chronologyKind: 'track', + }); }), language.$(capsule, 'released', { |