« get me outta code hell

content: generateArtistInfoPageFirstReleaseTooltip - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/content/dependencies/generateArtistInfoPageFirstReleaseTooltip.js
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2025-02-21 08:07:25 -0400
committer(quasar) nebula <qznebula@protonmail.com>2025-03-02 08:24:13 -0400
commit4b9550a2d8dda5d58861c8f2c2c2a7b7ec803059 (patch)
tree728de9061b6124934392bcb0d8c686e4a0f1e9b0 /src/content/dependencies/generateArtistInfoPageFirstReleaseTooltip.js
parent5580640828d71d3c17f1c1f3ac51b42a9082d663 (diff)
content: generateArtistInfoPageFirstReleaseTooltip
Also rescue hr.cute
Diffstat (limited to 'src/content/dependencies/generateArtistInfoPageFirstReleaseTooltip.js')
-rw-r--r--src/content/dependencies/generateArtistInfoPageFirstReleaseTooltip.js80
1 files changed, 80 insertions, 0 deletions
diff --git a/src/content/dependencies/generateArtistInfoPageFirstReleaseTooltip.js b/src/content/dependencies/generateArtistInfoPageFirstReleaseTooltip.js
new file mode 100644
index 00000000..e5ea3065
--- /dev/null
+++ b/src/content/dependencies/generateArtistInfoPageFirstReleaseTooltip.js
@@ -0,0 +1,80 @@
+import {sortChronologically} from '#sort';
+import {stitchArrays} from '#sugar';
+
+export default {
+  contentDependencies: ['generateColorStyleAttribute', 'generateTooltip'],
+  extraDependencies: ['html', 'language'],
+
+  query: (track) => ({
+    rereleases:
+      sortChronologically(track.allReleases).slice(1),
+  }),
+
+  relations: (relation, query, track) => ({
+    tooltip:
+      relation('generateTooltip'),
+
+    firstReleaseColorStyle:
+      relation('generateColorStyleAttribute', track.color),
+
+    rereleaseColorStyles:
+      query.rereleases
+        .map(rerelease =>
+          relation('generateColorStyleAttribute', rerelease.album.color)),
+  }),
+
+  data: (query, track) => ({
+    firstReleaseDate:
+      track.dateFirstReleased ??
+      track.album.date,
+
+    rereleaseAlbumNames:
+      query.rereleases
+        .map(rerelease => rerelease.album.name),
+
+    rereleaseDates:
+      query.rereleases
+        .map(rerelease =>
+          rerelease.dateFirstReleased ??
+          rerelease.album.date),
+  }),
+
+  generate: (data, relations, {html, language}) =>
+    language.encapsulate('artistPage.creditList.entry.firstRelease', capsule =>
+      relations.tooltip.slots({
+        attributes: [
+          {class: 'first-release-tooltip'},
+          relations.firstReleaseColorStyle,
+        ],
+
+        contentAttributes: [
+          {[html.joinChildren]: html.tag('hr', {class: 'cute'})},
+        ],
+
+        content:
+          stitchArrays({
+            colorStyle: relations.rereleaseColorStyles,
+            albumName: data.rereleaseAlbumNames,
+            date: data.rereleaseDates,
+          }).map(({colorStyle, albumName, date}) =>
+              html.tags([
+                language.$(capsule, 'rerelease', {
+                  album:
+                    html.metatag('blockwrap',
+                      html.tag('a',
+                        {href: '#'},
+                        colorStyle.slot('context', 'primary-only'),
+
+                        language.sanitize(albumName))),
+                }),
+
+                html.tag('br'),
+
+                language.formatRelativeDate(date, data.firstReleaseDate, {
+                  considerRoundingDays: true,
+                  approximate: true,
+                  absolute: true,
+                }),
+              ])),
+      })),
+};