« get me outta code hell

content: adapt "random pages" to wikis without dividing 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-10-29 09:51:01 -0300
committer(quasar) nebula <qznebula@protonmail.com>2023-10-29 09:51:01 -0300
commitd2903c800b6a005a447cc26f9431fe5fe4fb08b6 (patch)
tree8662ccc98c6ff2e2d65162835ae3cae13498694b
parent777fbd3535f80fb8fb28d80a5dc53efe44c6cb82 (diff)
content: adapt "random pages" to wikis without dividing groups
-rw-r--r--src/content/dependencies/generateListRandomPageLinksAlbumLink.js18
-rw-r--r--src/content/dependencies/generateListRandomPageLinksAllAlbumsSection.js35
-rw-r--r--src/content/dependencies/generateListRandomPageLinksGroupSection.js47
-rw-r--r--src/content/dependencies/listRandomPageLinks.js40
-rw-r--r--src/strings-default.json7
5 files changed, 89 insertions, 58 deletions
diff --git a/src/content/dependencies/generateListRandomPageLinksAlbumLink.js b/src/content/dependencies/generateListRandomPageLinksAlbumLink.js
new file mode 100644
index 00000000..b3560aca
--- /dev/null
+++ b/src/content/dependencies/generateListRandomPageLinksAlbumLink.js
@@ -0,0 +1,18 @@
+export default {
+  contentDependencies: ['linkAlbum'],
+
+  data: (album) =>
+    ({directory: album.directory}),
+
+  relations: (relation, album) =>
+    ({albumLink: relation('linkAlbum', album)}),
+
+  generate: (data, relations) =>
+    relations.albumLink.slots({
+      anchor: true,
+      attributes: {
+        'data-random': 'track-in-album',
+        'style': `--album-directory: ${data.directory}`,
+      },
+    }),
+};
diff --git a/src/content/dependencies/generateListRandomPageLinksAllAlbumsSection.js b/src/content/dependencies/generateListRandomPageLinksAllAlbumsSection.js
new file mode 100644
index 00000000..e03252c9
--- /dev/null
+++ b/src/content/dependencies/generateListRandomPageLinksAllAlbumsSection.js
@@ -0,0 +1,35 @@
+import {sortChronologically} from '#wiki-data';
+
+export default {
+  contentDependencies: ['generateListRandomPageLinksAlbumLink', 'linkGroup'],
+  extraDependencies: ['html', 'language', 'wikiData'],
+
+  sprawl: ({albumData}) => ({albumData}),
+
+  query: (sprawl) => ({
+    albums:
+      sortChronologically(sprawl.albumData.slice())
+        .filter(album => album.tracks.length > 1),
+  }),
+
+  relations: (relation, query) => ({
+    albumLinks:
+      query.albums
+        .map(album => relation('generateListRandomPageLinksAlbumLink', album)),
+  }),
+
+  generate: (relations, {html, language}) =>
+    html.tags([
+      html.tag('dt',
+        language.$('listingPage.other.randomPages.fromAlbum')),
+
+      html.tag('dd',
+        html.tag('ul',
+          relations.albumLinks
+            .map(albumLink =>
+              html.tag('li',
+                language.$('listingPage.other.randomPages.album', {
+                  album: albumLink,
+                }))))),
+    ]),
+};
diff --git a/src/content/dependencies/generateListRandomPageLinksGroupSection.js b/src/content/dependencies/generateListRandomPageLinksGroupSection.js
index 74872724..d05be8f7 100644
--- a/src/content/dependencies/generateListRandomPageLinksGroupSection.js
+++ b/src/content/dependencies/generateListRandomPageLinksGroupSection.js
@@ -1,8 +1,7 @@
-import {stitchArrays} from '#sugar';
 import {sortChronologically} from '#wiki-data';
 
 export default {
-  contentDependencies: ['generateColorStyleVariables', 'linkGroup'],
+  contentDependencies: ['generateListRandomPageLinksAlbumLink', 'linkGroup'],
   extraDependencies: ['html', 'language', 'wikiData'],
 
   sprawl: ({albumData}) => ({albumData}),
@@ -18,61 +17,35 @@ export default {
     groupLink:
       relation('linkGroup', group),
 
-    albumColorVariables:
+    albumLinks:
       query.albums
-        .map(() => relation('generateColorStyleVariables')),
+        .map(album => relation('generateListRandomPageLinksAlbumLink', album)),
   }),
 
