diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2025-04-14 11:41:56 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2025-04-14 14:38:22 +0200 |
commit | cf9e6904cc0850b20f9e4e378b12851bb72f44dd (patch) | |
tree | acba41abd8725beee3321a47b460ae606e97eff2 | |
parent | 8a2830f2dcbf2c9b799ff8d1db9601da58f98494 (diff) | |
download | hugo-cf9e6904cc0850b20f9e4e378b12851bb72f44dd.tar.gz hugo-cf9e6904cc0850b20f9e4e378b12851bb72f44dd.zip |
tpl: Fix the case for a shortcode in a nested folder only
Fixes #13605
-rw-r--r-- | hugolib/shortcode.go | 8 | ||||
-rw-r--r-- | tpl/tplimpl/templatestore.go | 18 | ||||
-rw-r--r-- | tpl/tplimpl/templatestore_integration_test.go | 22 |
3 files changed, 38 insertions, 10 deletions
diff --git a/hugolib/shortcode.go b/hugolib/shortcode.go index 3ac0940e2..cc8a145d9 100644 --- a/hugolib/shortcode.go +++ b/hugolib/shortcode.go @@ -677,13 +677,7 @@ Loop: // Used to check if the template expects inner content, // so just pick one arbitrarily with the same name. - q := tplimpl.TemplateQuery{ - Path: "", - Name: sc.name, - Category: tplimpl.CategoryShortcode, - Consider: nil, - } - templ := s.s.TemplateStore.LookupShortcode(q) + templ := s.s.TemplateStore.LookupShortcodeByName(sc.name) if templ == nil { return nil, fmt.Errorf("%s: template for shortcode %q not found", errorPrefix, sc.name) } diff --git a/tpl/tplimpl/templatestore.go b/tpl/tplimpl/templatestore.go index 7544b5625..99e8c4839 100644 --- a/tpl/tplimpl/templatestore.go +++ b/tpl/tplimpl/templatestore.go @@ -122,6 +122,7 @@ func NewStore(opts StoreOptions, siteOpts SiteOptions) (*TemplateStore, error) { treeMain: doctree.NewSimpleTree[map[nodeKey]*TemplInfo](), treeShortcodes: doctree.NewSimpleTree[map[string]map[TemplateDescriptor]*TemplInfo](), templatesByPath: maps.NewCache[string, *TemplInfo](), + shortcodesByName: maps.NewCache[string, *TemplInfo](), cacheLookupPartials: maps.NewCache[string, *TemplInfo](), // Note that the funcs passed below is just for name validation. @@ -419,9 +420,10 @@ type TemplateStore struct { siteOpts SiteOptions htmlFormat output.Format - treeMain *doctree.SimpleTree[map[nodeKey]*TemplInfo] - treeShortcodes *doctree.SimpleTree[map[string]map[TemplateDescriptor]*TemplInfo] - templatesByPath *maps.Cache[string, *TemplInfo] + treeMain *doctree.SimpleTree[map[nodeKey]*TemplInfo] + treeShortcodes *doctree.SimpleTree[map[string]map[TemplateDescriptor]*TemplInfo] + templatesByPath *maps.Cache[string, *TemplInfo] + shortcodesByName *maps.Cache[string, *TemplInfo] dh descriptorHandler @@ -576,6 +578,15 @@ func (s *TemplateStore) LookupPartial(pth string) *TemplInfo { return ti } +func (s *TemplateStore) LookupShortcodeByName(name string) *TemplInfo { + name = strings.ToLower(name) + ti, _ := s.shortcodesByName.Get(name) + if ti == nil { + return nil + } + return ti +} + func (s *TemplateStore) LookupShortcode(q TemplateQuery) *TemplInfo { q.init() k1 := s.key(q.Path) @@ -1039,6 +1050,7 @@ func (s *TemplateStore) insertShortcode(pi *paths.Path, fi hugofs.FileMetaInfo, m1[d] = ti + s.shortcodesByName.Set(k2, ti) s.setTemplateByPath(pi.Path(), ti) if fi != nil { diff --git a/tpl/tplimpl/templatestore_integration_test.go b/tpl/tplimpl/templatestore_integration_test.go index 4644c9639..b302f5bb3 100644 --- a/tpl/tplimpl/templatestore_integration_test.go +++ b/tpl/tplimpl/templatestore_integration_test.go @@ -1127,6 +1127,28 @@ single.html b.AssertFileContent("public/s3/index.html", "single.html") // fail } +func TestIssue13605(t *testing.T) { + t.Parallel() + + files := ` +-- hugo.toml -- +disableKinds = ['home','rss','section','sitemap','taxonomy','term'] +-- content/s1/p1.md -- +--- +title: p1 +--- +{{< sc >}} +-- layouts/s1/_shortcodes/sc.html -- +layouts/s1/_shortcodes/sc.html +-- layouts/single.html -- +{{ .Content }} +` + + b := hugolib.Test(t, files) + + b.AssertFileContent("public/s1/p1/index.html", "layouts/s1/_shortcodes/sc.html") +} + func TestSkipDotFiles(t *testing.T) { t.Parallel() |