Commit 0321263b572d23f01a1ddfc253452e32e9d4e912
1 parent
abc8ae0c
Adds dynamic rendering of javascript helper
Signed-off-by: DylanGuedes <djmgguedes@gmail.com> Signed-off-by: Macartur de Sousa <macartur.sc@gmail.com>
Showing
6 changed files
with
60 additions
and
22 deletions
Show diff stats
plugins/elasticsearch/controllers/elasticsearch_plugin_controller.rb
| @@ -7,8 +7,7 @@ class ElasticsearchPluginController < ApplicationController | @@ -7,8 +7,7 @@ class ElasticsearchPluginController < ApplicationController | ||
| 7 | helper ElasticsearchPluginHelper | 7 | helper ElasticsearchPluginHelper |
| 8 | 8 | ||
| 9 | def index | 9 | def index |
| 10 | - search() | ||
| 11 | - render :action => 'search' | 10 | + search |
| 12 | end | 11 | end |
| 13 | 12 | ||
| 14 | def search | 13 | def search |
| @@ -16,6 +15,11 @@ class ElasticsearchPluginController < ApplicationController | @@ -16,6 +15,11 @@ class ElasticsearchPluginController < ApplicationController | ||
| 16 | define_sort_types | 15 | define_sort_types |
| 17 | define_categories | 16 | define_categories |
| 18 | define_results | 17 | define_results |
| 18 | + respond_to do |format| | ||
| 19 | + format.html { render :action => 'search' } | ||
| 20 | + format.js | ||
| 21 | + params["format"] = "" | ||
| 22 | + end | ||
| 19 | end | 23 | end |
| 20 | 24 | ||
| 21 | def define_results | 25 | def define_results |
plugins/elasticsearch/public/javascripts/categories.js
| @@ -4,14 +4,22 @@ var main = function() { | @@ -4,14 +4,22 @@ var main = function() { | ||
| 4 | var url = window.location.href; | 4 | var url = window.location.href; |
| 5 | var indexOfCategories; | 5 | var indexOfCategories; |
| 6 | 6 | ||
| 7 | - url = url.replace(/&categories.*/g, ""); | ||
| 8 | - url += "&categories="; | ||
| 9 | - | ||
| 10 | $(".categories ul li input[checked]").map(function(idx, element) { | 7 | $(".categories ul li input[checked]").map(function(idx, element) { |
| 11 | categories.push(element.value); | 8 | categories.push(element.value); |
| 12 | }); | 9 | }); |
| 13 | 10 | ||
| 14 | $('.categories ul li input[type=checkbox]').on('click', function(){ | 11 | $('.categories ul li input[type=checkbox]').on('click', function(){ |
| 12 | + var dataParams = {}; | ||
| 13 | + | ||
| 14 | + url = url.replace(/.*\?/, ""); | ||
| 15 | + var params = url.split('&'); | ||
| 16 | + console.log("Dataparams: ", params); | ||
| 17 | + params.map(function(param) { | ||
| 18 | + var item = param.split('='); | ||
| 19 | + dataParams[item[0]] = item[1]; | ||
| 20 | + }); | ||
| 21 | + | ||
| 22 | + | ||
| 15 | var idx = categories.indexOf(this.value); | 23 | var idx = categories.indexOf(this.value); |
| 16 | if (idx == -1) { | 24 | if (idx == -1) { |
| 17 | categories.push(this.value); | 25 | categories.push(this.value); |
| @@ -19,8 +27,16 @@ var main = function() { | @@ -19,8 +27,16 @@ var main = function() { | ||
| 19 | categories.splice(idx, 1); | 27 | categories.splice(idx, 1); |
| 20 | } | 28 | } |
| 21 | 29 | ||
| 22 | - url += categories.join(","); | ||
| 23 | - window.location.href = url; | 30 | + $.ajax({ |
| 31 | + method: "GET", | ||
| 32 | + url: "/search?format=js", | ||
| 33 | + data: { | ||
| 34 | + categories: categories.join(","), | ||
| 35 | + selected_type: dataParams["selected_type"], | ||
| 36 | + filter: dataParams["filter"], | ||
| 37 | + query: dataParams["query"] | ||
| 38 | + } | ||
| 39 | + }); | ||
| 24 | }); | 40 | }); |
| 25 | }; | 41 | }; |
| 26 | 42 |
plugins/elasticsearch/test/api/elasticsearch_plugin_api_test.rb
| @@ -61,4 +61,16 @@ class ElasticsearchPluginApiTest < ActiveSupport::TestCase | @@ -61,4 +61,16 @@ class ElasticsearchPluginApiTest < ActiveSupport::TestCase | ||
| 61 | assert_equal 200, last_response.status | 61 | assert_equal 200, last_response.status |
| 62 | assert_equal 3, json["results"].count | 62 | assert_equal 3, json["results"].count |
| 63 | end | 63 | end |
| 64 | + | ||
| 65 | + should 'respond with only categories from given model' do | ||
| 66 | + get "/api/v1/search?selected_type=community&categories=1,2,3" | ||
| 67 | + json = JSON.parse(last_response.body) | ||
| 68 | + assert_equal 200, last_response.status | ||
| 69 | + assert_equal 3, json["results"].count | ||
| 70 | + | ||
| 71 | + get "/api/v1/search?selected_type=person&categories=1,2" | ||
| 72 | + json = JSON.parse(last_response.body) | ||
| 73 | + assert_equal 200, last_response.status | ||
| 74 | + assert_equal 0, json["results"].count | ||
| 75 | + end | ||
| 64 | end | 76 | end |
plugins/elasticsearch/views/elasticsearch_plugin/_search_collection.html.erb
0 → 100644
| @@ -0,0 +1,15 @@ | @@ -0,0 +1,15 @@ | ||
| 1 | +<% for result in @results.to_a %> | ||
| 2 | + <% for klass in @searchable_types.keys %> | ||
| 3 | + <% next if klass.to_s.include? "all" %> | ||
| 4 | + <% if result.is_a? klass.to_s.classify.constantize %> | ||
| 5 | + <div class="search-item"> | ||
| 6 | + <%= render partial: "#{klass}_display", :locals => { klass => result} %> | ||
| 7 | + </div> | ||
| 8 | + <% break %> | ||
| 9 | + <% end %> | ||
| 10 | + <% end %> | ||
| 11 | +<% end %> | ||
| 12 | + | ||
| 13 | +<div class="search_paginate"> | ||
| 14 | + <%= pagination_links @results if @results.count > 0 %> | ||
| 15 | +</div> |
plugins/elasticsearch/views/elasticsearch_plugin/search.html.erb
| @@ -44,25 +44,14 @@ | @@ -44,25 +44,14 @@ | ||
| 44 | 44 | ||
| 45 | <div class="categories"> | 45 | <div class="categories"> |
| 46 | <h3 class="box-title"><%= _("Categories") %></h3> | 46 | <h3 class="box-title"><%= _("Categories") %></h3> |
| 47 | - <%= render_categories(@categories, @selected_categories) %> | 47 | + <div id="categories-list"> |
| 48 | + <%= render_categories(@categories, @selected_categories) %> | ||
| 49 | + </div> | ||
| 48 | </div> | 50 | </div> |
| 49 | </div> | 51 | </div> |
| 50 | 52 | ||
| 51 | <div class="results"> | 53 | <div class="results"> |
| 52 | - <% for result in @results.to_a %> | ||
| 53 | - <% for klass in @searchable_types.keys %> | ||
| 54 | - <% next if klass.to_s.include? "all" %> | ||
| 55 | - <% if result.is_a? klass.to_s.classify.constantize %> | ||
| 56 | - <div class="search-item"> | ||
| 57 | - <%= render partial: "#{klass}_display", :locals => { klass => result} %> | ||
| 58 | - </div> | ||
| 59 | - <% break %> | ||
| 60 | - <% end %> | ||
| 61 | - <% end %> | ||
| 62 | - <% end %> | ||
| 63 | - <div class="search_paginate"> | ||
| 64 | - <%= pagination_links @results if @results.count > 0 %> | ||
| 65 | - </div> | 54 | + <%= render :partial => 'search_collection' %> |
| 66 | </div> | 55 | </div> |
| 67 | 56 | ||
| 68 | </div> | 57 | </div> |
plugins/elasticsearch/views/elasticsearch_plugin/search.js.erb
0 → 100644