discourse/app/assets/javascripts/discourse-common/mixins/focus-event.js.es6

46 lines
1.3 KiB
Plaintext
Raw Normal View History

import { bind } from "@ember/runloop";
import { getOwner } from "discourse-common/lib/get-owner";
import Mixin from "@ember/object/mixin";
export default Mixin.create({
ready() {
this._super(...arguments);
this._onChangeHandler = bind(this, this._onChange);
// Default to true
Discourse.set("hasFocus", true);
document.addEventListener("visibilitychange", this._onChangeHandler);
document.addEventListener("resume", this._onChangeHandler);
document.addEventListener("freeze", this._onChangeHandler);
},
reset() {
this._super(...arguments);
document.removeEventListener("visibilitychange", this._onChangeHandler);
document.removeEventListener("resume", this._onChangeHandler);
document.removeEventListener("freeze", this._onChangeHandler);
this._onChangeHandler = null;
},
_onChange() {
const container = getOwner(this);
const appEvents = container.lookup("service:app-events");
if (document.visibilityState === "hidden") {
if (Discourse.hasFocus) {
Discourse.set("hasFocus", false);
appEvents.trigger("discourse:focus-changed", false);
}
} else {
if (!Discourse.hasFocus) {
Discourse.set("hasFocus", true);
appEvents.trigger("discourse:focus-changed", true);
}
}
}
});