summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorspf13 <steve.francia@gmail.com>2013-08-17 23:53:35 -0400
committerspf13 <steve.francia@gmail.com>2013-08-17 23:53:35 -0400
commit8f330626bcbe3413b853dda98e17352af9067d44 (patch)
tree234ba57a3720e97d0726825d0ad05b4331de1ce6
parent0a79edd48aa46d800cc63ee61236ccad975fa532 (diff)
parentc713beba4d4ac00f17a28ab4aab10be1acadd0b1 (diff)
Merge branch 'noahcampbell-index_reporting'
-rw-r--r--hugolib/indexing_test.go16
-rw-r--r--hugolib/site.go52
2 files changed, 53 insertions, 15 deletions
diff --git a/hugolib/indexing_test.go b/hugolib/indexing_test.go
new file mode 100644
index 000000000..8bf74188b
--- /dev/null
+++ b/hugolib/indexing_test.go
@@ -0,0 +1,16 @@
+package hugolib
+
+import (
+ "strings"
+ "testing"
+)
+
+func TestSitePossibleIndexes(t *testing.T) {
+ site := new(Site)
+ page, _ := ReadFrom(strings.NewReader(PAGE_YAML_WITH_INDEXES_A), "path/to/page")
+ site.Pages = append(site.Pages, page)
+ indexes := site.possibleIndexes()
+ if !compareStringSlice(indexes, []string{"tags", "categories"}) {
+ t.Fatalf("possible indexes do not match [tags categories]. Got: %s", indexes)
+ }
+}
diff --git a/hugolib/site.go b/hugolib/site.go
index c0bce9f06..c9104564a 100644
--- a/hugolib/site.go
+++ b/hugolib/site.go
@@ -28,8 +28,6 @@ import (
//"sync"
)
-const slash = string(os.PathSeparator)
-
var DefaultTimer = nitro.Initalize()
type Site struct {
@@ -110,9 +108,13 @@ func (site *Site) Render() (err error) {
if err = site.RenderIndexes(); err != nil {
return
}
- site.RenderIndexesIndexes()
+ if err = site.RenderIndexesIndexes(); err != nil {
+ return
+ }
site.timerStep("render and write indexes")
- site.RenderLists()
+ if err = site.RenderLists(); err != nil {
+ return
+ }
site.timerStep("render and write lists")
if err = site.RenderPages(); err != nil {
return
@@ -324,9 +326,9 @@ func (s *Site) setOutFile(p *Page) {
if len(strings.TrimSpace(p.Slug)) > 0 {
// Use Slug if provided
if s.Config.UglyUrls {
- outfile = p.Slug + "." + p.Extension
+ outfile = strings.TrimSpace(p.Slug) + "." + p.Extension
} else {
- outfile = p.Slug + slash + "index." + p.Extension
+ outfile = filepath.Join(strings.TrimSpace(p.Slug), "index."+p.Extension)
}
} else {
// Fall back to filename
@@ -335,7 +337,7 @@ func (s *Site) setOutFile(p *Page) {
outfile = replaceExtension(strings.TrimSpace(t), p.Extension)
} else {
file, _ := fileExt(strings.TrimSpace(t))
- outfile = file + slash + "index." + p.Extension
+ outfile = filepath.Join(file, "index."+p.Extension)
}
}
@@ -386,6 +388,26 @@ func (s *Site) BuildSiteMeta() (err error) {
return
}
+func (s *Site) possibleIndexes() (indexes []string) {
+ for _, p := range s.Pages {
+ for k, _ := range p.Params {
+ if !inStringArray(indexes, k) {
+ indexes = append(indexes, k)
+ }
+ }
+ }
+ return
+}
+
+func inStringArray(arr []string, el string) bool {
+ for _, v := range arr {
+ if v == el {
+ return true
+ }
+ }
+ return false
+}
+
func (s *Site) RenderAliases() error {
for i, p := range s.Pages {
for _, a := range p.Aliases {
@@ -428,7 +450,7 @@ func (s *Site) RenderIndexes() error {
for k, o := range s.Indexes[plural] {
n := s.NewNode()
n.Title = strings.Title(k)
- url := Urlize(plural + slash + k)
+ url := Urlize(plural + "/" + k)
plink := url
if s.Config.UglyUrls {
n.Url = url + ".html"
@@ -441,7 +463,7 @@ func (s *Site) RenderIndexes() error {
n.Date = o[0].Date
n.Data[singular] = o
n.Data["Pages"] = o
- layout := "indexes" + slash + singular + ".html"
+ layout := "indexes/" + singular + ".html"
x, err := s.RenderThing(n, layout)
if err != nil {
return err
@@ -474,7 +496,7 @@ func (s *Site) RenderIndexes() error {
}
func (s *Site) RenderIndexesIndexes() (err error) {
- layout := "indexes" + slash + "indexes.html"
+ layout := "indexes/indexes.html"
if s.Tmpl.Lookup(layout) != nil {
for singular, plural := range s.Config.Indexes {
n := s.NewNode()
@@ -488,7 +510,7 @@ func (s *Site) RenderIndexesIndexes() (err error) {
n.Data["OrderedIndex"] = s.Info.Indexes[plural]
x, err := s.RenderThing(n, layout)
- s.WritePublic(plural+slash+"index.html", x.Bytes())
+ s.WritePublic(plural+"/index.html", x.Bytes())
return err
}
}
@@ -504,13 +526,13 @@ func (s *Site) RenderLists() error {
n.RSSlink = template.HTML(MakePermalink(string(n.Site.BaseUrl), string(section+".xml")))
n.Date = data[0].Date
n.Data["Pages"] = data
- layout := "indexes" + slash + section + ".html"
+ layout := "indexes/" + section + ".html"
x, err := s.RenderThing(n, layout)
if err != nil {
return err
}
- s.WritePublic(section+slash+"index.html", x.Bytes())
+ s.WritePublic(section+"/index.html", x.Bytes())
if a := s.Tmpl.Lookup("rss.xml"); a != nil {
// XML Feed
@@ -522,7 +544,7 @@ func (s *Site) RenderLists() error {
n.Permalink = template.HTML(string(n.Site.BaseUrl) + n.Url)
y := s.NewXMLBuffer()
s.Tmpl.ExecuteTemplate(y, "rss.xml", n)
- s.WritePublic(section+slash+"index.xml", y.Bytes())
+ s.WritePublic(section+"/index.xml", y.Bytes())
}
}
return nil
@@ -563,7 +585,7 @@ func (s *Site) RenderHomePage() error {
func (s *Site) Stats() {
fmt.Printf("%d pages created \n", len(s.Pages))
for _, pl := range s.Config.Indexes {
- fmt.Printf("%d %s created\n", len(s.Indexes[pl]), pl)
+ fmt.Printf("%d %s index created\n", len(s.Indexes[pl]), pl)
}
}