Commit f9937d0e20ba80fd92d7200e129ce0d7080e78ec

Authored by Evandro Junior
1 parent af792624

before rename paragraph_id paragraph_uuid

plugins/comment_paragraph/db/migrate/20140715201649_add_paragraph_id_to_comment.rb
@@ -1,9 +0,0 @@ @@ -1,9 +0,0 @@
1 -class AddParagraphIdToComment < ActiveRecord::Migration  
2 - def self.up  
3 - add_column :comments, :paragraph_id, :integer unless column_exists?(:comments, :paragraph_id)  
4 - end  
5 -  
6 - def self.down  
7 - remove_column :comments, :paragraph_id  
8 - end  
9 -end  
plugins/comment_paragraph/db/migrate/20141223184902_add_paragraph_uuid_to_comments.rb 0 → 100644
@@ -0,0 +1,6 @@ @@ -0,0 +1,6 @@
  1 +class AddParagraphUuidToComments < ActiveRecord::Migration
  2 + def change
  3 + add_column :comments, :paragraph_uuid, :string unless column_exists?(:comments, :paragraph_uuid)
  4 + add_index :comments, :paragraph_uuid
  5 + end
  6 +end
plugins/comment_paragraph/lib/comment_paragraph_plugin.rb
@@ -40,48 +40,47 @@ class CommentParagraphPlugin &lt; Noosfero::Plugin @@ -40,48 +40,47 @@ class CommentParagraphPlugin &lt; Noosfero::Plugin
40 true 40 true
41 end 41 end
42 42
43 - def cms_controller_filters  
44 - block = proc do  
45 - if params['commit'] == 'Save' 43 +# def cms_controller_filters
  44 +# block = proc do
  45 +# if params['commit'] == 'Save'
  46 +#
  47 +# settings = Noosfero::Plugin::Settings.new(environment, CommentParagraphPlugin, params[:settings])
  48 +#
  49 +# extend CommentParagraphPlugin::CommentParagraphHelper
  50 +# if !@article.id.blank? && self.auto_marking_enabled?(settings, @article.class.name)
  51 +#
  52 +# parsed_paragraphs = []
  53 +# paragraph_id = 0
  54 +#
  55 +# doc = Hpricot(@article.body)
  56 +# paragraphs = doc.search("/*").each do |paragraph|
  57 +#
  58 +# if paragraph.to_html =~ /^<div(.*)paragraph_comment(.*)$/ || paragraph.to_html =~ /^<p>\W<\/p>$/
  59 +# parsed_paragraphs << paragraph.to_html
  60 +# else
  61 +# if paragraph.to_html =~ /^(<div|<table|<p|<ul).*/
  62 +# parsed_paragraphs << CommentParagraphPlugin.parse_paragraph(paragraph.to_html, paragraph_id)
  63 +# else
  64 +# parsed_paragraphs << paragraph.to_html
  65 +# end
  66 +# end
  67 +#
  68 +# paragraph_id += 1
  69 +#
  70 +# end
  71 +#
  72 +# @article.body = parsed_paragraphs.join()
  73 +# @article.save
  74 +#
  75 +# end
  76 +# end
  77 +# end
  78 +#
  79 +# { :type => 'after_filter',
  80 +# :method_name => 'new',
  81 +# :block => block }
  82 +# end
