Skip to content

Commit

Permalink
hugolib: Fix shortcode namespace issue
Browse files Browse the repository at this point in the history
Fixes #5863
  • Loading branch information
bep committed Apr 15, 2019
1 parent 7881b09 commit 56550d1
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 6 deletions.
29 changes: 29 additions & 0 deletions hugolib/shortcode_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1126,3 +1126,32 @@ CONTENT:{{ .Content }}

}
}

// https://github.com/gohugoio/hugo/issues/5863
func TestShortcodeNamespaced(t *testing.T) {
t.Parallel()
assert := require.New(t)

builder := newTestSitesBuilder(t).WithSimpleConfigFile()

builder.WithContent("page.md", `---
title: "Hugo Rocks!"
---
# doc
hello: {{< hello >}}
test/hello: {{< test/hello >}}
`).WithTemplatesAdded(
"layouts/shortcodes/hello.html", `hello`,
"layouts/shortcodes/test/hello.html", `test/hello`).CreateSites().Build(BuildCfg{})

s := builder.H.Sites[0]
assert.Equal(1, len(s.RegularPages()))

builder.AssertFileContent("public/page/index.html",
"hello: hello",
"test/hello: test/hello",
)
}
4 changes: 2 additions & 2 deletions tpl/tplimpl/shortcodes.go
Original file line number Diff line number Diff line change
Expand Up @@ -152,9 +152,9 @@ func resolveTemplateType(name string) templateType {
}

func isShortcode(name string) bool {
return strings.Contains(name, "shortcodes/")
return strings.Contains(name, shortcodesPathPrefix)
}

func isInternal(name string) bool {
return strings.HasPrefix(name, "_internal/")
return strings.HasPrefix(name, internalPathPrefix)
}
6 changes: 5 additions & 1 deletion tpl/tplimpl/shortcodes_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,9 +85,13 @@ func TestShortcodesTemplate(t *testing.T) {

})

t.Run("Template", func(t *testing.T) {
t.Run("Name", func(t *testing.T) {
assert := require.New(t)

assert.Equal("foo.html", templateBaseName(templateShortcode, "shortcodes/foo.html"))
assert.Equal("foo.html", templateBaseName(templateShortcode, "_internal/shortcodes/foo.html"))
assert.Equal("test/foo.html", templateBaseName(templateShortcode, "shortcodes/test/foo.html"))

assert.True(true)

})
Expand Down
24 changes: 21 additions & 3 deletions tpl/tplimpl/template.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ package tplimpl
import (
"fmt"
"html/template"
"path"
"strings"
texttemplate "text/template"

Expand Down Expand Up @@ -112,8 +111,27 @@ type templateHandler struct {
*deps.Deps
}

const (
shortcodesPathPrefix = "shortcodes/"
internalPathPrefix = "_internal/"
)

// resolves _internal/shortcodes/param.html => param.html etc.
func templateBaseName(typ templateType, name string) string {
name = strings.TrimPrefix(name, internalPathPrefix)
switch typ {
case templateShortcode:
return strings.TrimPrefix(name, shortcodesPathPrefix)
default:
panic("not implemented")
}

}

func (t *templateHandler) addShortcodeVariant(name string, info tpl.Info, templ tpl.Template) {
shortcodename, variants := templateNameAndVariants(path.Base(name))
base := templateBaseName(templateShortcode, name)

shortcodename, variants := templateNameAndVariants(base)

templs, found := t.shortcodes[shortcodename]
if !found {
Expand Down Expand Up @@ -204,7 +222,7 @@ func (t *templateHandler) applyTemplateInfo(templ tpl.Template, found bool) (tpl
// This currently only applies to shortcodes and what we get here is the
// shortcode name.
func (t *templateHandler) LookupVariant(name string, variants tpl.TemplateVariants) (tpl.Template, bool, bool) {
name = path.Base(name)
name = templateBaseName(templateShortcode, name)
s, found := t.shortcodes[name]
if !found {
return nil, false, false
Expand Down

0 comments on commit 56550d1

Please sign in to comment.