mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-07 20:30:36 -05:00
hugolib: Cache the value of Page's RelPermalink
This commit is contained in:
parent
7e0fa13faa
commit
fe9fd0acf4
1 changed files with 32 additions and 25 deletions
|
@ -189,7 +189,8 @@ type Page struct {
|
|||
RSSLink template.HTML
|
||||
|
||||
URLPath
|
||||
permalink *url.URL
|
||||
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,34 +929,39 @@ func (p *Page) URL() string {
|
|||
}
|
||||
|
||||
func (p *Page) RelPermalink() string {
|
||||
link := p.getPermalink()
|
||||
p.relPermalinkInit.Do(func() {
|
||||
link := p.getPermalink()
|
||||
|
||||
if p.s.Info.canonifyURLs {
|
||||
// replacements for relpermalink with baseURL on the form http://myhost.com/sub/ will fail later on
|
||||
// have to return the URL relative from baseURL
|
||||
relpath, err := helpers.GetRelativePath(link.String(), string(p.Site.BaseURL))
|
||||
if err != nil {
|
||||
return ""
|
||||
if p.s.Info.canonifyURLs {
|
||||
// replacements for relpermalink with baseURL on the form http://myhost.com/sub/ will fail later on
|
||||
// have to return the URL relative from baseURL
|
||||
relpath, err := helpers.GetRelativePath(link.String(), string(p.Site.BaseURL))
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
relpath = filepath.ToSlash(relpath)
|
||||
|
||||
if relpath[0] == '.' {
|
||||
relpath = relpath[1:]
|
||||
}
|
||||
|
||||
if !strings.HasPrefix(relpath, "/") {
|
||||
relpath = "/" + relpath
|
||||
}
|
||||
|
||||
p.relPermalink = relpath
|
||||
return
|
||||
}
|
||||
|
||||
relpath = filepath.ToSlash(relpath)
|
||||
link.Scheme = ""
|
||||
link.Host = ""
|
||||
link.User = nil
|
||||
link.Opaque = ""
|
||||
p.relPermalink = link.String()
|
||||
})
|
||||
|
||||
if relpath[0] == '.' {
|
||||
relpath = relpath[1:]
|
||||
}
|
||||
|
||||
if !strings.HasPrefix(relpath, "/") {
|
||||
relpath = "/" + relpath
|
||||
}
|
||||
|
||||
return relpath
|
||||
}
|
||||
|
||||
link.Scheme = ""
|
||||
link.Host = ""
|
||||
link.User = nil
|
||||
link.Opaque = ""
|
||||
return link.String()
|
||||
return p.relPermalink
|
||||
}
|
||||
|
||||
var ErrHasDraftAndPublished = errors.New("both draft and published parameters were found in page's frontmatter")
|
||||
|
|
Loading…
Reference in a new issue