Commit 120aaa46962b537c2cef6696e5d340dc5edd83da
Exists in
theme-brasil-digital-from-staging
and in
9 other branches
Merge branch 'AI3205-comment-paragraph' into stable
Showing
7 changed files
with
124 additions
and
38 deletions
Show diff stats
plugins/comment_paragraph/lib/comment_paragraph_plugin.rb
| ... | ... | @@ -19,7 +19,8 @@ class CommentParagraphPlugin < Noosfero::Plugin |
| 19 | 19 | arr = [] |
| 20 | 20 | arr << hidden_field_tag('comment[id]', comment.id) |
| 21 | 21 | arr << hidden_field_tag('comment[paragraph_id]', paragraph_id) if paragraph_id |
| 22 | - arr << hidden_field_tag('comment[comment_paragraph_selected_area]', comment.comment_paragraph_selected_area) if comment.comment_paragraph_selected_area | |
| 22 | + arr << hidden_field_tag('comment[comment_paragraph_selected_area]', comment.comment_paragraph_selected_area) unless comment.comment_paragraph_selected_area.blank? | |
| 23 | + arr << hidden_field_tag('comment[comment_paragraph_selected_content]', comment.comment_paragraph_selected_content) unless comment.comment_paragraph_selected_content.blank? | |
| 23 | 24 | arr |
| 24 | 25 | } |
| 25 | 26 | end | ... | ... |
plugins/comment_paragraph/lib/ext/comment.rb
| ... | ... | @@ -3,14 +3,20 @@ require_dependency 'comment' |
| 3 | 3 | class Comment |
| 4 | 4 | |
| 5 | 5 | scope :without_paragraph, :conditions => {:paragraph_id => nil } |
| 6 | - | |
| 6 | + | |
| 7 | 7 | settings_items :comment_paragraph_selected_area, :type => :string |
| 8 | - | |
| 8 | + settings_items :comment_paragraph_selected_content, :type => :string | |
| 9 | + | |
| 9 | 10 | scope :in_paragraph, proc { |paragraph_id| { |
| 10 | 11 | :conditions => ['paragraph_id = ?', paragraph_id] |
| 11 | 12 | } |
| 12 | 13 | } |
| 13 | 14 | |
| 14 | - attr_accessible :paragraph_id, :comment_paragraph_selected_area, :id | |
| 15 | + attr_accessible :paragraph_id, :comment_paragraph_selected_area, :id, :comment_paragraph_selected_content | |
| 16 | + | |
| 17 | + before_validation do |comment| | |
| 18 | + comment.comment_paragraph_selected_area = nil if comment.comment_paragraph_selected_area.blank? | |
| 19 | + comment.comment_paragraph_selected_content = nil if comment_paragraph_selected_content.blank? | |
| 20 | + end | |
| 15 | 21 | |
| 16 | 22 | end | ... | ... |
plugins/comment_paragraph/public/comment_paragraph_macro.js
| 1 | 1 | var comment_paragraph_anchor; |
| 2 | 2 | var lastSelectedArea = []; |
| 3 | 3 | var original_paragraphs = []; |
| 4 | +var originalArticleHeight = 0 | |
| 4 | 5 | |
| 5 | 6 | function setPlusIfZeroComments($){ |
| 6 | 7 | $('.comment-count').each(function(){ |
| ... | ... | @@ -15,6 +16,8 @@ jQuery(document).ready(function($) { |
| 15 | 16 | if($('.comment_paragraph').size() < 1) |
| 16 | 17 | return; |
| 17 | 18 | |
| 19 | + originalArticleHeight = $('.article-body').height(); | |
| 20 | + | |
| 18 | 21 | all_paragraphs = $('.comment_paragraph'); |
| 19 | 22 | all_paragraphs.each( function(paragraph) { |
| 20 | 23 | var paragraph_id = $( all_paragraphs.get(paragraph) ).attr('data-paragraph'); |
| ... | ... | @@ -40,6 +43,12 @@ jQuery(document).ready(function($) { |
| 40 | 43 | return false; |
| 41 | 44 | }); |
| 42 | 45 | |
| 46 | + //Clears all old selected_area and selected_content after submit comment | |
| 47 | + $('[name|=commit]').click(function(){ | |
| 48 | + $('.selected_area').val(""); | |
| 49 | + $('.selected_content').val(""); | |
| 50 | + }); | |
| 51 | + | |
| 43 | 52 | $('#cancel-comment').die(); |
| 44 | 53 | $(document.body).on("click", '#cancel-comment', function(){ |
| 45 | 54 | $("div.side-comment").hide(); |
| ... | ... | @@ -51,7 +60,7 @@ jQuery(document).ready(function($) { |
| 51 | 60 | div.addClass('opened'); |
| 52 | 61 | } |
| 53 | 62 | } |
| 54 | - | |
| 63 | + | |
| 55 | 64 | rangy.init(); |
| 56 | 65 | cssApplier = rangy.createCssClassApplier("commented-area", {normalize: false}); |
| 57 | 66 | //Add marked text bubble |
| ... | ... | @@ -60,14 +69,27 @@ jQuery(document).ready(function($) { |
| 60 | 69 | <div align="center" class="triangle-right" >Comentar</div>\ |
| 61 | 70 | </a>'); |
| 62 | 71 | |
| 72 | + function resizeArticle(paragraphId){ | |
| 73 | + var commentHeigh = $('#side_comment_' + paragraphId).height(); | |
| 74 | + if(commentHeigh > 0){ | |
| 75 | + $('.article-body').height(originalArticleHeight + commentHeigh + 50); | |
| 76 | + }else{ | |
| 77 | + $('.article-body').height(originalArticleHeight); | |
| 78 | + } | |
| 79 | + } | |
| 63 | 80 | |
| 64 | 81 | $('.side-comments-counter').click(function(){ |
| 65 | 82 | var paragraphId = $(this).data('paragraph'); |
| 66 | 83 | hideAllCommentsExcept(paragraphId); |
| 67 | 84 | hideAllSelectedAreasExcept(paragraphId); |
| 85 | + if($('.comment-paragraph-slide-left').size()==0){ | |
| 86 | + $('.article-body').addClass('comment-paragraph-slide-left'); | |
| 87 | + $('#side_comment_' + paragraphId).show(); | |
| 88 | + }else{ | |
| 89 | + $('.article-body').removeClass('comment-paragraph-slide-left'); | |
| 90 | + $('.side-comment').hide(); | |
| 91 | + } | |
| 68 | 92 | $('#comment-bubble').hide(); |
| 69 | - $('#side_comment_' + paragraphId).toggle(); | |
| 70 | - $('#side_comment_' + paragraphId).find().toggle(); | |
| 71 | 93 | //Loads the comments |
| 72 | 94 | var url = $('#link_to_ajax_comments_' + paragraphId).data('url'); |
| 73 | 95 | $.ajax({ |
| ... | ... | @@ -76,12 +98,16 @@ jQuery(document).ready(function($) { |
| 76 | 98 | }).done(function() { |
| 77 | 99 | var button = $('#page-comment-form-' + paragraphId + ' a').get(0); |
| 78 | 100 | button.click(); |
| 101 | + resizeArticle(paragraphId); | |
| 79 | 102 | }); |
| 80 | 103 | }); |
| 81 | 104 | |
| 82 | 105 | |
| 83 | 106 | $('#comment-bubble').click(function(event){ |
| 84 | 107 | $(this).hide(); |
| 108 | + if($('.comment-paragraph-slide-left').size()==0){ | |
| 109 | + $('.article-body').addClass('comment-paragraph-slide-left'); | |
| 110 | + } | |
| 85 | 111 | $("#comment-bubble").css({top: 0, left: 0, position:'absolute'}); |
| 86 | 112 | var url = $("#comment-bubble").data('url'); |
| 87 | 113 | var paragraphId = $("#comment-bubble").data("paragraphId"); |
| ... | ... | @@ -93,6 +119,7 @@ jQuery(document).ready(function($) { |
| 93 | 119 | }).done(function() { |
| 94 | 120 | var button = $('#page-comment-form-' + paragraphId + ' a').get(0); |
| 95 | 121 | button.click(); |
| 122 | + resizeArticle(paragraphId); | |
| 96 | 123 | }); |
| 97 | 124 | }); |
| 98 | 125 | |
| ... | ... | @@ -101,7 +128,7 @@ jQuery(document).ready(function($) { |
| 101 | 128 | paragraph = $(this).data('paragraph'); |
| 102 | 129 | if(paragraph != clickedParagraph){ |
| 103 | 130 | $(this).hide(); |
| 104 | - $(this).find().hide(); | |
| 131 | + //$(this).find().hide(); | |
| 105 | 132 | } |
| 106 | 133 | }); |
| 107 | 134 | } |
| ... | ... | @@ -139,6 +166,11 @@ jQuery(document).ready(function($) { |
| 139 | 166 | $('.comment_paragraph').mouseup(function(event) { |
| 140 | 167 | |
| 141 | 168 | $('#comment-bubble').hide(); |
| 169 | + if($('.comment-paragraph-slide-left').size() > 0){ | |
| 170 | + $('.article-body').removeClass('comment-paragraph-slide-left'); | |
| 171 | + $('.side-comment').hide(); | |
| 172 | + //$('.side-comment').find().hide(); | |
| 173 | + } | |
| 142 | 174 | |
| 143 | 175 | //Don't do anything if there is no selected text |
| 144 | 176 | if (getSelectionText().length == 0) { |
| ... | ... | @@ -164,9 +196,9 @@ jQuery(document).ready(function($) { |
| 164 | 196 | } catch(e) { |
| 165 | 197 | return; |
| 166 | 198 | } |
| 199 | + form = $('#page-comment-form-' + paragraphId).find('form'); | |
| 167 | 200 | |
| 168 | 201 | //Register the area the has been selected at input.selected_area |
| 169 | - form = $('#page-comment-form-' + paragraphId).find('form'); | |
| 170 | 202 | if (form.find('input.selected_area').length === 0){ |
| 171 | 203 | $('<input>').attr({ |
| 172 | 204 | class: 'selected_area', |
| ... | ... | @@ -177,8 +209,20 @@ jQuery(document).ready(function($) { |
| 177 | 209 | }else{ |
| 178 | 210 | form.find('input.selected_area').val(selected_area) |
| 179 | 211 | } |
| 212 | + //Register the content being selected at input.comment_paragraph_selected_content | |
| 213 | + var selected_content = getSelectionText(); | |
| 214 | + if(selected_content.length > 0) | |
| 215 | + if (form.find('input.selected_content').length === 0){ | |
| 216 | + $('<input>').attr({ | |
| 217 | + class: 'selected_content', | |
| 218 | + type: 'hidden', | |
| 219 | + name: 'comment[comment_paragraph_selected_content]', | |
| 220 | + value: selected_content | |
| 221 | + }).appendTo(form) | |
| 222 | + }else{ | |
| 223 | + form.find('input.selected_content').val(selected_content) | |
| 224 | + } | |
| 180 | 225 | rootElement.focus(); |
| 181 | - | |
| 182 | 226 | }); |
| 183 | 227 | |
| 184 | 228 | function processAnchor(){ | ... | ... |
plugins/comment_paragraph/public/style.css
| ... | ... | @@ -7,7 +7,7 @@ div.article-comments-list-more{ |
| 7 | 7 | } |
| 8 | 8 | |
| 9 | 9 | .popBox_comment_paragraph { |
| 10 | - position: absolute; | |
| 10 | +/* position: absolute;*/ | |
| 11 | 11 | z-index: 2; |
| 12 | 12 | background: #cccccc; |
| 13 | 13 | width: 60px; |
| ... | ... | @@ -34,9 +34,6 @@ div.article-comments-list-more{ |
| 34 | 34 | |
| 35 | 35 | .comment_paragraph{ |
| 36 | 36 | padding: 0px; |
| 37 | - position: relative; | |
| 38 | - left: -20px; | |
| 39 | - width: 450px; | |
| 40 | 37 | font-weight: bold; |
| 41 | 38 | text-align: justify; |
| 42 | 39 | } |
| ... | ... | @@ -92,12 +89,10 @@ div[class^='comments_list_toggle_paragraph_'] { |
| 92 | 89 | border-color: #ccc; |
| 93 | 90 | padding: 5px; |
| 94 | 91 | background-color: whitesmoke; |
| 95 | - width: 270px; | |
| 92 | + width: 300px; | |
| 96 | 93 | } |
| 97 | 94 | |
| 98 | 95 | div[class^='comment-paragraph-loading-'] { |
| 99 | - position: relative; | |
| 100 | - left: 470px; | |
| 101 | 96 | z-index: 99; |
| 102 | 97 | } |
| 103 | 98 | |
| ... | ... | @@ -167,6 +162,8 @@ div[class^='comment-paragraph-loading-'] { |
| 167 | 162 | padding: 0; |
| 168 | 163 | width: 100%; |
| 169 | 164 | text-align: left; |
| 165 | + overflow: visible; | |
| 166 | + line-break: loose; | |
| 170 | 167 | } |
| 171 | 168 | .side-comment .comment-text p { |
| 172 | 169 | margin: 0; |
| ... | ... | @@ -188,7 +185,7 @@ div[class^='comment-paragraph-loading-'] { |
| 188 | 185 | padding-left: 25px; |
| 189 | 186 | } |
| 190 | 187 | #article .side-comment .comment-picture { |
| 191 | - width: 75%; | |
| 188 | + width: 100%; | |
| 192 | 189 | height: auto; |
| 193 | 190 | } |
| 194 | 191 | #article .side-comment .article-comment .comment-details > h4 { |
| ... | ... | @@ -212,6 +209,7 @@ div[class^='comment-paragraph-loading-'] { |
| 212 | 209 | bg-color: #b3b2d4; |
| 213 | 210 | } |
| 214 | 211 | |
| 212 | +/* | |
| 215 | 213 | .comment-paragraph-rowset{ |
| 216 | 214 | padding: 0; |
| 217 | 215 | margin: 0; |
| ... | ... | @@ -225,8 +223,8 @@ div[class^='comment-paragraph-loading-'] { |
| 225 | 223 | |
| 226 | 224 | -webkit-flex-flow: row wrap; |
| 227 | 225 | justify-content: space-around; |
| 226 | +}*/ | |
| 228 | 227 | |
| 229 | -} | |
| 230 | 228 | .comment-paragraph-comments{ |
| 231 | 229 | background: lightblue; |
| 232 | 230 | padding: 5px; |
| ... | ... | @@ -235,4 +233,21 @@ div[class^='comment-paragraph-loading-'] { |
| 235 | 233 | color: white; |
| 236 | 234 | font-weight: bold; |
| 237 | 235 | text-align: center; |
| 236 | +} | |
| 237 | + | |
| 238 | +.single-border{ | |
| 239 | + border-style: solid; | |
| 240 | + border-width: 2px; | |
| 241 | +} | |
| 242 | + | |
| 243 | +.comment-paragraph-group-comments{ | |
| 244 | + position: absolute; | |
| 245 | + background-color: white; | |
| 246 | + z-index: 9999; | |
| 247 | +} | |
| 248 | + | |
| 249 | +.comment-paragraph-slide-left{ | |
| 250 | + position: relative; | |
| 251 | + width: 80%; | |
| 252 | + transition: 0.6s; | |
| 238 | 253 | } |
| 239 | 254 | \ No newline at end of file | ... | ... |
plugins/comment_paragraph/test/unit/comment_paragraph_plugin_test.rb
| 1 | 1 | require File.dirname(__FILE__) + '/../test_helper' |
| 2 | +include ActionView::Helpers::FormTagHelper | |
| 2 | 3 | |
| 3 | 4 | class CommentParagraphPluginTest < ActiveSupport::TestCase |
| 4 | 5 | |
| ... | ... | @@ -25,4 +26,13 @@ class CommentParagraphPluginTest < ActiveSupport::TestCase |
| 25 | 26 | assert plugin.stylesheet? |
| 26 | 27 | end |
| 27 | 28 | |
| 29 | + should 'not add comment_paragraph_selected_area if comment_paragraph_selected_area is blank' do | |
| 30 | + comment = Comment.new | |
| 31 | + comment.comment_paragraph_selected_area = "" | |
| 32 | + comment.paragraph_id = 2 | |
| 33 | + cpp = CommentParagraphPlugin.new | |
| 34 | + prok = cpp.comment_form_extra_contents({:comment=>comment, :paragraph_id=>4}) | |
| 35 | + assert_nil /comment_paragraph_selected_area/.match(prok.call.inspect) | |
| 36 | + end | |
| 37 | + | |
| 28 | 38 | end | ... | ... |
plugins/comment_paragraph/views/comment/comment_extra.html.erb
| 1 | 1 | <input type="hidden" value="<%= comment.comment_paragraph_selected_area%>" class="paragraph_comment_area" /> |
| 2 | -<input type="hidden" value="<%= comment.paragraph_id%>" class="paragraph_id" /> | |
| 2 | +<input type="hidden" value="<%= comment.paragraph_id%>" class="paragraph_id" /><input type="hidden" value="<%= comment.comment_paragraph_selected_content%>" class="paragraph_selected_content" /> | |
| 3 | +<input type="hidden" value="<%= comment.comment_paragraph_selected_content%>" class="paragraph_selected_content" /> | ... | ... |
plugins/comment_paragraph/views/comment_paragraph_plugin_profile/_comment_paragraph.html.erb
| 1 | -<ul class="comments comment-paragraph-rowset"> | |
| 2 | - <li class="comment_paragraph" id="comment_paragraph_<%= paragraph_id %>" data-paragraph="<%= paragraph_id %>"> | |
| 3 | - <%= inner_html %> | |
| 4 | - </li> | |
| 5 | - | |
| 6 | - <li align="center" class="side-comments-counter" id="side_comments_counter_<%= paragraph_id %>" data-paragraph="<%= paragraph_id %>" style="vertical-align: middle; padding-left: 3px; padding-right: 5px;"> | |
| 7 | - <span id="comment-count-<%= paragraph_id %>" class='comment-count'> | |
| 8 | - <%= count %> | |
| 9 | - </span> | |
| 10 | - </li> | |
| 11 | - | |
| 12 | - <div align="center"> | |
| 1 | +<table class="comments"> | |
| 2 | + <tr> | |
| 3 | + <td> | |
| 4 | + <div class="comment_paragraph" id="comment_paragraph_<%= paragraph_id %>" data-paragraph="<%= paragraph_id %>"> | |
| 5 | + <%= inner_html %> | |
| 6 | + </div> | |
| 7 | + </td> | |
| 8 | + <td> | |
| 9 | + <div align="center" class="side-comments-counter" id="side_comments_counter_<%= paragraph_id %>" data-paragraph="<%= paragraph_id %>" style="vertical-align: middle; padding-left: 3px; padding-right: 5px;"> | |
| 10 | + <span id="comment-count-<%= paragraph_id %>" class='comment-count'> | |
| 11 | + <%= count %> | |
| 12 | + </span> | |
| 13 | + </div> | |
| 14 | + </td> | |
| 15 | + <td> | |
| 16 | +<div class="comment-paragraph-group-comments"> | |
| 13 | 17 | <%= |
| 14 | 18 | url = { :profile => profile_identifier, :controller => 'comment_paragraph_plugin_profile', :action => 'view_comments', :paragraph_id => paragraph_id, :article_id => article_id} |
| 15 | 19 | link_to_remote( |
| ... | ... | @@ -25,10 +29,9 @@ |
| 25 | 29 | :'data-url' => url_for(url) |
| 26 | 30 | } |
| 27 | 31 | )%> |
| 28 | - </div> | |
| 29 | - | |
| 30 | - <div class="side-comment" id="side_comment_<%= paragraph_id %>" data-paragraph="<%= paragraph_id %>" style="display:none"> | |
| 31 | - <div class="comment-paragraph-loading-<%= paragraph_id %>" style="position: absolute;"> | |
| 32 | + | |
| 33 | + <div class="side-comment" id="side_comment_<%= paragraph_id %>" data-paragraph="<%= paragraph_id %>" style="display:none"> | |
| 34 | + <div class="comment-paragraph-loading-<%= paragraph_id %>"> | |
| 32 | 35 | <div class="comments_list_toggle_paragraph_<%= paragraph_id %>" > |
| 33 | 36 | <div class="article-comments-list" id="comments_list_paragraph_<%= paragraph_id %>"></div> |
| 34 | 37 | <div class ="article-comments-list-more" id="comments_list_paragraph_<%= paragraph_id %>_more"></div> |
| ... | ... | @@ -37,7 +40,13 @@ |
| 37 | 40 | </div> |
| 38 | 41 | </div> |
| 39 | 42 | </div> |
| 40 | - </div> | |
| 41 | - </ul> | |
| 43 | + </div> | |
| 44 | +</div> | |
| 45 | + </td> | |
| 46 | + </tr> | |
| 47 | +</table> | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 42 | 51 | |
| 43 | 52 | ... | ... |