Commit 18427e7c32b31a9caae8010e4d2270008666302f

Authored by Luciano Prestes
Committed by Gabriela Navarro
1 parent da4e5385

Add search ajax

Signed-off-by: Fabio Teixeira <fabio1079@gmail.com>
Signed-off-by: Hebert Douglas <hebertdougl@gmail.com>
Signed-off-by: Luciano Prestes <lucianopcbr@gmail.com>
lib/ext/search_controller.rb
@@ -22,32 +22,7 @@ class SearchController @@ -22,32 +22,7 @@ class SearchController
22 22
23 23
24 def software_infos 24 def software_infos
25 - @titles[:software_infos] = _("Public Software Catalog")  
26 - @category_filters = []  
27 - @categories = Category.all  
28 - @selected_categories = params[:selected_categories]  
29 -  
30 - @selected_categories_name = []  
31 - @message_selected_options = "Most options"  
32 - unless @selected_categories.nil?  
33 - @message_selected_options = _("Selected options: ")  
34 - @selected_categories.each do |k, v|  
35 - @message_selected_options << "#{k}; "  
36 - @selected_categories_name << k  
37 - end  
38 - end  
39 -  
40 - @categories.sort!{|a, b| a.name <=> b.name}  
41 - @categories_groupe_one = []  
42 - @categories_groupe_two = []  
43 - (0..(@categories.count - 1)).each do |i|  
44 - if i % 2 == 0  
45 - @categories_groupe_one << @categories[i]  
46 - else  
47 - @categories_groupe_two << @categories[i]  
48 - end  
49 - end  
50 - 25 + prepare_search_page
51 results = filter_software_infos_list 26 results = filter_software_infos_list
52 results = results.paginate(:per_page => 24, :page => params[:page]) 27 results = results.paginate(:per_page => 24, :page => params[:page])
53 @searches[@asset] = {:results => results} 28 @searches[@asset] = {:results => results}
@@ -96,4 +71,53 @@ class SearchController @@ -96,4 +71,53 @@ class SearchController
96 71
97 filtered_community_list 72 filtered_community_list
98 end 73 end
  74 +
  75 + def get_search_result
  76 + redirect_to "/" unless request.xhr?
  77 +
  78 + selected_categories = {}
  79 + params[:categories_ids].each do |id|
  80 + selected_categories[Category.find(id).name] = id
  81 + end
  82 + params[:selected_categories] = selected_categories
  83 +
  84 + prepare_search_page
  85 +
  86 + results = filter_software_infos_list
  87 + results = results.paginate(:per_page => 24, :page => params[:page])
  88 +
  89 + @searches[@asset] = {:results => results}
  90 + @search = results
  91 + render "/software_infos", :layout=>false
  92 + end
  93 +
  94 + protected
  95 +
  96 + def prepare_search_page
  97 + @titles[:software_infos] = _("Public Software Catalog")
  98 + @category_filters = []
  99 + @categories = Category.all
  100 + @selected_categories = params[:selected_categories]
  101 +
  102 + @selected_categories_name = []
  103 + @message_selected_options = "Most options"
  104 + unless @selected_categories.nil?
  105 + @message_selected_options = _("Selected options: ")
  106 + @selected_categories.each do |k, v|
  107 + @message_selected_options << "#{k}; "
  108 + @selected_categories_name << k
  109 + end
  110 + end
  111 +
  112 + @categories.sort!{|a, b| a.name <=> b.name}
  113 + @categories_groupe_one = []
  114 + @categories_groupe_two = []
  115 + (0..(@categories.count - 1)).each do |i|
  116 + if i % 2 == 0
  117 + @categories_groupe_one << @categories[i]
  118 + else
  119 + @categories_groupe_two << @categories[i]
  120 + end
  121 + end
  122 + end
