From 245928a1ff49c6a1c25524f08bf538b0ab88f1a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Wed, 29 May 2024 13:23:36 +0200 Subject: [PATCH] content adapter: Add support for menus in AddPage Fixes #12507 --- hugolib/page__menus.go | 16 ++++++++++- .../pagesfromgotmpl_integration_test.go | 28 +++++++++++++++++++ magefile.go | 6 ++-- navigation/pagemenus.go | 15 ++-------- resources/page/pagemeta/page_frontmatter.go | 1 + 5 files changed, 50 insertions(+), 16 deletions(-) diff --git a/hugolib/page__menus.go b/hugolib/page__menus.go index 5bed2bc033d..1666036ce58 100644 --- a/hugolib/page__menus.go +++ b/hugolib/page__menus.go @@ -62,8 +62,22 @@ func (p *pageMenus) init() { p.p, ) + params := p.p.Params() + + var menus any + var ok bool + + if p.p.m.pageConfig.Menus != nil { + menus = p.p.m.pageConfig.Menus + } else { + menus, ok = params["menus"] + if !ok { + menus = params["menu"] + } + } + var err error - p.pm, err = navigation.PageMenusFromPage(p.p) + p.pm, err = navigation.PageMenusFromPage(menus, p.p) if err != nil { p.p.s.Log.Errorln(p.p.wrapError(err)) } diff --git a/hugolib/pagesfromdata/pagesfromgotmpl_integration_test.go b/hugolib/pagesfromdata/pagesfromgotmpl_integration_test.go index c7e3d96c7b8..3a37c233b96 100644 --- a/hugolib/pagesfromdata/pagesfromgotmpl_integration_test.go +++ b/hugolib/pagesfromdata/pagesfromgotmpl_integration_test.go @@ -610,3 +610,31 @@ foo b.AssertFileContent("public/a/index.html", "|xfoo|") b.AssertFileContent("public/b/index.html", "|foo|") // fails } + +func TestPagesFromGoTmplMenus(t *testing.T) { + t.Parallel() + + files := ` +-- hugo.toml -- +disableKinds = ['rss','section','sitemap','taxonomy','term'] + +[menus] +[[menus.main]] +name = "Main" +[[menus.footer]] +name = "Footer" +-- content/_content.gotmpl -- +{{ .AddPage (dict "path" "p1" "title" "p1" "menus" "main" ) }} +{{ .AddPage (dict "path" "p2" "title" "p2" "menus" (slice "main" "footer")) }} +-- layouts/index.html -- +Main: {{ range index site.Menus.main }}{{ .Name }}|{{ end }}| +Footer: {{ range index site.Menus.footer }}{{ .Name }}|{{ end }}| + +` + b := hugolib.Test(t, files) + + b.AssertFileContent("public/index.html", + "Main: Main|p1|p2||", + "Footer: Footer|p2||", + ) +} diff --git a/magefile.go b/magefile.go index 677c59d2c1c..ce2cd41ea84 100644 --- a/magefile.go +++ b/magefile.go @@ -167,19 +167,19 @@ func testGoFlags() string { // Note that we don't run with the extended tag. Currently not supported in 32 bit. func Test386() error { env := map[string]string{"GOARCH": "386", "GOFLAGS": testGoFlags()} - return runCmd(env, goexe, "test", "./...") + return runCmd(env, goexe, "test", "-p", "2", "./...") } // Run tests func Test() error { env := map[string]string{"GOFLAGS": testGoFlags()} - return runCmd(env, goexe, "test", "./...", "-tags", buildTags()) + return runCmd(env, goexe, "test", "-p", "2", "./...", "-tags", buildTags()) } // Run tests with race detector func TestRace() error { env := map[string]string{"GOFLAGS": testGoFlags()} - return runCmd(env, goexe, "test", "-race", "./...", "-tags", buildTags()) + return runCmd(env, goexe, "test", "-p", "2", "-race", "./...", "-tags", buildTags()) } // Run gofmt linter diff --git a/navigation/pagemenus.go b/navigation/pagemenus.go index 3ff49cf8143..0919d93bb35 100644 --- a/navigation/pagemenus.go +++ b/navigation/pagemenus.go @@ -41,20 +41,11 @@ type MenuQueryProvider interface { IsMenuCurrent(menuID string, inme *MenuEntry) bool } -func PageMenusFromPage(p Page) (PageMenus, error) { - params := p.Params() - - ms, ok := params["menus"] - if !ok { - ms, ok = params["menu"] - } - - pm := PageMenus{} - - if !ok { +func PageMenusFromPage(ms any, p Page) (PageMenus, error) { + if ms == nil { return nil, nil } - + pm := PageMenus{} me := MenuEntry{} SetPageValues(&me, p) diff --git a/resources/page/pagemeta/page_frontmatter.go b/resources/page/pagemeta/page_frontmatter.go index 10ba2a991af..c901ab57b5f 100644 --- a/resources/page/pagemeta/page_frontmatter.go +++ b/resources/page/pagemeta/page_frontmatter.go @@ -101,6 +101,7 @@ type PageConfig struct { Cascade []map[string]any Sitemap config.SitemapConfig Build BuildConfig + Menus []string // User defined params. Params maps.Params