summaryrefslogtreecommitdiffstats
path: root/tpl/compare/init.go
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2019-03-06 09:07:49 +0100
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2019-03-06 22:52:38 +0100
commit02eaddc2fbe92c26e67d9f82dd9aabecbbf2106c (patch)
tree517220ebb06a75e89d506183a621123d49ee20c6 /tpl/compare/init.go
parentbdf47e8da80f87b7689badf48a6b8672c048d7e4 (diff)
tpl/tplimpl: Fix template truth logic
Before this commit, due to a bug in Go's `text/template` package, this would print different output for typed nil interface values: ``` {{ if .AuthenticatedUser }}User is authenticated!{{ else }}{{ end }} {{ if not .AuthenticatedUser }}{{ else }}}User is authenticated!{{ end }} ``` This commit works around this by wrapping every `if` and `with` with a custom `getif` template func with truth logic that matches `not`, `and` and `or`. Those 3 template funcs from Go's stdlib are now pulled into Hugo's source tree and adjusted to support custom zero values, e.g. types that implement `IsZero`. This means that you can now do: ``` {{ with .Date }}{{ . }}{{ end }} ``` And it would work as expected. Fixes #5738
Diffstat (limited to 'tpl/compare/init.go')
-rw-r--r--tpl/compare/init.go21
1 files changed, 21 insertions, 0 deletions
diff --git a/tpl/compare/init.go b/tpl/compare/init.go
index f766ef890..619293203 100644
--- a/tpl/compare/init.go
+++ b/tpl/compare/init.go
@@ -71,6 +71,27 @@ func init() {
[][2]string{},
)
+ ns.AddMethodMapping(ctx.And,
+ []string{"and"},
+ [][2]string{},
+ )
+
+ ns.AddMethodMapping(ctx.Or,
+ []string{"or"},
+ [][2]string{},
+ )
+
+ // getif is used internally by Hugo. Do not document.
+ ns.AddMethodMapping(ctx.getIf,
+ []string{"getif"},
+ [][2]string{},
+ )
+
+ ns.AddMethodMapping(ctx.Not,
+ []string{"not"},
+ [][2]string{},
+ )
+
ns.AddMethodMapping(ctx.Conditional,
[]string{"cond"},
[][2]string{