(dt)
| 324 | |
| 325 | // Drag-and-drop of text or .py files. Fires `drop`, not `paste`. |
| 326 | const hasTextOrFiles = (dt) => { |
| 327 | if (!dt) return false; |
| 328 | const types = Array.from(dt.types || []); |
| 329 | return types.includes('text/plain') || types.includes('Files'); |
| 330 | }; |
| 331 | ed.addEventListener('dragover', (e) => { if (hasTextOrFiles(e.dataTransfer)) e.preventDefault(); }, { signal }); |
| 332 | ed.addEventListener('drop', async (e) => { |
| 333 | const dt = e.dataTransfer; if (!hasTextOrFiles(dt)) return; |