diff --git a/lib/ext/search_controller.rb b/lib/ext/search_controller.rb index df26904..0bb76dd 100644 --- a/lib/ext/search_controller.rb +++ b/lib/ext/search_controller.rb @@ -22,32 +22,7 @@ class SearchController def software_infos - @titles[:software_infos] = _("Public Software Catalog") - @category_filters = [] - @categories = Category.all - @selected_categories = params[:selected_categories] - - @selected_categories_name = [] - @message_selected_options = "Most options" - unless @selected_categories.nil? - @message_selected_options = _("Selected options: ") - @selected_categories.each do |k, v| - @message_selected_options << "#{k}; " - @selected_categories_name << k - end - end - - @categories.sort!{|a, b| a.name <=> b.name} - @categories_groupe_one = [] - @categories_groupe_two = [] - (0..(@categories.count - 1)).each do |i| - if i % 2 == 0 - @categories_groupe_one << @categories[i] - else - @categories_groupe_two << @categories[i] - end - end - + prepare_search_page results = filter_software_infos_list results = results.paginate(:per_page => 24, :page => params[:page]) @searches[@asset] = {:results => results} @@ -96,4 +71,53 @@ class SearchController filtered_community_list end + + def get_search_result + redirect_to "/" unless request.xhr? + + selected_categories = {} + params[:categories_ids].each do |id| + selected_categories[Category.find(id).name] = id + end + params[:selected_categories] = selected_categories + + prepare_search_page + + results = filter_software_infos_list + results = results.paginate(:per_page => 24, :page => params[:page]) + + @searches[@asset] = {:results => results} + @search = results + render "/software_infos", :layout=>false + end + + protected + + def prepare_search_page + @titles[:software_infos] = _("Public Software Catalog") + @category_filters = [] + @categories = Category.all + @selected_categories = params[:selected_categories] + + @selected_categories_name = [] + @message_selected_options = "Most options" + unless @selected_categories.nil? + @message_selected_options = _("Selected options: ") + @selected_categories.each do |k, v| + @message_selected_options << "#{k}; " + @selected_categories_name << k + end + end + + @categories.sort!{|a, b| a.name <=> b.name} + @categories_groupe_one = [] + @categories_groupe_two = [] + (0..(@categories.count - 1)).each do |i| + if i % 2 == 0 + @categories_groupe_one << @categories[i] + else + @categories_groupe_two << @categories[i] + end + end + end end diff --git a/public/software-catalog.js b/public/software-catalog.js index ade9512..14ca7f4 100644 --- a/public/software-catalog.js +++ b/public/software-catalog.js @@ -1,9 +1,11 @@ -(function(){ +(function($){ "use strict"; var AJAX_URL = { get_categories: - url_with_subdirectory("/plugin/mpog_software/get_categories") + url_with_subdirectory("/plugin/mpog_software/get_categories"), + get_search_result: + url_with_subdirectory("/search/get_search_result") }; function create_catalog_element(first, value, id) { @@ -18,7 +20,7 @@ function add_item_to_catalog(value, id) { var already_has = false; - jQuery("#catalog-list ul li").each(function(i, li){ + $("#catalog-list ul li").each(function(i, li){ var regex = new RegExp(value, "g"); if( regex.test(li.innerHTML) ) { @@ -27,21 +29,21 @@ }); if( !already_has ) { - var catalog_list = jQuery("#catalog-list ul li"); - var current_ids = jQuery("#filter").val(); + var catalog_list = $("#catalog-list ul li"); + var current_ids = $("#filter").val(); var first = catalog_list.length == 0; current_ids += first ? id : ","+id; - jQuery("#filter").val(current_ids); + $("#filter").val(current_ids); - jQuery("#catalog-list ul").append(create_catalog_element(first, value, id)); + $("#catalog-list ul").append(create_catalog_element(first, value, id)); } } function remote_catalog_item() { var current_id = this.getAttribute("data-id"); - var filter_ids = jQuery("#filter").val(); + var filter_ids = $("#filter").val(); var id_list = []; filter_ids.split(",").forEach(function(id){ @@ -50,60 +52,89 @@ } }); - jQuery("#filter").val(id_list.join(",")); + $("#filter").val(id_list.join(",")); - jQuery(this).parent().remove(); + $(this).parent().remove(); } function show_head_message() { - if (jQuery("#filter-categories-select-catalog").text().blank()){ - jQuery("#filter-categories-select-catalog").hide(); - jQuery("#filter-option-catalog-software").show(); + if ($("#filter-categories-select-catalog").text().blank()){ + $("#filter-categories-select-catalog").hide(); + $("#filter-option-catalog-software").show(); }else{ - jQuery("#filter-categories-select-catalog").show(); - jQuery("#filter-option-catalog-software").hide(); + $("#filter-categories-select-catalog").show(); + $("#filter-option-catalog-software").hide(); } } function slideDowsCategoriesOptionAndHideOptionCatalog() { - jQuery("#filter-categories-option").slideDown(); - jQuery("#filter-option-catalog-software").hide(); + $("#filter-categories-option").slideDown(); + $("#filter-option-catalog-software").hide(); } function slideDownCategoriesOptionAndHideCategoriesSelect() { - jQuery("#filter-categories-option").slideDown(); - jQuery("#filter-categories-select-catalog").hide(); + $("#filter-categories-option").slideDown(); + $("#filter-categories-select-catalog").hide(); } function slideUpCategoriesAndShowHeadMessage() { - jQuery("#filter-categories-option").slideUp(); + $("#filter-categories-option").slideUp(); show_head_message(); } function clearCatalogCheckbox(){ - jQuery("#filter-categories-option").slideUp(); - jQuery("#filter-option-catalog-software").show(); - jQuery("#group-categories input:checked").each(function() { - jQuery(this).prop('checked', false); + $("#filter-categories-option").slideUp(); + $("#filter-option-catalog-software").show(); + $("#group-categories input:checked").each(function() { + $(this).prop('checked', false); }); } + function dispatch_search_ajax(callback) { + var query_text = $("#search-input").val(); + var selected_categories_ids = []; + + $(".categories-catalog:checked").each(function(index, element) { + selected_categories_ids.push(element.value); + }); + + + $.ajax({ + url: AJAX_URL.get_search_result, + type: "GET", + data: { + query: query_text, + categories_ids: selected_categories_ids + }, + success: function(response) { + console.log(response); + callback(response); + } + }); + } + + function update_page_list() { + + } + function selectCheckboxCategory() { - jQuery("#filter-categories-option").slideUp(); - jQuery("#filter-categories-select-catalog").show(); - jQuery("#filter-option-catalog-software").hide(); + $("#filter-categories-option").slideUp(); + $("#filter-categories-select-catalog").show(); + $("#filter-option-catalog-software").hide(); + + dispatch_search_ajax(update_page_list); } function selectProjectSoftwareCheckbox() { - jQuery("#filter-categories-option").slideUp(); - jQuery("#filter-categories-select-catalog").show(); - jQuery("#filter-option-catalog-software").hide(); + $("#filter-categories-option").slideUp(); + $("#filter-categories-select-catalog").show(); + $("#filter-option-catalog-software").hide(); } function set_autocomplate() { - jQuery("#software-catalog").autocomplete({ + $("#software-catalog").autocomplete({ source : function(request, response){ - jQuery.ajax({ + $.ajax({ type: "GET", url: AJAX_URL.get_categories, data: {query: request.term}, @@ -128,21 +159,21 @@ } function set_events() { - jQuery(".catalog-remove-item").click(remote_catalog_item); - jQuery("#filter-option-catalog-software").click(slideDowsCategoriesOptionAndHideOptionCatalog); - jQuery("#filter-categories-select-catalog").click(slideDownCategoriesOptionAndHideCategoriesSelect); - jQuery("#close-filter-catalog").click(slideUpCategoriesAndShowHeadMessage); - jQuery("#cleanup-filter-catalg").click(clearCatalogCheckbox); - jQuery(".categories-catalog").click(selectCheckboxCategory); - jQuery(".project-software").click(selectProjectSoftwareCheckbox); + $(".catalog-remove-item").click(remote_catalog_item); + $("#filter-option-catalog-software").click(slideDowsCategoriesOptionAndHideOptionCatalog); + $("#filter-categories-select-catalog").click(slideDownCategoriesOptionAndHideCategoriesSelect); + $("#close-filter-catalog").click(slideUpCategoriesAndShowHeadMessage); + $("#cleanup-filter-catalg").click(clearCatalogCheckbox); + $(".categories-catalog").click(selectCheckboxCategory); + $(".project-software").click(selectProjectSoftwareCheckbox); } - jQuery(document).ready(function(){ + $(document).ready(function(){ set_autocomplate(); set_events(); show_head_message(); - jQuery("#filter-categories-option").hide(); + $("#filter-categories-option").hide(); }); -})(); +})(jQuery); diff --git a/views/search/_catalog_filter.html.erb b/views/search/_catalog_filter.html.erb index 8eae030..1671179 100644 --- a/views/search/_catalog_filter.html.erb +++ b/views/search/_catalog_filter.html.erb @@ -15,7 +15,7 @@ <% @categories_groupe_one.each do |category| %>
<% end %> -- libgit2 0.21.2