ProseMirror / prosemirror

The ProseMirror WYSIWYM editor
http://prosemirror.net/
MIT License
7.59k stars 335 forks source link

Dropcursor won't remove the cursor if default drop event is prevented from custom handler #1385

Open eric-burel opened 1 year ago

eric-burel commented 1 year ago

Hi,

I couldn't build a repro because the Glitch doesn't allow to require prosemirror-dropcursor, but the bug is simple:

1) Install dropcursor 2) Write a custom drop handler that calls event.preventDefault(). I do not return anything from this handler. 3) Drop something: the cursor stays up for 5 secondes instead of 20ms because "dropcursor" never catches the drop event

It seems to me that dropcursor should have a kind of "priority" over the default drop handlers. Removing preventDefault() from my custom handler is possible but perhaps not recommended are you are supposed to call it in drop event handlers when you accept the drop, unless I misunderstand something specific to prosemirror.

Returning "true" at the end seems to have no effect.

marijnh commented 1 year ago

Does putting your custom plugin after the dropcursor plugin in the extension array help?

eric-burel commented 1 year ago

It's a custom event handler, defined using  handleDOMEvents, so not a plugin I would have tried that otherwise.

Edit: perhaps there is a way to have a plugin to add events to "handleDOMEvents", instead of listeneing to direct events? So we can control the order in which they run more cleanly?

In the meantime I'll probably copy dropcursor in my app and handle the rendering more directly

marijnh commented 1 year ago

You can create a plugin with props: {handleDOMEvents: {...}}