Code coverage report for src/observable/fromEvent.ts

Statements: 93.48% (43 / 46)      Branches: 85% (17 / 20)      Functions: 100% (10 / 10)      Lines: 91.89% (34 / 37)      Ignored: none     

All files » src/observable/ » fromEvent.ts
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 541 1 1 1     1   1 8     8 8     1 8 8 8       8 1 1 7 6 6 1 1 1     8     1 8 8 8 8 4 4     4   1   8   1  
import {Observable} from '../Observable';
import {tryCatch} from '../util/tryCatch';
import {errorObject} from '../util/errorObject';
import {Subscription} from '../Subscription';
import {Subscriber} from '../Subscriber';
 
export class FromEventObservable<T, R> extends Observable<T> {
 
  static create<T>(sourceObj: any, eventName: string, selector?: (...args: Array<any>) => T) {
    return new FromEventObservable(sourceObj, eventName, selector);
  }
 
  constructor(private sourceObj: any, private eventName: string, private selector?: (...args: Array<any>) => T) {
    super();
  }
 
  private static setupSubscription<T>(sourceObj: any, eventName: string, handler: Function, subscriber: Subscriber<T>) {
    let unsubscribe;
    let tag = sourceObj.toString();
    Iif (tag === '[object NodeList]' || tag === '[object HTMLCollection]') {
      for (let i = 0, len = sourceObj.length; i < len; i++) {
        FromEventObservable.setupSubscription(sourceObj[i], eventName, handler, subscriber);
      }
    } else if (typeof sourceObj.addEventListener === 'function' && typeof sourceObj.removeEventListener === 'function') {
      sourceObj.addEventListener(eventName, handler);
      unsubscribe = () => sourceObj.removeEventListener(eventName, handler);
    } else if (typeof sourceObj.on === 'function' && typeof sourceObj.off === 'function') {
      sourceObj.on(eventName, handler);
      unsubscribe = () => sourceObj.off(eventName, handler);
    } else Eif (typeof sourceObj.addListener === 'function' && typeof sourceObj.removeListener === 'function') {
      sourceObj.addListener(eventName, handler);
      unsubscribe = () => sourceObj.removeListener(eventName, handler);
    }
 
    subscriber.add(new Subscription(unsubscribe));
  }
 
  _subscribe(subscriber) {
    const sourceObj = this.sourceObj;
    const eventName = this.eventName;
    const selector = this.selector;
    let handler = selector ? (...args) => {
      let result = tryCatch(selector)(...args);
      Iif (result === errorObject) {
        subscriber.error(result.e);
      } else {
        subscriber.next(result);
      }
    } : (e) => subscriber.next(e);
 
    FromEventObservable.setupSubscription(sourceObj, eventName, handler, subscriber);
  }
}