Add Page.FirstSection

It was added and then removed by accident some time ago. Let us add it again, as it is useful.
This commit is contained in:
Bjørn Erik Pedersen 2018-07-23 20:19:32 +02:00
parent c6b599a06d
commit 016dd4a69a
No known key found for this signature in database
GPG key ID: 330E6E2BD4859D8F
2 changed files with 25 additions and 0 deletions

View file

@ -58,6 +58,29 @@ func (p *Page) CurrentSection() *Page {
return v.parent return v.parent
} }
// FirstSection returns the section on level 1 below home, e.g. "/docs".
// For the home page, this will return itself.
func (p *Page) FirstSection() *Page {
v := p
if v.origOnCopy != nil {
v = v.origOnCopy
}
if v.parent == nil || v.parent.IsHome() {
return v
}
parent := v.parent
for {
current := parent
parent = parent.parent
if parent == nil || parent.IsHome() {
return current
}
}
}
// InSection returns whether the given page is in the current section. // InSection returns whether the given page is in the current section.
// Note that this will always return false for pages that are // Note that this will always return false for pages that are
// not either regular, home or section pages. // not either regular, home or section pages.

View file

@ -176,6 +176,7 @@ PAG|{{ .Title }}|{{ $sect.InSection . }}
active, err := home.InSection(home) active, err := home.InSection(home)
assert.NoError(err) assert.NoError(err)
assert.True(active) assert.True(active)
assert.Equal(p, p.FirstSection())
}}, }},
{"l1", func(p *Page) { {"l1", func(p *Page) {
assert.Equal("L1s", p.title) assert.Equal("L1s", p.title)
@ -249,6 +250,7 @@ PAG|{{ .Title }}|{{ $sect.InSection . }}
isAncestor, err = p.IsAncestor(l1) isAncestor, err = p.IsAncestor(l1)
assert.NoError(err) assert.NoError(err)
assert.False(isAncestor) assert.False(isAncestor)
assert.Equal(l1, p.FirstSection())
}}, }},
{"perm a,link", func(p *Page) { {"perm a,link", func(p *Page) {