@@ -448,9 +448,7 @@ export class DragRef<T = any> {
448448 this . _ngZone . runOutsideAngular ( ( ) => {
449449 element . addEventListener ( 'mousedown' , this . _pointerDown , activeEventListenerOptions ) ;
450450 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 ) ;
454452 } ) ;
455453 this . _initialTransform = undefined ;
456454 this . _rootElement = element ;
@@ -637,9 +635,7 @@ export class DragRef<T = any> {
637635
638636 // Delegate the event based on whether it started from a handle or the element itself.
639637 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 ) ;
643639
644640 if ( targetHandle && ! this . _disabledHandles . has ( targetHandle ) && ! this . disabled ) {
645641 this . _initializeDragSequence ( targetHandle , event ) ;
@@ -1295,7 +1291,7 @@ export class DragRef<T = any> {
12951291 private _removeRootElementListeners ( element : HTMLElement ) {
12961292 element . removeEventListener ( 'mousedown' , this . _pointerDown , activeEventListenerOptions ) ;
12971293 element . removeEventListener ( 'touchstart' , this . _pointerDown , passiveEventListenerOptions ) ;
1298- element . removeEventListener ( 'dragstart' , preventDefault , activeEventListenerOptions ) ;
1294+ element . removeEventListener ( 'dragstart' , this . _nativeDragStart , activeEventListenerOptions ) ;
12991295 }
13001296
13011297 /**
@@ -1520,6 +1516,28 @@ export class DragRef<T = any> {
15201516
15211517 return this . _previewRect ;
15221518 }
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+ }
15231541}
15241542
15251543/**
@@ -1572,8 +1590,3 @@ function matchElementSize(target: HTMLElement, sourceRect: ClientRect): void {
15721590 target . style . height = `${ sourceRect . height } px` ;
15731591 target . style . transform = getTransform ( sourceRect . left , sourceRect . top ) ;
15741592}
1575-
1576- /** Utility to prevent the default action of an event. */
1577- function preventDefault ( event : Event ) : void {
1578- event . preventDefault ( ) ;
1579- }
0 commit comments