« get me outta code hell

content: gCAArtTagDetails: compare tags w/ main artwork - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2025-04-16 18:21:50 -0300
committer(quasar) nebula <qznebula@protonmail.com>2025-04-22 15:36:37 -0300
commit1fb0d63b9880e9751d0ca5c71db3dcc48ab2342b (patch)
tree9e7fb92c77387adddc67ef2cbe27c3b81489e861
parent450526565e92a5c914268bfcc653a95b44752393 (diff)
content: gCAArtTagDetails: compare tags w/ main artwork
-rw-r--r--src/content/dependencies/generateCoverArtworkArtTagDetails.js52
-rw-r--r--src/strings-default.yaml2
2 files changed, 39 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)))))),
 };
diff --git a/src/strings-default.yaml b/src/strings-default.yaml
index d05d4d9f..ab49229c 100644
--- a/src/strings-default.yaml
+++ b/src/strings-default.yaml
@@ -929,6 +929,8 @@ misc:
 
     trackArtFromAlbum: "Album cover for {ALBUM}"
 
+    sameTagsAsMainArtwork: "Same tags as main artwork"
+
   # coverGrid:
   #   Generic strings for various sorts of gallery grids, displayed
   #   on the homepage, album galleries, artist artwork galleries, and