ngx-screen-saver
Version:
Screen saver component for Angular.
37 lines • 5.84 kB
JavaScript
import { Injectable } from '@angular/core';
import { BehaviorSubject, fromEvent, merge, timer } from 'rxjs';
import { switchMap, tap, startWith, throttleTime } from 'rxjs/operators';
import * as i0 from "@angular/core";
export class IdleDetectionService {
constructor() {
this.isIdleSubject = new BehaviorSubject(false);
this.isIdle$ = this.isIdleSubject.asObservable();
this.activityEvents$ = merge(fromEvent(window, 'mousemove'), fromEvent(window, 'resize'), fromEvent(document, 'keydown'), fromEvent(document, 'mousedown'), fromEvent(document, 'touchstart'));
}
startIdleDetection(idleAfterMs) {
this.idleAfterMs = idleAfterMs;
this.idleDetectionSubscription = this.activityEvents$
.pipe(
// trigger idle detection before any user activity events
startWith(undefined), throttleTime(100), tap(() => {
this.isIdleSubject.next(false);
}), switchMap(() => {
return timer(this.idleAfterMs).pipe(tap(() => {
this.isIdleSubject.next(true);
}));
}))
.subscribe();
}
stopIdleDetection() {
this.idleDetectionSubscription?.unsubscribe();
}
}
IdleDetectionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: IdleDetectionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
IdleDetectionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: IdleDetectionService, providedIn: 'root' });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: IdleDetectionService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root',
}]
}], ctorParameters: function () { return []; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRsZS1kZXRlY3Rpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zY3JlZW4tc2F2ZXIvc3JjL2xpYi9zZXJ2aWNlcy9pZGxlLWRldGVjdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFnQixlQUFlLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUt6RSxNQUFNLE9BQU8sb0JBQW9CO0lBQy9CO1FBSVEsa0JBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNyRCxZQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUUzQyxvQkFBZSxHQUFHLEtBQUssQ0FDN0IsU0FBUyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsRUFDOUIsU0FBUyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsRUFDM0IsU0FBUyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsRUFDOUIsU0FBUyxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsRUFDaEMsU0FBUyxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FDbEMsQ0FBQztJQWJhLENBQUM7SUFpQmhCLGtCQUFrQixDQUFDLFdBQW1CO1FBQ3BDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBRS9CLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMsZUFBZTthQUNsRCxJQUFJO1FBQ0gseURBQXlEO1FBQ3pELFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFDcEIsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUNqQixHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ1AsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNiLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQ2pDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7Z0JBQ1AsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNIO2FBQ0EsU0FBUyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVELGlCQUFpQjtRQUNmLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUNoRCxDQUFDOztpSEExQ1Usb0JBQW9CO3FIQUFwQixvQkFBb0IsY0FGbkIsTUFBTTsyRkFFUCxvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIEJlaGF2aW9yU3ViamVjdCwgZnJvbUV2ZW50LCBtZXJnZSwgdGltZXIgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgc3dpdGNoTWFwLCB0YXAsIHN0YXJ0V2l0aCwgdGhyb3R0bGVUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIElkbGVEZXRlY3Rpb25TZXJ2aWNlIHtcclxuICBjb25zdHJ1Y3RvcigpIHt9XHJcblxyXG4gIGlkbGVBZnRlck1zITogbnVtYmVyO1xyXG5cclxuICBwcml2YXRlIGlzSWRsZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBwdWJsaWMgaXNJZGxlJCA9IHRoaXMuaXNJZGxlU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBhY3Rpdml0eUV2ZW50cyQgPSBtZXJnZShcclxuICAgIGZyb21FdmVudCh3aW5kb3csICdtb3VzZW1vdmUnKSxcclxuICAgIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKSxcclxuICAgIGZyb21FdmVudChkb2N1bWVudCwgJ2tleWRvd24nKSxcclxuICAgIGZyb21FdmVudChkb2N1bWVudCwgJ21vdXNlZG93bicpLFxyXG4gICAgZnJvbUV2ZW50KGRvY3VtZW50LCAndG91Y2hzdGFydCcpXHJcbiAgKTtcclxuXHJcbiAgcHJpdmF0ZSBpZGxlRGV0ZWN0aW9uU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBzdGFydElkbGVEZXRlY3Rpb24oaWRsZUFmdGVyTXM6IG51bWJlcikge1xyXG4gICAgdGhpcy5pZGxlQWZ0ZXJNcyA9IGlkbGVBZnRlck1zO1xyXG5cclxuICAgIHRoaXMuaWRsZURldGVjdGlvblN1YnNjcmlwdGlvbiA9IHRoaXMuYWN0aXZpdHlFdmVudHMkXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIC8vIHRyaWdnZXIgaWRsZSBkZXRlY3Rpb24gYmVmb3JlIGFueSB1c2VyIGFjdGl2aXR5IGV2ZW50c1xyXG4gICAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpLFxyXG4gICAgICAgIHRocm90dGxlVGltZSgxMDApLFxyXG4gICAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmlzSWRsZVN1YmplY3QubmV4dChmYWxzZSk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICAgIHJldHVybiB0aW1lcih0aGlzLmlkbGVBZnRlck1zKS5waXBlKFxyXG4gICAgICAgICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuaXNJZGxlU3ViamVjdC5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHN0b3BJZGxlRGV0ZWN0aW9uKCkge1xyXG4gICAgdGhpcy5pZGxlRGV0ZWN0aW9uU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxufVxyXG4iXX0=