shithub: hugo

Download patch

ref: 4993152dda39bceb3585b0bef8717a1af0509dd1
parent: 6e1268f45be9995c3d503fa34bb5f63a63f49e00
author: Noah Campbell <[email protected]>
date: Tue Oct 8 14:33:57 EDT 2013

Permalink to include multiple directories levels

--- a/hugolib/page.go
+++ b/hugolib/page.go
@@ -46,7 +46,7 @@
 	Tmpl        bundle.Template
 	Markup      string
 	renderable  bool
-	layout			string
+	layout      string
 	PageMeta
 	File
 	Position
@@ -192,7 +192,7 @@
 
 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) 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 @@
 		_, 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)
 		}
 	}
 
--- a/hugolib/page_permalink_test.go
+++ b/hugolib/page_permalink_test.go
@@ -7,7 +7,7 @@
 
 func TestPermalink(t *testing.T) {
 	tests := []struct {
-		base     template.URL
+		base        template.URL
 		expectedAbs string
 		expectedRel string
 	}{
@@ -18,10 +18,10 @@
 	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()
--- a/hugolib/site.go
+++ b/hugolib/site.go
@@ -67,7 +67,7 @@
 	Transformer transform.Transformer
 	Target      target.Output
 	Alias       target.AliasPublisher
-	Completed	  chan bool
+	Completed   chan bool
 }
 
 type SiteInfo struct {
@@ -487,7 +487,7 @@
 			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 @@
 	}
 
 	section := ""
-	page, ok := d.(*Page)
-	if ok {
+	if page, ok := d.(*Page); ok {
 		section, _ = page.RelPermalink()
 	}
 
--- a/hugolib/site_test.go
+++ b/hugolib/site_test.go
@@ -2,11 +2,11 @@
 
 import (
 	"bytes"
-	"io"
 	"fmt"
 	"github.com/spf13/hugo/source"
 	"github.com/spf13/hugo/target"
 	"html/template"
+	"io"
 	"strings"
 	"testing"
 )
@@ -187,6 +187,8 @@
 		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", ""},