-  data: (query) => ({
-    albumColors:
-      query.albums
-        .map(album => album.color),
-
-    albumDirectories:
-      query.albums
-        .map(album => album.directory),
-
-    albumNames:
-      query.albums
-        .map(album => album.name),
-  }),
-
-  generate: (data, relations, {html, language}) =>
+  generate: (relations, {html, language}) =>
     html.tags([
       html.tag('dt',
-        language.$('listingPage.other.randomPages.group', {
+        language.$('listingPage.other.randomPages.fromGroup', {
           group: relations.groupLink,
 
           randomAlbum:
             html.tag('a',
               {href: '#', 'data-random': 'album-in-group-dl'},
-              language.$('listingPage.other.randomPages.group.randomAlbum')),
+              language.$('listingPage.other.randomPages.fromGroup.randomAlbum')),
 
           randomTrack:
             html.tag('a',
               {href: '#', 'data-random': 'track-in-group-dl'},
-              language.$('listingPage.other.randomPages.group.randomTrack')),
+              language.$('listingPage.other.randomPages.fromGroup.randomTrack')),
         })),
 
       html.tag('dd',
         html.tag('ul',
-          stitchArrays({
-            colorVariables: relations.albumColorVariables,
-            color: data.albumColors,
-            directory: data.albumDirectories,
-            name: data.albumNames,
-          }).map(({colorVariables, color, directory, name}) =>
+          relations.albumLinks
+            .map(albumLink =>
               html.tag('li',
                 language.$('listingPage.other.randomPages.album', {
-                  album:
-                    html.tag('a', {
-                      href: '#',
-                      'data-random': 'track-in-album',
-                      style:
-                        colorVariables.slot('color', color).content +
-                        '; ' +
-                        `--album-directory: ${directory}`,
-                    }, name),
+                  album: albumLink,
                 }))))),
     ]),
 };
diff --git a/src/content/dependencies/listRandomPageLinks.js b/src/content/dependencies/listRandomPageLinks.js
index 57ecb044..ce90a153 100644
--- a/src/content/dependencies/listRandomPageLinks.js
+++ b/src/content/dependencies/listRandomPageLinks.js
@@ -1,33 +1,36 @@
+import {empty} from '#sugar';
+
 export default {
   contentDependencies: [
     'generateListingPage',
+    'generateListRandomPageLinksAllAlbumsSection',
     'generateListRandomPageLinksGroupSection',
   ],
 
   extraDependencies: ['html', 'language', 'wikiData'],
 
-  sprawl({wikiInfo}) {
-    return {wikiInfo};
-  },
+  sprawl: ({wikiInfo}) => ({wikiInfo}),
 
-  query(sprawl, spec) {
-    return {
-      spec,
+  query: ({wikiInfo: {divideTrackListsByGroups: groups}}, spec) => ({
+    spec,
+    groups,
+    divideByGroups: !empty(groups),
+  }),
 
-      groups:
-        sprawl.wikiInfo.divideTrackListsByGroups,
-    };
-  },
+  relations: (relation, query) => ({
+    page: relation('generateListingPage', query.spec),
 
-  relations(relation, query) {
-    return {
-      page: relation('generateListingPage', query.spec),
+    allAlbumsSection:
+      (query.divideByGroups
+        ? null
+        : relation('generateListRandomPageLinksAllAlbumsSection')),
 
-      groupSections:
-        query.groups
-          .map(group => relation('generateListRandomPageLinksGroupSection', group)),
-    };
-  },
+    groupSections:
+      (query.divideByGroups
+        ? query.groups
+            .map(group => relation('generateListRandomPageLinksGroupSection', group))
+        : null),
+  }),
 
   generate(relations, {html, language}) {
     return relations.page.slots({
@@ -73,6 +76,7 @@ export default {
                   language.$('listingPage.other.randomPages.misc.randomTrackWholeSite'))),
             ])),
 
+          relations.allAlbumsSection,
           relations.groupSections,
         ]),
       ],
diff --git a/src/strings-default.json b/src/strings-default.json
index 6c841e72..81bf5d48 100644
--- a/src/strings-default.json
+++ b/src/strings-default.json
@@ -493,9 +493,10 @@
   "listingPage.other.randomPages.misc.atLeastTwoContributions": "at least 2 contributions",
   "listingPage.other.randomPages.misc.randomAlbumWholeSite": "Random Album (whole site)",
   "listingPage.other.randomPages.misc.randomTrackWholeSite": "Random Track (whole site)",
-  "listingPage.other.randomPages.group": "From {GROUP}: ({RANDOM_ALBUM}, {RANDOM_TRACK})",
-  "listingPage.other.randomPages.group.randomAlbum": "Random Album",
-  "listingPage.other.randomPages.group.randomTrack": "Random Track",
+  "listingPage.other.randomPages.fromAlbum": "From an album:",
+  "listingPage.other.randomPages.fromGroup": "From {GROUP}: ({RANDOM_ALBUM}, {RANDOM_TRACK})",
+  "listingPage.other.randomPages.fromGroup.randomAlbum": "Random Album",
+  "listingPage.other.randomPages.fromGroup.randomTrack": "Random Track",
   "listingPage.other.randomPages.album": "{ALBUM}",
   "listingPage.misc.trackContributors": "Track Contributors",
   "listingPage.misc.artContributors": "Art Contributors",