« 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/dependencies/listTracksByDate.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/content/dependencies/listTracksByDate.js')
-rw-r--r--src/content/dependencies/listTracksByDate.js75
1 files changed, 40 insertions, 35 deletions
diff --git a/src/content/dependencies/listTracksByDate.js b/src/content/dependencies/listTracksByDate.js
index 0a2bfd6c..dcfaeaf0 100644
--- a/src/content/dependencies/listTracksByDate.js
+++ b/src/content/dependencies/listTracksByDate.js
@@ -5,49 +5,54 @@ export default {
   contentDependencies: ['generateListingPage', 'linkAlbum', 'linkTrack'],
   extraDependencies: ['language', 'wikiData'],
 
-  sprawl({trackData}) {
-    return {trackData};
-  },
+  sprawl: ({trackData}) => ({trackData}),
 
   query({trackData}, spec) {
-    return {
-      spec,
+    const query = {spec};
+
+    query.tracks =
+      sortAlbumsTracksChronologically(
+        trackData.filter(track => track.date));
+
+    query.chunks =
+      chunkByProperties(query.tracks, ['album', 'date']);
 
-      chunks:
-        chunkByProperties(
-          sortAlbumsTracksChronologically(
-            trackData.filter(track => track.date)),
-          ['album', 'date']),
-    };
+    return query;
   },
 
-  relations(relation, query) {
-    return {
-      page: relation('generateListingPage', query.spec),
+  relations: (relation, query) => ({
+    page:
+      relation('generateListingPage', query.spec),
 
-      albumLinks:
-        query.chunks
-          .map(({album}) => relation('linkAlbum', album)),
+    albumLinks:
+      query.chunks
+        .map(({album}) => relation('linkAlbum', album)),
 
-      trackLinks:
-        query.chunks
-          .map(({chunk}) => chunk
-            .map(track => relation('linkTrack', track))),
-    };
-  },
+    trackLinks:
+      query.chunks
+        .map(({chunk}) => chunk
+          .map(track => relation('linkTrack', track))),
+  }),
 
-  data(query) {
-    return {
-      dates:
-        query.chunks
-          .map(({date}) => date),
+  data: (query) => ({
+    dates:
+      query.chunks
+        .map(({date}) => date),
 
-      rereleases:
-        query.chunks.map(({chunk}) =>
-          chunk.map(track =>
-            track.originalReleaseTrack !== null)),
-    };
-  },
+    rereleases:
+      query.chunks
+        .map(({chunk}) => chunk
+          .map(track =>
+            // Check if the index of this track...
+            query.tracks.indexOf(track) >
+            // ...is greater than the *smallest* index
+            // of any of this track's *other* releases.
+            // (It won't be greater than its own index,
+            // so we can use otherReleases here, rather
+            // than allReleases.)
+            Math.min(...
+              track.otherReleases.map(t => query.tracks.indexOf(t))))),
+  }),
 
   generate(data, relations, {language}) {
     return relations.page.slots({
@@ -79,7 +84,7 @@ export default {
         data.rereleases.map(rereleases =>
           rereleases.map(rerelease =>
             (rerelease
-              ? {class: 'rerelease'}
+              ? {class: 'rerelease-line'}
               : null))),
     });
   },