diff options
Diffstat (limited to 'hugolib')
-rw-r--r-- | hugolib/site_sections.go | 12 | ||||
-rw-r--r-- | hugolib/site_sections_test.go | 10 |
2 files changed, 22 insertions, 0 deletions
diff --git a/hugolib/site_sections.go b/hugolib/site_sections.go index 4f4a217d5..ee9825761 100644 --- a/hugolib/site_sections.go +++ b/hugolib/site_sections.go @@ -109,6 +109,18 @@ func (p *Page) IsAncestor(other interface{}) (bool, error) { return helpers.HasStringsPrefix(pp.sections, p.sections), nil } +// Equals returns whether the current page equals the given page. +// Note that this is more accurate than doing `{{ if eq $page $otherPage }}` +// since a Page can be embedded in another type. +func (p *Page) Equals(other interface{}) (bool, error) { + pp, err := unwrapPage(other) + if err != nil { + return false, err + } + + return p == pp, nil +} + func unwrapPage(in interface{}) (*Page, error) { if po, ok := in.(*PageOutput); ok { in = po.Page diff --git a/hugolib/site_sections_test.go b/hugolib/site_sections_test.go index 441391197..950900140 100644 --- a/hugolib/site_sections_test.go +++ b/hugolib/site_sections_test.go @@ -149,6 +149,16 @@ PAG|{{ .Title }}|{{ $sect.InSection . }} d := p.s.getPage(KindSection, "empty2", "b", "c", "d") assert.NotNil(d) assert.Equal("T41_-1", d.Title) + + equals, err := c.Equals(d) + assert.NoError(err) + assert.False(equals) + equals, err = c.Equals(c) + assert.NoError(err) + assert.True(equals) + _, err = c.Equals("asdf") + assert.Error(err) + }}, {"empty3", func(p *Page) { // b,c,d with regular page in b |