« get me outta code hell

hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/content/dependencies/generateArtistInfoPageTracksChunk.js43
-rw-r--r--src/static/css/site.css13
2 files changed, 49 insertions, 7 deletions
diff --git a/src/content/dependencies/generateArtistInfoPageTracksChunk.js b/src/content/dependencies/generateArtistInfoPageTracksChunk.js
index 7d00fdd6..00e581e3 100644
--- a/src/content/dependencies/generateArtistInfoPageTracksChunk.js
+++ b/src/content/dependencies/generateArtistInfoPageTracksChunk.js
@@ -3,23 +3,43 @@ import {empty, unique} from '#sugar';
 import {getTotalDuration} from '#wiki-data';
 
 export default {
-  relations: (relation, artist, album, trackContribLists) => ({
+  query: (_artist, _album, trackContribLists) => ({
+    contribListsCountingTowardTotals:
+      trackContribLists
+        .filter(trackContribs => trackContribs
+          .some(contrib =>
+            contrib.countInContributionTotals ||
+            contrib.countInDurationTotals)),
+
+    contribListsNotCountingTowardTotals:
+      trackContribLists
+        .filter(trackContribs => trackContribs
+          .every(contrib =>
+            !contrib.countInContributionTotals &&
+            !contrib.countInDurationTotals)),
+  }),
+
+  relations: (relation, query, artist, album, _trackContribLists) => ({
     template:
       relation('generateArtistInfoPageChunk'),
 
     albumLink:
       relation('linkAlbum', album),
 
-    // Intentional mapping here: each item may be associated with
-    // more than one contribution.
-    items:
-      trackContribLists.map(trackContribs =>
+    itemsCountingTowardTotals:
+      query.contribListsCountingTowardTotals.map(trackContribs =>
+        relation('generateArtistInfoPageTracksChunkItem',
+          artist,
+          trackContribs)),
+
+    itemsNotCountingTowardTotals:
+      query.contribListsNotCountingTowardTotals.map(trackContribs =>
         relation('generateArtistInfoPageTracksChunkItem',
           artist,
           trackContribs)),
   }),
 
-  data(artist, album, trackContribLists) {
+  data(artist, _query, album, trackContribLists) {
     const data = {};
 
     const contribs =
@@ -85,6 +105,15 @@ export default {
           data.numLinkingOtherReleases > 1 &&
             {class: 'offset-tooltips'},
 
-          relations.items),
+          [
+            relations.itemsCountingTowardTotals,
+
+            !empty(relations.itemsCountingTowardTotals) &&
+            !empty(relations.itemsNotCountingTowardTotals) &&
+              html.tag('li', {class: 'divider'},
+                html.tag('hr')),
+
+            relations.itemsNotCountingTowardTotals,
+          ]),
     }),
 };
diff --git a/src/static/css/site.css b/src/static/css/site.css
index 765ec87d..1253c49f 100644
--- a/src/static/css/site.css
+++ b/src/static/css/site.css
@@ -2096,6 +2096,19 @@ h1 {
   white-space: nowrap;
 }
 
+#content li.divider {
+  list-style-type: none;
+  max-width: 220px;
+  margin-top: 0.5em;
+  margin-bottom: 0.5em;
+}
+
+#content li.divider hr {
+  color: #888;
+  border: none;
+  border-bottom: 1px solid;
+}
+
 #content details {
   margin-top: 0.25em;
   margin-bottom: 0.25em;