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 |