« get me outta code hell

content: linkExternal: fall back to 'platform' style - 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>2024-03-29 19:07:47 -0300
committer(quasar) nebula <qznebula@protonmail.com>2024-03-29 20:41:54 -0300
commit68a062d92a07969ceb89075be979e1acdbeb679c (patch)
tree305b0089b9c505a6c76cd74a09487c60aea09b7c
parent7d3169246f31234c2f182480b281f9fa93d0c431 (diff)
content: linkExternal: fall back to 'platform' style
-rw-r--r--src/content/dependencies/linkExternal.js34
1 files changed, 25 insertions, 9 deletions
diff --git a/src/content/dependencies/linkExternal.js b/src/content/dependencies/linkExternal.js
index 282fb76..f0947cb 100644
--- a/src/content/dependencies/linkExternal.js
+++ b/src/content/dependencies/linkExternal.js
@@ -25,16 +25,32 @@ export default {
     },
   },
 
-  generate: (data, slots, {html, language}) =>
-    html.tag('a',
-      {href: data.url},
-      {class: 'nowrap'},
-
-      slots.tab === 'separate' &&
-        {target: '_blank'},
-
+  generate(data, slots, {html, language}) {
+    let formattedText =
       language.formatExternalLink(data.url, {
         style: slots.style,
         context: slots.context,
-      })),
+      });
+
+    // Fall back to platform if nothing matched the desired style.
+    if (!formattedText && slots.style !== 'platform') {
+      formattedText =
+        language.formatExternalLink(data.url, {
+          style: 'platform',
+          context: slots.context,
+        });
+    }
+
+    const link =
+      html.tag('a', formattedText);
+
+    link.attributes.set('href', data.url);
+    link.attributes.set('class', 'nowrap');
+
+    if (slots.tab === 'separate') {
+      link.attributes.set('target', '_blank');
+    }
+
+    return link;
+  },
 };