URI: 
       tpl: Fix the case for a shortcode in a nested folder only - hugo - [fork] hugo port for 9front
  HTML git clone git@git.drkhsh.at/hugo.git
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
   DIR README
   DIR LICENSE
       ---
   DIR commit cf9e6904cc0850b20f9e4e378b12851bb72f44dd
   DIR parent 8a2830f2dcbf2c9b799ff8d1db9601da58f98494
  HTML Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
       Date:   Mon, 14 Apr 2025 11:41:56 +0200
       
       tpl: Fix the case for a shortcode in a nested folder only
       
       Fixes #13605
       
       Diffstat:
         M hugolib/shortcode.go                |       8 +-------
         M tpl/tplimpl/templatestore.go        |      18 +++++++++++++++---
         M tpl/tplimpl/templatestore_integrat… |      22 ++++++++++++++++++++++
       
       3 files changed, 38 insertions(+), 10 deletions(-)
       ---
   DIR diff --git 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)
                                }
   DIR diff --git 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 {
   DIR diff --git 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()