diff options
author | (quasar) nebula <qznebula@protonmail.com> | 2024-06-12 12:40:30 -0300 |
---|---|---|
committer | (quasar) nebula <qznebula@protonmail.com> | 2024-06-18 22:56:07 -0300 |
commit | 21bf6a2b91dd7a9039b63a4b76de61a7b16edf34 (patch) | |
tree | b8ff915545a56b2db58c4ba0e6e231ec7686a609 /src/content/dependencies/generateTrackInfoPageOtherReleasesList.js | |
parent | 8e0f9299dc7aa7435f14baf43f4ebb4767762ba7 (diff) |
content: generateTrackInfoPageOtherReleasesList
Diffstat (limited to 'src/content/dependencies/generateTrackInfoPageOtherReleasesList.js')
-rw-r--r-- | src/content/dependencies/generateTrackInfoPageOtherReleasesList.js | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/src/content/dependencies/generateTrackInfoPageOtherReleasesList.js b/src/content/dependencies/generateTrackInfoPageOtherReleasesList.js new file mode 100644 index 00000000..5c499760 --- /dev/null +++ b/src/content/dependencies/generateTrackInfoPageOtherReleasesList.js @@ -0,0 +1,78 @@ +import {stitchArrays} from '#sugar'; + +export default { + contentDependencies: [ + 'generateAbsoluteDatetimestamp', + 'generateColorStyleAttribute', + 'generateRelativeDatetimestamp', + 'linkAlbum', + 'linkTrack', + ], + + extraDependencies: ['html', 'language'], + + relations: (relation, track) => ({ + colorStyles: + track.otherReleases + .map(track => relation('generateColorStyleAttribute', track.color)), + + trackLinks: + track.otherReleases + .map(track => relation('linkTrack', track)), + + albumLinks: + track.otherReleases + .map(track => relation('linkAlbum', track.album)), + + datetimestamps: + track.otherReleases.map(track2 => + (track2.date + ? (track.date + ? relation('generateRelativeDatetimestamp', + track2.date, + track.date) + : relation('generateAbsoluteDatetimestamp', + track2.date)) + : null)), + + items: + track.otherReleases.map(track => ({ + trackLink: relation('linkTrack', track), + albumLink: relation('linkAlbum', track.album), + })), + }), + + generate: (relations, {html, language}) => + html.tag('ul', + stitchArrays({ + trackLink: relations.trackLinks, + albumLink: relations.albumLinks, + datetimestamp: relations.datetimestamps, + colorStyle: relations.colorStyles, + }).map(({ + trackLink, + albumLink, + datetimestamp, + colorStyle, + }) => { + const parts = ['releaseInfo.alsoReleasedAs.item']; + const options = {}; + + options.track = trackLink.slot('color', false); + options.album = albumLink; + + if (datetimestamp) { + parts.push('withYear'); + options.year = + datetimestamp.slots({ + style: 'year', + tooltip: true, + }); + } + + return ( + html.tag('li', + colorStyle, + language.$(...parts, options))); + })), +}; |