-
Notifications
You must be signed in to change notification settings - Fork 4
/
Rules
132 lines (111 loc) · 3.92 KB
/
Rules
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#!/usr/bin/env ruby
# A few helpful tips about the Rules file:
#
# * The string given to #compile and #route are matching patterns for
# identifiers--not for paths. Therefore, you can’t match on extension.
#
# * The order of rules is important: for each item, only the first matching
# rule is applied.
#
# * Item identifiers start and end with a slash (e.g. “/about/” for the file
# “content/about.html”). To select all children, grandchildren, … of an
# item, use the pattern “/about/*/”; “/about/*” will also select the parent,
# because “*” matches zero or more characters.
# ----------------------------------------------------------------------
# compass setup
# requires the compass gem and makes sure it uses the correct config file
# ----------------------------------------------------------------------
require 'compass'
Compass.add_project_configuration('compass.rb') # for Compass 0.10
#Compass.configuration.parse 'compass.rb' # for Compass < 0.10
# ----------------------------------------------------------------------
# preprocess
# handy rule to pre process items from the site before the compile/route
# pieces run.
# ----------------------------------------------------------------------
preprocess do
# unpublish items by setting meta attribute publish: false
items.delete_if { |item| item[:publish] == false }
copy_assets
end
# ----------------------------------------------------------------------
# stylesheets
# compiles the sass or scss files using the sass engine then takes the
# sass or scss, rips off the extention and changes it to .css
# ----------------------------------------------------------------------
compile '/assets/stylesheets/_*/' do
# don’t compile partials
end
route '/assets/stylesheets/_*/' do
# don't output partials
nil
end
compile '/assets/stylesheets/*/' do
filter :sass, Compass.sass_engine_options
end
route '/assets/stylesheets/*/' do
# prevents nanoc from generating a directory for each css file
item.identifier.chop + '.css'
end
# ----------------------------------------------------------------------
# content
# filters and compiles the haml content then takes the content
# files and changes the extention to .html
# ----------------------------------------------------------------------
compile '*' do
#filter :haml
#layout 'default'
# gets the extension of each item so we can run some basic logic
# and apply the correct filter
ext = item[:extension].nil? ? nil : item[:extension].split('.').last
if ext == 'erb'
filter :erb
elsif ext == 'haml' || ext.nil?
filter :haml
elsif ext == 'md' || ext == 'markdown'
filter :erb
filter :rdiscount
elsif ext == 'html'
elsif ext == 'txt'
item.identifier
else
raise "Filter is not configured for #{item.identifier} in Rules file."
end
layout 'default' unless item[:layout] == "none"
end
route '*' do
item.identifier + 'index.html'
end
# ----------------------------------------------------------------------
# layout
# universal rule to format haml content as HTML5 and set some formatting
# options to Haml outputs pretty html. For production you can set
# ':ugly' to 'true'.
# ----------------------------------------------------------------------
layout '*', :haml, :format => :html5, :ugly => false, :escape_html => false
# ----------------------------------------------------------------------
# originals
compile '/stylesheet/' do
# don’t filter or layout
end
compile '*' do
if item.binary?
# don’t filter binary items
else
filter :erb
layout 'default'
end
end
route '/stylesheet/' do
'/style.css'
end
route '*' do
if item.binary?
# Write item with identifier /foo/ to /foo.ext
item.identifier.chop + '.' + item[:extension]
else
# Write item with identifier /foo/ to /foo/index.html
item.identifier + 'index.html'
end
end
layout '*', :erb