/** 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); } // All others (including iPad which is a bit weird and gives onpageshow / hide else { window.onpageshow = window.onpagehide = window.onfocus = window.onblur = onchange; } } };