BUGFIX: unclearable blue unread circles

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
This commit is contained in:
Sam Saffron 2014-06-10 10:03:29 +10:00
parent 56cd60f226
commit 9f56d7d19d
2 changed files with 57 additions and 6 deletions

View File

@ -5,14 +5,66 @@ export default {
name: 'focus-event',
initialize: function() {
var hidden = "hidden";
// Default to true
Discourse.set('hasFocus', true);
$(window).focus(function() {
Discourse.setProperties({hasFocus: true, notify: false});
}).blur(function() {
Discourse.set('hasFocus', false);
});
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;
}
}
};

View File

@ -149,7 +149,6 @@ Discourse.ScreenTrack = Ember.Object.extend({
// If the user hasn't scrolled the browser in a long time, stop tracking time read
var sinceScrolled = new Date().getTime() - this.get('lastScrolled');
if (sinceScrolled > PAUSE_UNLESS_SCROLLED) {
this.reset();
return;
}