Commit f9ab314ec4b6d0e70eb2514b37b236bae441767c

Authored by Luiz Fernando de Freitas Matos
Committed by Daniela Feitosa
1 parent 79818886

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>
app/controllers/public/content_viewer_controller.rb
... ... @@ -111,6 +111,15 @@ class ContentViewerController &lt; ApplicationController
111 111 @comments = @plugins.filter(:unavailable_comments, @comments)
112 112 @comments_count = @comments.count
113 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 124 if params[:slideshow]
116 125 render :action => 'slideshow', :layout => 'slideshow'
... ...
app/views/content_viewer/view_page.rhtml
... ... @@ -84,6 +84,16 @@
84 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 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 97 <ul class="article-comments-list">
88 98 <%= render :partial => 'comment/comment', :collection => @comments %>
89 99 <%= pagination_links @comments, :param_name => 'comment_page' %>
... ...
features/comment.feature
... ... @@ -97,3 +97,41 @@ Feature: comment
97 97 Given I am on /booking/article-to-comment
98 98 And I follow "Post a comment"
99 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 138 \ No newline at end of file
... ...
public/designs/themes/base/style.css
... ... @@ -1275,6 +1275,11 @@ hr.pre-posts, hr.sep-posts {
1275 1275 padding-right: 9px;
1276 1276 }
1277 1277  
  1278 +.comment-order {
  1279 + float: right;
  1280 + display: block;
  1281 +}
  1282 +
1278 1283 .comment-from-owner .comment-created-at {
1279 1284 color: #333;
1280 1285 }
... ...
public/javascripts/application.js
... ... @@ -1101,4 +1101,4 @@ jQuery(document).ready(function(){
1101 1101 jQuery("#article_has_terms_of_use").click(function(){
1102 1102 showHideTermsOfUse();
1103 1103 });
1104   -});
1105 1104 \ No newline at end of file
  1105 +});
... ...
public/javascripts/comment_order.js 0 → 100644
... ... @@ -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 22 \ No newline at end of file
... ...