From f9ab314ec4b6d0e70eb2514b37b236bae441767c Mon Sep 17 00:00:00 2001 From: Luiz Fernando de Freitas Matos Date: Mon, 25 Nov 2013 15:46:30 -0200 Subject: [PATCH] comment_order_improvement: Add an option to order comments by the newest or oldest comments. --- app/controllers/public/content_viewer_controller.rb | 9 +++++++++ app/views/content_viewer/view_page.rhtml | 10 ++++++++++ features/comment.feature | 38 ++++++++++++++++++++++++++++++++++++++ public/designs/themes/base/style.css | 5 +++++ public/javascripts/application.js | 2 +- public/javascripts/comment_order.js | 21 +++++++++++++++++++++ 6 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 public/javascripts/comment_order.js diff --git a/app/controllers/public/content_viewer_controller.rb b/app/controllers/public/content_viewer_controller.rb index 40c8f9e..6ac5a83 100644 --- a/app/controllers/public/content_viewer_controller.rb +++ b/app/controllers/public/content_viewer_controller.rb @@ -111,6 +111,15 @@ class ContentViewerController < ApplicationController @comments = @plugins.filter(:unavailable_comments, @comments) @comments_count = @comments.count @comments = @comments.without_reply.paginate(:per_page => per_page, :page => params[:comment_page] ) + @comment_order = params[:comment_order].nil? ? 'oldest' : params[:comment_order] + + if request.xhr? and params[:comment_order] + if @comment_order == 'newest' + @comments = @comments.reverse + end + + return render :partial => 'comment/comment', :collection => @comments + end if params[:slideshow] render :action => 'slideshow', :layout => 'slideshow' diff --git a/app/views/content_viewer/view_page.rhtml b/app/views/content_viewer/view_page.rhtml index a64a1d5..9a36ba6 100644 --- a/app/views/content_viewer/view_page.rhtml +++ b/app/views/content_viewer/view_page.rhtml @@ -84,6 +84,16 @@ <%= link_to(_('Post a comment'), '#', :class => 'display-comment-form', :id => 'top-post-comment-button', :onclick => "jQuery('#page-comment-form .display-comment-form').first().click();") %> <% end %> + <% if @page.accept_comments? and @comments.count > 1 %> + <%= hidden_field_tag("page_url", url_for(:controller=>'content_viewer', :action=>'view_page', :profile=>profile.identifier)) %> + <%= javascript_include_tag "comment_order.js" %> +
+ <% form_tag({:controller=>'content_viewer' , :action=>'view_page'}, {:method=>'get', :id=>"form_order"}) do %> + <%= select_tag 'comment_order', options_for_select({_('Oldest first')=>'oldest', _('Newest first')=>'newest'}, @comment_order) %> + <% end %> +
+ <% end %> +