« 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/generateAlbumCoverArtwork.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/generateAlbumCoverArtwork.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/generateAlbumCoverArtwork.js')
-rw-r--r--src/content/dependencies/generateAlbumCoverArtwork.js47
1 files changed, 40 insertions, 7 deletions
diff --git a/src/content/dependencies/generateAlbumCoverArtwork.js b/src/content/dependencies/generateAlbumCoverArtwork.js
index 99003034..f6583882 100644
--- a/src/content/dependencies/generateAlbumCoverArtwork.js
+++ b/src/content/dependencies/generateAlbumCoverArtwork.js
@@ -1,10 +1,25 @@
 export default {
-  contentDependencies: ['generateCoverArtwork'],
-  extraDependencies: ['language'],
+  contentDependencies: [
+    'generateCoverArtwork',
+    'generateCoverArtworkArtTagDetails',
+    'generateCoverArtworkArtistDetails',
+    'image',
+  ],
+
+  extraDependencies: ['html', 'language'],
 
   relations: (relation, album) => ({
     coverArtwork:
-      relation('generateCoverArtwork', album.artTags, album.coverArtistContribs),
+      relation('generateCoverArtwork'),
+
+    image:
+      relation('image'),
+
+    artTagDetails:
+      relation('generateCoverArtworkArtTagDetails', album.artTags),
+
+    artistDetails:
+      relation('generateCoverArtworkArtistDetails', album.coverArtistContribs),
   }),
 
   data: (album) => ({
@@ -18,11 +33,29 @@ export default {
       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.albumCover'),
+        }),
+
       dimensions: data.dimensions,
-      alt: language.$('misc.alt.albumCover'),
+
+      details:
+        (slots.details === 'tags'
+          ? relations.artTagDetails
+       : slots.details === 'artists'
+          ? relations.artistDetails
+          : null),
     }),
 };