« 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
diff options
context:
space:
mode:
Diffstat (limited to 'src/content')
-rw-r--r--src/content/dependencies/generateGroupGalleryPage.js54
-rw-r--r--src/content/dependencies/generateGroupGalleryPageAlbumGrid.js62
2 files changed, 66 insertions, 50 deletions
diff --git a/src/content/dependencies/generateGroupGalleryPage.js b/src/content/dependencies/generateGroupGalleryPage.js
index 2eefd305..453155cb 100644
--- a/src/content/dependencies/generateGroupGalleryPage.js
+++ b/src/content/dependencies/generateGroupGalleryPage.js
@@ -1,11 +1,10 @@
 import {sortChronologically} from '#sort';
-import {stitchArrays} from '#sugar';
 import {filterItemsForCarousel, getTotalDuration} from '#wiki-data';
 
 export default {
   contentDependencies: [
     'generateCoverCarousel',
-    'generateCoverGrid',
+    'generateGroupGalleryPageAlbumGrid',
     'generateGroupNavLinks',
     'generateGroupSecondaryNav',
     'generateGroupSidebar',
@@ -67,18 +66,8 @@ export default {
     quickDescription:
       relation('generateQuickDescription', group),
 
-    coverGrid:
-      relation('generateCoverGrid'),
-
-    gridLinks:
-      query.allAlbums
-        .map(album => relation('linkAlbum', album)),
-
-    gridImages:
-      query.allAlbums.map(album =>
-        (album.hasCoverArt
-          ? relation('image', album.coverArtworks[0])
-          : relation('image'))),
+    albumGrid:
+      relation('generateGroupGalleryPageAlbumGrid', query.allAlbums),
   }),
 
   data: (query, _sprawl, group) => ({
@@ -96,15 +85,6 @@ export default {
 
     totalDuration:
       getTotalDuration(query.allTracks, {mainReleasesOnly: true}),
-
-    gridNames:
-      query.allAlbums.map(album => album.name),
-
-    gridDurations:
-      query.allAlbums.map(album => getTotalDuration(album.tracks)),
-
-    gridNumTracks:
-      query.allAlbums.map(album => album.tracks.length),
   }),
 
   generate: (data, relations, {html, language}) =>
@@ -145,33 +125,7 @@ export default {
                   })),
             })),
 
-          relations.coverGrid
-            .slots({
-              links: relations.gridLinks,
-              names: data.gridNames,
-
-              images:
-                stitchArrays({
-                  image: relations.gridImages,
-                  name: data.gridNames,
-                }).map(({image, name}) =>
-                    image.slots({
-                      missingSourceContent:
-                        language.$('misc.coverGrid.noCoverArt', {
-                          album: name,
-                        }),
-                    })),
-
-              info:
-                stitchArrays({
-                  numTracks: data.gridNumTracks,
-                  duration: data.gridDurations,
-                }).map(({numTracks, duration}) =>
-                    language.$('misc.coverGrid.details.albumLength', {
-                      tracks: language.countTracks(numTracks, {unit: true}),
-                      time: language.formatDuration(duration),
-                    })),
-            }),
+          relations.albumGrid,
         ],
 
         leftSidebar:
diff --git a/src/content/dependencies/generateGroupGalleryPageAlbumGrid.js b/src/content/dependencies/generateGroupGalleryPageAlbumGrid.js
new file mode 100644
index 00000000..7015679b
--- /dev/null
+++ b/src/content/dependencies/generateGroupGalleryPageAlbumGrid.js
@@ -0,0 +1,62 @@
+import {stitchArrays} from '#sugar';
+import {getTotalDuration} from '#wiki-data';
+
+export default {
+  contentDependencies: ['generateCoverGrid', 'image', 'linkAlbum'],
+  extraDependencies: ['language'],
+
+  relations: (relation, albums) => ({
+    coverGrid:
+      relation('generateCoverGrid'),
+
+    links:
+      albums.map(album =>
+        relation('linkAlbum', album)),
+
+    images:
+      albums.map(album =>
+        (album.hasCoverArt
+          ? relation('image', album.coverArtworks[0])
+          : relation('image')))
+  }),
+
+  data: (albums) => ({
+    names:
+      albums.map(album => album.name),
+
+    durations:
+      albums.map(album => getTotalDuration(album.tracks)),
+
+    tracks:
+      albums.map(album => album.tracks.length),
+  }),
+
+  generate: (data, relations, {language}) =>
+    language.encapsulate('misc.coverGrid', capsule =>
+      relations.coverGrid.slots({
+        links: relations.links,
+        names: data.names,
+
+        images:
+          stitchArrays({
+            image: relations.images,
+            name: data.names,
+          }).map(({image, name}) =>
+              image.slots({
+                missingSourceContent:
+                  language.$(capsule, 'noCoverArt', {
+                    album: name,
+                  }),
+              })),
+
+        info:
+          stitchArrays({
+            tracks: data.tracks,
+            duration: data.durations,
+          }).map(({tracks, duration}) =>
+              language.$(capsule, 'details.albumLength', {
+                tracks: language.countTracks(tracks, {unit: true}),
+                time: language.formatDuration(duration),
+              })),
+      })),
+};