diff options
-rw-r--r-- | ext/fg/js/popup.js | 112 |
1 files changed, 57 insertions, 55 deletions
diff --git a/ext/fg/js/popup.js b/ext/fg/js/popup.js index 6aebc68e..8226a13a 100644 --- a/ext/fg/js/popup.js +++ b/ext/fg/js/popup.js @@ -48,6 +48,63 @@ class Popup { return window.location.href; } + // Public functions + + async setOptions(options) { + this.options = options; + this.updateTheme(); + } + + hide(changeFocus) { + if (!this.isVisible()) { + return; + } + + this.setVisible(false); + if (this.child !== null) { + this.child.hide(false); + } + if (changeFocus) { + this.focusParent(); + } + } + + async isVisibleAsync() { + return this.isVisible(); + } + + setVisibleOverride(visible) { + this.visibleOverride = visible; + this.updateVisibility(); + } + + async containsPoint(x, y) { + for (let popup = this; popup !== null && popup.isVisible(); popup = popup.child) { + const rect = popup.container.getBoundingClientRect(); + if (x >= rect.left && y >= rect.top && x < rect.right && y < rect.bottom) { + return true; + } + } + return false; + } + + async showContent(elementRect, writingMode, type=null, details=null) { + if (!this.isInitialized()) { return; } + await this.show(elementRect, writingMode); + if (type === null) { return; } + this.invokeApi('setContent', {type, details}); + } + + async setCustomCss(css) { + this.invokeApi('setCustomCss', {css}); + } + + clearAutoPlayTimer() { + if (this.isInjected) { + this.invokeApi('clearAutoPlayTimer'); + } + } + inject() { if (this.injectPromise === null) { this.injectPromise = this.createInjectPromise(); @@ -91,18 +148,6 @@ class Popup { return this.options !== null; } - async setOptions(options) { - this.options = options; - this.updateTheme(); - } - - async showContent(elementRect, writingMode, type=null, details=null) { - if (!this.isInitialized()) { return; } - await this.show(elementRect, writingMode); - if (type === null) { return; } - this.invokeApi('setContent', {type, details}); - } - async show(elementRect, writingMode) { await this.inject(); @@ -138,24 +183,6 @@ class Popup { } } - hide(changeFocus) { - if (!this.isVisible()) { - return; - } - - this.setVisible(false); - if (this.child !== null) { - this.child.hide(false); - } - if (changeFocus) { - this.focusParent(); - } - } - - async isVisibleAsync() { - return this.isVisible(); - } - isVisible() { return this.isInjected && (this.visibleOverride !== null ? this.visibleOverride : this.visible); } @@ -165,11 +192,6 @@ class Popup { this.updateVisibility(); } - setVisibleOverride(visible) { - this.visibleOverride = visible; - this.updateVisibility(); - } - updateVisibility() { this.container.style.setProperty('visibility', this.isVisible() ? 'visible' : 'hidden', 'important'); } @@ -203,20 +225,6 @@ class Popup { return dark ? 'dark' : 'light'; } - async containsPoint(x, y) { - for (let popup = this; popup !== null && popup.isVisible(); popup = popup.child) { - const rect = popup.container.getBoundingClientRect(); - if (x >= rect.left && y >= rect.top && x < rect.right && y < rect.bottom) { - return true; - } - } - return false; - } - - async setCustomCss(css) { - this.invokeApi('setCustomCss', {css}); - } - async setCustomOuterCss(css, injectDirectly) { // Cannot repeatedly inject stylesheets using web extension APIs since there is no way to remove them. if (this.stylesheetInjectedViaApi) { return; } @@ -234,12 +242,6 @@ class Popup { } } - clearAutoPlayTimer() { - if (this.isInjected) { - this.invokeApi('clearAutoPlayTimer'); - } - } - invokeApi(action, params={}) { this.container.contentWindow.postMessage({action, params}, '*'); } |