« get me outta code hell

content: linkExternal: slot mode instead of taking type option - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2023-06-12 17:11:35 -0300
committer(quasar) nebula <qznebula@protonmail.com>2023-06-12 17:11:35 -0300
commit4e2993f3bedd8e413e56aafcb96a22b16d930680 (patch)
tree443bfe0e1d721a304be11d47d0273030215021e7 /src
parent5952f159e4d02c8f8356ab8a9860fca6330b7757 (diff)
content: linkExternal: slot mode instead of taking type option
Diffstat (limited to 'src')
-rw-r--r--src/content/dependencies/generateAlbumInfoPage.js7
-rw-r--r--src/content/dependencies/linkExternal.js23
2 files changed, 15 insertions, 15 deletions
diff --git a/src/content/dependencies/generateAlbumInfoPage.js b/src/content/dependencies/generateAlbumInfoPage.js
index e317adb1..09de21bf 100644
--- a/src/content/dependencies/generateAlbumInfoPage.js
+++ b/src/content/dependencies/generateAlbumInfoPage.js
@@ -99,7 +99,7 @@ export default {
 
       listen.externalLinks =
         album.urls.map(url =>
-          relation('linkExternal', url, {type: 'album'}));
+          relation('linkExternal', url));
     }
 
     // Section: Extra links
@@ -234,7 +234,10 @@ export default {
           sec.listen &&
             html.tag('p',
               language.$('releaseInfo.listenOn', {
-                links: language.formatDisjunctionList(sec.listen.externalLinks),
+                links:
+                  language.formatDisjunctionList(
+                    sec.listen.externalLinks
+                      .map(link => link.slot('mode', 'album'))),
               })),
 
           html.tag('p',
diff --git a/src/content/dependencies/linkExternal.js b/src/content/dependencies/linkExternal.js
index 08191a21..7c3d86a8 100644
--- a/src/content/dependencies/linkExternal.js
+++ b/src/content/dependencies/linkExternal.js
@@ -5,21 +5,18 @@ const MASTODON_DOMAINS = ['types.pl'];
 export default {
   extraDependencies: ['html', 'language'],
 
-  data(url, {
-    type = 'generic',
-  } = {}) {
-    const types = ['generic', 'album'];
-    if (!types.includes(type)) {
-      throw new TypeError(`Expected type to be one of ${types}`);
-    }
+  data(url) {
+    return {url};
+  },
 
-    return {
-      url,
-      type,
-    };
+  slots: {
+    mode: {
+      validate: v => v.is('generic', 'album'),
+      default: 'generic',
+    },
   },
 
-  generate(data, {html, language}) {
+  generate(data, slots, {html, language}) {
     let isLocal;
     let domain;
     try {
@@ -50,7 +47,7 @@ export default {
         ? language.$('misc.external.mastodon.domain', {domain})
 
     : domain.includes('youtu')
-        ? data.type === 'album'
+        ? slots.mode === 'album'
           ? data.url.includes('list=')
             ? language.$('misc.external.youtube.playlist')
             : language.$('misc.external.youtube.fullAlbum')