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
Position
Node
pageMenus PageMenus
pageMenusInit sync.Once
}
type Source struct {
@ -569,7 +571,8 @@ func (page *Page) IsMenuCurrent(menu string, inme *MenuEntry) bool {
}
func (page *Page) Menus() PageMenus {
ret := PageMenus{}
page.pageMenusInit.Do(func() {
page.pageMenus = PageMenus{}
if ms, ok := page.Params["menu"]; ok {
link, _ := page.RelPermalink()
@ -581,18 +584,18 @@ func (page *Page) Menus() PageMenus {
if err == nil {
me.Menu = mname
ret[mname] = &me
return ret
page.pageMenus[mname] = &me
return
}
// Could be an slice of strings
// Could be a slice of strings
mnames, err := cast.ToStringSliceE(ms)
if err == nil {
for _, mname := range mnames {
me.Menu = mname
ret[mname] = &me
return ret
page.pageMenus[mname] = &me
return
}
}
@ -613,12 +616,12 @@ func (page *Page) Menus() PageMenus {
}
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 {