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
	 BordedDev
						BordedDev