Commit 145438557bcbab5d7b1759be2ab27535d530be73

Authored by Caio Almeida
Committed by Daniela Feitosa
1 parent ffb48135

Cosmetic changes on nested comments

* Adds another "Post a comment" top button that redirects to the bottom
* "Post a comment" button is left-aligned
* Removal confirmation message changed to cover replies
* Removes background and border from the remove icon
* The remove icon appears only on mouse over
* Works in all major browsers
* Highlights the author reply as the same way as the author comment

(ActionItem1771)
app/views/content_viewer/_comment.rhtml
@@ -24,7 +24,7 @@ @@ -24,7 +24,7 @@
24 <% comment_balloon do %> 24 <% comment_balloon do %>
25 <% if logged_in? && (user == @page.profile || user == comment.author || user.has_permission?(:moderate_comments, @page.profile)) %> 25 <% if logged_in? && (user == @page.profile || user == comment.author || user.has_permission?(:moderate_comments, @page.profile)) %>
26 <% button_bar(:style => 'float: right; margin-top: 0px;') do %> 26 <% button_bar(:style => 'float: right; margin-top: 0px;') do %>
27 - <%= icon_button(:delete, _('Remove this comment'), { :profile => params[:profile], :remove_comment => comment.id, :view => params[:view] }, :method => :post, :confirm => _('Are you sure you want to remove this comment?')) %> 27 + <%= icon_button(:delete, _('Remove this comment and all its replies'), { :profile => params[:profile], :remove_comment => comment.id, :view => params[:view] }, :method => :post, :confirm => _('Are you sure you want to remove this comment and all its replies?')) %>
28 <% end %> 28 <% end %>
29 <% end %> 29 <% end %>
30 30
app/views/content_viewer/view_page.rhtml
@@ -125,10 +125,19 @@ @@ -125,10 +125,19 @@
125 <h3 <%= 'class="no-comments-yet"' if @comments.size == 0 %>> 125 <h3 <%= 'class="no-comments-yet"' if @comments.size == 0 %>>
126 <%= number_of_comments(@page) %> 126 <%= number_of_comments(@page) %>
127 </h3> 127 </h3>
  128 + <% if @comments.size > 0 %>
  129 + <p class="post-comment-button"><a href="#comment_form" onclick="jQuery('#page-comment-form h4').first().trigger('click')"><%= _('Post a comment') %></a></p>
  130 + <% end %>
128 <ul class="article-comments-list"> 131 <ul class="article-comments-list">
129 <%= render :partial => 'comment', :collection => @comments %> 132 <%= render :partial => 'comment', :collection => @comments %>
130 </ul> 133 </ul>
131 <div id="page-comment-form"><%= render :partial => 'comment_form' %></div> 134 <div id="page-comment-form"><%= render :partial => 'comment_form' %></div>
  135 + <script type="text/javascript">
  136 + jQuery( function() {
  137 + jQuery('.article-comment').live('mouseover', function() { jQuery(this).find('.icon-delete:first').show(); });
  138 + jQuery('.article-comment').live('mouseout', function() { jQuery(this).find('.icon-delete').hide(); });
  139 + });
  140 + </script>
132 <% end %> 141 <% end %>
133 </div><!-- end class="comments" --> 142 </div><!-- end class="comments" -->
134 143
features/comment.feature
@@ -67,4 +67,15 @@ Feature: comment @@ -67,4 +67,15 @@ Feature: comment
67 And I fill in "Enter your comment" with "Hey ho, let's go!" 67 And I fill in "Enter your comment" with "Hey ho, let's go!"
68 When I press "Post comment" 68 When I press "Post comment"
69 Then the "value.Post comment" button should not be enabled 69 Then the "value.Post comment" button should not be enabled
70 - And I should see "Hey ho, let's go"  
71 \ No newline at end of file 70 \ No newline at end of file
  71 + And I should see "Hey ho, let's go"
  72 +
  73 + @selenium
  74 + Scenario: render comment form and go to bottom
  75 + Given the following comment
  76 + | article | author | title | body |
  77 + | article to comment | booking | hi | how are you? |
  78 + Given I am on /booking/article-to-comment
  79 + When I follow "Post a comment" within ".post-comment-button"
  80 + Then I should see "Enter your comment" within "div#page-comment-form div.post_comment_box.opened"
  81 + And I should be exactly on /booking/article-to-comment
  82 + And I should be moved to anchor "comment_form"
features/step_definitions/custom_webrat_steps.rb
@@ -10,6 +10,10 @@ Then /^I should be exactly on (.+)$/ do |page_name| @@ -10,6 +10,10 @@ Then /^I should be exactly on (.+)$/ do |page_name|
10 URI.parse(current_url).request_uri.should == path_to(page_name) 10 URI.parse(current_url).request_uri.should == path_to(page_name)
11 end 11 end
12 12
  13 +Then /^I should be moved to anchor "([^\"]+)"$/ do |anchor|
  14 + URI.parse(current_url).fragment.should == anchor
  15 +end
  16 +
