Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/gohugoio/hugo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCameron Moore <moorereason@gmail.com>2017-05-10 04:24:23 +0300
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2017-05-20 00:00:20 +0300
commit3954160a21bcde7d4f4c077f9cc9daa610f3e29e (patch)
tree217ce5d0a0ba3cb56f687a03b7c87a65e28cf522
parent93c5774dd70b63c8b5e9268778a355c50b590bb6 (diff)
tpl/time: Support overlapping namespace and template func
Fixes #3421
-rw-r--r--tpl/time/init.go24
-rw-r--r--tpl/time/init_test.go2
2 files changed, 22 insertions, 4 deletions
diff --git a/tpl/time/init.go b/tpl/time/init.go
index 33f8a7dbb..9f9cf275f 100644
--- a/tpl/time/init.go
+++ b/tpl/time/init.go
@@ -25,8 +25,26 @@ func init() {
ctx := New()
ns := &internal.TemplateFuncsNamespace{
- Name: name,
- Context: func() interface{} { return ctx },
+ Name: name,
+ Context: func(v ...interface{}) interface{} {
+ // Handle overlapping "time" namespace and func.
+ //
+ // If no args are passed to `time`, assume namespace usage and
+ // return namespace context.
+ //
+ // If args are passed, show a deprecation warning and attempt to
+ // simulate the old "as time" behavior.
+
+ if len(v) == 0 {
+ return ctx
+ }
+
+ t, err := ctx.AsTime(v[0])
+ if err != nil {
+ return err
+ }
+ return t
+ },
}
ns.AddMethodMapping(ctx.Format,
@@ -42,7 +60,7 @@ func init() {
)
ns.AddMethodMapping(ctx.AsTime,
- []string{"asTime"}, // TODO(bep) handle duplicate
+ []string{"asTime"},
[][2]string{
{`{{ (asTime "2015-01-21").Year }}`, `2015`},
},
diff --git a/tpl/time/init_test.go b/tpl/time/init_test.go
index a41d8e4f3..fd49dc4be 100644
--- a/tpl/time/init_test.go
+++ b/tpl/time/init_test.go
@@ -34,5 +34,5 @@ func TestInit(t *testing.T) {
}
require.True(t, found)
- require.IsType(t, &Namespace{}, ns.Context.(func() interface{})())
+ require.IsType(t, &Namespace{}, ns.Context.(func(v ...interface{}) interface{})())
}