From d82ed3d43aa98282baade158c9619e27122beb01 Mon Sep 17 00:00:00 2001 From: Daniel Dolezal Date: Mon, 19 Jan 2026 18:52:27 +0100 Subject: [PATCH] fix adding of pasted text into convex and fix double paste problem --- routes/side/upload.py | 4 --- templates/side/views/webpage/files/upload.htm | 30 ++++++++++++------- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/routes/side/upload.py b/routes/side/upload.py index 0497b3b..96d2569 100644 --- a/routes/side/upload.py +++ b/routes/side/upload.py @@ -136,10 +136,6 @@ async def api_upload(user): elif text.strip(): data = text.encode("utf-8") fname = iso_stamp_filename("pasted", "txt") - path = current_app.upload_folder / fname - - async with aiofiles.open(path, "wb") as f: - await f.write(data) storage_id = await current_app.convex.send_to_storage(data=data, content_type="text/plain") diff --git a/templates/side/views/webpage/files/upload.htm b/templates/side/views/webpage/files/upload.htm index b4e805e..94b0063 100644 --- a/templates/side/views/webpage/files/upload.htm +++ b/templates/side/views/webpage/files/upload.htm @@ -176,20 +176,30 @@ fileInput.addEventListener('change',e=>{ }); /* ====== Clipboard handling ====== */ -window.addEventListener('paste',e=>{ - if(file || (text && text.trim())) return; - const items=e.clipboardData?.items||[]; - const fItem=[...items].find(it=>it.kind==='file'); - if(fItem){ +window.addEventListener('paste', e => { + if (e.target === pasteEl) return; // 👈 let browser handle it + + if (file || (text && text.trim())) return; + + const items = e.clipboardData?.items || []; + const fItem = [...items].find(it => it.kind === 'file'); + + if (fItem) { e.preventDefault(); - const blob=fItem.getAsFile(); - if(blob) setFileFromBlob(blob); + const blob = fItem.getAsFile(); + if (blob) setFileFromBlob(blob); return; } - const pasted=e.clipboardData?.getData('text')||''; - if(pasted){ pasteEl.value=pasted; text=pasted; updateUI(); } + + const pasted = e.clipboardData?.getData('text') || ''; + if (pasted) { + pasteEl.value = pasted; + text = pasted; + updateUI(); + } }); -pasteEl.addEventListener('input',e=>{ text = e.target.value; updateUI(); }); + +pasteEl.addEventListener('input',e => { text = e.target.value; updateUI(); }); /* ====== Expiration handling ====== */ expiresMode.addEventListener('change',()=>{