« get me outta code hell

content: generate{Album,Track}ReleaseInfo - 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>2023-06-12 18:16:13 -0300
committer(quasar) nebula <qznebula@protonmail.com>2023-06-12 18:16:13 -0300
commitfe0ebbb7aae5576492e8aa675fe5a538727bd9e5 (patch)
tree9d02348916dae47145666c89fd63a90538c7a767 /src/content/dependencies/generateTrackReleaseInfo.js
parentea15c99d9ffa7ca59e9a44cdcccc492cca5a4ac0 (diff)
content: generate{Album,Track}ReleaseInfo
Diffstat (limited to 'src/content/dependencies/generateTrackReleaseInfo.js')
-rw-r--r--src/content/dependencies/generateTrackReleaseInfo.js86
1 files changed, 86 insertions, 0 deletions
diff --git a/src/content/dependencies/generateTrackReleaseInfo.js b/src/content/dependencies/generateTrackReleaseInfo.js
new file mode 100644
index 00000000..f47b6356
--- /dev/null
+++ b/src/content/dependencies/generateTrackReleaseInfo.js
@@ -0,0 +1,86 @@
+import {empty} from '../../util/sugar.js';
+
+export default {
+  contentDependencies: [
+    'generateReleaseInfoContributionsLine',
+    'linkExternal',
+  ],
+
+  extraDependencies: ['html', 'language'],
+
+  relations(relation, track) {
+    const relations = {};
+
+    relations.artistContributionLinks =
+      relation('generateReleaseInfoContributionsLine', track.artistContribs);
+
+    if (track.hasUniqueCoverArt) {
+      relations.coverArtistContributionsLine =
+        relation('generateReleaseInfoContributionsLine', track.coverArtistContribs);
+    }
+
+    if (!empty(track.urls)) {
+      relations.externalLinks =
+        track.urls.map(url =>
+          relation('linkExternal', url));
+    }
+
+    return relations;
+  },
+
+  data(track) {
+    const data = {};
+
+    data.date = track.date;
+    data.duration = track.duration;
+
+    if (
+      track.hasUniqueCoverArt &&
+      track.coverArtDate &&
+      +track.coverArtDate !== +track.date
+    ) {
+      data.coverArtDate = track.coverArtDate;
+    }
+
+    return data;
+  },
+
+  generate(data, relations, {html, language}) {
+    return html.tags([
+      html.tag('p', {
+        [html.onlyIfContent]: true,
+        [html.joinChildren]: html.tag('br'),
+      }, [
+        relations.artistContributionLinks
+          .slots({stringKey: 'releaseInfo.by'}),
+
+        relations.coverArtistContributionsLine
+          ?.slots({stringKey: 'releaseInfo.coverArtBy'}),
+
+        data.date &&
+          language.$('releaseInfo.released', {
+            date: language.formatDate(data.date),
+          }),
+
+        data.coverArtDate &&
+          language.$('releaseInfo.artReleased', {
+            date: language.formatDate(data.coverArtDate),
+          }),
+
+        data.duration &&
+          language.$('releaseInfo.duration', {
+            duration: language.formatDuration(data.duration),
+          }),
+      ]),
+
+      html.tag('p',
+        (relations.externalLinks
+          ? language.$('releaseInfo.listenOn', {
+              links: language.formatDisjunctionList(relations.externalLinks),
+            })
+          : language.$('releaseInfo.listenOn.noLinks', {
+              name: html.tag('i', data.name),
+            }))),
+    ]);
+  },
+};