@@ -244,6 +244,8 @@ export class BlockMenuView {
244
244
245
245
hoveredBlock : HTMLElement | undefined ;
246
246
247
+ // Used to check if currently dragged content comes from this editor instance.
248
+ isDragging = false ;
247
249
menuOpen = false ;
248
250
menuFrozen = false ;
249
251
@@ -264,6 +266,7 @@ export class BlockMenuView {
264
266
265
267
document . body . addEventListener ( "drop" , this . onDrop , true ) ;
266
268
document . body . addEventListener ( "dragover" , this . onDragOver ) ;
269
+ this . ttEditor . view . dom . addEventListener ( "dragstart" , this . onDragStart ) ;
267
270
268
271
// Shows or updates menu position whenever the cursor moves, if the menu isn't frozen.
269
272
document . body . addEventListener ( "mousemove" , this . onMouseMove , true ) ;
@@ -277,20 +280,29 @@ export class BlockMenuView {
277
280
document . body . addEventListener ( "keydown" , this . onKeyDown , true ) ;
278
281
}
279
282
283
+ /**
284
+ * Sets isDragging when dragging text.
285
+ */
286
+ onDragStart = ( ) => {
287
+ this . isDragging = true ;
288
+ } ;
289
+
280
290
/**
281
291
* If the event is outside the editor contents,
282
292
* we dispatch a fake event, so that we can still drop the content
283
293
* when dragging / dropping to the side of the editor
284
294
*/
285
295
onDrop = ( event : DragEvent ) => {
286
- if ( ( event as any ) . synthetic ) {
296
+ if ( ( event as any ) . synthetic || ! this . isDragging ) {
287
297
return ;
288
298
}
289
299
let pos = this . ttEditor . view . posAtCoords ( {
290
300
left : event . clientX ,
291
301
top : event . clientY ,
292
302
} ) ;
293
303
304
+ this . isDragging = false ;
305
+
294
306
if ( ! pos || pos . inside === - 1 ) {
295
307
const evt = new Event ( "drop" , event ) as any ;
296
308
const editorBoundingBox = (
@@ -312,7 +324,7 @@ export class BlockMenuView {
312
324
* when dragging / dropping to the side of the editor
313
325
*/
314
326
onDragOver = ( event : DragEvent ) => {
315
- if ( ( event as any ) . synthetic ) {
327
+ if ( ( event as any ) . synthetic || ! this . isDragging ) {
316
328
return ;
317
329
}
318
330
let pos = this . ttEditor . view . posAtCoords ( {
@@ -429,6 +441,7 @@ export class BlockMenuView {
429
441
}
430
442
document . body . removeEventListener ( "mousemove" , this . onMouseMove ) ;
431
443
document . body . removeEventListener ( "dragover" , this . onDragOver ) ;
444
+ this . ttEditor . view . dom . removeEventListener ( "dragstart" , this . onDragStart ) ;
432
445
document . body . removeEventListener ( "drop" , this . onDrop ) ;
433
446
document . body . removeEventListener ( "mousedown" , this . onMouseDown ) ;
434
447
document . removeEventListener ( "scroll" , this . onScroll ) ;
@@ -488,8 +501,11 @@ export class BlockMenuView {
488
501
return {
489
502
editor : this . editor ,
490
503
addBlock : ( ) => this . addBlock ( ) ,
491
- blockDragStart : ( event : DragEvent ) =>
492
- dragStart ( event , this . ttEditor . view ) ,
504
+ blockDragStart : ( event : DragEvent ) => {
505
+ // Sets isDragging when dragging blocks.
506
+ this . isDragging = true ;
507
+ dragStart ( event , this . ttEditor . view ) ;
508
+ } ,
493
509
blockDragEnd : ( ) => unsetDragImage ( ) ,
494
510
freezeMenu : ( ) => {
495
511
this . menuFrozen = true ;
0 commit comments