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.js49
-rw-r--r--src/pages/options/options.html47
-rw-r--r--src/pages/options/options.js34
-rw-r--r--src/pages/popup/popup.html32
-rw-r--r--src/pages/popup/popup.js7
5 files changed, 163 insertions, 6 deletions
diff --git a/src/pages/background/background.js b/src/pages/background/background.js
index 9b8c3a13..741bf6a1 100644
--- a/src/pages/background/background.js
+++ b/src/pages/background/background.js
@@ -5,6 +5,7 @@ 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 mediumHelper from "../../assets/javascripts/helpers/medium.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";
@@ -13,6 +14,9 @@ import wikipediaHelper from "../../assets/javascripts/helpers/wikipedia.js";
 const nitterInstances = twitterHelper.redirects;
 const twitterDomains = twitterHelper.targets;
 const youtubeDomains = youtubeHelper.targets;
+const mediumDomains = mediumHelper.targets;
+const scribeInstances = mediumHelper.redirects;
+const scribeDefault = mediumHelper.redirects[0];
 const invidiousInstances = youtubeHelper.redirects;
 const instagramDomains = instagramHelper.targets;
 const bibliogramInstances = instagramHelper.redirects;
@@ -43,6 +47,7 @@ let disableInvidious;
 let disableBibliogram;
 let disableOsm;
 let disableReddit;
+let disableScribe;
 let disableSearchEngine;
 let disableSimplyTranslate;
 let disableWikipedia;
@@ -50,6 +55,7 @@ let nitterInstance;
 let invidiousInstance;
 let bibliogramInstance;
 let osmInstance;
+let scribeInstance;
 let redditInstance;
 let searchEngineInstance;
 let simplyTranslateInstance;
@@ -66,6 +72,7 @@ let useFreeTube;
 let nitterRandomPool;
 let invidiousRandomPool;
 let bibliogramRandomPool;
+let scribeRandomPool;
 let exceptions;
 
 window.browser = window.browser || window.chrome;
