@@ -448,9 +448,7 @@ export class DragRef<T = any> {
448
448
this . _ngZone . runOutsideAngular ( ( ) => {
449
449
element . addEventListener ( 'mousedown' , this . _pointerDown , activeEventListenerOptions ) ;
450
450
element . addEventListener ( 'touchstart' , this . _pointerDown , passiveEventListenerOptions ) ;
451
- // Usually this isn't necessary since the we prevent the default action in `pointerDown`,
452
- // but some cases like dragging of links can slip through (see #24403).
453
- element . addEventListener ( 'dragstart' , preventDefault , activeEventListenerOptions ) ;
451
+ element . addEventListener ( 'dragstart' , this . _nativeDragStart , activeEventListenerOptions ) ;
454
452
} ) ;
455
453
this . _initialTransform = undefined ;
456
454
this . _rootElement = element ;
@@ -637,9 +635,7 @@ export class DragRef<T = any> {
637
635
638
636
// Delegate the event based on whether it started from a handle or the element itself.
639
637
if ( this . _handles . length ) {
640
- const targetHandle = this . _handles . find ( handle => {
641
- return event . target && ( event . target === handle || handle . contains ( event . target as Node ) ) ;
642
- } ) ;
638
+ const targetHandle = this . _getTargetHandle ( event ) ;
643
639
644
640
if ( targetHandle && ! this . _disabledHandles . has ( targetHandle ) && ! this . disabled ) {
645
641
this . _initializeDragSequence ( targetHandle , event ) ;
@@ -1295,7 +1291,7 @@ export class DragRef<T = any> {
1295
1291
private _removeRootElementListeners ( element : HTMLElement ) {
1296
1292
element . removeEventListener ( 'mousedown' , this . _pointerDown , activeEventListenerOptions ) ;
1297
1293
element . removeEventListener ( 'touchstart' , this . _pointerDown , passiveEventListenerOptions ) ;
1298
- element . removeEventListener ( 'dragstart' , preventDefault , activeEventListenerOptions ) ;
1294
+ element . removeEventListener ( 'dragstart' , this . _nativeDragStart , activeEventListenerOptions ) ;
1299
1295
}
1300
1296
1301
1297
/**
@@ -1520,6 +1516,28 @@ export class DragRef<T = any> {
1520
1516
1521
1517
return this . _previewRect ;
1522
1518
}
1519
+
1520
+ /** Handles a native `dragstart` event. */
1521
+ private _nativeDragStart = ( event : DragEvent ) => {
1522
+ if ( this . _handles . length ) {
1523
+ const targetHandle = this . _getTargetHandle ( event ) ;
1524
+
1525
+ if ( targetHandle && ! this . _disabledHandles . has ( targetHandle ) && ! this . disabled ) {
1526
+ event . preventDefault ( ) ;
1527
+ }
1528
+ } else if ( ! this . disabled ) {
1529
+ // Usually this isn't necessary since the we prevent the default action in `pointerDown`,
1530
+ // but some cases like dragging of links can slip through (see #24403).
1531
+ event . preventDefault ( ) ;
1532
+ }
1533
+ } ;
1534
+
1535
+ /** Gets a handle that is the target of an event. */
1536
+ private _getTargetHandle ( event : Event ) : HTMLElement | undefined {
1537
+ return this . _handles . find ( handle => {
1538
+ return event . target && ( event . target === handle || handle . contains ( event . target as Node ) ) ;
1539
+ } ) ;
1540
+ }
1523
1541
}
1524
1542
1525
1543
/**
@@ -1572,8 +1590,3 @@ function matchElementSize(target: HTMLElement, sourceRect: ClientRect): void {
1572
1590
target . style . height = `${ sourceRect . height } px` ;
1573
1591
target . style . transform = getTransform ( sourceRect . left , sourceRect . top ) ;
1574
1592
}
1575
-
1576
- /** Utility to prevent the default action of an event. */
1577
- function preventDefault ( event : Event ) : void {
1578
- event . preventDefault ( ) ;
1579
- }
0 commit comments