958 lines
32 KiB
JavaScript
Vendored
958 lines
32 KiB
JavaScript
Vendored
|
|
$(document).ready(function() {
|
|
|
|
/******************************
|
|
Liste des dossiers
|
|
**********************************/
|
|
|
|
// ---- init des dossiers
|
|
if ( $( ".media_manager" ).length ) {
|
|
var sujetId = $("#sujet_selector").val();
|
|
if(sujetId != "")
|
|
initFolderManager(sujetId);
|
|
}
|
|
|
|
// ---- collapse/expand side menu
|
|
$(".close_side_menu").on('click', function(event) {
|
|
event.preventDefault();
|
|
if($(".side_menu ").hasClass('collapse')){
|
|
$(".side_menu ").removeClass('collapse')
|
|
$(".close_side_menu i").removeClass('fa-chevron-right');
|
|
$(".close_side_menu i").addClass('fa-chevron-left');
|
|
}else{
|
|
$(".side_menu ").addClass('collapse');
|
|
$(".close_side_menu i").removeClass('fa-chevron-left');
|
|
$(".close_side_menu i").addClass('fa-chevron-right');
|
|
}
|
|
});
|
|
|
|
// ---- init des dossiers lorsqu'on change de sujet
|
|
$("#sujet_selector").on('change', function(event) {
|
|
var sujetId = $("#sujet_selector").val();
|
|
if(sujetId != "")
|
|
$('.dd').nestable('destroy');
|
|
$(".currentFolder").val(0);
|
|
initFolderManager(sujetId);
|
|
});
|
|
|
|
// ---- sélectionner un dossier et favoris
|
|
$(".folder_container").on('click', '.dd3-content', function(e) {
|
|
e.preventDefault();
|
|
var target = e.target, $target = $(target);
|
|
var dossier_id = $target.parents(".dd3-item").attr("data-id");
|
|
|
|
if($target.hasClass('fa-star')){
|
|
// Gestion des favoris
|
|
var favoris = false;
|
|
if($target.hasClass("fas")){
|
|
$target.removeClass("fas").addClass("fal");
|
|
}else{
|
|
$target.removeClass("fal").addClass("fas");
|
|
favoris = true;
|
|
}
|
|
$.ajax({
|
|
url: '/ajax/favoris-folder',
|
|
method: 'POST',
|
|
dataType : 'json',
|
|
data: {
|
|
dossier_id: dossier_id,
|
|
favoris: favoris,
|
|
}
|
|
});
|
|
}else{
|
|
// simple sélection de dossier
|
|
$(".folder_container .dd3-content").removeClass('selected');
|
|
$(".folder_container .root_folder").removeClass('selected');
|
|
$(this).addClass('selected');
|
|
var sujet_id = $("#sujet_selector").val();
|
|
$(".currentFolder").val(dossier_id);
|
|
$(window).data('offset', 0);
|
|
loadMedia(dossier_id, sujet_id);
|
|
}
|
|
});
|
|
|
|
|
|
|
|
// ---- sélectionner la racine
|
|
$(".folder_container").on('click', '.root_folder', function(event) {
|
|
event.preventDefault();
|
|
$(".folder_container .dd3-content").removeClass('selected');
|
|
$(this).addClass('selected');
|
|
$(".currentFolder").val(0);
|
|
var sujetId = $("#sujet_selector").val();
|
|
$(window).data('offset', 0);
|
|
loadMedia(0, sujetId);
|
|
});
|
|
|
|
// ---- menu contextuel des dossiers
|
|
$(".folder_container").on('contextmenu', '.dd3-content', function(event) {
|
|
event.preventDefault();
|
|
// placement du menu
|
|
$(".folder_container .folder_menu").css({
|
|
left: event.pageX,
|
|
top:event.pageY-180
|
|
})
|
|
// memo l'id du dossier cible
|
|
var id = $(this).parent("li").attr("data-id");
|
|
$(".folder_container .folder_menu").attr('data-id', id);
|
|
// si c'est un dossier parent, on cache certaines options
|
|
if($(this).parent("li").hasClass("parent")){
|
|
$(".folder_menu .renameItem, .folder_menu .removeItem").hide();
|
|
}else{
|
|
$(".folder_menu .renameItem, .folder_menu .removeItem").show();
|
|
}
|
|
$(".folder_container .folder_menu").show();
|
|
});
|
|
|
|
// ---- ajouter un dossier
|
|
$(".folder_menu").on('click', '.addItem', function(event) {
|
|
event.preventDefault();
|
|
var parent_id = $(this).parents(".folder_menu").attr("data-id");
|
|
$(".folder_container .folder_menu").hide();
|
|
$(".folder_container .loader").show();
|
|
|
|
var folder = $('.dd .dd-item[data-id="'+parent_id+'"]');
|
|
if((folder.parents('.dd-item').length + 1) >= 5){
|
|
$.fancyMessage({title : "Attention", message : "Vous ne pouvez pas créer plus de 5 niveaux de sous-dossiers.", type : "info"});
|
|
$(".folder_container .loader").hide();
|
|
return false;
|
|
}
|
|
|
|
|
|
$.ajax({
|
|
url: '/ajax/add-folder',
|
|
method: 'POST',
|
|
dataType : 'json',
|
|
data: {
|
|
parent_id: parent_id,
|
|
libelle: 'Nouveau dossier',
|
|
},
|
|
success: function(result){
|
|
addItem(parent_id, result.folder_id, 'Nouveau dossier');
|
|
$(".folder_container .loader").hide();
|
|
},
|
|
error: function(jqXHR, textStatus, errorThrown) {
|
|
$(".folder_container .loader").hide();
|
|
$.fancyMessage({title : "Attention", message : "Erreur lors de l'ajout du dossier. Merci d'actualiser la page.", type : "error"});
|
|
}
|
|
});
|
|
});
|
|
|
|
// ---- supprimer un dossier
|
|
$(".folder_menu").on('click', '.removeItem', function(event) {
|
|
event.preventDefault();
|
|
var dossier_id = $(this).parents(".folder_menu").attr("data-id");
|
|
$(".folder_container .folder_menu").hide();
|
|
$(".folder_container .loader").show();
|
|
|
|
if(!$('.dd .dd-item[data-id="'+dossier_id+'"] > ol').length){
|
|
$.ajax({
|
|
url: '/ajax/remove-folder',
|
|
method: 'POST',
|
|
dataType : 'json',
|
|
data: {
|
|
dossier_id: dossier_id,
|
|
},
|
|
success: function(result){
|
|
// supprimer dossier
|
|
if(result == true){
|
|
$('.dd').nestable('remove', dossier_id);
|
|
}else{
|
|
$.fancyMessage({title : "Attention", message : "Erreur lors de la suppression du dossier. Merci d'actualiser la page.", type : "error"});
|
|
}
|
|
$(".folder_container .loader").hide();
|
|
},
|
|
error: function(jqXHR, textStatus, errorThrown) {
|
|
$(".folder_container .loader").hide();
|
|
$.fancyMessage({title : "Attention", message : "Erreur lors de la suppression du dossier. Merci d'actualiser la page.", type : "error"});
|
|
}
|
|
});
|
|
}else{
|
|
$(".folder_container .loader").hide();
|
|
$.fancyMessage({title : "Suppresion impossible", message : "Pour supprimer un dossier, vous devez d'abord vider son contenu (médias et sous-dossiers).", type : "error"});
|
|
}
|
|
});
|
|
|
|
// ---- renommer un dossier
|
|
$(".folder_menu").on('click', '.renameItem', function(event) {
|
|
event.preventDefault();
|
|
$(".folder_container .folder_menu").hide();
|
|
var dossier_id = $(this).parents(".folder_menu").attr("data-id");
|
|
$('.dd .dd-item[data-id="'+dossier_id+'"] > .dd3-content').addClass('renaming');
|
|
$('.renaming .input_rename').val($('.renaming span').html());
|
|
$('.renaming .input_rename').select();
|
|
});
|
|
|
|
$('.folder_container').on('focusout keyup', '.renaming .input_rename', function (e) {
|
|
if(e.type == "focusout" || (e.type == "keyup" && e.keyCode == 13)){
|
|
|
|
var libelle = $(this).val();
|
|
var dossier_id = $(this).parents(".dd3-item").attr("data-id");
|
|
var span = $(this).next();
|
|
var input = $(this);
|
|
$.ajax({
|
|
url: '/ajax/rename-folder',
|
|
method: 'POST',
|
|
dataType : 'json',
|
|
data: {
|
|
dossier_id: dossier_id,
|
|
libelle: libelle,
|
|
},
|
|
success: function(result){
|
|
if(result == true){
|
|
span.html(input.val());
|
|
}else{
|
|
$.fancyMessage({title : "Attention", message : "Le dossier n'a pas été renommé. Merci d'actualiser la page.", type : "error"});
|
|
}
|
|
$(".renaming").removeClass('renaming');
|
|
},
|
|
error: function(jqXHR, textStatus, errorThrown) {
|
|
$(".renaming").removeClass('renaming');
|
|
$.fancyMessage({title : "Attention", message : "Le dossier n'a pas été renommé. Merci d'actualiser la page.", type : "error"});
|
|
}
|
|
});
|
|
}
|
|
});
|
|
|
|
// ---- propriétés d'un dossier
|
|
$(".folder_menu").on('click', '.propertyItem', function(event) {
|
|
event.preventDefault();
|
|
$(".folder_container .folder_menu").hide();
|
|
var dossier_id = $(this).parents(".folder_menu").attr("data-id");
|
|
|
|
$.ajax({
|
|
url: '/ajax/get-folder-property',
|
|
method: 'POST',
|
|
dataType : 'json',
|
|
data: {
|
|
dossier_id: dossier_id,
|
|
},
|
|
success: function(result){
|
|
var dossier = result.data;
|
|
$.fancybox.open({
|
|
src : '#form_folder_property',
|
|
type : 'inline',
|
|
opts : {
|
|
animationDuration : 350,
|
|
animationEffect : 'material',
|
|
beforeShow : function( instance, current ) {
|
|
if(dossier.parent_id=== null){
|
|
$(".form_folder_save").hide();
|
|
}else{
|
|
$(".form_folder_save").show();
|
|
}
|
|
var date = new Date(dossier.created_at);
|
|
$(".form_folder_datecreate").html(date.toLocaleDateString('fr-FR', {'hour': '2-digit', 'minute': '2-digit'} ));
|
|
$("#form_folder_property").attr("data-id", dossier_id);
|
|
$(".form_folder_libelle").val(dossier.libelle);
|
|
$(".form_folder_description").val(dossier.description);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
});
|
|
});
|
|
|
|
// ---- enregistre les propriétés d'un dossier
|
|
$("html").on('click', '.form_folder_save', function(event) {
|
|
event.preventDefault();
|
|
|
|
var dossier_id = $("#form_folder_property").attr("data-id");
|
|
var libelle = $(".form_folder_libelle").val();
|
|
var description = $(".form_folder_description").val();
|
|
|
|
$.ajax({
|
|
url: '/ajax/save-folder-property',
|
|
method: 'POST',
|
|
dataType : 'json',
|
|
data: {
|
|
dossier_id: dossier_id,
|
|
libelle: libelle,
|
|
description: description,
|
|
},
|
|
success: function(result){
|
|
$(".folder_container .dd3-item[data-id='"+dossier_id+"'] > .dd3-content span").html(libelle);
|
|
$.fancybox.getInstance().close();
|
|
},
|
|
error: function(jqXHR, textStatus, errorThrown) {
|
|
$.fancybox.getInstance().close();
|
|
$.fancyMessage({title : "Attention", message : "Erreur lors de l'édition du dossier, merci d'actualiser la page.", type : "error"});
|
|
}
|
|
});
|
|
});
|
|
|
|
// ---- affichage des dossiers on draghover
|
|
$(".folder_container").on("dragover", ".dd3-content, .root_folder", function(event) {
|
|
event.preventDefault();
|
|
event.stopPropagation();
|
|
$(".folder_container .dd3-content").removeClass('dragged');
|
|
$(".folder_container .root_folder").removeClass('dragged');
|
|
$(this).addClass('dragged');
|
|
});
|
|
|
|
// ---- affichage des dossiers on dragleave
|
|
$(".folder_container").on("dragleave", ".dd3-content, .root_folder", function(event) {
|
|
event.preventDefault();
|
|
event.stopPropagation();
|
|
$(".folder_container .dd3-content").removeClass('dragged');
|
|
$(".folder_container .root_folder").removeClass('dragged');
|
|
});
|
|
|
|
// ---- evt lorsque l'on drop des élements dans un dossier
|
|
$(".folder_container").on("drop", ".dd3-content, .root_folder", function(event) {
|
|
event.preventDefault();
|
|
event.stopPropagation();
|
|
$(".folder_container .dd3-content").removeClass('dragged');
|
|
$(".folder_container .root_folder").removeClass('dragged');
|
|
// ---- Cible
|
|
if($(this).hasClass("root_folder")){
|
|
var dossier_id = $(this).attr("data-id");
|
|
}else{
|
|
var dossier_id = $(this).parent("li").attr("data-id");
|
|
}
|
|
// ---- source
|
|
var data = event.originalEvent.dataTransfer.getData("Text");
|
|
|
|
if($(".currentFolder").val() != dossier_id){
|
|
$.ajax({
|
|
url: '/ajax/move-media',
|
|
method: 'POST',
|
|
dataType : 'json',
|
|
data: {
|
|
dossier_id: dossier_id,
|
|
data: data,
|
|
},
|
|
success: function(result){
|
|
var currentFolderId = $(".currentFolder").val();
|
|
var arrayMediaId = data.split(',');
|
|
if(currentFolderId == 0){
|
|
var $countCurrentFolder = $(".folder_container .root_folder .count");
|
|
}else{
|
|
var $countCurrentFolder = $(".folder_container .dd3-item[data-id='"+currentFolderId+"'] > .dd3-content .count");
|
|
}
|
|
|
|
if(dossier_id == 0){
|
|
var $countTargetFolder = $(".folder_container .root_folder .count");
|
|
}else{
|
|
var $countTargetFolder = $(".folder_container .dd3-item[data-id='"+dossier_id+"'] > .dd3-content .count");
|
|
}
|
|
|
|
$.each(arrayMediaId, function(index, media_id) {
|
|
$(".media_container .imageItem[data-id='"+media_id+"']").remove(); // supprime les éléments déplacés
|
|
$countCurrentFolder.html(parseInt($countCurrentFolder.html())-1); // MAJ du compteur du dossier actuel
|
|
$countTargetFolder.html(parseInt($countTargetFolder.html())+1); // MAJ du compteur du dossier cible
|
|
});
|
|
},
|
|
error: function(jqXHR, textStatus, errorThrown) {
|
|
$.fancyMessage({title : "Attention", message : "Erreur lors du déplacement, merci d'actualiser la page.", type : "error"});
|
|
}
|
|
});
|
|
}
|
|
});
|
|
|
|
/******************************
|
|
Gestion des médias
|
|
**********************************/
|
|
|
|
// ---- au début du drag, set les valeurs des éléments draggés
|
|
$("html").on("dragstart", ".imageItem", function(event) {
|
|
var datavalue = [];
|
|
if($(this).attr("aria-grabbed") == "true"){
|
|
$(".imageItem").each(function(index, el) {
|
|
if($(this).attr("aria-grabbed") == "true"){
|
|
datavalue.push($(this).attr("data-id"));
|
|
}
|
|
});
|
|
event.originalEvent.dataTransfer.setData('Text', datavalue);
|
|
}else{
|
|
$(".imageItem").attr("aria-grabbed", "false");
|
|
$(this).attr("aria-grabbed", "true");
|
|
event.originalEvent.dataTransfer.setData('Text', $(this).attr("data-id"));
|
|
}
|
|
});
|
|
|
|
// ---- déselectionne les éléments si on clique en dehors
|
|
$(".main_content .wrapper").on("click", function(event) {
|
|
if (event.target !== this) return;
|
|
$(".imageItem").attr("aria-grabbed", "false");
|
|
$(".imageItem").removeClass('flip');
|
|
});
|
|
|
|
// ---- clique droit sur un média
|
|
$(".main_content .wrapper").on("contextmenu", '.imageItem' , function(event) {
|
|
event.preventDefault();
|
|
$(".imageItem").removeClass('flip');
|
|
$(this).addClass('flip')
|
|
});
|
|
|
|
// ---- double-clique sur un média
|
|
var drPlugin = null;
|
|
var viewer = null;
|
|
$(".main_content .wrapper").on("dblclick", '.imageItem' , function(event) {
|
|
event.preventDefault();
|
|
var minWidth = $(document).width();
|
|
var minHeight = $(document).height()-43-40;
|
|
|
|
// Mémorise le média courant
|
|
$(window).data('current_edit_media', $(this).attr('data-id'));
|
|
// sélectionne la tab preview à l'ouverture
|
|
$("#form_media .form_media_preview").trigger("click");
|
|
|
|
if($(this).attr('data-typemedia') == 1){ // média image
|
|
$("#form_media .form_media_retouch").show(); // on active l'onglet ressource
|
|
|
|
// charge l'image de preview
|
|
$(".preview_img").val($(this).attr('data-preview'));
|
|
$(".tab_preview").html('<div id="openseadragon" ></div>');
|
|
|
|
$("#openseadragon").css('width', '100%');
|
|
$("#openseadragon").css('height', minHeight);
|
|
viewer = OpenSeadragon({
|
|
id: "openseadragon",
|
|
tileSources: {
|
|
type: "image",
|
|
url: $(".preview_img").val(),
|
|
}
|
|
});
|
|
|
|
// charge l'image pour la retouche
|
|
$("#form_media .tab_retouch").html('<img id="drTarget" src="" >');
|
|
$("#drTarget").attr("src", $(this).attr('data-src'));
|
|
|
|
drPlugin = new Darkroom('#drTarget', {
|
|
minWidth: 200,
|
|
minHeight: 200,
|
|
maxWidth: minWidth,
|
|
maxHeight: minHeight,
|
|
plugins: {
|
|
save: {
|
|
callback: function() {
|
|
var newImage = this.darkroom.sourceCanvas.toDataURL();
|
|
$(".preview_img").val(newImage);
|
|
viewer.destroy(); viewer = null;
|
|
viewer = OpenSeadragon({
|
|
id: "openseadragon",
|
|
tileSources: {
|
|
type: "image",
|
|
url: $(".preview_img").val(),
|
|
}
|
|
});
|
|
}
|
|
},
|
|
}
|
|
});
|
|
}else if ($(this).attr('data-typemedia') == 2) { // média svg
|
|
$("#form_media .form_media_retouch").hide(); // masque l'onglet retouche
|
|
// charge le svg
|
|
$(".tab_preview").html('<img class="svgElt" src=""/>');
|
|
$(".tab_preview img").attr("src", $(this).attr('data-src'));
|
|
}else if ($(this).attr('data-typemedia') == 4) { // média audio
|
|
$("#form_media .form_media_retouch").hide(); // masque l'onglet retouche
|
|
// charge l'audio
|
|
$(".tab_preview").html('<audio controls src=""></audio>');
|
|
$(".tab_preview audio").attr("src", $(this).attr('data-src'));
|
|
}else if ($(this).attr('data-typemedia') == 3) { // média video
|
|
$("#form_media .form_media_retouch").hide(); // masque l'onglet retouche
|
|
// charge la vidéo
|
|
$(".tab_preview").html('<video src="" controls></video>');
|
|
$(".tab_preview video").attr("src", $(this).attr('data-src'));
|
|
}
|
|
// affiche la popin
|
|
$("#form_media").fadeIn('fast');
|
|
});
|
|
|
|
|
|
// ---- fermeture de la popup d'édition
|
|
$(".form_media_close").on("click" , function(event) {
|
|
event.preventDefault();
|
|
// masque la popin
|
|
$("#form_media").fadeOut('fast');
|
|
// si le plugin de retouche a déjà été chargé
|
|
if(drPlugin !== null){
|
|
drPlugin.selfDestroy(); drPlugin = null; // on détruit le plugin de retouche
|
|
viewer.destroy(); viewer = null; // on détruit le plugin de preview
|
|
}
|
|
// ---- Stop la vidéo ou le son si présent
|
|
if($(".tab_preview video").length){
|
|
$(".tab_preview video").get(0).pause()
|
|
}
|
|
if($(".tab_preview audio").length){
|
|
$(".tab_preview audio").get(0).pause()
|
|
}
|
|
$(".tab_edit .tab_content").scrollTop( 0 ); // on remonte la scrollbar de la tab edition
|
|
});
|
|
|
|
// ---- gestion des onglets de la popup d'édition
|
|
$("#form_media .tabbtn").on("click" , function(event) {
|
|
event.preventDefault();
|
|
// ---- Affiche l'onglet cliqué
|
|
var tabId = $(this).attr("data-tab");
|
|
$("#form_media .tabbtn").removeClass('active');
|
|
$(this).addClass('active')
|
|
$("#form_media .main_content .tab").removeClass('active');
|
|
$("#form_media .main_content .tab").eq(tabId).addClass('active');
|
|
|
|
// ---- Stop la vidéo ou le son si présent
|
|
if($(".tab_preview video").length){
|
|
$(".tab_preview video").get(0).pause()
|
|
}
|
|
if($(".tab_preview audio").length){
|
|
$(".tab_preview audio").get(0).pause()
|
|
}
|
|
});
|
|
|
|
// ---- gère la sélection des éléments
|
|
var lastSelected ;
|
|
$("html").on("click", ".imageItem", function(event) {
|
|
event.preventDefault();
|
|
$(".imageItem").removeClass('flip');
|
|
if(event.ctrlKey){
|
|
if($(this).attr("aria-grabbed") == "true"){
|
|
$(this).attr("aria-grabbed", "false");
|
|
}else{
|
|
$(this).attr("aria-grabbed", "true");
|
|
}
|
|
lastSelected = $(this);
|
|
}else if(event.shiftKey){
|
|
var select;
|
|
if(lastSelected == null){
|
|
lastSelected = $(this);
|
|
select = true
|
|
}else{
|
|
select = lastSelected.attr("aria-grabbed");
|
|
}
|
|
|
|
$(".imageItem").attr("aria-grabbed", "false");
|
|
var imageItem = $(".imageItem");
|
|
var last = imageItem.index(lastSelected);
|
|
var first = imageItem.index( $(this));
|
|
var start = Math.min(first, last);
|
|
var end = Math.max(first, last);
|
|
for (var i = start; i <= end; i++) {
|
|
imageItem.eq(i).attr("aria-grabbed", select);
|
|
}
|
|
}else{
|
|
if($(this).attr("aria-grabbed") == "true"){
|
|
$(".imageItem").attr("aria-grabbed", "false");
|
|
}else{
|
|
$(".imageItem").attr("aria-grabbed", "false");
|
|
$(this).attr("aria-grabbed", "true");
|
|
}
|
|
lastSelected = $(this);
|
|
}
|
|
});
|
|
|
|
// ---- Gestion de l'infinite scroll
|
|
$(".main_content .media_container").on("scroll resize", function() {
|
|
if ($(window).data('ajaxready') == false) return;
|
|
if ($(window).data('noMedia') == true) return;
|
|
|
|
if( ($(".media_container").scrollTop() + $(".media_container").height() ) == $(".media_container .wrapper").height() ) {
|
|
$(window).data('ajaxready', false);
|
|
var sujet_id = $("#sujet_selector").val();
|
|
var dossier_id = $(".currentFolder").val();
|
|
loadMedia(dossier_id, sujet_id);
|
|
}
|
|
});
|
|
|
|
/******************************
|
|
Edition d'un média
|
|
**********************************/
|
|
|
|
|
|
/******************************
|
|
Upload de média
|
|
**********************************/
|
|
|
|
// ---- Fermeture de la popup d'upload
|
|
$('#close_upload_form').on('click',function(event){
|
|
event.preventDefault();
|
|
$('.upload_container').hide("fast");
|
|
});
|
|
|
|
// ---- Ouvrir la popup d'upload
|
|
$('.action_add_media').on('click',function(event){
|
|
event.preventDefault();
|
|
$('.upload_container').show("fast");
|
|
});
|
|
|
|
// ---- Initialisation du module d'upload
|
|
if($('#fileupload').length){
|
|
$.ajaxSetup({
|
|
headers: {
|
|
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
|
|
}
|
|
});
|
|
|
|
var cancel_btn = $('<button/>')
|
|
.addClass('cancel')
|
|
.html('<i class="fal fa-times"></i>');
|
|
var upload_btn = $('<button/>')
|
|
.addClass('upload')
|
|
.css('display', 'none');
|
|
|
|
$('#submit').on('click',function(event){
|
|
event.preventDefault();
|
|
$("#upload_errors").html("");
|
|
$('.upload').click() //click upload buttons and upload all files in the queue
|
|
});
|
|
$('#cancel').on('click',function(event){
|
|
event.preventDefault();
|
|
$('.cancel').click() //click cancel buttons and remove all files in the queue
|
|
$("#upload_errors").html("");
|
|
});
|
|
|
|
$(".uploader-window").on("dragleave", function(){
|
|
$(this).stop().fadeOut( "fast");
|
|
});
|
|
|
|
var currentfiles = [];
|
|
$('#fileupload').fileupload({
|
|
url: "/ajax/upload-media",
|
|
dataType: 'json',
|
|
limitMultiFileUploads: 10,
|
|
maxChunkSize: 10000000,
|
|
dragover: function (e, data) {
|
|
$(".uploader-window").fadeIn( "fast");
|
|
},
|
|
add: function (e, data) {
|
|
|
|
data.files = $.map(data.files, function(file,i){
|
|
if ($.inArray(file.name,currentfiles) >= 0) {
|
|
$.fancyMessage({title : "Attention", message : "Nous ne pouvons pas envoyer plusieurs fichiers du même nom. Veuillez renommer vos fichiers puis essayez à nouveau.", type : "error"});
|
|
return null;
|
|
}
|
|
return file;
|
|
});
|
|
|
|
$.each(data.files, function (index, file) {
|
|
|
|
var uploadErrors = [];
|
|
var acceptFileTypes = /^(gif|jpe?g|png|mp4|mp3|psd|ai|eps|svg|indd|pdf)$/i;
|
|
if(file.name.split('.').pop().length && !acceptFileTypes.test(file.name.split('.').pop())) {
|
|
uploadErrors.push('Ce type de fichier n\'est pas accepté');
|
|
}
|
|
if(data.originalFiles[0]['size'].length && data.originalFiles[0]['size'] > 5000000) {
|
|
uploadErrors.push('La taille du fichier est trop grande.');
|
|
}
|
|
if(uploadErrors.length > 0) {
|
|
alert(uploadErrors.join("\n"));
|
|
return false;
|
|
}
|
|
|
|
currentfiles.push($.trim(file.name));
|
|
var row = document.createElement('div');
|
|
var col1 = document.createElement('div');
|
|
var col2 = document.createElement('div');
|
|
$(col1).append("<span>"+file.name+"</span>").append(cancel_btn.clone(true).data(data));
|
|
$(col2).append("<span>"+file.type+" - "+FileConvertSize(file.size)+"</span>");
|
|
$(col2).append(upload_btn.clone(true).data(data));
|
|
$(row).append(col1, col2);
|
|
$(".files").append(row);
|
|
|
|
$('.upload').eq(-1).on('click',function(){
|
|
data.formData = {
|
|
uid: create_UUID(),
|
|
sujet_id: $("#sujet_selector").val(),
|
|
dossier_id: $(".currentFolder").val(),
|
|
};
|
|
data.submit();
|
|
})
|
|
$('.cancel').eq(-1).on('click',function(){
|
|
$(this).parent().parent().remove();
|
|
currentfiles = arrayRemove(currentfiles, $.trim(file.name));
|
|
})
|
|
});
|
|
|
|
},
|
|
start: function (e, data) {
|
|
$('#progress').show();
|
|
},
|
|
drop: function (e, data) {
|
|
$(".uploader-window").stop().fadeOut( "fast");
|
|
},
|
|
done: function (e, data) {
|
|
$.each(data.files, function (index, file) {
|
|
currentfiles = arrayRemove(currentfiles, $.trim(file.name));
|
|
});
|
|
//---- Chargement des médias
|
|
var currentFolder = $(".currentFolder").val();
|
|
if(currentFolder == 0 || currentFolder == ""){
|
|
var count = $(".folder_container .root_folder .count");
|
|
}else{
|
|
var count = $(".folder_container .dd3-item[data-id='"+currentFolder+"'] > .dd3-content .count");
|
|
}
|
|
count.html(parseInt(count.html())+data.files.length);
|
|
},
|
|
stop: function (e,) {
|
|
$(".files").html("");
|
|
currentfiles = [];
|
|
$('#progress .progress-bar').css('width', '0%');
|
|
$('#progress').hide();
|
|
$('.upload_container').hide("fast");
|
|
var currentFolder = $(".currentFolder").val();
|
|
if(currentFolder == 0 || currentFolder == ""){
|
|
$(".root_folder").trigger("click");
|
|
}else{
|
|
$('.dd .dd-item[data-id="'+currentFolder+'"] > .dd3-content').trigger("click");
|
|
}
|
|
},
|
|
fail: function (e, data) {
|
|
$.each(data.files, function (index, file) {
|
|
$('<p style="color: red;">Erreur durant le transfert du fichier ' + file.name + '.</p>')
|
|
.appendTo('#upload_errors');
|
|
currentfiles = arrayRemove(currentfiles, $.trim(file.name));
|
|
});
|
|
},
|
|
progressall: function (e, data) {
|
|
var progress = parseInt(data.loaded / data.total * 100, 10);
|
|
$('#progress .progress-bar').css(
|
|
'width',
|
|
progress + '%'
|
|
);
|
|
}
|
|
}).prop('disabled', !$.support.fileInput)
|
|
.parent().addClass($.support.fileInput ? undefined : 'disabled');
|
|
}
|
|
});
|
|
|
|
// ---- init des dossiers
|
|
function initFolderManager(sujetId){
|
|
$(".folder_container .loader").show();
|
|
$.ajaxSetup({
|
|
headers: {
|
|
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
|
|
}
|
|
});
|
|
$.ajax({
|
|
url: '/ajax/load-folder',
|
|
method: 'POST',
|
|
dataType : 'json',
|
|
data: {
|
|
sujetId: sujetId,
|
|
},
|
|
success: function(result){
|
|
var output = '';
|
|
var draggable = result.draggable;
|
|
var data = result.data;
|
|
var total = result.count;
|
|
$(".root_folder .count").html(total);
|
|
|
|
$.each(data, function (index, item) {
|
|
output += buildItem(item);
|
|
});
|
|
$('.folder_container .dd .dd-list').html(output);
|
|
$('.dd').nestable({
|
|
scroll: true,
|
|
onDragStart: function(l,e){
|
|
if($(e).hasClass("parent")){ // pour empêcher le déplacement des dossiers parents
|
|
return false;
|
|
}
|
|
return draggable;
|
|
},
|
|
beforeDragStop: function(l,e, p){
|
|
// l is the main container, e is the element that was moved, p is the place where element was moved.
|
|
if($(p).hasClass('root')){
|
|
$.fancyMessage({title : "Attention", message : "Vous ne pouvez pas déplacer un dossier à la racine.", type : "error"});
|
|
return false;
|
|
}
|
|
var r = confirm("Etes-vous sûr d'appliquer ce déplacement ?");
|
|
if (r == true) {
|
|
var dossier_id = $(e).attr("data-id");
|
|
var parent_id = $(p).parent("li").attr("data-id");
|
|
$(".folder_container .loader").show();
|
|
$.ajax({
|
|
url: '/ajax/move-folder',
|
|
method: 'POST',
|
|
dataType : 'json',
|
|
data: {
|
|
parent_id : parent_id,
|
|
dossier_id : dossier_id,
|
|
},
|
|
success: function(result){
|
|
$(".folder_container .loader").hide();
|
|
},
|
|
error: function(jqXHR, textStatus, errorThrown) {
|
|
$(".folder_container .loader").hide();
|
|
$.fancyMessage({title : "Attention", message : "Erreur lors du déplacement du dossier. Merci d'actualiser la page.", type : "error"});
|
|
}
|
|
});
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
});
|
|
//('.dd').nestable('collapseAll');
|
|
$(".folder_container .dd-empty").remove();
|
|
$(".folder_container .loader").hide();
|
|
//---- Chargement des médias
|
|
var currentFolder = $(".currentFolder").val();
|
|
if(currentFolder == 0 || currentFolder == ""){
|
|
$(".root_folder").trigger("click");
|
|
}else{
|
|
$('.dd .dd-item[data-id="'+currentFolder+'"] > .dd3-content').trigger("click");
|
|
}
|
|
},
|
|
error: function(jqXHR, textStatus, errorThrown) {
|
|
$(".folder_container .loader").hide();
|
|
$.fancyMessage({title : "Attention", message : "Erreur lors du chargement des dossiers. Merci d'actualiser la page.", type : "error"});
|
|
}
|
|
});
|
|
}
|
|
|
|
// ---- Chargement des média
|
|
$(window).data('offset', 0);
|
|
$(window).data('limit', 50);
|
|
function loadMedia(dossier_id, sujet_id){
|
|
var output = '';
|
|
if($(window).data('offset') == 0){
|
|
$(window).data('noMedia', false);
|
|
$('.media_container .wrapper').html("");
|
|
$(".media_container .loader").show();
|
|
}else{
|
|
$(".main_content .scrollLoader").show();
|
|
}
|
|
|
|
$.ajax({
|
|
url: '/ajax/load-media',
|
|
method: 'POST',
|
|
dataType : 'json',
|
|
data: {
|
|
dossier_id : dossier_id,
|
|
sujet_id : sujet_id,
|
|
offset : $(window).data('offset'),
|
|
limit : $(window).data('limit'),
|
|
},
|
|
success: function(result){
|
|
var data = result.data;
|
|
if(data.length == 0){
|
|
$(window).data('noMedia', true);
|
|
}
|
|
|
|
$.each(data, function (index, item) {
|
|
var ico = "";
|
|
var detail = "";
|
|
var itemClass = "";
|
|
var thumb = "";
|
|
var preview = "";
|
|
switch (item.typemedia_id) {
|
|
case 1:
|
|
ico = '<i class="fas fa-file-image"></i>';
|
|
detail = " - "+item.largeur+"x"+item.hauteur+"px";
|
|
thumb = item.source.split('.')[0]+"_thumb."+item.extension;
|
|
preview = item.source.split('.')[0]+"_preview."+item.extension;
|
|
break;
|
|
case 2:
|
|
ico = '<i class="fas fa-file-image"></i>';
|
|
thumb = item.source;
|
|
preview = item.source;
|
|
break;
|
|
case 3:
|
|
ico = '<i class="fas fa-file-video"></i>';
|
|
detail = " - durée "+item.duree;
|
|
itemClass = "video";
|
|
break;
|
|
case 4:
|
|
ico = '<i class="fas fa-file-audio"></i>';
|
|
detail = " - durée "+item.duree;
|
|
itemClass = "son";
|
|
break;
|
|
case 5:
|
|
ico = '<i class="fas fa-file"></i>';
|
|
itemClass = "doc";
|
|
break;
|
|
default:
|
|
|
|
}
|
|
|
|
output += '<div class="imageItem" data-id="'+item.id+'" data-typemedia="'+item.typemedia_id+'" data-preview="'+preview+'" data-src="'+ item.source+'" draggable="true" aria-grabbed="false">';
|
|
output += '<div class="contextMenu"><ul>';
|
|
output += '<li class="menu-option editItem"><i class="fas fa-edit"></i> Editer</li>';
|
|
output += '<li class="menu-option downloadItem"><i class="fas fa-file-download"></i> Télécharger</li>';
|
|
output += '<li class="menu-option addBasket"><i class="fas fa-shopping-basket"></i> Ajouter au panier</li>';
|
|
output += '<li class="menu-option deleteItem"><i class="fas fa-trash-alt"></i> Supprimer</li>';
|
|
output += '<li class="menu-option tagItem"><i class="fas fa-tags"></i> Etiquette</li>';
|
|
output += '</ul></div>';
|
|
output += '<div class="media '+itemClass+'" style="background-image:url('+thumb+')"></div>';
|
|
output += '<p class="libelle">'+item.libelle+'</p>';
|
|
output += '<div class="info">'+ico+item.extension+' - '+item.taille+detail+'</div>';
|
|
output += '</div>';
|
|
});
|
|
$('.media_container .wrapper').append(output);
|
|
|
|
if($(window).data('offset') == 0){
|
|
$(".media_container .loader").hide();
|
|
}else{
|
|
$(".main_content .scrollLoader").hide();
|
|
}
|
|
$(window).data('offset', $(window).data('offset')+$(window).data('limit'));
|
|
$(window).data('ajaxready', true);
|
|
}
|
|
});
|
|
}
|
|
|
|
// ---- contruction de l'arborescence des dossiers
|
|
function buildItem(item) {
|
|
var parentClass = "";
|
|
var handleClass = "";
|
|
var favClass="fal";
|
|
if(item.parent_id === null){
|
|
parentClass="parent";
|
|
handleClass= "no-handle";
|
|
}
|
|
if(item.favoris == true){
|
|
favClass="fas";
|
|
}
|
|
|
|
var html = "<li class='dd-item dd3-item "+parentClass+" ' data-id='" + item.id + "'>";
|
|
html += "<div class='dd-handle dd3-handle "+handleClass+"'></div>";
|
|
html += "<div class='dd3-content'><input type='text' value='' class='input_rename' maxlength='100'/><span>" + item.libelle + "</span><div class='count'>" + item.mediacount + "</div><i class='"+favClass+" fa-star'></i></div>";
|
|
|
|
if (item.sousdossiers.length) {
|
|
html += "<ol class='dd-list'>";
|
|
$.each(item.sousdossiers, function (index, sub) {
|
|
html += buildItem(sub);
|
|
});
|
|
html += "</ol>";
|
|
|
|
}
|
|
html += "</li>";
|
|
return html;
|
|
}
|
|
|
|
// ---- ajouter un dossier
|
|
function addItem(parent_id, item_id, content){
|
|
if(!$('.dd .dd-item[data-id="'+parent_id+'"] > ol').length){
|
|
$('.dd .dd-item[data-id="'+parent_id+'"]').append("<ol class='dd-list'></ol>");
|
|
$('.dd .dd-item[data-id="'+parent_id+'"]').prepend("<button class='dd-collapse' data-action='collapse' type='button'>Collapse</button><button class='dd-expand' data-action='expand' type='button'>Expand</button>");
|
|
}
|
|
|
|
var html = "<li class='dd-item dd3-item' data-id='" + item_id + "'>";
|
|
html += "<div class='dd-handle dd3-handle'></div>";
|
|
html += "<div class='dd3-content'><input type='text' value='' class='input_rename' maxlength='100' /><span>" + content + "</span><div class='count'>0</div><i class='fal fa-star'></i></div></li>";
|
|
$('.dd .dd-item[data-id="'+parent_id+'"] > ol').append(html);
|
|
}
|
|
|
|
function arrayRemove(arr, value) {
|
|
return arr.filter(function(ele){
|
|
return ele != value;
|
|
});
|
|
}
|
|
|
|
function FileConvertSize(aSize){
|
|
aSize = Math.abs(parseInt(aSize, 10));
|
|
var def = [[1, 'octets'], [1024, 'ko'], [1024*1024, 'Mo'], [1024*1024*1024, 'Go'], [1024*1024*1024*1024, 'To']];
|
|
for(var i=0; i<def.length; i++){
|
|
if(aSize<def[i][0]) return (aSize/def[i-1][0]).toFixed(2)+' '+def[i-1][1];
|
|
}
|
|
}
|
|
|
|
function create_UUID(){
|
|
var dt = new Date().getTime();
|
|
var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
|
|
var r = (dt + Math.random()*16)%16 | 0;
|
|
dt = Math.floor(dt/16);
|
|
return (c=='x' ? r :(r&0x3|0x8)).toString(16);
|
|
});
|
|
return uuid;
|
|
}
|