This repository has been archived on 2023-03-18. You can view files and clone it, but cannot push or open issues or pull requests.
osr-discourse-src/app/assets/javascripts/discourse/initializers/focus-event.js.es6
2018-06-15 17:03:24 +02:00

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