about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--src/assets/javascripts/data.js1
-rw-r--r--src/assets/javascripts/helpers/common.js1
-rw-r--r--src/assets/javascripts/helpers/google-maps.js42
-rw-r--r--src/assets/javascripts/helpers/google-search.js30
-rw-r--r--src/assets/javascripts/helpers/google-translate.js20
-rw-r--r--src/assets/javascripts/helpers/instagram.js29
-rw-r--r--src/assets/javascripts/helpers/medium.js28
-rw-r--r--src/assets/javascripts/helpers/reddit.js26
-rw-r--r--src/assets/javascripts/helpers/twitter.js25
-rw-r--r--src/assets/javascripts/helpers/wikipedia.js25
-rw-r--r--src/assets/javascripts/helpers/youtube.js38
-rw-r--r--src/assets/javascripts/remove-twitter-sw.js16
-rw-r--r--src/pages/background/background.js32
-rw-r--r--src/pages/options/init.js11
-rw-r--r--src/pages/options/instagram.js4
-rw-r--r--src/pages/options/maps.js4
-rw-r--r--src/pages/options/medium.js4
-rw-r--r--src/pages/options/reddit.js12
-rw-r--r--src/pages/options/search.html1
-rw-r--r--src/pages/options/search.js6
-rw-r--r--src/pages/options/shared.js4
-rw-r--r--src/pages/options/translate.js4
-rw-r--r--src/pages/options/twitter.js6
-rw-r--r--src/pages/options/wikipedia.js4
-rw-r--r--src/pages/options/youtube.js13
-rw-r--r--src/pages/popup/popup.js73
26 files changed, 286 insertions, 173 deletions
diff --git a/src/assets/javascripts/data.js b/src/assets/javascripts/data.js
index 13172f79..fad2ea9d 100644
--- a/src/assets/javascripts/data.js
+++ b/src/assets/javascripts/data.js
@@ -1,6 +1,7 @@
 "use strict";
 
 let exceptions;
