diff options
| author | Anhgelus Morhtuuzh <william@herges.fr> | 2025-12-13 18:38:35 +0100 |
|---|---|---|
| committer | Anhgelus Morhtuuzh <william@herges.fr> | 2025-12-13 18:38:35 +0100 |
| commit | 1f8505e3b83d77a9cbed56c1182522efeba1f199 (patch) | |
| tree | 010d985ffa5f9fa534f6f2921465fd2bd43bd6fc | |
| parent | deed583618a2ceb91e2c166d804dee575476c07c (diff) | |
refactor(backend): use dom package to render link
| -rw-r--r-- | backend/parser.go | 10 | ||||
| -rw-r--r-- | dom/html.go | 4 | ||||
| -rw-r--r-- | markdown/ast_code.go | 4 | ||||
| -rw-r--r-- | markdown/ast_external.go | 2 |
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 |
