Commit c08a6f9452597b1edcdfd6f998be680abe0214f3

Authored by Victor Costa
1 parent 50facea9

Fixing anchor for comments that are inside groups

app/views/shared/tiny_mce.rhtml
... ... @@ -11,10 +11,8 @@
11 11 <% else %>
12 12 first_line = "print,separator,copy,paste,separator,undo,redo,separator,search,replace,separator,forecolor,fontsizeselect,formatselect"
13 13 second_line = "bold,italic,underline,strikethrough,separator,bullist,numlist,separator,justifyleft,justifycenter,justifyright,justifyfull,separator,link,unlink,image,table,separator,cleanup,code,macros"
14   - <% Environment.macros[environment.id].each do |macro_name, plugin_instance| %>
15   - <% if macro_configuration(macro_name)[:icon_path] %>
16   - second_line += ',<%=macro_name %>'
17   - <% end %>
  14 + <% macros_with_buttons.each do |macro_name, plugin_instance| %>
  15 + second_line += ',<%=macro_name %>'
18 16 <% end %>
19 17 <% end %>
20 18  
... ...
plugins/comment_group_macro/controllers/public/comment_group_macro_plugin_public_controller.rb 0 → 100644
... ... @@ -0,0 +1,8 @@
  1 +class CommentGroupMacroPluginPublicController < PublicController
  2 + append_view_path File.join(File.dirname(__FILE__) + '/../views')
  3 +
  4 + def comment_group
  5 + render :json => { :group_id => Comment.find(params[:id]).group_id }
  6 + end
  7 +
  8 +end
... ...
plugins/comment_group_macro/lib/comment_group_macro_plugin.rb
... ... @@ -43,4 +43,8 @@ class CommentGroupMacroPlugin &lt; Noosfero::Plugin
43 43 }
44 44 end
45 45  
  46 + def js_files
  47 + 'comment_group_macro.js'
  48 + end
  49 +
46 50 end
... ...
plugins/comment_group_macro/public/comment_group_macro.js 0 → 100644
... ... @@ -0,0 +1,21 @@
  1 +var comment_group_anchor;
  2 +jQuery(document).ready(function($) {
  3 + var anchor = window.location.hash;
  4 + if(anchor.length==0) return;
  5 +
  6 + var val = anchor.split('-'); //anchor format = #comment-\d+
  7 + if(val.length!=2 || val[0]!='#comment') return;
  8 + if($('div[data-macro=display_comments]').length==0) return; //display_comments div must exists
  9 + var comment_id = val[1];
  10 + if(!/^\d+$/.test(comment_id)) return; //test for integer
  11 +
  12 + comment_group_anchor = anchor;
  13 + var url = '/plugin/comment_group_macro/public/comment_group/'+comment_id;
  14 + $.getJSON(url, function(data) {
  15 + if(data.group_id!=null) {
  16 + var button = $('div.comment_group_'+ data.group_id + ' a');
  17 + button.click();
  18 + $.scrollTo(button);
  19 + }
  20 + });
  21 +});
... ...
plugins/comment_group_macro/test/functional/comment_group_macro_plugin_public_controller_test.rb 0 → 100644
... ... @@ -0,0 +1,33 @@
  1 +require File.dirname(__FILE__) + '/../../../../test/test_helper'
  2 +require File.dirname(__FILE__) + '/../../controllers/public/comment_group_macro_plugin_public_controller'
  3 +
  4 +# Re-raise errors caught by the controller.
  5 +class CommentGroupMacroPluginPublicController; def rescue_action(e) raise e end; end
  6 +
  7 +class CommentGroupMacroPluginPublicControllerTest < ActionController::TestCase
  8 +
  9 + def setup
  10 + @controller = CommentGroupMacroPluginPublicController.new
  11 + @request = ActionController::TestRequest.new
  12 + @response = ActionController::TestResponse.new
  13 +
  14 + @profile = create_user('testuser').person
  15 + @article = profile.articles.build(:name => 'test')
  16 + @article.save!
  17 + end
  18 + attr_reader :article
  19 + attr_reader :profile
  20 +
  21 + should 'be able to return group_id for a comment' do
  22 + comment = fast_create(Comment, :source_id => article, :author_id => profile, :title => 'a comment', :body => 'lalala', :group_id => 0)
  23 + xhr :get, :comment_group, :id => comment.id
  24 + assert_match /\{\"group_id\":0\}/, @response.body
  25 + end
  26 +
  27 + should 'return group_id=null for a global comment' do
  28 + comment = fast_create(Comment, :source_id => article, :author_id => profile, :title => 'a comment', :body => 'lalala' )
  29 + xhr :get, :comment_group, :id => comment.id
  30 + assert_match /\{\"group_id\":null\}/, @response.body
  31 + end
  32 +
  33 +end
... ...
plugins/comment_group_macro/views/_comment_group.rhtml
... ... @@ -6,7 +6,7 @@
6 6 :loaded => visual_effect(:highlight, "comments_list_group_#{group_id}"),
7 7 :method => :post,
8 8 :condition => "!groupVisible(#{group_id})",
9   - :complete => "jQuery('div.comment-group-loading-#{group_id}').removeClass('comment-button-loading')")%>
  9 + :complete => "loadCompleted(#{group_id})")%>
10 10 </div>
11 11 <!-- FIXME: css file -->
12 12 <div id="comments_group_count_<%= group_id %>" style="float: right; vertical-align: middle; padding-left: 3px; padding-right: 5px; color: #5AC1FC"><span id="comment-count-<%= group_id %>" class='comment-count'><%= count %></span></div>
... ... @@ -33,9 +33,17 @@
33 33 return jQuery('div.comments_list_toggle_group_'+group).is(':visible');
34 34 }
35 35  
  36 + function loadCompleted(group) {
  37 + jQuery('div.comment-group-loading-'+group).removeClass('comment-button-loading')
  38 + if(comment_group_anchor) {
  39 + jQuery.scrollTo(jQuery(comment_group_anchor));
  40 + comment_group_anchor = null;
  41 + }
  42 + }
  43 +
36 44 (function($) {
37 45 var button = $('div.comment_group_<%= group_id %> a');
38   - button.click(function() {
  46 + button.live('click', function() {
39 47 var div = $('div.comments_list_toggle_group_<%= group_id %>')
40 48 if(!div.is(':visible'))
41 49 $('div.comment-group-loading-<%= group_id %>').addClass('comment-button-loading');
... ...