Commit bd1e21fc81d69b779c3db142732866bcf710fca3
Exists in
theme-brasil-digital-from-staging
and in
9 other branches
Merge branch 'AI3205-comment-paragraph' into stable
Showing
9 changed files
with
176 additions
and
50 deletions
Show diff stats
plugins/comment_paragraph/controllers/comment_paragraph_plugin_admin_controller.rb
0 → 100644
... | ... | @@ -0,0 +1,29 @@ |
1 | +class CommentParagraphPluginAdminController < AdminController | |
2 | + append_view_path File.join(File.dirname(__FILE__) + '/../views') | |
3 | + | |
4 | + def index | |
5 | + @settings = Noosfero::Plugin::Settings.new(environment, CommentParagraphPlugin, params[:settings]) | |
6 | + @article_types = [] | |
7 | + available_article_types.each do |type| | |
8 | + @article_types.push({ | |
9 | + :class_name => type.name, | |
10 | + :short_description => type.short_description, | |
11 | + :description => type.description | |
12 | + }) | |
13 | + end | |
14 | + | |
15 | + if request.post? | |
16 | + @settings.settings[:auto_marking_article_types].reject! { |type| type.blank? } | |
17 | + @settings.save! | |
18 | + redirect_to :controller => 'plugins', :action => 'index' | |
19 | + end | |
20 | + end | |
21 | + | |
22 | + protected | |
23 | + | |
24 | + def available_article_types | |
25 | + articles = [TinyMceArticle, TextileArticle] + @plugins.dispatch(:content_types) | |
26 | + articles | |
27 | + end | |
28 | + | |
29 | +end | ... | ... |
plugins/comment_paragraph/controllers/profile/comment_paragraph_plugin_profile_controller.rb
... | ... | @@ -4,13 +4,10 @@ class CommentParagraphPluginProfileController < ProfileController |
4 | 4 | def view_comments |
5 | 5 | @article_id = params[:article_id] |
6 | 6 | @paragraph_id = params[:paragraph_id] |
7 | - | |
8 | 7 | article = profile.articles.find(@article_id) |
9 | - @paragraph_comment_page = (params[:paragraph_comment_page] || 1).to_i | |
10 | - | |
11 | 8 | @comments = article.comments.without_spam.in_paragraph(@paragraph_id) |
12 | 9 | @comments_count = @comments.count |
13 | 10 | @comments = @comments.without_reply |
14 | 11 | end |
15 | 12 | |
16 | -end | |
17 | 13 | \ No newline at end of file |
14 | +end | ... | ... |
plugins/comment_paragraph/lib/comment_paragraph_plugin.rb
... | ... | @@ -42,15 +42,30 @@ class CommentParagraphPlugin < Noosfero::Plugin |
42 | 42 | def cms_controller_filters |
43 | 43 | block = proc do |
44 | 44 | if params['commit'] == 'Save' |
45 | - unless @article.id.blank? | |
45 | + | |
46 | + settings = Noosfero::Plugin::Settings.new(environment, CommentParagraphPlugin, params[:settings]) | |
47 | + | |
48 | + extend CommentParagraphPlugin::CommentParagraphHelper | |
49 | + if !@article.id.blank? && self.auto_marking_enabled?(settings, @article.class.name) | |
46 | 50 | |
47 | 51 | parsed_paragraphs = [] |
48 | 52 | paragraph_id = 0 |
49 | 53 | |
50 | 54 | doc = Hpricot(@article.body) |
51 | - paragraphs = doc.search("/[\r\n]").each do |paragraph| | |
52 | - parsed_paragraphs << (paragraph.to_html =~ /(.*)paragraph_comment_spacer(.*)|<div(.*)paragraph_comment(.*)/ ? paragraph.to_html : CommentParagraphPlugin.parse_paragraph(paragraph.to_html, paragraph_id)) | |
55 | + paragraphs = doc.search("/*").each do |paragraph| | |
56 | + | |
57 | + if paragraph.to_html =~ /^<div(.*)paragraph_comment(.*)$/ || paragraph.to_html =~ /^<p>\W<\/p>$/ | |
58 | + parsed_paragraphs << paragraph.to_html | |
59 | + else | |
60 | + if paragraph.to_html =~ /^(<div|<table|<p|<ul).*/ | |
61 | + parsed_paragraphs << CommentParagraphPlugin.parse_paragraph(paragraph.to_html, paragraph_id) | |
62 | + else | |
63 | + parsed_paragraphs << paragraph.to_html | |
64 | + end | |
65 | + end | |
66 | + | |
53 | 67 | paragraph_id += 1 |
68 | + | |
54 | 69 | end |
55 | 70 | |
56 | 71 | @article.body = parsed_paragraphs.join() |
... | ... | @@ -71,7 +86,7 @@ class CommentParagraphPlugin < Noosfero::Plugin |
71 | 86 | "<div class='macro article_comments paragraph_comment' " + |
72 | 87 | "data-macro='comment_paragraph_plugin/allow_comment' " + |
73 | 88 | "data-macro-paragraph_id='#{paragraph_id}'>#{paragraph_content}</div>\r\n" + |
74 | - "<p class='paragraph_comment_spacer'></p>\r\n" | |
89 | + "<p> </p>" | |
75 | 90 | end |
76 | 91 | |
77 | 92 | end | ... | ... |
plugins/comment_paragraph/lib/comment_paragraph_plugin/comment_paragraph_helper.rb
0 → 100644
... | ... | @@ -0,0 +1,8 @@ |
1 | +module CommentParagraphPlugin::CommentParagraphHelper | |
2 | + | |
3 | + def auto_marking_enabled?(plugin_settings, article_type) | |
4 | + auto_marking_setting = plugin_settings.get_setting('auto_marking_article_types') | |
5 | + auto_marking_setting && auto_marking_setting.include?(article_type) ? true : false | |
6 | + end | |
7 | + | |
8 | +end | ... | ... |
plugins/comment_paragraph/public/comment_paragraph_admin.js
0 → 100644
... | ... | @@ -0,0 +1,39 @@ |
1 | +function check_fields(check, table_id, start) { | |
2 | + var checkboxes = jQuery("#" + table_id + " tbody tr td input[type='checkbox']"); | |
3 | + for (var i = start; i < checkboxes.length; i++) { | |
4 | + checkboxes[i].checked = check; | |
5 | + } | |
6 | +} | |
7 | + | |
8 | +function verify_checked() { | |
9 | + var checkboxes = jQuery("#auto_marking_article_types_conf tbody tr td input[type='checkbox']"); | |
10 | + var allchecked = true | |
11 | + for (var j = 1; j < checkboxes.length; j++) { | |
12 | + if(!checkboxes[j].checked) { | |
13 | + allchecked = false | |
14 | + break | |
15 | + } | |
16 | + } | |
17 | + | |
18 | + var checkbox = checkboxes.first(); | |
19 | + checkboxes.first().attr('checked', allchecked); | |
20 | +} | |
21 | + | |
22 | +function check_all() { | |
23 | + jQuery("input[type='checkbox']").first().click(function () { | |
24 | + check_fields(this.checked, "auto_marking_article_types_conf", 0) | |
25 | + }); | |
26 | + verify_checked(); | |
27 | +} | |
28 | + | |
29 | +jQuery(document).ready(function() { | |
30 | + check_all(); | |
31 | + jQuery("input[type='checkbox']").click(function () { | |
32 | + var checkbox = jQuery(this).attr("id").split("_"); | |
33 | + verify_checked(); | |
34 | + | |
35 | + if(this.checked == false) { | |
36 | + jQuery("#" + checkbox.first() + "_" + checkbox.last()).attr("checked", false) | |
37 | + } | |
38 | + }); | |
39 | +}); | ... | ... |
plugins/comment_paragraph/test/functional/comment_paragraph_plugin_profile_controller_test.rb
... | ... | @@ -35,38 +35,16 @@ class CommentParagraphPluginProfileControllerTest < ActionController::TestCase |
35 | 35 | assert_match /\"comment-count-0\", \"1\"/, @response.body |
36 | 36 | end |
37 | 37 | |
38 | - should 'show first page comments only' do | |
39 | - comment1 = fast_create(Comment, :created_at => Time.now - 1.days, :source_id => article, :author_id => profile, :title => 'a comment', :body => 'secondpage', :paragraph_id => 0) | |
40 | - comment2 = fast_create(Comment, :created_at => Time.now - 2.days, :source_id => article, :author_id => profile, :title => 'a comment', :body => 'firstpage 1', :paragraph_id => 0) | |
41 | - comment3 = fast_create(Comment, :created_at => Time.now - 3.days, :source_id => article, :author_id => profile, :title => 'a comment', :body => 'firstpage 2', :paragraph_id => 0) | |
42 | - comment4 = fast_create(Comment, :created_at => Time.now - 4.days, :source_id => article, :author_id => profile, :title => 'a comment', :body => 'firstpage 3', :paragraph_id => 0) | |
38 | + should 'be able to show all comments of a paragraph' do | |
39 | + comment1 = fast_create(Comment, :created_at => Time.now - 1.days, :source_id => article, :author_id => profile, :title => 'a comment', :body => 'a comment', :paragraph_id => 0) | |
40 | + comment2 = fast_create(Comment, :created_at => Time.now - 2.days, :source_id => article, :author_id => profile, :title => 'b comment', :body => 'b comment', :paragraph_id => 0) | |
41 | + comment3 = fast_create(Comment, :created_at => Time.now - 3.days, :source_id => article, :author_id => profile, :title => 'c comment', :body => 'c comment', :paragraph_id => 0) | |
42 | + comment4 = fast_create(Comment, :created_at => Time.now - 4.days, :source_id => article, :author_id => profile, :title => 'd comment', :body => 'd comment', :paragraph_id => 0) | |
43 | 43 | xhr :get, :view_comments, :profile => @profile.identifier, :article_id => article.id, :paragraph_id => 0 |
44 | - assert_match /firstpage 1/, @response.body | |
45 | - assert_match /firstpage 2/, @response.body | |
46 | - assert_match /firstpage 3/, @response.body | |
47 | - assert_no_match /secondpage/, @response.body | |
48 | - end | |
49 | - | |
50 | - should 'show link to display more comments' do | |
51 | - comment = fast_create(Comment, :source_id => article, :author_id => profile, :title => 'a comment', :body => 'lalala', :paragraph_id => 0) | |
52 | - comment = fast_create(Comment, :source_id => article, :author_id => profile, :title => 'a comment', :body => 'lalala', :paragraph_id => 0) | |
53 | - comment = fast_create(Comment, :source_id => article, :author_id => profile, :title => 'a comment', :body => 'lalala', :paragraph_id => 0) | |
54 | - comment = fast_create(Comment, :source_id => article, :author_id => profile, :title => 'secondpage', :body => 'secondpage', :paragraph_id => 0) | |
55 | - xhr :get, :view_comments, :profile => @profile.identifier, :article_id => article.id, :paragraph_id => 0 | |
56 | - assert_match /paragraph_comment_page=2/, @response.body | |
57 | - end | |
58 | - | |
59 | - should 'do not show link to display more comments if do not have more pages' do | |
60 | - comment = fast_create(Comment, :source_id => article, :author_id => profile, :title => 'a comment', :body => 'lalala', :paragraph_id => 0) | |
61 | - comment = fast_create(Comment, :source_id => article, :author_id => profile, :title => 'a comment', :body => 'lalala', :paragraph_id => 0) | |
62 | - comment = fast_create(Comment, :source_id => article, :author_id => profile, :title => 'a comment', :body => 'lalala', :paragraph_id => 0) | |
63 | - xhr :get, :view_comments, :profile => @profile.identifier, :article_id => article.id, :paragraph_id => 0 | |
64 | - assert_no_match /paragraph_comment_page/, @response.body | |
65 | - end | |
66 | - | |
67 | - should 'do not show link to display more comments if do not have any comments' do | |
68 | - xhr :get, :view_comments, :profile => @profile.identifier, :article_id => article.id, :paragraph_id => 0 | |
69 | - assert_no_match /paragraph_comment_page/, @response.body | |
44 | + assert_match /a comment/, @response.body | |
45 | + assert_match /b comment/, @response.body | |
46 | + assert_match /c comment/, @response.body | |
47 | + assert_match /d comment/, @response.body | |
70 | 48 | end |
71 | 49 | |
72 | 50 | end | ... | ... |
plugins/comment_paragraph/test/functional/comment_paragraph_plugin_test.rb
0 → 100644
... | ... | @@ -0,0 +1,38 @@ |
1 | +require File.dirname(__FILE__) + '/../../../../test/test_helper' | |
2 | +require File.dirname(__FILE__) + '/../../controllers/comment_paragraph_plugin_admin_controller' | |
3 | + | |
4 | +# Re-raise errors caught by the controller. | |
5 | +class CommentParagraphPluginAdminController; def rescue_action(e) raise e end; end | |
6 | + | |
7 | +class CommentParagraphPluginAdminControllerTest < ActionController::TestCase | |
8 | + | |
9 | + def setup | |
10 | + @environment = Environment.default | |
11 | + user_login = create_admin_user(@environment) | |
12 | + login_as(user_login) | |
13 | + @environment.enabled_plugins = ['CommentParagraphPlugin'] | |
14 | + @environment.save! | |
15 | + @plugin_settings = Noosfero::Plugin::Settings.new(@environment, CommentParagraphPlugin) | |
16 | + end | |
17 | + | |
18 | + should 'access index action' do | |
19 | + get :index | |
20 | + assert_template 'index' | |
21 | + assert_response :success | |
22 | + end | |
23 | + | |
24 | + should 'update comment paragraph plugin settings' do | |
25 | + assert_nil @plugin_settings.get_setting(:auto_marking_article_types) | |
26 | + post :index, :settings => { :auto_marking_article_types => ['TinyMceArticle'] } | |
27 | + @environment.reload | |
28 | + assert_not_nil @plugin_settings.get_setting(:auto_marking_article_types) | |
29 | + end | |
30 | + | |
31 | + should 'get article types previously selected' do | |
32 | + post :index, :settings => { :auto_marking_article_types => ['TinyMceArticle', 'TextileArticle'] } | |
33 | + get :index | |
34 | + assert_tag :input, :attributes => { :value => 'TinyMceArticle' } | |
35 | + assert_tag :input, :attributes => { :value => 'TextileArticle' } | |
36 | + end | |
37 | + | |
38 | +end | ... | ... |
plugins/comment_paragraph/views/comment_paragraph_plugin_admin/index.html.erb
0 → 100644
... | ... | @@ -0,0 +1,32 @@ |
1 | +<% extend CommentParagraphPlugin::CommentParagraphHelper %> | |
2 | + | |
3 | +<h1><%= _("Comment paragraph plugin settings") %></h1> | |
4 | + | |
5 | +<%= form_for(:settings) do |f| %> | |
6 | + | |
7 | +<%= hidden_field_tag 'settings[auto_marking_article_types][]' %> | |
8 | + | |
9 | +<table id="auto_marking_article_types_conf" border="0"> | |
10 | + <tr> | |
11 | + <th align="left"><%= _('Article type') %></th> | |
12 | + <th><%= _('Automatic marking active') %></th> | |
13 | + </tr> | |
14 | + <tr style="background-color: #EEE; border-bottom: 2px solid #000;"> | |
15 | + <td><span style="font-style: italic;"><%= _('Check/Uncheck All') %></span></td> | |
16 | + <td align="center"><%= check_box_tag 'article_active', '' %></td> | |
17 | + </tr> | |
18 | + <% @article_types.each do |type| %> | |
19 | + <tr> | |
20 | + <td><%= _(type[:short_description]) %></td> | |
21 | + <td align="center"><%= check_box_tag 'settings[auto_marking_article_types][]', type[:class_name], auto_marking_enabled?(@settings, type[:class_name]) %></td> | |
22 | + </tr> | |
23 | + <% end %> | |
24 | +</table> | |
25 | + | |
26 | + <% button_bar do %> | |
27 | + <%= submit_button(:save, _('Save'), :cancel => {:controller => 'plugins', :action => 'index'}) %> | |
28 | + <% end %> | |
29 | + | |
30 | +<% end %> | |
31 | + | |
32 | +<%= javascript_include_tag 'plugins/comment_paragraph/comment_paragraph_admin' %> | ... | ... |
plugins/comment_paragraph/views/comment_paragraph_plugin_profile/view_comments.rjs
1 | -if @paragraph_comment_page == 1 | |
2 | - page.replace_html "comments_list_paragraph_#{@paragraph_id}", :partial => 'comment/comment.html.erb', :collection => @comments | |
3 | -else | |
4 | - page.insert_html :bottom, "comments_list_paragraph_#{@paragraph_id}", :partial => 'comment/comment.html.erb', :collection => @comments | |
5 | -end | |
1 | +page.replace_html "comments_list_paragraph_#{@paragraph_id}", :partial => 'comment/comment.html.erb', :collection => @comments | |
6 | 2 | page.replace_html "comment-count-#{@paragraph_id}", @comments_count |
7 | - | |
8 | -if @no_more_pages | |
9 | - page.replace_html "comments_list_paragraph_#{@paragraph_id}_more", "" | |
10 | -else | |
11 | - page.replace_html "comments_list_paragraph_#{@paragraph_id}_more", link_to_remote(_('More'), :url => { :profile => profile.identifier, :controller => 'comment_paragraph_plugin_profile', :action => 'view_comments', :paragraph_id => @paragraph_id, :article_id => @article_id, :paragraph_comment_page => @paragraph_comment_page + 1}, :loaded => visual_effect(:highlight, "comments_list_paragraph_#{@paragraph_id}"), :method => :post, :complete => "loadCompleted(#{@paragraph_id})") | |
12 | -end | ... | ... |