diff options
Diffstat (limited to 'src/assets')
| -rw-r--r-- | src/assets/javascripts/general.js | 24 | ||||
| -rw-r--r-- | src/assets/javascripts/services.js | 47 | ||||
| -rw-r--r-- | src/assets/javascripts/utils.js | 18 |
3 files changed, 42 insertions, 47 deletions
diff --git a/src/assets/javascripts/general.js b/src/assets/javascripts/general.js index 720b5769..35ead2f0 100644 --- a/src/assets/javascripts/general.js +++ b/src/assets/javascripts/general.js @@ -30,7 +30,7 @@ async function initDefaults() { regex: [], }, theme: "DEFAULT", - popupFrontends: ["youtube", "twitter", "instagram", "tiktok", "imgur", "reddit", "quora", "translate", "maps"], + popupServices: ["youtube", "twitter", "instagram", "tiktok", "imgur", "reddit", "quora", "translate", "maps"], autoRedirect: false, firstPartyIsolate: false, network: "clearnet", @@ -42,29 +42,7 @@ async function initDefaults() { ) } -const allPopupFrontends = [ - "youtube", - "youtubeMusic", - "twitter", - "instagram", - "tiktok", - "imgur", - "reddit", - "search", - "translate", - "maps", - "wikipedia", - "medium", - "quora", - "imdb", - "reuters", - "peertube", - "lbry", - "sendTargets", -] - export default { isException, initDefaults, - allPopupFrontends, } diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js index 3aa93c53..286a6eda 100644 --- a/src/assets/javascripts/services.js +++ b/src/assets/javascripts/services.js @@ -19,7 +19,7 @@ async function getConfig() { }
function init() {
- return new Promise(async resolve => {
+ return new Promise(resolve => {
browser.storage.local.get(["network", "networkFallback", "redirects"], r => {
options.network = r.network
options.networkFallback = r.networkFallback
@@ -401,7 +401,7 @@ function initDefaults() { .then(response => response.text())
.then(async data => {
let dataJson = JSON.parse(data)
- redirects = JSON.parse(data)
+ let tmpRedirects = JSON.parse(data)
browser.storage.local.get(["cloudflareBlackList", "authenticateBlackList", "offlineBlackList"], async r => {
for (const service in config.services) {
if (config.services[service].targets == "datajson") {
@@ -413,7 +413,7 @@ function initDefaults() { }
for (const frontend in config.services[service].frontends) {
if (config.services[service].frontends[frontend].instanceList) {
- let clearnetChecks = redirects[frontend].clearnet
+ let clearnetChecks = tmpRedirects[frontend].clearnet
for (const instance of [...r.cloudflareBlackList, ...r.authenticateBlackList, ...r.offlineBlackList]) {
let i = clearnetChecks.indexOf(instance)
if (i > -1) clearnetChecks.splice(i, 1)
@@ -428,7 +428,7 @@ function initDefaults() { break
default:
browser.storage.local.set({
- [frontend + utils.camelCase(network) + "RedirectsChecks"]: [...redirects[frontend][network]],
+ [frontend + utils.camelCase(network) + "RedirectsChecks"]: [...tmpRedirects[frontend][network]],
[frontend + utils.camelCase(network) + "CustomRedirects"]: [],
})
}
@@ -436,11 +436,11 @@ function initDefaults() { }
}
}
+ browser.storage.local.set({
+ redirects: dataJson,
+ })
+ resolve()
})
- browser.storage.local.set({
- redirects: dataJson,
- })
- resolve()
})
})
}
@@ -456,8 +456,39 @@ function computeService(url) { return null
}
+function switchInstance(url) {
+ return new Promise(async resolve => {
+ await getConfig()
+ await init()
+ for (const service in config.services) {
+ if (!options[service].enabled) continue
+ const protocolHost = utils.protocolHost(url)
+ if (!all(service).includes(protocolHost)) continue
+
+ let instancesList = [...options[options[service].frontend][options.network].checks, ...options[options[service].frontend][options.network].custom]
+ if (instancesList.length === 0 && options.networkFallback) instancesList = [...options[options[service].frontend].clearnet.checks, ...options[options[service].frontend].clearnet.custom]
+
+ let oldInstance
+ const i = instancesList.indexOf(protocolHost)
+ if (i > -1) {
+ oldInstance = instancesList[i]
+ instancesList.splice(i, 1)
+ }
+ if (instancesList.length === 0) {
+ resolve()
+ return
+ }
+ const randomInstance = utils.getRandomInstance(instancesList)
+ const oldUrl = `${oldInstance}${url.pathname}${url.search}`
+ // This is to make instance switching work when the instance depends on the pathname, eg https://darmarit.org/searx
+ resolve(oldUrl.replace(oldUrl, randomInstance))
+ }
+ })
+}
+
export default {
redirect,
initDefaults,
computeService,
+ switchInstance,
}
diff --git a/src/assets/javascripts/utils.js b/src/assets/javascripts/utils.js index 7337a13d..371838ff 100644 --- a/src/assets/javascripts/utils.js +++ b/src/assets/javascripts/utils.js @@ -18,6 +18,7 @@ import reutersHelper from "./reuters.js" import youtubeMusicHelper from "./youtubeMusic.js" import mapsHelper from "./maps.js" import localise from "./localise.js" +import servicesHelper from "./services.js" function getRandomInstance(instances) { return instances[~~(instances.length * Math.random())] @@ -479,22 +480,7 @@ function switchInstance(test) { resolve() return } - let newUrl = await youtubeHelper.switchInstance(url, true) - if (!newUrl) newUrl = await twitterHelper.switchInstance(url, true) - if (!newUrl) newUrl = await instagramHelper.switchInstance(url, true) - if (!newUrl) newUrl = await redditHelper.switchInstance(url, true) - if (!newUrl) newUrl = await searchHelper.switchInstance(url, true) - if (!newUrl) newUrl = await translateHelper.switchInstance(url, true) - if (!newUrl) newUrl = await mediumHelper.switchInstance(url, true) - if (!newUrl) newUrl = await quoraHelper.switchInstance(url, true) - if (!newUrl) newUrl = await libremdbHelper.switchInstance(url, true) - if (!newUrl) newUrl = await tiktokHelper.switchInstance(url, true) - if (!newUrl) newUrl = await sendTargetsHelper.switchInstance(url, true) - if (!newUrl) newUrl = await peertubeHelper.switchInstance(url, true) - if (!newUrl) newUrl = await lbryHelper.switchInstance(url, true) - if (!newUrl) newUrl = await imgurHelper.switchInstance(url, true) - if (!newUrl) newUrl = await wikipediaHelper.switchInstance(url, true) - if (!newUrl) newUrl = await youtubeMusicHelper.switchInstance(url, true) + let newUrl = await servicesHelper.switchInstance(url) if (newUrl) { if (!test) browser.tabs.update({ url: newUrl }) |
