From 9816f00277292f499e47b9df7bbc89a385bcb133 Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Sat, 17 Jan 2026 19:18:26 -0400 Subject: content, css: generateMusicVideoDateLine --- src/content/dependencies/generateMusicVideo.js | 75 +++++++--------------- .../dependencies/generateMusicVideoArtistsLine.js | 41 ++++++++++++ .../dependencies/generateMusicVideoDateLine.js | 56 ++++++++++++++++ .../dependencies/generateMusicVideoReleaseLine.js | 61 ------------------ 4 files changed, 121 insertions(+), 112 deletions(-) create mode 100644 src/content/dependencies/generateMusicVideoArtistsLine.js create mode 100644 src/content/dependencies/generateMusicVideoDateLine.js delete mode 100644 src/content/dependencies/generateMusicVideoReleaseLine.js (limited to 'src/content') diff --git a/src/content/dependencies/generateMusicVideo.js b/src/content/dependencies/generateMusicVideo.js index 628c1a17..035cd353 100644 --- a/src/content/dependencies/generateMusicVideo.js +++ b/src/content/dependencies/generateMusicVideo.js @@ -7,41 +7,22 @@ export default { dimensions: musicVideo.coverArtDimensions, }), - releaseLine: - relation('generateMusicVideoReleaseLine', musicVideo, thing), + artistsLine: + relation('generateMusicVideoArtistsLine', musicVideo), + + dateLine: + relation('generateMusicVideoDateLine', musicVideo, thing), contributorCredit: relation('generateArtistCredit', musicVideo.contributorContribs, []), }), - data: (musicVideo, track) => ({ + data: (musicVideo, _thing) => ({ label: musicVideo.label, url: musicVideo.url, - - sameDay: - (() => { - if (!musicVideo.dateIsSpecified) return null; - - const compare = (a, b) => - a.toDateString() === b.toDateString(); - - if (compare(musicVideo.date, track.album.date)) { - if (track.album.style === 'single') { - return 'single'; - } else { - return 'album'; - } - } - - if (compare(musicVideo.date, track.date)) { - return 'track'; - } - - return null; - })(), }), generate: (data, relations, {language, html}) => @@ -63,41 +44,33 @@ export default { link: data.url, }), - html.tag('p', {class: 'music-video-info'}, + html.tag('p', {[html.joinChildren]: html.tag('br')}, [ - html.tag('span', {class: 'release-line'}, + html.tag('span', {class: 'artists-line'}, {[html.onlyIfContent]: true}, - relations.releaseLine), - - language.encapsulate(capsule, 'date', capsule => [ - data.sameDay == 'album' && - language.$(capsule, 'sameDayAsAlbum'), - - data.sameDay == 'single' && - language.$(capsule, 'sameDayAsTrack'), + relations.artistsLine), - data.sameDay === 'track' && - language.$(capsule, 'sameDayAsTrack'), - ]), + relations.dateLine, + ]), - language.encapsulate(capsule, 'contributorsLine', capsule => - language.$(capsule, { - [language.onlyIfOptions]: ['credit'], + html.tag('p', + language.encapsulate(capsule, 'contributorsLine', capsule => + language.$(capsule, { + [language.onlyIfOptions]: ['credit'], - credit: - relations.contributorCredit.slots({ - normalStringKey: language.encapsulate(capsule, 'credit'), + credit: + relations.contributorCredit.slots({ + normalStringKey: language.encapsulate(capsule, 'credit'), - showAnnotation: true, - showChronology: true, - chunkwrap: false, + showAnnotation: true, + showChronology: true, + chunkwrap: false, - chronologyKind: 'musicVideoContribution', - }), - })), - ]), + chronologyKind: 'musicVideoContribution', + }), + }))), ])), }; diff --git a/src/content/dependencies/generateMusicVideoArtistsLine.js b/src/content/dependencies/generateMusicVideoArtistsLine.js new file mode 100644 index 00000000..959d3648 --- /dev/null +++ b/src/content/dependencies/generateMusicVideoArtistsLine.js @@ -0,0 +1,41 @@ +export default { + relations: (relation, musicVideo) => ({ + artistCredit: + relation('generateArtistCredit', musicVideo.artistContribs, []), + }), + + data: (musicVideo) => ({ + label: + (musicVideo.label !== 'Music video' + ? musicVideo.label + : null), + }), + + generate(data, relations, {html, language}) { + const {artistCredit} = relations; + const capsule = language.encapsulate('misc.musicVideo'); + + let artistsLineCapsule = language.encapsulate(capsule, 'artistsLine'); + let artistsLineOptions = {[language.onlyIfOptions]: ['credit']}; + + if (data.label) { + artistsLineCapsule += '.customLabel'; + artistsLineOptions.label = data.label; + } + + artistsLineOptions.credit = + html.tag('span', {class: 'by'}, + {[html.onlyIfContent]: true}, + + artistCredit.slots({ + normalStringKey: language.encapsulate(capsule, 'artistsLine.credit'), + + showAnnotation: true, + showChronology: true, + + chronologyKind: 'musicVideo', + })); + + return language.$(artistsLineCapsule, artistsLineOptions); + }, +} diff --git a/src/content/dependencies/generateMusicVideoDateLine.js b/src/content/dependencies/generateMusicVideoDateLine.js new file mode 100644 index 00000000..4fb281f4 --- /dev/null +++ b/src/content/dependencies/generateMusicVideoDateLine.js @@ -0,0 +1,56 @@ +function sameDay(musicVideo, thing) { + if (!musicVideo.dateIsSpecified) return null; + + const compare = (a, b) => + a.toDateString() === b.toDateString(); + + const album = thing.isTrack ? thing.album : thing; + const track = thing.isTrack ? thing : null; + + if (compare(musicVideo.date, album.date)) { + if (album.style === 'single') { + return 'single'; + } else { + return 'album'; + } + } + + if (compare(musicVideo.date, track.date)) { + return 'track'; + } + + return null; + +} + +export default { + data: (musicVideo, thing) => ({ + date: + musicVideo.date, + + dateIsSpecified: + musicVideo.dateIsSpecified, + + sameDay: + sameDay(musicVideo, thing), + }), + + generate: (data, {language}) => + language.encapsulate('misc.musicVideo.date', capsule => [ + data.sameDay === 'album' && + language.$(capsule, 'sameDayAsAlbum'), + + data.sameDay === 'single' && + language.$(capsule, 'sameDayAsTrack'), + + data.sameDay === 'track' && + language.$(capsule, 'sameDayAsTrack'), + + data.sameDay === null && + data.dateIsSpecified && + language.$(capsule, { + date: + language.formatDate(data.date), + }), + ]), +}; diff --git a/src/content/dependencies/generateMusicVideoReleaseLine.js b/src/content/dependencies/generateMusicVideoReleaseLine.js deleted file mode 100644 index e4e196e9..00000000 --- a/src/content/dependencies/generateMusicVideoReleaseLine.js +++ /dev/null @@ -1,61 +0,0 @@ -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(); - }, -} -- cgit 1.3.0-6-gf8a5