aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <[email protected]>2024-08-11 12:48:30 +0200
committerBjørn Erik Pedersen <[email protected]>2024-08-11 15:16:16 +0200
commit946e6af0bb662861c954ccff60b2861aa5e1166e (patch)
treef94d768ed1cb797a7c13d8c5661c560fb91873b7
parent5d84f64759aa99fd45737b4efcd7ef889486a114 (diff)
downloadhugo-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.md2
-rw-r--r--tpl/transform/transform.go16
-rw-r--r--tpl/transform/transform_integration_test.go3
-rw-r--r--tpl/transform/transform_test.go2
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)))
}
}