summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/_locales/en/messages.json8
-rw-r--r--src/assets/javascripts/helpers/wikipedia.js8
-rw-r--r--src/pages/background/background.js57
-rw-r--r--src/pages/options/options.html29
-rw-r--r--src/pages/options/options.js25
-rw-r--r--src/pages/popup/popup.html25
-rw-r--r--src/pages/popup/popup.js7
7 files changed, 159 insertions, 0 deletions
diff --git a/src/_locales/en/messages.json b/src/_locales/en/messages.json
index 53a3106..18a4754 100644
--- a/src/_locales/en/messages.json
+++ b/src/_locales/en/messages.json
@@ -35,6 +35,10 @@
"message": "SimplyTranslate Instance",
"description": "Label for SimplyTranslate instance field option (options)."
},
+ "wikipediaInstance": {
+ "message": "Wikipedia Instance",
+ "description": "Label for Wikipedia instance field option (options)."
+ },
"disableNitter": {
"message": "Nitter Redirects",
"description": "Label for enable/disable Nitter redirects option (options & pop-up)."
@@ -63,6 +67,10 @@
"message": "SimplyTranslate Redirects",
"description": "Label for enable/disable SimplyTranslate redirects option (options & pop-up)."
},
+ "disableWikipedia": {
+ "message": "Wikipedia Redirects",
+ "description": "Label for enable/disable Wikipedia redirects option (options & pop-up)."
+ },
"alwaysProxy": {
"message": "Always proxy videos through Invidious",
"description": "Label for 'Always proxy videos through Invidious' option (options)."
diff --git a/src/assets/javascripts/helpers/wikipedia.js b/src/assets/javascripts/helpers/wikipedia.js
new file mode 100644
index 0000000..2800661
--- /dev/null
+++ b/src/assets/javascripts/helpers/wikipedia.js
@@ -0,0 +1,8 @@
+const targets = /wikipedia.org/;
+
+const redirects = ["https://wikiless.org"];
+
+export default {
+ targets,
+ redirects,
+};
diff --git a/src/pages/background/background.js b/src/pages/background/background.js
index 88b6f75..5f60f8b 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(
diff --git a/src/pages/options/options.html b/src/pages/options/options.html
index 7a577a5..65da7f0 100644
--- a/src/pages/options/options.html
+++ b/src/pages/options/options.html
@@ -184,6 +184,25 @@
</table>
</section>
<section class="settings-block">
+ <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">
<h1 data-localise="__MSG_nitterInstance__">Nitter Instance</h1>
<div class="autocomplete">
<input
@@ -259,6 +278,16 @@
</div>
</section>
<section class="settings-block">
+ <h1 data-localise="__MSG_wikipediaInstance__">Wikipedia Instance</h1>
+ <div class="autocomplete">
+ <input
+ id="wikipedia-instance"
+ type="url"
+ placeholder="https://wikiless.org"
+ />
+ </div>
+ </section>
+ <section class="settings-block">
<h1 data-localise="__MSG_theme__">Theme</h1>
<select id="theme">
<option value="">System</option>
diff --git a/src/pages/options/options.js b/src/pages/options/options.js
index cfe3a26..91e7ac0 100644
--- a/src/pages/options/options.js
+++ b/src/pages/options/options.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 invidiousInstances = youtubeHelper.redirects;
@@ -16,6 +17,7 @@ const osmInstances = mapsHelper.redirects;
const redditInstances = redditHelper.redirects;
const searchEngineInstances = searchHelper.redirects;
const simplyTranslateInstances = googleTranslateHelper.redirects;
+const wikipediaInstances = wikipediaHelper.redirects;
const autocompletes = [
{ id: "nitter-instance", instances: nitterInstances },
{ id: "invidious-instance", instances: invidiousInstances },
@@ -27,6 +29,7 @@ const autocompletes = [
instances: searchEngineInstances.map((instance) => instance.link),
},
{ id: "simply-translate-instance", instances: simplyTranslateInstances },
+ { id: "wikipedia-instance", instances: wikipediaInstances },
];
const domparser = new DOMParser();
@@ -39,6 +42,7 @@ let searchEngineInstance = document.getElementById("search-engine-instance");
let simplyTranslateInstance = document.getElementById(
"simply-translate-instance"
);
+let wikipediaInstance = document.getElementById("wikipedia-instance");
let disableNitter = document.getElementById("disable-nitter");
let disableInvidious = document.getElementById("disable-invidious");
let disableBibliogram = document.getElementById("disable-bibliogram");
@@ -48,6 +52,7 @@ let disableSearchEngine = document.getElementById("disable-search-engine");
let disableSimplyTranslate = document.getElementById(
"disable-simply-translate"
);
+let disableWikipedia = document.getElementById("disable-wikipedia");
let alwaysProxy = document.getElementById("always-proxy");
let onlyEmbeddedVideo = document.getElementById("only-embed");
let videoQuality = document.getElementById("video-quality");
@@ -100,6 +105,7 @@ browser.storage.sync.get(
"redditInstance",
"searchEngineInstance",
"simplyTranslateInstance",
+ "wikipediaInstance",
"disableNitter",
"disableInvidious",
"disableBibliogram",
@@ -107,6 +113,7 @@ browser.storage.sync.get(
"disableReddit",
"disableSearchEngine",
"disableSimplyTranslate",
+ "disableWikipedia",
"alwaysProxy",
"onlyEmbeddedVideo",
"videoQuality",
@@ -135,6 +142,7 @@ browser.storage.sync.get(
searchEngineInstance.value =
(result.searchEngineInstance && result.searchEngineInstance.link) || "";
simplyTranslateInstance.value = result.simplyTranslateInstance || "";
+ wikipediaInstance.value = result.wikipediaInstance || "";
disableNitter.checked = !result.disableNitter;
disableInvidious.checked = !result.disableInvidious;
disableBibliogram.checked = !result.disableBibliogram;
@@ -142,6 +150,7 @@ browser.storage.sync.get(
disableReddit.checked = !result.disableReddit;
disableSearchEngine.checked = !result.disableSearchEngine;
disableSimplyTranslate.checked = !result.disableSimplyTranslate;
+ disableWikipedia.checked = !result.disableWikipedia;
alwaysProxy.checked = result.alwaysProxy;
onlyEmbeddedVideo.checked = result.onlyEmbeddedVideo;
videoQuality.value = result.videoQuality || "";
@@ -328,6 +337,18 @@ simplyTranslateInstance.addEventListener(
simplyTranslateInstanceChange
);
+const wikipediaInstanceChange = debounce(() => {
+ if (wikipediaInstance.checkValidity()) {
+ browser.storage.sync.set({
+ wikipediaInstance: parseURL(wikipediaInstance.value),
+ });
+ }
+}, 500);
+wikipediaInstance.addEventListener(
+ "input",
+ wikipediaInstanceChange
+);
+
disableNitter.addEventListener("change", (event) => {
browser.storage.sync.set({ disableNitter: !event.target.checked });
});
@@ -356,6 +377,10 @@ disableSimplyTranslate.addEventListener("change", (event) => {
browser.storage.sync.set({ disableSimplyTranslate: !event.target.checked });
});
+disableWikipedia.addEventListener("change", (event) => {
+ browser.storage.sync.set({ disableWikipedia: !event.target.checked });
+});
+
alwaysProxy.addEventListener("change", (event) => {
browser.storage.sync.set({ alwaysProxy: event.target.checked });
});
diff --git a/src/pages/popup/popup.html b/src/pages/popup/popup.html
index 0b603f2..3835716 100644
--- a/src/pages/popup/popup.html
+++ b/src/pages/popup/popup.html
@@ -185,6 +185,31 @@
</table>
</section>
+ <section class="settings-block">
+ <table class="option" aria-label="Toggle Wikiepdia 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"></section>
<footer>
diff --git a/src/pages/popup/popup.js b/src/pages/popup/popup.js
index bf90c47..4309c60 100644
--- a/src/pages/popup/popup.js
+++ b/src/pages/popup/popup.js
@@ -7,6 +7,7 @@ let disableOsm = document.querySelector("#disable-osm");
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 version = document.querySelector("#version");
window.browser = window.browser || window.chrome;
@@ -20,6 +21,7 @@ browser.storage.sync.get(
"disableReddit",
"disableSearchEngine",
"disableSimplyTranslate",
+ "disableWikipedia",
"theme",
],
(result) => {
@@ -31,6 +33,7 @@ browser.storage.sync.get(
disableReddit.checked = !result.disableReddit;
disableSearchEngine.checked = !result.disableSearchEngine;
disableSimplyTranslate.checked = !result.disableSimplyTranslate;
+ disableWikipedia.checked = !result.disableWikipedia;
}
);
@@ -64,6 +67,10 @@ disableSimplyTranslate.addEventListener("change", (event) => {
browser.storage.sync.set({ disableSimplyTranslate: !event.target.checked });
});
+disableWikipedia.addEventListener("change", (event) => {
+ browser.storage.sync.set({ disableWikipedia: !event.target.checked });
+});
+
document.querySelector("#more-options").addEventListener("click", () => {
browser.runtime.openOptionsPage();
});