Commit 59364b6fa85795b62d2bcd25be71b536d62c258c
Committed by
Macartur Sousa
1 parent
1110c012
Exists in
fix_sign_up_form
Elasticsearch: Fixed categories updates and views
* Adds dynamic rendering of javascript helper * Adding partial renders to update links and input text Signed-off-by: DylanGuedes <djmgguedes@gmail.com> Signed-off-by: Macartur de Sousa <macartur.sc@gmail.com>
Showing
11 changed files
with
103 additions
and
54 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,21 @@ var main = function() { | @@ -4,14 +4,21 @@ 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 | + | ||
| 15 | var idx = categories.indexOf(this.value); | 22 | var idx = categories.indexOf(this.value); |
| 16 | if (idx == -1) { | 23 | if (idx == -1) { |
| 17 | categories.push(this.value); | 24 | categories.push(this.value); |
| @@ -19,8 +26,13 @@ var main = function() { | @@ -19,8 +26,13 @@ var main = function() { | ||
| 19 | categories.splice(idx, 1); | 26 | categories.splice(idx, 1); |
| 20 | } | 27 | } |
| 21 | 28 | ||
| 22 | - url += categories.join(","); | ||
| 23 | - window.location.href = url; | 29 | + dataParams['categories'] = categories.join(",") |
| 30 | + | ||
| 31 | + $.ajax({ | ||
| 32 | + method: "GET", | ||
| 33 | + url: "/search?format=js", | ||
| 34 | + data: dataParams | ||
| 35 | + }); | ||
| 24 | }); | 36 | }); |
| 25 | }; | 37 | }; |
| 26 | 38 |
plugins/elasticsearch/public/style.css
| @@ -52,7 +52,7 @@ | @@ -52,7 +52,7 @@ | ||
| 52 | 52 | ||
| 53 | .controller-elasticsearch_plugin #content-inner .categories, | 53 | .controller-elasticsearch_plugin #content-inner .categories, |
| 54 | .controller-elasticsearch_plugin #content-inner .search-filter, | 54 | .controller-elasticsearch_plugin #content-inner .search-filter, |
| 55 | -.controller-elasticsearch_plugin #content-inner ul.search-options { | 55 | +.controller-elasticsearch_plugin #content-inner .search-options ul { |
| 56 | background: #fff; | 56 | background: #fff; |
| 57 | overflow: hidden; | 57 | overflow: hidden; |
| 58 | border-radius: 5px; | 58 | border-radius: 5px; |
plugins/elasticsearch/test/api/elasticsearch_plugin_api_test.rb
| @@ -122,4 +122,16 @@ class ElasticsearchPluginApiTest < ActiveSupport::TestCase | @@ -122,4 +122,16 @@ class ElasticsearchPluginApiTest < ActiveSupport::TestCase | ||
| 122 | assert_equal 3, json["results"].count | 122 | assert_equal 3, json["results"].count |
| 123 | end | 123 | end |
| 124 | 124 | ||
| 125 | + should 'respond with only categories from given model' do | ||
| 126 | + get "/api/v1/search?selected_type=community&categories=1,2,3" | ||
| 127 | + json = JSON.parse(last_response.body) | ||
| 128 | + assert_equal 200, last_response.status | ||
| 129 | + assert_equal 3, json["results"].count | ||
| 130 | + | ||
| 131 | + get "/api/v1/search?selected_type=person&categories=1,2" | ||
| 132 | + json = JSON.parse(last_response.body) | ||
| 133 | + assert_equal 200, last_response.status | ||
| 134 | + assert_equal 0, json["results"].count | ||
| 135 | + end | ||
| 136 | + | ||
| 125 | end | 137 | end |
plugins/elasticsearch/views/elasticsearch_plugin/_results_count.html.erb
0 → 100644
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_field.html.erb
0 → 100644
| @@ -0,0 +1,12 @@ | @@ -0,0 +1,12 @@ | ||
| 1 | +<%= form_tag '/plugin/elasticsearch/search', method: :get do %> | ||
| 2 | + | ||
| 3 | + <%= hidden_field_tag("selected_type", @selected_type) if @selected_type %> | ||
| 4 | + | ||
| 5 | + <%= hidden_field_tag("filter", @selected_sort) if @selected_sort %> | ||
| 6 | + | ||
| 7 | + <%= hidden_field_tag("categories", @selected_categories.join(",")) if @selected_categories %> | ||
| 8 | + | ||
| 9 | + <%= text_field_tag :query, @query %> | ||
| 10 | + | ||
| 11 | + <%= submit_tag _("Send") %> | ||
| 12 | +<% end %> |
plugins/elasticsearch/views/elasticsearch_plugin/_search_filter.html.erb
0 → 100644
| @@ -0,0 +1,8 @@ | @@ -0,0 +1,8 @@ | ||
| 1 | +<h3 class="box-title"><%= _("Sort by") %></h3> | ||
| 2 | +<ul> | ||
| 3 | +<% for type, value in @sort_types %> | ||
| 4 | + <li class="select-search-type <%= "active" if type == @selected_sort %>"> | ||
| 5 | + <%= link_to value[:label], "?selected_type=#{@selected_type}&query=#{@query}&filter=#{type}&categories=#{@selected_categories.join(',')}" %> | ||
| 6 | + </li> | ||
| 7 | +<% end %> | ||
| 8 | +</ul> |
plugins/elasticsearch/views/elasticsearch_plugin/_search_option.html.erb
0 → 100644
| @@ -0,0 +1,7 @@ | @@ -0,0 +1,7 @@ | ||
| 1 | +<ul> | ||
| 2 | + <% for type,value in @searchable_types %> | ||
| 3 | + <li class="select-search-type <%= "active" if type == @selected_type %>"> | ||
| 4 | + <%= link_to value[:label], "?selected_type=#{type}&query=#{@query}&categories=#{@selected_categories.join(',')}"%> | ||
| 5 | + </li> | ||
| 6 | + <% end %> | ||
| 7 | +</ul> |
plugins/elasticsearch/views/elasticsearch_plugin/search.html.erb
| 1 | <div class="wrapper"> | 1 | <div class="wrapper"> |
| 2 | <div class="search_form"> | 2 | <div class="search_form"> |
| 3 | <div class="search_field"> | 3 | <div class="search_field"> |
| 4 | - <%= form_tag '/plugin/elasticsearch/search', method: :get do %> | ||
| 5 | - <%= hidden_field_tag "selected_type", @selected_type %> | ||
| 6 | - <% if @selected_filter %> | ||
| 7 | - <%= hidden_field_tag "filter", @selected_filter %> | ||
| 8 | - <% end %> | ||
| 9 | - <%= text_field_tag :query, @query %> | ||
| 10 | - <%= submit_tag _("Send") %> | ||
| 11 | - <% end %> | 4 | + <%= render :partial => "search_field" %> |
| 12 | </div> | 5 | </div> |
| 13 | <div class="results-count"> | 6 | <div class="results-count"> |
| 14 | - <p> | ||
| 15 | - <strong><%= @hits %></strong> | ||
| 16 | - <% if not @query.blank? %> | ||
| 17 | - <%= _(" results for ") %><%= @query %> | ||
| 18 | - <% else %> | ||
| 19 | - <%= _(" total results") %> | ||
| 20 | - <% end %> | ||
| 21 | - </p> | 7 | + <%= render :partial => "results_count" %> |
| 22 | </div> | 8 | </div> |
| 23 | </div> | 9 | </div> |
| 24 | 10 | ||
| 25 | <div class="results-wrapper"> | 11 | <div class="results-wrapper"> |
| 26 | <div class="sidebar"> | 12 | <div class="sidebar"> |
| 27 | - <ul class="search-options"> | ||
| 28 | - <% for type,value in @searchable_types %> | ||
| 29 | - <li class="select-search-type <%= "active" if type == @selected_type %>"> | ||
| 30 | - <%= link_to value[:label], "?selected_type=#{type}&query=#{@query}&categories=#{@selected_categories.join(',')}"%> | ||
| 31 | - </li> | ||
| 32 | - <% end %> | ||
| 33 | - </ul> | 13 | + |
| 14 | + <div class="search-options"> | ||
| 15 | + <%= render :partial => "search_option.html.erb" %> | ||
| 16 | + </div> | ||
| 17 | + | ||
| 34 | <div class="search-filter"> | 18 | <div class="search-filter"> |
| 35 | - <h3 class="box-title"><%= _("Sort by") %></h3> | ||
| 36 | - <ul> | ||
| 37 | - <% for type, value in @sort_types %> | ||
| 38 | - <li class="select-search-type <%= "active" if type == @selected_sort %>"> | ||
| 39 | - <%= link_to value[:label], "?selected_type=#{@selected_type}&query=#{@query}&filter=#{type}&categories=#{@selected_categories.join(',')}" %> | ||
| 40 | - </li> | ||
| 41 | - <% end %> | ||
| 42 | - </ul> | 19 | + <%= render :partial => "search_filter.html.erb" %> |
| 43 | </div> | 20 | </div> |
| 44 | 21 | ||
| 45 | <div class="categories"> | 22 | <div class="categories"> |
| 46 | <h3 class="box-title"><%= _("Categories") %></h3> | 23 | <h3 class="box-title"><%= _("Categories") %></h3> |
| 47 | - <%= render_categories(@categories, @selected_categories) %> | 24 | + <div id="categories-list"> |
| 25 | + <%= render_categories(@categories, @selected_categories) %> | ||
| 26 | + </div> | ||
| 48 | </div> | 27 | </div> |
| 49 | </div> | 28 | </div> |
| 50 | 29 | ||
| 51 | <div class="results"> | 30 | <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> | 31 | + <%= render :partial => 'search_collection' %> |
| 66 | </div> | 32 | </div> |
| 67 | 33 | ||
| 68 | </div> | 34 | </div> |
plugins/elasticsearch/views/elasticsearch_plugin/search.js.erb
0 → 100644
| @@ -0,0 +1,5 @@ | @@ -0,0 +1,5 @@ | ||
| 1 | +$(".results").html("<%= escape_javascript(render partial: 'search_collection') %>"); | ||
| 2 | +$(".results-count").html("<%= escape_javascript(render partial: 'results_count') %>"); | ||
| 3 | +$(".search-options").html("<%= escape_javascript(render partial: 'search_option') %>"); | ||
| 4 | +$(".search-filter").html("<%= escape_javascript(render partial: 'search_filter') %>"); | ||
| 5 | +$(".search_field").html("<%= escape_javascript(render partial: 'search_field') %>"); |