« get me outta code hell

content, css: gAIPTracksChunkItem: consider credited releases - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2025-10-25 20:01:33 -0300
committer(quasar) nebula <qznebula@protonmail.com>2025-10-25 20:01:33 -0300
commit3ffa655de14ba931e213dd9f3ea1483dec1cd593 (patch)
treef341fa49a0f096a8f20222d03c4848356a8dbd93
parent7feb8a6a0337f6d0621c4e8dc7e3d40c08d7d283 (diff)
content, css: gAIPTracksChunkItem: consider credited releases
-rw-r--r--src/content/dependencies/generateArtistInfoPageFirstReleaseTooltip.js16
-rw-r--r--src/content/dependencies/generateArtistInfoPageRereleaseTooltip.js41
-rw-r--r--src/content/dependencies/generateArtistInfoPageTracksChunkItem.js19
-rw-r--r--src/content/dependencies/linkTrackAsRelease.js20
-rw-r--r--src/static/css/site.css4
-rw-r--r--src/strings-default.yaml3
6 files changed, 87 insertions, 16 deletions
diff --git a/src/content/dependencies/generateArtistInfoPageFirstReleaseTooltip.js b/src/content/dependencies/generateArtistInfoPageFirstReleaseTooltip.js
index eb32cebf..1d498b9f 100644
--- a/src/content/dependencies/generateArtistInfoPageFirstReleaseTooltip.js
+++ b/src/content/dependencies/generateArtistInfoPageFirstReleaseTooltip.js
@@ -2,10 +2,18 @@ import {sortAlbumsTracksChronologically} from '#sort';
 import {stitchArrays} from '#sugar';
 
 export default {
-  query: (track) => ({
-    rereleases:
-      sortAlbumsTracksChronologically(track.allReleases).slice(1),
-  }),
+query: (track, artist) => ({
+  rereleases:
+    sortAlbumsTracksChronologically(
+      track.otherReleases.filter(track => {
+        const contribs = [
+          ...track.artistContribs,
+          ...track.contributorContribs,
+        ];
+
+        return contribs.some(contrib => contrib.artist === artist);
+      })),
+}),
 
   relations: (relation, query, track, artist) => ({
     tooltip:
diff --git a/src/content/dependencies/generateArtistInfoPageRereleaseTooltip.js b/src/content/dependencies/generateArtistInfoPageRereleaseTooltip.js
index 70bada19..bf5fe616 100644
--- a/src/content/dependencies/generateArtistInfoPageRereleaseTooltip.js
+++ b/src/content/dependencies/generateArtistInfoPageRereleaseTooltip.js
@@ -1,10 +1,22 @@
 import {sortAlbumsTracksChronologically} from '#sort';
 
 export default {
-  query: (track) => ({
-    firstRelease:
-      sortAlbumsTracksChronologically(track.allReleases)[0],
-  }),
+  query(track, artist) {
+    const query = {};
+
+    query.firstRelease =
+      sortAlbumsTracksChronologically(track.allReleases)[0];
+
+    const contribs = [
+      ...query.firstRelease.artistContribs,
+      ...query.firstRelease.contributorContribs,
+    ];
+
+    query.creditedOnFirstRelease =
+      contribs.some(contrib => contrib.artist === artist);
+
+    return query;
+  },
 
   relations: (relation, query, track, artist) => ({
     tooltip:
@@ -14,10 +26,15 @@ export default {
       relation('generateColorStyleAttribute', track.color),
 
     firstReleaseLink:
-      relation('linkOtherReleaseOnArtistInfoPage', query.firstRelease, artist),
+      (query.creditedOnFirstRelease
+        ? relation('linkOtherReleaseOnArtistInfoPage', query.firstRelease, artist)
+        : relation('linkTrackAsRelease', query.firstRelease)),
   }),
 
-  data: (query, track) => ({
+  data: (query, track, artist) => ({
+    artistName:
+      artist.name,
+
     rereleaseDate:
       track.dateFirstReleased ??
       track.album.date,
@@ -25,6 +42,9 @@ export default {
     firstReleaseDate:
       query.firstRelease.dateFirstReleased ??
       query.firstRelease.album.date,
+
+    creditedOnFirstRelease:
+      query.creditedOnFirstRelease,
   }),
 
   generate: (data, relations, {html, language}) =>
@@ -48,6 +68,15 @@ export default {
             approximate: true,
             absolute: true,
           }),
+
+          !data.creditedOnFirstRelease && [
+            html.tag('hr', {class: 'cute'}),
+
+            html.tag('span', {class: 'not-credited-on-first-release'},
+              language.$(capsule, 'notCreditedOnFirstRelease', {
+                artist: data.artistName,
+              })),
+          ],
         ],
       })),
 };
diff --git a/src/content/dependencies/generateArtistInfoPageTracksChunkItem.js b/src/content/dependencies/generateArtistInfoPageTracksChunkItem.js
index 895cc0d8..e976c57f 100644
--- a/src/content/dependencies/generateArtistInfoPageTracksChunkItem.js
+++ b/src/content/dependencies/generateArtistInfoPageTracksChunkItem.js
@@ -2,7 +2,7 @@ import {sortAlbumsTracksChronologically} from '#sort';
 import {empty} from '#sugar';
 
 export default {
-  query(_artist, contribs) {
+  query(artist, contribs) {
     const query = {};
 
     // TODO: Very mysterious what to do if the set of contributions is,
@@ -68,11 +68,18 @@ export default {
     query.isFirstRelease =
       allReleasesChronologically[0] === query.track;
 
-    query.isRerelease =
+    query.isLaterRelease =
       allReleasesChronologically[0] !== query.track;
 
-    query.hasOtherReleases =
-      !empty(query.track.otherReleases);
+    query.hasOtherCreditedReleases =
+      query.track.otherReleases.some(track => {
+        const contribs = [
+          ...track.artistContribs,
+          ...track.contributorContribs,
+        ];
+
+        return contribs.some(contrib => contrib.artist === artist);
+      });
 
     return query;
   },
@@ -88,12 +95,12 @@ export default {
       relation('generateArtistInfoPageOtherArtistLinks', contribs),
 
     rereleaseTooltip:
-      (query.isRerelease
+      (query.isLaterRelease
         ? relation('generateArtistInfoPageRereleaseTooltip', query.track, artist)
         : null),
 
     firstReleaseTooltip:
-      (query.isFirstRelease && query.hasOtherReleases
+      (query.isFirstRelease && query.hasOtherCreditedReleases
         ? relation('generateArtistInfoPageFirstReleaseTooltip', query.track, artist)
         : null),
   }),
diff --git a/src/content/dependencies/linkTrackAsRelease.js b/src/content/dependencies/linkTrackAsRelease.js
new file mode 100644
index 00000000..7a114ad9
--- /dev/null
+++ b/src/content/dependencies/linkTrackAsRelease.js
@@ -0,0 +1,20 @@
+export default {
+  relations: (relation, track) => ({
+    trackLink:
+      relation('linkTrack', track),
+  }),
+
+  data: (track) => ({
+    albumName:
+      track.album.name,
+
+    albumColor:
+      track.album.color,
+  }),
+
+  generate: (data, relations, {language}) =>
+    relations.trackLink.slots({
+      content: language.sanitize(data.albumName),
+      color: data.albumColor,
+    }),
+};
diff --git a/src/static/css/site.css b/src/static/css/site.css
index 347881a2..a78a31fb 100644
--- a/src/static/css/site.css
+++ b/src/static/css/site.css
@@ -1488,6 +1488,10 @@ li:not(:first-child:last-child) .tooltip:where(:not(.cover-artwork .tooltip)),
   font-size: 0.9em;
 }
 
+.rerelease-tooltip .not-credited-on-first-release {
+  opacity: 0.9;
+}
+
 .content-tooltip-guy .hoverable a {
   text-decoration-color: transparent;
   text-decoration-style: dotted;
diff --git a/src/strings-default.yaml b/src/strings-default.yaml
index 85d849db..233a7ed3 100644
--- a/src/strings-default.yaml
+++ b/src/strings-default.yaml
@@ -1332,6 +1332,9 @@ artistPage:
         firstRelease: >-
           First released on {ALBUM}
 
+        notCreditedOnFirstRelease: >-
+          Note that {ARTIST} is not credited on this track's first release.
+
       firstRelease:
         _: "{ENTRY} ({FIRST_RELEASE})"
         term: "first release"