@@ -442,9 +442,7 @@ export class DragRef<T = any> {
442
442
this . _ngZone . runOutsideAngular ( ( ) => {
443
443
element . addEventListener ( 'mousedown' , this . _pointerDown , activeEventListenerOptions ) ;
444
444
element . addEventListener ( 'touchstart' , this . _pointerDown , passiveEventListenerOptions ) ;
445
- // Usually this isn't necessary since the we prevent the default action in `pointerDown`,
446
- // but some cases like dragging of links can slip through (see #24403).
447
- element . addEventListener ( 'dragstart' , preventDefault , activeEventListenerOptions ) ;
445
+ element . addEventListener ( 'dragstart' , this . _nativeDragStart , activeEventListenerOptions ) ;
448
446
} ) ;
449
447
this . _initialTransform = undefined ;
450
448
this . _rootElement = element ;
@@ -631,9 +629,7 @@ export class DragRef<T = any> {
631
629
632
630
// Delegate the event based on whether it started from a handle or the element itself.
633
631
if ( this . _handles . length ) {
634
- const targetHandle = this . _handles . find ( handle => {
635
- return event . target && ( event . target === handle || handle . contains ( event . target as Node ) ) ;
636
- } ) ;
632
+ const targetHandle = this . _getTargetHandle ( event ) ;
637
633
638
634
if ( targetHandle && ! this . _disabledHandles . has ( targetHandle ) && ! this . disabled ) {
639
635
this . _initializeDragSequence ( targetHandle , event ) ;
@@ -1287,7 +1283,7 @@ export class DragRef<T = any> {
1287
1283
private _removeRootElementListeners ( element : HTMLElement ) {
1288
1284
element . removeEventListener ( 'mousedown' , this . _pointerDown , activeEventListenerOptions ) ;
1289
1285
element . removeEventListener ( 'touchstart' , this . _pointerDown , passiveEventListenerOptions ) ;
1290
- element . removeEventListener ( 'dragstart' , preventDefault , activeEventListenerOptions ) ;
1286
+ element . removeEventListener ( 'dragstart' , this . _nativeDragStart , activeEventListenerOptions ) ;
1291
1287
}
1292
1288
1293
1289
/**
@@ -1512,6 +1508,28 @@ export class DragRef<T = any> {
1512
1508
1513
1509
return this . _previewRect ;
1514
1510
}
1511
+
1512
+ /** Handles a native `dragstart` event. */
1513
+ private _nativeDragStart = ( event : DragEvent ) => {
1514
+ if ( this . _handles . length ) {
1515
+ const targetHandle = this . _getTargetHandle ( event ) ;
1516
+
1517
+ if ( targetHandle && ! this . _disabledHandles . has ( targetHandle ) && ! this . disabled ) {
1518
+ event . preventDefault ( ) ;
1519
+ }
1520
+ } else if ( ! this . disabled ) {
1521
+ // Usually this isn't necessary since the we prevent the default action in `pointerDown`,
1522
+ // but some cases like dragging of links can slip through (see #24403).
1523
+ event . preventDefault ( ) ;
1524
+ }
1525
+ } ;
1526
+
1527
+ /** Gets a handle that is the target of an event. */
1528
+ private _getTargetHandle ( event : Event ) : HTMLElement | undefined {
1529
+ return this . _handles . find ( handle => {
1530
+ return event . target && ( event . target === handle || handle . contains ( event . target as Node ) ) ;
1531
+ } ) ;
1532
+ }
1515
1533
}
1516
1534
1517
1535
/**
@@ -1564,8 +1582,3 @@ function matchElementSize(target: HTMLElement, sourceRect: ClientRect): void {
1564
1582
target . style . height = `${ sourceRect . height } px` ;
1565
1583
target . style . transform = getTransform ( sourceRect . left , sourceRect . top ) ;
1566
1584
}
1567
-
1568
- /** Utility to prevent the default action of an event. */
1569
- function preventDefault ( event : Event ) : void {
1570
- event . preventDefault ( ) ;
1571
- }
0 commit comments