« 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.js64
1 files changed, 45 insertions, 19 deletions
diff --git a/src/content/dependencies/generateAlbumCommentarySidebar.js b/src/content/dependencies/generateAlbumCommentarySidebar.js
index 435860cb..9ecec66d 100644
--- a/src/content/dependencies/generateAlbumCommentarySidebar.js
+++ b/src/content/dependencies/generateAlbumCommentarySidebar.js
@@ -1,3 +1,5 @@
+import {empty} from '#sugar';
+
 export default {
   contentDependencies: [
     'generateAlbumSidebarTrackSection',
@@ -6,7 +8,7 @@ export default {
     'linkAlbum',
   ],
 
-  extraDependencies: ['html'],
+  extraDependencies: ['html', 'language'],
 
   relations: (relation, album) => ({
     sidebar:
@@ -26,22 +28,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:
+      !empty(album.commentary),
+
+    anyTrackHasCommentary:
+      album.tracks.some(track => !empty(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',
+                  })),
+            ],
+          }),
+        ]
+      })),
 }