hugolib: Cache the value of Page's RelPermalink

This commit is contained in:
Bjørn Erik Pedersen 2017-02-20 08:51:18 +01:00
parent 7e0fa13faa
commit fe9fd0acf4

View file

@ -190,6 +190,7 @@ type Page struct {
URLPath
permalink *url.URL
relPermalink string
paginator *Pager
@ -213,6 +214,7 @@ type pageInit struct {
plainWordsInit sync.Once
renderingConfigInit sync.Once
pageURLInit sync.Once
relPermalinkInit sync.Once
}
// IsNode returns whether this is an item of one of the list types in Hugo,
@ -927,6 +929,7 @@ func (p *Page) URL() string {
}
func (p *Page) RelPermalink() string {
p.relPermalinkInit.Do(func() {
link := p.getPermalink()
if p.s.Info.canonifyURLs {
@ -934,7 +937,7 @@ func (p *Page) RelPermalink() string {
// have to return the URL relative from baseURL
relpath, err := helpers.GetRelativePath(link.String(), string(p.Site.BaseURL))
if err != nil {
return ""
return
}
relpath = filepath.ToSlash(relpath)
@ -947,14 +950,18 @@ func (p *Page) RelPermalink() string {
relpath = "/" + relpath
}
return relpath
p.relPermalink = relpath
return
}
link.Scheme = ""
link.Host = ""
link.User = nil
link.Opaque = ""
return link.String()
p.relPermalink = link.String()
})
return p.relPermalink
}
var ErrHasDraftAndPublished = errors.New("both draft and published parameters were found in page's frontmatter")