mirror of
https://github.com/discourse/discourse.git
synced 2024-12-17 19:45:58 +08:00
9f56d7d19d
There were 2 issues: 1. We were resetting our tracking on large amounts of idle time 2. We used focus trakcing which is fragile and broken on iPad vs page visibility API
71 lines
1.9 KiB
JavaScript
71 lines
1.9 KiB
JavaScript
/**
|
|
Keep track of when the browser is in focus.
|
|
**/
|
|
export default {
|
|
name: 'focus-event',
|
|
|
|
initialize: function() {
|
|
var hidden = "hidden";
|
|
|
|
// Default to true
|
|
Discourse.set('hasFocus', true);
|
|
|
|
var gotFocus = function() {
|
|
if(!Discourse.get('hasFocus')){
|
|
Discourse.setProperties({hasFocus: true, notify: false});
|
|
}
|
|
};
|
|
|
|
var lostFocus = function() {
|
|
if(Discourse.get('hasFocus')) {
|
|
Discourse.set('hasFocus', false);
|
|
}
|
|
};
|
|
|
|
var onchange = function(evt) {
|
|
var v = 'visible', h = 'hidden',
|
|
evtMap = {
|
|
focus:v, focusin:v, pageshow:v, blur:h, focusout:h, pagehide:h
|
|
};
|
|
|
|
evt = evt || window.event;
|
|
if (evt.type in evtMap){
|
|
if(evtMap[evt.type] === 'hidden') {
|
|
lostFocus();
|
|
} else {
|
|
gotFocus();
|
|
}
|
|
}
|
|
else {
|
|
if(this[hidden]) {
|
|
lostFocus();
|
|
} else {
|
|
gotFocus();
|
|
}
|
|
}
|
|
};
|
|
|
|
// from StackOverflow http://stackoverflow.com/a/1060034/17174
|
|
if (hidden in document) {
|
|
document.addEventListener('visibilitychange', onchange);
|
|
}
|
|
else if ((hidden = 'mozHidden') in document) {
|
|
document.addEventListener('mozvisibilitychange', onchange);
|
|
}
|
|
else if ((hidden = 'webkitHidden') in document) {
|
|
document.addEventListener('webkitvisibilitychange', onchange);
|
|
}
|
|
else if ((hidden = 'msHidden') in document) {
|
|
document.addEventListener('msvisibilitychange', onchange);
|
|
}
|
|
// IE 9 and lower:
|
|
else if ('onfocusin' in document) {
|
|
document.onfocusin = document.onfocusout = onchange;
|
|
}
|
|
// All others (including iPad which is a bit weird and gives onpageshow / hide
|
|
else {
|
|
window.onpageshow = window.onpagehide = window.onfocus = window.onblur = onchange;
|
|
}
|
|
}
|
|
};
|