Fix for page in multiple menus
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Thu, 10 Mar 2016 09:31:12 +0000 (10:31 +0100)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Thu, 10 Mar 2016 09:31:12 +0000 (10:31 +0100)
Fixes #1934

hugolib/menu_test.go
hugolib/page.go

index dff0cd6991b5df1fd17cfccab2571d93d27be79c..dbfc27ad1ba03d4f3c96799241d22d0915180f1c 100644 (file)
@@ -344,6 +344,38 @@ func TestMenuURL(t *testing.T) {
 
 }
 
+// Issue #1934
+func TestYAMLMenuWithMultipleEntries(t *testing.T) {
+       viper.Reset()
+       defer viper.Reset()
+
+       ps1 := []byte(`---
+title: "Yaml 1"
+weight: 5
+menu: ["p_one", "p_two"]
+---
+Yaml Front Matter with Menu Pages`)
+
+       ps2 := []byte(`---
+title: "Yaml 2"
+weight: 5
+menu:
+    p_three:
+    p_four:
+---
+Yaml Front Matter with Menu Pages`)
+
+       s := setupMenuTests(t, []source.ByteSource{
+               {filepath.FromSlash("sect/yaml1.md"), ps1},
+               {filepath.FromSlash("sect/yaml2.md"), ps2}})
+
+       p1 := s.Pages[0]
+       assert.Len(t, p1.Menus(), 2, "List YAML")
+       p2 := s.Pages[1]
+       assert.Len(t, p2.Menus(), 2, "Map YAML")
+
+}
+
 // issue #719
 func TestMenuWithUnicodeURLs(t *testing.T) {
 
index 407b7c6db0f4e100ce0db2f4f7209212593f452e..97f696f0bb3ed3fc50cedbacf3c1c74fc005e308 100644 (file)
@@ -759,8 +759,8 @@ func (p *Page) Menus() PageMenus {
                                for _, mname := range mnames {
                                        me.Menu = mname
                                        p.pageMenus[mname] = &me
-                                       return
                                }
+                               return
                        }
 
                        // Could be a structured menu entry
@@ -772,14 +772,15 @@ func (p *Page) Menus() PageMenus {
 
                        for name, menu := range menus {
                                menuEntry := MenuEntry{Name: p.LinkTitle(), URL: link, Weight: p.Weight, Menu: name}
-                               jww.DEBUG.Printf("found menu: %q, in %q\n", name, p.Title)
+                               if menu != nil {
+                                       jww.DEBUG.Printf("found menu: %q, in %q\n", name, p.Title)
+                                       ime, err := cast.ToStringMapE(menu)
+                                       if err != nil {
+                                               jww.ERROR.Printf("unable to process menus for %q: %s", p.Title, err)
+                                       }
 
-                               ime, err := cast.ToStringMapE(menu)
-                               if err != nil {
-                                       jww.ERROR.Printf("unable to process menus for %q\n", p.Title)
+                                       menuEntry.MarshallMap(ime)
                                }
-
-                               menuEntry.MarshallMap(ime)
                                p.pageMenus[name] = &menuEntry
                        }
                }