aboutsummaryrefslogtreecommitdiff
path: root/ext/fg
diff options
context:
space:
mode:
authortoasted-nutbread <toasted-nutbread@users.noreply.github.com>2020-05-19 20:33:06 -0400
committerGitHub <noreply@github.com>2020-05-19 20:33:06 -0400
commitdd673f0b2626c2bffbcb301dc364009f077c3d08 (patch)
tree64319346c3e9a9debe76e62b6adc77034aec52e8 /ext/fg
parentdd6c3015c4af6db5f1deca797366ed6269b7d82c (diff)
Dynamic loader load style (#521)
* Remove unnecessary load of /fg/css/client.css * Replace dynamicLoader.loadStyles with dynamicLoader.loadStyle * Replace Popup._injectStylesheet with dynamicLoader.loadStyle * Remove unused global
Diffstat (limited to 'ext/fg')
-rw-r--r--ext/fg/js/popup.js78
1 files changed, 3 insertions, 75 deletions
diff --git a/ext/fg/js/popup.js b/ext/fg/js/popup.js
index 9e9debd8..b7d4b57e 100644
--- a/ext/fg/js/popup.js
+++ b/ext/fg/js/popup.js
@@ -17,8 +17,8 @@
/* global
* DOM
- * apiInjectStylesheet
* apiOptionsGet
+ * dynamicLoader
*/
class Popup {
@@ -180,12 +180,7 @@ class Popup {
}
async setCustomOuterCss(css, useWebExtensionApi) {
- return await this._injectStylesheet(
- 'yomichan-popup-outer-user-stylesheet',
- 'code',
- css,
- useWebExtensionApi
- );
+ return await dynamicLoader.loadStyle('yomichan-popup-outer-user-stylesheet', 'code', css, useWebExtensionApi);
}
setChildrenSupported(value) {
@@ -391,7 +386,7 @@ class Popup {
async _injectStyles() {
try {
- await this._injectStylesheet('yomichan-popup-outer-stylesheet', 'file', '/fg/css/client.css', true);
+ await dynamicLoader.loadStyle('yomichan-popup-outer-stylesheet', 'file', '/fg/css/client.css', true);
} catch (e) {
// NOP
}
@@ -717,71 +712,6 @@ class Popup {
};
}
- async _injectStylesheet(id, type, value, useWebExtensionApi) {
- const injectedStylesheets = Popup._injectedStylesheets;
-
- if (yomichan.isExtensionUrl(window.location.href)) {
- // Permissions error will occur if trying to use the WebExtension API to inject
- // into an extension page.
- useWebExtensionApi = false;
- }
-
- let styleNode = injectedStylesheets.get(id);
- if (typeof styleNode !== 'undefined') {
- if (styleNode === null) {
- // Previously injected via WebExtension API
- throw new Error(`Stylesheet with id ${id} has already been injected using the WebExtension API`);
- }
- } else {
- styleNode = null;
- }
-
- if (useWebExtensionApi) {
- // Inject via WebExtension API
- if (styleNode !== null && styleNode.parentNode !== null) {
- styleNode.parentNode.removeChild(styleNode);
- }
-
- await apiInjectStylesheet(type, value);
-
- injectedStylesheets.set(id, null);
- return null;
- }
-
- // Create node in document
- const parentNode = document.head;
- if (parentNode === null) {
- throw new Error('No parent node');
- }
-
- // Create or reuse node
- const isFile = (type === 'file');
- const tagName = isFile ? 'link' : 'style';
- if (styleNode === null || styleNode.nodeName.toLowerCase() !== tagName) {
- if (styleNode !== null && styleNode.parentNode !== null) {
- styleNode.parentNode.removeChild(styleNode);
- }
- styleNode = document.createElement(tagName);
- styleNode.id = id;
- }
-
- // Update node style
- if (isFile) {
- styleNode.rel = value;
- } else {
- styleNode.textContent = value;
- }
-
- // Update parent
- if (styleNode.parentNode !== parentNode) {
- parentNode.appendChild(styleNode);
- }
-
- // Add to map
- injectedStylesheets.set(id, styleNode);
- return styleNode;
- }
-
static isFrameAboutBlank(frame) {
try {
const contentDocument = frame.contentDocument;
@@ -793,5 +723,3 @@ class Popup {
}
}
}
-
-Popup._injectedStylesheets = new Map();