Skip to content
Permalink
Browse files

hugolib: Fix shortcode namespace issue

Fixes #5863
  • Loading branch information...
bep committed Apr 15, 2019
1 parent 7881b09 commit 56550d1e449f45ebee398ac8a9e3b9818b3ee60e
Showing with 57 additions and 6 deletions.
  1. +29 −0 hugolib/shortcode_test.go
  2. +2 −2 tpl/tplimpl/shortcodes.go
  3. +5 −1 tpl/tplimpl/shortcodes_test.go
  4. +21 −3 tpl/tplimpl/template.go
@@ -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",
)
}
@@ -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)
}
@@ -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)

})
@@ -16,7 +16,6 @@ package tplimpl
import (
"fmt"
"html/template"
"path"
"strings"
texttemplate "text/template"

@@ -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 {
@@ -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

0 comments on commit 56550d1

Please sign in to comment.
You can’t perform that action at this time.