« 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/generateCoverArtworkArtTagDetails.js52
1 files changed, 37 insertions, 15 deletions
diff --git a/src/content/dependencies/generateCoverArtworkArtTagDetails.js b/src/content/dependencies/generateCoverArtworkArtTagDetails.js
index b20f599b..7ef37dfd 100644
--- a/src/content/dependencies/generateCoverArtworkArtTagDetails.js
+++ b/src/content/dependencies/generateCoverArtworkArtTagDetails.js
@@ -1,13 +1,21 @@
-import {stitchArrays} from '#sugar';
+import {compareArrays, empty, stitchArrays} from '#sugar';
+
+function linkable(tag) {
+  return !tag.isContentWarning;
+}
 
 export default {
   contentDependencies: ['linkArtTagGallery'],
-  extraDependencies: ['html'],
+  extraDependencies: ['html', 'language'],
 
   query: (artwork) => ({
     linkableArtTags:
-      artwork.artTags
-        .filter(tag => !tag.isContentWarning),
+      artwork.artTags.filter(linkable),
+
+    mainArtworkLinkableArtTags:
+      (artwork.mainArtwork
+        ? artwork.mainArtwork.artTags.filter(linkable)
+        : null),
   }),
 
   relations: (relation, query, _artwork) => ({
@@ -16,7 +24,18 @@ export default {
         .map(tag => relation('linkArtTagGallery', tag)),
   }),
 
-  data: (query, _artwork) => {
+  data: (query, artwork) => {
+    if (
+      !artwork.isMainArtwork &&
+      query.mainArtworkLinkableArtTags &&
+      !empty(query.mainArtworkLinkableArtTags) &&
+      compareArrays(
+        query.mainArtworkLinkableArtTags,
+        query.linkableArtTags)
+    ) {
+      return {sameAsMainArtwork: true};
+    }
+
     const seenShortNames = new Set();
     const duplicateShortNames = new Set();
 
@@ -35,16 +54,19 @@ export default {
     return {preferShortName};
   },
 
-  generate: (data, relations, {html}) =>
-    html.tag('ul', {class: 'image-details'},
-      {[html.onlyIfContent]: true},
+  generate: (data, relations, {html, language}) =>
+    language.encapsulate('misc.coverArtwork', capsule =>
+      html.tag('ul', {class: 'image-details'},
+        {[html.onlyIfContent]: true},
 
-      {class: 'art-tag-details'},
+        {class: 'art-tag-details'},
 
-      stitchArrays({
-        artTagLink: relations.artTagLinks,
-        preferShortName: data.preferShortName,
-      }).map(({artTagLink, preferShortName}) =>
-          html.tag('li',
-            artTagLink.slot('preferShortName', preferShortName)))),
+        (data.sameAsMainArtwork
+          ? language.$(capsule, 'sameTagsAsMainArtwork')
+          : stitchArrays({
+              artTagLink: relations.artTagLinks,
+              preferShortName: data.preferShortName,
+            }).map(({artTagLink, preferShortName}) =>
+                html.tag('li',
+                  artTagLink.slot('preferShortName', preferShortName)))))),
 };