1
0
mirror of https://github.com/danog/gojekyll.git synced 2024-12-11 17:00:02 +01:00
gojekyll/collection/strategies.go

68 lines
1.9 KiB
Go
Raw Normal View History

2017-07-04 15:09:36 +02:00
package collection
import (
"time"
2017-07-03 16:39:55 +02:00
2017-07-09 22:17:20 +02:00
"github.com/osteele/gojekyll/utils"
)
// A collectionStrategy encapsulates behavior differences between the `_post`
// collection and other collections.
type collectionStrategy interface {
2017-07-03 16:39:55 +02:00
defaultPermalinkPattern() string
isCollectible(filename string) bool
isFuture(filename string) bool
parseFilename(string, map[string]interface{})
}
func (c *Collection) strategy() collectionStrategy {
if c.IsPostsCollection() {
return postsStrategy{}
}
return defaultStrategy{}
}
type defaultStrategy struct{}
func (s defaultStrategy) parseFilename(_ string, fm map[string]interface{}) {
// de facto
fm["draft"] = false
}
func (s defaultStrategy) isCollectible(string) bool { return true }
func (s defaultStrategy) isFuture(string) bool { return false }
type postsStrategy struct{}
func (s postsStrategy) parseFilename(filename string, fm map[string]interface{}) {
2017-08-20 18:22:58 +02:00
if t, title, found := utils.ParseFilenameDateTitle(filename); found {
fm["date"] = t
2017-08-16 22:08:49 +02:00
fm["title"] = title
fm["slug"] = utils.Slugify(title)
}
}
func (s postsStrategy) isCollectible(filename string) bool {
2017-08-20 18:22:58 +02:00
_, _, ok := utils.ParseFilenameDateTitle(filename)
return ok
}
func (s postsStrategy) isFuture(filename string) bool {
2017-08-20 18:22:58 +02:00
t, _, ok := utils.ParseFilenameDateTitle(filename)
return ok && t.After(time.Now())
}
2017-07-03 16:39:55 +02:00
// DefaultCollectionPermalinkPattern is the default permalink pattern for pages in the posts collection
const DefaultCollectionPermalinkPattern = "/:collection/:path:output_ext"
// DefaultPostsCollectionPermalinkPattern is the default collection permalink pattern
const DefaultPostsCollectionPermalinkPattern = "/:categories/:year/:month/:day/:title.html"
func (s defaultStrategy) defaultPermalinkPattern() string {
return DefaultCollectionPermalinkPattern
}
func (s postsStrategy) defaultPermalinkPattern() string {
return DefaultPostsCollectionPermalinkPattern
}