snappymail/dev/External/ifvisible.js
2021-08-10 17:07:26 +02:00

40 lines
882 B
JavaScript

(doc => {
let idle = 'idle',
visible = 'visible',
status = visible,
timer = 0,
wakeUp = () => {
clearTimeout(timer);
status = visible;
timer = setTimeout(() => {
if (status === visible) {
status = idle;
dispatchEvent(new CustomEvent(idle));
}
}, 10000);
},
init = () => {
init = () => 0;
// Safari
addEventListener('pagehide', () => status = 'hidden');
// Else
doc.addEventListener('visibilitychange', () => {
status = doc.visibilityState;
doc.hidden || wakeUp();
});
wakeUp();
['mousemove','keyup','touchstart'].forEach(t => doc.addEventListener(t, wakeUp));
['scroll','pageshow'].forEach(t => addEventListener(t, wakeUp));
};
this.ifvisible = {
idle: callback => {
init();
addEventListener(idle, callback);
},
now: () => {
init();
return status === visible;
}
};
})(document);