From 2974b592ab21ea8a2468cc1c89614652119d9c22 Mon Sep 17 00:00:00 2001 From: toasted-nutbread Date: Sat, 22 Jun 2019 23:01:49 -0400 Subject: Allow popup window to be visible in fullscreen mode Fixes #163 --- ext/fg/js/popup.js | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) (limited to 'ext/fg/js/popup.js') diff --git a/ext/fg/js/popup.js b/ext/fg/js/popup.js index d2acf4d0..ad81cf03 100644 --- a/ext/fg/js/popup.js +++ b/ext/fg/js/popup.js @@ -33,7 +33,8 @@ class Popup { if (!this.injected) { this.injected = new Promise((resolve, reject) => { this.container.addEventListener('load', resolve); - document.body.appendChild(this.container); + this.observeFullscreen(); + this.onFullscreenChanged(); }); } @@ -138,4 +139,32 @@ class Popup { invokeApi(action, params={}) { this.container.contentWindow.postMessage({action, params}, '*'); } + + observeFullscreen() { + const fullscreenEvents = [ + 'fullscreenchange', + 'MSFullscreenChange', + 'mozfullscreenchange', + 'webkitfullscreenchange' + ]; + for (const eventName of fullscreenEvents) { + document.addEventListener(eventName, () => this.onFullscreenChanged(), false); + } + } + + getFullscreenElement() { + return ( + document.fullscreenElement || + document.msFullscreenElement || + document.mozFullScreenElement || + document.webkitFullscreenElement + ); + } + + onFullscreenChanged() { + const parent = (this.getFullscreenElement() || document.body || null); + if (parent !== null && this.container.parentNode !== parent) { + parent.appendChild(this.container); + } + } } -- cgit v1.2.3