mirror of
https://github.com/gohugoio/hugo.git
synced 2025-04-26 05:30:54 +03:00
parent
268065cb2d
commit
e3dc5240f0
6 changed files with 74 additions and 11 deletions
|
@ -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 {
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue