From 2aec6deee87d5e3e8f4d10ccf6c3483e7b088a50 Mon Sep 17 00:00:00 2001
From: Bretton <36870434+BrettM86@users.noreply.github.com>
Date: Wed, 15 Jul 2026 23:45:58 -0700
Subject: [PATCH] fix(post): stop rendering nested anchors inside post title
links
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Titles are rendered as inline markdown inside the permalink anchor, so
autolinked text like 'Space.com' produced an inside an — invalid
HTML that browsers split, sending the first words of the title to an
external site. Add a noLinks mode to Markdown that renders links as
plain text and use it for titles.
Co-Authored-By: Claude Fable 5
---
src/lib/app/markdown/Markdown.svelte | 19 ++++++++++++++++++-
.../markdown/renderers/MdPassthrough.svelte | 9 +++++++++
src/lib/feature/post/PostMeta.svelte | 1 +
3 files changed, 28 insertions(+), 1 deletion(-)
create mode 100644 src/lib/app/markdown/renderers/MdPassthrough.svelte
diff --git a/src/lib/app/markdown/Markdown.svelte b/src/lib/app/markdown/Markdown.svelte
index bed7f106..bd0044f1 100644
--- a/src/lib/app/markdown/Markdown.svelte
+++ b/src/lib/app/markdown/Markdown.svelte
@@ -13,6 +13,7 @@
import MdList from './renderers/MdList.svelte'
import MdListItem from './renderers/MdListItem.svelte'
import MdParagraph from './renderers/MdParagraph.svelte'
+ import MdPassthrough from './renderers/MdPassthrough.svelte'
import MdQuote from './renderers/MdQuote.svelte'
import MdSpoiler from './renderers/MdSpoiler.svelte'
import MdSubscript from './renderers/MdSubscript.svelte'
@@ -115,6 +116,13 @@
codespan: MdCodespan,
}
+ // For text rendered inside an existing (e.g. post titles): links become
+ // plain text, since nested anchors are invalid HTML and split in browsers.
+ export const linklessInlineRenderers = {
+ ...inlineRenderers,
+ link: MdPassthrough,
+ }
+
export type Renderer = keyof typeof renderers
@@ -127,6 +135,7 @@
interface Props {
source?: string
inline?: boolean
+ noLinks?: boolean
noStyle?: boolean
style?: string
class?: ClassValue
@@ -136,6 +145,7 @@
let {
source = '',
inline = false,
+ noLinks = false,
noStyle = false,
style = '',
class: clazz = '',
@@ -159,5 +169,12 @@
class={[!noStyle && 'break-words space-y-4 leading-normal', clazz]}
{style}
>
-
+
diff --git a/src/lib/app/markdown/renderers/MdPassthrough.svelte b/src/lib/app/markdown/renderers/MdPassthrough.svelte
new file mode 100644
index 00000000..a2c0d1c3
--- /dev/null
+++ b/src/lib/app/markdown/renderers/MdPassthrough.svelte
@@ -0,0 +1,9 @@
+
+
+{@render children?.()}
diff --git a/src/lib/feature/post/PostMeta.svelte b/src/lib/feature/post/PostMeta.svelte
index 21f1c4f0..391c938d 100644
--- a/src/lib/feature/post/PostMeta.svelte
+++ b/src/lib/feature/post/PostMeta.svelte
@@ -312,6 +312,7 @@
>
--
2.51.2