From f9e16c7c36a6b0eba5cfa72dac0bfbb9ec067537 Mon Sep 17 00:00:00 2001 From: Jonathan Date: Mon, 10 Feb 2025 23:58:39 +0100 Subject: [PATCH] make headers id great again --- cmd/backend/markdown.go | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/cmd/backend/markdown.go b/cmd/backend/markdown.go index 59346c4..0ed1b8b 100644 --- a/cmd/backend/markdown.go +++ b/cmd/backend/markdown.go @@ -6,19 +6,38 @@ import ( "github.com/microcosm-cc/bluemonday" "github.com/yuin/goldmark" + "github.com/yuin/goldmark/extension" + "github.com/yuin/goldmark/parser" + "github.com/yuin/goldmark/renderer/html" ) func ConvertToHTML(md string) (string, error) { var buf bytes.Buffer - if err := goldmark.Convert([]byte(md), &buf); err != nil { + // Goldmark-Instanz mit GFM und aktivierter Attribute-Unterstützung initialisieren. + gm := goldmark.New( + goldmark.WithExtensions( + extension.GFM, + ), + goldmark.WithParserOptions( + parser.WithAttribute(), + ), + goldmark.WithRendererOptions( + html.WithUnsafe(), // Falls du HTML-Inhalte erlauben möchtest + ), + ) + + // Markdown in HTML konvertieren. + if err := gm.Convert([]byte(md), &buf); err != nil { return "", fmt.Errorf("error converting markdown to html: %v", err) } + // Bluemonday-Policy anpassen, sodass id-Attribute auf h1-h6 erlaubt sind. p := bluemonday.UGCPolicy() - html := p.Sanitize(buf.String()) + p.AllowAttrs("id").OnElements("h1", "h2", "h3", "h4", "h5", "h6") + htmlOutput := p.Sanitize(buf.String()) - return html, nil + return htmlOutput, nil } func ConvertToPlain(md string) (string, error) {