about summary refs log tree commit diff stats
path: root/src/assets/javascripts/wikipedia.js
diff options
context:
space:
mode:
authorManeraKai <manerakai@protonmail.com>2022-07-24 11:34:39 +0300
committerManeraKai <manerakai@protonmail.com>2022-07-24 11:34:39 +0300
commitccfcccd53ed6a7a5cc56adc0d7f027e475f0665a (patch)
treebe58876ebca99733cf54a297d22e2117a176f001 /src/assets/javascripts/wikipedia.js
parentMerge pull request 'No more trailing slashes' (#9) from BobIsMyManager/libred... (diff)
parentfix some typos (diff)
downloadlibredirect-ccfcccd53ed6a7a5cc56adc0d7f027e475f0665a.zip
Merge branch 'BobIsMyManager-librex'
Diffstat (limited to 'src/assets/javascripts/wikipedia.js')
-rw-r--r--src/assets/javascripts/wikipedia.js99
1 files changed, 66 insertions, 33 deletions
diff --git a/src/assets/javascripts/wikipedia.js b/src/assets/javascripts/wikipedia.js
index 629219b8..d2ba7de8 100644
--- a/src/assets/javascripts/wikipedia.js
+++ b/src/assets/javascripts/wikipedia.js
@@ -4,13 +4,18 @@ import utils from './utils.js'
 
 const targets = /^https?:\/{2}(([a-z]{1,}\.){0,})wikipedia\.org/
 
-let redirects = {
-  "wikiless": {
-    "normal": [],
-    "tor": [],
-    "i2p": []
-  }
-};
+const frontends = new Array("wikiless")
+const protocols = new Array("normal", "tor", "i2p", "loki")
+
+let redirects = {};
+
+for (let i = 0; i < frontends.length; i++) {
+    redirects[frontends[i]] = {}
+    for (let x = 0; x < protocols.length; x++) {
+        redirects[frontends[i]][protocols[x]] = []
+    }
+}
+
 function setRedirects(val) {
   browser.storage.local.get('cloudflareBlackList', r => {
     redirects.wikiless = val;
@@ -29,13 +34,15 @@ function setRedirects(val) {
 let
   disableWikipedia,
   wikipediaRedirects,
-  wikipediaProtocol,
+  protocol,
+  protocolFallback,
   wikilessNormalRedirectsChecks,
   wikilessTorRedirectsChecks,
   wikilessI2pRedirectsChecks,
   wikilessNormalCustomRedirects,
   wikilessTorCustomRedirects,
-  wikilessI2pCustomRedirects;
+  wikilessI2pCustomRedirects,
+  wikilessLokiCustomRedirects;
 
 function init() {
   return new Promise(async resolve => {
@@ -43,25 +50,28 @@ function init() {
       [
         "disableWikipedia",
         "wikipediaRedirects",
-        "wikipediaProtocol",
-
+        "protocol",
+        "protocolFallback",
         "wikilessNormalRedirectsChecks",
         "wikilessTorRedirectsChecks",
         "wikilessI2pRedirectsChecks",
         "wikilessNormalCustomRedirects",
         "wikilessTorCustomRedirects",
         "wikilessI2pCustomRedirects",
+        "wikilessLokiCustomRedirects"
       ],
       r => {
         disableWikipedia = r.disableWikipedia;
         wikipediaRedirects = r.wikipediaRedirects;
-        wikipediaProtocol = r.wikipediaProtocol;
+        protocol = r.protocol;
+        protocolFallback = r.protocolFallback;
         wikilessNormalRedirectsChecks = r.wikilessNormalRedirectsChecks;
         wikilessTorRedirectsChecks = r.wikilessTorRedirectsChecks;
         wikilessI2pRedirectsChecks = r.wikilessI2pRedirectsChecks;
         wikilessNormalCustomRedirects = r.wikilessNormalCustomRedirects;
         wikilessTorCustomRedirects = r.wikilessTorCustomRedirects;
         wikilessI2pCustomRedirects = r.wikilessI2pCustomRedirects;
+        wikilessLokiCustomRedirects = r.wikilessLokiCustomRedirects;
         resolve();
       }
     )
@@ -82,14 +92,18 @@ function initWikilessCookies(test, from) {
       ...wikilessTorCustomRedirects,
       ...wikilessI2pRedirectsChecks,
       ...wikilessI2pCustomRedirects,
+      ...wikilessLokiCustomRedirects
     ];
     if (!all.includes(protocolHost)) { resolve(); return; }
 
     if (!test) {
-      let checkedInstances;
-      if (wikipediaProtocol == 'normal') checkedInstances = [...wikilessNormalRedirectsChecks, ...wikilessNormalCustomRedirects]
-      else if (wikipediaProtocol == 'tor') checkedInstances = [...wikilessTorRedirectsChecks, ...wikilessTorCustomRedirects]
-      else if (wikipediaProtocol == 'i2p') checkedInstances = [...wikilessI2pRedirectsChecks, ...wikilessI2pCustomRedirects]
+      let checkedInstances = [];
+      if (protocol == 'loki') checkedInstances = [...wikilessLokiCustomRedirects];
+      else if (protocol == 'i2p') checkedInstances = [...wikilessI2pCustomRedirects, ...wikilessI2pRedirectsChecks];
+      else if (protocol == 'tor') checkedInstances = [...wikilessTorRedirectsChecks, ...wikilessTorCustomRedirects];
+      if ((checkedInstances.length === 0 && protocolFallback) || protocol == 'normal') {
+        checkedInstances = [...wikilessNormalRedirectsChecks, ...wikilessNormalCustomRedirects];
+      }
       await utils.copyCookie('wikiless', from, checkedInstances, 'theme');
       await utils.copyCookie('wikiless', from, checkedInstances, 'default_lang');
     }
@@ -100,10 +114,14 @@ function initWikilessCookies(test, from) {
 function pasteWikilessCookies() {
   return new Promise(async resolve => {
     await init();
-    if (disableWikipedia || wikipediaProtocol === undefined) { resolve(); return; }
-    let checkedInstances;
-    if (wikipediaProtocol == 'normal') checkedInstances = [...wikilessNormalRedirectsChecks, ...wikilessNormalCustomRedirects]
-    else if (wikipediaProtocol == 'tor') checkedInstances = [...wikilessTorRedirectsChecks, ...wikilessTorCustomRedirects]
+    if (disableWikipedia || protocol === undefined) { resolve(); return; }
+    let checkedInstances = [];
+    if (protocol == 'loki') checkedInstances = [...wikilessLokiCustomRedirects];
+    else if (protocol == 'i2p') checkedInstances = [...wikilessI2pCustomRedirects, ...wikilessI2pRedirectsChecks];
+    else if (protocol == 'tor') checkedInstances = [...wikilessTorRedirectsChecks, ...wikilessTorCustomRedirects];
+    if ((checkedInstances.length === 0 && protocolFallback) || protocol == 'normal') {
+      checkedInstances = [...wikilessNormalRedirectsChecks, ...wikilessNormalCustomRedirects];
+    }
     utils.getCookiesFromStorage('wikiless', checkedInstances, 'theme');
     utils.getCookiesFromStorage('wikiless', checkedInstances, 'default_lang');
     resolve();
@@ -123,10 +141,13 @@ function redirect(url, disableOverride) {
       GETArguments.push([args[0], args[1]]);
     }
   }
-  let instancesList;
-  if (wikipediaProtocol == 'normal') instancesList = [...wikilessNormalRedirectsChecks, ...wikilessNormalCustomRedirects];
-  else if (wikipediaProtocol == 'tor') instancesList = [...wikilessTorRedirectsChecks, ...wikilessTorCustomRedirects];
-  else if (wikipediaProtocol == 'i2p') instancesList = [...wikilessI2pRedirectsChecks, ...wikilessI2pCustomRedirects];
+  let instancesList = [];
+  if (protocol == 'loki') instancesList = [...wikilessLokiCustomRedirects];
+  else if (protocol == 'i2p') instancesList = [...wikilessI2pCustomRedirects, ...wikilessI2pRedirectsChecks];
+  else if (protocol == 'tor') instancesList = [...wikilessTorRedirectsChecks, ...wikilessTorCustomRedirects];
+  if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') {
+    instancesList = [...wikilessNormalRedirectsChecks, ...wikilessNormalCustomRedirects];
+  }
   if (instancesList.length === 0) return;
   const randomInstance = utils.getRandomInstance(instancesList)
 
@@ -158,14 +179,18 @@ function switchInstance(url, disableOverride) {
 
       ...wikilessNormalCustomRedirects,
       ...wikilessTorCustomRedirects,
-      ...wikilessI2pCustomRedirects
+      ...wikilessI2pCustomRedirects,
+      ...wikilessLokiCustomRedirects
     ];
     if (!wikipediaList.includes(protocolHost)) { resolve(); return; }
 
-    let instancesList;
-    if (wikipediaProtocol == 'normal') instancesList = [...wikilessNormalCustomRedirects, ...wikilessNormalRedirectsChecks];
-    else if (wikipediaProtocol == 'tor') instancesList = [...wikilessTorCustomRedirects, ...wikilessTorRedirectsChecks];
-    else if (wikipediaProtocol == 'i2p') instancesList = [...wikilessI2pCustomRedirects, ...wikilessI2pRedirectsChecks];
+    let instancesList = [];
+    if (protocol == 'loki') instancesList = [...wikilessLokiCustomRedirects];
+    else if (protocol == 'i2p') instancesList = [...wikilessI2pCustomRedirects, ...wikilessI2pRedirectsChecks];
+    else if (protocol == 'tor') instancesList = [...wikilessTorRedirectsChecks, ...wikilessTorCustomRedirects];
+    if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') {
+      instancesList = [...wikilessNormalRedirectsChecks, ...wikilessNormalCustomRedirects];
+    }
 
     let index = instancesList.indexOf(protocolHost);
     if (index > -1) instancesList.splice(index, 1);
@@ -180,7 +205,9 @@ function initDefaults() {
   return new Promise(resolve => {
     fetch('/instances/data.json').then(response => response.text()).then(async data => {
       let dataJson = JSON.parse(data);
-      redirects.wikiless = dataJson.wikiless;
+      for (let i = 0; i < frontends.length; i++) {
+        redirects[frontends[i]] = dataJson[frontends[i]]
+      }
       browser.storage.local.get('cloudflareBlackList', async r => {
         wikilessNormalRedirectsChecks = [...redirects.wikiless.normal];
         for (const instance of r.cloudflareBlackList) {
@@ -190,13 +217,19 @@ function initDefaults() {
         browser.storage.local.set({
           disableWikipedia: true,
           wikipediaRedirects: redirects,
-          wikipediaProtocol: "normal",
+          
           wikilessNormalRedirectsChecks: wikilessNormalRedirectsChecks,
-          wikilessTorRedirectsChecks: [...redirects.wikiless.tor],
-          wikilessI2pRedirectsChecks: [...redirects.wikiless.i2p],
           wikilessNormalCustomRedirects: [],
+          
+          wikilessTorRedirectsChecks: [...redirects.wikiless.tor],
           wikilessTorCustomRedirects: [],
+          
+          wikilessI2pRedirectsChecks: [...redirects.wikiless.i2p],
           wikilessI2pCustomRedirects: [],
+          
+          wikilessLokiRedirectsChecks: [...redirects.wikiless.loki],
+          wikilessLokiCustomRedirects: []
+          
         }, () => resolve());
       })
     })