import { marked } from "marked"; import DOMPurify from "dompurify"; import { linkifyTags, linkifyWikilinks } from "@/utils/tags"; function decodeEntities(text: string): string { const textarea = document.createElement("textarea"); textarea.innerHTML = text; return textarea.value; } export function renderMarkdown(text: string): string { const decoded = decodeEntities(text); const html = marked(decoded) as string; const withTags = linkifyTags(html); const withLinks = linkifyWikilinks(withTags); const sanitized = DOMPurify.sanitize(withLinks, { ADD_ATTR: ["data-tag", "data-title"], }); // marked escapes ' to ' — replace after sanitization to ensure clean rendering return sanitized.replace(/'/g, "'"); } export function renderPreview(text: string): string { const decoded = decodeEntities(text); const html = marked(decoded) as string; const withTags = linkifyTags(html); const withLinks = linkifyWikilinks(withTags); const sanitized = DOMPurify.sanitize(withLinks, { FORBID_TAGS: ["a", "img"], }); return sanitized.replace(/'/g, "'"); }