From 16c1ddd17d444a2a9841a102b191f2c4eee09d79 Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Tue, 5 May 2026 12:15:34 -0300 Subject: html: linkExternal: use full url, not href, in formatExternalLink --- src/content/dependencies/linkExternal.js | 46 +++++++++++++++----------------- 1 file changed, 21 insertions(+), 25 deletions(-) (limited to 'src/content') diff --git a/src/content/dependencies/linkExternal.js b/src/content/dependencies/linkExternal.js index b47b1a90..52e43250 100644 --- a/src/content/dependencies/linkExternal.js +++ b/src/content/dependencies/linkExternal.js @@ -1,3 +1,4 @@ +import {errors} from '#sugar'; import {isExternalLinkContext, isExternalLinkStyle} from '#external-links'; export default { @@ -74,35 +75,17 @@ export default { }, generate(data, slots, {html, language, to}) { - let urlIsValid; - try { - new URL(data.url); - urlIsValid = true; - } catch { - urlIsValid = false; - } - - let href; - if (urlIsValid) { - const {canonicalBase, canonicalMediaBase} = data; - const past = front => decodeURIComponent(data.url.slice(front.length)); - if (canonicalMediaBase && data.url.startsWith(canonicalMediaBase)) { - href = to('media.path', past(canonicalMediaBase)); - } else if (canonicalBase && data.url.startsWith(canonicalBase)) { - href = to('shared.path', past(canonicalBase)); - } else { - href = data.url; - } - } - - const urlEntry = { - url: href, - annotation: data.annotation, - }; + const urlIsValid = + !errors(() => new URL(data.url)); let formattedLink; let formattedPlatform; if (urlIsValid) { + const urlEntry = { + url: data.url, + annotation: data.annotation, + }; + formattedLink = language.formatExternalLink(urlEntry, { style: slots.style, @@ -123,6 +106,19 @@ export default { formattedLink = null; } + let href; + if (urlIsValid) { + const {canonicalBase, canonicalMediaBase} = data; + const past = front => decodeURIComponent(data.url.slice(front.length)); + if (canonicalMediaBase && data.url.startsWith(canonicalMediaBase)) { + href = to('media.path', past(canonicalMediaBase)); + } else if (canonicalBase && data.url.startsWith(canonicalBase)) { + href = to('shared.path', past(canonicalBase)); + } else { + href = data.url; + } + } + const linkAttributes = html.attributes({ class: 'external-link', }); -- cgit 1.3.0-6-gf8a5