about summary refs log tree commit diff stats
path: root/src/pages
diff options
context:
space:
mode:
Diffstat (limited to 'src/pages')
-rw-r--r--src/pages/background/background.js100
-rw-r--r--src/pages/background/incognito.js11
-rw-r--r--src/pages/options/general/general.js4
-rw-r--r--src/pages/options/imgur/imgur.js28
-rw-r--r--src/pages/options/init.js4
-rw-r--r--src/pages/options/instagram/instagram.js25
-rw-r--r--src/pages/options/lbry/lbry.js25
-rw-r--r--src/pages/options/maps/maps.js23
-rw-r--r--src/pages/options/medium/medium.js25
-rw-r--r--src/pages/options/peertube/peertube.js26
-rw-r--r--src/pages/options/reddit/reddit.js50
-rw-r--r--src/pages/options/search/search.js81
-rw-r--r--src/pages/options/sendTargets/sendTargets.js25
-rw-r--r--src/pages/options/tiktok/tiktok.js25
-rw-r--r--src/pages/options/translate/translate.js49
-rw-r--r--src/pages/options/twitter/twitter.html21
-rw-r--r--src/pages/options/twitter/twitter.js25
-rw-r--r--src/pages/options/twitter/twitter.pug3
-rw-r--r--src/pages/options/wikipedia/wikipedia.js27
-rw-r--r--src/pages/options/youtube/youtube.html3
-rw-r--r--src/pages/options/youtube/youtube.js74
-rw-r--r--src/pages/options/youtube/youtube.pug3
-rw-r--r--src/pages/options/youtubeMusic/youtubeMusic.js23
-rw-r--r--src/pages/popup/popup.html5
-rw-r--r--src/pages/popup/popup.js124
-rw-r--r--src/pages/popup/popup.pug6
-rw-r--r--src/pages/popup/style.css9
27 files changed, 134 insertions, 690 deletions
diff --git a/src/pages/background/background.js b/src/pages/background/background.js
index d112e000..d8f0bb3f 100644
--- a/src/pages/background/background.js
+++ b/src/pages/background/background.js
@@ -16,6 +16,7 @@ import tiktokHelper from "../../assets/javascripts/helpers/tiktok.js";
 import sendTargetsHelper from "../../assets/javascripts/helpers/sendTargets.js";
 import peertubeHelper from "../../assets/javascripts/helpers/peertube.js";
 import lbryHelper from "../../assets/javascripts/helpers/lbry.js";
+import utils from "../../assets/javascripts/helpers/utils.js";
 
 window.browser = window.browser || window.chrome;
 
@@ -55,21 +56,9 @@ browser.runtime.onInstalled.addListener(
 )
 
 async function wholeInit() {
-  await youtubeHelper.init();
-  await youtubeMusicHelper.init();
-  await twitterHelper.init();
-  await instagramHelper.init();
   await mapsHelper.init();
-  await searchHelper.init();
-  await translateHelper.init();
-  await mediumHelper.init();
-  await redditHelper.init();
-  await wikipediaHelper.init();
-  await imgurHelper.init();
-  await tiktokHelper.init();
   await sendTargetsHelper.init();
   await peertubeHelper.init();
-  await lbryHelper.init();
   await generalHelper.init();
 }
 
