This repository has been archived by the owner on Jan 30, 2019. It is now read-only.
/
metalsmith.coffee
114 lines (98 loc) · 2.64 KB
/
metalsmith.coffee
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
assets = require 'metalsmith-assets'
collections = require 'metalsmith-collections'
feed = require 'metalsmith-feed'
jekyllDates = require 'metalsmith-jekyll-dates'
markdown = require 'metalsmith-markdown'
metallic = require 'metalsmith-metallic'
metalsmith = require 'metalsmith'
more = require 'metalsmith-more'
paginate = require 'metalsmith-collections-paginate'
teacup = require 'metalsmith-teacup'
permalinks = require 'metalsmith-permalinks'
medium = require './metalsmith-medium'
{dirname, normalize} = require 'path'
dateThenTitle = (a, b) ->
if a.date == b.date
if a.title > b.title then 1 else -1
else
if a.date < b.date then 1 else -1
module.exports = (done) ->
metalsmith __dirname
.source 'src/documents'
.metadata
site:
title: 'Bites from Good Eggs'
author: 'Good Eggs'
url: 'http://bites.goodeggs.com/'
googleAnalytics:
id: 'UA-26193287-5'
.use jekyllDates()
.use metallic()
.use markdown()
.use more()
.use (files, metalsmith, done) ->
# Snapshot contents before rendering
for name, file of files
file.contentsWithoutLayout = file.contents
done()
.use collections
posts:
pattern: 'posts/*'
sortBy: 'date'
reverse: true
openSource:
pattern: 'open_source/*'
sortBy: dateThenTitle
authors:
pattern: 'authors/*'
news:
sortBy: 'date'
reverse: true
.use paginate
posts:
perPage: 10
first: 'index.html'
path: 'posts/:num/index.html'
template: 'posts'
openSource:
perPage: 20
first: 'open_source/index.html'
path: 'open_source/:num/index.html'
template: 'open_source'
news:
perPage: 20
first: 'news/index.html'
path: 'news/:num/index.html'
template: 'news'
# Generate file paths
.use (files, metalsmith, done) ->
for filename, file of files
file.dirname = dirname filename
done()
.use permalinks
relative: false
pattern: ':dirname/:slug'
## Absolute paths with trailing slashes
.use (files, metalsmith, done) ->
for filename, file of files
file.path = normalize "/#{file.path or ''}/"
done()
.use feed
collection: 'posts'
destination: 'rss'
# Map layouts to templates
.use (files, metalsmith, done) ->
for filename, file of files
continue unless file.layout
file.template = file.layout
done()
.use teacup directory: 'src/layouts'
.use assets
source: 'src/files'
destination: '.'
.use medium
enabled: process.env.MEDIUM is 'true'
publish: process.env.PUBLISH is 'true'
.destination 'build'
.clean false # handled by gulp
.build done