diff --git a/frontend/src/utils/upload.js b/frontend/src/utils/upload.js index 2184072f..c75d5a9c 100644 --- a/frontend/src/utils/upload.js +++ b/frontend/src/utils/upload.js @@ -45,7 +45,14 @@ export function scanFiles(dt) { typeof item.webkitGetAsEntry === "function" ) { const entry = item.webkitGetAsEntry(); - readEntry(entry); + if (entry) { + // for "drop" event + readEntry(entry); + } else { + // for "paste" event + resolve(dt.files); + break; + } } } } else { diff --git a/frontend/src/views/files/Listing.vue b/frontend/src/views/files/Listing.vue index bdf4806b..f92c74db 100644 --- a/frontend/src/views/files/Listing.vue +++ b/frontend/src/views/files/Listing.vue @@ -423,6 +423,7 @@ export default { document.addEventListener("dragenter", this.dragEnter); document.addEventListener("dragleave", this.dragLeave); document.addEventListener("drop", this.drop); + document.addEventListener("paste", this.drop); }, beforeDestroy() { // Remove event listeners before destroying this page. @@ -435,6 +436,7 @@ export default { document.removeEventListener("dragenter", this.dragEnter); document.removeEventListener("dragleave", this.dragLeave); document.removeEventListener("drop", this.drop); + document.removeEventListener("paste", this.drop); }, methods: { ...mapMutations(["updateUser", "addSelected"]), @@ -657,7 +659,7 @@ export default { this.dragCounter = 0; this.resetOpacity(); - let dt = event.dataTransfer; + let dt = event.dataTransfer ?? event.clipboardData; let el = event.target; if (dt.files.length <= 0) return;