mirror of
https://github.com/gohugoio/hugo.git
synced 2025-05-01 06:37:34 +00:00
Build PageMenus only once
This commit is contained in:
parent
df734bc18a
commit
11a19e0760
1 changed files with 38 additions and 35 deletions
|
@ -71,6 +71,8 @@ type Page struct {
|
||||||
Source
|
Source
|
||||||
Position
|
Position
|
||||||
Node
|
Node
|
||||||
|
pageMenus PageMenus
|
||||||
|
pageMenusInit sync.Once
|
||||||
}
|
}
|
||||||
|
|
||||||
type Source struct {
|
type Source struct {
|
||||||
|
@ -569,56 +571,57 @@ func (page *Page) IsMenuCurrent(menu string, inme *MenuEntry) bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (page *Page) Menus() PageMenus {
|
func (page *Page) Menus() PageMenus {
|
||||||
ret := PageMenus{}
|
page.pageMenusInit.Do(func() {
|
||||||
|
page.pageMenus = PageMenus{}
|
||||||
|
|
||||||
if ms, ok := page.Params["menu"]; ok {
|
if ms, ok := page.Params["menu"]; ok {
|
||||||
link, _ := page.RelPermalink()
|
link, _ := page.RelPermalink()
|
||||||
|
|
||||||
me := MenuEntry{Name: page.LinkTitle(), Weight: page.Weight, Url: link}
|
me := MenuEntry{Name: page.LinkTitle(), Weight: page.Weight, Url: link}
|
||||||
|
|
||||||
// Could be the name of the menu to attach it to
|
// Could be the name of the menu to attach it to
|
||||||
mname, err := cast.ToStringE(ms)
|
mname, err := cast.ToStringE(ms)
|
||||||
|
|
||||||
if err == nil {
|
if err == nil {
|
||||||
me.Menu = mname
|
|
||||||
ret[mname] = &me
|
|
||||||
return ret
|
|
||||||
}
|
|
||||||
|
|
||||||
// Could be an slice of strings
|
|
||||||
mnames, err := cast.ToStringSliceE(ms)
|
|
||||||
|
|
||||||
if err == nil {
|
|
||||||
for _, mname := range mnames {
|
|
||||||
me.Menu = mname
|
me.Menu = mname
|
||||||
ret[mname] = &me
|
page.pageMenus[mname] = &me
|
||||||
return ret
|
return
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Could be a structured menu entry
|
// Could be a slice of strings
|
||||||
menus, err := cast.ToStringMapE(ms)
|
mnames, err := cast.ToStringSliceE(ms)
|
||||||
|
|
||||||
if err != nil {
|
if err == nil {
|
||||||
jww.ERROR.Printf("unable to process menus for %q\n", page.Title)
|
for _, mname := range mnames {
|
||||||
}
|
me.Menu = mname
|
||||||
|
page.pageMenus[mname] = &me
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for name, menu := range menus {
|
// Could be a structured menu entry
|
||||||
menuEntry := MenuEntry{Name: page.LinkTitle(), Url: link, Weight: page.Weight, Menu: name}
|
menus, err := cast.ToStringMapE(ms)
|
||||||
jww.DEBUG.Printf("found menu: %q, in %q\n", name, page.Title)
|
|
||||||
|
|
||||||
ime, err := cast.ToStringMapE(menu)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
jww.ERROR.Printf("unable to process menus for %q\n", page.Title)
|
jww.ERROR.Printf("unable to process menus for %q\n", page.Title)
|
||||||
}
|
}
|
||||||
|
|
||||||
menuEntry.MarshallMap(ime)
|
for name, menu := range menus {
|
||||||
ret[name] = &menuEntry
|
menuEntry := MenuEntry{Name: page.LinkTitle(), Url: link, Weight: page.Weight, Menu: name}
|
||||||
}
|
jww.DEBUG.Printf("found menu: %q, in %q\n", name, page.Title)
|
||||||
return ret
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
ime, err := cast.ToStringMapE(menu)
|
||||||
|
if err != nil {
|
||||||
|
jww.ERROR.Printf("unable to process menus for %q\n", page.Title)
|
||||||
|
}
|
||||||
|
|
||||||
|
menuEntry.MarshallMap(ime)
|
||||||
|
page.pageMenus[name] = &menuEntry
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
return page.pageMenus
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *Page) Render(layout ...string) template.HTML {
|
func (p *Page) Render(layout ...string) template.HTML {
|
||||||
|
|
Loading…
Add table
Reference in a new issue