Add Lastmod field
authorJuan B. Rodriguez <jbrodriguez@gmail.com>
Thu, 14 May 2015 20:06:36 +0000 (15:06 -0500)
committerbep <bjorn.erik.pedersen@gmail.com>
Fri, 15 May 2015 11:09:30 +0000 (13:09 +0200)
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

hugolib/node.go
hugolib/page.go
hugolib/site.go

index 9be2150584ea2c232869ec25e17875599d4ee1d1..7606e88963b2d0962f3344438714838196eea16f 100644 (file)
@@ -30,6 +30,7 @@ type Node struct {
        Keywords    []string
        Params      map[string]interface{}
        Date        time.Time
+       Lastmod     time.Time
        Sitemap     Sitemap
        URLPath
        paginator     *Pager
index 56a9ff16a1d7f2fc090176c52c673bf01f8089f9..fd3bddcdb501eb9c8ce9e6d264627b5c3cc176db 100644 (file)
@@ -473,6 +473,11 @@ func (p *Page) update(f interface{}) error {
                        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 @@ func (p *Page) update(f interface{}) error {
                        }
                }
        }
+
+       if p.Lastmod.IsZero() {
+               p.Lastmod = p.Date
+       }
+
        return nil
 
 }
index 2018df4bb6ca97bcc1416bf0e83587fb1d04e9eb..45912abcd01ca9d9a163368e34e11d65feaa7676 100644 (file)
@@ -1065,6 +1065,7 @@ func (s *Site) newTaxonomyNode(t taxRenderInfo) (*Node, string) {
        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 @@ func taxonomyRenderer(s *Site, taxes <-chan taxRenderInfo, results chan<- error,
                                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 @@ func (s *Site) newSectionListNode(section string, data WeightedPages) *Node {
        }
        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 @@ func (s *Site) RenderSectionLists() error {
                                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 @@ func (s *Site) RenderHomePage() error {
                        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 @@ func (s *Site) RenderHomePage() error {
                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 @@ func (s *Site) RenderSitemap() error {
 
        page := &Page{}
        page.Date = s.Info.LastChange
+       page.Lastmod = s.Info.LastChange
        page.Site = &s.Info
        page.URL = "/"