| |
|
| | |
| | |
| | |
| |
|
| |
|
| | function setPasteUploader() { |
| | input = user_input_tb.querySelector("textarea") |
| | let paste_files = []; |
| | if (input) { |
| | input.addEventListener("paste", async function (e) { |
| | const clipboardData = e.clipboardData || window.clipboardData; |
| | const items = clipboardData.items; |
| | if (items) { |
| | for (i = 0; i < items.length; i++) { |
| | if (items[i].kind === "file") { |
| | const file = items[i].getAsFile(); |
| | |
| | paste_files.push(file); |
| | e.preventDefault(); |
| | } |
| | } |
| | if (paste_files.length > 0) { |
| | |
| | await upload_files(paste_files); |
| | paste_files = []; |
| | } |
| | } |
| | }); |
| | } |
| | } |
| |
|
| | var hintArea; |
| | function setDragUploader() { |
| | input = chatbotArea; |
| | if (input) { |
| | const dragEvents = ["dragover", "dragenter"]; |
| | const leaveEvents = ["dragleave", "dragend", "drop"]; |
| |
|
| | const onDrag = function (e) { |
| | e.preventDefault(); |
| | e.stopPropagation(); |
| | if (!chatbotArea.classList.contains("with-file")) { |
| | chatbotArea.classList.add("dragging"); |
| | draggingHint(); |
| | } else { |
| | statusDisplayMessage(clearFileHistoryMsg_i18n, 2000); |
| | } |
| | }; |
| |
|
| | const onLeave = function (e) { |
| | e.preventDefault(); |
| | e.stopPropagation(); |
| | chatbotArea.classList.remove("dragging"); |
| | if (hintArea) { |
| | hintArea.remove(); |
| | } |
| | }; |
| |
|
| | dragEvents.forEach(event => { |
| | input.addEventListener(event, onDrag); |
| | }); |
| |
|
| | leaveEvents.forEach(event => { |
| | input.addEventListener(event, onLeave); |
| | }); |
| |
|
| | input.addEventListener("drop", async function (e) { |
| | const files = e.dataTransfer.files; |
| | await upload_files(files); |
| | }); |
| | } |
| | } |
| |
|
| | async function upload_files(files) { |
| | const uploadInputElement = gradioApp().querySelector("#upload-index-file > .center.flex input[type=file]"); |
| | let totalSizeMb = 0 |
| | if (files && files.length > 0) { |
| | |
| | if (uploadInputElement) { |
| | for (let i = 0; i < files.length; i++) { |
| | |
| | totalSizeMb += files[i].size / 1024 / 1024; |
| | } |
| | |
| | if (totalSizeMb > 20) { |
| | |
| | |
| | } |
| | |
| | |
| | let event = new Event("change"); |
| | Object.defineProperty(event, "target", {value: uploadInputElement, enumerable: true}); |
| | Object.defineProperty(event, "currentTarget", {value: uploadInputElement, enumerable: true}); |
| | Object.defineProperty(uploadInputElement, "files", {value: files, enumerable: true}); |
| | uploadInputElement.dispatchEvent(event); |
| | |
| | } else { |
| | statusDisplayMessage(clearFileHistoryMsg_i18n, 3000); |
| | return; |
| | } |
| | } |
| | } |
| |
|
| | function draggingHint() { |
| | hintArea = chatbotArea.querySelector(".dragging-hint"); |
| | if (hintArea) { |
| | return; |
| | } |
| | hintArea = document.createElement("div"); |
| | hintArea.classList.add("dragging-hint"); |
| | hintArea.innerHTML = `<div class="dragging-hint-text"><p>${dropUploadMsg_i18n}</p></div>`; |
| | chatbotArea.appendChild(hintArea); |
| | } |
| |
|