72 lines
1.5 KiB
TypeScript
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 );
|
|
}
|
|
|
|
} |