retter 0.2.5 → 1.0.0.pre

Sign up to get free protection for your applications and to get access to all the features.
Files changed (141) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -11
  3. data/.travis.yml +4 -2
  4. data/ChangeLog.md +11 -5
  5. data/Gemfile +4 -1
  6. data/LICENSE.txt +22 -0
  7. data/README.md +163 -246
  8. data/Rakefile +25 -5
  9. data/bin/retter +2 -22
  10. data/lib/retter.rb +57 -43
  11. data/lib/retter/cli.rb +46 -0
  12. data/lib/retter/cli/edit.rb +33 -0
  13. data/lib/retter/cli/hooks.rb +46 -0
  14. data/lib/retter/cli/list.rb +15 -0
  15. data/lib/retter/cli/new.rb +20 -0
  16. data/lib/retter/cli/preview.rb +9 -0
  17. data/lib/retter/cli/publish.rb +22 -0
  18. data/lib/retter/deprecated.rb +160 -0
  19. data/lib/retter/entry.rb +31 -106
  20. data/lib/retter/entry/article.rb +36 -0
  21. data/lib/retter/entry/find_methods.rb +38 -0
  22. data/lib/retter/entry/model_base.rb +10 -0
  23. data/lib/retter/entry/pagination.rb +23 -0
  24. data/lib/retter/entry/sort_methods.rb +7 -0
  25. data/lib/retter/entry/utils.rb +12 -0
  26. data/lib/retter/initializing.rb +45 -0
  27. data/lib/retter/repository.rb +99 -12
  28. data/lib/retter/retterfile.rb +67 -0
  29. data/lib/retter/retterfile/context.rb +57 -0
  30. data/lib/retter/static_site.rb +34 -0
  31. data/lib/retter/static_site/app.rb +13 -0
  32. data/lib/retter/static_site/app/application.rb +94 -0
  33. data/lib/retter/{generator/skel/entries → static_site/app/assets/images}/.gitkeep +0 -0
  34. data/lib/retter/{generator/skel → static_site/app/assets}/images/orange/bg_body.jpg +0 -0
  35. data/lib/retter/{generator/skel → static_site/app/assets}/images/orange/bg_entry.jpg +0 -0
  36. data/lib/retter/{generator/skel → static_site/app/assets}/images/orange/bg_header.png +0 -0
  37. data/lib/retter/{generator/skel → static_site/app/assets}/images/orange/ic_li01.gif +0 -0
  38. data/lib/retter/{generator/skel/images → static_site/app/assets/javascripts}/.gitkeep +0 -0
  39. data/lib/retter/static_site/app/assets/stylesheets/application.css.scss +3 -0
  40. data/lib/retter/{generator/skel/stylesheets/base.css → static_site/app/assets/stylesheets/base.css.scss} +0 -0
  41. data/lib/retter/{generator/skel/stylesheets/pygments.css → static_site/app/assets/stylesheets/highlight.css.scss} +0 -0
  42. data/lib/retter/static_site/app/assets/stylesheets/orange.css.scss +262 -0
  43. data/lib/retter/static_site/app/assets/stylesheets/retter.css.scss +198 -0
  44. data/lib/retter/static_site/app/config.ru +7 -0
  45. data/lib/retter/static_site/app/controllers.rb +113 -0
  46. data/lib/retter/static_site/app/helpers.rb +36 -0
  47. data/lib/retter/{generator/skel/layouts/profile.html.haml → static_site/app/templates/about/show.html.haml} +0 -0
  48. data/lib/retter/static_site/app/templates/entries/articles/show.html.haml +7 -0
  49. data/lib/retter/static_site/app/templates/entries/index.html.haml +13 -0
  50. data/lib/retter/static_site/app/templates/entries/index.rss.haml +24 -0
  51. data/lib/retter/static_site/app/templates/entries/show.html.haml +11 -0
  52. data/lib/retter/static_site/app/templates/index/show.html.haml +14 -0
  53. data/lib/retter/static_site/app/templates/layouts/application.html.haml +34 -0
  54. data/lib/retter/static_site/builder.rb +106 -0
  55. data/lib/retter/static_site/cli.rb +25 -0
  56. data/lib/retter/static_site/cli/build.rb +85 -0
  57. data/lib/retter/static_site/cli/edit.rb +17 -0
  58. data/lib/retter/static_site/cli/migrate.rb +93 -0
  59. data/lib/retter/static_site/cli/new.rb +50 -0
  60. data/lib/retter/static_site/cli/preview.rb +66 -0
  61. data/lib/retter/static_site/markdown.rb +25 -0
  62. data/lib/retter/static_site/markdown/code_ray_renderer.rb +13 -0
  63. data/lib/retter/static_site/markdown/pygments_renderer.rb +18 -0
  64. data/lib/retter/static_site/markdown_entry.rb +111 -0
  65. data/lib/retter/static_site/monkey/sprockets_task.rb +10 -0
  66. data/lib/retter/version.rb +1 -1
  67. data/retter.gemspec +59 -43
  68. data/skel/.gitignore +2 -0
  69. data/skel/Retterfile +16 -0
  70. data/skel/config.ru +22 -0
  71. data/{lib/retter/generator/skel/javascripts → skel/retters}/.gitkeep +0 -0
  72. data/skel/retters/today.md +3 -0
  73. data/spec/cli/build_spec.rb +87 -0
  74. data/spec/cli/edit_spec.rb +76 -0
  75. data/spec/cli/invocation_spec.rb +19 -0
  76. data/spec/cli/list_spec.rb +64 -0
  77. data/spec/cli/migrate_spec.rb +65 -0
  78. data/spec/cli/new_spec.rb +30 -0
  79. data/{lib/retter/generator/skel → spec/fixtures/sites/site-0.2.5}/.gitignore +0 -0
  80. data/{lib/retter/generator/skel → spec/fixtures/sites/site-0.2.5}/Retterfile +6 -3
  81. data/{lib/retter/generator/skel → spec/fixtures/sites/site-0.2.5}/config.ru +0 -0
  82. data/{lib/retter/generator/skel/retters/.gitkeep → spec/fixtures/sites/site-0.2.5/entries.html} +0 -0
  83. data/spec/fixtures/sites/site-0.2.5/entries.rss +0 -0
  84. data/spec/fixtures/sites/site-0.2.5/entries/.gitkeep +0 -0
  85. data/spec/fixtures/sites/site-0.2.5/images/.gitkeep +0 -0
  86. data/spec/fixtures/sites/site-0.2.5/images/orange/bg_body.jpg +0 -0
  87. data/spec/fixtures/sites/site-0.2.5/images/orange/bg_entry.jpg +0 -0
  88. data/spec/fixtures/sites/site-0.2.5/images/orange/bg_header.png +0 -0
  89. data/{lib/retter/generator/skel → spec/fixtures/sites/site-0.2.5}/index.html +0 -0
  90. data/spec/fixtures/sites/site-0.2.5/javascripts/.gitkeep +0 -0
  91. data/{lib/retter/generator/skel → spec/fixtures/sites/site-0.2.5}/layouts/article.html.haml +0 -0
  92. data/{lib/retter/generator/skel → spec/fixtures/sites/site-0.2.5}/layouts/entries.html.haml +0 -0
  93. data/{lib/retter/generator/skel → spec/fixtures/sites/site-0.2.5}/layouts/entry.html.haml +0 -0
  94. data/{lib/retter/generator/skel → spec/fixtures/sites/site-0.2.5}/layouts/index.html.haml +0 -0
  95. data/spec/fixtures/sites/site-0.2.5/layouts/profile.html.haml +7 -0
  96. data/{lib/retter/generator/skel → spec/fixtures/sites/site-0.2.5}/layouts/retter.html.haml +0 -0
  97. data/spec/fixtures/sites/site-0.2.5/profile.html +0 -0
  98. data/spec/fixtures/sites/site-0.2.5/retters/.gitkeep +0 -0
  99. data/spec/fixtures/sites/site-0.2.5/stylesheets/base.css +22 -0
  100. data/{lib/retter/generator/skel → spec/fixtures/sites/site-0.2.5}/stylesheets/orange.css +0 -0
  101. data/spec/fixtures/sites/site-0.2.5/stylesheets/pygments.css +288 -0
  102. data/{lib/retter/generator/skel → spec/fixtures/sites/site-0.2.5}/stylesheets/retter.css +0 -0
  103. data/spec/retter/deprecated_spec.rb +106 -0
  104. data/spec/retter/initializing_spec.rb +86 -0
  105. data/spec/retter/retterfile_spec.rb +32 -0
  106. data/spec/spec_helper.rb +38 -27
  107. data/spec/support/example_helper.rb +46 -0
  108. data/spec/support/matchers.rb +14 -0
  109. data/spec/support/test_site.rb +59 -0
  110. metadata +329 -236
  111. data/lib/retter/binder.rb +0 -50
  112. data/lib/retter/command.rb +0 -192
  113. data/lib/retter/config.rb +0 -96
  114. data/lib/retter/configurable.rb +0 -26
  115. data/lib/retter/entries.rb +0 -115
  116. data/lib/retter/generator.rb +0 -7
  117. data/lib/retter/generator/base.rb +0 -65
  118. data/lib/retter/generator/creator.rb +0 -34
  119. data/lib/retter/generator/skel/Gemfile +0 -5
  120. data/lib/retter/markdown.rb +0 -31
  121. data/lib/retter/markdown/code_ray_renderer.rb +0 -11
  122. data/lib/retter/markdown/pygments_renderer.rb +0 -16
  123. data/lib/retter/page.rb +0 -43
  124. data/lib/retter/page/article.rb +0 -54
  125. data/lib/retter/page/base.rb +0 -97
  126. data/lib/retter/page/entries.rb +0 -17
  127. data/lib/retter/page/entry.rb +0 -46
  128. data/lib/retter/page/feed.rb +0 -63
  129. data/lib/retter/page/index.rb +0 -17
  130. data/lib/retter/page/profile.rb +0 -17
  131. data/lib/retter/page/view_helper.rb +0 -66
  132. data/lib/retter/preprint.rb +0 -34
  133. data/spec/command/callback_spec.rb +0 -27
  134. data/spec/command/clean_spec.rb +0 -20
  135. data/spec/command/commit_spec.rb +0 -40
  136. data/spec/command/edit_spec.rb +0 -119
  137. data/spec/command/list_spec.rb +0 -42
  138. data/spec/command/open_spec.rb +0 -12
  139. data/spec/command/preview_spec.rb +0 -40
  140. data/spec/command/rebind_spec.rb +0 -276
  141. data/spec/support/example_group_helper.rb +0 -98
