Fixed upload handling
This commit is contained in:
parent
f0e68cb31e
commit
b99339ea93
@ -101,19 +101,40 @@ setInterval(() => requestIdleCallback(updateTimes), 30000);
|
||||
const textBox = chatInputField.textarea;
|
||||
textBox.addEventListener("paste", async (e) => {
|
||||
try {
|
||||
const clipboardItems = await navigator.clipboard.read();
|
||||
const dt = new DataTransfer();
|
||||
e.preventDefault();
|
||||
const uploadButton = chatInputField.fileUploadGrid;
|
||||
|
||||
const clipboardItems = await navigator.clipboard.read()
|
||||
|
||||
for (const item of clipboardItems) {
|
||||
if (item.types.every(v => v === "text/plain")) {
|
||||
const text = await (await item.getType("text/plain")).text();
|
||||
chatInputField.value += text;
|
||||
continue
|
||||
}
|
||||
|
||||
if (item.types.every(t => t.startsWith('text/'))) {
|
||||
console.log("All types are text:", item.types);
|
||||
const codeType = item.types.find(t => !t.startsWith('text/plain') && !t.startsWith('text/html'));
|
||||
let code = await(await item.getType(codeType ?? 'text/plain')).text();
|
||||
|
||||
const minIndentDepth = code.split('\n').reduce((acc, line) => {
|
||||
if (!line.trim()) return acc;
|
||||
const match = line.match(/^(\s*)/);
|
||||
return match ? Math.min(acc, match[1].length) : acc;
|
||||
}, 9000)
|
||||
|
||||
code = code.split('\n').map(line => line.slice(minIndentDepth)).join('\n')
|
||||
|
||||
chatInputField.value += `\`\`\`${codeType?.split('/')?.[1] ?? ''}\n${code}\n\`\`\`\n`;
|
||||
} else {
|
||||
for (const type of item.types.filter(t => !t.startsWith('text/'))) {
|
||||
const blob = await item.getType(type);
|
||||
dt.items.add(new File([blob], "image.png", { type }));
|
||||
const name = type.replace('/', '.')
|
||||
uploadButton.uploadsStarted++
|
||||
uploadButton.createTile(new File([blob], name, {type}))
|
||||
}
|
||||
}
|
||||
if (dt.items.length > 0) {
|
||||
const uploadButton = chatInputField.uploadButton;
|
||||
const input = uploadButton.shadowRoot.querySelector('.file-input');
|
||||
input.files = dt.files;
|
||||
await uploadButton.uploadFiles();
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("Failed to read clipboard contents: ", error);
|
||||
@ -123,10 +144,17 @@ chatArea.addEventListener("drop", async (e) => {
|
||||
e.preventDefault();
|
||||
const dt = e.dataTransfer;
|
||||
if (dt.items.length > 0) {
|
||||
const uploadButton = chatInputField.uploadButton;
|
||||
const input = uploadButton.shadowRoot.querySelector('.file-input');
|
||||
input.files = dt.files;
|
||||
await uploadButton.uploadFiles();
|
||||
const uploadButton = chatInputField.fileUploadGrid;
|
||||
|
||||
for (const item of dt.items) {
|
||||
if (item.kind === "file") {
|
||||
const file = item.getAsFile();
|
||||
if (file) {
|
||||
uploadButton.uploadsStarted++
|
||||
uploadButton.createTile(file)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
chatArea.addEventListener("dragover", e => {
|
||||
|
Loading…
Reference in New Issue
Block a user