front : retouche et preview de média

This commit is contained in:
Yann Gonidec 2019-06-05 09:10:06 +02:00
parent 18e62666f4
commit 035e72cc02
10 changed files with 785 additions and 287 deletions

View file

@ -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':

View file

@ -119,7 +119,8 @@ trait MediaTools {
],
1 => [
'load' => 'imagecreatefromgif',
'save' => 'imagegif'
'save' => 'imagegif',
'quality' => 0
]
];

199
public/css/app.css vendored
View file

@ -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
******************************************/

360
public/js/app.js vendored
View file

@ -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('<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 callback() {
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 () {
@ -11545,14 +11655,24 @@ $(document).ready(function () {
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({
@ -11685,7 +11805,7 @@ $(document).ready(function () {
}
}).prop('disabled', !$.support.fileInput).parent().addClass($.support.fileInput ? undefined : 'disabled');
}
}); // ---- Gestion des média : init des dossiers
}); // ---- init des dossiers
function initFolderManager(sujetId) {
$(".folder_container .loader").show();
@ -11784,7 +11904,8 @@ function initFolderManager(sujetId) {
});
}
});
}
} // ---- Chargement des média
$(window).data('offset', 0);
$(window).data('limit', 50);
@ -11822,13 +11943,20 @@ function loadMedia(dossier_id, sujet_id) {
var detail = "";
var itemClass = "";
var thumb = "";
var preview = "";
switch (item.typemedia_id) {
case 1:
case 2:
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:
@ -11851,7 +11979,7 @@ function loadMedia(dossier_id, sujet_id) {
default:
}
output += '<div class="imageItem" data-id="' + item.id + '" draggable="true" aria-grabbed="false">';
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>';
@ -11876,7 +12004,7 @@ function loadMedia(dossier_id, sujet_id) {
$(window).data('ajaxready', true);
}
});
} // ---- Gestion des média : contruction de l'arborescence des dossiers
} // ---- contruction de l'arborescence des dossiers
function buildItem(item) {
@ -11907,7 +12035,7 @@ function buildItem(item) {
html += "</li>";
return html;
} // ---- Gestion des média : ajouter un dossier
} // ---- ajouter un dossier
function addItem(parent_id, item_id, content) {

391
resources/js/media.js vendored
View file

@ -1,14 +1,18 @@
$(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) {
event.preventDefault();
if($(".side_menu ").hasClass('collapse')){
@ -22,7 +26,7 @@ $(document).ready(function() {
}
});
// ---- 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 != "")
@ -31,8 +35,7 @@ $(document).ready(function() {
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();
var target = e.target, $target = $(target);
@ -70,7 +73,7 @@ $(document).ready(function() {
// ---- Gestion des média : sélectionner la racine
// ---- sélectionner la racine
$(".folder_container").on('click', '.root_folder', function(event) {
event.preventDefault();
$(".folder_container .dd3-content").removeClass('selected');
@ -81,7 +84,7 @@ $(document).ready(function() {
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
@ -101,7 +104,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();
var parent_id = $(this).parents(".folder_menu").attr("data-id");
@ -135,7 +138,7 @@ $(document).ready(function() {
});
});
// ---- Gestion des média : supprimer un dossier
// ---- supprimer un dossier
$(".folder_menu").on('click', '.removeItem', function(event) {
event.preventDefault();
var dossier_id = $(this).parents(".folder_menu").attr("data-id");
@ -170,7 +173,7 @@ $(document).ready(function() {
}
});
// ---- Gestion des média : renommer un dossier
// ---- renommer un dossier
$(".folder_menu").on('click', '.renameItem', function(event) {
event.preventDefault();
$(".folder_container .folder_menu").hide();
@ -211,7 +214,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();
$(".folder_container .folder_menu").hide();
@ -250,7 +253,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();
@ -278,124 +281,27 @@ $(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();
event.stopPropagation();
event.preventDefault();
event.stopPropagation();
$(".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();
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();
event.stopPropagation();
event.preventDefault();
event.stopPropagation();
$(".folder_container .dd3-content").removeClass('dragged');
$(".folder_container .root_folder").removeClass('dragged');
// ---- Cible
@ -444,6 +350,198 @@ $(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('<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;
@ -457,24 +555,34 @@ $(document).ready(function() {
}
});
$('#close_upload_form').on('click',function(event){
event.preventDefault();
$('.upload_container').hide("fast");
});
$('.action_add_media').on('click',function(event){
event.preventDefault();
$('.upload_container').show("fast");
});
/******************************
Edition d'un média
**********************************/
/******************************
Upload de média
**********************************/
if($('#fileupload').length){
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
// ---- 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')
@ -608,7 +716,7 @@ $(document).ready(function() {
}
});
// ---- Gestion des média : init des dossiers
// ---- init des dossiers
function initFolderManager(sujetId){
$(".folder_container .loader").show();
$.ajaxSetup({
@ -692,6 +800,7 @@ function initFolderManager(sujetId){
});
}
// ---- Chargement des média
$(window).data('offset', 0);
$(window).data('limit', 50);
function loadMedia(dossier_id, sujet_id){
@ -725,12 +834,18 @@ function loadMedia(dossier_id, sujet_id){
var detail = "";
var itemClass = "";
var thumb = "";
var preview = "";
switch (item.typemedia_id) {
case 1:
case 2:
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>';
@ -750,7 +865,7 @@ function loadMedia(dossier_id, sujet_id){
}
output += '<div class="imageItem" data-id="'+item.id+'" draggable="true" aria-grabbed="false">';
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>';
@ -776,7 +891,7 @@ function loadMedia(dossier_id, sujet_id){
});
}
// ---- Gestion des média : contruction de l'arborescence des dossiers
// ---- contruction de l'arborescence des dossiers
function buildItem(item) {
var parentClass = "";
var handleClass = "";
@ -805,7 +920,7 @@ function buildItem(item) {
return html;
}
// ---- Gestion des média : ajouter un dossier
// ---- 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>");

View file

@ -10,6 +10,7 @@
'partials/fontawesome/light.scss',
'partials/fontawesome/brands.scss',
'partials/fileupload.scss',
'partials/darkroom.scss',
'partials/common.scss',
'partials/form.scss',
'partials/media.scss',

View file

@ -114,6 +114,11 @@ h1{
font-size: 24px;
display: inline-block;
}
h3{
color: $white;
font-size: 17px;
display: inline-block;
}
.filter_row{
margin-bottom: 10px;

View file

@ -424,6 +424,7 @@
&:hover, &.active{
background-color: $lightdark;
color: $white;
}
}
@ -460,11 +461,83 @@
}
}
.main_content{
height: calc(100% - 43px);
.tab{
height: 100%;
display: none;
overflow: auto;
position: relative;
&.tab_preview{
text-align: center;
.controlDiv > div{
margin: 0 7px !important;
}
audio, video{
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
}
.svgElt{
width: auto;
height: 100%;
}
}
&.tab_edit{
.tab_content{
overflow: auto;
height: calc(100% - 50px);
}
.button_bar{
position: absolute;
bottom: 0;
left: 0;
width: 100%;
padding: 8px 50px;
text-align: right;
}
}
&.active{
display: block;
}
.wrapper{
width: 100%;
padding: 30px 10px;
&:nth-child(even){
background-color: $grey;
}
h3{
margin-bottom: 25px;
display: block;
text-align: center;
}
.row{
display: flex;
flex-direction: column;
width: 530px;
margin: 0 auto 15px auto;
label{
margin-bottom: 10px;
color: $white;
span{
color: $red;
font-weight: bold;
font-size: 14px;
}
}
}
}
}
}
}

View file

@ -38,33 +38,7 @@
</p>
</div>
<div id="form_media" style="display: none;" data-id="" >
<header class="group">
<a href="#" class="tabbtn form_media_preview active" data-tab="0">Aperçu</a>
<a href="#" class="tabbtn form_media_edit" data-tab="1">Edition</a>
<a href="#" class="tabbtn form_media_retouch" data-tab="2">Retouche</a>
<a href="#" class="tabbtn form_media_links" data-tab="3">Vignettes</a>
<a href="#" class="tabbtn form_media_history" data-tab="4">Historique</a>
<a href="#" class="tabbtn form_media_close"><i class="fal fa-times"></i></a>
</header>
<div class="main_content">
<div class="tab tab_preview active">
content tab_preview
</div>
<div class="tab tab_edit">
content tab_edit
</div>
<div class="tab tab_retouch">
content tab_retouch
</div>
<div class="tab tab_links">
content tab_links
</div>
<div class="tab tab_history">
content tab_history
</div>
</div>
</div>
@yield('media_edit')
<div class="uploader-window">
<div class="uploader-window-content">

View file

@ -1,5 +1,6 @@
@extends('layouts.app')
@include('layouts.header')
@include('layouts.media_edit')
@section('content')
<main class="media_manager template_2col">
<div class="side_menu">
@ -106,4 +107,7 @@
<script src="{{ asset('js/uploadfile/vendor/jquery.ui.widget.js') }}"></script>
<script src="{{ asset('js/uploadfile/jquery.iframe-transport.js') }}"></script>
<script src="{{ asset('js/uploadfile/jquery.fileupload.js') }}"></script>
<script src="{{ asset('js/fabric.js') }}"></script>
<script src="{{ asset('js/darkroom.js') }}"></script>
<script src="{{ asset('js/openseadragon.min.js') }}"></script>
@endsection