@@ -0,0 +1,198 @@
1
+ html {
2
+ height: 100%;
3
+ }
4
+
5
+ body {
6
+ margin: 0 auto 0 auto;
7
+ padding: 0;
8
+ font-family: sans-serif;
9
+ background: #EEE;
10
+ height: 100%;
11
+ line-height: 1.5em;
12
+ }
13
+
14
+ ul {
15
+ list-style: none;
16
+ }
17
+
18
+ a {
19
+ text-decoration: none;
20
+ color: rgb(25,30,10);
21
+ }
22
+
23
+ #header {
24
+ height: 40px;
25
+ width: 100%;
26
+ margin: 0;
27
+ padding: 0.2em 0 0.2em 1em;
28
+ background: rgb(25,30,10);
29
+ color: rgb(77,144,253);
30
+ }
31
+
32
+ #header h1 {
33
+ margin: 0;
34
+ padding-top: 0.2em;
35
+ background: rgb(25,30,10);
36
+ color: rgb(77,144,253);
37
+ }
38
+
39
+ #header h1 a {
40
+ color: rgb(77,144,253);
41
+ }
42
+
43
+ #header ul#menu {
44
+ margin: 1.5em 0 0 0;
45
+ padding: 0 0 0 2em;
46
+ }
47
+
48
+ #header ul#menu li {
49
+ float: left;
50
+ margin-right: 1em;
51
+ }
52
+
53
+ #page {
54
+ clear: both;
55
+ margin: 0 auto 0 auto;
56
+ width: 1200px;
57
+ position: relative;
58
+ min-height: 100%;
59
+ }
60
+
61
+ #page #content {
62
+ width: 800px;
63
+ }
64
+
65
+ #page #sidebar {
66
+ width: 250px;
67
+ position: absolute;
68
+ top: 0;
69
+ margin-left: 830px;
70
+ padding: 0em 1em 1em 1em;
71
+
72
+ background: rgb(228,239,192);
73
+ color: rgb(0,30,67);
74
+ border-radius: 20px;
75
+ border: 3px rgb(25,30,10) solid;
76
+ -moz-border-radius: 20px;
77
+ -webkit-border-radius: 20px;
78
+ }
79
+
80
+ #page #sidebar h3 {
81
+ margin-bottom: 0;
82
+ padding-bottom: 0.25em;
83
+ border-bottom: 1px solid #191E0A;
84
+ }
85
+
86
+ #page #sidebar .author {
87
+ margin-top: 0.25em;
88
+ }
89
+
90
+ #page #sidebar .recent-entries ul {
91
+ margin-top: 0.25em;
92
+ margin-bottom: 0.25em;
93
+ padding-left: 0;
94
+ list-style: none;
95
+ }
96
+
97
+ #page #sidebar .recent-entries ul li {
98
+ font-size: 0.9em;
99
+ margin-bottom: 0.5em;
100
+ line-height: 1.3em;
101
+ }
102
+
103
+ #page #sidebar .recent-entries .archives {
104
+ text-align: right;
105
+ font-size: 0.9em;
106
+ }
107
+
108
+ article {
109
+ background: rgb(228,239,192);
110
+ color: rgb(0,30,67);
111
+ border-radius: 20px;
112
+ border: 3px rgb(25,30,10) solid;
113
+ -moz-border-radius: 20px;
114
+ -webkit-border-radius: 20px;
115
+ padding: 1em 1.5em 1em 1.5em;
116
+ margin: 4em 0 1em 0;
117
+ width: 100%;
118
+ }
119
+
120
+ article.article h1 {
121
+ margin-top: 2em;
122
+ }
123
+
124
+ article h1.date {
125
+ font-size: 1em;
126
+ text-align: right;
127
+ margin-top: 0.5em;
128
+ margin-bottom: -2em;
129
+ }
130
+
131
+ article ul#entries > li {
132
+ margin-top: 1em;
133
+ }
134
+
135
+ article ul#entries {
136
+ line-height: 1.5em;
137
+ }
138
+
139
+ #entries {
140
+ width: 100%;
141
+ }
142
+
143
+ article ul#entries {
144
+ list-style: none;
145
+ padding-left: 0;
146
+ }
147
+
148
+ article ul#entries h2 {
149
+ padding-bottom: 0.25em;
150
+ margin-bottom: 0.5em;
151
+ border-bottom: 1px solid #191E0A;
152
+ }
153
+
154
+ article ul#entries ul {
155
+ list-style: none;
156
+ margin-top: -1.5em;
157
+ padding-left: 3em;
158
+ }
159
+
160
+ article ul#entries > li {
161
+ margin-top: 1em;
162
+ }
163
+
164
+ #comments {
165
+ background: rgb(228,239,192);
166
+ color: rgb(0,30,67);
167
+ border-radius: 20px;
168
+ border: 3px rgb(25,30,10) solid;
169
+ -moz-border-radius: 20px;
170
+ -webkit-border-radius: 20px;
171
+ padding: 1em 1.5em 1em 1.5em;
172
+ margin: 1em 0 1em 0;
173
+ width: 100%;
174
+ }
175
+
176
+ pre {
177
+ background: #EEE;
178
+ color: rgb(0,30,67);
179
+ padding: 1em;
180
+ border-radius: 10px;
181
+ border: 1px #000 solid;
182
+ -moz-border-radius: 10px;
183
+ -webkit-border-radius: 10px;
184
+ }
185
+
186
+ #footer {
187
+ text-align: center;
188
+ margin: 1em 0 0 0;
189
+ padding: 0.5em 0.5em 0.5em 1em;
190
+ width: 100%;
191
+ background: rgb(0,40,40);
192
+ color: rgb(77,144,253);
193
+ position: relative; bottom: 0;
194
+ }
195
+
196
+ #footer a:visited {
197
+ color: rgb(77,144,253);
198
+ }
@@ -0,0 +1,7 @@
1
+ # This file is used by Rack-based servers to start the application.
2
+
3
+ require_relative 'application'
4
+
5
+ Retter::StaticSite::App::Application.initialize!
6
+
7
+ run Rails.application
@@ -0,0 +1,113 @@
1
+ require_relative 'helpers'
2
+
3
+ module Retter
4
+ module StaticSite
5
+ module App
6
+ class ApplicationController < ActionController::Base
7
+ layout 'application'
8
+
9
+ helper ApplicationHelper, CompatibilityHelper
10
+
11
+ before_filter :reload_entries, :prepend_view_paths
12
+
13
+ private
14
+
15
+ def entries
16
+ @entries ||= Retter::Entry.order_by(:date).reverse
17
+ end
18
+ helper_method :entries
19
+
20
+ def articles
21
+ @articles ||= entries.flat_map(&:articles)
22
+ end
23
+ helper_method :articles
24
+
25
+ def title
26
+ App.config.title
27
+ end
28
+ helper_method :title
29
+
30
+ def reload_entries
31
+ @entries, @articles = nil
32
+
33
+ Retter::Entry.load if Rails.env.development?
34
+ end
35
+
36
+ def prepend_view_paths
37
+ App::Application.config.real_root.tap do |real_root|
38
+ prepend_view_path real_root.join('templates').to_path
39
+ end
40
+
41
+ prepend_view_path App.config.source_path.join('templates').to_path
42
+ end
43
+ end
44
+
45
+ class IndexController < ApplicationController
46
+ def show
47
+ render 'index/show'
48
+ end
49
+ end
50
+
51
+ class AboutController < ApplicationController
52
+ def show
53
+ render 'about/show'
54
+ end
55
+ end
56
+
57
+ class EntriesController < ApplicationController
58
+ attr_reader :entry
59
+ helper_method :entry
60
+
61
+ def index
62
+ respond_to do |f|
63
+ f.html { render 'entries/index' }
64
+ f.rss { render 'entries/index', layout: false }
65
+ end
66
+ end
67
+
68
+ def show
69
+ date = Date.parse(params[:id])
70
+ @entry = Retter::Entry.find(date)
71
+
72
+ render 'entries/show'
73
+ end
74
+
75
+ def last_modified
76
+ entry = Retter::Entry.order_by(:modified_at).last
77
+
78
+ redirect_to retter_entry_path(entry, format: 'html')
79
+ end
80
+
81
+ private
82
+
83
+ def title
84
+ return super unless entry
85
+
86
+ %(#{entry.date} - #{super})
87
+ end
88
+ end
89
+
90
+ module Entries
91
+ class ArticlesController < ApplicationController
92
+ attr_reader :entry, :article
93
+ helper_method :entry, :article
94
+
95
+ def show
96
+ date = Date.parse(params[:entry_id])
97
+
98
+ @entry = Retter::Entry.find(date)
99
+ @article = @entry.articles.find {|a| a.relative_code == params[:id] }
100
+
101
+ render 'entries/articles/show'
102
+ end
103
+
104
+ private
105
+
106
+ def title
107
+ %(#{article.title} - #{super})
108
+ end
109
+ end
110
+ end
111
+ end
112
+ end
113
+ end
@@ -0,0 +1,36 @@
1
+ module Retter
2
+ module StaticSite
3
+ module App
4
+ module ApplicationHelper
5
+ DISQUS_FORM = Haml::Engine.new(<<-HAML)
6
+ #disqus_thread
7
+ :javascript
8
+ var disqus_shortname = '\#{disqus_shortname}';
9
+ (function() {
10
+ var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
11
+ dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
12
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
13
+ })();
14
+ HAML
15
+
16
+ def render_disqus_comment_form
17
+ DISQUS_FORM.render(binding, disqus_shortname: App.config.disqus_shortname)
18
+ end
19
+ end
20
+
21
+ module CompatibilityHelper
22
+ def config
23
+ App.config
24
+ end
25
+
26
+ def article_path(article, options = {})
27
+ entry_article_path(article.entry, article, options)
28
+ end
29
+
30
+ def content
31
+ raise 'Please replace s/content/yield/'
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,7 @@
1
+ %article.article
2
+ %h1.date= link_to entry.date, retter_entry_path(entry, format: 'html')
3
+
4
+ %h1[article]
5
+ = link_to article.title, retter_entry_article_path(entry, article, format: 'html')
6
+
7
+ !~ article.body
@@ -0,0 +1,13 @@
1
+ %article
2
+ %h1 Archives
3
+ %ul#entries
4
+ - current = nil
5
+ - entries.each do |entry|
6
+ %li
7
+ - unless current == entry.date.year
8
+ - current = entry.date.year
9
+ %h2= current
10
+ = link_to entry.date.strftime('%m/%d'), retter_entry_path(entry, format: 'html'), class: 'entry'
11
+ %ul.titles
12
+ - entry.articles.each do |article|
13
+ %li= link_to article.title, retter_entry_article_path(entry, article, format: 'html'), class: 'article'
@@ -0,0 +1,24 @@
1
+ !!! XML
2
+ %rdf:RDF(xmlns="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/")
3
+ - articles = entries.flat_map(&:articles)[0...20]
4
+ %channel{'rdf:about' => config.url}
5
+ %title= config.title
6
+ %link= config.url
7
+ - if latest = entries.first
8
+ %dc:date= latest.date_as_time.iso8601
9
+ %description= config.description
10
+ %items
11
+ %rdf:Seq
12
+ - articles.each do |article|
13
+ %rdf:li{'rdf:resource' => retter_entry_article_url(article.entry, article, format: 'html')}/
14
+
15
+ - articles.each do |article|
16
+ - url = retter_entry_article_url(article.entry, article, format: 'html')
17
+ %item{'rdf:about' => url}
18
+ %title= article.title
19
+ %link= url
20
+ %dc:date= article.entry.date_as_time.iso8601
21
+ %description= strip_tags(article.body)
22
+ %content:encoded
23
+ :cdata
24
+ #{article.body.html_safe}
@@ -0,0 +1,11 @@
1
+ %article.article
2
+ %h1.date= link_to entry.date, retter_entry_path(entry, format: 'html')
3
+
4
+ - if entry.lede.present?
5
+ !~ entry.lede
6
+
7
+ - entry.articles.each do |article|
8
+ %h1[article]
9
+ = link_to article.title, retter_entry_article_path(entry, article, format: 'html')
10
+
11
+ !~ article.body
@@ -0,0 +1,14 @@
1
+ #entries
2
+ - recent_entries = entries[0..4]
3
+ - recent_entries.each do |entry|
4
+ %article.article
5
+ %h1.date= link_to entry.date, retter_entry_path(entry, format: 'html')
6
+
7
+ - if entry.lede.present?
8
+ !~ entry.lede
9
+
10
+ - entry.articles.each do |article|
11
+ %h1[article]
12
+ = link_to article.title, retter_entry_article_path(entry, article, format: 'html')
13
+
14
+ !~ article.body
@@ -0,0 +1,34 @@
1
+ !!! 5
2
+ %html
3
+ %head
4
+ %title= title
5
+ %meta(charset='utf-8')
6
+ %meta(name='author'){content: config.author}
7
+ %link(rel='icon' type='image/png' href='/favicon.png')
8
+ = favicon_link_tag
9
+ = stylesheet_link_tag 'application', media: 'all'
10
+ = auto_discovery_link_tag :rss, retter_entries_url(format: 'rss')
11
+ %body
12
+ %header#header
13
+ %h1
14
+ = link_to config.title, retter_index_path(format: 'html')
15
+ %nav
16
+ %ul#menu
17
+ %li= link_to 'Home', retter_index_path(format: 'html')
18
+ %li= link_to 'About', retter_about_path(format: 'html')
19
+ %li= link_to 'Archives', retter_entries_path(format: 'html')
20
+ %li= link_to 'Feed', retter_entries_path(format: 'rss'), target: '_blank'
21
+ #page
22
+ #content= yield
23
+ %aside#sidebar
24
+ %h3 Author
25
+ .author= link_to config.author, retter_about_path(format: 'html')
26
+ %h3 Recent entries
27
+ .recent-entries
28
+ %ul
29
+ - articles[0..5].each do |article|
30
+ %li
31
+ = link_to article.title, retter_entry_article_path(article.entry, article, format: 'html')
32
+ .archives= link_to 'Archives', retter_entries_path(format: 'html')
33
+ %footer#footer
34
+ #{config.title} (C) #{config.author}