« 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/generateAlbumCommentarySidebar.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/content/dependencies/generateAlbumCommentarySidebar.js')
-rw-r--r--src/content/dependencies/generateAlbumCommentarySidebar.js62
1 files changed, 43 insertions, 19 deletions
diff --git a/src/content/dependencies/generateAlbumCommentarySidebar.js b/src/content/dependencies/generateAlbumCommentarySidebar.js
index 435860cb..8313e6de 100644
--- a/src/content/dependencies/generateAlbumCommentarySidebar.js
+++ b/src/content/dependencies/generateAlbumCommentarySidebar.js
@@ -6,7 +6,7 @@ export default {
     'linkAlbum',
   ],
 
-  extraDependencies: ['html'],
+  extraDependencies: ['html', 'language'],
 
   relations: (relation, album) => ({
     sidebar:
@@ -26,22 +26,46 @@ export default {
           trackSection)),
   }),
 
-  generate: (relations, {html}) =>
-    relations.sidebar.slots({
-      stickyMode: 'column',
-      boxes: [
-        relations.sidebarBox.slots({
-          attributes: {class: 'commentary-track-list-sidebar-box'},
-          content: [
-            html.tag('h1', relations.albumLink),
-            relations.trackSections.map(section =>
-              section.slots({
-                anchor: true,
-                open: true,
-                mode: 'commentary',
-              })),
-          ],
-        }),
-      ]
-    }),
+  data: (album) => ({
+    albumHasCommentary:
+      !!album.commentary,
+
+    anyTrackHasCommentary:
+      album.tracks.some(track => track.commentary),
+  }),
+
+  generate: (data, relations, {html, language}) =>
+    language.encapsulate('albumCommentaryPage', pageCapsule =>
+      relations.sidebar.slots({
+        stickyMode: 'column',
+        boxes: [
+          relations.sidebarBox.slots({
+            attributes: {class: 'commentary-track-list-sidebar-box'},
+            content: [
+              html.tag('h1', relations.albumLink),
+
+              html.tag('p', {[html.onlyIfContent]: true},
+                language.encapsulate(pageCapsule, 'sidebar', workingCapsule => {
+                  if (data.anyTrackHasCommentary) return html.blank();
+
+                  if (data.albumHasCommentary) {
+                    workingCapsule += '.noTrackCommentary';
+                  } else {
+                    workingCapsule += '.noCommentary';
+                  }
+
+                  return language.$(workingCapsule);
+                })),
+
+              data.anyTrackHasCommentary &&
+                relations.trackSections.map(section =>
+                  section.slots({
+                    anchor: true,
+                    open: true,
+                    mode: 'commentary',
+                  })),
+            ],
+          }),
+        ]
+      })),
 }