« get me outta code hell

content: generateAlbumLinkNavAccent & friends - 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>2026-05-28 14:25:50 -0300
committer(quasar) nebula <qznebula@protonmail.com>2026-05-28 14:25:50 -0300
commit8cf17aae87ba968d35c9871be9f90997cd5a80ad (patch)
tree25725594d8a4c62f294ed08c0f7c33d71a99bc75 /src
parent045b3eee42ce2ce20793f65ca7f4752457bbe77d (diff)
content: generateAlbumLinkNavAccent & friends
Diffstat (limited to 'src')
-rw-r--r--src/content/dependencies/generateAlbumCommentaryPage.js29
-rw-r--r--src/content/dependencies/generateAlbumGalleryPage.js28
-rw-r--r--src/content/dependencies/generateAlbumInfoPage.js21
-rw-r--r--src/content/dependencies/generateAlbumLinkNavAccent.js46
-rw-r--r--src/content/dependencies/generateAlbumNavLinks.js56
-rw-r--r--src/content/dependencies/generateAlbumNavSwitcher.js (renamed from src/content/dependencies/generateAlbumNavAccent.js)0
-rw-r--r--src/content/dependencies/generateTrackInfoPage.js6
-rw-r--r--src/content/dependencies/generateTrackNavLinks.js11
-rw-r--r--src/strings-default.yaml29
9 files changed, 163 insertions, 63 deletions
diff --git a/src/content/dependencies/generateAlbumCommentaryPage.js b/src/content/dependencies/generateAlbumCommentaryPage.js
index d2706918..0d7fb2cb 100644
--- a/src/content/dependencies/generateAlbumCommentaryPage.js
+++ b/src/content/dependencies/generateAlbumCommentaryPage.js
@@ -31,11 +31,8 @@ export default {
     relations.albumStyleTags =
       relation('generateAlbumStyleTags', album, null);
 
-    relations.albumLink =
-      relation('linkAlbum', album);
-
-    relations.albumNavAccent =
-      relation('generateAlbumNavAccent', album, null);
+    relations.albumNavLinks =
+      relation('generateAlbumNavLinks', album);
 
     relations.totals =
       relation('getContentEntryTotals',
@@ -263,21 +260,13 @@ export default {
         ],
 
         navLinkStyle: 'hierarchical',
-        navLinks: [
-          {auto: 'home'},
-          {
-            html:
-              relations.albumLink
-                .slot('attributes', {class: 'current'}),
-
-            accent:
-              relations.albumNavAccent.slots({
-                showTrackNavigation: false,
-                showExtraLinks: true,
-                currentExtra: 'commentary',
-              }),
-          },
-        ],
+        navLinks:
+          html.resolve(
+            relations.albumNavLinks.slots({
+              showTrackNavigation: false,
+              showExtraLinks: true,
+              currentExtra: 'commentary',
+            })),
 
         secondaryNav:
           relations.secondaryNav.slots({
diff --git a/src/content/dependencies/generateAlbumGalleryPage.js b/src/content/dependencies/generateAlbumGalleryPage.js
index 85b0fb74..7e083fbf 100644
--- a/src/content/dependencies/generateAlbumGalleryPage.js
+++ b/src/content/dependencies/generateAlbumGalleryPage.js
@@ -34,11 +34,8 @@ export default {
     albumStyleTags:
       relation('generateAlbumStyleTags', album, null),
 
-    albumLink:
-      relation('linkAlbum', album),
-
-    albumNavAccent:
-      relation('generateAlbumNavAccent', album, null),
+    albumNavLinks:
+      relation('generateAlbumNavLinks', album),
 
     secondaryNav:
       relation('generateAlbumSecondaryNav', album),
@@ -132,20 +129,13 @@ export default {
         ],
 
         navLinkStyle: 'hierarchical',
-        navLinks: [
-          {auto: 'home'},
-          {
-            html:
-              relations.albumLink
-                .slot('attributes', {class: 'current'}),
-            accent:
-              relations.albumNavAccent.slots({
-                showTrackNavigation: false,
-                showExtraLinks: true,
-                currentExtra: 'gallery',
-              }),
-          },
-        ],
+        navLinks:
+          html.resolve(
+            relations.albumNavLinks.slots({
+              showTrackNavigation: false,
+              showExtraLinks: true,
+              currentExtra: 'gallery',
+            })),
 
         secondaryNav: relations.secondaryNav,
       })),
diff --git a/src/content/dependencies/generateAlbumInfoPage.js b/src/content/dependencies/generateAlbumInfoPage.js
index 152518b0..34ebb649 100644
--- a/src/content/dependencies/generateAlbumInfoPage.js
+++ b/src/content/dependencies/generateAlbumInfoPage.js
@@ -11,8 +11,8 @@ export default {
     socialEmbed:
       relation('generateAlbumSocialEmbed', album),
 
-    albumNavAccent:
-      relation('generateAlbumNavAccent', album, null),
+    albumNavLinks:
+      relation('generateAlbumNavLinks', album),
 
     secondaryNav:
       relation('generateAlbumSecondaryNav', album),
@@ -201,17 +201,12 @@ export default {
         ],
 
         navLinkStyle: 'hierarchical',
-        navLinks: [
-          {auto: 'home'},
-          {
-            auto: 'current',
-            accent:
-              relations.albumNavAccent.slots({
-                showTrackNavigation: true,
-                showExtraLinks: true,
-              }),
-          },
-        ],
+        navLinks:
+          html.resolve(
+            relations.albumNavLinks.slots({
+              showTrackNavigation: true,
+              showExtraLinks: true,
+            })),
 
         banner: relations.banner ?? null,
         bannerPosition: 'top',
diff --git a/src/content/dependencies/generateAlbumLinkNavAccent.js b/src/content/dependencies/generateAlbumLinkNavAccent.js
new file mode 100644
index 00000000..50a53472
--- /dev/null
+++ b/src/content/dependencies/generateAlbumLinkNavAccent.js
@@ -0,0 +1,46 @@
+export default {
+  data: (album) => ({
+    style:
+      album.style,
+
+    nameDetail:
+      album.nameDetail,
+  }),
+
+  slots: {
+    navString: {type: 'string', default: 'albumPage.nav'},
+  },
+
+  generate: (data, slots, {html, language}) =>
+    language.encapsulate(slots.navString, 'albumAccent', capsule => {
+      let workingCapsule = capsule;
+      let workingOptions = {};
+
+      let any = false;
+
+      if (data.nameDetail) {
+        workingCapsule += '.withNameDetail';
+        workingOptions.nameDetail = data.nameDetail;
+        any = true;
+      }
+
+      const type =
+        (data.style === 'single'
+          ? language.$(capsule, 'type.single')
+       : data.style === 'in-game vgm'
+          ? language.$(capsule, 'type.vgm')
+          : html.blank());
+
+      if (!html.isBlank(type)) {
+        workingCapsule += '.withType';
+        workingOptions.type = type;
+        any = true;
+      }
+
+      if (any) {
+        return language.$(workingCapsule, workingOptions);
+      } else {
+        return html.blank();
+      }
+    }),
+};
diff --git a/src/content/dependencies/generateAlbumNavLinks.js b/src/content/dependencies/generateAlbumNavLinks.js
new file mode 100644
index 00000000..3068b532
--- /dev/null
+++ b/src/content/dependencies/generateAlbumNavLinks.js
@@ -0,0 +1,56 @@
+export default {
+  relations: (relation, album) => ({
+    albumLink:
+      relation('linkAlbum', album),
+
+    switcher:
+      relation('generateAlbumNavSwitcher', album, null),
+
+    accent:
+      relation('generateAlbumLinkNavAccent', album),
+  }),
+
+  slots: {
+    showTrackNavigation: {type: 'boolean', default: false},
+    showExtraLinks: {type: 'boolean', default: false},
+
+    currentExtra: {
+      validate: v => v.is('gallery', 'commentary'),
+    },
+  },
+
+  generate: (relations, slots, {html, language}) =>
+    language.encapsulate('albumPage.nav', navCapsule => [
+      {auto: 'home'},
+
+      {
+        html:
+          relations.albumLink
+            .slot('attributes', {class: 'current'}),
+
+        accent:
+          (() => {
+            const {switcher, accent} = relations;
+
+            switcher.setSlots({
+              showTrackNavigation: slots.showTrackNavigation,
+              showExtraLinks: slots.showExtraLinks,
+              currentExtra: slots.currentExtra,
+            });
+
+            if (!html.isBlank(switcher) && !html.isBlank(accent)) {
+              return language.$(navCapsule, 'albumAccent.withLinks', {
+                accent: accent,
+                links: switcher,
+              });
+            } else if (!html.isBlank(accent)) {
+              return accent;
+            } else if (!html.isBlank(switcher)) {
+              return switcher;
+            } else {
+              return html.blank();
+            }
+          })(),
+      },
+    ]),
+};
diff --git a/src/content/dependencies/generateAlbumNavAccent.js b/src/content/dependencies/generateAlbumNavSwitcher.js
index 24a562f4..24a562f4 100644
--- a/src/content/dependencies/generateAlbumNavAccent.js
+++ b/src/content/dependencies/generateAlbumNavSwitcher.js
diff --git a/src/content/dependencies/generateTrackInfoPage.js b/src/content/dependencies/generateTrackInfoPage.js
index 8b92c1be..72c3c897 100644
--- a/src/content/dependencies/generateTrackInfoPage.js
+++ b/src/content/dependencies/generateTrackInfoPage.js
@@ -51,8 +51,8 @@ export default {
     albumNavLink:
       relation('linkAlbum', track.album),
 
-    albumNavAccent:
-      relation('generateAlbumNavAccent', track.album, track),
+    albumNavSwitcher:
+      relation('generateAlbumNavSwitcher', track.album, track),
 
     secondaryNav:
       relation('generateAlbumSecondaryNav', track.album),
@@ -401,7 +401,7 @@ export default {
         navBottomRowContent:
           (data.singleTrackSingle
             ? null
-            : relations.albumNavAccent.slots({
+            : relations.albumNavSwitcher.slots({
                 showTrackNavigation: true,
                 showExtraLinks: false,
               })),
diff --git a/src/content/dependencies/generateTrackNavLinks.js b/src/content/dependencies/generateTrackNavLinks.js
index 55029aa4..0fcd2118 100644
--- a/src/content/dependencies/generateTrackNavLinks.js
+++ b/src/content/dependencies/generateTrackNavLinks.js
@@ -3,14 +3,14 @@ export default {
     albumLink:
       relation('linkAlbum', track.album),
 
+    albumLinkNavAccent:
+      relation('generateAlbumLinkNavAccent', track.album),
+
     trackLink:
       relation('linkTrack', track),
   }),
 
   data: (track) => ({
-    albumStyle:
-      track.album.style,
-
     showTrackSection:
       track.album.showTrackSectionInNavBar,
 
@@ -39,10 +39,7 @@ export default {
 
       {
         html: relations.albumLink.slot('color', false),
-        accent:
-          (data.albumStyle === 'single'
-            ? language.$(navCapsule, 'singleAccent')
-            : null),
+        accent: relations.albumLinkNavAccent.slot('navString', navCapsule),
       },
 
       data.showTrackSection &&
diff --git a/src/strings-default.yaml b/src/strings-default.yaml
index 1d06d1d4..4e1bf94c 100644
--- a/src/strings-default.yaml
+++ b/src/strings-default.yaml
@@ -1365,6 +1365,22 @@ albumPage:
 
     backToAlbum: "Return to album page"
 
+    albumAccent:
+      withNameDetail: >-
+        {NAME_DETAIL}
+
+      withType: >-
+        {TYPE}
+
+      withNameDetail.withType: >-
+        {TYPE}: {NAME_DETAIL}
+
+      type.single: "single" # This string should probably never appear, but...
+      type.vgm: "in-game vgm"
+
+      withLinks: >-
+        {ACCENT} - {LINKS}
+
     randomTrack: "Random Track"
     gallery: "Gallery"
     commentary: "Commentary"
@@ -3110,7 +3126,18 @@ trackPage:
 
     backToTrack: "Return to track page"
 
-    singleAccent: "single"
+    albumAccent:
+      withNameDetail: >-
+        {NAME_DETAIL}
+
+      withType: >-
+        {TYPE}
+
+      withNameDetail.withType: >-
+        {TYPE}: {NAME_DETAIL}
+
+      type.single: "single"
+      type.vgm: "vgm"
 
     track:
       _: "{TRACK}"