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..de2eeef 100644 --- a/plugins/elasticsearch/public/javascripts/categories.js +++ b/plugins/elasticsearch/public/javascripts/categories.js @@ -4,14 +4,22 @@ 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 +27,16 @@ var main = function() { categories.splice(idx, 1); } - url += categories.join(","); - window.location.href = url; + $.ajax({ + method: "GET", + url: "/search?format=js", + data: { + categories: categories.join(","), + selected_type: dataParams["selected_type"], + filter: dataParams["filter"], + query: dataParams["query"] + } + }); }); }; 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/_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.html.erb b/plugins/elasticsearch/views/elasticsearch_plugin/search.html.erb index 7ce5272..6f477cc 100644 --- a/plugins/elasticsearch/views/elasticsearch_plugin/search.html.erb +++ b/plugins/elasticsearch/views/elasticsearch_plugin/search.html.erb @@ -44,25 +44,14 @@

<%= _("Categories") %>

- <%= render_categories(@categories, @selected_categories) %> +
+ <%= render_categories(@categories, @selected_categories) %> +
- <% 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..3cdf965 --- /dev/null +++ b/plugins/elasticsearch/views/elasticsearch_plugin/search.js.erb @@ -0,0 +1,2 @@ +$(".results").html("<%= escape_javascript(render partial: 'search_collection') %>"); + -- libgit2 0.21.2