aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGareth Rees <gareth@mysociety.org>2014-12-08 11:50:46 +0000
committerGareth Rees <gareth@mysociety.org>2014-12-08 11:50:46 +0000
commit5ae9efaf24f13023d77b6abd9eac2b94e56d9985 (patch)
tree66bc818595b3d2f89b95c8fa9f7586794eef5a6f
parenta915c17bc1ce3b36eddc17294859b84212782112 (diff)
parentbd3ed955718576a27a7c9194946d9721fde4c4a8 (diff)
Merge branch '1666-related-requests-search' into rails-3-develop
-rw-r--r--app/assets/stylesheets/responsive/_new_request_layout.scss4
-rw-r--r--app/controllers/request_controller.rb16
-rw-r--r--app/views/request/_search_ahead.html.erb30
-rw-r--r--app/views/request/new.html.erb32
-rw-r--r--spec/controllers/request_controller_spec.rb17
5 files changed, 74 insertions, 25 deletions
diff --git a/app/assets/stylesheets/responsive/_new_request_layout.scss b/app/assets/stylesheets/responsive/_new_request_layout.scss
index a2ab23060..a8b24e1b1 100644
--- a/app/assets/stylesheets/responsive/_new_request_layout.scss
+++ b/app/assets/stylesheets/responsive/_new_request_layout.scss
@@ -58,6 +58,10 @@
}
}
+#typeahead_response .close-button {
+ float: right;
+}
+
/* Advice sits on right hand side */
#request_advice {
diff --git a/app/controllers/request_controller.rb b/app/controllers/request_controller.rb
index 9e2c291dc..346aaf384 100644
--- a/app/controllers/request_controller.rb
+++ b/app/controllers/request_controller.rb
@@ -900,10 +900,18 @@ class RequestController < ApplicationController
# Type ahead search
def search_typeahead
- # Since acts_as_xapian doesn't support the Partial match flag, we work around it
- # by making the last work a wildcard, which is quite the same
- query = params[:q]
- @xapian_requests = perform_search_typeahead(query, InfoRequestEvent)
+ # Since acts_as_xapian doesn't support the Partial match flag, we work
+ # around it by making the last word a wildcard, which is quite the same
+ @query = ''
+
+ if params.key?(:requested_from)
+ @query << "requested_from:#{ params[:requested_from] } "
+ end
+
+ @per_page = (params.fetch(:per_page) { 25 }).to_i
+
+ @query << params[:q]
+ @xapian_requests = perform_search_typeahead(@query, InfoRequestEvent, @per_page)
render :partial => "request/search_ahead"
end
diff --git a/app/views/request/_search_ahead.html.erb b/app/views/request/_search_ahead.html.erb
index 1e65a5458..4fbe06ebc 100644
--- a/app/views/request/_search_ahead.html.erb
+++ b/app/views/request/_search_ahead.html.erb
@@ -1,14 +1,20 @@
-<div id="request_search_ahead_results">
- <% if !@xapian_requests.nil? %>
- <% if @xapian_requests.results.size > 0 %>
+<% unless @xapian_requests.nil? %>
+ <div id="request_search_ahead_results">
+ <% if @xapian_requests.results.any? %>
+ <span class="close-button">X</span>
<h3><%= _("Possibly related requests:") %></h3>
- <% end %>
- <% for result in @xapian_requests.results %>
- <%= render :partial => 'request/request_listing_short_via_event', :locals => { :event => result[:model], :info_request => result[:model].info_request } %>
- <% end %>
- <p>
- <a id="body-site-search-link"><%= _("Or search in their website for this information.") %></a>
- </p>
- <% end %>
-</div>
+ <% @xapian_requests.results.each do |result| %>
+ <%= render :partial => 'request/request_listing_short_via_event',
+ :locals => { :event => result[:model],
+ :info_request => result[:model].info_request } %>
+ <% end %>
+
+ <p>
+ <a id="body-site-search-link">
+ <%= _("Search in their website for this information &rarr;") %>
+ </a>
+ </p>
+ <% end %>
+ </div>
+<% end %>
diff --git a/app/views/request/new.html.erb b/app/views/request/new.html.erb
index 7f1332464..51224129e 100644
--- a/app/views/request/new.html.erb
+++ b/app/views/request/new.html.erb
@@ -1,19 +1,33 @@
<% unless @batch %>
<script type="text/javascript">
$(document).ready(function(){
- // Avoid triggering too often (on each keystroke) by using the debounce jQuery plugin:
+ // Avoid triggering too often (on each keystroke) by using the
+ // debounce jQuery plugin:
// http://benalman.com/projects/jquery-throttle-debounce-plugin/
$("#typeahead_search").keypress($.debounce( 300, function() {
- $("#typeahead_response").load("<%=search_ahead_url%>?q="+encodeURI(this.value), function() {
- // When following links in typeahead results, open new tab/window
- $("#typeahead_response a").attr("target","_blank");
-
- // Update the public body site search link
- $("#body-site-search-link").attr("href", "http://www.google.com/#q="+encodeURI($("#typeahead_search").val())+
- "+site:<%= @info_request.public_body.calculated_home_page %>");
+ if ( $('#request_search_ahead_results').text().trim().length > 0) {
+ $('#typeahead_response').slideUp('fast');
+ }
+
+ $("#typeahead_response").load("<%= search_ahead_url %>?q="+encodeURI(this.value)+
+ "&requested_from=<%= @info_request.public_body.url_name %>"+
+ "&per_page=3", function() {
+
+ if ( $('#request_search_ahead_results').text().trim().length > 0) {
+ $('#typeahead_response').hide().slideDown('fast');
+
+ // When following links in typeahead results, open new
+ // tab/window
+ $("#typeahead_response a").attr("target","_blank");
+
+ // Update the public body site search link
+ $("#body-site-search-link").attr("href", "http://www.google.com/#q="+encodeURI($("#typeahead_search").val())+
+ "+site:<%= @info_request.public_body.calculated_home_page %>");
+
+ $('.close-button').click(function() { $(this).parent().hide() });
+ }
});
}));
-
});
</script>
<% end %>
diff --git a/spec/controllers/request_controller_spec.rb b/spec/controllers/request_controller_spec.rb
index 6c0f4573e..4d0070470 100644
--- a/spec/controllers/request_controller_spec.rb
+++ b/spec/controllers/request_controller_spec.rb
@@ -2380,6 +2380,23 @@ describe RequestController, "when doing type ahead searches" do
get :search_typeahead, :q => "dog -chicken"
assigns[:xapian_requests].results.size.should == 1
end
+
+ it 'can filter search results by public body' do
+ get :search_typeahead, :q => 'boring', :requested_from => 'dfh'
+ expect(assigns[:query]).to eq('requested_from:dfh boring')
+ end
+
+ it 'defaults to 25 results per page' do
+ get :search_typeahead, :q => 'boring'
+ expect(assigns[:per_page]).to eq(25)
+ end
+
+ it 'can limit the number of searches returned' do
+ get :search_typeahead, :q => 'boring', :per_page => '1'
+ expect(assigns[:per_page]).to eq(1)
+ expect(assigns[:xapian_requests].results.size).to eq(1)
+ end
+
end
describe RequestController, "when showing similar requests" do