diff options
| -rw-r--r-- | src/content/dependencies/generateTrackReleaseInfo.js | 104 | ||||
| -rw-r--r-- | src/data/things/album/Album.js | 15 | ||||
| -rw-r--r-- | src/strings-default.yaml | 8 |
3 files changed, 100 insertions, 27 deletions
diff --git a/src/content/dependencies/generateTrackReleaseInfo.js b/src/content/dependencies/generateTrackReleaseInfo.js index 16d83659..1770f395 100644 --- a/src/content/dependencies/generateTrackReleaseInfo.js +++ b/src/content/dependencies/generateTrackReleaseInfo.js @@ -15,31 +15,57 @@ export default { albumLink: relation('linkAlbum', track.album), + + datetimestamp: + relation('generateAbsoluteDatetimestamp', track.date), }), data(track) { const data = {}; + const {album} = track; data.name = track.name; + data.date = track.date; - data.dateStyle = track.dateStyle; - data.duration = track.duration; - const {album} = track; + data.albumStyle = album.style; - 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 - ) { - data.coverArtDate = track.coverArtDate; + data.dateFrom = + (track.date && album.date && +track.date === +album.date + ? 'album' + : track.date + ? 'track' + : null); + + data.dateStyle = + (data.dateFrom === 'track' + ? track.dateStyle + : data.dateFrom === 'album' + ? album.dateStyle + : null); + + data.duration = track.duration; + + if (album.showAlbumInAllTracks) { + if (+data.date === +album.date) { + data.showAlbum = 'date'; + } else { + data.showAlbum = 'last'; + } + } else if (album.showAlbumInTracksWithoutArtists) { + if ( + track.artistContribs.every(({annotation}) => !annotation) && + compareArrays( + track.artistContribs.map(({artist}) => artist), + album.artistContribs.map(({artist}) => artist), + {checkOrder: true}) + ) { + data.showAlbum = 'front'; + } else { + data.showAlbum = false; + } + } else { + data.showAlbum = false; } return data; @@ -51,10 +77,14 @@ export default { relations.block.slot('items', [ language.encapsulate(capsule, 'by', capsule => { const withAlbum = - (data.showAlbum ? '.withAlbum' : ''); + (data.showAlbum === 'front' + ? '.withAlbum' + : data.showAlbum === 'last' + ? '.withAlbum.albumLast' + : ''); const albumOptions = - (data.showAlbum ? {album: relations.albumLink} : {}); + (withAlbum ? {album: relations.albumLink} : {}); return relations.artistContributionsLine.slots({ stringKey: capsule + withAlbum, @@ -66,15 +96,35 @@ export default { }); }), - (data.dateStyle === 'released' - ? language.$(capsule, 'released', { - date: language.formatDate(data.date), - }) - : data.dateStyle === 'posted' - ? language.$(capsule, 'posted', { - date: language.formatDate(data.date), - }) - : html.blank()), + language.encapsulate(capsule, workingCapsule => { + const workingOptions = {}; + + if (data.dateStyle === 'released') { + if ( + data.showAlbum === 'date' && + data.albumStyle === 'in-game vgm' + ) { + workingCapsule += '.released.vgm'; + workingOptions.date = + relations.datetimestamp.slot('style', 'year'); + } else { + workingCapsule += '.released'; + workingOptions.date = language.formatDate(data.date); + } + } else if (data.dateStyle === 'posted') { + workingCapsule += '.posted'; + workingOptions.date = language.formatDate(data.date); + } else { + return html.blank(); + } + + if (data.showAlbum === 'date') { + workingCapsule += '.withAlbum'; + workingOptions.album = relations.albumLink; + } + + return language.$(workingCapsule, workingOptions); + }), language.$(capsule, 'duration', { [language.onlyIfOptions]: ['duration'], diff --git a/src/data/things/album/Album.js b/src/data/things/album/Album.js index 11cae60f..5da54419 100644 --- a/src/data/things/album/Album.js +++ b/src/data/things/album/Album.js @@ -282,6 +282,20 @@ export class Album extends Thing { }, ], + showAlbumInAllTracks: [ + exposeUpdateValueOrContinue({ + validate: input.value(isBoolean), + }), + + { + dependencies: ['style'], + compute: ({style}) => + (style === 'in-game vgm' + ? true + : false), + }, + ], + showAlbumInTracksWithoutArtists: flag(V(false)), showTrackSectionInNavBar: [ @@ -841,6 +855,7 @@ export class Album extends Thing { 'Listed in Galleries': {property: 'isListedInGalleries'}, 'Has Track Numbers': {property: 'hasTrackNumbers'}, + 'Show Album In All Tracks': {property: 'showAlbumInAllTracks'}, 'Show Album In Tracks Without Artists': {property: 'showAlbumInTracksWithoutArtists'}, 'Show Section In Nav Bar': {property: 'showTrackSectionInNavBar'}, 'Show Artists In Track List': {property: 'showArtistsInTrackList'}, diff --git a/src/strings-default.yaml b/src/strings-default.yaml index 9137ee7a..a14d774d 100644 --- a/src/strings-default.yaml +++ b/src/strings-default.yaml @@ -283,6 +283,10 @@ releaseInfo: From {ALBUM}, by {ARTISTS}. by.featuring.withAlbum: >- From {ALBUM}, by {ARTISTS} feat. {FEATURING}. + by.withAlbum.albumLast: >- + By {ARTISTS}, from {ALBUM}. + by.featuring.withAlbum.albumLast: >- + By {ARTISTS}, featuring {FEATURING}. From {ALBUM}. from: "From {ALBUM}." @@ -292,10 +296,14 @@ releaseInfo: released: "Released {DATE}." albumReleased: "Album released {DATE}." trackReleased: "Track released {DATE}." + released.withAlbum: "From {ALBUM}, released {DATE}." posted: "Posted {DATE}." albumPosted: "Album posted {DATE}." trackPosted: "Track posted {DATE}." + posted.withAlbum: "From {ALBUM}, posted {DATE}." + + released.vgm.withAlbum: "From {ALBUM} ({DATE})." addedToWiki: "Added to wiki {DATE}." |