Added PageSorter and PagesByDate
authorHenry <cryptix@riseup.net>
Sun, 24 Nov 2013 21:10:20 +0000 (22:10 +0100)
committerspf13 <steve.francia@gmail.com>
Mon, 16 Dec 2013 22:55:37 +0000 (17:55 -0500)
hugolib/index.go

index 2c690e185cb47db7f848c906c84048344e6393f0..f39723e4e3c3c04dd7b1b8f70d7bf80aef6555b9 100644 (file)
@@ -45,6 +45,27 @@ func (ip IndexedPages) Pages() Pages {
        return pages
 }
 
+func (ip IndexedPages) PagesByDate(asc bool) Pages {
+       by := func(p1, p2 *Page) bool {
+               return p1.Date.Unix() < p2.Date.Unix()
+       }
+
+       if asc == false {
+               by = func(p1, p2 *Page) bool {
+                       return p1.Date.Unix() > p2.Date.Unix()
+               }
+       }
+
+       ps := &PageSorter{
+               pages: ip.Pages(),
+               by:    by,
+       }
+
+       sort.Sort(ps)
+
+       return ps.pages
+}
+
 type Index map[string]IndexedPages
 type IndexList map[string]Index
 
@@ -134,3 +155,13 @@ func (s *indexEntrySorter) Swap(i, j int) {
 func (s *indexEntrySorter) Less(i, j int) bool {
        return s.by(&s.indexEntrys[i], &s.indexEntrys[j])
 }
+
+// Sorting pages
+type PageSorter struct {
+       pages Pages
+       by    func(p1, p2 *Page) bool
+}
+
+func (ps *PageSorter) Len() int           { return len(ps.pages) }
+func (ps *PageSorter) Swap(i, j int)      { ps.pages[i], ps.pages[j] = ps.pages[j], ps.pages[i] }
+func (ps *PageSorter) Less(i, j int) bool { return ps.by(ps.pages[i], ps.pages[j]) }