+
 function setExceptions(val) {
     exceptions = val;
     browser.storage.sync.set({ exceptions })
diff --git a/src/assets/javascripts/helpers/common.js b/src/assets/javascripts/helpers/common.js
index 094c19e4..72a62f66 100644
--- a/src/assets/javascripts/helpers/common.js
+++ b/src/assets/javascripts/helpers/common.js
@@ -4,6 +4,7 @@ import instagramHelper from "./instagram.js";
 import mediumHelper from "./medium.js";
 import redditHelper from "./reddit.js";
 import searchHelper from "./google-search.js";
+import data from '../data.js'
 import googleTranslateHelper from "./google-translate.js";
 import wikipediaHelper from "./wikipedia.js";
 import mapsHelper from "./google-maps.js";
diff --git a/src/assets/javascripts/helpers/google-maps.js b/src/assets/javascripts/helpers/google-maps.js
index f0cf01bc..321d5174 100644
--- a/src/assets/javascripts/helpers/google-maps.js
+++ b/src/assets/javascripts/helpers/google-maps.js
@@ -1,3 +1,5 @@
+import commonHelper from './common.js'
+
 const targets = /https?:\/\/(((www|maps)\.)?(google\.).*(\/maps)|maps\.(google\.).*)/;
 const redirects = {
   "normal": [
@@ -58,20 +60,21 @@ function setOsmInstance(val) {
   browser.storage.sync.set({ osmInstance })
 };
 
-function redirectGoogleMaps(url, initiator) {
-  if (disableOsm || data.isException(url, initiator))
+async function redirect(url, initiator) {
+  await init()
+  if (disableOsm)
     return null;
 
   if (initiator && initiator.host === "earth.google.com")
     return null;
 
   let redirect;
-  let link = commonHelper.getRandomInstance(mapsHelper.redirects.normal);
+  let link = commonHelper.getRandomInstance(redirects.normal);
   let mapCentre = "";
   let params = "";
   // Set map centre if present
-  if (url.pathname.match(mapsHelper.mapCentreRegex)) {
-    const [, lat, lon, zoom] = url.pathname.match(mapsHelper.mapCentreRegex);
+  if (url.pathname.match(mapCentreRegex)) {
+    const [, lat, lon, zoom] = url.pathname.match(mapCentreRegex);
     mapCentre = `#map=${zoom}/${lat}/${lon}`;
   } else if (url.search.includes("center=")) {
     const [lat, lon] = url.searchParams.get("center").split(",");
@@ -81,7 +84,7 @@ function redirectGoogleMaps(url, initiator) {
     params = "&zoom=17";
   }
   // Set map layer
-  params = `${params}&layers=${mapsHelper.layers[url.searchParams.get("layer")] || mapsHelper.layers["none"]
+  params = `${params}&layers=${layers[url.searchParams.get("layer")] || layers["none"]
     }`;
   // Handle Google Maps Embed API
   if (url.pathname.split("/").includes("embed")) {
@@ -97,25 +100,25 @@ function redirectGoogleMaps(url, initiator) {
       }
     }
     let marker, bbox;
-    mapsHelper.addressToLatLng(query, (coords, boundingbox) => {
+    addressToLatLng(query, (coords, boundingbox) => {
       marker = coords;
       bbox = boundingbox;
     });
     redirect = `${link}/export/embed.html?bbox=${bbox}&layer=mapnik&marker=${marker}`;
     // Handle Google Maps Directions
   } else if (url.pathname.split("/").includes("dir")) {
-    const travelMode = mapsHelper.travelModes[url.searchParams.get("travelmode")] || mapsHelper.travelModes["driving"];
+    const travelMode = travelModes[url.searchParams.get("travelmode")] || travelModes["driving"];
     let origin;
-    mapsHelper.addressToLatLng(url.searchParams.get("origin"), (coords) => origin = coords);
+    addressToLatLng(url.searchParams.get("origin"), (coords) => origin = coords);
     let destination;
-    mapsHelper.addressToLatLng(url.searchParams.get("destination"), (coords) => destination = coords);
+    addressToLatLng(url.searchParams.get("destination"), (coords) => destination = coords);
     redirect = `${link}/directions?engine=${travelMode}&route=${origin}%3B${destination}${mapCentre}${params}`;
     // Get marker from data attribute
   } else if (
     url.pathname.includes("data=") &&
-    url.pathname.match(mapsHelper.dataLatLngRegex)
+    url.pathname.match(dataLatLngRegex)
   ) {
-    const [mlat, mlon] = url.pathname.match(mapsHelper.dataLatLngRegex);
+    const [mlat, mlon] = url.pathname.match(dataLatLngRegex);
     redirect = `${link}/?mlat=${mlat.replace("!3d", "")}&mlon=${mlon.replace("!4d", "")}${mapCentre}${params}`;
     // Get marker from ll param
   } else if (url.searchParams.has("ll")) {
@@ -130,13 +133,23 @@ function redirectGoogleMaps(url, initiator) {
     let query;
     if (url.searchParams.has("q")) query = url.searchParams.get("q");
     else if (url.searchParams.has("query")) query = url.searchParams.get("query");
-    else if (url.pathname.match(mapsHelper.placeRegex)) query = url.pathname.match(mapsHelper.placeRegex)[1];
+    else if (url.pathname.match(placeRegex)) query = url.pathname.match(placeRegex)[1];
 
     redirect = `${link}/${query ? "search?query=" + query : ""}${mapCentre || "#"}${params}`;
   }
   return redirect;
 }
 
+
+async function init() {
+  let result = await browser.storage.sync.get([
+    "disableOsm",
+    "osmInstance",
+  ])
+  disableOsm = result.disableOsm;
+  osmInstance = result.osmInstance;
+}
+
 export default {
   targets,
   redirects,
@@ -150,5 +163,6 @@ export default {
   setDisableOsm,
   getOsmInstance,
   setOsmInstance,
-  redirectGoogleMaps,
+  redirect,
+  init,
 };
diff --git a/src/assets/javascripts/helpers/google-search.js b/src/assets/javascripts/helpers/google-search.js
index a17843b7..54c8536f 100644
--- a/src/assets/javascripts/helpers/google-search.js
+++ b/src/assets/javascripts/helpers/google-search.js
@@ -1,3 +1,5 @@
+import commonHelper from './common.js'
+
 const targets = [
   /https:\/\/google\.com/,
   /https:\/\/.*\.google\.com/,
@@ -150,12 +152,12 @@ const redirects = {
   }
 };
 
-
 let disableSearch;
 const getDisableSearch = () => disableSearch;
 function setDisableSearch(val) {
   disableSearch = val;
   browser.storage.sync.set({ disableSearch })
+  console.log("disableSearch: ", disableSearch)
 }
 
 let searchInstance;
@@ -170,22 +172,22 @@ const getSearchFrontend = () => searchFrontend;
 function setSearchFrontend(val) {
   searchFrontend = val;
   browser.storage.sync.set({ searchFrontend })
+  console.log("searchFrontend: ", searchFrontend)
 };
 
-function redirect(url, initiator) {
-  console.info("searchFrontend:", searchFrontend)
-  if (disableSearch || data.isException(url, initiator)) {
+async function redirect(url, initiator) {
+  await init();
+  if (disableSearch)
     return null;
-  }
 
   let instance;
   let path;
   if (searchFrontend == 'searx') {
-    instance = commonHelper.getRandomInstance(searchHelper.redirects.searx.normal);
+    instance = commonHelper.getRandomInstance(redirects.searx.normal);
     path = "/"
   }
   if (searchFrontend == 'whoogle') {
-    instance = commonHelper.getRandomInstance(searchHelper.redirects.whoogle.normal);
+    instance = commonHelper.getRandomInstance(redirects.whoogle.normal);
     path = "/search"
   }
 
@@ -193,9 +195,22 @@ function redirect(url, initiator) {
   url.search.slice(1).split("&").forEach(function (input) {
     if (input.startsWith("q=")) searchQuery = input;
   });
+  console.log("Will return");
   return `${instance}${path}?${searchQuery}`;
 }
 
+async function init() {
+  console.log("Init Search Helper");
+  let result = await browser.storage.sync.get([
+    "disableSearch",
+    "searchInstance",
+    "searchFrontend",
+  ])
+  disableSearch = result.disableSearch;
+  searchInstance = result.searchInstance;
+  searchFrontend = result.searchFrontend;
+}
+
 export default {
   targets,
   redirects,
@@ -206,4 +221,5 @@ export default {
   getSearchFrontend,
   setSearchFrontend,
   redirect,
+  init,
 };
diff --git a/src/assets/javascripts/helpers/google-translate.js b/src/assets/javascripts/helpers/google-translate.js
index 9560602d..025a2446 100644
--- a/src/assets/javascripts/helpers/google-translate.js
+++ b/src/assets/javascripts/helpers/google-translate.js
@@ -21,6 +21,7 @@ const getDisableSimplyTranslate = () => disableSimplyTranslate;
 function setDisableSimplyTranslate(val) {
   disableSimplyTranslate = val;
   browser.storage.sync.set({ disableSimplyTranslate })
+  console.log("disableSimplyTranslate: ", disableSimplyTranslate)
 }
 
 let simplyTranslateInstance;
@@ -30,12 +31,22 @@ function setSimplyTranslateInstance(val) {
   browser.storage.sync.set({ simplyTranslateInstance })
 };
 
-function redirectGoogleTranslate(url, initiator) {
-  if (disableSimplyTranslate || isException(url, initiator)) return null;
-
+async function redirect(url, initiator) {
+  await init()
+  if (disableSimplyTranslate)
+    return null;
   return `${simplyTranslateInstance}/${url.search}`;
 }
 
+async function init() {
+  let result = await browser.storage.sync.get([
+    "disableSimplyTranslate",
+    "simplyTranslateInstance",
+  ]);
+  disableSimplyTranslate = result.disableSimplyTranslate || false;
+  simplyTranslateInstance = result.simplyTranslateInstance;
+}
+
 export default {
   targets,
   redirects,
@@ -43,7 +54,8 @@ export default {
   setDisableSimplyTranslate,
   getSimplyTranslateInstance,
   setSimplyTranslateInstance,
-  redirectGoogleTranslate,
+  redirect,
+  init,
 };
 
 
diff --git a/src/assets/javascripts/helpers/instagram.js b/src/assets/javascripts/helpers/instagram.js
index 1d7f8890..4c83a671 100644
--- a/src/assets/javascripts/helpers/instagram.js
+++ b/src/assets/javascripts/helpers/instagram.js
@@ -1,3 +1,5 @@
+import commonHelper from './common.js'
+
 const targets = [
   "instagram.com",
   "www.instagram.com",
@@ -58,29 +60,30 @@ function setBibliogramInstance(val) {
 };
 
 
-function redirect(url, initiator, type) {
-  if (data.disableBibliogram || data.isException(url, initiator))
+async function redirect(url, initiator, type) {
+  await init();
+  if (disableBibliogram)
     return null;
 
   // Do not redirect Bibliogram view on Instagram links
   if (
     initiator &&
     (
-      initiator.origin === data.bibliogramInstance ||
-      instagramHelper.redirects.normal.includes(initiator.origin) ||
-      instagramHelper.targets.includes(initiator.host)
+      initiator.origin === bibliogramInstance ||
+      redirects.normal.includes(initiator.origin) ||
+      targets.includes(initiator.host)
     )
   )
     return null;
 
   // Do not redirect /accounts, /embeds.js, or anything other than main_frame
-  if (type !== "main_frame" || url.pathname.match(instagramHelper.bypassPaths))
+  if (type !== "main_frame" || url.pathname.match(bypassPaths))
     return null;
 
-  let link = commonHelper.getRandomInstance(instagramHelper.redirects.normal);
+  let link = commonHelper.getRandomInstance(redirects.normal);
   if (
     url.pathname === "/" ||
-    data.instagramReservedPaths.includes(url.pathname.split("/")[1])
+    instagramReservedPaths.includes(url.pathname.split("/")[1])
   )
     return `${link}${url.pathname}${url.search}`;
   else
@@ -89,6 +92,15 @@ function redirect(url, initiator, type) {
 }
 
 
+async function init() {
+  let result = await browser.storage.sync.get([
+    "disableBibliogram",
+    "bibliogramInstance",
+  ])
+  disableBibliogram = result.disableBibliogram || false;
+  bibliogramInstance = result.bibliogramInstance;
+}
+
 export default {
   targets,
   redirects,
@@ -99,4 +111,5 @@ export default {
   getBibliogramInstance,
   setBibliogramInstance,
   redirect,
+  init,
 };
diff --git a/src/assets/javascripts/helpers/medium.js b/src/assets/javascripts/helpers/medium.js
index 6bb6cd31..0d36fa49 100644
--- a/src/assets/javascripts/helpers/medium.js
+++ b/src/assets/javascripts/helpers/medium.js
@@ -1,4 +1,5 @@
-import data from "../data.js";
+import commonHelper from './common.js'
+
 
 const targets = [
   // /(.*\.medium\.com)?(?(1)|^medium\.com)/,
@@ -38,27 +39,35 @@ function setScribeInstance(val) {
   browser.storage.sync.set({ scribeInstance })
 };
 
-
-function redirectMedium(url, initiator) {
-  if (disableScribe || data.isException(url, initiator)) return null;
+async function redirect(url, initiator) {
+  await init()
+  if (disableScribe) return null;
 
   if (url.pathname == "/") return null;
 
   if (
-    data.isFirefox() &&
+    commonHelper.isFirefox() &&
     initiator &&
     (
       initiator.origin === scribeInstance ||
-      mediumHelper.redirects.normal.includes(initiator.origin) ||
-      mediumHelper.targets.includes(initiator.host)
+      redirects.normal.includes(initiator.origin) ||
+      targets.includes(initiator.host)
     )
   ) {
     browser.storage.sync.set({ redirectBypassFlag: true });
     return null;
   }
-  return `${commonHelper.getRandomInstance(mediumHelper.redirects.normal)}${url.pathname}${url.search}`;
+  return `${commonHelper.getRandomInstance(redirects.normal)}${url.pathname}${url.search}`;
 }
 
+async function init() {
+  let result = await browser.storage.sync.get([
+    "disableScribe",
+    "scribeInstance",
+  ])
+  disableScribe = result.disableScribe || false;
+  scribeInstance = result.scribeInstance;
+}
 
 export default {
   targets,
@@ -67,5 +76,6 @@ export default {
   setDisableScribe,
   getScribeInstance,
   setScribeInstance,
-  redirectMedium,
+  redirect,
+  init,
 };
diff --git a/src/assets/javascripts/helpers/reddit.js b/src/assets/javascripts/helpers/reddit.js
index deca2c80..3f88c356 100644
--- a/src/assets/javascripts/helpers/reddit.js
+++ b/src/assets/javascripts/helpers/reddit.js
@@ -1,3 +1,5 @@
+import commonHelper from './common.js'
+
 const targets = [
   "www.reddit.com",
   "np.reddit.com",
@@ -23,7 +25,6 @@ const redirects = {
   },
   // old UI
   "teddit": {
-
     "normal": [
       "https://teddit.net",
       "https://teddit.ggc-project.de",
@@ -71,9 +72,9 @@ function setRedditFrontend(val) {
 };
 
 
-function redirect(url, initiator, type) {
-
-  if (disableReddit || data.isException(url, initiator))
+async function redirect(url, initiator, type) {
+  await init()
+  if (disableReddit)
     return null;
 
   // Do not redirect when already on the selected view
@@ -82,11 +83,11 @@ function redirect(url, initiator, type) {
 
 
   // Do not redirect exclusions nor anything other than main_frame
-  if (type !== "main_frame" || url.pathname.match(redditHelper.bypassPaths))
+  if (type !== "main_frame" || url.pathname.match(bypassPaths))
     return null;
 
-  let libredditLink = commonHelper.getRandomInstance(redditHelper.redirects.libreddit.normal);
-  let tedditLink = commonHelper.getRandomInstance(redditHelper.redirects.teddit.normal);
+  let libredditLink = commonHelper.getRandomInstance(redirects.libreddit.normal);
+  let tedditLink = commonHelper.getRandomInstance(redirects.teddit.normal);
 
   if (url.host === "i.redd.it")
     // As of 2021-04-09, redirects for teddit images are nontrivial:
@@ -111,6 +112,16 @@ function redirect(url, initiator, type) {
   if (redditFrontend == 'teddit') return `${tedditLink}${url.pathname}${url.search}`;
 }
 
+async function init() {
+  let result = await browser.storage.sync.get([
+    "disableReddit",
+    "redditInstance",
+    "redditFrontend",
+  ])
+  disableReddit = result.disableReddit || false;
+  redditInstance = result.redditInstance;
+  redditFrontend = result.redditFrontend || 'libreddit';
+}
 
 export default {
   targets,
@@ -123,4 +134,5 @@ export default {
   getRedditFrontend,
   setRedditFrontend,
   redirect,
+  init,
 };
diff --git a/src/assets/javascripts/helpers/twitter.js b/src/assets/javascripts/helpers/twitter.js
index 4fdad605..c622c341 100644
--- a/src/assets/javascripts/helpers/twitter.js
+++ b/src/assets/javascripts/helpers/twitter.js
@@ -1,4 +1,5 @@
-import data from "../data.js";
+import commonHelper from './common.js'
+
 /*
     Please remember to also update the src/manifest.json file 
     (content_scripts > matches, 'remove-twitter-sw.js') 
@@ -58,26 +59,27 @@ function setNitterInstance(val) {
 }
 
 
-function redirect(url, initiator) {
-  if (disableNitter || data.isException(url, initiator))
+async function redirect(url, initiator) {
+  await init();
+  if (disableNitter)
     return null;
 
   if (url.pathname.split("/").includes("home")) {
     return null;
   }
   if (
-    data.isFirefox() &&
+    commonHelper.isFirefox() &&
     initiator &&
     (
       initiator.origin === nitterInstance ||
-      twitterHelper.redirects.normal.includes(initiator.origin) ||
-      twitterHelper.targets.includes(initiator.host)
+      redirects.normal.includes(initiator.origin) ||
+      targets.includes(initiator.host)
     )
   ) {
     browser.storage.sync.set({ redirectBypassFlag: true });
     return null;
   }
-  let link = commonHelper.getRandomInstance(twitterHelper.redirects.normal)
+  let link = commonHelper.getRandomInstance(redirects.normal)
   if (url.host.split(".")[0] === "pbs" || url.host.split(".")[0] === "video")
     return `${link}/pic/${encodeURIComponent(url.href)}`;
 
@@ -89,6 +91,14 @@ function redirect(url, initiator) {
 
 }
 
+async function init() {
+  let result = await browser.storage.sync.get([
+    "disableNitter",
+    "nitterInstance"
+  ]);
+  disableNitter = result.disableNitter || false;
+  nitterInstance = result.nitterInstance;
+}
 
 export default {
   targets,
@@ -98,4 +108,5 @@ export default {
   getNitterInstance,
   setNitterInstance,
   redirect,
+  init,
 };
diff --git a/src/assets/javascripts/helpers/wikipedia.js b/src/assets/javascripts/helpers/wikipedia.js
index 00a8a4cc..f27305f4 100644
--- a/src/assets/javascripts/helpers/wikipedia.js
+++ b/src/assets/javascripts/helpers/wikipedia.js
@@ -7,21 +7,22 @@ const redirects = {
 };
 
 let disableWikipedia;
+const getDisableWikipedia = () => disableWikipedia;
 function setDisableWikipedia(val) {
   disableWikipedia = val;
   browser.storage.sync.set({ disableWikipedia })
 }
-const getDisableWikipedia = () => disableWikipedia;
 
 let wikipediaInstance;
+const getWikipediaInstance = () => wikipediaInstance;
 function setWikipediaInstance(val) {
   wikipediaInstance = val;
   browser.storage.sync.set({ wikipediaInstance })
 };
-const getWikipediaInstance = () => wikipediaInstance;
 
-function redirectWikipedia(url, initiator) {
-  if (disableWikipedia || data.isException(url, initiator)) return null;
+async function redirect(url, initiator) {
+  await init()
+  if (disableWikipedia) return null;
 
   let GETArguments = [];
   if (url.search.length > 0) {
@@ -54,12 +55,22 @@ function redirectWikipedia(url, initiator) {
   else return null;
 }
 
+async function init() {
+  let result = await browser.storage.sync.get([
+    "disableWikipedia",
+    "wikipediaInstance",
+  ]);
+  disableWikipedia = result.disableWikipedia || false;
+  wikipediaInstance = result.wikipediaInstance;
+}
+
 export default {
+  targets,
+  redirects,
   setDisableWikipedia,
   getDisableWikipedia,
   setWikipediaInstance,
   getWikipediaInstance,
-  redirectWikipedia,
-  targets,
-  redirects,
+  redirect,
+  init,
 };
diff --git a/src/assets/javascripts/helpers/youtube.js b/src/assets/javascripts/helpers/youtube.js
index c55dda5b..957160a0 100644
--- a/src/assets/javascripts/helpers/youtube.js
+++ b/src/assets/javascripts/helpers/youtube.js
@@ -1,5 +1,7 @@
 "use strict";
 
+import commonHelper from './common.js'
+
 window.browser = window.browser || window.chrome;
 
 const targets = [
@@ -114,20 +116,20 @@ function setInvidiousPlayerStyle(val) {
 }
 
 let invidiousSubtitles;
+let getInvidiousSubtitles = () => invidiousSubtitles;
 function setInvidiousSubtitles(val) {
   invidiousSubtitles = val;
   browser.storage.sync.set({ invidiousSubtitles })
   console.log("invidiousSubtitles: ", invidiousSubtitles)
 }
-let getInvidiousSubtitles = () => invidiousSubtitles;
 
 let invidiousAutoplay;
+const getInvidiousAutoplay = () => invidiousAutoplay;
 function setInvidiousAutoplay(val) {
   invidiousAutoplay = val;
   browser.storage.sync.set({ invidiousAutoplay })
   console.log("invidiousAutoplay: ", invidiousAutoplay)
 }
-const getInvidiousAutoplay = () => invidiousAutoplay;
 
 let useFreeTube;
 function setUseFreeTube(val) {
@@ -147,16 +149,17 @@ function setPersistInvidiousPrefs(val) {
 }
 const getPersistInvidiousPrefs = () => persistInvidiousPrefs;
 
-function redirect(url, initiator, type) {
-  if (disableInvidious || data.isException(url, initiator))
+async function redirect(url, initiator, type) {
+  await init();
+  if (disableInvidious)
     return null;
 
   if (
     initiator &&
     (
       initiator.origin === invidiousInstance ||
-      youtubeHelper.redirects.normal.includes(initiator.origin) ||
-      youtubeHelper.targets.includes(initiator.host)
+      redirects.normal.includes(initiator.origin) ||
+      targets.includes(initiator.host)
     )
   )
     return null;
@@ -190,7 +193,7 @@ function redirect(url, initiator, type) {
 
   if (invidiousAutoplay) url.searchParams.append("autoplay", 1);
 
-  let randomInstance = commonHelper.getRandomInstance(youtubeHelper.redirects.normal)
+  let randomInstance = commonHelper.getRandomInstance(redirects.normal)
 
   return `${randomInstance}${url.pathname.replace("/shorts", "")}${url.search}`;
 }
@@ -216,6 +219,7 @@ function initInvidiousCookie() {
   prefs.dark_mode = invidiousDarkMode;
   document.cookie = `PREFS=${encodeURIComponent(JSON.stringify(prefs))}`;
 }
+
 async function init() {
   let result = await browser.storage.sync.get(
     [
@@ -235,17 +239,17 @@ async function init() {
       "invidiousAutoplay",
       "useFreeTube",
     ]);
-  disableInvidious = result.disableInvidious;
+  disableInvidious = result.disableInvidious || false;
   invidiousInstance = result.invidiousInstance;
-  invidiousAlwaysProxy = result.invidiousAlwaysProxy;
-  invidiousOnlyEmbeddedVideo = result.invidiousOnlyEmbeddedVideo;
-  invidiousVideoQuality = result.invidiousVideoQuality;
-  invidiousDarkMode = result.invidiousDarkMode;
-  invidiousVolume = result.invidiousVolume;
-  invidiousPlayerStyle = result.invidiousPlayerStyle;
-  invidiousSubtitles = result.invidiousSubtitles;
-  invidiousAutoplay = result.invidiousAutoplay;
-  useFreeTube = result.useFreeTube;
+  invidiousAlwaysProxy = result.invidiousAlwaysProxy || true;
+  invidiousOnlyEmbeddedVideo = result.invidiousOnlyEmbeddedVideo || false;
+  invidiousVideoQuality = result.invidiousVideoQuality || 'medium';
+  invidiousDarkMode = result.invidiousDarkMode || true;
+  invidiousVolume = result.invidiousVolume || 50;
+  invidiousPlayerStyle = result.invidiousPlayerStyle || 'invidious';
+  invidiousSubtitles = result.invidiousSubtitles || '';
+  invidiousAutoplay = result.invidiousAutoplay || true;
+  useFreeTube = result.useFreeTube || false;
 
   if (result.persistInvidiousPrefs) initInvidiousCookie();
 }
diff --git a/src/assets/javascripts/remove-twitter-sw.js b/src/assets/javascripts/remove-twitter-sw.js
index d431f1a3..39282db1 100644
--- a/src/assets/javascripts/remove-twitter-sw.js
+++ b/src/assets/javascripts/remove-twitter-sw.js
@@ -35,13 +35,7 @@ function isNotException(url) {
 }
 
 function shouldRedirect(url) {
-  return (
-    !redirectBypassFlag &&
-    isNotException(url) &&
-    !disableNitter &&
-    url.host !== nitterInstance &&
-    !url.pathname.includes("/home")
-  );
+  return (!redirectBypassFlag && isNotException(url) && !disableNitter && url.host !== nitterInstance && !url.pathname.includes("/home"));
 }
 
 function redirectTwitter(url) {
@@ -64,16 +58,14 @@ browser.storage.sync.get(
   ],
   (result) => {
     redirectBypassFlag = result.redirectBypassFlag;
-    browser.storage.sync.set({
-      redirectBypassFlag: false,
-    });
+    browser.storage.sync.set({ redirectBypassFlag: false });
     if (!result.removeTwitterSW) {
       disableNitter = result.disableNitter;
       nitterInstance = result.nitterInstance || getRandomInstance();
       exceptions = result.exceptions
         ? result.exceptions.map((e) => {
-            return new RegExp(e);
-          })
+          return new RegExp(e);
+        })
         : [];
       navigator.serviceWorker.getRegistrations().then((registrations) => {
         for (let registration of registrations) {
diff --git a/src/pages/background/background.js b/src/pages/background/background.js
index 68b6db55..05403a88 100644
--- a/src/pages/background/background.js
+++ b/src/pages/background/background.js
@@ -24,9 +24,19 @@ window.browser = window.browser || window.chrome;
 //   : [];
 // data.invidiousSubtitles = result.invidiousSubtitles || "";
 
+googleMaps.init()
+searchHelper.init()
+googleTranslateHelper.init()
+instagramHelper.init()
+mediumHelper.init()
+redditHelper.init()
+twitterHelper.init()
+wikipediaHelper.init()
+youtubeHelper.init()
+
 
 browser.webRequest.onBeforeRequest.addListener(
-  (details) => {
+  async (details) => {
     const url = new URL(details.url);
     let initiator;
     if (details.originUrl)
@@ -34,25 +44,25 @@ browser.webRequest.onBeforeRequest.addListener(
     else if (details.initiator)
       initiator = new URL(details.initiator);
 
-    let newUrl;
+    var newUrl;
 
-    if (youtubeHelper.targets.includes(url.host)) newUrl = youtubeHelper.redirect(url, initiator, details.type)
+    if (youtubeHelper.targets.includes(url.host)) newUrl = await youtubeHelper.redirect(url, initiator, details.type)
 
-    else if (twitterHelper.targets.includes(url.host)) newUrl = redirectTwitter(url, initiator);
+    else if (twitterHelper.targets.includes(url.host)) newUrl = await twitterHelper.redirect(url, initiator);
 
-    else if (instagramHelper.targets.includes(url.host)) newUrl = redirectInstagram(url, initiator, details.type);
+    else if (instagramHelper.targets.includes(url.host)) newUrl = await instagramHelper.redirect(url, initiator, details.type);
 
-    else if (url.href.match(mapsHelper.targets)) newUrl = redirectGoogleMaps(url, initiator);
+    else if (url.href.match(mapsHelper.targets)) newUrl = await mapsHelper.redirect(url, initiator);
 
-    else if (redditHelper.targets.includes(url.host)) newUrl = redirectReddit(url, initiator, details.type);
+    else if (redditHelper.targets.includes(url.host)) newUrl = await redditHelper.redirect(url, initiator, details.type);
 
-    else if (mediumHelper.targets.some((rx) => rx.test(url.host))) newUrl = redirectMedium(url, initiator);
+    else if (mediumHelper.targets.some((rx) => rx.test(url.host))) newUrl = await mediumHelper.redirect(url, initiator);
 
-    else if (searchHelper.targets.some((rx) => rx.test(url.href))) newUrl = redirectSearch(url, initiator);
+    else if (searchHelper.targets.some((rx) => rx.test(url.href))) newUrl = await searchHelper.redirect(url, initiator)
 
-    else if (googleTranslateHelper.targets.includes(url.host)) newUrl = redirectGoogleTranslate(url, initiator);
+    else if (googleTranslateHelper.targets.includes(url.host)) newUrl = await googleTranslateHelper.redirect(url, initiator);
 
-    else if (url.host.match(wikipediaHelper.targets)) newUrl = redirectWikipedia(url, initiator);
+    else if (url.host.match(wikipediaHelper.targets)) newUrl = await wikipediaHelper.redirect(url, initiator);
 
     if (newUrl) {
       console.info("Redirecting", url.href, "=>", newUrl);
diff --git a/src/pages/options/init.js b/src/pages/options/init.js
index f9de76f1..09b41fd8 100644
--- a/src/pages/options/init.js
+++ b/src/pages/options/init.js
@@ -1,8 +1,3 @@
-browser.storage.sync.get(
-    [
-        "theme"
-    ],
-    (result) => {
-        if (result.theme) document.body.classList.add(result.theme);
-    }
-)
\ No newline at end of file
+browser.storage.sync.get("theme", (result) => {
+    if (result.theme) document.body.classList.add(result.theme);
+})
\ No newline at end of file
diff --git a/src/pages/options/instagram.js b/src/pages/options/instagram.js
index 77438742..7be11ff1 100644
--- a/src/pages/options/instagram.js
+++ b/src/pages/options/instagram.js
@@ -2,7 +2,9 @@ import instagramHelper from "../../assets/javascripts/helpers/instagram.js";
 
 let disableBibliogramElement = document.getElementById("disable-bibliogram");
 
-disableBibliogramElement.checked = !instagramHelper.getDisableBibliogram();
+instagramHelper.init().then(() => {
+    disableBibliogramElement.checked = !instagramHelper.getDisableBibliogram();
+})
 
 disableBibliogramElement.addEventListener("change",
     (event) => instagramHelper.setDisableBibliogram(!event.target.checked)
diff --git a/src/pages/options/maps.js b/src/pages/options/maps.js
index 310f9285..a8819a50 100644
--- a/src/pages/options/maps.js
+++ b/src/pages/options/maps.js
@@ -2,7 +2,9 @@ import mapsHelper from "../../assets/javascripts/helpers/google-maps.js";
 
 let disableOsmElement = document.getElementById("disable-osm");
 
-disableOsmElement.checked = !mapsHelper.getDisableOsm();
+mapsHelper.init().then(() => {
+    disableOsmElement.checked = !mapsHelper.getDisableOsm();
+})
 
 disableOsmElement.addEventListener("change",
     (event) => mapsHelper.setDisableOsm(!event.target.checked)
diff --git a/src/pages/options/medium.js b/src/pages/options/medium.js
index bcd2c2e4..5f41282e 100644
--- a/src/pages/options/medium.js
+++ b/src/pages/options/medium.js
@@ -2,7 +2,9 @@ import mediumHelper from "../../assets/javascripts/helpers/medium.js";
 
 let disableScribeElement = document.getElementById("disable-scribe");
 
-disableScribeElement.checked = !mediumHelper.getDisableScribe();
+mediumHelper.init().then(() => {
+    disableScribeElement.checked = !mediumHelper.getDisableScribe();
+})
 
 disableScribeElement.addEventListener("change",
     (event) => mediumHelper.setDisableScribe(!event.target.checked)
diff --git a/src/pages/options/reddit.js b/src/pages/options/reddit.js
index 96b736be..0222c6dd 100644
--- a/src/pages/options/reddit.js
+++ b/src/pages/options/reddit.js
@@ -1,15 +1,17 @@
-import reddit from "../../assets/javascripts/helpers/reddit.js";
+import redditHelper from "../../assets/javascripts/helpers/reddit.js";
 
 let disableRedditElement = document.getElementById("disable-reddit");
 let redditFrontendElement = document.getElementById("reddit-frontend");
 
-disableRedditElement.checked = !reddit.getDisableReddit();
-redditFrontendElement.value = reddit.getRedditFrontend();
+redditHelper.init().then(() => {
+    disableRedditElement.checked = !redditHelper.getDisableReddit();
+    redditFrontendElement.value = redditHelper.getRedditFrontend();
+})
 
 disableRedditElement.addEventListener("change",
-    (event) => reddit.setDisableReddit(!event.target.checked)
+    (event) => redditHelper.setDisableReddit(!event.target.checked)
 );
 
 redditFrontendElement.addEventListener("change",
-    (event) => reddit.setRedditFrontend(event.target.options[redditFrontendElement.selectedIndex].value)
+    (event) => redditHelper.setRedditFrontend(event.target.options[redditFrontendElement.selectedIndex].value)
 );
\ No newline at end of file
diff --git a/src/pages/options/search.html b/src/pages/options/search.html
index 77bd4d23..d0510eed 100644
--- a/src/pages/options/search.html
+++ b/src/pages/options/search.html
@@ -65,6 +65,7 @@
 
 
     <script type="module" src="./init.js"></script>
+    <script type="module" src="./init.js"></script>
     <script type="module" src="./search.js"></script>
     <script src="../../assets/javascripts/localise.js"></script>
 </body>
diff --git a/src/pages/options/search.js b/src/pages/options/search.js
index 85e39749..37e095a0 100644
--- a/src/pages/options/search.js
+++ b/src/pages/options/search.js
@@ -3,8 +3,10 @@ import searchHelper from "../../assets/javascripts/helpers/google-search.js";
 let disableSearchElement = document.getElementById("disable-search");
 let searchFrontendElement = document.getElementById("search-frontend");
 
-disableSearchElement.checked = !searchHelper.getDisableSearch();
-searchFrontendElement.value = searchHelper.getSearchFrontend();
+searchHelper.init().then(() => {
+  disableSearchElement.checked = !searchHelper.getDisableSearch();
+  searchFrontendElement.value = searchHelper.getSearchFrontend();
+});
 
 searchFrontendElement.addEventListener("change",
   (event) => searchHelper.setSearchFrontend(event.target.options[searchFrontendElement.selectedIndex].value)
diff --git a/src/pages/options/shared.js b/src/pages/options/shared.js
index caa3a407..62da2504 100644
--- a/src/pages/options/shared.js
+++ b/src/pages/options/shared.js
@@ -17,7 +17,6 @@ function parseURL(urlString) {
         return "";
 }
 
-
 function autocomplete(input, list) {
     let currentFocus;
     input.addEventListener("focus", (e) => {
@@ -109,9 +108,6 @@ function autocomplete(input, list) {
 }
 
 
-
-
-
 export default {
     autocompletes,
     parseURL,
diff --git a/src/pages/options/translate.js b/src/pages/options/translate.js
index 4e254446..c6182fc2 100644
--- a/src/pages/options/translate.js
+++ b/src/pages/options/translate.js
@@ -2,7 +2,9 @@ import googleTranslateHelper from "../../assets/javascripts/helpers/google-trans
 
 let disableSimplyTranslateElement = document.getElementById("disable-simplyTranslate");
 
-disableSimplyTranslateElement.checked = !googleTranslateHelper.getDisableSimplyTranslate();
+googleTranslateHelper.init().then(() => {
+    disableSimplyTranslateElement.checked = !googleTranslateHelper.getDisableSimplyTranslate();
+});
 
 disableSimplyTranslateElement.addEventListener("change",
     (event) => googleTranslateHelper.setDisableSimplyTranslate(!event.target.checked)
diff --git a/src/pages/options/twitter.js b/src/pages/options/twitter.js
index 60be6cb0..bf4f6b98 100644
--- a/src/pages/options/twitter.js
+++ b/src/pages/options/twitter.js
@@ -3,8 +3,10 @@ import twitterHelper from "../../assets/javascripts/helpers/twitter.js";
 let removeTwitterSWElement = document.getElementById("remove-twitter-sw");
 let disableNitterElement = document.getElementById("disable-nitter");
 
-disableNitterElement.checked = !twitterHelper.getDisableNitter();
-removeTwitterSWElement.checked = !remove.getRemoveTwitterSW; // Problem
+twitterHelper.init().then(() => {
+    disableNitterElement.checked = !twitterHelper.getDisableNitter();
+    removeTwitterSWElement.checked = !remove.getRemoveTwitterSW; // Problem
+});
 
 disableNitterElement.addEventListener("change",
     (event) => twitterHelper.setDisableNitter(!event.target.checked)
diff --git a/src/pages/options/wikipedia.js b/src/pages/options/wikipedia.js
index b2e7d23c..95ef6406 100644
--- a/src/pages/options/wikipedia.js
+++ b/src/pages/options/wikipedia.js
@@ -2,7 +2,9 @@ import wikipediaHelper from "../../assets/javascripts/helpers/wikipedia.js";
 
 let disableWikipediaElement = document.getElementById("disable-wikipedia");
 
-disableWikipediaElement.checked = !wikipediaHelper.getDisableWikipedia();
+wikipediaHelper.init().then(() => {
+    disableWikipediaElement.checked = !wikipediaHelper.getDisableWikipedia();
+})
 
 disableWikipediaElement.addEventListener("change",
     (event) => wikipediaHelper.setDisableWikipedia(!event.target.checked)
diff --git a/src/pages/options/youtube.js b/src/pages/options/youtube.js
index 95e7d2c9..a05f4c14 100644
--- a/src/pages/options/youtube.js
+++ b/src/pages/options/youtube.js
@@ -19,13 +19,13 @@ youtubeHelper.init().then(() => {
     invidiousDarkModeElement.checked = youtubeHelper.getInvidiousDarkMode();
     persistInvidiousPrefsElement.checked = youtubeHelper.getPersistInvidiousPrefs();
     invidiousVolumeElement.value = youtubeHelper.getInvidiousVolume();
-    invidiousVolumeValueElement.textContent = youtubeHelper.getInvidiousVolume() ? `${youtubeHelper.getInvidiousVolume()}%` : " - ";
-    invidiousPlayerStyleElement.value = youtubeHelper.getInvidiousPlayerStyle() || "";
-    invidiousSubtitlesElement.value = youtubeHelper.getInvidiousSubtitles() || "";
+    invidiousVolumeValueElement.textContent = `${youtubeHelper.getInvidiousVolume()}%`;
+    invidiousPlayerStyleElement.value = youtubeHelper.getInvidiousPlayerStyle();
+    invidiousSubtitlesElement.value = youtubeHelper.getInvidiousSubtitles();
     useFreeTubeElement.checked = youtubeHelper.getUseFreeTube();
     invidiousOnlyEmbeddedVideoElement.checked = youtubeHelper.getInvidiousOnlyEmbeddedVideo();
     invidiousAlwaysProxyElement.checked = youtubeHelper.getInvidiousAlwaysProxy();
-    invidiousVideoQualityElement.value = youtubeHelper.getInvidiousVideoQuality() || "";
+    invidiousVideoQualityElement.value = youtubeHelper.getInvidiousVideoQuality();
     invidiousAutoplayElement.checked = youtubeHelper.getInvidiousAutoplay();
 });
 
@@ -43,11 +43,10 @@ persistInvidiousPrefsElement.addEventListener("change",
 );
 
 invidiousVolumeElement.addEventListener("input",
-    commonHelper.debounce(() => {
+    () => {
         youtubeHelper.setInvidiousVolume(invidiousVolumeElement.value);
-        console.info("youtubeHelper.invidiousVolume:", youtubeHelper.getInvidiousVolume());
         invidiousVolumeValueElement.textContent = `${invidiousVolumeElement.value}%`;
-    }, 1)
+    }
 );
 
 invidiousPlayerStyleElement.addEventListener("change",
diff --git a/src/pages/popup/popup.js b/src/pages/popup/popup.js
index 5f570774..30587d3e 100644
--- a/src/pages/popup/popup.js
+++ b/src/pages/popup/popup.js
@@ -2,6 +2,15 @@
 
 import commonHelper from "../../assets/javascripts/helpers/common.js";
 import data from "../../assets/javascripts/data.js";
+import twitterHelper from "../../assets/javascripts/helpers/twitter.js";
+import youtubeHelper from "../../assets/javascripts/helpers/youtube.js";
+import instagramHelper from "../../assets/javascripts/helpers/instagram.js";
+import mapsHelper from "../../assets/javascripts/helpers/google-maps.js";
+import redditHelper from "../../assets/javascripts/helpers/reddit.js";
+import searchHelper from "../../assets/javascripts/helpers/google-search.js";
+import translateHelper from "../../assets/javascripts/helpers/google-translate.js";
+import wikipediaHelper from "../../assets/javascripts/helpers/wikipedia.js";
+import mediumHelper from "../../assets/javascripts/helpers/medium.js";
 
 let disableNitterElement = document.querySelector("#disable-nitter");
 let disableInvidiousElement = document.querySelector("#disable-invidious");
@@ -29,51 +38,41 @@ disableWikipediaElement.checked = !data.disableWikipedia;
 disableScribeElement.checked = !data.disableScribe;
 
 
-disableNitterElement.addEventListener("change", (event) => {
-  data.disableNitter = !event.target.checked;
-  browser.storage.sync.set({ disableNitter: data.disableNitter });
-});
+disableNitterElement.addEventListener("change",
+  (event) => twitterHelper.setDisableNitter(!event.target.checked)
+);
 
-disableInvidiousElement.addEventListener("change", (event) => {
-  data.disableInvidious = !event.target.checked;
-  browser.storage.sync.set({ disableInvidious: data.disableInvidious });
-});
+disableInvidiousElement.addEventListener("change",
+  (event) => youtubeHelper.setDisableInvidious(!event.target.checked)
+);
 
-disableBibliogramElement.addEventListener("change", (event) => {
-  data.disableBibliogram = !event.target.checked;
-  browser.storage.sync.set({ disableBibliogram: data.disableBibliogram });
-});
+disableBibliogramElement.addEventListener("change",
+  (event) => instagramHelper.setDisableBibliogram(!event.target.checked)
+);
 
-disableOsmElement.addEventListener("change", (event) => {
-  data.disableOsm = !event.target.checked;
-  browser.storage.sync.set({ disableOsm: data.disableOsm });
-});
+disableOsmElement.addEventListener("change",
+  (event) => mapsHelper.setDisableOsm(!event.target.checked)
+);
 
-disableRedditElement.addEventListener("change", (event) => {
-  data.disableReddit = !event.target.checked;
-  browser.storage.sync.set({ disableReddit: data.disableReddit });
-});
+disableRedditElement.addEventListener("change",
+  (event) => redditHelper.setDisableReddit(!event.target.checked)
+);
 
-disableSearchElement.addEventListener("change", (event) => {
-  data.disableSearch = !event.target.checked;
-  console.log("DisableSearch", data.disableSearch)
-  browser.storage.sync.set({ disableSearch: data.disableSearch });
-});
+disableSearchElement.addEventListener("change",
+  (event) => searchHelper.setDisableSearch(!event.target.checked)
+);
 
-disableSimplyTranslateElement.addEventListener("change", (event) => {
-  data.disableSimplyTranslate = !event.target.checked;
-  browser.storage.sync.set({ disableSimplyTranslate: data.disableSimplyTranslate });
-});
+disableSimplyTranslateElement.addEventListener("change",
+  (event) => translateHelper.setDisableSimplyTranslate(!event.target.checked)
+);
 
-disableWikipediaElement.addEventListener("change", (event) => {
-  data.disableWikipedia = !event.target.checked;
-  browser.storage.sync.set({ disableWikipedia: data.disableWikipedia });
-});
+disableWikipediaElement.addEventListener("change",
+  (event) => wikipediaHelper.setDisableWikipedia(!event.target.checked)
+);
 
-disableScribeElement.addEventListener("change", (event) => {
-  data.disableScribe = !event.target.checked;
-  browser.storage.sync.set({ disableScribe: data.disableScribe });
-});
+disableScribeElement.addEventListener("change",
+  (event) => mediumHelper.setDisableScribe(!event.target.checked)
+);
 
 
 document.querySelector("#update-instances").addEventListener("click", () => {