13 When /^I select "([^\"]*)"$/ do |value| 17 When /^I select "([^\"]*)"$/ do |value|
14 select(value) 18 select(value)
15 end 19 end
public/designs/themes/base/style.css
@@ -1087,28 +1087,28 @@ hr.pre-posts, hr.sep-posts { @@ -1087,28 +1087,28 @@ hr.pre-posts, hr.sep-posts {
1087 } 1087 }
1088 1088
1089 .comment-from-owner .comment-wrapper-1 { 1089 .comment-from-owner .comment-wrapper-1 {
1090 - background: #cecece url(imgs/comment-owner-bg-N.png) repeat-x; 1090 + background: #fbf7b5 url(/images/comment-owner-bg-N.png) repeat-x;
1091 } 1091 }
1092 .comment-from-owner .comment-wrapper-2 { 1092 .comment-from-owner .comment-wrapper-2 {
1093 - background: url(imgs/comment-owner-bg-S.png) 0% 100% repeat-x; 1093 + background: url(/images/comment-owner-bg-S.png) 0% 100% repeat-x;
1094 } 1094 }
1095 .comment-from-owner .comment-wrapper-3 { 1095 .comment-from-owner .comment-wrapper-3 {
1096 - background: url(imgs/comment-owner-bg-L.png) 100% 0% repeat-y; 1096 + background: url(/images/comment-owner-bg-L.png) 100% 0% repeat-y;
1097 } 1097 }
1098 .comment-from-owner .comment-wrapper-4 { 1098 .comment-from-owner .comment-wrapper-4 {
1099 - background: url(imgs/comment-owner-bg-O.png) 0% 0% repeat-y; 1099 + background: url(/images/comment-owner-bg-O.png) 0% 0% repeat-y;
1100 } 1100 }
1101 .comment-from-owner .comment-wrapper-5 { 1101 .comment-from-owner .comment-wrapper-5 {
1102 - background: url(imgs/comment-owner-bg-SL.png) 100% 100% no-repeat; 1102 + background: url(/images/comment-owner-bg-SL.png) 100% 100% no-repeat;
1103 } 1103 }
1104 .comment-from-owner .comment-wrapper-6 { 1104 .comment-from-owner .comment-wrapper-6 {
1105 - background: url(imgs/comment-owner-bg-SO.png) 0% 100% no-repeat; 1105 + background: url(/images/comment-owner-bg-SO.png) 0% 100% no-repeat;
1106 } 1106 }
1107 .comment-from-owner .comment-wrapper-7 { 1107 .comment-from-owner .comment-wrapper-7 {
1108 - background: url(imgs/comment-owner-bg-NL.png) 100% 0% no-repeat; 1108 + background: url(/images/comment-owner-bg-NL.png) 100% 0% no-repeat;
1109 } 1109 }
1110 .comment-from-owner .comment-wrapper-8 { 1110 .comment-from-owner .comment-wrapper-8 {
1111 - background: url(imgs/comment-owner-bg-NO.png) 0% 0% no-repeat; 1111 + background: url(/images/comment-owner-bg-NO.png) 0% 0% no-repeat;
1112 } 1112 }
1113 1113
1114 .comment-created-at { 1114 .comment-created-at {
public/images/comment-owner-bg-L.png 0 → 100644

188 Bytes

public/images/comment-owner-bg-N.png 0 → 100644

167 Bytes

public/images/comment-owner-bg-NL.png 0 → 100644

255 Bytes

public/images/comment-owner-bg-NO.png 0 → 100644

518 Bytes

public/images/comment-owner-bg-O.png 0 → 100644

198 Bytes

public/images/comment-owner-bg-S.png 0 → 100644

475 Bytes

public/images/comment-owner-bg-SL.png 0 → 100644

259 Bytes

public/images/comment-owner-bg-SO.png 0 → 100644

271 Bytes

public/images/comment-reply-owner-bg.png

308 Bytes | W: | H:

279 Bytes | W: | H:

  • 2-up
  • Swipe
  • Onion skin
public/stylesheets/application.css
@@ -1087,6 +1087,17 @@ a.comment-picture { @@ -1087,6 +1087,17 @@ a.comment-picture {
1087 right: 8px; 1087 right: 8px;
1088 } 1088 }
1089 1089
  1090 +#content .comment-balloon a.button.icon-delete {
  1091 + border: 0;
  1092 + padding-top: 0;
  1093 + padding-bottom: 0;
  1094 + background-color: transparent;
  1095 +}
  1096 +
  1097 +#content .comments .comment-balloon a.button.icon-delete {
  1098 + display: none;
  1099 +}
  1100 +
