/** 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; } } };