« get me outta code hell

content, css: generateGroupGalleryPage: mark albums not from group - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/content/dependencies/generateGroupGalleryPageSeriesSection.js
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2025-05-17 13:48:18 -0300
committer(quasar) nebula <qznebula@protonmail.com>2025-05-17 13:48:18 -0300
commitd631b7def7e6e134245f3df121e7dff26fa2e94f (patch)
treead7cad212a4aa31c73026ec97ff2b387b6855f61 /src/content/dependencies/generateGroupGalleryPageSeriesSection.js
parent25b6318977d279406bf4d1a436c2aeebb9bf7bc4 (diff)
content, css: generateGroupGalleryPage: mark albums not from group
Diffstat (limited to 'src/content/dependencies/generateGroupGalleryPageSeriesSection.js')
-rw-r--r--src/content/dependencies/generateGroupGalleryPageSeriesSection.js105
1 files changed, 66 insertions, 39 deletions
diff --git a/src/content/dependencies/generateGroupGalleryPageSeriesSection.js b/src/content/dependencies/generateGroupGalleryPageSeriesSection.js
index 3fe3fb45..2ccead5d 100644
--- a/src/content/dependencies/generateGroupGalleryPageSeriesSection.js
+++ b/src/content/dependencies/generateGroupGalleryPageSeriesSection.js
@@ -21,6 +21,9 @@ export default {
     query.allAlbumsDated =
       series.albums.every(album => album.date);
 
+    query.anyAlbumNotFromThisGroup =
+      series.albums.some(album => !album.groups.includes(series.group));
+
     query.latestAlbum =
       albumsLatestFirst
         .filter(album => album.date)
@@ -36,21 +39,28 @@ export default {
     return query;
   },
 
-  relations: (relation, query, _series) => ({
+  relations: (relation, query, series) => ({
     gallerySection:
       relation('generateExpandableGallerySection'),
 
     gridAboveCut:
-      relation('generateGroupGalleryPageAlbumGrid', query.albumsAboveCut),
+      relation('generateGroupGalleryPageAlbumGrid',
+        query.albumsAboveCut,
+        series.group),
 
     gridBelowCut:
-      relation('generateGroupGalleryPageAlbumGrid', query.albumsBelowCut),
+      relation('generateGroupGalleryPageAlbumGrid',
+        query.albumsBelowCut,
+        series.group),
   }),
 
   data: (query, series) => ({
     name:
       series.name,
 
+    groupName:
+      series.group.name,
+
     albums:
       series.albums.length,
 
@@ -62,6 +72,9 @@ export default {
     allAlbumsDated:
       query.allAlbumsDated,
 
+    anyAlbumNotFromThisGroup:
+      query.anyAlbumNotFromThisGroup,
+
     earliestAlbumDate:
       (query.earliestAlbum
         ? query.earliestAlbum.date
@@ -82,43 +95,57 @@ export default {
         contentBelowCut: relations.gridBelowCut,
 
         caption:
-          language.encapsulate(capsule, 'caption', workingCapsule => {
-            const workingOptions = {};
-
-            workingOptions.tracks =
-              html.tag('b',
-                language.countTracks(data.tracks, {unit: true}));
-
-            workingOptions.albums =
-              html.tag('b',
-                language.countAlbums(data.albums, {unit: true}));
-
-            if (data.allAlbumsDated) {
-              const earliestDate = data.earliestAlbumDate;
-              const latestDate = data.latestAlbumDate;
-
-              const earliestYear = earliestDate.getFullYear();
-              const latestYear = latestDate.getFullYear();
-
-              if (earliestYear === latestYear) {
-                if (data.albums === 1) {
-                  workingCapsule += '.withDate';
-                  workingOptions.date =
-                    language.formatDate(earliestDate);
-                } else {
-                  workingCapsule += '.withYear';
-                  workingOptions.year =
-                    language.formatYear(earliestDate);
+          language.encapsulate(capsule, 'caption', captionCapsule =>
+            html.tags([
+              data.anyAlbumNotFromThisGroup &&
+                language.$(captionCapsule, 'seriesAlbumsNotFromGroup', {
+                  marker:
+                    language.$('misc.coverGrid.details.notFromThisGroup.marker'),
+
+                  series:
+                    html.tag('i', data.name),
+
+                  group: data.groupName,
+                }),
+
+              language.encapsulate(captionCapsule, workingCapsule => {
+                const workingOptions = {};
+
+                workingOptions.tracks =
+                  html.tag('b',
+                    language.countTracks(data.tracks, {unit: true}));
+
+                workingOptions.albums =
+                  html.tag('b',
+                    language.countAlbums(data.albums, {unit: true}));
+
+                if (data.allAlbumsDated) {
+                  const earliestDate = data.earliestAlbumDate;
+                  const latestDate = data.latestAlbumDate;
+
+                  const earliestYear = earliestDate.getFullYear();
+                  const latestYear = latestDate.getFullYear();
+
+                  if (earliestYear === latestYear) {
+                    if (data.albums === 1) {
+                      workingCapsule += '.withDate';
+                      workingOptions.date =
+                        language.formatDate(earliestDate);
+                    } else {
+                      workingCapsule += '.withYear';
+                      workingOptions.year =
+                        language.formatYear(earliestDate);
+                    }
+                  } else {
+                    workingCapsule += '.withYearRange';
+                    workingOptions.yearRange =
+                      language.formatYearRange(earliestDate, latestDate);
+                  }
                 }
-              } else {
-                workingCapsule += '.withYearRange';
-                workingOptions.yearRange =
-                  language.formatYearRange(earliestDate, latestDate);
-              }
-            }
-
-            return language.$(workingCapsule, workingOptions);
-          }),
+
+                return language.$(workingCapsule, workingOptions);
+              }),
+            ], {[html.joinChildren]: html.tag('br')})),
 
         expandCue:
           language.$(capsule, 'expand'),