library-ts/browser/dom/ActivityAnalyser.ts

72 lines
1.5 KiB
TypeScript

import { EventSlot } from "../events/EventSlot";
import { OnBlur, OnFocus, OnMouseDown, OnMouseLeave, OnMouseMove, OnMouseUp, OnTouchCancel, OnTouchEnd, OnTouchMove, OnTouchStart } from "../dom/EventListeners";
export class ActivityAnalyser
{
readonly onActive = new EventSlot();
readonly onPassive = new EventSlot();
private _timeOutDurationMS = 3000;
private _active = false;
get active(){ return this._active; }
private _timeOutCallback:any = null;
start()
{
let setActive = ()=>
{
this._cancelPassiveState();
if ( ! this._active )
{
this._active = true;
this.onActive.dispatch( null );
}
this._reschedulePassiveState();
}
let activeEvents =
[
OnFocus, OnBlur,
OnMouseMove, OnMouseDown, OnMouseUp, OnMouseLeave,
OnTouchStart, OnTouchMove, OnTouchCancel, OnTouchEnd
];
activeEvents.forEach(
( onEvent )=>
{
onEvent.add( document.body, setActive );
}
)
}
private _cancelPassiveState()
{
if ( this._timeOutCallback )
{
clearTimeout( this._timeOutCallback );
this._timeOutCallback = null;
}
}
private _reschedulePassiveState()
{
this._cancelPassiveState();
this._timeOutCallback = setTimeout( ()=>{ this._setPassive(); }, this._timeOutDurationMS );
}
private _setPassive()
{
if ( ! this._active )
{
return;
}
this._active = false;
this.onPassive.dispatch( null );
}
}