« get me outta code hell

support albumless groups - 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-02-05 08:59:30 -0400
committer(quasar) nebula <qznebula@protonmail.com>2023-02-05 09:15:50 -0400
commit7c668d5cc6a107b3613e6bc1ab20c9005590b3cf (patch)
tree6df9bba79901eed7cc7d1f16eba0375a21f10280
parentb8daaca57747812d9a9188a3782eb818e09615ad (diff)
support albumless groups
-rw-r--r--src/page/group.js25
1 files changed, 14 insertions, 11 deletions
diff --git a/src/page/group.js b/src/page/group.js
index 6bfd1532..f9af8e80 100644
--- a/src/page/group.js
+++ b/src/page/group.js
@@ -16,8 +16,7 @@ export function targets({wikiData}) {
 export function write(group, {wikiData}) {
   const {listingSpec, wikiInfo} = wikiData;
 
-  const {albums} = group;
-  const tracks = albums.flatMap((album) => album.tracks);
+  const tracks = group.albums.flatMap((album) => album.tracks);
   const totalDuration = getTotalDuration(tracks, {originalReleasesOnly: true});
 
   const albumLines = group.albums.map((album) => ({
@@ -65,7 +64,7 @@ export function write(group, {wikiData}) {
               transformMultiline(group.description)),
 
           ...html.fragment(
-            group.albums && [
+            !empty(group.albums) && [
               html.tag('h2',
                 {class: ['content-heading']},
                 language.$('groupInfoPage.albumList.title')),
@@ -123,7 +122,7 @@ export function write(group, {wikiData}) {
     }),
   };
 
-  const galleryPage = {
+  const galleryPage = !empty(group.albums) && {
     type: 'page',
     path: ['groupGallery', group.directory],
     page: ({
@@ -165,7 +164,7 @@ export function write(group, {wikiData}) {
                   unit: true,
                 })),
               albums: html.tag('b',
-                language.countAlbums(albums.length, {
+                language.countAlbums(group.albums.length, {
                   unit: true,
                 })),
               time: html.tag('b',
@@ -222,7 +221,7 @@ export function write(group, {wikiData}) {
     }),
   };
 
-  return [infoPage, galleryPage];
+  return [infoPage, galleryPage].filter(Boolean);
 }
 
 // Utility functions
@@ -240,8 +239,6 @@ function generateGroupSidebar(currentGroup, isGallery, {
     return null;
   }
 
-  const linkKey = isGallery ? 'groupGallery' : 'groupInfo';
-
   return {
     content: [
       html.tag('h1',
@@ -260,15 +257,21 @@ function generateGroupSidebar(currentGroup, isGallery, {
                 category: `<span class="group-name">${category.name}</span>`,
               })),
             html.tag('ul',
-              category.groups.map((group) =>
-                html.tag('li',
+              category.groups.map((group) => {
+                const linkKey = (
+                  isGallery && !empty(group.albums)
+                    ? 'groupGallery'
+                    : 'groupInfo');
+
+                return html.tag('li',
                   {
                     class: group === currentGroup && 'current',
                     style: getLinkThemeString(group.color),
                   },
                   language.$('groupSidebar.groupList.item', {
                     group: link[linkKey](group),
-                  })))),
+                  }));
+              })),
           ])),
     ],
   };