summaryrefslogtreecommitdiffstats
path: root/tpl
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2018-07-31 11:35:38 +0200
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2018-07-31 13:28:15 +0200
commit0ba19c57f180c33b41c64335ea1d1c89335d34c0 (patch)
treedf2ca707664574f34eedb3234a781258a01a477c /tpl
parent0afa2897a0cf90f4348929ef432202efddc183a0 (diff)
tpl/partials: Add templates.Exists
Fixes #5010
Diffstat (limited to 'tpl')
-rw-r--r--tpl/templates/init.go44
-rw-r--r--tpl/templates/init_test.go38
-rw-r--r--tpl/templates/templates.go39
-rw-r--r--tpl/tplimpl/template_funcs.go1
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"