« get me outta code hell

content: decompose generateCoverArtwork - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/content/dependencies/generateTrackCoverArtwork.js
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2024-11-19 13:25:22 -0400
committer(quasar) nebula <qznebula@protonmail.com>2024-11-19 13:25:22 -0400
commit7cb88275fd3c813114271c0a136b12c72c5a172a (patch)
treeb3b007e73c4681e206162362f5d9a8b99b6762d7 /src/content/dependencies/generateTrackCoverArtwork.js
parent943cb8d05f5ef8572edfa081fb9912107769241a (diff)
content: decompose generateCoverArtwork
No visual/site changes yet.

This involves introducing an unfortunate mega-hack in
generateStickyHeadingContainer, which sets slots on cover
artworks. Very scary. Oooooo

Otherwise, all cover artwork code is much more compositional.
Pass-through slots (`image`) are removed in generateCoverArtwork
and a partially-formed `image` slot is accepted instead.
Diffstat (limited to 'src/content/dependencies/generateTrackCoverArtwork.js')
-rw-r--r--src/content/dependencies/generateTrackCoverArtwork.js49
1 files changed, 41 insertions, 8 deletions
diff --git a/src/content/dependencies/generateTrackCoverArtwork.js b/src/content/dependencies/generateTrackCoverArtwork.js
index 64690c71..f75bf00b 100644
--- a/src/content/dependencies/generateTrackCoverArtwork.js
+++ b/src/content/dependencies/generateTrackCoverArtwork.js
@@ -1,13 +1,28 @@
 export default {
-  contentDependencies: ['generateCoverArtwork'],
-  extraDependencies: ['language'],
+  contentDependencies: [
+    'generateCoverArtwork',
+    'generateCoverArtworkArtTagDetails',
+    'generateCoverArtworkArtistDetails',
+    'image',
+  ],
+
+  extraDependencies: ['html', 'language'],
 
   relations: (relation, track) => ({
     coverArtwork:
-      relation('generateCoverArtwork',
+      relation('generateCoverArtwork'),
+
+    image:
+      relation('image'),
+
+    artTagDetails:
+      relation('generateCoverArtworkArtTagDetails',
         (track.hasUniqueCoverArt
           ? track.artTags
-          : track.album.artTags),
+          : track.album.artTags)),
+
+    artistDetails:
+      relation('generateCoverArtworkArtistDetails',
         (track.hasUniqueCoverArt
           ? track.coverArtistContribs
           : track.album.coverArtistContribs)),
@@ -28,12 +43,30 @@ export default {
         : track.album.coverArtDimensions),
   }),
 
-  generate: (data, relations, {language}) =>
+  slots: {
+    details: {
+      validate: v => v.is('tags', 'artists'),
+      default: 'tags',
+    },
+  },
+
+  generate: (data, relations, slots, {language}) =>
     relations.coverArtwork.slots({
-      path: data.path,
-      color: data.color,
+      image:
+        relations.image.slots({
+          path: data.path,
+          color: data.color,
+          alt: language.$('misc.alt.trackCover'),
+        }),
+
       dimensions: data.dimensions,
-      alt: language.$('misc.alt.trackCover'),
+
+      details:
+        (slots.details === 'tags'
+          ? relations.artTagDetails
+       : slots.details === 'artists'
+          ? relations.artistDetails
+          : null),
     }),
 };