diff options
-rw-r--r-- | src/assets/javascripts/helpers/general.js | 18 | ||||
-rw-r--r-- | src/pages/background/background.js | 46 | ||||
-rw-r--r-- | src/pages/errors/instance_offline.html | 29 | ||||
-rw-r--r-- | src/pages/errors/instance_offline.js | 2 | ||||
-rw-r--r-- | src/pages/options/general/general.html | 5 | ||||
-rw-r--r-- | src/pages/options/general/general.js | 7 | ||||
-rw-r--r-- | src/pages/popup/popup.js | 4 |
7 files changed, 105 insertions, 6 deletions
diff --git a/src/assets/javascripts/helpers/general.js b/src/assets/javascripts/helpers/general.js index 66edf93e..1d99dfdd 100644 --- a/src/assets/javascripts/helpers/general.js +++ b/src/assets/javascripts/helpers/general.js @@ -29,7 +29,6 @@ let exceptions = { "url": [], "regex": [], }; - const getExceptions = () => exceptions; function setExceptions(val) { exceptions = val; @@ -37,6 +36,14 @@ function setExceptions(val) { console.log("exceptions: ", val) } +let autoRedirect; +const getAutoRedirect = () => autoRedirect; +function setAutoRedirect(val) { + autoRedirect = val; + browser.storage.local.set({ autoRedirect }) + console.log("autoRedirect: ", val) +} + function isException(url) { for (const item of exceptions.url) { console.log(item, `${url.protocol}//${url.host}`) @@ -55,7 +62,8 @@ async function init() { "alwaysUsePreferred", "theme", "applyThemeToSites", - "popupFrontends" + "popupFrontends", + "autoRedirect" ], r => { // r = result if (r.exceptions) exceptions = r.exceptions; @@ -78,6 +86,9 @@ async function init() { "wikipedia", "medium", ]; + + autoRedirect = r.autoRedirect ?? false; + resolve(); } ) @@ -114,6 +125,9 @@ export default { getExceptions, setExceptions, + getAutoRedirect, + setAutoRedirect, + getAlwaysUsePreferred, setAlwaysUsePreferred, diff --git a/src/pages/background/background.js b/src/pages/background/background.js index cf893143..f93944e4 100644 --- a/src/pages/background/background.js +++ b/src/pages/background/background.js @@ -110,6 +110,52 @@ browser.tabs.onRemoved.addListener((tabId) => { } }); + + + + +browser.webRequest.onResponseStarted.addListener( + details => { + console.log("onResponseStarted"); + let autoRedirect = generalHelper.getAutoRedirect(); + + if (!autoRedirect) return null; + + if (details.statusCode >= 500) { + + const url = new URL(details.url); + let newUrl; + + newUrl = youtubeHelper.changeInstance(url); + + if (!newUrl) newUrl = twitterHelper.changeInstance(url); + + if (!newUrl) newUrl = instagramHelper.changeInstance(url); + + if (!newUrl) newUrl = redditHelper.changeInstance(url); + + if (!newUrl) newUrl = searchHelper.changeInstance(url); + + if (!newUrl) newUrl = translateHelper.changeInstance(url); + + if (!newUrl) newUrl = mediumHelper.changeInstance(url); + + if (!newUrl) newUrl = imgurHelper.changeInstance(url); + + if (!newUrl) newUrl = wikipediaHelper.changeInstance(url) + + if (newUrl) { + browser.tabs.update({ url: '../errors/instance_offline.html' }); + + setTimeout(() => browser.tabs.update({ url: newUrl }), 2000); + } + + + } + }, + { urls: ["<all_urls>"], } +) + browser.tabs.onUpdated.addListener( (tabId, changeInfo, _) => { let url; diff --git a/src/pages/errors/instance_offline.html b/src/pages/errors/instance_offline.html new file mode 100644 index 00000000..7536b3c2 --- /dev/null +++ b/src/pages/errors/instance_offline.html @@ -0,0 +1,29 @@ +<!DOCTYPE html> +<html lang="en"> + +<head> + <meta charset="UTF-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1" /> + <title>Instance is offline</title> + <link href="../stylesheets/styles.css" rel="stylesheet" /> + <style> + body { + height: 100vh; + width: 100vw; + display: flex; + justify-content: center; + align-items: center; + font-size: 30px; + } + </style> + +</head> + +<body> + This instance is offline, you'll be redirected after <span id="number">2</span> seconds + + <script src="instance_offline.js"></script> +</body> + +</html> \ No newline at end of file diff --git a/src/pages/errors/instance_offline.js b/src/pages/errors/instance_offline.js new file mode 100644 index 00000000..586585d6 --- /dev/null +++ b/src/pages/errors/instance_offline.js @@ -0,0 +1,2 @@ +setTimeout(() => document.getElementById("number").innerHTML = '1', 1000); +setTimeout(() => document.getElementById("number").innerHTML = '0', 2000); \ No newline at end of file diff --git a/src/pages/options/general/general.html b/src/pages/options/general/general.html index fcee2089..acacc59f 100644 --- a/src/pages/options/general/general.html +++ b/src/pages/options/general/general.html @@ -110,6 +110,11 @@ </div> <div class="some-block option-block"> + <h4>Auto Redirect of offline instances</h4> + <input id="auto-redirect" type="checkbox" checked /> + </div> + + <div class="some-block option-block"> <h4>Exceptions</h4> </div> diff --git a/src/pages/options/general/general.js b/src/pages/options/general/general.js index f65fa290..54a1fd19 100644 --- a/src/pages/options/general/general.js +++ b/src/pages/options/general/general.js @@ -62,6 +62,11 @@ alwaysUsePreferredElement.addEventListener("change", event => generalHelper.setAlwaysUsePreferred(event.target.checked) ); +let autoRedirectElement = document.getElementById("auto-redirect") +autoRedirectElement.addEventListener("change", + event => generalHelper.setAutoRedirect(event.target.checked) +); + let applyThemeToSitesElement = document.getElementById("apply-theme-to-sites") applyThemeToSitesElement.addEventListener("change", event => generalHelper.setApplyThemeToSites(event.target.checked) @@ -92,7 +97,7 @@ for (const frontend of generalHelper.allPopupFrontends) generalHelper.init().then(() => { alwaysUsePreferredElement.checked = generalHelper.getAlwaysUsePreferred(); - console.log("alwaysUsePreferredElement.checked", alwaysUsePreferredElement.checked); + autoRedirectElement.checked = generalHelper.getAutoRedirect(); themeElement.value = generalHelper.getTheme(); applyThemeToSitesElement.checked = generalHelper.getApplyThemeToSites(); instanceTypeElement.addEventListener("change", diff --git a/src/pages/popup/popup.js b/src/pages/popup/popup.js index 5d7a690d..e8ff1f3a 100644 --- a/src/pages/popup/popup.js +++ b/src/pages/popup/popup.js @@ -164,11 +164,9 @@ let popupFrontends; generalHelper.init().then(() => { popupFrontends = generalHelper.getPopupFrontends(); - for (const frontend of generalHelper.allPopupFrontends) { - console.log(frontend) + for (const frontend of generalHelper.allPopupFrontends) if (!popupFrontends.includes(frontend)) document.getElementById(frontend).classList.add("hide") else document.getElementById(frontend).classList.remove("hide") - } }); \ No newline at end of file |