« get me outta code hell

content: generateArtTagInfoPage (etc): times featured map - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2025-02-09 00:34:13 -0400
committer(quasar) nebula <qznebula@protonmail.com>2025-02-25 20:03:29 -0400
commit27ed45cf9652b4859ca65092b974bd02b9fb107c (patch)
tree81b22282813b38b85a46b554208208a2e7a70125 /src
parentcc87d79e3cfc39fed8bf6d55b061824a3fd35318 (diff)
content: generateArtTagInfoPage (etc): times featured map
Diffstat (limited to 'src')
-rw-r--r--src/content/dependencies/generateArtTagAncestorDescendantMapList.js37
-rw-r--r--src/content/dependencies/generateArtTagInfoPage.js18
-rw-r--r--src/content/dependencies/generateArtTagSidebar.js20
-rw-r--r--src/data/things/language.js1
-rw-r--r--src/static/css/site.css6
-rw-r--r--src/strings-default.yaml14
6 files changed, 86 insertions, 10 deletions
diff --git a/src/content/dependencies/generateArtTagAncestorDescendantMapList.js b/src/content/dependencies/generateArtTagAncestorDescendantMapList.js
index 87b38059..89150615 100644
--- a/src/content/dependencies/generateArtTagAncestorDescendantMapList.js
+++ b/src/content/dependencies/generateArtTagAncestorDescendantMapList.js
@@ -1,4 +1,9 @@
-import {filterMultipleArrays, sortMultipleArrays, stitchArrays} from '#sugar';
+import {
+  filterMultipleArrays,
+  sortMultipleArrays,
+  stitchArrays,
+  unique,
+} from '#sugar';
 
 export default {
   contentDependencies: ['linkArtTagDynamically'],
@@ -25,6 +30,13 @@ export default {
               .length
           : null);
 
+      const artTagsTimesFeaturedTotal =
+        artTags.map(artTag =>
+          unique([
+            ...artTag.directlyTaggedInThings,
+            ...artTag.indirectlyTaggedInThings,
+          ]).length);
+
       const sublists =
         stitchArrays({
           artTag: artTags,
@@ -35,12 +47,12 @@ export default {
               : null));
 
       if (displayBriefly) {
-        filterMultipleArrays(artTags, sublists,
+        filterMultipleArrays(artTags, sublists, artTagsTimesFeaturedTotal,
           (artTag, sublist) =>
             artTag === targetArtTag ||
             sublist !== null);
       } else {
-        sortMultipleArrays(artTags, sublists,
+        sortMultipleArrays(artTags, sublists, artTagsTimesFeaturedTotal,
           (artTagA, artTagB, sublistA, sublistB) =>
             (sublistA && sublistB
               ? 0
@@ -55,6 +67,7 @@ export default {
         displayBriefly,
         numExemptArtTags,
         artTags,
+        artTagsTimesFeaturedTotal,
         sublists,
       };
     };
@@ -77,9 +90,16 @@ export default {
   },
 
   data(query, _ancestorArtTag, targetArtTag) {
-    const recursive = ({displayBriefly, numExemptArtTags, artTags, sublists}) => ({
+    const recursive = ({
+      displayBriefly,
+      numExemptArtTags,
+      artTags,
+      artTagsTimesFeaturedTotal,
+      sublists,
+    }) => ({
       displayBriefly,
       numExemptArtTags,
+      artTagsTimesFeaturedTotal,
 
       artTagsAreTargetTag:
         artTags
@@ -105,17 +125,22 @@ export default {
 
         stitchArrays({
           isTargetTag: dataNode.artTagsAreTargetTag,
+          timesFeaturedTotal: dataNode.artTagsTimesFeaturedTotal,
           dataSublist: dataNode.sublists,
 
           artTagLink: relationsNode.artTagLinks,
           relationsSublist: relationsNode.sublists,
         }).map(({
-            isTargetTag, dataSublist,
+            isTargetTag, timesFeaturedTotal, dataSublist,
             artTagLink, relationsSublist,
           }) => [
             html.tag('dt',
               {class: (dataSublist || isTargetTag) && 'current'},
-              artTagLink),
+              [
+                artTagLink,
+                html.tag('span', {class: 'times-used'},
+                  language.countTimesFeatured(timesFeaturedTotal)),
+              ]),
 
             dataSublist &&
               html.tag('dd',
diff --git a/src/content/dependencies/generateArtTagInfoPage.js b/src/content/dependencies/generateArtTagInfoPage.js
index f118735f..883dbbef 100644
--- a/src/content/dependencies/generateArtTagInfoPage.js
+++ b/src/content/dependencies/generateArtTagInfoPage.js
@@ -103,6 +103,13 @@ export default {
     relatedArtTagAnnotations:
       artTag.relatedArtTags
         .map(({annotation}) => annotation),
+
+    directDescendantTimesFeaturedTotal:
+      artTag.directDescendantArtTags.map(artTag =>
+        unique([
+          ...artTag.directlyTaggedInThings,
+          ...artTag.indirectlyTaggedInThings,
+        ]).length),
   }),
 
   generate: (data, relations, {html, language}) =>
@@ -230,7 +237,8 @@ export default {
                 stitchArrays({
                   infoLink: relations.directDescendantInfoLinks,
                   galleryLink: relations.directDescendantGalleryLinks,
-                }).map(({infoLink, galleryLink}) =>
+                  timesFeaturedTotal: data.directDescendantTimesFeaturedTotal,
+                }).map(({infoLink, galleryLink, timesFeaturedTotal}) =>
                     html.tag('li',
                       language.encapsulate(listCapsule, 'item', itemCapsule =>
                         language.encapsulate(itemCapsule, workingCapsule => {
@@ -245,6 +253,14 @@ export default {
                                 language.$(itemCapsule, 'withGallery.gallery'));
                           }
 
+                          if (timesFeaturedTotal >= 1) {
+                            workingCapsule += `.withTimesUsed`;
+                            workingOptions.timesUsed =
+                              language.countTimesFeatured(timesFeaturedTotal, {
+                                unit: true,
+                              });
+                          }
+
                           return language.$(workingCapsule, workingOptions);
                         }))))),
             ])),
diff --git a/src/content/dependencies/generateArtTagSidebar.js b/src/content/dependencies/generateArtTagSidebar.js
index 254f0a57..c281b93d 100644
--- a/src/content/dependencies/generateArtTagSidebar.js
+++ b/src/content/dependencies/generateArtTagSidebar.js
@@ -1,4 +1,4 @@
-import {collectTreeLeaves, empty, stitchArrays} from '#sugar';
+import {collectTreeLeaves, empty, stitchArrays, unique} from '#sugar';
 
 export default {
   contentDependencies: [
@@ -51,6 +51,13 @@ export default {
   data: (query, sprawl, artTag) => ({
     name: artTag.name,
 
+    directDescendantTimesFeaturedTotal:
+      artTag.directDescendantArtTags.map(artTag =>
+        unique([
+          ...artTag.directlyTaggedInThings,
+          ...artTag.indirectlyTaggedInThings,
+        ]).length),
+
     furthestAncestorArtTagNames:
       query.furthestAncestorArtTags
         .map(ancestorArtTag => ancestorArtTag.name),
@@ -79,8 +86,15 @@ export default {
                       language.sanitize(data.name)))),
 
                 html.tag('ul',
-                  relations.directDescendantArtTagLinks
-                    .map(link => html.tag('li', link))),
+                  stitchArrays({
+                    link: relations.directDescendantArtTagLinks,
+                    timesFeaturedTotal: data.directDescendantTimesFeaturedTotal,
+                  }).map(({link, timesFeaturedTotal}) =>
+                      html.tag('li', [
+                        link,
+                        html.tag('span', {class: 'times-used'},
+                          language.countTimesFeatured(timesFeaturedTotal)),
+                      ]))),
               ]),
 
             stitchArrays({
diff --git a/src/data/things/language.js b/src/data/things/language.js
index 98ce12c6..a3f861bd 100644
--- a/src/data/things/language.js
+++ b/src/data/things/language.js
@@ -904,6 +904,7 @@ Object.assign(Language.prototype, {
   countDays: countHelper('days'),
   countFlashes: countHelper('flashes'),
   countMonths: countHelper('months'),
+  countTimesFeatured: countHelper('timesFeatured'),
   countTimesReferenced: countHelper('timesReferenced'),
   countTimesUsed: countHelper('timesUsed'),
   countTracks: countHelper('tracks'),
diff --git a/src/static/css/site.css b/src/static/css/site.css
index 32bb08d9..12625de4 100644
--- a/src/static/css/site.css
+++ b/src/static/css/site.css
@@ -428,6 +428,12 @@ body::before, .wallpaper-part {
   border-bottom: 1px solid;
 }
 
+.sidebar .times-used {
+  opacity: 0.7;
+  font-size: 0.9em;
+  cursor: default;
+}
+
 .sidebar li.current {
   font-weight: 800;
 }
diff --git a/src/strings-default.yaml b/src/strings-default.yaml
index 8c990cd9..29994b52 100644
--- a/src/strings-default.yaml
+++ b/src/strings-default.yaml
@@ -149,6 +149,16 @@ count:
       many: ""
       other: "{MONTHS} months"
 
+  timesFeatured:
+    _: "{TIMES_FEATURED}"
+    withUnit:
+      zero: ""
+      one: "featured {TIMES_FEATURED} time"
+      two: ""
+      few: ""
+      many: ""
+      other: "featured {TIMES_FEATURED} times"
+
   timesReferenced:
     _: "{TIMES_REFERENCED}"
     withUnit:
@@ -1326,10 +1336,14 @@ artTagInfoPage:
 
     item:
       _: "{TAG}"
+
       withGallery:
         _: "{TAG} ({GALLERY})"
         gallery: "Gallery"
 
+      withTimesUsed: "{TAG} ({TIMES_USED})"
+      withGallery.withTimesUsed: "{TAG} ({GALLERY}, {TIMES_USED})"
+
 #
 # artTagGalleryPage:
 #   The tag gallery page displays all the artworks that a tag has