@@ -77,6 +84,7 @@ browser.storage.sync.get(
     "bibliogramInstance",
     "osmInstance",
     "redditInstance",
+    "scribeInstance",
     "searchEngineInstance",
     "simplyTranslateInstance",
     "wikipediaInstance",
@@ -85,6 +93,7 @@ browser.storage.sync.get(
     "disableBibliogram",
     "disableOsm",
     "disableReddit",
+    "disableScribe",
     "disableSearchEngine",
     "disableSimplyTranslate",
     "disableWikipedia",
@@ -100,6 +109,7 @@ browser.storage.sync.get(
     "nitterRandomPool",
     "invidiousRandomPool",
     "bibliogramRandomPool",
+    "scribeRandomPool",
     "exceptions",
   ],
   (result) => {
@@ -108,11 +118,13 @@ browser.storage.sync.get(
     bibliogramInstance = result.bibliogramInstance;
     osmInstance = result.osmInstance || osmDefault;
     redditInstance = result.redditInstance || redditDefault;
+    scribeInstance = result.scribeInstance;
     searchEngineInstance = result.searchEngineInstance;
     simplyTranslateInstance =
       result.simplyTranslateInstance || simplyTranslateDefault;
     wikipediaInstance = result.wikipediaInstance || wikipediaDefault;
     disableNitter = result.disableNitter;
+    disableScribe = result.disableScribe;
     disableInvidious = result.disableInvidious;
     disableBibliogram = result.disableBibliogram;
     disableOsm = result.disableOsm;
@@ -143,6 +155,9 @@ browser.storage.sync.get(
     bibliogramRandomPool = result.bibliogramRandomPool
       ? result.bibliogramRandomPool.split(",")
       : commonHelper.filterInstances(bibliogramInstances);
+    scribeRandomPool = result.scribeRandomPool
+      ? result.scribeRandomPool.split(",")
+      : commonHelper.filterInstances(scribeInstances);
   }
 );
 
@@ -169,12 +184,18 @@ browser.storage.onChanged.addListener((changes) => {
   if ("redditInstance" in changes) {
     redditInstance = changes.redditInstance.newValue || redditDefault;
   }
+  if ("scribeInstance" in changes) {
+    scribeInstance = changes.scribeInstance.newValue || scribeDefault;
+  }
   if ("searchEngineInstance" in changes) {
     searchEngineInstance = changes.searchEngineInstance.newValue;
   }
   if ("disableNitter" in changes) {
     disableNitter = changes.disableNitter.newValue;
   }
+  if ("disableScribe" in changes) {
+    disableScribe = changes.disableScribe.newValue;
+  }
   if ("disableInvidious" in changes) {
     disableInvidious = changes.disableInvidious.newValue;
   }
@@ -232,6 +253,9 @@ browser.storage.onChanged.addListener((changes) => {
   if ("bibliogramRandomPool" in changes) {
     bibliogramRandomPool = changes.bibliogramRandomPool.newValue.split(",");
   }
+  if ("scribeRandomPool" in changes) {
+    scribeRandomPool = changes.scribeRandomPool.newValue.split(",");
+  }
   if ("exceptions" in changes) {
     exceptions = changes.exceptions.newValue.map((e) => {
       return new RegExp(e);
@@ -515,6 +539,27 @@ function redirectReddit(url, initiator, type) {
   return `${redditInstance}${url.pathname}${url.search}`;
 }
 
+function redirectMedium(url, initiator) {
+  if (disableScribe || isException(url, initiator)) {
+    return null;
+  }
+  if (
+    isFirefox() &&
+    initiator &&
+    (initiator.origin === scribeInstance ||
+      scribeInstances.includes(initiator.origin) ||
+      mediumDomains.includes(initiator.host))
+  ) {
+    browser.storage.sync.set({
+      redirectBypassFlag: true,
+    });
+    return null;
+  }
+  return `${
+      scribeInstance || commonHelper.getRandomInstance(scribeRandomPool)
+    }${url.pathname}${url.search}`;
+}
+
 function redirectSearchEngine(url, initiator) {
   if (disableSearchEngine || isException(url, initiator)) {
     return null;
@@ -607,6 +652,10 @@ browser.webRequest.onBeforeRequest.addListener(
       redirect = {
         redirectUrl: redirectReddit(url, initiator, details.type),
       };
+    } else if (mediumDomains.includes(url.host)) {
+      redirect = {
+        redirectUrl: redirectMedium(url, initiator),
+      };
     } else if (url.href.match(googleSearchRegex)) {
       redirect = {
         redirectUrl: redirectSearchEngine(url, initiator),
diff --git a/src/pages/options/options.html b/src/pages/options/options.html
index 65f1e9ab..5b68ed10 100644
--- a/src/pages/options/options.html
+++ b/src/pages/options/options.html
@@ -142,6 +142,28 @@
           </tbody>
         </table>
       </section>
+      <section class="settings-block">
+        <table class="option" aria-label="Toggle Scribe redirects">
+          <tbody>
+            <tr>
+              <td>
+                <h1 data-localise="__MSG_disableScribe__">
+                  Scribe Redirects
+                </h1>
+              </td>
+              <td>
+                <input
+                  aria-hidden="true"
+                  id="disable-scribe"
+                  type="checkbox"
+                  checked
+                />&nbsp;
+                <label for="disable-scribe" class="checkbox-label"> </label>
+              </td>
+            </tr>
+          </tbody>
+        </table>
+      </section>
        <section class="settings-block">
         <table class="option" aria-label="Toggle Search Engine redirects">
           <tbody>
@@ -188,7 +210,7 @@
           <tbody>
             <tr>
               <td>
-                <h1 data-localise="__MSG_disableWikipedia__" class="new-badge" data-new-badge>Wikipedia Redirects</h1>
+                <h1 data-localise="__MSG_disableWikipedia__">Wikipedia Redirects</h1>
               </td>
               <td>
                 <input
@@ -257,6 +279,19 @@
         </div>
       </section>
       <section class="settings-block">
+        <h1 data-localise="__MSG_scribeInstance__"
+          class="new-badge" data-new-badge>Scribe Instance</h1>
+        <div class="autocomplete">
+          <input
+            id="scribe-instance"
+            type="url"
+            name="scribe-instance"
+            data-localise-placeholder="__MSG_randomInstancePlaceholder__"
+            placeholder="Random instance (none selected)"
+          />
+        </div>
+      </section>
+      <section class="settings-block">
         <h1 data-localise="__MSG_searchEngineInstance__">Search Engine Instance</h1>
         <div class="autocomplete">
           <input
@@ -557,6 +592,16 @@
             type="text"
           />
         </section>
+        <section class="settings-block">
+          <h1 data-localise="__MSG_scribeRandomPool__">
+            Scribe random instance pool (comma-separated)
+          </h1>
+          <input
+            id="scribe-random-pool"
+            name="scribe-random-pool"
+            type="text"
+          />
+        </section>
         <hr>
       </div>
     </div>
diff --git a/src/pages/options/options.js b/src/pages/options/options.js
index 91e7ac05..4a148dfd 100644
--- a/src/pages/options/options.js
+++ b/src/pages/options/options.js
@@ -6,6 +6,7 @@ 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 mediumHelper from "../../assets/javascripts/helpers/medium.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";
@@ -15,6 +16,7 @@ const invidiousInstances = youtubeHelper.redirects;
 const bibliogramInstances = instagramHelper.redirects;
 const osmInstances = mapsHelper.redirects;
 const redditInstances = redditHelper.redirects;
+const scribeInstances = mediumHelper.redirects;
 const searchEngineInstances = searchHelper.redirects;
 const simplyTranslateInstances = googleTranslateHelper.redirects;
 const wikipediaInstances = wikipediaHelper.redirects;
@@ -24,6 +26,7 @@ const autocompletes = [
   { id: "bibliogram-instance", instances: bibliogramInstances },
   { id: "osm-instance", instances: osmInstances },
   { id: "reddit-instance", instances: redditInstances },
+  { id: "scribe-instance", instances: scribeInstances },
   {
     id: "search-engine-instance",
     instances: searchEngineInstances.map((instance) => instance.link),
@@ -38,6 +41,7 @@ let invidiousInstance = document.getElementById("invidious-instance");
 let bibliogramInstance = document.getElementById("bibliogram-instance");
 let osmInstance = document.getElementById("osm-instance");
 let redditInstance = document.getElementById("reddit-instance");
+let scribeInstance = document.getElementById("scribe-instance");
 let searchEngineInstance = document.getElementById("search-engine-instance");
 let simplyTranslateInstance = document.getElementById(
   "simply-translate-instance"
@@ -48,6 +52,7 @@ let disableInvidious = document.getElementById("disable-invidious");
 let disableBibliogram = document.getElementById("disable-bibliogram");
 let disableOsm = document.getElementById("disable-osm");
 let disableReddit = document.getElementById("disable-reddit");
+let disableScribe = document.getElementById("disable-scribe");
 let disableSearchEngine = document.getElementById("disable-search-engine");
 let disableSimplyTranslate = document.getElementById(
   "disable-simply-translate"
@@ -68,6 +73,7 @@ let useFreeTube = document.getElementById("use-freetube");
 let nitterRandomPool = document.getElementById("nitter-random-pool");
 let invidiousRandomPool = document.getElementById("invidious-random-pool");
 let bibliogramRandomPool = document.getElementById("bibliogram-random-pool");
+let scribeRandomPool = document.getElementById("scribe-random-pool");
 let exceptions;
 
 window.browser = window.browser || window.chrome;
@@ -103,6 +109,7 @@ browser.storage.sync.get(
     "bibliogramInstance",
     "osmInstance",
     "redditInstance",
+    "scribeInstance",
     "searchEngineInstance",
     "simplyTranslateInstance",
     "wikipediaInstance",
@@ -111,6 +118,7 @@ browser.storage.sync.get(
     "disableBibliogram",
     "disableOsm",
     "disableReddit",
+    "disableScribe",
     "disableSearchEngine",
     "disableSimplyTranslate",
     "disableWikipedia",
@@ -130,6 +138,7 @@ browser.storage.sync.get(
     "nitterRandomPool",
     "invidiousRandomPool",
     "bibliogramRandomPool",
+    "scribeRandomPool",
   ],
   (result) => {
     theme.value = result.theme || "";
@@ -139,6 +148,7 @@ browser.storage.sync.get(
     bibliogramInstance.value = result.bibliogramInstance || "";
     osmInstance.value = result.osmInstance || "";
     redditInstance.value = result.redditInstance || "";
+    scribeInstance.value = result.scribeInstance || "";
     searchEngineInstance.value =
       (result.searchEngineInstance && result.searchEngineInstance.link) || "";
     simplyTranslateInstance.value = result.simplyTranslateInstance || "";
@@ -148,6 +158,7 @@ browser.storage.sync.get(
     disableBibliogram.checked = !result.disableBibliogram;
     disableOsm.checked = !result.disableOsm;
     disableReddit.checked = !result.disableReddit;
+    disableScribe.checked = !result.disableScribe;
     disableSearchEngine.checked = !result.disableSearchEngine;
     disableSimplyTranslate.checked = !result.disableSimplyTranslate;
     disableWikipedia.checked = !result.disableWikipedia;
@@ -175,6 +186,9 @@ browser.storage.sync.get(
     bibliogramRandomPool.value =
       result.bibliogramRandomPool ||
       commonHelper.filterInstances(bibliogramInstances);
+    scribeRandomPool.value =
+      result.scribeRandomPool ||
+      commonHelper.filterInstances(scribeInstances);
   }
 );
 
@@ -311,6 +325,15 @@ const redditInstanceChange = debounce(() => {
 }, 500);
 redditInstance.addEventListener("input", redditInstanceChange);
 
+const scribeInstanceChange = debounce(() => {
+  if (scribeInstance.checkValidity()) {
+    browser.storage.sync.set({
+      scribeInstance: parseURL(scribeInstance.value),
+    });
+  }
+}, 500);
+scribeInstance.addEventListener("input", scribeInstanceChange);
+
 const searchEngineInstanceChange = debounce(() => {
   const instance = searchEngineInstances.find(
     (instance) => instance.link === searchEngineInstance.value
@@ -369,6 +392,10 @@ disableReddit.addEventListener("change", (event) => {
   browser.storage.sync.set({ disableReddit: !event.target.checked });
 });
 
+disableScribe.addEventListener("change", (event) => {
+  browser.storage.sync.set({ disableScribe: !event.target.checked });
+});
+
 disableSearchEngine.addEventListener("change", (event) => {
   browser.storage.sync.set({ disableSearchEngine: !event.target.checked });
 });
@@ -454,6 +481,13 @@ const bibliogramRandomPoolChange = debounce(() => {
 }, 500);
 bibliogramRandomPool.addEventListener("input", bibliogramRandomPoolChange);
 
+const scribeRandomPoolChange = debounce(() => {
+  browser.storage.sync.set({
+    scribeRandomPool: scribeRandomPool.value,
+  });
+}, 500);
+scribeRandomPool.addEventListener("input", scribeRandomPoolChange);
+
 theme.addEventListener("change", (event) => {
   const value = event.target.options[theme.selectedIndex].value;
   switch (value) {
diff --git a/src/pages/popup/popup.html b/src/pages/popup/popup.html
index ada7e756..6b084880 100644
--- a/src/pages/popup/popup.html
+++ b/src/pages/popup/popup.html
@@ -186,25 +186,47 @@
     </section>
 
     <section class="settings-block">
-      <table class="option" aria-label="Toggle Wikiepdia redirects">
+      <table class="option" aria-label="Toggle Wikipedia redirects">
+        <tbody>
+          <tr>
+            <td>
+              <h1 data-localise="__MSG_disableWikipedia__">
+                Wikipedia Redirects
+              </h1>
+            </td>
+            <td>
+              <input
+                aria-hidden="true"
+                id="disable-wikipedia"
+                type="checkbox"
+              />&nbsp;
+              <label for="disable-wikipedia" class="checkbox-label"></label>
+            </td>
+          </tr>
+        </tbody>
+      </table>
+    </section>
+
+    <section class="settings-block">
+      <table class="option" aria-label="Toggle Scribe redirects">
         <tbody>
           <tr>
             <td>
               <h1
-                data-localise="__MSG_disableWikipedia__"
+                data-localise="__MSG_disableScribe__"
                 class="new-badge"
                 data-new-badge
               >
-                Wikipedia Redirects
+                Scribe Redirects
               </h1>
             </td>
             <td>
               <input
                 aria-hidden="true"
-                id="disable-wikipedia"
+                id="disable-scribe"
                 type="checkbox"
               />&nbsp;
-              <label for="disable-wikipedia" class="checkbox-label"></label>
+              <label for="disable-scribe" class="checkbox-label"></label>
             </td>
           </tr>
         </tbody>
diff --git a/src/pages/popup/popup.js b/src/pages/popup/popup.js
index 4309c601..13d04f6b 100644
--- a/src/pages/popup/popup.js
+++ b/src/pages/popup/popup.js
@@ -8,6 +8,7 @@ let disableReddit = document.querySelector("#disable-reddit");
 let disableSearchEngine = document.querySelector("#disable-searchEngine");
 let disableSimplyTranslate = document.querySelector("#disable-simplyTranslate");
 let disableWikipedia = document.querySelector("#disable-wikipedia");
+let disableScribe = document.querySelector("#disable-scribe");
 let version = document.querySelector("#version");
 
 window.browser = window.browser || window.chrome;
@@ -22,6 +23,7 @@ browser.storage.sync.get(
     "disableSearchEngine",
     "disableSimplyTranslate",
     "disableWikipedia",
+    "disableScribe",
     "theme",
   ],
   (result) => {
@@ -34,6 +36,7 @@ browser.storage.sync.get(
     disableSearchEngine.checked = !result.disableSearchEngine;
     disableSimplyTranslate.checked = !result.disableSimplyTranslate;
     disableWikipedia.checked = !result.disableWikipedia;
+    disableScribe.checked = !result.disableScribe;
   }
 );
 
@@ -71,6 +74,10 @@ disableWikipedia.addEventListener("change", (event) => {
   browser.storage.sync.set({ disableWikipedia: !event.target.checked });
 });
 
+disableScribe.addEventListener("change", (event) => {
+  browser.storage.sync.set({ disableScribe: !event.target.checked });
+});
+
 document.querySelector("#more-options").addEventListener("click", () => {
   browser.runtime.openOptionsPage();
 });