« get me outta code hell

content: generateNearbyTrackList - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/content/dependencies/generateNearbyTrackList.js
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2025-10-23 18:17:33 -0300
committer(quasar) nebula <qznebula@protonmail.com>2025-10-23 18:19:17 -0300
commit2d8622f8b31df0367ded52a45d7362abfe6d9a7c (patch)
tree0c66e60a8b86729d32daf025e5ac13a4be235a2f /src/content/dependencies/generateNearbyTrackList.js
parente100804966122cd730a0ec4bf55ad10e10b6be60 (diff)
content: generateNearbyTrackList
makes generateTrackList more general
Diffstat (limited to 'src/content/dependencies/generateNearbyTrackList.js')
-rw-r--r--src/content/dependencies/generateNearbyTrackList.js34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/content/dependencies/generateNearbyTrackList.js b/src/content/dependencies/generateNearbyTrackList.js
new file mode 100644
index 00000000..6771285a
--- /dev/null
+++ b/src/content/dependencies/generateNearbyTrackList.js
@@ -0,0 +1,34 @@
+export default {
+  query: (tracks, contextTrack) => ({
+    presentedTracks:
+      (contextTrack
+        ? tracks.map(track =>
+            track.otherReleases.find(({album}) => album === contextTrack.album) ??
+            track)
+        : tracks),
+  }),
+
+  relations: (relation, query, _tracks, _contextTrack) => ({
+    items:
+      query.presentedTracks
+        .map(track => relation('generateTrackListItem', track, [])),
+  }),
+
+  slots: {
+    colorMode: {
+      validate: v => v.is('none', 'track', 'line'),
+      default: 'track',
+    },
+  },
+
+  generate: (relations, slots, {html}) =>
+    html.tag('ul',
+      {[html.onlyIfContent]: true},
+
+      relations.items.map(item =>
+        item.slots({
+          showArtists: 'auto',
+          showDuration: false,
+          colorMode: slots.colorMode,
+        }))),
+};