nesta 0.9.2 → 0.9.3
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +42 -0
- data/Gemfile.lock +1 -4
- data/bin/nesta +0 -2
- data/lib/nesta/app.rb +16 -38
- data/lib/nesta/commands.rb +2 -1
- data/lib/nesta/config.rb +1 -2
- data/lib/nesta/models.rb +75 -23
- data/lib/nesta/navigation.rb +35 -4
- data/lib/nesta/version.rb +1 -1
- data/nesta.gemspec +0 -1
- data/spec/commands_spec.rb +4 -16
- data/spec/models_spec.rb +145 -42
- data/spec/page_spec.rb +63 -35
- data/spec/spec_helper.rb +12 -14
- data/templates/Rakefile +0 -24
- data/templates/config/config.yml +0 -6
- data/templates/index.haml +1 -0
- data/views/atom.haml +28 -0
- data/views/master.sass +25 -8
- data/views/page.haml +1 -6
- data/views/sitemap.haml +11 -0
- metadata +27 -42
- data/config/config.yml.sample +0 -73
- data/views/atom.builder +0 -28
- data/views/index.haml +0 -7
- data/views/sitemap.builder +0 -15
data/spec/models_spec.rb
CHANGED
@@ -45,13 +45,45 @@ describe "Page", :shared => true do
|
|
45
45
|
end
|
46
46
|
|
47
47
|
it "should be findable" do
|
48
|
-
create_page(:heading =>
|
48
|
+
create_page(:heading => 'Apple', :path => 'the-apple')
|
49
49
|
Nesta::Page.find_all.should have(1).item
|
50
50
|
end
|
51
51
|
|
52
52
|
it "should find by path" do
|
53
|
-
create_page(:heading =>
|
54
|
-
Nesta::Page.find_by_path(
|
53
|
+
create_page(:heading => 'Banana', :path => 'banana')
|
54
|
+
Nesta::Page.find_by_path('banana').heading.should == 'Banana'
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should find index page by path" do
|
58
|
+
create_page(:heading => 'Banana', :path => 'banana/index')
|
59
|
+
Nesta::Page.find_by_path('banana').heading.should == 'Banana'
|
60
|
+
end
|
61
|
+
|
62
|
+
describe "for home page" do
|
63
|
+
it "should set title to heading and site title" do
|
64
|
+
create_page(:heading => 'Home', :path => 'index')
|
65
|
+
Nesta::Page.find_by_path('/').title.should == 'Home - My blog'
|
66
|
+
end
|
67
|
+
|
68
|
+
it "should respect title metadata" do
|
69
|
+
create_page(:path => 'index', :metadata => { 'title' => 'Specific title' })
|
70
|
+
Nesta::Page.find_by_path('/').title.should == 'Specific title'
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should set title to site title by default" do
|
74
|
+
create_page(:path => 'index')
|
75
|
+
Nesta::Page.find_by_path('/').title.should == 'My blog'
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should set permalink to empty string" do
|
79
|
+
create_page(:path => 'index')
|
80
|
+
Nesta::Page.find_by_path('/').permalink.should == ''
|
81
|
+
end
|
82
|
+
|
83
|
+
it "should set abspath to /" do
|
84
|
+
create_page(:path => 'index')
|
85
|
+
Nesta::Page.find_by_path('/').abspath.should == '/'
|
86
|
+
end
|
55
87
|
end
|
56
88
|
|
57
89
|
it "should not find nonexistent page" do
|
@@ -72,43 +104,80 @@ describe "Page", :shared => true do
|
|
72
104
|
File.stub!(:mtime).and_return(Time.new)
|
73
105
|
Nesta::Page.find_by_path("a-page").heading.should == "Version 2"
|
74
106
|
end
|
107
|
+
|
108
|
+
it "should have default priority of 0 in category" do
|
109
|
+
page = create_page(:metadata => { 'categories' => 'some-page' })
|
110
|
+
page.priority('some-page').should == 0
|
111
|
+
page.priority('another-page').should be_nil
|
112
|
+
end
|
113
|
+
|
114
|
+
it "should read priority from category metadata" do
|
115
|
+
page = create_page(:metadata => {
|
116
|
+
'categories' => ' some-page:1, another-page , and-another :-1 '
|
117
|
+
})
|
118
|
+
page.priority('some-page').should == 1
|
119
|
+
page.priority('another-page').should == 0
|
120
|
+
page.priority('and-another').should == -1
|
121
|
+
end
|
75
122
|
|
76
123
|
describe "with assigned pages" do
|
77
124
|
before(:each) do
|
78
125
|
@category = create_category
|
79
|
-
create_article(:heading =>
|
126
|
+
create_article(:heading => 'Article 1', :path => 'article-1')
|
80
127
|
create_article(
|
81
|
-
:heading =>
|
82
|
-
:path =>
|
128
|
+
:heading => 'Article 2',
|
129
|
+
:path => 'article-2',
|
83
130
|
:metadata => {
|
84
|
-
|
85
|
-
|
131
|
+
'date' => '30 December 2008',
|
132
|
+
'categories' => @category.path
|
86
133
|
}
|
87
134
|
)
|
88
135
|
@article = create_article(
|
89
|
-
:heading =>
|
90
|
-
:path =>
|
136
|
+
:heading => 'Article 3',
|
137
|
+
:path => 'article-3',
|
91
138
|
:metadata => {
|
92
|
-
|
93
|
-
|
139
|
+
'date' => '31 December 2008',
|
140
|
+
'categories' => @category.path
|
94
141
|
}
|
95
142
|
)
|
96
|
-
create_category(
|
97
|
-
|
143
|
+
@category1 = create_category(
|
144
|
+
:path => 'category-1',
|
145
|
+
:heading => 'Category 1',
|
146
|
+
:metadata => { 'categories' => @category.path }
|
147
|
+
)
|
148
|
+
@category2 = create_category(
|
149
|
+
:path => 'category-2',
|
150
|
+
:heading => 'Category 2',
|
151
|
+
:metadata => { 'categories' => @category.path }
|
152
|
+
)
|
153
|
+
@category3 = create_category(
|
154
|
+
:path => 'category-3',
|
155
|
+
:heading => 'Category 3',
|
156
|
+
:metadata => { 'categories' => "#{@category.path}:1" }
|
157
|
+
)
|
98
158
|
end
|
99
159
|
|
100
160
|
it "should find articles" do
|
101
161
|
@category.articles.should have(2).items
|
102
162
|
end
|
103
163
|
|
104
|
-
it "should
|
164
|
+
it "should order articles by reverse chronological order" do
|
105
165
|
@category.articles.first.path.should == @article.path
|
106
166
|
end
|
107
167
|
|
108
168
|
it "should find pages" do
|
109
|
-
@category.pages.should have(
|
169
|
+
@category.pages.should have(3).items
|
170
|
+
end
|
171
|
+
|
172
|
+
it "should sort pages by priority" do
|
173
|
+
@category.pages.index(@category3).should == 0
|
110
174
|
end
|
111
175
|
|
176
|
+
it "should order pages by heading if priority not set" do
|
177
|
+
pages = @category.pages
|
178
|
+
pages.index(@category1).should < pages.index(@category2)
|
179
|
+
end
|
180
|
+
|
112
181
|
it "should not find pages scheduled in the future" do
|
113
182
|
future_date = (Time.now + 86400).strftime("%d %B %Y")
|
114
183
|
article = create_article(:heading => "Article 4",
|
@@ -141,6 +210,46 @@ describe "Page", :shared => true do
|
|
141
210
|
end
|
142
211
|
end
|
143
212
|
|
213
|
+
it "should be able to find parent page" do
|
214
|
+
category = create_category(:path => 'parent')
|
215
|
+
article = create_article(:path => 'parent/child')
|
216
|
+
article.parent.should == category
|
217
|
+
end
|
218
|
+
|
219
|
+
describe "(with deep index page)" do
|
220
|
+
it "should be able to find index parent" do
|
221
|
+
home = create_category(:path => 'index', :heading => 'Home')
|
222
|
+
category = create_category(:path => 'parent')
|
223
|
+
category.parent.should == home
|
224
|
+
home.parent.should be_nil
|
225
|
+
end
|
226
|
+
|
227
|
+
it "should be able to find parent of index" do
|
228
|
+
category = create_category(:path => "parent")
|
229
|
+
index = create_category(:path => "parent/child/index")
|
230
|
+
index.parent.should == category
|
231
|
+
end
|
232
|
+
|
233
|
+
it "should be able to find permalink of index" do
|
234
|
+
index = create_category(:path => "parent/child/index")
|
235
|
+
index.permalink.should == 'child'
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
239
|
+
describe "(with missing nested page)" do
|
240
|
+
it "should consider grandparent to be parent" do
|
241
|
+
grandparent = create_category(:path => 'grandparent')
|
242
|
+
child = create_category(:path => 'grandparent/parent/child')
|
243
|
+
child.parent.should == grandparent
|
244
|
+
end
|
245
|
+
|
246
|
+
it "should consider grandparent home page to be parent" do
|
247
|
+
home = create_category(:path => 'index')
|
248
|
+
child = create_category(:path => 'parent/child')
|
249
|
+
child.parent.should == home
|
250
|
+
end
|
251
|
+
end
|
252
|
+
|
144
253
|
describe "when assigned to categories" do
|
145
254
|
before(:each) do
|
146
255
|
create_category(:heading => "Apple", :path => "the-apple")
|
@@ -154,7 +263,7 @@ describe "Page", :shared => true do
|
|
154
263
|
@article.should be_in_category("the-apple")
|
155
264
|
@article.should be_in_category("banana")
|
156
265
|
end
|
157
|
-
|
266
|
+
|
158
267
|
it "should sort categories by heading" do
|
159
268
|
@article.categories.first.heading.should == "Apple"
|
160
269
|
end
|
@@ -165,12 +274,6 @@ describe "Page", :shared => true do
|
|
165
274
|
end
|
166
275
|
end
|
167
276
|
|
168
|
-
it "should be able to find parent page" do
|
169
|
-
category = create_category(:path => "parent")
|
170
|
-
article = create_article(:path => "parent/child")
|
171
|
-
article.parent.should == category
|
172
|
-
end
|
173
|
-
|
174
277
|
it "should set parent to nil when at root" do
|
175
278
|
create_category(:path => "top-level").parent.should be_nil
|
176
279
|
end
|
@@ -215,23 +318,23 @@ describe "Page", :shared => true do
|
|
215
318
|
|
216
319
|
describe "with metadata" do
|
217
320
|
before(:each) do
|
218
|
-
@layout =
|
219
|
-
@template =
|
220
|
-
@date =
|
221
|
-
@keywords =
|
222
|
-
@description =
|
321
|
+
@layout = 'my_layout'
|
322
|
+
@template = 'my_template'
|
323
|
+
@date = '07 September 2009'
|
324
|
+
@keywords = 'things, stuff'
|
325
|
+
@description = 'Page about stuff'
|
223
326
|
@summary = 'Multiline\n\nsummary'
|
224
|
-
@read_more =
|
225
|
-
@skillz =
|
327
|
+
@read_more = 'Continue at your leisure'
|
328
|
+
@skillz = 'ruby, guitar, bowstaff'
|
226
329
|
@article = create_article(:metadata => {
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
330
|
+
'layout' => @layout,
|
331
|
+
'template' => @template,
|
332
|
+
'date' => @date.gsub('September', 'Sep'),
|
333
|
+
'description' => @description,
|
334
|
+
'keywords' => @keywords,
|
335
|
+
'summary' => @summary,
|
336
|
+
'read more' => @read_more,
|
337
|
+
'skillz' => @skillz
|
235
338
|
})
|
236
339
|
end
|
237
340
|
|
@@ -243,16 +346,16 @@ describe "Page", :shared => true do
|
|
243
346
|
@article.template.should == @template.to_sym
|
244
347
|
end
|
245
348
|
|
246
|
-
it "should set permalink
|
247
|
-
@article.permalink.should ==
|
349
|
+
it "should set permalink to basename of filename" do
|
350
|
+
@article.permalink.should == 'my-article'
|
248
351
|
end
|
249
352
|
|
250
353
|
it "should set path from filename" do
|
251
|
-
@article.path.should ==
|
354
|
+
@article.path.should == 'article-prefix/my-article'
|
252
355
|
end
|
253
356
|
|
254
357
|
it "should retrieve heading" do
|
255
|
-
@article.heading.should ==
|
358
|
+
@article.heading.should == 'My article'
|
256
359
|
end
|
257
360
|
|
258
361
|
it "should be possible to convert an article to HTML" do
|
data/spec/page_spec.rb
CHANGED
@@ -81,6 +81,14 @@ describe "The home page" do
|
|
81
81
|
|
82
82
|
before(:each) do
|
83
83
|
stub_configuration
|
84
|
+
template_path = File.expand_path(
|
85
|
+
'templates', File.dirname(File.dirname(__FILE__)))
|
86
|
+
create_category(
|
87
|
+
:path => 'index',
|
88
|
+
:ext => :haml,
|
89
|
+
:heading => 'Home',
|
90
|
+
:content => File.read(File.join(template_path, 'index.haml'))
|
91
|
+
)
|
84
92
|
create_category
|
85
93
|
end
|
86
94
|
|
@@ -106,32 +114,17 @@ describe "The home page" do
|
|
106
114
|
last_response.should be_ok
|
107
115
|
end
|
108
116
|
|
109
|
-
it "should display title
|
110
|
-
do_get
|
111
|
-
body.should have_tag("title", "My blog - about stuff")
|
112
|
-
end
|
113
|
-
|
114
|
-
it "should display site title in h1 tag" do
|
117
|
+
it "should display site title in hgroup tag" do
|
115
118
|
pending "Hpricot doesn't support HTML5"
|
116
119
|
body.should have_tag('hgroup h1', /My blog/)
|
117
120
|
end
|
118
121
|
|
119
|
-
it "should display site subtitle in
|
122
|
+
it "should display site subtitle in hgroup tag" do
|
120
123
|
pending "Hpricot doesn't support HTML5"
|
121
124
|
do_get
|
122
125
|
body.should have_tag('hgroup h2', /about stuff/)
|
123
126
|
end
|
124
127
|
|
125
|
-
it "should set description meta tag" do
|
126
|
-
do_get
|
127
|
-
body.should have_tag("meta[@name=description][@content='great web site']")
|
128
|
-
end
|
129
|
-
|
130
|
-
it "should set keywords meta tag" do
|
131
|
-
do_get
|
132
|
-
body.should have_tag("meta[@name=keywords][@content='home, page']")
|
133
|
-
end
|
134
|
-
|
135
128
|
describe "when articles have no summary" do
|
136
129
|
before(:each) do
|
137
130
|
create_article
|
@@ -164,7 +157,7 @@ describe "The home page" do
|
|
164
157
|
end
|
165
158
|
|
166
159
|
it "should display article summary if available" do
|
167
|
-
body.should have_tag(
|
160
|
+
body.should have_tag('p', @summary.split('\n\n').first)
|
168
161
|
end
|
169
162
|
|
170
163
|
it "should display read more link" do
|
@@ -180,15 +173,15 @@ describe "An article" do
|
|
180
173
|
|
181
174
|
before(:each) do
|
182
175
|
stub_configuration
|
183
|
-
@date =
|
184
|
-
@keywords =
|
185
|
-
@description =
|
176
|
+
@date = '07 September 2009'
|
177
|
+
@keywords = 'things, stuff'
|
178
|
+
@description = 'Page about stuff'
|
186
179
|
@summary = 'Multiline\n\nsummary'
|
187
180
|
@article = create_article(:metadata => {
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
181
|
+
'date' => @date.gsub('September', 'Sep'),
|
182
|
+
'description' => @description,
|
183
|
+
'keywords' => @keywords,
|
184
|
+
'summary' => @summary
|
192
185
|
})
|
193
186
|
end
|
194
187
|
|
@@ -218,31 +211,31 @@ describe "An article" do
|
|
218
211
|
|
219
212
|
it "should display the heading" do
|
220
213
|
do_get
|
221
|
-
body.should have_tag(
|
214
|
+
body.should have_tag('h1', 'My article')
|
222
215
|
end
|
223
216
|
|
224
|
-
it "should
|
217
|
+
it "should use heading for title tag" do
|
225
218
|
do_get
|
226
|
-
body.
|
219
|
+
body.should have_tag('title', 'My article - My blog')
|
227
220
|
end
|
228
221
|
|
229
222
|
it "should display the date" do
|
230
223
|
do_get
|
231
|
-
body.should have_tag(
|
224
|
+
body.should have_tag('time', @date)
|
232
225
|
end
|
233
226
|
|
234
227
|
it "should display the content" do
|
235
228
|
do_get
|
236
|
-
body.should have_tag(
|
229
|
+
body.should have_tag('p', 'Content goes here')
|
237
230
|
end
|
238
231
|
|
239
232
|
describe "that is assigned to categories" do
|
240
233
|
before(:each) do
|
241
|
-
create_category(:heading =>
|
242
|
-
@category = create_category(:heading =>
|
234
|
+
create_category(:heading => 'Apple', :path => 'the-apple')
|
235
|
+
@category = create_category(:heading => 'Banana', :path => 'banana')
|
243
236
|
@article = create_article(
|
244
237
|
:path => "#{@category.path}/article",
|
245
|
-
:metadata => {
|
238
|
+
:metadata => { 'categories' => 'banana, the-apple' }
|
246
239
|
)
|
247
240
|
end
|
248
241
|
|
@@ -302,12 +295,17 @@ describe "A page" do
|
|
302
295
|
|
303
296
|
describe "that has meta data" do
|
304
297
|
before(:each) do
|
298
|
+
@title = 'Different title'
|
305
299
|
@content = "Page content"
|
306
300
|
@description = "Page about stuff"
|
307
301
|
@keywords = "things, stuff"
|
308
302
|
@category = create_category(
|
309
303
|
:content => "# My category\n\n#{@content}",
|
310
|
-
:metadata => {
|
304
|
+
:metadata => {
|
305
|
+
'title' => @title,
|
306
|
+
'description' => @description,
|
307
|
+
'keywords' => @keywords
|
308
|
+
}
|
311
309
|
)
|
312
310
|
end
|
313
311
|
|
@@ -321,7 +319,12 @@ describe "A page" do
|
|
321
319
|
|
322
320
|
it "should display the heading" do
|
323
321
|
do_get
|
324
|
-
body.should have_tag(
|
322
|
+
body.should have_tag('h1', @category.heading)
|
323
|
+
end
|
324
|
+
|
325
|
+
it "should use title metadata to set heading" do
|
326
|
+
do_get
|
327
|
+
body.should have_tag('title', @title)
|
325
328
|
end
|
326
329
|
|
327
330
|
it "should display the content" do
|
@@ -329,6 +332,31 @@ describe "A page" do
|
|
329
332
|
body.should have_tag("p", @content)
|
330
333
|
end
|
331
334
|
|
335
|
+
describe "with associated pages" do
|
336
|
+
before(:each) do
|
337
|
+
@category1 = create_category(
|
338
|
+
:path => 'category1',
|
339
|
+
:heading => 'Category 1',
|
340
|
+
:metadata => {
|
341
|
+
'categories' => 'category-prefix/my-category:-1'
|
342
|
+
}
|
343
|
+
)
|
344
|
+
@category2 = create_category(
|
345
|
+
:path => 'category2',
|
346
|
+
:heading => 'Category 2',
|
347
|
+
:metadata => {
|
348
|
+
'categories' => 'category-prefix/my-category:1'
|
349
|
+
}
|
350
|
+
)
|
351
|
+
end
|
352
|
+
|
353
|
+
it "should list highest priority pages at the top" do
|
354
|
+
do_get
|
355
|
+
body.should have_tag('li:nth-child(1) h1 a', 'Category 2')
|
356
|
+
body.should have_tag('li:nth-child(2) h1 a', 'Category 1')
|
357
|
+
end
|
358
|
+
end
|
359
|
+
|
332
360
|
describe "with associated articles" do
|
333
361
|
before(:each) do
|
334
362
|
@article = create_article(
|
data/spec/spec_helper.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
1
|
+
require 'rubygems'
|
2
|
+
require 'spec'
|
3
|
+
require 'spec/interop/test'
|
4
|
+
require 'rack/test'
|
5
|
+
require 'rspec_hpricot_matchers'
|
6
|
+
require 'sinatra'
|
7
7
|
|
8
8
|
Test::Unit::TestCase.send :include, Rack::Test::Methods
|
9
9
|
|
@@ -18,10 +18,10 @@ module Nesta
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
-
require File.expand_path(
|
21
|
+
require File.expand_path('../lib/nesta/app', File.dirname(__FILE__))
|
22
22
|
|
23
23
|
module FixtureHelper
|
24
|
-
FIXTURE_DIR = File.expand_path(
|
24
|
+
FIXTURE_DIR = File.expand_path('fixtures', File.dirname(__FILE__))
|
25
25
|
|
26
26
|
def create_fixtures_directory
|
27
27
|
FileUtils.mkdir_p(FixtureHelper::FIXTURE_DIR)
|
@@ -62,11 +62,9 @@ module ConfigSpecHelper
|
|
62
62
|
end
|
63
63
|
|
64
64
|
def stub_configuration(options = {})
|
65
|
-
stub_config_key(
|
66
|
-
stub_config_key(
|
67
|
-
|
68
|
-
stub_config_key(
|
69
|
-
content_path = File.join(FixtureHelper::FIXTURE_DIR, "content")
|
70
|
-
stub_config_key("content", content_path, options.merge(:rack_env => true))
|
65
|
+
stub_config_key('title', 'My blog', options)
|
66
|
+
stub_config_key('subtitle', 'about stuff', options)
|
67
|
+
content_path = File.join(FixtureHelper::FIXTURE_DIR, 'content')
|
68
|
+
stub_config_key('content', content_path, options.merge(:rack_env => true))
|
71
69
|
end
|
72
70
|
end
|
data/templates/Rakefile
CHANGED
@@ -9,27 +9,3 @@ begin
|
|
9
9
|
Vlad.load(:scm => :git, :app => nil, :web => nil)
|
10
10
|
rescue LoadError
|
11
11
|
end<% end %>
|
12
|
-
<% if @options['heroku'] %>
|
13
|
-
require 'nesta/config'
|
14
|
-
require 'nesta/models'
|
15
|
-
|
16
|
-
namespace :heroku do
|
17
|
-
desc "Set Heroku config vars from config.yml"
|
18
|
-
task :config do
|
19
|
-
Nesta::App.environment = ENV['RACK_ENV'] || 'production'
|
20
|
-
settings = {}
|
21
|
-
Nesta::Config.settings.map do |variable|
|
22
|
-
value = Nesta::Config.send(variable)
|
23
|
-
value && settings["NESTA_#{variable.upcase}"] = value
|
24
|
-
end
|
25
|
-
if Nesta::Config.author
|
26
|
-
Nesta::Config.author_settings.map do |author_var|
|
27
|
-
value = Nesta::Config.author[author_var]
|
28
|
-
if value
|
29
|
-
value && settings["NESTA_AUTHOR__#{author_var.upcase}"] = value
|
30
|
-
end
|
31
|
-
end
|
32
|
-
params = settings.map { |k, v| %Q{#{k}="#{v}"} }.join(" ")
|
33
|
-
system("heroku config:add #{params}")
|
34
|
-
end
|
35
|
-
end<% end %>
|
data/templates/config/config.yml
CHANGED
@@ -4,12 +4,6 @@
|
|
4
4
|
title: "My Site"
|
5
5
|
subtitle: "(change this text in config/config.yml)"
|
6
6
|
|
7
|
-
# If you want to set the descrition or keywords meta tags on your site's
|
8
|
-
# home page, do it here.
|
9
|
-
#
|
10
|
-
# description: "Set this to something that describes your home page"
|
11
|
-
# keywords: "enter 3 or 4, comma separated, keywords"
|
12
|
-
|
13
7
|
# You should really specify your content's author when generating an
|
14
8
|
# Atom feed. Specify at least one of name, uri or email, and Nesta will
|
15
9
|
# include it in your feed. See the Atom spec for more info:
|
@@ -0,0 +1 @@
|
|
1
|
+
%section.articles= article_summaries(latest_articles)
|
data/views/atom.haml
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
!!! XML
|
2
|
+
%feed(xmlns='http://www.w3.org/2005/Atom')
|
3
|
+
%title(type='text')= @title
|
4
|
+
%generator(uri='http://effectif.com/nesta') Nesta
|
5
|
+
%id= atom_id
|
6
|
+
%link(href="#{base_url}/articles.xml" rel='self')
|
7
|
+
%link(href=base_url rel='alternate')
|
8
|
+
%subtitle(type='text')= @subtitle
|
9
|
+
- if @articles[0]
|
10
|
+
%updated= @articles[0].date(:xmlschema)
|
11
|
+
- if @author
|
12
|
+
%author
|
13
|
+
- if @author['name']
|
14
|
+
%name= @author['name']
|
15
|
+
- if @author['uri']
|
16
|
+
%uri= @author['uri']
|
17
|
+
- if @author['email']
|
18
|
+
%email= @author['email']
|
19
|
+
- @articles.each do |article|
|
20
|
+
%entry
|
21
|
+
%title= article.heading
|
22
|
+
%link{ :href => url_for(article), :type => 'text/html', :rel => 'alternate' }
|
23
|
+
%id= atom_id(article)
|
24
|
+
%content(type='html')&= find_and_preserve(absolute_urls(article.body))
|
25
|
+
%published= article.date(:xmlschema)
|
26
|
+
%updated= article.date(:xmlschema)
|
27
|
+
- article.categories.each do |category|
|
28
|
+
%category{ :term => category.permalink }
|
data/views/master.sass
CHANGED
@@ -84,6 +84,13 @@ pre
|
|
84
84
|
img
|
85
85
|
border: none
|
86
86
|
|
87
|
+
nav.breadcrumb
|
88
|
+
margin-top: $vertical-rhythm
|
89
|
+
color: $meta-color
|
90
|
+
padding: 0.5em 0
|
91
|
+
|
92
|
+
font-size: 0.909em
|
93
|
+
|
87
94
|
// Layout
|
88
95
|
|
89
96
|
article, aside, footer, header, nav, section
|
@@ -94,13 +101,6 @@ div#container
|
|
94
101
|
margin: 0 auto
|
95
102
|
padding: 1em 1em 0 1em
|
96
103
|
|
97
|
-
nav.breadcrumb
|
98
|
-
margin-top: $vertical-rhythm
|
99
|
-
color: $meta-color
|
100
|
-
padding: 0.5em 0
|
101
|
-
|
102
|
-
font-size: 0.909em
|
103
|
-
|
104
104
|
div#content
|
105
105
|
position: relative
|
106
106
|
width: $content-width
|
@@ -138,17 +138,34 @@ a
|
|
138
138
|
color: $active-link-color
|
139
139
|
border-bottom-color: $active-link-color
|
140
140
|
|
141
|
+
nav.breadcrumb
|
142
|
+
ul
|
143
|
+
margin: 0
|
144
|
+
li
|
145
|
+
display: inline
|
146
|
+
list-style: none
|
147
|
+
&::after
|
148
|
+
content: " > "
|
149
|
+
&:last-child::after
|
150
|
+
content: ""
|
151
|
+
|
152
|
+
nav.breadcrumb,
|
141
153
|
nav.categories,
|
142
154
|
div.feed,
|
143
155
|
article p.meta
|
144
156
|
a
|
145
157
|
color: $nav-link-color
|
146
|
-
border-bottom-color: $background-color
|
147
158
|
&:hover a
|
148
159
|
color: $link-color
|
149
160
|
a:hover
|
150
161
|
color: $hover-link-color
|
151
162
|
|
163
|
+
nav.categories,
|
164
|
+
div.feed,
|
165
|
+
article p.meta
|
166
|
+
a
|
167
|
+
border-bottom-color: $background-color
|
168
|
+
|
152
169
|
article p.meta
|
153
170
|
a
|
154
171
|
@include transition(border-bottom-color 0.5s 0 ease)
|
data/views/page.haml
CHANGED
data/views/sitemap.haml
ADDED