@@ -176,58 +176,36 @@ export function toggleClass(node: HTMLElement, className: string, shouldHaveIt?:
176176 }
177177}
178178
179- class DomListener extends Disposable {
179+ class DomListener implements IDisposable {
180180
181- private _usedAddEventListener : boolean ;
182- private _wrapHandler : ( e : any ) => void ;
183- private _node : any ;
184- private _type : string ;
185- private _useCapture : boolean ;
186-
187- constructor ( node : Element | Window | Document , type : string , handler : ( e : any ) => void , useCapture ?: boolean ) {
188- super ( ) ;
181+ private _handler : ( e : any ) => void ;
182+ private _node : Element | Window | Document ;
183+ private readonly _type : string ;
184+ private readonly _useCapture : boolean ;
189185
186+ constructor ( node : Element | Window | Document , type : string , handler : ( e : any ) => void , useCapture : boolean ) {
190187 this . _node = node ;
191188 this . _type = type ;
189+ this . _handler = handler ;
192190 this . _useCapture = ( useCapture || false ) ;
193-
194- this . _wrapHandler = ( e ) => {
195- e = e || window . event ;
196- handler ( e ) ;
197- } ;
198-
199- if ( typeof this . _node . addEventListener === 'function' ) {
200- this . _usedAddEventListener = true ;
201- this . _node . addEventListener ( this . _type , this . _wrapHandler , this . _useCapture ) ;
202- } else {
203- this . _usedAddEventListener = false ;
204- this . _node . attachEvent ( 'on' + this . _type , this . _wrapHandler ) ;
205- }
191+ this . _node . addEventListener ( this . _type , this . _handler , this . _useCapture ) ;
206192 }
207193
208194 public dispose ( ) : void {
209- if ( ! this . _wrapHandler ) {
195+ if ( ! this . _handler ) {
210196 // Already disposed
211197 return ;
212198 }
213199
214- if ( this . _usedAddEventListener ) {
215- this . _node . removeEventListener ( this . _type , this . _wrapHandler , this . _useCapture ) ;
216- } else {
217- this . _node . detachEvent ( 'on' + this . _type , this . _wrapHandler ) ;
218- }
200+ this . _node . removeEventListener ( this . _type , this . _handler , this . _useCapture ) ;
219201
220202 // Prevent leakers from holding on to the dom or handler func
221203 this . _node = null ;
222- this . _wrapHandler = null ;
204+ this . _handler = null ;
223205 }
224206}
225207
226- export function addDisposableListener ( node : Element , type : string , handler : ( event : any ) => void , useCapture ?: boolean ) : IDisposable ;
227- export function addDisposableListener ( node : Element | Window , type : string , handler : ( event : any ) => void , useCapture ?: boolean ) : IDisposable ;
228- export function addDisposableListener ( node : Window , type : string , handler : ( event : any ) => void , useCapture ?: boolean ) : IDisposable ;
229- export function addDisposableListener ( node : Document , type : string , handler : ( event : any ) => void , useCapture ?: boolean ) : IDisposable ;
230- export function addDisposableListener ( node : any , type : string , handler : ( event : any ) => void , useCapture ?: boolean ) : IDisposable {
208+ export function addDisposableListener ( node : Element | Window | Document , type : string , handler : ( event : any ) => void , useCapture ?: boolean ) : IDisposable {
231209 return new DomListener ( node , type , handler , useCapture ) ;
232210}
233211
@@ -444,9 +422,9 @@ class AnimationFrameQueueItem implements IDisposable {
444422 } ;
445423} ) ( ) ;
446424
447- /// <summary>
448- /// Add a throttled listener. `handler` is fired at most every 16ms or with the next animation frame (if browser supports it).
449- /// </summary>
425+ /**
426+ * Add a throttled listener. `handler` is fired at most every 16ms or with the next animation frame (if browser supports it).
427+ */
450428export interface IEventMerger < R > {
451429 ( lastEvent : R , currentEvent : Event ) : R ;
452430}
0 commit comments