ng2-idle
Version:
A module for responding to idle users in Angular2 applications.
62 lines (49 loc) • 1.91 kB
text/typescript
/**
* ng2-idle - A module for responding to idle users in Angular2 applications.
# @author Mike Grabski <me@mikegrabski.com> (http://mikegrabski.com/)
* @version v1.0.0-alpha.18
* @link https://github.com/HackedByChinese/ng2-idle.git#readme
* @license MIT
*/
import {Observable, Subscription} from 'rxjs/Rx';
import {InterruptArgs} from './interruptargs';
import {InterruptSource} from './interruptsource';
/*
* An interrupt source on an EventTarget object, such as a Window or HTMLElement.
*/
export class EventTargetInterruptSource extends InterruptSource {
private eventSrc: Array<Observable<any>> = new Array;
private eventSubscription: Array<Subscription> = new Array;
constructor(protected target, protected events: string, protected throttleDelay = 500) {
super(null, null);
let self = this;
events.split(' ').forEach(function(event) {
let src = Observable.fromEvent(target, event);
if (self.throttleDelay > 0) {
src = src.throttleTime(self.throttleDelay);
}
self.eventSrc.push(src);
});
let handler = function(innerArgs: any): void {
if (self.filterEvent(innerArgs)) {
return;
}
let args = new InterruptArgs(this, innerArgs);
self.onInterrupt.emit(args);
};
this.attachFn = () => {
this.eventSrc.forEach(
(src: Observable<any>) => { self.eventSubscription.push(src.subscribe(handler)); });
};
this.detachFn = () => {
this.eventSubscription.forEach((sub: Subscription) => { sub.unsubscribe(); });
this.eventSubscription.length = 0;
};
}
/*
* Checks to see if the event should be filtered. Always returns false unless overriden.
* @param event - The original event object.
* @return True if the event should be filtered (don't cause an interrupt); otherwise, false.
*/
protected filterEvent(event: any): boolean { return false; }
}