« get me outta code hell

hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/content/dependencies/generateAlbumNavLinks.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/content/dependencies/generateAlbumNavLinks.js')
-rw-r--r--src/content/dependencies/generateAlbumNavLinks.js56
1 files changed, 56 insertions, 0 deletions
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();
+            }
+          })(),
+      },
+    ]),
+};