« get me outta code hell

content, css: generateAlbumSidebar: earlier/later releases - 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>2025-02-18 14:16:18 -0400
committer(quasar) nebula <qznebula@protonmail.com>2025-03-02 08:23:21 -0400
commit9dbcf794c4f2b9fa8a52b3302d9e3bee8b19cfec (patch)
treee98a8b3ec143272ca78c67f16e6fc1965fd422fe
parent6ebf03dc972806d7a6c3053350caf45ade1a1533 (diff)
content, css: generateAlbumSidebar: earlier/later releases
Also CSS tweak for release box backgrounds, and fix
generateAlbumSidebar being broken for non-track pages
-rw-r--r--src/content/dependencies/generateAlbumSidebar.js54
-rw-r--r--src/static/css/site.css12
2 files changed, 55 insertions, 11 deletions
diff --git a/src/content/dependencies/generateAlbumSidebar.js b/src/content/dependencies/generateAlbumSidebar.js
index 19fa7ee7..e10e865d 100644
--- a/src/content/dependencies/generateAlbumSidebar.js
+++ b/src/content/dependencies/generateAlbumSidebar.js
@@ -1,4 +1,5 @@
-import {stitchArrays} from '#sugar';
+import {sortAlbumsTracksChronologically} from '#sort';
+import {stitchArrays, transposeArrays} from '#sugar';
 
 export default {
   contentDependencies: [
@@ -18,7 +19,7 @@ export default {
       groupData.flatMap(group => group.serieses),
   }),
 
-  query(sprawl, album) {
+  query(sprawl, album, track) {
     const query = {};
 
     query.groups =
@@ -36,6 +37,33 @@ export default {
           series.albums.includes(album) &&
           !query.groups.includes(series.group));
 
+    if (track) {
+      const albumTrackMap =
+        new Map(transposeArrays([
+          [track.album, ...track.otherReleases.map(t => t.album)],
+          [track, ...track.otherReleases],
+        ]));
+
+      const allReleaseAlbums =
+        sortAlbumsTracksChronologically(
+          Array.from(albumTrackMap.keys()));
+
+      const currentReleaseIndex =
+        allReleaseAlbums.indexOf(track.album);
+
+      const earlierReleaseAlbums =
+        allReleaseAlbums.slice(0, currentReleaseIndex);
+
+      const laterReleaseAlbums =
+        allReleaseAlbums.slice(currentReleaseIndex + 1);
+
+      query.earlierReleaseTracks =
+        earlierReleaseAlbums.map(album => albumTrackMap.get(album));
+
+      query.laterReleaseTracks =
+        laterReleaseAlbums.map(album => albumTrackMap.get(album));
+    }
+
     return query;
   },
 
@@ -65,10 +93,19 @@ export default {
         .map(series =>
           relation('generateAlbumSidebarSeriesBox', album, series)),
 
-    trackReleaseBoxes:
-      track.otherReleases
-        .map(track =>
-          relation('generateTrackReleaseBox', track)),
+    earlierTrackReleaseBoxes:
+      (track
+        ? query.earlierReleaseTracks
+            .map(track =>
+              relation('generateTrackReleaseBox', track))
+        : null),
+
+    laterTrackReleaseBoxes:
+      (track
+        ? query.laterReleaseTracks
+            .map(track =>
+              relation('generateTrackReleaseBox', track))
+        : null),
   }),
 
   data: (_query, _sprawl, _album, track) => ({
@@ -106,11 +143,14 @@ export default {
         ],
 
         data.isTrackPage &&
-          relations.trackReleaseBoxes,
+          relations.earlierTrackReleaseBoxes,
 
         relations.trackListBox,
 
         data.isTrackPage &&
+          relations.laterTrackReleaseBoxes,
+
+        data.isTrackPage &&
           relations.conjoinedBox.slots({
             attributes: {class: 'conjoined-group-sidebar-box'},
             boxes:
diff --git a/src/static/css/site.css b/src/static/css/site.css
index bf9ec3be..42d4216f 100644
--- a/src/static/css/site.css
+++ b/src/static/css/site.css
@@ -550,9 +550,6 @@ summary.underline-white > span:hover a:not(:hover) {
 
 .track-release-sidebar-box {
   --content-padding: 3px;
-  border-bottom-left-radius: 0;
-  border-bottom-right-radius: 0;
-  background: var(--dark-color), var(--bg-black-color);
 }
 
 .track-release-sidebar-box h1 {
@@ -563,12 +560,19 @@ summary.underline-white > span:hover a:not(:hover) {
 }
 
 .track-release-sidebar-box + .track-release-sidebar-box,
-.track-release-sidebar-box + .track-list-sidebar-box {
+.track-release-sidebar-box + .track-list-sidebar-box,
+.track-list-sidebar-box + .track-release-sidebar-box {
   margin-top: 5px !important;
   border-top-left-radius: 0;
   border-top-right-radius: 0;
 }
 
+.track-release-sidebar-box:has(+ .track-list-sidebar-box),
+.track-list-sidebar-box:has(+ .track-release-sidebar-box) {
+  border-bottom-right-radius: 0;
+  border-bottom-left-radius: 0;
+}
+
 .wiki-search-sidebar-box {
   padding: 1px 0 0 0;