diff --git a/plugins/comment_paragraph/lib/ext/article.rb b/plugins/comment_paragraph/lib/ext/article.rb index 0ef3d23..874a521 100644 --- a/plugins/comment_paragraph/lib/ext/article.rb +++ b/plugins/comment_paragraph/lib/ext/article.rb @@ -22,22 +22,19 @@ class Article comment_paragraph_plugin_set_initial_value unless persisted? return unless comment_paragraph_plugin_activated? if body && (body_changed? || setting_changed?(:comment_paragraph_plugin_activate)) - parsed_paragraphs = [] updated = body_changed? ? body_change[1] : body - doc = Nokogiri::HTML(updated).css('body') - - doc.children.each do |paragraph| - if paragraph.to_html =~ /^\W<\/p>$/ - parsed_paragraphs << paragraph.to_html - else - if paragraph.to_html =~ /^( div, body > span, body > p, li').each do |paragraph| + next if paragraph.css('[data-macro="comment_paragraph_plugin/allow_comment"]').present? || paragraph.content.blank? + + commentable = Nokogiri::XML::Node.new("span", doc) + commentable['class'] = "macro article_comments paragraph_comment #{paragraph['class']}" + commentable['data-macro'] = 'comment_paragraph_plugin/allow_comment' + commentable['data-macro-paragraph_uuid'] = SecureRandom.uuid + commentable.inner_html = paragraph.content + paragraph.inner_html = commentable end - self.body = parsed_paragraphs.join() + self.body = doc.at('body').inner_html end end @@ -50,10 +47,4 @@ class Article @comment_paragraph_plugin_settings ||= Noosfero::Plugin::Settings.new(environment, CommentParagraphPlugin) end - def comment_paragraph_plugin_parse_paragraph(paragraph_content, paragraph_uuid) - "
#{paragraph_content}
\r\n" - end - end diff --git a/plugins/comment_paragraph/lib/ext/tinymce_helper.rb b/plugins/comment_paragraph/lib/ext/tinymce_helper.rb new file mode 100644 index 0000000..ac33968 --- /dev/null +++ b/plugins/comment_paragraph/lib/ext/tinymce_helper.rb @@ -0,0 +1,11 @@ +require_dependency 'tinymce_helper' + +module TinymceHelper + + def tinymce_init_js_with_comment_paragraph(options = {}) + options = options.merge(:keep_styles => false) if environment.plugin_enabled?(CommentParagraphPlugin) + tinymce_init_js_without_comment_paragraph(options) + end + + alias_method_chain :tinymce_init_js, :comment_paragraph +end diff --git a/plugins/comment_paragraph/public/style.css b/plugins/comment_paragraph/public/style.css index 595bdfe..65a20d9 100644 --- a/plugins/comment_paragraph/public/style.css +++ b/plugins/comment_paragraph/public/style.css @@ -364,3 +364,9 @@ div.article-comments-list-more{ #content .comment-paragraph-plugin .button-bar { margin: 5px 0; } + +li span[data-macro="comment_paragraph_plugin/allow_comment"] { + display: inline-block; + vertical-align: top; + min-height: 30px; +} diff --git a/plugins/comment_paragraph/test/test_helper.rb b/plugins/comment_paragraph/test/test_helper.rb index 70322cf..fadfdb0 100644 --- a/plugins/comment_paragraph/test/test_helper.rb +++ b/plugins/comment_paragraph/test/test_helper.rb @@ -1 +1,5 @@ require_relative '../../../test/test_helper' + +def assert_mark_paragraph(html, tag, content) + assert_tag_in_string html, :tag => tag, :child => {:tag => 'span', :attributes => {'data-macro'=>"comment_paragraph_plugin/allow_comment"}, :content => content} +end diff --git a/plugins/comment_paragraph/test/unit/article_test.rb b/plugins/comment_paragraph/test/unit/article_test.rb index 52d480f..254ed9e 100644 --- a/plugins/comment_paragraph/test/unit/article_test.rb +++ b/plugins/comment_paragraph/test/unit/article_test.rb @@ -33,20 +33,30 @@ class ArticleTest < ActiveSupport::TestCase end should 'parse html if the plugin is not enabled' do - article.body = "

paragraph 1

paragraph 2

" + article.body = "

paragraph 1

div 1
span 1" + article.comment_paragraph_plugin_activate = true + article.save! + assert_mark_paragraph article.body, 'p', 'paragraph 1' + assert_mark_paragraph article.body, 'div', 'div 1' + assert_mark_paragraph article.body, 'span', 'span 1' + end + + should 'parse html li when activate comment paragraph' do + article.body = '' article.comment_paragraph_plugin_activate = true article.save! - assert_match /data-macro="comment_paragraph_plugin\/allow_comment"/, article.body + assert_mark_paragraph article.body, 'li', 'item1' + assert_mark_paragraph article.body, 'li', 'item2' end should 'do not remove macro div when disable comment paragraph' do - article.body = "

paragraph 1

paragraph 2

" + article.body = "

paragraph 1

" article.comment_paragraph_plugin_activate = true article.save! - assert_match /data-macro="comment_paragraph_plugin\/allow_comment"/, article.body + assert_mark_paragraph article.body, 'p', 'paragraph 1' article.comment_paragraph_plugin_activate = false article.save! - assert_match /data-macro="comment_paragraph_plugin\/allow_comment"/, article.body + assert_mark_paragraph article.body, 'p', 'paragraph 1' end should 'parse html when activate comment paragraph' do @@ -56,7 +66,42 @@ class ArticleTest < ActiveSupport::TestCase assert_equal "

paragraph 1

paragraph 2

", article.body article.comment_paragraph_plugin_activate = true article.save! - assert_match /data-macro="comment_paragraph_plugin\/allow_comment"/, article.body + + assert_mark_paragraph article.body, 'p', 'paragraph 1' + assert_mark_paragraph article.body, 'p', 'paragraph 2' + end + + should 'parse html when add new paragraph' do + article.body = "

paragraph 1

" + article.comment_paragraph_plugin_activate = true + article.save! + assert_mark_paragraph article.body, 'p', 'paragraph 1' + + article.body += "

paragraph 2

" + article.save! + assert_mark_paragraph article.body, 'p', 'paragraph 1' + assert_mark_paragraph article.body, 'p', 'paragraph 2' + end + + should 'keep already marked paragraph attributes when add new paragraph' do + article.body = "

paragraph 1

" + article.comment_paragraph_plugin_activate = true + article.save! + assert_mark_paragraph article.body, 'p', 'paragraph 1' + uuid = Nokogiri::HTML(article.body).at('p span.paragraph_comment')['data-macro-paragraph_uuid'] + + article.body += "

paragraph 2

" + article.save! + assert_mark_paragraph article.body, 'p', 'paragraph 1' + new_uuid = Nokogiri::HTML(article.body).at('p span.paragraph_comment')['data-macro-paragraph_uuid'] + assert_equal uuid, new_uuid + end + + should 'not parse empty element' do + article.body = '
' + article.comment_paragraph_plugin_activate = true + article.save! + assert_equal '
', article.body end should 'be enabled if plugin is enabled and article is a kind of TextArticle' do diff --git a/plugins/comment_paragraph/test/unit/tinymce_helper_test.rb b/plugins/comment_paragraph/test/unit/tinymce_helper_test.rb new file mode 100644 index 0000000..c711702 --- /dev/null +++ b/plugins/comment_paragraph/test/unit/tinymce_helper_test.rb @@ -0,0 +1,27 @@ +require_relative '../test_helper' + +class TinymceHelperTest < ActiveSupport::TestCase + + include TinymceHelper + + def setup + expects(:top_url).returns('/') + expects(:tinymce_language).returns('en') + @plugins = mock + @plugins.expects(:dispatch).returns([]).at_least_once + @environment = Environment.default + end + + attr_accessor :top_url, :environment + + should 'set keep_styles to false in tinymce options' do + environment.enable_plugin(CommentParagraphPlugin) + assert_match /"keep_styles":false/, tinymce_init_js + end + + should 'do not set keep_styles to false when plugin is not enabled' do + environment.disable_plugin(CommentParagraphPlugin) + assert_no_match /"keep_styles":false/, tinymce_init_js + end + +end -- libgit2 0.21.2