Commit 684589bcfc84f59dea7cda47969bf3c19734d02d

Authored by Rodrigo Souto
2 parents de1df639 a4611fd2

Merge branch 'rails3' of gitlab.com:noosfero/noosfero into rails3

app/controllers/my_profile/cms_controller.rb
@@ -231,7 +231,7 @@ class CmsController < MyProfileController @@ -231,7 +231,7 @@ class CmsController < MyProfileController
231 @current_category = Category.find(params[:category_id]) 231 @current_category = Category.find(params[:category_id])
232 @categories = @current_category.children 232 @categories = @current_category.children
233 end 233 end
234 - render :partial => 'shared/select_categories', :locals => {:object_name => 'article', :multiple => true}, :layout => false 234 + render :template => 'shared/update_categories', :locals => { :category => @current_category }
235 end 235 end
236 236
237 def publish 237 def publish
app/controllers/my_profile/profile_editor_controller.rb
@@ -60,7 +60,7 @@ class ProfileEditorController < MyProfileController @@ -60,7 +60,7 @@ class ProfileEditorController < MyProfileController
60 @current_category = Category.find(params[:category_id]) 60 @current_category = Category.find(params[:category_id])
61 @categories = @current_category.children 61 @categories = @current_category.children
62 end 62 end
63 - render :partial => 'shared/select_categories', :locals => {:object_name => 'profile_data', :multiple => true}, :layout => false 63 + render :template => 'shared/update_categories', :locals => { :category => @current_category }
64 end 64 end
65 65
66 def header_footer 66 def header_footer
app/helpers/application_helper.rb
@@ -589,7 +589,7 @@ module ApplicationHelper @@ -589,7 +589,7 @@ module ApplicationHelper
589 extra_info = extra_info.nil? ? '' : content_tag( 'span', extra_info, :class => 'extra_info' ) 589 extra_info = extra_info.nil? ? '' : content_tag( 'span', extra_info, :class => 'extra_info' )
590 links = links_for_balloon(profile) 590 links = links_for_balloon(profile)
591 content_tag('div', content_tag(tag, 591 content_tag('div', content_tag(tag,
592 - (environment.enabled?(:show_balloon_with_profile_links_when_clicked) ? link_to( content_tag( 'span', _('Profile links')), '#', :onclick => "toggleSubmenu(this, '#{profile.short_name}', #{j(links.to_json)}); return false", :class => "menu-submenu-trigger #{trigger_class}", :url => url) : "") + 592 + (environment.enabled?(:show_balloon_with_profile_links_when_clicked) ? link_to( content_tag( 'span', _('Profile links')), '#', :onclick => "toggleSubmenu(this, '#{profile.short_name}', #{CGI::escapeHTML(links.to_json)}); return false", :class => "menu-submenu-trigger #{trigger_class}", :url => url) : "") +
593 link_to( 593 link_to(
594 content_tag( 'span', profile_image( profile, size ), :class => 'profile-image' ) + 594 content_tag( 'span', profile_image( profile, size ), :class => 'profile-image' ) +
595 content_tag( 'span', h(name), :class => ( profile.class == Person ? 'fn' : 'org' ) ) + 595 content_tag( 'span', h(name), :class => ( profile.class == Person ? 'fn' : 'org' ) ) +
app/helpers/categories_helper.rb
@@ -50,11 +50,17 @@ module CategoriesHelper @@ -50,11 +50,17 @@ module CategoriesHelper
50 50
51 #FIXME make this test 51 #FIXME make this test
52 def selected_category_link(cat) 52 def selected_category_link(cat)
53 - js_remove = j("jQuery('#selected-category-#{cat.id}').remove();") 53 + js_remove = "jQuery('#selected-category-#{cat.id}').remove();"
54 content_tag('div', button_to_function_without_text(:remove, _('Remove'), js_remove) + 54 content_tag('div', button_to_function_without_text(:remove, _('Remove'), js_remove) +
55 link_to_function(cat.full_name(' → '), js_remove, :id => "remove-selected-category-#{cat.id}-button", :class => 'select-subcategory-link'), 55 link_to_function(cat.full_name(' → '), js_remove, :id => "remove-selected-category-#{cat.id}-button", :class => 'select-subcategory-link'),
56 :class => 'selected-category' 56 :class => 'selected-category'
57 ) 57 )
58 end 58 end
59 59
  60 + def update_categories_link(body, category_id=nil, html_options={})
  61 + link_to body,
  62 + { :action => "update_categories", :category_id => category_id, :id => @object },
  63 + {:id => category_id ? "select-category-#{category_id}-link" : nil, :remote => true, :class => 'select-subcategory-link'}.merge(html_options)
  64 + end
  65 +
60 end 66 end
app/views/profile/_comment.html.erb
@@ -46,7 +46,7 @@ @@ -46,7 +46,7 @@
46 46
47 <% if logged_in? && (user == profile || user == comment.author || user.has_permission?(:moderate_comments, profile)) %> 47 <% if logged_in? && (user == profile || user == comment.author || user.has_permission?(:moderate_comments, profile)) %>
48 <% button_bar(:style => 'float: right; margin-top: 0px;') do %> 48 <% button_bar(:style => 'float: right; margin-top: 0px;') do %>
49 - <%= link_to_function(_('Remove'), 'remove_item_wall(this, %s, %s, %s); return false ;' % ["'.article-comment'", j(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') %> 49 + <%= 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]), _('Are you sure you want to remove this comment and all its replies?')], :class => 'button icon-button icon-delete') %>
50 <% end %> 50 <% end %>
51 <% end %> 51 <% end %>
52 <br style="clear: both;" /> 52 <br style="clear: both;" />
app/views/profile/_create_article.html.erb
@@ -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_function(_('Remove'), 'remove_item_wall(this, %s, %s, %s); return false ;' % ["'.profile-activity-item'", j(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 %> 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]), _('Are you sure you want to remove this activity and all its replies?')]) if logged_in? && current_person == @profile %>
19 </div> 19 </div>
20 </div> 20 </div>
21 21
app/views/profile/_default_activity.html.erb
@@ -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_function(_('Remove'), 'remove_item_wall(this, %s, %s, %s); return false ;' % ["'.profile-activity-item'", j(url_for(:profile => params[:profile], :action => :remove_activity, :activity_id => activity.id, :view => params[:view]).to_json), j(_('Are you sure you want to remove this activity and all its replies?').to_json)]) 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]), _('Are you sure you want to remove this activity and all its replies?')]) if logged_in? && current_person == @profile %>
10 </div> 10 </div>
11 </div> 11 </div>
12 12
app/views/profile/_leave_scrap.html.erb
@@ -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_function(_('Remove'), 'remove_item_wall(this, %s, %s, %s); return false ;' % ["'.profile-activity-item'", j(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 %> 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]), _('Are you sure you want to remove this activity and all its replies?')]) if logged_in? && current_person == @profile %>
9 </div> 9 </div>
10 </div> 10 </div>
11 11
app/views/profile/_profile_scrap.html.erb
@@ -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_function(_('Remove'), 'remove_item_wall(this, %s, %s, %s); return false ;' % ["'.profile-activity-item'", j(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) %> 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]), _('Are you sure you want to remove this scrap and all its replies?')]) if logged_in? && user.can_control_scrap?(scrap) %>
16 </div> 16 </div>
17 </div> 17 </div>
18 18
app/views/profile/_profile_scraps.html.erb
@@ -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_function(_('Remove'), 'remove_item_wall(this, %s, %s, %s); return false ;' % ["'.profile-activity-item'", j(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) %> 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]), _('Are you sure you want to remove this scrap and all its replies?')]) if logged_in? && user.can_control_scrap?(scrap) %>
16 </div> 16 </div>
17 </div> 17 </div>
18 18
app/views/profile/_upload_image.html.erb
@@ -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_function(_('Remove'), 'remove_item_wall(this, %s, %s, %s); return false ;' % ["'.profile-activity-item'", j(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 + <%= 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]), _('Are you sure you want to remove this activity and all its replies?')]) if logged_in? && current_person == @profile %>
10 </div> 10 </div>
11 </div> 11 </div>
12 </div> 12 </div>
app/views/profile/report_abuse.html.erb
@@ -24,7 +24,7 @@ @@ -24,7 +24,7 @@
24 $('#report-abuse-submit-button').css('cursor', 'progress'); 24 $('#report-abuse-submit-button').css('cursor', 'progress');
25 $.ajax({ 25 $.ajax({
26 type: 'POST', 26 type: 'POST',
27 - url: <%= j(url_for({:controller => 'profile', :action => 'register_report', :profile => profile.identifier}).to_json) %>, 27 + url: <%= url_for({:controller => 'profile', :action => 'register_report', :profile => profile.identifier}) %>,
28 data: $(form).serialize(), 28 data: $(form).serialize(),
29 dataType: 'json', 29 dataType: 'json',
30 success: function(data, status, ajax){ 30 success: function(data, status, ajax){
app/views/shared/_select_categories.html.erb
@@ -3,30 +3,25 @@ @@ -3,30 +3,25 @@
3 <% if !@current_category.nil? %> 3 <% if !@current_category.nil? %>
4 <%= hidden_field_tag "#{object_name}[#{object_name}_category_id]", @current_category.id unless multiple %> 4 <%= hidden_field_tag "#{object_name}[#{object_name}_category_id]", @current_category.id unless multiple %>
5 <%= hidden_field_tag "#{object_name}[category_ids][]", @current_category.id if multiple %> 5 <%= hidden_field_tag "#{object_name}[category_ids][]", @current_category.id if multiple %>
6 - <%= button_to_remote_without_text(:back, _('Back'),  
7 - { :update => "select-categories",  
8 - :url => { :action => 'update_categories', :id => @object },  
9 - :loaded => visual_effect(:highlight, "select-categories")  
10 - },  
11 - :id => 'cancel-category-button') %> 6 +
  7 + <%= update_categories_link("", nil, :id => "cancel-category-button", :class => "button icon-back") %>
12 <% 8 <%
13 categories = [@current_category] 9 categories = [@current_category]
14 categories.push(@current_category) while @current_category = @current_category.parent 10 categories.push(@current_category) while @current_category = @current_category.parent
15 %> 11 %>
16 - <%= categories.compact.reverse.map{|i|  
17 - link_to_remote(i.name,  
18 - :update => "select-categories",  
19 - :url => { :action => 'update_categories', :category_id => i.id, :id => @object },  
20 - :loaded => visual_effect(:highlight, "select-categories"),  
21 - :class => 'select-current-category-link')}.join(' &rarr; ')  
22 - %>  
23 - <%= button_to_function_without_text(:add, _('Add'), nil, :id => 'save-category-button') do |page|  
24 - page.insert_html :bottom, 'selected-categories', content_tag('div',  
25 - hidden_field_tag("#{object_name}[category_ids][]", categories.first.id) +  
26 - selected_category_link(categories.first), :id => "selected-category-#{categories.first.id}")  
27 - page.replace_html 'select-categories', :partial => 'shared/select_subcategories',  
28 - :locals => {:object_name => object_name, :categories => @toplevel_categories}  
29 - end if multiple %> 12 + <%= categories.compact.reverse.map{|i| update_categories_link(i.name, i.id)}.join %>
  13 +
  14 + <script>
  15 + function add_category() {
  16 + var hidden_field = '<%= j hidden_field_tag("#{object_name}[category_ids][]", categories.first.id) %>';
  17 + var category_link = '<%= j selected_category_link(categories.first) %>';
  18 + jQuery('#selected-categories').append('<div id="selected-category-<%= categories.first.id %>">' + hidden_field + category_link + '</div>');
  19 + var subcategories = '<%= j(render :partial => 'shared/select_subcategories', :locals => {:object_name => object_name, :categories => @toplevel_categories}) %>';
  20 + jQuery('#select-categories').html(subcategories);
  21 + }
  22 + </script>
  23 +
  24 + <%= button_to_function_without_text(:add, _('Add'), 'add_category()', :id => 'save-category-button') %>
30 <% end %> 25 <% end %>
31 26
32 <div class="toplevel-categories"> 27 <div class="toplevel-categories">
app/views/shared/_select_subcategories.html.erb
@@ -3,14 +3,6 @@ @@ -3,14 +3,6 @@
3 <div class="category-helper-label"><%= _('Click to select a category') %></div> 3 <div class="category-helper-label"><%= _('Click to select a category') %></div>
4 4
5 <% categories.select{|i| @object.accept_category?(i)}.each do |category| %> 5 <% categories.select{|i| @object.accept_category?(i)}.each do |category| %>
6 -  
7 - <%= link_to_remote category.name,  
8 - { :update => "select-categories",  
9 - :url => { :action => "update_categories", :category_id => category.id, :id => @object},  
10 - :loaded => j(visual_effect(:highlight, "select-categories"))  
11 - },  
12 - :class => 'select-subcategory-link',  
13 - :id => "select-category-#{category.id}-link"  
14 - %> 6 + <%= update_categories_link(category.name, category.id) %>
15 <% end %> 7 <% end %>
16 <% end %> 8 <% end %>
app/views/shared/update_categories.js.erb 0 → 100644
@@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
  1 +<%
  2 + content = render :partial => 'shared/select_categories',
  3 + :locals => {:object_name => 'article', :multiple => true}, :layout => false
  4 +%>
  5 +jQuery('#select-categories').html('<%= j(content) %>');
config/initializers/json_escape.rb
@@ -1,9 +0,0 @@ @@ -1,9 +0,0 @@
1 -class ActionView::Base  
2 - def json_escape(s)  
3 - #result = s.to_s.gsub('/', '\/')  
4 - result = CGI::escapeHTML(s)  
5 - s.html_safe? ? result.html_safe : result  
6 - end  
7 -  
8 - alias j json_escape  
9 -end  
test/functional/cms_controller_test.rb
@@ -682,8 +682,8 @@ class CmsControllerTest &lt; ActionController::TestCase @@ -682,8 +682,8 @@ class CmsControllerTest &lt; ActionController::TestCase
682 top = env.categories.create!(:display_in_menu => true, :name => 'Top-Level category') 682 top = env.categories.create!(:display_in_menu => true, :name => 'Top-Level category')
683 c1 = env.categories.create!(:display_in_menu => true, :name => "Test category 1", :parent_id => top.id) 683 c1 = env.categories.create!(:display_in_menu => true, :name => "Test category 1", :parent_id => top.id)
684 c2 = env.categories.create!(:display_in_menu => true, :name => "Test category 2", :parent_id => top.id) 684 c2 = env.categories.create!(:display_in_menu => true, :name => "Test category 2", :parent_id => top.id)
685 - get :update_categories, :profile => profile.identifier, :category_id => top.id  
686 - assert_template 'shared/_select_categories' 685 + xhr :get, :update_categories, :profile => profile.identifier, :category_id => top.id
  686 + assert_template 'shared/update_categories'
687 assert_equal top, assigns(:current_category) 687 assert_equal top, assigns(:current_category)
688 assert_equal [c1, c2], assigns(:categories) 688 assert_equal [c1, c2], assigns(:categories)
689 end 689 end
test/functional/profile_editor_controller_test.rb
@@ -474,8 +474,8 @@ class ProfileEditorControllerTest &lt; ActionController::TestCase @@ -474,8 +474,8 @@ class ProfileEditorControllerTest &lt; ActionController::TestCase
474 top = env.categories.create!(:display_in_menu => true, :name => 'Top-Level category') 474 top = env.categories.create!(:display_in_menu => true, :name => 'Top-Level category')
475 c1 = env.categories.create!(:display_in_menu => true, :name => "Test category 1", :parent_id => top.id) 475 c1 = env.categories.create!(:display_in_menu => true, :name => "Test category 1", :parent_id => top.id)
476 c2 = env.categories.create!(:display_in_menu => true, :name => "Test category 2", :parent_id => top.id) 476 c2 = env.categories.create!(:display_in_menu => true, :name => "Test category 2", :parent_id => top.id)
477 - get :update_categories, :profile => profile.identifier, :category_id => top.id  
478 - assert_template 'shared/_select_categories' 477 + xhr :get, :update_categories, :profile => profile.identifier, :category_id => top.id
  478 + assert_template 'shared/update_categories'
479 assert_equal top, assigns(:current_category) 479 assert_equal top, assigns(:current_category)
480 assert_equal [c1, c2], assigns(:categories) 480 assert_equal [c1, c2], assigns(:categories)
481 end 481 end