mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-21 20:46:30 -05:00
parent
7881b0965f
commit
56550d1e44
4 changed files with 57 additions and 6 deletions
|
@ -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 {
|
func isShortcode(name string) bool {
|
||||||
return strings.Contains(name, "shortcodes/")
|
return strings.Contains(name, shortcodesPathPrefix)
|
||||||
}
|
}
|
||||||
|
|
||||||
func isInternal(name string) bool {
|
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 := 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)
|
assert.True(true)
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
|
@ -16,7 +16,6 @@ package tplimpl
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"html/template"
|
"html/template"
|
||||||
"path"
|
|
||||||
"strings"
|
"strings"
|
||||||
texttemplate "text/template"
|
texttemplate "text/template"
|
||||||
|
|
||||||
|
@ -112,8 +111,27 @@ type templateHandler struct {
|
||||||
*deps.Deps
|
*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) {
|
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]
|
templs, found := t.shortcodes[shortcodename]
|
||||||
if !found {
|
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
|
// This currently only applies to shortcodes and what we get here is the
|
||||||
// shortcode name.
|
// shortcode name.
|
||||||
func (t *templateHandler) LookupVariant(name string, variants tpl.TemplateVariants) (tpl.Template, bool, bool) {
|
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]
|
s, found := t.shortcodes[name]
|
||||||
if !found {
|
if !found {
|
||||||
return nil, false, false
|
return nil, false, false
|
||||||
|
|
Loading…
Reference in a new issue