URI: 
       Allow page.TableOfContents on self in shortcode - 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 df5608f8a0706c6519f50b5497e36c21b8e790be
   DIR parent f56ce01ae1a3e5b399410ea8876ebc7321204edd
  HTML Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
       Date:   Sun,  5 Mar 2023 09:51:14 +0100
       
       Allow page.TableOfContents on self in shortcode
       
       Fixes #10791
       
       Diffstat:
         M hugolib/page.go                     |      12 ++++++++----
         M hugolib/page__output.go             |      15 ++++++---------
         M resources/page/page_lazy_contentpr… |       5 -----
         M tpl/page/integration_test.go        |      32 +++++++++++++++++++++++++++++++
       
       4 files changed, 46 insertions(+), 18 deletions(-)
       ---
   DIR diff --git a/hugolib/page.go b/hugolib/page.go
       @@ -17,6 +17,7 @@ import (
                "bytes"
                "context"
                "fmt"
       +        "html/template"
                "path"
                "path/filepath"
                "sort"
       @@ -62,9 +63,8 @@ var (
        var (
                pageTypesProvider = resource.NewResourceTypesProvider(media.OctetType, pageResourceType)
                nopPageOutput     = &pageOutput{
       -                pagePerOutputProviders:  nopPagePerOutput,
       -                ContentProvider:         page.NopPage,
       -                TableOfContentsProvider: page.NopPage,
       +                pagePerOutputProviders: nopPagePerOutput,
       +                ContentProvider:        page.NopPage,
                }
        )
        
       @@ -159,6 +159,11 @@ func (p *pageState) Fragments(ctx context.Context) *tableofcontents.Fragments {
                return p.pageOutput.cp.tableOfContents
        }
        
       +func (p *pageState) TableOfContents(ctx context.Context) template.HTML {
       +        p.s.initInit(ctx, p.cp.initToC, p)
       +        return p.pageOutput.cp.tableOfContentsHTML
       +}
       +
        func (p *pageState) HeadingsFiltered(context.Context) tableofcontents.Headings {
                return nil
        }
       @@ -951,7 +956,6 @@ func (p *pageState) shiftToOutputFormat(isRenderingSite bool, idx int) error {
                                })
                                p.pageOutput.contentRenderer = lcp
                                p.pageOutput.ContentProvider = lcp
       -                        p.pageOutput.TableOfContentsProvider = lcp
                                p.pageOutput.PageRenderProvider = lcp
                        }
                }
   DIR diff --git a/hugolib/page__output.go b/hugolib/page__output.go
       @@ -54,13 +54,12 @@ func newPageOutput(
                }
        
                po := &pageOutput{
       -                f:                       f,
       -                pagePerOutputProviders:  providers,
       -                ContentProvider:         page.NopPage,
       -                TableOfContentsProvider: page.NopPage,
       -                PageRenderProvider:      page.NopPage,
       -                render:                  render,
       -                paginator:               pag,
       +                f:                      f,
       +                pagePerOutputProviders: providers,
       +                ContentProvider:        page.NopPage,
       +                PageRenderProvider:     page.NopPage,
       +                render:                 render,
       +                paginator:              pag,
                }
        
                return po
       @@ -84,7 +83,6 @@ type pageOutput struct {
                contentRenderer page.ContentRenderer
                pagePerOutputProviders
                page.ContentProvider
       -        page.TableOfContentsProvider
                page.PageRenderProvider
        
                // May be nil.
       @@ -97,7 +95,6 @@ func (p *pageOutput) initContentProvider(cp *pageContentOutput) {
                }
                p.contentRenderer = cp
                p.ContentProvider = cp
       -        p.TableOfContentsProvider = cp
                p.PageRenderProvider = cp
                p.cp = cp
        
   DIR diff --git a/resources/page/page_lazy_contentprovider.go b/resources/page/page_lazy_contentprovider.go
       @@ -128,11 +128,6 @@ func (lcp *LazyContentProvider) RenderString(ctx context.Context, args ...any) (
                return lcp.cp.RenderString(ctx, args...)
        }
        
       -func (lcp *LazyContentProvider) TableOfContents(ctx context.Context) template.HTML {
       -        lcp.init.Do(ctx)
       -        return lcp.cp.TableOfContents(ctx)
       -}
       -
        func (lcp *LazyContentProvider) ParseAndRenderContent(ctx context.Context, content []byte, renderTOC bool) (converter.ResultRender, error) {
                lcp.init.Do(ctx)
                return lcp.cp.ParseAndRenderContent(ctx, content, renderTOC)
   DIR diff --git a/tpl/page/integration_test.go b/tpl/page/integration_test.go
       @@ -177,3 +177,35 @@ Shortcode in bundled page OK.
                }
        
        }
       +
       +// Issue 10791.
       +func TestPageTableOfContentsInShortcode(t *testing.T) {
       +        t.Parallel()
       +
       +        files := `
       +-- config.toml --
       +baseURL = 'http://example.com/'
       +disableKinds = ["taxonomy", "term"]
       +-- content/p1.md --
       +---
       +title: "P1"
       +---
       +{{< toc >}}
       +
       +# Heading 1
       +-- layouts/shortcodes/toc.html --
       +{{ page.TableOfContents }} 
       +-- layouts/_default/single.html --
       +{{ .Content }}
       +`
       +
       +        b := hugolib.NewIntegrationTestBuilder(
       +                hugolib.IntegrationTestConfig{
       +                        T:           t,
       +                        TxtarString: files,
       +                },
       +        ).Build()
       +
       +        b.AssertFileContent("public/p1/index.html", "<nav id=\"TableOfContents\"></nav> \n<h1 id=\"heading-1\">Heading 1</h1>")
       +
       +}