diff options
author | silverwind <me@silverwind.io> | 2020-08-04 21:56:37 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-08-04 20:56:37 +0100 |
commit | e61c09ed7331e6ea72e4d9f08c0490713598942d (patch) | |
tree | febdc85a173312afbf293304a3c46dfe498c7725 /modules/markup | |
parent | 5e5c893555411bcbeedc4a3f0d853731b63f05c4 (diff) | |
download | gitea-e61c09ed7331e6ea72e4d9f08c0490713598942d.tar.gz gitea-e61c09ed7331e6ea72e4d9f08c0490713598942d.zip |
Add loading spinners and mermaid error handling (#12358)
- Add loading spinners on editor and mermaid renderers
- Add error handling and inline error box for mermaid
- Fix Mermaid rendering by using the .init api
Diffstat (limited to 'modules/markup')
-rw-r--r-- | modules/markup/markdown/markdown.go | 31 | ||||
-rw-r--r-- | modules/markup/sanitizer.go | 1 |
2 files changed, 27 insertions, 5 deletions
diff --git a/modules/markup/markdown/markdown.go b/modules/markup/markdown/markdown.go index 9197dd2fe1..999ae52bb5 100644 --- a/modules/markup/markdown/markdown.go +++ b/modules/markup/markdown/markdown.go @@ -7,6 +7,7 @@ package markdown import ( "bytes" + "strings" "sync" "code.gitea.io/gitea/modules/log" @@ -57,13 +58,33 @@ func render(body []byte, urlPrefix string, metas map[string]string, wikiMarkdown chromahtml.PreventSurroundingPre(true), ), highlighting.WithWrapperRenderer(func(w util.BufWriter, c highlighting.CodeBlockContext, entering bool) { - language, _ := c.Language() - if language == nil { - language = []byte("text") - } if entering { + language, _ := c.Language() + if language == nil { + language = []byte("text") + } + + languageStr := string(language) + + preClasses := []string{} + if languageStr == "mermaid" { + preClasses = append(preClasses, "is-loading") + } + + if len(preClasses) > 0 { + _, err := w.WriteString(`<pre class="` + strings.Join(preClasses, " ") + `">`) + if err != nil { + return + } + } else { + _, err := w.WriteString(`<pre>`) + if err != nil { + return + } + } + // include language-x class as part of commonmark spec - _, err := w.WriteString("<pre><code class=\"chroma language-" + string(language) + "\">") + _, err := w.WriteString(`<code class="chroma language-` + string(language) + `">`) if err != nil { return } diff --git a/modules/markup/sanitizer.go b/modules/markup/sanitizer.go index e5f6e75084..ba73650bdf 100644 --- a/modules/markup/sanitizer.go +++ b/modules/markup/sanitizer.go @@ -38,6 +38,7 @@ func NewSanitizer() { func ReplaceSanitizer() { sanitizer.policy = bluemonday.UGCPolicy() // For Chroma markdown plugin + sanitizer.policy.AllowAttrs("class").Matching(regexp.MustCompile(`^is-loading$`)).OnElements("pre") sanitizer.policy.AllowAttrs("class").Matching(regexp.MustCompile(`^(chroma )?language-[\w-]+$`)).OnElements("code") // Checkboxes |