mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-14 20:37:55 -05:00
tpl/transform: Make Plainify and ToMath return template.HTML
None of these are useful as plain strings in the templates, which forces the users to do `transform.Plainify "foo" | safeHTML`. If people have trust issues with the output of these functions, they need to just stop using them. Closes #8732
This commit is contained in:
parent
5d84f64759
commit
946e6af0bb
4 changed files with 12 additions and 11 deletions
|
@ -6,7 +6,7 @@ keywords: []
|
||||||
action:
|
action:
|
||||||
aliases: [plainify]
|
aliases: [plainify]
|
||||||
related: []
|
related: []
|
||||||
returnType: string
|
returnType: template.HTML
|
||||||
signatures: [transform.Plainify INPUT]
|
signatures: [transform.Plainify INPUT]
|
||||||
aliases: [/functions/plainify]
|
aliases: [/functions/plainify]
|
||||||
---
|
---
|
||||||
|
|
|
@ -54,7 +54,7 @@ func New(deps *deps.Deps) *Namespace {
|
||||||
"/tmpl/transform/unmarshal",
|
"/tmpl/transform/unmarshal",
|
||||||
dynacache.OptionsPartition{Weight: 30, ClearWhen: dynacache.ClearOnChange},
|
dynacache.OptionsPartition{Weight: 30, ClearWhen: dynacache.ClearOnChange},
|
||||||
),
|
),
|
||||||
cacheMath: dynacache.GetOrCreatePartition[string, string](
|
cacheMath: dynacache.GetOrCreatePartition[string, template.HTML](
|
||||||
deps.MemCache,
|
deps.MemCache,
|
||||||
"/tmpl/transform/math",
|
"/tmpl/transform/math",
|
||||||
dynacache.OptionsPartition{Weight: 30, ClearWhen: dynacache.ClearNever},
|
dynacache.OptionsPartition{Weight: 30, ClearWhen: dynacache.ClearNever},
|
||||||
|
@ -65,7 +65,7 @@ func New(deps *deps.Deps) *Namespace {
|
||||||
// Namespace provides template functions for the "transform" namespace.
|
// Namespace provides template functions for the "transform" namespace.
|
||||||
type Namespace struct {
|
type Namespace struct {
|
||||||
cacheUnmarshal *dynacache.Partition[string, *resources.StaleValue[any]]
|
cacheUnmarshal *dynacache.Partition[string, *resources.StaleValue[any]]
|
||||||
cacheMath *dynacache.Partition[string, string]
|
cacheMath *dynacache.Partition[string, template.HTML]
|
||||||
|
|
||||||
id atomic.Uint32
|
id atomic.Uint32
|
||||||
deps *deps.Deps
|
deps *deps.Deps
|
||||||
|
@ -188,18 +188,18 @@ func (ns *Namespace) Markdownify(ctx context.Context, s any) (template.HTML, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Plainify returns a copy of s with all HTML tags removed.
|
// Plainify returns a copy of s with all HTML tags removed.
|
||||||
func (ns *Namespace) Plainify(s any) (string, error) {
|
func (ns *Namespace) Plainify(s any) (template.HTML, error) {
|
||||||
ss, err := cast.ToStringE(s)
|
ss, err := cast.ToStringE(s)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
return tpl.StripHTML(ss), nil
|
return template.HTML(tpl.StripHTML(ss)), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// ToMath converts a LaTeX string to math in the given format, default MathML.
|
// ToMath converts a LaTeX string to math in the given format, default MathML.
|
||||||
// This uses KaTeX to render the math, see https://katex.org/.
|
// This uses KaTeX to render the math, see https://katex.org/.
|
||||||
func (ns *Namespace) ToMath(ctx context.Context, args ...any) (string, error) {
|
func (ns *Namespace) ToMath(ctx context.Context, args ...any) (template.HTML, error) {
|
||||||
if len(args) < 1 {
|
if len(args) < 1 {
|
||||||
return "", errors.New("must provide at least one argument")
|
return "", errors.New("must provide at least one argument")
|
||||||
}
|
}
|
||||||
|
@ -226,7 +226,7 @@ func (ns *Namespace) ToMath(ctx context.Context, args ...any) (string, error) {
|
||||||
key := "tomath/" + s[:2] + "/" + s[2:]
|
key := "tomath/" + s[:2] + "/" + s[2:]
|
||||||
fileCache := ns.deps.ResourceSpec.FileCaches.MiscCache()
|
fileCache := ns.deps.ResourceSpec.FileCaches.MiscCache()
|
||||||
|
|
||||||
return ns.cacheMath.GetOrCreate(key, func(string) (string, error) {
|
return ns.cacheMath.GetOrCreate(key, func(string) (template.HTML, error) {
|
||||||
_, r, err := fileCache.GetOrCreate(key, func() (io.ReadCloser, error) {
|
_, r, err := fileCache.GetOrCreate(key, func() (io.ReadCloser, error) {
|
||||||
message := warpc.Message[warpc.KatexInput]{
|
message := warpc.Message[warpc.KatexInput]{
|
||||||
Header: warpc.Header{
|
Header: warpc.Header{
|
||||||
|
@ -250,7 +250,9 @@ func (ns *Namespace) ToMath(ctx context.Context, args ...any) (string, error) {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
return hugio.ReadString(r)
|
s, err := hugio.ReadString(r)
|
||||||
|
|
||||||
|
return template.HTML(s), err
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -141,8 +141,7 @@ func TestToMath(t *testing.T) {
|
||||||
-- hugo.toml --
|
-- hugo.toml --
|
||||||
disableKinds = ['page','rss','section','sitemap','taxonomy','term']
|
disableKinds = ['page','rss','section','sitemap','taxonomy','term']
|
||||||
-- layouts/index.html --
|
-- layouts/index.html --
|
||||||
{{ $result := transform.ToMath "c = \\pm\\sqrt{a^2 + b^2}" }}
|
{{ transform.ToMath "c = \\pm\\sqrt{a^2 + b^2}" }}
|
||||||
{{ printf "%v" $result | safeHTML }}
|
|
||||||
`
|
`
|
||||||
b := hugolib.Test(t, files)
|
b := hugolib.Test(t, files)
|
||||||
|
|
||||||
|
|
|
@ -244,6 +244,6 @@ func TestPlainify(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
b.Assert(err, qt.IsNil)
|
b.Assert(err, qt.IsNil)
|
||||||
b.Assert(result, qt.Equals, test.expect)
|
b.Assert(result, qt.Equals, template.HTML(test.expect.(string)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue