diff --git a/plugins/elasticsearch/controllers/elasticsearch_plugin_controller.rb b/plugins/elasticsearch/controllers/elasticsearch_plugin_controller.rb index e367e10..25f83e7 100644 --- a/plugins/elasticsearch/controllers/elasticsearch_plugin_controller.rb +++ b/plugins/elasticsearch/controllers/elasticsearch_plugin_controller.rb @@ -7,8 +7,7 @@ class ElasticsearchPluginController < ApplicationController helper ElasticsearchPluginHelper def index - search() - render :action => 'search' + search end def search @@ -16,6 +15,11 @@ class ElasticsearchPluginController < ApplicationController define_sort_types define_categories define_results + respond_to do |format| + format.html { render :action => 'search' } + format.js + params["format"] = "" + end end def define_results diff --git a/plugins/elasticsearch/public/javascripts/categories.js b/plugins/elasticsearch/public/javascripts/categories.js index 6cad80e..62a82d1 100644 --- a/plugins/elasticsearch/public/javascripts/categories.js +++ b/plugins/elasticsearch/public/javascripts/categories.js @@ -4,14 +4,21 @@ var main = function() { var url = window.location.href; var indexOfCategories; - url = url.replace(/&categories.*/g, ""); - url += "&categories="; - $(".categories ul li input[checked]").map(function(idx, element) { categories.push(element.value); }); $('.categories ul li input[type=checkbox]').on('click', function(){ + var dataParams = {}; + + url = url.replace(/.*\?/, ""); + var params = url.split('&'); + console.log("Dataparams: ", params); + params.map(function(param) { + var item = param.split('='); + dataParams[item[0]] = item[1]; + }); + var idx = categories.indexOf(this.value); if (idx == -1) { categories.push(this.value); @@ -19,8 +26,13 @@ var main = function() { categories.splice(idx, 1); } - url += categories.join(","); - window.location.href = url; + dataParams['categories'] = categories.join(",") + + $.ajax({ + method: "GET", + url: "/search?format=js", + data: dataParams + }); }); }; diff --git a/plugins/elasticsearch/public/style.css b/plugins/elasticsearch/public/style.css index 900de26..47eeea5 100644 --- a/plugins/elasticsearch/public/style.css +++ b/plugins/elasticsearch/public/style.css @@ -52,7 +52,7 @@ .controller-elasticsearch_plugin #content-inner .categories, .controller-elasticsearch_plugin #content-inner .search-filter, -.controller-elasticsearch_plugin #content-inner ul.search-options { +.controller-elasticsearch_plugin #content-inner .search-options ul { background: #fff; overflow: hidden; border-radius: 5px; diff --git a/plugins/elasticsearch/test/api/elasticsearch_plugin_api_test.rb b/plugins/elasticsearch/test/api/elasticsearch_plugin_api_test.rb index a1d9519..6bcd845 100644 --- a/plugins/elasticsearch/test/api/elasticsearch_plugin_api_test.rb +++ b/plugins/elasticsearch/test/api/elasticsearch_plugin_api_test.rb @@ -122,4 +122,16 @@ class ElasticsearchPluginApiTest < ActiveSupport::TestCase assert_equal 3, json["results"].count end + should 'respond with only categories from given model' do + get "/api/v1/search?selected_type=community&categories=1,2,3" + json = JSON.parse(last_response.body) + assert_equal 200, last_response.status + assert_equal 3, json["results"].count + + get "/api/v1/search?selected_type=person&categories=1,2" + json = JSON.parse(last_response.body) + assert_equal 200, last_response.status + assert_equal 0, json["results"].count + end + end diff --git a/plugins/elasticsearch/views/elasticsearch_plugin/_results_count.html.erb b/plugins/elasticsearch/views/elasticsearch_plugin/_results_count.html.erb new file mode 100644 index 0000000..7ddbcd5 --- /dev/null +++ b/plugins/elasticsearch/views/elasticsearch_plugin/_results_count.html.erb @@ -0,0 +1,8 @@ +

+ <%= @hits %> + <% if not @query.blank? %> + <%= _(" results for ") %><%= @query %> + <% else %> + <%= _(" total results") %> + <% end %> +

diff --git a/plugins/elasticsearch/views/elasticsearch_plugin/_search_collection.html.erb b/plugins/elasticsearch/views/elasticsearch_plugin/_search_collection.html.erb new file mode 100644 index 0000000..7558f01 --- /dev/null +++ b/plugins/elasticsearch/views/elasticsearch_plugin/_search_collection.html.erb @@ -0,0 +1,15 @@ +<% for result in @results.to_a %> + <% for klass in @searchable_types.keys %> + <% next if klass.to_s.include? "all" %> + <% if result.is_a? klass.to_s.classify.constantize %> +
+ <%= render partial: "#{klass}_display", :locals => { klass => result} %> +
+ <% break %> + <% end %> + <% end %> +<% end %> + +
+ <%= pagination_links @results if @results.count > 0 %> +
diff --git a/plugins/elasticsearch/views/elasticsearch_plugin/_search_field.html.erb b/plugins/elasticsearch/views/elasticsearch_plugin/_search_field.html.erb new file mode 100644 index 0000000..288f331 --- /dev/null +++ b/plugins/elasticsearch/views/elasticsearch_plugin/_search_field.html.erb @@ -0,0 +1,12 @@ +<%= form_tag '/plugin/elasticsearch/search', method: :get do %> + + <%= hidden_field_tag("selected_type", @selected_type) if @selected_type %> + + <%= hidden_field_tag("filter", @selected_sort) if @selected_sort %> + + <%= hidden_field_tag("categories", @selected_categories.join(",")) if @selected_categories %> + + <%= text_field_tag :query, @query %> + + <%= submit_tag _("Send") %> +<% end %> diff --git a/plugins/elasticsearch/views/elasticsearch_plugin/_search_filter.html.erb b/plugins/elasticsearch/views/elasticsearch_plugin/_search_filter.html.erb new file mode 100644 index 0000000..095a172 --- /dev/null +++ b/plugins/elasticsearch/views/elasticsearch_plugin/_search_filter.html.erb @@ -0,0 +1,8 @@ +

<%= _("Sort by") %>

+ diff --git a/plugins/elasticsearch/views/elasticsearch_plugin/_search_option.html.erb b/plugins/elasticsearch/views/elasticsearch_plugin/_search_option.html.erb new file mode 100644 index 0000000..b85cbbb --- /dev/null +++ b/plugins/elasticsearch/views/elasticsearch_plugin/_search_option.html.erb @@ -0,0 +1,7 @@ + diff --git a/plugins/elasticsearch/views/elasticsearch_plugin/search.html.erb b/plugins/elasticsearch/views/elasticsearch_plugin/search.html.erb index 7ce5272..1f907b4 100644 --- a/plugins/elasticsearch/views/elasticsearch_plugin/search.html.erb +++ b/plugins/elasticsearch/views/elasticsearch_plugin/search.html.erb @@ -1,68 +1,34 @@
- <%= form_tag '/plugin/elasticsearch/search', method: :get do %> - <%= hidden_field_tag "selected_type", @selected_type %> - <% if @selected_filter %> - <%= hidden_field_tag "filter", @selected_filter %> - <% end %> - <%= text_field_tag :query, @query %> - <%= submit_tag _("Send") %> - <% end %> + <%= render :partial => "search_field" %>
-

- <%= @hits %> - <% if not @query.blank? %> - <%= _(" results for ") %><%= @query %> - <% else %> - <%= _(" total results") %> - <% end %> -

+ <%= render :partial => "results_count" %>
- <% for result in @results.to_a %> - <% for klass in @searchable_types.keys %> - <% next if klass.to_s.include? "all" %> - <% if result.is_a? klass.to_s.classify.constantize %> -
- <%= render partial: "#{klass}_display", :locals => { klass => result} %> -
- <% break %> - <% end %> - <% end %> - <% end %> -
- <%= pagination_links @results if @results.count > 0 %> -
+ <%= render :partial => 'search_collection' %>
diff --git a/plugins/elasticsearch/views/elasticsearch_plugin/search.js.erb b/plugins/elasticsearch/views/elasticsearch_plugin/search.js.erb new file mode 100644 index 0000000..9eb8ccd --- /dev/null +++ b/plugins/elasticsearch/views/elasticsearch_plugin/search.js.erb @@ -0,0 +1,5 @@ +$(".results").html("<%= escape_javascript(render partial: 'search_collection') %>"); +$(".results-count").html("<%= escape_javascript(render partial: 'results_count') %>"); +$(".search-options").html("<%= escape_javascript(render partial: 'search_option') %>"); +$(".search-filter").html("<%= escape_javascript(render partial: 'search_filter') %>"); +$(".search_field").html("<%= escape_javascript(render partial: 'search_field') %>"); -- libgit2 0.21.2