aboutsummaryrefslogtreecommitdiffstats
path: root/modules/markup
diff options
context:
space:
mode:
authorsilverwind <me@silverwind.io>2020-08-04 21:56:37 +0200
committerGitHub <noreply@github.com>2020-08-04 20:56:37 +0100
commite61c09ed7331e6ea72e4d9f08c0490713598942d (patch)
treefebdc85a173312afbf293304a3c46dfe498c7725 /modules/markup
parent5e5c893555411bcbeedc4a3f0d853731b63f05c4 (diff)
downloadgitea-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.go31
-rw-r--r--modules/markup/sanitizer.go1
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