}
}
+
+// 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",
+ )
+}
}
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)
}
})
- 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)
})
import (
"fmt"
"html/template"
- "path"
"strings"
texttemplate "text/template"
*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 {
// 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