jQuery( document ).ready(function($) { // ajout d'un contains non sensible à la casse $.expr[":"].Contains = $.expr.createPseudo(function(arg) { return function( elem ) { return $(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0; }; }); $(".measure-wrapper .measure-title").click(function() { $(this).next(".measure-content").slideToggle(500, "swing"); $(this).toggleClass("open"); }) /** Filtrage des propositions **/ var css_selector = ".measure-wrapper, .measure-wrapper"; function clearSearchField() { $(".search-container #measure-search").val(""); } /* Par catégories */ // Au clic sur un des titres des catégories : on crée le div de filtre correspondnt (avec le slug en attr "statut") et on trigger l'event filtre $(".home-graph-item .status-title").click(function(){ var stat = $(this).attr("status"); // on conditionne l'action au fait que le filtre ne soit pas déjà actif if ( $("div.filters-container .filter-" + stat).length === 0) { var htmlFilter = "

"+ $(this).text() + "

+
"; $("div.filters-container").append(htmlFilter); $("div.filters-container").trigger("filters-change"); $([document.documentElement, document.body]).animate({ scrollTop: $(".measures-col").offset().top }, 200); } else { $("div.filters-container .filter-" + stat).remove(); $("div.filters-container").trigger("filters-change"); } } ); // Au clic sur une croix d'un filtre on supprime le div concerné et on trigger l'event filtre $("body").on("click", "div.filters-container .filter-close", function (){ $(this).closest('.measure-filter').remove(); $("div.filters-container").trigger("filters-change"); }); // Event filtre : on récupère les slugs des catégories présente dans la div des filtres, et on masque tous les autres. Si il n'y a aucun filtre on affiche tout. $("div.filters-container").on("filters-change", function() { clearSearchField(); // d'abord on remasque tout $(".measure-wrapper").hide(); // si aucun filtre on affiche tout if (!$.trim($("div.filters-container").html() )) { css_selector = ".measure-wrapper"; } //sinon on parcourt les filtres et on affiche les éléments correspondants else { css_selector = ""; $("div.filters-container > .measure-filter").each(function (index) { var stat = $(this).attr("status"); if (index !== 0) { css_selector += ", "; } css_selector += ".measure-wrapper.measure-" + stat; }) } //on affiche les mesures correspondant au sélecteur $(css_selector).show(); }); /* Par recherche texte */ $(".search-container #measure-search").keyup(function() { // récupération du query actuel var query = $.trim($(this).val()); if (query === "") { // si il est vide on affiche tout // on affiche toutes les propositions, en tenant compte des filtres éventuels $(css_selector).show(); } else { // on va chercher les mentions de ce query dans les mesures et on cache celles qui ne l'ont pas $(css_selector).show().not(':Contains(' + query + ')').hide(); } }); $(".search-container #measure-search-reset").click(function () { clearSearchField(); $(".search-container #measure-search").trigger("keyup"); }); });