« get me outta code hell

content: generateListingPage: formatListingString cleanup - 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-11-09 16:33:20 -0400
committer(quasar) nebula <qznebula@protonmail.com>2023-11-09 16:33:20 -0400
commit869548723002ebf2f3a501c4105cdf6db7ac8aa7 (patch)
tree371009b6b35d535f17acef3bd8776e6dbb106963
parentb8e612f9723ef1b890a1af8745e3f165220ce9d1 (diff)
content: generateListingPage: formatListingString cleanup
-rw-r--r--src/content/dependencies/generateListingPage.js54
1 files changed, 38 insertions, 16 deletions
diff --git a/src/content/dependencies/generateListingPage.js b/src/content/dependencies/generateListingPage.js
index 3878d0eb..6eee45b8 100644
--- a/src/content/dependencies/generateListingPage.js
+++ b/src/content/dependencies/generateListingPage.js
@@ -104,29 +104,43 @@ export default {
   },
 
   generate(data, relations, slots, {html, language}) {
-    const formatListingString = (contextStringsKey, options = {}) => {
-      const baseStringsKey = `listingPage.${data.stringsKey}`;
-
-      const parts = [baseStringsKey, contextStringsKey];
-
-      const {stringsKey, ...passOptions} = options;
+    function formatListingString({
+      context,
+      provided = {},
+    }) {
+      const parts = ['listingPage', data.stringsKey];
+
+      if (Array.isArray(context)) {
+        parts.push(...context);
+      } else {
+        parts.push(context);
+      }
 
-      if (stringsKey) {
-        parts.push(options.stringsKey);
+      if (provided.stringsKey) {
+        parts.push(provided.stringsKey);
       }
 
-      return language.formatString(parts.join('.'), passOptions);
-    };
+      const options = {...provided};
+      delete options.stringsKey;
+
+      return language.formatString(...parts, options);
+    }
 
     const formatRow = ({row, attributes}) =>
       (attributes?.href
         ? html.tag('li',
             html.tag('a',
               attributes,
-              formatListingString('chunk.item', row)))
+              formatListingString({
+                context: 'chunk.item',
+                provided: row,
+              })))
         : html.tag('li',
             attributes,
-            formatListingString('chunk.item', row)));
+            formatListingString({
+              context: 'chunk.item',
+              provided: row,
+            })));
 
     const formatRowList = ({rows, rowAttributes}) =>
       html.tag(
@@ -137,7 +151,8 @@ export default {
         }).map(formatRow));
 
     return relations.layout.slots({
-      title: formatListingString('title'),
+      title: formatListingString({context: 'title'}),
+
       headingMode: 'sticky',
 
       mainContent: [
@@ -193,8 +208,10 @@ export default {
                             hash: id,
                             content:
                               html.normalize(
-                                formatListingString('chunk.title', title)
-                                  .toString()
+                                formatListingString({
+                                  context: 'chunk.title',
+                                  provided: title,
+                                }).toString()
                                   .replace(/:$/, '')),
                           }))))),
             ],
@@ -209,8 +226,13 @@ export default {
                   .clone()
                   .slots({
                     tag: 'dt',
-                    title: formatListingString('chunk.title', title),
                     id,
+
+                    title:
+                      formatListingString({
+                        context: 'chunk.title',
+                        provided: title,
+                      }),
                   }),
 
                 html.tag('dd',