« get me outta code hell

content: generateArtistCredit: artistText plumbing - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/content
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2025-09-08 18:53:21 -0300
committer(quasar) nebula <qznebula@protonmail.com>2025-09-08 18:53:21 -0300
commit7ff786e6cc7a67434eb6a8bcaf21ad1b7f3cc239 (patch)
treed6c0a8b74ffe47d824633247579bb62d48faa506 /src/content
parent400cde0523f621b7160a3b6b374361c8df687ba5 (diff)
content: generateArtistCredit: artistText plumbing
Diffstat (limited to 'src/content')
-rw-r--r--src/content/dependencies/generateArtistCredit.js134
-rw-r--r--src/content/dependencies/generateReleaseInfoContributionsLine.js4
-rw-r--r--src/content/dependencies/generateTrackReleaseInfo.js4
3 files changed, 86 insertions, 56 deletions
diff --git a/src/content/dependencies/generateArtistCredit.js b/src/content/dependencies/generateArtistCredit.js
index 2d611ca6..363ba768 100644
--- a/src/content/dependencies/generateArtistCredit.js
+++ b/src/content/dependencies/generateArtistCredit.js
@@ -4,11 +4,12 @@ export default {
   contentDependencies: [
     'generateArtistCreditWikiEditsPart',
     'linkContribution',
+    'transformContent',
   ],
 
   extraDependencies: ['html', 'language'],
 
-  query: (creditContributions, contextContributions) => {
+  query: (creditContributions, contextContributions, _formatText) => {
     const query = {};
 
     const featuringFilter = contribution =>
@@ -52,7 +53,10 @@ export default {
     return query;
   },
 
-  relations: (relation, query, _creditContributions, _contextContributions) => ({
+  relations: (relation, query,
+      _creditContributions,
+      _contextContributions,
+      formatText) => ({
     normalContributionLinks:
       query.normalContributions
         .map(contrib => relation('linkContribution', contrib)),
@@ -64,9 +68,12 @@ export default {
     wikiEditsPart:
       relation('generateArtistCreditWikiEditsPart',
         query.wikiEditContributions),
+
+    formatText:
+      relation('transformContent', formatText),
   }),
 
-  data: (query, _creditContributions, _contextContributions) => ({
+  data: (query, _creditContributions, _contextContributions, _formatText) => ({
     normalContributionArtistsDifferFromContext:
       query.normalContributionArtistsDifferFromContext,
 
@@ -132,67 +139,88 @@ export default {
       });
     }
 
-    if (empty(relations.normalContributionLinks)) {
-      return html.blank();
-    }
-
-    const artistsList =
-      (data.hasWikiEdits && slots.showWikiEdits
-        ? language.$('misc.artistLink.withEditsForWiki', {
-            artists:
-              language.formatConjunctionList(relations.normalContributionLinks),
-
-            edits:
-              relations.wikiEditsPart.slots({
-                showAnnotation: slots.showAnnotation,
-              }),
-          })
-        : language.formatConjunctionList(relations.normalContributionLinks));
-
-    const featuringList =
-      language.formatConjunctionList(relations.featuringContributionLinks);
+    let formattedArtistList = null;
 
-    const everyoneList =
-      language.formatConjunctionList([
-        ...relations.normalContributionLinks,
-        ...relations.featuringContributionLinks,
-      ]);
+    if (!html.isBlank(relations.formatText)) {
+      formattedArtistList = relations.formatText;
 
-    const effectivelyDiffers =
-      (slots.showAnnotation && data.normalContributionAnnotationsDifferFromContext) ||
-      (data.normalContributionArtistsDifferFromContext);
+      relations.formatText.setSlots({
+        mode: 'inline',
+      });
+    }
 
     let content;
 
-    if (empty(relations.featuringContributionLinks)) {
-      if (effectivelyDiffers) {
+    if (formattedArtistList) {
+      content =
+        language.$(slots.normalStringKey, {
+          ...slots.additionalStringOptions,
+          artists: formattedArtistList,
+        });
+    } else {
+      if (empty(relations.normalContributionLinks)) {
+        return html.blank();
+      }
+
+      const artistsList =
+        (data.hasWikiEdits && slots.showWikiEdits
+          ? language.$('misc.artistLink.withEditsForWiki', {
+              artists:
+                language.formatConjunctionList(relations.normalContributionLinks),
+
+              edits:
+                relations.wikiEditsPart.slots({
+                  showAnnotation: slots.showAnnotation,
+                }),
+            })
+
+          : language.formatConjunctionList(relations.normalContributionLinks));
+
+      const featuringList =
+        language.formatConjunctionList(relations.featuringContributionLinks);
+
+      const everyoneList =
+        language.formatConjunctionList([
+          ...relations.normalContributionLinks,
+          ...relations.featuringContributionLinks,
+        ]);
+
+      const effectivelyDiffers =
+        (formattedArtistList
+          ? null
+          : (slots.showAnnotation && data.normalContributionAnnotationsDifferFromContext) ||
+            (data.normalContributionArtistsDifferFromContext));
+
+      if (empty(relations.featuringContributionLinks)) {
+        if (effectivelyDiffers) {
+          content =
+            language.$(slots.normalStringKey, {
+              ...slots.additionalStringOptions,
+              artists: artistsList,
+            });
+        } else {
+          return html.blank();
+        }
+      } else if (effectivelyDiffers && slots.normalFeaturingStringKey) {
         content =
-          language.$(slots.normalStringKey, {
+          language.$(slots.normalFeaturingStringKey, {
             ...slots.additionalStringOptions,
             artists: artistsList,
+            featuring: featuringList,
+        });
+      } else if (slots.featuringStringKey) {
+        content =
+          language.$(slots.featuringStringKey, {
+            ...slots.additionalStringOptions,
+            artists: featuringList,
           });
       } else {
-        return html.blank();
+        content =
+          language.$(slots.normalStringKey, {
+            ...slots.additionalStringOptions,
+            artists: everyoneList,
+          });
       }
-    } else if (effectivelyDiffers && slots.normalFeaturingStringKey) {
-      content =
-        language.$(slots.normalFeaturingStringKey, {
-          ...slots.additionalStringOptions,
-          artists: artistsList,
-          featuring: featuringList,
-      });
-    } else if (slots.featuringStringKey) {
-      content =
-        language.$(slots.featuringStringKey, {
-          ...slots.additionalStringOptions,
-          artists: featuringList,
-        });
-    } else {
-      content =
-        language.$(slots.normalStringKey, {
-          ...slots.additionalStringOptions,
-          artists: everyoneList,
-        });
     }
 
     // TODO: This is obviously evil.
diff --git a/src/content/dependencies/generateReleaseInfoContributionsLine.js b/src/content/dependencies/generateReleaseInfoContributionsLine.js
index 016e0a2c..f93403d9 100644
--- a/src/content/dependencies/generateReleaseInfoContributionsLine.js
+++ b/src/content/dependencies/generateReleaseInfoContributionsLine.js
@@ -2,9 +2,9 @@ export default {
   contentDependencies: ['generateArtistCredit'],
   extraDependencies: ['html'],
 
-  relations: (relation, contributions) => ({
+  relations: (relation, contributions, formatText) => ({
     credit:
-      relation('generateArtistCredit', contributions, []),
+      relation('generateArtistCredit', contributions, [], formatText),
   }),
 
   slots: {
diff --git a/src/content/dependencies/generateTrackReleaseInfo.js b/src/content/dependencies/generateTrackReleaseInfo.js
index 3298dcc4..fa64ac22 100644
--- a/src/content/dependencies/generateTrackReleaseInfo.js
+++ b/src/content/dependencies/generateTrackReleaseInfo.js
@@ -10,7 +10,9 @@ export default {
     const relations = {};
 
     relations.artistContributionsLine =
-      relation('generateReleaseInfoContributionsLine', track.artistContribs);
+      relation('generateReleaseInfoContributionsLine',
+        track.artistContribs,
+        track.artistText);
 
     relations.listenLine =
       relation('generateReleaseInfoListenLine', track);