« get me outta code hell

content, data: related art tags - 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-02-08 23:36:30 -0400
committer(quasar) nebula <qznebula@protonmail.com>2025-02-25 20:03:29 -0400
commit8051e450166464e533e80c84133de30ac3beda87 (patch)
treec830feb150663dc7353ed162a70a3f045c4911f0
parent9251eb1af5dfbd87bbaa5aaa373dd1be162835fb (diff)
content, data: related art tags
-rw-r--r--src/content/dependencies/generateArtTagInfoPage.js29
-rw-r--r--src/data/things/art-tag.js21
-rw-r--r--src/strings-default.yaml4
3 files changed, 54 insertions, 0 deletions
diff --git a/src/content/dependencies/generateArtTagInfoPage.js b/src/content/dependencies/generateArtTagInfoPage.js
index 7d034a6a..7dbb22cf 100644
--- a/src/content/dependencies/generateArtTagInfoPage.js
+++ b/src/content/dependencies/generateArtTagInfoPage.js
@@ -62,6 +62,10 @@ export default {
       artTag.extraReadingURLs
         .map(url => relation('linkExternal', url)),
 
+    relatedArtTagLinks:
+      artTag.relatedArtTags
+        .map(({artTag}) => relation('linkArtTagInfo', artTag)),
+
     directAncestorLinks:
       artTag.directAncestorArtTags
         .map(artTag => relation('linkArtTagInfo', artTag)),
@@ -95,6 +99,10 @@ export default {
 
     numArtworksTotal:
       query.allThings.length,
+
+    relatedArtTagAnnotations:
+      artTag.relatedArtTags
+        .map(({annotation}) => annotation),
   }),
 
   generate: (data, relations, {html, language}) =>
@@ -148,6 +156,27 @@ export default {
                   ?.slot('content', language.$(pageCapsule, 'viewArtGallery.link')),
             })),
 
+          html.tag('p',
+            {[html.onlyIfContent]: true},
+
+            language.encapsulate(pageCapsule, 'seeAlso', capsule =>
+              language.$(capsule, {
+                [language.onlyIfOptions]: ['tags'],
+
+                tags:
+                  language.formatUnitList(
+                    stitchArrays({
+                      artTagLink: relations.relatedArtTagLinks,
+                      annotation: data.relatedArtTagAnnotations,
+                    }).map(({artTagLink, annotation}) =>
+                        (html.isBlank(annotation)
+                          ? artTagLink
+                          : language.$(capsule, 'tagWithAnnotation', {
+                              tag: artTagLink,
+                              annotation,
+                            })))),
+              }))),
+
           html.tag('blockquote',
             {[html.onlyIfContent]: true},
 
diff --git a/src/data/things/art-tag.js b/src/data/things/art-tag.js
index f023eb76..fe4c77b2 100644
--- a/src/data/things/art-tag.js
+++ b/src/data/things/art-tag.js
@@ -6,11 +6,13 @@ import {sortAlphabetically, sortAlbumsTracksChronologically} from '#sort';
 import Thing from '#thing';
 import {unique} from '#sugar';
 import {isName} from '#validators';
+import {parseAnnotatedReferences} from '#yaml';
 
 import {exitWithoutDependency, exposeDependency, exposeUpdateValueOrContinue}
   from '#composite/control-flow';
 
 import {
+  annotatedReferenceList,
   color,
   directory,
   flag,
@@ -59,6 +61,16 @@ export class ArtTag extends Thing {
       find: soupyFind.input('artTag'),
     }),
 
+    relatedArtTags: annotatedReferenceList({
+      class: input.value(ArtTag),
+      find: soupyFind.input('artTag'),
+
+      date: input.value(null),
+
+      reference: input.value('artTag'),
+      thing: input.value('artTag'),
+    }),
+
     // Update only
 
     find: soupyFind(),
@@ -154,6 +166,15 @@ export class ArtTag extends Thing {
       'Is CW': {property: 'isContentWarning'},
 
       'Direct Descendant Tags': {property: 'directDescendantArtTags'},
+
+      'Related Tags': {
+        property: 'relatedArtTags',
+        transform: entries =>
+          parseAnnotatedReferences(entries, {
+            referenceField: 'Tag',
+            referenceProperty: 'artTag',
+          }),
+      },
     },
   };
 
diff --git a/src/strings-default.yaml b/src/strings-default.yaml
index 92b86bd7..8c990cd9 100644
--- a/src/strings-default.yaml
+++ b/src/strings-default.yaml
@@ -1300,6 +1300,10 @@ artTagInfoPage:
 
   readMoreOn: "Read more about {TAG} on {LINKS}."
 
+  seeAlso:
+    _: "See also: {TAGS}"
+    tagWithAnnotation: "{TAG} ({ANNOTATION})"
+
   featuredIn:
     notFeatured: >-
       This tag hasn't been featured in any artworks yet.