diff options
author | silverwind <me@silverwind.io> | 2021-11-16 09:16:05 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-16 16:16:05 +0800 |
commit | 23bd7b1211a80aa3b0dcb60ec4a1c0089ff28dd4 (patch) | |
tree | 38fafd772b6341daa87cb256ee10dfdcf5a87a48 /modules/markup | |
parent | d789670894d09d7db96f4cd2dc3d57d2424eb753 (diff) | |
download | gitea-23bd7b1211a80aa3b0dcb60ec4a1c0089ff28dd4.tar.gz gitea-23bd7b1211a80aa3b0dcb60ec4a1c0089ff28dd4.zip |
Add copy button to markdown code blocks (#17638)
* Add copy button to markdown code blocks
Done mostly in JS because I think it's better not to try getting buttons
past the markup sanitizer.
* add svg module tests
* fix sanitizer regexp
* remove outdated comment
* vertically center button in issue comments as well
* add comment to css
* fix undefined on view file line copy
* combine animation less files
* Update modules/markup/markdown/markdown.go
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
* add test for different sizes
* add cloneNode and add tests for it
* use deep clone
* remove useless optional chaining
* remove the svg node cache
* unify clipboard copy string and i18n
* remove unused var
* remove unused localization
* minor css tweaks to the button
* comment tweak
* remove useless attribute
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
Diffstat (limited to 'modules/markup')
-rw-r--r-- | modules/markup/markdown/markdown.go | 17 | ||||
-rw-r--r-- | modules/markup/sanitizer.go | 5 |
2 files changed, 9 insertions, 13 deletions
diff --git a/modules/markup/markdown/markdown.go b/modules/markup/markdown/markdown.go index 554ee0d4be..2574585573 100644 --- a/modules/markup/markdown/markdown.go +++ b/modules/markup/markdown/markdown.go @@ -107,25 +107,18 @@ func actualRender(ctx *markup.RenderContext, input io.Reader, output io.Writer) languageStr := string(language) - preClasses := []string{} + preClasses := []string{"code-block"} 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 - } + _, err := w.WriteString(`<pre class="` + strings.Join(preClasses, " ") + `">`) + if err != nil { + return } // include language-x class as part of commonmark spec - _, err := w.WriteString(`<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 c8f9de33b5..5ff26a3109 100644 --- a/modules/markup/sanitizer.go +++ b/modules/markup/sanitizer.go @@ -52,8 +52,11 @@ func InitializeSanitizer() { func createDefaultPolicy() *bluemonday.Policy { policy := bluemonday.UGCPolicy() + + // For JS code copy and Mermaid loading state + policy.AllowAttrs("class").Matching(regexp.MustCompile(`^code-block( is-loading)?$`)).OnElements("pre") + // For Chroma markdown plugin - policy.AllowAttrs("class").Matching(regexp.MustCompile(`^is-loading$`)).OnElements("pre") policy.AllowAttrs("class").Matching(regexp.MustCompile(`^(chroma )?language-[\w-]+$`)).OnElements("code") // Checkboxes |