@@ -44,6 +44,16 @@ export const globalSources: any = {};
4444const EVENT_NAME_SYMBOL_REGX = new RegExp ( '^' + ZONE_SYMBOL_PREFIX + '(\\w+)(true|false)$' ) ;
4545const IMMEDIATE_PROPAGATION_SYMBOL = zoneSymbol ( 'propagationStopped' ) ;
4646
47+ function prepareEventNames ( eventName : string , eventNameToString ?: ( eventName : string ) => string ) {
48+ const falseEventName = ( eventNameToString ? eventNameToString ( eventName ) : eventName ) + FALSE_STR ;
49+ const trueEventName = ( eventNameToString ? eventNameToString ( eventName ) : eventName ) + TRUE_STR ;
50+ const symbol = ZONE_SYMBOL_PREFIX + falseEventName ;
51+ const symbolCapture = ZONE_SYMBOL_PREFIX + trueEventName ;
52+ zoneSymbolEventNames [ eventName ] = { } ;
53+ zoneSymbolEventNames [ eventName ] [ FALSE_STR ] = symbol ;
54+ zoneSymbolEventNames [ eventName ] [ TRUE_STR ] = symbolCapture ;
55+ }
56+
4757export interface PatchEventTargetOptions {
4858 // validateHandler
4959 vh ?: ( nativeDelegate : any , delegate : any , target : any , args : any ) => boolean ;
@@ -387,23 +397,12 @@ export function patchEventTarget(
387397 }
388398
389399 const zone = Zone . current ;
390- const symbolEventNames = zoneSymbolEventNames [ eventName ] ;
391- let symbolEventName ;
400+ let symbolEventNames = zoneSymbolEventNames [ eventName ] ;
392401 if ( ! symbolEventNames ) {
393- // the code is duplicate, but I just want to get some better performance
394- const falseEventName =
395- ( eventNameToString ? eventNameToString ( eventName ) : eventName ) + FALSE_STR ;
396- const trueEventName =
397- ( eventNameToString ? eventNameToString ( eventName ) : eventName ) + TRUE_STR ;
398- const symbol = ZONE_SYMBOL_PREFIX + falseEventName ;
399- const symbolCapture = ZONE_SYMBOL_PREFIX + trueEventName ;
400- zoneSymbolEventNames [ eventName ] = { } ;
401- zoneSymbolEventNames [ eventName ] [ FALSE_STR ] = symbol ;
402- zoneSymbolEventNames [ eventName ] [ TRUE_STR ] = symbolCapture ;
403- symbolEventName = capture ? symbolCapture : symbol ;
404- } else {
405- symbolEventName = symbolEventNames [ capture ? TRUE_STR : FALSE_STR ] ;
402+ prepareEventNames ( eventName , eventNameToString ) ;
403+ symbolEventNames = zoneSymbolEventNames [ eventName ] ;
406404 }
405+ const symbolEventName = symbolEventNames [ capture ? TRUE_STR : FALSE_STR ] ;
407406 let existingTasks = target [ symbolEventName ] ;
408407 let isExisting = false ;
409408 if ( existingTasks ) {
@@ -668,20 +667,35 @@ export function patchEventTarget(
668667}
669668
670669export function findEventTasks ( target : any , eventName : string ) : Task [ ] {
671- const foundTasks : any [ ] = [ ] ;
672- for ( let prop in target ) {
673- const match = EVENT_NAME_SYMBOL_REGX . exec ( prop ) ;
674- let evtName = match && match [ 1 ] ;
675- if ( evtName && ( ! eventName || evtName === eventName ) ) {
676- const tasks : any = target [ prop ] ;
677- if ( tasks ) {
678- for ( let i = 0 ; i < tasks . length ; i ++ ) {
679- foundTasks . push ( tasks [ i ] ) ;
670+ if ( ! eventName ) {
671+ const foundTasks : any [ ] = [ ] ;
672+ for ( let prop in target ) {
673+ const match = EVENT_NAME_SYMBOL_REGX . exec ( prop ) ;
674+ let evtName = match && match [ 1 ] ;
675+ if ( evtName && ( ! eventName || evtName === eventName ) ) {
676+ const tasks : any = target [ prop ] ;
677+ if ( tasks ) {
678+ for ( let i = 0 ; i < tasks . length ; i ++ ) {
679+ foundTasks . push ( tasks [ i ] ) ;
680+ }
680681 }
681682 }
682683 }
684+ return foundTasks ;
685+ }
686+ let symbolEventName = zoneSymbolEventNames [ eventName ] ;
687+ if ( ! symbolEventName ) {
688+ prepareEventNames ( eventName ) ;
689+ symbolEventName = zoneSymbolEventNames [ eventName ] ;
690+ }
691+ const captureFalseTasks = target [ symbolEventName [ FALSE_STR ] ] ;
692+ const captureTrueTasks = target [ symbolEventName [ TRUE_STR ] ] ;
693+ if ( ! captureFalseTasks ) {
694+ return captureTrueTasks ? captureTrueTasks . slice ( ) : [ ] ;
695+ } else {
696+ return captureTrueTasks ? captureFalseTasks . concat ( captureTrueTasks ) :
697+ captureFalseTasks . slice ( ) ;
683698 }
684- return foundTasks ;
685699}
686700
687701export function patchEventPrototype ( global : any , api : _ZonePrivate ) {
0 commit comments