diff --git a/client/js/controls/file_dropper_control.js b/client/js/controls/file_dropper_control.js index 2dfb4922..93150148 100644 --- a/client/js/controls/file_dropper_control.js +++ b/client/js/controls/file_dropper_control.js @@ -19,7 +19,8 @@ class FileDropperControl extends events.EventTarget { lock: options.lock, id: "file-" + Math.random().toString(36).substring(7), urlPlaceholder: - options.urlPlaceholder || "Alternatively, paste an URL here.", + options.urlPlaceholder || + "Alternatively, paste an image or URL here.", }); this._dropperNode = source.querySelector(".file-dropper"); @@ -48,6 +49,9 @@ class FileDropperControl extends events.EventTarget { this._urlInputNode.addEventListener("keydown", (e) => this._evtUrlInputKeyDown(e) ); + this._urlInputNode.addEventListener("paste", (e) => + this._evtPaste(e) + ); } if (this._urlConfirmButtonNode) { this._urlConfirmButtonNode.addEventListener("click", (e) => @@ -129,6 +133,17 @@ class FileDropperControl extends events.EventTarget { this._emitFiles(e.dataTransfer.files); } + _evtPaste(e) { + const items = (e.clipboardData || e.originalEvent.clipboardData).items; + const fileList = Array.from(items).map((x) => x.getAsFile()); + + if (!this._options.allowMultiple && fileList.length > 1) { + window.alert("Cannot select multiple files."); + } else { + this._emitFiles(fileList); + } + } + _evtUrlInputKeyDown(e) { if (e.which !== KEY_RETURN) { return;