« get me outta code hell

content, data: MusicVideo.contributorStyle - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2026-01-31 23:01:14 -0400
committer(quasar) nebula <qznebula@protonmail.com>2026-01-31 23:03:12 -0400
commit180d3e169b10db5f1837567eca9bf1b2d5542b96 (patch)
tree80ac792949c3d9c40f5f748c4e5513450b702532 /src
parente4faa8a4cbc08621a95413047370b2bda25bb3cb (diff)
content, data: MusicVideo.contributorStyle
Diffstat (limited to 'src')
-rw-r--r--src/content/dependencies/generateMusicVideo.js20
-rw-r--r--src/content/dependencies/generateMusicVideoContributors.js57
-rw-r--r--src/data/things/MusicVideo.js16
-rw-r--r--src/strings-default.yaml3
4 files changed, 80 insertions, 16 deletions
diff --git a/src/content/dependencies/generateMusicVideo.js b/src/content/dependencies/generateMusicVideo.js
index b62c0224..1eb33e0b 100644
--- a/src/content/dependencies/generateMusicVideo.js
+++ b/src/content/dependencies/generateMusicVideo.js
@@ -13,6 +13,9 @@ export default {
     dateLine:
       relation('generateMusicVideoDateLine', musicVideo, thing),
 
+    musicVideoContributors:
+      relation('generateMusicVideoContributors', musicVideo),
+
     contributorCredit:
       relation('generateArtistCredit', musicVideo.contributorContribs, []),
   }),
@@ -65,21 +68,6 @@ export default {
             relations.dateLine,
           ]),
 
-        html.tag('p',
-          language.encapsulate(capsule, 'contributorsLine', capsule =>
-            language.$(capsule, {
-              [language.onlyIfOptions]: ['credit'],
-
-              credit:
-                relations.contributorCredit.slots({
-                  normalStringKey: language.encapsulate(capsule, 'credit'),
-
-                  showAnnotation: true,
-                  showChronology: true,
-                  chunkwrap: false,
-
-                  chronologyKind: 'musicVideoContribution',
-                }),
-            }))),
+        relations.musicVideoContributors,
       ])),
 };
diff --git a/src/content/dependencies/generateMusicVideoContributors.js b/src/content/dependencies/generateMusicVideoContributors.js
new file mode 100644
index 00000000..055df5cc
--- /dev/null
+++ b/src/content/dependencies/generateMusicVideoContributors.js
@@ -0,0 +1,57 @@
+const contributionSlots = {
+  showAnnotation: true,
+  showChronology: true,
+  chronologyKind: 'musicVideoContribution',
+};
+
+export default {
+  relations: (relation, musicVideo) => ({
+    artistCredit:
+      relation('generateArtistCredit', musicVideo.contributorContribs, []),
+
+    contributionLinks:
+      musicVideo.contributorContribs
+        .map(contrib => relation('linkContribution', contrib)),
+  }),
+
+  data: (musicVideo) => ({
+    style:
+      musicVideo.contributorStyle,
+  }),
+
+  generate: (data, relations, {html, language}) =>
+    language.encapsulate('misc.musicVideo', capsule =>
+      (data.style === 'list'
+        ? html.tag('p',
+            {[html.joinChildren]: html.tag('br')},
+            {[html.onlyIfContent]: true},
+
+            [
+              html.tags([
+                language.$(capsule, 'contributorsList.title'),
+              ], {[html.onlyIfSiblings]: true}),
+
+              relations.contributionLinks
+                .map(link => link.slots({...contributionSlots})),
+            ])
+
+     : data.style === 'line'
+        ? html.tag('p',
+            {[html.onlyIfContent]: true},
+
+              language.$(capsule, 'contributorsLine', {
+                [language.onlyIfOptions]: ['credit'],
+
+                credit:
+                  relations.artistCredit.slots({
+                    normalStringKey:
+                      language.encapsulate(capsule, 'contributorsLine.credit'),
+
+                    chunkwrap: false,
+
+                    ...contributionSlots,
+                  }),
+              }))
+
+        : html.blank())),
+};
diff --git a/src/data/things/MusicVideo.js b/src/data/things/MusicVideo.js
index b3dd31e6..14a27fb7 100644
--- a/src/data/things/MusicVideo.js
+++ b/src/data/things/MusicVideo.js
@@ -81,6 +81,21 @@ export class MusicVideo extends Thing {
       artistProperty: input.value('musicVideoArtistContributions'),
     }),
 
+    contributorStyle: [
+      exposeUpdateValueOrContinue({
+        validate: input.value(
+          is('list', 'line')),
+      }),
+
+      {
+        dependencies: ['contributorContribs'],
+        compute: ({contributorContribs}) =>
+          (contributorContribs.length > 1
+            ? 'list'
+            : 'line'),
+      },
+    ],
+
     contributorContribs: contributionList({
       artistProperty: input.value('musicVideoContributorContributions'),
     }),
@@ -108,6 +123,7 @@ export class MusicVideo extends Thing {
       'Cover Art Dimensions': {property: 'coverArtDimensions'},
 
       'Artists': {property: 'artistContribs', transform: parseContributors},
+      'Contributor Style': {property: 'contributorStyle'},
       'Contributors': {property: 'contributorContribs', transform: parseContributors},
     },
   };
diff --git a/src/strings-default.yaml b/src/strings-default.yaml
index 7c48a5a8..68222f59 100644
--- a/src/strings-default.yaml
+++ b/src/strings-default.yaml
@@ -1019,6 +1019,9 @@ misc:
     contributorsLine.credit: >-
       {ARTISTS}
 
+    contributorsList.title: >-
+      Contributors:
+
   # coverGrid:
   #   Generic strings for various sorts of gallery grids, displayed
   #   on the homepage, album galleries, artist artwork galleries, and