diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2018-07-31 11:35:38 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2018-07-31 13:28:15 +0200 |
commit | 0ba19c57f180c33b41c64335ea1d1c89335d34c0 (patch) | |
tree | df2ca707664574f34eedb3234a781258a01a477c | |
parent | 0afa2897a0cf90f4348929ef432202efddc183a0 (diff) |
tpl/partials: Add templates.Exists
Fixes #5010
-rw-r--r-- | tpl/templates/init.go | 44 | ||||
-rw-r--r-- | tpl/templates/init_test.go | 38 | ||||
-rw-r--r-- | tpl/templates/templates.go | 39 | ||||
-rw-r--r-- | tpl/tplimpl/template_funcs.go | 1 |
4 files changed, 122 insertions, 0 deletions
diff --git a/tpl/templates/init.go b/tpl/templates/init.go new file mode 100644 index 000000000..a68809e65 --- /dev/null +++ b/tpl/templates/init.go @@ -0,0 +1,44 @@ +// Copyright 2018 The Hugo Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package partials + +import ( + "github.com/gohugoio/hugo/deps" + "github.com/gohugoio/hugo/tpl/internal" +) + +const name = "templates" + +func init() { + f := func(d *deps.Deps) *internal.TemplateFuncsNamespace { + ctx := New(d) + + ns := &internal.TemplateFuncsNamespace{ + Name: name, + Context: func(args ...interface{}) interface{} { return ctx }, + } + + ns.AddMethodMapping(ctx.Exists, + nil, + [][2]string{{`{{ if (templates.Exists "partials/header.html") }}Yes!{{ end }}`, `Yes!`}, + {`{{ if not (templates.Exists "partials/doesnotexist.html") }}No!{{ end }}`, `No!`}, + }, + ) + + return ns + + } + + internal.AddTemplateFuncsNamespace(f) +} diff --git a/tpl/templates/init_test.go b/tpl/templates/init_test.go new file mode 100644 index 000000000..d833cddc1 --- /dev/null +++ b/tpl/templates/init_test.go @@ -0,0 +1,38 @@ +// Copyright 2018 The Hugo Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package partials + +import ( + "testing" + + "github.com/gohugoio/hugo/deps" + "github.com/gohugoio/hugo/tpl/internal" + "github.com/stretchr/testify/require" +) + +func TestInit(t *testing.T) { + var found bool + var ns *internal.TemplateFuncsNamespace + + for _, nsf := range internal.TemplateFuncsNamespaceRegistry { + ns = nsf(&deps.Deps{}) + if ns.Name == name { + found = true + break + } + } + + require.True(t, found) + require.IsType(t, &Namespace{}, ns.Context()) +} diff --git a/tpl/templates/templates.go b/tpl/templates/templates.go new file mode 100644 index 000000000..7a69e28a6 --- /dev/null +++ b/tpl/templates/templates.go @@ -0,0 +1,39 @@ +// Copyright 2018 The Hugo Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package partials + +import ( + "github.com/gohugoio/hugo/deps" +) + +// New returns a new instance of the templates-namespaced template functions. +func New(deps *deps.Deps) *Namespace { + return &Namespace{ + deps: deps, + } +} + +// Namespace provides template functions for the "templates" namespace. +type Namespace struct { + deps *deps.Deps +} + +// Exists returns whether the template with the given name exists. +// Note that this is the Unix-styled relative path including filename suffix, +// e.g. partials/header.html +func (ns *Namespace) Exists(name string) bool { + _, found := ns.deps.Tmpl.Lookup(name) + return found + +} diff --git a/tpl/tplimpl/template_funcs.go b/tpl/tplimpl/template_funcs.go index f1ed7f36f..27ffcd97a 100644 --- a/tpl/tplimpl/template_funcs.go +++ b/tpl/tplimpl/template_funcs.go @@ -40,6 +40,7 @@ import ( _ "github.com/gohugoio/hugo/tpl/resources" _ "github.com/gohugoio/hugo/tpl/safe" _ "github.com/gohugoio/hugo/tpl/strings" + _ "github.com/gohugoio/hugo/tpl/templates" _ "github.com/gohugoio/hugo/tpl/time" _ "github.com/gohugoio/hugo/tpl/transform" _ "github.com/gohugoio/hugo/tpl/urls" |