46 83
47 - settings = Noosfero::Plugin::Settings.new(environment, CommentParagraphPlugin, params[:settings])  
48 -  
49 - extend CommentParagraphPlugin::CommentParagraphHelper  
50 - if !@article.id.blank? && self.auto_marking_enabled?(settings, @article.class.name)  
51 -  
52 - parsed_paragraphs = []  
53 - paragraph_id = 0  
54 -  
55 - doc = Hpricot(@article.body)  
56 - paragraphs = doc.search("/*").each do |paragraph|  
57 -  
58 - if paragraph.to_html =~ /^<div(.*)paragraph_comment(.*)$/ || paragraph.to_html =~ /^<p>\W<\/p>$/  
59 - parsed_paragraphs << paragraph.to_html  
60 - else  
61 - if paragraph.to_html =~ /^(<div|<table|<p|<ul).*/  
62 - parsed_paragraphs << CommentParagraphPlugin.parse_paragraph(paragraph.to_html, paragraph_id)  
63 - else  
64 - parsed_paragraphs << paragraph.to_html  
65 - end  
66 - end  
67 -  
68 - paragraph_id += 1  
69 -  
70 - end  
71 -  
72 - @article.body = parsed_paragraphs.join()  
73 - @article.save  
74 -  
75 - end  
76 - end  
77 - end  
78 -  
79 - { :type => 'after_filter',  
80 - :method_name => 'new',  
81 - :block => block }  
82 - end  
83 -  
84 - private  
85 84
86 def self.parse_paragraph( paragraph_content, paragraph_id ) 85 def self.parse_paragraph( paragraph_content, paragraph_id )
87 "<div class='macro article_comments paragraph_comment' " + 86 "<div class='macro article_comments paragraph_comment' " +
plugins/comment_paragraph/lib/ext/article.rb
@@ -2,16 +2,40 @@ require_dependency &#39;article&#39; @@ -2,16 +2,40 @@ require_dependency &#39;article&#39;
2 2
3 class Article 3 class Article
4 4
5 - has_many :paragraph_comments, :class_name => 'Comment', :foreign_key => 'source_id', :dependent => :destroy, :order => 'created_at asc', :conditions => [ 'paragraph_id IS NOT NULL'] 5 + has_many :paragraph_comments, :class_name => 'Comment', :foreign_key => 'source_id', :dependent => :destroy, :order => 'created_at asc', :conditions => [ 'paragraph_uuid IS NOT NULL']
6 6
7 - validate :body_change_with_comments 7 + # validate :body_change_with_comments
  8 +
  9 + before_save :parse_html
8 10
9 def body_change_with_comments 11 def body_change_with_comments
10 if body && body_changed? && !self.comments.empty? 12 if body && body_changed? && !self.comments.empty?
11 - paragraphs_with_comments = self.comments.where("paragraph_id IS NOT NULL") 13 + paragraphs_with_comments = self.comments.where("paragraph_uuid IS NOT NULL")
12 errors[:base] << (N_('You are unable to change the body of the article when paragraphs are commented')) unless (paragraphs_with_comments).empty? 14 errors[:base] << (N_('You are unable to change the body of the article when paragraphs are commented')) unless (paragraphs_with_comments).empty?
13 end 15 end
14 end 16 end
  17 +
  18 + def parse_html
  19 + if body && body_changed?
  20 + parsed_paragraphs = []
  21 + updated = body_change[1]
  22 + doc = Hpricot(updated)
  23 + paragraphs = doc.search("/*").each do |paragraph|
  24 + uuid = SecureRandom.uuid
  25 + if paragraph.to_html =~ /^<div(.*)paragraph_comment(.*)$/ || paragraph.to_html =~ /^<p>\W<\/p>$/
  26 + parsed_paragraphs << paragraph.to_html
  27 + else
  28 + if paragraph.to_html =~ /^(<div|<table|<p|<ul).*/
  29 + parsed_paragraphs << CommentParagraphPlugin.parse_paragraph(paragraph.to_html, uuid)
  30 + else
  31 + parsed_paragraphs << paragraph.to_html
  32 + end
  33 + end
  34 + end
  35 + self.body = parsed_paragraphs.join()
  36 + #@article.save
  37 + end
  38 + end
  39 +