@@ -97,22 +86,21 @@ browser.webRequest.onBeforeRequest.addListener(
     else if (details.initiator)
       initiator = new URL(details.initiator);
 
-    let newUrl = youtubeHelper.redirect(url, details, initiator)
-    if (youtubeMusicHelper.isYoutubeMusic(url, initiator)) newUrl = youtubeMusicHelper.redirect(url, details.type)
-
-    if (!newUrl) newUrl = twitterHelper.redirect(url, initiator);
-    if (!newUrl) newUrl = instagramHelper.redirect(url, details.type, initiator);
+    let newUrl = await youtubeHelper.redirect(url, details, initiator)
+    if (!newUrl) newUrl = await youtubeMusicHelper.redirect(url, details.type)
+    if (!newUrl) newUrl = await twitterHelper.redirect(url, initiator);
+    if (!newUrl) newUrl = await instagramHelper.redirect(url, details.type, initiator);
     if (!newUrl) newUrl = await mapsHelper.redirect(url, initiator);
-    if (!newUrl) newUrl = redditHelper.redirect(url, details.type, initiator);
-    if (!newUrl) newUrl = mediumHelper.redirect(url, details.type, initiator);
-    if (!newUrl) newUrl = imgurHelper.redirect(url, details.type, initiator);
-    if (!newUrl) newUrl = tiktokHelper.redirect(url, details.type, initiator);
-    if (!newUrl) newUrl = sendTargetsHelper.redirect(url, details.type, initiator);
-    if (!newUrl) newUrl = peertubeHelper.redirect(url, details.type, initiator);
-    if (!newUrl) newUrl = lbryHelper.redirect(url, details.type, initiator);
-    if (!newUrl) newUrl = translateHelper.redirect(url);
-    if (!newUrl) newUrl = searchHelper.redirect(url)
-    if (!newUrl) newUrl = wikipediaHelper.redirect(url);
+    if (!newUrl) newUrl = await redditHelper.redirect(url, details.type, initiator);
+    if (!newUrl) newUrl = await mediumHelper.redirect(url, details.type, initiator);
+    if (!newUrl) newUrl = await imgurHelper.redirect(url, details.type, initiator);
+    if (!newUrl) newUrl = await tiktokHelper.redirect(url, details.type, initiator);
+    if (!newUrl) newUrl = await sendTargetsHelper.redirect(url, details.type, initiator);
+    if (!newUrl) newUrl = await peertubeHelper.redirect(url, details.type, initiator);
+    if (!newUrl) newUrl = await lbryHelper.redirect(url, details.type, initiator);
+    if (!newUrl) newUrl = await translateHelper.redirect(url);
+    if (!newUrl) newUrl = await searchHelper.redirect(url)
+    if (!newUrl) newUrl = await wikipediaHelper.redirect(url);
 
     if (
       details.frameAncestors && details.frameAncestors.length > 0 &&
@@ -229,35 +217,13 @@ browser.tabs.onUpdated.addListener(
   }
 );
 
-async function changeWholeInstance(url) {
-  await wholeInit();
-  let newUrl = youtubeHelper.switchInstance(url);
-  if (!newUrl) newUrl = twitterHelper.switchInstance(url);
-  if (!newUrl) newUrl = instagramHelper.switchInstance(url);
-  if (!newUrl) newUrl = redditHelper.switchInstance(url);
-  if (!newUrl) newUrl = searchHelper.switchInstance(url);
-  if (!newUrl) newUrl = translateHelper.switchInstance(url);
-  if (!newUrl) newUrl = mediumHelper.switchInstance(url);
-  if (!newUrl) newUrl = sendTargetsHelper.switchInstance(url);
-  if (!newUrl) newUrl = peertubeHelper.switchInstance(url);
-  if (!newUrl) newUrl = imgurHelper.switchInstance(url);
-  if (!newUrl) newUrl = wikipediaHelper.switchInstance(url);
-  return newUrl;
-}
+
 
 browser.commands.onCommand.addListener(
   command => {
-    if (command === 'switchInstance')
-      browser.tabs.query(
-        { active: true, currentWindow: true },
-        tabs => {
-          let url;
-          try { url = new URL(tabs[0].url); }
-          catch (_) { return }
-          let newUrl = changeWholeInstance(url);
-          if (newUrl) browser.tabs.update({ url: newUrl });
-        }
-      );
+    if (command === 'switchInstance') utils.switchInstance();
+    else if (command == 'copyRaw') utils.copyRaw();
+    else if (command == 'unify') utils.unify();
   }
 )
 
@@ -273,16 +239,24 @@ browser.contextMenus.create({
   contexts: ["browser_action"]
 });
 
+browser.contextMenus.create({
+  id: "copyRaw",
+  title: "Copy Raw",
+  contexts: ["browser_action"]
+});
+
+browser.contextMenus.create({
+  id: "unify",
+  title: "Unify",
+  contexts: ["browser_action"]
+});
+
+
 browser.contextMenus.onClicked.addListener(
-  (info, tab) => {
-    if (info.menuItemId == 'switchInstance') {
-      let url;
-      try { url = new URL(tab.url); }
-      catch (_) { return }
-      let newUrl = changeWholeInstance(url);
-      if (newUrl) browser.tabs.update({ url: newUrl });
-    }
-    else if (info.menuItemId == 'settings')
-      browser.runtime.openOptionsPage()
+  (info) => {
+    if (info.menuItemId == 'switchInstance') utils.switchInstance();
+    else if (info.menuItemId == 'settings') browser.runtime.openOptionsPage()
+    else if (info.menuItemId == 'copyRaw') utils.copyRaw();
+    else if (info.menuItemId == 'unify') utils.unify();
   }
 );
diff --git a/src/pages/background/incognito.js b/src/pages/background/incognito.js
index 6e02347e..16eccf74 100644
--- a/src/pages/background/incognito.js
+++ b/src/pages/background/incognito.js
@@ -20,21 +20,10 @@ import youtubeMusicHelper from "../../assets/javascripts/helpers/youtubeMusic.js
 window.browser = window.browser || window.chrome;
 
 async function wholeInit() {
-  await youtubeHelper.init();
   await youtubeMusicHelper.init();
-  await twitterHelper.init();
-  await instagramHelper.init();
   await mapsHelper.init();
-  await searchHelper.init();
-  await translateHelper.init();
-  await mediumHelper.init();
-  await redditHelper.init();
-  await wikipediaHelper.init();
-  await imgurHelper.init();
-  await tiktokHelper.init();
   await sendTargetsHelper.init();
   await peertubeHelper.init();
-  await lbryHelper.init();
   await generalHelper.init();
 }
 await wholeInit();
diff --git a/src/pages/options/general/general.js b/src/pages/options/general/general.js
index bcf7a521..c8a600ce 100644
--- a/src/pages/options/general/general.js
+++ b/src/pages/options/general/general.js
@@ -1,7 +1,7 @@
 "use strict";
 window.browser = window.browser || window.chrome;
 
-import commonHelper from "../../../assets/javascripts/helpers/common.js";
+import utils from "../../../assets/javascripts/helpers/utils.js";
 import generalHelper from "../../../assets/javascripts/helpers/general.js";
 
 
@@ -10,7 +10,7 @@ let updateInstancesElement = document.getElementById("update-instances");
 updateInstancesElement.addEventListener("click", () => {
   let oldHtml = updateInstancesElement.innerHTML
   updateInstancesElement.innerHTML = '...';
-  if (commonHelper.updateInstances()) {
+  if (utils.updateInstances()) {
     updateInstancesElement.innerHTML = 'Done!';
     new Promise(resolve => setTimeout(resolve, 1500)).then( // sleep 1500ms
       () => updateInstancesElement.innerHTML = oldHtml
diff --git a/src/pages/options/imgur/imgur.js b/src/pages/options/imgur/imgur.js
index 597d015b..0b1343c8 100644
--- a/src/pages/options/imgur/imgur.js
+++ b/src/pages/options/imgur/imgur.js
@@ -1,5 +1,5 @@
 import imgurHelper from "../../../assets/javascripts/helpers/imgur.js";
-import commonHelper from "../../../assets/javascripts/helpers/common.js";
+import utils from "../../../assets/javascripts/helpers/utils.js";
 
 let disableImgurElement = document.getElementById("disable-imgur");
 let protocolElement = document.getElementById("protocol")
@@ -45,26 +45,8 @@ browser.storage.local.get(
     }
 );
 
-commonHelper.processDefaultCustomInstances('imgur', 'rimgo', 'normal', document);
-commonHelper.processDefaultCustomInstances('imgur', 'rimgo', 'tor', document);
-commonHelper.processDefaultCustomInstances('imgur', 'rimgo', 'i2p', document);
+utils.processDefaultCustomInstances('imgur', 'rimgo', 'normal', document);
+utils.processDefaultCustomInstances('imgur', 'rimgo', 'tor', document);
+utils.processDefaultCustomInstances('imgur', 'rimgo', 'i2p', document);
 
-
-let latencyElement = document.getElementById("latency");
-let latencyLabel = document.getElementById("latency-label");
-latencyElement.addEventListener("click",
-    async () => {
-        let reloadWindow = () => location.reload();
-        latencyElement.addEventListener("click", reloadWindow);
-        await imgurHelper.init();
-        let redirects = imgurHelper.getRedirects();
-        const oldHtml = latencyLabel.innerHTML;
-        latencyLabel.innerHTML = '...';
-        commonHelper.testLatency(latencyLabel, redirects.rimgo.normal).then(r => {
-            browser.storage.local.set({ rimgoLatency: r });
-            latencyLabel.innerHTML = oldHtml;
-            commonHelper.processDefaultCustomInstances('imgur', 'rimgo', 'normal', document);
-            latencyElement.removeEventListener("click", reloadWindow)
-        });
-    }
-);
+utils.latency('imgur', 'rimgo', document, location)
\ No newline at end of file
diff --git a/src/pages/options/init.js b/src/pages/options/init.js
index 78ea11f3..b9ff4950 100644
--- a/src/pages/options/init.js
+++ b/src/pages/options/init.js
@@ -1,5 +1,5 @@
 window.browser = window.browser || window.chrome;
-import commonHelper from "../../assets/javascripts/helpers/common.js";
+import utils from "../../assets/javascripts/helpers/utils.js";
 
 function changeTheme() {
     browser.storage.local.get(
@@ -34,4 +34,4 @@ browser.storage.onChanged.addListener(changeTheme)
 
 window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", changeTheme)
 
-if (commonHelper.isRtl()) document.getElementsByTagName("body")[0].classList.add("rtl");
\ No newline at end of file
+if (utils.isRtl()) document.getElementsByTagName("body")[0].classList.add("rtl");
\ No newline at end of file
diff --git a/src/pages/options/instagram/instagram.js b/src/pages/options/instagram/instagram.js
index 39d11426..955aafc3 100644
--- a/src/pages/options/instagram/instagram.js
+++ b/src/pages/options/instagram/instagram.js
@@ -1,5 +1,5 @@
 import instagramHelper from "../../../assets/javascripts/helpers/instagram.js";
-import commonHelper from "../../../assets/javascripts/helpers/common.js";
+import utils from "../../../assets/javascripts/helpers/utils.js";
 
 const disable = document.getElementById("disable-bibliogram");
 const protocol = document.getElementById("protocol");
@@ -36,24 +36,7 @@ browser.storage.local.get(
         changeProtocolSettings();
     })
 
-commonHelper.processDefaultCustomInstances('instagram', 'bibliogram', 'normal', document);
-commonHelper.processDefaultCustomInstances('instagram', 'bibliogram', 'tor', document);
+utils.processDefaultCustomInstances('instagram', 'bibliogram', 'normal', document);
+utils.processDefaultCustomInstances('instagram', 'bibliogram', 'tor', document);
 
-let latencyElement = document.getElementById("latency");
-let latencyLabel = document.getElementById("latency-label");
-latencyElement.addEventListener("click",
-    async () => {
-        let reloadWindow = () => location.reload();
-        latencyElement.addEventListener("click", reloadWindow);
-        await instagramHelper.init();
-        let redirects = instagramHelper.getRedirects();
-        const oldHtml = latencyLabel.innerHTML;
-        latencyLabel.innerHTML = '...';
-        commonHelper.testLatency(latencyLabel, redirects.bibliogram.normal).then(r => {
-            browser.storage.local.set({ bibliogramLatency: r });
-            latencyLabel.innerHTML = oldHtml;
-            commonHelper.processDefaultCustomInstances('instagram', 'bibliogram', 'normal', document);
-            latencyElement.removeEventListener("click", reloadWindow);
-        });
-    }
-);
\ No newline at end of file
+utils.latency('instagram', 'bibliogram', document, location)
\ No newline at end of file
diff --git a/src/pages/options/lbry/lbry.js b/src/pages/options/lbry/lbry.js
index fcac7bd8..92cc21a5 100644
--- a/src/pages/options/lbry/lbry.js
+++ b/src/pages/options/lbry/lbry.js
@@ -1,5 +1,5 @@
 import lbryHelper from "../../../assets/javascripts/helpers/lbry.js";
-import commonHelper from "../../../assets/javascripts/helpers/common.js";
+import utils from "../../../assets/javascripts/helpers/utils.js";
 
 let disable = document.getElementById("disable-lbry");
 let protocol = document.getElementById("protocol")
@@ -37,24 +37,7 @@ browser.storage.local.get(
     }
 )
 
-commonHelper.processDefaultCustomInstances('lbryTargets', 'librarian', 'normal', document);
-commonHelper.processDefaultCustomInstances('lbryTargets', 'librarian', 'tor', document);
+utils.processDefaultCustomInstances('lbryTargets', 'librarian', 'normal', document);
+utils.processDefaultCustomInstances('lbryTargets', 'librarian', 'tor', document);
 
-let latencyElement = document.getElementById("latency");
-let latencyLabel = document.getElementById("latency-label");
-latencyElement.addEventListener("click",
-    async () => {
-        let reloadWindow = () => location.reload();
-        latencyElement.addEventListener("click", reloadWindow);
-        await lbryHelper.init();
-        let redirects = lbryHelper.getRedirects();
-        const oldHtml = latencyLabel.innerHTML;
-        latencyLabel.innerHTML = '...';
-        commonHelper.testLatency(latencyLabel, redirects.librarian.normal).then(r => {
-            browser.storage.local.set({ librarianLatency: r });
-            latencyLabel.innerHTML = oldHtml;
-            commonHelper.processDefaultCustomInstances('lbry', 'librarian', 'normal', document);
-            latencyElement.removeEventListener("click", reloadWindow);
-        });
-    }
-);
\ No newline at end of file
+utils.latency('lbryTargets', 'librarian', document, location)
\ No newline at end of file
diff --git a/src/pages/options/maps/maps.js b/src/pages/options/maps/maps.js
index 7e18def3..6db8c03e 100644
--- a/src/pages/options/maps/maps.js
+++ b/src/pages/options/maps/maps.js
@@ -1,5 +1,5 @@
 import mapsHelper from "../../../assets/javascripts/helpers/maps.js";
-import commonHelper from "../../../assets/javascripts/helpers/common.js";
+import utils from "../../../assets/javascripts/helpers/utils.js";
 
 const disable = document.getElementById("disable-osm");
 const frontend = document.getElementById("maps-frontend");
@@ -29,23 +29,4 @@ browser.storage.local.get(
         changeFrontendsSettings();
     }
 )
-commonHelper.processDefaultCustomInstances('maps', 'facil', 'normal', document);
-
-let latencyElement = document.getElementById("latency");
-let latencyLabel = document.getElementById("latency-label");
-latencyElement.addEventListener("click",
-    async () => {
-        let reloadWindow = () => location.reload();
-        latencyElement.addEventListener("click", reloadWindow);
-        await mapsHelper.init();
-        let redirects = mapsHelper.getRedirects();
-        const oldHtml = latencyLabel.innerHTML;
-        latencyLabel.innerHTML = '...';
-        commonHelper.testLatency(latencyLabel, redirects.facil.normal).then(r => {
-            browser.storage.local.set({ facilLatency: r });
-            latencyLabel.innerHTML = oldHtml;
-            commonHelper.processDefaultCustomInstances('maps', 'facil', 'normal', document);
-            latencyElement.removeEventListener("click", reloadWindow);
-        });
-    }
-);
\ No newline at end of file
+utils.processDefaultCustomInstances('maps', 'facil', 'normal', document);
\ No newline at end of file
diff --git a/src/pages/options/medium/medium.js b/src/pages/options/medium/medium.js
index 786f8f17..9f00878d 100644
--- a/src/pages/options/medium/medium.js
+++ b/src/pages/options/medium/medium.js
@@ -1,5 +1,5 @@
 import mediumHelper from "../../../assets/javascripts/helpers/medium.js";
-import commonHelper from "../../../assets/javascripts/helpers/common.js";
+import utils from "../../../assets/javascripts/helpers/utils.js";
 
 let disable = document.getElementById("disable-medium");
 let protocol = document.getElementById("protocol")
@@ -15,8 +15,8 @@ browser.storage.local.get(
         changeProtocolSettings();
     }
 )
-commonHelper.processDefaultCustomInstances('medium', 'scribe', 'normal', document);
-commonHelper.processDefaultCustomInstances('medium', 'scribe', 'tor', document);
+utils.processDefaultCustomInstances('medium', 'scribe', 'normal', document);
+utils.processDefaultCustomInstances('medium', 'scribe', 'tor', document);
 
 document.addEventListener("change", async () => {
     await browser.storage.local.set({
@@ -39,21 +39,4 @@ function changeProtocolSettings() {
     }
 }
 
-let latencyElement = document.getElementById("latency");
-let latencyLabel = document.getElementById("latency-label");
-latencyElement.addEventListener("click",
-    async () => {
-        let reloadWindow = () => location.reload();
-        latencyElement.addEventListener("click", reloadWindow);
-        await mediumHelper.init();
-        let redirects = mediumHelper.getRedirects();
-        const oldHtml = latencyLabel.innerHTML;
-        latencyLabel.innerHTML = '...';
-        commonHelper.testLatency(latencyLabel, redirects.scribe.normal).then(r => {
-            browser.storage.local.set({ scribeLatency: r });
-            latencyLabel.innerHTML = oldHtml;
-            commonHelper.processDefaultCustomInstances('medium', 'scribe', 'normal', document);
-            latencyElement.removeEventListener("click", reloadWindow);
-        });
-    }
-);
\ No newline at end of file
+utils.latency('medium', 'scribe', document, location)
\ No newline at end of file
diff --git a/src/pages/options/peertube/peertube.js b/src/pages/options/peertube/peertube.js
index 818e3fec..0bf16cc7 100644
--- a/src/pages/options/peertube/peertube.js
+++ b/src/pages/options/peertube/peertube.js
@@ -1,5 +1,5 @@
 import peertubeHelper from "../../../assets/javascripts/helpers/peertube.js";
-import commonHelper from "../../../assets/javascripts/helpers/common.js";
+import utils from "../../../assets/javascripts/helpers/utils.js";
 
 let disable = document.getElementById("disable-peertube");
 let protocol = document.getElementById("protocol")
@@ -14,8 +14,8 @@ browser.storage.local.get(
         changeProtocolSettings();
     }
 )
-commonHelper.processDefaultCustomInstances('peertube', 'simpleertube', 'normal', document);
-commonHelper.processDefaultCustomInstances('peertube', 'simpleertube', 'tor', document);
+utils.processDefaultCustomInstances('peertube', 'simpleertube', 'normal', document);
+utils.processDefaultCustomInstances('peertube', 'simpleertube', 'tor', document);
 
 document.addEventListener("change", async () => {
     await browser.storage.local.set({
@@ -37,22 +37,4 @@ function changeProtocolSettings() {
         torDiv.style.display = 'block';
     }
 }
-
-let latencyElement = document.getElementById("latency");
-let latencyLabel = document.getElementById("latency-label");
-latencyElement.addEventListener("click",
-    async () => {
-        let reloadWindow = () => location.reload();
-        latencyElement.addEventListener("click", reloadWindow);
-        await peertubeHelper.init();
-        let redirects = peertubeHelper.getRedirects();
-        const oldHtml = latencyLabel.innerHTML;
-        latencyLabel.innerHTML = '...';
-        commonHelper.testLatency(latencyLabel, redirects.simpleertube.normal).then(r => {
-            browser.storage.local.set({ simpleertubeLatency: r });
-            latencyLabel.innerHTML = oldHtml;
-            commonHelper.processDefaultCustomInstances('peertube', 'simpleertube', 'normal', document);
-            latencyElement.removeEventListener("click", reloadWindow);
-        });
-    }
-);
\ No newline at end of file
+utils.latency('peertube', 'simpleertube', document, location)
\ No newline at end of file
diff --git a/src/pages/options/reddit/reddit.js b/src/pages/options/reddit/reddit.js
index 52399649..3661f73f 100644
--- a/src/pages/options/reddit/reddit.js
+++ b/src/pages/options/reddit/reddit.js
@@ -1,5 +1,5 @@
 import redditHelper from "../../../assets/javascripts/helpers/reddit.js";
-import commonHelper from "../../../assets/javascripts/helpers/common.js";
+import utils from "../../../assets/javascripts/helpers/utils.js";
 
 let libredditDivElement = document.getElementById("libreddit")
 let tedditDivElement = document.getElementById("teddit")
@@ -81,46 +81,10 @@ browser.storage.local.get(
     }
 )
 
-commonHelper.processDefaultCustomInstances('reddit', 'libreddit', 'normal', document);
-commonHelper.processDefaultCustomInstances('reddit', 'libreddit', 'tor', document);
-commonHelper.processDefaultCustomInstances('reddit', 'teddit', 'normal', document);
-commonHelper.processDefaultCustomInstances('reddit', 'teddit', 'tor', document);
+utils.processDefaultCustomInstances('reddit', 'libreddit', 'normal', document);
+utils.processDefaultCustomInstances('reddit', 'libreddit', 'tor', document);
+utils.processDefaultCustomInstances('reddit', 'teddit', 'normal', document);
+utils.processDefaultCustomInstances('reddit', 'teddit', 'tor', document);
 
-
-let latencyLibredditElement = document.getElementById("latency-libreddit");
-let latencyLibredditLabel = document.getElementById("latency-libreddit-label");
-latencyLibredditElement.addEventListener("click",
-    async () => {
-        let reloadWindow = () => location.reload();
-        latencyLibredditElement.addEventListener("click", reloadWindow);
-        await redditHelper.init();
-        let redirects = redditHelper.getRedirects();
-        const oldHtml = latencyLibredditLabel.innerHTML;
-        latencyLibredditLabel.innerHTML = '...';
-        commonHelper.testLatency(latencyLibredditLabel, redirects.libreddit.normal).then(r => {
-            browser.storage.local.set({ libredditLatency: r });
-            latencyLibredditLabel.innerHTML = oldHtml;
-            commonHelper.processDefaultCustomInstances('reddit', 'libreddit', 'normal', document);
-            latencyLibredditElement.removeEventListener("click", reloadWindow);
-        });
-    }
-);
-
-let latencyTedditElement = document.getElementById("latency-teddit");
-let latencyTedditLabel = document.getElementById("latency-teddit-label");
-latencyTedditElement.addEventListener("click",
-    async () => {
-        let reloadWindow = () => location.reload();
-        latencyTedditElement.addEventListener("click", reloadWindow);
-        await redditHelper.init();
-        let redirects = redditHelper.getRedirects();
-        const oldHtml = latencyTedditLabel.innerHTML;
-        latencyTedditLabel.innerHTML = '...';
-        commonHelper.testLatency(latencyTedditLabel, redirects.teddit.normal).then(r => {
-            browser.storage.local.set({ tedditLatency: r });
-            latencyTedditLabel.innerHTML = oldHtml;
-            commonHelper.processDefaultCustomInstances('reddit', 'teddit', 'normal', document);
-            latencyTedditElement.removeEventListener("click", reloadWindow);
-        });
-    }
-);
\ No newline at end of file
+utils.latency('reddit', 'libreddit', document, location, true)
+utils.latency('reddit', 'teddit', document, location, true)
\ No newline at end of file
diff --git a/src/pages/options/search/search.js b/src/pages/options/search/search.js
index 47f27c0a..fb928055 100644
--- a/src/pages/options/search/search.js
+++ b/src/pages/options/search/search.js
@@ -1,5 +1,5 @@
 import searchHelper from "../../../assets/javascripts/helpers/search.js";
-import commonHelper from "../../../assets/javascripts/helpers/common.js";
+import utils from "../../../assets/javascripts/helpers/utils.js";
 
 let searxDiv = document.getElementById("searx");
 let searxngDiv = document.getElementById("searxng");
@@ -127,69 +127,16 @@ function changeProtocolSettings() {
   }
 }
 
-commonHelper.processDefaultCustomInstances('search', 'searx', 'normal', document);
-commonHelper.processDefaultCustomInstances('search', 'searx', 'tor', document);
-commonHelper.processDefaultCustomInstances('search', 'searx', 'i2p', document);
-commonHelper.processDefaultCustomInstances('search', 'searxng', 'normal', document);
-commonHelper.processDefaultCustomInstances('search', 'searxng', 'tor', document);
-commonHelper.processDefaultCustomInstances('search', 'searxng', 'i2p', document);
-commonHelper.processDefaultCustomInstances('search', 'whoogle', 'normal', document);
-commonHelper.processDefaultCustomInstances('search', 'whoogle', 'tor', document);
-commonHelper.processDefaultCustomInstances('search', 'whoogle', 'i2p', document);
-
-let latencySearxElement = document.getElementById("latency-searx");
-let latencySearxLabel = document.getElementById("latency-searx-label");
-latencySearxElement.addEventListener("click",
-  async () => {
-    let reloadWindow = () => location.reload();
-    latencySearxElement.addEventListener("click", reloadWindow);
-    await searchHelper.init();
-    let redirects = searchHelper.getRedirects();
-    const oldHtml = latencySearxLabel.innerHTML;
-    latencySearxLabel.innerHTML = '...';
-    commonHelper.testLatency(latencySearxLabel, redirects.searx.normal).then(r => {
-      browser.storage.local.set({ searxLatency: r });
-      latencySearxLabel.innerHTML = oldHtml;
-      commonHelper.processDefaultCustomInstances('search', 'searx', 'normal', document);
-      latencySearxElement.removeEventListener("click", reloadWindow);
-    });
-  }
-);
-
-let latencySearxngElement = document.getElementById("latency-searxng");
-let latencySearxngLabel = document.getElementById("latency-searxng-label");
-latencySearxngElement.addEventListener("click",
-  async () => {
-    let reloadWindow = () => location.reload();
-    latencySearxngElement.addEventListener("click", reloadWindow);
-    await searchHelper.init();
-    let redirects = searchHelper.getRedirects();
-    const oldHtml = latencySearxngLabel.innerHTML;
-    latencySearxngLabel.innerHTML = '...';
-    commonHelper.testLatency(latencySearxngLabel, redirects.searxng.normal).then(r => {
-      browser.storage.local.set({ searxngLatency: r });
-      latencySearxngLabel.innerHTML = oldHtml;
-      commonHelper.processDefaultCustomInstances('search', 'searxng', 'normal', document);
-      latencySearxngElement.removeEventListener("click", reloadWindow);
-    });
-  }
-);
-
-let latencyWhoogleElement = document.getElementById("latency-whoogle");
-let latencyWhoogleLabel = document.getElementById("latency-whoogle-label");
-latencyWhoogleElement.addEventListener("click",
-  async () => {
-    let reloadWindow = () => location.reload();
-    latencyWhoogleElement.addEventListener("click", reloadWindow);
-    await searchHelper.init();
-    let redirects = searchHelper.getRedirects();
-    const oldHtml = latencyWhoogleLabel.innerHTML;
-    latencyWhoogleLabel.innerHTML = '...';
-    commonHelper.testLatency(latencyWhoogleLabel, redirects.whoogle.normal).then(r => {
-      browser.storage.local.set({ whoogleLatency: r });
-      latencyWhoogleLabel.innerHTML = oldHtml;
-      commonHelper.processDefaultCustomInstances('search', 'whoogle', 'normal', document);
-      latencyWhoogleElement.removeEventListener("click", reloadWindow);
-    });
-  }
-);
\ No newline at end of file
+utils.processDefaultCustomInstances('search', 'searx', 'normal', document);
+utils.processDefaultCustomInstances('search', 'searx', 'tor', document);
+utils.processDefaultCustomInstances('search', 'searx', 'i2p', document);
+utils.processDefaultCustomInstances('search', 'searxng', 'normal', document);
+utils.processDefaultCustomInstances('search', 'searxng', 'tor', document);
+utils.processDefaultCustomInstances('search', 'searxng', 'i2p', document);
+utils.processDefaultCustomInstances('search', 'whoogle', 'normal', document);
+utils.processDefaultCustomInstances('search', 'whoogle', 'tor', document);
+utils.processDefaultCustomInstances('search', 'whoogle', 'i2p', document);
+
+utils.latency('search', 'searx', document, location, true)
+utils.latency('search', 'searxng', document, location, true)
+utils.latency('search', 'whoogle', document, location, true)
diff --git a/src/pages/options/sendTargets/sendTargets.js b/src/pages/options/sendTargets/sendTargets.js
index 057ae864..0cb1da09 100644
--- a/src/pages/options/sendTargets/sendTargets.js
+++ b/src/pages/options/sendTargets/sendTargets.js
@@ -1,5 +1,5 @@
 import sendTargetsHelper from "../../../assets/javascripts/helpers/sendTargets.js";
-import commonHelper from "../../../assets/javascripts/helpers/common.js";
+import utils from "../../../assets/javascripts/helpers/utils.js";
 
 let disable = document.getElementById("disable-sendTargets");
 let protocol = document.getElementById("protocol")
@@ -37,24 +37,7 @@ function changeProtocolSettings() {
     }
 }
 
-commonHelper.processDefaultCustomInstances('sendTargets', 'send', 'normal', document);
-commonHelper.processDefaultCustomInstances('sendTargets', 'send', 'tor', document);
+utils.processDefaultCustomInstances('sendTargets', 'send', 'normal', document);
+utils.processDefaultCustomInstances('sendTargets', 'send', 'tor', document);
 
-let latencyElement = document.getElementById("latency");
-let latencyLabel = document.getElementById("latency-label");
-latencyElement.addEventListener("click",
-    async () => {
-        let reloadWindow = () => location.reload();
-        latencyElement.addEventListener("click", reloadWindow);
-        await sendTargetsHelper.init();
-        let redirects = sendTargetsHelper.getRedirects();
-        const oldHtml = latencyLabel.innerHTML;
-        latencyLabel.innerHTML = '...';
-        commonHelper.testLatency(latencyLabel, redirects.send.normal).then(r => {
-            browser.storage.local.set({ sendLatency: r });
-            latencyLabel.innerHTML = oldHtml;
-            commonHelper.processDefaultCustomInstances('sendTargets', 'send', 'normal', document);
-            latencyElement.removeEventListener("click", reloadWindow)
-        });
-    }
-);
\ No newline at end of file
+utils.latency('sendTargets', 'send', document, location)
\ No newline at end of file
diff --git a/src/pages/options/tiktok/tiktok.js b/src/pages/options/tiktok/tiktok.js
index 8055fc95..5a57b46c 100644
--- a/src/pages/options/tiktok/tiktok.js
+++ b/src/pages/options/tiktok/tiktok.js
@@ -1,5 +1,5 @@
 import tiktokHelper from "../../../assets/javascripts/helpers/tiktok.js";
-import commonHelper from "../../../assets/javascripts/helpers/common.js";
+import utils from "../../../assets/javascripts/helpers/utils.js";
 
 let disable = document.getElementById("disable-tiktok");
 let protocol = document.getElementById("protocol")
@@ -49,24 +49,7 @@ function changeProtocolSettings() {
     }
 }
 
-commonHelper.processDefaultCustomInstances('tiktok', 'proxiTok', 'normal', document);
-commonHelper.processDefaultCustomInstances('tiktok', 'proxiTok', 'tor', document);
+utils.processDefaultCustomInstances('tiktok', 'proxiTok', 'normal', document);
+utils.processDefaultCustomInstances('tiktok', 'proxiTok', 'tor', document);
 
-let latencyElement = document.getElementById("latency");
-let latencyLabel = document.getElementById("latency-label");
-latencyElement.addEventListener("click",
-    async () => {
-        let reloadWindow = () => location.reload();
-        latencyElement.addEventListener("click", reloadWindow);
-        await tiktokHelper.init();
-        let redirects = tiktokHelper.getRedirects();
-        const oldHtml = latencyLabel.innerHTML;
-        latencyLabel.innerHTML = '...';
-        commonHelper.testLatency(latencyLabel, redirects.proxiTok.normal).then(r => {
-            browser.storage.local.set({ proxiTokLatency: r });
-            latencyLabel.innerHTML = oldHtml;
-            commonHelper.processDefaultCustomInstances('tiktok', 'proxiTok', 'normal', document);
-            latencyElement.removeEventListener("click", reloadWindow)
-        });
-    }
-);
\ No newline at end of file
+utils.latency('tiktok', 'proxiTok', document, location)
\ No newline at end of file
diff --git a/src/pages/options/translate/translate.js b/src/pages/options/translate/translate.js
index 55a2d74f..998ebc32 100644
--- a/src/pages/options/translate/translate.js
+++ b/src/pages/options/translate/translate.js
@@ -1,5 +1,5 @@
 import translateHelper from "../../../assets/javascripts/helpers/translate/translate.js";
-import commonHelper from "../../../assets/javascripts/helpers/common.js";
+import utils from "../../../assets/javascripts/helpers/utils.js";
 
 let disable = document.getElementById("disable-simplyTranslate");
 let simplyTranslateDiv = document.getElementById("simplyTranslate");
@@ -66,45 +66,10 @@ document.addEventListener("change", () => {
 })
 
 
-commonHelper.processDefaultCustomInstances('translate', 'simplyTranslate', 'normal', document)
-commonHelper.processDefaultCustomInstances('translate', 'simplyTranslate', 'tor', document);
-commonHelper.processDefaultCustomInstances('translate', 'lingva', 'normal', document);
-commonHelper.processDefaultCustomInstances('translate', 'lingva', 'tor', document);
+utils.processDefaultCustomInstances('translate', 'simplyTranslate', 'normal', document)
+utils.processDefaultCustomInstances('translate', 'simplyTranslate', 'tor', document);
+utils.processDefaultCustomInstances('translate', 'lingva', 'normal', document);
+utils.processDefaultCustomInstances('translate', 'lingva', 'tor', document);
 
-let latencySimplyTranslateElement = document.getElementById("latency-simplyTranslate");
-let latencySimplyTranslateLabel = document.getElementById("latency-simplyTranslate-label");
-latencySimplyTranslateElement.addEventListener("click",
-    async () => {
-        let reloadWindow = () => location.reload();
-        latencySimplyTranslateElement.addEventListener("click", reloadWindow);
-        await translateHelper.init();
-        let redirects = translateHelper.getRedirects();
-        const oldHtml = latencySimplyTranslateLabel.innerHTML;
-        latencySimplyTranslateLabel.innerHTML = '...';
-        commonHelper.testLatency(latencySimplyTranslateLabel, redirects.simplyTranslate.normal).then(r => {
-            browser.storage.local.set({ simplyTranslateLatency: r });
-            latencySimplyTranslateLabel.innerHTML = oldHtml;
-            commonHelper.processDefaultCustomInstances('translate', 'simplyTranslate', 'normal', document)
-            latencySimplyTranslateElement.removeEventListener("click", reloadWindow);
-        });
-    }
-);
-
-let latencyLingvaElement = document.getElementById("latency-lingva");
-let latencyLingvaLabel = document.getElementById("latency-lingva-label");
-latencyLingvaElement.addEventListener("click",
-    async () => {
-        let reloadWindow = () => location.reload();
-        latencyLingvaElement.addEventListener("click", reloadWindow);
-        await translateHelper.init();
-        let redirects = translateHelper.getRedirects();
-        const oldHtml = latencyLingvaLabel.innerHTML;
-        latencyLingvaLabel.innerHTML = '...';
-        commonHelper.testLatency(latencyLingvaLabel, redirects.lingva.normal).then(r => {
-            browser.storage.local.set({ lingvaLatency: r });
-            latencyLingvaLabel.innerHTML = oldHtml;
-            commonHelper.processDefaultCustomInstances('translate', 'lingva', 'normal', document);
-            latencyLingvaElement.removeEventListener("click", reloadWindow);
-        });
-    }
-);
\ No newline at end of file
+utils.latency('translate', 'simplyTranslate', document, location, true)
+utils.latency('translate', 'lingva', document, location, true)
\ No newline at end of file
diff --git a/src/pages/options/twitter/twitter.html b/src/pages/options/twitter/twitter.html
index 2bd204aa..95e0a0bf 100644
--- a/src/pages/options/twitter/twitter.html
+++ b/src/pages/options/twitter/twitter.html
@@ -117,27 +117,6 @@
                 </form>
                 <div class="checklist custom-checklist"></div>
       </div>
-      <div class="i2p">
-                <div class="some-block option-block">
-                  <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
-                </div>
-                <div class="checklist"></div>
-                <hr>
-                <div class="some-block option-block">
-                  <h4 data-localise="__MSG_customInstances__">Custom Instances</h4>
-                </div>
-                <form class="custom-instance-form">
-                  <div class="some-block option-block">
-                    <input class="custom-instance" placeholder="https://nitter.i2p" type="url">
-                    <button class="add add-instance" type="submit">
-                      <svg xmlns="https://www.w3.org/2000/svg" height="20px" viewBox="0 0 24 24" width="20px" fill="currentColor">
-                        <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"></path>
-                      </svg>
-                    </button>
-                  </div>
-                </form>
-                <div class="checklist custom-checklist"></div>
-      </div>
     </div>
   </section>
   <script type="module" src="../init.js"></script>
diff --git a/src/pages/options/twitter/twitter.js b/src/pages/options/twitter/twitter.js
index c23007f9..72c3d926 100644
--- a/src/pages/options/twitter/twitter.js
+++ b/src/pages/options/twitter/twitter.js
@@ -1,5 +1,5 @@
 import twitterHelper from "../../../assets/javascripts/helpers/twitter.js";
-import commonHelper from "../../../assets/javascripts/helpers/common.js";
+import utils from "../../../assets/javascripts/helpers/utils.js";
 
 let disable = document.getElementById("disable-nitter");
 let protocol = document.getElementById("protocol");
@@ -47,24 +47,7 @@ function changeProtocolSettings() {
     }
 }
 
-commonHelper.processDefaultCustomInstances('twitter', 'nitter', 'normal', document);
-commonHelper.processDefaultCustomInstances('twitter', 'nitter', 'tor', document)
+utils.processDefaultCustomInstances('twitter', 'nitter', 'normal', document);
+utils.processDefaultCustomInstances('twitter', 'nitter', 'tor', document)
 
-let latencyElement = document.getElementById("latency");
-let latencyLabel = document.getElementById("latency-label");
-latencyElement.addEventListener("click",
-    async () => {
-        let reloadWindow = () => location.reload();
-        latencyElement.addEventListener("click", reloadWindow);
-        await twitterHelper.init();
-        let redirects = twitterHelper.getRedirects();
-        const oldHtml = latencyLabel.innerHTML;
-        latencyLabel.innerHTML = '...';
-        commonHelper.testLatency(latencyLabel, redirects.nitter.normal).then(r => {
-            browser.storage.local.set({ nitterLatency: r });
-            latencyLabel.innerHTML = oldHtml;
-            commonHelper.processDefaultCustomInstances('twitter', 'nitter', 'normal', document);
-            latencyElement.removeEventListener("click", reloadWindow)
-        });
-    }
-);
\ No newline at end of file
+utils.latency('twitter', 'nitter', document, location)
\ No newline at end of file
diff --git a/src/pages/options/twitter/twitter.pug b/src/pages/options/twitter/twitter.pug
index af7b7f19..517a2727 100644
--- a/src/pages/options/twitter/twitter.pug
+++ b/src/pages/options/twitter/twitter.pug
@@ -28,9 +28,6 @@ body.option(dir="auto")
             .tor
                 include ../../widgets/instances.pug
                 +instances('https://nitter.onion')
-            .i2p
-                include ../../widgets/instances.pug
-                +instances('https://nitter.i2p')
 
 
     script(type="module" src="../init.js")
diff --git a/src/pages/options/wikipedia/wikipedia.js b/src/pages/options/wikipedia/wikipedia.js
index 8d9af92a..c421c18a 100644
--- a/src/pages/options/wikipedia/wikipedia.js
+++ b/src/pages/options/wikipedia/wikipedia.js
@@ -1,5 +1,5 @@
 import wikipediaHelper from "../../../assets/javascripts/helpers/wikipedia.js";
-import commonHelper from "../../../assets/javascripts/helpers/common.js";
+import utils from "../../../assets/javascripts/helpers/utils.js";
 
 let disableWikipediaElement = document.getElementById("disable-wikipedia");
 let protocolElement = document.getElementById("protocol");
@@ -44,27 +44,10 @@ function changeProtocolSettings(protocol) {
         i2pDiv.style.display = 'block';
     }
 }
-commonHelper.processDefaultCustomInstances('wikipedia' ,'wikiless', 'normal', document);
-commonHelper.processDefaultCustomInstances('wikipedia' ,'wikiless', 'tor',  document);
-commonHelper.processDefaultCustomInstances('wikipedia' ,'wikiless', 'i2p',  document);
+utils.processDefaultCustomInstances('wikipedia', 'wikiless', 'normal', document);
+utils.processDefaultCustomInstances('wikipedia', 'wikiless', 'tor', document);
+utils.processDefaultCustomInstances('wikipedia', 'wikiless', 'i2p', document);
 
 window.onblur = wikipediaHelper.initWikilessCookies;
 
-let latencyElement = document.getElementById("latency");
-let latencyLabel = document.getElementById("latency-label");
-latencyElement.addEventListener("click",
-    async () => {
-        let reloadWindow = () => location.reload();
-        latencyElement.addEventListener("click", reloadWindow);
-        await wikipediaHelper.init();
-        let redirects = wikipediaHelper.getRedirects();
-        const oldHtml = latencyLabel.innerHTML;
-        latencyLabel.innerHTML = '...';
-        commonHelper.testLatency(latencyLabel, redirects.wikiless.normal).then(r => {
-            browser.storage.local.set({ wikilessLatency: r });
-            latencyLabel.innerHTML = oldHtml;
-            commonHelper.processDefaultCustomInstances('wikipedia' ,'wikiless', 'normal', document);
-            latencyElement.removeEventListener("click", reloadWindow)
-        });
-    }
-);
\ No newline at end of file
+utils.latency('wikipedia', 'wikiless', document, location)
\ No newline at end of file
diff --git a/src/pages/options/youtube/youtube.html b/src/pages/options/youtube/youtube.html
index 6dfb9f7f..20d13bd3 100644
--- a/src/pages/options/youtube/youtube.html
+++ b/src/pages/options/youtube/youtube.html
@@ -256,7 +256,4 @@
   </section>
   <script type="module" src="../init.js"></script>
   <script type="module" src="./youtube.js"></script>
-  <script type="module" src="./invidious.js"></script>
-  <script type="module" src="./piped.js"></script>
-  <script type="module" src="./pipedMaterial.js"></script>
 </body>
\ No newline at end of file
diff --git a/src/pages/options/youtube/youtube.js b/src/pages/options/youtube/youtube.js
index ce42abdc..4f987849 100644
--- a/src/pages/options/youtube/youtube.js
+++ b/src/pages/options/youtube/youtube.js
@@ -1,5 +1,5 @@
 import youtubeHelper from "../../../assets/javascripts/helpers/youtube/youtube.js";
-import commonHelper from "../../../assets/javascripts/helpers/common.js";
+import utils from "../../../assets/javascripts/helpers/utils.js";
 
 let disableYoutube = document.getElementById("disable-invidious");
 let youtubeFrontend = document.getElementById("youtube-frontend");
@@ -149,67 +149,13 @@ invidiousForm.addEventListener('submit', async event => {
 //     youtubeHelper.applyPipedLocalStorage(url);
 // });
 
-commonHelper.processDefaultCustomInstances('youtube', 'invidious', 'normal', document);
-commonHelper.processDefaultCustomInstances('youtube', 'invidious', 'tor', document);
-commonHelper.processDefaultCustomInstances('youtube', 'pipedMaterial', 'normal', document);
-commonHelper.processDefaultCustomInstances('youtube', 'pipedMaterial', 'tor', document);
-commonHelper.processDefaultCustomInstances('youtube', 'piped', 'normal', document);
-commonHelper.processDefaultCustomInstances('youtube', 'piped', 'tor', document);
-
-
-let latencyInvidiousElement = document.getElementById("latency-invidious");
-let latencyInvidiousLabel = document.getElementById("latency-invidious-label");
-latencyInvidiousElement.addEventListener("click",
-    async () => {
-        let reloadWindow = () => location.reload();
-        latencyInvidiousElement.addEventListener("click", reloadWindow);
-        await youtubeHelper.init();
-        let redirects = youtubeHelper.getRedirects();
-        const oldHtml = latencyInvidiousLabel.innerHTML;
-        latencyInvidiousLabel.innerHTML = '...';
-        commonHelper.testLatency(latencyInvidiousLabel, redirects.invidious.normal).then(r => {
-            browser.storage.local.set({ invidiousLatency: r });
-            latencyInvidiousLabel.innerHTML = oldHtml;
-            commonHelper.processDefaultCustomInstances('youtube', 'invidious', 'normal', document);
-            latencyInvidiousElement.removeEventListener("click", reloadWindow);
-        });
-    }
-);
+utils.processDefaultCustomInstances('youtube', 'invidious', 'normal', document);
+utils.processDefaultCustomInstances('youtube', 'invidious', 'tor', document);
+utils.processDefaultCustomInstances('youtube', 'pipedMaterial', 'normal', document);
+utils.processDefaultCustomInstances('youtube', 'pipedMaterial', 'tor', document);
+utils.processDefaultCustomInstances('youtube', 'piped', 'normal', document);
+utils.processDefaultCustomInstances('youtube', 'piped', 'tor', document);
 
-let latencyPipedMaterialElement = document.getElementById("latency-pipedMaterial");
-let latencyPipedMaterialLabel = document.getElementById("latency-pipedMaterial-label");
-latencyPipedMaterialElement.addEventListener("click",
-    async () => {
-        let reloadWindow = () => location.reload();
-        latencyPipedMaterialElement.addEventListener("click", reloadWindow);
-        await youtubeHelper.init();
-        let redirects = youtubeHelper.getRedirects();
-        const oldHtml = latencyPipedMaterialLabel.innerHTML;
-        latencyPipedMaterialLabel.innerHTML = '...';
-        commonHelper.testLatency(latencyPipedMaterialLabel, redirects.pipedMaterial.normal).then(r => {
-            browser.storage.local.set({ pipedMaterialLatency: r });
-            latencyPipedMaterialLabel.innerHTML = oldHtml;
-            commonHelper.processDefaultCustomInstances('youtube', 'pipedMaterial', 'normal', document);
-            latencyPipedMaterialElement.removeEventListener("click", reloadWindow);
-        });
-    }
-);
-
-let latencyPipedElement = document.getElementById("latency-piped");
-let latencyPipedLabel = document.getElementById("latency-piped-label");
-latencyPipedElement.addEventListener("click",
-    async () => {
-        let reloadWindow = () => location.reload();
-        latencyPipedElement.addEventListener("click", reloadWindow);
-        await youtubeHelper.init();
-        let redirects = youtubeHelper.getRedirects();
-        const oldHtml = latencyPipedLabel.innerHTML;
-        latencyPipedLabel.innerHTML = '...';
-        commonHelper.testLatency(latencyPipedLabel, redirects.piped.normal).then(r => {
-            browser.storage.local.set({ pipedLatency: r });
-            latencyPipedLabel.innerHTML = oldHtml;
-            commonHelper.processDefaultCustomInstances('youtube', 'piped', 'normal', document);
-            latencyPipedElement.removeEventListener("click", reloadWindow);
-        });
-    }
-);
+utils.latency('youtube', 'invidious', document, location, true)
+utils.latency('youtube', 'piped', document, location, true)
+utils.latency('youtube', 'pipedMaterial', document, location, true)
diff --git a/src/pages/options/youtube/youtube.pug b/src/pages/options/youtube/youtube.pug
index 45c7f173..39235b0c 100644
--- a/src/pages/options/youtube/youtube.pug
+++ b/src/pages/options/youtube/youtube.pug
@@ -78,6 +78,3 @@ body.option(dir="auto")
 
     script(type="module" src="../init.js")
     script(type="module" src="./youtube.js")
-    script(type="module" src="./invidious.js")
-    script(type="module" src="./piped.js")
-    script(type="module" src="./pipedMaterial.js")
diff --git a/src/pages/options/youtubeMusic/youtubeMusic.js b/src/pages/options/youtubeMusic/youtubeMusic.js
index 518c651d..167630eb 100644
--- a/src/pages/options/youtubeMusic/youtubeMusic.js
+++ b/src/pages/options/youtubeMusic/youtubeMusic.js
@@ -1,5 +1,5 @@
 import youtubeMusicHelper from "../../../assets/javascripts/helpers/youtubeMusic.js";
-import commonHelper from "../../../assets/javascripts/helpers/common.js";
+import utils from "../../../assets/javascripts/helpers/utils.js";
 
 let disableYoutubeMusicElement = document.getElementById("disable-beatbump");
 
@@ -18,23 +18,6 @@ document.addEventListener("change", async () => {
     })
 })
 
-commonHelper.processDefaultCustomInstances('youtubeMusic', 'beatbump', 'normal', document);
+utils.processDefaultCustomInstances('youtubeMusic', 'beatbump', 'normal', document);
 
-let latencyElement = document.getElementById("latency");
-let latencyLabel = document.getElementById("latency-label");
-latencyElement.addEventListener("click",
-    async () => {
-        let reloadWindow = () => location.reload();
-        latencyElement.addEventListener("click", reloadWindow);
-        await youtubeMusicHelper.init();
-        let redirects = youtubeMusicHelper.getRedirects();
-        const oldHtml = latencyLabel.innerHTML;
-        latencyLabel.innerHTML = '...';
-        commonHelper.testLatency(latencyLabel, redirects.beatbump.normal).then(r => {
-            browser.storage.local.set({ beatbumpLatency: r });
-            latencyLabel.innerHTML = oldHtml;
-            commonHelper.processDefaultCustomInstances('youtubeMusic', 'beatbump', 'normal', document);
-            latencyElement.removeEventListener("click", reloadWindow)
-        });
-    }
-);
\ No newline at end of file
+utils.latency('youtubeMusic', 'beatbump', document, location)
\ No newline at end of file
diff --git a/src/pages/popup/popup.html b/src/pages/popup/popup.html
index b4086ffd..b815bc1d 100644
--- a/src/pages/popup/popup.html
+++ b/src/pages/popup/popup.html
@@ -70,7 +70,7 @@
         <h4>Translate</h4></a>
       <input id="disable-simplyTranslate" type="checkbox">
     </div>
-    <div class="some-block" id="maps"><a class="title" href="https://maps.com">
+    <div class="some-block" id="maps"><a class="title" href="https://www.openstreetmap.org">
         <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
           <path d="M20.5 3l-.16.03L15 5.1 9 3 3.36 4.9c-.21.07-.36.25-.36.48V20.5c0 .28.22.5.5.5l.16-.03L9 18.9l6 2.1 5.64-1.9c.21-.07.36-.25.36-.48V3.5c0-.28-.22-.5-.5-.5zM10 5.47l4 1.4v11.66l-4-1.4V5.47zm-5 .99l3-1.01v11.7l-3 1.16V6.46zm14 11.08l-3 1.01V6.86l3-1.16v11.84z"></path>
         </svg>
@@ -84,7 +84,7 @@
         <h4>Send Files</h4></a>
       <input id="disable-sendTargets" type="checkbox">
     </div>
-    <div class="some-block"><a class="title button" id="change-instance">
+    <div class="some-block"><a class="title button" id="change_instance">
         <svg xmlns="http://www.w3.org/2000/svg" height="26px" viewBox="0 0 24 24" width="26px" fill="currentColor">
           <path d="M12 4V1L8 5l4 4V6c3.31 0 6 2.69 6 6 0 1.01-.25 1.97-.7 2.8l1.46 1.46C19.54 15.03 20 13.57 20 12c0-4.42-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6 0-1.01.25-1.97.7-2.8L5.24 7.74C4.46 8.97 4 10.43 4 12c0 4.42 3.58 8 8 8v3l4-4-4-4v3z"></path>
         </svg>
@@ -107,5 +107,6 @@
         <h4>Unify Settings</h4></a></div>
     <script type="module" src="../options/init.js"></script>
     <script type="module" src="./popup.js"></script>
+    <script src="../../assets/javascripts/localise.js"></script>
   </body>
 </html>
\ No newline at end of file
diff --git a/src/pages/popup/popup.js b/src/pages/popup/popup.js
index c6399aeb..e465a7e0 100644
--- a/src/pages/popup/popup.js
+++ b/src/pages/popup/popup.js
@@ -1,22 +1,7 @@
 "use strict";
 window.browser = window.browser || window.chrome;
 
-import commonHelper from "../../assets/javascripts/helpers/common.js";
-import youtubeHelper from "../../assets/javascripts/helpers/youtube/youtube.js";
-import youtubeMusicHelper from "../../assets/javascripts/helpers/youtubeMusic.js";
-import twitterHelper from "../../assets/javascripts/helpers/twitter.js";
-import instagramHelper from "../../assets/javascripts/helpers/instagram.js";
-import mapsHelper from "../../assets/javascripts/helpers/maps.js";
-import redditHelper from "../../assets/javascripts/helpers/reddit.js";
-import searchHelper from "../../assets/javascripts/helpers/search.js";
-import translateHelper from "../../assets/javascripts/helpers/translate/translate.js";
-import wikipediaHelper from "../../assets/javascripts/helpers/wikipedia.js";
-import mediumHelper from "../../assets/javascripts/helpers/medium.js";
-import imgurHelper from "../../assets/javascripts/helpers/imgur.js";
-import tiktokHelper from "../../assets/javascripts/helpers/tiktok.js";
-import sendTargetsHelper from "../../assets/javascripts/helpers/sendTargets.js";
-import peertubeHelper from "../../assets/javascripts/helpers/peertube.js";
-import lbryHelper from "../../assets/javascripts/helpers/lbry.js";
+import utils from "../../assets/javascripts/helpers/utils.js";
 import generalHelper from "../../assets/javascripts/helpers/general.js";
 
 let disableTwitterElement = document.getElementById("disable-nitter");
@@ -35,9 +20,6 @@ let disableSendTargetsElement = document.getElementById("disable-sendTargets");
 let disableImgurElement = document.getElementById("disable-imgur");
 let disableTiktokElement = document.getElementById("disable-tiktok");
 
-let copyRawElement = document.getElementById('copy_raw');
-let unifyElement = document.getElementById('unify');
-
 browser.storage.local.get(
   [
     "disableTwitter",
@@ -95,109 +77,13 @@ document.addEventListener("change", () => {
   });
 })
 
-let changeInstanceElement = document.getElementById("change-instance")
-changeInstanceElement.addEventListener("click", switchInstance);
-copyRawElement.addEventListener("click", copyRaw);
+document.getElementById("change_instance").addEventListener("click", utils.switchInstance);
+document.getElementById('copy_raw').addEventListener("click", utils.copyRaw);
 document.getElementById("more-options").addEventListener("click", () => browser.runtime.openOptionsPage());
-unifyElement.addEventListener("click", unify)
-
-function unify() {
-  browser.tabs.query(
-    { active: true, currentWindow: true },
-    async tabs => {
-      let currTab = tabs[0]
-      if (currTab) {
-        let url = new URL(currTab.url);
-
-        let result = await youtubeHelper.initInvidiousCookies(url);
-        if (!result) result = await youtubeHelper.initPipedLocalStorage(url, currTab.id);
-        if (!result) result = await youtubeHelper.initPipedMaterialLocalStorage(url, currTab.id);
-
-        if (!result) result = await twitterHelper.initNitterCookies(url);
-
-        if (!result) result = await redditHelper.initLibredditCookies(url);
-        if (!result) result = await redditHelper.initTedditCookies(url);
-
-        if (!result) result = await searchHelper.initSearxCookies(url);
-        if (!result) result = await searchHelper.initSearxngCookies(url);
-
-        if (!result) result = await tiktokHelper.initProxiTokCookies(url);
-
-        if (!result) result = await wikipediaHelper.initWikilessCookies(url);
-
-        if (!result) result = await translateHelper.initSimplyTranslateCookies(url);
-        if (!result) result = await translateHelper.initLingvaLocalStorage(url);
+document.getElementById('unify').addEventListener("click", unify);
 
-        if (result) {
-          const textElement = unifyElement.getElementsByTagName('h4')[0]
-          const oldHtml = textElement.innerHTML;
-          textElement.innerHTML = 'Unified';
-          setTimeout(() => textElement.innerHTML = oldHtml, 1000);
-        }
-      }
-    }
-  )
-}
-
-function switchInstance() {
-  browser.tabs.query({ active: true, currentWindow: true }, async tabs => {
-    let currTab = tabs[0];
-    if (currTab) {
-      let url = new URL(currTab.url);
-      let newUrl;
-
-      // newUrl = youtubeHelper.switchInstance(url);
-      // if (!newUrl) newUrl = twitterHelper.switchInstance(url);
-      // if (!newUrl) newUrl = instagramHelper.switchInstance(url);
-      if (!newUrl) newUrl = await redditHelper.switchInstance(url);
-      // if (!newUrl) newUrl = searchHelper.switchInstance(url);
-      // if (!newUrl) newUrl = translateHelper.switchInstance(url);
-      // if (!newUrl) newUrl = mediumHelper.switchInstance(url);
-      // if (!newUrl) newUrl = sendTargetsHelper.switchInstance(url);
-      // if (!newUrl) newUrl = peertubeHelper.switchInstance(url);
-      // if (!newUrl) newUrl = lbryHelper.switchInstance(url);
-      // if (!newUrl) newUrl = imgurHelper.switchInstance(url);
-      // if (!newUrl) newUrl = wikipediaHelper.switchInstance(url);
-
-      if (newUrl) {
-        browser.tabs.update({ url: newUrl });
-        return true;
-      }
-    }
-  })
-  return false;
-}
-
-function copyRaw() {
-  browser.tabs.query(
-    { active: true, currentWindow: true }, tabs => {
-      let currTab = tabs[0];
-      if (currTab) {
-        let url = new URL(currTab.url);
-        let newUrl;
-        newUrl = youtubeHelper.reverse(url);
-
-        if (!newUrl) newUrl = twitterHelper.reverse(url);
-        if (!newUrl) newUrl = instagramHelper.reverse(url);
-        if (!newUrl) newUrl = tiktokHelper.reverse(url);
-        if (!newUrl) newUrl = imgurHelper.reverse(url);
-
-        if (newUrl) {
-          navigator.clipboard.writeText(newUrl);
-          const textElement = copyRawElement.getElementsByTagName('h4')[0]
-          const oldHtml = textElement.innerHTML;
-          textElement.innerHTML = 'Copied';
-          setTimeout(() => textElement.innerHTML = oldHtml, 1000);
-        }
-      }
-    }
-  )
-}
-
-let popupFrontends;
 generalHelper.init().then(() => {
-  popupFrontends = generalHelper.getPopupFrontends();
-
+  let popupFrontends = generalHelper.getPopupFrontends();
   for (const frontend of generalHelper.allPopupFrontends)
     if (!popupFrontends.includes(frontend))
       document.getElementById(frontend).classList.add("hide")
diff --git a/src/pages/popup/popup.pug b/src/pages/popup/popup.pug
index 31354a4b..97f6d045 100644
--- a/src/pages/popup/popup.pug
+++ b/src/pages/popup/popup.pug
@@ -87,7 +87,7 @@ html(lang="en")
             input#disable-simplyTranslate(type="checkbox")
 
         #maps.some-block
-            a.title(href="https://maps.com")
+            a.title(href="https://www.openstreetmap.org")
                 +maps
                 h4 Maps
             input#disable-osm(type="checkbox")
@@ -99,7 +99,7 @@ html(lang="en")
             input#disable-sendTargets(type="checkbox")
 
         .some-block
-            a#change-instance.title.button
+            a#change_instance.title.button
                 +change_instance
                 h4 Change Instance
 
@@ -120,4 +120,4 @@ html(lang="en")
 
         script(type="module" src="../options/init.js")
         script(type="module" src="./popup.js")
-        //- script(src="../../assets/javascripts/localise.js")
\ No newline at end of file
+        script(src="../../assets/javascripts/localise.js")
\ No newline at end of file
diff --git a/src/pages/popup/style.css b/src/pages/popup/style.css
index 6cd91b92..4cc56145 100644
--- a/src/pages/popup/style.css
+++ b/src/pages/popup/style.css
@@ -9,11 +9,4 @@ html, body {
 
 .hide {
     display: none !important;
-}
-
-.button {
-    margin: auto;
-    width: 50%;
-    border: 3px rgb(180, 201, 180);
-    padding: 10px;
-  }
\ No newline at end of file
+}
\ No newline at end of file