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 | |
parent | 2f7f2264c54aef4da050dc438cba8a408293235f (diff) |
content, data: Album.showAlbumInTracksWithoutArtists preview
-rw-r--r-- | src/content/dependencies/generateReleaseInfoContributionsLine.js | 3 | ||||
-rw-r--r-- | src/content/dependencies/generateTrackReleaseInfo.js | 35 | ||||
-rw-r--r-- | src/data/things/album.js | 6 | ||||
-rw-r--r-- | src/strings-default.yaml | 11 |
4 files changed, 48 insertions, 7 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', { diff --git a/src/data/things/album.js b/src/data/things/album.js index 777df882..ac947cfa 100644 --- a/src/data/things/album.js +++ b/src/data/things/album.js @@ -185,6 +185,8 @@ export class Album extends Thing { countTracksInArtistTotals: flag(true), + showAlbumInTracksWithoutArtists: flag(false), + hasTrackNumbers: flag(true), isListedOnHomepage: flag(true), isListedInGalleries: flag(true), @@ -661,6 +663,10 @@ export class Album extends Thing { 'Count Tracks In Artist Totals': {property: 'countTracksInArtistTotals'}, + 'Show Album In Tracks Without Artists': { + property: 'showAlbumInTracksWithoutArtists', + }, + 'Has Track Numbers': {property: 'hasTrackNumbers'}, 'Listed on Homepage': {property: 'isListedOnHomepage'}, 'Listed in Galleries': {property: 'isListedInGalleries'}, diff --git a/src/strings-default.yaml b/src/strings-default.yaml index a8dbc28c..108aec2b 100644 --- a/src/strings-default.yaml +++ b/src/strings-default.yaml @@ -269,9 +269,14 @@ releaseInfo: # Descriptions - by: - _: "By {ARTISTS}." - featuring: "By {ARTISTS}, featuring {FEATURING}." + by: >- + By {ARTISTS}. + by.featuring: >- + By {ARTISTS}, featuring {FEATURING}. + by.withAlbum: >- + From {ALBUM}, by {ARTISTS}. + by.featuring.withAlbum: >- + From {ALBUM}, by {ARTISTS} feat. {FEATURING}. from: "From {ALBUM}." |