Commit b9ba56cbacedda34e2f31966dafbe67d48fe481e
1 parent
20c9a186
Exists in
master
and in
29 other branches
Improves the removal interface of wall itens
Instead of a textual feedback to the user when a comment or wall item is deleted, this patch uses jQuery .slideUp() so the user feel like they see instead of read about the item removal. Also updates the Brazilian Portuguese translation. (ActionItem2403)
Showing
10 changed files
with
60 additions
and
13 deletions
Show diff stats
app/controllers/public/profile_controller.rb
@@ -212,9 +212,9 @@ class ProfileController < PublicController | @@ -212,9 +212,9 @@ class ProfileController < PublicController | ||
212 | begin | 212 | begin |
213 | scrap = current_user.person.scraps(params[:scrap_id]) | 213 | scrap = current_user.person.scraps(params[:scrap_id]) |
214 | scrap.destroy | 214 | scrap.destroy |
215 | - render :text => _('Scrap successfully removed.') | 215 | + finish_successful_removal 'Scrap successfully removed.' |
216 | rescue | 216 | rescue |
217 | - render :text => _('You could not remove this scrap') | 217 | + finish_unsuccessful_removal 'You could not remove this scrap.' |
218 | end | 218 | end |
219 | end | 219 | end |
220 | 220 | ||
@@ -227,9 +227,9 @@ class ProfileController < PublicController | @@ -227,9 +227,9 @@ class ProfileController < PublicController | ||
227 | else | 227 | else |
228 | activity.destroy | 228 | activity.destroy |
229 | end | 229 | end |
230 | - render :text => _('Activity successfully removed.') | 230 | + finish_successful_removal 'Activity successfully removed.' |
231 | rescue | 231 | rescue |
232 | - render :text => _('You could not remove this activity') | 232 | + finish_unsuccessful_removal 'You could not remove this activity.' |
233 | end | 233 | end |
234 | end | 234 | end |
235 | 235 | ||
@@ -244,6 +244,24 @@ class ProfileController < PublicController | @@ -244,6 +244,24 @@ class ProfileController < PublicController | ||
244 | end | 244 | end |
245 | end | 245 | end |
246 | 246 | ||
247 | + def finish_successful_removal(msg) | ||
248 | + if request.xhr? | ||
249 | + render :text => {'ok' => true}.to_json, :content_type => 'application/json' | ||
250 | + else | ||
251 | + session[:notice] = _(msg) | ||
252 | + redirect_to :action => :index | ||
253 | + end | ||
254 | + end | ||
255 | + | ||
256 | + def finish_unsuccessful_removal(msg) | ||
257 | + session[:notice] = _(msg) | ||
258 | + if request.xhr? | ||
259 | + render :text => {'redirect' => url_for(:action => :index)}.to_json, :content_type => 'application/json' | ||
260 | + else | ||
261 | + redirect_to :action => :index | ||
262 | + end | ||
263 | + end | ||
264 | + | ||
247 | def profile_info | 265 | def profile_info |
248 | begin | 266 | begin |
249 | @block = profile.blocks.find(params[:block_id]) | 267 | @block = profile.blocks.find(params[:block_id]) |
@@ -303,9 +321,10 @@ class ProfileController < PublicController | @@ -303,9 +321,10 @@ class ProfileController < PublicController | ||
303 | @comment = Comment.find(params[:comment_id]) | 321 | @comment = Comment.find(params[:comment_id]) |
304 | if (user == @comment.author || user == profile || user.has_permission?(:moderate_comments, profile)) | 322 | if (user == @comment.author || user == profile || user.has_permission?(:moderate_comments, profile)) |
305 | @comment.destroy | 323 | @comment.destroy |
306 | - session[:notice] = _('Comment successfully deleted') | 324 | + finish_successful_removal 'Comment successfully removed.' |
325 | + else | ||
326 | + finish_unsuccessful_removal 'You could not remove this comment.' | ||
307 | end | 327 | end |
308 | - redirect_to :action => :index | ||
309 | end | 328 | end |
310 | 329 | ||
311 | protected | 330 | protected |
app/views/profile/_comment.rhtml
@@ -30,7 +30,7 @@ | @@ -30,7 +30,7 @@ | ||
30 | 30 | ||
31 | <% if logged_in? && (user == profile || user == comment.author || user.has_permission?(:moderate_comments, profile)) %> | 31 | <% if logged_in? && (user == profile || user == comment.author || user.has_permission?(:moderate_comments, profile)) %> |
32 | <% button_bar(:style => 'float: right; margin-top: 0px;') do %> | 32 | <% button_bar(:style => 'float: right; margin-top: 0px;') do %> |
33 | - <%= icon_button(:delete, _('Remove'), { :action => :remove_comment, :comment_id => comment.id }, :method => :get, :confirm => _('Are you sure you want to remove this comment and all its replies?')) %> | 33 | + <%= link_to_function(_('Remove'), 'remove_item_wall(this, %s, %s, %s); return false ;' % ["'.article-comment'", url_for(:profile => params[:profile], :action => :remove_comment, :comment_id => comment.id, :view => params[:view]).to_json, _('Are you sure you want to remove this comment and all its replies?').to_json], :class => 'button icon-button icon-delete') %> |
34 | <% end %> | 34 | <% end %> |
35 | <% end %> | 35 | <% end %> |
36 | <br style="clear: both;" /> | 36 | <br style="clear: both;" /> |
app/views/profile/_create_article.rhtml
@@ -15,7 +15,7 @@ | @@ -15,7 +15,7 @@ | ||
15 | <p class='profile-activity-time'><%= time_ago_as_sentence(activity.created_at) %></p> | 15 | <p class='profile-activity-time'><%= time_ago_as_sentence(activity.created_at) %></p> |
16 | <div class='profile-wall-actions'> | 16 | <div class='profile-wall-actions'> |
17 | <%= link_to s_('profile|Comment'), '#', { :class => 'focus-on-comment'} %> | 17 | <%= link_to s_('profile|Comment'), '#', { :class => 'focus-on-comment'} %> |
18 | - <%= link_to_remote(content_tag(:span, _('Remove')), :url =>{:action => 'remove_activity', :activity_id => activity.id, :only_hide => true}, :confirm => _('Are you sure?'), :update => "profile-activity-item-#{activity.id}") if logged_in? && current_person == @profile %> | 18 | + <%= link_to_function(_('Remove'), 'remove_item_wall(this, %s, %s, %s); return false ;' % ["'.profile-activity-item'", url_for(:profile => params[:profile], :action => :remove_activity, :activity_id => activity.id, :only_hide => true, :view => params[:view]).to_json, _('Are you sure you want to remove this activity and all its replies?').to_json]) if logged_in? && current_person == @profile %> |
19 | </div> | 19 | </div> |
20 | </div> | 20 | </div> |
21 | 21 |
app/views/profile/_default_activity.rhtml
@@ -6,7 +6,7 @@ | @@ -6,7 +6,7 @@ | ||
6 | <p class='profile-activity-time'><%= time_ago_as_sentence(activity.created_at) %></p> | 6 | <p class='profile-activity-time'><%= time_ago_as_sentence(activity.created_at) %></p> |
7 | <div class='profile-wall-actions'> | 7 | <div class='profile-wall-actions'> |
8 | <%= link_to s_('profile|Comment'), '#', { :class => 'focus-on-comment'} %> | 8 | <%= link_to s_('profile|Comment'), '#', { :class => 'focus-on-comment'} %> |
9 | - <%= link_to_remote(content_tag(:span, _('Remove')), :confirm => _('Are you sure?'), :url =>{:action => 'remove_activity', :activity_id => activity.id}, :update => "profile-activity-item-#{activity.id}") if logged_in? && current_person == @profile %> | 9 | + <%= link_to_function(_('Remove'), 'remove_item_wall(this, %s, %s, %s); return false ;' % ["'.profile-activity-item'", url_for(:profile => params[:profile], :action => :remove_activity, :activity_id => activity.id, :view => params[:view]).to_json, _('Are you sure you want to remove this activity and all its replies?').to_json]) if logged_in? && current_person == @profile %> |
10 | </div> | 10 | </div> |
11 | </div> | 11 | </div> |
12 | 12 |
app/views/profile/_leave_scrap.rhtml
@@ -5,7 +5,7 @@ | @@ -5,7 +5,7 @@ | ||
5 | <p class='profile-activity-text'><%= link_to activity.user.name, activity.user.url %> <%= describe activity %></p> | 5 | <p class='profile-activity-text'><%= link_to activity.user.name, activity.user.url %> <%= describe activity %></p> |
6 | <p class='profile-activity-time'><%= time_ago_as_sentence(activity.created_at) %></p> | 6 | <p class='profile-activity-time'><%= time_ago_as_sentence(activity.created_at) %></p> |
7 | <div class='profile-wall-actions'> | 7 | <div class='profile-wall-actions'> |
8 | - <%= link_to_remote(content_tag(:span, _('Remove')), :confirm => _('Are you sure?'), :url =>{:action => 'remove_activity', :activity_id => activity.id}, :update => "profile-activity-item-#{activity.id}") if logged_in? && current_person == @profile %> | 8 | + <%= link_to_function(_('Remove'), 'remove_item_wall(this, %s, %s, %s); return false ;' % ["'.profile-activity-item'", url_for(:profile => params[:profile], :action => :remove_activity, :activity_id => activity.id, :view => params[:view]).to_json, _('Are you sure you want to remove this activity and all its replies?').to_json]) if logged_in? && current_person == @profile %> |
9 | </div> | 9 | </div> |
10 | </div> | 10 | </div> |
11 | 11 |
app/views/profile/_profile_scrap.rhtml
@@ -12,7 +12,7 @@ | @@ -12,7 +12,7 @@ | ||
12 | <%= link_to_function s_('profile|Comment'), "hide_and_show(['#profile-wall-message-response-#{scrap.id}'],['#profile-wall-reply-#{scrap.id}', '#profile-wall-reply-form-#{scrap.id}']);$('reply_content_#{scrap.id}').value='';$('reply_content_#{scrap.id}').focus();return false", :class => "profile-send-reply" %> | 12 | <%= link_to_function s_('profile|Comment'), "hide_and_show(['#profile-wall-message-response-#{scrap.id}'],['#profile-wall-reply-#{scrap.id}', '#profile-wall-reply-form-#{scrap.id}']);$('reply_content_#{scrap.id}').value='';$('reply_content_#{scrap.id}').focus();return false", :class => "profile-send-reply" %> |
13 | </span> | 13 | </span> |
14 | <% end %> | 14 | <% end %> |
15 | - <%= link_to_remote(content_tag(:span, _('Remove')), :confirm => _('Are you sure?'), :url =>{:action => 'remove_scrap', :scrap_id => scrap.id}, :update => "profile-activity-item-#{scrap.id}") if logged_in? && user.can_control_scrap?(scrap) %> | 15 | + <%= link_to_function(_('Remove'), 'remove_item_wall(this, %s, %s, %s); return false ;' % ["'.profile-activity-item'", url_for(:profile => params[:profile], :action => :remove_scrap, :scrap_id => scrap.id, :view => params[:view]).to_json, _('Are you sure you want to remove this scrap and all its replies?').to_json]) if logged_in? && user.can_control_scrap?(scrap) %> |
16 | </div> | 16 | </div> |
17 | </div> | 17 | </div> |
18 | 18 |
app/views/profile/_upload_image.rhtml
@@ -6,7 +6,7 @@ | @@ -6,7 +6,7 @@ | ||
6 | <p class='profile-activity-text'><%= link_to activity.user.name, activity.user.url %> <%= describe activity %></p> | 6 | <p class='profile-activity-text'><%= link_to activity.user.name, activity.user.url %> <%= describe activity %></p> |
7 | <p class='profile-activity-time'><%= time_ago_as_sentence(activity.created_at) %></p> | 7 | <p class='profile-activity-time'><%= time_ago_as_sentence(activity.created_at) %></p> |
8 | <div class='profile-wall-actions'> | 8 | <div class='profile-wall-actions'> |
9 | - <%= link_to_remote(content_tag(:span, _('Remove')), :confirm => _('Are you sure?'), :url =>{:action => 'remove_activity', :activity_id => activity.id}, :update => "profile-activity-item-#{activity.id}") if logged_in? && current_person == @profile %> | 9 | + <%= link_to_function(_('Remove'), 'remove_item_wall(this, %s, %s, %s); return false ;' % ["'.profile-activity-item'", url_for(:profile => params[:profile], :action => :remove_activity, :activity_id => activity.id, :view => params[:view]).to_json, _('Are you sure you want to remove this activity and all its replies?').to_json]) if logged_in? && current_person == @profile %> |
10 | </div> | 10 | </div> |
11 | </div> | 11 | </div> |
12 | </div> | 12 | </div> |
po/pt/noosfero.po
@@ -5805,8 +5805,14 @@ msgstr "Remover" | @@ -5805,8 +5805,14 @@ msgstr "Remover" | ||
5805 | #: app/views/profile/_create_article.rhtml:18 | 5805 | #: app/views/profile/_create_article.rhtml:18 |
5806 | #: app/views/profile/_default_activity.rhtml:9 | 5806 | #: app/views/profile/_default_activity.rhtml:9 |
5807 | #: app/views/profile/_leave_scrap_to_self.rhtml:8 | 5807 | #: app/views/profile/_leave_scrap_to_self.rhtml:8 |
5808 | -#: app/views/profile/_upload_image.rhtml:10 | 5808 | +#: app/views/profile/_upload_image.rhtml:9 |
5809 | +msgid "Are you sure you want to remove this activity and all its replies?" | ||
5810 | +msgstr "Você tem certeza que quer remover esta atividade e todas as suas respostas?" | ||
5811 | + | ||
5809 | #: app/views/profile/_profile_scrap.rhtml:15 | 5812 | #: app/views/profile/_profile_scrap.rhtml:15 |
5813 | +msgid "Are you sure you want to remove this scrap and all its replies?" | ||
5814 | +msgstr "Você tem certeza que quer remover esta mensagem e todas as suas respostas?" | ||
5815 | + | ||
5810 | #: plugins/bsc/views/bsc_plugin_myprofile/manage_contracts.html.erb:35 | 5816 | #: plugins/bsc/views/bsc_plugin_myprofile/manage_contracts.html.erb:35 |
5811 | msgid "Are you sure?" | 5817 | msgid "Are you sure?" |
5812 | msgstr "Você tem certeza?" | 5818 | msgstr "Você tem certeza?" |
public/javascripts/application.js
@@ -683,6 +683,24 @@ function add_comment_reply_form(button, comment_id) { | @@ -683,6 +683,24 @@ function add_comment_reply_form(button, comment_id) { | ||
683 | return f; | 683 | return f; |
684 | } | 684 | } |
685 | 685 | ||
686 | +function remove_item_wall(button, item, url, msg) { | ||
687 | + var $ = jQuery; | ||
688 | + var $wall_item = $(button).closest(item); | ||
689 | + $wall_item.addClass('remove-item-loading'); | ||
690 | + if (msg && !confirm(msg)) { | ||
691 | + $wall_item.removeClass('remove-item-loading'); | ||
692 | + return; | ||
693 | + } | ||
694 | + $.post(url, function(data) { | ||
695 | + if (data.ok) { | ||
696 | + $wall_item.slideUp(); | ||
697 | + } else { | ||
698 | + $wall_item.removeClass('remove-item-loading'); | ||
699 | + window.location.replace(data.redirect); | ||
700 | + } | ||
701 | + }); | ||
702 | +} | ||
703 | + | ||
686 | function original_image_dimensions(src) { | 704 | function original_image_dimensions(src) { |
687 | var img = new Image(); | 705 | var img = new Image(); |
688 | img.src = src; | 706 | img.src = src; |
public/stylesheets/application.css
@@ -4772,6 +4772,10 @@ h1#agenda-title { | @@ -4772,6 +4772,10 @@ h1#agenda-title { | ||
4772 | color: #000; | 4772 | color: #000; |
4773 | } | 4773 | } |
4774 | 4774 | ||
4775 | +.remove-item-loading { | ||
4776 | + background: transparent url(../images/loading-small.gif) no-repeat left center !important; | ||
4777 | +} | ||
4778 | + | ||
4775 | li.profile-activity-item.upload_image .more, | 4779 | li.profile-activity-item.upload_image .more, |
4776 | li.profile-activity-item.upload_image .upimg { | 4780 | li.profile-activity-item.upload_image .upimg { |
4777 | display: block; | 4781 | display: block; |