@@ -36,10 +36,8 @@ export class WrappedValue implements WrappedValueDefinition {
36
36
37
37
const _wrappedValues = [ new WrappedValue ( null ) , new WrappedValue ( null ) , new WrappedValue ( null ) , new WrappedValue ( null ) , new WrappedValue ( null ) ] ;
38
38
39
-
40
39
const _globalEventHandlers = { } ;
41
40
42
-
43
41
export class Observable implements ObservableDefinition {
44
42
public static propertyChangeEvent = 'propertyChange' ;
45
43
public _isViewBase : boolean ;
@@ -163,14 +161,14 @@ export class Observable implements ObservableDefinition {
163
161
throw new TypeError ( 'callback must be function.' ) ;
164
162
}
165
163
166
- const eventClass = this . name ;
164
+ const eventClass = this . name === 'Observable' ? '*' : this . name ;
167
165
if ( ! _globalEventHandlers [ eventClass ] ) {
168
166
_globalEventHandlers [ eventClass ] = { } ;
169
167
}
170
168
if ( ! Array . isArray ( _globalEventHandlers [ eventClass ] [ eventName ] ) ) {
171
169
_globalEventHandlers [ eventClass ] [ eventName ] = [ ] ;
172
170
}
173
- _globalEventHandlers [ eventClass ] [ eventName ] . push ( { callback, thisArg, once : true } ) ;
171
+ _globalEventHandlers [ eventClass ] [ eventName ] . push ( { callback, thisArg, once : true } ) ;
174
172
}
175
173
176
174
public static off ( eventName : string , callback ?: any , thisArg ?: any ) : void {
@@ -186,10 +184,12 @@ export class Observable implements ObservableDefinition {
186
184
throw new TypeError ( 'callback must be function.' ) ;
187
185
}
188
186
189
- const eventClass = this . name ;
187
+ const eventClass = this . name === 'Observable' ? '*' : this . name ;
190
188
191
189
// Short Circuit if no handlers exist..
192
- if ( ! _globalEventHandlers [ eventClass ] || ! Array . isArray ( _globalEventHandlers [ eventClass ] [ eventName ] ) ) { return ; }
190
+ if ( ! _globalEventHandlers [ eventClass ] || ! Array . isArray ( _globalEventHandlers [ eventClass ] [ eventName ] ) ) {
191
+ return ;
192
+ }
193
193
194
194
const events = _globalEventHandlers [ eventClass ] [ eventName ] ;
195
195
if ( thisArg ) {
@@ -221,7 +221,6 @@ export class Observable implements ObservableDefinition {
221
221
if ( keys . length === 0 ) {
222
222
delete _globalEventHandlers [ eventClass ] ;
223
223
}
224
-
225
224
}
226
225
227
226
public static addEventListener ( eventName : string , callback : any , thisArg ?: any ) : void {
@@ -233,41 +232,52 @@ export class Observable implements ObservableDefinition {
233
232
throw new TypeError ( 'callback must be function.' ) ;
234
233
}
235
234
236
- const eventClass = this . name ;
237
- if ( ! _globalEventHandlers [ eventClass ] ) {
238
- _globalEventHandlers [ eventClass ] = { } ;
239
- }
240
- if ( ! Array . isArray ( _globalEventHandlers [ eventClass ] [ eventName ] ) ) {
241
- _globalEventHandlers [ eventClass ] [ eventName ] = [ ] ;
242
- }
243
- _globalEventHandlers [ eventClass ] [ eventName ] . push ( { callback, thisArg} ) ;
235
+ const eventClass = this . name === 'Observable' ? '*' : this . name ;
236
+ if ( ! _globalEventHandlers [ eventClass ] ) {
237
+ _globalEventHandlers [ eventClass ] = { } ;
238
+ }
239
+ if ( ! Array . isArray ( _globalEventHandlers [ eventClass ] [ eventName ] ) ) {
240
+ _globalEventHandlers [ eventClass ] [ eventName ] = [ ] ;
241
+ }
242
+ _globalEventHandlers [ eventClass ] [ eventName ] . push ( { callback, thisArg } ) ;
244
243
}
245
244
246
- public notify < T extends EventData > ( data : T ) : void {
247
- const eventClass = this . constructor . name ;
245
+ private _globalNotify < T extends EventData > ( eventClass : string , eventType : string , data : T ) : void {
246
+ // Check for the Global handlers for JUST this class
248
247
if ( _globalEventHandlers [ eventClass ] ) {
249
- const event = data . eventName + "First" ;
248
+ const event = data . eventName + eventType ;
250
249
const events = _globalEventHandlers [ eventClass ] [ event ] ;
251
250
if ( events ) {
252
251
Observable . _handleEvent ( events , data ) ;
253
252
}
254
253
}
255
254
255
+ // Check for he Global handlers for ALL classes
256
+ if ( _globalEventHandlers [ '*' ] ) {
257
+ const event = data . eventName + eventType ;
258
+ const events = _globalEventHandlers [ '*' ] [ event ] ;
259
+ if ( events ) {
260
+ Observable . _handleEvent ( events , data ) ;
261
+ }
262
+ }
263
+ }
264
+
265
+ public notify < T extends EventData > ( data : T ) : void {
266
+ const eventClass = this . constructor . name ;
267
+ this . _globalNotify ( eventClass , 'First' , data ) ;
268
+
256
269
const observers = < Array < ListenerEntry > > this . _observers [ data . eventName ] ;
257
270
if ( observers ) {
258
271
Observable . _handleEvent ( observers , data ) ;
259
272
}
260
273
261
- if ( _globalEventHandlers [ eventClass ] ) {
262
- const events = _globalEventHandlers [ eventClass ] [ data . eventName ] ;
263
- if ( events ) {
264
- Observable . _handleEvent ( events , data ) ;
265
- }
266
- }
274
+ this . _globalNotify ( eventClass , '' , data ) ;
267
275
}
268
276
269
277
private static _handleEvent < T extends EventData > ( observers : Array < ListenerEntry > , data : T ) : void {
270
- if ( ! observers ) { return ; }
278
+ if ( ! observers ) {
279
+ return ;
280
+ }
271
281
for ( let i = observers . length - 1 ; i >= 0 ; i -- ) {
272
282
const entry = observers [ i ] ;
273
283
if ( entry . once ) {
0 commit comments