modulejs.define('SearchSoftwareCatalog', ['jquery', 'NoosferoRoot', 'SoftwareCatalogComponent'], function($, NoosferoRoot, SoftwareCatalogComponent) { 'use strict'; var AJAX_URL = { software_infos: NoosferoRoot.urlWithSubDirectory("/search/software_infos") }; function dispatch_search_ajax(enable_load) { var search_params = get_search_params(); if(enable_load) { open_loading("Loading"); } $.ajax({ url: AJAX_URL.software_infos, type: "GET", data: search_params, success: update_search_page_on_ajax, error: function(){ close_loading(); } }); } function get_search_params() { var params = {}; params.query = $("#search-input").val(); params.selected_categories = []; $(".categories-catalog:checked").each(function(index, element) { params.selected_categories.push(element.value); }); params.software_display = $("#software_display").val(); params.sort = $("#sort").val(); params.include_non_public = $("#include_non_public").is(":checked"); return params; } function get_result_div_core(message) { $("#search-results-empty").html(message); } function catalog_message() { var empty_result = $('#empty_result').val() === 'true'; var user_selected_categories = $('.categories-catalog:checked').length !== 0; if(empty_result && !user_selected_categories) { get_result_div_core($('#message-no-catalog-selected').val()); } else if (empty_result && user_selected_categories) { get_result_div_core($('#message-catalog-selected').val()); } } function update_search_page_on_ajax(response) { response = $(response); var search_list = $("#search-results"); var selected_categories_field = $("#filter-categories-select-catalog"); var pagination = $("#software-pagination"); var software_count = $("#software-count"); var result_list = response.find("#search-results").html(); var result_categories = response.find("#filter-categories-select-catalog").html(); var result_pagination = response.find("#software-pagination").html(); var result_software_count = response.find("#software-count").html(); search_list.html(result_list); selected_categories_field.html(result_categories); pagination.html(result_pagination); software_count.html(result_software_count); highlight_searched_terms(); catalog_message(); hide_load_after_ajax(); } function hide_load_after_ajax() { if ($("#overlay_loading_modal").is(":visible")) { close_loading(); setTimeout(hide_load_after_ajax, 1500); } } function highlight_searched_terms() { var searched_terms = $("#search-input").val(); if( searched_terms.length === 0 ) { return undefined; } var content_result = $(".search-content-result"); var regex = new RegExp("("+searched_terms.replace(/\s/g, "|")+")", "gi"); content_result.each(function(i, e){ var element = $(e); var new_text = element.text().replace(regex, function(text) { return ""+text+""; }); element.html(new_text); }); } function update_page_by_ajax_on_select_change() { dispatch_search_ajax(update_search_page_on_ajax, true); } function update_page_by_text_filter() { var text = this.value; dispatch_search_ajax(update_search_page_on_ajax, false); } function search_input_keyup() { var timer = null; $("#search-input").keyup(function() { timer = setTimeout(update_page_by_text_filter, 400); }).keydown(function() { clearTimeout(timer); }); } function set_events() { $("#software_display").change(update_page_by_ajax_on_select_change); $("#sort").change(update_page_by_ajax_on_select_change); search_input_keyup(); } return { isCurrentPage: function() { return $('#software-search-container').length === 1; }, init: function() { set_events(); catalog_message(); $("#filter-categories-option").hide(); SoftwareCatalogComponent.init(dispatch_search_ajax); } } });