diff --git a/app/Http/Controllers/UploadController.php b/app/Http/Controllers/UploadController.php index fe3170d..3667a1d 100644 --- a/app/Http/Controllers/UploadController.php +++ b/app/Http/Controllers/UploadController.php @@ -112,9 +112,14 @@ class UploadController extends Controller { $media->hauteur = $height; $media->resolution = $this->get_dpi($destinationPath.$filename); $this->createThumbnail($destinationPath.$filename, $destinationPath.$uid.'_thumb.'.$extension, 200); + if($width >= 1500){ + $this->createThumbnail($destinationPath.$filename, $destinationPath.$uid.'_preview.'.$extension, 1500); + }else{ + $this->createThumbnail($destinationPath.$filename, $destinationPath.$uid.'_preview.'.$extension, $width); + } + break; // Illustration/Vectorielle (2) - case 'ai': case 'svg': $media->typemedia_id = 2; break; @@ -137,6 +142,7 @@ class UploadController extends Controller { } break; // Document (5) + case 'ai': case 'eps': case 'indd': case 'pdf': diff --git a/app/Http/Traits/MediaTools.php b/app/Http/Traits/MediaTools.php index c18ab81..48a776e 100644 --- a/app/Http/Traits/MediaTools.php +++ b/app/Http/Traits/MediaTools.php @@ -119,7 +119,8 @@ trait MediaTools { ], 1 => [ 'load' => 'imagecreatefromgif', - 'save' => 'imagegif' + 'save' => 'imagegif', + 'quality' => 0 ] ]; diff --git a/public/css/app.css b/public/css/app.css index e15ebcc..673fbe4 100644 --- a/public/css/app.css +++ b/public/css/app.css @@ -12141,7 +12141,7 @@ readers do not read off random characters that represent icons */ font-weight: 900; font-display: auto; src: url(/fonts/fa-solid-900.eot?11823289c2cdeaf2415c76be9c5e4a09); - src: url(/fonts/fa-solid-900.eot?11823289c2cdeaf2415c76be9c5e4a09?#iefix) format("embedded-opentype"), url(/fonts/fa-solid-900.woff2?e57324a466c24a207fd9ad0f5f5e3c9c) format("woff2"), url(/fonts/fa-solid-900.woff?6a9e75ccf66ab99b14f2873840cfc01d) format("woff"), url(/fonts/fa-solid-900.ttf?ff4aabff5dc839470245d1e5043bdd51) format("truetype"), url(/fonts/fa-solid-900.svg?506bcfeaad71580149d11c8fb36af219#fontawesome) format("svg"); + src: url(/fonts/fa-solid-900.eot?11823289c2cdeaf2415c76be9c5e4a09?#iefix) format("embedded-opentype"), url(/fonts/fa-solid-900.woff2?e57324a466c24a207fd9ad0f5f5e3c9c) format("woff2"), url(/fonts/fa-solid-900.woff?6a9e75ccf66ab99b14f2873840cfc01d) format("woff"), url(/fonts/fa-solid-900.ttf?ff4aabff5dc839470245d1e5043bdd51) format("truetype"), url(/fonts/fa-solid-900.svg?682b2706dced408296098e9706de6044#fontawesome) format("svg"); } .fa, @@ -12161,7 +12161,7 @@ readers do not read off random characters that represent icons */ font-weight: 400; font-display: auto; src: url(/fonts/fa-regular-400.eot?df3024c0f2d296c59947567afffb0a3b); - src: url(/fonts/fa-regular-400.eot?df3024c0f2d296c59947567afffb0a3b?#iefix) format("embedded-opentype"), url(/fonts/fa-regular-400.woff2?8cfe82e8c97df9ab3f52ac86af21230d) format("woff2"), url(/fonts/fa-regular-400.woff?239abe3e583864d4ab3d27c34ac37cc6) format("woff"), url(/fonts/fa-regular-400.ttf?bd86e53df8c36e22fbba9d4e60e3c632) format("truetype"), url(/fonts/fa-regular-400.svg?416d58293e221c2b4b8f34c1531d5dfd#fontawesome) format("svg"); + src: url(/fonts/fa-regular-400.eot?df3024c0f2d296c59947567afffb0a3b?#iefix) format("embedded-opentype"), url(/fonts/fa-regular-400.woff2?8cfe82e8c97df9ab3f52ac86af21230d) format("woff2"), url(/fonts/fa-regular-400.woff?239abe3e583864d4ab3d27c34ac37cc6) format("woff"), url(/fonts/fa-regular-400.ttf?bd86e53df8c36e22fbba9d4e60e3c632) format("truetype"), url(/fonts/fa-regular-400.svg?e95c8bc29ba207aefff8fecc74b04c50#fontawesome) format("svg"); } .far { @@ -12180,7 +12180,7 @@ readers do not read off random characters that represent icons */ font-weight: 300; font-display: auto; src: url(/fonts/fa-light-300.eot?a06baf702fb4e2a21830fa7dfa71c0dc); - src: url(/fonts/fa-light-300.eot?a06baf702fb4e2a21830fa7dfa71c0dc?#iefix) format("embedded-opentype"), url(/fonts/fa-light-300.woff2?20bbccf14518922fa95a440f4c217d9e) format("woff2"), url(/fonts/fa-light-300.woff?1008b6dd09c8b71b65e7c449bf881d90) format("woff"), url(/fonts/fa-light-300.ttf?7f384302d16d8bf29d1549de26d0153d) format("truetype"), url(/fonts/fa-light-300.svg?9969a9da0ab8636ad1a428b3838757d4#fontawesome) format("svg"); + src: url(/fonts/fa-light-300.eot?a06baf702fb4e2a21830fa7dfa71c0dc?#iefix) format("embedded-opentype"), url(/fonts/fa-light-300.woff2?20bbccf14518922fa95a440f4c217d9e) format("woff2"), url(/fonts/fa-light-300.woff?1008b6dd09c8b71b65e7c449bf881d90) format("woff"), url(/fonts/fa-light-300.ttf?7f384302d16d8bf29d1549de26d0153d) format("truetype"), url(/fonts/fa-light-300.svg?de9c5fd90497bb10df2c47dc3470384e#fontawesome) format("svg"); } .fal { @@ -12199,7 +12199,7 @@ readers do not read off random characters that represent icons */ font-weight: normal; font-display: auto; src: url(/fonts/fa-brands-400.eot?72721167aea128f7ddac301c15dab835); - src: url(/fonts/fa-brands-400.eot?72721167aea128f7ddac301c15dab835?#iefix) format("embedded-opentype"), url(/fonts/fa-brands-400.woff2?68c177c286c34e1b7b975807dd5d9ed0) format("woff2"), url(/fonts/fa-brands-400.woff?fb481cb3c3d44b2d16d38e93ef118f9a) format("woff"), url(/fonts/fa-brands-400.ttf?29e1f75381d3efde65c48168ebe5c403) format("truetype"), url(/fonts/fa-brands-400.svg?f77645622015337d638b8a3d6266fe43#fontawesome) format("svg"); + src: url(/fonts/fa-brands-400.eot?72721167aea128f7ddac301c15dab835?#iefix) format("embedded-opentype"), url(/fonts/fa-brands-400.woff2?68c177c286c34e1b7b975807dd5d9ed0) format("woff2"), url(/fonts/fa-brands-400.woff?fb481cb3c3d44b2d16d38e93ef118f9a) format("woff"), url(/fonts/fa-brands-400.ttf?29e1f75381d3efde65c48168ebe5c403) format("truetype"), url(/fonts/fa-brands-400.svg?899ccc90ee651cbda357c41695739d9f#fontawesome) format("svg"); } .fab { @@ -12383,6 +12383,114 @@ readers do not read off random characters that represent icons */ margin-left: 15px; } +.darkroom-container { + position: relative; +} + +.darkroom-image-container { + top: 0; + left: 0; +} + +#darkroom-icons { + display: none; +} + +.darkroom-toolbar { + display: block; + position: absolute; + bottom: -40px; + left: 50%; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + background: #444; + height: 40px; + min-width: 40px; + z-index: 99; + border-radius: 2px; + white-space: nowrap; + padding: 0 5px; +} + +/* +.darkroom-toolbar:before { + content: ""; + position: absolute; + bottom: -7px; + left: 20px; + width: 0; + height: 0; + border-left: 7px solid transparent; + border-right: 7px solid transparent; + border-top: 7px solid #444 +} +*/ + +.darkroom-button-group { + display: inline-block; + margin: 0; + padding: 0; +} + +.darkroom-button-group:last-child { + border-right: none; +} + +.darkroom-button { + box-sizing: border-box; + background: transparent; + border: none; + outline: none; + padding: 2px 0 0 0; + width: 40px; + height: 40px; +} + +.darkroom-button:hover { + cursor: pointer; + background: #555; +} + +.darkroom-button:active { + cursor: pointer; + background: #333; +} + +.darkroom-button:disabled .darkroom-icon { + fill: #666; +} + +.darkroom-button:disabled:hover { + cursor: default; + background: transparent; +} + +.darkroom-button.darkroom-button-active .darkroom-icon { + fill: #33b5e5; +} + +.darkroom-button.darkroom-button-hidden { + display: none; +} + +.darkroom-button.darkroom-button-success .darkroom-icon { + fill: #99cc00; +} + +.darkroom-button.darkroom-button-warning .darkroom-icon { + fill: #FFBB33; +} + +.darkroom-button.darkroom-button-danger .darkroom-icon { + fill: #FF4444; +} + +.darkroom-icon { + width: 24px; + height: 24px; + fill: #fff; +} + /****************************************** HEADER ******************************************/ @@ -13083,6 +13191,12 @@ h1 { display: inline-block; } +h3 { + color: #ffffff; + font-size: 17px; + display: inline-block; +} + .filter_row { margin-bottom: 10px; } @@ -13682,6 +13796,7 @@ table tfoot tr { #form_media header a:hover, #form_media header a.active { background-color: #272626; + color: #ffffff; } #form_media header .form_media_close { @@ -13718,14 +13833,90 @@ table tfoot tr { z-index: 1; } +#form_media .main_content { + height: calc(100% - 43px); +} + #form_media .main_content .tab { + height: 100%; display: none; + overflow: auto; + position: relative; +} + +#form_media .main_content .tab.tab_preview { + text-align: center; +} + +#form_media .main_content .tab.tab_preview .controlDiv > div { + margin: 0 7px !important; +} + +#form_media .main_content .tab.tab_preview audio, +#form_media .main_content .tab.tab_preview video { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} + +#form_media .main_content .tab.tab_preview .svgElt { + width: auto; + height: 100%; +} + +#form_media .main_content .tab.tab_edit .tab_content { + overflow: auto; + height: calc(100% - 50px); +} + +#form_media .main_content .tab.tab_edit .button_bar { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + padding: 8px 50px; + text-align: right; } #form_media .main_content .tab.active { display: block; } +#form_media .main_content .tab .wrapper { + width: 100%; + padding: 30px 10px; +} + +#form_media .main_content .tab .wrapper:nth-child(even) { + background-color: #3b3b3b; +} + +#form_media .main_content .tab .wrapper h3 { + margin-bottom: 25px; + display: block; + text-align: center; +} + +#form_media .main_content .tab .wrapper .row { + display: flex; + flex-direction: column; + width: 530px; + margin: 0 auto 15px auto; +} + +#form_media .main_content .tab .wrapper .row label { + margin-bottom: 10px; + color: #ffffff; +} + +#form_media .main_content .tab .wrapper .row label span { + color: #e3342f; + font-weight: bold; + font-size: 14px; +} + /****************************************** PAGE LOGIN ******************************************/ diff --git a/public/js/app.js b/public/js/app.js index 5bb91df..47a9d14 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -11066,11 +11066,14 @@ $(".form_contact_send").on('click', function (event) { /***/ (function(module, exports) { $(document).ready(function () { - // ---- Gestion des média : init des dossiers + /****************************** + Liste des dossiers + **********************************/ + // ---- init des dossiers if ($(".media_manager").length) { var sujetId = $("#sujet_selector").val(); if (sujetId != "") initFolderManager(sujetId); - } // ---- Gestion des média : collapse/expand side menu + } // ---- collapse/expand side menu $(".close_side_menu").on('click', function (event) { @@ -11085,14 +11088,14 @@ $(document).ready(function () { $(".close_side_menu i").removeClass('fa-chevron-left'); $(".close_side_menu i").addClass('fa-chevron-right'); } - }); // ---- Gestion des média : init des dossiers lorsqu'on change de sujet + }); // ---- 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); - }); // ---- Gestion des média : sélectionner un dossier et favoris + }); // ---- sélectionner un dossier et favoris $(".folder_container").on('click', '.dd3-content', function (e) { e.preventDefault(); @@ -11130,7 +11133,7 @@ $(document).ready(function () { $(window).data('offset', 0); loadMedia(dossier_id, sujet_id); } - }); // ---- Gestion des média : sélectionner la racine + }); // ---- sélectionner la racine $(".folder_container").on('click', '.root_folder', function (event) { event.preventDefault(); @@ -11140,7 +11143,7 @@ $(document).ready(function () { var sujetId = $("#sujet_selector").val(); $(window).data('offset', 0); loadMedia(0, sujetId); - }); // ---- Gestion des média : menu contextuel des dossiers + }); // ---- menu contextuel des dossiers $(".folder_container").on('contextmenu', '.dd3-content', function (event) { event.preventDefault(); // placement du menu @@ -11160,7 +11163,7 @@ $(document).ready(function () { } $(".folder_container .folder_menu").show(); - }); // ---- Gestion des média : ajouter un dossier + }); // ---- ajouter un dossier $(".folder_menu").on('click', '.addItem', function (event) { event.preventDefault(); @@ -11200,7 +11203,7 @@ $(document).ready(function () { }); } }); - }); // ---- Gestion des média : supprimer un dossier + }); // ---- supprimer un dossier $(".folder_menu").on('click', '.removeItem', function (event) { event.preventDefault(); @@ -11247,7 +11250,7 @@ $(document).ready(function () { type: "error" }); } - }); // ---- Gestion des média : renommer un dossier + }); // ---- renommer un dossier $(".folder_menu").on('click', '.renameItem', function (event) { event.preventDefault(); @@ -11294,7 +11297,7 @@ $(document).ready(function () { } }); } - }); // ---- Gestion des média : propriétés d'un dossier + }); // ---- propriétés d'un dossier $(".folder_menu").on('click', '.propertyItem', function (event) { event.preventDefault(); @@ -11335,7 +11338,7 @@ $(document).ready(function () { }); } }); - }); // ---- Gestion des média : enregistre les propriétés d'un dossier + }); // ---- enregistre les propriétés d'un dossier $("html").on('click', '.form_folder_save', function (event) { event.preventDefault(); @@ -11364,101 +11367,7 @@ $(document).ready(function () { }); } }); - }); // ---- Gestion des média : 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")); - } - }); // ---- Gestion des média : 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'); - }); // ---- Gestion des média : clique droit sur un média - - $(".main_content .wrapper").on("contextmenu", '.imageItem', function (event) { - event.preventDefault(); - $(".imageItem").removeClass('flip'); - $(this).addClass('flip'); - }); // ---- Edition des média : double-clique sur un média - - $(".main_content .wrapper").on("dblclick", '.imageItem', function (event) { - event.preventDefault(); - $(window).data('current_edit_media', $(this).attr('data-id')); - $("#form_media").fadeIn('fast'); - }); // ---- Edition des média : fermeture de la popup - - $(".form_media_close").on("click", function (event) { - event.preventDefault(); - $("#form_media").fadeOut('fast'); - }); // ---- Edition des média : gestion des onglets - - $("#form_media .tabbtn").on("click", function (event) { - event.preventDefault(); - 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'); - }); // ---- Gestion des média : 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 des média : affichage des dossiers on draghover + }); // ---- affichage des dossiers on draghover $(".folder_container").on("dragover", ".dd3-content, .root_folder", function (event) { event.preventDefault(); @@ -11466,14 +11375,14 @@ $(document).ready(function () { $(".folder_container .dd3-content").removeClass('dragged'); $(".folder_container .root_folder").removeClass('dragged'); $(this).addClass('dragged'); - }); // ---- Gestion des média : affichage des dossiers on dragleave + }); // ---- 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'); - }); // ---- Gestion des média : evt lorsque l'on drop des élements dans un dossier + }); // ---- evt lorsque l'on drop des élements dans un dossier $(".folder_container").on("drop", ".dd3-content, .root_folder", function (event) { event.preventDefault(); @@ -11532,6 +11441,207 @@ $(document).ready(function () { } }); } + }); + /****************************** + 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('
'); + $("#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('