Commit 1f808a1cecb1d2663594a2e95e1b89e2f40a585d
1 parent
88070d96
Exists in
staging
and in
42 other branches
show menu items after the user clicks on menu
Showing
5 changed files
with
58 additions
and
2 deletions
Show diff stats
app/controllers/public/comment_controller.rb
| ... | ... | @@ -160,6 +160,15 @@ class CommentController < ApplicationController |
| 160 | 160 | end |
| 161 | 161 | end |
| 162 | 162 | end |
| 163 | + | |
| 164 | + #FIXME make this test | |
| 165 | + def check_actions | |
| 166 | + comment = profile.comments_received.find(params[:id]) | |
| 167 | + ids = @plugins.dispatch(:check_comment_actions, comment).collect do |action| | |
| 168 | + action.kind_of?(Proc) ? self.instance_eval(&action) : action | |
| 169 | + end.flatten.compact | |
| 170 | + render :json => {:ids => ids} | |
| 171 | + end | |
| 163 | 172 | |
| 164 | 173 | protected |
| 165 | 174 | ... | ... |
app/helpers/comment_helper.rb
| ... | ... | @@ -23,8 +23,9 @@ module CommentHelper |
| 23 | 23 | end |
| 24 | 24 | |
| 25 | 25 | def comment_actions(comment) |
| 26 | + url = url_for(:profile => profile.identifier, :controller => :comment, :action => :check_actions, :id => comment.id) | |
| 26 | 27 | links = links_for_comment_actions(comment) |
| 27 | - content_tag(:li, link_to(content_tag(:span, _('Contents menu')), '#', :onclick => "toggleSubmenu(this,'',#{links.to_json}); return false", :class => 'menu-submenu-trigger'), :class=> 'vcard') unless links.empty? | |
| 28 | + content_tag(:li, link_to(content_tag(:span, _('Contents menu')), '#', :onclick => "toggleSubmenu(this,'',#{links.to_json}); return false", :class => 'menu-submenu-trigger comment-trigger', :url => url), :class=> 'vcard') unless links.empty? | |
| 28 | 29 | end |
| 29 | 30 | |
| 30 | 31 | private | ... | ... |
lib/noosfero/plugin.rb
| ... | ... | @@ -289,6 +289,18 @@ class Noosfero::Plugin |
| 289 | 289 | nil |
| 290 | 290 | end |
| 291 | 291 | |
| 292 | + # This method is called when the user click on comment actions menu. | |
| 293 | + # returns = list or lambda block that return ids of enabled menu items for comments | |
| 294 | + # example: | |
| 295 | + # | |
| 296 | + # def check_comment_actions(comment) | |
| 297 | + # ['#action1', '#action2'] | |
| 298 | + # end | |
| 299 | + # | |
| 300 | + def check_comment_actions(comment) | |
| 301 | + [] | |
| 302 | + end | |
| 303 | + | |
| 292 | 304 | # -> Adds fields to the signup form |
| 293 | 305 | # returns = lambda block that creates html code |
| 294 | 306 | def signup_extra_contents | ... | ... |
public/javascripts/add-and-join.js
| ... | ... | @@ -100,4 +100,24 @@ jQuery(function($) { |
| 100 | 100 | clicked.parent().find(".send-an-email").fadeOut(); |
| 101 | 101 | }) |
| 102 | 102 | }) |
| 103 | + | |
| 104 | + $(".comment-trigger").live('click', function(){ | |
| 105 | + clicked = $(this); | |
| 106 | + url = clicked.attr("url"); | |
| 107 | + $.get(url, function(data){ | |
| 108 | + ids = []; | |
| 109 | + if(data && data.ids) { | |
| 110 | + for(var i=0; i<data.ids.length; i++) { | |
| 111 | + clicked.parent().find(data.ids[i]).fadeIn(); | |
| 112 | + ids.push(data.ids[i]); | |
| 113 | + } | |
| 114 | + } | |
| 115 | + clicked.parent().find('.comment-action-extra').each(function() { | |
| 116 | + if($.inArray('#'+$(this).attr('id'), ids)) | |
| 117 | + $(this).fadeOut(); | |
| 118 | + }); | |
| 119 | + }) | |
| 120 | + return false; | |
| 121 | + }) | |
| 122 | + | |
| 103 | 123 | }); | ... | ... |
test/functional/comment_controller_test.rb
| ... | ... | @@ -501,7 +501,7 @@ class CommentControllerTest < ActionController::TestCase |
| 501 | 501 | assert_equal 'Comment edited', Comment.find(comment.id).body |
| 502 | 502 | end |
| 503 | 503 | |
| 504 | - should 'not crash on update comment if comment does not exist' do | |
| 504 | + should 'not crash on update comment if comment does not exist' do | |
| 505 | 505 | login_as profile.identifier |
| 506 | 506 | page = profile.articles.create!(:name => 'myarticle', :body => 'the body of the text') |
| 507 | 507 | |
| ... | ... | @@ -509,4 +509,18 @@ class CommentControllerTest < ActionController::TestCase |
| 509 | 509 | assert_response 404 |
| 510 | 510 | end |
| 511 | 511 | |
| 512 | + should 'returns ids of menu items that has to be displayed' do | |
| 513 | + class TestActionPlugin < Noosfero::Plugin | |
| 514 | + def check_comment_actions(c) | |
| 515 | + ['action1', 'action2'] | |
| 516 | + end | |
| 517 | + end | |
| 518 | + Noosfero::Plugin::Manager.any_instance.stubs(:enabled_plugins).returns([TestActionPlugin.new]) | |
| 519 | + login_as profile.identifier | |
| 520 | + page = profile.articles.create!(:name => 'myarticle', :body => 'the body of the text') | |
| 521 | + comment = fast_create(Comment, :body => 'Original comment', :source_id => page.id, :source_type => 'Article') | |
| 522 | + xhr :post, :check_actions, :profile => profile.identifier, :id => comment.id | |
| 523 | + assert_match /\{\"ids\":\[\"action1\",\"action2\"\]\}/, @response.body | |
| 524 | + end | |
| 525 | + | |
| 512 | 526 | end | ... | ... |