From 60be141050374db1ea82b0bf50a6580c6335c218 Mon Sep 17 00:00:00 2001 From: Kotuklion Date: Mon, 12 Jul 2021 18:16:23 +0200 Subject: add Wikiless support --- src/_locales/en/messages.json | 8 +++++ src/assets/javascripts/helpers/wikipedia.js | 8 +++++ src/pages/background/background.js | 46 +++++++++++++++++++++++++++++ src/pages/options/options.html | 31 ++++++++++++++++++- src/pages/options/options.js | 25 ++++++++++++++++ src/pages/popup/popup.html | 25 ++++++++++++++++ src/pages/popup/popup.js | 7 +++++ 7 files changed, 149 insertions(+), 1 deletion(-) create mode 100644 src/assets/javascripts/helpers/wikipedia.js (limited to 'src') diff --git a/src/_locales/en/messages.json b/src/_locales/en/messages.json index 53a31069..18a4754e 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 00000000..28006614 --- /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 88b6f759..2060395c 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 = simplyTranslateInstances[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,11 @@ 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 +195,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,16 +543,40 @@ function redirectGoogleTranslate(url, initiator) { return `${simplyTranslateInstance}/${url.search}`; } +function redirectWikipedia(url, initiator) { + if (disableWikipedia || isException(url, initiator)) { + return null; + } + let link = `${wikipediaInstance}${url.pathname}`; + let urlSplit = url.host.split('.'); + if (urlSplit[0] != "wikipedia" && urlSplit[0] != "www") { + if (urlSplit[0] == 'm') + link += "?mobileaction=toggle_view_mobile"; + else + link += `?lang=${urlSplit[0]}`; + + if (urlSplit[1] == 'm') + link += "&mobileaction=toggle_view_mobile"; + //wikiless doesn't have mobile view support yet + } + 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; +} + browser.webRequest.onBeforeRequest.addListener( (details) => { const url = new URL(details.url); let initiator; + if (details.originUrl) { initiator = new URL(details.originUrl); } else if (details.initiator) { initiator = new URL(details.initiator); } let redirect; + if (youtubeDomains.includes(url.host)) { redirect = { redirectUrl: redirectYouTube(url, initiator, details.type), @@ -563,6 +605,10 @@ browser.webRequest.onBeforeRequest.addListener( redirect = { redirectUrl: redirectGoogleTranslate(url, initiator), }; + } else if (url.href.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 7a577a56..4e6bc84e 100644 --- a/src/pages/options/options.html +++ b/src/pages/options/options.html @@ -183,6 +183,25 @@ +
+ + + + + + + +
+

Wikipedia Redirects

+
+   + +
+

Nitter Instance

@@ -248,7 +267,7 @@ />
-
+

SimplyTranslate Instance

+
+

Wikipedia Instance

+
+ +
+

Theme

  + + + + + +
+