Commit d74aa7ba9234d2d5d508d87cbba645c95e713e12

Authored by Marcos Ramos
1 parent 15717094

blog: add cover image for blog

(ActionItem2849)

Signed-off-by: Marcos Ramos <ms.ramos@outlook.com
Signed-off-by: Valéssio Brito <contato@valessiobrito.com.br>
Signed-off-by: Victor Hugo Alves de Carvalho <victorhugodf.ac@gmail.com>
app/controllers/my_profile/cms_controller.rb
@@ -73,6 +73,7 @@ class CmsController &lt; MyProfileController @@ -73,6 +73,7 @@ class CmsController &lt; MyProfileController
73 refuse_blocks 73 refuse_blocks
74 record_coming 74 record_coming
75 if request.post? 75 if request.post?
  76 + @article.image = nil if params[:remove_image] == 'true'
76 @article.last_changed_by = user 77 @article.last_changed_by = user
77 if @article.update_attributes(params[:article]) 78 if @article.update_attributes(params[:article])
78 if !continue 79 if !continue
app/views/cms/_blog.rhtml
@@ -54,6 +54,15 @@ @@ -54,6 +54,15 @@
54 54
55 <%= labelled_form_field(_('Description:'), text_area(:article, :body, :rows => 10)) %> 55 <%= labelled_form_field(_('Description:'), text_area(:article, :body, :rows => 10)) %>
56 56
  57 +<% f.fields_for :image_builder, @article.image do |i| %>
  58 + <%= file_field_or_thumbnail(_('Cover image:'), @article.image, i)%>
  59 + <%= _("Max size: %s (.jpg, .gif, .png)")% Image.max_size.to_humanreadable %>
  60 +<% end %>
  61 +
  62 +<% unless @article.image.nil? %>
  63 + <%= labelled_check_box(_('Remove cover image'),'remove_image',true,false)%>
  64 +<% end %>
  65 +
57 <%= labelled_form_field(_('How to display posts:'), f.select(:visualization_format, [ [ _('Full post'), 'full'], [ _('First paragraph'), 'short'] ])) %> 66 <%= labelled_form_field(_('How to display posts:'), f.select(:visualization_format, [ [ _('Full post'), 'full'], [ _('First paragraph'), 'short'] ])) %>
58 67
59 <%= labelled_form_field(_('Posts per page:'), f.select(:posts_per_page, Blog.posts_per_page_options)) %> 68 <%= labelled_form_field(_('Posts per page:'), f.select(:posts_per_page, Blog.posts_per_page_options)) %>
app/views/content_viewer/_article_toolbar.rhtml
@@ -52,6 +52,9 @@ @@ -52,6 +52,9 @@
52 52
53 </div> 53 </div>
54 <div id="article-header"> 54 <div id="article-header">
  55 + <% if @page.blog? and !@page.image.nil? %>
  56 + <div class="blog-cover"><%= image_tag(@page.image.public_filename())%></div>
  57 + <% end %>
55 <%= link_to(image_tag('icons-mime/rss-feed.png'), @page.feed.url, :class => 'blog-feed-link') if @page.has_posts? && @page.feed %> 58 <%= link_to(image_tag('icons-mime/rss-feed.png'), @page.feed.url, :class => 'blog-feed-link') if @page.has_posts? && @page.feed %>
56 <%= article_title(@page, :no_link => true) %> 59 <%= article_title(@page, :no_link => true) %>
57 <%= article_translations(@page) %> 60 <%= article_translations(@page) %>
features/blog.feature
@@ -15,6 +15,7 @@ Feature: blog @@ -15,6 +15,7 @@ Feature: blog
15 And I follow "Create blog" 15 And I follow "Create blog"
16 Then I should see "My Blog" 16 Then I should see "My Blog"
17 When I fill in "Title" with "My Blog" 17 When I fill in "Title" with "My Blog"
  18 + And I fill in "Address" with "my-blog"
