From 344efc3cb162438e0c9efa263caa9140d43f7350 Mon Sep 17 00:00:00 2001 From: Fabio Teixeira Date: Tue, 3 Mar 2015 20:42:50 -0300 Subject: [PATCH] Execute software catalog search javascript only when needed --- lib/software_communities_plugin.rb | 2 +- public/initializer.js | 3 ++- public/software-catalog.js | 219 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- public/views/search-software-catalog.js | 231 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 234 insertions(+), 221 deletions(-) delete mode 100644 public/software-catalog.js create mode 100644 public/views/search-software-catalog.js diff --git a/lib/software_communities_plugin.rb b/lib/software_communities_plugin.rb index 4a6aafa..9b3f9aa 100644 --- a/lib/software_communities_plugin.rb +++ b/lib/software_communities_plugin.rb @@ -133,9 +133,9 @@ class SoftwareCommunitiesPlugin < Noosfero::Plugin views/user-edit-profile.js views/create-institution.js views/complete-registration.js + views/search-software-catalog.js initializer.js app.js - software-catalog.js mpog-software-block.js mpog-download-block.js ) diff --git a/public/initializer.js b/public/initializer.js index c60e043..e2ff8ee 100644 --- a/public/initializer.js +++ b/public/initializer.js @@ -4,7 +4,8 @@ var dependencies = [ 'NewSoftware', 'UserEditProfile', 'CreateInstitution', - 'CompleteRegistration' + 'CompleteRegistration', + 'SearchSoftwareCatalog' ]; diff --git a/public/software-catalog.js b/public/software-catalog.js deleted file mode 100644 index 0cc9bd7..0000000 --- a/public/software-catalog.js +++ /dev/null @@ -1,219 +0,0 @@ -(function($){ - "use strict"; - - var AJAX_URL = { - software_infos: - url_with_subdirectory("/search/software_infos") - }; - - - function show_head_message() { - if ($("#filter-categories-select-catalog").text()){ - $("#filter-categories-select-catalog").hide(); - $("#filter-option-catalog-software").show(); - }else{ - $("#filter-categories-select-catalog").show(); - $("#filter-option-catalog-software").hide(); - } - } - - - function slideDowsCategoriesOptionAndHideOptionCatalog() { - $("#filter-categories-option").slideDown(); - $("#filter-option-catalog-software").hide(); - } - - - function slideDownCategoriesOptionAndHideCategoriesSelect() { - $("#filter-categories-option").slideDown(); - $("#filter-categories-select-catalog").hide(); - } - - - function slideUpCategoriesAndShowHeadMessage() { - $("#filter-categories-option").slideUp(); - show_head_message(); - } - - - function clearCatalogCheckbox(){ - $("#filter-categories-option").slideUp(); - $("#filter-option-catalog-software").show(); - $("#group-categories input:checked").each(function() { - $(this).prop('checked', false); - }); - - dispatch_search_ajax(update_search_page_on_ajax, true); - } - - - function selectCheckboxCategory() { - $("#filter-categories-option").slideUp(); - $("#filter-categories-select-catalog").show(); - $("#filter-option-catalog-software").hide(); - - dispatch_search_ajax(update_search_page_on_ajax, true); - } - - - function dispatch_search_ajax(callback, 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: callback, - 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){ - var div_result = $(".search-results-type-empty"); - var html = '
'+message+'
' - - div_result.replaceWith('
Nenhum software encontrado
'+message+'
') - } - - function catalog_message(){ - var result_list = $("#search-results").find('.search-results-empty').html(); - var selected_categories_field = $("#filter-categories-select-catalog"); - - if(result_list.length > 1 && selected_categories_field.html().length < 1){ - get_result_div_core("Tente filtros mais abrangentes"); - }else if (result_list.length > 1 && selected_categories_field.html().length >= 1) { - get_result_div_core("Tente filtros mais abrangentes ou confira os softwares das categorias individualmente"); - } - } - - 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(); - - catalog_message() - - search_list.html(result_list); - selected_categories_field.html(result_categories); - pagination.html(result_pagination); - software_count.html(result_software_count); - show_head_message(); - highlight_searched_terms(); - - hide_load_after_ajax(); - } - - - function hide_load_after_ajax() { - if ($("#overlay_loading_modal").is(":visible")) { - close_loading(); - setTimeout(hide_load_after_ajax, 1000); - } - } - - - 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 selectProjectSoftwareCheckbox() { - $("#filter-categories-option").slideUp(); - $("#filter-categories-select-catalog").show(); - $("#filter-option-catalog-software").hide(); - - dispatch_search_ajax(update_search_page_on_ajax, true); - show_head_message(); - } - - 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() { - $("#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); - $("#software_display").change(update_page_by_ajax_on_select_change); - $("#sort").change(update_page_by_ajax_on_select_change); - - search_input_keyup(); - } - - $(document).ready(function(){ - set_events(); - catalog_message(); - show_head_message(); - - - - $("#filter-categories-option").hide(); - }); -})(jQuery); diff --git a/public/views/search-software-catalog.js b/public/views/search-software-catalog.js new file mode 100644 index 0000000..6ea8ec3 --- /dev/null +++ b/public/views/search-software-catalog.js @@ -0,0 +1,231 @@ +modulejs.define('SearchSoftwareCatalog', ['jquery', 'NoosferoRoot'], function($, NoosferoRoot) { + 'use strict'; + + var AJAX_URL = { + software_infos: + NoosferoRoot.urlWithSubDirectory("/search/software_infos") + }; + + + function show_head_message() { + if ($("#filter-categories-select-catalog").text()){ + $("#filter-categories-select-catalog").hide(); + $("#filter-option-catalog-software").show(); + }else{ + $("#filter-categories-select-catalog").show(); + $("#filter-option-catalog-software").hide(); + } + } + + + function slideDowsCategoriesOptionAndHideOptionCatalog() { + $("#filter-categories-option").slideDown(); + $("#filter-option-catalog-software").hide(); + } + + + function slideDownCategoriesOptionAndHideCategoriesSelect() { + $("#filter-categories-option").slideDown(); + $("#filter-categories-select-catalog").hide(); + } + + + function slideUpCategoriesAndShowHeadMessage() { + $("#filter-categories-option").slideUp(); + show_head_message(); + } + + + function clearCatalogCheckbox(){ + $("#filter-categories-option").slideUp(); + $("#filter-option-catalog-software").show(); + $("#group-categories input:checked").each(function() { + $(this).prop('checked', false); + }); + + dispatch_search_ajax(update_search_page_on_ajax, true); + } + + + function selectCheckboxCategory() { + $("#filter-categories-option").slideUp(); + $("#filter-categories-select-catalog").show(); + $("#filter-option-catalog-software").hide(); + + dispatch_search_ajax(update_search_page_on_ajax, true); + } + + + function dispatch_search_ajax(callback, 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: callback, + 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){ + var div_result = $(".search-results-type-empty"); + var html = '
'+message+'
' + + div_result.replaceWith('
Nenhum software encontrado
'+message+'
') + } + + + function catalog_message(){ + var result_list = $("#search-results").find('.search-results-empty'); + var selected_categories_field = $("#filter-categories-select-catalog"); + + if(result_list.length > 1 && selected_categories_field.html().length < 1){ + get_result_div_core("Tente filtros mais abrangentes"); + }else if (result_list.length > 1 && selected_categories_field.html().length >= 1) { + get_result_div_core("Tente filtros mais abrangentes ou confira os softwares das categorias individualmente"); + } + } + + + 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(); + + catalog_message() + + search_list.html(result_list); + selected_categories_field.html(result_categories); + pagination.html(result_pagination); + software_count.html(result_software_count); + show_head_message(); + highlight_searched_terms(); + + hide_load_after_ajax(); + } + + + function hide_load_after_ajax() { + if ($("#overlay_loading_modal").is(":visible")) { + close_loading(); + setTimeout(hide_load_after_ajax, 1000); + } + } + + + 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 selectProjectSoftwareCheckbox() { + $("#filter-categories-option").slideUp(); + $("#filter-categories-select-catalog").show(); + $("#filter-option-catalog-software").hide(); + + dispatch_search_ajax(update_search_page_on_ajax, true); + show_head_message(); + } + + + 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() { + $("#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); + $("#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(); + show_head_message(); + + $("#filter-categories-option").hide(); + } + } +}); \ No newline at end of file -- libgit2 0.21.2