mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-07 20:30:36 -05:00
parent
94fb4dc3dd
commit
03b93bb988
8 changed files with 100 additions and 2 deletions
|
@ -941,6 +941,19 @@ func (c *contentTreeRef) collectPages() page.Pages {
|
|||
return pas
|
||||
}
|
||||
|
||||
func (c *contentTreeRef) collectPagesRecursive() page.Pages {
|
||||
var pas page.Pages
|
||||
c.m.collectPages(c.key+cmBranchSeparator, func(c *contentNode) {
|
||||
pas = append(pas, c.p)
|
||||
})
|
||||
c.m.collectPages(c.key+"/", func(c *contentNode) {
|
||||
pas = append(pas, c.p)
|
||||
})
|
||||
page.SortByDefault(pas)
|
||||
|
||||
return pas
|
||||
}
|
||||
|
||||
func (c *contentTreeRef) collectPagesAndSections() page.Pages {
|
||||
var pas page.Pages
|
||||
c.m.collectPagesAndSections(c.key, func(c *contentNode) {
|
||||
|
|
|
@ -803,6 +803,12 @@ func (b *pagesMapBucket) getPages() page.Pages {
|
|||
return b.pages
|
||||
}
|
||||
|
||||
func (b *pagesMapBucket) getPagesRecursive() page.Pages {
|
||||
pages := b.owner.treeRef.collectPagesRecursive()
|
||||
page.SortByDefault(pages)
|
||||
return pages
|
||||
}
|
||||
|
||||
func (b *pagesMapBucket) getPagesAndSections() page.Pages {
|
||||
b.pagesAndSectionsInit.Do(func() {
|
||||
b.pagesAndSections = b.owner.treeRef.collectPagesAndSections()
|
||||
|
|
|
@ -171,6 +171,14 @@ func (p *pageState) getPages() page.Pages {
|
|||
return b.getPages()
|
||||
}
|
||||
|
||||
func (p *pageState) getPagesRecursive() page.Pages {
|
||||
b := p.bucket
|
||||
if b == nil {
|
||||
return nil
|
||||
}
|
||||
return b.getPagesRecursive()
|
||||
}
|
||||
|
||||
func (p *pageState) getPagesAndSections() page.Pages {
|
||||
b := p.bucket
|
||||
if b == nil {
|
||||
|
@ -179,6 +187,24 @@ func (p *pageState) getPagesAndSections() page.Pages {
|
|||
return b.getPagesAndSections()
|
||||
}
|
||||
|
||||
func (p *pageState) RegularPagesRecursive() page.Pages {
|
||||
p.regularPagesRecursiveInit.Do(func() {
|
||||
var pages page.Pages
|
||||
switch p.Kind() {
|
||||
case page.KindSection:
|
||||
pages = p.getPagesRecursive()
|
||||
default:
|
||||
pages = p.RegularPages()
|
||||
}
|
||||
p.regularPagesRecursive = pages
|
||||
})
|
||||
return p.regularPagesRecursive
|
||||
}
|
||||
|
||||
func (p *pageState) PagesRecursive() page.Pages {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (p *pageState) RegularPages() page.Pages {
|
||||
p.regularPagesInit.Do(func() {
|
||||
var pages page.Pages
|
||||
|
|
|
@ -141,4 +141,6 @@ type pagePages struct {
|
|||
|
||||
regularPagesInit sync.Once
|
||||
regularPages page.Pages
|
||||
regularPagesRecursiveInit sync.Once
|
||||
regularPagesRecursive page.Pages
|
||||
}
|
||||
|
|
|
@ -383,3 +383,42 @@ func TestShouldDoSimpleLookup(t *testing.T) {
|
|||
c.Assert(shouldDoSimpleLookup("docs/foo.md"), qt.Equals, false)
|
||||
|
||||
}
|
||||
|
||||
func TestRegularPagesRecursive(t *testing.T) {
|
||||
b := newTestSitesBuilder(t)
|
||||
|
||||
b.WithConfigFile("yaml", `
|
||||
baseURL: "http://example.org/"
|
||||
title: "My New Hugo Site"
|
||||
|
||||
`)
|
||||
|
||||
b.WithContent(
|
||||
"docs/1.md", "\n---title: docs1\n---",
|
||||
"docs/sect1/_index.md", "\n---title: docs_sect1\n---",
|
||||
"docs/sect1/ps1.md", "\n---title: docs_sect1_ps1\n---",
|
||||
"docs/sect1/ps2.md", "\n---title: docs_sect1_ps2\n---",
|
||||
"docs/sect1/sect1_s2/_index.md", "\n---title: docs_sect1_s2\n---",
|
||||
"docs/sect1/sect1_s2/ps2_1.md", "\n---title: docs_sect1_s2_1\n---",
|
||||
"docs/sect2/_index.md", "\n---title: docs_sect2\n---",
|
||||
"docs/sect2/ps1.md", "\n---title: docs_sect2_ps1\n---",
|
||||
"docs/sect2/ps2.md", "\n---title: docs_sect2_ps2\n---",
|
||||
"news/1.md", "\n---title: news1\n---",
|
||||
)
|
||||
|
||||
b.WithTemplates("index.html", `
|
||||
{{ $sect1 := site.GetPage "sect1" }}
|
||||
|
||||
Sect1 RegularPagesRecursive: {{ range $sect1.RegularPagesRecursive }}{{ .Kind }}:{{ .RelPermalink}}|{{ end }}|End.
|
||||
|
||||
`)
|
||||
|
||||
b.Build(BuildCfg{})
|
||||
|
||||
b.AssertFileContent("public/index.html", `
|
||||
Sect1 RegularPagesRecursive: page:/docs/sect1/ps1/|page:/docs/sect1/ps2/|page:/docs/sect1/sect1_s2/ps2_1/||End.
|
||||
|
||||
|
||||
`)
|
||||
|
||||
}
|
||||
|
|
|
@ -64,6 +64,10 @@ type ChildCareProvider interface {
|
|||
// use RegularPages.
|
||||
RegularPages() Pages
|
||||
|
||||
// RegularPagesRecursive returns all regular pages below the current
|
||||
// section.
|
||||
RegularPagesRecursive() Pages
|
||||
|
||||
Resources() resource.Resources
|
||||
}
|
||||
|
||||
|
|
|
@ -294,6 +294,10 @@ func (p *nopPage) RegularPages() Pages {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (p *nopPage) RegularPagesRecursive() Pages {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (p *nopPage) Paginate(seq interface{}, options ...interface{}) (*Pager, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
|
|
@ -364,6 +364,10 @@ func (p *testPage) RegularPages() Pages {
|
|||
panic("not implemented")
|
||||
}
|
||||
|
||||
func (p *testPage) RegularPagesRecursive() Pages {
|
||||
panic("not implemented")
|
||||
}
|
||||
|
||||
func (p *testPage) Paginate(seq interface{}, options ...interface{}) (*Pager, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue