Allow setting escapeHTML for an entire namespace
This commit is contained in:
parent
e68190ca6a
commit
38420f5c6a
17
namespace.go
17
namespace.go
@ -29,6 +29,8 @@ type Namespace struct {
|
|||||||
tmpls map[string]Template
|
tmpls map[string]Template
|
||||||
vars map[string]reflect.Value
|
vars map[string]reflect.Value
|
||||||
tags map[string]Tag
|
tags map[string]Tag
|
||||||
|
|
||||||
|
escapeHTML *bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// New returns a new template namespace
|
// New returns a new template namespace
|
||||||
@ -69,6 +71,14 @@ func (n *Namespace) WithTagMap(m map[string]Tag) *Namespace {
|
|||||||
return n
|
return n
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WithVarMap turns HTML escaping on or off for the namespace
|
||||||
|
func (n *Namespace) WithEscapeHTML(b bool) *Namespace {
|
||||||
|
n.mu.Lock()
|
||||||
|
defer n.mu.Unlock()
|
||||||
|
n.escapeHTML = &b
|
||||||
|
return n
|
||||||
|
}
|
||||||
|
|
||||||
// GetTemplate tries to get a template from the namespace's template map.
|
// GetTemplate tries to get a template from the namespace's template map.
|
||||||
// If it finds the template, it returns the template and true. If it
|
// If it finds the template, it returns the template and true. If it
|
||||||
// doesn't find it, it returns nil and false.
|
// doesn't find it, it returns nil and false.
|
||||||
@ -94,3 +104,10 @@ func (n *Namespace) getTag(name string) (Tag, bool) {
|
|||||||
t, ok := n.tags[name]
|
t, ok := n.tags[name]
|
||||||
return t, ok
|
return t, ok
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// getEscapeHTML returns the namespace's escapeHTML value
|
||||||
|
func (n *Namespace) getEscapeHTML() *bool {
|
||||||
|
n.mu.Lock()
|
||||||
|
defer n.mu.Unlock()
|
||||||
|
return n.escapeHTML
|
||||||
|
}
|
||||||
|
16
salix.go
16
salix.go
@ -58,7 +58,7 @@ type Template struct {
|
|||||||
name string
|
name string
|
||||||
ast []ast.Node
|
ast []ast.Node
|
||||||
|
|
||||||
escapeHTML bool
|
escapeHTML *bool
|
||||||
|
|
||||||
tags map[string]Tag
|
tags map[string]Tag
|
||||||
vars map[string]reflect.Value
|
vars map[string]reflect.Value
|
||||||
@ -90,7 +90,7 @@ func (t Template) WithTagMap(m map[string]Tag) Template {
|
|||||||
// The HTML escaping functionality is NOT context-aware.
|
// The HTML escaping functionality is NOT context-aware.
|
||||||
// Using the HTML type allows you to get around the escaping if needed.
|
// Using the HTML type allows you to get around the escaping if needed.
|
||||||
func (t Template) WithEscapeHTML(b bool) Template {
|
func (t Template) WithEscapeHTML(b bool) Template {
|
||||||
t.escapeHTML = true
|
t.escapeHTML = &b
|
||||||
return t
|
return t
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -140,10 +140,20 @@ func (t *Template) execute(w io.Writer, nodes []ast.Node, local map[string]any)
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t *Template) getEscapeHTML() bool {
|
||||||
|
if t.escapeHTML != nil {
|
||||||
|
return *t.escapeHTML
|
||||||
|
} else if t.ns.escapeHTML != nil {
|
||||||
|
return *t.ns.getEscapeHTML()
|
||||||
|
} else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (t *Template) toString(v any) string {
|
func (t *Template) toString(v any) string {
|
||||||
if h, ok := v.(HTML); ok {
|
if h, ok := v.(HTML); ok {
|
||||||
return string(h)
|
return string(h)
|
||||||
} else if t.escapeHTML {
|
} else if t.getEscapeHTML() {
|
||||||
return html.EscapeString(fmt.Sprint(v))
|
return html.EscapeString(fmt.Sprint(v))
|
||||||
}
|
}
|
||||||
return fmt.Sprint(v)
|
return fmt.Sprint(v)
|
||||||
|
Loading…
Reference in New Issue
Block a user