« 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
diff options
context:
space:
mode:
Diffstat (limited to 'src/content/dependencies')
-rw-r--r--src/content/dependencies/generateCoverArtworkOriginDetails.js113
1 files changed, 69 insertions, 44 deletions
diff --git a/src/content/dependencies/generateCoverArtworkOriginDetails.js b/src/content/dependencies/generateCoverArtworkOriginDetails.js
index 08a01cfe..3366a22e 100644
--- a/src/content/dependencies/generateCoverArtworkOriginDetails.js
+++ b/src/content/dependencies/generateCoverArtworkOriginDetails.js
@@ -13,11 +13,18 @@ export default {
   query: (artwork) => ({
     artworkThingType:
       artwork.thing.constructor[Thing.referenceType],
+
+    mainArtworkArtistContribs:
+      (!artwork.isMainArtwork && artwork.mainArtwork
+        ? artwork.mainArtwork.artistContribs
+        : null)
   }),
 
   relations: (relation, query, artwork) => ({
     credit:
-      relation('generateArtistCredit', artwork.artistContribs, []),
+      relation('generateArtistCredit',
+        artwork.artistContribs,
+        query.mainArtworkArtistContribs ?? []),
 
     source:
       relation('transformContent', artwork.source),
@@ -50,49 +57,67 @@ export default {
 
         {class: 'origin-details'},
 
-        [
-          language.encapsulate(capsule, 'artworkBy', workingCapsule => {
-            const workingOptions = {};
-
-            if (data.label) {
-              workingCapsule += '.customLabel';
-              workingOptions.label = data.label;
-            }
-
-            if (relations.datetimestamp) {
-              workingCapsule += '.withYear';
-              workingOptions.year =
-                relations.datetimestamp.slots({
-                  style: 'year',
-                  tooltip: true,
-                });
-            }
-
-            return relations.credit.slots({
-              showAnnotation: true,
-              showExternalLinks: true,
-              showChronology: true,
-              showWikiEdits: true,
-
-              trimAnnotation: false,
-
-              chronologyKind: 'coverArt',
+        (() => {
+          const artworkBy =
+            language.encapsulate(capsule, 'artworkBy', workingCapsule => {
+              const workingOptions = {};
+
+              if (data.label) {
+                workingCapsule += '.customLabel';
+                workingOptions.label = data.label;
+              }
+
+              if (relations.datetimestamp) {
+                workingCapsule += '.withYear';
+                workingOptions.year =
+                  relations.datetimestamp.slots({
+                    style: 'year',
+                    tooltip: true,
+                  });
+              }
+
+              return relations.credit.slots({
+                showAnnotation: true,
+                showExternalLinks: true,
+                showChronology: true,
+                showWikiEdits: true,
+
+                trimAnnotation: false,
+
+                chronologyKind: 'coverArt',
+
+                normalStringKey: workingCapsule,
+                additionalStringOptions: workingOptions,
+              });
+            });
 
-              normalStringKey: workingCapsule,
-              additionalStringOptions: workingOptions,
+          const trackArtFromAlbum =
+            pagePath[0] === 'track' &&
+            data.artworkThingType === 'album' &&
+              language.$(capsule, 'trackArtFromAlbum', {
+                album:
+                  relations.albumLink.slot('color', false),
+              });
+
+          const source =
+            language.encapsulate(capsule, 'source', workingCapsule => {
+              const workingOptions = {
+                [language.onlyIfOptions]: ['source'],
+                source: relations.source.slot('mode', 'inline'),
+              };
+
+              if (html.isBlank(artworkBy) && data.label) {
+                workingCapsule += '.customLabel';
+                workingOptions.label = data.label;
+              }
+
+              return language.$(workingCapsule, workingOptions);
             });
-          }),
-
-          pagePath[0] === 'track' &&
-          data.artworkThingType === 'album' &&
-            language.$(capsule, 'trackArtFromAlbum', {
-              album:
-                relations.albumLink.slot('color', false),
-            }),
-
-          language.$(capsule, 'source', {
-            [language.onlyIfOptions]: ['source'],
-            source: relations.source.slot('mode', 'inline'),
-          }),
-        ])),
+
+          return [
+            artworkBy,
+            trackArtFromAlbum,
+            source,
+          ];
+        })())),
 };