From 4714085a10835b9f4e8d4f699dc94e3120d8067e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Sun, 30 Apr 2017 23:33:14 +0200 Subject: [PATCH] tpl/urls: Make it a package that stands on its own See #3042 --- tpl/tplimpl/templateFuncster.go | 7 ---- tpl/tplimpl/template_funcs.go | 9 +---- tpl/tplimpl/template_funcs_test.go | 20 +++-------- tpl/urls/init.go | 55 ++++++++++++++++++++++++++++++ 4 files changed, 60 insertions(+), 31 deletions(-) create mode 100644 tpl/urls/init.go diff --git a/tpl/tplimpl/templateFuncster.go b/tpl/tplimpl/templateFuncster.go index b40de5307..c37d7f937 100644 --- a/tpl/tplimpl/templateFuncster.go +++ b/tpl/tplimpl/templateFuncster.go @@ -21,7 +21,6 @@ import ( bp "github.com/spf13/hugo/bufferpool" "github.com/spf13/hugo/deps" - "github.com/spf13/hugo/tpl/urls" ) // Some of the template funcs are'nt entirely stateless. @@ -29,9 +28,6 @@ type templateFuncster struct { funcMap template.FuncMap cachedPartials partialCache - // Namespaces - urls *urls.Namespace - *deps.Deps } @@ -39,9 +35,6 @@ func newTemplateFuncster(deps *deps.Deps) *templateFuncster { return &templateFuncster{ Deps: deps, cachedPartials: partialCache{p: make(map[string]interface{})}, - - // Namespaces - urls: urls.New(deps), } } diff --git a/tpl/tplimpl/template_funcs.go b/tpl/tplimpl/template_funcs.go index e5303a8d7..d1a2dd73a 100644 --- a/tpl/tplimpl/template_funcs.go +++ b/tpl/tplimpl/template_funcs.go @@ -38,6 +38,7 @@ import ( _ "github.com/spf13/hugo/tpl/strings" _ "github.com/spf13/hugo/tpl/time" _ "github.com/spf13/hugo/tpl/transform" + _ "github.com/spf13/hugo/tpl/urls" ) // Get retrieves partial output from the cache based upon the partial name. @@ -92,20 +93,12 @@ func (t *templateFuncster) initFuncMap() { funcMap := template.FuncMap{ // Namespaces //"time": t.time.Namespace, - "urls": t.urls.Namespace, - - "absURL": t.urls.AbsURL, - "absLangURL": t.urls.AbsLangURL, "int": func(v interface{}) (int, error) { return cast.ToIntE(v) }, "partial": t.partial, "partialCached": t.partialCached, "print": fmt.Sprint, "printf": fmt.Sprintf, "println": fmt.Sprintln, - "ref": t.urls.Ref, - "relURL": t.urls.RelURL, - "relLangURL": t.urls.RelLangURL, - "relref": t.urls.RelRef, "string": func(v interface{}) (string, error) { return cast.ToStringE(v) }, "urlize": t.PathSpec.URLize, } diff --git a/tpl/tplimpl/template_funcs_test.go b/tpl/tplimpl/template_funcs_test.go index 5ee11e16a..186da511b 100644 --- a/tpl/tplimpl/template_funcs_test.go +++ b/tpl/tplimpl/template_funcs_test.go @@ -64,6 +64,8 @@ func TestTemplateFuncsExamples(t *testing.T) { v.Set("workingDir", workingDir) v.Set("multilingual", true) + v.Set("baseURL", "http://mysite.com/hugo/") + v.Set("CurrentContentLanguage", helpers.NewLanguage("en", v)) fs := hugofs.NewMem(v) @@ -122,10 +124,7 @@ func TestFuncsInTemplate(t *testing.T) { // TODO(bep): docs: fix title example // TODO(bep) namespace remove when done in := - `absLangURL: {{ "index.html" | absLangURL }} -absURL: {{ "http://gohugo.io/" | absURL }} -absURL: {{ "mystyle.css" | absURL }} -absURL: {{ 42 | absURL }} + ` crypto.MD5: {{ crypto.MD5 "Hello world, gophers!" }} dateFormat: {{ dateFormat "Monday, Jan 2, 2006" "2015-01-21" }} htmlEscape 1: {{ htmlEscape "Cathal Garvey & The Sunshine Band " | safeHTML}} @@ -138,18 +137,11 @@ htmlUnescape 5: {{ htmlUnescape "Cathal Garvey & The Sunshine Band <catha print: {{ print "works!" }} printf: {{ printf "%s!" "works" }} println: {{ println "works!" -}} -relLangURL: {{ "index.html" | relLangURL }} -relURL 1: {{ "http://gohugo.io/" | relURL }} -relURL 2: {{ "mystyle.css" | relURL }} -relURL 3: {{ mul 2 21 | relURL }} strings.TrimPrefix: {{ strings.TrimPrefix "Goodbye,, world!" "Goodbye," }} urlize: {{ "Bat Man" | urlize }} ` - expected := `absLangURL: http://mysite.com/hugo/en/index.html -absURL: http://gohugo.io/ -absURL: http://mysite.com/hugo/mystyle.css -absURL: http://mysite.com/hugo/42 + expected := ` crypto.MD5: b3029f756f98f79e7f1b7f1d1f0dd53b dateFormat: Wednesday, Jan 21, 2015 htmlEscape 1: Cathal Garvey & The Sunshine Band <cathal@foo.bar> @@ -162,10 +154,6 @@ htmlUnescape 5: Cathal Garvey & The Sunshine Band <cathal@foo.bar> print: works! printf: works! println: works! -relLangURL: /hugo/en/index.html -relURL 1: http://gohugo.io/ -relURL 2: /hugo/mystyle.css -relURL 3: /hugo/42 strings.TrimPrefix: , world! urlize: bat-man ` diff --git a/tpl/urls/init.go b/tpl/urls/init.go new file mode 100644 index 000000000..a687704af --- /dev/null +++ b/tpl/urls/init.go @@ -0,0 +1,55 @@ +// Copyright 2017 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 urls + +import ( + "github.com/spf13/hugo/deps" + "github.com/spf13/hugo/tpl/internal" +) + +const name = "urls" + +func init() { + f := func(d *deps.Deps) *internal.TemplateFuncsNamespace { + ctx := New(d) + + examples := [][2]string{ + {`{{ "index.html" | absLangURL }}`, `http://mysite.com/hugo/en/index.html`}, + {`{{ "http://gohugo.io/" | absURL }}`, `http://gohugo.io/`}, + {`{{ "mystyle.css" | absURL }}`, `http://mysite.com/hugo/mystyle.css`}, + {`{{ 42 | absURL }}`, `http://mysite.com/hugo/42`}, + {`{{ "index.html" | relLangURL }}`, `/hugo/en/index.html`}, + {`{{ "http://gohugo.io/" | relURL }}`, `http://gohugo.io/`}, + {`{{ "mystyle.css" | relURL }}`, `/hugo/mystyle.css`}, + {`{{ mul 2 21 | relURL }}`, `/hugo/42`}, + } + + return &internal.TemplateFuncsNamespace{ + Name: name, + Context: func() interface{} { return ctx }, + Aliases: map[string]interface{}{ + "absURL": ctx.AbsURL, + "absLangURL": ctx.AbsLangURL, + "ref": ctx.Ref, + "relURL": ctx.RelURL, + "relLangURL": ctx.RelLangURL, + "relref": ctx.RelRef, + }, + Examples: examples, + } + + } + + internal.AddTemplateFuncsNamespace(f) +}