18 And I press "Save" 19 And I press "Save"
19 And I go to joaosilva's control panel 20 And I go to joaosilva's control panel
20 Then I should see "Configure blog" 21 Then I should see "Configure blog"
@@ -24,6 +25,7 @@ Feature: blog @@ -24,6 +25,7 @@ Feature: blog
24 And I follow "Create blog" 25 And I follow "Create blog"
25 Then I should see "My Blog" 26 Then I should see "My Blog"
26 When I fill in "Title" with "My Blog" 27 When I fill in "Title" with "My Blog"
  28 + And I fill in "Address" with "my-blog"
27 And I press "Save" 29 And I press "Save"
28 Then I should be on /joaosilva/my-blog 30 Then I should be on /joaosilva/my-blog
29 31
@@ -33,6 +35,7 @@ Feature: blog @@ -33,6 +35,7 @@ Feature: blog
33 And I follow "New content" 35 And I follow "New content"
34 When I follow "Blog" 36 When I follow "Blog"
35 And I fill in "Title" with "Blog from cms" 37 And I fill in "Title" with "Blog from cms"
  38 + And I fill in "Address" with "blog-from-cms"
36 And I press "Save" 39 And I press "Save"
37 Then I should be on /joaosilva/blog-from-cms 40 Then I should be on /joaosilva/blog-from-cms
38 41
@@ -42,12 +45,14 @@ Feature: blog @@ -42,12 +45,14 @@ Feature: blog
42 And I follow "New content" 45 And I follow "New content"
43 And I follow "Blog" 46 And I follow "Blog"
44 And I fill in "Title" with "Blog One" 47 And I fill in "Title" with "Blog One"
  48 + And I fill in "Address" with "blog-one"
45 And I press "Save" 49 And I press "Save"
46 Then I go to joaosilva's control panel 50 Then I go to joaosilva's control panel
47 And I follow "Manage Content" 51 And I follow "Manage Content"
48 And I follow "New content" 52 And I follow "New content"
49 And I follow "Blog" 53 And I follow "Blog"
50 And I fill in "Title" with "Blog Two" 54 And I fill in "Title" with "Blog Two"
  55 + And I fill in "Address" with "blog-two"
51 And I press "Save" 56 And I press "Save"
52 Then I should not see "error" 57 Then I should not see "error"
53 And I should be on /joaosilva/blog-two 58 And I should be on /joaosilva/blog-two
@@ -109,3 +114,24 @@ Feature: blog @@ -109,3 +114,24 @@ Feature: blog
109 And I follow "New content" 114 And I follow "New content"
110 When I follow "Blog" 115 When I follow "Blog"
111 Then I should see "Tag list" 116 Then I should see "Tag list"
  117 +
  118 + Scenario: do not display the "clear cover image" when there is no uploaded image
  119 + Given the following blogs
  120 + | owner | name |
  121 + | joaosilva | My Blog |
  122 + And I go to joaosilva's control panel
  123 + And I follow "Configure blog"
  124 + Then I should not see "Delete cover image"
  125 +
  126 + # the step for attaching a file on the input only works with capybara 1.1.2, but it requires rails 1.9.3
  127 + @selenium-fixme
  128 + Scenario: display cover image after uploading an image as the blog cover
  129 + Given the following blogs
  130 + | owner | name |
  131 + | joaosilva | My Blog |
  132 + And I go to joaosilva's control panel
  133 + And I follow "Configure blog"
  134 + And I attach the file "public/images/rails.png" to "Uploaded data"
  135 + And I press "Save"
  136 + When I am on /joaosilva/my-blog
  137 + Then there should be a div with class "blog-cover"
features/step_definitions/web_steps.rb
@@ -243,3 +243,7 @@ Then /^display &quot;([^\&quot;]*)&quot;$/ do |element| @@ -243,3 +243,7 @@ Then /^display &quot;([^\&quot;]*)&quot;$/ do |element|
243 # * https://github.com/jnicklas/capybara/issues/76 243 # * https://github.com/jnicklas/capybara/issues/76
244 evaluate_script("jQuery('#{element}').show() && false;") 244 evaluate_script("jQuery('#{element}').show() && false;")
245 end 245 end
  246 +
  247 +Then /^there should be a div with class "([^"]*)"$/ do |klass|
  248 + should have_selector('div', :class => klass)
  249 +end
