Merge pull request #549 from trheyi/main

Add support for s:set statement in parser.go
This commit is contained in:
Max 2024-01-10 12:13:16 +08:00 committed by GitHub
commit f5fccec347
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -7,6 +7,7 @@ import (
"github.com/PuerkitoBio/goquery"
jsoniter "github.com/json-iterator/go"
"github.com/yaoapp/kun/log"
"golang.org/x/net/html"
)
@ -144,10 +145,32 @@ func (parser *TemplateParser) parseElementNode(sel *goquery.Selection) {
parser.forStatementNode(sel)
}
if sel.Get(0).Data == "s:set" {
parser.setStatementNode(sel)
}
// Parse the attributes
parser.parseElementAttrs(sel)
}
func (parser *TemplateParser) setStatementNode(sel *goquery.Selection) {
name := sel.AttrOr("name", "")
if name == "" {
return
}
valueExp := sel.AttrOr("value", "")
val, err := parser.data.Exec(valueExp)
if err != nil {
log.Warn("Set %s: %s", valueExp, err)
parser.data[name] = nil
return
}
parser.data[name] = val
}
func (parser *TemplateParser) parseElementAttrs(sel *goquery.Selection) {
if len(sel.Nodes) < 0 {
return