Commit 1f808a1cecb1d2663594a2e95e1b89e2f40a585d
1 parent
88070d96
Exists in
master
and in
22 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,6 +160,15 @@ class CommentController < ApplicationController | ||
| 160 | end | 160 | end |
| 161 | end | 161 | end |
| 162 | end | 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 | protected | 173 | protected |
| 165 | 174 |
app/helpers/comment_helper.rb
| @@ -23,8 +23,9 @@ module CommentHelper | @@ -23,8 +23,9 @@ module CommentHelper | ||
| 23 | end | 23 | end |
| 24 | 24 | ||
| 25 | def comment_actions(comment) | 25 | def comment_actions(comment) |
| 26 | + url = url_for(:profile => profile.identifier, :controller => :comment, :action => :check_actions, :id => comment.id) | ||
| 26 | links = links_for_comment_actions(comment) | 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 | end | 29 | end |
| 29 | 30 | ||
| 30 | private | 31 | private |
lib/noosfero/plugin.rb
| @@ -289,6 +289,18 @@ class Noosfero::Plugin | @@ -289,6 +289,18 @@ class Noosfero::Plugin | ||
| 289 | nil | 289 | nil |
| 290 | end | 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 | # -> Adds fields to the signup form | 304 | # -> Adds fields to the signup form |
| 293 | # returns = lambda block that creates html code | 305 | # returns = lambda block that creates html code |
| 294 | def signup_extra_contents | 306 | def signup_extra_contents |
public/javascripts/add-and-join.js
| @@ -100,4 +100,24 @@ jQuery(function($) { | @@ -100,4 +100,24 @@ jQuery(function($) { | ||
| 100 | clicked.parent().find(".send-an-email").fadeOut(); | 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,7 +501,7 @@ class CommentControllerTest < ActionController::TestCase | ||
| 501 | assert_equal 'Comment edited', Comment.find(comment.id).body | 501 | assert_equal 'Comment edited', Comment.find(comment.id).body |
| 502 | end | 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 | login_as profile.identifier | 505 | login_as profile.identifier |
| 506 | page = profile.articles.create!(:name => 'myarticle', :body => 'the body of the text') | 506 | page = profile.articles.create!(:name => 'myarticle', :body => 'the body of the text') |
| 507 | 507 | ||
| @@ -509,4 +509,18 @@ class CommentControllerTest < ActionController::TestCase | @@ -509,4 +509,18 @@ class CommentControllerTest < ActionController::TestCase | ||
| 509 | assert_response 404 | 509 | assert_response 404 |
| 510 | end | 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 | end | 526 | end |