Commit f9ab314ec4b6d0e70eb2514b37b236bae441767c
Committed by
Daniela Feitosa
1 parent
79818886
Exists in
master
and in
29 other branches
comment_order_improvement: Add an option to order comments by the newest or oldest comments.
(ActionItem2911) Signed-off-by: Luiz Matos <luizff.matos@gmail.com> Signed-off-by: Marcos Ramos <ms.ramos@outlook.com> Signed-off-by: Gabriela Navarro <navarro1703@gmail.com> Signed-off-by: David Carlos <ddavidcarlos1392@gmail.com> Signed-off-by: Fabio Teixeira <fabio1079@gmail.com> Signed-off-by: Matheus Faria <matheus.sousa.faria@gmail.com>
Showing
6 changed files
with
84 additions
and
1 deletions
Show diff stats
app/controllers/public/content_viewer_controller.rb
| @@ -111,6 +111,15 @@ class ContentViewerController < ApplicationController | @@ -111,6 +111,15 @@ class ContentViewerController < ApplicationController | ||
| 111 | @comments = @plugins.filter(:unavailable_comments, @comments) | 111 | @comments = @plugins.filter(:unavailable_comments, @comments) |
| 112 | @comments_count = @comments.count | 112 | @comments_count = @comments.count |
| 113 | @comments = @comments.without_reply.paginate(:per_page => per_page, :page => params[:comment_page] ) | 113 | @comments = @comments.without_reply.paginate(:per_page => per_page, :page => params[:comment_page] ) |
| 114 | + @comment_order = params[:comment_order].nil? ? 'oldest' : params[:comment_order] | ||
| 115 | + | ||
| 116 | + if request.xhr? and params[:comment_order] | ||
| 117 | + if @comment_order == 'newest' | ||
| 118 | + @comments = @comments.reverse | ||
| 119 | + end | ||
| 120 | + | ||
| 121 | + return render :partial => 'comment/comment', :collection => @comments | ||
| 122 | + end | ||
| 114 | 123 | ||
| 115 | if params[:slideshow] | 124 | if params[:slideshow] |
| 116 | render :action => 'slideshow', :layout => 'slideshow' | 125 | render :action => 'slideshow', :layout => 'slideshow' |
app/views/content_viewer/view_page.rhtml
| @@ -84,6 +84,16 @@ | @@ -84,6 +84,16 @@ | ||
| 84 | <%= link_to(_('Post a comment'), '#', :class => 'display-comment-form', :id => 'top-post-comment-button', :onclick => "jQuery('#page-comment-form .display-comment-form').first().click();") %> | 84 | <%= link_to(_('Post a comment'), '#', :class => 'display-comment-form', :id => 'top-post-comment-button', :onclick => "jQuery('#page-comment-form .display-comment-form').first().click();") %> |
| 85 | <% end %> | 85 | <% end %> |
| 86 | 86 | ||
| 87 | + <% if @page.accept_comments? and @comments.count > 1 %> | ||
| 88 | + <%= hidden_field_tag("page_url", url_for(:controller=>'content_viewer', :action=>'view_page', :profile=>profile.identifier)) %> | ||
| 89 | + <%= javascript_include_tag "comment_order.js" %> | ||
| 90 | + <div class="comment-order"> | ||
| 91 | + <% form_tag({:controller=>'content_viewer' , :action=>'view_page'}, {:method=>'get', :id=>"form_order"}) do %> | ||
| 92 | + <%= select_tag 'comment_order', options_for_select({_('Oldest first')=>'oldest', _('Newest first')=>'newest'}, @comment_order) %> | ||
| 93 | + <% end %> | ||
| 94 | + </div> | ||
| 95 | + <% end %> | ||
| 96 | + | ||
| 87 | <ul class="article-comments-list"> | 97 | <ul class="article-comments-list"> |
| 88 | <%= render :partial => 'comment/comment', :collection => @comments %> | 98 | <%= render :partial => 'comment/comment', :collection => @comments %> |
| 89 | <%= pagination_links @comments, :param_name => 'comment_page' %> | 99 | <%= pagination_links @comments, :param_name => 'comment_page' %> |
features/comment.feature
| @@ -97,3 +97,41 @@ Feature: comment | @@ -97,3 +97,41 @@ Feature: comment | ||
| 97 | Given I am on /booking/article-to-comment | 97 | Given I am on /booking/article-to-comment |
| 98 | And I follow "Post a comment" | 98 | And I follow "Post a comment" |
| 99 | Then "Post a comment" should not be visible within "#article" | 99 | Then "Post a comment" should not be visible within "#article" |
| 100 | + | ||
| 101 | + @selenium | ||
| 102 | + Scenario: the newest post from a forum should be displayed first. | ||
| 103 | + Given the following users | ||
| 104 | + | login | name | | ||
| 105 | + | joaosilva | Joao Silva | | ||
| 106 | + And the following forums | ||
| 107 | + | owner | name | | ||
| 108 | + | joaosilva | Forum | | ||
| 109 | + And the following articles | ||
| 110 | + | owner | name | parent | | ||
| 111 | + | joaosilva | Post one | Forum | | ||
| 112 | + And the following comments | ||
| 113 | + | article | author | title | body | | ||
| 114 | + | Post one | joaosilva | Hi all | Hi all | | ||
| 115 | + | Post one | joaosilva | Hello | Hello | | ||
| 116 | + When I go to /joaosilva/forum/post-one | ||
| 117 | + And I select "Newest first" from "comment_order" within ".comment-order" | ||
| 118 | + Then I should see "Hello" within ".article-comment" | ||
| 119 | + | ||
| 120 | + @selenium | ||
| 121 | + Scenario: the oldest post from a forum should be displayed first. | ||
| 122 | + Given the following users | ||
| 123 | + | login | name | | ||
| 124 | + | joaosilva | Joao Silva | | ||
| 125 | + And the following forums | ||
| 126 | + | owner | name | | ||
| 127 | + | joaosilva | Forum | | ||
| 128 | + And the following articles | ||
| 129 | + | owner | name | parent | | ||
| 130 | + | joaosilva | Post one | Forum | | ||
| 131 | + And the following comments | ||
| 132 | + | article | author | title | body | | ||
| 133 | + | Post one | joaosilva | Hi all | Hi all | | ||
| 134 | + | Post one | joaosilva | Hello | Hello | | ||
| 135 | + When I go to /joaosilva/forum/post-one | ||
| 136 | + And I select "Oldest first" from "comment_order" within ".comment-order" | ||
| 137 | + Then I should see "Hi all" within ".article-comment" | ||
| 100 | \ No newline at end of file | 138 | \ No newline at end of file |
public/designs/themes/base/style.css
| @@ -1275,6 +1275,11 @@ hr.pre-posts, hr.sep-posts { | @@ -1275,6 +1275,11 @@ hr.pre-posts, hr.sep-posts { | ||
| 1275 | padding-right: 9px; | 1275 | padding-right: 9px; |
| 1276 | } | 1276 | } |
| 1277 | 1277 | ||
| 1278 | +.comment-order { | ||
| 1279 | + float: right; | ||
| 1280 | + display: block; | ||
| 1281 | +} | ||
| 1282 | + | ||
| 1278 | .comment-from-owner .comment-created-at { | 1283 | .comment-from-owner .comment-created-at { |
| 1279 | color: #333; | 1284 | color: #333; |
| 1280 | } | 1285 | } |
public/javascripts/application.js
| @@ -1101,4 +1101,4 @@ jQuery(document).ready(function(){ | @@ -1101,4 +1101,4 @@ jQuery(document).ready(function(){ | ||
| 1101 | jQuery("#article_has_terms_of_use").click(function(){ | 1101 | jQuery("#article_has_terms_of_use").click(function(){ |
| 1102 | showHideTermsOfUse(); | 1102 | showHideTermsOfUse(); |
| 1103 | }); | 1103 | }); |
| 1104 | -}); | ||
| 1105 | \ No newline at end of file | 1104 | \ No newline at end of file |
| 1105 | +}); |
| @@ -0,0 +1,21 @@ | @@ -0,0 +1,21 @@ | ||
| 1 | +function send_order(order, url) { | ||
| 2 | + open_loading(DEFAULT_LOADING_MESSAGE); | ||
| 3 | + | ||
| 4 | + jQuery.ajax({ | ||
| 5 | + url:url, | ||
| 6 | + data: {"comment_order":order}, | ||
| 7 | + success: function(response) { | ||
| 8 | + close_loading(); | ||
| 9 | + jQuery(".article-comments-list").html(response); | ||
| 10 | + }, | ||
| 11 | + error: function() { close_loading() } | ||
| 12 | + }); | ||
| 13 | +} | ||
| 14 | + | ||
| 15 | + | ||
| 16 | +jQuery(document).ready(function(){ | ||
| 17 | + jQuery("#comment_order").change(function(){ | ||
| 18 | + var url = jQuery("#page_url").val(); | ||
| 19 | + send_order(this.value, url); | ||
| 20 | + }); | ||
| 21 | +}); | ||
| 0 | \ No newline at end of file | 22 | \ No newline at end of file |