refinerycms-blog 1.0.rc16 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/app/controllers/blog/categories_controller.rb +2 -2
- data/app/controllers/blog/posts_controller.rb +23 -13
- data/app/controllers/blog_controller.rb +3 -2
- data/app/helpers/blog_posts_helper.rb +28 -0
- data/app/models/blog/comment_mailer.rb +1 -1
- data/app/models/blog_category.rb +4 -4
- data/app/models/blog_comment.rb +29 -20
- data/app/models/blog_post.rb +21 -12
- data/app/views/admin/blog/_submenu.html.erb +9 -4
- data/app/views/admin/blog/categories/_form.html.erb +3 -11
- data/app/views/admin/blog/categories/edit.html.erb +1 -1
- data/app/views/admin/blog/categories/index.html.erb +1 -1
- data/app/views/admin/blog/categories/new.html.erb +1 -1
- data/app/views/admin/blog/comments/_comment.html.erb +2 -2
- data/app/views/admin/blog/comments/index.html.erb +5 -5
- data/app/views/admin/blog/comments/show.html.erb +5 -2
- data/app/views/admin/blog/posts/_form.css.erb +7 -0
- data/app/views/admin/blog/posts/_form.html.erb +10 -30
- data/app/views/admin/blog/posts/_form.js.erb +13 -0
- data/app/views/admin/blog/posts/index.html.erb +1 -1
- data/app/views/blog/categories/show.html.erb +1 -1
- data/app/views/blog/posts/_nav.html.erb +13 -0
- data/app/views/blog/posts/_post.html.erb +34 -0
- data/app/views/blog/posts/archive.html.erb +19 -0
- data/app/views/blog/posts/index.html.erb +4 -1
- data/app/views/blog/posts/show.html.erb +28 -47
- data/app/views/blog/shared/_categories.html.erb +1 -1
- data/app/views/blog/shared/_post.html.erb +16 -6
- data/app/views/blog/shared/_posts.html.erb +1 -1
- data/app/views/blog/shared/_rss_feed.html.erb +1 -1
- data/config/routes.rb +26 -64
- data/{spec → features/support}/factories/blog_categories.rb +2 -2
- data/{spec → features/support}/factories/blog_comments.rb +1 -1
- data/{spec → features/support}/factories/blog_posts.rb +1 -1
- data/features/support/paths.rb +24 -0
- data/generators/{refinery_blog/refinery_blog_generator.rb → refinerycms_blog/refinerycms_blog_generator.rb} +4 -4
- data/generators/{refinery_blog → refinerycms_blog}/templates/db/migrate/migration.rb +0 -0
- data/generators/{refinery_blog → refinerycms_blog}/templates/db/seeds/seed.rb +0 -0
- data/lib/gemspec.rb +2 -2
- data/lib/generators/{refinery_blog → refinerycms_blog}/templates/db/migrate/migration_number_create_singular_name.rb +0 -0
- data/lib/generators/{refinery_blog → refinerycms_blog}/templates/db/seeds/seed.rb +0 -0
- data/lib/generators/{refinery_blog_generator.rb → refinerycms_blog_generator.rb} +3 -3
- data/lib/refinerycms-blog.rb +2 -2
- data/public/javascripts/refinerycms-blog.js +25 -0
- data/public/stylesheets/refinerycms-blog.css +72 -1
- data/readme.md +18 -8
- data/spec/models/blog_categories_spec.rb +7 -6
- data/spec/models/blog_comments_spec.rb +7 -6
- data/spec/models/blog_posts_spec.rb +2 -1
- metadata +25 -24
@@ -0,0 +1,13 @@
|
|
1
|
+
<script>
|
2
|
+
$(document).ready(function(){
|
3
|
+
$('#toggle_advanced_options').click(function(e){
|
4
|
+
e.preventDefault();
|
5
|
+
|
6
|
+
$('#more_options').animate({opacity: 'toggle', height: 'toggle'}, 250);
|
7
|
+
|
8
|
+
$('html,body').animate({
|
9
|
+
scrollTop: $('#toggle_advanced_options').parent().offset().top
|
10
|
+
}, 250);
|
11
|
+
});
|
12
|
+
});
|
13
|
+
</script>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<% if next_or_previous?(@blog_post) -%>
|
2
|
+
<nav id="next_prev_article">
|
3
|
+
<% if @blog_post.next.present? -%>
|
4
|
+
<%= link_to raw(truncate(@blog_post.next.title) + " »"), @blog_post.next, :class => 'next' %>
|
5
|
+
<% end -%>
|
6
|
+
|
7
|
+
<%= link_to 'Blog Home', blog_root_path, :class => 'home' %>
|
8
|
+
|
9
|
+
<% if @blog_post.prev.present? -%>
|
10
|
+
<%= link_to "« ".html_safe + truncate(@blog_post.prev.title), @blog_post.prev, :class => 'prev' %>
|
11
|
+
<% end -%>
|
12
|
+
</nav><!-- /next_prev_article -->
|
13
|
+
<% end -%>
|
@@ -0,0 +1,34 @@
|
|
1
|
+
<% flash.each do |key, value| %>
|
2
|
+
<div id='flash' class="flash flash_<%= key %>">
|
3
|
+
<%= value %>
|
4
|
+
</div>
|
5
|
+
<% end %>
|
6
|
+
<article id="blog_post">
|
7
|
+
<header>
|
8
|
+
<h1><%= @blog_post.title %></h1>
|
9
|
+
<details>
|
10
|
+
<time datetime="<%= @blog_post.published_at.strftime('%Y-%m-%d') %>" class='posted_at'>
|
11
|
+
<%= t('blog.shared.posts.created_at', :when => @blog_post.published_at.strftime('%d %B %Y')) %>.
|
12
|
+
</time>
|
13
|
+
<% if (categories = @blog_post.categories).any? %>
|
14
|
+
<aside class='filed_in'>
|
15
|
+
<%= t('.filed_in') %>
|
16
|
+
<% categories.each_with_index do |category, index| %>
|
17
|
+
<%= link_to category.title, blog_category_url(category) -%><%= ',' if index < ((categories.length) - 1) %>
|
18
|
+
<% end %>
|
19
|
+
</aside>
|
20
|
+
<% end %>
|
21
|
+
</details>
|
22
|
+
</header>
|
23
|
+
<%= @blog_post.body.html_safe %>
|
24
|
+
|
25
|
+
<% if BlogPost::ShareThis.enabled? %>
|
26
|
+
<span class="st_sharethis" displayText="ShareThis"></span>
|
27
|
+
<% end %>
|
28
|
+
</article>
|
29
|
+
<%= render :partial => '/shared/draft_page_message' unless @blog_post.nil? or @blog_post.live? -%>
|
30
|
+
<% if next_or_previous?(@blog_post) -%>
|
31
|
+
<nav id="next_prev_article">
|
32
|
+
<%= render 'nav' %>
|
33
|
+
</nav><!-- /next_prev_article -->
|
34
|
+
<% end -%>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<% content_for :body_content_left do %>
|
2
|
+
<%= @page[Page.default_parts.first.to_sym] %>
|
3
|
+
<h1>Blog Archive for <%= @archive_date.strftime('%B %Y') %></h1>
|
4
|
+
<section id="blog_posts">
|
5
|
+
<%= render :partial => "/blog/shared/post", :collection => @blog_posts %>
|
6
|
+
</section>
|
7
|
+
<%= "There are no blog articles posted for #{@archive_date.strftime('%B %Y')}. Stay tuned." unless @blog_posts.any? %>
|
8
|
+
<%# TODO: Add locale logic here - hubble is a n00b at that %>
|
9
|
+
<% end %>
|
10
|
+
|
11
|
+
<% content_for :body_content_right do %>
|
12
|
+
<%= @page[Page.default_parts.second.to_sym] %>
|
13
|
+
<%= render :partial => "/blog/shared/categories" %>
|
14
|
+
<%= render :partial => "/blog/shared/rss_feed" %>
|
15
|
+
<%= blog_archive_list %>
|
16
|
+
<% end %>
|
17
|
+
|
18
|
+
<%= render :partial => "/shared/content_page" %>
|
19
|
+
<% content_for :stylesheets, stylesheet_link_tag('refinerycms-blog') %>
|
@@ -4,6 +4,8 @@
|
|
4
4
|
<section id="blog_posts">
|
5
5
|
<%= render :partial => "/blog/shared/post", :collection => @blog_posts %>
|
6
6
|
</section>
|
7
|
+
<%= "<p>There are no blog articles posted yet. Stay tuned.</p>".html_safe unless @blog_posts.any? %>
|
8
|
+
<%# TODO: Add locale logic here - hubble is a n00b at that %>
|
7
9
|
<% end %>
|
8
10
|
|
9
11
|
<% content_for :body_content_right do %>
|
@@ -11,7 +13,8 @@
|
|
11
13
|
|
12
14
|
<%= render :partial => "/blog/shared/categories" %>
|
13
15
|
<%= render :partial => "/blog/shared/rss_feed" %>
|
16
|
+
<%= blog_archive_list %>
|
14
17
|
<% end %>
|
15
18
|
|
16
19
|
<%= render :partial => "/shared/content_page" %>
|
17
|
-
<% content_for :
|
20
|
+
<% content_for :stylesheets, stylesheet_link_tag('refinerycms-blog') %>
|
@@ -1,36 +1,8 @@
|
|
1
|
-
<% content_for :head do %>
|
2
|
-
<% if BlogPost::ShareThis.enabled? %>
|
3
|
-
<script src="http://w.sharethis.com/button/buttons.js"></script>
|
4
|
-
<script>
|
5
|
-
stLight.options({publisher:'<%= BlogPost::ShareThis.key %>'});
|
6
|
-
</script>
|
7
|
-
<% end %>
|
8
|
-
<% end %>
|
9
|
-
|
10
|
-
<% content_for :body_content_title, @blog_post.title %>
|
11
|
-
|
12
1
|
<% content_for :body_content_left do %>
|
13
|
-
<
|
14
|
-
|
15
|
-
|
16
|
-
<%= t('blog.shared.posts.created_at', :when => @blog_post.published_at.strftime('%d %B %Y')) %>.
|
17
|
-
|
18
|
-
<% if (categories = @blog_post.categories).any? %>
|
19
|
-
<span class='filed_in'>
|
20
|
-
<%= t('.filed_in') %>
|
21
|
-
<% categories.each_with_index do |category, index| %>
|
22
|
-
<%= link_to category.title, blog_category_url(category) -%><%= ',' if index < ((categories.length) - 1) %>
|
23
|
-
<% end %>
|
24
|
-
</span>
|
25
|
-
<% end %>
|
26
|
-
</p>
|
27
|
-
</header>
|
28
|
-
<%= @blog_post.body.html_safe %>
|
2
|
+
<div id="show_blog_post">
|
3
|
+
<%= render 'post' %>
|
4
|
+
</div>
|
29
5
|
|
30
|
-
<% if BlogPost::ShareThis.enabled? %>
|
31
|
-
<span class="st_sharethis" displayText="ShareThis"></span>
|
32
|
-
<% end %>
|
33
|
-
</article>
|
34
6
|
<% if BlogPost.comments_allowed? %>
|
35
7
|
<aside id="comments">
|
36
8
|
<h2><%= t('.comments.title') %></h2>
|
@@ -51,26 +23,15 @@
|
|
51
23
|
|
52
24
|
<h2><%= t('.comments.add') %></h2>
|
53
25
|
<% form_for [:blog_post, @blog_comment] do |f| %>
|
54
|
-
|
55
|
-
|
56
|
-
<% else %>
|
57
|
-
<%= render :partial => "/shared/admin/error_messages",
|
58
|
-
:locals => {
|
59
|
-
:object => f.object,
|
60
|
-
:include_object_name => true
|
61
|
-
} %>
|
62
|
-
<% end %>
|
26
|
+
<%= f.error_messages %>
|
27
|
+
|
63
28
|
<div class='field'>
|
64
29
|
<%= f.label :name %>
|
65
30
|
<%= f.text_field :name %>
|
66
31
|
</div>
|
67
32
|
<div class='field'>
|
68
33
|
<%= f.label :email %>
|
69
|
-
|
70
|
-
<%= f.email_field :email %>
|
71
|
-
<% else %>
|
72
|
-
<%= f.text_field :email %>
|
73
|
-
<% end %>
|
34
|
+
<%= f.text_field :email %>
|
74
35
|
</div>
|
75
36
|
<div class='field message_field'>
|
76
37
|
<%= f.label :message %>
|
@@ -88,7 +49,27 @@
|
|
88
49
|
<%= render :partial => "/blog/shared/categories" %>
|
89
50
|
<%= render :partial => "/blog/shared/posts" %>
|
90
51
|
<%= render :partial => "/blog/shared/rss_feed" %>
|
52
|
+
<%= blog_archive_list %>
|
91
53
|
<% end %>
|
92
54
|
|
93
|
-
<%= render :partial => "/shared/content_page" %>
|
94
|
-
|
55
|
+
<%= render :partial => "/shared/content_page", :locals => { :remove_automatic_sections => true } %>
|
56
|
+
|
57
|
+
<% if Refinery.version < '0.9.9' %>
|
58
|
+
<% content_for :head_libraries, jquery_include_tags(:jquery_ui => false) %>
|
59
|
+
<% content_for :head do %>
|
60
|
+
<%= stylesheet_link_tag 'refinerycms-blog' %>
|
61
|
+
<%= javascript_include_tag('refinerycms-blog') %>
|
62
|
+
<% if BlogPost::ShareThis.enabled? %>
|
63
|
+
<script src="http://w.sharethis.com/button/buttons.js"></script>
|
64
|
+
<script>stLight.options({publisher:'<%= BlogPost::ShareThis.key %>'});</script>
|
65
|
+
<% end %>
|
66
|
+
<% end %>
|
67
|
+
<% else %>
|
68
|
+
<% content_for :stylesheets, stylesheet_link_tag('refinerycms-blog') %>
|
69
|
+
<% content_for :before_javascript_libraries, jquery_include_tags(:jquery_ui => false) %>
|
70
|
+
<% content_for :javascripts do %>
|
71
|
+
<%= javascript_include_tag 'refinerycms-blog' %>
|
72
|
+
<script src="http://w.sharethis.com/button/buttons.js"></script>
|
73
|
+
<script>stLight.options({publisher:'<%= BlogPost::ShareThis.key %>'});</script>
|
74
|
+
<% end if BlogPost::ShareThis.enabled? %>
|
75
|
+
<% end %>
|
@@ -2,9 +2,19 @@
|
|
2
2
|
<article class="blog_post" id="<%= dom_id(post) %>">
|
3
3
|
<header>
|
4
4
|
<h1><%= link_to post.title, blog_post_url(post) %></h1>
|
5
|
-
<
|
6
|
-
<%=
|
7
|
-
|
5
|
+
<details>
|
6
|
+
<time datetime="<%= post.published_at.strftime('%Y-%m-%d') %>" class='posted_at'>
|
7
|
+
<%= t('blog.shared.posts.created_at', :when => post.published_at.strftime('%d %B %Y')) %>.
|
8
|
+
</time>
|
9
|
+
<% if (categories = post.categories).any? %>
|
10
|
+
<aside class='filed_in'>
|
11
|
+
<%= t('filed_in', :scope => 'blog.posts.show') %>
|
12
|
+
<% categories.each_with_index do |category, index| %>
|
13
|
+
<%= link_to category.title, blog_category_url(category) -%><%= ',' if index < ((categories.length) - 1) %>
|
14
|
+
<% end %>
|
15
|
+
</aside>
|
16
|
+
<% end %>
|
17
|
+
</details>
|
8
18
|
</header>
|
9
19
|
<section class='clearfix'>
|
10
20
|
<%= truncate(post.body,
|
@@ -15,14 +25,14 @@
|
|
15
25
|
<p>
|
16
26
|
<%= link_to t('blog.shared.posts.read_more'), blog_post_url(post) %>
|
17
27
|
|
18
|
-
<
|
28
|
+
<aside class='comment_count'>
|
19
29
|
<% if post.comments.any? %>
|
20
30
|
(<%= pluralize(post.comments.approved.count, t('blog.shared.comments.singular')) %>)
|
21
31
|
<% else %>
|
22
32
|
(<%= t('blog.shared.comments.none') %>)
|
23
33
|
<% end %>
|
24
|
-
</
|
34
|
+
</aside>
|
25
35
|
</p>
|
26
36
|
</footer>
|
27
37
|
</article>
|
28
|
-
<% end %>
|
38
|
+
<% end %>
|
@@ -1,2 +1,2 @@
|
|
1
1
|
<h2><%= t('.title') %></h2>
|
2
|
-
<%= link_to "Subscribe", blog_rss_feed_url, :id => "rss_feed_subscribe"%>
|
2
|
+
<%= link_to "Subscribe", blog_rss_feed_url, :id => "rss_feed_subscribe"%>
|
data/config/routes.rb
CHANGED
@@ -1,71 +1,33 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
map.namespace(:admin, :path_prefix => 'refinery') do |admin|
|
12
|
-
admin.namespace :blog do |blog|
|
13
|
-
blog.resources :posts
|
14
|
-
|
15
|
-
blog.resources :categories
|
16
|
-
|
17
|
-
blog.resources :comments, :collection => {
|
18
|
-
:approved => :get,
|
19
|
-
:rejected => :get
|
20
|
-
}, :member => {
|
21
|
-
:approved => :get,
|
22
|
-
:rejected => :get
|
23
|
-
}
|
24
|
-
|
25
|
-
blog.resources :settings, :collection => {
|
26
|
-
:notification_recipients => [:get, :post],
|
27
|
-
:moderation => :get
|
28
|
-
}
|
29
|
-
end
|
30
|
-
end
|
1
|
+
ActionController::Routing::Routes.draw do |map|
|
2
|
+
map.namespace(:blog) do |blog|
|
3
|
+
blog.rss_feed 'feed.rss', :controller => 'posts', :action => 'index', :format => 'rss'
|
4
|
+
blog.root :controller => "posts", :action => 'index'
|
5
|
+
blog.post ':id', :controller => "posts", :action => 'show'
|
6
|
+
blog.category 'categories/:id', :controller => "categories", :action => 'show'
|
7
|
+
blog.post_blog_comments ':id/comments', :controller => 'posts', :action => 'comment'
|
8
|
+
|
9
|
+
## TODO: what is the rails2 syntax for this? sorry ;__;
|
10
|
+
# get 'archive/:year/:month', :to => 'posts#archive', :as => 'archive_blog_posts'
|
31
11
|
end
|
32
|
-
else
|
33
|
-
Refinery::Application.routes.draw do
|
34
|
-
scope(:path => 'blog', :module => 'blog') do
|
35
|
-
root :to => 'posts#index', :as => 'blog_root'
|
36
|
-
match 'feed.rss', :to => 'posts#index.rss', :as => 'blog_rss_feed'
|
37
|
-
match ':id', :to => 'posts#show', :as => 'blog_post'
|
38
|
-
match 'categories/:id', :to => 'categories#show', :as => 'blog_category'
|
39
|
-
match ':id/comments', :to => 'posts#comment', :as => 'blog_post_blog_comments'
|
40
|
-
end
|
41
|
-
|
42
|
-
scope(:path => 'refinery', :as => 'admin', :module => 'admin') do
|
43
|
-
scope(:path => 'blog', :name_prefix => 'admin', :as => 'blog', :module => 'blog') do
|
44
|
-
root :to => 'posts#index'
|
45
|
-
resources :posts
|
46
12
|
|
47
|
-
|
13
|
+
map.namespace(:admin, :path_prefix => 'refinery') do |admin|
|
14
|
+
admin.namespace :blog do |blog|
|
15
|
+
blog.resources :posts
|
48
16
|
|
49
|
-
|
50
|
-
collection do
|
51
|
-
get :approved
|
52
|
-
get :rejected
|
53
|
-
end
|
54
|
-
member do
|
55
|
-
get :approved
|
56
|
-
get :rejected
|
57
|
-
end
|
58
|
-
end
|
17
|
+
blog.resources :categories
|
59
18
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
19
|
+
blog.resources :comments, :collection => {
|
20
|
+
:approved => :get,
|
21
|
+
:rejected => :get
|
22
|
+
}, :member => {
|
23
|
+
:approved => :get,
|
24
|
+
:rejected => :get
|
25
|
+
}
|
64
26
|
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
27
|
+
blog.resources :settings, :collection => {
|
28
|
+
:notification_recipients => [:get, :post],
|
29
|
+
:moderation => :get
|
30
|
+
}
|
69
31
|
end
|
70
32
|
end
|
71
|
-
end
|
33
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module NavigationHelpers
|
2
|
+
module Refinery
|
3
|
+
module Blog
|
4
|
+
def path_to(page_name)
|
5
|
+
case page_name
|
6
|
+
when /the list of blog posts/
|
7
|
+
admin_blog_posts_path
|
8
|
+
when /the new blog posts? form/
|
9
|
+
new_admin_blog_post_path
|
10
|
+
else
|
11
|
+
begin
|
12
|
+
if page_name =~ /the blog post titled "?([^\"]*)"?/ and (page = BlogPost.find_by_title($1)).present?
|
13
|
+
self.url_for(page.url)
|
14
|
+
else
|
15
|
+
nil
|
16
|
+
end
|
17
|
+
rescue
|
18
|
+
nil
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class
|
1
|
+
class RefinerycmsBlogGenerator < Rails::Generator::NamedBase
|
2
2
|
|
3
3
|
def initialize(*runtime_args)
|
4
4
|
# set argument for the user.
|
@@ -7,7 +7,7 @@ class RefineryBlogGenerator < Rails::Generator::NamedBase
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def banner
|
10
|
-
'Usage: script/generate
|
10
|
+
'Usage: script/generate refinerycms_blog'
|
11
11
|
end
|
12
12
|
|
13
13
|
def manifest
|
@@ -24,7 +24,7 @@ class RefineryBlogGenerator < Rails::Generator::NamedBase
|
|
24
24
|
path = (%w(public) | image.split('public/').last.split('/'))[0...-1].join('/')
|
25
25
|
m.template "../../../#{path}/#{image.split('/').last}", "#{path}/#{image.split('/').last}"
|
26
26
|
end
|
27
|
-
|
27
|
+
|
28
28
|
m.directory('db/seeds')
|
29
29
|
m.template('db/seeds/seed.rb', 'db/seeds/refinerycms_blog.rb')
|
30
30
|
|
@@ -66,4 +66,4 @@ class RefineryBlogGenerator < Rails::Generator::NamedBase
|
|
66
66
|
end
|
67
67
|
end
|
68
68
|
|
69
|
-
end if defined?(Rails::Generator::NamedBase)
|
69
|
+
end if defined?(Rails::Generator::NamedBase)
|