mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-21 20:46:30 -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
|
RSSLink template.HTML
|
||||||
|
|
||||||
URLPath
|
URLPath
|
||||||
permalink *url.URL
|
permalink *url.URL
|
||||||
|
relPermalink string
|
||||||
|
|
||||||
paginator *Pager
|
paginator *Pager
|
||||||
|
|
||||||
|
@ -213,6 +214,7 @@ type pageInit struct {
|
||||||
plainWordsInit sync.Once
|
plainWordsInit sync.Once
|
||||||
renderingConfigInit sync.Once
|
renderingConfigInit sync.Once
|
||||||
pageURLInit sync.Once
|
pageURLInit sync.Once
|
||||||
|
relPermalinkInit sync.Once
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsNode returns whether this is an item of one of the list types in Hugo,
|
// 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 {
|
func (p *Page) RelPermalink() string {
|
||||||
link := p.getPermalink()
|
p.relPermalinkInit.Do(func() {
|
||||||
|
link := p.getPermalink()
|
||||||
|
|
||||||
if p.s.Info.canonifyURLs {
|
if p.s.Info.canonifyURLs {
|
||||||
// replacements for relpermalink with baseURL on the form http://myhost.com/sub/ will fail later on
|
// replacements for relpermalink with baseURL on the form http://myhost.com/sub/ will fail later on
|
||||||
// have to return the URL relative from baseURL
|
// have to return the URL relative from baseURL
|
||||||
relpath, err := helpers.GetRelativePath(link.String(), string(p.Site.BaseURL))
|
relpath, err := helpers.GetRelativePath(link.String(), string(p.Site.BaseURL))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return ""
|
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] == '.' {
|
return p.relPermalink
|
||||||
relpath = relpath[1:]
|
|
||||||
}
|
|
||||||
|
|
||||||
if !strings.HasPrefix(relpath, "/") {
|
|
||||||
relpath = "/" + relpath
|
|
||||||
}
|
|
||||||
|
|
||||||
return relpath
|
|
||||||
}
|
|
||||||
|
|
||||||
link.Scheme = ""
|
|
||||||
link.Host = ""
|
|
||||||
link.User = nil
|
|
||||||
link.Opaque = ""
|
|
||||||
return link.String()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var ErrHasDraftAndPublished = errors.New("both draft and published parameters were found in page's frontmatter")
|
var ErrHasDraftAndPublished = errors.New("both draft and published parameters were found in page's frontmatter")
|
||||||
|
|
Loading…
Reference in a new issue