Commit 145438557bcbab5d7b1759be2ab27535d530be73
Committed by
Daniela Feitosa
1 parent
ffb48135
Exists in
master
and in
29 other branches
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)
Showing
16 changed files
with
92 additions
and
12 deletions
Show diff stats
app/views/content_viewer/_comment.rhtml
... | ... | @@ -24,7 +24,7 @@ |
24 | 24 | <% comment_balloon do %> |
25 | 25 | <% if logged_in? && (user == @page.profile || user == comment.author || user.has_permission?(:moderate_comments, @page.profile)) %> |
26 | 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 | 28 | <% end %> |
29 | 29 | <% end %> |
30 | 30 | ... | ... |
app/views/content_viewer/view_page.rhtml
... | ... | @@ -125,10 +125,19 @@ |
125 | 125 | <h3 <%= 'class="no-comments-yet"' if @comments.size == 0 %>> |
126 | 126 | <%= number_of_comments(@page) %> |
127 | 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 | 131 | <ul class="article-comments-list"> |
129 | 132 | <%= render :partial => 'comment', :collection => @comments %> |
130 | 133 | </ul> |
131 | 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 | 141 | <% end %> |
133 | 142 | </div><!-- end class="comments" --> |
134 | 143 | ... | ... |
features/comment.feature
... | ... | @@ -67,4 +67,15 @@ Feature: comment |
67 | 67 | And I fill in "Enter your comment" with "Hey ho, let's go!" |
68 | 68 | When I press "Post comment" |
69 | 69 | Then the "value.Post comment" button should not be enabled |
70 | - And I should see "Hey ho, let's go" | |
71 | 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 | 10 | URI.parse(current_url).request_uri.should == path_to(page_name) |
11 | 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 | 17 | When /^I select "([^\"]*)"$/ do |value| |
14 | 18 | select(value) |
15 | 19 | end | ... | ... |
public/designs/themes/base/style.css
... | ... | @@ -1087,28 +1087,28 @@ hr.pre-posts, hr.sep-posts { |
1087 | 1087 | } |
1088 | 1088 | |
1089 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 1114 | .comment-created-at { | ... | ... |
188 Bytes
167 Bytes
255 Bytes
518 Bytes
198 Bytes
475 Bytes
259 Bytes
271 Bytes
public/images/comment-reply-owner-bg.png
public/stylesheets/application.css
... | ... | @@ -1087,6 +1087,17 @@ a.comment-picture { |
1087 | 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 | 1101 | .msie7 .article-comments-list .comment-balloon { |
1091 | 1102 | margin-top: -15px; |
1092 | 1103 | } |
... | ... | @@ -1139,7 +1150,7 @@ a.comment-picture { |
1139 | 1150 | |
1140 | 1151 | .article-comment .comment-details { |
1141 | 1152 | margin: 0px; |
1142 | - padding: 7px 1px 3px 26px; | |
1153 | + padding: 7px 1px 3px 5px; | |
1143 | 1154 | } |
1144 | 1155 | |
1145 | 1156 | #article .comment-reply-link { |
... | ... | @@ -1166,6 +1177,22 @@ a.comment-picture { |
1166 | 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 | 1196 | /* * * Comment Replies * * */ |
1170 | 1197 | |
1171 | 1198 | .comment-replies .comment-wrapper-1 { |
... | ... | @@ -1192,7 +1219,7 @@ a.comment-picture { |
1192 | 1219 | } |
1193 | 1220 | |
1194 | 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 | 1225 | .comment-replies .comment-user-status { |
... | ... | @@ -1213,6 +1240,10 @@ a.comment-picture { |
1213 | 1240 | padding-right: 7px; |
1214 | 1241 | } |
1215 | 1242 | |
1243 | +.comment-replies .comment-text { | |
1244 | + margin-top: 1px; | |
1245 | +} | |
1246 | + | |
1216 | 1247 | .comment-replies .comment-picture { |
1217 | 1248 | width: 40px; |
1218 | 1249 | height: 57px; |
... | ... | @@ -1333,12 +1364,14 @@ a.comment-picture { |
1333 | 1364 | margin: 10px auto; |
1334 | 1365 | } |
1335 | 1366 | |
1367 | +.post-comment-button a, | |
1336 | 1368 | .post_comment_box h4 { |
1337 | 1369 | padding: 1px 20px; |
1338 | 1370 | margin: 0px; |
1339 | 1371 | background: #eee; |
1340 | 1372 | } |
1341 | 1373 | |
1374 | +.post-comment-button a, | |
1342 | 1375 | .post_comment_box.closed h4 { |
1343 | 1376 | display: inline; |
1344 | 1377 | border: 1px solid #888; |
... | ... | @@ -1409,6 +1442,11 @@ a.comment-picture { |
1409 | 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 | 1450 | /* * * addThis button * * */ |
1413 | 1451 | |
1414 | 1452 | .msie #addThis { | ... | ... |
test/functional/content_viewer_controller_test.rb
... | ... | @@ -1324,4 +1324,22 @@ class ContentViewerControllerTest < Test::Unit::TestCase |
1324 | 1324 | assert_tag :a, :attributes => { :href => "http://" + url}, :content => url.scan(/.{4}/).join('​') |
1325 | 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 | 1345 | end | ... | ... |