diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2021-07-30 10:56:45 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2021-07-30 21:07:52 +0200 |
commit | e3dc5240f01fd5ec67643e40f27c026d707da110 (patch) | |
tree | b7558806edbdcfa86d2d73dea83c3455e11c7678 /navigation | |
parent | 268065cb2d8339392766a23703beaf7cc49d6b5c (diff) |
Improve handling of <nil> Params
Fixes #8825
Diffstat (limited to 'navigation')
-rw-r--r-- | navigation/menu.go | 20 | ||||
-rw-r--r-- | navigation/pagemenus.go | 12 |
2 files changed, 26 insertions, 6 deletions
diff --git a/navigation/menu.go b/navigation/menu.go index dd62f825e..b4f5e7af5 100644 --- a/navigation/menu.go +++ b/navigation/menu.go @@ -14,10 +14,13 @@ package navigation import ( + "fmt" "html/template" "sort" "strings" + "github.com/pkg/errors" + "github.com/gohugoio/hugo/common/maps" "github.com/gohugoio/hugo/common/types" "github.com/gohugoio/hugo/compare" @@ -65,6 +68,7 @@ func (m *MenuEntry) URL() string { type Page interface { LinkTitle() string RelPermalink() string + Path() string Section() string Weight() int IsPage() bool @@ -127,7 +131,8 @@ func (m *MenuEntry) isSamePage(p Page) bool { return false } -func (m *MenuEntry) MarshallMap(ime map[string]interface{}) { +func (m *MenuEntry) MarshallMap(ime map[string]interface{}) error { + var err error for k, v := range ime { loki := strings.ToLower(k) switch loki { @@ -150,10 +155,19 @@ func (m *MenuEntry) MarshallMap(ime map[string]interface{}) { case "parent": m.Parent = cast.ToString(v) case "params": - m.Params = maps.MustToParamsAndPrepare(v) - + var ok bool + m.Params, ok = maps.ToParamsAndPrepare(v) + if !ok { + err = fmt.Errorf("cannot convert %T to Params", v) + } } } + + if err != nil { + return errors.Wrapf(err, "failed to marshal menu entry %q", m.KeyName()) + } + + return nil } func (m Menu) Add(me *MenuEntry) Menu { diff --git a/navigation/pagemenus.go b/navigation/pagemenus.go index f783e30cf..46ed5221e 100644 --- a/navigation/pagemenus.go +++ b/navigation/pagemenus.go @@ -75,10 +75,14 @@ func PageMenusFromPage(p Page) (PageMenus, error) { return pm, nil } + var wrapErr = func(err error) error { + return errors.Wrapf(err, "unable to process menus for page %q", p.Path()) + } + // Could be a structured menu entry menus, err := maps.ToStringMapE(ms) if err != nil { - return pm, errors.Wrapf(err, "unable to process menus for %q", p.LinkTitle()) + return pm, wrapErr(err) } for name, menu := range menus { @@ -86,10 +90,12 @@ func PageMenusFromPage(p Page) (PageMenus, error) { if menu != nil { ime, err := maps.ToStringMapE(menu) if err != nil { - return pm, errors.Wrapf(err, "unable to process menus for %q", p.LinkTitle()) + return pm, wrapErr(err) } - menuEntry.MarshallMap(ime) + if err = menuEntry.MarshallMap(ime); err != nil { + return pm, wrapErr(err) + } } pm[name] = &menuEntry } |