diff options
Diffstat (limited to 'src/content/dependencies/generateCoverArtworkOriginDetails.js')
-rw-r--r-- | src/content/dependencies/generateCoverArtworkOriginDetails.js | 152 |
1 files changed, 112 insertions, 40 deletions
diff --git a/src/content/dependencies/generateCoverArtworkOriginDetails.js b/src/content/dependencies/generateCoverArtworkOriginDetails.js index 6cb529b1..8628179e 100644 --- a/src/content/dependencies/generateCoverArtworkOriginDetails.js +++ b/src/content/dependencies/generateCoverArtworkOriginDetails.js @@ -13,22 +13,32 @@ export default { query: (artwork) => ({ artworkThingType: artwork.thing.constructor[Thing.referenceType], + + attachedArtistContribs: + (artwork.attachedArtwork + ? artwork.attachedArtwork.artistContribs + : null) }), relations: (relation, query, artwork) => ({ credit: - relation('generateArtistCredit', artwork.artistContribs, []), + relation('generateArtistCredit', + artwork.artistContribs, + query.attachedArtistContribs ?? []), source: relation('transformContent', artwork.source), + originDetails: + relation('transformContent', artwork.originDetails), + albumLink: (query.artworkThingType === 'album' ? relation('linkAlbum', artwork.thing) : null), datetimestamp: - (artwork.date !== artwork.thing.date + (artwork.date && artwork.date !== artwork.thing.date ? relation('generateAbsoluteDatetimestamp', artwork.date) : null), }), @@ -50,49 +60,111 @@ export default { {class: 'origin-details'}, - [ - language.encapsulate(capsule, 'artworkBy', workingCapsule => { - const workingOptions = {}; + (() => { + relations.datetimestamp?.setSlots({ + style: 'year', + tooltip: true, + }); + + const artworkBy = + language.encapsulate(capsule, 'artworkBy', workingCapsule => { + const workingOptions = {}; + + if (data.label) { + workingCapsule += '.customLabel'; + workingOptions.label = data.label; + } + + if (relations.datetimestamp) { + workingCapsule += '.withYear'; + workingOptions.year = relations.datetimestamp; + } - if (data.label) { - workingCapsule += '.customLabel'; - workingOptions.label = data.label; - } + return relations.credit.slots({ + showAnnotation: true, + showExternalLinks: true, + showChronology: true, + showWikiEdits: true, - if (relations.datetimestamp) { - workingCapsule += '.withYear'; - workingOptions.year = - relations.datetimestamp.slots({ - style: 'year', - tooltip: true, - }); - } + trimAnnotation: false, - return relations.credit.slots({ - showAnnotation: true, - showExternalLinks: true, - showChronology: true, - showWikiEdits: true, + chronologyKind: 'coverArt', - trimAnnotation: false, + normalStringKey: workingCapsule, + additionalStringOptions: workingOptions, + }); + }); - chronologyKind: 'coverArt', + const trackArtFromAlbum = + pagePath[0] === 'track' && + data.artworkThingType === 'album' && + language.$(capsule, 'trackArtFromAlbum', { + album: + relations.albumLink.slot('color', false), + }); + + const source = + language.encapsulate(capsule, 'source', workingCapsule => { + const workingOptions = { + [language.onlyIfOptions]: ['source'], + source: relations.source.slot('mode', 'inline'), + }; + + if (html.isBlank(artworkBy) && data.label) { + workingCapsule += '.customLabel'; + workingOptions.label = data.label; + } + + if (html.isBlank(artworkBy) && relations.datetimestamp) { + workingCapsule += '.withYear'; + workingOptions.year = relations.datetimestamp; + } + + return language.$(workingCapsule, workingOptions); + }); - normalStringKey: workingCapsule, - additionalStringOptions: workingOptions, + const label = + html.isBlank(artworkBy) && + html.isBlank(source) && + language.encapsulate(capsule, 'customLabel', workingCapsule => { + const workingOptions = { + [language.onlyIfOptions]: ['label'], + label: data.label, + }; + + if (relations.datetimestamp) { + workingCapsule += '.withYear'; + workingOptions.year = relations.datetimestamp; + } + + return language.$(workingCapsule, workingOptions); }); - }), - - pagePath[0] === 'track' && - data.artworkThingType === 'album' && - language.$(capsule, 'trackArtFromAlbum', { - album: - relations.albumLink.slot('color', false), - }), - - language.$(capsule, 'source', { - [language.onlyIfOptions]: ['source'], - source: relations.source.slot('mode', 'inline'), - }), - ])), + + const year = + html.isBlank(artworkBy) && + html.isBlank(source) && + html.isBlank(label) && + language.$(capsule, 'year', { + [language.onlyIfOptions]: ['year'], + year: relations.datetimestamp, + }); + + const originDetails = + html.tag('span', {class: 'origin-details'}, + {[html.onlyIfContent]: true}, + + relations.originDetails.slots({ + mode: 'inline', + absorbPunctuationFollowingExternalLinks: false, + })); + + return [ + artworkBy, + trackArtFromAlbum, + source, + label, + year, + originDetails, + ]; + })())), }; |