ldc-dam/resources/js/searchengine.js
2019-07-25 09:43:06 +02:00

167 lines
5.1 KiB
JavaScript
Vendored

$(document).ready(function() {
/******************************
Moteur de recherche de médias
**********************************/
// ---- Initialisation du module de recherche
if($('.search_wrapper').length){
// ---- Initialisation des listes
$(".filter_selector .filter_btn").on('click',function(event) {
$(".filter_selector .list").not($(this).parent().find(".list")).hide();
$(this).parent().find(".list").toggle();
});
// ---- Initialisation du champ de recherche
$(".search_filters .search_value").on('keypress',function(event) {
if (event.keyCode == 13) {
$(".search_filters .search_btn").trigger('click');
}
});
// ---- Clique sur le bouton de recherche
$(".search_filters .search_btn").on('click', function(event) {
// on créé un object filtre
var filter = {
type: "search",
legend : "Recherche : ",
value: $(".search_filters .search_value").val(),
libelle: [$(".search_filters .search_value").val()],
};
// MAJ du filtre principal et de l'affichage
updateFilter(filter);
// On lance la recherche
var sujet_id = $("#sujet_selector").val();
$(window).data('offset', 0);
loadMedia(sujet_id, 1);
});
// ---- Clique sur un filtre
$(".filter").on('click', 'input[type="checkbox"]', function(event) {
var values = [];
var libelles = [];
// on créé un object filtre
var filter = {
type: $(this).parents(".filter").attr('data-type'),
legend : $(this).parents(".filter").attr('data-lib-type'),
value: [],
libelle: [],
};
// on y insère toutes les valeurs de ce même type de filtre
$(this).parents(".filter").find('input[type="checkbox"]').each(function (index, cb){
if($(this).is(':checked')){
filter.value.push($(this).val());
filter.libelle.push($(this).next("label").html());
}
});
// MAJ du filtre principal et de l'affichage
updateFilter(filter);
// On lance la recherche
var sujet_id = $("#sujet_selector").val();
$(window).data('offset', 0);
loadMedia(sujet_id);
});
// ---- Réinitialisation de la recherche
$(".reinit_search_btn").on('click', function(event) {
event.preventDefault();
// Vide la bar recherche
$.each(Object.keys($(window).data('filter')), function (index, value) {
if(value != "currentFolder")
$(".search_filters_list #"+value).remove();
});
// supprime tous les éléments de recherche
$(window).data('filter', {});
// masque le bouton de reinitialisation
$(".filter_wrapper .reinit_search_btn").hide();
// ---- Initialisation des listes
$(".filter").find('input[type="checkbox"]').prop( "checked", false );
// On lance la recherche
var sujet_id = $("#sujet_selector").val();
$(window).data('offset', 0);
loadMedia(sujet_id);
});
// ---- Suppression d'un filtre
$(".search_filters_list").on('click', '.filter_item', function(event) {
event.preventDefault();
var filters = $(window).data('filter');
var type = $(this).attr('id');
// Supprime l'élément dans la bar recherche
$(".search_filters_list #"+type).remove();
if(type == "currentFolder"){
$(".folder_container .dd3-content").removeClass('selected');
$(".folder_container .root_folder").removeClass('selected');
$(window).data('currentFolder', -1);
}else{
// supprime la propriété dans l'objet
if("undefined" !== typeof(filters[type]) ){ // si l'object à cette propriété
delete filters[type]; // on l'a supprime
}
$(window).data('filter', filters);
// ---- Initialisation des listes
$(".search_filters .filter[data-type='"+type+"']").find('input[type="checkbox"]').prop( "checked", false );
}
// masque le bouton de reinitialisation
if(Object.keys($(window).data('filter')).length == 0){
$(".filter_wrapper .reinit_search_btn").hide();
}
// On lance la recherche
var sujet_id = $("#sujet_selector").val();
$(window).data('offset', 0);
loadMedia(sujet_id);
});
}
});
window.updateFilter = function(filter){
var filters = $(window).data('filter');
// si ce filtre n'a pas de valeur
if(filter.value.length == 0 ){
$(".search_filters_list #"+filter.type).remove(); // on supprime le filtre de la liste
if("undefined" !== typeof(filters[filter.type]) ){ // si l'object à cette propriété
delete filters[filter.type]; // on l'a supprime
}
// si on a des valeurs pour ce filtre
}else{
// on met à jour l'objet filtre
filters[filter.type] = filter;
$(window).data('filter', filters);
// si le filtre n'existe pas dans la liste on l'ajoute
if(!$(".search_filters_list #"+filter.type).length){
var output = '<a id="'+filter.type+'" class="filter_item" href="#">';
output += '<span class="libelle">'+filter.legend+'</span>';
output += '<span class="value"></span>';
output += '<i class="delete_filter fal fa-times"></i>';
output += '</a>';
$(".search_filters_list").append(output);
}
$(".search_filters_list #"+filter.type+" .value").html(filter.libelle.join());
}
// affiche/masque le bouton de reinitialisation
if(Object.keys($(window).data('filter')).length > 0){
$(".filter_wrapper .reinit_search_btn").show();
}else{
$(".filter_wrapper .reinit_search_btn").hide();
}
}