"bytes"
"context"
"fmt"
+ "html/template"
"path"
"path/filepath"
"sort"
var (
pageTypesProvider = resource.NewResourceTypesProvider(media.OctetType, pageResourceType)
nopPageOutput = &pageOutput{
- pagePerOutputProviders: nopPagePerOutput,
- ContentProvider: page.NopPage,
- TableOfContentsProvider: page.NopPage,
+ pagePerOutputProviders: nopPagePerOutput,
+ ContentProvider: page.NopPage,
}
)
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
}
})
p.pageOutput.contentRenderer = lcp
p.pageOutput.ContentProvider = lcp
- p.pageOutput.TableOfContentsProvider = lcp
p.pageOutput.PageRenderProvider = lcp
}
}
}
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
contentRenderer page.ContentRenderer
pagePerOutputProviders
page.ContentProvider
- page.TableOfContentsProvider
page.PageRenderProvider
// May be nil.
}
p.contentRenderer = cp
p.ContentProvider = cp
- p.TableOfContentsProvider = cp
p.PageRenderProvider = cp
p.cp = cp
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)
}
}
+
+// 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>")
+
+}