99 end 123 end
public/software-catalog.js
1 -(function(){ 1 +(function($){
2 "use strict"; 2 "use strict";
3 3
4 var AJAX_URL = { 4 var AJAX_URL = {
5 get_categories: 5 get_categories:
6 - url_with_subdirectory("/plugin/mpog_software/get_categories") 6 + url_with_subdirectory("/plugin/mpog_software/get_categories"),
  7 + get_search_result:
  8 + url_with_subdirectory("/search/get_search_result")
7 }; 9 };
8 10
9 function create_catalog_element(first, value, id) { 11 function create_catalog_element(first, value, id) {
@@ -18,7 +20,7 @@ @@ -18,7 +20,7 @@
18 function add_item_to_catalog(value, id) { 20 function add_item_to_catalog(value, id) {
19 var already_has = false; 21 var already_has = false;
20 22
21 - jQuery("#catalog-list ul li").each(function(i, li){ 23 + $("#catalog-list ul li").each(function(i, li){
22 var regex = new RegExp(value, "g"); 24 var regex = new RegExp(value, "g");
23 25
24 if( regex.test(li.innerHTML) ) { 26 if( regex.test(li.innerHTML) ) {
@@ -27,21 +29,21 @@ @@ -27,21 +29,21 @@
27 }); 29 });
28 30
29 if( !already_has ) { 31 if( !already_has ) {
30 - var catalog_list = jQuery("#catalog-list ul li");  
31 - var current_ids = jQuery("#filter").val(); 32 + var catalog_list = $("#catalog-list ul li");
  33 + var current_ids = $("#filter").val();
32 var first = catalog_list.length == 0; 34 var first = catalog_list.length == 0;
33 35
34 current_ids += first ? id : ","+id; 36 current_ids += first ? id : ","+id;
35 37
36 - jQuery("#filter").val(current_ids); 38 + $("#filter").val(current_ids);
37 39
38 - jQuery("#catalog-list ul").append(create_catalog_element(first, value, id)); 40 + $("#catalog-list ul").append(create_catalog_element(first, value, id));
39 } 41 }
40 } 42 }
41 43
42 function remote_catalog_item() { 44 function remote_catalog_item() {
43 var current_id = this.getAttribute("data-id"); 45 var current_id = this.getAttribute("data-id");
44 - var filter_ids = jQuery("#filter").val(); 46 + var filter_ids = $("#filter").val();
45 var id_list = []; 47 var id_list = [];
46 48
47 filter_ids.split(",").forEach(function(id){ 49 filter_ids.split(",").forEach(function(id){
@@ -50,60 +52,89 @@ @@ -50,60 +52,89 @@
50 } 52 }
51 }); 53 });
52 54
53 - jQuery("#filter").val(id_list.join(",")); 55 + $("#filter").val(id_list.join(","));
54 56
55 - jQuery(this).parent().remove(); 57 + $(this).parent().remove();
56 } 58 }
57 59
58 function show_head_message() { 60 function show_head_message() {
59 - if (jQuery("#filter-categories-select-catalog").text().blank()){  
60 - jQuery("#filter-categories-select-catalog").hide();  
61 - jQuery("#filter-option-catalog-software").show(); 61 + if ($("#filter-categories-select-catalog").text().blank()){
  62 + $("#filter-categories-select-catalog").hide();
  63 + $("#filter-option-catalog-software").show();
62 }else{ 64 }else{
63 - jQuery("#filter-categories-select-catalog").show();  
64 - jQuery("#filter-option-catalog-software").hide(); 65 + $("#filter-categories-select-catalog").show();
  66 + $("#filter-option-catalog-software").hide();
65 } 67 }
66 } 68 }
67 69
68 function slideDowsCategoriesOptionAndHideOptionCatalog() { 70 function slideDowsCategoriesOptionAndHideOptionCatalog() {
69 - jQuery("#filter-categories-option").slideDown();  
70 - jQuery("#filter-option-catalog-software").hide(); 71 + $("#filter-categories-option").slideDown();
  72 + $("#filter-option-catalog-software").hide();
71 } 73 }
72 74
73 function slideDownCategoriesOptionAndHideCategoriesSelect() { 75 function slideDownCategoriesOptionAndHideCategoriesSelect() {
74 - jQuery("#filter-categories-option").slideDown();  
75 - jQuery("#filter-categories-select-catalog").hide(); 76 + $("#filter-categories-option").slideDown();
  77 + $("#filter-categories-select-catalog").hide();
76 } 78 }
77 79
78 function slideUpCategoriesAndShowHeadMessage() { 80 function slideUpCategoriesAndShowHeadMessage() {
79 - jQuery("#filter-categories-option").slideUp(); 81 + $("#filter-categories-option").slideUp();
80 show_head_message(); 82 show_head_message();
81 } 83 }
82 84
83 function clearCatalogCheckbox(){ 85 function clearCatalogCheckbox(){
84 - jQuery("#filter-categories-option").slideUp();  
85 - jQuery("#filter-option-catalog-software").show();  
86 - jQuery("#group-categories input:checked").each(function() {  
87 - jQuery(this).prop('checked', false); 86 + $("#filter-categories-option").slideUp();
  87 + $("#filter-option-catalog-software").show();
  88 + $("#group-categories input:checked").each(function() {
  89 + $(this).prop('checked', false);
88 }); 90 });
89 } 91 }
90 92
  93 + function dispatch_search_ajax(callback) {
  94 + var query_text = $("#search-input").val();
  95 + var selected_categories_ids = [];
  96 +
  97 + $(".categories-catalog:checked").each(function(index, element) {
  98 + selected_categories_ids.push(element.value);
  99 + });
  100 +
  101 +
  102 + $.ajax({
  103 + url: AJAX_URL.get_search_result,
  104 + type: "GET",
  105 + data: {
  106 + query: query_text,
  107 + categories_ids: selected_categories_ids
  108 + },
  109 + success: function(response) {
  110 + console.log(response);
  111 + callback(response);
  112 + }
  113 + });
  114 + }
  115 +
  116 + function update_page_list() {
  117 +
  118 + }
  119 +
91 function selectCheckboxCategory() { 120 function selectCheckboxCategory() {
92 - jQuery("#filter-categories-option").slideUp();  
93 - jQuery("#filter-categories-select-catalog").show();  
94 - jQuery("#filter-option-catalog-software").hide(); 121 + $("#filter-categories-option").slideUp();
  122 + $("#filter-categories-select-catalog").show();
  123 + $("#filter-option-catalog-software").hide();
  124 +
  125 + dispatch_search_ajax(update_page_list);
95 } 126 }
96 127
97 function selectProjectSoftwareCheckbox() { 128 function selectProjectSoftwareCheckbox() {
98 - jQuery("#filter-categories-option").slideUp();  
99 - jQuery("#filter-categories-select-catalog").show();  
100 - jQuery("#filter-option-catalog-software").hide(); 129 + $("#filter-categories-option").slideUp();
  130 + $("#filter-categories-select-catalog").show();
  131 + $("#filter-option-catalog-software").hide();
101 } 132 }
102 133
103 function set_autocomplate() { 134 function set_autocomplate() {
104 - jQuery("#software-catalog").autocomplete({ 135 + $("#software-catalog").autocomplete({
105 source : function(request, response){ 136 source : function(request, response){
106 - jQuery.ajax({ 137 + $.ajax({
107 type: "GET", 138 type: "GET",
108 url: AJAX_URL.get_categories, 139 url: AJAX_URL.get_categories,
109 data: {query: request.term}, 140 data: {query: request.term},
@@ -128,21 +159,21 @@ @@ -128,21 +159,21 @@
128 } 159 }
129 160
130 function set_events() { 161 function set_events() {
131 - jQuery(".catalog-remove-item").click(remote_catalog_item);  
132 - jQuery("#filter-option-catalog-software").click(slideDowsCategoriesOptionAndHideOptionCatalog);  
133 - jQuery("#filter-categories-select-catalog").click(slideDownCategoriesOptionAndHideCategoriesSelect);  
134 - jQuery("#close-filter-catalog").click(slideUpCategoriesAndShowHeadMessage);  
135 - jQuery("#cleanup-filter-catalg").click(clearCatalogCheckbox);  
136 - jQuery(".categories-catalog").click(selectCheckboxCategory);  
137 - jQuery(".project-software").click(selectProjectSoftwareCheckbox); 162 + $(".catalog-remove-item").click(remote_catalog_item);
  163 + $("#filter-option-catalog-software").click(slideDowsCategoriesOptionAndHideOptionCatalog);
  164 + $("#filter-categories-select-catalog").click(slideDownCategoriesOptionAndHideCategoriesSelect);
  165 + $("#close-filter-catalog").click(slideUpCategoriesAndShowHeadMessage);
  166 + $("#cleanup-filter-catalg").click(clearCatalogCheckbox);
  167 + $(".categories-catalog").click(selectCheckboxCategory);
  168 + $(".project-software").click(selectProjectSoftwareCheckbox);
138 } 169 }
139 170
140 171
141 - jQuery(document).ready(function(){ 172 + $(document).ready(function(){
142 set_autocomplate(); 173 set_autocomplate();
143 set_events(); 174 set_events();
144 show_head_message(); 175 show_head_message();
145 - jQuery("#filter-categories-option").hide(); 176 + $("#filter-categories-option").hide();
146 }); 177 });
147 178
148 -})(); 179 +})(jQuery);
views/search/_catalog_filter.html.erb
@@ -15,7 +15,7 @@ @@ -15,7 +15,7 @@
15 <% @categories_groupe_one.each do |category| %> 15 <% @categories_groupe_one.each do |category| %>
16 <label> 16 <label>
17 <%= check_box_tag("selected_categories[#{category.name}]", category.id, @selected_categories_name.include?(category.name), :class => "categories-catalog") %> 17 <%= check_box_tag("selected_categories[#{category.name}]", category.id, @selected_categories_name.include?(category.name), :class => "categories-catalog") %>
18 - <%= _("#{category.name}") %> 18 + <span><%= _("#{category.name}") %></span>
19 </label> <br> 19 </label> <br>
20 <% end %> 20 <% end %>
21 </div> 21 </div>