« 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
diff options
context:
space:
mode:
Diffstat (limited to 'src/content')
-rw-r--r--src/content/dependencies/generateReleaseInfoContributionsLine.js3
-rw-r--r--src/content/dependencies/generateTrackReleaseInfo.js35
2 files changed, 34 insertions, 4 deletions
diff --git a/src/content/dependencies/generateReleaseInfoContributionsLine.js b/src/content/dependencies/generateReleaseInfoContributionsLine.js
index f93403d9..a597b68a 100644
--- a/src/content/dependencies/generateReleaseInfoContributionsLine.js
+++ b/src/content/dependencies/generateReleaseInfoContributionsLine.js
@@ -11,6 +11,8 @@ export default {
     stringKey: {type: 'string'},
     featuringStringKey: {type: 'string'},
 
+    additionalStringOptions: {validate: v => v.isObject},
+
     chronologyKind: {type: 'string'},
   },
 
@@ -27,5 +29,6 @@ export default {
 
       normalStringKey: slots.stringKey,
       normalFeaturingStringKey: slots.featuringStringKey,
+      additionalStringOptions: slots.additionalStringOptions,
     }),
 };
diff --git a/src/content/dependencies/generateTrackReleaseInfo.js b/src/content/dependencies/generateTrackReleaseInfo.js
index fa64ac22..45d47ecc 100644
--- a/src/content/dependencies/generateTrackReleaseInfo.js
+++ b/src/content/dependencies/generateTrackReleaseInfo.js
@@ -1,7 +1,10 @@
+import {compareArrays} from '#sugar';
+
 export default {
   contentDependencies: [
     'generateReleaseInfoContributionsLine',
     'generateReleaseInfoListenLine',
+    'linkAlbum',
   ],
 
   extraDependencies: ['html', 'language'],
@@ -17,6 +20,9 @@ export default {
     relations.listenLine =
       relation('generateReleaseInfoListenLine', track);
 
+    relations.albumLink =
+      relation('linkAlbum', track.album);
+
     return relations;
   },
 
@@ -27,6 +33,16 @@ export default {
     data.date = track.date;
     data.duration = track.duration;
 
+    const {album} = track;
+
+    data.showAlbum =
+      album.showAlbumInTracksWithoutArtists &&
+      track.artistContribs.every(({annotation}) => !annotation) &&
+      compareArrays(
+        track.artistContribs.map(({artist}) => artist),
+        album.artistContribs.map(({artist}) => artist),
+        {checkOrder: true});
+
     if (
       track.hasUniqueCoverArt &&
       +track.coverArtDate !== +track.date
@@ -45,10 +61,21 @@ export default {
           {[html.joinChildren]: html.tag('br')},
 
           [
-            relations.artistContributionsLine.slots({
-              stringKey: capsule + '.by',
-              featuringStringKey: capsule + '.by.featuring',
-              chronologyKind: 'track',
+            language.encapsulate(capsule, 'by', capsule => {
+              const withAlbum =
+                (data.showAlbum ? '.withAlbum' : '');
+
+              const albumOptions =
+                (data.showAlbum ? {album: relations.albumLink} : {});
+
+              return relations.artistContributionsLine.slots({
+                stringKey: capsule + withAlbum,
+                featuringStringKey: capsule + '.featuring' + withAlbum,
+
+                additionalStringOptions: albumOptions,
+
+                chronologyKind: 'track',
+              });
             }),
 
             language.$(capsule, 'released', {