« 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/generateArtistInfoPageTracksChunkItem.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/content/dependencies/generateArtistInfoPageTracksChunkItem.js')
-rw-r--r--src/content/dependencies/generateArtistInfoPageTracksChunkItem.js49
1 files changed, 30 insertions, 19 deletions
diff --git a/src/content/dependencies/generateArtistInfoPageTracksChunkItem.js b/src/content/dependencies/generateArtistInfoPageTracksChunkItem.js
index e976c57f..f53e0f81 100644
--- a/src/content/dependencies/generateArtistInfoPageTracksChunkItem.js
+++ b/src/content/dependencies/generateArtistInfoPageTracksChunkItem.js
@@ -10,9 +10,11 @@ export default {
     query.track =
       contribs[0].thing;
 
-    const creditedAsArtist =
+    const creditedAsNormalArtist =
       contribs
-        .some(contrib => contrib.thingProperty === 'artistContribs');
+        .some(contrib =>
+          contrib.thingProperty === 'artistContribs' &&
+          contrib.annotation !== 'featuring');
 
     const creditedAsContributor =
       contribs
@@ -20,7 +22,9 @@ export default {
 
     const annotatedContribs =
       contribs
-        .filter(contrib => contrib.annotation);
+        .filter(contrib =>
+          contrib.annotation &&
+          contrib.annotation !== 'featuring');
 
     const annotatedArtistContribs =
       annotatedContribs
@@ -39,7 +43,7 @@ export default {
     // Return seemingly only for "bass clarinet" when they're also
     // the one who composed and arranged Renewed Return!
     if (
-      creditedAsArtist &&
+      creditedAsNormalArtist &&
       creditedAsContributor &&
       empty(annotatedArtistContribs)
     ) {
@@ -84,15 +88,19 @@ export default {
     return query;
   },
 
-  relations: (relation, query, artist, contribs) => ({
+  relations: (relation, query, artist, _contribs) => ({
     template:
       relation('generateArtistInfoPageChunkItem'),
 
     trackLink:
       relation('linkTrack', query.track),
 
-    otherArtistLinks:
-      relation('generateArtistInfoPageOtherArtistLinks', contribs),
+    trackListItem:
+      relation('generateTrackListItem',
+        query.track,
+        (empty(query.track.album.artistContribs)
+          ? [artist.mockSimpleContribution]
+          : query.track.album.artistContribs)),
 
     rereleaseTooltip:
       (query.isLaterRelease
@@ -116,9 +124,15 @@ export default {
         : null),
   }),
 
-  generate: (data, relations, {html, language}) =>
+  slots: {
+    showDuration: {
+      type: 'boolean',
+      default: true,
+    },
+  },
+
+  generate: (data, relations, slots, {html, language}) =>
     relations.template.slots({
-      otherArtistLinks: relations.otherArtistLinks,
       rereleaseTooltip: relations.rereleaseTooltip,
       firstReleaseTooltip: relations.firstReleaseTooltip,
 
@@ -128,16 +142,13 @@ export default {
           : html.blank()),
 
       content:
-        language.encapsulate('artistPage.creditList.entry.track', workingCapsule => {
-          const workingOptions = {track: relations.trackLink};
-
-          if (data.duration) {
-            workingCapsule += '.withDuration';
-            workingOptions.duration =
-              language.formatDuration(data.duration);
-          }
-
-          return language.$(workingCapsule, workingOptions);
+        language.$('artistPage.creditList.entry.track', {
+          track:
+            html.inside(
+              relations.trackListItem.slots({
+                showArtists: 'auto',
+                showDuration: slots.showDuration,
+              })),
         }),
     }),
 };