tpl/collections: Fix and deprecate echoParams

Fixes #11498
This commit is contained in:
Joe Mooring 2023-09-26 13:49:44 -07:00 committed by Bjørn Erik Pedersen
parent d234a963eb
commit 75f56b4ce6
2 changed files with 40 additions and 1 deletions

View file

@ -31,6 +31,7 @@ import (
"github.com/gohugoio/hugo/common/maps" "github.com/gohugoio/hugo/common/maps"
"github.com/gohugoio/hugo/common/types" "github.com/gohugoio/hugo/common/types"
"github.com/gohugoio/hugo/deps" "github.com/gohugoio/hugo/deps"
"github.com/gohugoio/hugo/helpers"
"github.com/gohugoio/hugo/langs" "github.com/gohugoio/hugo/langs"
"github.com/gohugoio/hugo/tpl/compare" "github.com/gohugoio/hugo/tpl/compare"
"github.com/spf13/cast" "github.com/spf13/cast"
@ -195,9 +196,11 @@ func (ns *Namespace) Dictionary(values ...any) (map[string]any, error) {
return root, nil return root, nil
} }
// EchoParam returns a the value in the collection c with key k if is set; otherwise, it returns an // EchoParam returns the value in the collection c with key k if is set; otherwise, it returns an
// empty string. // empty string.
// Deprecated: Use the index function instead.
func (ns *Namespace) EchoParam(c, k any) any { func (ns *Namespace) EchoParam(c, k any) any {
helpers.Deprecated("collections.EchoParam", "Use the index function instead.", false)
av, isNil := indirect(reflect.ValueOf(c)) av, isNil := indirect(reflect.ValueOf(c))
if isNil { if isNil {
return "" return ""
@ -233,6 +236,8 @@ func (ns *Namespace) EchoParam(c, k any) any {
return avv.Float() return avv.Float()
case reflect.String: case reflect.String:
return avv.String() return avv.String()
case reflect.Bool:
return avv.Bool()
} }
} }

View file

@ -231,3 +231,37 @@ foo: bc
).Build() ).Build()
b.AssertFileContent("public/index.html", "<ul><li>P1</li><li>P2</li></ul>") b.AssertFileContent("public/index.html", "<ul><li>P1</li><li>P2</li></ul>")
} }
// Issue #11498
func TestEchoParams(t *testing.T) {
t.Parallel()
files := `
-- hugo.toml --
[params.footer]
string = 'foo'
int = 42
float = 3.1415
boolt = true
boolf = false
-- layouts/index.html --
{{ echoParam .Site.Params.footer "string" }}
{{ echoParam .Site.Params.footer "int" }}
{{ echoParam .Site.Params.footer "float" }}
{{ echoParam .Site.Params.footer "boolt" }}
{{ echoParam .Site.Params.footer "boolf" }}
`
b := hugolib.NewIntegrationTestBuilder(
hugolib.IntegrationTestConfig{
T: t,
TxtarString: files,
},
).Build()
b.AssertFileContent("public/index.html",
"foo",
"42",
"3.1415",
"true",
"false",
)
}