« get me outta code hell

content, data: generateWikiHomepageAlbum{Carousel,Grid}Row - 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:
author(quasar) nebula <qznebula@protonmail.com>2025-02-11 11:12:07 -0400
committer(quasar) nebula <qznebula@protonmail.com>2025-02-12 07:43:59 -0400
commitc45d45759395725128c030ac387bb20b80aada1e (patch)
treedd71e8354268ca5c48101b0b225144db982cc5cb /src/content
parent19d9c3a3d16ed08b2d0c9e09259ffb79a27cd3e9 (diff)
content, data: generateWikiHomepageAlbum{Carousel,Grid}Row
Diffstat (limited to 'src/content')
-rw-r--r--src/content/dependencies/generateWikiHomepageAlbumCarouselRow.js39
-rw-r--r--src/content/dependencies/generateWikiHomepageAlbumGridRow.js83
-rw-r--r--src/content/dependencies/generateWikiHomepageAlbumsRow.js115
-rw-r--r--src/content/dependencies/generateWikiHomepageSection.js9
4 files changed, 128 insertions, 118 deletions
diff --git a/src/content/dependencies/generateWikiHomepageAlbumCarouselRow.js b/src/content/dependencies/generateWikiHomepageAlbumCarouselRow.js
new file mode 100644
index 00000000..3068d951
--- /dev/null
+++ b/src/content/dependencies/generateWikiHomepageAlbumCarouselRow.js
@@ -0,0 +1,39 @@
+import {stitchArrays} from '#sugar';
+
+export default {
+  contentDependencies: ['generateCoverCarousel', 'image', 'linkAlbum'],
+
+  relations: (relation, row) => ({
+    coverCarousel:
+      relation('generateCoverCarousel'),
+
+    links:
+      row.albums
+        .map(album => relation('linkAlbum', album)),
+
+    images:
+      row.albums
+        .map(album => relation('image', album.artTags)),
+  }),
+
+  data: (row) => ({
+    paths:
+      row.albums.map(album =>
+        (album.hasCoverArt
+          ? ['media.albumCover', album.directory, album.coverArtFileExtension]
+          : null)),
+  }),
+
+  generate: (data, relations) =>
+    relations.coverCarousel.slots({
+      links:
+        relations.links,
+
+      images:
+        stitchArrays({
+          image: relations.images,
+          path: data.paths,
+        }).map(({image, path}) =>
+            image.slot('path', path)),
+    }),
+};
diff --git a/src/content/dependencies/generateWikiHomepageAlbumGridRow.js b/src/content/dependencies/generateWikiHomepageAlbumGridRow.js
new file mode 100644
index 00000000..c1d2c79d
--- /dev/null
+++ b/src/content/dependencies/generateWikiHomepageAlbumGridRow.js
@@ -0,0 +1,83 @@
+import {empty, stitchArrays} from '#sugar';
+import {getNewAdditions, getNewReleases} from '#wiki-data';
+
+export default {
+  contentDependencies: ['generateCoverGrid', 'image', 'linkAlbum'],
+  extraDependencies: ['language', 'wikiData'],
+
+  sprawl({albumData}, row) {
+    const sprawl = {};
+
+    switch (row.sourceGroup) {
+      case 'new-releases':
+        sprawl.albums = getNewReleases(row.countAlbumsFromGroup, {albumData});
+        break;
+
+      case 'new-additions':
+        sprawl.albums = getNewAdditions(row.countAlbumsFromGroup, {albumData});
+        break;
+
+      default:
+        sprawl.albums =
+          (row.sourceGroup
+            ? row.sourceGroup.albums
+                .slice()
+                .reverse()
+                .filter(album => album.isListedOnHomepage)
+                .slice(0, row.countAlbumsFromGroup)
+            : []);
+    }
+
+    if (!empty(row.sourceAlbums)) {
+      sprawl.albums.push(...row.sourceAlbums);
+    }
+
+    return sprawl;
+  },
+
+  relations: (relation, sprawl, _row) => ({
+    coverGrid:
+      relation('generateCoverGrid'),
+
+    links:
+      sprawl.albums
+        .map(album => relation('linkAlbum', album)),
+
+    images:
+      sprawl.albums
+        .map(album => relation('image', album.artTags)),
+  }),
+
+  data: (sprawl, _row) => ({
+    names:
+      sprawl.albums
+        .map(album => album.name),
+
+    paths:
+      sprawl.albums
+        .map(album =>
+          (album.hasCoverArt
+            ? ['media.albumCover', album.directory, album.coverArtFileExtension]
+            : null)),
+  }),
+
+  generate: (data, relations, {language}) =>
+    relations.coverGrid.slots({
+      links: relations.links,
+      names: data.names,
+
+      images:
+        stitchArrays({
+          image: relations.images,
+          path: data.paths,
+          name: data.names,
+        }).map(({image, path, name}) =>
+            image.slots({
+              path,
+              missingSourceContent:
+                language.$('misc.coverGrid.noCoverArt', {
+                  album: name,
+                }),
+              })),
+    }),
+};
diff --git a/src/content/dependencies/generateWikiHomepageAlbumsRow.js b/src/content/dependencies/generateWikiHomepageAlbumsRow.js
deleted file mode 100644
index 258e5fe1..00000000
--- a/src/content/dependencies/generateWikiHomepageAlbumsRow.js
+++ /dev/null
@@ -1,115 +0,0 @@
-import {empty, stitchArrays} from '#sugar';
-import {getNewAdditions, getNewReleases} from '#wiki-data';
-
-export default {
-  contentDependencies: [
-    'generateCoverCarousel',
-    'generateCoverGrid',
-    'image',
-    'linkAlbum',
-  ],
-
-  extraDependencies: ['language', 'wikiData'],
-
-  sprawl({albumData}, row) {
-    const sprawl = {};
-
-    switch (row.sourceGroup) {
-      case 'new-releases':
-        sprawl.albums = getNewReleases(row.countAlbumsFromGroup, {albumData});
-        break;
-
-      case 'new-additions':
-        sprawl.albums = getNewAdditions(row.countAlbumsFromGroup, {albumData});
-        break;
-
-      default:
-        sprawl.albums =
-          (row.sourceGroup
-            ? row.sourceGroup.albums
-                .slice()
-                .reverse()
-                .filter(album => album.isListedOnHomepage)
-                .slice(0, row.countAlbumsFromGroup)
-            : []);
-    }
-
-    if (!empty(row.sourceAlbums)) {
-      sprawl.albums.push(...row.sourceAlbums);
-    }
-
-    return sprawl;
-  },
-
-  relations: (relation, sprawl, row) => ({
-    coverGrid:
-      (row.displayStyle === 'grid'
-        ? relation('generateCoverGrid')
-        : null),
-
-    coverCarousel:
-      (row.displayStyle === 'carousel'
-        ? relation('generateCoverCarousel')
-        : null),
-
-    links:
-      sprawl.albums
-        .map(album => relation('linkAlbum', album)),
-
-    images:
-      sprawl.albums
-        .map(album => relation('image', album.artTags)),
-  }),
-
-  data: (sprawl, row) => ({
-    displayStyle:
-      row.displayStyle,
-
-    names:
-      (row.displayStyle === 'grid'
-        ? sprawl.albums
-            .map(album => album.name)
-        : null),
-
-    paths:
-      sprawl.albums
-        .map(album =>
-          (album.hasCoverArt
-            ? ['media.albumCover', album.directory, album.coverArtFileExtension]
-            : null)),
-  }),
-
-  generate(data, relations, {language}) {
-    // Grids and carousels share some slots! Very convenient.
-    const commonSlots = {};
-
-    commonSlots.links =
-      relations.links;
-
-    commonSlots.images =
-      stitchArrays({
-        image: relations.images,
-        path: data.paths,
-        name: data.names ?? data.paths.slice().fill(null),
-      }).map(({image, path, name}) =>
-          image.slots({
-            path,
-            missingSourceContent:
-              language.$('misc.coverGrid.noCoverArt', {
-                [language.onlyIfOptions]: ['album'],
-                album: name,
-              }),
-            }));
-
-    switch (data.displayStyle) {
-      case 'grid':
-        return relations.coverGrid.slots({
-          ...commonSlots,
-          names: data.names,
-        });
-
-      case 'carousel':
-        return relations.coverCarousel.slots(commonSlots);
-    }
-  },
-};
diff --git a/src/content/dependencies/generateWikiHomepageSection.js b/src/content/dependencies/generateWikiHomepageSection.js
index 963c5dde..49a474da 100644
--- a/src/content/dependencies/generateWikiHomepageSection.js
+++ b/src/content/dependencies/generateWikiHomepageSection.js
@@ -2,7 +2,8 @@ export default {
   contentDependencies: [
     'generateColorStyleAttribute',
     'generateWikiHomepageActionsRow',
-    'generateWikiHomepageAlbumsRow',
+    'generateWikiHomepageAlbumCarouselRow',
+    'generateWikiHomepageAlbumGridRow',
   ],
 
   extraDependencies: ['html'],
@@ -15,8 +16,10 @@ export default {
       homepageSection.rows.map(row =>
         (row.type === 'actions'
           ? relation('generateWikiHomepageActionsRow', row)
-       : row.type === 'albums'
-          ? relation('generateWikiHomepageAlbumsRow', row)
+       : row.type === 'album carousel'
+          ? relation('generateWikiHomepageAlbumCarouselRow', row)
+       : row.type === 'album grid'
+          ? relation('generateWikiHomepageAlbumGridRow', row)
           : null)),
   }),