public/stylesheets/application.css
@@ -932,6 +932,18 @@ code input { @@ -932,6 +932,18 @@ code input {
932 #article-actions a{ 932 #article-actions a{
933 white-space: nowrap; 933 white-space: nowrap;
934 } 934 }
  935 +
  936 +#article-header .blog-cover {
  937 + overflow: hidden;
  938 + display: block;
  939 + width: 100%;
  940 + max-height: 170px;
  941 +}
  942 +
  943 +#article-header .blog-cover img{
  944 + width: 100%;
  945 +}
  946 +
935 #article-tags { 947 #article-tags {
936 font-size: 10px; 948 font-size: 10px;
937 text-align: right; 949 text-align: right;
@@ -6441,3 +6453,4 @@ li.profile-activity-item.upload_image .activity-gallery-images-count-1 img { @@ -6441,3 +6453,4 @@ li.profile-activity-item.upload_image .activity-gallery-images-count-1 img {
6441 right: 2px; 6453 right: 2px;
6442 z-index: 1; 6454 z-index: 1;
6443 } 6455 }
  6456 +
test/functional/cms_controller_test.rb
@@ -900,6 +900,15 @@ class CmsControllerTest &lt; ActionController::TestCase @@ -900,6 +900,15 @@ class CmsControllerTest &lt; ActionController::TestCase
900 assert_no_tag :tag => 'a', :attributes => { :href => "/myprofile/#{profile.identifier}/cms/edit/#{profile.blog.feed.id}" } 900 assert_no_tag :tag => 'a', :attributes => { :href => "/myprofile/#{profile.identifier}/cms/edit/#{profile.blog.feed.id}" }
901 end 901 end
902 902
  903 + should 'remove the image of an article' do
  904 + blog = Blog.create(:profile_id => profile.id, :name=>'testblog', :image_builder => { :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')})
  905 + blog.save!
  906 + post :edit, :profile => profile.identifier, :id => blog.id, :remove_image => 'true'
  907 + blog.reload
  908 +
  909 + assert_nil blog.image
  910 + end
  911 +
903 should 'update feed options by edit blog form' do 912 should 'update feed options by edit blog form' do
904 profile.articles << Blog.new(:name => 'Blog for test', :profile => profile) 913 profile.articles << Blog.new(:name => 'Blog for test', :profile => profile)
905 post :edit, :profile => profile.identifier, :id => profile.blog.id, :article => { :feed => { :limit => 7 } } 914 post :edit, :profile => profile.identifier, :id => profile.blog.id, :article => { :feed => { :limit => 7 } }
test/unit/blog_test.rb
@@ -218,4 +218,36 @@ class BlogTest &lt; ActiveSupport::TestCase @@ -218,4 +218,36 @@ class BlogTest &lt; ActiveSupport::TestCase
218 assert ! blog.empty? 218 assert ! blog.empty?
219 end 219 end
220 220
  221 + should 'set cover image' do
  222 + profile = fast_create(Profile)
  223 + blog = Blog.create(:profile_id => profile.id, :name=>'testblog', :image_builder => { :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')})
  224 + blog.save!
  225 + blog.reload
  226 + assert_equal blog.image(true).filename, 'rails.png'
  227 + end
  228 +
  229 + should 'remove cover image' do
  230 + profile = fast_create(Profile)
  231 + blog = Blog.create(:profile_id => profile.id, :name=>'testblog', :image_builder => { :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')})
  232 + blog.save!
  233 + blog.reload
  234 +
  235 + blog.image = nil
  236 + blog.save!
  237 + blog.reload
  238 + assert blog.image.nil?
  239 + end
  240 +
  241 + should 'update cover image' do
  242 + profile = fast_create(Profile)
  243 + blog = Blog.create(:profile_id => profile.id, :name=>'testblog', :image_builder => { :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')})
  244 + blog.save!
  245 + blog.reload
  246 +
  247 + blog.image = Image.create!(:uploaded_data => fixture_file_upload('/files/noosfero-network.png', 'image/png'))
  248 + blog.save!
  249 + blog.reload
  250 +
  251 + assert_equal blog.image(true).filename, 'noosfero-network.png'
  252 + end
221 end 253 end