diff --git a/public/css/app.css b/public/css/app.css index 7d38114..a6d5e91 100644 --- a/public/css/app.css +++ b/public/css/app.css @@ -34,12 +34,17 @@ max-height: 200px; } -.canvas-container .btn-drag, .canvas-container .btn-rotate, .canvas-container .btn-delete, .canvas-container .btn-select, .canvas-container .btn-download, .canvas-container .btn-restore { +.canvas-container .btn-drag, .canvas-container .btn-rotate, .canvas-container .btn-delete, .canvas-container .btn-select, .canvas-container .btn-download, .canvas-container .btn-restore, .canvas-container .btn-drag-here, .canvas-container .btn-cancel { font-size: 30px; cursor: move; background: rgb(255,255,255,0.6); } +.canvas-container .btn-drag-here, .canvas-container .btn-cancel { + cursor: pointer; + z-index: 9999; +} + .canvas-container .btn-rotate, .canvas-container .btn-delete, .canvas-container .btn-select, .canvas-container .btn-download, .canvas-container .btn-restore { cursor: pointer; font-size: 25px; @@ -48,3 +53,9 @@ .border-transparent { border-color: transparent !important; } + +#backdrop_drag_mode { + top: 0; + left: 0; + z-index: 1000; +} \ No newline at end of file diff --git a/public/js/organization.js b/public/js/organization.js index b4dbc3c..edefb16 100644 --- a/public/js/organization.js +++ b/public/js/organization.js @@ -25,6 +25,9 @@ var responsiveDisplay = function() { var isSelectionMode = function() { return document.querySelectorAll('.canvas-container .input-select:checked').length > 0; } +var isDraggedMode = function() { + return document.querySelectorAll('.canvas-container .input-drag:checked').length > 0; +} var nbPagePerLine = 5; if(is_mobile()) { @@ -65,6 +68,8 @@ var loadPDF = async function(pdfBlob, filename, pdfIndex) { pageHTML += '
'; pageHTML += '
'; pageHTML += '
'; + pageHTML += '
'; + pageHTML += '
'; pageHTML += '
'; pageHTML += '
'; pageHTML += '

Page '+page.pageNumber+' - '+filename+'

'; @@ -72,6 +77,7 @@ var loadPDF = async function(pdfBlob, filename, pdfIndex) { pageHTML += ''; pageHTML += ''; pageHTML += ''; + pageHTML += ''; pageHTML += ''; document.getElementById('container-pages').insertAdjacentHTML('beforeend', pageHTML); @@ -106,7 +112,7 @@ var loadPDF = async function(pdfBlob, filename, pdfIndex) { canvasContainer.addEventListener('dragend', function(e) { this.querySelector('.container-resize').classList.remove('d-none'); this.querySelector('.canvas-pdf').classList.remove('shadow-lg'); - this.querySelector('.canvas-pdf').style.border = '2px solid transparent'; + this.querySelector('.canvas-pdf').style.removeProperty('border'); this.style.opacity = 1; updatePageState(this); }); @@ -131,6 +137,38 @@ var loadPDF = async function(pdfBlob, filename, pdfIndex) { canvasContainer.querySelector('.btn-select').addEventListener('click', function(e) { toggleSelectPage(this.parentNode); }); + canvasContainer.querySelector('.btn-drag').addEventListener('click', function(e) { + toggleDragPage(this.parentNode); + }); + canvasContainer.querySelector('.btn-drag-here').addEventListener('click', function(e) { + let pageHere = this.parentNode; + let after = false; + let pageHereFound = false; + document.querySelectorAll('.canvas-container').forEach(function(page) { + if(page.id == pageHere.id) { + pageHereFound = true; + } + if(!after && isPageDragged(page) && !pageHereFound) { + after = true; + } + }); + document.querySelectorAll('.canvas-container .input-drag:checked').forEach(function(item) { + let page = item.parentNode; + if(after) { + pageHere.insertAdjacentElement('afterend', page); + } else { + pageHere.insertAdjacentElement('beforebegin', page); + } + page.querySelector('input[type=checkbox].input-drag').checked = false; + }); + updateGlobalState(); + document.querySelectorAll('.canvas-container').forEach(function(page) { + updatePageState(page); + }); + }); + canvasContainer.querySelector('.btn-cancel').addEventListener('click', function(e) { + toggleDragPage(this.parentNode); + }); canvasContainer.querySelector('.btn-download').addEventListener('click', function(e) { let container = this.parentNode; let pageValue = container.querySelector('.checkbox-page').value; @@ -274,6 +312,24 @@ var isPageSelected = function(page) { return page.querySelector('input[type=checkbox].input-select').checked; } +var dragPage = function(page, state) { + page.querySelector('input[type=checkbox].input-drag').checked = state; + updatePageState(page); +} + +var toggleDragPage = function(page) { + dragPage(page, !isPageDragged(page)); + updateGlobalState(); + document.querySelectorAll('.canvas-container').forEach(function(page) { + updatePageState(page); + }); +} + +var isPageDragged = function(page) { + + return page.querySelector('input[type=checkbox].input-drag').checked; +} + var toggleDeletePage = function(page) { deletePage(page, isPageDeleted(page)) updateGlobalState(); @@ -298,13 +354,18 @@ var isPageHover = function(page) { var updatePageState = function(page) { page.classList.remove('border-primary', 'shadow-sm', 'bg-primary', 'border-secondary', 'bg-secondary'); page.classList.add('border-transparent', 'bg-transparent'); - page.querySelector('.canvas-pdf').style.opacity = '1' + page.querySelector('.canvas-pdf').style.opacity = '1'; + page.querySelector('.canvas-pdf').style.zIndex = 'inherit'; + page.querySelector('.canvas-pdf').classList.add('shadow-sm'); + page.querySelector('.canvas-pdf').classList.remove('shadow'); page.querySelector('.btn-rotate').classList.add('d-none'); page.querySelector('.btn-download').classList.add('d-none'); page.querySelector('.btn-delete').classList.add('d-none'); page.querySelector('.btn-select').classList.add('d-none'); page.querySelector('.btn-select').classList.remove('text-primary'); page.querySelector('.btn-drag').classList.add('d-none'); + page.querySelector('.btn-cancel').classList.add('d-none'); + page.querySelector('.btn-drag-here').classList.add('d-none'); page.querySelector('.btn-restore').classList.add('d-none'); page.querySelector('.page-title').classList.add('d-none'); @@ -312,7 +373,7 @@ var updatePageState = function(page) { page.querySelector('.canvas-pdf').style.opacity = '0.15'; } - if(isPageHover(page) && !isPageDeleted(page)) { + if(isPageHover(page) && !isPageDeleted(page) && !isPageDragged(page) && !isDraggedMode()) { page.querySelector('.page-title').classList.remove('d-none'); page.classList.add('border-secondary', 'bg-secondary'); page.classList.remove('border-transparent', 'bg-transparent'); @@ -333,6 +394,17 @@ var updatePageState = function(page) { page.querySelector('.btn-select').classList.add('text-primary'); page.querySelector('.btn-select').classList.remove('d-none') } + + if(isPageDragged(page)) { + page.querySelector('.btn-cancel').classList.remove('d-none'); + page.querySelector('.canvas-pdf').classList.remove('shadow-sm'); + page.querySelector('.canvas-pdf').classList.add('shadow'); + page.querySelector('.canvas-pdf').style.zIndex = 9999; + } + + if(!isPageDragged(page) && isDraggedMode()) { + page.querySelector('.btn-drag-here').classList.remove('d-none'); + } } var updateFilesState = function() { @@ -361,6 +433,7 @@ var updateGlobalState = function() { button.setAttribute('disabled', 'disabled'); }); document.querySelector('#container_btn_select .card-header span').innerText = "Aucune"; + document.querySelector('#backdrop_drag_mode').classList.add('d-none'); if(isSelectionMode()) { document.querySelector('#container_btn_select .card-header span').innerText = document.querySelectorAll('.canvas-container .input-select:checked').length; document.querySelector('#container_btn_select').classList.remove('opacity-50'); @@ -372,6 +445,15 @@ var updateGlobalState = function() { button.classList.remove('btn-outline-secondary'); button.removeAttribute('disabled'); }); + document.querySelectorAll('.canvas-container .btn-add').forEach(function(button) { + button.classList.remove('d-none'); + }); + } + if(isDraggedMode()) { + document.querySelector('#backdrop_drag_mode').style.width = document.querySelector('#container-pages').scrollWidth+'px'; + console.log(document.querySelector('#container-pages')); + document.querySelector('#backdrop_drag_mode').style.height = document.querySelector('#container-pages').scrollHeight+'px'; + document.querySelector('#backdrop_drag_mode').classList.remove('d-none'); } } diff --git a/templates/organization.html.php b/templates/organization.html.php index 9f8eaf1..17ad148 100644 --- a/templates/organization.html.php +++ b/templates/organization.html.php @@ -44,7 +44,8 @@
-
+
+
@@ -102,6 +103,6 @@ - + \ No newline at end of file