1010 * @suppress {missingRequire}
1111 */
1212
13- import { ADD_EVENT_LISTENER_STR , attachOriginToPatched , FALSE_STR , isIEOrEdge , ObjectGetPrototypeOf , REMOVE_EVENT_LISTENER_STR , TRUE_STR , ZONE_SYMBOL_PREFIX , zoneSymbol } from './utils' ;
13+ import { ADD_EVENT_LISTENER_STR , attachOriginToPatched , FALSE_STR , isIE , isIEOrEdge , ObjectGetPrototypeOf , REMOVE_EVENT_LISTENER_STR , TRUE_STR , ZONE_SYMBOL_PREFIX , zoneSymbol } from './utils' ;
1414
1515/** @internal **/
1616interface EventTaskData extends TaskData {
@@ -19,15 +19,15 @@ interface EventTaskData extends TaskData {
1919}
2020
2121const pointerEventsMap : { [ key : string ] : string } = {
22- 'pointercancel ' : 'MSPointerCancel ' ,
23- 'pointerdown ' : 'MSPointerDown ' ,
24- 'pointerenter ' : 'MSPointerEnter ' ,
25- 'pointerhover ' : 'MSPointerHover ' ,
26- 'pointerleave ' : 'MSPointerLeave ' ,
27- 'pointermove ' : 'MSPointerMove ' ,
28- 'pointerout ' : 'MSPointerOut ' ,
29- 'pointerover ' : 'MSPointerOver ' ,
30- 'pointerup ' : 'MSPointerUp '
22+ 'MSPointerCancel ' : 'pointercancel ' ,
23+ 'MSPointerDown ' : 'pointerdown ' ,
24+ 'MSPointerEnter ' : 'pointerenter ' ,
25+ 'MSPointerHover ' : 'pointerhover ' ,
26+ 'MSPointerLeave ' : 'pointerleave ' ,
27+ 'MSPointerMove ' : 'pointermove ' ,
28+ 'MSPointerOut ' : 'pointerout ' ,
29+ 'MSPointerOver ' : 'pointerover ' ,
30+ 'MSPointerUp ' : 'pointerup '
3131} ;
3232
3333let passiveSupported = false ;
@@ -99,6 +99,16 @@ export function patchEventTarget(
9999 const PREPEND_EVENT_LISTENER = 'prependListener' ;
100100 const PREPEND_EVENT_LISTENER_SOURCE = '.' + PREPEND_EVENT_LISTENER + ':' ;
101101
102+ Object . keys ( pointerEventsMap ) . forEach ( msEventName => {
103+ const eventName = pointerEventsMap [ msEventName ] ;
104+ zoneSymbolEventNames [ eventName ] = { } ;
105+ zoneSymbolEventNames [ eventName ] [ FALSE_STR ] = ZONE_SYMBOL_PREFIX + eventName + FALSE_STR ;
106+ zoneSymbolEventNames [ eventName ] [ TRUE_STR ] = ZONE_SYMBOL_PREFIX + eventName + TRUE_STR ;
107+ zoneSymbolEventNames [ msEventName ] = { } ;
108+ zoneSymbolEventNames [ msEventName ] [ FALSE_STR ] = ZONE_SYMBOL_PREFIX + msEventName + FALSE_STR ;
109+ zoneSymbolEventNames [ msEventName ] [ TRUE_STR ] = ZONE_SYMBOL_PREFIX + msEventName + TRUE_STR ;
110+ } ) ;
111+
102112 const invokeTask = function ( task : any , target : any , event : Event ) {
103113 // for better performance, check isRemoved which is set
104114 // by removeEventListener
@@ -135,10 +145,13 @@ export function patchEventTarget(
135145 // || global is needed https://github.com/angular/zone.js/issues/190
136146 const target : any = this || event . target || _global ;
137147 let tasks = target [ zoneSymbolEventNames [ event . type ] [ FALSE_STR ] ] ;
138- if ( ! tasks && isIEOrEdge ) {
148+ if ( isIEOrEdge ) {
139149 const pointerMappedEvent = pointerEventsMap [ event . type ] ;
140- tasks =
141- pointerMappedEvent ? target [ zoneSymbolEventNames [ pointerMappedEvent ] ] [ FALSE_STR ] : tasks ;
150+ const msTasks =
151+ pointerMappedEvent && target [ zoneSymbolEventNames [ pointerMappedEvent ] ] [ FALSE_STR ] ;
152+ if ( msTasks ) {
153+ tasks = tasks . concat ( msTasks ) ;
154+ }
142155 }
143156 if ( tasks ) {
144157 // invoke all tasks which attached to current target with given event.type and capture = false
@@ -172,10 +185,13 @@ export function patchEventTarget(
172185 // || global is needed https://github.com/angular/zone.js/issues/190
173186 const target : any = this || event . target || _global ;
174187 let tasks = target [ zoneSymbolEventNames [ event . type ] [ TRUE_STR ] ] ;
175- if ( ! tasks && isIEOrEdge ) {
188+ if ( isIEOrEdge ) {
176189 const pointerMappedEvent = pointerEventsMap [ event . type ] ;
177- tasks =
178- pointerMappedEvent ? target [ zoneSymbolEventNames [ pointerMappedEvent ] ] [ TRUE_STR ] : tasks ;
190+ const msTasks =
191+ pointerMappedEvent && target [ zoneSymbolEventNames [ pointerMappedEvent ] ] [ FALSE_STR ] ;
192+ if ( msTasks ) {
193+ tasks = tasks . concat ( msTasks ) ;
194+ }
179195 }
180196 if ( tasks ) {
181197 // invoke all tasks which attached to current target with given event.type and capture = false
@@ -372,7 +388,11 @@ export function patchEventTarget(
372388 return ;
373389 }
374390
375- const eventName = arguments [ 0 ] ;
391+ let eventName = arguments [ 0 ] ;
392+ if ( isIEOrEdge ) {
393+ const msEventName = pointerEventsMap [ eventName ] ;
394+ eventName = msEventName ? msEventName : eventName ;
395+ }
376396 const options = arguments [ 2 ] ;
377397
378398 if ( blackListedEvents ) {
@@ -415,6 +435,13 @@ export function patchEventTarget(
415435 }
416436 let existingTasks = target [ symbolEventName ] ;
417437 let isExisting = false ;
438+ if ( isIEOrEdge && ! existingTasks ) {
439+ const msEventName = pointerEventsMap [ eventName ] ;
440+ if ( msEventName ) {
441+ existingTasks =
442+ target [ zoneSymbolEventNames [ msEventName ] [ capture ? TRUE_STR : FALSE_STR ] ] ;
443+ }
444+ }
418445 if ( existingTasks ) {
419446 // already have task registered
420447 isExisting = true ;
@@ -449,7 +476,8 @@ export function patchEventTarget(
449476 }
450477 taskData . target = target ;
451478 taskData . capture = capture ;
452- taskData . eventName = eventName ;
479+ // in pointer event, we need to use original event name here.
480+ taskData . eventName = arguments [ 0 ] ;
453481 taskData . isExisting = isExisting ;
454482
455483 const data = useGlobalCallback ? OPTIMIZED_ZONE_EVENT_TASK_DATA : undefined ;
@@ -511,7 +539,11 @@ export function patchEventTarget(
511539
512540 proto [ REMOVE_EVENT_LISTENER ] = function ( ) {
513541 const target = this || _global ;
514- const eventName = arguments [ 0 ] ;
542+ let eventName = arguments [ 0 ] ;
543+ if ( isIEOrEdge ) {
544+ const msEventName = pointerEventsMap [ eventName ] ;
545+ eventName = msEventName ? msEventName : eventName ;
546+ }
515547 const options = arguments [ 2 ] ;
516548
517549 let capture ;
@@ -553,6 +585,9 @@ export function patchEventTarget(
553585 // remove globalZoneAwareCallback and remove the task cache from target
554586 ( existingTask as any ) . allRemoved = true ;
555587 target [ symbolEventName ] = null ;
588+ if ( isIEOrEdge ) {
589+ existingTask . eventName = arguments [ 0 ] ;
590+ }
556591 }
557592 existingTask . zone . cancelTask ( existingTask ) ;
558593 if ( returnTarget ) {
0 commit comments