Move svg html render to modules/svg (#21716)

Also added more checks for the render function.

Co-authored-by: silverwind <me@silverwind.io>
This commit is contained in:
Lunny Xiao 2022-11-08 23:13:58 +08:00 committed by GitHub
parent 91c7a3e66f
commit 2ebab42934
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 77 additions and 49 deletions

View file

@ -4,10 +4,43 @@
package svg
// SVGs contains discovered SVGs
var SVGs map[string]string
import (
"fmt"
"html/template"
"regexp"
"strings"
"code.gitea.io/gitea/modules/html"
)
var (
// SVGs contains discovered SVGs
SVGs map[string]string
widthRe = regexp.MustCompile(`width="[0-9]+?"`)
heightRe = regexp.MustCompile(`height="[0-9]+?"`)
)
const defaultSize = 16
// Init discovers SVGs and populates the `SVGs` variable
func Init() {
SVGs = Discover()
}
// Render render icons - arguments icon name (string), size (int), class (string)
func RenderHTML(icon string, others ...interface{}) template.HTML {
size, class := html.ParseSizeAndClass(defaultSize, "", others...)
if svgStr, ok := SVGs[icon]; ok {
if size != defaultSize {
svgStr = widthRe.ReplaceAllString(svgStr, fmt.Sprintf(`width="%d"`, size))
svgStr = heightRe.ReplaceAllString(svgStr, fmt.Sprintf(`height="%d"`, size))
}
if class != "" {
svgStr = strings.Replace(svgStr, `class="`, fmt.Sprintf(`class="%s `, class), 1)
}
return template.HTML(svgStr)
}
return template.HTML("")
}