comments: put search form on same page as search results.
* Remove the /comment/search page. Instead put the comment search form on the same page as the search results, so you don't have to go back and forth to update your search. * Add an "Edited?" search option, for finding comments that have been edited. * Add options for sorting by oldest comments and lowest scoring comments.
This commit is contained in:
@@ -22,9 +22,6 @@ class CommentsController < ApplicationController
|
||||
end
|
||||
end
|
||||
|
||||
def search
|
||||
end
|
||||
|
||||
def new
|
||||
if params[:id]
|
||||
quoted_comment = Comment.find(params[:id])
|
||||
|
||||
@@ -35,13 +35,29 @@ class Comment < ApplicationRecord
|
||||
def search(params, current_user)
|
||||
q = search_attributes(params, [:id, :created_at, :updated_at, :is_deleted, :is_sticky, :do_not_bump_post, :body, :score, :post, :creator, :updater], current_user: current_user)
|
||||
|
||||
if params[:is_edited].to_s.truthy?
|
||||
q = q.where("comments.updated_at - comments.created_at > ?", 5.minutes.iso8601)
|
||||
elsif params[:is_edited].to_s.falsy?
|
||||
q = q.where("comments.updated_at - comments.created_at <= ?", 5.minutes.iso8601)
|
||||
end
|
||||
|
||||
case params[:order]
|
||||
when "id_asc"
|
||||
q = q.order("comments.id ASC")
|
||||
when "created_at", "created_at_desc"
|
||||
q = q.order("comments.created_at DESC, comments.id DESC")
|
||||
when "created_at_asc"
|
||||
q = q.order("comments.created_at ASC, comments.id ASC")
|
||||
when "post_id", "post_id_desc"
|
||||
q = q.order("comments.post_id DESC, comments.id DESC")
|
||||
when "score", "score_desc"
|
||||
q = q.order("comments.score DESC, comments.id DESC")
|
||||
when "score_asc"
|
||||
q = q.order("comments.score ASC, comments.id ASC")
|
||||
when "updated_at", "updated_at_desc"
|
||||
q = q.order("comments.updated_at DESC")
|
||||
q = q.order("comments.updated_at DESC, comments.id DESC")
|
||||
when "updated_at_asc"
|
||||
q = q.order("comments.updated_at ASC, comments.id ASC")
|
||||
else
|
||||
q = q.apply_default_order(params)
|
||||
end
|
||||
|
||||
@@ -1,5 +1,19 @@
|
||||
<div id="p-index-by-comment" class="comments-for-post">
|
||||
<div class="list-of-comments list-of-messages">
|
||||
<%= search_form_for(comments_path) do |f| %>
|
||||
<%= hidden_field_tag "group_by", "comment", :id => "group_by_full" %>
|
||||
<%= f.input :creator_name, label: "Commenter", input_html: { value: params[:search][:creator_name], "data-autocomplete": "user" } %>
|
||||
<%= f.input :body_matches, label: "Text", input_html: { value: params[:search][:body_matches] } %>
|
||||
<%= f.input :post_tags_match, label: "Tags", input_html: { value: params[:search][:post_tags_match], "data-autocomplete": "tag-query" } %>
|
||||
<%= f.input :score, input_html: { value: params[:search][:score] } %>
|
||||
<%= f.input :is_edited, label: "Edited?", collection: %w[Yes No], include_blank: true, selected: params[:search][:is_edited] %>
|
||||
<%= f.input :is_deleted, label: "Deleted?", collection: %w[Yes No], include_blank: true, selected: params[:search][:is_deleted] %>
|
||||
<%= f.input :is_sticky, label: "Stickied?", collection: %w[Yes No], include_blank: true, selected: params[:search][:is_sticky] %>
|
||||
<%= f.input :do_not_bump_post, label: "Bumped?", collection: [["Yes", false], ["No", true]], include_blank: true, selected: params[:search][:do_not_bump_post] %>
|
||||
<%= f.input :order, collection: [["Newest", "id_desc"], ["Oldest", "id_asc"], ["Updated", "updated_at_desc"], ["Score (highest)", "score_desc"], ["Score (lowest)", "score_asc"]], include_blank: true, selected: params[:search][:order] %>
|
||||
<%= f.submit "Search" %>
|
||||
<% end %>
|
||||
|
||||
<% dtext_data = DText.preprocess(@comments.map(&:body)) %>
|
||||
|
||||
<% @comments.each do |comment| %>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<% content_for(:secondary_links) do %>
|
||||
<%= quick_search_form_for(:body_matches, comments_path, "comments") %>
|
||||
<%= subnav_link_to "Listing", comments_path(:group_by => "post") %>
|
||||
<%= subnav_link_to "Search", search_comments_path %>
|
||||
<%= subnav_link_to "Search", comments_path(group_by: "comment") %>
|
||||
<% if policy(CommentVote).can_see_votes? %>
|
||||
<%= subnav_link_to "Votes", comment_votes_path %>
|
||||
<% end %>
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
<div id="c-comments">
|
||||
<div id="a-search">
|
||||
<h1>Search Comments</h1>
|
||||
|
||||
<%= search_form_for(comments_path) do |f| %>
|
||||
<%= hidden_field_tag "group_by", "comment", :id => "group_by_full" %>
|
||||
<%= f.input :creator_name, label: "Commenter", input_html: { data: { autocomplete: "user" } } %>
|
||||
<%= f.input :body_matches, label: "Text" %>
|
||||
<%= f.input :post_tags_match, label: "Tags", input_html: { data: { autocomplete: "tag-query" } } %>
|
||||
<%= f.input :score %>
|
||||
<%= f.input :is_deleted, label: "Deleted?", collection: [["Yes", true], ["No", false]] %>
|
||||
<%= f.input :is_sticky, label: "Sticky?", collection: [["Yes", true], ["No", false]] %>
|
||||
<%= f.input :do_not_bump_post, label: "Bumping?", collection: [["Yes", false], ["No", true]] %>
|
||||
<%= f.input :order, collection: [%w(Created id_desc), %w(Updated updated_at_desc), %w(Score score_desc), %w(Post post_id_desc)] %>
|
||||
<%= f.submit "Search" %>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<%= render "secondary_links" %>
|
||||
@@ -83,7 +83,7 @@
|
||||
<ul>
|
||||
<li><h2>Comments</h2></li>
|
||||
<li><%= link_to("Comments", comments_path) %></li>
|
||||
<li><%= link_to("Search", search_comments_path) %></li>
|
||||
<li><%= link_to("Search", comments_path(group_by: "comment")) %></li>
|
||||
<li><%= link_to("Votes", comment_votes_path) %></li>
|
||||
<li><%= link_to("RSS", comments_path(:atom)) %></li>
|
||||
<li><%= link_to_wiki "Help", "help:comments" %></li>
|
||||
|
||||
@@ -85,7 +85,7 @@ Rails.application.routes.draw do
|
||||
get "/", action: :index
|
||||
end
|
||||
collection do
|
||||
get :search
|
||||
get :search, to: redirect("/comments?group_by=comment")
|
||||
end
|
||||
member do
|
||||
post :undelete
|
||||
|
||||
@@ -62,7 +62,7 @@ class CommentsControllerTest < ActionDispatch::IntegrationTest
|
||||
|
||||
context "searching" do
|
||||
setup do
|
||||
@user_comment = create(:comment, post: @post, score: 10, do_not_bump_post: true, creator: @user)
|
||||
@user_comment = create(:comment, created_at: 10.minutes.ago, updated_at: 3.minutes.ago, post: @post, score: 10, do_not_bump_post: true, creator: @user)
|
||||
@mod_comment = create(:comment, post: build(:post, tag_string: "touhou"), body: "blah", is_sticky: true, creator: @mod)
|
||||
@deleted_comment = create(:comment, creator: create(:user, name: "deleted"), is_deleted: true, is_sticky: true, do_not_bump_post: true, score: 10, body: "blah")
|
||||
end
|
||||
@@ -76,6 +76,8 @@ class CommentsControllerTest < ActionDispatch::IntegrationTest
|
||||
should respond_to_search(is_sticky: "true").with { @mod_comment }
|
||||
should respond_to_search(is_deleted: "true").with { @deleted_comment }
|
||||
should respond_to_search(do_not_bump_post: "true").with { @user_comment }
|
||||
should respond_to_search(is_edited: "true").with { @user_comment }
|
||||
should respond_to_search(is_edited: "false").with { [@deleted_comment, @mod_comment] }
|
||||
should respond_to_search(creator_name: "deleted").with { [] }
|
||||
end
|
||||
|
||||
@@ -88,6 +90,8 @@ class CommentsControllerTest < ActionDispatch::IntegrationTest
|
||||
should respond_to_search(is_sticky: "true").with { @mod_comment }
|
||||
should respond_to_search(is_deleted: "true").with { @deleted_comment }
|
||||
should respond_to_search(do_not_bump_post: "true").with { @user_comment }
|
||||
should respond_to_search(is_edited: "true").with { @user_comment }
|
||||
should respond_to_search(is_edited: "false").with { [@deleted_comment, @mod_comment] }
|
||||
should respond_to_search(creator_name: "deleted").with { @deleted_comment }
|
||||
end
|
||||
|
||||
@@ -100,6 +104,8 @@ class CommentsControllerTest < ActionDispatch::IntegrationTest
|
||||
should respond_to_search(is_sticky: "true").with { [@deleted_comment, @mod_comment] }
|
||||
should respond_to_search(is_deleted: "true").with { @deleted_comment }
|
||||
should respond_to_search(do_not_bump_post: "true").with { [@deleted_comment, @user_comment] }
|
||||
should respond_to_search(is_edited: "true").with { @user_comment }
|
||||
should respond_to_search(is_edited: "false").with { [@deleted_comment, @mod_comment] }
|
||||
should respond_to_search(creator_name: "deleted").with { @deleted_comment }
|
||||
end
|
||||
|
||||
@@ -131,9 +137,8 @@ class CommentsControllerTest < ActionDispatch::IntegrationTest
|
||||
|
||||
context "search action" do
|
||||
should "render" do
|
||||
@comment = create(:comment, post: @post)
|
||||
get search_comments_path
|
||||
assert_response :success
|
||||
assert_redirected_to comments_path(group_by: "comment")
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user