about summary refs log tree commit diff stats
path: root/src/assets/javascripts
diff options
context:
space:
mode:
Diffstat (limited to 'src/assets/javascripts')
-rw-r--r--src/assets/javascripts/general.js1
-rw-r--r--src/assets/javascripts/quora.js2
-rw-r--r--src/assets/javascripts/reuters.js106
3 files changed, 107 insertions, 2 deletions
diff --git a/src/assets/javascripts/general.js b/src/assets/javascripts/general.js
index 7b643cfa..50d6ee33 100644
--- a/src/assets/javascripts/general.js
+++ b/src/assets/javascripts/general.js
@@ -64,6 +64,7 @@ const allPopupFrontends = [
     "wikipedia",
     "medium",
     "quora",
+    "reuters",
     "peertube",
     "lbry",
     "sendTargets"
diff --git a/src/assets/javascripts/quora.js b/src/assets/javascripts/quora.js
index ecd305f0..bf87628b 100644
--- a/src/assets/javascripts/quora.js
+++ b/src/assets/javascripts/quora.js
@@ -65,8 +65,6 @@ function init() {
 init();
 browser.storage.onChanged.addListener(init)
 
-// https://www.quora.com/@keysikaspol/video/7061265241887345946
-// https://www.quora.com/@keysikaspol
 function redirect(url, type, initiator) {
     if (disableQuora) return;
     if (type != "main_frame") return;
diff --git a/src/assets/javascripts/reuters.js b/src/assets/javascripts/reuters.js
new file mode 100644
index 00000000..9afb67a9
--- /dev/null
+++ b/src/assets/javascripts/reuters.js
@@ -0,0 +1,106 @@
+window.browser = window.browser || window.chrome;
+
+import utils from './utils.js'
+
+const targets = [
+    /^https?:\/{2}(www\.|)reuters\.com.*/
+];
+
+let redirects = {
+    "neuters": {
+        "normal": [
+            'https://neuters.de',
+        ],
+        "tor": []
+    }
+}
+
+let
+    disableReuters,
+    reutersProtocol,
+    reutersRedirects,
+    neutersNormalRedirectsChecks,
+    neutersNormalCustomRedirects,
+    neutersTorRedirectsChecks,
+    neutersTorCustomRedirects;
+
+function init() {
+    return new Promise(async resolve => {
+        browser.storage.local.get(
+            [
+                "disableReuters",
+                "reutersProtocol",
+                "reutersRedirects",
+                "neutersNormalRedirectsChecks",
+                "neutersNormalCustomRedirects",
+                "neutersTorRedirectsChecks",
+                "neutersTorCustomRedirects",
+            ],
+            r => {
+                disableReuters = r.disableReuters;
+                reutersProtocol = r.reutersProtocol;
+                reutersRedirects = r.reutersRedirects;
+                neutersNormalRedirectsChecks = r.neutersNormalRedirectsChecks;
+                neutersNormalCustomRedirects = r.neutersNormalCustomRedirects;
+                neutersTorRedirectsChecks = r.neutersTorRedirectsChecks;
+                neutersTorCustomRedirects = r.neutersTorCustomRedirects;
+                resolve();
+            }
+        )
+    })
+}
+
+init();
+browser.storage.onChanged.addListener(init)
+
+function redirect(url, type, initiator) {
+    if (disableReuters) return;
+    if (type != "main_frame") return;
+    const all = [
+        ...reutersRedirects.neuters.normal,
+        ...neutersNormalCustomRedirects
+    ];
+    if (initiator && (all.includes(initiator.origin) || targets.includes(initiator.host))) return;
+    if (!targets.some(rx => rx.test(url.href))) return;
+
+    let instancesList;
+    if (reutersProtocol == 'normal') instancesList = [...neutersNormalRedirectsChecks, ...neutersNormalCustomRedirects];
+    if (reutersProtocol == 'tor') instancesList = [...neutersTorRedirectsChecks, ...neutersTorCustomRedirects];
+    if (instancesList.length === 0) return;
+
+    const randomInstance = utils.getRandomInstance(instancesList);
+    // stolen from https://addons.mozilla.org/en-US/firefox/addon/reuters-redirect/
+    if (
+        url.pathname.startsWith('/article/') ||
+        url.pathname.startsWith('/pf/') ||
+        url.pathname.startsWith('/arc/') ||
+        url.pathname.startsWith('/resizer/')
+    )
+        return null;
+    else if (url.pathname.endsWith('/'))
+        return `${randomInstance}${url.pathname}`;
+    else
+        return `${randomInstance}${url.pathname}/`;
+}
+
+function initDefaults() {
+    return new Promise(resolve => {
+        browser.storage.local.set({
+            disableReuters: false,
+            reutersProtocol: "normal",
+
+            reutersRedirects: redirects,
+
+            neutersNormalRedirectsChecks: [...redirects.neuters.normal],
+            neutersNormalCustomRedirects: [],
+
+            neutersTorRedirectsChecks: [...redirects.neuters.tor],
+            neutersTorCustomRedirects: [],
+        }, () => resolve());
+    });
+}
+
+export default {
+    redirect,
+    initDefaults
+};