shithub: hugo

Download patch

ref: 5f84bc02cd9706af92311cc27ae01d2ffc1410fa
parent: 50269f251249a0ddf76028b69002c4609101a2cc
author: spf13 <[email protected]>
date: Mon Jun 1 18:14:36 EDT 2015

add preliminary support for content/index.md file to be homepage content

--- a/hugolib/site.go
+++ b/hugolib/site.go
@@ -1247,6 +1247,7 @@
 	return nil
 }
 
+// When Paginating, HomePage is a Node
 func (s *Site) newHomeNode() *Node {
 	n := s.NewNode()
 	n.Title = n.Site.Title
@@ -1256,9 +1257,43 @@
 	return n
 }
 
+func (s *Site) findHomePage() (*Page, error) {
+	for _, y := range s.Pages {
+		if y.Source.BaseFileName() == "index" && y.Source.Dir() == "" && strings.ToLower(y.Source.Ext()) != "xml" {
+			return y, nil
+		}
+	}
+
+	return nil, errors.New("No content file for homepage")
+}
+
+// Homepage is a special page
+// Homepage is only rendered as a page when
+// 1. a content/index.md is found
+// 2. pagination isn't used for the homepage
+func (s *Site) newHomePage() *Page {
+
+	var p *Page
+
+	p, _ = s.findHomePage()
+	if p == nil {
+		p, _ = NewPage("HugoHomePage")
+		p.Site = &s.Info
+	}
+
+	p.Title = p.Site.Title
+	p.URL = helpers.URLizeAndPrep("/")
+	p.URLPath.Permalink = s.permalink(p.URL)
+	p.RSSLink = s.permalink("/" + ".xml")
+	p.Data = make(map[string]interface{})
+	p.Data["Pages"] = s.Pages
+	return p
+}
+
 func (s *Site) RenderHomePage() error {
-	n := s.newHomeNode()
-	layouts := s.appendThemeTemplates([]string{"index.html", "_default/list.html"})
+	n := s.newHomePage()
+	layouts := s.appendThemeTemplates([]string{"index.html", "_default/list.html", "_default/single.html"})
+	//layouts := s.appendThemeTemplates([]string{"index.html", "_default/list.html"})
 
 	if err := s.renderAndWritePage("homepage", helpers.FilePathSeparator, n, layouts...); err != nil {
 		return err
@@ -1279,6 +1314,7 @@
 				continue
 			}
 
+			// When paginating HomePage is a node
 			homePagerNode := s.newHomeNode()
 			homePagerNode.paginator = pager
 			if pager.TotalPages() > 0 {
@@ -1316,7 +1352,8 @@
 
 	n.URL = helpers.URLize("404.html")
 	n.Title = "404 Page not found"
-	n.Permalink = s.permalink("404.html")
+	n.URLPath.Permalink = s.permalink("404.html")
+	//n.Permalink = s.permalink("404.html")
 
 	nfLayouts := []string{"404.html"}
 	if nfErr := s.renderAndWritePage("404 page", "404.html", n, s.appendThemeTemplates(nfLayouts)...); nfErr != nil {