« get me outta code hell

data, content: Album.showAlbumInAllTracks - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/content/dependencies/generateTrackReleaseInfo.js
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2026-06-22 19:14:28 -0300
committer(quasar) nebula <qznebula@protonmail.com>2026-06-22 19:14:28 -0300
commit7165bd2b73ab52a81a47fa6727faf6607b6c47ae (patch)
tree3a4cc9b215e5f68617ca33e26a8be84e12a68601 /src/content/dependencies/generateTrackReleaseInfo.js
parent3fd22056b69a7470a3e2aae1316ca2341c6c672b (diff)
data, content: Album.showAlbumInAllTracks
Diffstat (limited to 'src/content/dependencies/generateTrackReleaseInfo.js')
-rw-r--r--src/content/dependencies/generateTrackReleaseInfo.js104
1 files changed, 77 insertions, 27 deletions
diff --git a/src/content/dependencies/generateTrackReleaseInfo.js b/src/content/dependencies/generateTrackReleaseInfo.js
index 16d83659..1770f395 100644
--- a/src/content/dependencies/generateTrackReleaseInfo.js
+++ b/src/content/dependencies/generateTrackReleaseInfo.js
@@ -15,31 +15,57 @@ export default {
 
     albumLink:
       relation('linkAlbum', track.album),
+
+    datetimestamp:
+      relation('generateAbsoluteDatetimestamp', track.date),
   }),
 
   data(track) {
     const data = {};
+    const {album} = track;
 
     data.name = track.name;
+
     data.date = track.date;
-    data.dateStyle = track.dateStyle;
-    data.duration = track.duration;
 
-    const {album} = track;
+    data.albumStyle = album.style;
 
-    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
-    ) {
-      data.coverArtDate = track.coverArtDate;
+    data.dateFrom =
+      (track.date && album.date && +track.date === +album.date
+        ? 'album'
+     : track.date
+        ? 'track'
+        : null);
+
+    data.dateStyle =
+      (data.dateFrom === 'track'
+        ? track.dateStyle
+     : data.dateFrom === 'album'
+        ? album.dateStyle
+        : null);
+
+    data.duration = track.duration;
+
+    if (album.showAlbumInAllTracks) {
+      if (+data.date === +album.date) {
+        data.showAlbum = 'date';
+      } else {
+        data.showAlbum = 'last';
+      }
+    } else if (album.showAlbumInTracksWithoutArtists) {
+      if (
+        track.artistContribs.every(({annotation}) => !annotation) &&
+        compareArrays(
+          track.artistContribs.map(({artist}) => artist),
+          album.artistContribs.map(({artist}) => artist),
+          {checkOrder: true})
+      ) {
+        data.showAlbum = 'front';
+      } else {
+        data.showAlbum = false;
+      }
+    } else {
+      data.showAlbum = false;
     }
 
     return data;
@@ -51,10 +77,14 @@ export default {
         relations.block.slot('items', [
           language.encapsulate(capsule, 'by', capsule => {
             const withAlbum =
-              (data.showAlbum ? '.withAlbum' : '');
+              (data.showAlbum === 'front'
+                ? '.withAlbum'
+             : data.showAlbum === 'last'
+                ? '.withAlbum.albumLast'
+                : '');
 
             const albumOptions =
-              (data.showAlbum ? {album: relations.albumLink} : {});
+              (withAlbum ? {album: relations.albumLink} : {});
 
             return relations.artistContributionsLine.slots({
               stringKey: capsule + withAlbum,
@@ -66,15 +96,35 @@ export default {
             });
           }),
 
-          (data.dateStyle === 'released'
-            ? language.$(capsule, 'released', {
-                date: language.formatDate(data.date),
-              })
-         : data.dateStyle === 'posted'
-            ? language.$(capsule, 'posted', {
-                date: language.formatDate(data.date),
-              })
-            : html.blank()),
+          language.encapsulate(capsule, workingCapsule => {
+            const workingOptions = {};
+
+            if (data.dateStyle === 'released') {
+              if (
+                data.showAlbum === 'date' &&
+                data.albumStyle === 'in-game vgm'
+              ) {
+                workingCapsule += '.released.vgm';
+                workingOptions.date =
+                  relations.datetimestamp.slot('style', 'year');
+              } else {
+                workingCapsule += '.released';
+                workingOptions.date = language.formatDate(data.date);
+              }
+            } else if (data.dateStyle === 'posted') {
+              workingCapsule += '.posted';
+              workingOptions.date = language.formatDate(data.date);
+            } else {
+              return html.blank();
+            }
+
+            if (data.showAlbum === 'date') {
+              workingCapsule += '.withAlbum';
+              workingOptions.album = relations.albumLink;
+            }
+
+            return language.$(workingCapsule, workingOptions);
+          }),
 
           language.$(capsule, 'duration', {
             [language.onlyIfOptions]: ['duration'],