diff options
author | (quasar) nebula <qznebula@protonmail.com> | 2024-11-17 16:37:43 -0400 |
---|---|---|
committer | (quasar) nebula <qznebula@protonmail.com> | 2024-11-17 16:37:43 -0400 |
commit | 9c3da1ff14bf2760a6358bcab1bdc97f012c2b46 (patch) | |
tree | 6d4d3bb22c6d62abeeffb1fed834972a33f86df2 /src/content/dependencies/generateTrackNavLinks.js | |
parent | 4f92f6e3b7fedaf735a73404e5728ca0965ad9ac (diff) |
content: generateTrackNavLinks
Diffstat (limited to 'src/content/dependencies/generateTrackNavLinks.js')
-rw-r--r-- | src/content/dependencies/generateTrackNavLinks.js | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/content/dependencies/generateTrackNavLinks.js b/src/content/dependencies/generateTrackNavLinks.js new file mode 100644 index 00000000..89da171a --- /dev/null +++ b/src/content/dependencies/generateTrackNavLinks.js @@ -0,0 +1,47 @@ +export default { + contentDependencies: ['linkAlbum', 'linkTrack'], + extraDependencies: ['html', 'language'], + + relations: (relation, track) => ({ + albumLink: + relation('linkAlbum', track.album), + + trackLink: + relation('linkTrack', track), + }), + + data: (track) => ({ + hasTrackNumbers: + track.album.hasTrackNumbers, + + trackNumber: + track.album.tracks.indexOf(track) + 1, + }), + + slots: {}, + + generate: (data, relations, slots, {html, language}) => + language.encapsulate('trackPage.nav', navCapsule => [ + {auto: 'home'}, + + {html: relations.albumLink.slot('color', false)}, + + { + html: + language.encapsulate(navCapsule, 'track', workingCapsule => { + const workingOptions = {}; + + workingOptions.track = + relations.trackLink + .slot('attributes', {class: 'current'}); + + if (data.hasTrackNumbers) { + workingCapsule += '.withNumber'; + workingOptions.number = data.trackNumber; + } + + return language.$(workingCapsule, workingOptions); + }), + }, + ]), +}; |