Commit ec8b416d372f2b75e8916e28e76f187221621123
Exists in
master
and in
29 other branches
Merge branch 'remove-article-images' into 'master'
Allow user to remove main image for article or profile Right now if you add an image for a profile or an article, you can change the image but you can't remove it. With this patch the user can remove a profile's or article's image just like the user removes a blog's cover image. To achieve that, this patch makes the removal mechanism part of the `#file_field_or_thumbnail` helper. See merge request !665
Showing
9 changed files
with
55 additions
and
27 deletions
Show diff stats
app/controllers/my_profile/cms_controller.rb
... | ... | @@ -93,7 +93,6 @@ class CmsController < MyProfileController |
93 | 93 | refuse_blocks |
94 | 94 | record_coming |
95 | 95 | if request.post? |
96 | - @article.image = nil if params[:remove_image] == 'true' | |
97 | 96 | if @article.image.present? && params[:article][:image_builder] && |
98 | 97 | params[:article][:image_builder][:label] |
99 | 98 | @article.image.label = params[:article][:image_builder][:label] | ... | ... |
app/helpers/application_helper.rb
... | ... | @@ -725,10 +725,10 @@ module ApplicationHelper |
725 | 725 | javascript_include_tag script if script |
726 | 726 | end |
727 | 727 | |
728 | - def file_field_or_thumbnail(label, image, i) | |
728 | + def file_field_or_thumbnail(label, image, i, removable = true) | |
729 | 729 | display_form_field label, ( |
730 | 730 | render :partial => (image && image.valid? ? 'shared/show_thumbnail' : 'shared/change_image'), |
731 | - :locals => { :i => i, :image => image } | |
731 | + :locals => { :i => i, :image => image, :removable => removable } | |
732 | 732 | ) |
733 | 733 | end |
734 | 734 | ... | ... |
app/models/image.rb
... | ... | @@ -23,7 +23,8 @@ class Image < ActiveRecord::Base |
23 | 23 | |
24 | 24 | postgresql_attachment_fu |
25 | 25 | |
26 | - attr_accessible :uploaded_data, :label | |
26 | + attr_accessible :uploaded_data, :label, :remove_image | |
27 | + attr_accessor :remove_image | |
27 | 28 | |
28 | 29 | def current_data |
29 | 30 | File.file?(full_filename) ? File.read(full_filename) : nil | ... | ... |
app/views/cms/_blog.html.erb
... | ... | @@ -55,14 +55,12 @@ |
55 | 55 | |
56 | 56 | <%= labelled_form_field(_('Description:'), text_area(:article, :body, :rows => 10, :class => 'mceEditor')) %> |
57 | 57 | |
58 | -<%= f.fields_for :image_builder, @article.image do |i| %> | |
59 | - <%= file_field_or_thumbnail(_('Cover image:'), @article.image, i)%> | |
60 | - <%= _("Max size: %s (.jpg, .gif, .png)")% Image.max_size.to_humanreadable %> | |
61 | -<% end %> | |
62 | - | |
63 | -<% unless @article.image.nil? %> | |
64 | - <%= labelled_check_box(_('Remove cover image'),'remove_image',true,false)%> | |
65 | -<% end %> | |
58 | +<div id="blog-image-builder"> | |
59 | + <%= f.fields_for :image_builder, @article.image do |i| %> | |
60 | + <%= file_field_or_thumbnail(_('Cover image:'), @article.image, i)%> | |
61 | + <%= _("Max size: %s (.jpg, .gif, .png)")% Image.max_size.to_humanreadable %> | |
62 | + <% end %> | |
63 | +</div> | |
66 | 64 | |
67 | 65 | <%= labelled_form_field(_('How to display posts:'), f.select(:visualization_format, [ |
68 | 66 | [ _('Full post'), 'full'], | ... | ... |
app/views/shared/_change_image.html.erb
1 | 1 | <%= i.file_field( :uploaded_data, { :onchange => 'updateImg(this.value)' } ) %> |
2 | 2 | <%= labelled_form_field(_("Image Label:"), i.text_field(:label)) %> |
3 | -<%= button_to_function(:cancel,_('Cancel'),"jQuery('#change-image-link').show(); jQuery('#change-image').html('')", :id => 'cancel-change-image-link', :style => 'display: none')%> | |
3 | +<%= button_to_function(:cancel,_('Cancel'),"jQuery('#change-image-link').show(); jQuery('#change-image').hide()", :id => 'cancel-change-image-link', :style => 'display: none')%> | ... | ... |
app/views/shared/_show_thumbnail.html.erb
1 | - <%= image_tag(image.public_filename(:thumb)) %> | |
1 | +<%= image_tag(image.public_filename(:thumb)) %> | |
2 | 2 | |
3 | - <br/> | |
3 | +<br/> | |
4 | 4 | |
5 | - <%= button_to_function(:photos, _('Change image'), 'display_change_image()', :id => 'change-image-link' ) %> | |
5 | +<%= button_to_function(:photos, _('Change image'), 'display_change_image()', :id => 'change-image-link' ) %> | |
6 | 6 | |
7 | - <script> | |
8 | - function display_change_image() { | |
9 | - var content = "<%= j(render :partial => 'shared/change_image', :locals => { :i => i, :image => image }) %>"; | |
10 | - jQuery('#change-image').html(content); | |
11 | - jQuery('#change-image-link').hide(); | |
12 | - jQuery('#cancel-change-image-link').show(); | |
13 | - } | |
14 | - </script> | |
7 | +<script> | |
8 | + function display_change_image() { | |
9 | + jQuery('#change-image').show(); | |
10 | + jQuery('#change-image-link').hide(); | |
11 | + jQuery('#cancel-change-image-link').show(); | |
12 | + } | |
13 | +</script> | |
15 | 14 | |
16 | - <div id='change-image'> </div> <br/> | |
15 | +<br/> | |
16 | +<div id='change-image' style='display:none'> | |
17 | + <%= render :partial => 'shared/change_image', :locals => { :i => i, :image => image } %> | |
18 | +</div> | |
19 | +<br/> | |
20 | + | |
21 | +<% if image.present? && removable %> | |
22 | + <div id='image-builder-remove-checkbox'> | |
23 | + <%= labelled_form_field(_('Remove image'), i.check_box(:remove_image, {}, true, false))%> | |
24 | + </div> | |
25 | +<% end %> | ... | ... |
lib/acts_as_having_image.rb
public/stylesheets/application.scss
... | ... | @@ -2744,9 +2744,16 @@ div#activation_enterprise label, div#activation_enterprise input, div#activation |
2744 | 2744 | .type-img br { |
2745 | 2745 | clear: left; |
2746 | 2746 | } |
2747 | +#blog-image-builder > .formfieldline > .formfield > .formfieldline > .formfield > .formfieldline > label, | |
2748 | +#blog-image-builder > .formfieldline > label, | |
2749 | +#blog-image-builder #change-image > .formfieldline > label, | |
2750 | +#blog-image-builder #image-builder-remove-checkbox > .formfieldline > label, | |
2747 | 2751 | #profile_change_picture label { |
2748 | 2752 | display: none; |
2749 | 2753 | } |
2754 | +#profile_change_picture #image-builder-remove-checkbox > .formfieldline > label { | |
2755 | + display: block; | |
2756 | +} | |
2750 | 2757 | #profile_change_picture img { |
2751 | 2758 | margin-left: 10px; |
2752 | 2759 | } | ... | ... |
test/functional/cms_controller_test.rb
... | ... | @@ -962,15 +962,26 @@ class CmsControllerTest < ActionController::TestCase |
962 | 962 | assert_no_tag :tag => 'a', :attributes => { :href => "/myprofile/#{profile.identifier}/cms/edit/#{profile.blog.feed.id}" } |
963 | 963 | end |
964 | 964 | |
965 | - should 'remove the image of an article' do | |
965 | + should 'remove the image of a blog' do | |
966 | 966 | blog = create(Blog, :profile_id => profile.id, :name=>'testblog', :image_builder => { :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')}) |
967 | 967 | blog.save! |
968 | - post :edit, :profile => profile.identifier, :id => blog.id, :remove_image => 'true' | |
968 | + post :edit, :profile => profile.identifier, :id => blog.id, :article => {:image_builder => { :remove_image => 'true'}} | |
969 | 969 | blog.reload |
970 | 970 | |
971 | 971 | assert_nil blog.image |
972 | 972 | end |
973 | 973 | |
974 | + should 'remove the image of an article' do | |
975 | + image = fast_create(Image, :content_type => 'image/png', :filename => 'event-image.png', :label => 'test_label', :size => 1014) | |
976 | + article = fast_create(Article, :profile_id => profile.id, :name => 'test_label_article', :body => 'test_content') | |
977 | + article.image = image | |
978 | + article.save | |
979 | + post :edit, :profile => profile.identifier, :id => article.id, :article => {:image_builder => { :remove_image => 'true'}} | |
980 | + article.reload | |
981 | + | |
982 | + assert_nil article.image | |
983 | + end | |
984 | + | |
974 | 985 | should 'update feed options by edit blog form' do |
975 | 986 | profile.articles << Blog.new(:name => 'Blog for test', :profile => profile) |
976 | 987 | post :edit, :profile => profile.identifier, :id => profile.blog.id, :article => { :feed => { :limit => 7 } } | ... | ... |