1090 .msie7 .article-comments-list .comment-balloon { 1101 .msie7 .article-comments-list .comment-balloon {
1091 margin-top: -15px; 1102 margin-top: -15px;
1092 } 1103 }
@@ -1139,7 +1150,7 @@ a.comment-picture { @@ -1139,7 +1150,7 @@ a.comment-picture {
1139 1150
1140 .article-comment .comment-details { 1151 .article-comment .comment-details {
1141 margin: 0px; 1152 margin: 0px;
1142 - padding: 7px 1px 3px 26px; 1153 + padding: 7px 1px 3px 5px;
1143 } 1154 }
1144 1155
1145 #article .comment-reply-link { 1156 #article .comment-reply-link {
@@ -1166,6 +1177,22 @@ a.comment-picture { @@ -1166,6 +1177,22 @@ a.comment-picture {
1166 background: transparent; 1177 background: transparent;
1167 } 1178 }
1168 1179
  1180 +.block #article .post-comment-button a:hover,
  1181 +.block #article .post-comment-button a:visited,
  1182 +.block #article .post-comment-button a {
  1183 + text-decoration: none;
  1184 + font-size: 14px;
  1185 + font-weight: bold;
  1186 + color: #000;
  1187 + -moz-border-radius: 4px;
  1188 + -webkit-border-radius: 4px;
  1189 + border-radius: 4px;
  1190 +}
  1191 +
  1192 +.comment-balloon-content {
  1193 + margin-left: 15px;
  1194 +}
  1195 +
1169 /* * * Comment Replies * * */ 1196 /* * * Comment Replies * * */
1170 1197
1171 .comment-replies .comment-wrapper-1 { 1198 .comment-replies .comment-wrapper-1 {
@@ -1192,7 +1219,7 @@ a.comment-picture { @@ -1192,7 +1219,7 @@ a.comment-picture {
1192 } 1219 }
1193 1220
1194 .comment-replies .comment-from-owner.comment-content { 1221 .comment-replies .comment-from-owner.comment-content {
1195 - background: transparent url(/images/comment-reply-owner-bg.png) left top repeat-x; 1222 + background: transparent url(/images/comment-reply-owner-bg.png) left bottom repeat-x;
1196 } 1223 }
1197 1224
1198 .comment-replies .comment-user-status { 1225 .comment-replies .comment-user-status {
@@ -1213,6 +1240,10 @@ a.comment-picture { @@ -1213,6 +1240,10 @@ a.comment-picture {
1213 padding-right: 7px; 1240 padding-right: 7px;
1214 } 1241 }
1215 1242
  1243 +.comment-replies .comment-text {
  1244 + margin-top: 1px;
  1245 +}
  1246 +
1216 .comment-replies .comment-picture { 1247 .comment-replies .comment-picture {
1217 width: 40px; 1248 width: 40px;
1218 height: 57px; 1249 height: 57px;
@@ -1333,12 +1364,14 @@ a.comment-picture { @@ -1333,12 +1364,14 @@ a.comment-picture {
1333 margin: 10px auto; 1364 margin: 10px auto;
1334 } 1365 }
1335 1366
  1367 +.post-comment-button a,
1336 .post_comment_box h4 { 1368 .post_comment_box h4 {
1337 padding: 1px 20px; 1369 padding: 1px 20px;
1338 margin: 0px; 1370 margin: 0px;
1339 background: #eee; 1371 background: #eee;
1340 } 1372 }
1341 1373
  1374 +.post-comment-button a,
1342 .post_comment_box.closed h4 { 1375 .post_comment_box.closed h4 {
1343 display: inline; 1376 display: inline;
1344 border: 1px solid #888; 1377 border: 1px solid #888;
@@ -1409,6 +1442,11 @@ a.comment-picture { @@ -1409,6 +1442,11 @@ a.comment-picture {
1409 width: 100%; 1442 width: 100%;
1410 } 1443 }
1411 1444
  1445 +#page-comment-form .post_comment_box {
  1446 + text-align: left;
  1447 + padding-left: 0;
  1448 +}
  1449 +
1412 /* * * addThis button * * */ 1450 /* * * addThis button * * */
1413 1451
1414 .msie #addThis { 1452 .msie #addThis {
test/functional/content_viewer_controller_test.rb
@@ -1324,4 +1324,22 @@ class ContentViewerControllerTest &lt; Test::Unit::TestCase @@ -1324,4 +1324,22 @@ class ContentViewerControllerTest &lt; Test::Unit::TestCase
1324 assert_tag :a, :attributes => { :href => "http://" + url}, :content => url.scan(/.{4}/).join('&#x200B;') 1324 assert_tag :a, :attributes => { :href => "http://" + url}, :content => url.scan(/.{4}/).join('&#x200B;')
1325 end 1325 end
1326 1326
  1327 + should 'show a post comment button on top if there are comments' do
  1328 + profile = create_user('testuser').person
  1329 + article = profile.articles.build(:name => 'test')
  1330 + article.save!
  1331 + comment = article.comments.build(:author => profile, :title => 'hi', :body => 'hello')
  1332 + comment.save!
  1333 + get :view_page, :profile => 'testuser', :page => [ 'test' ]
  1334 + assert_tag :tag => 'p', :attributes => { :class => 'post-comment-button' }
  1335 + end
  1336 +
  1337 + should 'not show a post comment button on top if there are no comments' do
  1338 + profile = create_user('testuser').person
  1339 + article = profile.articles.build(:name => 'test')
  1340 + article.save!
  1341 + get :view_page, :profile => 'testuser', :page => [ 'test' ]
  1342 + assert_no_tag :tag => 'p', :attributes => { :class => 'post-comment-button' }
  1343 + end
  1344 +
1327 end 1345 end