about summary refs log tree commit diff stats
path: root/src/pages/background/background.js
diff options
context:
space:
mode:
authorSimon Brazell <simon@brazell.com.au>2021-07-25 14:33:02 +1000
committerGitHub <noreply@github.com>2021-07-25 14:33:02 +1000
commit20aafaaa17000c376fc18ad6cb98b8d2383672b9 (patch)
tree1ef490de354d3910653d0a33f4533c6c2d8b0fc4 /src/pages/background/background.js
parentMerge pull request #259 from unixfox/invidious.fdn.fr (diff)
parentcleanup (diff)
downloadlibredirect-20aafaaa17000c376fc18ad6cb98b8d2383672b9.zip
Merge pull request #257 from Kotuklion/master
Add Wikiless support
Diffstat (limited to 'src/pages/background/background.js')
-rw-r--r--src/pages/background/background.js57
1 files changed, 57 insertions, 0 deletions
diff --git a/src/pages/background/background.js b/src/pages/background/background.js
index 88b6f759..5f60f8b9 100644
--- a/src/pages/background/background.js
+++ b/src/pages/background/background.js
@@ -8,6 +8,7 @@ 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 googleTranslateHelper from "../../assets/javascripts/helpers/google-translate.js";
+import wikipediaHelper from  "../../assets/javascripts/helpers/wikipedia.js";
 
 const nitterInstances = twitterHelper.redirects;
 const twitterDomains = twitterHelper.targets;
@@ -33,6 +34,9 @@ const searchEngineInstances = searchHelper.redirects;
 const simplyTranslateInstances = googleTranslateHelper.redirects;
 const simplyTranslateDefault = simplyTranslateInstances[0];
 const googleTranslateDomains = googleTranslateHelper.targets;
+const wikipediaInstances = wikipediaHelper.redirects;
+const wikipediaDefault = wikipediaInstances[0];
+const wikipediaRegex = wikipediaHelper.targets;
 
 let disableNitter;
 let disableInvidious;
@@ -41,6 +45,7 @@ let disableOsm;
 let disableReddit;
 let disableSearchEngine;
 let disableSimplyTranslate;
+let disableWikipedia;
 let nitterInstance;
 let invidiousInstance;
 let bibliogramInstance;
@@ -48,6 +53,7 @@ let osmInstance;
 let redditInstance;
 let searchEngineInstance;
 let simplyTranslateInstance;
+let wikipediaInstance;
 let alwaysProxy;
 let onlyEmbeddedVideo;
 let videoQuality;
@@ -73,6 +79,7 @@ browser.storage.sync.get(
     "redditInstance",
     "searchEngineInstance",
     "simplyTranslateInstance",
+    "wikipediaInstance",  
     "disableNitter",
     "disableInvidious",
     "disableBibliogram",
@@ -80,6 +87,7 @@ browser.storage.sync.get(
     "disableReddit",
     "disableSearchEngine",
     "disableSimplyTranslate",
+    "disableWikipedia",  
     "alwaysProxy",
     "onlyEmbeddedVideo",
     "videoQuality",
@@ -103,12 +111,14 @@ browser.storage.sync.get(
     searchEngineInstance = result.searchEngineInstance;
     simplyTranslateInstance =
       result.simplyTranslateInstance || simplyTranslateDefault;
+    wikipediaInstance = result.wikipediaInstance || wikipediaDefault;  
     disableNitter = result.disableNitter;
     disableInvidious = result.disableInvidious;
     disableBibliogram = result.disableBibliogram;
     disableOsm = result.disableOsm;
     disableReddit = result.disableReddit;
     disableSearchEngine = result.disableSearchEngine;
+    disableWikipedia = result.disableWikipedia;
     disableSimplyTranslate = result.disableSimplyTranslate;
     alwaysProxy = result.alwaysProxy;
     onlyEmbeddedVideo = result.onlyEmbeddedVideo;
@@ -153,6 +163,10 @@ browser.storage.onChanged.addListener((changes) => {
     simplyTranslateInstance =
       changes.simplyTranslateInstance.newValue || simplyTranslateDefault;
   }
+  if ("wikipediaInstance" in changes) {
+    wikipediaInstance =
+	changes.wikipediaInstance.newValue || wikipediaDefault;
+  }
   if ("redditInstance" in changes) {
     redditInstance = changes.redditInstance.newValue || redditDefault;
   }
@@ -180,6 +194,9 @@ browser.storage.onChanged.addListener((changes) => {
   if ("disableSimplyTranslate" in changes) {
     disableSimplyTranslate = changes.disableSimplyTranslate.newValue;
   }
+  if ("disableWikipedia" in changes) {
+    disableWikipedia = changes.disableWikipedia.newValue;
+  }
   if ("alwaysProxy" in changes) {
     alwaysProxy = changes.alwaysProxy.newValue;
   }
@@ -525,6 +542,42 @@ function redirectGoogleTranslate(url, initiator) {
   return `${simplyTranslateInstance}/${url.search}`;
 }
 
+function redirectWikipedia(url, initiator) {
+  if (disableWikipedia || isException(url, initiator)) {
+    return null;
+  }
+  let GETArguments = [];
+    if (url.search.length > 0) {
+      let search = url.search.substring(1); //get rid of '?'
+      let argstrings = search.split('&');
+      for (let i = 0; i < argstrings.length;i++) {
+	let args = argstrings[i].split('=');
+	GETArguments.push([args[0],args[1]]);
+      }
+    }
+  let link = `${wikipediaInstance}${url.pathname}`;
+  let urlSplit = url.host.split('.');
+  if (urlSplit[0] != "wikipedia" && urlSplit[0] != "www") {
+    if (urlSplit[0] == 'm')
+	GETArguments.push(["mobileaction","toggle_view_mobile"]);
+    else
+      	GETArguments.push(["lang",urlSplit[0]]);
+    if (urlSplit[1] == 'm')
+      	GETArguments.push(["mobileaction","toggle_view_mobile"]);
+      //wikiless doesn't have mobile view support yet
+  }
+  for (let i = 0; i < GETArguments.length; i++) {
+    link += (i == 0 ? '?' : '&') + GETArguments[i][0] +
+      '=' + GETArguments[i][1];
+  }
+  if (urlSplit[urlSplit.length - 1] == "org" &&
+      urlSplit[urlSplit.length - 2] == "wikipedia") 
+    //just in case someone wanted to visit wikipedia.org.foo.bar.net
+    return link; 
+  else
+    return null;
+}
+
 browser.webRequest.onBeforeRequest.addListener(
   (details) => {
     const url = new URL(details.url);
@@ -563,6 +616,10 @@ browser.webRequest.onBeforeRequest.addListener(
       redirect = {
         redirectUrl: redirectGoogleTranslate(url, initiator),
       };
+    } else if (url.host.match(wikipediaRegex)) {
+      redirect = {
+        redirectUrl: redirectWikipedia(url, initiator),
+      };
     }
     if (redirect && redirect.redirectUrl) {
       console.info(