« get me outta code hell

hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/content/dependencies/generateArtistCredit.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/content/dependencies/generateArtistCredit.js')
-rw-r--r--src/content/dependencies/generateArtistCredit.js39
1 files changed, 30 insertions, 9 deletions
diff --git a/src/content/dependencies/generateArtistCredit.js b/src/content/dependencies/generateArtistCredit.js
index 1d6b5dd8..ebc57187 100644
--- a/src/content/dependencies/generateArtistCredit.js
+++ b/src/content/dependencies/generateArtistCredit.js
@@ -1,4 +1,4 @@
-import {compareArrays, empty} from '#sugar';
+import {compareArrays, empty, stitchArrays} from '#sugar';
 
 export default {
   contentDependencies: [
@@ -80,6 +80,14 @@ export default {
     normalContributionAnnotationsDifferFromContext:
       query.normalContributionAnnotationsDifferFromContext,
 
+    normalContributionArtistDirectories:
+      query.normalContributions
+        .map(contrib => contrib.artist.directory),
+
+    featuringContributionArtistDirectories:
+      query.featuringContributions
+        .map(contrib => contrib.artist.directory),
+
     hasWikiEdits:
       !empty(query.wikiEditContributions),
   }),
@@ -144,18 +152,31 @@ export default {
     if (!html.isBlank(relations.formatText)) {
       formattedArtistList = relations.formatText;
 
+      const substituteContrib = ({link, directory}) => ({
+        match: {replacerKey: 'artist', replacerValue: directory},
+        substitute: link,
+
+        apply(link, node) {
+          if (node.data.label) {
+            link.setSlot('content', language.sanitize(node.data.label));
+          }
+        },
+      });
+
       relations.formatText.setSlots({
         mode: 'inline',
 
         substitute: [
-          {
-            match: {
-              replacerKey: 'artist',
-              replacerValue: 'screamcatcher',
-            },
-            substitute: 'YAYAS!',
-          },
-        ],
+          stitchArrays({
+            link: relations.normalContributionLinks,
+            directory: data.normalContributionArtistDirectories,
+          }).map(substituteContrib),
+
+          stitchArrays({
+            link: relations.featuringContributionLinks,
+            directory: data.featuringContributionArtistDirectories,
+          }).map(substituteContrib),
+        ].flat(),
       });
     }