Commit 14d7499dc48bc901a1455a7f2123a288cb88f28b

Authored by Dylan Guedes
Committed by Macartur Sousa
1 parent 1ddc3b4e

Adds dynamic categories via javascript url

Signed-off-by: DylanGuedes <djmgguedes@gmail.com>
Signed-off-by: Macartur de Sousa <macartur.sc@gmail.com>
plugins/elasticsearch/controllers/elasticsearch_plugin_controller.rb
... ... @@ -26,7 +26,7 @@ class ElasticsearchPluginController &lt; ApplicationController
26 26  
27 27 def define_searchable_types
28 28 @searchable_types = searchable_types
29   - @selected_type = (params[:selected_type]|| :all ).to_sym
  29 + @selected_type = (params[:selected_type] || :all).to_sym
30 30 end
31 31  
32 32 def define_sort_types
... ...
plugins/elasticsearch/helpers/elasticsearch_helper.rb
... ... @@ -48,7 +48,7 @@ module ElasticsearchHelper
48 48 begin
49 49 klass = model.to_s.classify.constantize
50 50 filter = (params[:filter] || "" ).to_sym
51   - query = get_query params[:query], klass: klass, sort_by: get_sort_by(filter,klass)
  51 + query = get_query params[:query], klass: klass, sort_by: get_sort_by(params[:filter],klass), categories: params[:categories]
52 52 klass.search(query, size: default_per_page(params[:per_page])).page(params[:page]).records
53 53 rescue
54 54 []
... ... @@ -87,28 +87,37 @@ module ElasticsearchHelper
87 87 end
88 88  
89 89  
90   - def query_method expression="", models=[]
91   - {
92   - query: {
93   - filtered: {
94   - query: query_string(expression,models),
95   - filter: {
96   - bool: {
97   - should: models.map {|model| model.filter(environment: @environment.id) }
98   - }
99   - }
  90 + def query_method expression="", models=[], categories=[]
  91 + query = {}
  92 + query[:query] = {
  93 + filtered: {
  94 + query: query_string(expression, models),
  95 + filter: {
  96 + bool: {}
100 97 }
101 98 }
102 99 }
  100 +
  101 + query[:query][:filtered][:filter][:bool] = {
  102 + should: models.map {|model| model.filter(environment: @environment.id) }
  103 + }
  104 +
  105 + unless categories.blank?
  106 + query[:query][:filtered][:filter][:bool][:must] = models.first.filter_category(categories)
  107 + end
  108 +
  109 + query
103 110 end
104 111  
105 112 def get_query text="", options={}
106 113 klass = options[:klass]
107 114 sort_by = options[:sort_by]
  115 + categories = (options[:categories] || "").split(",")
  116 + categories = categories.map(&:to_i)
108 117  
109 118 models = (klass.nil?) ? searchable_models : [klass]
110 119  
111   - query = query_method(text, models)
  120 + query = query_method(text, models, categories)
112 121 query[:sort] = sort_by if sort_by
113 122  
114 123 query
... ...
plugins/elasticsearch/lib/searchable_model/filter.rb
... ... @@ -32,6 +32,15 @@ module Filter
32 32  
33 33 result_filter
34 34 end
  35 +
  36 + def filter_category selected_categories
  37 + {
  38 + query: {
  39 + terms: { category_ids: selected_categories }
  40 + }
  41 + }
  42 + end
  43 +
35 44 end
36 45  
37 46 module InstanceMethods
... ...
plugins/elasticsearch/public/javascripts/categories.js
1 1 var main = function() {
2   - $('.categories ul li input').on("click", function() {
3   - var categoryParam = "";
4   - if (window.location.href.search("categories") < 0) {
5   - categoryParam += "&categories=";
6   - }
7   - if ($(".categories ul li input[checked]").length > 0){
8   - categoryParam += ("," + this.value);
  2 + var categories = []
  3 + var categoryParam = "";
  4 + var url = window.location.href;
  5 + var indexOfCategories;
  6 +
  7 + url = url.replace(/categories.*/g, "");
  8 + url += "categories=";
  9 +
  10 + $(".categories ul li input[checked]").map(function(idx, element) {
  11 + categories.push(element.value);
  12 + });
  13 +
  14 + $('.categories ul li input[type=checkbox]').on('click', function(){
  15 + var idx = categories.indexOf(this.value);
  16 + if (idx == -1) {
  17 + categories.push(this.value);
9 18 } else {
10   - categoryParam += (this.value);
  19 + categories.splice(idx, 1);
11 20 }
12   - window.location.href += categoryParam;
  21 +
  22 + url += categories.join(",");
  23 + window.location.href = url;
13 24 });
14 25 };
15 26  
... ...