1
0
mirror of https://github.com/danog/gojekyll.git synced 2024-12-02 16:47:50 +01:00
gojekyll/site/render.go

60 lines
1.1 KiB
Go
Raw Normal View History

package site
2017-08-10 17:35:31 +02:00
import (
"sort"
"github.com/osteele/gojekyll/collection"
)
2017-08-16 21:50:31 +02:00
// render renders the site's pages.
func (s *Site) render() error {
for _, c := range s.sortedCollections() {
if err := c.Render(); err != nil {
return err
}
}
2017-08-10 17:45:46 +02:00
for _, c := range s.nonCollectionPages {
if err := c.Render(); err != nil {
return err
}
}
return nil
}
func (s *Site) ensureRendered() (err error) {
s.renderOnce.Do(func() {
err = s.initializeRenderingPipeline()
if err != nil {
return
}
2017-08-16 21:50:31 +02:00
err = s.render()
if err != nil {
return
}
})
return
}
2017-08-10 17:35:31 +02:00
2017-08-16 21:50:31 +02:00
// returns a slice of collections, sorted by name but with _posts last.
func (s *Site) sortedCollections() []*collection.Collection {
cols := make([]*collection.Collection, len(s.Collections))
copy(cols, s.Collections)
sort.Slice(cols, postsCollectionLast(cols).Less)
return cols
2017-08-10 17:35:31 +02:00
}
2017-08-16 21:50:31 +02:00
type postsCollectionLast []*collection.Collection
2017-08-10 17:35:31 +02:00
func (d postsCollectionLast) Less(i, j int) bool {
array := []*collection.Collection(d)
a, b := array[i], array[j]
switch {
case a.IsPostsCollection():
return false
case b.IsPostsCollection():
return true
default:
return a.Name < b.Name
}
}