diff options
author | (quasar) nebula <qznebula@protonmail.com> | 2025-02-21 08:07:25 -0400 |
---|---|---|
committer | (quasar) nebula <qznebula@protonmail.com> | 2025-03-02 08:24:13 -0400 |
commit | 4b9550a2d8dda5d58861c8f2c2c2a7b7ec803059 (patch) | |
tree | 728de9061b6124934392bcb0d8c686e4a0f1e9b0 /src/content/dependencies/generateArtistInfoPageFirstReleaseTooltip.js | |
parent | 5580640828d71d3c17f1c1f3ac51b42a9082d663 (diff) |
content: generateArtistInfoPageFirstReleaseTooltip
Also rescue hr.cute
Diffstat (limited to 'src/content/dependencies/generateArtistInfoPageFirstReleaseTooltip.js')
-rw-r--r-- | src/content/dependencies/generateArtistInfoPageFirstReleaseTooltip.js | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/src/content/dependencies/generateArtistInfoPageFirstReleaseTooltip.js b/src/content/dependencies/generateArtistInfoPageFirstReleaseTooltip.js new file mode 100644 index 00000000..e5ea3065 --- /dev/null +++ b/src/content/dependencies/generateArtistInfoPageFirstReleaseTooltip.js @@ -0,0 +1,80 @@ +import {sortChronologically} from '#sort'; +import {stitchArrays} from '#sugar'; + +export default { + contentDependencies: ['generateColorStyleAttribute', 'generateTooltip'], + extraDependencies: ['html', 'language'], + + query: (track) => ({ + rereleases: + sortChronologically(track.allReleases).slice(1), + }), + + relations: (relation, query, track) => ({ + tooltip: + relation('generateTooltip'), + + firstReleaseColorStyle: + relation('generateColorStyleAttribute', track.color), + + rereleaseColorStyles: + query.rereleases + .map(rerelease => + relation('generateColorStyleAttribute', rerelease.album.color)), + }), + + data: (query, track) => ({ + firstReleaseDate: + track.dateFirstReleased ?? + track.album.date, + + rereleaseAlbumNames: + query.rereleases + .map(rerelease => rerelease.album.name), + + rereleaseDates: + query.rereleases + .map(rerelease => + rerelease.dateFirstReleased ?? + rerelease.album.date), + }), + + generate: (data, relations, {html, language}) => + language.encapsulate('artistPage.creditList.entry.firstRelease', capsule => + relations.tooltip.slots({ + attributes: [ + {class: 'first-release-tooltip'}, + relations.firstReleaseColorStyle, + ], + + contentAttributes: [ + {[html.joinChildren]: html.tag('hr', {class: 'cute'})}, + ], + + content: + stitchArrays({ + colorStyle: relations.rereleaseColorStyles, + albumName: data.rereleaseAlbumNames, + date: data.rereleaseDates, + }).map(({colorStyle, albumName, date}) => + html.tags([ + language.$(capsule, 'rerelease', { + album: + html.metatag('blockwrap', + html.tag('a', + {href: '#'}, + colorStyle.slot('context', 'primary-only'), + + language.sanitize(albumName))), + }), + + html.tag('br'), + + language.formatRelativeDate(date, data.firstReleaseDate, { + considerRoundingDays: true, + approximate: true, + absolute: true, + }), + ])), + })), +}; |