diff options
Diffstat (limited to 'src/content')
8 files changed, 120 insertions, 29 deletions
diff --git a/src/content/dependencies/generateAbsoluteDatetimestamp.js b/src/content/dependencies/generateAbsoluteDatetimestamp.js index d006374a..52b524e0 100644 --- a/src/content/dependencies/generateAbsoluteDatetimestamp.js +++ b/src/content/dependencies/generateAbsoluteDatetimestamp.js @@ -21,6 +21,7 @@ export default { 'year', 'minimal-difference', 'year-difference', + 'full-difference', ]), default: 'full', }, @@ -78,6 +79,17 @@ export default { label = language.formatYear(data.date); tooltip = language.formatDate(data.date); } + + break; + } + + case 'full-difference': { + if (data.date.toDateString() === data.contextDate?.toDateString()) { + return html.blank(); + } + + label = language.formatDate(data.date); + break; } } diff --git a/src/content/dependencies/generateMusicVideo.js b/src/content/dependencies/generateMusicVideo.js index a61cd5b7..e83fdf80 100644 --- a/src/content/dependencies/generateMusicVideo.js +++ b/src/content/dependencies/generateMusicVideo.js @@ -1,5 +1,5 @@ export default { - relations: (relation, musicVideo) => ({ + relations: (relation, musicVideo, thing) => ({ image: relation('image', { path: musicVideo.path, @@ -7,14 +7,14 @@ export default { dimensions: musicVideo.coverArtDimensions, }), - artistCredit: - relation('generateArtistCredit', musicVideo.artistContribs, []), + releaseLine: + relation('generateMusicVideoReleaseLine', musicVideo, thing), contributorCredit: relation('generateArtistCredit', musicVideo.contributorContribs, []), }), - data: (musicVideo) => ({ + data: (musicVideo, _track) => ({ label: musicVideo.label, @@ -45,33 +45,25 @@ export default { {[html.joinChildren]: html.tag('br')}, [ - language.encapsulate(capsule, 'by', workingCapsule => { - const additionalStringOptions = {}; + html.tag('span', {class: 'release-line'}, + {[html.onlyIfContent]: true}, - if (data.label) { - workingCapsule += '.customLabel'; - additionalStringOptions.label = data.label; - } + relations.releaseLine), - return relations.artistCredit.slots({ - normalStringKey: workingCapsule, - additionalStringOptions, + language.encapsulate(capsule, 'contributorsLine', capsule => + language.$(capsule, { + [language.onlyIfOptions]: ['credit'], - showAnnotation: true, - showChronology: true, + credit: + relations.contributorCredit.slots({ + normalStringKey: language.encapsulate(capsule, 'credit'), - chronologyKind: 'musicVideo', - }); - }), + showAnnotation: true, + showChronology: true, - relations.contributorCredit.slots({ - normalStringKey: language.encapsulate(capsule, 'contributors'), - - showAnnotation: true, - showChronology: true, - - chronologyKind: 'musicVideoContribution', - }), + chronologyKind: 'musicVideoContribution', + }), + })), ]), ])), }; diff --git a/src/content/dependencies/generateMusicVideoReleaseLine.js b/src/content/dependencies/generateMusicVideoReleaseLine.js new file mode 100644 index 00000000..e4e196e9 --- /dev/null +++ b/src/content/dependencies/generateMusicVideoReleaseLine.js @@ -0,0 +1,61 @@ +export default { + relations: (relation, musicVideo, thing) => ({ + datetimestamp: + relation('generateAbsoluteDatetimestamp', musicVideo.date, thing.date), + + artistCredit: + relation('generateArtistCredit', musicVideo.artistContribs, []), + }), + + data: (data) => ({ + label: + (data.label !== 'Music video' + ? data.label + : null), + }), + + generate(data, relations, {html, language}) { + const {artistCredit, datetimestamp} = relations; + const capsule = language.encapsulate('misc.musicVideo'); + + datetimestamp.setSlot('style', 'full-difference'); + + let artistsLineCapsule = language.encapsulate(capsule, 'artistsLine'); + let artistsLineOptions = {[language.onlyIfOptions]: ['credit']}; + + if (data.label) { + artistsLineCapsule += '.customLabel'; + artistsLineOptions.label = data.label; + } + + if (!html.isBlank(datetimestamp)) { + artistsLineCapsule += '.withDate'; + artistsLineOptions.date = datetimestamp; + } + + artistsLineOptions.credit = + html.tag('span', {class: 'by'}, + {[html.onlyIfContent]: true}, + + artistCredit.slots({ + normalStringKey: language.encapsulate(capsule, 'artistsLine.credit'), + + showAnnotation: true, + showChronology: true, + + chronologyKind: 'musicVideo', + })); + + const artistsLine = language.$(artistsLineCapsule, artistsLineOptions); + + if (!html.isBlank(artistsLine)) { + return artistsLine; + } + + if (!html.isBlank(datetimestamp)) { + return language.$(capsule, 'date', {date: datetimestamp}); + } + + return html.blank(); + }, +} diff --git a/src/content/dependencies/generateSingleArtworkColumn.js b/src/content/dependencies/generateSingleArtworkColumn.js new file mode 100644 index 00000000..32c448ad --- /dev/null +++ b/src/content/dependencies/generateSingleArtworkColumn.js @@ -0,0 +1,16 @@ +export default { + relations: (relation, track) => ({ + albumArtworkColumn: + relation('generateAlbumArtworkColumn', track.album), + + trackMusicVideos: + track.musicVideos.map(musicVideo => + relation('generateMusicVideo', musicVideo, track)), + }), + + generate: (relations, {html}) => + html.tags([ + relations.albumArtworkColumn, + relations.trackMusicVideos, + ]), +}; diff --git a/src/content/dependencies/generateTrackArtworkColumn.js b/src/content/dependencies/generateTrackArtworkColumn.js index dde37376..feaed604 100644 --- a/src/content/dependencies/generateTrackArtworkColumn.js +++ b/src/content/dependencies/generateTrackArtworkColumn.js @@ -13,7 +13,7 @@ export default { trackMusicVideos: track.musicVideos.map(musicVideo => - relation('generateMusicVideo', musicVideo)), + relation('generateMusicVideo', musicVideo, track)), }), generate: (relations, {html}) => diff --git a/src/content/dependencies/generateTrackInfoPage.js b/src/content/dependencies/generateTrackInfoPage.js index 0937c42c..77adff02 100644 --- a/src/content/dependencies/generateTrackInfoPage.js +++ b/src/content/dependencies/generateTrackInfoPage.js @@ -65,7 +65,7 @@ export default { artworkColumn: (query.firstTrackInSingle - ? relation('generateAlbumArtworkColumn', track.album) + ? relation('generateSingleArtworkColumn', track) : relation('generateTrackArtworkColumn', track)), contentHeading: diff --git a/src/content/dependencies/listTracksWithExtra.js b/src/content/dependencies/listTracksWithExtra.js index 09d8ee21..27f03ee9 100644 --- a/src/content/dependencies/listTracksWithExtra.js +++ b/src/content/dependencies/listTracksWithExtra.js @@ -52,6 +52,7 @@ export default { slots: { hash: {type: 'string'}, + showAlbumDates: {type: 'boolean', default: true}, }, generate(data, relations, slots, {language}) { @@ -63,7 +64,7 @@ export default { albumLink: relations.albumLinks, date: data.dates, }).map(({albumLink, date}) => - (date + (slots.showAlbumDates && date ? { stringsKey: 'withDate', album: albumLink, diff --git a/src/content/dependencies/listTracksWithMusicVideos.js b/src/content/dependencies/listTracksWithMusicVideos.js new file mode 100644 index 00000000..e7aa1f5e --- /dev/null +++ b/src/content/dependencies/listTracksWithMusicVideos.js @@ -0,0 +1,9 @@ +export default { + relations: (relation, spec) => + ({page: relation('listTracksWithExtra', spec, 'musicVideos', 'array')}), + + generate: (relations) => + relations.page.slots({ + showAlbumDates: false, + }), +}; |