Reorganize popup-only public functions

This commit is contained in:
toasted-nutbread 2019-12-15 20:48:52 -05:00
parent 4014bbab42
commit 44bde5c676
2 changed files with 49 additions and 47 deletions

View File

@ -101,7 +101,7 @@ class PopupProxyHost {
async _onApiShowContent(id, elementRect, writingMode, type, details) { async _onApiShowContent(id, elementRect, writingMode, type, details) {
const popup = this._getPopup(id); const popup = this._getPopup(id);
elementRect = PopupProxyHost._convertJsonRectToDOMRect(popup, elementRect); elementRect = PopupProxyHost._convertJsonRectToDOMRect(popup, elementRect);
if (!PopupProxyHost._popupCanShow(popup)) { return Promise.resolve(false); } if (!PopupProxyHost._popupCanShow(popup)) { return; }
return await popup.showContent(elementRect, writingMode, type, details); return await popup.showContent(elementRect, writingMode, type, details);
} }

View File

@ -105,6 +105,54 @@ class Popup {
} }
} }
// Popup-only public functions
isVisible() {
return this.isInjected && (this.visibleOverride !== null ? this.visibleOverride : this.visible);
}
updateTheme() {
this.container.dataset.yomichanTheme = this.options.general.popupOuterTheme;
this.container.dataset.yomichanSiteColor = this.getSiteColor();
}
async setCustomOuterCss(css, injectDirectly) {
// Cannot repeatedly inject stylesheets using web extension APIs since there is no way to remove them.
if (this.stylesheetInjectedViaApi) { return; }
if (injectDirectly || Popup.isOnExtensionPage()) {
Popup.injectOuterStylesheet(css);
} else {
if (!css) { return; }
try {
await apiInjectStylesheet(css);
this.stylesheetInjectedViaApi = true;
} catch (e) {
// NOP
}
}
}
static injectOuterStylesheet(css) {
if (Popup.outerStylesheet === null) {
if (!css) { return; }
Popup.outerStylesheet = document.createElement('style');
Popup.outerStylesheet.id = 'yomichan-popup-outer-stylesheet';
}
const outerStylesheet = Popup.outerStylesheet;
if (css) {
outerStylesheet.textContent = css;
const par = document.head;
if (par && outerStylesheet.parentNode !== par) {
par.appendChild(outerStylesheet);
}
} else {
outerStylesheet.textContent = '';
}
}
inject() { inject() {
if (this.injectPromise === null) { if (this.injectPromise === null) {
this.injectPromise = this.createInjectPromise(); this.injectPromise = this.createInjectPromise();
@ -183,10 +231,6 @@ class Popup {
} }
} }
isVisible() {
return this.isInjected && (this.visibleOverride !== null ? this.visibleOverride : this.visible);
}
setVisible(visible) { setVisible(visible) {
this.visible = visible; this.visible = visible;
this.updateVisibility(); this.updateVisibility();
@ -212,11 +256,6 @@ class Popup {
} }
} }
updateTheme() {
this.container.dataset.yomichanTheme = this.options.general.popupOuterTheme;
this.container.dataset.yomichanSiteColor = this.getSiteColor();
}
getSiteColor() { getSiteColor() {
const color = [255, 255, 255]; const color = [255, 255, 255];
Popup.addColor(color, Popup.getColorInfo(window.getComputedStyle(document.documentElement).backgroundColor)); Popup.addColor(color, Popup.getColorInfo(window.getComputedStyle(document.documentElement).backgroundColor));
@ -225,23 +264,6 @@ class Popup {
return dark ? 'dark' : 'light'; return dark ? 'dark' : 'light';
} }
async setCustomOuterCss(css, injectDirectly) {
// Cannot repeatedly inject stylesheets using web extension APIs since there is no way to remove them.
if (this.stylesheetInjectedViaApi) { return; }
if (injectDirectly || Popup.isOnExtensionPage()) {
Popup.injectOuterStylesheet(css);
} else {
if (!css) { return; }
try {
await apiInjectStylesheet(css);
this.stylesheetInjectedViaApi = true;
} catch (e) {
// NOP
}
}
}
invokeApi(action, params={}) { invokeApi(action, params={}) {
this.container.contentWindow.postMessage({action, params}, '*'); this.container.contentWindow.postMessage({action, params}, '*');
} }
@ -400,26 +422,6 @@ class Popup {
// NOP // NOP
} }
} }
static injectOuterStylesheet(css) {
if (Popup.outerStylesheet === null) {
if (!css) { return; }
Popup.outerStylesheet = document.createElement('style');
Popup.outerStylesheet.id = 'yomichan-popup-outer-stylesheet';
}
const outerStylesheet = Popup.outerStylesheet;
if (css) {
outerStylesheet.textContent = css;
const par = document.head;
if (par && outerStylesheet.parentNode !== par) {
par.appendChild(outerStylesheet);
}
} else {
outerStylesheet.textContent = '';
}
}
} }
Popup.outerStylesheet = null; Popup.outerStylesheet = null;