Build PageMenus only once

This commit is contained in:
bep 2015-02-04 21:27:27 +01:00
parent df734bc18a
commit 11a19e0760

View file

@ -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,7 +571,8 @@ 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()
@ -581,18 +584,18 @@ func (page *Page) Menus() PageMenus {
if err == nil { if err == nil {
me.Menu = mname me.Menu = mname
ret[mname] = &me page.pageMenus[mname] = &me
return ret return
} }
// Could be an slice of strings // Could be a slice of strings
mnames, err := cast.ToStringSliceE(ms) mnames, err := cast.ToStringSliceE(ms)
if err == nil { if err == nil {
for _, mname := range mnames { for _, mname := range mnames {
me.Menu = mname me.Menu = mname
ret[mname] = &me page.pageMenus[mname] = &me
return ret return
} }
} }
@ -613,12 +616,12 @@ func (page *Page) Menus() PageMenus {
} }
menuEntry.MarshallMap(ime) menuEntry.MarshallMap(ime)
ret[name] = &menuEntry page.pageMenus[name] = &menuEntry
} }
return ret
} }
})
return nil return page.pageMenus
} }
func (p *Page) Render(layout ...string) template.HTML { func (p *Page) Render(layout ...string) template.HTML {