15 40
16 end 41 end
17 -  
plugins/comment_paragraph/public/comment_paragraph.js
1 -String.prototype.startsWith = function(needle){  
2 - return(this.indexOf(needle) == 0);  
3 -};  
4 -  
5 -function makeAllCommentable() {  
6 - var paragraphsTxt="";  
7 - var selectedTextCount=0;  
8 - var notSelectedTextCount=0;  
9 - var text;  
10 -  
11 - //Search for text that is not selected in the middle of selected text, in this case unselect everything  
12 - jQuery('#article_body_ifr').contents().find('body').children().each(function( index ) {  
13 - //Check if there are other texts not selected  
14 - var element=jQuery(this).prop('outerHTML');  
15 - if(element.startsWith('<div')){  
16 - selectedTextCount++;  
17 - }else{  
18 - if(! element.startsWith('<p><br></p>') && ! element.startsWith('<p>&nbsp;</p>') ){  
19 - notSelectedTextCount++;  
20 - }  
21 - }  
22 - });  
23 -  
24 - if(selectedTextCount > 0 && notSelectedTextCount>0){  
25 - jQuery('#article_body_ifr').contents().find('body').children('.paragraph_comment').contents().unwrap();  
26 - //Workaround necessary to post the body of the article  
27 - tinymce.activeEditor.execCommand('mceInsertContent', false, " ");  
28 - return;  
29 - }  
30 -  
31 - //Add p tag, when opening the editor. For some season it appear at the end without p tag  
32 - foundCommentableParagraph = false;  
33 - jQuery('#article_body_ifr').contents().find('body').children('div.article_comments').each(function( index ) {  
34 - if(jQuery(this).html()!="" && jQuery(this).html()!=" " && jQuery(this).html()!="<br>"){  
35 - paragraphsTxt+="<p>" + jQuery(this).html() + "</p>";  
36 - }  
37 - foundCommentableParagraph = true;  
38 - });  
39 -  
40 - //undo the paragraph comment tags  
41 - if(foundCommentableParagraph === true){  
42 - tinyMCE.activeEditor.setContent(paragraphsTxt);  
43 - return;  
44 - }  
45 -  
46 - //Wraps the paragraph using the chosen class  
47 - jQuery('#article_body_ifr').contents().find('body').children('p,table,img').each(function( index ) {  
48 - text=jQuery(this).prop('outerHTML');  
49 - if(text!="" && text!=" " && text!="<br>"){  
50 - paragraphsTxt+='<div class="macro article_comments paragraph_comment" data-macro="comment_paragraph_plugin/allow_comment" data-macro-paragraph_id="' + index + '">' + text + '</div><br>'  
51 - }  
52 - });  
53 - tinyMCE.activeEditor.setContent(paragraphsTxt);  
54 -  
55 - //Workaround necessary to post the body of the article  
56 - tinymce.activeEditor.execCommand('mceInsertContent', false, " ");  
57 -} 1 +//String.prototype.startsWith = function(needle){
  2 +// return(this.indexOf(needle) == 0);
  3 +//};
  4 +//
  5 +//function makeAllCommentable() {
  6 +// var paragraphsTxt="";
  7 +// var selectedTextCount=0;
  8 +// var notSelectedTextCount=0;
  9 +// var text;
  10 +//
  11 +// //Search for text that is not selected in the middle of selected text, in this case unselect everything
  12 +// jQuery('#article_body_ifr').contents().find('body').children().each(function( index ) {
  13 +// //Check if there are other texts not selected
  14 +// var element=jQuery(this).prop('outerHTML');
  15 +// if(element.startsWith('<div')){
  16 +// selectedTextCount++;
  17 +// }else{
  18 +// if(! element.startsWith('<p><br></p>') && ! element.startsWith('<p>&nbsp;</p>') ){
  19 +// notSelectedTextCount++;
  20 +// }
  21 +// }
  22 +// });
  23 +//
  24 +// if(selectedTextCount > 0 && notSelectedTextCount>0){
  25 +// jQuery('#article_body_ifr').contents().find('body').children('.paragraph_comment').contents().unwrap();
  26 +// //Workaround necessary to post the body of the article
  27 +// tinymce.activeEditor.execCommand('mceInsertContent', false, " ");
  28 +// return;
  29 +// }
  30 +//
  31 +// //Add p tag, when opening the editor. For some season it appear at the end without p tag
  32 +// foundCommentableParagraph = false;
  33 +// jQuery('#article_body_ifr').contents().find('body').children('div.article_comments').each(function( index ) {
  34 +// if(jQuery(this).html()!="" && jQuery(this).html()!=" " && jQuery(this).html()!="<br>"){
  35 +// paragraphsTxt+="<p>" + jQuery(this).html() + "</p>";
  36 +// }
  37 +// foundCommentableParagraph = true;
  38 +// });
  39 +//
  40 +// //undo the paragraph comment tags
  41 +// if(foundCommentableParagraph === true){
  42 +// tinyMCE.activeEditor.setContent(paragraphsTxt);
  43 +// return;
  44 +// }
  45 +//
  46 +// //Wraps the paragraph using the chosen class
  47 +// jQuery('#article_body_ifr').contents().find('body').children('p,table,img').each(function( index ) {
  48 +// text=jQuery(this).prop('outerHTML');
  49 +// if(text!="" && text!=" " && text!="<br>"){
  50 +// paragraphsTxt+='<div class="macro article_comments paragraph_comment" data-macro="comment_paragraph_plugin/allow_comment" data-macro-paragraph_id="' + index + '">' + text + '</div><br>'
  51 +// }
  52 +// });
  53 +// tinyMCE.activeEditor.setContent(paragraphsTxt);
  54 +//
  55 +// //Workaround necessary to post the body of the article
  56 +// tinymce.activeEditor.execCommand('mceInsertContent', false, " ");
  57 +//}