shithub: hugo

Download patch

ref: 3882e7ceaf818e295fdc652377af914bb60faf7f
parent: be534a865ddceb8f95ba20e072f136c842176623
author: Juan B. Rodriguez <[email protected]>
date: Thu May 14 11:06:36 EDT 2015

Add Lastmod field

Create new field in Node
Update Page to look for lastmod field in the front matter. If not present, then assign Date to Lastmod
Update Site, to assign a value to Lastmod (based on the same logic used for Date)

Fixes #733

--- a/hugolib/node.go
+++ b/hugolib/node.go
@@ -30,6 +30,7 @@
 	Keywords    []string
 	Params      map[string]interface{}
 	Date        time.Time
+	Lastmod     time.Time
 	Sitemap     Sitemap
 	URLPath
 	paginator     *Pager
--- a/hugolib/page.go
+++ b/hugolib/page.go
@@ -473,6 +473,11 @@
 			if err != nil {
 				jww.ERROR.Printf("Failed to parse date '%v' in page %s", v, p.File.Path())
 			}
+		case "lastmod":
+			p.Lastmod, err = cast.ToTimeE(v)
+			if err != nil {
+				jww.ERROR.Printf("Failed to parse lastmod '%v' in page %s", v, p.File.Path())
+			}
 		case "publishdate", "pubdate":
 			p.PublishDate, err = cast.ToTimeE(v)
 			if err != nil {
@@ -524,6 +529,11 @@
 			}
 		}
 	}
+
+	if p.Lastmod.IsZero() {
+		p.Lastmod = p.Date
+	}
+
 	return nil
 
 }
--- a/hugolib/site.go
+++ b/hugolib/site.go
@@ -1065,6 +1065,7 @@
 	s.setURLs(n, base)
 	if len(t.pages) > 0 {
 		n.Date = t.pages[0].Page.Date
+		n.Lastmod = t.pages[0].Page.Lastmod
 	}
 	n.Data[t.singular] = t.pages
 	n.Data["Singular"] = t.singular
@@ -1110,6 +1111,7 @@
 				taxonomyPagerNode.paginator = pager
 				if pager.TotalPages() > 0 {
 					taxonomyPagerNode.Date = pager.Pages()[0].Date
+					taxonomyPagerNode.Lastmod = pager.Pages()[0].Lastmod
 				}
 				pageNumber := i + 1
 				htmlBase := fmt.Sprintf("/%s/%s/%d", base, paginatePath, pageNumber)
@@ -1168,6 +1170,7 @@
 	}
 	s.setURLs(n, section)
 	n.Date = data[0].Page.Date
+	n.Lastmod = data[0].Page.Lastmod
 	n.Data["Pages"] = data.Pages()
 
 	return n
@@ -1205,6 +1208,7 @@
 				sectionPagerNode.paginator = pager
 				if pager.TotalPages() > 0 {
 					sectionPagerNode.Date = pager.Pages()[0].Date
+					sectionPagerNode.Lastmod = pager.Pages()[0].Lastmod
 				}
 				pageNumber := i + 1
 				htmlBase := fmt.Sprintf("/%s/%s/%d", section, paginatePath, pageNumber)
@@ -1262,6 +1266,7 @@
 			homePagerNode.paginator = pager
 			if pager.TotalPages() > 0 {
 				homePagerNode.Date = pager.Pages()[0].Date
+				homePagerNode.Lastmod = pager.Pages()[0].Lastmod
 			}
 			pageNumber := i + 1
 			htmlBase := fmt.Sprintf("/%s/%d", paginatePath, pageNumber)
@@ -1282,6 +1287,7 @@
 		n.Data["Pages"] = s.Pages[:high]
 		if len(s.Pages) > 0 {
 			n.Date = s.Pages[0].Date
+			n.Lastmod = s.Pages[0].Lastmod
 		}
 
 		rssLayouts := []string{"rss.xml", "_default/rss.xml", "_internal/_default/rss.xml"}
@@ -1317,6 +1323,7 @@
 
 	page := &Page{}
 	page.Date = s.Info.LastChange
+	page.Lastmod = s.Info.LastChange
 	page.Site = &s.Info
 	page.URL = "/"