From 0a33ba0401906381c64aaf5936e33574644c4352 Mon Sep 17 00:00:00 2001 From: Dwindi Ramadhana Date: Thu, 1 Jan 2026 23:41:15 +0700 Subject: [PATCH] fix: button preservation when loading card for editing - add TipTap data attrs to parseMarkdownBasics --- admin-spa/src/lib/markdown-utils.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/admin-spa/src/lib/markdown-utils.ts b/admin-spa/src/lib/markdown-utils.ts index 3377fa1..dbb568f 100644 --- a/admin-spa/src/lib/markdown-utils.ts +++ b/admin-spa/src/lib/markdown-utils.ts @@ -151,15 +151,20 @@ export function parseMarkdownBasics(text: string): string { // Parse [button:style](url)Text[/button] (new syntax) - must come before images // Allow whitespace and newlines between parts + // Include data-button attributes for TipTap recognition html = html.replace(/\[button:(\w+)\]\(([^)]+)\)([\s\S]*?)\[\/button\]/g, (match, style, url, text) => { const buttonClass = style === 'outline' ? 'button-outline' : 'button'; - return `

${text.trim()}

`; + const trimmedText = text.trim(); + return `${trimmedText}`; }); // Parse [button url="..."] shortcodes (old syntax - backward compatibility) + // Include data-button attributes for TipTap recognition html = html.replace(/\[button\s+url="([^"]+)"(?:\s+style="([^"]+)")?\]([^\[]+)\[\/button\]/g, (match, url, style, text) => { - const buttonClass = style === 'outline' ? 'button-outline' : 'button'; - return `

${text.trim()}

`; + const buttonStyle = style || 'solid'; + const buttonClass = buttonStyle === 'outline' ? 'button-outline' : 'button'; + const trimmedText = text.trim(); + return `${trimmedText}`; }); // Images (must come before links)