diff options
author | Bjørn Erik Pedersen <[email protected]> | 2024-08-11 12:48:30 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <[email protected]> | 2024-08-11 15:16:16 +0200 |
commit | 946e6af0bb662861c954ccff60b2861aa5e1166e (patch) | |
tree | f94d768ed1cb797a7c13d8c5661c560fb91873b7 | |
parent | 5d84f64759aa99fd45737b4efcd7ef889486a114 (diff) | |
download | hugo-946e6af0bb662861c954ccff60b2861aa5e1166e.tar.gz hugo-946e6af0bb662861c954ccff60b2861aa5e1166e.zip |
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
-rw-r--r-- | docs/content/en/functions/transform/Plainify.md | 2 | ||||
-rw-r--r-- | tpl/transform/transform.go | 16 | ||||
-rw-r--r-- | tpl/transform/transform_integration_test.go | 3 | ||||
-rw-r--r-- | tpl/transform/transform_test.go | 2 |
4 files changed, 12 insertions, 11 deletions
diff --git a/docs/content/en/functions/transform/Plainify.md b/docs/content/en/functions/transform/Plainify.md index 040145170..681d41f72 100644 --- a/docs/content/en/functions/transform/Plainify.md +++ b/docs/content/en/functions/transform/Plainify.md @@ -6,7 +6,7 @@ keywords: [] action: aliases: [plainify] related: [] - returnType: string + returnType: template.HTML signatures: [transform.Plainify INPUT] aliases: [/functions/plainify] --- diff --git a/tpl/transform/transform.go b/tpl/transform/transform.go index db7703b7f..10a91671d 100644 --- a/tpl/transform/transform.go +++ b/tpl/transform/transform.go @@ -54,7 +54,7 @@ func New(deps *deps.Deps) *Namespace { "/tmpl/transform/unmarshal", dynacache.OptionsPartition{Weight: 30, ClearWhen: dynacache.ClearOnChange}, ), - cacheMath: dynacache.GetOrCreatePartition[string, string]( + cacheMath: dynacache.GetOrCreatePartition[string, template.HTML]( deps.MemCache, "/tmpl/transform/math", 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. type Namespace struct { cacheUnmarshal *dynacache.Partition[string, *resources.StaleValue[any]] - cacheMath *dynacache.Partition[string, string] + cacheMath *dynacache.Partition[string, template.HTML] id atomic.Uint32 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. -func (ns *Namespace) Plainify(s any) (string, error) { +func (ns *Namespace) Plainify(s any) (template.HTML, error) { ss, err := cast.ToStringE(s) if err != nil { 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. // 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 { 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:] 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) { message := warpc.Message[warpc.KatexInput]{ Header: warpc.Header{ @@ -250,7 +250,9 @@ func (ns *Namespace) ToMath(ctx context.Context, args ...any) (string, error) { return "", err } - return hugio.ReadString(r) + s, err := hugio.ReadString(r) + + return template.HTML(s), err }) } diff --git a/tpl/transform/transform_integration_test.go b/tpl/transform/transform_integration_test.go index 529f18a5f..b030417a2 100644 --- a/tpl/transform/transform_integration_test.go +++ b/tpl/transform/transform_integration_test.go @@ -141,8 +141,7 @@ func TestToMath(t *testing.T) { -- hugo.toml -- disableKinds = ['page','rss','section','sitemap','taxonomy','term'] -- layouts/index.html -- -{{ $result := transform.ToMath "c = \\pm\\sqrt{a^2 + b^2}" }} -{{ printf "%v" $result | safeHTML }} +{{ transform.ToMath "c = \\pm\\sqrt{a^2 + b^2}" }} ` b := hugolib.Test(t, files) diff --git a/tpl/transform/transform_test.go b/tpl/transform/transform_test.go index d645ca8e2..1f6c99ec4 100644 --- a/tpl/transform/transform_test.go +++ b/tpl/transform/transform_test.go @@ -244,6 +244,6 @@ func TestPlainify(t *testing.T) { } b.Assert(err, qt.IsNil) - b.Assert(result, qt.Equals, test.expect) + b.Assert(result, qt.Equals, template.HTML(test.expect.(string))) } } |