mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-07 20:30:36 -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 {
|
||||
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
|
||||
|
|
Loading…
Reference in a new issue