ldc-dam/resources/js/panier.js
2019-08-06 14:38:07 +02:00

449 lines
14 KiB
JavaScript
Vendored

$(document).ready(function() {
/***************************
Widget panier
*****************************/
if ( $( ".panier_side_menu" ).length ) {
// ---- collapse/expand panier side menu
$("#menu_panier").on('click', function(event) {
event.preventDefault();
$(".panier_side_menu .panier_menu").toggle();
});
// ---- Chargement par défaut du premier panier
if($("#panier_selector").val()){
$(window).data('currentBasket', $("#panier_selector").val());
loadBasket($(window).data('currentBasket'));
}
// ---- chargement du panier on change du sélector
$("#panier_selector").on('change', function(event) {
$(window).data('currentBasket', $("#panier_selector").val());
loadBasket($(window).data('currentBasket'));
});
// ---- Ajout de média au panier en masse
$('.action_add_basket').on('click',function(event){
event.preventDefault();
var medias = [];
$('.media_container .imageItem').each(function (index) {
if( $(this ).attr("aria-grabbed") == "true" ){
medias.push($(this ).attr("data-id"));
}
});
addMediasBasket(medias);
});
// ---- Ajout un nouveau panier
$('.panier_side_menu .add_panier').on('click',function(event){
event.preventDefault();
$(".panier_side_menu .panier_menu").hide();
var d = new Date();
var strDate = ("0" +d.getDate()).slice(-2)+ "/" + ("0" +(d.getMonth()+1)).slice(-2) + "/" + d.getFullYear();
var defaultTitle = "Panier du "+strDate;
var title = prompt("Indiquez le libellé de votre nouveau panier", defaultTitle);
if(title != ""){
$.ajax({
url: '/ajax/add-basket',
method: 'POST',
dataType : 'json',
data: {
title: title,
},
success: function(result){
if(result){
$("#panier_selector").append(new Option(result.libelle, result.id));
$("#panier_selector").val(result.id);
$("#panier_selector").trigger("change");
}
},
error: function(jqXHR, textStatus, errorThrown) {
$.fancybox.close();
$.fancyMessage({title : "Attention", message : "Erreur lors de la création du panier, merci d'actualiser la page.", type : "error"});
}
});
}
});
// ---- Aller au panier
$('.panier_side_menu .goto_panier').on('click',function(event){
event.preventDefault();
$(".panier_side_menu .panier_menu").hide();
window.location.href = $(this).attr("data-url")+"?p="+$(window).data('currentBasket');
});
// ---- Supprimer le panier
$('.panier_side_menu .remove_panier').on('click',function(event){
event.preventDefault();
if($(window).data('currentBasket') == null){
$.fancyMessage({title : "Suppression de panier", message : "Veuillez sélectionner un panier à supprimer.", type : "info"});
return false;
}
$.fancyConfirm({
title : "Suppression de panier",
message : "Êtes-vous sûr de vouloir supprimer ce panier ?",
okButton : 'Supprimer',
noButton : 'Annuler',
callback : function (value) {
if (value) {
// sauvegarde de l'image en base
$.ajax({
url: '/ajax/remove-basket',
method: 'POST',
dataType : 'json',
data: {
basket_id: $(window).data('currentBasket'),
},
success: function(result){
$(".panier_side_menu .panier_content").html("");
$("#panier_selector option[value='"+$(window).data('currentBasket')+"']").remove();
$("#panier_selector").val($("#panier_selector option:first").val());
$("#panier_selector").trigger("change");
},
error: function(jqXHR, textStatus, errorThrown) {
$.fancybox.close();
$.fancyMessage({title : "Suppression de panier", message : "Erreur lors de la suppression, merci d'actualiser la page.", type : "error"});
}
});
}
}
});
});
// ---- Propriétés d'un panier
$('.panier_side_menu .info_panier').on('click',function(event){
event.preventDefault();
if($(window).data('currentBasket') == null){
$.fancyMessage({title : "Propriétés du panier", message : "Veuillez sélectionner un panier.", type : "info"});
return false;
}
$.ajax({
url: '/ajax/get-basket',
method: 'POST',
dataType : 'json',
data: {
basket_id : $(window).data('currentBasket'),
},
success: function(result){
if(result){
var basket = result.basket;
$.fancybox.open({
src : '#form_basket_property',
type : 'inline',
opts : {
animationDuration : 350,
animationEffect : 'material',
beforeShow : function( instance, current ) {
var date = new Date(basket.created_at);
$(".form_basket_datecreate").html(date.toLocaleDateString('fr-FR', {'hour': '2-digit', 'minute': '2-digit'} ));
$(".form_basket_libelle").val(basket.libelle);
$(".form_basket_description").val(basket.description);
$(".form_basket_statut").val(basket.statut);
$(".form_basket_link").val(result.link);
}
}
});
}
},
error: function(jqXHR, textStatus, errorThrown) {
$.fancybox.close();
$.fancyMessage({title : "Attention", message : "Erreur lors de la suppression du média, merci d'actualiser la page.", type : "error"});
}
});
});
// ---- enregistre les propriétés d'un panier
$("html").on('click', '.form_basket_save', function(event) {
event.preventDefault();
var libelle = $(".form_basket_libelle").val();
if(libelle == ""){
$.fancyMessage({title : "Propriétés d'un dossier", message : "Vous devez indiquer un nom de panier.", type : "error"});
return false;
}
$(".form_basket_save").addClass('loading');
$.ajax({
url: '/ajax/save-basket-property',
method: 'POST',
dataType : 'json',
data: {
basket_id: $(window).data('currentBasket'),
libelle: libelle,
description: $(".form_basket_description").val(),
statut: $(".form_basket_statut").val(),
},
success: function(result){
$(".form_basket_save").removeClass('loading');
$("#panier_selector option[value='"+$(window).data('currentBasket')+"']").text(result.libelle);
$.fancybox.close();
},
error: function(jqXHR, textStatus, errorThrown) {
$(".form_basket_save").removeClass('loading');
$.fancybox.close();
$.fancyMessage({title : "Attention", message : "Erreur lors de l'édition du panier, merci d'actualiser la page.", type : "error"});
}
});
});
// ---- Supprimer un média du panier
$('.panier_content').on('click', ".imageItem .media_remove_basket",function(event){
event.preventDefault();
var $media = $(this).parents(".imageItem");
var media_id = $media.attr("data-id");
$.ajax({
url: '/ajax/remove-media-basket',
method: 'POST',
dataType : 'json',
data: {
media_id: media_id,
panier_id : $(window).data('currentBasket'),
},
success: function(result){
if(result){
$(".panier_side_menu .imageItem[data-id='"+media_id+"']").remove();
}
},
error: function(jqXHR, textStatus, errorThrown) {
$.fancybox.close();
$.fancyMessage({title : "Attention", message : "Erreur lors de la suppression du média, merci d'actualiser la page.", type : "error"});
}
});
});
// ---- Supprimer un média du panier
$('.panier_content').on('click', ".imageItem .media_info",function(event){
event.preventDefault();
var $media = $(this).parents(".imageItem");
$media.trigger('dblclick');
});
// ---- gestion du dragover
$(".panier_content").on("dragover", function(event) {
event.preventDefault();
event.stopPropagation();
});
// ---- gestion du dragleave
$(".panier_content").on("dragleave", function(event) {
event.preventDefault();
event.stopPropagation();
});
// ---- evt lorsque l'on drop des élements dans le widget panier
$(".panier_content").on("drop", function(event) {
event.preventDefault();
event.stopPropagation();
var isMediaDepot = false;
if ($(window).data('currentBasket') == null) {
$.fancyMessage({title : "Ajout de média au panier", message : "Veuillez sélectionner un panier.", type : "info"});
return false;
}
// source
var medias = event.originalEvent.dataTransfer.getData("Text").split(",");
// Contrôles
$.each(medias, function (index, media_id) {
if($(".media_container .imageItem[data-id='"+media_id+"']").attr("data-depot") == "1"){
$.fancyMessage({title : "Attention", message : "Vous ne pouvez pas mettre les médias du dépôt dans un panier.", type : "error"});
isMediaDepot = true;
return false;
}
});
// Ajout des médias dans le panier
if(!isMediaDepot){
$.ajax({
url: '/ajax/add-media-basket',
method: 'POST',
dataType : 'json',
data: {
medias: medias,
panier_id : $(window).data('currentBasket'),
},
success: function(result){
if(result){
$.each(result, function (index, media) {
addmediaBasketHtml(media);
});
}
},
error: function(jqXHR, textStatus, errorThrown) {
$.fancybox.close();
$.fancyMessage({title : "Attention", message : "Erreur lors de l'ajout de média au panier, merci d'actualiser la page.", type : "error"});
}
});
}
});
}
/****************************************
Page publique des paniers
*****************************************/
if ( $( ".public_basket" ).length ) {
// ---- Aperçu des médias du panier
$(".public_basket ").on("dblclick", '.imageItem' , function(event) {
var imgPreview = $(this).attr('data-preview')+'?t='+ new Date().getTime();
if($(this).attr('data-typemedia') == 1|| $(this).attr('data-typemedia') == 2){ // image
$.fancybox.open('<img style="width: 640px; height:auto;" src="'+imgPreview+'" alt="" />');
}else if ($(this).attr('data-typemedia') == 3) { // vidéo
$.fancybox.open('<video src="'+$(this).attr('data-src')+'" controls></video>');
}else if ($(this).attr('data-typemedia') == 4) { // Audio
$.fancybox.open('<audio controls src="'+$(this).attr('data-src')+'"></audio>');
}
});
// ---- Propriétés d'un panier
$('.public_basket .btn_basket_Info').on('click',function(event){
event.preventDefault();
$.fancybox.open({
src : '#form_basket_property',
type : 'inline',
opts : {
animationDuration : 350,
animationEffect : 'material',
}
});
});
// ---- Popup pour télécharger des médias en masse
$('.public_basket .btn_basket_download').on('click',function(event){
event.preventDefault();
var medias = [];
$('.media_container .imageItem').each(function (index) {
if( $(this ).attr("aria-grabbed") == "true" ){
medias.push($(this ).attr("data-id"));
}
});
if(medias.length == 0){
$.fancyMessage({title : "Télécharger des médias", message : "Veuillez sélectionner au moins un média.", type : "info"});
}else{
$("#form_download").fancybox({
type : 'inline',
opts : {
animationDuration : 350,
animationEffect : 'material',
},
beforeShow : function() {
$("#form_download .medias").val(medias.join());
}
}).trigger("click");
}
});
}
});
// ---- Ajout de médias au panier
window.addMediasBasket = function(medias){
var thumb = "";
var preview = "";
var content = "";
if(medias.length == 0){
$.fancyMessage({title : "Ajout de média au panier", message : "Veuillez sélectionner les médias à ajouter.", type : "info"});
}else if ($(window).data('currentBasket') == null) {
$.fancyMessage({title : "Ajout de média au panier", message : "Veuillez sélectionner un panier.", type : "info"});
}else{
$.ajax({
url: '/ajax/add-media-basket',
method: 'POST',
dataType : 'json',
data: {
medias: medias,
panier_id : $(window).data('currentBasket'),
},
success: function(result){
if(result){
$.each(result, function (index, media) {
addmediaBasketHtml(media);
});
}
},
error: function(jqXHR, textStatus, errorThrown) {
$.fancybox.close();
$.fancyMessage({title : "Attention", message : "Erreur lors de l'ajout de média au panier, merci d'actualiser la page.", type : "error"});
}
});
}
}
// ---- Charge un panier dans le widget
function loadBasket(panierId){
if(panierId != null){
$.ajax({
url: '/ajax/load-basket',
method: 'POST',
dataType : 'json',
data: {
panier_id : $(window).data('currentBasket'),
},
success: function(result){
if(result){
$(".panier_side_menu .panier_content").html("");
$.each(result.medias, function (index, media) {
addmediaBasketHtml(media);
});
}
},
error: function(jqXHR, textStatus, errorThrown) {
$.fancybox.close();
$.fancyMessage({title : "Attention", message : "Erreur lors du chargement du panier, merci d'actualiser la page.", type : "error"});
}
});
}
}
// ---- Ajoute un média dans le widget panier
function addmediaBasketHtml(media){
var thumb = "";
var preview = "";
var content = "";
var itemClass = "";
switch (media.typemedia_id) {
case 1:
itemClass = "";
if(media.extension == "pdf" || media.extension == "ai" || media.extension == "psd"){
thumb = media.folder+media.uid+"_thumb.png";
preview = media.folder+media.uid+"_preview.png";
}else{
thumb = media.folder+media.uid+"_thumb."+media.extension;
preview = media.folder+media.uid+"_preview."+media.extension;
}
break;
case 2:
itemClass = "";
thumb = media.folder+media.uid+"."+media.extension;
preview = media.folder+media.uid+"."+media.extension;
break;
case 3:
itemClass = "video";
thumb = "";
preview = media.folder+media.uid+"."+media.extension;
break;
case 4:
itemClass = "son";
thumb = "";
preview = media.folder+media.uid+"."+media.extension;
break;
default:
}
content = '<div class="imageItem" data-id="'+media.id+'" data-depot="'+media.isDepot+'" data-ext="'+media.extension+'" data-typemedia="'+media.typemedia_id+'" data-preview="'+preview+'" data-src="'+media.folder+media.uid+"."+media.extension+'" draggable="false" aria-grabbed="false">';
content += '<div class="media '+itemClass+'" style="background-image:url('+thumb+')"></div>';
content += '<div class="bar"> <a href="#" class="media_info"><i class="far fa-info-circle"></i></a><a href="#" class="media_remove_basket"><i class="far fa-times-circle"></i></a></div>';
content += '</div>';
$(".panier_side_menu .panier_content").append(content);
}