Permalink to include multiple directories levels
authorNoah Campbell <noahcampbell@gmail.com>
Tue, 8 Oct 2013 16:33:57 +0000 (18:33 +0200)
committerNoah Campbell <noahcampbell@gmail.com>
Tue, 8 Oct 2013 16:44:15 +0000 (18:44 +0200)
hugolib/page.go
hugolib/page_permalink_test.go
hugolib/site.go
hugolib/site_test.go

index dcfa841ca10eb4334863dd02257880ba715952b4..6734dcccd7242e92b880d355f86c759e6dec3f10 100644 (file)
@@ -46,7 +46,7 @@ type Page struct {
        Tmpl        bundle.Template
        Markup      string
        renderable  bool
-       layout                  string
+       layout      string
        PageMeta
        File
        Position
@@ -192,7 +192,7 @@ func (page *Page) Layout(l ...string) []string {
 
 func layouts(types string, layout string) (layouts []string) {
        t := strings.Split(types, "/")
-       for i := range t  {
+       for i := range t {
                search := t[:len(t)-i]
                layouts = append(layouts, fmt.Sprintf("%s/%s.html", strings.ToLower(path.Join(search...)), layout))
        }
@@ -223,15 +223,15 @@ func (p *Page) analyzePage() {
 
 func (p *Page) permalink() (*url.URL, error) {
        baseUrl := string(p.Site.BaseUrl)
-       section := strings.TrimSpace(p.Section)
+       dir := strings.TrimSpace(p.Dir)
        pSlug := strings.TrimSpace(p.Slug)
        pUrl := strings.TrimSpace(p.Url)
        var permalink string
        if len(pSlug) > 0 {
                if p.Site.Config != nil && p.Site.Config.UglyUrls {
-                       permalink = section + "/" + p.Slug + "." + p.Extension
+                       permalink = path.Join(dir, p.Slug, p.Extension)
                } else {
-                       permalink = section + "/" + p.Slug + "/"
+                       permalink = dir + "/" + p.Slug + "/"
                }
        } else if len(pUrl) > 2 {
                permalink = pUrl
@@ -239,10 +239,10 @@ func (p *Page) permalink() (*url.URL, error) {
                _, t := path.Split(p.FileName)
                if p.Site.Config != nil && p.Site.Config.UglyUrls {
                        x := replaceExtension(strings.TrimSpace(t), p.Extension)
-                       permalink = section + "/" + x
+                       permalink = path.Join(dir, x)
                } else {
                        file, _ := fileExt(strings.TrimSpace(t))
-                       permalink = section + "/" + file
+                       permalink = path.Join(dir, file)
                }
        }
 
index e40a7836235a26c905205bfbcf109ef745721a15..b4ef66ba768c9e1267e39c630e46418499245b35 100644 (file)
@@ -7,7 +7,7 @@ import (
 
 func TestPermalink(t *testing.T) {
        tests := []struct {
-               base     template.URL
+               base        template.URL
                expectedAbs string
                expectedRel string
        }{
@@ -18,10 +18,10 @@ func TestPermalink(t *testing.T) {
        for _, test := range tests {
                p := &Page{
                        Node: Node{
-                               UrlPath: UrlPath{Section: "x/y/z"},
+                               UrlPath: UrlPath{Section: "z"},
                                Site:    SiteInfo{BaseUrl: test.base},
                        },
-                       File: File{FileName: "x/y/z/boofar.md"},
+                       File: File{FileName: "x/y/z/boofar.md", Dir: "x/y/z"},
                }
 
                u, err := p.Permalink()
index e5d4fab4427fa4f0a89f7db479cc0c8b4076457a..076e8ce0ffe3a957914a8483fb66945cdcb7e78a 100644 (file)
@@ -67,7 +67,7 @@ type Site struct {
        Transformer transform.Transformer
        Target      target.Output
        Alias       target.AliasPublisher
-       Completed         chan bool
+       Completed   chan bool
 }
 
 type SiteInfo struct {
@@ -487,7 +487,7 @@ func (s *Site) RenderHomePage() error {
                        n.Data["Pages"] = s.Pages[:9]
                }
        }
-       err := s.render(n, "/", "index.html", "_default/single.html")
+       err := s.render(n, "/", "index.html")
        if err != nil {
                return err
        }
@@ -552,8 +552,7 @@ func (s *Site) render(d interface{}, out string, layouts ...string) (err error)
        }
 
        section := ""
-       page, ok := d.(*Page)
-       if ok {
+       if page, ok := d.(*Page); ok {
                section, _ = page.RelPermalink()
        }
 
index 7fb562f92f02998578d3ed65fb42732806e46f0d..acf3fd56a44c45f72a62c8f4d3a64e3e6f65df2b 100644 (file)
@@ -2,11 +2,11 @@ package hugolib
 
 import (
        "bytes"
-       "io"
        "fmt"
        "github.com/spf13/hugo/source"
        "github.com/spf13/hugo/target"
        "html/template"
+       "io"
        "strings"
        "testing"
 )
@@ -187,6 +187,8 @@ func TestTargetPath(t *testing.T) {
                expectedSection string
        }{
                {"content/a/file.md", PAGE_URL_SPECIFIED, "mycategory/my-whatever-content/index.html", "a"},
+               {"content/x/y/deepfile.md", SIMPLE_PAGE, "x/y/deepfile.html", "x/y"},
+               {"content/x/y/z/deeperfile.md", SIMPLE_PAGE, "x/y/z/deeperfile.html", "x/y/z"},
                {"content/b/file.md", SIMPLE_PAGE, "b/file.html", "b"},
                {"a/file.md", SIMPLE_PAGE, "a/file.html", "a"},
                {"file.md", SIMPLE_PAGE, "file.html", ""},