aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnhgelus Morhtuuzh <william@herges.fr>2025-12-13 18:38:35 +0100
committerAnhgelus Morhtuuzh <william@herges.fr>2025-12-13 18:38:35 +0100
commit1f8505e3b83d77a9cbed56c1182522efeba1f199 (patch)
tree010d985ffa5f9fa534f6f2921465fd2bd43bd6fc
parentdeed583618a2ceb91e2c166d804dee575476c07c (diff)
refactor(backend): use dom package to render link
-rw-r--r--backend/parser.go10
-rw-r--r--dom/html.go4
-rw-r--r--markdown/ast_code.go4
-rw-r--r--markdown/ast_external.go2
4 files changed, 10 insertions, 10 deletions
diff --git a/backend/parser.go b/backend/parser.go
index b8e730b..3625671 100644
--- a/backend/parser.go
+++ b/backend/parser.go
@@ -7,6 +7,7 @@ import (
"log/slog"
"strings"
+ "git.anhgelus.world/anhgelus/small-web/dom"
"git.anhgelus.world/anhgelus/small-web/markdown"
"github.com/pelletier/go-toml/v2"
)
@@ -20,14 +21,15 @@ type EntryInfo struct {
func renderLinkFunc(url string) func(string, string) template.HTML {
return func(content, href string) template.HTML {
- b := "<a"
+ anchor := dom.NewLiteralContentElement("a", template.HTML(content))
+ anchor.SetAttribute("href", href)
if href == url || (href != "/" && url != "/" && strings.HasPrefix(url, href)) {
- b += ` class="target"`
+ anchor.ClassList().Add("target")
}
if markdown.ExternalLink.MatchString(href) {
- b += ` target="_blank"`
+ anchor.SetAttribute("target", "_blank").SetAttribute("rel", "noreferrer")
}
- return template.HTML(fmt.Sprintf(`%s href="%s">%s</a>`, b, href, content))
+ return anchor.Render()
}
}
diff --git a/dom/html.go b/dom/html.go
index a7dc434..3e8117f 100644
--- a/dom/html.go
+++ b/dom/html.go
@@ -84,8 +84,8 @@ func NewVoidElement(tag string) VoidElement {
return VoidElement{tag, make(map[string]string), NewClassList()}
}
-func NewImg(src, alt string) Element {
- return NewVoidElement("img").SetAttribute("alt", alt).SetAttribute("src", src)
+func NewImg(src, alt template.HTML) Element {
+ return NewVoidElement("img").SetAttribute("alt", string(alt)).SetAttribute("src", string(src))
}
type ContentElement struct {
diff --git a/markdown/ast_code.go b/markdown/ast_code.go
index c83a984..6b949f2 100644
--- a/markdown/ast_code.go
+++ b/markdown/ast_code.go
@@ -33,10 +33,8 @@ func (a *astCode) Eval(_ *Option) (template.HTML, *ParseError) {
case codeOneLine:
return dom.NewLiteralContentElement("code", content).Render(), nil
case codeMultiLine:
- pre := dom.NewContentElement("pre", make([]dom.Element, 1))
code := dom.NewContentElement("code", []dom.Element{dom.NewLiteralElement(content)})
- pre.Contents[0] = code
- return pre.Render(), nil
+ return dom.NewContentElement("pre", []dom.Element{code}).Render(), nil
default:
return "", &ParseError{lxs: lexers{}, internal: ErrUnknownCodeType}
}
diff --git a/markdown/ast_external.go b/markdown/ast_external.go
index 4a1024a..7223a9b 100644
--- a/markdown/ast_external.go
+++ b/markdown/ast_external.go
@@ -56,7 +56,7 @@ func (a *astImage) Eval(opt *Option) (template.HTML, *ParseError) {
return "", err
}
src = template.HTML(opt.ImageSource(string(src)))
- img := dom.NewImg(string(src), string(alt))
+ img := dom.NewImg(src, alt)
figure := dom.NewContentElement("figure", []dom.Element{img})
if a.source == nil {
return figure.Render(), nil