« get me outta code hell

content, data: Track.excludingURLs - 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:
author(quasar) nebula <qznebula@protonmail.com>2026-05-11 21:23:46 -0300
committer(quasar) nebula <qznebula@protonmail.com>2026-05-11 21:23:46 -0300
commitb68e658e27ae3c6e799342e69dfe3ee45cd53d7b (patch)
tree86f176400b4974df10f59989b6f3bc6b5ee3926e /src/content
parenteec8c7dfed1bf98607d94160a735132f98b13270 (diff)
content, data: Track.excludingURLs preview
Diffstat (limited to 'src/content')
-rw-r--r--src/content/dependencies/generateListenLineOrList.js63
1 files changed, 51 insertions, 12 deletions
diff --git a/src/content/dependencies/generateListenLineOrList.js b/src/content/dependencies/generateListenLineOrList.js
index 0c39a092..558062f9 100644
--- a/src/content/dependencies/generateListenLineOrList.js
+++ b/src/content/dependencies/generateListenLineOrList.js
@@ -71,7 +71,9 @@ export default {
     const data = {};
 
     data.name = thing.name;
+    data.albumName = (thing.album ? thing.album.name : null);
 
+    data.excludingLinks = thing.excludingURLs;
     data.noLinks = empty(query.urls);
 
     const artistURLs =
@@ -130,16 +132,53 @@ export default {
   },
 
   generate: (data, relations, slots, {html, language}) =>
-    language.encapsulate('releaseInfo.listenOn', capsule =>
-      (data.noLinks && slots.visibleWithoutLinks
-        ? language.$(capsule, 'noLinks', {
-            name:
-              html.tag('i', data.name),
-          })
-
-        : relations.externalLinksLineOrList.slots({
-            string: capsule,
-            context: slots.context,
-            contexts: data.releaseContexts,
-          }))),
+    language.encapsulate('releaseInfo.listenOn', capsule => {
+      const trackPart =
+        html.tag('i', data.name);
+
+      const albumPart =
+        (data.albumName
+          ? html.tag('i', data.albumName)
+          : null);
+
+      if (data.excludingLinks) {
+        const exclude = (name, options) =>
+          (name
+            ? language.$(capsule, 'excludingLinks', name, options)
+            : language.$(capsule, 'excludingLinks', options));
+
+        switch (data.excludingLinks) {
+          case 'quietly':
+            return html.blank();
+
+          case 'not clearly public':
+            return exclude('notClearlyPublic', {
+              track: trackPart,
+            });
+
+          case 'paid bonus track':
+            return exclude('paidBonusTrack', {
+              track: trackPart,
+              album: albumPart,
+            });
+
+          default:
+            return exclude(null, {track: trackPart});
+        }
+      }
+
+      if (data.noLinks) {
+        if (slots.visibleWithoutLinks) {
+          return language.$(capsule, 'noLinks', {track: trackPart});
+        } else {
+          return html.blank();
+        }
+      }
+
+      return relations.externalLinksLineOrList.slots({
+        string: capsule,
+        context: slots.context,
+        contexts: data.releaseContexts,
+      });
+    }),
 };