« get me outta code hell

content: generateArtTagInfoPage: descendant gallery links - 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>2023-10-06 00:55:16 -0300
committer(quasar) nebula <qznebula@protonmail.com>2025-02-25 20:03:26 -0400
commit6ff9a13abcf19ffb685c31f8bdf85b431912e6bf (patch)
tree86a688811eb2998a8d83a577e7bfd935716e0774
parent9ee6afe0007c555c8b19ef90d4fb63907d002830 (diff)
content: generateArtTagInfoPage: descendant gallery links
-rw-r--r--src/content/dependencies/generateArtTagInfoPage.js115
-rw-r--r--src/strings-default.yaml14
2 files changed, 90 insertions, 39 deletions
diff --git a/src/content/dependencies/generateArtTagInfoPage.js b/src/content/dependencies/generateArtTagInfoPage.js
index 929aef07..72463987 100644
--- a/src/content/dependencies/generateArtTagInfoPage.js
+++ b/src/content/dependencies/generateArtTagInfoPage.js
@@ -1,4 +1,4 @@
-import {empty, unique} from '#sugar';
+import {empty, stitchArrays, unique} from '#sugar';
 
 export default {
   contentDependencies: [
@@ -19,11 +19,22 @@ export default {
   }),
 
   query(sprawl, artTag) {
-    const directThings = artTag.directlyTaggedInThings;
-    const indirectThings = artTag.indirectlyTaggedInThings;
-    const allThings = unique([...directThings, ...indirectThings]);
+    const query = {};
 
-    return {directThings, indirectThings, allThings};
+    query.directThings =
+      artTag.directlyTaggedInThings;
+
+    query.indirectThings =
+      artTag.indirectlyTaggedInThings;
+
+    query.allThings =
+      unique([...query.directThings, ...query.indirectThings]);
+
+    query.allDescendantsHaveMoreDescendants =
+      artTag.directDescendantArtTags
+        .every(descendant => !empty(descendant.directDescendantArtTags));
+
+    return query;
   },
 
   relations: (relation, query, sprawl, artTag) => ({
@@ -55,9 +66,15 @@ export default {
       artTag.directAncestorArtTags
         .map(artTag => relation('linkArtTagInfo', artTag)),
 
-    directDescendantLinks:
+    directDescendantInfoLinks:
       artTag.directDescendantArtTags
         .map(artTag => relation('linkArtTagInfo', artTag)),
+
+    directDescendantGalleryLinks:
+      artTag.directDescendantArtTags.map(artTag =>
+        (query.allDescendantsHaveMoreDescendants
+          ? null
+          : relation('linkArtTagInfo', artTag))),
   }),
 
   data: (query, sprawl, artTag) => ({
@@ -160,37 +177,61 @@ export default {
               links: language.formatDisjunctionList(relations.extraReadingLinks),
             })),
 
-          html.tags([
-            relations.contentHeading.clone()
-              .slots({
-                title:
-                  language.$(pageCapsule, 'descendsFromTags', {
-                    tag: language.sanitize(data.name),
-                  }),
-              }),
-
-            html.tag('ul',
-              {[html.onlyIfContent]: true},
-
-              relations.directAncestorLinks
-                .map(link => html.tag('li', link))),
-          ]),
-
-          html.tags([
-            relations.contentHeading.clone()
-              .slots({
-                title:
-                  language.$(pageCapsule, 'descendantTags', {
-                    tag: language.sanitize(data.name),
-                  }),
-              }),
-
-            html.tag('ul',
-              {[html.onlyIfContent]: true},
-
-              relations.directDescendantLinks
-                .map(link => html.tag('li', link))),
-          ]),
+          language.encapsulate(pageCapsule, 'descendsFromTags', listCapsule =>
+            html.tags([
+              relations.contentHeading.clone()
+                .slots({
+                  title:
+                    language.$(listCapsule, {
+                      tag: language.sanitize(data.name),
+                    }),
+                }),
+
+              html.tag('ul',
+                {[html.onlyIfContent]: true},
+
+                relations.directAncestorLinks
+                  .map(link =>
+                    html.tag('li',
+                      language.$(listCapsule, 'item', {
+                        tag: link,
+                      })))),
+            ])),
+
+          language.encapsulate(pageCapsule, 'descendantTags', listCapsule =>
+            html.tags([
+              relations.contentHeading.clone()
+                .slots({
+                  title:
+                    language.$(listCapsule, {
+                      tag: language.sanitize(data.name),
+                    }),
+                }),
+
+              html.tag('ul',
+                {[html.onlyIfContent]: true},
+
+                stitchArrays({
+                  infoLink: relations.directDescendantInfoLinks,
+                  galleryLink: relations.directDescendantGalleryLinks,
+                }).map(({infoLink, galleryLink}) =>
+                    html.tag('li',
+                      language.encapsulate(listCapsule, 'item', itemCapsule =>
+                        language.encapsulate(itemCapsule, workingCapsule => {
+                          const workingOptions = {};
+
+                          workingOptions.tag = infoLink;
+
+                          if (!html.isBlank(galleryLink)) {
+                            workingCapsule += '.withGallery';
+                            workingOptions.gallery =
+                              galleryLink.slot('content',
+                                language.$(itemCapsule, 'withGallery.gallery'));
+                          }
+
+                          return language.$(workingCapsule, workingOptions);
+                        }))))),
+            ])),
         ],
 
         navLinkStyle: 'hierarchical',
diff --git a/src/strings-default.yaml b/src/strings-default.yaml
index 4ef9624c..a552febd 100644
--- a/src/strings-default.yaml
+++ b/src/strings-default.yaml
@@ -1313,8 +1313,18 @@ artTagInfoPage:
     directlyAndIndirectly: >-
       This tag is directly featured in {ARTWORKS_DIRECTLY}, and indirectly in {ARTWORKS_INDIRECTLY} more, for a total of {ARTWORKS_TOTAL}.
 
-  descendantTags: "Tags that descend from {TAG}:"
-  descendsFromTags: "Tags that {TAG} descends from:"
+  descendsFromTags:
+    _: "Tags that {TAG} descends from:"
+    item: "{TAG}"
+
+  descendantTags:
+    _: "Tags that descend from {TAG}:"
+
+    item:
+      _: "{TAG}"
+      withGallery:
+        _: "{TAG} ({GALLERY})"
+        gallery: "Gallery"
 
 #
 # artTagGalleryPage: