diff --git a/modules/templates/helper.go b/modules/templates/helper.go index 63c165bc8bd24..5e237650e59c3 100644 --- a/modules/templates/helper.go +++ b/modules/templates/helper.go @@ -33,6 +33,7 @@ import ( "code.gitea.io/gitea/modules/json" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/markup" + "code.gitea.io/gitea/modules/markup/markdown" "code.gitea.io/gitea/modules/repository" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/svg" @@ -98,6 +99,7 @@ func NewFuncMap() []template.FuncMap { "SafeJS": SafeJS, "JSEscape": JSEscape, "Str2html": Str2html, + "RenderMarkup": RenderMarkup, "TimeSince": timeutil.TimeSince, "TimeSinceUnix": timeutil.TimeSinceUnix, "RawTimeSince": timeutil.RawTimeSince, @@ -622,6 +624,28 @@ func Str2html(raw string) template.HTML { return template.HTML(markup.Sanitize(raw)) } +// RenderMarkup render markdown/markup specified in type to sanitized HTML +func RenderMarkup(markupType, raw string) template.HTML { + var err error + var renderedContent string + + if markupType == "markdown" { + if renderedContent, err = markdown.RenderString(&markup.RenderContext{}, raw); err != nil { + log.Warn("RenderMarkup: Invalid markdown? %v", err) + return template.HTML(html.EscapeString(raw)) + } + return template.HTML(markup.Sanitize(renderedContent)) + } else if markupType == "markup" { + if renderedContent, err = markup.RenderString(&markup.RenderContext{}, raw); err != nil { + log.Warn("RenderMarkup: Invalid markup? %v", err) + return template.HTML(html.EscapeString(raw)) + } + return template.HTML(markup.Sanitize(renderedContent)) + } + + return template.HTML(fmt.Sprintf(`RenderMarkup: Unsupported markup type: %s`, markupType)) +} + // Escape escapes a HTML string func Escape(raw string) string { return html.EscapeString(raw) diff --git a/templates/repo/commit_statuses.tmpl b/templates/repo/commit_statuses.tmpl index f33635abff134..5fa262616b96e 100644 --- a/templates/repo/commit_statuses.tmpl +++ b/templates/repo/commit_statuses.tmpl @@ -8,6 +8,7 @@ {{if .TargetURL}}
{{end}} +