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,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 |