Commit ef41c1547dced46029b4f7292ad8613b1c9b110f
1 parent
caeabdad
Exists in
master
and in
21 other branches
Allow user to remove article or profile image
Additional improvements include: - Makes 'Remove Image' checkbox optional - Very ugly css hack to hide duplicated labels in some forms. I couldn't find another way to avoid the labels generated by labelled_form_for nor could I skip adding labels inside the helper since it's supposed to be generic.
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 } } | ... | ... |