1
0
mirror of https://github.com/Stirling-Tools/Stirling-PDF.git synced 2024-07-05 00:40:12 +02:00

drag drop niceness

This commit is contained in:
Anthony Stirling 2023-07-13 22:03:23 +01:00
parent cdbf1fa73a
commit ddf5915c6a

View File

@ -1,8 +1,64 @@
document.addEventListener('DOMContentLoaded', function() { document.addEventListener('DOMContentLoaded', function() {
let overlay;
let dragCounter = 0;
const dragenterListener = function() {
dragCounter++;
if (!overlay) {
// Create and show the overlay
overlay = document.createElement('div');
overlay.style.position = 'fixed';
overlay.style.top = 0;
overlay.style.left = 0;
overlay.style.width = '100%';
overlay.style.height = '100%';
overlay.style.background = 'rgba(0, 0, 0, 0.5)';
overlay.style.color = '#fff';
overlay.style.zIndex = '1000';
overlay.style.display = 'flex';
overlay.style.alignItems = 'center';
overlay.style.justifyContent = 'center';
overlay.style.pointerEvents = 'none';
overlay.innerHTML = '<p>Drop files anywhere to upload</p>';
document.getElementById('content-wrap').appendChild(overlay);
}
};
const dragleaveListener = function() {
dragCounter--;
if (dragCounter === 0) {
// Hide and remove the overlay
if (overlay) {
overlay.remove();
overlay = null;
}
}
};
const dropListener = function(e) {
const dt = e.dataTransfer;
const files = dt.files;
// Access the file input element and assign dropped files
const fileInput = document.getElementById(elementID); const fileInput = document.getElementById(elementID);
fileInput.files = files;
// Hide and remove the overlay
if (overlay) {
overlay.remove();
overlay = null;
}
// Reset drag counter
dragCounter = 0;
handleFileInputChange(fileInput);
};
// Prevent default behavior for drag events // Prevent default behavior for drag events
['dragenter', 'dragover', 'dragleave', 'drop'].forEach(eventName => { ['dragenter', 'dragover', 'dragleave', 'drop'].forEach(eventName => {
fileInput.addEventListener(eventName, preventDefaults, false); document.body.addEventListener(eventName, preventDefaults, false);
}); });
function preventDefaults(e) { function preventDefaults(e) {
@ -10,21 +66,18 @@ document.addEventListener('DOMContentLoaded', function() {
e.stopPropagation(); e.stopPropagation();
} }
document.body.addEventListener('dragenter', dragenterListener);
document.body.addEventListener('dragleave', dragleaveListener);
// Add drop event listener // Add drop event listener
fileInput.addEventListener('drop', handleDrop, false); document.body.addEventListener('drop', dropListener);
function handleDrop(e) {
const dt = e.dataTransfer;
const files = dt.files;
fileInput.files = files;
handleFileInputChange(fileInput)
}
}); });
$("#"+elementID).on("change", function() { $("#"+elementID).on("change", function() {
handleFileInputChange(this); handleFileInputChange(this);
}); });
function handleFileInputChange(inputElement) { function handleFileInputChange(inputElement) {
const files = $(inputElement).get(0).files; const files = $(inputElement).get(0).files;
const fileNames = Array.from(files).map(f => f.name); const fileNames = Array.from(files).map(f => f.name);