From 251490523da5d4774e10c533ba5f27a079f388d1 Mon Sep 17 00:00:00 2001 From: Matt Baer Date: Wed, 15 Dec 2021 15:57:19 -0500 Subject: [PATCH] Add ApplyBasicAccessibleMarkdown func --- posts/render.go | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/posts/render.go b/posts/render.go index d0885d5..5fede8f 100644 --- a/posts/render.go +++ b/posts/render.go @@ -63,6 +63,31 @@ func ApplyBasicMarkdown(data []byte) string { return outHTML } +// ApplyBasicAccessibleMarkdown applies Markdown to the given data, rendering basic text formatting and preserving hard +// line breaks. It is meant for formatting text in small, multi-line UI elements, like user profile biographies. +func ApplyBasicAccessibleMarkdown(data []byte) string { + mdExtensions := 0 | + blackfriday.EXTENSION_STRIKETHROUGH | + blackfriday.EXTENSION_SPACE_HEADERS | + blackfriday.EXTENSION_HEADER_IDS | + blackfriday.EXTENSION_HARD_LINE_BREAK + htmlFlags := 0 | + blackfriday.HTML_SKIP_HTML | + blackfriday.HTML_USE_SMARTYPANTS | + blackfriday.HTML_SMARTYPANTS_DASHES + + // Generate Markdown + md := blackfriday.Markdown([]byte(data), blackfriday.HtmlRenderer(htmlFlags, "", ""), mdExtensions) + // Strip out bad HTML + policy := bluemonday.UGCPolicy() + policy.AllowAttrs("class", "id").Globally() + outHTML := string(policy.SanitizeBytes(md)) + outHTML = markeddownReg.ReplaceAllString(outHTML, "$1") + outHTML = strings.TrimRightFunc(outHTML, unicode.IsSpace) + + return outHTML +} + // StripHTMLWithoutEscaping strips HTML tags with bluemonday's StrictPolicy, then unescapes the HTML // entities added in by sanitizing the content. func StripHTMLWithoutEscaping(content string) string {