diff options
author | BobIsMyManager <bimmgitsignature.nly8m@simplelogin.co> | 2022-07-26 22:28:50 +0100 |
---|---|---|
committer | BobIsMyManager <bimmgitsignature.nly8m@simplelogin.co> | 2022-07-26 22:28:50 +0100 |
commit | 2a0596f08fb54e2faef4bcb4548a28f5837fc067 (patch) | |
tree | cf5851f95c37da269a561623cee0d3967ca321ec /src/assets/javascripts | |
parent | I should really inspect diffs before commiting (diff) | |
download | libredirect-2a0596f08fb54e2faef4bcb4548a28f5837fc067.zip |
Many things
Made all instances updateable Added hyperpipe Closes https://github.com/libredirect/libredirect/issues/398 Added cloudtube Closes https://github.com/libredirect/libredirect/issues/397 Start using prettier
Diffstat (limited to 'src/assets/javascripts')
27 files changed, 5496 insertions, 4835 deletions
diff --git a/src/assets/javascripts/general.js b/src/assets/javascripts/general.js index 1c27a55d..0b34c148 100644 --- a/src/assets/javascripts/general.js +++ b/src/assets/javascripts/general.js @@ -1,78 +1,66 @@ -"use strict"; -window.browser = window.browser || window.chrome; +"use strict" +window.browser = window.browser || window.chrome function isException(url) { - for (const item of exceptions.url) - if (item == `${url.protocol}//${url.host}`) return true; - for (const item of exceptions.regex) - if (new RegExp(item).test(url.href)) return true; - return false; + for (const item of exceptions.url) if (item == `${url.protocol}//${url.host}`) return true + for (const item of exceptions.regex) if (new RegExp(item).test(url.href)) return true + return false } -let exceptions; +let exceptions function init() { - browser.storage.local.get( - 'exceptions', - r => { - exceptions = r.exceptions; - } - ) + browser.storage.local.get("exceptions", r => { + exceptions = r.exceptions + }) } -init(); +init() browser.storage.onChanged.addListener(init) async function initDefaults() { - return new Promise(resolve => - browser.storage.local.set({ - exceptions: { - "url": [], - "regex": [], - }, - theme: "DEFAULT", - popupFrontends: [ - "youtube", - "twitter", - "instagram", - "tiktok", - "imgur", - "reddit", - "quora", - "translate", - "maps", - ], - autoRedirect: false, - firstPartyIsolate: false, - protocol: "normal", - protocolFallback: true - }, () => resolve()) - ) + return new Promise(resolve => + browser.storage.local.set( + { + exceptions: { + url: [], + regex: [], + }, + theme: "DEFAULT", + popupFrontends: ["youtube", "twitter", "instagram", "tiktok", "imgur", "reddit", "quora", "translate", "maps"], + autoRedirect: false, + firstPartyIsolate: false, + protocol: "normal", + protocolFallback: true, + }, + () => resolve() + ) + ) } const allPopupFrontends = [ - "youtube", - "youtubeMusic", - "twitter", - "instagram", - "tiktok", - "imgur", - "reddit", - "search", - "translate", - "maps", - "wikipedia", - "medium", - "quora", - "imdb", - "reuters", - "peertube", - "lbry", - "sendTargets" -]; + "youtube", + "youtubeMusic", + "twitter", + "instagram", + "tiktok", + "imgur", + "reddit", + "search", + "translate", + "maps", + "wikipedia", + "medium", + "quora", + "imdb", + "reuters", + "peertube", + "lbry", + "sendTargets", +] export default { - isException, - initDefaults, - allPopupFrontends, + isException, + initDefaults, + allPopupFrontends, } diff --git a/src/assets/javascripts/imdb.js b/src/assets/javascripts/imdb.js index 2a8ac2f6..9981f1b9 100644 --- a/src/assets/javascripts/imdb.js +++ b/src/assets/javascripts/imdb.js @@ -1,10 +1,8 @@ -window.browser = window.browser || window.chrome; +window.browser = window.browser || window.chrome -import utils from './utils.js' +import utils from "./utils.js" -const targets = [ - /^https?:\/{2}(?:www\.|)imdb\.com.*/ -]; +const targets = [/^https?:\/{2}(?:www\.|)imdb\.com.*/] const frontends = new Array("libremdb") const protocols = new Array("normal", "tor", "i2p", "loki") @@ -12,182 +10,197 @@ const protocols = new Array("normal", "tor", "i2p", "loki") let redirects = {} for (let i = 0; i < frontends.length; i++) { - redirects[frontends[i]] = {} - for (let x = 0; x < protocols.length; x++) { - redirects[frontends[i]][protocols[x]] = [] - } + redirects[frontends[i]] = {} + for (let x = 0; x < protocols.length; x++) { + redirects[frontends[i]][protocols[x]] = [] + } } function setRedirects(val) { - browser.storage.local.get('cloudflareBlackList', r => { - redirects.libremdb = val; - libremdbNormalRedirectsChecks = [...redirects.libremdb.normal]; - for (const instance of r.cloudflareBlackList) { - const a = libremdbNormalRedirectsChecks.indexOf(instance); - if (a > -1) libremdbNormalRedirectsChecks.splice(a, 1); - } - browser.storage.local.set({ - imdbRedirects: redirects, - libremdbNormalRedirectsChecks - }) - }) + browser.storage.local.get("cloudflareBlackList", r => { + redirects.libremdb = val + libremdbNormalRedirectsChecks = [...redirects.libremdb.normal] + for (const instance of r.cloudflareBlackList) { + const a = libremdbNormalRedirectsChecks.indexOf(instance) + if (a > -1) libremdbNormalRedirectsChecks.splice(a, 1) + } + browser.storage.local.set({ + imdbRedirects: redirects, + libremdbNormalRedirectsChecks, + }) + }) } -let - disableImdb, - protocol, - protocolFallback, - imdbRedirects, - libremdbNormalRedirectsChecks, - libremdbNormalCustomRedirects, - libremdbTorRedirectsChecks, - libremdbTorCustomRedirects, - libremdbI2pCustomRedirects, - libremdbLokiCustomRedirects; +let disableImdb, + protocol, + protocolFallback, + imdbRedirects, + libremdbNormalRedirectsChecks, + libremdbNormalCustomRedirects, + libremdbTorRedirectsChecks, + libremdbTorCustomRedirects, + libremdbI2pCustomRedirects, + libremdbLokiCustomRedirects function init() { - return new Promise(async resolve => { - browser.storage.local.get( - [ - "disableImdb", - "protocol", - "protocolFallback", - "imdbRedirects", - "libremdbNormalRedirectsChecks", - "libremdbNormalCustomRedirects", - "libremdbTorRedirectsChecks", - "libremdbTorCustomRedirects", - "libremdbI2pCustomRedirects", - "libremdbLokiCustomRedirects" - ], - r => { - disableImdb = r.disableImdb; - protocol = r.protocol; - protocolFallback = r.protocolFallback; - imdbRedirects = r.imdbRedirects; - libremdbNormalRedirectsChecks = r.libremdbNormalRedirectsChecks; - libremdbNormalCustomRedirects = r.libremdbNormalCustomRedirects; - libremdbTorRedirectsChecks = r.libremdbTorRedirectsChecks; - libremdbTorCustomRedirects = r.libremdbTorCustomRedirects; - libremdbI2pCustomRedirects = r.libremdbI2pCustomRedirects; - libremdbLokiCustomRedirects = r.libremdbLokiCustomRedirects; - resolve(); - } - ) - }) + return new Promise(async resolve => { + browser.storage.local.get( + [ + "disableImdb", + "protocol", + "protocolFallback", + "imdbRedirects", + "libremdbNormalRedirectsChecks", + "libremdbNormalCustomRedirects", + "libremdbTorRedirectsChecks", + "libremdbTorCustomRedirects", + "libremdbI2pCustomRedirects", + "libremdbLokiCustomRedirects", + ], + r => { + disableImdb = r.disableImdb + protocol = r.protocol + protocolFallback = r.protocolFallback + imdbRedirects = r.imdbRedirects + libremdbNormalRedirectsChecks = r.libremdbNormalRedirectsChecks + libremdbNormalCustomRedirects = r.libremdbNormalCustomRedirects + libremdbTorRedirectsChecks = r.libremdbTorRedirectsChecks + libremdbTorCustomRedirects = r.libremdbTorCustomRedirects + libremdbI2pCustomRedirects = r.libremdbI2pCustomRedirects + libremdbLokiCustomRedirects = r.libremdbLokiCustomRedirects + resolve() + } + ) + }) } -init(); +init() browser.storage.onChanged.addListener(init) function redirect(url, type, initiator, disableOverride) { - if (disableImdb && !disableOverride) return; - if (url.pathname == "/") return; - if (type != "main_frame") return; - const all = [ - ...imdbRedirects.libremdb.normal, - ...libremdbNormalCustomRedirects - ]; - if (initiator && (all.includes(initiator.origin) || targets.includes(initiator.host))) return; - if (!targets.some(rx => rx.test(url.href))) return; - - let instancesList = []; - if (protocol == 'loki') instancesList = [...libremdbLokiCustomRedirects]; - else if (protocol == 'i2p') instancesList = [...libremdbI2pCustomRedirects]; - else if (protocol == 'tor') instancesList = [...libremdbTorRedirectsChecks, ...libremdbTorCustomRedirects]; - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - instancesList = [...libremdbNormalRedirectsChecks, ...libremdbNormalCustomRedirects]; - } - if (instancesList.length === 0) { return; } - - const randomInstance = utils.getRandomInstance(instancesList); - return `${randomInstance}${url.pathname}`; + if (disableImdb && !disableOverride) return + if (url.pathname == "/") return + if (type != "main_frame") return + const all = [...imdbRedirects.libremdb.normal, ...libremdbNormalCustomRedirects] + if (initiator && (all.includes(initiator.origin) || targets.includes(initiator.host))) return + if (!targets.some(rx => rx.test(url.href))) return + + let instancesList = [] + if (protocol == "loki") instancesList = [...libremdbLokiCustomRedirects] + else if (protocol == "i2p") instancesList = [...libremdbI2pCustomRedirects] + else if (protocol == "tor") instancesList = [...libremdbTorRedirectsChecks, ...libremdbTorCustomRedirects] + if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { + instancesList = [...libremdbNormalRedirectsChecks, ...libremdbNormalCustomRedirects] + } + if (instancesList.length === 0) { + return + } + + const randomInstance = utils.getRandomInstance(instancesList) + return `${randomInstance}${url.pathname}` } function reverse(url) { - return new Promise(async resolve => { - await init(); - let protocolHost = utils.protocolHost(url); - const all = [ - ...imdbRedirects.libremdb.normal, - ...imdbRedirects.libremdb.tor, - ...libremdbNormalCustomRedirects, - ...libremdbTorCustomRedirects, - ...libremdbI2pCustomRedirects, - ...libremdbLokiCustomRedirects - ]; - if (!all.includes(protocolHost)) { resolve(); return; } - - resolve(`https://imdb.com${url.pathname}${url.search}`); - }) + return new Promise(async resolve => { + await init() + let protocolHost = utils.protocolHost(url) + const all = [ + ...imdbRedirects.libremdb.normal, + ...imdbRedirects.libremdb.tor, + ...libremdbNormalCustomRedirects, + ...libremdbTorCustomRedirects, + ...libremdbI2pCustomRedirects, + ...libremdbLokiCustomRedirects, + ] + if (!all.includes(protocolHost)) { + resolve() + return + } + + resolve(`https://imdb.com${url.pathname}${url.search}`) + }) } function switchInstance(url, disableOverride) { - return new Promise(async resolve => { - await init(); - if (disableImdb && !disableOverride) { resolve(); return; } - let protocolHost = utils.protocolHost(url); - const all = [ - ...imdbRedirects.libremdb.tor, - ...imdbRedirects.libremdb.normal, - - ...libremdbNormalCustomRedirects, - ...libremdbTorCustomRedirects, - ...libremdbI2pCustomRedirects, - ...libremdbLokiCustomRedirects - ]; - if (!all.includes(protocolHost)) { resolve(); return; } - - let instancesList = []; - if (protocol == 'loki') instancesList = [...libremdbLokiCustomRedirects]; - else if (protocol == 'i2p') instancesList = [...libremdbI2pCustomRedirects]; - else if (protocol == 'tor') instancesList = [...libremdbTorRedirectsChecks, ...libremdbTorCustomRedirects]; - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - instancesList = [...libremdbNormalRedirectsChecks, ...libremdbNormalCustomRedirects]; - } - - const i = instancesList.indexOf(protocolHost); - if (i > -1) instancesList.splice(i, 1); - if (instancesList.length === 0) { resolve(); return; } - - const randomInstance = utils.getRandomInstance(instancesList); - resolve(`${randomInstance}${url.pathname}${url.search}`); - }) + return new Promise(async resolve => { + await init() + if (disableImdb && !disableOverride) { + resolve() + return + } + let protocolHost = utils.protocolHost(url) + const all = [ + ...imdbRedirects.libremdb.tor, + ...imdbRedirects.libremdb.normal, + + ...libremdbNormalCustomRedirects, + ...libremdbTorCustomRedirects, + ...libremdbI2pCustomRedirects, + ...libremdbLokiCustomRedirects, + ] + if (!all.includes(protocolHost)) { + resolve() + return + } + + let instancesList = [] + if (protocol == "loki") instancesList = [...libremdbLokiCustomRedirects] + else if (protocol == "i2p") instancesList = [...libremdbI2pCustomRedirects] + else if (protocol == "tor") instancesList = [...libremdbTorRedirectsChecks, ...libremdbTorCustomRedirects] + if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { + instancesList = [...libremdbNormalRedirectsChecks, ...libremdbNormalCustomRedirects] + } + + const i = instancesList.indexOf(protocolHost) + if (i > -1) instancesList.splice(i, 1) + if (instancesList.length === 0) { + resolve() + return + } + + const randomInstance = utils.getRandomInstance(instancesList) + resolve(`${randomInstance}${url.pathname}${url.search}`) + }) } function initDefaults() { - return new Promise(async resolve => { - fetch('/instances/data.json').then(response => response.text()).then(async data => { - let dataJson = JSON.parse(data); - for (let i = 0; i < frontends.length; i++) { - redirects[frontends[i]] = dataJson[frontends[i]] - } - browser.storage.local.set({ - disableImdb: true, - imdbRedirects: redirects, - - libremdbNormalRedirectsChecks: [...redirects.libremdb.normal], - libremdbNormalCustomRedirects: [], - - libremdbTorRedirectsChecks: [...redirects.libremdb.tor], - libremdbTorCustomRedirects: [], - - libremdbI2pRedirectsChecks: [], - libremdbI2pCustomRedirects: [], - - libremdbLokiRedirectsChecks: [], - libremdbLokiCustomRedirects: [] - }, () => resolve()); - }); - }) + return new Promise(async resolve => { + fetch("/instances/data.json") + .then(response => response.text()) + .then(async data => { + let dataJson = JSON.parse(data) + for (let i = 0; i < frontends.length; i++) { + redirects[frontends[i]] = dataJson[frontends[i]] + } + browser.storage.local.set( + { + disableImdb: true, + imdbRedirects: redirects, + + libremdbNormalRedirectsChecks: [...redirects.libremdb.normal], + libremdbNormalCustomRedirects: [], + + libremdbTorRedirectsChecks: [...redirects.libremdb.tor], + libremdbTorCustomRedirects: [], + + libremdbI2pRedirectsChecks: [], + libremdbI2pCustomRedirects: [], + + libremdbLokiRedirectsChecks: [], + libremdbLokiCustomRedirects: [], + }, + () => resolve() + ) + }) + }) } export default { - setRedirects, + setRedirects, - redirect, - reverse, - switchInstance, + redirect, + reverse, + switchInstance, - initDefaults -}; + initDefaults, +} diff --git a/src/assets/javascripts/imgur.js b/src/assets/javascripts/imgur.js index f373276f..9ccd24af 100644 --- a/src/assets/javascripts/imgur.js +++ b/src/assets/javascripts/imgur.js @@ -1,6 +1,6 @@ -window.browser = window.browser || window.chrome; +window.browser = window.browser || window.chrome -import utils from './utils.js' +import utils from "./utils.js" const targets = /^https?:\/{2}([im]\.)?imgur\.(com|io)(\/|$)/ @@ -10,91 +10,95 @@ const protocols = new Array("normal", "tor", "i2p", "loki") let redirects = {} for (let i = 0; i < frontends.length; i++) { - redirects[frontends[i]] = {} - for (let x = 0; x < protocols.length; x++) { - redirects[frontends[i]][protocols[x]] = [] - } + redirects[frontends[i]] = {} + for (let x = 0; x < protocols.length; x++) { + redirects[frontends[i]][protocols[x]] = [] + } } function setRedirects() { - return new Promise(resolve => { - fetch('/instances/data.json').then(response => response.text()).then(async data => { - let dataJson = JSON.parse(data); - redirects.rimgo = dataJson.rimgo; - - rimgoNormalRedirectsChecks = [...redirects.rimgo.normal]; - rimgoTorRedirectsChecks = [...redirects.rimgo.tor]; - rimgoI2pRedirectsChecks = [...redirects.rimgo.i2p]; - - for (const instance of r.cloudflareBlackList) { - const a = rimgoNormalRedirectsChecks.indexOf(instance); - if (a > -1) rimgoNormalRedirectsChecks.splice(a, 1); - - const b = rimgoTorRedirectsChecks.indexOf(instance); - if (b > -1) rimgoTorRedirectsChecks.splice(b, 1); - - const c = rimgoI2pRedirectsChecks.indexOf(instance); - if (c > -1) rimgoI2pRedirectsChecks.splice(c, 1); - } - - browser.storage.local.set({ - imgurRedirects: redirects, - rimgoNormalRedirectsChecks, - rimgoTorRedirectsChecks, - rimgoI2pRedirectsChecks, - }, () => resolve()); - }) - }) + return new Promise(resolve => { + fetch("/instances/data.json") + .then(response => response.text()) + .then(async data => { + let dataJson = JSON.parse(data) + redirects.rimgo = dataJson.rimgo + + rimgoNormalRedirectsChecks = [...redirects.rimgo.normal] + rimgoTorRedirectsChecks = [...redirects.rimgo.tor] + rimgoI2pRedirectsChecks = [...redirects.rimgo.i2p] + + for (const instance of r.cloudflareBlackList) { + const a = rimgoNormalRedirectsChecks.indexOf(instance) + if (a > -1) rimgoNormalRedirectsChecks.splice(a, 1) + + const b = rimgoTorRedirectsChecks.indexOf(instance) + if (b > -1) rimgoTorRedirectsChecks.splice(b, 1) + + const c = rimgoI2pRedirectsChecks.indexOf(instance) + if (c > -1) rimgoI2pRedirectsChecks.splice(c, 1) + } + + browser.storage.local.set( + { + imgurRedirects: redirects, + rimgoNormalRedirectsChecks, + rimgoTorRedirectsChecks, + rimgoI2pRedirectsChecks, + }, + () => resolve() + ) + }) + }) } -let - disableImgur, - imgurRedirects, - protocol, - protocolFallback, - rimgoNormalRedirectsChecks, - rimgoNormalCustomRedirects, - rimgoTorRedirectsChecks, - rimgoTorCustomRedirects, - rimgoI2pRedirectsChecks, - rimgoI2pCustomRedirects, - rimgoLokiCustomRedirects; +let disableImgur, + imgurRedirects, + protocol, + protocolFallback, + rimgoNormalRedirectsChecks, + rimgoNormalCustomRedirects, + rimgoTorRedirectsChecks, + rimgoTorCustomRedirects, + rimgoI2pRedirectsChecks, + rimgoI2pCustomRedirects, + rimgoLokiCustomRedirects function init() { - return new Promise(async resolve => { - browser.storage.local.get( - [ - "disableImgur", - "imgurRedirects", - "protocol", - "protocolFallback", - "rimgoNormalRedirectsChecks", - "rimgoNormalCustomRedirects", - "rimgoTorRedirectsChecks", - "rimgoTorCustomRedirects", - "rimgoI2pRedirectsChecks", - "rimgoI2pCustomRedirects", - "rimgoLokiCustomRedirects" - ], - r => { - disableImgur = r.disableImgur; - imgurRedirects = r.imgurRedirects; - protocol = r.protocol; - protocolFallback = r.protocolFallback; - rimgoNormalRedirectsChecks = r.rimgoNormalRedirectsChecks; - rimgoNormalCustomRedirects = r.rimgoNormalCustomRedirects; - rimgoTorRedirectsChecks = r.rimgoTorRedirectsChecks; - rimgoTorCustomRedirects = r.rimgoTorCustomRedirects; - rimgoI2pRedirectsChecks = r.rimgoI2pRedirectsChecks; - rimgoI2pCustomRedirects = r.rimgoI2pCustomRedirects; - rimgoLokiCustomRedirects = r.rimgoLokiCustomRedirects; - resolve(); - } - ) - }) + return new Promise(async resolve => { + browser.storage.local.get( + [ + "disableImgur", + "imgurRedirects", + "protocol", + "protocolFallback", + "rimgoNormalRedirectsChecks", + "rimgoNormalCustomRedirects", + "rimgoTorRedirectsChecks", + "rimgoTorCustomRedirects", + "rimgoI2pRedirectsChecks", + "rimgoI2pCustomRedirects", + "rimgoLokiCustomRedirects", + ], + r => { + disableImgur = r.disableImgur + imgurRedirects = r.imgurRedirects + protocol = r.protocol + protocolFallback = r.protocolFallback + rimgoNormalRedirectsChecks = r.rimgoNormalRedirectsChecks + rimgoNormalCustomRedirects = r.rimgoNormalCustomRedirects + rimgoTorRedirectsChecks = r.rimgoTorRedirectsChecks + rimgoTorCustomRedirects = r.rimgoTorCustomRedirects + rimgoI2pRedirectsChecks = r.rimgoI2pRedirectsChecks + rimgoI2pCustomRedirects = r.rimgoI2pCustomRedirects + rimgoLokiCustomRedirects = r.rimgoLokiCustomRedirects + resolve() + } + ) + }) } -init(); +init() browser.storage.onChanged.addListener(init) // https://imgur.com/gallery/s4WXQmn @@ -104,108 +108,127 @@ browser.storage.onChanged.addListener(init) // https://i.imgur.com/CFSQArP.jpeg function all() { - return [ - ...imgurRedirects.rimgo.normal, - ...imgurRedirects.rimgo.tor, - ...imgurRedirects.rimgo.i2p, - ...rimgoNormalCustomRedirects, - ...rimgoTorCustomRedirects, - ...rimgoI2pCustomRedirects, - ...rimgoLokiCustomRedirects - ]; + return [ + ...imgurRedirects.rimgo.normal, + ...imgurRedirects.rimgo.tor, + ...imgurRedirects.rimgo.i2p, + ...rimgoNormalCustomRedirects, + ...rimgoTorCustomRedirects, + ...rimgoI2pCustomRedirects, + ...rimgoLokiCustomRedirects, + ] } function redirect(url, type, initiator, disableOverride) { - if (disableImgur && !disableOverride) return; - if (url.pathname == "/" && !disableOverride) return; - if (!["main_frame", "sub_frame", "xmlhttprequest", "other", "image", "media",].includes(type)) return; - if (initiator && (all().includes(initiator.origin) || targets.test(initiator.host))) return; - if (!targets.test(url.href)) return; - if (url.pathname.includes("delete/")) return; - - let instancesList = []; - if (protocol == 'loki') instancesList = [...rimgoLokiCustomRedirects]; - else if (protocol == 'i2p') instancesList = [...rimgoI2pCustomRedirects, ...rimgoI2pRedirectsChecks]; - else if (protocol == 'tor') instancesList = [...rimgoTorRedirectsChecks, ...rimgoTorCustomRedirects]; - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - instancesList = [...rimgoNormalRedirectsChecks, ...rimgoNormalCustomRedirects]; - } - if (instancesList.length === 0) { return; } - - const randomInstance = utils.getRandomInstance(instancesList); - return `${randomInstance}${url.pathname}${url.search}`; + if (disableImgur && !disableOverride) return + if (url.pathname == "/" && !disableOverride) return + if (!["main_frame", "sub_frame", "xmlhttprequest", "other", "image", "media"].includes(type)) return + if (initiator && (all().includes(initiator.origin) || targets.test(initiator.host))) return + if (!targets.test(url.href)) return + if (url.pathname.includes("delete/")) return + + let instancesList = [] + if (protocol == "loki") instancesList = [...rimgoLokiCustomRedirects] + else if (protocol == "i2p") instancesList = [...rimgoI2pCustomRedirects, ...rimgoI2pRedirectsChecks] + else if (protocol == "tor") instancesList = [...rimgoTorRedirectsChecks, ...rimgoTorCustomRedirects] + if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { + instancesList = [...rimgoNormalRedirectsChecks, ...rimgoNormalCustomRedirects] + } + if (instancesList.length === 0) { + return + } + + const randomInstance = utils.getRandomInstance(instancesList) + return `${randomInstance}${url.pathname}${url.search}` } function reverse(url) { - return new Promise(async resolve => { - await init(); - const protocolHost = utils.protocolHost(url); - if (!all().includes(protocolHost)) { resolve(); return; } - resolve(`https://imgur.com${url.pathname}${url.search}`); - }) + return new Promise(async resolve => { + await init() + const protocolHost = utils.protocolHost(url) + if (!all().includes(protocolHost)) { + resolve() + return + } + resolve(`https://imgur.com${url.pathname}${url.search}`) + }) } function switchInstance(url, disableOverride) { - return new Promise(async resolve => { - await init(); - if (disableImgur && !disableOverride) { resolve(); return; } - let protocolHost = utils.protocolHost(url); - if (!all().includes(protocolHost)) { resolve(); return; } - let instancesList = []; - if (protocol == 'loki') instancesList = [...rimgoLokiCustomRedirects]; - else if (protocol == 'i2p') instancesList = [...rimgoI2pCustomRedirects, ...rimgoI2pRedirectsChecks]; - else if (protocol == 'tor') instancesList = [...rimgoTorRedirectsChecks, ...rimgoTorCustomRedirects]; - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - instancesList = [...rimgoNormalRedirectsChecks, ...rimgoNormalCustomRedirects]; - } - - const i = instancesList.indexOf(protocolHost); - if (i > -1) instancesList.splice(i, 1); - if (instancesList.length === 0) { resolve(); return; } - - const randomInstance = utils.getRandomInstance(instancesList); - resolve(`${randomInstance}${url.pathname}${url.search}`); - }) + return new Promise(async resolve => { + await init() + if (disableImgur && !disableOverride) { + resolve() + return + } + let protocolHost = utils.protocolHost(url) + if (!all().includes(protocolHost)) { + resolve() + return + } + let instancesList = [] + if (protocol == "loki") instancesList = [...rimgoLokiCustomRedirects] + else if (protocol == "i2p") instancesList = [...rimgoI2pCustomRedirects, ...rimgoI2pRedirectsChecks] + else if (protocol == "tor") instancesList = [...rimgoTorRedirectsChecks, ...rimgoTorCustomRedirects] + if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { + instancesList = [...rimgoNormalRedirectsChecks, ...rimgoNormalCustomRedirects] + } + + const i = instancesList.indexOf(protocolHost) + if (i > -1) instancesList.splice(i, 1) + if (instancesList.length === 0) { + resolve() + return + } + + const randomInstance = utils.getRandomInstance(instancesList) + resolve(`${randomInstance}${url.pathname}${url.search}`) + }) } function initDefaults() { - return new Promise(resolve => { - fetch('/instances/data.json').then(response => response.text()).then(async data => { - let dataJson = JSON.parse(data); - for (let i = 0; i < frontends.length; i++) { - redirects[frontends[i]] = dataJson[frontends[i]] - } - browser.storage.local.get('cloudflareBlackList', async r => { - rimgoNormalRedirectsChecks = [...redirects.rimgo.normal]; - for (const instance of r.cloudflareBlackList) { - const i = rimgoNormalRedirectsChecks.indexOf(instance); - if (i > -1) rimgoNormalRedirectsChecks.splice(i, 1); - } - browser.storage.local.set({ - disableImgur: false, - imgurRedirects: redirects, - - rimgoNormalRedirectsChecks: rimgoNormalRedirectsChecks, - rimgoNormalCustomRedirects: [], - - rimgoTorRedirectsChecks: [...redirects.rimgo.tor], - rimgoTorCustomRedirects: [], - - rimgoI2pRedirectsChecks: [...redirects.rimgo.i2p], - rimgoI2pCustomRedirects: [], - - rimgoLokiRedirectsChecks: [...redirects.rimgo.loki], - rimgoLokiCustomRedirects: [] - }, () => resolve()); - }); - }); - }); + return new Promise(resolve => { + fetch("/instances/data.json") + .then(response => response.text()) + .then(async data => { + let dataJson = JSON.parse(data) + for (let i = 0; i < frontends.length; i++) { + redirects[frontends[i]] = dataJson[frontends[i]] + } + browser.storage.local.get("cloudflareBlackList", async r => { + rimgoNormalRedirectsChecks = [...redirects.rimgo.normal] + for (const instance of r.cloudflareBlackList) { + const i = rimgoNormalRedirectsChecks.indexOf(instance) + if (i > -1) rimgoNormalRedirectsChecks.splice(i, 1) + } + browser.storage.local.set( + { + disableImgur: false, + imgurRedirects: redirects, + + rimgoNormalRedirectsChecks: rimgoNormalRedirectsChecks, + rimgoNormalCustomRedirects: [], + + rimgoTorRedirectsChecks: [...redirects.rimgo.tor], + rimgoTorCustomRedirects: [], + + rimgoI2pRedirectsChecks: [...redirects.rimgo.i2p], + rimgoI2pCustomRedirects: [], + + rimgoLokiRedirectsChecks: [...redirects.rimgo.loki], + rimgoLokiCustomRedirects: [], + }, + () => resolve() + ) + }) + }) + }) } export default { - setRedirects, - redirect, - reverse, - initDefaults, - switchInstance, -}; + setRedirects, + redirect, + reverse, + initDefaults, + switchInstance, +} diff --git a/src/assets/javascripts/instagram.js b/src/assets/javascripts/instagram.js index 182ff4d9..2e4503e7 100644 --- a/src/assets/javascripts/instagram.js +++ b/src/assets/javascripts/instagram.js @@ -1,200 +1,208 @@ -window.browser = window.browser || window.chrome; -import utils from './utils.js' +window.browser = window.browser || window.chrome +import utils from "./utils.js" -const targets = [ - "instagram.com", - "www.instagram.com", -]; +const targets = ["instagram.com", "www.instagram.com"] const frontends = new Array("bibliogram") const protocols = new Array("normal", "tor", "i2p", "loki") -let redirects = {}; +let redirects = {} for (let i = 0; i < frontends.length; i++) { - redirects[frontends[i]] = {} - for (let x = 0; x < protocols.length; x++) { - redirects[frontends[i]][protocols[x]] = [] - } + redirects[frontends[i]] = {} + for (let x = 0; x < protocols.length; x++) { + redirects[frontends[i]][protocols[x]] = [] + } } function setRedirects(val) { - browser.storage.local.get('cloudflareBlackList', async r => { - redirects.bibliogram = val; - bibliogramNormalRedirectsChecks = [...redirects.bibliogram.normal]; - for (const instance of r.cloudflareBlackList) { - const a = bibliogramNormalRedirectsChecks.indexOf(instance); - if (a > -1) bibliogramNormalRedirectsChecks.splice(a, 1); - } - browser.storage.local.set({ - instagramRedirects: redirects, - bibliogramNormalRedirectsChecks - }) - }) + browser.storage.local.get("cloudflareBlackList", async r => { + redirects.bibliogram = val + bibliogramNormalRedirectsChecks = [...redirects.bibliogram.normal] + for (const instance of r.cloudflareBlackList) { + const a = bibliogramNormalRedirectsChecks.indexOf(instance) + if (a > -1) bibliogramNormalRedirectsChecks.splice(a, 1) + } + browser.storage.local.set({ + instagramRedirects: redirects, + bibliogramNormalRedirectsChecks, + }) + }) } -let - disableInstagram, - protocol, - protocolFallback, - instagramRedirects, - bibliogramNormalRedirectsChecks, - bibliogramTorRedirectsChecks, - bibliogramNormalCustomRedirects, - bibliogramTorCustomRedirects, - bibliogramI2pCustomRedirects, - bibliogramLokiCustomRedirects; +let disableInstagram, + protocol, + protocolFallback, + instagramRedirects, + bibliogramNormalRedirectsChecks, + bibliogramTorRedirectsChecks, + bibliogramNormalCustomRedirects, + bibliogramTorCustomRedirects, + bibliogramI2pCustomRedirects, + bibliogramLokiCustomRedirects function init() { - return new Promise(async resolve => { - browser.storage.local.get( - [ - "disableInstagram", - "protocol", - "protocolFallback", - "instagramRedirects", - "bibliogramNormalRedirectsChecks", - "bibliogramTorRedirectsChecks", - "bibliogramNormalCustomRedirects", - "bibliogramTorCustomRedirects", - "bibliogramI2pCustomRedirects", - "bibliogramLokiCustomRedirects" - ], - r => { - disableInstagram = r.disableInstagram; - protocol = r.protocol; - protocolFallback = r.protocolFallback; - instagramRedirects = r.instagramRedirects; - bibliogramNormalRedirectsChecks = r.bibliogramNormalRedirectsChecks; - bibliogramTorRedirectsChecks = r.bibliogramTorRedirectsChecks; - bibliogramNormalCustomRedirects = r.bibliogramNormalCustomRedirects; - bibliogramTorCustomRedirects = r.bibliogramTorCustomRedirects; - bibliogramI2pCustomRedirects = r.bibliogramI2pCustomRedirects; - bibliogramLokiCustomRedirects = r.bibliogramLokiCustomRedirects - resolve(); - } - ) - }) + return new Promise(async resolve => { + browser.storage.local.get( + [ + "disableInstagram", + "protocol", + "protocolFallback", + "instagramRedirects", + "bibliogramNormalRedirectsChecks", + "bibliogramTorRedirectsChecks", + "bibliogramNormalCustomRedirects", + "bibliogramTorCustomRedirects", + "bibliogramI2pCustomRedirects", + "bibliogramLokiCustomRedirects", + ], + r => { + disableInstagram = r.disableInstagram + protocol = r.protocol + protocolFallback = r.protocolFallback + instagramRedirects = r.instagramRedirects + bibliogramNormalRedirectsChecks = r.bibliogramNormalRedirectsChecks + bibliogramTorRedirectsChecks = r.bibliogramTorRedirectsChecks + bibliogramNormalCustomRedirects = r.bibliogramNormalCustomRedirects + bibliogramTorCustomRedirects = r.bibliogramTorCustomRedirects + bibliogramI2pCustomRedirects = r.bibliogramI2pCustomRedirects + bibliogramLokiCustomRedirects = r.bibliogramLokiCustomRedirects + resolve() + } + ) + }) } -init(); +init() browser.storage.onChanged.addListener(init) function all() { - return [ - ...instagramRedirects.bibliogram.normal, - ...instagramRedirects.bibliogram.tor, - ...bibliogramNormalCustomRedirects, - ...bibliogramTorCustomRedirects, - ...bibliogramI2pCustomRedirects, - ...bibliogramLokiCustomRedirects - ] + return [ + ...instagramRedirects.bibliogram.normal, + ...instagramRedirects.bibliogram.tor, + ...bibliogramNormalCustomRedirects, + ...bibliogramTorCustomRedirects, + ...bibliogramI2pCustomRedirects, + ...bibliogramLokiCustomRedirects, + ] } function redirect(url, type, initiator, disableOverride) { - if (disableInstagram && !disableOverride) return; - if (initiator && all().includes(initiator.origin)) return 'BYPASSTAB'; - if (!targets.includes(url.host)) return; - if (!["main_frame", "sub_frame", "xmlhttprequest", "other", "image", "media"].includes(type)) return; - - const bypassPaths = [/about/, /explore/, /support/, /press/, /api/, /privacy/, /safety/, /admin/, /\/(accounts\/|embeds?.js)/]; - if (bypassPaths.some(rx => rx.test(url.pathname))) return; - - let instancesList = []; - if (protocol == 'loki') instancesList = [...bibliogramLokiCustomRedirects]; - else if (protocol == 'i2p') instancesList = [...bibliogramI2pCustomRedirects]; - else if (protocol == 'tor') instancesList = [...bibliogramTorRedirectsChecks, ...bibliogramTorCustomRedirects]; - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - instancesList = [...bibliogramNormalRedirectsChecks, ...bibliogramNormalCustomRedirects]; - } - if (instancesList.length === 0) { return; } - let randomInstance = utils.getRandomInstance(instancesList) - - const reservedPaths = ["u", "p", "privacy",]; - if (url.pathname === "/" || reservedPaths.includes(url.pathname.split("/")[1])) - return `${randomInstance}${url.pathname}${url.search}`; - if (url.pathname.startsWith("/reel") || url.pathname.startsWith("/tv")) - return `${randomInstance}/p${url.pathname.replace(/\/reel|\/tv/i, '')}${url.search}`; - else - return `${randomInstance}/u${url.pathname}${url.search}`; // Likely a user profile, redirect to '/u/...' + if (disableInstagram && !disableOverride) return + if (initiator && all().includes(initiator.origin)) return "BYPASSTAB" + if (!targets.includes(url.host)) return + if (!["main_frame", "sub_frame", "xmlhttprequest", "other", "image", "media"].includes(type)) return + + const bypassPaths = [/about/, /explore/, /support/, /press/, /api/, /privacy/, /safety/, /admin/, /\/(accounts\/|embeds?.js)/] + if (bypassPaths.some(rx => rx.test(url.pathname))) return + + let instancesList = [] + if (protocol == "loki") instancesList = [...bibliogramLokiCustomRedirects] + else if (protocol == "i2p") instancesList = [...bibliogramI2pCustomRedirects] + else if (protocol == "tor") instancesList = [...bibliogramTorRedirectsChecks, ...bibliogramTorCustomRedirects] + if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { + instancesList = [...bibliogramNormalRedirectsChecks, ...bibliogramNormalCustomRedirects] + } + if (instancesList.length === 0) { + return + } + let randomInstance = utils.getRandomInstance(instancesList) + + const reservedPaths = ["u", "p", "privacy"] + if (url.pathname === "/" || reservedPaths.includes(url.pathname.split("/")[1])) return `${randomInstance}${url.pathname}${url.search}` + if (url.pathname.startsWith("/reel") || url.pathname.startsWith("/tv")) return `${randomInstance}/p${url.pathname.replace(/\/reel|\/tv/i, "")}${url.search}` + else return `${randomInstance}/u${url.pathname}${url.search}` // Likely a user profile, redirect to '/u/...' } function reverse(url) { - return new Promise(async resolve => { - await init(); - const protocolHost = utils.protocolHost(url); - if (!all().includes(protocolHost)) { resolve(); return; } - - if (url.pathname.startsWith('/p')) resolve(`https://instagram.com${url.pathname.replace('/p', '')}${url.search}`); - if (url.pathname.startsWith('/u')) resolve(`https://instagram.com${url.pathname.replace('/u', '')}${url.search}`); - resolve(`https://instagram.com${url.pathname}${url.search}`); - }) + return new Promise(async resolve => { + await init() + const protocolHost = utils.protocolHost(url) + if (!all().includes(protocolHost)) { + resolve() + return + } + + if (url.pathname.startsWith("/p")) resolve(`https://instagram.com${url.pathname.replace("/p", "")}${url.search}`) + if (url.pathname.startsWith("/u")) resolve(`https://instagram.com${url.pathname.replace("/u", "")}${url.search}`) + resolve(`https://instagram.com${url.pathname}${url.search}`) + }) } function switchInstance(url, disableOverride) { - return new Promise(async resolve => { - await init(); - if (disableInstagram && !disableOverride) { resolve(); return; } - let protocolHost = utils.protocolHost(url); - if (!all().includes(protocolHost)) { resolve(); return; } - - let instancesList = []; - if (protocol == 'loki') instancesList = [...bibliogramLokiCustomRedirects]; - else if (protocol == 'i2p') instancesList = [...bibliogramI2pCustomRedirects]; - else if (protocol == 'tor') instancesList = [...bibliogramTorRedirectsChecks, ...bibliogramTorCustomRedirects]; - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - instancesList = [...bibliogramNormalRedirectsChecks, ...bibliogramNormalCustomRedirects]; - } - - const i = instancesList.indexOf(protocolHost); - if (i > -1) instancesList.splice(i, 1); - if (instancesList.length === 0) { resolve(); return; } - - const randomInstance = utils.getRandomInstance(instancesList); - resolve(`${randomInstance}${url.pathname}${url.search}`); - }) + return new Promise(async resolve => { + await init() + if (disableInstagram && !disableOverride) { + resolve() + return + } + let protocolHost = utils.protocolHost(url) + if (!all().includes(protocolHost)) { + resolve() + return + } + + let instancesList = [] + if (protocol == "loki") instancesList = [...bibliogramLokiCustomRedirects] + else if (protocol == "i2p") instancesList = [...bibliogramI2pCustomRedirects] + else if (protocol == "tor") instancesList = [...bibliogramTorRedirectsChecks, ...bibliogramTorCustomRedirects] + if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { + instancesList = [...bibliogramNormalRedirectsChecks, ...bibliogramNormalCustomRedirects] + } + + const i = instancesList.indexOf(protocolHost) + if (i > -1) instancesList.splice(i, 1) + if (instancesList.length === 0) { + resolve() + return + } + + const randomInstance = utils.getRandomInstance(instancesList) + resolve(`${randomInstance}${url.pathname}${url.search}`) + }) } function initDefaults() { - return new Promise(resolve => { - fetch('/instances/data.json').then(response => response.text()).then(data => { - let dataJson = JSON.parse(data); - for (let i = 0; i < frontends.length; i++) { - redirects[frontends[i]] = dataJson[frontends[i]] - } - browser.storage.local.get('cloudflareBlackList', r => { - bibliogramNormalRedirectsChecks = [...redirects.bibliogram.normal]; - for (const instance of r.cloudflareBlackList) { - const i = bibliogramNormalRedirectsChecks.indexOf(instance); - if (i > -1) bibliogramNormalRedirectsChecks.splice(i, 1); - } - browser.storage.local.set({ - disableInstagram: false, - instagramRedirects: redirects, - - bibliogramNormalRedirectsChecks: bibliogramNormalRedirectsChecks, - bibliogramNormalCustomRedirects: [], - - bibliogramTorRedirectsChecks: [...redirects.bibliogram.tor], - bibliogramTorCustomRedirects: [], - - bibliogramI2pRedirectsChecks: [...redirects.bibliogram.i2p], - bibliogramI2pCustomRedirects: [], - - bibliogramLokiRedirectsChecks: [...redirects.bibliogram.loki], - bibliogramLokiCustomRedirects: [] - }) - resolve(); - } - ) - }) - }) + return new Promise(resolve => { + fetch("/instances/data.json") + .then(response => response.text()) + .then(data => { + let dataJson = JSON.parse(data) + for (let i = 0; i < frontends.length; i++) { + redirects[frontends[i]] = dataJson[frontends[i]] + } + browser.storage.local.get("cloudflareBlackList", r => { + bibliogramNormalRedirectsChecks = [...redirects.bibliogram.normal] + for (const instance of r.cloudflareBlackList) { + const i = bibliogramNormalRedirectsChecks.indexOf(instance) + if (i > -1) bibliogramNormalRedirectsChecks.splice(i, 1) + } + browser.storage.local.set({ + disableInstagram: false, + instagramRedirects: redirects, + + bibliogramNormalRedirectsChecks: bibliogramNormalRedirectsChecks, + bibliogramNormalCustomRedirects: [], + + bibliogramTorRedirectsChecks: [...redirects.bibliogram.tor], + bibliogramTorCustomRedirects: [], + + bibliogramI2pRedirectsChecks: [...redirects.bibliogram.i2p], + bibliogramI2pCustomRedirects: [], + + bibliogramLokiRedirectsChecks: [...redirects.bibliogram.loki], + bibliogramLokiCustomRedirects: [], + }) + resolve() + }) + }) + }) } export default { - setRedirects, - reverse, - redirect, - initDefaults, - switchInstance, -}; + setRedirects, + reverse, + redirect, + initDefaults, + switchInstance, +} diff --git a/src/assets/javascripts/lbry.js b/src/assets/javascripts/lbry.js index cfdf1bb0..7f39b734 100644 --- a/src/assets/javascripts/lbry.js +++ b/src/assets/javascripts/lbry.js @@ -1,8 +1,8 @@ -window.browser = window.browser || window.chrome; +window.browser = window.browser || window.chrome -import utils from './utils.js' +import utils from "./utils.js" -let targets = ["odysee.com"]; +let targets = ["odysee.com"] const frontends = new Array("librarian") const protocols = new Array("normal", "tor", "i2p", "loki") @@ -10,160 +10,166 @@ const protocols = new Array("normal", "tor", "i2p", "loki") let redirects = {} for (let i = 0; i < frontends.length; i++) { - redirects[frontends[i]] = {} - for (let x = 0; x < protocols.length; x++) { - redirects[frontends[i]][protocols[x]] = [] - } + redirects[frontends[i]] = {} + for (let x = 0; x < protocols.length; x++) { + redirects[frontends[i]][protocols[x]] = [] + } } function setRedirects(val) { - browser.storage.local.get('cloudflareBlackList', r => { - redirects.librarian = val; - librarianNormalRedirectsChecks = [...redirects.librarian.normal]; - for (const instance of r.cloudflareBlackList) { - const a = librarianNormalRedirectsChecks.indexOf(instance); - if (a > -1) librarianNormalRedirectsChecks.splice(a, 1); - } - browser.storage.local.set({ - lbryTargetsRedirects: redirects, - librarianNormalRedirectsChecks - }) - }) + browser.storage.local.get("cloudflareBlackList", r => { + redirects.librarian = val + librarianNormalRedirectsChecks = [...redirects.librarian.normal] + for (const instance of r.cloudflareBlackList) { + const a = librarianNormalRedirectsChecks.indexOf(instance) + if (a > -1) librarianNormalRedirectsChecks.splice(a, 1) + } + browser.storage.local.set({ + lbryTargetsRedirects: redirects, + librarianNormalRedirectsChecks, + }) + }) } -let - disableLbryTargets, - protocol, - protocolFallback, - lbryTargetsRedirects, - librarianNormalRedirectsChecks, - librarianNormalCustomRedirects, - librarianTorRedirectsChecks, - librarianTorCustomRedirects, - librarianI2pRedirectsChecks, - librarianI2pCustomRedirects, - librarianLokiCustomRedirects; +let disableLbryTargets, + protocol, + protocolFallback, + lbryTargetsRedirects, + librarianNormalRedirectsChecks, + librarianNormalCustomRedirects, + librarianTorRedirectsChecks, + librarianTorCustomRedirects, + librarianI2pRedirectsChecks, + librarianI2pCustomRedirects, + librarianLokiCustomRedirects function init() { - return new Promise(resolve => { - browser.storage.local.get( - [ - "disableLbryTargets", - "protocol", - "protocolFallback", - "lbryTargetsRedirects", - "librarianNormalRedirectsChecks", - "librarianNormalCustomRedirects", - "librarianTorRedirectsChecks", - "librarianTorCustomRedirects", - "librarianI2pRedirectsChecks", - "librarianI2pCustomRedirects", - "librarianLokiCustomRedirects" - ], - r => { - disableLbryTargets = r.disableLbryTargets; - protocol = r.protocol; - protocolFallback = r.protocolFallback; - lbryTargetsRedirects = r.lbryTargetsRedirects; - librarianNormalRedirectsChecks = r.librarianNormalRedirectsChecks; - librarianNormalCustomRedirects = r.librarianNormalCustomRedirects; - librarianTorRedirectsChecks = r.librarianTorRedirectsChecks; - librarianTorCustomRedirects = r.librarianTorCustomRedirects; - librarianI2pRedirectsChecks = r.librarianI2pRedirectsChecks; - librarianI2pCustomRedirects = r.librarianI2pCustomRedirects; - librarianLokiCustomRedirects = r.librarianLokiCustomRedirects; - resolve(); - } - ) - }) + return new Promise(resolve => { + browser.storage.local.get( + [ + "disableLbryTargets", + "protocol", + "protocolFallback", + "lbryTargetsRedirects", + "librarianNormalRedirectsChecks", + "librarianNormalCustomRedirects", + "librarianTorRedirectsChecks", + "librarianTorCustomRedirects", + "librarianI2pRedirectsChecks", + "librarianI2pCustomRedirects", + "librarianLokiCustomRedirects", + ], + r => { + disableLbryTargets = r.disableLbryTargets + protocol = r.protocol + protocolFallback = r.protocolFallback + lbryTargetsRedirects = r.lbryTargetsRedirects + librarianNormalRedirectsChecks = r.librarianNormalRedirectsChecks + librarianNormalCustomRedirects = r.librarianNormalCustomRedirects + librarianTorRedirectsChecks = r.librarianTorRedirectsChecks + librarianTorCustomRedirects = r.librarianTorCustomRedirects + librarianI2pRedirectsChecks = r.librarianI2pRedirectsChecks + librarianI2pCustomRedirects = r.librarianI2pCustomRedirects + librarianLokiCustomRedirects = r.librarianLokiCustomRedirects + resolve() + } + ) + }) } -init(); +init() browser.storage.onChanged.addListener(init) function all() { - return [ - ...redirects.librarian.normal, - ...redirects.librarian.tor, - ...librarianNormalCustomRedirects, - ...librarianTorCustomRedirects, - ...librarianI2pCustomRedirects, - ...librarianLokiCustomRedirects - ]; + return [...redirects.librarian.normal, ...redirects.librarian.tor, ...librarianNormalCustomRedirects, ...librarianTorCustomRedirects, ...librarianI2pCustomRedirects, ...librarianLokiCustomRedirects] } function switchInstance(url, disableOverride) { - return new Promise(async resolve => { - await init(); - if (disableLbryTargets && !disableOverride) { resolve(); return; } - const protocolHost = utils.protocolHost(url); - if (!all().includes(protocolHost)) { resolve(); return; } - - let instancesList = []; - if (protocol == 'loki') instancesList = [...librarianLokiCustomRedirects]; - else if (protocol == 'i2p') instancesList = [...librarianI2pCustomRedirects]; - else if (protocol == 'tor') instancesList = [...librarianTorRedirectsChecks, ...librarianTorCustomRedirects]; - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - instancesList = [...librarianNormalRedirectsChecks, ...librarianNormalCustomRedirects]; - } - - const i = instancesList.indexOf(protocolHost); - if (i > -1) instancesList.splice(i, 1); - if (instancesList.length === 0) { resolve(); return; } - - const randomInstance = utils.getRandomInstance(instancesList); - resolve(`${randomInstance}${url.pathname}${url.search}`); - }) + return new Promise(async resolve => { + await init() + if (disableLbryTargets && !disableOverride) { + resolve() + return + } + const protocolHost = utils.protocolHost(url) + if (!all().includes(protocolHost)) { + resolve() + return + } + + let instancesList = [] + if (protocol == "loki") instancesList = [...librarianLokiCustomRedirects] + else if (protocol == "i2p") instancesList = [...librarianI2pCustomRedirects] + else if (protocol == "tor") instancesList = [...librarianTorRedirectsChecks, ...librarianTorCustomRedirects] + if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { + instancesList = [...librarianNormalRedirectsChecks, ...librarianNormalCustomRedirects] + } + + const i = instancesList.indexOf(protocolHost) + if (i > -1) instancesList.splice(i, 1) + if (instancesList.length === 0) { + resolve() + return + } + + const randomInstance = utils.getRandomInstance(instancesList) + resolve(`${randomInstance}${url.pathname}${url.search}`) + }) } function redirect(url, type, initiator, disableOverride) { - if (disableLbryTargets && !disableOverride) return; - if (initiator && (all().includes(initiator.origin) || targets.includes(initiator.host))) return; - if (!targets.includes(url.host)) return; - if (type != "main_frame") return; - - let instancesList = []; - if (protocol == 'loki') instancesList = [...librarianLokiCustomRedirects]; - else if (protocol == 'i2p') instancesList = [...librarianI2pCustomRedirects]; - else if (protocol == 'tor') instancesList = [...librarianTorRedirectsChecks, ...librarianTorCustomRedirects]; - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - instancesList = [...librarianNormalRedirectsChecks, ...librarianNormalCustomRedirects]; - } - if (instancesList.length === 0) return; - - const randomInstance = utils.getRandomInstance(instancesList); - return `${randomInstance}${url.pathname}${url.search}`; + if (disableLbryTargets && !disableOverride) return + if (initiator && (all().includes(initiator.origin) || targets.includes(initiator.host))) return + if (!targets.includes(url.host)) return + if (type != "main_frame") return + + let instancesList = [] + if (protocol == "loki") instancesList = [...librarianLokiCustomRedirects] + else if (protocol == "i2p") instancesList = [...librarianI2pCustomRedirects] + else if (protocol == "tor") instancesList = [...librarianTorRedirectsChecks, ...librarianTorCustomRedirects] + if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { + instancesList = [...librarianNormalRedirectsChecks, ...librarianNormalCustomRedirects] + } + if (instancesList.length === 0) return + + const randomInstance = utils.getRandomInstance(instancesList) + return `${randomInstance}${url.pathname}${url.search}` } function initDefaults() { - return new Promise(async resolve => { - fetch('/instances/data.json').then(response => response.text()).then(async data => { - let dataJson = JSON.parse(data); - for (let i = 0; i < frontends.length; i++) { - redirects[frontends[i]] = dataJson[frontends[i]] - } - browser.storage.local.set({ - disableLbryTargets: true, - lbryTargetsRedirects: redirects, - - librarianNormalRedirectsChecks: [...redirects.librarian.normal], - librarianNormalCustomRedirects: [], - - librarianTorRedirectsChecks: [...redirects.librarian.tor], - librarianTorCustomRedirects: [], - - librarianI2pRedirectsChecks: [...redirects.librarian.i2p], - librarianI2pCustomRedirects: [], - - librarianLokiRedirectsChecks: [...redirects.librarian.loki], - librarianLokiCustomRedirects: [] - }, () => resolve()); - }); - }) + return new Promise(async resolve => { + fetch("/instances/data.json") + .then(response => response.text()) + .then(async data => { + let dataJson = JSON.parse(data) + for (let i = 0; i < frontends.length; i++) { + redirects[frontends[i]] = dataJson[frontends[i]] + } + browser.storage.local.set( + { + disableLbryTargets: true, + lbryTargetsRedirects: redirects, + + librarianNormalRedirectsChecks: [...redirects.librarian.normal], + librarianNormalCustomRedirects: [], + + librarianTorRedirectsChecks: [...redirects.librarian.tor], + librarianTorCustomRedirects: [], + + librarianI2pRedirectsChecks: [...redirects.librarian.i2p], + librarianI2pCustomRedirects: [], + + librarianLokiRedirectsChecks: [...redirects.librarian.loki], + librarianLokiCustomRedirects: [], + }, + () => resolve() + ) + }) + }) } export default { - setRedirects, - switchInstance, - redirect, - initDefaults, -}; + setRedirects, + switchInstance, + redirect, + initDefaults, +} diff --git a/src/assets/javascripts/localise.js b/src/assets/javascripts/localise.js index a4bbca92..34ccd66b 100644 --- a/src/assets/javascripts/localise.js +++ b/src/assets/javascripts/localise.js @@ -1,31 +1,31 @@ -window.browser = window.browser || window.chrome; +window.browser = window.browser || window.chrome function localisePage() { - function getMessage(tag) { - return tag.replace(/__MSG_(\w+)__/g, (_match, v1) => { - return v1 ? browser.i18n.getMessage(v1) : null; - }); - } + function getMessage(tag) { + return tag.replace(/__MSG_(\w+)__/g, (_match, v1) => { + return v1 ? browser.i18n.getMessage(v1) : null + }) + } - const elements = document.querySelectorAll("[data-localise]"); - for (let i in elements) - if (elements.hasOwnProperty(i)) { - const obj = elements[i]; - const tag = obj.getAttribute("data-localise").toString(); - const msg = getMessage(tag); - if (msg && msg !== tag) obj.textContent = msg; - } + const elements = document.querySelectorAll("[data-localise]") + for (let i in elements) + if (elements.hasOwnProperty(i)) { + const obj = elements[i] + const tag = obj.getAttribute("data-localise").toString() + const msg = getMessage(tag) + if (msg && msg !== tag) obj.textContent = msg + } - const placeholders = document.querySelectorAll("[data-localise-placeholder]"); - for (let i in placeholders) - if (placeholders.hasOwnProperty(i)) { - const obj = placeholders[i]; - const tag = obj.getAttribute("data-localise-placeholder").toString(); - const msg = getMessage(tag); - if (msg && msg !== tag) obj.placeholder = msg; - } + const placeholders = document.querySelectorAll("[data-localise-placeholder]") + for (let i in placeholders) + if (placeholders.hasOwnProperty(i)) { + const obj = placeholders[i] + const tag = obj.getAttribute("data-localise-placeholder").toString() + const msg = getMessage(tag) + if (msg && msg !== tag) obj.placeholder = msg + } } export default { - localisePage + localisePage, } diff --git a/src/assets/javascripts/maps.js b/src/assets/javascripts/maps.js index fd65b1c5..9fb10b9d 100644 --- a/src/assets/javascripts/maps.js +++ b/src/assets/javascripts/maps.js @@ -1,247 +1,294 @@ -"use strict"; - -window.browser = window.browser || window.chrome; -import utils from './utils.js' - -const targets = /^https?:\/{2}(((www|maps)\.)?(google\.).*(\/maps)|maps\.(google\.).*)/; - -let redirects = { - 'osm': { - "normal": [ - "https://www.openstreetmap.org" - ] - }, - 'facil': { - "normal": [ - "https://facilmap.org" - ], - "tor": [], - "i2p": [], - "loki": [] - } -}; - - -let - disableMaps, - mapsFrontend, - protocol, - protocolFallback, - facilNormalRedirectsChecks, - facilNormalCustomRedirects, - facilTorCustomRedirects, - facilI2pCustomRedirects, - facilLokiCustomRedirects; +"use strict" -function init() { - browser.storage.local.get( - [ - "disableMaps", - "mapsFrontend", - "protocol", - "protocolFallback", - "facilNormalRedirectsChecks", - "facilNormalCustomRedirects", - "facilTorCustomRedirects", - "facilI2pCustomRedirects", - "facilLokiCustomRedirects" - ], - r => { - disableMaps = r.disableMaps; - mapsFrontend = r.mapsFrontend; - protocol = r.protocol; - protocolFallback = r.protocolFallback; - facilNormalRedirectsChecks = r.facilNormalRedirectsChecks; - facilNormalCustomRedirects = r.facilNormalCustomRedirects; - facilTorCustomRedirects = r.facilTorCustomRedirects; - facilI2pCustomRedirects = r.facilI2pCustomRedirects; - facilLokiCustomRedirects = r.facilLokiCustomRedirects; - } - ) -} +window.browser = window.browser || window.chrome +import utils from "./utils.js" -init(); -browser.storage.onChanged.addListener(init) +const targets = /^https?:\/{2}(((www|maps)\.)?(google\.).*(\/maps)|maps\.(google\.).*)/ -function redirect(url, initiator) { - if (disableMaps) return; - if (initiator && initiator.host === "earth.google.com") return; - if (!url.href.match(targets)) return; - const mapCentreRegex = /@(-?\d[0-9.]*),(-?\d[0-9.]*),(\d{1,2})[.z]/; - const dataLatLngRegex = /!3d(-?[0-9]{1,}.[0-9]{1,})!4d(-?[0-9]{1,}.[0-9]{1,})/; - const placeRegex = /\/place\/(.*)\//; - const travelModes = { - driving: "fossgis_osrm_car", - walking: "fossgis_osrm_foot", - bicycling: "fossgis_osrm_bike", - transit: "fossgis_osrm_car", // not implemented on OSM, default to car. - }; - const travelModesFacil = { - driving: "car", - walking: "pedestrian", - bicycling: "bicycle", - transit: "car", // not implemented on Facil, default to car. - }; - const osmLayers = { - none: "S", - transit: "T", - traffic: "S", // not implemented on OSM, default to standard. - bicycling: "C", - }; - function addressToLatLng(address) { - const xmlhttp = new XMLHttpRequest(); - xmlhttp.open("GET", `https://nominatim.openstreetmap.org/search/${address}?format=json&limit=1`, false); - xmlhttp.send(); - if (xmlhttp.status === 200) { - const json = JSON.parse(xmlhttp.responseText)[0]; - if (json) { - console.log('json', json) - return [ - `${json.lat},${json.lon}`, - `${json.boundingbox[2]},${json.boundingbox[1]},${json.boundingbox[3]},${json.boundingbox[0]}`, - ]; - } - } - console.info("Error: Status is " + xmlhttp.status); - } - - let randomInstance; - if (mapsFrontend == 'osm') randomInstance = utils.getRandomInstance(redirects.osm.normal); - - if (mapsFrontend == 'facil') { - if (protocol == 'loki') randomInstance = utils.getRandomInstance(...facilLokiCustomRedirects); - else if (protocol == 'i2p') randomInstance = utils.getRandomInstance(...facilI2pCustomRedirects); - else if (protocol == 'tor') randomInstance = utils.getRandomInstance(...facilTorCustomRedirects); - if ((randomInstance == "" && protocolFallback) || protocol == 'normal') { - randomInstance = utils.getRandomInstance([...facilNormalRedirectsChecks, ...facilNormalCustomRedirects]); - } - } - - let mapCentre = "#"; - let prefs = {}; - - if (url.pathname.match(mapCentreRegex)) { // Set map centre if present - var [, lat, lon, zoom] = url.pathname.match(mapCentreRegex); - } else if (url.searchParams.has("center")) { - var [lat, lon] = url.searchParams.get("center").split(","); - var zoom = url.searchParams.get("zoom") ?? "17"; - } - - if (lat && lon && zoom) { - if (mapsFrontend == 'osm') mapCentre = `#map=${zoom}/${lat}/${lon}`; - if (mapsFrontend == 'facil') mapCentre = `#${zoom}/${lat}/${lon}`; - } - - if (url.searchParams.get("layer")) prefs.layers = osmLayers[url.searchParams.get("layer")]; - - if (url.pathname.includes("/embed")) { // Handle Google Maps Embed API - // https://www.google.com/maps/embed/v1/place?key=AIzaSyD4iE2xVSpkLLOXoyqT-RuPwURN3ddScAI&q=Eiffel+Tower,Paris+France - console.log("embed life"); - - let query = ""; - if (url.searchParams.has("q")) query = url.searchParams.get("q"); - else if (url.searchParams.has("query")) query = url.searchParams.has("query"); - - else if (url.searchParams.has("pb")) - try { query = url.searchParams.get("pb").split(/!2s(.*?)!/)[1]; } - catch (error) { console.error(error); } // Unable to find map marker in URL. - - let [coords, boundingbox] = addressToLatLng(query); - prefs.bbox = boundingbox; - prefs.marker = coords; - prefs.layer = "mapnik"; - let prefsEncoded = new URLSearchParams(prefs).toString(); - if (mapsFrontend == 'osm') return `${randomInstance}/export/embed.html?${prefsEncoded}`; - if (mapsFrontend == 'facil') return `${randomInstance}/#q=${query}`; - - } else if (url.pathname.includes("/dir")) { // Handle Google Maps Directions - // https://www.google.com/maps/dir/?api=1&origin=Space+Needle+Seattle+WA&destination=Pike+Place+Market+Seattle+WA&travelmode=bicycling - - let travMod = url.searchParams.get("travelmode"); - if (url.searchParams.has("travelmode")) prefs.engine = travelModes[travMod]; - - let orgVal = url.searchParams.get("origin"); - let destVal = url.searchParams.get("destination"); - - let org; addressToLatLng(orgVal, a => org = a); - let dest; addressToLatLng(destVal, a => dest = a); - prefs.route = `${org};${dest}`; - - let prefsEncoded = new URLSearchParams(prefs).toString(); - if (mapsFrontend == 'osm') return `${randomInstance}/directions?${prefsEncoded}${mapCentre}`; - if (mapsFrontend == 'facil') return `${randomInstance}/#q=${orgVal}%20to%20${destVal}%20by%20${travelModesFacil[travMod]}`; - - } else if (url.pathname.includes("data=") && url.pathname.match(dataLatLngRegex)) { // Get marker from data attribute - // https://www.google.com/maps/place/41%C2%B001'58.2%22N+40%C2%B029'18.2%22E/@41.032833,40.4862063,17z/data=!3m1!4b1!4m6!3m5!1s0x0:0xf64286eaf72fc49d!7e2!8m2!3d41.0328329!4d40.4883948 - console.log("data life"); - - let [, mlat, mlon] = url.pathname.match(dataLatLngRegex); - - if (mapsFrontend == 'osm') return `${randomInstance}/search?query=${mlat}%2C${mlon}`; - if (mapsFrontend == 'facil') return `${randomInstance}/#q=${mlat}%2C${mlon}`; - - } else if (url.searchParams.has("ll")) { // Get marker from ll param - // https://maps.google.com/?ll=38.882147,-76.99017 - console.log("ll life"); - - const [mlat, mlon] = url.searchParams.get("ll").split(","); - - if (mapsFrontend == 'osm') return `${randomInstance}/search?query=${mlat}%2C${mlon}`; - if (mapsFrontend == 'facil') return `${randomInstance}/#q=${mlat}%2C${mlon}` - } else if (url.searchParams.has("viewpoint")) { // Get marker from viewpoint param. - // https://www.google.com/maps/@?api=1&map_action=pano&viewpoint=48.857832,2.295226&heading=-45&pitch=38&fov=80 - console.log("viewpoint life"); - - const [mlat, mlon] = url.searchParams.get("viewpoint").split(","); - - if (mapsFrontend == 'osm') return `${randomInstance}/search?query=${mlat}%2C${mlon}`; - if (mapsFrontend == 'facil') return `${randomInstance}/#q=${mlat}%2C${mlon}`; - } else { // Use query as search if present. - console.log("normal life"); - - let query; - if (url.searchParams.has("q")) query = url.searchParams.get("q"); - else if (url.searchParams.has("query")) query = url.searchParams.get("query"); - else if (url.pathname.match(placeRegex)) query = url.pathname.match(placeRegex)[1]; - - let prefsEncoded = new URLSearchParams(prefs).toString(); - if (query) { - if (mapsFrontend == 'osm') return `${randomInstance}/search?query="${query}${mapCentre}&${prefsEncoded}`; - if (mapsFrontend == 'facil') return `${randomInstance}/${mapCentre}/Mpnk/${query}`; - } - } - - let prefsEncoded = new URLSearchParams(prefs).toString(); - console.log("mapCentre", mapCentre); - console.log("prefs", prefs); - console.log("prefsEncoded", prefsEncoded); - if (mapsFrontend == 'osm') return `${randomInstance}/${mapCentre}&${prefsEncoded}`; - if (mapsFrontend == 'facil') return `${randomInstance}/${mapCentre}/Mpnk`; +const frontends = new Array("facil") +const protocols = new Array("normal", "tor", "i2p", "loki") + +let redirects = {} + +for (let i = 0; i < frontends.length; i++) { + redirects[frontends[i]] = {} + for (let x = 0; x < protocols.length; x++) { + redirects[frontends[i]][protocols[x]] = [] + } +} + +redirects.osm = {} +redirects.osm.normal = ["https://www.openstreetmap.org"] + +function setRedirects(val) { + browser.storage.local.get("cloudflareBlackList", r => { + redirects.facil = val + facilNormalRedirectsChecks = [...redirects.facil.normal] + for (const instance of r.cloudflareBlackList) { + const a = facilNormalRedirectsChecks.indexOf(instance) + if (a > -1) facilNormalRedirectsChecks.splice(a, 1) + } + browser.storage.local.set({ + mapsRedirects: redirects, + facilNormalRedirectsChecks, + }) + }) } -async function initDefaults() { - return new Promise(resolve => - browser.storage.local.set({ - disableMaps: false, - mapsFrontend: 'osm', - mapsRedirects: redirects, - facilNormalRedirectsChecks: [...redirects.facil.normal], - facilNormalCustomRedirects: [], +let disableMaps, + mapsFrontend, + protocol, + protocolFallback, + facilNormalRedirectsChecks, + facilNormalCustomRedirects, + facilTorRedirectsChecks, + facilTorCustomRedirects, + facilI2pRedirectsChecks, + facilI2pCustomRedirects, + facilLokiRedirectsChecks, + facilLokiCustomRedirects - facilTorRedirectsChecks: [...redirects.facil.tor], - facilTorCustomRedirects: [], +function init() { + browser.storage.local.get( + [ + "disableMaps", + "mapsFrontend", + "protocol", + "protocolFallback", + "facilNormalRedirectsChecks", + "facilNormalCustomRedirects", + "facilTorRedirectsChecks", + "facilTorCustomRedirects", + "facilI2pRedirectsChecks", + "facilI2pCustomRedirects", + "facilLokiRedirectsChecks", + "facilLokiCustomRedirects", + ], + r => { + disableMaps = r.disableMaps + mapsFrontend = r.mapsFrontend + protocol = r.protocol + protocolFallback = r.protocolFallback + facilNormalRedirectsChecks = r.facilNormalRedirectsChecks + facilNormalCustomRedirects = r.facilNormalCustomRedirects + facilTorRedirectsChecks = r.facilTorRedirectsChecks + facilTorCustomRedirects = r.facilTorCustomRedirects + facilI2pRedirectsChecks = r.facilI2pRedirectsChecks + facilI2pCustomRedirects = r.facilI2pCustomRedirects + facilLokiRedirectsChecks = r.facilLokiRedirectsChecks + facilLokiCustomRedirects = r.facilLokiCustomRedirects + } + ) +} - facilI2pRedirectsChecks: [...redirects.facil.i2p], - facilI2pCustomRedirects: [], +init() +browser.storage.onChanged.addListener(init) - facilLokiRedirectsChecks: [...redirects.facil.loki], - facilLokiCustomRedirects: [] - }, () => resolve()) - ) +function redirect(url, initiator) { + if (disableMaps) return + if (initiator && initiator.host === "earth.google.com") return + if (!url.href.match(targets)) return + const mapCentreRegex = /@(-?\d[0-9.]*),(-?\d[0-9.]*),(\d{1,2})[.z]/ + const dataLatLngRegex = /!3d(-?[0-9]{1,}.[0-9]{1,})!4d(-?[0-9]{1,}.[0-9]{1,})/ + const placeRegex = /\/place\/(.*)\// + const travelModes = { + driving: "fossgis_osrm_car", + walking: "fossgis_osrm_foot", + bicycling: "fossgis_osrm_bike", + transit: "fossgis_osrm_car", // not implemented on OSM, default to car. + } + const travelModesFacil = { + driving: "car", + walking: "pedestrian", + bicycling: "bicycle", + transit: "car", // not implemented on Facil, default to car. + } + const osmLayers = { + none: "S", + transit: "T", + traffic: "S", // not implemented on OSM, default to standard. + bicycling: "C", + } + function addressToLatLng(address) { + const xmlhttp = new XMLHttpRequest() + xmlhttp.open("GET", `https://nominatim.openstreetmap.org/search/${address}?format=json&limit=1`, false) + xmlhttp.send() + if (xmlhttp.status === 200) { + const json = JSON.parse(xmlhttp.responseText)[0] + if (json) { + console.log("json", json) + return [`${json.lat},${json.lon}`, `${json.boundingbox[2]},${json.boundingbox[1]},${json.boundingbox[3]},${json.boundingbox[0]}`] + } + } + console.info("Error: Status is " + xmlhttp.status) + } + + let instancesList + switch (mapsFrontend) { + case "osm": + instancesList = [...redirects.osm.normal] + break + case "facil": + switch (protocol) { + case "loki": + instancesList = [...facilLokiRedirectsChecks, ...facilLokiCustomRedirects] + break + case "i2p": + instancesList = [...facilI2pRedirectsChecks, ...facilI2pCustomRedirects] + break + case "tor": + instancesList = [...facilTorRedirectsChecks, ...facilTorCustomRedirects] + } + if ((instancesList == "" && protocolFallback) || protocol == "normal") { + instancesList = [...facilNormalRedirectsChecks, ...facilNormalCustomRedirects] + } + } + const randomInstance = utils.getRandomInstance(instancesList) + + let mapCentre = "#" + let prefs = {} + + if (url.pathname.match(mapCentreRegex)) { + // Set map centre if present + var [, lat, lon, zoom] = url.pathname.match(mapCentreRegex) + } else if (url.searchParams.has("center")) { + var [lat, lon] = url.searchParams.get("center").split(",") + var zoom = url.searchParams.get("zoom") ?? "17" + } + + if (lat && lon && zoom) { + if (mapsFrontend == "osm") mapCentre = `#map=${zoom}/${lat}/${lon}` + if (mapsFrontend == "facil") mapCentre = `#${zoom}/${lat}/${lon}` + } + + if (url.searchParams.get("layer")) prefs.layers = osmLayers[url.searchParams.get("layer")] + + if (url.pathname.includes("/embed")) { + // Handle Google Maps Embed API + // https://www.google.com/maps/embed/v1/place?key=AIzaSyD4iE2xVSpkLLOXoyqT-RuPwURN3ddScAI&q=Eiffel+Tower,Paris+France + console.log("embed life") + + let query = "" + if (url.searchParams.has("q")) query = url.searchParams.get("q") + else if (url.searchParams.has("query")) query = url.searchParams.has("query") + else if (url.searchParams.has("pb")) + try { + query = url.searchParams.get("pb").split(/!2s(.*?)!/)[1] + } catch (error) { + console.error(error) + } // Unable to find map marker in URL. + + let [coords, boundingbox] = addressToLatLng(query) + prefs.bbox = boundingbox + prefs.marker = coords + prefs.layer = "mapnik" + let prefsEncoded = new URLSearchParams(prefs).toString() + if (mapsFrontend == "osm") return `${randomInstance}/export/embed.html?${prefsEncoded}` + if (mapsFrontend == "facil") return `${randomInstance}/#q=${query}` + } else if (url.pathname.includes("/dir")) { + // Handle Google Maps Directions + // https://www.google.com/maps/dir/?api=1&origin=Space+Needle+Seattle+WA&destination=Pike+Place+Market+Seattle+WA&travelmode=bicycling + + let travMod = url.searchParams.get("travelmode") + if (url.searchParams.has("travelmode")) prefs.engine = travelModes[travMod] + + let orgVal = url.searchParams.get("origin") + let destVal = url.searchParams.get("destination") + + let org + addressToLatLng(orgVal, a => (org = a)) + let dest + addressToLatLng(destVal, a => (dest = a)) + prefs.route = `${org};${dest}` + + let prefsEncoded = new URLSearchParams(prefs).toString() + if (mapsFrontend == "osm") return `${randomInstance}/directions?${prefsEncoded}${mapCentre}` + if (mapsFrontend == "facil") return `${randomInstance}/#q=${orgVal}%20to%20${destVal}%20by%20${travelModesFacil[travMod]}` + } else if (url.pathname.includes("data=") && url.pathname.match(dataLatLngRegex)) { + // Get marker from data attribute + // https://www.google.com/maps/place/41%C2%B001'58.2%22N+40%C2%B029'18.2%22E/@41.032833,40.4862063,17z/data=!3m1!4b1!4m6!3m5!1s0x0:0xf64286eaf72fc49d!7e2!8m2!3d41.0328329!4d40.4883948 + console.log("data life") + + let [, mlat, mlon] = url.pathname.match(dataLatLngRegex) + + if (mapsFrontend == "osm") return `${randomInstance}/search?query=${mlat}%2C${mlon}` + if (mapsFrontend == "facil") return `${randomInstance}/#q=${mlat}%2C${mlon}` + } else if (url.searchParams.has("ll")) { + // Get marker from ll param + // https://maps.google.com/?ll=38.882147,-76.99017 + console.log("ll life") + + const [mlat, mlon] = url.searchParams.get("ll").split(",") + + if (mapsFrontend == "osm") return `${randomInstance}/search?query=${mlat}%2C${mlon}` + if (mapsFrontend == "facil") return `${randomInstance}/#q=${mlat}%2C${mlon}` + } else if (url.searchParams.has("viewpoint")) { + // Get marker from viewpoint param. + // https://www.google.com/maps/@?api=1&map_action=pano&viewpoint=48.857832,2.295226&heading=-45&pitch=38&fov=80 + console.log("viewpoint life") + + const [mlat, mlon] = url.searchParams.get("viewpoint").split(",") + + if (mapsFrontend == "osm") return `${randomInstance}/search?query=${mlat}%2C${mlon}` + if (mapsFrontend == "facil") return `${randomInstance}/#q=${mlat}%2C${mlon}` + } else { + // Use query as search if present. + console.log("normal life") + + let query + if (url.searchParams.has("q")) query = url.searchParams.get("q") + else if (url.searchParams.has("query")) query = url.searchParams.get("query") + else if (url.pathname.match(placeRegex)) query = url.pathname.match(placeRegex)[1] + + let prefsEncoded = new URLSearchParams(prefs).toString() + if (query) { + if (mapsFrontend == "osm") return `${randomInstance}/search?query="${query}${mapCentre}&${prefsEncoded}` + if (mapsFrontend == "facil") return `${randomInstance}/${mapCentre}/Mpnk/${query}` + } + } + + let prefsEncoded = new URLSearchParams(prefs).toString() + console.log("mapCentre", mapCentre) + console.log("prefs", prefs) + console.log("prefsEncoded", prefsEncoded) + if (mapsFrontend == "osm") return `${randomInstance}/${mapCentre}&${prefsEncoded}` + if (mapsFrontend == "facil") return `${randomInstance}/${mapCentre}/Mpnk` +} +function initDefaults() { + return new Promise(async resolve => { + fetch("/instances/data.json") + .then(response => response.text()) + .then(async data => { + let dataJson = JSON.parse(data) + for (let i = 0; i < frontends.length; i++) { + redirects[frontends[i]] = dataJson[frontends[i]] + } + browser.storage.local.set( + { + disableMaps: false, + mapsFrontend: "osm", + mapsRedirects: redirects, + facilNormalRedirectsChecks: [...redirects.facil.normal], + facilNormalCustomRedirects: [], + + facilTorRedirectsChecks: [...redirects.facil.tor], + facilTorCustomRedirects: [], + + facilI2pRedirectsChecks: [...redirects.facil.i2p], + facilI2pCustomRedirects: [], + + facilLokiRedirectsChecks: [...redirects.facil.loki], + facilLokiCustomRedirects: [], + }, + () => resolve() + ) + }) + }) } export default { - redirect, - initDefaults, -}; + setRedirects, + redirect, + initDefaults, +} diff --git a/src/assets/javascripts/medium.js b/src/assets/javascripts/medium.js index ddd955c1..4c03471c 100644 --- a/src/assets/javascripts/medium.js +++ b/src/assets/javascripts/medium.js @@ -1,207 +1,219 @@ -window.browser = window.browser || window.chrome; -import utils from './utils.js' +window.browser = window.browser || window.chrome +import utils from "./utils.js" const targets = [ - // /(?:.*\.)*(?<!(link\.|cdn\-images\-\d+\.))medium\.com(\/.*)?$/, - /^medium\.com/, - /.*\.medium\.com/, - // // Other domains of medium blogs, source(s): https://findingtom.com/best-medium-blogs-to-follow/#1-forge - - /^towardsdatascience\.com/, - /^uxdesign\.cc/, - /^uxplanet\.org/, - /^betterprogramming\.pub/, - /^aninjusticemag\.com/, - /^betterhumans\.pub/, - /^psiloveyou\.xyz/, - /^entrepreneurshandbook\.co/, - /^blog\.coinbase\.com/, - - /^ levelup\.gitconnected\.com /, - /^javascript\.plainenglish\.io /, - /^blog\.bitsrc\.io /, - /^ itnext\.io /, - /^codeburst\.io /, - /^infosecwriteups\.com /, - /^ blog\.devgenius.io /, - /^ writingcooperative\.com /, -]; + // /(?:.*\.)*(?<!(link\.|cdn\-images\-\d+\.))medium\.com(\/.*)?$/, + /^medium\.com/, + /.*\.medium\.com/, + // // Other domains of medium blogs, source(s): https://findingtom.com/best-medium-blogs-to-follow/#1-forge + + /^towardsdatascience\.com/, + /^uxdesign\.cc/, + /^uxplanet\.org/, + /^betterprogramming\.pub/, + /^aninjusticemag\.com/, + /^betterhumans\.pub/, + /^psiloveyou\.xyz/, + /^entrepreneurshandbook\.co/, + /^blog\.coinbase\.com/, + + /^ levelup\.gitconnected\.com /, + /^javascript\.plainenglish\.io /, + /^blog\.bitsrc\.io /, + /^ itnext\.io /, + /^codeburst\.io /, + /^infosecwriteups\.com /, + /^ blog\.devgenius.io /, + /^ writingcooperative\.com /, +] const frontends = new Array("scribe") const protocols = new Array("normal", "tor", "i2p", "loki") -let redirects = {}; +let redirects = {} for (let i = 0; i < frontends.length; i++) { - redirects[frontends[i]] = {} - for (let x = 0; x < protocols.length; x++) { - redirects[frontends[i]][protocols[x]] = [] - } + redirects[frontends[i]] = {} + for (let x = 0; x < protocols.length; x++) { + redirects[frontends[i]][protocols[x]] = [] + } } function setRedirects(val) { - browser.storage.local.get('cloudflareBlackList', r => { - redirects.scribe = val; - scribeNormalRedirectsChecks = [...redirects.scribe.normal]; - for (const instance of r.cloudflareBlackList) { - const a = scribeNormalRedirectsChecks.indexOf(instance); - if (a > -1) scribeNormalRedirectsChecks.splice(a, 1); - } - browser.storage.local.set({ - mediumRedirects: redirects, - scribeNormalRedirectsChecks - }) - }) + browser.storage.local.get("cloudflareBlackList", r => { + redirects.scribe = val + scribeNormalRedirectsChecks = [...redirects.scribe.normal] + for (const instance of r.cloudflareBlackList) { + const a = scribeNormalRedirectsChecks.indexOf(instance) + if (a > -1) scribeNormalRedirectsChecks.splice(a, 1) + } + browser.storage.local.set({ + mediumRedirects: redirects, + scribeNormalRedirectsChecks, + }) + }) } -let - disableMedium, - mediumRedirects, - scribeNormalRedirectsChecks, - scribeNormalCustomRedirects, - scribeTorRedirectsChecks, - scribeTorCustomRedirects, - scribeI2pCustomRedirects, - scribeLokiCustomRedirects, - protocol, - protocolFallback; +let disableMedium, + mediumRedirects, + scribeNormalRedirectsChecks, + scribeNormalCustomRedirects, + scribeTorRedirectsChecks, + scribeTorCustomRedirects, + scribeI2pCustomRedirects, + scribeLokiCustomRedirects, + protocol, + protocolFallback function init() { - return new Promise(resolve => { - browser.storage.local.get( - [ - "disableMedium", - "mediumRedirects", - "scribeNormalRedirectsChecks", - "scribeNormalCustomRedirects", - "scribeTorRedirectsChecks", - "scribeTorCustomRedirects", - "scribeI2pCustomRedirects", - "scribeLokiCustomRedirects", - "protocol", - "protocolFallback" - ], - r => { - disableMedium = r.disableMedium; - mediumRedirects = r.mediumRedirects; - scribeNormalRedirectsChecks = r.scribeNormalRedirectsChecks; - scribeNormalCustomRedirects = r.scribeNormalCustomRedirects; - scribeTorRedirectsChecks = r.scribeTorRedirectsChecks; - scribeTorCustomRedirects = r.scribeTorCustomRedirects; - scribeI2pCustomRedirects = r.scribeI2pCustomRedirects; - scribeLokiCustomRedirects = r.scribeLokiCustomRedirects; - protocol = r.protocol; - protocolFallback = r.protocolFallback; - resolve(); - } - ) - }) + return new Promise(resolve => { + browser.storage.local.get( + [ + "disableMedium", + "mediumRedirects", + "scribeNormalRedirectsChecks", + "scribeNormalCustomRedirects", + "scribeTorRedirectsChecks", + "scribeTorCustomRedirects", + "scribeI2pCustomRedirects", + "scribeLokiCustomRedirects", + "protocol", + "protocolFallback", + ], + r => { + disableMedium = r.disableMedium + mediumRedirects = r.mediumRedirects + scribeNormalRedirectsChecks = r.scribeNormalRedirectsChecks + scribeNormalCustomRedirects = r.scribeNormalCustomRedirects + scribeTorRedirectsChecks = r.scribeTorRedirectsChecks + scribeTorCustomRedirects = r.scribeTorCustomRedirects + scribeI2pCustomRedirects = r.scribeI2pCustomRedirects + scribeLokiCustomRedirects = r.scribeLokiCustomRedirects + protocol = r.protocol + protocolFallback = r.protocolFallback + resolve() + } + ) + }) } -init(); +init() browser.storage.onChanged.addListener(init) function redirect(url, type, initiator, disableOverride) { - if (disableMedium && !disableOverride) return; - if (url.pathname == "/" && !disableOverride) return; - if (type != "main_frame" && "sub_frame" && "xmlhttprequest" && "other") return; - if (initiator && ( - [ - ...mediumRedirects.scribe.normal, - ...mediumRedirects.scribe.tor, - ...scribeNormalCustomRedirects, - ...scribeTorCustomRedirects, - ...scribeI2pCustomRedirects, - ...scribeLokiCustomRedirects - ].includes(initiator.origin))) return; - - if (!targets.some(rx => rx.test(url.host))) return; - if (/^\/(@[a-zA-Z.]{0,}(\/|)$)/.test(url.pathname)) return; - - let instancesList = []; - if (protocol == 'loki') instancesList = [...scribeLokiCustomRedirects]; - else if (protocol == 'i2p') instancesList = [...scribeI2pCustomRedirects]; - else if (protocol == 'tor') instancesList = [...scribeTorRedirectsChecks, ...scribeTorCustomRedirects]; - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - instancesList = [...scribeNormalRedirectsChecks, ...scribeNormalCustomRedirects]; - } - if (instancesList.length === 0) { return; } - - const randomInstance = utils.getRandomInstance(instancesList) - return `${randomInstance}${url.pathname}${url.search}`; + if (disableMedium && !disableOverride) return + if (url.pathname == "/" && !disableOverride) return + if (type != "main_frame" && "sub_frame" && "xmlhttprequest" && "other") return + if ( + initiator && + [...mediumRedirects.scribe.normal, ...mediumRedirects.scribe.tor, ...scribeNormalCustomRedirects, ...scribeTorCustomRedirects, ...scribeI2pCustomRedirects, ...scribeLokiCustomRedirects].includes( + initiator.origin + ) + ) + return + + if (!targets.some(rx => rx.test(url.host))) return + if (/^\/(@[a-zA-Z.]{0,}(\/|)$)/.test(url.pathname)) return + + let instancesList = [] + if (protocol == "loki") instancesList = [...scribeLokiCustomRedirects] + else if (protocol == "i2p") instancesList = [...scribeI2pCustomRedirects] + else if (protocol == "tor") instancesList = [...scribeTorRedirectsChecks, ...scribeTorCustomRedirects] + if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { + instancesList = [...scribeNormalRedirectsChecks, ...scribeNormalCustomRedirects] + } + if (instancesList.length === 0) { + return + } + + const randomInstance = utils.getRandomInstance(instancesList) + return `${randomInstance}${url.pathname}${url.search}` } function switchInstance(url, disableOverride) { - return new Promise(async resolve => { - await init(); - if (disableMedium && !disableOverride) { resolve(); return; } - let protocolHost = utils.protocolHost(url); - const all = [ - ...mediumRedirects.scribe.tor, - ...mediumRedirects.scribe.normal, - - ...scribeNormalCustomRedirects, - ...scribeTorCustomRedirects, - ...scribeI2pCustomRedirects, - ...scribeLokiCustomRedirects - ]; - if (!all.includes(protocolHost)) { resolve(); return; } - - let instancesList = []; - if (protocol == 'loki') instancesList = [...scribeLokiCustomRedirects]; - else if (protocol == 'i2p') instancesList = [...scribeI2pCustomRedirects]; - else if (protocol == 'tor') instancesList = [...scribeTorRedirectsChecks, ...scribeTorCustomRedirects]; - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - instancesList = [...scribeNormalRedirectsChecks, ...scribeNormalCustomRedirects]; - } - - const i = instancesList.indexOf(protocolHost); - if (i > -1) instancesList.splice(i, 1); - if (instancesList.length === 0) { resolve(); return; } - - const randomInstance = utils.getRandomInstance(instancesList); - resolve(`${randomInstance}${url.pathname}${url.search}`); - }) + return new Promise(async resolve => { + await init() + if (disableMedium && !disableOverride) { + resolve() + return + } + let protocolHost = utils.protocolHost(url) + const all = [ + ...mediumRedirects.scribe.tor, + ...mediumRedirects.scribe.normal, + + ...scribeNormalCustomRedirects, + ...scribeTorCustomRedirects, + ...scribeI2pCustomRedirects, + ...scribeLokiCustomRedirects, + ] + if (!all.includes(protocolHost)) { + resolve() + return + } + + let instancesList = [] + if (protocol == "loki") instancesList = [...scribeLokiCustomRedirects] + else if (protocol == "i2p") instancesList = [...scribeI2pCustomRedirects] + else if (protocol == "tor") instancesList = [...scribeTorRedirectsChecks, ...scribeTorCustomRedirects] + if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { + instancesList = [...scribeNormalRedirectsChecks, ...scribeNormalCustomRedirects] + } + + const i = instancesList.indexOf(protocolHost) + if (i > -1) instancesList.splice(i, 1) + if (instancesList.length === 0) { + resolve() + return + } + + const randomInstance = utils.getRandomInstance(instancesList) + resolve(`${randomInstance}${url.pathname}${url.search}`) + }) } function initDefaults() { - return new Promise(resolve => { - fetch('/instances/data.json').then(response => response.text()).then(data => { - let dataJson = JSON.parse(data); - for (let i = 0; i < frontends.length; i++) { - redirects[frontends[i]] = dataJson[frontends[i]] - } - browser.storage.local.get('cloudflareBlackList', - async r => { - scribeNormalRedirectsChecks = [...redirects.scribe.normal]; - for (const instance of r.cloudflareBlackList) { - let i = scribeNormalRedirectsChecks.indexOf(instance); - if (i > -1) scribeNormalRedirectsChecks.splice(i, 1); - } - browser.storage.local.set({ - disableMedium: false, - mediumRedirects: redirects, - - scribeNormalRedirectsChecks: scribeNormalRedirectsChecks, - scribeNormalCustomRedirects: [], - - scribeTorRedirectsChecks: [...redirects.scribe.tor], - scribeTorCustomRedirects: [], - - scribeI2pRedirectsChecks: [...redirects.scribe.i2p], - scribeI2pCustomRedirects: [], - - scribeLokiRedirectsChecks: [...redirects.scribe.loki], - scribeLokiCustomRedirects: [] - }, () => resolve()) - }) - }) - }) + return new Promise(resolve => { + fetch("/instances/data.json") + .then(response => response.text()) + .then(data => { + let dataJson = JSON.parse(data) + for (let i = 0; i < frontends.length; i++) { + redirects[frontends[i]] = dataJson[frontends[i]] + } + browser.storage.local.get("cloudflareBlackList", async r => { + scribeNormalRedirectsChecks = [...redirects.scribe.normal] + for (const instance of r.cloudflareBlackList) { + let i = scribeNormalRedirectsChecks.indexOf(instance) + if (i > -1) scribeNormalRedirectsChecks.splice(i, 1) + } + browser.storage.local.set( + { + disableMedium: false, + mediumRedirects: redirects, + + scribeNormalRedirectsChecks: scribeNormalRedirectsChecks, + scribeNormalCustomRedirects: [], + + scribeTorRedirectsChecks: [...redirects.scribe.tor], + scribeTorCustomRedirects: [], + + scribeI2pRedirectsChecks: [...redirects.scribe.i2p], + scribeI2pCustomRedirects: [], + + scribeLokiRedirectsChecks: [...redirects.scribe.loki], + scribeLokiCustomRedirects: [], + }, + () => resolve() + ) + }) + }) + }) } export default { - setRedirects, - redirect, - switchInstance, - initDefaults, -}; + setRedirects, + redirect, + switchInstance, + initDefaults, +} diff --git a/src/assets/javascripts/peertube.js b/src/assets/javascripts/peertube.js index d05e4b27..de25cfaa 100644 --- a/src/assets/javascripts/peertube.js +++ b/src/assets/javascripts/peertube.js @@ -1,180 +1,201 @@ -window.browser = window.browser || window.chrome; - -import utils from './utils.js' - -let redirects = { - "simpleertube": { - "normal": [ - "https://tube.simple-web.org", - "https://tube.ftild3.org", - "https://stube.alefvanoon.xyz", - "https://st.phreedom.club", - "https://simpleertube.esmailelbob.xyz", - ], - "tor": [], - "i2p": [], - "loki": [] - } +window.browser = window.browser || window.chrome + +import utils from "./utils.js" + +const frontends = new Array("simpleertube") +const protocols = new Array("normal", "tor", "i2p", "loki") + +let redirects = {} + +for (let i = 0; i < frontends.length; i++) { + redirects[frontends[i]] = {} + for (let x = 0; x < protocols.length; x++) { + redirects[frontends[i]][protocols[x]] = [] + } } + function setRedirects(val) { - redirects.simpleertube = val; - browser.storage.local.set({ peertubeTargetsRedirects: redirects }) - for (const item of simpleertubeNormalRedirectsChecks) - if (!redirects.simpleertube.normal.includes(item)) { - var index = simpleertubeNormalRedirectsChecks.indexOf(item); - if (index !== -1) simpleertubeNormalRedirectsChecks.splice(index, 1); - } - browser.storage.local.set({ simpleertubeNormalRedirectsChecks }) - - for (const item of simpleertubeTorRedirectsChecks) - if (!redirects.simpleertube.normal.includes(item)) { - var index = simpleertubeTorRedirectsChecks.indexOf(item); - if (index !== -1) simpleertubeTorRedirectsChecks.splice(index, 1); - } - browser.storage.local.set({ simpleertubeTorRedirectsChecks }) + browser.storage.local.get("cloudflareBlackList", r => { + redirects.simpleertube = val + simpleertubeNormalRedirectsChecks = [...redirects.simpleertube.normal] + for (const instance of r.cloudflareBlackList) { + const a = simpleertubeNormalRedirectsChecks.indexOf(instance) + if (a > -1) simpleertubeNormalRedirectsChecks.splice(a, 1) + } + browser.storage.local.set({ + peertubeRedirects: redirects, + simpleertubeNormalRedirectsChecks, + }) + }) } -let - disablePeertubeTargets, - peertubeRedirects, - simpleertubeNormalRedirectsChecks, - simpleertubeNormalCustomRedirects, - simpleertubeTorRedirectsChecks, - simpleertubeTorCustomRedirects, - simpleertubeI2pCustomRedirects, - simpleertubeLokiCustomRedirects, - peerTubeTargets, - protocol, - protocolFallback; +let disablePeertubeTargets, + peertubeRedirects, + simpleertubeNormalRedirectsChecks, + simpleertubeNormalCustomRedirects, + simpleertubeTorRedirectsChecks, + simpleertubeTorCustomRedirects, + simpleertubeI2pRedirectsChecks, + simpleertubeI2pCustomRedirects, + simpleertubeLokiRedirectsChecks, + simpleertubeLokiCustomRedirects, + peerTubeTargets, + protocol, + protocolFallback function init() { - return new Promise(resolve => { - browser.storage.local.get( - [ - "disablePeertubeTargets", - "peertubeRedirects", - "simpleertubeNormalRedirectsChecks", - "simpleertubeNormalCustomRedirects", - "simpleertubeTorRedirectsChecks", - "simpleertubeTorCustomRedirects", - "simpleertubeI2pCustomRedirects", - "simpleertubeLokiCustomRedirects", - "peerTubeTargets", - "protocol", - "protocolFallback" - ], - r => { - disablePeertubeTargets = r.disablePeertubeTargets; - peertubeRedirects = r.peertubeRedirects; - simpleertubeNormalRedirectsChecks = r.simpleertubeNormalRedirectsChecks; - simpleertubeNormalCustomRedirects = r.simpleertubeNormalCustomRedirects; - simpleertubeTorRedirectsChecks = r.simpleertubeTorRedirectsChecks; - simpleertubeTorCustomRedirects = r.simpleertubeTorCustomRedirects; - simpleertubeI2pCustomRedirects = r.simpleertubeI2pCustomRedirects; - simpleertubeLokiCustomRedirects = r.simpleertubeLokiCustomRedirects; - peerTubeTargets = r.peerTubeTargets; - protocol = r.protocol; - protocolFallback = r.protocolFallback; - resolve(); - } - ) - }) + return new Promise(resolve => { + browser.storage.local.get( + [ + "disablePeertubeTargets", + "peertubeRedirects", + "simpleertubeNormalRedirectsChecks", + "simpleertubeNormalCustomRedirects", + "simpleertubeTorRedirectsChecks", + "simpleertubeTorCustomRedirects", + "simpleertubeI2pRedirectsChecks", + "simpleertubeI2pCustomRedirects", + "simpleertubeLokiRedirectsChecks", + "simpleertubeLokiCustomRedirects", + "peerTubeTargets", + "protocol", + "protocolFallback", + ], + r => { + disablePeertubeTargets = r.disablePeertubeTargets + peertubeRedirects = r.peertubeRedirects + simpleertubeNormalRedirectsChecks = r.simpleertubeNormalRedirectsChecks + simpleertubeNormalCustomRedirects = r.simpleertubeNormalCustomRedirects + simpleertubeTorRedirectsChecks = r.simpleertubeTorRedirectsChecks + simpleertubeTorCustomRedirects = r.simpleertubeTorCustomRedirects + simpleertubeI2pRedirectsChecks = r.simpleertubeI2pRedirectsChecks + simpleertubeI2pCustomRedirects = r.simpleertubeI2pCustomRedirects + simpleertubeLokiRedirectsChecks = r.simpleertubeLokiRedirectsChecks + simpleertubeLokiCustomRedirects = r.simpleertubeLokiCustomRedirects + peerTubeTargets = r.peerTubeTargets + protocol = r.protocol + protocolFallback = r.protocolFallback + resolve() + } + ) + }) } -init(); +init() browser.storage.onChanged.addListener(init) function all() { - return [ - ...redirects.simpleertube.normal, - ...redirects.simpleertube.tor, - ...simpleertubeNormalCustomRedirects, - ...simpleertubeTorCustomRedirects, - ...simpleertubeI2pCustomRedirects, - ...simpleertubeLokiCustomRedirects - ]; + return [ + ...simpleertubeNormalRedirectsChecks, + ...simpleertubeTorRedirectsChecks, + ...simpleertubeI2pRedirectsChecks, + ...simpleertubeLokiRedirectsChecks, + ...simpleertubeNormalCustomRedirects, + ...simpleertubeTorCustomRedirects, + ...simpleertubeI2pCustomRedirects, + ...simpleertubeLokiCustomRedirects, + ] } function redirect(url, type, initiator, disableOverride) { - if (disablePeertubeTargets && !disableOverride) return; - if (initiator && (all().includes(initiator.origin) || peerTubeTargets.includes(initiator.host))) return; - let protocolHost = utils.protocolHost(url); - if (!peerTubeTargets.includes(protocolHost)) return; - if (type != "main_frame") return; - - let instancesList = []; - if (protocol == 'loki') instancesList = [...simpleertubeLokiCustomRedirects]; - else if (protocol == 'i2p') instancesList = [...simpleertubeI2pCustomRedirects]; - else if (protocol == 'tor') instancesList = [...simpleertubeTorRedirectsChecks, ...simpleertubeTorCustomRedirects]; - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - instancesList = [...simpleertubeNormalRedirectsChecks, ...simpleertubeNormalCustomRedirects]; - } - if (instancesList.length === 0) { return; } - - const randomInstance = utils.getRandomInstance(instancesList); - if (url.host == 'search.joinpeertube.org' || url.host == 'sepiasearch.org') return randomInstance; - return `${randomInstance}/${url.host}${url.pathname}${url.search}`; + if (disablePeertubeTargets && !disableOverride) return + if (initiator && (all().includes(initiator.origin) || peerTubeTargets.includes(initiator.host))) return + let protocolHost = utils.protocolHost(url) + if (!peerTubeTargets.includes(protocolHost)) return + if (type != "main_frame") return + + let instancesList = [] + if (protocol == "loki") instancesList = [...simpleertubeLokiRedirectsChecks, ...simpleertubeLokiCustomRedirects] + else if (protocol == "i2p") instancesList = [...simpleertubeI2pRedirectsChecks, ...simpleertubeI2pCustomRedirects] + else if (protocol == "tor") instancesList = [...simpleertubeTorRedirectsChecks, ...simpleertubeTorCustomRedirects] + if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { + instancesList = [...simpleertubeNormalRedirectsChecks, ...simpleertubeNormalCustomRedirects] + } + if (instancesList.length === 0) { + return + } + + const randomInstance = utils.getRandomInstance(instancesList) + if (url.host == "search.joinpeertube.org" || url.host == "sepiasearch.org") return randomInstance + return `${randomInstance}/${url.host}${url.pathname}${url.search}` } function switchInstance(url, disableOverride) { - return new Promise(async resolve => { - await init(); - if (disablePeertubeTargets && !disableOverride) { resolve(); return; } - const protocolHost = utils.protocolHost(url); - if (!all().includes(protocolHost)) { resolve(); return; } - - let instancesList = []; - if (protocol == 'loki') instancesList = [...simpleertubeLokiCustomRedirects]; - else if (protocol == 'i2p') instancesList = [...simpleertubeI2pCustomRedirects]; - else if (protocol == 'tor') instancesList = [...simpleertubeTorRedirectsChecks, ...simpleertubeTorCustomRedirects]; - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - instancesList = [...simpleertubeNormalRedirectsChecks, ...simpleertubeNormalCustomRedirects]; - } - - const i = instancesList.indexOf(protocolHost); - if (i > -1) instancesList.splice(i, 1); - if (instancesList.length === 0) { resolve(); return; } - - const randomInstance = utils.getRandomInstance(instancesList); - resolve(`${randomInstance}${url.pathname}${url.search}`); - }) + return new Promise(async resolve => { + await init() + if (disablePeertubeTargets && !disableOverride) { + resolve() + return + } + const protocolHost = utils.protocolHost(url) + if (!all().includes(protocolHost)) { + resolve() + return + } + + let instancesList = [] + if (protocol == "loki") instancesList = [...simpleertubeLokiRedirectsChecks, ...simpleertubeLokiCustomRedirects] + else if (protocol == "i2p") instancesList = [...simpleertubeI2pRedirectsChecks, ...simpleertubeI2pCustomRedirects] + else if (protocol == "tor") instancesList = [...simpleertubeTorRedirectsChecks, ...simpleertubeTorCustomRedirects] + if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { + instancesList = [...simpleertubeNormalRedirectsChecks, ...simpleertubeNormalCustomRedirects] + } + + const i = instancesList.indexOf(protocolHost) + if (i > -1) instancesList.splice(i, 1) + if (instancesList.length === 0) { + resolve() + return + } + + const randomInstance = utils.getRandomInstance(instancesList) + resolve(`${randomInstance}${url.pathname}${url.search}`) + }) } function initDefaults() { - return new Promise(resolve => { - fetch('/instances/data.json').then(response => response.text()).then(async data => { - let dataJson = JSON.parse(data); - browser.storage.local.get('cloudflareBlackList', async r => { - simpleertubeNormalRedirectsChecks = [...redirects.simpleertube.normal]; - for (const instance of r.cloudflareBlackList) { - let i = simpleertubeNormalRedirectsChecks.indexOf(instance); - if (i > -1) simpleertubeNormalRedirectsChecks.splice(i, 1); - } - browser.storage.local.set({ - peerTubeTargets: ['https://search.joinpeertube.org', ...dataJson.peertube], - disablePeertubeTargets: true, - peertubeRedirects: redirects, - - simpleertubeNormalRedirectsChecks: simpleertubeNormalRedirectsChecks, - simpleertubeNormalCustomRedirects: [], - - simpleertubeTorRedirectsChecks: [...redirects.simpleertube.tor], - simpleertubeTorCustomRedirects: [], - - simpleertubeI2pRedirectsChecks: [...redirects.simpleertube.i2p], - simpleertubeI2pCustomRedirects: [], - - simpleertubeLokiRedirectsChecks: [...redirects.simpleertube.loki], - simpleertubeLokiCustomRedirects: [] - }, () => resolve()); - }) - }) - }) + return new Promise(resolve => { + fetch("/instances/data.json") + .then(response => response.text()) + .then(data => { + let dataJson = JSON.parse(data) + for (let i = 0; i < frontends.length; i++) { + redirects[frontends[i]] = dataJson[frontends[i]] + } + browser.storage.local.get("cloudflareBlackList", async r => { + simpleertubeNormalRedirectsChecks = [...redirects.simpleertube.normal] + for (const instance of r.cloudflareBlackList) { + let i = simpleertubeNormalRedirectsChecks.indexOf(instance) + if (i > -1) simpleertubeNormalRedirectsChecks.splice(i, 1) + } + browser.storage.local.set( + { + peerTubeTargets: ["https://search.joinpeertube.org", ...dataJson.peertube], + disablePeertubeTargets: true, + peertubeRedirects: redirects, + + simpleertubeNormalRedirectsChecks: simpleertubeNormalRedirectsChecks, + simpleertubeNormalCustomRedirects: [], + + simpleertubeTorRedirectsChecks: [...redirects.simpleertube.tor], + simpleertubeTorCustomRedirects: [], + + simpleertubeI2pRedirectsChecks: [...redirects.simpleertube.i2p], + simpleertubeI2pCustomRedirects: [], + + simpleertubeLokiRedirectsChecks: [...redirects.simpleertube.loki], + simpleertubeLokiCustomRedirects: [], + }, + () => resolve() + ) + }) + }) + }) } export default { - setRedirects, - switchInstance, - redirect, - initDefaults, -}; + setRedirects, + switchInstance, + redirect, + initDefaults, +} diff --git a/src/assets/javascripts/quora.js b/src/assets/javascripts/quora.js index fed321de..3f9e4189 100644 --- a/src/assets/javascripts/quora.js +++ b/src/assets/javascripts/quora.js @@ -1,10 +1,8 @@ -window.browser = window.browser || window.chrome; +window.browser = window.browser || window.chrome -import utils from './utils.js' +import utils from "./utils.js" -const targets = [ - /^https?:\/{2}(www\.|)quora\.com.*/ -]; +const targets = [/^https?:\/{2}(www\.|)quora\.com.*/] let redirects = {} @@ -12,183 +10,183 @@ const frontends = new Array("quetre") const protocols = new Array("normal", "tor", "i2p", "loki") for (let i = 0; i < frontends.length; i++) { - redirects[frontends[i]] = {} - for (let x = 0; x < protocols.length; x++) { - redirects[frontends[i]][protocols[x]] = [] - } + redirects[frontends[i]] = {} + for (let x = 0; x < protocols.length; x++) { + redirects[frontends[i]][protocols[x]] = [] + } } function setRedirects(val) { - browser.storage.local.get('cloudflareBlackList', r => { - redirects.quetre = val; - quetreNormalRedirectsChecks = [...redirects.quetre.normal]; - for (const instance of r.cloudflareBlackList) { - const a = quetreNormalRedirectsChecks.indexOf(instance); - if (a > -1) quetreNormalRedirectsChecks.splice(a, 1); - } - browser.storage.local.set({ - quoraRedirects: redirects, - quetreNormalRedirectsChecks - }) - }) + browser.storage.local.get("cloudflareBlackList", r => { + redirects.quetre = val + quetreNormalRedirectsChecks = [...redirects.quetre.normal] + for (const instance of r.cloudflareBlackList) { + const a = quetreNormalRedirectsChecks.indexOf(instance) + if (a > -1) quetreNormalRedirectsChecks.splice(a, 1) + } + browser.storage.local.set({ + quoraRedirects: redirects, + quetreNormalRedirectsChecks, + }) + }) } -let - disableQuora, - protocol, - protocolFallback, - quoraRedirects, - quetreNormalRedirectsChecks, - quetreNormalCustomRedirects, - quetreTorRedirectsChecks, - quetreTorCustomRedirects, - quetreI2pCustomRedirects, - quetreLokiCustomRedirects; +let disableQuora, + protocol, + protocolFallback, + quoraRedirects, + quetreNormalRedirectsChecks, + quetreNormalCustomRedirects, + quetreTorRedirectsChecks, + quetreTorCustomRedirects, + quetreI2pCustomRedirects, + quetreLokiCustomRedirects function init() { - return new Promise(async resolve => { - browser.storage.local.get( - [ - "disableQuora", - "protocol", - "protocolFallback", - "quoraRedirects", - "quetreNormalRedirectsChecks", - "quetreNormalCustomRedirects", - "quetreTorRedirectsChecks", - "quetreTorCustomRedirects", - "quetreI2pCustomRedirects", - "quetreLokiCustomRedirects" - ], - r => { - disableQuora = r.disableQuora; - protocol = r.protocol; - protocolFallback = r.protocolFallback; - quoraRedirects = r.quoraRedirects; - quetreNormalRedirectsChecks = r.quetreNormalRedirectsChecks; - quetreNormalCustomRedirects = r.quetreNormalCustomRedirects; - quetreTorRedirectsChecks = r.quetreTorRedirectsChecks; - quetreTorCustomRedirects = r.quetreTorCustomRedirects; - quetreI2pCustomRedirects = r.quetreI2pCustomRedirects; - quetreLokiCustomRedirects = r.quetreLokiCustomRedirects; - resolve(); - } - ) - }) + return new Promise(async resolve => { + browser.storage.local.get( + [ + "disableQuora", + "protocol", + "protocolFallback", + "quoraRedirects", + "quetreNormalRedirectsChecks", + "quetreNormalCustomRedirects", + "quetreTorRedirectsChecks", + "quetreTorCustomRedirects", + "quetreI2pCustomRedirects", + "quetreLokiCustomRedirects", + ], + r => { + disableQuora = r.disableQuora + protocol = r.protocol + protocolFallback = r.protocolFallback + quoraRedirects = r.quoraRedirects + quetreNormalRedirectsChecks = r.quetreNormalRedirectsChecks + quetreNormalCustomRedirects = r.quetreNormalCustomRedirects + quetreTorRedirectsChecks = r.quetreTorRedirectsChecks + quetreTorCustomRedirects = r.quetreTorCustomRedirects + quetreI2pCustomRedirects = r.quetreI2pCustomRedirects + quetreLokiCustomRedirects = r.quetreLokiCustomRedirects + resolve() + } + ) + }) } -init(); +init() browser.storage.onChanged.addListener(init) function redirect(url, type, initiator, disableOverride) { - if (disableQuora && !disableOverride) return; - if (url.pathname == "/" && !disableOverride) return; - if (type != "main_frame") return; - const all = [ - ...quoraRedirects.quetre.normal, - ...quetreNormalCustomRedirects - ]; - if (initiator && (all.includes(initiator.origin) || targets.includes(initiator.host))) return; - if (!targets.some(rx => rx.test(url.href))) return; - - let instancesList = []; - if (protocol == 'loki') instancesList = [...quetreLokiCustomRedirects]; - else if (protocol == 'i2p') instancesList = [...quetreI2pCustomRedirects]; - else if (protocol == 'tor') instancesList = [...quetreTorRedirectsChecks, ...quetreTorCustomRedirects]; - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - instancesList = [...quetreNormalRedirectsChecks, ...quetreNormalCustomRedirects]; - } - if (instancesList.length === 0) { return; } - - const randomInstance = utils.getRandomInstance(instancesList); - return `${randomInstance}${url.pathname}`; + if (disableQuora && !disableOverride) return + if (url.pathname == "/" && !disableOverride) return + if (type != "main_frame") return + const all = [...quoraRedirects.quetre.normal, ...quetreNormalCustomRedirects] + if (initiator && (all.includes(initiator.origin) || targets.includes(initiator.host))) return + if (!targets.some(rx => rx.test(url.href))) return + + let instancesList = [] + if (protocol == "loki") instancesList = [...quetreLokiCustomRedirects] + else if (protocol == "i2p") instancesList = [...quetreI2pCustomRedirects] + else if (protocol == "tor") instancesList = [...quetreTorRedirectsChecks, ...quetreTorCustomRedirects] + if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { + instancesList = [...quetreNormalRedirectsChecks, ...quetreNormalCustomRedirects] + } + if (instancesList.length === 0) { + return + } + + const randomInstance = utils.getRandomInstance(instancesList) + return `${randomInstance}${url.pathname}` } function reverse(url) { - return new Promise(async resolve => { - await init(); - let protocolHost = utils.protocolHost(url); - const all = [ - ...quoraRedirects.quetre.normal, - ...quoraRedirects.quetre.tor, - ...quetreNormalCustomRedirects, - ...quetreTorCustomRedirects, - ...quetreI2pCustomRedirects, - ...quetreLokiCustomRedirects - ]; - if (!all.includes(protocolHost)) { resolve(); return; } - - resolve(`https://quora.com${url.pathname}${url.search}`); - }) + return new Promise(async resolve => { + await init() + let protocolHost = utils.protocolHost(url) + const all = [...quoraRedirects.quetre.normal, ...quoraRedirects.quetre.tor, ...quetreNormalCustomRedirects, ...quetreTorCustomRedirects, ...quetreI2pCustomRedirects, ...quetreLokiCustomRedirects] + if (!all.includes(protocolHost)) { + resolve() + return + } + + resolve(`https://quora.com${url.pathname}${url.search}`) + }) } function switchInstance(url, disableOverride) { - return new Promise(async resolve => { - await init(); - if (disableQuora && !disableOverride) { resolve(); return; } - let protocolHost = utils.protocolHost(url); - const all = [ - ...quoraRedirects.quetre.tor, - ...quoraRedirects.quetre.normal, - - ...quetreNormalCustomRedirects, - ...quetreTorCustomRedirects, - ...quetreI2pCustomRedirects, - ...quetreLokiCustomRedirects - ]; - if (!all.includes(protocolHost)) { resolve(); return; } - - let instancesList = []; - if (protocol == 'loki') instancesList = [...quetreLokiCustomRedirects]; - else if (protocol == 'i2p') instancesList = [...quetreI2pCustomRedirects]; - else if (protocol == 'tor') instancesList = [...quetreTorRedirectsChecks, ...quetreTorCustomRedirects]; - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - instancesList = [...quetreNormalRedirectsChecks, ...quetreNormalCustomRedirects]; - } - - const i = instancesList.indexOf(protocolHost); - if (i > -1) instancesList.splice(i, 1); - if (instancesList.length === 0) { resolve(); return; } - - const randomInstance = utils.getRandomInstance(instancesList); - resolve(`${randomInstance}${url.pathname}${url.search}`); - }) + return new Promise(async resolve => { + await init() + if (disableQuora && !disableOverride) { + resolve() + return + } + let protocolHost = utils.protocolHost(url) + const all = [...quoraRedirects.quetre.tor, ...quoraRedirects.quetre.normal, ...quetreNormalCustomRedirects, ...quetreTorCustomRedirects, ...quetreI2pCustomRedirects, ...quetreLokiCustomRedirects] + if (!all.includes(protocolHost)) { + resolve() + return + } + + let instancesList = [] + if (protocol == "loki") instancesList = [...quetreLokiCustomRedirects] + else if (protocol == "i2p") instancesList = [...quetreI2pCustomRedirects] + else if (protocol == "tor") instancesList = [...quetreTorRedirectsChecks, ...quetreTorCustomRedirects] + if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { + instancesList = [...quetreNormalRedirectsChecks, ...quetreNormalCustomRedirects] + } + + const i = instancesList.indexOf(protocolHost) + if (i > -1) instancesList.splice(i, 1) + if (instancesList.length === 0) { + resolve() + return + } + + const randomInstance = utils.getRandomInstance(instancesList) + resolve(`${randomInstance}${url.pathname}${url.search}`) + }) } function initDefaults() { - return new Promise(async resolve => { - fetch('/instances/data.json').then(response => response.text()).then(async data => { - let dataJson = JSON.parse(data); - for (let i = 0; i < frontends.length; i++) { - redirects[frontends[i]] = dataJson[frontends[i]] - } - browser.storage.local.set({ - disableQuora: false, - - quoraRedirects: redirects, - - quetreNormalRedirectsChecks: [...redirects.quetre.normal], - quetreNormalCustomRedirects: [], - - quetreTorRedirectsChecks: [...redirects.quetre.tor], - quetreTorCustomRedirects: [], - - quetreI2pRedirectsChecks: [...redirects.quetre.i2p], - quetreI2pCustomRedirects: [], - - quetreLokiRedirectsChecks: [...redirects.quetre.loki], - quetreLokiCustomRedirects: [] - }, () => resolve()); - }); - }) + return new Promise(async resolve => { + fetch("/instances/data.json") + .then(response => response.text()) + .then(async data => { + let dataJson = JSON.parse(data) + for (let i = 0; i < frontends.length; i++) { + redirects[frontends[i]] = dataJson[frontends[i]] + } + browser.storage.local.set( + { + disableQuora: false, + + quoraRedirects: redirects, + + quetreNormalRedirectsChecks: [...redirects.quetre.normal], + quetreNormalCustomRedirects: [], + + quetreTorRedirectsChecks: [...redirects.quetre.tor], + quetreTorCustomRedirects: [], + + quetreI2pRedirectsChecks: [...redirects.quetre.i2p], + quetreI2pCustomRedirects: [], + + quetreLokiRedirectsChecks: [...redirects.quetre.loki], + quetreLokiCustomRedirects: [], + }, + () => resolve() + ) + }) + }) } export default { - setRedirects, + setRedirects, - redirect, - reverse, - switchInstance, + redirect, + reverse, + switchInstance, - initDefaults -}; + initDefaults, +} diff --git a/src/assets/javascripts/reddit.js b/src/assets/javascripts/reddit.js index bc7b687f..699dcf1a 100644 --- a/src/assets/javascripts/reddit.js +++ b/src/assets/javascripts/reddit.js @@ -1,264 +1,261 @@ -window.browser = window.browser || window.chrome; +window.browser = window.browser || window.chrome -import utils from './utils.js' +import utils from "./utils.js" -const targets = [ - /^https?:\/{2}(www\.|old\.|np\.|new\.|amp\.|)reddit\.com/, - /^https?:\/{2}(i\.|preview\.)redd\.it/, -]; -let redirects = {}; +const targets = [/^https?:\/{2}(www\.|old\.|np\.|new\.|amp\.|)reddit\.com/, /^https?:\/{2}(i\.|preview\.)redd\.it/] +let redirects = {} const frontends = new Array("libreddit", "teddit") const protocols = new Array("normal", "tor", "i2p", "loki") for (let i = 0; i < frontends.length; i++) { - redirects[frontends[i]] = {} - for (let x = 0; x < protocols.length; x++) { - redirects[frontends[i]][protocols[x]] = [] - } + redirects[frontends[i]] = {} + for (let x = 0; x < protocols.length; x++) { + redirects[frontends[i]][protocols[x]] = [] + } } function setRedirects(val) { - browser.storage.local.get('cloudflareBlackList', r => { - redirects = val; - libredditNormalRedirectsChecks = [...redirects.libreddit.normal]; - tedditNormalRedirectsChecks = [...redirects.teddit.normal] - for (const instance of r.cloudflareBlackList) { - const a = libredditNormalRedirectsChecks.indexOf(instance); - if (a > -1) libredditNormalRedirectsChecks.splice(a, 1); - - const b = tedditNormalRedirectsChecks.indexOf(instance); - if (b > -1) tedditNormalRedirectsChecks.splice(b, 1); - } - browser.storage.local.set({ - redditRedirects: redirects, - libredditNormalRedirectsChecks, - tedditNormalRedirectsChecks - }) - }) + browser.storage.local.get("cloudflareBlackList", r => { + redirects = val + libredditNormalRedirectsChecks = [...redirects.libreddit.normal] + tedditNormalRedirectsChecks = [...redirects.teddit.normal] + for (const instance of r.cloudflareBlackList) { + const a = libredditNormalRedirectsChecks.indexOf(instance) + if (a > -1) libredditNormalRedirectsChecks.splice(a, 1) + + const b = tedditNormalRedirectsChecks.indexOf(instance) + if (b > -1) tedditNormalRedirectsChecks.splice(b, 1) + } + browser.storage.local.set({ + redditRedirects: redirects, + libredditNormalRedirectsChecks, + tedditNormalRedirectsChecks, + }) + }) } -let - disableReddit, - redditFrontend, - redditRedirects, - protocol, - protocolFallback, - - libredditNormalRedirectsChecks, - libredditNormalCustomRedirects, - - libredditTorRedirectsChecks, - libredditTorCustomRedirects, - - libredditI2pCustomRedirects, - - libredditLokiCustomRedirects, - - tedditNormalRedirectsChecks, - tedditNormalCustomRedirects, - - tedditTorRedirectsChecks, - tedditTorCustomRedirects, - - tedditI2pCustomRedirects, - tedditLokiCustomRedirects; +let disableReddit, + redditFrontend, + redditRedirects, + protocol, + protocolFallback, + libredditNormalRedirectsChecks, + libredditNormalCustomRedirects, + libredditTorRedirectsChecks, + libredditTorCustomRedirects, + libredditI2pCustomRedirects, + libredditLokiCustomRedirects, + tedditNormalRedirectsChecks, + tedditNormalCustomRedirects, + tedditTorRedirectsChecks, + tedditTorCustomRedirects, + tedditI2pCustomRedirects, + tedditLokiCustomRedirects function init() { - return new Promise(resolve => { - browser.storage.local.get( - [ - "disableReddit", - "redditFrontend", - "redditRedirects", - "protocol", - "protocolFallback", - "libredditNormalRedirectsChecks", - "libredditNormalCustomRedirects", - "libredditTorRedirectsChecks", - "libredditTorCustomRedirects", - "libredditI2pCustomRedirects", - "libredditLokiCustomRedirects", - "tedditNormalRedirectsChecks", - "tedditNormalCustomRedirects", - "tedditTorRedirectsChecks", - "tedditTorCustomRedirects", - "tedditI2pCustomRedirects", - "tedditLokiCustomRedirects" - ], - r => { - disableReddit = r.disableReddit; - redditFrontend = r.redditFrontend; - redditRedirects = r.redditRedirects; - protocol = r.protocol; - protocolFallback = r.protocolFallback; - libredditNormalRedirectsChecks = r.libredditNormalRedirectsChecks; - libredditNormalCustomRedirects = r.libredditNormalCustomRedirects; - libredditTorRedirectsChecks = r.libredditTorRedirectsChecks; - libredditTorCustomRedirects = r.libredditTorCustomRedirects; - libredditI2pCustomRedirects = r.libredditI2pCustomRedirects; - libredditLokiCustomRedirects = r.libredditLokiCustomRedirects; - tedditNormalRedirectsChecks = r.tedditNormalRedirectsChecks; - tedditNormalCustomRedirects = r.tedditNormalCustomRedirects; - tedditTorRedirectsChecks = r.tedditTorRedirectsChecks; - tedditTorCustomRedirects = r.tedditTorCustomRedirects; - tedditI2pCustomRedirects = r.tedditI2pCustomRedirects; - tedditLokiCustomRedirects = r.tedditLokiCustomRedirects; - resolve(); - } - ) - }) + return new Promise(resolve => { + browser.storage.local.get( + [ + "disableReddit", + "redditFrontend", + "redditRedirects", + "protocol", + "protocolFallback", + "libredditNormalRedirectsChecks", + "libredditNormalCustomRedirects", + "libredditTorRedirectsChecks", + "libredditTorCustomRedirects", + "libredditI2pCustomRedirects", + "libredditLokiCustomRedirects", + "tedditNormalRedirectsChecks", + "tedditNormalCustomRedirects", + "tedditTorRedirectsChecks", + "tedditTorCustomRedirects", + "tedditI2pCustomRedirects", + "tedditLokiCustomRedirects", + ], + r => { + disableReddit = r.disableReddit + redditFrontend = r.redditFrontend + redditRedirects = r.redditRedirects + protocol = r.protocol + protocolFallback = r.protocolFallback + libredditNormalRedirectsChecks = r.libredditNormalRedirectsChecks + libredditNormalCustomRedirects = r.libredditNormalCustomRedirects + libredditTorRedirectsChecks = r.libredditTorRedirectsChecks + libredditTorCustomRedirects = r.libredditTorCustomRedirects + libredditI2pCustomRedirects = r.libredditI2pCustomRedirects + libredditLokiCustomRedirects = r.libredditLokiCustomRedirects + tedditNormalRedirectsChecks = r.tedditNormalRedirectsChecks + tedditNormalCustomRedirects = r.tedditNormalCustomRedirects + tedditTorRedirectsChecks = r.tedditTorRedirectsChecks + tedditTorCustomRedirects = r.tedditTorCustomRedirects + tedditI2pCustomRedirects = r.tedditI2pCustomRedirects + tedditLokiCustomRedirects = r.tedditLokiCustomRedirects + resolve() + } + ) + }) } -init(); +init() browser.storage.onChanged.addListener(init) function initLibredditCookies(test, from) { - return new Promise(async resolve => { - await init(); - const protocolHost = utils.protocolHost(from); - if (![ - ...libredditNormalRedirectsChecks, - ...libredditTorRedirectsChecks, - ...libredditNormalCustomRedirects, - ...libredditTorCustomRedirects, - ...libredditI2pCustomRedirects, - ...libredditLokiCustomRedirects - ].includes(protocolHost)) { resolve(); return; } - - if (!test) { - let checkedInstances = []; - if (protocol == 'loki') checkedInstances = [...libredditLokiCustomRedirects]; - else if (protocol == 'i2p') checkedInstances = [...libredditI2pCustomRedirects]; - else if (protocol == 'tor') checkedInstances = [...libredditTorRedirectsChecks, ...libredditTorCustomRedirects]; - if ((checkedInstances.length === 0 && protocolFallback) || protocol == 'normal') { - checkedInstances = [...libredditNormalRedirectsChecks, ...libredditNormalCustomRedirects]; - } - await utils.copyCookie('libreddit', from, checkedInstances, "theme"); - await utils.copyCookie('libreddit', from, checkedInstances, "front_page"); - await utils.copyCookie('libreddit', from, checkedInstances, "layout"); - await utils.copyCookie('libreddit', from, checkedInstances, "wide"); - await utils.copyCookie('libreddit', from, checkedInstances, "post_sort"); - await utils.copyCookie('libreddit', from, checkedInstances, "comment_sort"); - await utils.copyCookie('libreddit', from, checkedInstances, "show_nsfw"); - await utils.copyCookie('libreddit', from, checkedInstances, "autoplay_videos"); - await utils.copyCookie('libreddit', from, checkedInstances, "use_hls"); - await utils.copyCookie('libreddit', from, checkedInstances, "hide_hls_notification"); - await utils.copyCookie('libreddit', from, checkedInstances, "subscriptions"); - await utils.copyCookie('libreddit', from, checkedInstances, "filters"); - } - resolve(true); - }) + return new Promise(async resolve => { + await init() + const protocolHost = utils.protocolHost(from) + if ( + ![ + ...libredditNormalRedirectsChecks, + ...libredditTorRedirectsChecks, + ...libredditNormalCustomRedirects, + ...libredditTorCustomRedirects, + ...libredditI2pCustomRedirects, + ...libredditLokiCustomRedirects, + ].includes(protocolHost) + ) { + resolve() + return + } + + if (!test) { + let checkedInstances = [] + if (protocol == "loki") checkedInstances = [...libredditLokiCustomRedirects] + else if (protocol == "i2p") checkedInstances = [...libredditI2pCustomRedirects] + else if (protocol == "tor") checkedInstances = [...libredditTorRedirectsChecks, ...libredditTorCustomRedirects] + if ((checkedInstances.length === 0 && protocolFallback) || protocol == "normal") { + checkedInstances = [...libredditNormalRedirectsChecks, ...libredditNormalCustomRedirects] + } + await utils.copyCookie("libreddit", from, checkedInstances, "theme") + await utils.copyCookie("libreddit", from, checkedInstances, "front_page") + await utils.copyCookie("libreddit", from, checkedInstances, "layout") + await utils.copyCookie("libreddit", from, checkedInstances, "wide") + await utils.copyCookie("libreddit", from, checkedInstances, "post_sort") + await utils.copyCookie("libreddit", from, checkedInstances, "comment_sort") + await utils.copyCookie("libreddit", from, checkedInstances, "show_nsfw") + await utils.copyCookie("libreddit", from, checkedInstances, "autoplay_videos") + await utils.copyCookie("libreddit", from, checkedInstances, "use_hls") + await utils.copyCookie("libreddit", from, checkedInstances, "hide_hls_notification") + await utils.copyCookie("libreddit", from, checkedInstances, "subscriptions") + await utils.copyCookie("libreddit", from, checkedInstances, "filters") + } + resolve(true) + }) } function pasteLibredditCookies() { - return new Promise(async resolve => { - await init(); - if (disableReddit || redditFrontend != 'libreddit' || protocol === undefined) { resolve(); return; } - let checkedInstances = []; - if (protocol == 'loki') checkedInstances = [...libredditLokiCustomRedirects]; - else if (protocol == 'i2p') checkedInstances = [...libredditI2pCustomRedirects]; - else if (protocol == 'tor') checkedInstances = [...libredditTorRedirectsChecks, ...libredditTorCustomRedirects]; - if ((checkedInstances.length === 0 && protocolFallback) || protocol == 'normal') { - checkedInstances = [...libredditNormalRedirectsChecks, ...libredditNormalCustomRedirects]; - } - utils.getCookiesFromStorage('libreddit', checkedInstances, "theme"); - utils.getCookiesFromStorage('libreddit', checkedInstances, "front_page"); - utils.getCookiesFromStorage('libreddit', checkedInstances, "layout"); - utils.getCookiesFromStorage('libreddit', checkedInstances, "wide"); - utils.getCookiesFromStorage('libreddit', checkedInstances, "post_sort"); - utils.getCookiesFromStorage('libreddit', checkedInstances, "comment_sort"); - utils.getCookiesFromStorage('libreddit', checkedInstances, "show_nsfw"); - utils.getCookiesFromStorage('libreddit', checkedInstances, "autoplay_videos"); - utils.getCookiesFromStorage('libreddit', checkedInstances, "use_hls"); - utils.getCookiesFromStorage('libreddit', checkedInstances, "hide_hls_notification"); - utils.getCookiesFromStorage('libreddit', checkedInstances, "subscriptions"); - utils.getCookiesFromStorage('libreddit', checkedInstances, "filters"); - resolve(); - }) + return new Promise(async resolve => { + await init() + if (disableReddit || redditFrontend != "libreddit" || protocol === undefined) { + resolve() + return + } + let checkedInstances = [] + if (protocol == "loki") checkedInstances = [...libredditLokiCustomRedirects] + else if (protocol == "i2p") checkedInstances = [...libredditI2pCustomRedirects] + else if (protocol == "tor") checkedInstances = [...libredditTorRedirectsChecks, ...libredditTorCustomRedirects] + if ((checkedInstances.length === 0 && protocolFallback) || protocol == "normal") { + checkedInstances = [...libredditNormalRedirectsChecks, ...libredditNormalCustomRedirects] + } + utils.getCookiesFromStorage("libreddit", checkedInstances, "theme") + utils.getCookiesFromStorage("libreddit", checkedInstances, "front_page") + utils.getCookiesFromStorage("libreddit", checkedInstances, "layout") + utils.getCookiesFromStorage("libreddit", checkedInstances, "wide") + utils.getCookiesFromStorage("libreddit", checkedInstances, "post_sort") + utils.getCookiesFromStorage("libreddit", checkedInstances, "comment_sort") + utils.getCookiesFromStorage("libreddit", checkedInstances, "show_nsfw") + utils.getCookiesFromStorage("libreddit", checkedInstances, "autoplay_videos") + utils.getCookiesFromStorage("libreddit", checkedInstances, "use_hls") + utils.getCookiesFromStorage("libreddit", checkedInstances, "hide_hls_notification") + utils.getCookiesFromStorage("libreddit", checkedInstances, "subscriptions") + utils.getCookiesFromStorage("libreddit", checkedInstances, "filters") + resolve() + }) } function initTedditCookies(test, from) { - return new Promise(async resolve => { - await init(); - let protocolHost = utils.protocolHost(from); - if (![ - ...tedditNormalRedirectsChecks, - ...tedditTorRedirectsChecks, - ...tedditNormalCustomRedirects, - ...tedditTorCustomRedirects, - ...tedditI2pCustomRedirects, - ...tedditI2pCustomRedirects - - ].includes(protocolHost)) resolve(); - - if (!test) { - let checkedInstances = []; - if (protocol == 'loki') checkedInstances = [...tedditLokiCustomRedirects]; - else if (protocol == 'i2p') checkedInstances = [...tedditI2pCustomRedirects]; - else if (protocol == 'tor') checkedInstances = [...tedditTorRedirectsChecks, ...tedditTorCustomRedirects]; - if ((checkedInstances.length === 0 && protocolFallback) || protocol == 'normal') { - checkedInstances = [...tedditNormalRedirectsChecks, ...tedditNormalCustomRedirects]; - } - await utils.copyCookie('teddit', from, checkedInstances, 'collapse_child_comments') - await utils.copyCookie('teddit', from, checkedInstances, 'domain_instagram') - await utils.copyCookie('teddit', from, checkedInstances, 'domain_twitter') - await utils.copyCookie('teddit', from, checkedInstances, 'domain_youtube') - await utils.copyCookie('teddit', from, checkedInstances, 'flairs') - await utils.copyCookie('teddit', from, checkedInstances, 'highlight_controversial') - await utils.copyCookie('teddit', from, checkedInstances, 'nsfw_enabled') - await utils.copyCookie('teddit', from, checkedInstances, 'post_media_max_height') - await utils.copyCookie('teddit', from, checkedInstances, 'show_upvoted_percentage') - await utils.copyCookie('teddit', from, checkedInstances, 'show_upvotes') - await utils.copyCookie('teddit', from, checkedInstances, 'theme') - await utils.copyCookie('teddit', from, checkedInstances, 'videos_muted') - } - resolve(true); - }) + return new Promise(async resolve => { + await init() + let protocolHost = utils.protocolHost(from) + if ( + ![...tedditNormalRedirectsChecks, ...tedditTorRedirectsChecks, ...tedditNormalCustomRedirects, ...tedditTorCustomRedirects, ...tedditI2pCustomRedirects, ...tedditI2pCustomRedirects].includes( + protocolHost + ) + ) + resolve() + + if (!test) { + let checkedInstances = [] + if (protocol == "loki") checkedInstances = [...tedditLokiCustomRedirects] + else if (protocol == "i2p") checkedInstances = [...tedditI2pCustomRedirects] + else if (protocol == "tor") checkedInstances = [...tedditTorRedirectsChecks, ...tedditTorCustomRedirects] + if ((checkedInstances.length === 0 && protocolFallback) || protocol == "normal") { + checkedInstances = [...tedditNormalRedirectsChecks, ...tedditNormalCustomRedirects] + } + await utils.copyCookie("teddit", from, checkedInstances, "collapse_child_comments") + await utils.copyCookie("teddit", from, checkedInstances, "domain_instagram") + await utils.copyCookie("teddit", from, checkedInstances, "domain_twitter") + await utils.copyCookie("teddit", from, checkedInstances, "domain_youtube") + await utils.copyCookie("teddit", from, checkedInstances, "flairs") + await utils.copyCookie("teddit", from, checkedInstances, "highlight_controversial") + await utils.copyCookie("teddit", from, checkedInstances, "nsfw_enabled") + await utils.copyCookie("teddit", from, checkedInstances, "post_media_max_height") + await utils.copyCookie("teddit", from, checkedInstances, "show_upvoted_percentage") + await utils.copyCookie("teddit", from, checkedInstances, "show_upvotes") + await utils.copyCookie("teddit", from, checkedInstances, "theme") + await utils.copyCookie("teddit", from, checkedInstances, "videos_muted") + } + resolve(true) + }) } function pasteTedditCookies() { - return new Promise(async resolve => { - await init(); - if (disableReddit || redditFrontend != 'teddit' || protocol === undefined) { resolve(); return; } - let checkedInstances = []; - if (protocol == 'loki') checkedInstances = [...tedditLokiCustomRedirects]; - else if (protocol == 'i2p') checkedInstances = [...tedditI2pCustomRedirects]; - else if (protocol == 'tor') checkedInstances = [...tedditTorRedirectsChecks, ...tedditTorCustomRedirects]; - if ((checkedInstances.length === 0 && protocolFallback) || protocol == 'normal') { - checkedInstances = [...tedditNormalRedirectsChecks, ...tedditNormalCustomRedirects]; - } - utils.getCookiesFromStorage('teddit', checkedInstances, 'collapse_child_comments') - utils.getCookiesFromStorage('teddit', checkedInstances, 'domain_instagram') - utils.getCookiesFromStorage('teddit', checkedInstances, 'domain_twitter') - utils.getCookiesFromStorage('teddit', checkedInstances, 'domain_youtube') - utils.getCookiesFromStorage('teddit', checkedInstances, 'flairs') - utils.getCookiesFromStorage('teddit', checkedInstances, 'highlight_controversial') - utils.getCookiesFromStorage('teddit', checkedInstances, 'nsfw_enabled') - utils.getCookiesFromStorage('teddit', checkedInstances, 'post_media_max_height') - utils.getCookiesFromStorage('teddit', checkedInstances, 'show_upvoted_percentage') - utils.getCookiesFromStorage('teddit', checkedInstances, 'show_upvotes') - utils.getCookiesFromStorage('teddit', checkedInstances, 'theme') - utils.getCookiesFromStorage('teddit', checkedInstances, 'videos_muted') - resolve(); - }) + return new Promise(async resolve => { + await init() + if (disableReddit || redditFrontend != "teddit" || protocol === undefined) { + resolve() + return + } + let checkedInstances = [] + if (protocol == "loki") checkedInstances = [...tedditLokiCustomRedirects] + else if (protocol == "i2p") checkedInstances = [...tedditI2pCustomRedirects] + else if (protocol == "tor") checkedInstances = [...tedditTorRedirectsChecks, ...tedditTorCustomRedirects] + if ((checkedInstances.length === 0 && protocolFallback) || protocol == "normal") { + checkedInstances = [...tedditNormalRedirectsChecks, ...tedditNormalCustomRedirects] + } + utils.getCookiesFromStorage("teddit", checkedInstances, "collapse_child_comments") + utils.getCookiesFromStorage("teddit", checkedInstances, "domain_instagram") + utils.getCookiesFromStorage("teddit", checkedInstances, "domain_twitter") + utils.getCookiesFromStorage("teddit", checkedInstances, "domain_youtube") + utils.getCookiesFromStorage("teddit", checkedInstances, "flairs") + utils.getCookiesFromStorage("teddit", checkedInstances, "highlight_controversial") + utils.getCookiesFromStorage("teddit", checkedInstances, "nsfw_enabled") + utils.getCookiesFromStorage("teddit", checkedInstances, "post_media_max_height") + utils.getCookiesFromStorage("teddit", checkedInstances, "show_upvoted_percentage") + utils.getCookiesFromStorage("teddit", checkedInstances, "show_upvotes") + utils.getCookiesFromStorage("teddit", checkedInstances, "theme") + utils.getCookiesFromStorage("teddit", checkedInstances, "videos_muted") + resolve() + }) } function all() { - return [ - ...redditRedirects.libreddit.normal, - ...redditRedirects.libreddit.tor, - ...redditRedirects.teddit.normal, - ...redditRedirects.teddit.tor, - ...libredditNormalCustomRedirects, - ...libredditTorCustomRedirects, - ...libredditI2pCustomRedirects, - ...libredditLokiCustomRedirects, - ...tedditNormalCustomRedirects, - ...tedditTorCustomRedirects, - ...tedditI2pCustomRedirects, - ...tedditLokiCustomRedirects - ]; + return [ + ...redditRedirects.libreddit.normal, + ...redditRedirects.libreddit.tor, + ...redditRedirects.teddit.normal, + ...redditRedirects.teddit.tor, + ...libredditNormalCustomRedirects, + ...libredditTorCustomRedirects, + ...libredditI2pCustomRedirects, + ...libredditLokiCustomRedirects, + ...tedditNormalCustomRedirects, + ...tedditTorCustomRedirects, + ...tedditI2pCustomRedirects, + ...tedditLokiCustomRedirects, + ] } // https://libreddit.exonip.de/vid/1mq8d0ma3yk81/720.mp4 @@ -267,188 +264,189 @@ function all() { // https://teddit.net/vids/1mq8d0ma3yk81.mp4 // https://teddit.net/pics/w:null_4v3t1vgvrzk81.png - // redd.it/t5379n // https://v.redd.it/z08avb339n801/DASH_1_2_M // https://i.redd.it/bfkhs659tzk81.jpg function redirect(url, type, initiator, disableOverride) { - if (disableReddit && !disableOverride) return; - if (!targets.some(rx => rx.test(url.href))) return; - if (initiator && all().includes(initiator.origin)) return 'BYPASSTAB'; - if (!["main_frame", "xmlhttprequest", "other", "image", "media"].includes(type)) return; - const bypassPaths = /\/(gallery\/poll\/rpan\/settings\/topics)/; - if (url.pathname.match(bypassPaths)) return; - - let libredditInstancesList = []; - let tedditInstancesList = []; - - if (protocol == 'loki') { - libredditInstancesList = [...libredditLokiCustomRedirects]; - tedditInstancesList = [...tedditLokiCustomRedirects]; - } - else if (protocol == 'i2p') { - libredditInstancesList = [...libredditI2pCustomRedirects]; - tedditInstancesList = [...tedditI2pCustomRedirects]; - } - else if (protocol == 'tor') { - libredditInstancesList = [...libredditTorRedirectsChecks, ...libredditTorCustomRedirects]; - tedditInstancesList = [...tedditTorRedirectsChecks, ...tedditTorCustomRedirects]; - } - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - libredditInstancesList = [...libredditNormalRedirectsChecks, ...libredditNormalCustomRedirects]; - tedditInstancesList = [...tedditNormalRedirectsChecks, ...tedditNormalCustomRedirects]; - } - - if (url.host === "i.redd.it") { - if (redditFrontend == 'teddit') { - if (tedditInstancesList.length === 0) return; - let tedditRandomInstance = utils.getRandomInstance(tedditInstancesList); - return `${tedditRandomInstance}/pics/w:null_${url.pathname.substring(1)}${url.search}`; - } - if (redditFrontend == 'libreddit') { - if (libredditInstancesList.length === 0) return; - let libredditRandomInstance = utils.getRandomInstance(libredditInstancesList); - return `${libredditRandomInstance}/img${url.pathname}${url.search}` - } - } - else if (url.host === "redd.it") { - if (redditFrontend == 'libreddit' && !url.pathname.match(/^\/+[^\/]+\/+[^\/]/)) { - if (libredditInstancesList.length === 0) return; - let libredditRandomInstance = utils.getRandomInstance(libredditInstancesList); - // https://redd.it/foo => https://libredd.it/comments/foo - return `${libredditRandomInstance}/comments${url.pathname}${url.search}`; - } - if (redditFrontend == 'teddit' && !url.pathname.match(/^\/+[^\/]+\/+[^\/]/)) { - if (tedditInstancesList.length === 0) return; - let tedditRandomInstance = utils.getRandomInstance(tedditInstancesList); - // https://redd.it/foo => https://teddit.net/comments/foo - return `${tedditRandomInstance}/comments${url.pathname}${url.search}` - } - } - else if (url.host === 'preview.redd.it') { - if (redditFrontend == 'teddit') return; - if (redditFrontend == 'libreddit') { - if (libredditInstancesList.length === 0) return; - const libredditRandomInstance = utils.getRandomInstance(libredditInstancesList); - return `${libredditRandomInstance}/preview/pre${url.pathname}${url.search}`; - } - } - - let randomInstance; - if (redditFrontend == 'libreddit') { - if (libredditInstancesList.length === 0) return; - randomInstance = utils.getRandomInstance(libredditInstancesList); - } - if (redditFrontend == 'teddit') { - if (tedditInstancesList.length === 0) return; - randomInstance = utils.getRandomInstance(tedditInstancesList); - } - return `${randomInstance}${url.pathname}${url.search}`; + if (disableReddit && !disableOverride) return + if (!targets.some(rx => rx.test(url.href))) return + if (initiator && all().includes(initiator.origin)) return "BYPASSTAB" + if (!["main_frame", "xmlhttprequest", "other", "image", "media"].includes(type)) return + const bypassPaths = /\/(gallery\/poll\/rpan\/settings\/topics)/ + if (url.pathname.match(bypassPaths)) return + + let libredditInstancesList = [] + let tedditInstancesList = [] + + if (protocol == "loki") { + libredditInstancesList = [...libredditLokiCustomRedirects] + tedditInstancesList = [...tedditLokiCustomRedirects] + } else if (protocol == "i2p") { + libredditInstancesList = [...libredditI2pCustomRedirects] + tedditInstancesList = [...tedditI2pCustomRedirects] + } else if (protocol == "tor") { + libredditInstancesList = [...libredditTorRedirectsChecks, ...libredditTorCustomRedirects] + tedditInstancesList = [...tedditTorRedirectsChecks, ...tedditTorCustomRedirects] + } + if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { + libredditInstancesList = [...libredditNormalRedirectsChecks, ...libredditNormalCustomRedirects] + tedditInstancesList = [...tedditNormalRedirectsChecks, ...tedditNormalCustomRedirects] + } + + if (url.host === "i.redd.it") { + if (redditFrontend == "teddit") { + if (tedditInstancesList.length === 0) return + let tedditRandomInstance = utils.getRandomInstance(tedditInstancesList) + return `${tedditRandomInstance}/pics/w:null_${url.pathname.substring(1)}${url.search}` + } + if (redditFrontend == "libreddit") { + if (libredditInstancesList.length === 0) return + let libredditRandomInstance = utils.getRandomInstance(libredditInstancesList) + return `${libredditRandomInstance}/img${url.pathname}${url.search}` + } + } else if (url.host === "redd.it") { + if (redditFrontend == "libreddit" && !url.pathname.match(/^\/+[^\/]+\/+[^\/]/)) { + if (libredditInstancesList.length === 0) return + let libredditRandomInstance = utils.getRandomInstance(libredditInstancesList) + // https://redd.it/foo => https://libredd.it/comments/foo + return `${libredditRandomInstance}/comments${url.pathname}${url.search}` + } + if (redditFrontend == "teddit" && !url.pathname.match(/^\/+[^\/]+\/+[^\/]/)) { + if (tedditInstancesList.length === 0) return + let tedditRandomInstance = utils.getRandomInstance(tedditInstancesList) + // https://redd.it/foo => https://teddit.net/comments/foo + return `${tedditRandomInstance}/comments${url.pathname}${url.search}` + } + } else if (url.host === "preview.redd.it") { + if (redditFrontend == "teddit") return + if (redditFrontend == "libreddit") { + if (libredditInstancesList.length === 0) return + const libredditRandomInstance = utils.getRandomInstance(libredditInstancesList) + return `${libredditRandomInstance}/preview/pre${url.pathname}${url.search}` + } + } + + let randomInstance + if (redditFrontend == "libreddit") { + if (libredditInstancesList.length === 0) return + randomInstance = utils.getRandomInstance(libredditInstancesList) + } + if (redditFrontend == "teddit") { + if (tedditInstancesList.length === 0) return + randomInstance = utils.getRandomInstance(tedditInstancesList) + } + return `${randomInstance}${url.pathname}${url.search}` } function switchInstance(url, disableOverride) { - return new Promise(async resolve => { - await init(); - if (disableReddit && !disableOverride) { resolve(); return; } - const protocolHost = utils.protocolHost(url); - if (!all().includes(protocolHost)) { resolve(); return; } - let instancesList = []; - if (redditFrontend == 'libreddit') { - if (protocol == 'loki') instancesList = [...libredditLokiCustomRedirects]; - else if (protocol == 'i2p') instancesList = [...libredditI2pCustomRedirects]; - else if (protocol == 'tor') instancesList = [...libredditTorRedirectsChecks, ...libredditTorCustomRedirects]; - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - instancesList = [...libredditNormalRedirectsChecks, ...libredditNormalCustomRedirects]; - } - if ([ - ...redditRedirects.teddit.normal, - ...redditRedirects.teddit.tor - ].includes(protocolHost)) url.pathname = url.pathname.replace("/pics/w:null_", "/img/"); - } - else if (redditFrontend == 'teddit') { - if (protocol == 'loki') instancesList = [...tedditLokiCustomRedirects]; - else if (protocol == 'i2p') instancesList = [...tedditI2pCustomRedirects]; - else if (protocol == 'tor') instancesList = [...tedditTorRedirectsChecks, ...tedditTorCustomRedirects]; - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - instancesList = [...tedditNormalRedirectsChecks, ...tedditNormalCustomRedirects]; - } - if ([ - ...redditRedirects.libreddit.normal, - ...redditRedirects.libreddit.tor - ].includes(protocolHost) - ) url.pathname = url.pathname.replace("/img/", "/pics/w:null_"); - } - - const i = instancesList.indexOf(protocolHost); - if (i > -1) instancesList.splice(i, 1); - if (instancesList.length === 0) { resolve(); return; } - - const randomInstance = utils.getRandomInstance(instancesList); - resolve(`${randomInstance}${url.pathname}${url.search}`); - }) + return new Promise(async resolve => { + await init() + if (disableReddit && !disableOverride) { + resolve() + return + } + const protocolHost = utils.protocolHost(url) + if (!all().includes(protocolHost)) { + resolve() + return + } + let instancesList = [] + if (redditFrontend == "libreddit") { + if (protocol == "loki") instancesList = [...libredditLokiCustomRedirects] + else if (protocol == "i2p") instancesList = [...libredditI2pCustomRedirects] + else if (protocol == "tor") instancesList = [...libredditTorRedirectsChecks, ...libredditTorCustomRedirects] + if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { + instancesList = [...libredditNormalRedirectsChecks, ...libredditNormalCustomRedirects] + } + if ([...redditRedirects.teddit.normal, ...redditRedirects.teddit.tor].includes(protocolHost)) url.pathname = url.pathname.replace("/pics/w:null_", "/img/") + } else if (redditFrontend == "teddit") { + if (protocol == "loki") instancesList = [...tedditLokiCustomRedirects] + else if (protocol == "i2p") instancesList = [...tedditI2pCustomRedirects] + else if (protocol == "tor") instancesList = [...tedditTorRedirectsChecks, ...tedditTorCustomRedirects] + if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { + instancesList = [...tedditNormalRedirectsChecks, ...tedditNormalCustomRedirects] + } + if ([...redditRedirects.libreddit.normal, ...redditRedirects.libreddit.tor].includes(protocolHost)) url.pathname = url.pathname.replace("/img/", "/pics/w:null_") + } + + const i = instancesList.indexOf(protocolHost) + if (i > -1) instancesList.splice(i, 1) + if (instancesList.length === 0) { + resolve() + return + } + + const randomInstance = utils.getRandomInstance(instancesList) + resolve(`${randomInstance}${url.pathname}${url.search}`) + }) } function initDefaults() { - return new Promise(resolve => { - fetch('/instances/data.json').then(response => response.text()).then(async data => { - let dataJson = JSON.parse(data); - for (let i = 0; i < frontends.length; i++) { - redirects[frontends[i]] = dataJson[frontends[i]] - } - browser.storage.local.get('cloudflareBlackList', async r => { - libredditNormalRedirectsChecks = [...redirects.libreddit.normal]; - tedditNormalRedirectsChecks = [...redirects.teddit.normal] - for (const instance of r.cloudflareBlackList) { - let i; - - i = libredditNormalRedirectsChecks.indexOf(instance); - if (i > -1) libredditNormalRedirectsChecks.splice(i, 1); - - i = tedditNormalRedirectsChecks.indexOf(instance); - if (i > -1) tedditNormalRedirectsChecks.splice(i, 1); - } - browser.storage.local.set({ - disableReddit: false, - redditFrontend: 'libreddit', - redditRedirects: redirects, - - libredditNormalRedirectsChecks: libredditNormalRedirectsChecks, - libredditNormalCustomRedirects: [], - - libredditTorRedirectsChecks: [...redirects.libreddit.tor], - libredditTorCustomRedirects: [], - - libredditI2pRedirectsChecks: [...redirects.libreddit.i2p], - libredditI2pCustomRedirects: [], - - libredditLokiRedirectsChecks: [...redirects.libreddit.loki], - libredditLokiCustomRedirects: [], - - tedditNormalRedirectsChecks: tedditNormalRedirectsChecks, - tedditNormalCustomRedirects: [], - - tedditTorRedirectsChecks: [...redirects.teddit.tor], - tedditTorCustomRedirects: [], - - tedditI2pRedirectsChecks: [...redirects.teddit.i2p], - tedditI2pCustomRedirects: [], - - tedditLokiRedirectsChecks: [...redirects.teddit.loki], - tedditLokiCustomRedirects: [] - }, () => resolve()); - }); - }); - }); + return new Promise(resolve => { + fetch("/instances/data.json") + .then(response => response.text()) + .then(async data => { + let dataJson = JSON.parse(data) + for (let i = 0; i < frontends.length; i++) { + redirects[frontends[i]] = dataJson[frontends[i]] + } + browser.storage.local.get("cloudflareBlackList", async r => { + libredditNormalRedirectsChecks = [...redirects.libreddit.normal] + tedditNormalRedirectsChecks = [...redirects.teddit.normal] + for (const instance of r.cloudflareBlackList) { + let i + + i = libredditNormalRedirectsChecks.indexOf(instance) + if (i > -1) libredditNormalRedirectsChecks.splice(i, 1) + + i = tedditNormalRedirectsChecks.indexOf(instance) + if (i > -1) tedditNormalRedirectsChecks.splice(i, 1) + } + browser.storage.local.set( + { + disableReddit: false, + redditFrontend: "libreddit", + redditRedirects: redirects, + + libredditNormalRedirectsChecks: libredditNormalRedirectsChecks, + libredditNormalCustomRedirects: [], + + libredditTorRedirectsChecks: [...redirects.libreddit.tor], + libredditTorCustomRedirects: [], + + libredditI2pRedirectsChecks: [...redirects.libreddit.i2p], + libredditI2pCustomRedirects: [], + + libredditLokiRedirectsChecks: [...redirects.libreddit.loki], + libredditLokiCustomRedirects: [], + + tedditNormalRedirectsChecks: tedditNormalRedirectsChecks, + tedditNormalCustomRedirects: [], + + tedditTorRedirectsChecks: [...redirects.teddit.tor], + tedditTorCustomRedirects: [], + + tedditI2pRedirectsChecks: [...redirects.teddit.i2p], + tedditI2pCustomRedirects: [], + + tedditLokiRedirectsChecks: [...redirects.teddit.loki], + tedditLokiCustomRedirects: [], + }, + () => resolve() + ) + }) + }) + }) } export default { - setRedirects, - initLibredditCookies, - pasteLibredditCookies, - initTedditCookies, - pasteTedditCookies, - - redirect, - initDefaults, - switchInstance, -}; + setRedirects, + initLibredditCookies, + pasteLibredditCookies, + initTedditCookies, + pasteTedditCookies, + + redirect, + initDefaults, + switchInstance, +} diff --git a/src/assets/javascripts/reuters.js b/src/assets/javascripts/reuters.js index e1d18a40..e4afa19c 100644 --- a/src/assets/javascripts/reuters.js +++ b/src/assets/javascripts/reuters.js @@ -1,152 +1,140 @@ -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": [], - "i2p": [], - "loki": [] - } -} +window.browser = window.browser || window.chrome + +import utils from "./utils.js" + +const targets = [/^https?:\/{2}(www\.|)reuters\.com.*/] -// const frontends = new Array("neuters") -// const protocols = new Array("normal", "tor", "i2p", "loki") +const frontends = new Array("neuters") +const protocols = new Array("normal", "tor", "i2p", "loki") -// for (let i = 0; i < frontends.length; i++) { -// redirects[frontends[i]] = {} -// for (let x = 0; x < protocols.length; x++) { -// redirects[frontends[i]][protocols[x]] = [] -// } -// } +let redirects = {} + +for (let i = 0; i < frontends.length; i++) { + redirects[frontends[i]] = {} + for (let x = 0; x < protocols.length; x++) { + redirects[frontends[i]][protocols[x]] = [] + } +} function setRedirects(val) { - browser.storage.local.get('cloudflareBlackList', r => { - redirects.neuters = val; - neutersNormalRedirectsChecks = [...redirects.neuters.normal]; - for (const instance of r.cloudflareBlackList) { - const a = neutersNormalRedirectsChecks.indexOf(instance); - if (a > -1) neutersNormalRedirectsChecks.splice(a, 1); - } - browser.storage.local.set({ - neutersRedirects: redirects, - neutersNormalRedirectsChecks - }) - }) + browser.storage.local.get("cloudflareBlackList", r => { + redirects.neuters = val + neutersNormalRedirectsChecks = [...redirects.neuters.normal] + for (const instance of r.cloudflareBlackList) { + const a = neutersNormalRedirectsChecks.indexOf(instance) + if (a > -1) neutersNormalRedirectsChecks.splice(a, 1) + } + browser.storage.local.set({ + neutersRedirects: redirects, + neutersNormalRedirectsChecks, + }) + }) } -let - disableReuters, - protocol, - protocolFallback, - reutersRedirects, - neutersNormalRedirectsChecks, - neutersNormalCustomRedirects, - neutersTorRedirectsChecks, - neutersTorCustomRedirects, - neutersI2pCustomRedirects, - neutersLokiCustomRedirects; +let disableReuters, + protocol, + protocolFallback, + reutersRedirects, + neutersNormalRedirectsChecks, + neutersNormalCustomRedirects, + neutersTorRedirectsChecks, + neutersTorCustomRedirects, + neutersI2pCustomRedirects, + neutersLokiCustomRedirects function init() { - return new Promise(async resolve => { - browser.storage.local.get( - [ - "disableReuters", - "protocol", - "protocolFallback", - "reutersRedirects", - "neutersNormalRedirectsChecks", - "neutersNormalCustomRedirects", - "neutersTorRedirectsChecks", - "neutersTorCustomRedirects", - "neutersI2pCustomRedirects", - "neutersLokiCustomRedirects" - ], - r => { - disableReuters = r.disableReuters; - protocol = r.protocol; - protocolFallback = r.protocolFallback; - reutersRedirects = r.reutersRedirects; - neutersNormalRedirectsChecks = r.neutersNormalRedirectsChecks; - neutersNormalCustomRedirects = r.neutersNormalCustomRedirects; - neutersTorRedirectsChecks = r.neutersTorRedirectsChecks; - neutersTorCustomRedirects = r.neutersTorCustomRedirects; - neutersI2pCustomRedirects = r.neutersI2pCustomRedirects; - neutersLokiCustomRedirects = r.neutersLokiCustomRedirects; - resolve(); - } - ) - }) + return new Promise(async resolve => { + browser.storage.local.get( + [ + "disableReuters", + "protocol", + "protocolFallback", + "reutersRedirects", + "neutersNormalRedirectsChecks", + "neutersNormalCustomRedirects", + "neutersTorRedirectsChecks", + "neutersTorCustomRedirects", + "neutersI2pCustomRedirects", + "neutersLokiCustomRedirects", + ], + r => { + disableReuters = r.disableReuters + protocol = r.protocol + protocolFallback = r.protocolFallback + reutersRedirects = r.reutersRedirects + neutersNormalRedirectsChecks = r.neutersNormalRedirectsChecks + neutersNormalCustomRedirects = r.neutersNormalCustomRedirects + neutersTorRedirectsChecks = r.neutersTorRedirectsChecks + neutersTorCustomRedirects = r.neutersTorCustomRedirects + neutersI2pCustomRedirects = r.neutersI2pCustomRedirects + neutersLokiCustomRedirects = r.neutersLokiCustomRedirects + resolve() + } + ) + }) } -init(); +init() browser.storage.onChanged.addListener(init) function redirect(url, type, initiator, disableOverride) { - if (disableReuters && !disableOverride) 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 (protocol == 'loki') instancesList = [...neutersLokiCustomRedirects]; - else if (protocol == 'i2p') instancesList = [...neutersI2pCustomRedirects]; - else if (protocol == 'tor') instancesList = [...neutersTorRedirectsChecks, ...neutersTorCustomRedirects]; - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - instancesList = [...neutersNormalRedirectsChecks, ...neutersNormalCustomRedirects]; - } - 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}/`; + if (disableReuters && !disableOverride) 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 (protocol == "loki") instancesList = [...neutersLokiCustomRedirects] + else if (protocol == "i2p") instancesList = [...neutersI2pCustomRedirects] + else if (protocol == "tor") instancesList = [...neutersTorRedirectsChecks, ...neutersTorCustomRedirects] + if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { + instancesList = [...neutersNormalRedirectsChecks, ...neutersNormalCustomRedirects] + } + 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: true, - - reutersRedirects: redirects, - - neutersNormalRedirectsChecks: [...redirects.neuters.normal], - neutersNormalCustomRedirects: [], - - neutersTorRedirectsChecks: [...redirects.neuters.tor], - neutersTorCustomRedirects: [], - - neutersI2pRedirectsChecks: [...redirects.neuters.i2p], - neutersI2pCustomRedirects: [], - - neutersLokiRedirectsChecks: [...redirects.neuters.loki], - neutersLokiCustomRedirects: [] - }, () => resolve()); - }); + return new Promise(async resolve => { + fetch("/instances/data.json") + .then(response => response.text()) + .then(async data => { + let dataJson = JSON.parse(data) + for (let i = 0; i < frontends.length; i++) { + redirects[frontends[i]] = dataJson[frontends[i]] + } + browser.storage.local.set( + { + disableReuters: true, + + reutersRedirects: redirects, + + neutersNormalRedirectsChecks: [...redirects.neuters.normal], + neutersNormalCustomRedirects: [], + + neutersTorRedirectsChecks: [...redirects.neuters.tor], + neutersTorCustomRedirects: [], + + neutersI2pRedirectsChecks: [...redirects.neuters.i2p], + neutersI2pCustomRedirects: [], + + neutersLokiRedirectsChecks: [...redirects.neuters.loki], + neutersLokiCustomRedirects: [], + }, + () => resolve() + ) + }) + }) } export default { - setRedirects, - redirect, - initDefaults -}; + setRedirects, + redirect, + initDefaults, +} diff --git a/src/assets/javascripts/search.js b/src/assets/javascripts/search.js index 15272aa9..b076f5d0 100644 --- a/src/assets/javascripts/search.js +++ b/src/assets/javascripts/search.js @@ -1,16 +1,14 @@ -window.browser = window.browser || window.chrome; +window.browser = window.browser || window.chrome -import utils from './utils.js' +import utils from "./utils.js" -const targets = [ - /^https?:\/{2}search\.libredirect\.invalid/, -]; +const targets = [/^https?:\/{2}search\.libredirect\.invalid/] // Ill optimise all of assets/javascripts at a later date. For now, I'll just add librex and optimse options javascript const frontends = new Array("searx", "searxng", "whoogle", "librex") const protocols = new Array("normal", "tor", "i2p", "loki") const redirects = {} - /* +/* "searx": { "normal": [], "tor": [], @@ -32,640 +30,673 @@ const redirects = {} //let tmp = "{" for (let i = 0; i < frontends.length; i++) { - //redirects.frontends[i] = {} - //redirects.push(frontends[i]) - //tmp = frontends[i] - //tmp = tmp + '\n"' + frontends[i] + '": {' - redirects[frontends[i]] = {} - for (let x = 0; x < protocols.length; x++) { - //redirects.frontends[i].protocols = [] - //tmp = tmp + '\n"' + protocols[x] + '": [],' - redirects[frontends[i]][protocols[x]] = [] - } - //tmp = tmp + "\n}," + //redirects.frontends[i] = {} + //redirects.push(frontends[i]) + //tmp = frontends[i] + //tmp = tmp + '\n"' + frontends[i] + '": {' + redirects[frontends[i]] = {} + for (let x = 0; x < protocols.length; x++) { + //redirects.frontends[i].protocols = [] + //tmp = tmp + '\n"' + protocols[x] + '": [],' + redirects[frontends[i]][protocols[x]] = [] + } + //tmp = tmp + "\n}," } //tmp = tmp + "\n}" //const redirects = JSON.parse(tmp) function setRedirects(val) { - browser.storage.local.get('cloudflareBlackList', r => { - redirects = val; - searxNormalRedirectsChecks = [...redirects.searx.normal]; - searxngNormalRedirectsChecks = [...redirects.searxng.normal]; - whoogleNormalRedirectsChecks = [...redirects.whoogle.normal]; - librexNormalRedirectsChecks = [...redirects.librex.normal]; - for (const instance of r.cloudflareBlackList) { - const a = searxNormalRedirectsChecks.indexOf(instance); - if (a > -1) searxNormalRedirectsChecks.splice(a, 1); - - const b = searxngNormalRedirectsChecks.indexOf(instance); - if (b > -1) searxngNormalRedirectsChecks.splice(b, 1); - - const c = whoogleNormalRedirectsChecks.indexOf(instance); - if (c > -1) whoogleNormalRedirectsChecks.splice(c, 1); - - const d = librexNormalRedirectsChecks.indexOf(instance); - if (d > -1) librexNormalRedirectsChecks.splice(d, 1); - } - browser.storage.local.set({ - searchRedirects: redirects, - searxNormalRedirectsChecks, - searxngNormalRedirectsChecks, - whoogleNormalRedirectsChecks, - librexNormalRedirectsChecks, - }); - }) + browser.storage.local.get("cloudflareBlackList", r => { + redirects = val + searxNormalRedirectsChecks = [...redirects.searx.normal] + searxngNormalRedirectsChecks = [...redirects.searxng.normal] + whoogleNormalRedirectsChecks = [...redirects.whoogle.normal] + librexNormalRedirectsChecks = [...redirects.librex.normal] + for (const instance of r.cloudflareBlackList) { + const a = searxNormalRedirectsChecks.indexOf(instance) + if (a > -1) searxNormalRedirectsChecks.splice(a, 1) + + const b = searxngNormalRedirectsChecks.indexOf(instance) + if (b > -1) searxngNormalRedirectsChecks.splice(b, 1) + + const c = whoogleNormalRedirectsChecks.indexOf(instance) + if (c > -1) whoogleNormalRedirectsChecks.splice(c, 1) + + const d = librexNormalRedirectsChecks.indexOf(instance) + if (d > -1) librexNormalRedirectsChecks.splice(d, 1) + } + browser.storage.local.set({ + searchRedirects: redirects, + searxNormalRedirectsChecks, + searxngNormalRedirectsChecks, + whoogleNormalRedirectsChecks, + librexNormalRedirectsChecks, + }) + }) } -let - disableSearch, - searchFrontend, - searchRedirects, - protocol, - protocolFallback, - whoogleNormalRedirectsChecks, - whoogleNormalCustomRedirects, - whoogleTorRedirectsChecks, - whoogleTorCustomRedirects, - whoogleI2pRedirectsChecks, - whoogleI2pCustomRedirects, - whoogleLokiCustomRedirects, - searxNormalRedirectsChecks, - searxNormalCustomRedirects, - searxTorRedirectsChecks, - searxTorCustomRedirects, - searxI2pRedirectsChecks, - searxI2pCustomRedirects, - searxLokiCustomRedirects, - searxngNormalRedirectsChecks, - searxngNormalCustomRedirects, - searxngTorRedirectsChecks, - searxngTorCustomRedirects, - searxngI2pRedirectsChecks, - searxngI2pCustomRedirects, - searxngLokiCustomRedirects, - librexNormalRedirectsChecks, - librexNormalCustomRedirects, - librexTorRedirectsChecks, - librexTorCustomRedirects, - librexI2pRedirectsChecks, - librexI2pCustomRedirects, - librexLokiCustomRedirects; +let disableSearch, + searchFrontend, + searchRedirects, + protocol, + protocolFallback, + whoogleNormalRedirectsChecks, + whoogleNormalCustomRedirects, + whoogleTorRedirectsChecks, + whoogleTorCustomRedirects, + whoogleI2pRedirectsChecks, + whoogleI2pCustomRedirects, + whoogleLokiCustomRedirects, + searxNormalRedirectsChecks, + searxNormalCustomRedirects, + searxTorRedirectsChecks, + searxTorCustomRedirects, + searxI2pRedirectsChecks, + searxI2pCustomRedirects, + searxLokiCustomRedirects, + searxngNormalRedirectsChecks, + searxngNormalCustomRedirects, + searxngTorRedirectsChecks, + searxngTorCustomRedirects, + searxngI2pRedirectsChecks, + searxngI2pCustomRedirects, + searxngLokiCustomRedirects, + librexNormalRedirectsChecks, + librexNormalCustomRedirects, + librexTorRedirectsChecks, + librexTorCustomRedirects, + librexI2pRedirectsChecks, + librexI2pCustomRedirects, + librexLokiCustomRedirects function init() { - return new Promise(async resolve => { - browser.storage.local.get( - [ - "disableSearch", - "searchFrontend", - "searchRedirects", - "protocol", - "protocolFallback", - "whoogleNormalRedirectsChecks", - "whoogleNormalCustomRedirects", - "whoogleTorRedirectsChecks", - "whoogleTorCustomRedirects", - "whoogleI2pRedirectsChecks", - "whoogleI2pCustomRedirects", - "whoogleLokiCustomRedirects", - "searxNormalRedirectsChecks", - "searxNormalCustomRedirects", - "searxTorRedirectsChecks", - "searxTorCustomRedirects", - "searxI2pRedirectsChecks", - "searxI2pCustomRedirects", - "searxLokiCustomRedirects", - "searxngNormalRedirectsChecks", - "searxngNormalCustomRedirects", - "searxngTorRedirectsChecks", - "searxngTorCustomRedirects", - "searxngI2pRedirectsChecks", - "searxngI2pCustomRedirects", - "searxngLokiCustomRedirects", - "librexNormalRedirectsChecks", - "librexNormalCustomRedirects", - "librexTorRedirectsChecks", - "librexTorCustomRedirects", - "librexI2pRedirectsChecks", - "librexI2pCustomRedirects", - "librexLokiCustomRedirects" - ], - r => { - disableSearch = r.disableSearch; - searchFrontend = r.searchFrontend; - searchRedirects = r.searchRedirects; - protocol = r.protocol; - protocolFallback = r.protocolFallback; - whoogleNormalRedirectsChecks = r.whoogleNormalRedirectsChecks; - whoogleNormalCustomRedirects = r.whoogleNormalCustomRedirects; - whoogleTorRedirectsChecks = r.whoogleTorRedirectsChecks; - whoogleTorCustomRedirects = r.whoogleTorCustomRedirects; - whoogleI2pRedirectsChecks = r.whoogleI2pRedirectsChecks; - whoogleI2pCustomRedirects = r.whoogleI2pCustomRedirects; - whoogleLokiCustomRedirects = r.whoogleLokiCustomRedirects; - searxNormalRedirectsChecks = r.searxNormalRedirectsChecks; - searxNormalCustomRedirects = r.searxNormalCustomRedirects; - searxTorRedirectsChecks = r.searxTorRedirectsChecks; - searxTorCustomRedirects = r.searxTorCustomRedirects; - searxI2pRedirectsChecks = r.searxI2pRedirectsChecks; - searxI2pCustomRedirects = r.searxI2pCustomRedirects; - searxLokiCustomRedirects = r.searxLokiCustomRedirects; - searxngNormalRedirectsChecks = r.searxngNormalRedirectsChecks; - searxngNormalCustomRedirects = r.searxngNormalCustomRedirects; - searxngTorRedirectsChecks = r.searxngTorRedirectsChecks; - searxngTorCustomRedirects = r.searxngTorCustomRedirects; - searxngI2pRedirectsChecks = r.searxngI2pRedirectsChecks; - searxngI2pCustomRedirects = r.searxngI2pCustomRedirects; - searxngLokiCustomRedirects = r.searxngLokiCustomRedirects; - librexNormalRedirectsChecks = r.librexNormalRedirectsChecks; - librexNormalCustomRedirects = r.librexNormalCustomRedirects; - librexTorRedirectsChecks = r.librexTorRedirectsChecks; - librexTorCustomRedirects = r.librexTorCustomRedirects; - librexI2pRedirectsChecks = r.librexI2pRedirectsChecks; - librexI2pCustomRedirects = r.librexI2pCustomRedirects; - librexLokiCustomRedirects = r.librexLokiCustomRedirects; - resolve(); - } - ) - }) + return new Promise(async resolve => { + browser.storage.local.get( + [ + "disableSearch", + "searchFrontend", + "searchRedirects", + "protocol", + "protocolFallback", + "whoogleNormalRedirectsChecks", + "whoogleNormalCustomRedirects", + "whoogleTorRedirectsChecks", + "whoogleTorCustomRedirects", + "whoogleI2pRedirectsChecks", + "whoogleI2pCustomRedirects", + "whoogleLokiCustomRedirects", + "searxNormalRedirectsChecks", + "searxNormalCustomRedirects", + "searxTorRedirectsChecks", + "searxTorCustomRedirects", + "searxI2pRedirectsChecks", + "searxI2pCustomRedirects", + "searxLokiCustomRedirects", + "searxngNormalRedirectsChecks", + "searxngNormalCustomRedirects", + "searxngTorRedirectsChecks", + "searxngTorCustomRedirects", + "searxngI2pRedirectsChecks", + "searxngI2pCustomRedirects", + "searxngLokiCustomRedirects", + "librexNormalRedirectsChecks", + "librexNormalCustomRedirects", + "librexTorRedirectsChecks", + "librexTorCustomRedirects", + "librexI2pRedirectsChecks", + "librexI2pCustomRedirects", + "librexLokiCustomRedirects", + ], + r => { + disableSearch = r.disableSearch + searchFrontend = r.searchFrontend + searchRedirects = r.searchRedirects + protocol = r.protocol + protocolFallback = r.protocolFallback + whoogleNormalRedirectsChecks = r.whoogleNormalRedirectsChecks + whoogleNormalCustomRedirects = r.whoogleNormalCustomRedirects + whoogleTorRedirectsChecks = r.whoogleTorRedirectsChecks + whoogleTorCustomRedirects = r.whoogleTorCustomRedirects + whoogleI2pRedirectsChecks = r.whoogleI2pRedirectsChecks + whoogleI2pCustomRedirects = r.whoogleI2pCustomRedirects + whoogleLokiCustomRedirects = r.whoogleLokiCustomRedirects + searxNormalRedirectsChecks = r.searxNormalRedirectsChecks + searxNormalCustomRedirects = r.searxNormalCustomRedirects + searxTorRedirectsChecks = r.searxTorRedirectsChecks + searxTorCustomRedirects = r.searxTorCustomRedirects + searxI2pRedirectsChecks = r.searxI2pRedirectsChecks + searxI2pCustomRedirects = r.searxI2pCustomRedirects + searxLokiCustomRedirects = r.searxLokiCustomRedirects + searxngNormalRedirectsChecks = r.searxngNormalRedirectsChecks + searxngNormalCustomRedirects = r.searxngNormalCustomRedirects + searxngTorRedirectsChecks = r.searxngTorRedirectsChecks + searxngTorCustomRedirects = r.searxngTorCustomRedirects + searxngI2pRedirectsChecks = r.searxngI2pRedirectsChecks + searxngI2pCustomRedirects = r.searxngI2pCustomRedirects + searxngLokiCustomRedirects = r.searxngLokiCustomRedirects + librexNormalRedirectsChecks = r.librexNormalRedirectsChecks + librexNormalCustomRedirects = r.librexNormalCustomRedirects + librexTorRedirectsChecks = r.librexTorRedirectsChecks + librexTorCustomRedirects = r.librexTorCustomRedirects + librexI2pRedirectsChecks = r.librexI2pRedirectsChecks + librexI2pCustomRedirects = r.librexI2pCustomRedirects + librexLokiCustomRedirects = r.librexLokiCustomRedirects + resolve() + } + ) + }) } -init(); +init() browser.storage.onChanged.addListener(init) function initSearxCookies(test, from) { - return new Promise(async resolve => { - await init(); - let protocolHost = utils.protocolHost(from); - if (![ - ...searxNormalRedirectsChecks, - ...searxNormalCustomRedirects, - ...searxTorRedirectsChecks, - ...searxTorCustomRedirects, - ...searxI2pRedirectsChecks, - ...searxI2pCustomRedirects, - ...searxLokiCustomRedirects - ].includes(protocolHost)) { resolve(); return; } - - if (!test) { - let checkedInstances = []; - if (protocol == 'loki') checkedInstances = [...searxLokiCustomRedirects]; - else if (protocol == 'i2p') checkedInstances = [...searxI2pCustomRedirects, ...searxI2pRedirectsChecks]; - else if (protocol == 'tor') checkedInstances = [...searxTorRedirectsChecks, ...searxTorCustomRedirects]; - if ((checkedInstances.length === 0 && protocolFallback) || protocol == 'normal') { - checkedInstances = [...searxNormalRedirectsChecks, ...searxNormalCustomRedirects]; - } - await utils.copyCookie('searx', from, checkedInstances, 'advanced_search'); - await utils.copyCookie('searx', from, checkedInstances, 'autocomplete'); - await utils.copyCookie('searx', from, checkedInstances, 'categories'); - await utils.copyCookie('searx', from, checkedInstances, 'disabled_engines'); - await utils.copyCookie('searx', from, checkedInstances, 'disabled_plugins'); - await utils.copyCookie('searx', from, checkedInstances, 'doi_resolver'); - await utils.copyCookie('searx', from, checkedInstances, 'enabled_engines'); - await utils.copyCookie('searx', from, checkedInstances, 'enabled_plugins'); - await utils.copyCookie('searx', from, checkedInstances, 'image_proxy'); - await utils.copyCookie('searx', from, checkedInstances, 'language'); - await utils.copyCookie('searx', from, checkedInstances, 'locale'); - await utils.copyCookie('searx', from, checkedInstances, 'method'); - await utils.copyCookie('searx', from, checkedInstances, 'oscar-style'); - await utils.copyCookie('searx', from, checkedInstances, 'results_on_new_tab'); - await utils.copyCookie('searx', from, checkedInstances, 'safesearch'); - await utils.copyCookie('searx', from, checkedInstances, 'theme'); - await utils.copyCookie('searx', from, checkedInstances, 'tokens'); - } - resolve(true); - }) + return new Promise(async resolve => { + await init() + let protocolHost = utils.protocolHost(from) + if ( + ![ + ...searxNormalRedirectsChecks, + ...searxNormalCustomRedirects, + ...searxTorRedirectsChecks, + ...searxTorCustomRedirects, + ...searxI2pRedirectsChecks, + ...searxI2pCustomRedirects, + ...searxLokiCustomRedirects, + ].includes(protocolHost) + ) { + resolve() + return + } + + if (!test) { + let checkedInstances = [] + if (protocol == "loki") checkedInstances = [...searxLokiCustomRedirects] + else if (protocol == "i2p") checkedInstances = [...searxI2pCustomRedirects, ...searxI2pRedirectsChecks] + else if (protocol == "tor") checkedInstances = [...searxTorRedirectsChecks, ...searxTorCustomRedirects] + if ((checkedInstances.length === 0 && protocolFallback) || protocol == "normal") { + checkedInstances = [...searxNormalRedirectsChecks, ...searxNormalCustomRedirects] + } + await utils.copyCookie("searx", from, checkedInstances, "advanced_search") + await utils.copyCookie("searx", from, checkedInstances, "autocomplete") + await utils.copyCookie("searx", from, checkedInstances, "categories") + await utils.copyCookie("searx", from, checkedInstances, "disabled_engines") + await utils.copyCookie("searx", from, checkedInstances, "disabled_plugins") + await utils.copyCookie("searx", from, checkedInstances, "doi_resolver") + await utils.copyCookie("searx", from, checkedInstances, "enabled_engines") + await utils.copyCookie("searx", from, checkedInstances, "enabled_plugins") + await utils.copyCookie("searx", from, checkedInstances, "image_proxy") + await utils.copyCookie("searx", from, checkedInstances, "language") + await utils.copyCookie("searx", from, checkedInstances, "locale") + await utils.copyCookie("searx", from, checkedInstances, "method") + await utils.copyCookie("searx", from, checkedInstances, "oscar-style") + await utils.copyCookie("searx", from, checkedInstances, "results_on_new_tab") + await utils.copyCookie("searx", from, checkedInstances, "safesearch") + await utils.copyCookie("searx", from, checkedInstances, "theme") + await utils.copyCookie("searx", from, checkedInstances, "tokens") + } + resolve(true) + }) } function pasteSearxCookies() { - return new Promise(async resolve => { - await init(); - if (disableSearch || searchFrontend != 'searx') { resolve(); return; } - let checkedInstances = []; - if (protocol == 'loki') checkedInstances = [...searxLokiCustomRedirects]; - else if (protocol == 'i2p') checkedInstances = [...searxI2pCustomRedirects, ...searxI2pRedirectsChecks]; - else if (protocol == 'tor') checkedInstances = [...searxTorRedirectsChecks, ...searxTorCustomRedirects]; - if ((checkedInstances.length === 0 && protocolFallback) || protocol == 'normal') { - checkedInstances = [...searxNormalRedirectsChecks, ...searxNormalCustomRedirects]; - } - utils.getCookiesFromStorage('searx', checkedInstances, 'advanced_search'); - utils.getCookiesFromStorage('searx', checkedInstances, 'autocomplete'); - utils.getCookiesFromStorage('searx', checkedInstances, 'categories'); - utils.getCookiesFromStorage('searx', checkedInstances, 'disabled_engines'); - utils.getCookiesFromStorage('searx', checkedInstances, 'disabled_plugins'); - utils.getCookiesFromStorage('searx', checkedInstances, 'doi_resolver'); - utils.getCookiesFromStorage('searx', checkedInstances, 'enabled_engines'); - utils.getCookiesFromStorage('searx', checkedInstances, 'enabled_plugins'); - utils.getCookiesFromStorage('searx', checkedInstances, 'image_proxy'); - utils.getCookiesFromStorage('searx', checkedInstances, 'language'); - utils.getCookiesFromStorage('searx', checkedInstances, 'locale'); - utils.getCookiesFromStorage('searx', checkedInstances, 'method'); - utils.getCookiesFromStorage('searx', checkedInstances, 'oscar-style'); - utils.getCookiesFromStorage('searx', checkedInstances, 'results_on_new_tab'); - utils.getCookiesFromStorage('searx', checkedInstances, 'safesearch'); - utils.getCookiesFromStorage('searx', checkedInstances, 'theme'); - utils.getCookiesFromStorage('searx', checkedInstances, 'tokens'); - resolve(); - }) + return new Promise(async resolve => { + await init() + if (disableSearch || searchFrontend != "searx") { + resolve() + return + } + let checkedInstances = [] + if (protocol == "loki") checkedInstances = [...searxLokiCustomRedirects] + else if (protocol == "i2p") checkedInstances = [...searxI2pCustomRedirects, ...searxI2pRedirectsChecks] + else if (protocol == "tor") checkedInstances = [...searxTorRedirectsChecks, ...searxTorCustomRedirects] + if ((checkedInstances.length === 0 && protocolFallback) || protocol == "normal") { + checkedInstances = [...searxNormalRedirectsChecks, ...searxNormalCustomRedirects] + } + utils.getCookiesFromStorage("searx", checkedInstances, "advanced_search") + utils.getCookiesFromStorage("searx", checkedInstances, "autocomplete") + utils.getCookiesFromStorage("searx", checkedInstances, "categories") + utils.getCookiesFromStorage("searx", checkedInstances, "disabled_engines") + utils.getCookiesFromStorage("searx", checkedInstances, "disabled_plugins") + utils.getCookiesFromStorage("searx", checkedInstances, "doi_resolver") + utils.getCookiesFromStorage("searx", checkedInstances, "enabled_engines") + utils.getCookiesFromStorage("searx", checkedInstances, "enabled_plugins") + utils.getCookiesFromStorage("searx", checkedInstances, "image_proxy") + utils.getCookiesFromStorage("searx", checkedInstances, "language") + utils.getCookiesFromStorage("searx", checkedInstances, "locale") + utils.getCookiesFromStorage("searx", checkedInstances, "method") + utils.getCookiesFromStorage("searx", checkedInstances, "oscar-style") + utils.getCookiesFromStorage("searx", checkedInstances, "results_on_new_tab") + utils.getCookiesFromStorage("searx", checkedInstances, "safesearch") + utils.getCookiesFromStorage("searx", checkedInstances, "theme") + utils.getCookiesFromStorage("searx", checkedInstances, "tokens") + resolve() + }) } function initSearxngCookies(test, from) { - return new Promise(async resolve => { - await init(); - let protocolHost = utils.protocolHost(from); - if (![ - ...searxngNormalRedirectsChecks, - ...searxngNormalCustomRedirects, - ...searxngTorRedirectsChecks, - ...searxngTorCustomRedirects, - ...searxngI2pRedirectsChecks, - ...searxngI2pCustomRedirects, - ...searxngLokiCustomRedirects, - ].includes(protocolHost)) { resolve(); return; } - - if (!test) { - let checkedInstances = []; - if (protocol == 'loki') checkedInstances = [...searxngLokiCustomRedirects]; - else if (protocol == 'i2p') checkedInstances = [...searxngI2pCustomRedirects, ...searxngI2pRedirectsChecks]; - else if (protocol == 'tor') checkedInstances = [...searxngTorRedirectsChecks, ...searxngTorCustomRedirects]; - if ((checkedInstances.length === 0 && protocolFallback) || protocol == 'normal') { - checkedInstances = [...searxngNormalRedirectsChecks, ...searxngNormalCustomRedirects]; - } - await utils.copyCookie('searxng', from, checkedInstances, 'autocomplete'); - await utils.copyCookie('searxng', from, checkedInstances, 'categories'); - await utils.copyCookie('searxng', from, checkedInstances, 'disabled_engines'); - await utils.copyCookie('searxng', from, checkedInstances, 'disabled_plugins'); - await utils.copyCookie('searxng', from, checkedInstances, 'doi_resolver'); - await utils.copyCookie('searxng', from, checkedInstances, 'enabled_plugins'); - await utils.copyCookie('searxng', from, checkedInstances, 'enabled_engines'); - await utils.copyCookie('searxng', from, checkedInstances, 'image_proxy'); - await utils.copyCookie('searxng', from, checkedInstances, 'infinite_scroll'); - await utils.copyCookie('searxng', from, checkedInstances, 'language'); - await utils.copyCookie('searxng', from, checkedInstances, 'locale'); - await utils.copyCookie('searxng', from, checkedInstances, 'maintab'); - await utils.copyCookie('searxng', from, checkedInstances, 'method'); - await utils.copyCookie('searxng', from, checkedInstances, 'query_in_title'); - await utils.copyCookie('searxng', from, checkedInstances, 'results_on_new_tab'); - await utils.copyCookie('searxng', from, checkedInstances, 'safesearch'); - await utils.copyCookie('searxng', from, checkedInstances, 'simple_style'); - await utils.copyCookie('searxng', from, checkedInstances, 'theme'); - await utils.copyCookie('searxng', from, checkedInstances, 'tokens'); - } - resolve(true); - }) + return new Promise(async resolve => { + await init() + let protocolHost = utils.protocolHost(from) + if ( + ![ + ...searxngNormalRedirectsChecks, + ...searxngNormalCustomRedirects, + ...searxngTorRedirectsChecks, + ...searxngTorCustomRedirects, + ...searxngI2pRedirectsChecks, + ...searxngI2pCustomRedirects, + ...searxngLokiCustomRedirects, + ].includes(protocolHost) + ) { + resolve() + return + } + + if (!test) { + let checkedInstances = [] + if (protocol == "loki") checkedInstances = [...searxngLokiCustomRedirects] + else if (protocol == "i2p") checkedInstances = [...searxngI2pCustomRedirects, ...searxngI2pRedirectsChecks] + else if (protocol == "tor") checkedInstances = [...searxngTorRedirectsChecks, ...searxngTorCustomRedirects] + if ((checkedInstances.length === 0 && protocolFallback) || protocol == "normal") { + checkedInstances = [...searxngNormalRedirectsChecks, ...searxngNormalCustomRedirects] + } + await utils.copyCookie("searxng", from, checkedInstances, "autocomplete") + await utils.copyCookie("searxng", from, checkedInstances, "categories") + await utils.copyCookie("searxng", from, checkedInstances, "disabled_engines") + await utils.copyCookie("searxng", from, checkedInstances, "disabled_plugins") + await utils.copyCookie("searxng", from, checkedInstances, "doi_resolver") + await utils.copyCookie("searxng", from, checkedInstances, "enabled_plugins") + await utils.copyCookie("searxng", from, checkedInstances, "enabled_engines") + await utils.copyCookie("searxng", from, checkedInstances, "image_proxy") + await utils.copyCookie("searxng", from, checkedInstances, "infinite_scroll") + await utils.copyCookie("searxng", from, checkedInstances, "language") + await utils.copyCookie("searxng", from, checkedInstances, "locale") + await utils.copyCookie("searxng", from, checkedInstances, "maintab") + await utils.copyCookie("searxng", from, checkedInstances, "method") + await utils.copyCookie("searxng", from, checkedInstances, "query_in_title") + await utils.copyCookie("searxng", from, checkedInstances, "results_on_new_tab") + await utils.copyCookie("searxng", from, checkedInstances, "safesearch") + await utils.copyCookie("searxng", from, checkedInstances, "simple_style") + await utils.copyCookie("searxng", from, checkedInstances, "theme") + await utils.copyCookie("searxng", from, checkedInstances, "tokens") + } + resolve(true) + }) } function pasteSearxngCookies() { - return new Promise(async resolve => { - await init(); - if (disableSearch || searchFrontend != 'searxng', protocol === undefined) { resolve(); return; } - let checkedInstances = []; - if (protocol == 'loki') checkedInstances = [...searxngLokiCustomRedirects]; - else if (protocol == 'i2p') checkedInstances = [...searxngI2pCustomRedirects, ...searxngI2pRedirectsChecks]; - else if (protocol == 'tor') checkedInstances = [...searxngTorRedirectsChecks, ...searxngTorCustomRedirects]; - if ((checkedInstances.length === 0 && protocolFallback) || protocol == 'normal') { - checkedInstances = [...searxngNormalRedirectsChecks, ...searxngNormalCustomRedirects]; - } - utils.getCookiesFromStorage('searxng', checkedInstances, 'autocomplete'); - utils.getCookiesFromStorage('searxng', checkedInstances, 'categories'); - utils.getCookiesFromStorage('searxng', checkedInstances, 'disabled_engines'); - utils.getCookiesFromStorage('searxng', checkedInstances, 'disabled_plugins'); - utils.getCookiesFromStorage('searxng', checkedInstances, 'doi_resolver'); - utils.getCookiesFromStorage('searxng', checkedInstances, 'enabled_plugins'); - utils.getCookiesFromStorage('searxng', checkedInstances, 'enabled_engines'); - utils.getCookiesFromStorage('searxng', checkedInstances, 'image_proxy'); - utils.getCookiesFromStorage('searxng', checkedInstances, 'infinite_scroll'); - utils.getCookiesFromStorage('searxng', checkedInstances, 'language'); - utils.getCookiesFromStorage('searxng', checkedInstances, 'locale'); - utils.getCookiesFromStorage('searxng', checkedInstances, 'maintab'); - utils.getCookiesFromStorage('searxng', checkedInstances, 'method'); - utils.getCookiesFromStorage('searxng', checkedInstances, 'query_in_title'); - utils.getCookiesFromStorage('searxng', checkedInstances, 'results_on_new_tab'); - utils.getCookiesFromStorage('searxng', checkedInstances, 'safesearch'); - utils.getCookiesFromStorage('searxng', checkedInstances, 'simple_style'); - utils.getCookiesFromStorage('searxng', checkedInstances, 'theme'); - utils.getCookiesFromStorage('searxng', checkedInstances, 'tokens'); - resolve(); - }) + return new Promise(async resolve => { + await init() + if ((disableSearch || searchFrontend != "searxng", protocol === undefined)) { + resolve() + return + } + let checkedInstances = [] + if (protocol == "loki") checkedInstances = [...searxngLokiCustomRedirects] + else if (protocol == "i2p") checkedInstances = [...searxngI2pCustomRedirects, ...searxngI2pRedirectsChecks] + else if (protocol == "tor") checkedInstances = [...searxngTorRedirectsChecks, ...searxngTorCustomRedirects] + if ((checkedInstances.length === 0 && protocolFallback) || protocol == "normal") { + checkedInstances = [...searxngNormalRedirectsChecks, ...searxngNormalCustomRedirects] + } + utils.getCookiesFromStorage("searxng", checkedInstances, "autocomplete") + utils.getCookiesFromStorage("searxng", checkedInstances, "categories") + utils.getCookiesFromStorage("searxng", checkedInstances, "disabled_engines") + utils.getCookiesFromStorage("searxng", checkedInstances, "disabled_plugins") + utils.getCookiesFromStorage("searxng", checkedInstances, "doi_resolver") + utils.getCookiesFromStorage("searxng", checkedInstances, "enabled_plugins") + utils.getCookiesFromStorage("searxng", checkedInstances, "enabled_engines") + utils.getCookiesFromStorage("searxng", checkedInstances, "image_proxy") + utils.getCookiesFromStorage("searxng", checkedInstances, "infinite_scroll") + utils.getCookiesFromStorage("searxng", checkedInstances, "language") + utils.getCookiesFromStorage("searxng", checkedInstances, "locale") + utils.getCookiesFromStorage("searxng", checkedInstances, "maintab") + utils.getCookiesFromStorage("searxng", checkedInstances, "method") + utils.getCookiesFromStorage("searxng", checkedInstances, "query_in_title") + utils.getCookiesFromStorage("searxng", checkedInstances, "results_on_new_tab") + utils.getCookiesFromStorage("searxng", checkedInstances, "safesearch") + utils.getCookiesFromStorage("searxng", checkedInstances, "simple_style") + utils.getCookiesFromStorage("searxng", checkedInstances, "theme") + utils.getCookiesFromStorage("searxng", checkedInstances, "tokens") + resolve() + }) } function initLibrexCookies(test, from) { - return new Promise(async resolve => { - await init(); - let protocolHost = utils.protocolHost(from); - if (![ - ...librexNormalRedirectsChecks, - ...librexNormalCustomRedirects, - ...librexTorRedirectsChecks, - ...librexTorCustomRedirects, - ...librexI2pRedirectsChecks, - ...librexI2pCustomRedirects, - ...librexLokiCustomRedirects - ].includes(protocolHost)) { resolve(); return; } - - if(!test) { - let checkedInstances = []; - if (protocol == 'loki') checkedInstances = [...librexLokiCustomRedirects]; - else if (protocol == 'i2p') checkedInstances = [...librexI2pCustomRedirects, ...librexI2pRedirectsChecks]; - else if (protocol == 'tor') checkedInstances = [...librexTorRedirectsChecks, ...librexTorCustomRedirects]; - if ((checkedInstances.length === 0 && protocolFallback) || protocol == 'normal') { - checkedInstances = [...librexNormalRedirectsChecks, ...librexNormalCustomRedirects]; - } - await utils.copyCookie('librex', from, checkedInstances, 'bibliogram'); - await utils.copyCookie('librex', from, checkedInstances, 'disable_special'); - await utils.copyCookie('librex', from, checkedInstances, 'invidious'); - await utils.copyCookie('librex', from, checkedInstances, 'libreddit'); - await utils.copyCookie('librex', from, checkedInstances, 'nitter'); - await utils.copyCookie('librex', from, checkedInstances, 'proxitok'); - await utils.copyCookie('librex', from, checkedInstances, 'theme'); - await utils.copyCookie('librex', from, checkedInstances, 'wikiless'); - } - resolve(true); - }) + return new Promise(async resolve => { + await init() + let protocolHost = utils.protocolHost(from) + if ( + ![ + ...librexNormalRedirectsChecks, + ...librexNormalCustomRedirects, + ...librexTorRedirectsChecks, + ...librexTorCustomRedirects, + ...librexI2pRedirectsChecks, + ...librexI2pCustomRedirects, + ...librexLokiCustomRedirects, + ].includes(protocolHost) + ) { + resolve() + return + } + + if (!test) { + let checkedInstances = [] + if (protocol == "loki") checkedInstances = [...librexLokiCustomRedirects] + else if (protocol == "i2p") checkedInstances = [...librexI2pCustomRedirects, ...librexI2pRedirectsChecks] + else if (protocol == "tor") checkedInstances = [...librexTorRedirectsChecks, ...librexTorCustomRedirects] + if ((checkedInstances.length === 0 && protocolFallback) || protocol == "normal") { + checkedInstances = [...librexNormalRedirectsChecks, ...librexNormalCustomRedirects] + } + await utils.copyCookie("librex", from, checkedInstances, "bibliogram") + await utils.copyCookie("librex", from, checkedInstances, "disable_special") + await utils.copyCookie("librex", from, checkedInstances, "invidious") + await utils.copyCookie("librex", from, checkedInstances, "libreddit") + await utils.copyCookie("librex", from, checkedInstances, "nitter") + await utils.copyCookie("librex", from, checkedInstances, "proxitok") + await utils.copyCookie("librex", from, checkedInstances, "theme") + await utils.copyCookie("librex", from, checkedInstances, "wikiless") + } + resolve(true) + }) } function pasteLibrexCookies() { - return new Promise(async resolve => { - await init(); - if (disableSearch || searchFrontend != 'librex', protocol === undefined) { resolve(); return; } - let checkedInstances = []; - if (protocol == 'loki') checkedInstances = [...librexLokiCustomRedirects]; - else if (protocol == 'i2p') checkedInstances = [...librexI2pCustomRedirects, ...librexI2pRedirectsChecks]; - else if (protocol == 'tor') checkedInstances = [...librexTorRedirectsChecks, ...librexTorCustomRedirects]; - if ((checkedInstances.length === 0 && protocolFallback) || protocol == 'normal') { - checkedInstances = [...librexNormalRedirectsChecks, ...librexNormalCustomRedirects]; - } - utils.getCookiesFromStorage('librex', checkedInstances, 'bibliogram'); - utils.getCookiesFromStorage('librex', checkedInstances, 'disable_special'); - utils.getCookiesFromStorage('librex', checkedInstances, 'invidious'); - utils.getCookiesFromStorage('librex', checkedInstances, 'libreddit'); - utils.getCookiesFromStorage('librex', checkedInstances, 'nitter'); - utils.getCookiesFromStorage('librex', checkedInstances, 'proxitok'); - utils.getCookiesFromStorage('librex', checkedInstances, 'theme'); - utils.getCookiesFromStorage('librex', checkedInstances, 'wikiless'); - resolve(); - }) + return new Promise(async resolve => { + await init() + if ((disableSearch || searchFrontend != "librex", protocol === undefined)) { + resolve() + return + } + let checkedInstances = [] + if (protocol == "loki") checkedInstances = [...librexLokiCustomRedirects] + else if (protocol == "i2p") checkedInstances = [...librexI2pCustomRedirects, ...librexI2pRedirectsChecks] + else if (protocol == "tor") checkedInstances = [...librexTorRedirectsChecks, ...librexTorCustomRedirects] + if ((checkedInstances.length === 0 && protocolFallback) || protocol == "normal") { + checkedInstances = [...librexNormalRedirectsChecks, ...librexNormalCustomRedirects] + } + utils.getCookiesFromStorage("librex", checkedInstances, "bibliogram") + utils.getCookiesFromStorage("librex", checkedInstances, "disable_special") + utils.getCookiesFromStorage("librex", checkedInstances, "invidious") + utils.getCookiesFromStorage("librex", checkedInstances, "libreddit") + utils.getCookiesFromStorage("librex", checkedInstances, "nitter") + utils.getCookiesFromStorage("librex", checkedInstances, "proxitok") + utils.getCookiesFromStorage("librex", checkedInstances, "theme") + utils.getCookiesFromStorage("librex", checkedInstances, "wikiless") + resolve() + }) } function redirect(url, disableOverride) { - if (disableSearch && !disableOverride) return; - if (!targets.some(rx => rx.test(url.href))) return; - if (url.searchParams.has('tbm')) return; - if (url.hostname.includes('google') && !url.searchParams.has('q') && url.pathname != '/') return; - let randomInstance; - let path; - if (searchFrontend == 'searx') { - let instancesList = []; - if (protocol == 'loki') instancesList = [...searxLokiCustomRedirects]; - else if (protocol == 'i2p') instancesList = [...searxI2pCustomRedirects, ...searxI2pRedirectsChecks]; - else if (protocol == 'tor') instancesList = [...searxTorRedirectsChecks, ...searxTorCustomRedirects]; - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - instancesList = [...searxNormalRedirectsChecks, ...searxNormalCustomRedirects]; - } - if (instancesList.length === 0) { return; } - - randomInstance = utils.getRandomInstance(instancesList) - path = "/"; - } - else if (searchFrontend == 'searxng') { - let instancesList = []; - if (protocol == 'loki') instancesList = [...searxngLokiCustomRedirects]; - else if (protocol == 'i2p') instancesList = [...searxngI2pCustomRedirects, ...searxngI2pRedirectsChecks]; - else if (protocol == 'tor') instancesList = [...searxngTorRedirectsChecks, ...searxngTorCustomRedirects]; - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - instancesList = [...searxngNormalRedirectsChecks, ...searxngNormalCustomRedirects]; - } - if (instancesList.length === 0) { return; } - - randomInstance = utils.getRandomInstance(instancesList) - path = "/"; - } - else if (searchFrontend == 'whoogle') { - let instancesList = []; - if (protocol == 'loki') instancesList = [...whoogleLokiCustomRedirects]; - else if (protocol == 'i2p') instancesList = [...whoogleI2pCustomRedirects, ...whoogleI2pRedirectsChecks]; - else if (protocol == 'tor') instancesList = [...whoogleTorRedirectsChecks, ...whoogleTorCustomRedirects]; - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - instancesList = [...whoogleNormalRedirectsChecks, ...whoogleNormalCustomRedirects]; - } - if (instancesList.length === 0) { return; } - - randomInstance = utils.getRandomInstance(instancesList) - path = "/search"; - } - else if (searchFrontend == 'librex') { - let instancesList = []; - if (protocol == 'loki') instancesList = [...librexLokiCustomRedirects]; - else if (protocol == 'i2p') instancesList = [...librexI2pCustomRedirects, ...librexI2pRedirectsChecks]; - else if (protocol == 'tor') instancesList = [...librexTorRedirectsChecks, ...librexTorCustomRedirects]; - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - instancesList = [...librexNormalRedirectsChecks, ...librexNormalCustomRedirects]; - } - if (instancesList.length === 0) { return; } - - randomInstance = utils.getRandomInstance(instancesList) - path = "/search.php"; - } - - if ( - ((url.hostname.includes('google') || url.hostname.includes('bing')) && !url.searchParams.has('q')) || - (url.hostname.includes('yandex') && !url.searchParams.has('text')) - ) path = '/'; - - let searchQuery = ""; - if ( - ( - url.hostname.includes('google') || - url.hostname.includes('bing') || - url.hostname.includes('search.libredirect.invalid') - ) && - url.searchParams.has('q') - ) searchQuery = `?q=${encodeURIComponent(url.searchParams.get('q'))}`; - if (url.hostname.includes('yandex') && url.searchParams.has('text')) searchQuery = `?q=${url.searchParams.get('text')}`; - - return `${randomInstance}${path}${searchQuery}`; + if (disableSearch && !disableOverride) return + if (!targets.some(rx => rx.test(url.href))) return + if (url.searchParams.has("tbm")) return + if (url.hostname.includes("google") && !url.searchParams.has("q") && url.pathname != "/") return + let randomInstance + let path + if (searchFrontend == "searx") { + let instancesList = [] + if (protocol == "loki") instancesList = [...searxLokiCustomRedirects] + else if (protocol == "i2p") instancesList = [...searxI2pCustomRedirects, ...searxI2pRedirectsChecks] + else if (protocol == "tor") instancesList = [...searxTorRedirectsChecks, ...searxTorCustomRedirects] + if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { + instancesList = [...searxNormalRedirectsChecks, ...searxNormalCustomRedirects] + } + if (instancesList.length === 0) { + return + } + + randomInstance = utils.getRandomInstance(instancesList) + path = "/" + } else if (searchFrontend == "searxng") { + let instancesList = [] + if (protocol == "loki") instancesList = [...searxngLokiCustomRedirects] + else if (protocol == "i2p") instancesList = [...searxngI2pCustomRedirects, ...searxngI2pRedirectsChecks] + else if (protocol == "tor") instancesList = [...searxngTorRedirectsChecks, ...searxngTorCustomRedirects] + if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { + instancesList = [...searxngNormalRedirectsChecks, ...searxngNormalCustomRedirects] + } + if (instancesList.length === 0) { + return + } + + randomInstance = utils.getRandomInstance(instancesList) + path = "/" + } else if (searchFrontend == "whoogle") { + let instancesList = [] + if (protocol == "loki") instancesList = [...whoogleLokiCustomRedirects] + else if (protocol == "i2p") instancesList = [...whoogleI2pCustomRedirects, ...whoogleI2pRedirectsChecks] + else if (protocol == "tor") instancesList = [...whoogleTorRedirectsChecks, ...whoogleTorCustomRedirects] + if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { + instancesList = [...whoogleNormalRedirectsChecks, ...whoogleNormalCustomRedirects] + } + if (instancesList.length === 0) { + return + } + + randomInstance = utils.getRandomInstance(instancesList) + path = "/search" + } else if (searchFrontend == "librex") { + let instancesList = [] + if (protocol == "loki") instancesList = [...librexLokiCustomRedirects] + else if (protocol == "i2p") instancesList = [...librexI2pCustomRedirects, ...librexI2pRedirectsChecks] + else if (protocol == "tor") instancesList = [...librexTorRedirectsChecks, ...librexTorCustomRedirects] + if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { + instancesList = [...librexNormalRedirectsChecks, ...librexNormalCustomRedirects] + } + if (instancesList.length === 0) { + return + } + + randomInstance = utils.getRandomInstance(instancesList) + path = "/search.php" + } + + if (((url.hostname.includes("google") || url.hostname.includes("bing")) && !url.searchParams.has("q")) || (url.hostname.includes("yandex") && !url.searchParams.has("text"))) path = "/" + + let searchQuery = "" + if ((url.hostname.includes("google") || url.hostname.includes("bing") || url.hostname.includes("search.libredirect.invalid")) && url.searchParams.has("q")) + searchQuery = `?q=${encodeURIComponent(url.searchParams.get("q"))}` + if (url.hostname.includes("yandex") && url.searchParams.has("text")) searchQuery = `?q=${url.searchParams.get("text")}` + + return `${randomInstance}${path}${searchQuery}` } function switchInstance(url, disableOverride) { - return new Promise(async resolve => { - await init(); - if (disableSearch && !disableOverride) { resolve(); return; } - let protocolHost = utils.protocolHost(url); - if (![ - ...searchRedirects.searx.normal, - ...searchRedirects.searx.tor, - ...searchRedirects.searx.i2p, - - ...searchRedirects.searxng.normal, - ...searchRedirects.searxng.tor, - ...searchRedirects.searxng.i2p, - - ...searchRedirects.whoogle.normal, - ...searchRedirects.whoogle.tor, - ...searchRedirects.whoogle.i2p, - - ...searchRedirects.librex.normal, - ...searchRedirects.librex.tor, - ...searchRedirects.librex.i2p, - - ...searxNormalCustomRedirects, - ...searxTorCustomRedirects, - ...searxI2pCustomRedirects, - ...searxLokiCustomRedirects, - - ...searxngNormalCustomRedirects, - ...searxngTorCustomRedirects, - ...searxngI2pCustomRedirects, - ...searxngLokiCustomRedirects, - - ...whoogleNormalCustomRedirects, - ...whoogleTorCustomRedirects, - ...whoogleI2pCustomRedirects, - ...whoogleLokiCustomRedirects, - - ...librexNormalCustomRedirects, - ...librexTorCustomRedirects, - ...librexI2pCustomRedirects, - ...librexLokiCustomRedirects - ].includes(protocolHost)) { resolve(); return; } - - let instancesList = []; - - if (protocol == 'loki') { - if (searchFrontend == 'searx') instancesList = [...searxLokiCustomRedirects]; - else if (searchFrontend == 'searxng') instancesList = [...searxngLokiCustomRedirects]; - else if (searchFrontend == 'whoogle') instancesList = [...whoogleLokiCustomRedirects]; - else if (searchFrontend == 'librex') instancesList = [...librexLokiCustomRedirects]; - } - else if (protocol == 'tor') { - if (searchFrontend == 'searx') instancesList = [...searxTorRedirectsChecks, ...searxTorCustomRedirects]; - else if (searchFrontend == 'searxng') instancesList = [...searxngTorRedirectsChecks, ...searxngTorCustomRedirects]; - else if (searchFrontend == 'whoogle') instancesList = [...whoogleTorRedirectsChecks, ...whoogleTorCustomRedirects]; - else if (searchFrontend == 'librex') instancesList = [...librexTorRedirectsChecks, ...librexTorCustomRedirects]; - } - else if (protocol == 'i2p') { - if (searchFrontend == 'searx') instancesList = [...searxI2pRedirectsChecks, ...searxI2pCustomRedirects]; - else if (searchFrontend == 'searxng') instancesList = [...searxngI2pRedirectsChecks, ...searxngI2pCustomRedirects]; - else if (searchFrontend == 'whoogle') instancesList = [...whoogleI2pRedirectsChecks, ...whoogleI2pCustomRedirects]; - else if (searchFrontend == 'librex') instancesList = [...librexI2pRedirectsChecks, ...librexI2pCustomRedirects]; - } - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - if (searchFrontend == 'searx') instancesList = [...searxNormalRedirectsChecks, ...searxNormalCustomRedirects]; - else if (searchFrontend == 'searxng') instancesList = [...searxngNormalRedirectsChecks, ...searxngNormalCustomRedirects]; - else if (searchFrontend == 'whoogle') instancesList = [...whoogleNormalRedirectsChecks, ...whoogleNormalCustomRedirects]; - else if (searchFrontend == 'librex') instancesList = [...librexNormalRedirectsChecks, ...librexNormalCustomRedirects]; - } - const i = instancesList.indexOf(protocolHost); - if (i > -1) instancesList.splice(i, 1); - if (instancesList.length === 0) { resolve(); return; } - - const randomInstance = utils.getRandomInstance(instancesList); - resolve(`${randomInstance}${url.pathname}${url.search}`); - }) + return new Promise(async resolve => { + await init() + if (disableSearch && !disableOverride) { + resolve() + return + } + let protocolHost = utils.protocolHost(url) + if ( + ![ + ...searchRedirects.searx.normal, + ...searchRedirects.searx.tor, + ...searchRedirects.searx.i2p, + + ...searchRedirects.searxng.normal, + ...searchRedirects.searxng.tor, + ...searchRedirects.searxng.i2p, + + ...searchRedirects.whoogle.normal, + ...searchRedirects.whoogle.tor, + ...searchRedirects.whoogle.i2p, + + ...searchRedirects.librex.normal, + ...searchRedirects.librex.tor, + ...searchRedirects.librex.i2p, + + ...searxNormalCustomRedirects, + ...searxTorCustomRedirects, + ...searxI2pCustomRedirects, + ...searxLokiCustomRedirects, + + ...searxngNormalCustomRedirects, + ...searxngTorCustomRedirects, + ...searxngI2pCustomRedirects, + ...searxngLokiCustomRedirects, + + ...whoogleNormalCustomRedirects, + ...whoogleTorCustomRedirects, + ...whoogleI2pCustomRedirects, + ...whoogleLokiCustomRedirects, + + ...librexNormalCustomRedirects, + ...librexTorCustomRedirects, + ...librexI2pCustomRedirects, + ...librexLokiCustomRedirects, + ].includes(protocolHost) + ) { + resolve() + return + } + + let instancesList = [] + + if (protocol == "loki") { + if (searchFrontend == "searx") instancesList = [...searxLokiCustomRedirects] + else if (searchFrontend == "searxng") instancesList = [...searxngLokiCustomRedirects] + else if (searchFrontend == "whoogle") instancesList = [...whoogleLokiCustomRedirects] + else if (searchFrontend == "librex") instancesList = [...librexLokiCustomRedirects] + } else if (protocol == "tor") { + if (searchFrontend == "searx") instancesList = [...searxTorRedirectsChecks, ...searxTorCustomRedirects] + else if (searchFrontend == "searxng") instancesList = [...searxngTorRedirectsChecks, ...searxngTorCustomRedirects] + else if (searchFrontend == "whoogle") instancesList = [...whoogleTorRedirectsChecks, ...whoogleTorCustomRedirects] + else if (searchFrontend == "librex") instancesList = [...librexTorRedirectsChecks, ...librexTorCustomRedirects] + } else if (protocol == "i2p") { + if (searchFrontend == "searx") instancesList = [...searxI2pRedirectsChecks, ...searxI2pCustomRedirects] + else if (searchFrontend == "searxng") instancesList = [...searxngI2pRedirectsChecks, ...searxngI2pCustomRedirects] + else if (searchFrontend == "whoogle") instancesList = [...whoogleI2pRedirectsChecks, ...whoogleI2pCustomRedirects] + else if (searchFrontend == "librex") instancesList = [...librexI2pRedirectsChecks, ...librexI2pCustomRedirects] + } + if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { + if (searchFrontend == "searx") instancesList = [...searxNormalRedirectsChecks, ...searxNormalCustomRedirects] + else if (searchFrontend == "searxng") instancesList = [...searxngNormalRedirectsChecks, ...searxngNormalCustomRedirects] + else if (searchFrontend == "whoogle") instancesList = [...whoogleNormalRedirectsChecks, ...whoogleNormalCustomRedirects] + else if (searchFrontend == "librex") instancesList = [...librexNormalRedirectsChecks, ...librexNormalCustomRedirects] + } + const i = instancesList.indexOf(protocolHost) + if (i > -1) instancesList.splice(i, 1) + if (instancesList.length === 0) { + resolve() + return + } + + const randomInstance = utils.getRandomInstance(instancesList) + resolve(`${randomInstance}${url.pathname}${url.search}`) + }) } function initDefaults() { - return new Promise(async resolve => { - fetch('/instances/data.json').then(response => response.text()).then(async data => { - let dataJson = JSON.parse(data); - /* + return new Promise(async resolve => { + fetch("/instances/data.json") + .then(response => response.text()) + .then(async data => { + let dataJson = JSON.parse(data) + /* redirects.searx = dataJson.searx; redirects.searxng = dataJson.searxng; redirects.whoogle = dataJson.whoogle; */ - for (let i = 0; i < frontends.length; i++) { - redirects[frontends[i]] = dataJson[frontends[i]] - } + for (let i = 0; i < frontends.length; i++) { + redirects[frontends[i]] = dataJson[frontends[i]] + } - browser.storage.local.get('cloudflareBlackList', async r => { - whoogleNormalRedirectsChecks = [...redirects.whoogle.normal]; - searxNormalRedirectsChecks = [...redirects.searx.normal]; - searxngNormalRedirectsChecks = [...redirects.searxng.normal]; - librexNormalRedirectsChecks = [...redirects.librex.normal]; - for (const instance of r.cloudflareBlackList) { - let i; + browser.storage.local.get("cloudflareBlackList", async r => { + whoogleNormalRedirectsChecks = [...redirects.whoogle.normal] + searxNormalRedirectsChecks = [...redirects.searx.normal] + searxngNormalRedirectsChecks = [...redirects.searxng.normal] + librexNormalRedirectsChecks = [...redirects.librex.normal] + for (const instance of r.cloudflareBlackList) { + let i - i = whoogleNormalRedirectsChecks.indexOf(instance); - if (i > -1) whoogleNormalRedirectsChecks.splice(i, 1); + i = whoogleNormalRedirectsChecks.indexOf(instance) + if (i > -1) whoogleNormalRedirectsChecks.splice(i, 1) - i = searxNormalRedirectsChecks.indexOf(instance); - if (i > -1) searxNormalRedirectsChecks.splice(i, 1); + i = searxNormalRedirectsChecks.indexOf(instance) + if (i > -1) searxNormalRedirectsChecks.splice(i, 1) - i = searxngNormalRedirectsChecks.indexOf(instance); - if (i > -1) searxngNormalRedirectsChecks.splice(i, 1); + i = searxngNormalRedirectsChecks.indexOf(instance) + if (i > -1) searxngNormalRedirectsChecks.splice(i, 1) - i = librexNormalRedirectsChecks.indexOf(instance); - if (i > -1) librexNormalRedirectsChecks.splice(i, 1) - } - browser.storage.local.set({ - disableSearch: false, - searchFrontend: 'searxng', - searchRedirects: redirects, - searxngCustomSettings: false, + i = librexNormalRedirectsChecks.indexOf(instance) + if (i > -1) librexNormalRedirectsChecks.splice(i, 1) + } + browser.storage.local.set( + { + disableSearch: false, + searchFrontend: "searxng", + searchRedirects: redirects, + searxngCustomSettings: false, - whoogleNormalRedirectsChecks: whoogleNormalRedirectsChecks, - whoogleNormalCustomRedirects: [], + whoogleNormalRedirectsChecks: whoogleNormalRedirectsChecks, + whoogleNormalCustomRedirects: [], - whoogleTorRedirectsChecks: [...redirects.whoogle.tor], - whoogleTorCustomRedirects: [], + whoogleTorRedirectsChecks: [...redirects.whoogle.tor], + whoogleTorCustomRedirects: [], - whoogleI2pRedirectsChecks: [...redirects.whoogle.i2p], - whoogleI2pCustomRedirects: [], + whoogleI2pRedirectsChecks: [...redirects.whoogle.i2p], + whoogleI2pCustomRedirects: [], - whoogleLokiRedirectsChecks: [...redirects.whoogle.loki], - whoogleLokiCustomRedirects: [], + whoogleLokiRedirectsChecks: [...redirects.whoogle.loki], + whoogleLokiCustomRedirects: [], - searxNormalRedirectsChecks: searxNormalRedirectsChecks, - searxNormalCustomRedirects: [], + searxNormalRedirectsChecks: searxNormalRedirectsChecks, + searxNormalCustomRedirects: [], - searxTorRedirectsChecks: [...redirects.searx.tor], - searxTorCustomRedirects: [], + searxTorRedirectsChecks: [...redirects.searx.tor], + searxTorCustomRedirects: [], - searxI2pRedirectsChecks: [...redirects.searx.i2p], - searxI2pCustomRedirects: [], + searxI2pRedirectsChecks: [...redirects.searx.i2p], + searxI2pCustomRedirects: [], - searxLokiRedirectsChecks: [...redirects.searx.loki], - searxLokiCustomRedirects: [], + searxLokiRedirectsChecks: [...redirects.searx.loki], + searxLokiCustomRedirects: [], - searxngNormalRedirectsChecks: searxngNormalRedirectsChecks, - searxngNormalCustomRedirects: [], + searxngNormalRedirectsChecks: searxngNormalRedirectsChecks, + searxngNormalCustomRedirects: [], - searxngTorRedirectsChecks: [...redirects.searxng.tor], - searxngTorCustomRedirects: [], + searxngTorRedirectsChecks: [...redirects.searxng.tor], + searxngTorCustomRedirects: [], - searxngI2pRedirectsChecks: [...redirects.searxng.i2p], - searxngI2pCustomRedirects: [], + searxngI2pRedirectsChecks: [...redirects.searxng.i2p], + searxngI2pCustomRedirects: [], - searxngLokiRedirectsChecks: [...redirects.searxng.loki], - searxngLokiCustomRedirects: [], + searxngLokiRedirectsChecks: [...redirects.searxng.loki], + searxngLokiCustomRedirects: [], - librexNormalRedirectsChecks: librexNormalRedirectsChecks, - librexNormalCustomRedirects: [], + librexNormalRedirectsChecks: librexNormalRedirectsChecks, + librexNormalCustomRedirects: [], - librexTorRedirectsChecks: [...redirects.librex.tor], - librexTorCustomRedirects: [], + librexTorRedirectsChecks: [...redirects.librex.tor], + librexTorCustomRedirects: [], - librexI2pRedirectsChecks: [...redirects.librex.i2p], - librexI2pCustomRedirects: [], + librexI2pRedirectsChecks: [...redirects.librex.i2p], + librexI2pCustomRedirects: [], - librexLokiRedirectsChecks: [...redirects.librex.loki], - librexLokiCustomRedirects: [] - }, () => resolve()) - }) - }) - }) + librexLokiRedirectsChecks: [...redirects.librex.loki], + librexLokiCustomRedirects: [], + }, + () => resolve() + ) + }) + }) + }) } export default { - setRedirects, - initSearxCookies, - pasteSearxCookies, - initSearxngCookies, - pasteSearxngCookies, - initLibrexCookies, - pasteLibrexCookies, - redirect, - initDefaults, - switchInstance, -}; + setRedirects, + initSearxCookies, + pasteSearxCookies, + initSearxngCookies, + pasteSearxngCookies, + initLibrexCookies, + pasteLibrexCookies, + redirect, + initDefaults, + switchInstance, +} diff --git a/src/assets/javascripts/sendTargets.js b/src/assets/javascripts/sendTargets.js index 2ea95d21..ba892fe3 100644 --- a/src/assets/javascripts/sendTargets.js +++ b/src/assets/javascripts/sendTargets.js @@ -1,12 +1,8 @@ -window.browser = window.browser || window.chrome; +window.browser = window.browser || window.chrome -import utils from './utils.js' +import utils from "./utils.js" -const targets = [ - /^https?:\/{2}send\.libredirect\.invalid\/$/, - /^ https ?: \/\/send\.firefox\.com\/$/, - /^https?:\/{2}sendfiles\.online\/$/ -]; +const targets = [/^https?:\/{2}send\.libredirect\.invalid\/$/, /^ https ?: \/\/send\.firefox\.com\/$/, /^https?:\/{2}sendfiles\.online\/$/] const frontends = new Array("send") const protocols = new Array("normal", "tor", "i2p", "loki") @@ -14,167 +10,183 @@ const protocols = new Array("normal", "tor", "i2p", "loki") let redirects = {} for (let i = 0; i < frontends.length; i++) { - redirects[frontends[i]] = {} - for (let x = 0; x < protocols.length; x++) { - redirects[frontends[i]][protocols[x]] = [] - } + redirects[frontends[i]] = {} + for (let x = 0; x < protocols.length; x++) { + redirects[frontends[i]][protocols[x]] = [] + } } function setRedirects(val) { - browser.storage.local.get('cloudflareBlackList', r => { - redirects.send = val; - sendNormalRedirectsChecks = [...redirects.send.normal]; - for (const instance of r.cloudflareBlackList) { - const a = sendNormalRedirectsChecks.indexOf(instance); - if (a > -1) sendNormalRedirectsChecks.splice(a, 1); - } - browser.storage.local.set({ - sendTargetsRedirects: redirects, - sendNormalRedirectsChecks, - }) - }) + browser.storage.local.get("cloudflareBlackList", r => { + redirects.send = val + sendNormalRedirectsChecks = [...redirects.send.normal] + for (const instance of r.cloudflareBlackList) { + const a = sendNormalRedirectsChecks.indexOf(instance) + if (a > -1) sendNormalRedirectsChecks.splice(a, 1) + } + browser.storage.local.set({ + sendTargetsRedirects: redirects, + sendNormalRedirectsChecks, + }) + }) } -let - disableSendTarget, - sendTargetsRedirects, - sendNormalRedirectsChecks, - sendNormalCustomRedirects, - sendTorRedirectsChecks, - sendTorCustomRedirects, - sendI2pCustomRedirects, - sendLokiCustomRedirects, - protocol, - protocolFallback; +let disableSendTarget, + sendTargetsRedirects, + sendNormalRedirectsChecks, + sendNormalCustomRedirects, + sendTorRedirectsChecks, + sendTorCustomRedirects, + sendI2pCustomRedirects, + sendLokiCustomRedirects, + protocol, + protocolFallback function init() { - return new Promise(resolve => { - browser.storage.local.get( - [ - "disableSendTarget", - "sendTargetsRedirects", - "protocol", - "protocolFallback", - "sendNormalRedirectsChecks", - "sendNormalCustomRedirects", - "sendTorRedirectsChecks", - "sendTorCustomRedirects", - "sendI2pCustomRedirects", - "sendLokiCustomRedirects" - ], - r => { - disableSendTarget = r.disableSendTarget; - sendTargetsRedirects = r.sendTargetsRedirects; - sendNormalRedirectsChecks = r.sendNormalRedirectsChecks; - sendNormalCustomRedirects = r.sendNormalCustomRedirects; - sendTorRedirectsChecks = r.sendTorRedirectsChecks; - sendTorCustomRedirects = r.sendTorCustomRedirects; - sendI2pCustomRedirects = r.sendI2pCustomRedirects; - sendLokiCustomRedirects = r.sendLokiCustomRedirects; - protocol = r.protocol; - protocolFallback = r.protocolFallback; - resolve(); - } - ) - }) + return new Promise(resolve => { + browser.storage.local.get( + [ + "disableSendTarget", + "sendTargetsRedirects", + "protocol", + "protocolFallback", + "sendNormalRedirectsChecks", + "sendNormalCustomRedirects", + "sendTorRedirectsChecks", + "sendTorCustomRedirects", + "sendI2pCustomRedirects", + "sendLokiCustomRedirects", + ], + r => { + disableSendTarget = r.disableSendTarget + sendTargetsRedirects = r.sendTargetsRedirects + sendNormalRedirectsChecks = r.sendNormalRedirectsChecks + sendNormalCustomRedirects = r.sendNormalCustomRedirects + sendTorRedirectsChecks = r.sendTorRedirectsChecks + sendTorCustomRedirects = r.sendTorCustomRedirects + sendI2pCustomRedirects = r.sendI2pCustomRedirects + sendLokiCustomRedirects = r.sendLokiCustomRedirects + protocol = r.protocol + protocolFallback = r.protocolFallback + resolve() + } + ) + }) } -init(); +init() browser.storage.onChanged.addListener(init) function all() { - return [ - ...sendTargetsRedirects.send.normal, - ...sendTargetsRedirects.send.tor, - ...sendNormalCustomRedirects, - ...sendTorRedirectsChecks, - ...sendTorCustomRedirects, - ...sendI2pCustomRedirects, - ...sendLokiCustomRedirects - ]; + return [ + ...sendTargetsRedirects.send.normal, + ...sendTargetsRedirects.send.tor, + ...sendNormalCustomRedirects, + ...sendTorRedirectsChecks, + ...sendTorCustomRedirects, + ...sendI2pCustomRedirects, + ...sendLokiCustomRedirects, + ] } function switchInstance(url, disableOverride) { - return new Promise(async resolve => { - await init(); - if (disableSendTarget && !disableOverride) { resolve(); return; } - const protocolHost = utils.protocolHost(url); - if (!all().includes(protocolHost)) { resolve(); return; } - if (url.pathname != '/') { resolve(); return; } - - let instancesList = []; - if (protocol == 'loki') instancesList = [...sendLokiCustomRedirects]; - else if (protocol == 'i2p') instancesList = [...sendI2pCustomRedirects]; - else if (protocol == 'tor') instancesList = [...sendTorRedirectsChecks, ...sendTorCustomRedirects]; - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - instancesList = [...sendNormalRedirectsChecks, ...sendNormalCustomRedirects]; - } - - const i = instancesList.indexOf(protocolHost); - if (i > -1) instancesList.splice(i, 1); - if (instancesList.length === 0) { resolve(); return; } - - const randomInstance = utils.getRandomInstance(instancesList); - resolve(`${randomInstance}${url.pathname}${url.search}`); - }) + return new Promise(async resolve => { + await init() + if (disableSendTarget && !disableOverride) { + resolve() + return + } + const protocolHost = utils.protocolHost(url) + if (!all().includes(protocolHost)) { + resolve() + return + } + if (url.pathname != "/") { + resolve() + return + } + + let instancesList = [] + if (protocol == "loki") instancesList = [...sendLokiCustomRedirects] + else if (protocol == "i2p") instancesList = [...sendI2pCustomRedirects] + else if (protocol == "tor") instancesList = [...sendTorRedirectsChecks, ...sendTorCustomRedirects] + if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { + instancesList = [...sendNormalRedirectsChecks, ...sendNormalCustomRedirects] + } + + const i = instancesList.indexOf(protocolHost) + if (i > -1) instancesList.splice(i, 1) + if (instancesList.length === 0) { + resolve() + return + } + + const randomInstance = utils.getRandomInstance(instancesList) + resolve(`${randomInstance}${url.pathname}${url.search}`) + }) } function redirect(url, type, initiator, disableOverride) { - if (disableSendTarget && !disableOverride) return; - if (type != "main_frame") return; - if (initiator && (all().includes(initiator.origin) || targets.includes(initiator.host))) return; - if (!targets.some(rx => rx.test(url.href))) return; - - let instancesList = []; - if (protocol == 'loki') instancesList = [...sendLokiCustomRedirects]; - else if (protocol == 'i2p') instancesList = [...sendI2pCustomRedirects]; - else if (protocol == 'tor') instancesList = [...sendTorRedirectsChecks, ...sendTorCustomRedirects]; - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - instancesList = [...sendNormalRedirectsChecks, ...sendNormalCustomRedirects]; - } - if (instancesList.length === 0) return; - - const randomInstance = utils.getRandomInstance(instancesList); - return randomInstance; + if (disableSendTarget && !disableOverride) return + if (type != "main_frame") return + if (initiator && (all().includes(initiator.origin) || targets.includes(initiator.host))) return + if (!targets.some(rx => rx.test(url.href))) return + + let instancesList = [] + if (protocol == "loki") instancesList = [...sendLokiCustomRedirects] + else if (protocol == "i2p") instancesList = [...sendI2pCustomRedirects] + else if (protocol == "tor") instancesList = [...sendTorRedirectsChecks, ...sendTorCustomRedirects] + if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { + instancesList = [...sendNormalRedirectsChecks, ...sendNormalCustomRedirects] + } + if (instancesList.length === 0) return + + const randomInstance = utils.getRandomInstance(instancesList) + return randomInstance } function initDefaults() { - return new Promise(resolve => { - fetch('/instances/data.json').then(response => response.text()).then(async data => { - let dataJson = JSON.parse(data); - for (let i = 0; i < frontends.length; i++) { - redirects[frontends[i]] = dataJson[frontends[i]] - } - browser.storage.local.get('cloudflareBlackList', async r => { - sendNormalRedirectsChecks = [...redirects.send.normal]; - for (const instance of r.cloudflareBlackList) { - let i = sendNormalRedirectsChecks.indexOf(instance); - if (i > -1) sendNormalRedirectsChecks.splice(i, 1); - } - browser.storage.local.set({ - disableSendTarget: false, - sendTargetsRedirects: redirects, - - sendNormalRedirectsChecks: sendNormalRedirectsChecks, - sendNormalCustomRedirects: [], - - sendTorRedirectsChecks: [...redirects.send.tor], - sendTorCustomRedirects: [], - - sendI2pRedirectsChecks: [...redirects.send.i2p], - sendI2pCustomRedirects: [], - - sendLokiRedirectsChecks: [...redirects.send.loki], - sendLokiCustomRedirects: [] - }, () => resolve()) - }) - }) - }) + return new Promise(resolve => { + fetch("/instances/data.json") + .then(response => response.text()) + .then(async data => { + let dataJson = JSON.parse(data) + for (let i = 0; i < frontends.length; i++) { + redirects[frontends[i]] = dataJson[frontends[i]] + } + browser.storage.local.get("cloudflareBlackList", async r => { + sendNormalRedirectsChecks = [...redirects.send.normal] + for (const instance of r.cloudflareBlackList) { + let i = sendNormalRedirectsChecks.indexOf(instance) + if (i > -1) sendNormalRedirectsChecks.splice(i, 1) + } + browser.storage.local.set( + { + disableSendTarget: false, + sendTargetsRedirects: redirects, + + sendNormalRedirectsChecks: sendNormalRedirectsChecks, + sendNormalCustomRedirects: [], + + sendTorRedirectsChecks: [...redirects.send.tor], + sendTorCustomRedirects: [], + + sendI2pRedirectsChecks: [...redirects.send.i2p], + sendI2pCustomRedirects: [], + + sendLokiRedirectsChecks: [...redirects.send.loki], + sendLokiCustomRedirects: [], + }, + () => resolve() + ) + }) + }) + }) } export default { - setRedirects, - redirect, - switchInstance, - initDefaults, -}; + setRedirects, + redirect, + switchInstance, + initDefaults, +} diff --git a/src/assets/javascripts/tiktok.js b/src/assets/javascripts/tiktok.js index a5c14a27..ba4a9ff1 100644 --- a/src/assets/javascripts/tiktok.js +++ b/src/assets/javascripts/tiktok.js @@ -1,10 +1,8 @@ -window.browser = window.browser || window.chrome; +window.browser = window.browser || window.chrome -import utils from './utils.js' +import utils from "./utils.js" -const targets = [ - /^https?:\/{2}(www\.|)tiktok\.com.*/ -]; +const targets = [/^https?:\/{2}(www\.|)tiktok\.com.*/] const frontends = new Array("proxiTok") const protocols = new Array("normal", "tor", "i2p", "loki") @@ -12,232 +10,251 @@ const protocols = new Array("normal", "tor", "i2p", "loki") let redirects = {} for (let i = 0; i < frontends.length; i++) { - redirects[frontends[i]] = {} - for (let x = 0; x < protocols.length; x++) { - redirects[frontends[i]][protocols[x]] = [] - } + redirects[frontends[i]] = {} + for (let x = 0; x < protocols.length; x++) { + redirects[frontends[i]][protocols[x]] = [] + } } function setRedirects(val) { - browser.storage.local.get('cloudflareBlackList', r => { - redirects.proxiTok = val; - proxiTokNormalRedirectsChecks = [...redirects.proxiTok.normal]; - for (const instance of r.cloudflareBlackList) { - const a = proxiTokNormalRedirectsChecks.indexOf(instance); - if (a > -1) proxiTokNormalRedirectsChecks.splice(a, 1); - } - browser.storage.local.set({ - tiktokRedirects: redirects, - proxiTokNormalRedirectsChecks - }) - }) + browser.storage.local.get("cloudflareBlackList", r => { + redirects.proxiTok = val + proxiTokNormalRedirectsChecks = [...redirects.proxiTok.normal] + for (const instance of r.cloudflareBlackList) { + const a = proxiTokNormalRedirectsChecks.indexOf(instance) + if (a > -1) proxiTokNormalRedirectsChecks.splice(a, 1) + } + browser.storage.local.set({ + tiktokRedirects: redirects, + proxiTokNormalRedirectsChecks, + }) + }) } function initProxiTokCookies(test, from) { - return new Promise(async resolve => { - await init(); - let protocolHost = utils.protocolHost(from); - if (![ - ...proxiTokNormalRedirectsChecks, - ...proxiTokNormalCustomRedirects, - ...proxiTokTorRedirectsChecks, - ...proxiTokTorCustomRedirects, - ...proxiTokI2pCustomRedirects, - ...proxiTokLokiCustomRedirects, - ].includes(protocolHost)) resolve(); - - if (!test) { - let checkedInstances = []; - if (protocol == 'loki') checkedInstances = [...proxiTokI2pCustomRedirects]; - else if (protocol == 'i2p') checkedInstances = [...proxiTokLokiCustomRedirects]; - else if (protocol == 'tor') checkedInstances = [...proxiTokTorRedirectsChecks, ...proxiTokTorCustomRedirects]; - if ((checkedInstances.length === 0 && protocolFallback) || protocol == 'normal') { - checkedInstances = [...proxiTokNormalRedirectsChecks, ...proxiTokNormalCustomRedirects]; - } - await utils.copyCookie('proxitok', from, checkedInstances, 'theme'); - await utils.copyCookie('proxitok', from, checkedInstances, 'api-legacy'); - } - resolve(true); - }) + return new Promise(async resolve => { + await init() + let protocolHost = utils.protocolHost(from) + if ( + ![ + ...proxiTokNormalRedirectsChecks, + ...proxiTokNormalCustomRedirects, + ...proxiTokTorRedirectsChecks, + ...proxiTokTorCustomRedirects, + ...proxiTokI2pCustomRedirects, + ...proxiTokLokiCustomRedirects, + ].includes(protocolHost) + ) + resolve() + + if (!test) { + let checkedInstances = [] + if (protocol == "loki") checkedInstances = [...proxiTokI2pCustomRedirects] + else if (protocol == "i2p") checkedInstances = [...proxiTokLokiCustomRedirects] + else if (protocol == "tor") checkedInstances = [...proxiTokTorRedirectsChecks, ...proxiTokTorCustomRedirects] + if ((checkedInstances.length === 0 && protocolFallback) || protocol == "normal") { + checkedInstances = [...proxiTokNormalRedirectsChecks, ...proxiTokNormalCustomRedirects] + } + await utils.copyCookie("proxitok", from, checkedInstances, "theme") + await utils.copyCookie("proxitok", from, checkedInstances, "api-legacy") + } + resolve(true) + }) } function pasteProxiTokCookies() { - return new Promise(async resolve => { - await init(); - if (disableTiktok || protocol === undefined) { resolve(); return; } - let checkedInstances = []; - if (protocol == 'loki') checkedInstances = [...proxiTokI2pCustomRedirects]; - else if (protocol == 'i2p') checkedInstances = [...proxiTokLokiCustomRedirects]; - else if (protocol == 'tor') checkedInstances = [...proxiTokTorRedirectsChecks, ...proxiTokTorCustomRedirects]; - if ((checkedInstances.length === 0 && protocolFallback) || protocol == 'normal') { - checkedInstances = [...proxiTokNormalRedirectsChecks, ...proxiTokNormalCustomRedirects]; - } - utils.getCookiesFromStorage('proxitok', checkedInstances, 'theme'); - utils.getCookiesFromStorage('proxitok', checkedInstances, 'api-legacy'); - resolve(); - }) + return new Promise(async resolve => { + await init() + if (disableTiktok || protocol === undefined) { + resolve() + return + } + let checkedInstances = [] + if (protocol == "loki") checkedInstances = [...proxiTokI2pCustomRedirects] + else if (protocol == "i2p") checkedInstances = [...proxiTokLokiCustomRedirects] + else if (protocol == "tor") checkedInstances = [...proxiTokTorRedirectsChecks, ...proxiTokTorCustomRedirects] + if ((checkedInstances.length === 0 && protocolFallback) || protocol == "normal") { + checkedInstances = [...proxiTokNormalRedirectsChecks, ...proxiTokNormalCustomRedirects] + } + utils.getCookiesFromStorage("proxitok", checkedInstances, "theme") + utils.getCookiesFromStorage("proxitok", checkedInstances, "api-legacy") + resolve() + }) } -let - disableTiktok, - protocol, - protocolFallback, - tiktokRedirects, - proxiTokNormalRedirectsChecks, - proxiTokNormalCustomRedirects, - proxiTokTorRedirectsChecks, - proxiTokTorCustomRedirects, - proxiTokI2pCustomRedirects, - proxiTokLokiCustomRedirects; +let disableTiktok, + protocol, + protocolFallback, + tiktokRedirects, + proxiTokNormalRedirectsChecks, + proxiTokNormalCustomRedirects, + proxiTokTorRedirectsChecks, + proxiTokTorCustomRedirects, + proxiTokI2pCustomRedirects, + proxiTokLokiCustomRedirects function init() { - return new Promise(async resolve => { - browser.storage.local.get( - [ - "disableTiktok", - "protocol", - "protocolFallback", - "tiktokRedirects", - "proxiTokNormalRedirectsChecks", - "proxiTokNormalCustomRedirects", - "proxiTokTorRedirectsChecks", - "proxiTokTorCustomRedirects", - "proxiTokI2pCustomRedirects", - "proxiTokLokiCustomRedirects" - ], - r => { - disableTiktok = r.disableTiktok; - protocol = r.protocol; - protocolFallback = r.protocolFallback; - tiktokRedirects = r.tiktokRedirects; - proxiTokNormalRedirectsChecks = r.proxiTokNormalRedirectsChecks; - proxiTokNormalCustomRedirects = r.proxiTokNormalCustomRedirects; - proxiTokTorRedirectsChecks = r.proxiTokTorRedirectsChecks; - proxiTokTorCustomRedirects = r.proxiTokTorCustomRedirects; - proxiTokI2pCustomRedirects = r.proxiTokI2pCustomRedirects; - proxiTokLokiCustomRedirects = r.proxiTokLokiCustomRedirects; - resolve(); - } - ) - }) + return new Promise(async resolve => { + browser.storage.local.get( + [ + "disableTiktok", + "protocol", + "protocolFallback", + "tiktokRedirects", + "proxiTokNormalRedirectsChecks", + "proxiTokNormalCustomRedirects", + "proxiTokTorRedirectsChecks", + "proxiTokTorCustomRedirects", + "proxiTokI2pCustomRedirects", + "proxiTokLokiCustomRedirects", + ], + r => { + disableTiktok = r.disableTiktok + protocol = r.protocol + protocolFallback = r.protocolFallback + tiktokRedirects = r.tiktokRedirects + proxiTokNormalRedirectsChecks = r.proxiTokNormalRedirectsChecks + proxiTokNormalCustomRedirects = r.proxiTokNormalCustomRedirects + proxiTokTorRedirectsChecks = r.proxiTokTorRedirectsChecks + proxiTokTorCustomRedirects = r.proxiTokTorCustomRedirects + proxiTokI2pCustomRedirects = r.proxiTokI2pCustomRedirects + proxiTokLokiCustomRedirects = r.proxiTokLokiCustomRedirects + resolve() + } + ) + }) } -init(); +init() browser.storage.onChanged.addListener(init) // https://www.tiktok.com/@keysikaspol/video/7061265241887345946 // https://www.tiktok.com/@keysikaspol function redirect(url, type, initiator, disableOverride) { - if (disableTiktok && !disableOverride) return; - if (type != "main_frame") return; - const all = [ - ...tiktokRedirects.proxiTok.normal, - ...proxiTokNormalCustomRedirects - ]; - if (initiator && (all.includes(initiator.origin) || targets.includes(initiator.host))) return; - if (!targets.some(rx => rx.test(url.href))) return; - - let instancesList = []; - if (protocol == 'loki') instancesList = [...proxiTokI2pCustomRedirects]; - else if (protocol == 'i2p') instancesList = [...proxiTokLokiCustomRedirects]; - else if (protocol == 'tor') instancesList = [...proxiTokTorRedirectsChecks, ...proxiTokTorCustomRedirects]; - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - instancesList = [...proxiTokNormalRedirectsChecks, ...proxiTokNormalCustomRedirects]; - } - if (instancesList.length === 0) return; - - const randomInstance = utils.getRandomInstance(instancesList); - return `${randomInstance}${url.pathname}`; + if (disableTiktok && !disableOverride) return + if (type != "main_frame") return + const all = [...tiktokRedirects.proxiTok.normal, ...proxiTokNormalCustomRedirects] + if (initiator && (all.includes(initiator.origin) || targets.includes(initiator.host))) return + if (!targets.some(rx => rx.test(url.href))) return + + let instancesList = [] + if (protocol == "loki") instancesList = [...proxiTokI2pCustomRedirects] + else if (protocol == "i2p") instancesList = [...proxiTokLokiCustomRedirects] + else if (protocol == "tor") instancesList = [...proxiTokTorRedirectsChecks, ...proxiTokTorCustomRedirects] + if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { + instancesList = [...proxiTokNormalRedirectsChecks, ...proxiTokNormalCustomRedirects] + } + if (instancesList.length === 0) return + + const randomInstance = utils.getRandomInstance(instancesList) + return `${randomInstance}${url.pathname}` } function reverse(url) { - return new Promise(async resolve => { - await init(); - let protocolHost = utils.protocolHost(url); - const all = [ - ...tiktokRedirects.proxiTok.normal, - ...tiktokRedirects.proxiTok.tor, - ...proxiTokNormalCustomRedirects, - ...proxiTokTorCustomRedirects, - ...proxiTokI2pCustomRedirects, - ...proxiTokLokiCustomRedirects - ]; - if (!all.includes(protocolHost)) { resolve(); return; } - - resolve(`https://tiktok.com${url.pathname}${url.search}`); - }) + return new Promise(async resolve => { + await init() + let protocolHost = utils.protocolHost(url) + const all = [ + ...tiktokRedirects.proxiTok.normal, + ...tiktokRedirects.proxiTok.tor, + ...proxiTokNormalCustomRedirects, + ...proxiTokTorCustomRedirects, + ...proxiTokI2pCustomRedirects, + ...proxiTokLokiCustomRedirects, + ] + if (!all.includes(protocolHost)) { + resolve() + return + } + + resolve(`https://tiktok.com${url.pathname}${url.search}`) + }) } function switchInstance(url, disableOverride) { - return new Promise(async resolve => { - await init(); - if (disableTiktok && !disableOverride) { resolve(); return; } - let protocolHost = utils.protocolHost(url); - const all = [ - ...tiktokRedirects.proxiTok.tor, - ...tiktokRedirects.proxiTok.normal, - - ...proxiTokNormalCustomRedirects, - ...proxiTokTorCustomRedirects, - ...proxiTokI2pCustomRedirects, - ...proxiTokLokiCustomRedirects - ]; - if (!all.includes(protocolHost)) { resolve(); return; } - - let instancesList = []; - if (protocol == 'loki') instancesList = [...proxiTokI2pCustomRedirects]; - else if (protocol == 'i2p') instancesList = [...proxiTokLokiCustomRedirects]; - else if (protocol == 'tor') instancesList = [...proxiTokTorRedirectsChecks, ...proxiTokTorCustomRedirects]; - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - instancesList = [...proxiTokNormalRedirectsChecks, ...proxiTokNormalCustomRedirects]; - } - - const i = instancesList.indexOf(protocolHost); - if (i > -1) instancesList.splice(i, 1); - if (instancesList.length === 0) { resolve(); return; } - - const randomInstance = utils.getRandomInstance(instancesList); - resolve(`${randomInstance}${url.pathname}${url.search}`); - }) + return new Promise(async resolve => { + await init() + if (disableTiktok && !disableOverride) { + resolve() + return + } + let protocolHost = utils.protocolHost(url) + const all = [ + ...tiktokRedirects.proxiTok.tor, + ...tiktokRedirects.proxiTok.normal, + + ...proxiTokNormalCustomRedirects, + ...proxiTokTorCustomRedirects, + ...proxiTokI2pCustomRedirects, + ...proxiTokLokiCustomRedirects, + ] + if (!all.includes(protocolHost)) { + resolve() + return + } + + let instancesList = [] + if (protocol == "loki") instancesList = [...proxiTokI2pCustomRedirects] + else if (protocol == "i2p") instancesList = [...proxiTokLokiCustomRedirects] + else if (protocol == "tor") instancesList = [...proxiTokTorRedirectsChecks, ...proxiTokTorCustomRedirects] + if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { + instancesList = [...proxiTokNormalRedirectsChecks, ...proxiTokNormalCustomRedirects] + } + + const i = instancesList.indexOf(protocolHost) + if (i > -1) instancesList.splice(i, 1) + if (instancesList.length === 0) { + resolve() + return + } + + const randomInstance = utils.getRandomInstance(instancesList) + resolve(`${randomInstance}${url.pathname}${url.search}`) + }) } function initDefaults() { - return new Promise(async resolve => { - fetch('/instances/data.json').then(response => response.text()).then(async data => { - let dataJson = JSON.parse(data); - for (let i = 0; i < frontends.length; i++) { - redirects[frontends[i]] = dataJson[frontends[i]] - } - browser.storage.local.set({ - disableTiktok: false, - - tiktokRedirects: redirects, - - proxiTokNormalRedirectsChecks: [...redirects.proxiTok.normal], - proxiTokNormalCustomRedirects: [], - - proxiTokTorRedirectsChecks: [...redirects.proxiTok.tor], - proxiTokTorCustomRedirects: [], - - proxiTokI2pRedirectsChecks: [...redirects.proxiTok.i2p], - proxiTokI2pCustomRedirects: [], - - proxiTokLokiRedirectsChecks: [...redirects.proxiTok.loki], - proxiTokLokiCustomRedirects: [] - }, () => resolve()); - }); - }) + return new Promise(async resolve => { + fetch("/instances/data.json") + .then(response => response.text()) + .then(async data => { + let dataJson = JSON.parse(data) + for (let i = 0; i < frontends.length; i++) { + redirects[frontends[i]] = dataJson[frontends[i]] + } + browser.storage.local.set( + { + disableTiktok: false, + + tiktokRedirects: redirects, + + proxiTokNormalRedirectsChecks: [...redirects.proxiTok.normal], + proxiTokNormalCustomRedirects: [], + + proxiTokTorRedirectsChecks: [...redirects.proxiTok.tor], + proxiTokTorCustomRedirects: [], + + proxiTokI2pRedirectsChecks: [...redirects.proxiTok.i2p], + proxiTokI2pCustomRedirects: [], + + proxiTokLokiRedirectsChecks: [...redirects.proxiTok.loki], + proxiTokLokiCustomRedirects: [], + }, + () => resolve() + ) + }) + }) } export default { - setRedirects, + setRedirects, - redirect, - reverse, - switchInstance, + redirect, + reverse, + switchInstance, - initProxiTokCookies, - pasteProxiTokCookies, + initProxiTokCookies, + pasteProxiTokCookies, - initDefaults -}; + initDefaults, +} diff --git a/src/assets/javascripts/translate/get_lingva_preferences.js b/src/assets/javascripts/translate/get_lingva_preferences.js index 40def6a5..0d6ff6ec 100644 --- a/src/assets/javascripts/translate/get_lingva_preferences.js +++ b/src/assets/javascripts/translate/get_lingva_preferences.js @@ -1,12 +1,10 @@ -window.browser = window.browser || window.chrome; +window.browser = window.browser || window.chrome -browser.storage.local.set( - { - ['lingva_chakra-ui-color-mode']: localStorage.getItem('chakra-ui-color-mode'), - lingva_isauto: localStorage.getItem('isauto'), - lingva_source: localStorage.getItem('source'), - lingva_target: localStorage.getItem('target'), - } -) +browser.storage.local.set({ + ["lingva_chakra-ui-color-mode"]: localStorage.getItem("chakra-ui-color-mode"), + lingva_isauto: localStorage.getItem("isauto"), + lingva_source: localStorage.getItem("source"), + lingva_target: localStorage.getItem("target"), +}) -console.log(localStorage.getItem('target')); \ No newline at end of file +console.log(localStorage.getItem("target")) diff --git a/src/assets/javascripts/translate/set_lingva_preferences.js b/src/assets/javascripts/translate/set_lingva_preferences.js index a0f2ad87..04a36e1b 100644 --- a/src/assets/javascripts/translate/set_lingva_preferences.js +++ b/src/assets/javascripts/translate/set_lingva_preferences.js @@ -1,17 +1,9 @@ -window.browser = window.browser || window.chrome; +window.browser = window.browser || window.chrome -browser.storage.local.get( - [ - "lingva_chakra-ui-color-mode", - "lingva_isauto", - "lingva_source", - "lingva_target", - ], - r => { - if (r['lingva_chakra-ui-color-mode'] !== undefined) localStorage.setItem('chakra-ui-color-mode', r['lingva_chakra-ui-color-mode']); - if (r.lingva_isauto !== undefined) localStorage.setItem('isauto', r.lingva_isauto); - if (r.lingva_source !== undefined) localStorage.setItem('source', r.lingva_source); - if (r.lingva_target !== undefined) localStorage.setItem('target', r.lingva_target); - window.close(); - } -) +browser.storage.local.get(["lingva_chakra-ui-color-mode", "lingva_isauto", "lingva_source", "lingva_target"], r => { + if (r["lingva_chakra-ui-color-mode"] !== undefined) localStorage.setItem("chakra-ui-color-mode", r["lingva_chakra-ui-color-mode"]) + if (r.lingva_isauto !== undefined) localStorage.setItem("isauto", r.lingva_isauto) + if (r.lingva_source !== undefined) localStorage.setItem("source", r.lingva_source) + if (r.lingva_target !== undefined) localStorage.setItem("target", r.lingva_target) + window.close() +}) diff --git a/src/assets/javascripts/translate/translate.js b/src/assets/javascripts/translate/translate.js index 75c5b5f8..5512f7f1 100644 --- a/src/assets/javascripts/translate/translate.js +++ b/src/assets/javascripts/translate/translate.js @@ -1,379 +1,413 @@ -window.browser = window.browser || window.chrome; +window.browser = window.browser || window.chrome -import utils from '../utils.js' +import utils from "../utils.js" -const targets = [ - /^https?:\/{2}translate\.google(\.[a-z]{2,3}){1,2}\//, -]; +const targets = [/^https?:\/{2}translate\.google(\.[a-z]{2,3}){1,2}\//] const frontends = new Array("simplyTranslate", "lingva") const protocols = new Array("normal", "tor", "i2p", "loki") -let redirects = {}; +let redirects = {} for (let i = 0; i < frontends.length; i++) { - redirects[frontends[i]] = {} - for (let x = 0; x < protocols.length; x++) { - redirects[frontends[i]][protocols[x]] = [] - } + redirects[frontends[i]] = {} + for (let x = 0; x < protocols.length; x++) { + redirects[frontends[i]][protocols[x]] = [] + } } -let - translateDisable, - translateFrontend, - protocol, - protocolFallback, - translateRedirects, - simplyTranslateNormalRedirectsChecks, - simplyTranslateNormalCustomRedirects, - simplyTranslateTorRedirectsChecks, - simplyTranslateTorCustomRedirects, - simplyTranslateI2pRedirectsChecks, - simplyTranslateI2pCustomRedirects, - simplyTranslateLokiRedirectsChecks, - simplyTranslateLokiCustomRedirects, - lingvaNormalRedirectsChecks, - lingvaNormalCustomRedirects, - lingvaTorRedirectsChecks, - lingvaTorCustomRedirects, - lingvaI2pCustomRedirects, - lingvaLokiCustomRedirects +let translateDisable, + translateFrontend, + protocol, + protocolFallback, + translateRedirects, + simplyTranslateNormalRedirectsChecks, + simplyTranslateNormalCustomRedirects, + simplyTranslateTorRedirectsChecks, + simplyTranslateTorCustomRedirects, + simplyTranslateI2pRedirectsChecks, + simplyTranslateI2pCustomRedirects, + simplyTranslateLokiRedirectsChecks, + simplyTranslateLokiCustomRedirects, + lingvaNormalRedirectsChecks, + lingvaNormalCustomRedirects, + lingvaTorRedirectsChecks, + lingvaTorCustomRedirects, + lingvaI2pCustomRedirects, + lingvaLokiCustomRedirects function init() { - return new Promise(resolve => { - browser.storage.local.get( - [ - "translateDisable", - "translateFrontend", - "protocol", - "protocolFallback", - "translateRedirects", - "simplyTranslateNormalRedirectsChecks", - "simplyTranslateNormalCustomRedirects", - "simplyTranslateTorRedirectsChecks", - "simplyTranslateTorCustomRedirects", - "simplyTranslateI2pRedirectsChecks", - "simplyTranslateI2pCustomRedirects", - "simplyTranslateLokiRedirectsChecks", - "simplyTranslateLokiCustomRedirects", - - "lingvaNormalRedirectsChecks", - "lingvaNormalCustomRedirects", - "lingvaTorRedirectsChecks", - "lingvaTorCustomRedirects", - "lingvaI2pCustomRedirects", - "lingvaLokiCustomRedirects" - ], - r => { - translateDisable = r.translateDisable; - translateFrontend = r.translateFrontend; - protocol = r.protocol; - protocolFallback = r.protocolFallback - translateRedirects = r.translateRedirects; - simplyTranslateNormalRedirectsChecks = r.simplyTranslateNormalRedirectsChecks; - simplyTranslateNormalCustomRedirects = r.simplyTranslateNormalCustomRedirects; - simplyTranslateTorRedirectsChecks = r.simplyTranslateTorRedirectsChecks; - simplyTranslateTorCustomRedirects = r.simplyTranslateTorCustomRedirects; - simplyTranslateI2pRedirectsChecks = r.simplyTranslateI2pRedirectsChecks; - simplyTranslateI2pCustomRedirects = r.simplyTranslateI2pCustomRedirects; - simplyTranslateLokiRedirectsChecks = r.simplyTranslateLokiRedirectsChecks; - simplyTranslateLokiCustomRedirects = r.simplyTranslateLokiCustomRedirects; - lingvaNormalRedirectsChecks = r.lingvaNormalRedirectsChecks; - lingvaNormalCustomRedirects = r.lingvaNormalCustomRedirects; - lingvaTorRedirectsChecks = r.lingvaTorRedirectsChecks; - lingvaTorCustomRedirects = r.lingvaTorCustomRedirects; - lingvaI2pCustomRedirects = r.lingvaI2pCustomRedirects; - lingvaLokiCustomRedirects = r.lingvaLokiCustomRedirects; - resolve(); - } - ) - }) + return new Promise(resolve => { + browser.storage.local.get( + [ + "translateDisable", + "translateFrontend", + "protocol", + "protocolFallback", + "translateRedirects", + "simplyTranslateNormalRedirectsChecks", + "simplyTranslateNormalCustomRedirects", + "simplyTranslateTorRedirectsChecks", + "simplyTranslateTorCustomRedirects", + "simplyTranslateI2pRedirectsChecks", + "simplyTranslateI2pCustomRedirects", + "simplyTranslateLokiRedirectsChecks", + "simplyTranslateLokiCustomRedirects", + + "lingvaNormalRedirectsChecks", + "lingvaNormalCustomRedirects", + "lingvaTorRedirectsChecks", + "lingvaTorCustomRedirects", + "lingvaI2pCustomRedirects", + "lingvaLokiCustomRedirects", + ], + r => { + translateDisable = r.translateDisable + translateFrontend = r.translateFrontend + protocol = r.protocol + protocolFallback = r.protocolFallback + translateRedirects = r.translateRedirects + simplyTranslateNormalRedirectsChecks = r.simplyTranslateNormalRedirectsChecks + simplyTranslateNormalCustomRedirects = r.simplyTranslateNormalCustomRedirects + simplyTranslateTorRedirectsChecks = r.simplyTranslateTorRedirectsChecks + simplyTranslateTorCustomRedirects = r.simplyTranslateTorCustomRedirects + simplyTranslateI2pRedirectsChecks = r.simplyTranslateI2pRedirectsChecks + simplyTranslateI2pCustomRedirects = r.simplyTranslateI2pCustomRedirects + simplyTranslateLokiRedirectsChecks = r.simplyTranslateLokiRedirectsChecks + simplyTranslateLokiCustomRedirects = r.simplyTranslateLokiCustomRedirects + lingvaNormalRedirectsChecks = r.lingvaNormalRedirectsChecks + lingvaNormalCustomRedirects = r.lingvaNormalCustomRedirects + lingvaTorRedirectsChecks = r.lingvaTorRedirectsChecks + lingvaTorCustomRedirects = r.lingvaTorCustomRedirects + lingvaI2pCustomRedirects = r.lingvaI2pCustomRedirects + lingvaLokiCustomRedirects = r.lingvaLokiCustomRedirects + resolve() + } + ) + }) } -init(); +init() browser.storage.onChanged.addListener(init) function setRedirects(val) { - browser.storage.local.get('cloudflareBlackList', r => { - redirects = val; - lingvaNormalRedirectsChecks = [...redirects.lingva.normal] - for (const instance of r.cloudflareBlackList) { - const i = lingvaNormalRedirectsChecks.indexOf(instance); - if (i > -1) lingvaNormalRedirectsChecks.splice(i, 1); - } - browser.storage.local.set({ - translateRedirects: redirects, - simplyTranslateNormalRedirectsChecks: redirects.simplyTranslate.normal, - simplyTranslateTorRedirectsChecks: redirects.simplyTranslate.tor, - simplyTranslateI2pRedirectsChecks: redirects.simplyTranslate.i2p, - simplyTranslateLokiRedirectsChecks: redirects.simplyTranslate.loki, - lingvaNormalRedirectsChecks, - lingvaTorRedirectsChecks: redirects.lingva.tor, - }) - }) + browser.storage.local.get("cloudflareBlackList", r => { + redirects = val + lingvaNormalRedirectsChecks = [...redirects.lingva.normal] + for (const instance of r.cloudflareBlackList) { + const i = lingvaNormalRedirectsChecks.indexOf(instance) + if (i > -1) lingvaNormalRedirectsChecks.splice(i, 1) + } + browser.storage.local.set({ + translateRedirects: redirects, + simplyTranslateNormalRedirectsChecks: redirects.simplyTranslate.normal, + simplyTranslateTorRedirectsChecks: redirects.simplyTranslate.tor, + simplyTranslateI2pRedirectsChecks: redirects.simplyTranslate.i2p, + simplyTranslateLokiRedirectsChecks: redirects.simplyTranslate.loki, + lingvaNormalRedirectsChecks, + lingvaTorRedirectsChecks: redirects.lingva.tor, + }) + }) } function copyPasteLingvaLocalStorage(test, url, tabId) { - return new Promise(async resolve => { - await init(); - if (translateDisable || translateFrontend != 'lingva') { resolve(); return; } - const protocolHost = utils.protocolHost(url); - if (![ - ...lingvaNormalRedirectsChecks, - ...lingvaNormalCustomRedirects, - ...lingvaTorRedirectsChecks, - ...lingvaTorCustomRedirects, - ...lingvaI2pCustomRedirects, - ...lingvaLokiCustomRedirects - ].includes(protocolHost)) { resolve(); return; } - - if (!test) { - browser.tabs.executeScript( - tabId, - { file: "/assets/javascripts/translate/get_lingva_preferences.js", runAt: "document_start" } - ); - - let checkedInstances = []; - if (protocol == 'loki') checkedInstances = [...lingvaLokiCustomRedirects]; //...lingvaLokiRedirectsChecks, - else if (protocol == 'i2p') checkedInstances = [...lingvaI2pCustomRedirects]; //...lingvaI2pRedirectsChecks, - else if (protocol == 'tor') checkedInstances = [...lingvaTorRedirectsChecks, ...lingvaTorCustomRedirects]; - if ((checkedInstances.length === 0 && protocolFallback) || protocol == 'normal') { - checkedInstances = [...lingvaNormalRedirectsChecks, ...lingvaNormalCustomRedirects]; - } - const i = checkedInstances.indexOf(protocolHost); - if (i !== -1) checkedInstances.splice(i, 1); - if (checkedInstances.length === 0) { resolve(); return; } - for (const to of checkedInstances) - browser.tabs.create( - { url: to }, - tab => browser.tabs.executeScript(tab.id, { file: "/assets/javascripts/translate/set_lingva_preferences.js", runAt: "document_start" }) - ); - } - resolve(true); - } - ) + return new Promise(async resolve => { + await init() + if (translateDisable || translateFrontend != "lingva") { + resolve() + return + } + const protocolHost = utils.protocolHost(url) + if ( + ![...lingvaNormalRedirectsChecks, ...lingvaNormalCustomRedirects, ...lingvaTorRedirectsChecks, ...lingvaTorCustomRedirects, ...lingvaI2pCustomRedirects, ...lingvaLokiCustomRedirects].includes( + protocolHost + ) + ) { + resolve() + return + } + + if (!test) { + browser.tabs.executeScript(tabId, { + file: "/assets/javascripts/translate/get_lingva_preferences.js", + runAt: "document_start", + }) + + let checkedInstances = [] + if (protocol == "loki") checkedInstances = [...lingvaLokiCustomRedirects] + //...lingvaLokiRedirectsChecks, + else if (protocol == "i2p") checkedInstances = [...lingvaI2pCustomRedirects] + //...lingvaI2pRedirectsChecks, + else if (protocol == "tor") checkedInstances = [...lingvaTorRedirectsChecks, ...lingvaTorCustomRedirects] + if ((checkedInstances.length === 0 && protocolFallback) || protocol == "normal") { + checkedInstances = [...lingvaNormalRedirectsChecks, ...lingvaNormalCustomRedirects] + } + const i = checkedInstances.indexOf(protocolHost) + if (i !== -1) checkedInstances.splice(i, 1) + if (checkedInstances.length === 0) { + resolve() + return + } + for (const to of checkedInstances) + browser.tabs.create({ url: to }, tab => + browser.tabs.executeScript(tab.id, { + file: "/assets/javascripts/translate/set_lingva_preferences.js", + runAt: "document_start", + }) + ) + } + resolve(true) + }) } function pasteLingvaLocalStorage() { - return new Promise(async resolve => { - await init(); - if (translateDisable || translateFrontend != 'lingva') { resolve(); return; } - let checkedInstances = []; - if (protocol == 'loki') checkedInstances = [...lingvaLokiCustomRedirects]; //...lingvaLokiRedirectsChecks, - else if (protocol == 'i2p') checkedInstances = [...lingvaI2pCustomRedirects]; //...lingvaI2pRedirectsChecks, - else if (protocol == 'tor') checkedInstances = [...lingvaTorRedirectsChecks, ...lingvaTorCustomRedirects]; - if ((checkedInstances.length === 0 && protocolFallback) || protocol == 'normal') { - checkedInstances = [...lingvaNormalRedirectsChecks, ...lingvaNormalCustomRedirects]; - } - for (const to of checkedInstances) - browser.tabs.create({ url: to }, - tab => browser.tabs.executeScript(tab.id, { file: "/assets/javascripts/translate/set_lingva_preferences.js", runAt: "document_start" })) - resolve(); - }) + return new Promise(async resolve => { + await init() + if (translateDisable || translateFrontend != "lingva") { + resolve() + return + } + let checkedInstances = [] + if (protocol == "loki") checkedInstances = [...lingvaLokiCustomRedirects] + //...lingvaLokiRedirectsChecks, + else if (protocol == "i2p") checkedInstances = [...lingvaI2pCustomRedirects] + //...lingvaI2pRedirectsChecks, + else if (protocol == "tor") checkedInstances = [...lingvaTorRedirectsChecks, ...lingvaTorCustomRedirects] + if ((checkedInstances.length === 0 && protocolFallback) || protocol == "normal") { + checkedInstances = [...lingvaNormalRedirectsChecks, ...lingvaNormalCustomRedirects] + } + for (const to of checkedInstances) + browser.tabs.create({ url: to }, tab => + browser.tabs.executeScript(tab.id, { + file: "/assets/javascripts/translate/set_lingva_preferences.js", + runAt: "document_start", + }) + ) + resolve() + }) } function copyPasteSimplyTranslateCookies(test, from) { - return new Promise(async resolve => { - await init(); - const protocolHost = utils.protocolHost(from); - if (![ - ...simplyTranslateNormalRedirectsChecks, - ...simplyTranslateNormalCustomRedirects, - ...simplyTranslateTorRedirectsChecks, - ...simplyTranslateTorCustomRedirects, - ...simplyTranslateI2pRedirectsChecks, - ...simplyTranslateI2pCustomRedirects, - ...simplyTranslateLokiRedirectsChecks, - ...simplyTranslateLokiCustomRedirects, - ].includes(protocolHost)) { resolve(); return; } - if (!test) { - let checkedInstances = []; - if (protocol == 'loki') checkedInstances = [...simplyTranslateLokiRedirectsChecks, ...simplyTranslateLokiCustomRedirects] - else if (protocol == 'i2p') checkedInstances = [...simplyTranslateI2pCustomRedirects, ...simplyTranslateI2pRedirectsChecks]; - else if (protocol == 'tor') checkedInstances = [...simplyTranslateTorRedirectsChecks, ...simplyTranslateTorCustomRedirects]; - if ((checkedInstances.length === 0 && protocolFallback) || protocol == 'normal') { - checkedInstances = [...simplyTranslateNormalRedirectsChecks, ...simplyTranslateNormalCustomRedirects]; - } - await utils.copyCookie('simplyTranslate', from, checkedInstances, 'from_lang'); - await utils.copyCookie('simplyTranslate', from, checkedInstances, 'to_lang'); - await utils.copyCookie('simplyTranslate', from, checkedInstances, 'tts_enabled'); - await utils.copyCookie('simplyTranslate', from, checkedInstances, 'use_text_fields'); - } - resolve(true); - } - ) + return new Promise(async resolve => { + await init() + const protocolHost = utils.protocolHost(from) + if ( + ![ + ...simplyTranslateNormalRedirectsChecks, + ...simplyTranslateNormalCustomRedirects, + ...simplyTranslateTorRedirectsChecks, + ...simplyTranslateTorCustomRedirects, + ...simplyTranslateI2pRedirectsChecks, + ...simplyTranslateI2pCustomRedirects, + ...simplyTranslateLokiRedirectsChecks, + ...simplyTranslateLokiCustomRedirects, + ].includes(protocolHost) + ) { + resolve() + return + } + if (!test) { + let checkedInstances = [] + if (protocol == "loki") checkedInstances = [...simplyTranslateLokiRedirectsChecks, ...simplyTranslateLokiCustomRedirects] + else if (protocol == "i2p") checkedInstances = [...simplyTranslateI2pCustomRedirects, ...simplyTranslateI2pRedirectsChecks] + else if (protocol == "tor") checkedInstances = [...simplyTranslateTorRedirectsChecks, ...simplyTranslateTorCustomRedirects] + if ((checkedInstances.length === 0 && protocolFallback) || protocol == "normal") { + checkedInstances = [...simplyTranslateNormalRedirectsChecks, ...simplyTranslateNormalCustomRedirects] + } + await utils.copyCookie("simplyTranslate", from, checkedInstances, "from_lang") + await utils.copyCookie("simplyTranslate", from, checkedInstances, "to_lang") + await utils.copyCookie("simplyTranslate", from, checkedInstances, "tts_enabled") + await utils.copyCookie("simplyTranslate", from, checkedInstances, "use_text_fields") + } + resolve(true) + }) } function pasteSimplyTranslateCookies() { - return new Promise(async resolve => { - await init(); - if (translateDisable || translateFrontend != 'simplyTranslate') { resolve(); return; } - let checkedInstances = []; - if (protocol == 'loki') checkedInstances = [...simplyTranslateLokiRedirectsChecks, ...simplyTranslateLokiCustomRedirects] - else if (protocol == 'i2p') checkedInstances = [...simplyTranslateI2pCustomRedirects, ...simplyTranslateI2pRedirectsChecks]; - else if (protocol == 'tor') checkedInstances = [...simplyTranslateTorRedirectsChecks, ...simplyTranslateTorCustomRedirects]; - if ((checkedInstances.length === 0 && protocolFallback) || protocol == 'normal') { - checkedInstances = [...simplyTranslateNormalRedirectsChecks, ...simplyTranslateNormalCustomRedirects]; - } - utils.getCookiesFromStorage('simplyTranslate', checkedInstances, 'from_lang'); - utils.getCookiesFromStorage('simplyTranslate', checkedInstances, 'to_lang'); - utils.getCookiesFromStorage('simplyTranslate', checkedInstances, 'tts_enabled'); - utils.getCookiesFromStorage('simplyTranslate', checkedInstances, 'use_text_fields'); - resolve(); - } - ) + return new Promise(async resolve => { + await init() + if (translateDisable || translateFrontend != "simplyTranslate") { + resolve() + return + } + let checkedInstances = [] + if (protocol == "loki") checkedInstances = [...simplyTranslateLokiRedirectsChecks, ...simplyTranslateLokiCustomRedirects] + else if (protocol == "i2p") checkedInstances = [...simplyTranslateI2pCustomRedirects, ...simplyTranslateI2pRedirectsChecks] + else if (protocol == "tor") checkedInstances = [...simplyTranslateTorRedirectsChecks, ...simplyTranslateTorCustomRedirects] + if ((checkedInstances.length === 0 && protocolFallback) || protocol == "normal") { + checkedInstances = [...simplyTranslateNormalRedirectsChecks, ...simplyTranslateNormalCustomRedirects] + } + utils.getCookiesFromStorage("simplyTranslate", checkedInstances, "from_lang") + utils.getCookiesFromStorage("simplyTranslate", checkedInstances, "to_lang") + utils.getCookiesFromStorage("simplyTranslate", checkedInstances, "tts_enabled") + utils.getCookiesFromStorage("simplyTranslate", checkedInstances, "use_text_fields") + resolve() + }) } function redirect(url, disableOverride) { - if (translateDisable && !disableOverride) return; - if (!targets.some(rx => rx.test(url.href))) return; - - if (translateFrontend == 'simplyTranslate') { - let instancesList = []; - if (protocol == 'loki') instancesList = [...simplyTranslateLokiRedirectsChecks, ...simplyTranslateLokiCustomRedirects]; - else if (protocol == 'i2p') instancesList = [...simplyTranslateI2pRedirectsChecks, ...simplyTranslateI2pCustomRedirects]; - else if (protocol == 'tor') instancesList = [...simplyTranslateTorRedirectsChecks, ...simplyTranslateTorCustomRedirects]; - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - instancesList = [...simplyTranslateNormalRedirectsChecks, ...simplyTranslateNormalCustomRedirects]; - } - if (instancesList.length === 0) return; - - const randomInstance = utils.getRandomInstance(instancesList) - return `${randomInstance}/${url.search}`; - } - else if (translateFrontend == 'lingva') { - let params_arr = url.search.split('&'); - params_arr[0] = params_arr[0].substring(1); - let params = {}; - for (let i = 0; i < params_arr.length; i++) { - let pair = params_arr[i].split('='); - params[pair[0]] = pair[1]; - } - let instancesList = []; - if (protocol == 'loki') instancesList = [...lingvaLokiCustomRedirects]; //...lingvaLokiRedirectsChecks, - else if (protocol == 'i2p') instancesList = [...lingvaI2pCustomRedirects]; //...lingvaI2pRedirectsChecks, - if (protocol == 'tor') instancesList = [...lingvaTorRedirectsChecks, ...lingvaTorCustomRedirects]; - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - instancesList = [...lingvaNormalRedirectsChecks, ...lingvaNormalCustomRedirects]; - } - if (instancesList.length === 0) return; - - const randomInstance = utils.getRandomInstance(instancesList) - if (params.sl && params.tl && params.text) { - return `${randomInstance}/${params.sl}/${params.tl}/${params.text}` - } - return randomInstance; - } + if (translateDisable && !disableOverride) return + if (!targets.some(rx => rx.test(url.href))) return + + if (translateFrontend == "simplyTranslate") { + let instancesList = [] + if (protocol == "loki") instancesList = [...simplyTranslateLokiRedirectsChecks, ...simplyTranslateLokiCustomRedirects] + else if (protocol == "i2p") instancesList = [...simplyTranslateI2pRedirectsChecks, ...simplyTranslateI2pCustomRedirects] + else if (protocol == "tor") instancesList = [...simplyTranslateTorRedirectsChecks, ...simplyTranslateTorCustomRedirects] + if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { + instancesList = [...simplyTranslateNormalRedirectsChecks, ...simplyTranslateNormalCustomRedirects] + } + if (instancesList.length === 0) return + + const randomInstance = utils.getRandomInstance(instancesList) + return `${randomInstance}/${url.search}` + } else if (translateFrontend == "lingva") { + let params_arr = url.search.split("&") + params_arr[0] = params_arr[0].substring(1) + let params = {} + for (let i = 0; i < params_arr.length; i++) { + let pair = params_arr[i].split("=") + params[pair[0]] = pair[1] + } + let instancesList = [] + if (protocol == "loki") instancesList = [...lingvaLokiCustomRedirects] + //...lingvaLokiRedirectsChecks, + else if (protocol == "i2p") instancesList = [...lingvaI2pCustomRedirects] //...lingvaI2pRedirectsChecks, + if (protocol == "tor") instancesList = [...lingvaTorRedirectsChecks, ...lingvaTorCustomRedirects] + if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { + instancesList = [...lingvaNormalRedirectsChecks, ...lingvaNormalCustomRedirects] + } + if (instancesList.length === 0) return + + const randomInstance = utils.getRandomInstance(instancesList) + if (params.sl && params.tl && params.text) { + return `${randomInstance}/${params.sl}/${params.tl}/${params.text}` + } + return randomInstance + } } function switchInstance(url, disableOverride) { - return new Promise(async resolve => { - await init(); - if (translateDisable && !disableOverride) { resolve(); return; } - const protocolHost = utils.protocolHost(url); - if (![ - ...translateRedirects.simplyTranslate.normal, - ...translateRedirects.simplyTranslate.tor, - ...translateRedirects.simplyTranslate.i2p, - ...translateRedirects.simplyTranslate.loki, - - ...simplyTranslateNormalCustomRedirects, - ...simplyTranslateTorCustomRedirects, - ...simplyTranslateI2pCustomRedirects, - ...simplyTranslateLokiCustomRedirects, - - ...translateRedirects.lingva.normal, - ...translateRedirects.lingva.tor, - - ...lingvaNormalCustomRedirects, - ...lingvaTorCustomRedirects, - ...lingvaI2pCustomRedirects, - ...lingvaLokiCustomRedirects - ].includes(protocolHost)) { resolve(); return; } - - let instancesList; - - if (protocol == 'loki') { - if (translateFrontend == 'simplyTranslate') instancesList = [...simplyTranslateLokiRedirectsChecks, ...simplyTranslateLokiCustomRedirects]; - else if (translateFrontend == 'lingva') instancesList = [...lingvaLokiCustomRedirects]; //...lingvaLokiRedirectsChecks, - } - else if (protocol == 'i2p') { - if (translateFrontend == 'simplyTranslate') instancesList = [...simplyTranslateI2pRedirectsChecks, ...simplyTranslateI2pCustomRedirects]; - else if (translateFrontend == 'lingva') instancesList = [...lingvaI2pCustomRedirects]; //...lingvaI2pRedirectsChecks, - } - else if (protocol == 'tor') { - if (translateFrontend == 'simplyTranslate') instancesList = [...simplyTranslateTorRedirectsChecks, ...simplyTranslateTorCustomRedirects]; - else if (translateFrontend == 'lingva') instancesList = [...lingvaTorRedirectsChecks, ...lingvaTorCustomRedirects]; - } - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - if (translateFrontend == 'simplyTranslate') instancesList = [...simplyTranslateNormalRedirectsChecks, ...simplyTranslateNormalCustomRedirects]; - else if (translateFrontend == 'lingva') instancesList = [...lingvaNormalRedirectsChecks, ...lingvaNormalCustomRedirects]; - } - - const i = instancesList.indexOf(protocolHost); - if (i > -1) instancesList.splice(i, 1); - if (instancesList.length === 0) { resolve(); return; } - - const randomInstance = utils.getRandomInstance(instancesList); - resolve(`${randomInstance}${url.pathname}${url.search}`); - }) + return new Promise(async resolve => { + await init() + if (translateDisable && !disableOverride) { + resolve() + return + } + const protocolHost = utils.protocolHost(url) + if ( + ![ + ...translateRedirects.simplyTranslate.normal, + ...translateRedirects.simplyTranslate.tor, + ...translateRedirects.simplyTranslate.i2p, + ...translateRedirects.simplyTranslate.loki, + + ...simplyTranslateNormalCustomRedirects, + ...simplyTranslateTorCustomRedirects, + ...simplyTranslateI2pCustomRedirects, + ...simplyTranslateLokiCustomRedirects, + + ...translateRedirects.lingva.normal, + ...translateRedirects.lingva.tor, + + ...lingvaNormalCustomRedirects, + ...lingvaTorCustomRedirects, + ...lingvaI2pCustomRedirects, + ...lingvaLokiCustomRedirects, + ].includes(protocolHost) + ) { + resolve() + return + } + + let instancesList + + if (protocol == "loki") { + if (translateFrontend == "simplyTranslate") instancesList = [...simplyTranslateLokiRedirectsChecks, ...simplyTranslateLokiCustomRedirects] + else if (translateFrontend == "lingva") instancesList = [...lingvaLokiCustomRedirects] //...lingvaLokiRedirectsChecks, + } else if (protocol == "i2p") { + if (translateFrontend == "simplyTranslate") instancesList = [...simplyTranslateI2pRedirectsChecks, ...simplyTranslateI2pCustomRedirects] + else if (translateFrontend == "lingva") instancesList = [...lingvaI2pCustomRedirects] //...lingvaI2pRedirectsChecks, + } else if (protocol == "tor") { + if (translateFrontend == "simplyTranslate") instancesList = [...simplyTranslateTorRedirectsChecks, ...simplyTranslateTorCustomRedirects] + else if (translateFrontend == "lingva") instancesList = [...lingvaTorRedirectsChecks, ...lingvaTorCustomRedirects] + } + if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { + if (translateFrontend == "simplyTranslate") instancesList = [...simplyTranslateNormalRedirectsChecks, ...simplyTranslateNormalCustomRedirects] + else if (translateFrontend == "lingva") instancesList = [...lingvaNormalRedirectsChecks, ...lingvaNormalCustomRedirects] + } + + const i = instancesList.indexOf(protocolHost) + if (i > -1) instancesList.splice(i, 1) + if (instancesList.length === 0) { + resolve() + return + } + + const randomInstance = utils.getRandomInstance(instancesList) + resolve(`${randomInstance}${url.pathname}${url.search}`) + }) } function initDefaults() { - return new Promise(async resolve => { - fetch('/instances/data.json').then(response => response.text()).then(data => { - let dataJson = JSON.parse(data); - for (let i = 0; i < frontends.length; i++) { - redirects[frontends[i]] = dataJson[frontends[i]] - } - browser.storage.local.get('cloudflareBlackList', - async r => { - lingvaNormalRedirectsChecks = [...redirects.lingva.normal] - for (const instance of r.cloudflareBlackList) { - const i = lingvaNormalRedirectsChecks.indexOf(instance); - if (i > -1) lingvaNormalRedirectsChecks.splice(i, 1); - } - browser.storage.local.set({ - translateDisable: false, - translateFrontend: "simplyTranslate", - translateRedirects: redirects, - - simplyTranslateNormalRedirectsChecks: [...redirects.simplyTranslate.normal], - simplyTranslateNormalCustomRedirects: [], - - simplyTranslateTorRedirectsChecks: [...redirects.simplyTranslate.tor], - simplyTranslateTorCustomRedirects: [], - - simplyTranslateI2pRedirectsChecks: [...redirects.simplyTranslate.i2p], - simplyTranslateI2pCustomRedirects: [], - - simplyTranslateLokiRedirectsChecks: [...redirects.simplyTranslate.loki], - simplyTranslateLokiCustomRedirects: [], - - lingvaNormalRedirectsChecks: lingvaNormalRedirectsChecks, - lingvaNormalCustomRedirects: [], - - lingvaTorRedirectsChecks: [...redirects.lingva.tor], - lingvaTorCustomRedirects: [], - - lingvaI2pRedirectsChecks: [...redirects.lingva.i2p], - lingvaI2pCustomRedirects: [], - - lingvaLokiRedirectsChecks: [...redirects.lingva.loki], - lingvaLokiCustomRedirects: [] - }, () => resolve()) - }) - }) - }) + return new Promise(async resolve => { + fetch("/instances/data.json") + .then(response => response.text()) + .then(data => { + let dataJson = JSON.parse(data) + for (let i = 0; i < frontends.length; i++) { + redirects[frontends[i]] = dataJson[frontends[i]] + } + browser.storage.local.get("cloudflareBlackList", async r => { + lingvaNormalRedirectsChecks = [...redirects.lingva.normal] + for (const instance of r.cloudflareBlackList) { + const i = lingvaNormalRedirectsChecks.indexOf(instance) + if (i > -1) lingvaNormalRedirectsChecks.splice(i, 1) + } + browser.storage.local.set( + { + translateDisable: false, + translateFrontend: "simplyTranslate", + translateRedirects: redirects, + + simplyTranslateNormalRedirectsChecks: [...redirects.simplyTranslate.normal], + simplyTranslateNormalCustomRedirects: [], + + simplyTranslateTorRedirectsChecks: [...redirects.simplyTranslate.tor], + simplyTranslateTorCustomRedirects: [], + + simplyTranslateI2pRedirectsChecks: [...redirects.simplyTranslate.i2p], + simplyTranslateI2pCustomRedirects: [], + + simplyTranslateLokiRedirectsChecks: [...redirects.simplyTranslate.loki], + simplyTranslateLokiCustomRedirects: [], + + lingvaNormalRedirectsChecks: lingvaNormalRedirectsChecks, + lingvaNormalCustomRedirects: [], + + lingvaTorRedirectsChecks: [...redirects.lingva.tor], + lingvaTorCustomRedirects: [], + + lingvaI2pRedirectsChecks: [...redirects.lingva.i2p], + lingvaI2pCustomRedirects: [], + + lingvaLokiRedirectsChecks: [...redirects.lingva.loki], + lingvaLokiCustomRedirects: [], + }, + () => resolve() + ) + }) + }) + }) } export default { - copyPasteSimplyTranslateCookies, - pasteSimplyTranslateCookies, - copyPasteLingvaLocalStorage, - pasteLingvaLocalStorage, - setRedirects, - redirect, - initDefaults, - switchInstance, -}; + copyPasteSimplyTranslateCookies, + pasteSimplyTranslateCookies, + copyPasteLingvaLocalStorage, + pasteLingvaLocalStorage, + setRedirects, + redirect, + initDefaults, + switchInstance, +} diff --git a/src/assets/javascripts/twitter.js b/src/assets/javascripts/twitter.js index 0a851923..1ec4d8eb 100644 --- a/src/assets/javascripts/twitter.js +++ b/src/assets/javascripts/twitter.js @@ -1,13 +1,8 @@ -window.browser = window.browser || window.chrome; +window.browser = window.browser || window.chrome -import utils from './utils.js' +import utils from "./utils.js" -const targets = [ - /^https?:\/{2}(www\.|mobile\.|)twitter\.com/, - /^https?:\/{2}(pbs\.|video\.|)twimg\.com/, - /^https?:\/{2}platform\.twitter\.com\/embed/, - /^https?:\/{2}t\.co/ -]; +const targets = [/^https?:\/{2}(www\.|mobile\.|)twitter\.com/, /^https?:\/{2}(pbs\.|video\.|)twimg\.com/, /^https?:\/{2}platform\.twitter\.com\/embed/, /^https?:\/{2}t\.co/] const frontends = new Array("nitter") const protocols = new Array("normal", "tor", "i2p", "loki") @@ -15,287 +10,295 @@ const protocols = new Array("normal", "tor", "i2p", "loki") let redirects = {} for (let i = 0; i < frontends.length; i++) { - redirects[frontends[i]] = {} - for (let x = 0; x < protocols.length; x++) { - redirects[frontends[i]][protocols[x]] = [] - } + redirects[frontends[i]] = {} + for (let x = 0; x < protocols.length; x++) { + redirects[frontends[i]][protocols[x]] = [] + } } function setRedirects(val) { - browser.storage.local.get(['cloudflareBlackList', 'authenticateBlackList'], r => { - redirects.nitter = val; - nitterNormalRedirectsChecks = [...redirects.nitter.normal]; - for (const instance of [...r.cloudflareBlackList, ...r.authenticateBlackList]) { - let i = nitterNormalRedirectsChecks.indexOf(instance); - if (i > -1) nitterNormalRedirectsChecks.splice(i, 1); - } - browser.storage.local.set({ - twitterRedirects: redirects, - nitterNormalRedirectsChecks, - nitterTorRedirectsChecks: [...redirects.nitter.tor] - }) - }) + browser.storage.local.get(["cloudflareBlackList", "authenticateBlackList"], r => { + redirects.nitter = val + nitterNormalRedirectsChecks = [...redirects.nitter.normal] + for (const instance of [...r.cloudflareBlackList, ...r.authenticateBlackList]) { + let i = nitterNormalRedirectsChecks.indexOf(instance) + if (i > -1) nitterNormalRedirectsChecks.splice(i, 1) + } + browser.storage.local.set({ + twitterRedirects: redirects, + nitterNormalRedirectsChecks, + nitterTorRedirectsChecks: [...redirects.nitter.tor], + }) + }) } -let - disableTwitter, - protocol, - protocolFallback, - twitterRedirects, - twitterRedirectType, - nitterNormalRedirectsChecks, - nitterNormalCustomRedirects, - nitterTorRedirectsChecks, - nitterTorCustomRedirects, - nitterI2pCustomRedirects, - nitterLokiCustomRedirects; +let disableTwitter, + protocol, + protocolFallback, + twitterRedirects, + twitterRedirectType, + nitterNormalRedirectsChecks, + nitterNormalCustomRedirects, + nitterTorRedirectsChecks, + nitterTorCustomRedirects, + nitterI2pCustomRedirects, + nitterLokiCustomRedirects function init() { - return new Promise(async resolve => { - browser.storage.local.get( - [ - "disableTwitter", - "protocol", - "protocolFallback", - "twitterRedirects", - "twitterRedirectType", - "nitterNormalRedirectsChecks", - "nitterNormalCustomRedirects", - "nitterTorRedirectsChecks", - "nitterTorCustomRedirects", - "nitterI2pCustomRedirects", - "nitterLokiCustomRedirects" - ], - r => { - disableTwitter = r.disableTwitter; - protocol = r.protocol; - protocolFallback = r.protocolFallback; - twitterRedirects = r.twitterRedirects; - twitterRedirectType = r.twitterRedirectType; - nitterNormalRedirectsChecks = r.nitterNormalRedirectsChecks; - nitterNormalCustomRedirects = r.nitterNormalCustomRedirects; - nitterTorRedirectsChecks = r.nitterTorRedirectsChecks; - nitterTorCustomRedirects = r.nitterTorCustomRedirects; - nitterI2pCustomRedirects = r.nitterI2pCustomRedirects; - nitterLokiCustomRedirects = r.nitterLokiCustomRedirects; - resolve(); - } - ) - }) + return new Promise(async resolve => { + browser.storage.local.get( + [ + "disableTwitter", + "protocol", + "protocolFallback", + "twitterRedirects", + "twitterRedirectType", + "nitterNormalRedirectsChecks", + "nitterNormalCustomRedirects", + "nitterTorRedirectsChecks", + "nitterTorCustomRedirects", + "nitterI2pCustomRedirects", + "nitterLokiCustomRedirects", + ], + r => { + disableTwitter = r.disableTwitter + protocol = r.protocol + protocolFallback = r.protocolFallback + twitterRedirects = r.twitterRedirects + twitterRedirectType = r.twitterRedirectType + nitterNormalRedirectsChecks = r.nitterNormalRedirectsChecks + nitterNormalCustomRedirects = r.nitterNormalCustomRedirects + nitterTorRedirectsChecks = r.nitterTorRedirectsChecks + nitterTorCustomRedirects = r.nitterTorCustomRedirects + nitterI2pCustomRedirects = r.nitterI2pCustomRedirects + nitterLokiCustomRedirects = r.nitterLokiCustomRedirects + resolve() + } + ) + }) } -init(); +init() browser.storage.onChanged.addListener(init) function all() { - return [ - ...nitterNormalRedirectsChecks, - ...nitterTorRedirectsChecks, - ...nitterNormalCustomRedirects, - ...nitterTorCustomRedirects, - ...nitterI2pCustomRedirects, - ...nitterLokiCustomRedirects - ]; + return [...nitterNormalRedirectsChecks, ...nitterTorRedirectsChecks, ...nitterNormalCustomRedirects, ...nitterTorCustomRedirects, ...nitterI2pCustomRedirects, ...nitterLokiCustomRedirects] } function redirect(url, type, initiator, disableOverride) { - if (disableTwitter && !disableOverride) return; - if (!targets.some(rx => rx.test(url.href))) return; - if (url.pathname.split("/").includes("home")) return; - if (initiator && all().includes(initiator.origin)) return 'BYPASSTAB'; - if (twitterRedirectType == 'sub_frame' && type == "main_frame") return; - if (twitterRedirectType == 'main_frame' && type != "main_frame") return; + if (disableTwitter && !disableOverride) return + if (!targets.some(rx => rx.test(url.href))) return + if (url.pathname.split("/").includes("home")) return + if (initiator && all().includes(initiator.origin)) return "BYPASSTAB" + if (twitterRedirectType == "sub_frame" && type == "main_frame") return + if (twitterRedirectType == "main_frame" && type != "main_frame") return - let instancesList = []; - if (protocol == 'loki') instancesList = [...nitterI2pCustomRedirects]; - else if (protocol == 'i2p') instancesList = [...nitterLokiCustomRedirects]; - else if (protocol == 'tor') instancesList = [...nitterTorRedirectsChecks, ...nitterTorCustomRedirects]; - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - instancesList = [...nitterNormalRedirectsChecks, ...nitterNormalCustomRedirects]; - } - if (instancesList.length === 0) return; + let instancesList = [] + if (protocol == "loki") instancesList = [...nitterI2pCustomRedirects] + else if (protocol == "i2p") instancesList = [...nitterLokiCustomRedirects] + else if (protocol == "tor") instancesList = [...nitterTorRedirectsChecks, ...nitterTorCustomRedirects] + if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { + instancesList = [...nitterNormalRedirectsChecks, ...nitterNormalCustomRedirects] + } + if (instancesList.length === 0) return - const randomInstance = utils.getRandomInstance(instancesList); - // https://pbs.twimg.com/profile_images/648888480974508032/66_cUYfj_400x400.jpg - if (url.host.split(".")[0] === "pbs" || url.host.split(".")[0] === "video") { - const [, id, format, extra] = url.search.match(/(.*)\?format=(.*)&(.*)/); - const query = encodeURIComponent(`${id}.${format}?${extra}`); - return `${randomInstance}/pic${url.pathname}${query}`; - } - else if (url.pathname.split("/").includes("tweets")) - return `${randomInstance}${url.pathname.replace("/tweets", "")}${url.search}`; - else if (url.host == 't.co') - return `${randomInstance}/t.co${url.pathname}`; - else - return `${randomInstance}${url.pathname}${url.search}`; + const randomInstance = utils.getRandomInstance(instancesList) + // https://pbs.twimg.com/profile_images/648888480974508032/66_cUYfj_400x400.jpg + if (url.host.split(".")[0] === "pbs" || url.host.split(".")[0] === "video") { + const [, id, format, extra] = url.search.match(/(.*)\?format=(.*)&(.*)/) + const query = encodeURIComponent(`${id}.${format}?${extra}`) + return `${randomInstance}/pic${url.pathname}${query}` + } else if (url.pathname.split("/").includes("tweets")) return `${randomInstance}${url.pathname.replace("/tweets", "")}${url.search}` + else if (url.host == "t.co") return `${randomInstance}/t.co${url.pathname}` + else return `${randomInstance}${url.pathname}${url.search}` } function reverse(url) { - return new Promise(async resolve => { - await init(); - const protocolHost = utils.protocolHost(url); - if (!all().includes(protocolHost)) { resolve(); return; } - resolve(`https://twitter.com${url.pathname}${url.search}`); - }) + return new Promise(async resolve => { + await init() + const protocolHost = utils.protocolHost(url) + if (!all().includes(protocolHost)) { + resolve() + return + } + resolve(`https://twitter.com${url.pathname}${url.search}`) + }) } function switchInstance(url, disableOverride) { - return new Promise(async resolve => { - await init(); - if (disableTwitter && !disableOverride) { resolve(); return; } - const protocolHost = utils.protocolHost(url); - if (!all().includes(protocolHost)) { resolve(); return; } - let instancesList = []; - if (protocol == 'loki') instancesList = [...nitterI2pCustomRedirects]; - else if (protocol == 'i2p') instancesList = [...nitterLokiCustomRedirects]; - else if (protocol == 'tor') instancesList = [...nitterTorRedirectsChecks, ...nitterTorCustomRedirects]; - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - instancesList = [...nitterNormalRedirectsChecks, ...nitterNormalCustomRedirects]; - } + return new Promise(async resolve => { + await init() + if (disableTwitter && !disableOverride) { + resolve() + return + } + const protocolHost = utils.protocolHost(url) + if (!all().includes(protocolHost)) { + resolve() + return + } + let instancesList = [] + if (protocol == "loki") instancesList = [...nitterI2pCustomRedirects] + else if (protocol == "i2p") instancesList = [...nitterLokiCustomRedirects] + else if (protocol == "tor") instancesList = [...nitterTorRedirectsChecks, ...nitterTorCustomRedirects] + if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { + instancesList = [...nitterNormalRedirectsChecks, ...nitterNormalCustomRedirects] + } - let index = instancesList.indexOf(protocolHost); - if (index > -1) instancesList.splice(index, 1); - if (instancesList.length === 0) { resolve(); return; } + let index = instancesList.indexOf(protocolHost) + if (index > -1) instancesList.splice(index, 1) + if (instancesList.length === 0) { + resolve() + return + } - const randomInstance = utils.getRandomInstance(instancesList); - resolve(`${randomInstance}${url.pathname}${url.search}`); - }) + const randomInstance = utils.getRandomInstance(instancesList) + resolve(`${randomInstance}${url.pathname}${url.search}`) + }) } function removeXFrameOptions(e) { - if (e.type != 'sub_frame') return; - let url = new URL(e.url); - let protocolHost = utils.protocolHost(url); - if (!all().includes(protocolHost)) return; - let isChanged = false; - for (const i in e.responseHeaders) { - if (e.responseHeaders[i].name == 'x-frame-options') { - e.responseHeaders.splice(i, 1); - isChanged = true; - } - else if (e.responseHeaders[i].name == 'content-security-policy') { - e.responseHeaders.splice(i, 1); - isChanged = true; - } - } - if (isChanged) return { responseHeaders: e.responseHeaders }; + if (e.type != "sub_frame") return + let url = new URL(e.url) + let protocolHost = utils.protocolHost(url) + if (!all().includes(protocolHost)) return + let isChanged = false + for (const i in e.responseHeaders) { + if (e.responseHeaders[i].name == "x-frame-options") { + e.responseHeaders.splice(i, 1) + isChanged = true + } else if (e.responseHeaders[i].name == "content-security-policy") { + e.responseHeaders.splice(i, 1) + isChanged = true + } + } + if (isChanged) return { responseHeaders: e.responseHeaders } } function initNitterCookies(test, from) { - return new Promise(async resolve => { - await init(); - const protocolHost = utils.protocolHost(from); - if (!all().includes(protocolHost) - ) { resolve(); return; } - if (!test) { - let checkedInstances = []; - if (protocol == 'loki') checkedInstances = [...nitterI2pCustomRedirects]; - else if (protocol == 'i2p') checkedInstances = [...nitterLokiCustomRedirects]; - else if (protocol == 'tor') checkedInstances = [...nitterTorRedirectsChecks, ...nitterTorCustomRedirects]; - if ((checkedInstances.length === 0 && protocolFallback) || protocol == 'normal') { - checkedInstances = [...nitterNormalRedirectsChecks, ...nitterNormalCustomRedirects]; - } - await utils.copyCookie('nitter', from, checkedInstances, 'theme'); - await utils.copyCookie('nitter', from, checkedInstances, 'infiniteScroll'); - await utils.copyCookie('nitter', from, checkedInstances, 'stickyProfile'); - await utils.copyCookie('nitter', from, checkedInstances, 'bidiSupport'); - await utils.copyCookie('nitter', from, checkedInstances, 'hideTweetStats'); - await utils.copyCookie('nitter', from, checkedInstances, 'hideBanner'); - await utils.copyCookie('nitter', from, checkedInstances, 'hidePins'); - await utils.copyCookie('nitter', from, checkedInstances, 'hideReplies'); - await utils.copyCookie('nitter', from, checkedInstances, 'squareAvatars'); - await utils.copyCookie('nitter', from, checkedInstances, 'mp4Playback'); - await utils.copyCookie('nitter', from, checkedInstances, 'hlsPlayback'); - await utils.copyCookie('nitter', from, checkedInstances, 'proxyVideos'); - await utils.copyCookie('nitter', from, checkedInstances, 'muteVideos'); - await utils.copyCookie('nitter', from, checkedInstances, 'autoplayGifs'); + return new Promise(async resolve => { + await init() + const protocolHost = utils.protocolHost(from) + if (!all().includes(protocolHost)) { + resolve() + return + } + if (!test) { + let checkedInstances = [] + if (protocol == "loki") checkedInstances = [...nitterI2pCustomRedirects] + else if (protocol == "i2p") checkedInstances = [...nitterLokiCustomRedirects] + else if (protocol == "tor") checkedInstances = [...nitterTorRedirectsChecks, ...nitterTorCustomRedirects] + if ((checkedInstances.length === 0 && protocolFallback) || protocol == "normal") { + checkedInstances = [...nitterNormalRedirectsChecks, ...nitterNormalCustomRedirects] + } + await utils.copyCookie("nitter", from, checkedInstances, "theme") + await utils.copyCookie("nitter", from, checkedInstances, "infiniteScroll") + await utils.copyCookie("nitter", from, checkedInstances, "stickyProfile") + await utils.copyCookie("nitter", from, checkedInstances, "bidiSupport") + await utils.copyCookie("nitter", from, checkedInstances, "hideTweetStats") + await utils.copyCookie("nitter", from, checkedInstances, "hideBanner") + await utils.copyCookie("nitter", from, checkedInstances, "hidePins") + await utils.copyCookie("nitter", from, checkedInstances, "hideReplies") + await utils.copyCookie("nitter", from, checkedInstances, "squareAvatars") + await utils.copyCookie("nitter", from, checkedInstances, "mp4Playback") + await utils.copyCookie("nitter", from, checkedInstances, "hlsPlayback") + await utils.copyCookie("nitter", from, checkedInstances, "proxyVideos") + await utils.copyCookie("nitter", from, checkedInstances, "muteVideos") + await utils.copyCookie("nitter", from, checkedInstances, "autoplayGifs") - await utils.copyCookie('nitter', from, checkedInstances, 'replaceInstagram'); - await utils.copyCookie('nitter', from, checkedInstances, 'replaceReddit'); - await utils.copyCookie('nitter', from, checkedInstances, 'replaceTwitter'); - await utils.copyCookie('nitter', from, checkedInstances, 'replaceYouTube'); - } - resolve(true); - }) + await utils.copyCookie("nitter", from, checkedInstances, "replaceInstagram") + await utils.copyCookie("nitter", from, checkedInstances, "replaceReddit") + await utils.copyCookie("nitter", from, checkedInstances, "replaceTwitter") + await utils.copyCookie("nitter", from, checkedInstances, "replaceYouTube") + } + resolve(true) + }) } function pasteNitterCookies() { - return new Promise(async resolve => { - await init(); - if (disableTwitter || protocol === undefined) { resolve(); return; } - let checkedInstances = []; - if (protocol == 'loki') checkedInstances = [...nitterI2pCustomRedirects]; - else if (protocol == 'i2p') checkedInstances = [...nitterLokiCustomRedirects]; - else if (protocol == 'tor') checkedInstances = [...nitterTorRedirectsChecks, ...nitterTorCustomRedirects]; - if ((checkedInstances.length === 0 && protocolFallback) || protocol == 'normal') { - checkedInstances = [...nitterNormalRedirectsChecks, ...nitterNormalCustomRedirects]; - } - utils.getCookiesFromStorage('nitter', checkedInstances, 'theme'); - utils.getCookiesFromStorage('nitter', checkedInstances, 'infiniteScroll'); - utils.getCookiesFromStorage('nitter', checkedInstances, 'stickyProfile'); - utils.getCookiesFromStorage('nitter', checkedInstances, 'bidiSupport'); - utils.getCookiesFromStorage('nitter', checkedInstances, 'hideTweetStats'); - utils.getCookiesFromStorage('nitter', checkedInstances, 'hideBanner'); - utils.getCookiesFromStorage('nitter', checkedInstances, 'hidePins'); - utils.getCookiesFromStorage('nitter', checkedInstances, 'hideReplies'); - utils.getCookiesFromStorage('nitter', checkedInstances, 'squareAvatars'); - utils.getCookiesFromStorage('nitter', checkedInstances, 'mp4Playback'); - utils.getCookiesFromStorage('nitter', checkedInstances, 'hlsPlayback'); - utils.getCookiesFromStorage('nitter', checkedInstances, 'proxyVideos'); - utils.getCookiesFromStorage('nitter', checkedInstances, 'muteVideos'); - utils.getCookiesFromStorage('nitter', checkedInstances, 'autoplayGifs'); + return new Promise(async resolve => { + await init() + if (disableTwitter || protocol === undefined) { + resolve() + return + } + let checkedInstances = [] + if (protocol == "loki") checkedInstances = [...nitterI2pCustomRedirects] + else if (protocol == "i2p") checkedInstances = [...nitterLokiCustomRedirects] + else if (protocol == "tor") checkedInstances = [...nitterTorRedirectsChecks, ...nitterTorCustomRedirects] + if ((checkedInstances.length === 0 && protocolFallback) || protocol == "normal") { + checkedInstances = [...nitterNormalRedirectsChecks, ...nitterNormalCustomRedirects] + } + utils.getCookiesFromStorage("nitter", checkedInstances, "theme") + utils.getCookiesFromStorage("nitter", checkedInstances, "infiniteScroll") + utils.getCookiesFromStorage("nitter", checkedInstances, "stickyProfile") + utils.getCookiesFromStorage("nitter", checkedInstances, "bidiSupport") + utils.getCookiesFromStorage("nitter", checkedInstances, "hideTweetStats") + utils.getCookiesFromStorage("nitter", checkedInstances, "hideBanner") + utils.getCookiesFromStorage("nitter", checkedInstances, "hidePins") + utils.getCookiesFromStorage("nitter", checkedInstances, "hideReplies") + utils.getCookiesFromStorage("nitter", checkedInstances, "squareAvatars") + utils.getCookiesFromStorage("nitter", checkedInstances, "mp4Playback") + utils.getCookiesFromStorage("nitter", checkedInstances, "hlsPlayback") + utils.getCookiesFromStorage("nitter", checkedInstances, "proxyVideos") + utils.getCookiesFromStorage("nitter", checkedInstances, "muteVideos") + utils.getCookiesFromStorage("nitter", checkedInstances, "autoplayGifs") - utils.getCookiesFromStorage('nitter', checkedInstances, 'replaceInstagram'); - utils.getCookiesFromStorage('nitter', checkedInstances, 'replaceReddit'); - utils.getCookiesFromStorage('nitter', checkedInstances, 'replaceTwitter'); - utils.getCookiesFromStorage('nitter', checkedInstances, 'replaceYouTube'); - resolve(); - } - ) + utils.getCookiesFromStorage("nitter", checkedInstances, "replaceInstagram") + utils.getCookiesFromStorage("nitter", checkedInstances, "replaceReddit") + utils.getCookiesFromStorage("nitter", checkedInstances, "replaceTwitter") + utils.getCookiesFromStorage("nitter", checkedInstances, "replaceYouTube") + resolve() + }) } function initDefaults() { - return new Promise(resolve => { - fetch('/instances/data.json').then(response => response.text()).then(data => { - let dataJson = JSON.parse(data); - for (let i = 0; i < frontends.length; i++) { - redirects[frontends[i]] = dataJson[frontends[i]] - } - browser.storage.local.get(['cloudflareBlackList', 'authenticateBlackList'], async r => { - nitterNormalRedirectsChecks = [...redirects.nitter.normal]; - for (const instance of [...r.cloudflareBlackList, ...r.authenticateBlackList]) { - let i = nitterNormalRedirectsChecks.indexOf(instance); - if (i > -1) nitterNormalRedirectsChecks.splice(i, 1); - } - browser.storage.local.set({ - disableTwitter: false, - twitterRedirects: redirects, - twitterRedirectType: "both", + return new Promise(resolve => { + fetch("/instances/data.json") + .then(response => response.text()) + .then(data => { + let dataJson = JSON.parse(data) + for (let i = 0; i < frontends.length; i++) { + redirects[frontends[i]] = dataJson[frontends[i]] + } + browser.storage.local.get(["cloudflareBlackList", "authenticateBlackList"], async r => { + nitterNormalRedirectsChecks = [...redirects.nitter.normal] + for (const instance of [...r.cloudflareBlackList, ...r.authenticateBlackList]) { + let i = nitterNormalRedirectsChecks.indexOf(instance) + if (i > -1) nitterNormalRedirectsChecks.splice(i, 1) + } + browser.storage.local.set( + { + disableTwitter: false, + twitterRedirects: redirects, + twitterRedirectType: "both", - nitterNormalRedirectsChecks: nitterNormalRedirectsChecks, - nitterNormalCustomRedirects: [], + nitterNormalRedirectsChecks: nitterNormalRedirectsChecks, + nitterNormalCustomRedirects: [], - nitterTorRedirectsChecks: [...redirects.nitter.tor], - nitterTorCustomRedirects: [], + nitterTorRedirectsChecks: [...redirects.nitter.tor], + nitterTorCustomRedirects: [], - nitterI2pRedirectsChecks: [...redirects.nitter.i2p], - nitterI2pCustomRedirects: [], + nitterI2pRedirectsChecks: [...redirects.nitter.i2p], + nitterI2pCustomRedirects: [], - nitterLokiRedirectsChecks: [...redirects.nitter.loki], - nitterLokiCustomRedirects: [] - }, () => resolve()); - }) - }) - }) + nitterLokiRedirectsChecks: [...redirects.nitter.loki], + nitterLokiCustomRedirects: [], + }, + () => resolve() + ) + }) + }) + }) } export default { - setRedirects, - redirect, - switchInstance, - reverse, - removeXFrameOptions, - initNitterCookies, - pasteNitterCookies, - initDefaults, -}; + setRedirects, + redirect, + switchInstance, + reverse, + removeXFrameOptions, + initNitterCookies, + pasteNitterCookies, + initDefaults, +} diff --git a/src/assets/javascripts/utils.js b/src/assets/javascripts/utils.js index f9225729..7a97dcdb 100644 --- a/src/assets/javascripts/utils.js +++ b/src/assets/javascripts/utils.js @@ -1,193 +1,207 @@ -window.browser = window.browser || window.chrome; -import twitterHelper from "./twitter.js"; -import youtubeHelper from "./youtube/youtube.js"; -import instagramHelper from "./instagram.js"; -import mediumHelper from "./medium.js"; -import redditHelper from "./reddit.js"; -import searchHelper from "./search.js"; -import translateHelper from "./translate/translate.js"; -import wikipediaHelper from "./wikipedia.js"; -import peertubeHelper from "./peertube.js"; -import lbryHelper from "./lbry.js"; -import sendTargetsHelper from "./sendTargets.js"; -import tiktokHelper from "./tiktok.js"; +window.browser = window.browser || window.chrome +import twitterHelper from "./twitter.js" +import youtubeHelper from "./youtube/youtube.js" +import instagramHelper from "./instagram.js" +import mediumHelper from "./medium.js" +import redditHelper from "./reddit.js" +import searchHelper from "./search.js" +import translateHelper from "./translate/translate.js" +import wikipediaHelper from "./wikipedia.js" +import peertubeHelper from "./peertube.js" +import lbryHelper from "./lbry.js" +import sendTargetsHelper from "./sendTargets.js" +import tiktokHelper from "./tiktok.js" import quoraHelper from "./quora.js" -import libremdbHelper from "./imdb.js"; -import imgurHelper from "./imgur.js"; -import reutersHelper from './reuters.js'; -import localise from './localise.js' +import libremdbHelper from "./imdb.js" +import imgurHelper from "./imgur.js" +import reutersHelper from "./reuters.js" +import youtubeMusicHelper from "./youtubeMusic.js" +import mapsHelper from "./maps.js" +import localise from "./localise.js" function getRandomInstance(instances) { - return instances[~~(instances.length * Math.random())]; + return instances[~~(instances.length * Math.random())] } -let cloudflareBlackList = []; -let authenticateBlackList = []; +let cloudflareBlackList = [] +let authenticateBlackList = [] async function initcloudflareBlackList() { - return new Promise(resolve => { - fetch('/instances/blacklist.json').then(response => response.text()).then(data => { - cloudflareBlackList = JSON.parse(data).cloudflare; - authenticateBlackList = JSON.parse(data).authenticate; - resolve(); - }) - }); + return new Promise(resolve => { + fetch("/instances/blacklist.json") + .then(response => response.text()) + .then(data => { + cloudflareBlackList = JSON.parse(data).cloudflare + authenticateBlackList = JSON.parse(data).authenticate + resolve() + }) + }) } function updateInstances() { - return new Promise(async resolve => { - let http = new XMLHttpRequest(); - http.open('GET', 'https://raw.githubusercontent.com/libredirect/libredirect/master/src/instances/data.json', false); - http.send(null); - if (http.status === 200) { - await initcloudflareBlackList(); - const instances = JSON.parse(http.responseText); - - youtubeHelper.setRedirects({ 'invidious': instances.invidious, 'piped': instances.piped, 'pipedMaterial': instances.pipedMaterial }) - twitterHelper.setRedirects(instances.nitter); - instagramHelper.setRedirects(instances.bibliogram); - redditHelper.setRedirects({ 'libreddit': instances.libreddit, 'teddit': instances.teddit }); - translateHelper.setRedirects({ "simplyTranslate": instances.simplyTranslate, "lingva": instances.lingva }); - searchHelper.setRedirects({ 'searx': instances.searx, 'searxng': instances.searxng, 'whoogle': instances.whoogle, 'librex': instances.librex }); - wikipediaHelper.setRedirects(instances.wikiless); - mediumHelper.setRedirects(instances.scribe); - quoraHelper.setRedirects(instances.quetre); - libremdbHelper.setRedirects(instances.libremdb); - sendTargetsHelper.setRedirects(instances.send); - tiktokHelper.setRedirects(instances.proxiTok); - lbryHelper.setRedirects(instances.librarian); - reutersHelper.setRedirects(instances.neuters); - - console.info("Successfully updated Instances"); - resolve(true); return; - } - resolve() - }) + return new Promise(async resolve => { + let http = new XMLHttpRequest() + http.open("GET", "https://raw.githubusercontent.com/libredirect/libredirect/master/src/instances/data.json", false) + http.send(null) + if (http.status === 200) { + await initcloudflareBlackList() + const instances = JSON.parse(http.responseText) + + youtubeHelper.setRedirects({ + invidious: instances.invidious, + piped: instances.piped, + pipedMaterial: instances.pipedMaterial, + }) + twitterHelper.setRedirects(instances.nitter) + instagramHelper.setRedirects(instances.bibliogram) + redditHelper.setRedirects({ + libreddit: instances.libreddit, + teddit: instances.teddit, + }) + translateHelper.setRedirects({ + simplyTranslate: instances.simplyTranslate, + lingva: instances.lingva, + }) + searchHelper.setRedirects({ + searx: instances.searx, + searxng: instances.searxng, + whoogle: instances.whoogle, + librex: instances.librex, + }) + wikipediaHelper.setRedirects(instances.wikiless) + mediumHelper.setRedirects(instances.scribe) + quoraHelper.setRedirects(instances.quetre) + libremdbHelper.setRedirects(instances.libremdb) + sendTargetsHelper.setRedirects(instances.send) + tiktokHelper.setRedirects(instances.proxiTok) + lbryHelper.setRedirects(instances.librarian) + reutersHelper.setRedirects(instances.neuters) + youtubeMusicHelper.setRedirects({ + beatbump: instances.beatbump, + hyperpipe: instances.hyperpipe, + }) + mapsHelper.setRedirects(instances.facil) + peertubeHelper.setRedirects(instances.simpleertube) + + console.info("Successfully updated Instances") + resolve(true) + return + } + resolve() + }) } function protocolHost(url) { - if (url.username && url.password) return `${url.protocol}//${url.username}:${url.password}@${url.host}`; - return `${url.protocol}//${url.host}`; + if (url.username && url.password) return `${url.protocol}//${url.username}:${url.password}@${url.host}` + return `${url.protocol}//${url.host}` } async function processDefaultCustomInstances(target, name, protocol, document) { - - function camelCase(str) { - return str.charAt(0).toUpperCase() + str.slice(1); - } - let latencyKey = `${name}Latency`; - let instancesLatency; - let nameProtocolElement = document.getElementById(name).getElementsByClassName(protocol)[0]; - - let nameCustomInstances = []; - let nameCheckListElement = nameProtocolElement.getElementsByClassName('checklist')[0]; - - await initcloudflareBlackList(); - - let nameDefaultRedirects; - - let redirectsChecks = `${name}${camelCase(protocol)}RedirectsChecks`; - let customRedirects = `${name}${camelCase(protocol)}CustomRedirects`; - let redirectsKey = `${target}Redirects`; - - let redirects; - - async function getFromStorage() { - return new Promise(async resolve => - browser.storage.local.get( - [ - redirectsChecks, - customRedirects, - redirectsKey, - latencyKey - ], - r => { - nameDefaultRedirects = r[redirectsChecks]; - nameCustomInstances = r[customRedirects]; - instancesLatency = r[latencyKey] ?? []; - redirects = r[redirectsKey]; - resolve(); - } - ) - ) - } - - await getFromStorage(); - if (nameCustomInstances === undefined) console.log(customRedirects); - - function calcNameCheckBoxes() { - let isTrue = true; - for (const item of redirects[name][protocol]) { - if (!nameDefaultRedirects.includes(item)) { - isTrue = false; - break; - } - } - for (const element of nameCheckListElement.getElementsByTagName('input')) { - element.checked = nameDefaultRedirects.includes(element.className) - } - if (nameDefaultRedirects.length == 0) isTrue = false; - nameProtocolElement.getElementsByClassName('toggle-all')[0].checked = isTrue; - } - nameCheckListElement.innerHTML = - [ - `<div> + function camelCase(str) { + return str.charAt(0).toUpperCase() + str.slice(1) + } + let latencyKey = `${name}Latency` + let instancesLatency + let nameProtocolElement = document.getElementById(name).getElementsByClassName(protocol)[0] + + let nameCustomInstances = [] + let nameCheckListElement = nameProtocolElement.getElementsByClassName("checklist")[0] + + await initcloudflareBlackList() + + let nameDefaultRedirects + + let redirectsChecks = `${name}${camelCase(protocol)}RedirectsChecks` + let customRedirects = `${name}${camelCase(protocol)}CustomRedirects` + let redirectsKey = `${target}Redirects` + + let redirects + + async function getFromStorage() { + return new Promise(async resolve => + browser.storage.local.get([redirectsChecks, customRedirects, redirectsKey, latencyKey], r => { + nameDefaultRedirects = r[redirectsChecks] + nameCustomInstances = r[customRedirects] + instancesLatency = r[latencyKey] ?? [] + redirects = r[redirectsKey] + resolve() + }) + ) + } + + await getFromStorage() + if (nameCustomInstances === undefined) console.log(customRedirects) + + function calcNameCheckBoxes() { + let isTrue = true + for (const item of redirects[name][protocol]) { + if (nameDefaultRedirects === undefined) console.log(name + protocol + " is undefined") + if (!nameDefaultRedirects.includes(item)) { + isTrue = false + break + } + } + for (const element of nameCheckListElement.getElementsByTagName("input")) { + element.checked = nameDefaultRedirects.includes(element.className) + } + if (nameDefaultRedirects.length == 0) isTrue = false + nameProtocolElement.getElementsByClassName("toggle-all")[0].checked = isTrue + } + nameCheckListElement.innerHTML = [ + `<div> <x data-localise="__MSG_toggleAll__">Toggle All</x> <input type="checkbox" class="toggle-all"/> </div>`, - ...redirects[name][protocol].map( - x => { - const cloudflare = cloudflareBlackList.includes(x) ? ' <span style="color:red;">cloudflare</span>' : ''; - const authenticate = authenticateBlackList.includes(x) ? ' <span style="color:orange;">authenticate</span>' : ''; - - let ms = instancesLatency[x]; - let latencyColor = (ms <= 1000 ? "green" : ms <= 2000 ? "orange" : "red"); - let latencyLimit; - if (ms == 5000) latencyLimit = '5000ms+'; - else if (ms > 5000) latencyLimit = `ERROR: ${ms - 5000}`; - else latencyLimit = ms + 'ms'; - - const latency = x in instancesLatency ? '<span style="color:' + latencyColor + ';">' + latencyLimit + '</span>' : ''; - - let warnings = [cloudflare, authenticate, latency].join(' '); - return `<div> + ...redirects[name][protocol].map(x => { + const cloudflare = cloudflareBlackList.includes(x) ? ' <span style="color:red;">cloudflare</span>' : "" + const authenticate = authenticateBlackList.includes(x) ? ' <span style="color:orange;">authenticate</span>' : "" + + let ms = instancesLatency[x] + let latencyColor = ms <= 1000 ? "green" : ms <= 2000 ? "orange" : "red" + let latencyLimit + if (ms == 5000) latencyLimit = "5000ms+" + else if (ms > 5000) latencyLimit = `ERROR: ${ms - 5000}` + else latencyLimit = ms + "ms" + + const latency = x in instancesLatency ? '<span style="color:' + latencyColor + ';">' + latencyLimit + "</span>" : "" + + let warnings = [cloudflare, authenticate, latency].join(" ") + return `<div> <x><a href="${x}" target="_blank">${x}</a>${warnings}</x> <input type="checkbox" class="${x}"/> - </div>`; - } - ), - ].join('\n<hr>\n'); - - localise.localisePage(); - - calcNameCheckBoxes(); - nameProtocolElement.getElementsByClassName('toggle-all')[0].addEventListener("change", async event => { - if (event.target.checked) - nameDefaultRedirects = [...redirects[name][protocol]]; - else - nameDefaultRedirects = []; - - browser.storage.local.set({ [redirectsChecks]: nameDefaultRedirects }); - calcNameCheckBoxes(); - }); - - for (let element of nameCheckListElement.getElementsByTagName('input')) { - if (element.className != 'toggle-all') - nameProtocolElement.getElementsByClassName(element.className)[0].addEventListener("change", async event => { - if (event.target.checked) - nameDefaultRedirects.push(element.className) - else { - let index = nameDefaultRedirects.indexOf(element.className); - if (index > -1) nameDefaultRedirects.splice(index, 1); - } - browser.storage.local.set({ [redirectsChecks]: nameDefaultRedirects }); - calcNameCheckBoxes(); - }); - } - - function calcNameCustomInstances() { - nameProtocolElement.getElementsByClassName('custom-checklist')[0].innerHTML = - nameCustomInstances.map( - x => `<div> + </div>` + }), + ].join("\n<hr>\n") + + localise.localisePage() + + calcNameCheckBoxes() + nameProtocolElement.getElementsByClassName("toggle-all")[0].addEventListener("change", async event => { + if (event.target.checked) nameDefaultRedirects = [...redirects[name][protocol]] + else nameDefaultRedirects = [] + + browser.storage.local.set({ [redirectsChecks]: nameDefaultRedirects }) + calcNameCheckBoxes() + }) + + for (let element of nameCheckListElement.getElementsByTagName("input")) { + if (element.className != "toggle-all") + nameProtocolElement.getElementsByClassName(element.className)[0].addEventListener("change", async event => { + if (event.target.checked) nameDefaultRedirects.push(element.className) + else { + let index = nameDefaultRedirects.indexOf(element.className) + if (index > -1) nameDefaultRedirects.splice(index, 1) + } + browser.storage.local.set({ + [redirectsChecks]: nameDefaultRedirects, + }) + calcNameCheckBoxes() + }) + } + + function calcNameCustomInstances() { + nameProtocolElement.getElementsByClassName("custom-checklist")[0].innerHTML = nameCustomInstances + .map( + x => `<div> ${x} <button class="add clear-${x}"> <svg xmlns="http://www.w3.org/2000/svg" height="20px" viewBox="0 0 24 24" width="20px" fill="currentColor"> @@ -196,286 +210,294 @@ async function processDefaultCustomInstances(target, name, protocol, document) { </button> </div> <hr>` - ).join('\n'); - - for (const item of nameCustomInstances) { - nameProtocolElement.getElementsByClassName(`clear-${item}`)[0].addEventListener("click", async () => { - let index = nameCustomInstances.indexOf(item); - if (index > -1) nameCustomInstances.splice(index, 1); - browser.storage.local.set({ [customRedirects]: nameCustomInstances }); - calcNameCustomInstances(); - }); - } - } - calcNameCustomInstances(); - nameProtocolElement.getElementsByClassName('custom-instance-form')[0].addEventListener("submit", async event => { - event.preventDefault(); - let nameCustomInstanceInput = nameProtocolElement.getElementsByClassName('custom-instance')[0]; - let url = new URL(nameCustomInstanceInput.value); - let protocolHostVar = protocolHost(url); - if (nameCustomInstanceInput.validity.valid && !redirects[name][protocol].includes(protocolHostVar)) { - if (!nameCustomInstances.includes(protocolHostVar)) { - nameCustomInstances.push(protocolHostVar) - browser.storage.local.set({ [customRedirects]: nameCustomInstances }); - nameCustomInstanceInput.value = ''; - } - calcNameCustomInstances(); - } - }) + ) + .join("\n") + + for (const item of nameCustomInstances) { + nameProtocolElement.getElementsByClassName(`clear-${item}`)[0].addEventListener("click", async () => { + let index = nameCustomInstances.indexOf(item) + if (index > -1) nameCustomInstances.splice(index, 1) + browser.storage.local.set({ [customRedirects]: nameCustomInstances }) + calcNameCustomInstances() + }) + } + } + calcNameCustomInstances() + nameProtocolElement.getElementsByClassName("custom-instance-form")[0].addEventListener("submit", async event => { + event.preventDefault() + let nameCustomInstanceInput = nameProtocolElement.getElementsByClassName("custom-instance")[0] + let url = new URL(nameCustomInstanceInput.value) + let protocolHostVar = protocolHost(url) + if (nameCustomInstanceInput.validity.valid && !redirects[name][protocol].includes(protocolHostVar)) { + if (!nameCustomInstances.includes(protocolHostVar)) { + nameCustomInstances.push(protocolHostVar) + browser.storage.local.set({ [customRedirects]: nameCustomInstances }) + nameCustomInstanceInput.value = "" + } + calcNameCustomInstances() + } + }) } async function ping(href) { - return new Promise(async resolve => { - let http = new XMLHttpRequest(); - http.open("GET", `${href}?_=${new Date().getTime()}`, /*async*/true); - http.timeout = 5000; - let started = new Date().getTime(); - http.onreadystatechange = () => { - if (http.readyState == 2) { - if (http.status == 200) { - let ended = new Date().getTime(); - http.abort(); - resolve(ended - started); - } - else - resolve(5000 + http.status) - } - }; - http.ontimeout = () => resolve(5000) - http.onerror = () => resolve() - try { - http.send(null); - } catch (exception) { - resolve() - } - }); + return new Promise(async resolve => { + let http = new XMLHttpRequest() + http.open("GET", `${href}?_=${new Date().getTime()}`, /*async*/ true) + http.timeout = 5000 + let started = new Date().getTime() + http.onreadystatechange = () => { + if (http.readyState == 2) { + if (http.status == 200) { + let ended = new Date().getTime() + http.abort() + resolve(ended - started) + } else resolve(5000 + http.status) + } + } + http.ontimeout = () => resolve(5000) + http.onerror = () => resolve() + try { + http.send(null) + } catch (exception) { + resolve() + } + }) } async function testLatency(element, instances) { - return new Promise(async resolve => { - let myList = {}; - for (const href of instances) await ping(href).then(time => { - if (time) { - myList[href] = time; - let color; - if (time <= 1000) color = "green" - else if (time <= 2000) color = "orange" - else color = "red"; - - let text; - if (time == 5000) text = '5000ms+' - else if (time > 5000) text = `ERROR: ${time - 5000}`; - else text = `${time}ms`; - element.innerHTML = `${href}: <span style="color:${color};">${text}</span>`; - } - }) - resolve(myList); - }) + return new Promise(async resolve => { + let myList = {} + for (const href of instances) + await ping(href).then(time => { + if (time) { + myList[href] = time + let color + if (time <= 1000) color = "green" + else if (time <= 2000) color = "orange" + else color = "red" + + let text + if (time == 5000) text = "5000ms+" + else if (time > 5000) text = `ERROR: ${time - 5000}` + else text = `${time}ms` + element.innerHTML = `${href}: <span style="color:${color};">${text}</span>` + } + }) + resolve(myList) + }) } function copyCookie(frontend, targetUrl, urls, name) { - return new Promise(resolve => { - browser.storage.local.get('firstPartyIsolate', r => { - let query; - if (!r.firstPartyIsolate) query = { url: protocolHost(targetUrl), name: name } - else query = { url: protocolHost(targetUrl), name: name, firstPartyDomain: null } - browser.cookies.getAll( - query, - async cookies => { - for (const cookie of cookies) - if (cookie.name == name) { - for (const url of urls) { - const setQuery = - r.firstPartyIsolate ? - { - url: url, name: name, value: cookie.value, secure: true, - firstPartyDomain: new URL(url).hostname, - } - : - { - url: url, name: name, value: cookie.value, secure: true, - expirationDate: cookie.expirationDate, - }; - browser.cookies.set(setQuery, () => - browser.storage.local.set({ [`${frontend}_${name}`]: cookie }, () => resolve()) - ); - } - break; - } - resolve(); - } - ); - }) - }) + return new Promise(resolve => { + browser.storage.local.get("firstPartyIsolate", r => { + let query + if (!r.firstPartyIsolate) query = { url: protocolHost(targetUrl), name: name } + else + query = { + url: protocolHost(targetUrl), + name: name, + firstPartyDomain: null, + } + browser.cookies.getAll(query, async cookies => { + for (const cookie of cookies) + if (cookie.name == name) { + for (const url of urls) { + const setQuery = r.firstPartyIsolate + ? { + url: url, + name: name, + value: cookie.value, + secure: true, + firstPartyDomain: new URL(url).hostname, + } + : { + url: url, + name: name, + value: cookie.value, + secure: true, + expirationDate: cookie.expirationDate, + } + browser.cookies.set(setQuery, () => browser.storage.local.set({ [`${frontend}_${name}`]: cookie }, () => resolve())) + } + break + } + resolve() + }) + }) + }) } function getCookiesFromStorage(frontend, urls, name) { - let key = `${frontend}_${name}`; - browser.storage.local.get([key, 'firstPartyIsolate'], r => { - const cookie = r[key]; - if (cookie === undefined) return; - for (const url of urls) { - let query = - r.firstPartyIsolate ? - { - url: url, name: cookie.name, value: cookie.value, secure: true, - expirationDate: null, - firstPartyDomain: new URL(url).hostname, - } - : - { - url: url, name: cookie.name, value: cookie.value, secure: true, - expirationDate: cookie.expirationDate, - }; - browser.cookies.set(query) - } - }) + let key = `${frontend}_${name}` + browser.storage.local.get([key, "firstPartyIsolate"], r => { + const cookie = r[key] + if (cookie === undefined) return + for (const url of urls) { + let query = r.firstPartyIsolate + ? { + url: url, + name: cookie.name, + value: cookie.value, + secure: true, + expirationDate: null, + firstPartyDomain: new URL(url).hostname, + } + : { + url: url, + name: cookie.name, + value: cookie.value, + secure: true, + expirationDate: cookie.expirationDate, + } + browser.cookies.set(query) + } + }) } function copyRaw(test, copyRawElement) { - return new Promise(resolve => { - browser.tabs.query( - { active: true, currentWindow: true }, async tabs => { - let currTab = tabs[0]; - if (currTab) { - let url; - try { url = new URL(currTab.url); } - catch { resolve(); return; } - - let newUrl = await youtubeHelper.reverse(url); - if (!newUrl) newUrl = await twitterHelper.reverse(url); - if (!newUrl) newUrl = await instagramHelper.reverse(url); - if (!newUrl) newUrl = await tiktokHelper.reverse(url); - if (!newUrl) newUrl = await quoraHelper.reverse(url); - if (!newUrl) newUrl = await libremdbHelper.reverse(url); - if (!newUrl) newUrl = await imgurHelper.reverse(url); - - if (newUrl) { - resolve(newUrl); - if (test) return; - navigator.clipboard.writeText(newUrl); - if (copyRawElement) { - const textElement = copyRawElement.getElementsByTagName('h4')[0] - const oldHtml = textElement.innerHTML; - textElement.innerHTML = browser.i18n.getMessage('copied'); - setTimeout(() => textElement.innerHTML = oldHtml, 1000); - } - } - } - resolve() - } - ) - }) + return new Promise(resolve => { + browser.tabs.query({ active: true, currentWindow: true }, async tabs => { + let currTab = tabs[0] + if (currTab) { + let url + try { + url = new URL(currTab.url) + } catch { + resolve() + return + } + + let newUrl = await youtubeHelper.reverse(url) + if (!newUrl) newUrl = await twitterHelper.reverse(url) + if (!newUrl) newUrl = await instagramHelper.reverse(url) + if (!newUrl) newUrl = await tiktokHelper.reverse(url) + if (!newUrl) newUrl = await quoraHelper.reverse(url) + if (!newUrl) newUrl = await libremdbHelper.reverse(url) + if (!newUrl) newUrl = await imgurHelper.reverse(url) + + if (newUrl) { + resolve(newUrl) + if (test) return + navigator.clipboard.writeText(newUrl) + if (copyRawElement) { + const textElement = copyRawElement.getElementsByTagName("h4")[0] + const oldHtml = textElement.innerHTML + textElement.innerHTML = browser.i18n.getMessage("copied") + setTimeout(() => (textElement.innerHTML = oldHtml), 1000) + } + } + } + resolve() + }) + }) } function unify(test) { - return new Promise(resolve => { - browser.tabs.query( - { active: true, currentWindow: true }, - async tabs => { - let currTab = tabs[0] - if (currTab) { - let url; - try { url = new URL(currTab.url); } - catch { resolve(); return; } - if (currTab.incognito) { resolve(); return; } - - let result = await youtubeHelper.copyPasteInvidiousCookies(test, url); - if (!result) result = await youtubeHelper.copyPastePipedLocalStorage(test, url, currTab.id); - if (!result) result = await youtubeHelper.copyPastePipedMaterialLocalStorage(test, url, currTab.id); - - if (!result) result = await twitterHelper.initNitterCookies(test, url); - - if (!result) result = await redditHelper.initLibredditCookies(test, url); - if (!result) result = await redditHelper.initTedditCookies(test, url); - - if (!result) result = await searchHelper.initSearxCookies(test, url); - if (!result) result = await searchHelper.initSearxngCookies(test, url); - if (!result) result = await searchHelper.initLibrexCookies(test, url); - - if (!result) result = await tiktokHelper.initProxiTokCookies(test, url); - - if (!result) result = await wikipediaHelper.initWikilessCookies(test, url); - - if (!result) result = await translateHelper.copyPasteSimplyTranslateCookies(test, url); - if (!result) result = await translateHelper.copyPasteLingvaLocalStorage(test, url); - - resolve(result); - } - } - ) - }) + return new Promise(resolve => { + browser.tabs.query({ active: true, currentWindow: true }, async tabs => { + let currTab = tabs[0] + if (currTab) { + let url + try { + url = new URL(currTab.url) + } catch { + resolve() + return + } + if (currTab.incognito) { + resolve() + return + } + + let result = await youtubeHelper.copyPasteInvidiousCookies(test, url) + if (!result) result = await youtubeHelper.copyPastePipedLocalStorage(test, url, currTab.id) + if (!result) result = await youtubeHelper.copyPastePipedMaterialLocalStorage(test, url, currTab.id) + + if (!result) result = await twitterHelper.initNitterCookies(test, url) + if (!result) result = await redditHelper.initLibredditCookies(test, url) + if (!result) result = await redditHelper.initTedditCookies(test, url) + if (!result) result = await searchHelper.initSearxCookies(test, url) + if (!result) result = await searchHelper.initSearxngCookies(test, url) + if (!result) result = await searchHelper.initLibrexCookies(test, url) + if (!result) result = await tiktokHelper.initProxiTokCookies(test, url) + if (!result) result = await wikipediaHelper.initWikilessCookies(test, url) + if (!result) result = await translateHelper.copyPasteSimplyTranslateCookies(test, url) + if (!result) result = await translateHelper.copyPasteLingvaLocalStorage(test, url) + + resolve(result) + } + }) + }) } function switchInstance(test) { - return new Promise(resolve => { - browser.tabs.query({ active: true, currentWindow: true }, async tabs => { - let currTab = tabs[0]; - if (currTab) { - let url; - try { url = new URL(currTab.url); } - catch { resolve(); return }; - let newUrl = await youtubeHelper.switchInstance(url); - if (!newUrl) newUrl = await twitterHelper.switchInstance(url); - if (!newUrl) newUrl = await instagramHelper.switchInstance(url); - if (!newUrl) newUrl = await redditHelper.switchInstance(url); - if (!newUrl) newUrl = await searchHelper.switchInstance(url); - if (!newUrl) newUrl = await translateHelper.switchInstance(url); - if (!newUrl) newUrl = await mediumHelper.switchInstance(url); - if (!newUrl) newUrl = await quoraHelper.switchInstance(url); - if (!newUrl) newUrl = await libremdbHelper.switchInstance(url); - if (!newUrl) newUrl = await tiktokHelper.switchInstance(url); - if (!newUrl) newUrl = await sendTargetsHelper.switchInstance(url); - if (!newUrl) newUrl = await peertubeHelper.switchInstance(url); - if (!newUrl) newUrl = await lbryHelper.switchInstance(url); - if (!newUrl) newUrl = await imgurHelper.switchInstance(url); - if (!newUrl) newUrl = await wikipediaHelper.switchInstance(url); - - if (newUrl) { - if (!test) - browser.tabs.update({ url: newUrl }); - resolve(true) - } else resolve() - } - }) - }) + return new Promise(resolve => { + browser.tabs.query({ active: true, currentWindow: true }, async tabs => { + let currTab = tabs[0] + if (currTab) { + let url + try { + url = new URL(currTab.url) + } catch { + 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) + + if (newUrl) { + if (!test) browser.tabs.update({ url: newUrl }) + resolve(true) + } else resolve() + } + }) + }) } function latency(name, frontend, document, location) { - let latencyElement = document.getElementById(`latency-${frontend}`); - let latencyLabel = document.getElementById(`latency-${frontend}-label`); - latencyElement.addEventListener("click", - async () => { - let reloadWindow = () => location.reload(); - latencyElement.addEventListener("click", reloadWindow); - let key = `${name}Redirects` - browser.storage.local.get( - key, - r => { - let redirects = r[key]; - const oldHtml = latencyLabel.innerHTML; - latencyLabel.innerHTML = '...'; - testLatency(latencyLabel, redirects[frontend].normal).then(r => { - browser.storage.local.set({ [`${frontend}Latency`]: r }); - latencyLabel.innerHTML = oldHtml; - processDefaultCustomInstances(name, frontend, 'normal', document); - latencyElement.removeEventListener("click", reloadWindow) - }); - } - ) - } - ); + let latencyElement = document.getElementById(`latency-${frontend}`) + let latencyLabel = document.getElementById(`latency-${frontend}-label`) + latencyElement.addEventListener("click", async () => { + let reloadWindow = () => location.reload() + latencyElement.addEventListener("click", reloadWindow) + let key = `${name}Redirects` + browser.storage.local.get(key, r => { + let redirects = r[key] + const oldHtml = latencyLabel.innerHTML + latencyLabel.innerHTML = "..." + testLatency(latencyLabel, redirects[frontend].normal).then(r => { + browser.storage.local.set({ [`${frontend}Latency`]: r }) + latencyLabel.innerHTML = oldHtml + processDefaultCustomInstances(name, frontend, "normal", document) + latencyElement.removeEventListener("click", reloadWindow) + }) + }) + }) } export default { - getRandomInstance, - updateInstances, - protocolHost, - processDefaultCustomInstances, - latency, - copyCookie, - getCookiesFromStorage, - switchInstance, - copyRaw, - unify, + getRandomInstance, + updateInstances, + protocolHost, + processDefaultCustomInstances, + latency, + copyCookie, + getCookiesFromStorage, + switchInstance, + copyRaw, + unify, } diff --git a/src/assets/javascripts/wikipedia.js b/src/assets/javascripts/wikipedia.js index d2ba7de8..d5c9bfa6 100644 --- a/src/assets/javascripts/wikipedia.js +++ b/src/assets/javascripts/wikipedia.js @@ -1,248 +1,262 @@ -window.browser = window.browser || window.chrome; +window.browser = window.browser || window.chrome -import utils from './utils.js' +import utils from "./utils.js" const targets = /^https?:\/{2}(([a-z]{1,}\.){0,})wikipedia\.org/ const frontends = new Array("wikiless") const protocols = new Array("normal", "tor", "i2p", "loki") -let redirects = {}; +let redirects = {} for (let i = 0; i < frontends.length; i++) { - redirects[frontends[i]] = {} - for (let x = 0; x < protocols.length; x++) { - redirects[frontends[i]][protocols[x]] = [] - } + redirects[frontends[i]] = {} + for (let x = 0; x < protocols.length; x++) { + redirects[frontends[i]][protocols[x]] = [] + } } function setRedirects(val) { - browser.storage.local.get('cloudflareBlackList', r => { - redirects.wikiless = val; - wikilessNormalRedirectsChecks = [...redirects.wikiless.normal]; - for (const instance of r.cloudflareBlackList) { - const a = wikilessNormalRedirectsChecks.indexOf(instance); - if (a > -1) wikilessNormalRedirectsChecks.splice(a, 1); - } - browser.storage.local.set({ - wikipediaRedirects: redirects, - wikilessNormalRedirectsChecks - }) - }) + browser.storage.local.get("cloudflareBlackList", r => { + redirects.wikiless = val + wikilessNormalRedirectsChecks = [...redirects.wikiless.normal] + for (const instance of r.cloudflareBlackList) { + const a = wikilessNormalRedirectsChecks.indexOf(instance) + if (a > -1) wikilessNormalRedirectsChecks.splice(a, 1) + } + browser.storage.local.set({ + wikipediaRedirects: redirects, + wikilessNormalRedirectsChecks, + }) + }) } -let - disableWikipedia, - wikipediaRedirects, - protocol, - protocolFallback, - wikilessNormalRedirectsChecks, - wikilessTorRedirectsChecks, - wikilessI2pRedirectsChecks, - wikilessNormalCustomRedirects, - wikilessTorCustomRedirects, - wikilessI2pCustomRedirects, - wikilessLokiCustomRedirects; +let disableWikipedia, + wikipediaRedirects, + protocol, + protocolFallback, + wikilessNormalRedirectsChecks, + wikilessTorRedirectsChecks, + wikilessI2pRedirectsChecks, + wikilessNormalCustomRedirects, + wikilessTorCustomRedirects, + wikilessI2pCustomRedirects, + wikilessLokiCustomRedirects function init() { - return new Promise(async resolve => { - browser.storage.local.get( - [ - "disableWikipedia", - "wikipediaRedirects", - "protocol", - "protocolFallback", - "wikilessNormalRedirectsChecks", - "wikilessTorRedirectsChecks", - "wikilessI2pRedirectsChecks", - "wikilessNormalCustomRedirects", - "wikilessTorCustomRedirects", - "wikilessI2pCustomRedirects", - "wikilessLokiCustomRedirects" - ], - r => { - disableWikipedia = r.disableWikipedia; - wikipediaRedirects = r.wikipediaRedirects; - protocol = r.protocol; - protocolFallback = r.protocolFallback; - wikilessNormalRedirectsChecks = r.wikilessNormalRedirectsChecks; - wikilessTorRedirectsChecks = r.wikilessTorRedirectsChecks; - wikilessI2pRedirectsChecks = r.wikilessI2pRedirectsChecks; - wikilessNormalCustomRedirects = r.wikilessNormalCustomRedirects; - wikilessTorCustomRedirects = r.wikilessTorCustomRedirects; - wikilessI2pCustomRedirects = r.wikilessI2pCustomRedirects; - wikilessLokiCustomRedirects = r.wikilessLokiCustomRedirects; - resolve(); - } - ) - }) + return new Promise(async resolve => { + browser.storage.local.get( + [ + "disableWikipedia", + "wikipediaRedirects", + "protocol", + "protocolFallback", + "wikilessNormalRedirectsChecks", + "wikilessTorRedirectsChecks", + "wikilessI2pRedirectsChecks", + "wikilessNormalCustomRedirects", + "wikilessTorCustomRedirects", + "wikilessI2pCustomRedirects", + "wikilessLokiCustomRedirects", + ], + r => { + disableWikipedia = r.disableWikipedia + wikipediaRedirects = r.wikipediaRedirects + protocol = r.protocol + protocolFallback = r.protocolFallback + wikilessNormalRedirectsChecks = r.wikilessNormalRedirectsChecks + wikilessTorRedirectsChecks = r.wikilessTorRedirectsChecks + wikilessI2pRedirectsChecks = r.wikilessI2pRedirectsChecks + wikilessNormalCustomRedirects = r.wikilessNormalCustomRedirects + wikilessTorCustomRedirects = r.wikilessTorCustomRedirects + wikilessI2pCustomRedirects = r.wikilessI2pCustomRedirects + wikilessLokiCustomRedirects = r.wikilessLokiCustomRedirects + resolve() + } + ) + }) } -init(); +init() browser.storage.onChanged.addListener(init) function initWikilessCookies(test, from) { - return new Promise(async resolve => { - await init(); - const protocolHost = utils.protocolHost(from); - const all = [ - ...wikilessNormalRedirectsChecks, - ...wikilessNormalCustomRedirects, - ...wikilessTorRedirectsChecks, - ...wikilessTorCustomRedirects, - ...wikilessI2pRedirectsChecks, - ...wikilessI2pCustomRedirects, - ...wikilessLokiCustomRedirects - ]; - if (!all.includes(protocolHost)) { resolve(); return; } - - if (!test) { - let checkedInstances = []; - if (protocol == 'loki') checkedInstances = [...wikilessLokiCustomRedirects]; - else if (protocol == 'i2p') checkedInstances = [...wikilessI2pCustomRedirects, ...wikilessI2pRedirectsChecks]; - else if (protocol == 'tor') checkedInstances = [...wikilessTorRedirectsChecks, ...wikilessTorCustomRedirects]; - if ((checkedInstances.length === 0 && protocolFallback) || protocol == 'normal') { - checkedInstances = [...wikilessNormalRedirectsChecks, ...wikilessNormalCustomRedirects]; - } - await utils.copyCookie('wikiless', from, checkedInstances, 'theme'); - await utils.copyCookie('wikiless', from, checkedInstances, 'default_lang'); - } - resolve(true); - }) + return new Promise(async resolve => { + await init() + const protocolHost = utils.protocolHost(from) + const all = [ + ...wikilessNormalRedirectsChecks, + ...wikilessNormalCustomRedirects, + ...wikilessTorRedirectsChecks, + ...wikilessTorCustomRedirects, + ...wikilessI2pRedirectsChecks, + ...wikilessI2pCustomRedirects, + ...wikilessLokiCustomRedirects, + ] + if (!all.includes(protocolHost)) { + resolve() + return + } + + if (!test) { + let checkedInstances = [] + if (protocol == "loki") checkedInstances = [...wikilessLokiCustomRedirects] + else if (protocol == "i2p") checkedInstances = [...wikilessI2pCustomRedirects, ...wikilessI2pRedirectsChecks] + else if (protocol == "tor") checkedInstances = [...wikilessTorRedirectsChecks, ...wikilessTorCustomRedirects] + if ((checkedInstances.length === 0 && protocolFallback) || protocol == "normal") { + checkedInstances = [...wikilessNormalRedirectsChecks, ...wikilessNormalCustomRedirects] + } + await utils.copyCookie("wikiless", from, checkedInstances, "theme") + await utils.copyCookie("wikiless", from, checkedInstances, "default_lang") + } + resolve(true) + }) } function pasteWikilessCookies() { - return new Promise(async resolve => { - await init(); - if (disableWikipedia || protocol === undefined) { resolve(); return; } - let checkedInstances = []; - if (protocol == 'loki') checkedInstances = [...wikilessLokiCustomRedirects]; - else if (protocol == 'i2p') checkedInstances = [...wikilessI2pCustomRedirects, ...wikilessI2pRedirectsChecks]; - else if (protocol == 'tor') checkedInstances = [...wikilessTorRedirectsChecks, ...wikilessTorCustomRedirects]; - if ((checkedInstances.length === 0 && protocolFallback) || protocol == 'normal') { - checkedInstances = [...wikilessNormalRedirectsChecks, ...wikilessNormalCustomRedirects]; - } - utils.getCookiesFromStorage('wikiless', checkedInstances, 'theme'); - utils.getCookiesFromStorage('wikiless', checkedInstances, 'default_lang'); - resolve(); - }) + return new Promise(async resolve => { + await init() + if (disableWikipedia || protocol === undefined) { + resolve() + return + } + let checkedInstances = [] + if (protocol == "loki") checkedInstances = [...wikilessLokiCustomRedirects] + else if (protocol == "i2p") checkedInstances = [...wikilessI2pCustomRedirects, ...wikilessI2pRedirectsChecks] + else if (protocol == "tor") checkedInstances = [...wikilessTorRedirectsChecks, ...wikilessTorCustomRedirects] + if ((checkedInstances.length === 0 && protocolFallback) || protocol == "normal") { + checkedInstances = [...wikilessNormalRedirectsChecks, ...wikilessNormalCustomRedirects] + } + utils.getCookiesFromStorage("wikiless", checkedInstances, "theme") + utils.getCookiesFromStorage("wikiless", checkedInstances, "default_lang") + resolve() + }) } function redirect(url, disableOverride) { - if (disableWikipedia && !disableOverride) return; - if (!targets.test(url.href)) return; - - 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 instancesList = []; - if (protocol == 'loki') instancesList = [...wikilessLokiCustomRedirects]; - else if (protocol == 'i2p') instancesList = [...wikilessI2pCustomRedirects, ...wikilessI2pRedirectsChecks]; - else if (protocol == 'tor') instancesList = [...wikilessTorRedirectsChecks, ...wikilessTorCustomRedirects]; - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - instancesList = [...wikilessNormalRedirectsChecks, ...wikilessNormalCustomRedirects]; - } - if (instancesList.length === 0) return; - const randomInstance = utils.getRandomInstance(instancesList) - - let link = `${randomInstance}${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]; - return link; + if (disableWikipedia && !disableOverride) return + if (!targets.test(url.href)) return + + 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 instancesList = [] + if (protocol == "loki") instancesList = [...wikilessLokiCustomRedirects] + else if (protocol == "i2p") instancesList = [...wikilessI2pCustomRedirects, ...wikilessI2pRedirectsChecks] + else if (protocol == "tor") instancesList = [...wikilessTorRedirectsChecks, ...wikilessTorCustomRedirects] + if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { + instancesList = [...wikilessNormalRedirectsChecks, ...wikilessNormalCustomRedirects] + } + if (instancesList.length === 0) return + const randomInstance = utils.getRandomInstance(instancesList) + + let link = `${randomInstance}${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] + return link } function switchInstance(url, disableOverride) { - return new Promise(async resolve => { - await init(); - if (disableWikipedia && !disableOverride) { resolve(); return; } - const protocolHost = utils.protocolHost(url); - const wikipediaList = [ - ...wikipediaRedirects.wikiless.normal, - ...wikipediaRedirects.wikiless.tor, - ...wikipediaRedirects.wikiless.i2p, - - ...wikilessNormalCustomRedirects, - ...wikilessTorCustomRedirects, - ...wikilessI2pCustomRedirects, - ...wikilessLokiCustomRedirects - ]; - if (!wikipediaList.includes(protocolHost)) { resolve(); return; } - - let instancesList = []; - if (protocol == 'loki') instancesList = [...wikilessLokiCustomRedirects]; - else if (protocol == 'i2p') instancesList = [...wikilessI2pCustomRedirects, ...wikilessI2pRedirectsChecks]; - else if (protocol == 'tor') instancesList = [...wikilessTorRedirectsChecks, ...wikilessTorCustomRedirects]; - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - instancesList = [...wikilessNormalRedirectsChecks, ...wikilessNormalCustomRedirects]; - } - - let index = instancesList.indexOf(protocolHost); - if (index > -1) instancesList.splice(index, 1); - if (instancesList.length === 0) { resolve(); return; } - - const randomInstance = utils.getRandomInstance(instancesList); - resolve(`${randomInstance}${url.pathname}${url.search}`); - }) + return new Promise(async resolve => { + await init() + if (disableWikipedia && !disableOverride) { + resolve() + return + } + const protocolHost = utils.protocolHost(url) + const wikipediaList = [ + ...wikipediaRedirects.wikiless.normal, + ...wikipediaRedirects.wikiless.tor, + ...wikipediaRedirects.wikiless.i2p, + + ...wikilessNormalCustomRedirects, + ...wikilessTorCustomRedirects, + ...wikilessI2pCustomRedirects, + ...wikilessLokiCustomRedirects, + ] + if (!wikipediaList.includes(protocolHost)) { + resolve() + return + } + + let instancesList = [] + if (protocol == "loki") instancesList = [...wikilessLokiCustomRedirects] + else if (protocol == "i2p") instancesList = [...wikilessI2pCustomRedirects, ...wikilessI2pRedirectsChecks] + else if (protocol == "tor") instancesList = [...wikilessTorRedirectsChecks, ...wikilessTorCustomRedirects] + if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { + instancesList = [...wikilessNormalRedirectsChecks, ...wikilessNormalCustomRedirects] + } + + let index = instancesList.indexOf(protocolHost) + if (index > -1) instancesList.splice(index, 1) + if (instancesList.length === 0) { + resolve() + return + } + + const randomInstance = utils.getRandomInstance(instancesList) + resolve(`${randomInstance}${url.pathname}${url.search}`) + }) } function initDefaults() { - return new Promise(resolve => { - fetch('/instances/data.json').then(response => response.text()).then(async data => { - let dataJson = JSON.parse(data); - for (let i = 0; i < frontends.length; i++) { - redirects[frontends[i]] = dataJson[frontends[i]] - } - browser.storage.local.get('cloudflareBlackList', async r => { - wikilessNormalRedirectsChecks = [...redirects.wikiless.normal]; - for (const instance of r.cloudflareBlackList) { - let i = wikilessNormalRedirectsChecks.indexOf(instance); - if (i > -1) wikilessNormalRedirectsChecks.splice(i, 1); - } - browser.storage.local.set({ - disableWikipedia: true, - wikipediaRedirects: redirects, - - wikilessNormalRedirectsChecks: wikilessNormalRedirectsChecks, - wikilessNormalCustomRedirects: [], - - wikilessTorRedirectsChecks: [...redirects.wikiless.tor], - wikilessTorCustomRedirects: [], - - wikilessI2pRedirectsChecks: [...redirects.wikiless.i2p], - wikilessI2pCustomRedirects: [], - - wikilessLokiRedirectsChecks: [...redirects.wikiless.loki], - wikilessLokiCustomRedirects: [] - - }, () => resolve()); - }) - }) - }) + return new Promise(resolve => { + fetch("/instances/data.json") + .then(response => response.text()) + .then(async data => { + let dataJson = JSON.parse(data) + for (let i = 0; i < frontends.length; i++) { + redirects[frontends[i]] = dataJson[frontends[i]] + } + browser.storage.local.get("cloudflareBlackList", async r => { + wikilessNormalRedirectsChecks = [...redirects.wikiless.normal] + for (const instance of r.cloudflareBlackList) { + let i = wikilessNormalRedirectsChecks.indexOf(instance) + if (i > -1) wikilessNormalRedirectsChecks.splice(i, 1) + } + browser.storage.local.set( + { + disableWikipedia: true, + wikipediaRedirects: redirects, + + wikilessNormalRedirectsChecks: wikilessNormalRedirectsChecks, + wikilessNormalCustomRedirects: [], + + wikilessTorRedirectsChecks: [...redirects.wikiless.tor], + wikilessTorCustomRedirects: [], + + wikilessI2pRedirectsChecks: [...redirects.wikiless.i2p], + wikilessI2pCustomRedirects: [], + + wikilessLokiRedirectsChecks: [...redirects.wikiless.loki], + wikilessLokiCustomRedirects: [], + }, + () => resolve() + ) + }) + }) + }) } export default { - setRedirects, + setRedirects, - initWikilessCookies, - pasteWikilessCookies, + initWikilessCookies, + pasteWikilessCookies, - redirect, - initDefaults, - switchInstance, -}; + redirect, + initDefaults, + switchInstance, +} diff --git a/src/assets/javascripts/youtube/get_pipedMaterial_preferences.js b/src/assets/javascripts/youtube/get_pipedMaterial_preferences.js index 9d052f62..df79e13c 100644 --- a/src/assets/javascripts/youtube/get_pipedMaterial_preferences.js +++ b/src/assets/javascripts/youtube/get_pipedMaterial_preferences.js @@ -1,7 +1,5 @@ -window.browser = window.browser || window.chrome; +window.browser = window.browser || window.chrome -browser.storage.local.set( - { - 'pipedMaterial_PREFERENCES': localStorage.getItem("PREFERENCES") - } -) \ No newline at end of file +browser.storage.local.set({ + pipedMaterial_PREFERENCES: localStorage.getItem("PREFERENCES"), +}) diff --git a/src/assets/javascripts/youtube/get_piped_preferences.js b/src/assets/javascripts/youtube/get_piped_preferences.js index 417d64df..388ecd19 100644 --- a/src/assets/javascripts/youtube/get_piped_preferences.js +++ b/src/assets/javascripts/youtube/get_piped_preferences.js @@ -1,24 +1,22 @@ -window.browser = window.browser || window.chrome; +window.browser = window.browser || window.chrome -browser.storage.local.set( - { - 'piped_bufferGoal': localStorage.getItem("bufferGoal"), - 'piped_comments': localStorage.getItem("comments"), - 'piped_disableLBRY': localStorage.getItem("disableLBRY"), - 'piped_enabledCodecs': localStorage.getItem("enabledCodecs"), - 'piped_hl': localStorage.getItem("hl"), - 'piped_homepage': localStorage.getItem("homepage"), - 'piped_instance': localStorage.getItem("instance"), - 'piped_listen': localStorage.getItem("listen"), - 'piped_minimizeDescription': localStorage.getItem("minimizeDescription"), - 'piped_playerAutoPlay': localStorage.getItem("playerAutoPlay"), - 'piped_proxyLBRY': localStorage.getItem("proxyLBRY"), - 'piped_quality': localStorage.getItem("quality"), - 'piped_region': localStorage.getItem("region"), - 'piped_selectedSkip': localStorage.getItem("selectedSkip"), - 'piped_sponsorblock': localStorage.getItem("sponsorblock"), - 'piped_theme': localStorage.getItem("theme"), - 'piped_volume': localStorage.getItem("volume"), - 'piped_watchHistory': localStorage.getItem("watchHistory"), - } -) +browser.storage.local.set({ + piped_bufferGoal: localStorage.getItem("bufferGoal"), + piped_comments: localStorage.getItem("comments"), + piped_disableLBRY: localStorage.getItem("disableLBRY"), + piped_enabledCodecs: localStorage.getItem("enabledCodecs"), + piped_hl: localStorage.getItem("hl"), + piped_homepage: localStorage.getItem("homepage"), + piped_instance: localStorage.getItem("instance"), + piped_listen: localStorage.getItem("listen"), + piped_minimizeDescription: localStorage.getItem("minimizeDescription"), + piped_playerAutoPlay: localStorage.getItem("playerAutoPlay"), + piped_proxyLBRY: localStorage.getItem("proxyLBRY"), + piped_quality: localStorage.getItem("quality"), + piped_region: localStorage.getItem("region"), + piped_selectedSkip: localStorage.getItem("selectedSkip"), + piped_sponsorblock: localStorage.getItem("sponsorblock"), + piped_theme: localStorage.getItem("theme"), + piped_volume: localStorage.getItem("volume"), + piped_watchHistory: localStorage.getItem("watchHistory"), +}) diff --git a/src/assets/javascripts/youtube/set_pipedMaterial_preferences.js b/src/assets/javascripts/youtube/set_pipedMaterial_preferences.js index 7415255a..59d6dcc4 100644 --- a/src/assets/javascripts/youtube/set_pipedMaterial_preferences.js +++ b/src/assets/javascripts/youtube/set_pipedMaterial_preferences.js @@ -1,10 +1,7 @@ -window.browser = window.browser || window.chrome; +window.browser = window.browser || window.chrome -browser.storage.local.get( - "pipedMaterial_PREFERENCES", - r => { - if (r.pipedMaterial_PREFERENCES !== undefined) localStorage.setItem("PREFERENCES", r.pipedMaterial_PREFERENCES) +browser.storage.local.get("pipedMaterial_PREFERENCES", r => { + if (r.pipedMaterial_PREFERENCES !== undefined) localStorage.setItem("PREFERENCES", r.pipedMaterial_PREFERENCES) - window.close(); - } -) \ No newline at end of file + window.close() +}) diff --git a/src/assets/javascripts/youtube/set_piped_preferences.js b/src/assets/javascripts/youtube/set_piped_preferences.js index 346de5c2..374f2d61 100644 --- a/src/assets/javascripts/youtube/set_piped_preferences.js +++ b/src/assets/javascripts/youtube/set_piped_preferences.js @@ -1,45 +1,45 @@ -window.browser = window.browser || window.chrome; +window.browser = window.browser || window.chrome browser.storage.local.get( - [ - "piped_bufferGoal", - "piped_comments", - "piped_disableLBRY", - "piped_enabledCodecs", - "piped_homepage", - "piped_instance", - "piped_listen", - "piped_minimizeDescription", - "piped_playerAutoPlay", - "piped_proxyLBRY", - "piped_quality", - "piped_region", - "piped_selectedSkip", - "piped_sponsorblock", - "piped_theme", - "piped_volume", - "piped_watchHistory", - ], - r => { - if (r.piped_bufferGoal !== undefined) localStorage.setItem("bufferGoal", r.piped_bufferGoal); - if (r.piped_comments !== undefined) localStorage.setItem("comments", r.piped_comments); - if (r.piped_disableLBRY !== undefined) localStorage.setItem("disableLBRY", r.piped_disableLBRY); - if (r.piped_hl !== undefined) localStorage.setItem("hl", r.piped_hl); - if (r.piped_enabledCodecs !== undefined) localStorage.setItem("enabledCodecs", r.piped_enabledCodecs); - if (r.piped_homepage !== undefined) localStorage.setItem("homepage", r.piped_homepage); - if (r.piped_instance !== undefined) localStorage.setItem("instance", r.piped_instance); - if (r.piped_listen !== undefined) localStorage.setItem("listen", r.piped_listen); - if (r.piped_minimizeDescription !== undefined) localStorage.setItem("minimizeDescription", r.piped_minimizeDescription); - if (r.piped_playerAutoPlay !== undefined) localStorage.setItem("playerAutoPlay", r.piped_playerAutoPlay); - if (r.piped_proxyLBRY !== undefined) localStorage.setItem("proxyLBRY", r.piped_proxyLBRY); - if (r.piped_quality !== undefined) localStorage.setItem("quality", r.piped_quality); - if (r.piped_region !== undefined) localStorage.setItem("region", r.piped_region); - if (r.piped_selectedSkip !== undefined) localStorage.setItem("selectedSkip", r.piped_selectedSkip); - if (r.piped_sponsorblock !== undefined) localStorage.setItem("sponsorblock", r.piped_sponsorblock); - if (r.piped_theme !== undefined) localStorage.setItem("theme", r.piped_theme); - if (r.piped_volume !== undefined) localStorage.setItem("volume", r.piped_volume); - if (r.piped_watchHistory !== undefined) localStorage.setItem("watchHistory", r.piped_watchHistory); + [ + "piped_bufferGoal", + "piped_comments", + "piped_disableLBRY", + "piped_enabledCodecs", + "piped_homepage", + "piped_instance", + "piped_listen", + "piped_minimizeDescription", + "piped_playerAutoPlay", + "piped_proxyLBRY", + "piped_quality", + "piped_region", + "piped_selectedSkip", + "piped_sponsorblock", + "piped_theme", + "piped_volume", + "piped_watchHistory", + ], + r => { + if (r.piped_bufferGoal !== undefined) localStorage.setItem("bufferGoal", r.piped_bufferGoal) + if (r.piped_comments !== undefined) localStorage.setItem("comments", r.piped_comments) + if (r.piped_disableLBRY !== undefined) localStorage.setItem("disableLBRY", r.piped_disableLBRY) + if (r.piped_hl !== undefined) localStorage.setItem("hl", r.piped_hl) + if (r.piped_enabledCodecs !== undefined) localStorage.setItem("enabledCodecs", r.piped_enabledCodecs) + if (r.piped_homepage !== undefined) localStorage.setItem("homepage", r.piped_homepage) + if (r.piped_instance !== undefined) localStorage.setItem("instance", r.piped_instance) + if (r.piped_listen !== undefined) localStorage.setItem("listen", r.piped_listen) + if (r.piped_minimizeDescription !== undefined) localStorage.setItem("minimizeDescription", r.piped_minimizeDescription) + if (r.piped_playerAutoPlay !== undefined) localStorage.setItem("playerAutoPlay", r.piped_playerAutoPlay) + if (r.piped_proxyLBRY !== undefined) localStorage.setItem("proxyLBRY", r.piped_proxyLBRY) + if (r.piped_quality !== undefined) localStorage.setItem("quality", r.piped_quality) + if (r.piped_region !== undefined) localStorage.setItem("region", r.piped_region) + if (r.piped_selectedSkip !== undefined) localStorage.setItem("selectedSkip", r.piped_selectedSkip) + if (r.piped_sponsorblock !== undefined) localStorage.setItem("sponsorblock", r.piped_sponsorblock) + if (r.piped_theme !== undefined) localStorage.setItem("theme", r.piped_theme) + if (r.piped_volume !== undefined) localStorage.setItem("volume", r.piped_volume) + if (r.piped_watchHistory !== undefined) localStorage.setItem("watchHistory", r.piped_watchHistory) - window.close(); - } -) \ No newline at end of file + window.close() + } +) diff --git a/src/assets/javascripts/youtube/youtube.js b/src/assets/javascripts/youtube/youtube.js index 72763c46..e8a77ff6 100644 --- a/src/assets/javascripts/youtube/youtube.js +++ b/src/assets/javascripts/youtube/youtube.js @@ -1,601 +1,856 @@ -"use strict"; +"use strict" -window.browser = window.browser || window.chrome; +window.browser = window.browser || window.chrome -import utils from '../utils.js' +import utils from "../utils.js" const targets = [ - /^https?:\/{2}(www\.|music\.|m\.|)youtube\.com(\/.*|$)/, + /^https?:\/{2}(www\.|music\.|m\.|)youtube\.com(\/.*|$)/, - /^https?:\/{2}img\.youtube\.com\/vi\/.*\/..*/, // https://stackoverflow.com/questions/2068344/how-do-i-get-a-youtube-video-thumbnail-from-the-youtube-api - /^https?:\/{2}(i|s)\.ytimg\.com\/vi\/.*\/..*/, + /^https?:\/{2}img\.youtube\.com\/vi\/.*\/..*/, // https://stackoverflow.com/questions/2068344/how-do-i-get-a-youtube-video-thumbnail-from-the-youtube-api + /^https?:\/{2}(i|s)\.ytimg\.com\/vi\/.*\/..*/, - /^https?:\/{2}(www\.|music\.|)youtube\.com\/watch\?v\=..*/, + /^https?:\/{2}(www\.|music\.|)youtube\.com\/watch\?v\=..*/, - /^https?:\/{2}youtu\.be\/..*/, + /^https?:\/{2}youtu\.be\/..*/, - /^https?:\/{2}(www\.|)(youtube|youtube-nocookie)\.com\/embed\/..*/, -]; + /^https?:\/{2}(www\.|)(youtube|youtube-nocookie)\.com\/embed\/..*/, +] -const frontends = new Array("invidious", "piped", "pipedMaterial") +const frontends = new Array("invidious", "piped", "pipedMaterial", "cloudtube") const protocols = new Array("normal", "tor", "i2p", "loki") -let redirects = {}; +let redirects = {} for (let i = 0; i < frontends.length; i++) { - redirects[frontends[i]] = {} - for (let x = 0; x < protocols.length; x++) { - redirects[frontends[i]][protocols[x]] = [] - } + redirects[frontends[i]] = {} + for (let x = 0; x < protocols.length; x++) { + redirects[frontends[i]][protocols[x]] = [] + } } function setRedirects(val) { - browser.storage.local.get('cloudflareBlackList', r => { - redirects.invidious = val.invidious; - redirects.piped = val.piped; - redirects.pipedMaterial = val.pipedMaterial - invidiousNormalRedirectsChecks = [...redirects.invidious.normal]; - pipedNormalRedirectsChecks = [...redirects.piped.normal]; - pipedMaterialNormalRedirectsChecks = [...redirects.pipedMaterial.normal] - for (const instance of r.cloudflareBlackList) { - const a = invidiousNormalRedirectsChecks.indexOf(instance); - if (a > -1) invidiousNormalRedirectsChecks.splice(a, 1); - - const b = pipedNormalRedirectsChecks.indexOf(instance); - if (b > -1) pipedNormalRedirectsChecks.splice(b, 1); - - const c = pipedMaterialNormalRedirectsChecks.indexOf(instance); - if (c > -1) pipedMaterialNormalRedirectsChecks.splice(c, 1); - } - browser.storage.local.set({ - youtubeRedirects: redirects, - invidiousNormalRedirectsChecks, - invidiousTorRedirectsChecks: redirects.invidious.tor, - pipedNormalRedirectsChecks, - pipedTorRedirectsChecks: redirects.piped.tor, - pipedMaterialNormalRedirectsChecks, - // pipedMaterialTorRedirectsChecks: redirects.pipedMaterial.tor - }) - }) + browser.storage.local.get("cloudflareBlackList", r => { + for (let i = 0; i < frontends.length; i++) { + redirects.frontends = val.frontends + } + invidiousNormalRedirectsChecks = [...redirects.invidious.normal] + pipedNormalRedirectsChecks = [...redirects.piped.normal] + pipedMaterialNormalRedirectsChecks = [...redirects.pipedMaterial.normal] + for (const instance of r.cloudflareBlackList) { + const a = invidiousNormalRedirectsChecks.indexOf(instance) + if (a > -1) invidiousNormalRedirectsChecks.splice(a, 1) + + const b = pipedNormalRedirectsChecks.indexOf(instance) + if (b > -1) pipedNormalRedirectsChecks.splice(b, 1) + + const c = pipedMaterialNormalRedirectsChecks.indexOf(instance) + if (c > -1) pipedMaterialNormalRedirectsChecks.splice(c, 1) + + const d = cloudtubeNormalRedirectsChecks.indexOf(instance) + if (c > -1) cloudtubeNormalRedirectsChecks.splice(d, 1) + } + browser.storage.local.set({ + youtubeRedirects: redirects, + invidiousNormalRedirectsChecks, + pipedNormalRedirectsChecks, + pipedMaterialNormalRedirectsChecks, + cloudtubeNormalRedirectsChecks, + }) + }) } -let - disableYoutube, - onlyEmbeddedVideo, - youtubeFrontend, - protocol, - protocolFallback, - youtubeEmbedFrontend, - youtubeRedirects, - invidiousNormalRedirectsChecks, - invidiousNormalCustomRedirects, - invidiousTorRedirectsChecks, - invidiousTorCustomRedirects, - invidiousI2pCustomRedirects, - invidiousLokiCustomRedirects, - pipedNormalRedirectsChecks, - pipedNormalCustomRedirects, - pipedTorRedirectsChecks, - pipedTorCustomRedirects, - pipedI2pCustomRedirects, - pipedLokiCustomRedirects, - pipedMaterialNormalRedirectsChecks, - pipedMaterialNormalCustomRedirects, - pipedMaterialTorRedirectsChecks, - pipedMaterialTorCustomRedirects, - pipedMaterialI2pCustomRedirects, - pipedMaterialLokiCustomRedirects; +let disableYoutube, + onlyEmbeddedVideo, + youtubeFrontend, + protocol, + protocolFallback, + youtubeEmbedFrontend, + youtubeRedirects, + invidiousNormalRedirectsChecks, + invidiousNormalCustomRedirects, + invidiousTorRedirectsChecks, + invidiousTorCustomRedirects, + invidiousI2pRedirectsChecks, + invidiousI2pCustomRedirects, + invidiousLokiRedirectsChecks, + invidiousLokiCustomRedirects, + pipedNormalRedirectsChecks, + pipedNormalCustomRedirects, + pipedTorRedirectsChecks, + pipedTorCustomRedirects, + pipedI2pRedirectsChecks, + pipedI2pCustomRedirects, + pipedLokiRedirectsChecks, + pipedLokiCustomRedirects, + pipedMaterialNormalRedirectsChecks, + pipedMaterialNormalCustomRedirects, + pipedMaterialTorRedirectsChecks, + pipedMaterialTorCustomRedirects, + pipedMaterialI2pRedirectsChecks, + pipedMaterialI2pCustomRedirects, + pipedMaterialLokiRedirectsChecks, + pipedMaterialLokiCustomRedirects, + cloudtubeNormalRedirectsChecks, + cloudtubeNormalCustomRedirects, + cloudtubeTorRedirectsChecks, + cloudtubeTorCustomRedirects, + cloudtubeI2pRedirectsChecks, + cloudtubeI2pCustomRedirects, + cloudtubeLokiRedirectsChecks, + cloudtubeLokiCustomRedirects function init() { - return new Promise(resolve => { - browser.storage.local.get( - [ - "disableYoutube", - "onlyEmbeddedVideo", - "youtubeFrontend", - "protocol", - "protocolFallback", - "youtubeEmbedFrontend", - "youtubeRedirects", - "invidiousNormalRedirectsChecks", - "invidiousNormalCustomRedirects", - "invidiousTorRedirectsChecks", - "invidiousTorCustomRedirects", - "invidiousI2pCustomRedirects", - "invidiousLokiCustomRedirects", - "pipedNormalRedirectsChecks", - "pipedNormalCustomRedirects", - "pipedTorRedirectsChecks", - "pipedTorCustomRedirects", - "pipedI2pCustomRedirects", - "pipedLokiCustomRedirects", - "pipedMaterialNormalRedirectsChecks", - "pipedMaterialNormalCustomRedirects", - "pipedMaterialTorRedirectsChecks", - "pipedMaterialTorCustomRedirects", - "pipedMaterialI2pCustomRedirects", - "pipedMaterialLokiCustomRedirects" - ], - r => { - disableYoutube = r.disableYoutube; - onlyEmbeddedVideo = r.onlyEmbeddedVideo; - youtubeFrontend = r.youtubeFrontend; - protocol = r.protocol; - protocolFallback = r.protocolFallback; - youtubeEmbedFrontend = r.youtubeEmbedFrontend; - youtubeRedirects = r.youtubeRedirects; - invidiousNormalRedirectsChecks = r.invidiousNormalRedirectsChecks; - invidiousNormalCustomRedirects = r.invidiousNormalCustomRedirects; - invidiousTorRedirectsChecks = r.invidiousTorRedirectsChecks; - invidiousTorCustomRedirects = r.invidiousTorCustomRedirects; - invidiousI2pCustomRedirects = r.invidiousI2pCustomRedirects; - invidiousLokiCustomRedirects = r.invidiousLokiCustomRedirects; - pipedNormalRedirectsChecks = r.pipedNormalRedirectsChecks; - pipedNormalCustomRedirects = r.pipedNormalCustomRedirects; - pipedTorRedirectsChecks = r.pipedTorRedirectsChecks; - pipedTorCustomRedirects = r.pipedTorCustomRedirects; - pipedI2pCustomRedirects = r.pipedI2pCustomRedirects; - pipedLokiCustomRedirects = r.pipedLokiCustomRedirects; - pipedMaterialNormalRedirectsChecks = r.pipedMaterialNormalRedirectsChecks; - pipedMaterialNormalCustomRedirects = r.pipedMaterialNormalCustomRedirects; - pipedMaterialTorRedirectsChecks = r.pipedMaterialTorRedirectsChecks; - pipedMaterialTorCustomRedirects = r.pipedMaterialTorCustomRedirects; - pipedMaterialI2pCustomRedirects = r.pipedMaterialI2pCustomRedirects; - pipedMaterialLokiCustomRedirects = r.pipedMaterialLokiCustomRedirects; - resolve(); - } - ) - }) + return new Promise(resolve => { + browser.storage.local.get( + [ + "disableYoutube", + "onlyEmbeddedVideo", + "youtubeFrontend", + "protocol", + "protocolFallback", + "youtubeEmbedFrontend", + "youtubeRedirects", + "invidiousNormalRedirectsChecks", + "invidiousNormalCustomRedirects", + "invidiousTorRedirectsChecks", + "invidiousTorCustomRedirects", + "invidiousI2pRedirectsChecks", + "invidiousI2pCustomRedirects", + "invidiousLokiRedirectsChecks", + "invidiousLokiCustomRedirects", + "pipedNormalRedirectsChecks", + "pipedNormalCustomRedirects", + "pipedTorRedirectsChecks", + "pipedTorCustomRedirects", + "pipedI2pRedirectsChecks", + "pipedI2pCustomRedirects", + "pipedLokiRedirectsChecks", + "pipedLokiCustomRedirects", + "pipedMaterialNormalRedirectsChecks", + "pipedMaterialNormalCustomRedirects", + "pipedMaterialTorRedirectsChecks", + "pipedMaterialTorCustomRedirects", + "pipedMaterialI2pRedirectsChecks", + "pipedMaterialI2pCustomRedirects", + "pipedMaterialLokiRedirectsChecks", + "pipedMaterialLokiCustomRedirects", + "cloudtubeNormalRedirectsChecks", + "cloudtubeNormalCustomRedirects", + "cloudtubeTorRedirectsChecks", + "cloudtubeTorCustomRedirects", + "cloudtubeI2pRedirectsChecks", + "cloudtubeI2pCustomRedirects", + "cloudtubeLokiRedirectsChecks", + "cloudtubeLokiCustomRedirects", + ], + r => { + disableYoutube = r.disableYoutube + onlyEmbeddedVideo = r.onlyEmbeddedVideo + youtubeFrontend = r.youtubeFrontend + protocol = r.protocol + protocolFallback = r.protocolFallback + youtubeEmbedFrontend = r.youtubeEmbedFrontend + youtubeRedirects = r.youtubeRedirects + invidiousNormalRedirectsChecks = r.invidiousNormalRedirectsChecks + invidiousNormalCustomRedirects = r.invidiousNormalCustomRedirects + invidiousTorRedirectsChecks = r.invidiousTorRedirectsChecks + invidiousTorCustomRedirects = r.invidiousTorCustomRedirects + invidiousI2pRedirectsChecks = r.invidiousI2pRedirectsChecks + invidiousI2pCustomRedirects = r.invidiousI2pCustomRedirects + invidiousLokiRedirectsChecks = r.invidiousLokiRedirectsChecks + invidiousLokiCustomRedirects = r.invidiousLokiCustomRedirects + pipedNormalRedirectsChecks = r.pipedNormalRedirectsChecks + pipedNormalCustomRedirects = r.pipedNormalCustomRedirects + pipedTorRedirectsChecks = r.pipedTorRedirectsChecks + pipedTorCustomRedirects = r.pipedTorCustomRedirects + pipedI2pRedirectsChecks = r.pipedI2pRedirectsChecks + pipedI2pCustomRedirects = r.pipedI2pCustomRedirects + pipedLokiRedirectsChecks = r.pipedLokiRedirectsChecks + pipedLokiCustomRedirects = r.pipedLokiCustomRedirects + pipedMaterialNormalRedirectsChecks = r.pipedMaterialNormalRedirectsChecks + pipedMaterialNormalCustomRedirects = r.pipedMaterialNormalCustomRedirects + pipedMaterialTorRedirectsChecks = r.pipedMaterialTorRedirectsChecks + pipedMaterialTorCustomRedirects = r.pipedMaterialTorCustomRedirects + pipedMaterialI2pRedirectsChecks = r.pipedMaterialI2pRedirectsChecks + pipedMaterialI2pCustomRedirects = r.pipedMaterialI2pCustomRedirects + pipedMaterialLokiRedirectsChecks = r.pipedMaterialLokiRedirectsChecks + pipedMaterialLokiCustomRedirects = r.pipedMaterialLokiCustomRedirects + cloudtubeNormalRedirectsChecks = r.cloudtubeNormalRedirectsChecks + cloudtubeNormalCustomRedirects = r.cloudtubeNormalCustomRedirects + cloudtubeTorRedirectsChecks = r.cloudtubeTorRedirectsChecks + cloudtubeTorCustomRedirects = r.cloudtubeTorCustomRedirects + cloudtubeI2pRedirectsChecks = r.cloudtubeI2pRedirectsChecks + cloudtubeI2pCustomRedirects = r.cloudtubeI2pCustomRedirects + cloudtubeLokiRedirectsChecks = r.cloudtubeLokiRedirectsChecks + cloudtubeLokiCustomRedirects = r.cloudtubeLokiCustomRedirects + resolve() + } + ) + }) } -init(); +init() browser.storage.onChanged.addListener(init) function all() { - return [ - ...youtubeRedirects.invidious.normal, - ...youtubeRedirects.invidious.tor, - - ...youtubeRedirects.piped.normal, - ...youtubeRedirects.piped.tor, - - ...youtubeRedirects.pipedMaterial.normal, - ...youtubeRedirects.pipedMaterial.tor, - - ...invidiousNormalCustomRedirects, - ...invidiousTorCustomRedirects, - ...invidiousI2pCustomRedirects, - ...invidiousLokiCustomRedirects, - - ...pipedNormalCustomRedirects, - ...pipedTorCustomRedirects, - ...pipedI2pCustomRedirects, - ...pipedLokiCustomRedirects, - - ...pipedMaterialNormalCustomRedirects, - ...pipedMaterialTorCustomRedirects, - ...pipedMaterialI2pCustomRedirects, - ...pipedMaterialLokiCustomRedirects - ]; + return [ + ...youtubeRedirects.invidious.normal, + ...youtubeRedirects.invidious.tor, + ...youtubeRedirects.invidious.i2p, + ...youtubeRedirects.invidious.loki, + + ...youtubeRedirects.piped.normal, + ...youtubeRedirects.piped.tor, + ...youtubeRedirects.piped.i2p, + ...youtubeRedirects.piped.loki, + + ...youtubeRedirects.pipedMaterial.normal, + ...youtubeRedirects.pipedMaterial.tor, + ...youtubeRedirects.pipedMaterial.i2p, + ...youtubeRedirects.pipedMaterial.loki, + + ...youtubeRedirects.cloudtube.normal, + ...youtubeRedirects.cloudtube.tor, + ...youtubeRedirects.cloudtube.i2p, + ...youtubeRedirects.cloudtube.loki, + + ...invidiousNormalCustomRedirects, + ...invidiousTorCustomRedirects, + ...invidiousI2pCustomRedirects, + ...invidiousLokiCustomRedirects, + + ...pipedNormalCustomRedirects, + ...pipedTorCustomRedirects, + ...pipedI2pCustomRedirects, + ...pipedLokiCustomRedirects, + + ...pipedMaterialNormalCustomRedirects, + ...pipedMaterialTorCustomRedirects, + ...pipedMaterialI2pCustomRedirects, + ...pipedMaterialLokiCustomRedirects, + + ...cloudtubeNormalCustomRedirects, + ...cloudtubeTorCustomRedirects, + ...cloudtubeI2pCustomRedirects, + ...cloudtubeLokiCustomRedirects, + ] +} + +function calculateFrontend(type) { + switch (type) { + case "main_frame": + return youtubeFrontend + case "sub_frame": + return youtubeEmbedFrontend + } +} + +function getInstanceList(type) { + let instancesList = [] + switch (calculateFrontend(type)) { + case "invidious": + switch (protocol) { + case "loki": + instancesList = [...invidiousLokiRedirectsChecks, ...invidiousLokiCustomRedirects] + break + case "i2p": + instancesList = [...invidiousI2pRedirectsChecks, ...invidiousI2pCustomRedirects] + break + case "tor": + instancesList = [...invidiousTorRedirectsChecks, ...invidiousTorCustomRedirects] + } + if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { + instancesList = [...invidiousNormalRedirectsChecks, ...invidiousNormalCustomRedirects] + } + break + case "piped": + switch (protocol) { + case "loki": + instancesList = [...pipedLokiRedirectsChecks, ...pipedLokiCustomRedirects] + break + case "i2p": + instancesList = [...pipedI2pRedirectsChecks, ...pipedI2pCustomRedirects] + break + case "tor": + instancesList = [...pipedTorRedirectsChecks, ...pipedTorCustomRedirects] + } + if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { + instancesList = [...pipedNormalRedirectsChecks, ...pipedNormalCustomRedirects] + } + break + case "pipedMaterial": + switch (protocol) { + case "loki": + instancesList = [...pipedMaterialLokiRedirectsChecks, ...pipedMaterialLokiCustomRedirects] + break + case "i2p": + instancesList = [...pipedMaterialI2pRedirectsChecks, ...pipedMaterialI2pCustomRedirects] + break + case "tor": + instancesList = [...pipedMaterialTorRedirectsChecks, ...pipedMaterialTorCustomRedirects] + } + if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { + instancesList = [...pipedMaterialNormalRedirectsChecks, ...pipedMaterialNormalCustomRedirects] + } + case "cloudtube": + switch (protocol) { + case "loki": + instancesList = [...cloudtubeLokiRedirectsChecks, ...cloudtubeLokiCustomRedirects] + break + case "i2p": + instancesList = [...cloudtubeI2pRedirectsChecks, ...cloudtubeI2pCustomRedirects] + break + case "tor": + instancesList = [...cloudtubeTorRedirectsChecks, ...cloudtubeTorCustomRedirects] + } + if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { + instancesList = [...cloudtubeNormalRedirectsChecks, ...cloudtubeNormalCustomRedirects] + } + } + return instancesList } function redirect(url, type, initiator, disableOverride) { - if (disableYoutube && !disableOverride) return; - if (!targets.some(rx => rx.test(url.href))) return; - if (initiator && all().includes(initiator.origin)) return 'BYPASSTAB'; - - const isInvidious = youtubeFrontend == 'invidious'; - const isPiped = youtubeFrontend == 'piped'; - const isPipedMaterial = youtubeFrontend == 'pipedMaterial' - const isFreetube = youtubeFrontend == 'freetube'; - const isYatte = youtubeFrontend == 'yatte'; - - //const isFrontendYoutube = youtubeEmbedFrontend == "youtube"; - const isFrontendInvidious = youtubeEmbedFrontend == 'invidious'; - const isFrontendPiped = youtubeEmbedFrontend == 'piped'; - const isFrontendPipedMaterial = youtubeEmbedFrontend == 'pipedMaterial'; - - const main_frame = type === "main_frame"; - const sub_frame = type === "sub_frame"; - - if (!sub_frame && !main_frame) return; - if (url.pathname.match(/iframe_api/) || url.pathname.match(/www-widgetapi/)) return; // Don't redirect YouTube Player API. - if (onlyEmbeddedVideo == 'onlyEmbedded' && main_frame) return; - if (onlyEmbeddedVideo == 'onlyNotEmbedded' && !main_frame) return; - - //if ((isFreetube || isYatte) && sub_frame && isFrontendYoutube) return; - - if (isYatte && main_frame) return url.href.replace(/^https?:\/{2}/, 'yattee://'); - if (isFreetube && main_frame) return `freetube://https://youtube.com${url.pathname}${url.search}`; - - if (isInvidious || ((isFreetube || isYatte) && sub_frame && isFrontendInvidious)) { - let instancesList = []; - if (protocol == 'loki') instancesList = [...invidiousLokiCustomRedirects]; - else if (protocol == 'i2p') instancesList = [...invidiousI2pCustomRedirects]; - else if (protocol == 'tor') instancesList = [...invidiousTorRedirectsChecks, ...invidiousTorCustomRedirects]; - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - instancesList = [...invidiousNormalRedirectsChecks, ...invidiousNormalCustomRedirects]; - } - if (instancesList.length === 0) return; - const randomInstance = utils.getRandomInstance(instancesList); - return `${randomInstance}${url.pathname}${url.search}`; - } - if (isPiped || ((isFreetube || isYatte) && sub_frame && isFrontendPiped)) { - let instancesList = []; - if (protocol == 'loki') instancesList = [...pipedLokiCustomRedirects]; - else if (protocol == 'i2p') instancesList = [...pipedI2pCustomRedirects]; - else if (protocol == 'tor') instancesList = [...pipedTorRedirectsChecks, ...pipedTorCustomRedirects]; - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - instancesList = [...pipedNormalRedirectsChecks, ...pipedNormalCustomRedirects]; - } - if (instancesList.length === 0) return; - const randomInstance = utils.getRandomInstance(instancesList); - return `${randomInstance}${url.pathname}${url.search}`; - } - if (isPipedMaterial || ((isFreetube || isYatte) && sub_frame && isFrontendPipedMaterial)) { - let instancesList = []; - if (protocol == 'loki') instancesList = [...pipedMaterialLokiCustomRedirects]; - else if (protocol == 'i2p') instancesList = [...pipedMaterialI2pCustomRedirects]; - else if (protocol == 'tor') instancesList = [...pipedMaterialTorCustomRedirects]; //...pipedMaterialTorRedirectsChecks, - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - instancesList = [...pipedMaterialNormalRedirectsChecks, ...pipedMaterialNormalCustomRedirects]; - } - const randomInstance = utils.getRandomInstance(instancesList); - return `${randomInstance}${url.pathname}${url.search}`; - } - return 'CANCEL'; + if (disableYoutube && !disableOverride) return + if (!targets.some(rx => rx.test(url.href))) return + if (initiator && all().includes(initiator.origin)) return "BYPASSTAB" + + if (type != ("main_frame" || "sub_frame")) return + if (url.pathname.match(/iframe_api/) || url.pathname.match(/www-widgetapi/)) return // Don't redirect YouTube Player API. + if (onlyEmbeddedVideo == "onlyEmbedded" && type == "main_frame") return + if (onlyEmbeddedVideo == "onlyNotEmbedded" && type == "sub_frame") return + + if (type == "main_frame") { + switch (youtubeFrontend) { + case "yatte": + return url.href.replace(/^https?:\/{2}/, "yattee://") + case "freetube": + return `freetube://https://youtube.com${url.pathname}${url.search}` + } + } + + const instanceList = getInstanceList(type) + try { + if (instanceList.length >= 1) { + const randomInstance = utils.getRandomInstance(instanceList) + return `${randomInstance}${url.pathname}${url.search}` + } + } catch { + return + } } function reverse(url) { - return new Promise(async resolve => { - await init(); - const protocolHost = utils.protocolHost(url); - if (!all().includes(protocolHost)) { resolve(); return; } - resolve(`https://youtube.com${url.pathname}${url.search}`); - }) + return new Promise(async resolve => { + await init() + const protocolHost = utils.protocolHost(url) + if (!all().includes(protocolHost)) { + resolve() + return + } + resolve(`https://youtube.com${url.pathname}${url.search}`) + }) } function switchInstance(url, disableOverride) { - return new Promise(async resolve => { - await init(); - if (disableYoutube && !disableOverride) { resolve(); return; } - const protocolHost = utils.protocolHost(url); - if (!all().includes(protocolHost)) { resolve(); return; } - - let instancesList = []; - if (protocol == 'loki') { - if (youtubeFrontend == 'invidious') instancesList = [...invidiousLokiCustomRedirects]; //...invidiousLokiRedirectsChecks, - else if (youtubeFrontend == 'piped') instancesList = [...pipedLokiCustomRedirects]; //...pipedLokiRedirectsChecks, - else if (youtubeFrontend == 'pipedMaterial') instancesList = [...pipedMaterialLokiCustomRedirects]; //...pipedMaterialLokiRedirectsChecks, - } - else if (protocol == 'i2p') { - if (youtubeFrontend == 'invidious') instancesList = [...invidiousI2pCustomRedirects]; //...invidiousI2pRedirectsChecks, - else if (youtubeFrontend == 'piped') instancesList = [...pipedI2pCustomRedirects]; //...pipedI2pRedirectsChecks, - else if (youtubeFrontend == 'pipedMaterial') instancesList = [...pipedMaterialI2pCustomRedirects]; //...pipedMaterialI2pRedirectsChecks, - } - else if (protocol == 'tor') { - if (youtubeFrontend == 'invidious') instancesList = [...invidiousTorRedirectsChecks, ...invidiousTorCustomRedirects]; - else if (youtubeFrontend == 'piped') instancesList = [...pipedTorRedirectsChecks, ...pipedTorCustomRedirects]; - else if (youtubeFrontend == 'pipedMaterial') instancesList = [...pipedMaterialTorCustomRedirects]; //...pipedMaterialTorRedirectsChecks, - } - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - if (youtubeFrontend == 'invidious') instancesList = [...invidiousNormalRedirectsChecks, ...invidiousNormalCustomRedirects]; - else if (youtubeFrontend == 'piped') instancesList = [...pipedNormalRedirectsChecks, ...pipedNormalCustomRedirects]; - else if (youtubeFrontend == 'pipedMaterial') instancesList = [...pipedMaterialNormalRedirectsChecks, ...pipedMaterialNormalCustomRedirects]; - } - - const i = instancesList.indexOf(protocolHost); - if (i > -1) instancesList.splice(i, 1); - if (instancesList.length == 0) { resolve(); return; } - - const randomInstance = utils.getRandomInstance(instancesList); - resolve(`${randomInstance}${url.pathname}${url.search}`); - }) + return new Promise(async resolve => { + await init() + if (disableYoutube && !disableOverride) { + resolve() + return + } + const protocolHost = utils.protocolHost(url) + if (!all().includes(protocolHost)) { + resolve() + return + } + + let instancesList = [] + switch (protocol) { + case "loki": + switch (youtubeFrontend) { + case "invidious": + instancesList = [...invidiousLokiRedirectsChecks, ...invidiousLokiCustomRedirects] + break + case "piped": + instancesList = [...pipedLokiRedirectsChecks, ...pipedLokiCustomRedirects] + break + case "pipedMaterial": + instancesList = [...pipedMaterialLokiRedirectsChecks, ...pipedMaterialLokiCustomRedirects] + break + case "cloudtube": + instancesList = [...cloudtubeLokiRedirectsChecks, ...cloudtubeLokiCustomRedirects] + } + break + case "i2p": + switch (youtubeFrontend) { + case "invidious": + instancesList = [...invidiousI2pRedirectsChecks, ...invidiousI2pCustomRedirects] + break + case "piped": + instancesList = [...pipedI2pRedirectsChecks, ...pipedI2pCustomRedirects] + break + case "pipedMaterial": + instancesList = [...pipedMaterialI2pRedirectsChecks, ...pipedMaterialI2pCustomRedirects] + break + case "cloudtube": + instancesList = [...cloudtubeI2pRedirectsChecks, ...cloudtubeI2pCustomRedirects] + } + break + case "tor": + switch (youtubeFrontend) { + case "invidious": + instancesList = [...invidiousTorRedirectsChecks, ...invidiousTorCustomRedirects] + break + case "piped": + instancesList = [...pipedTorRedirectsChecks, ...pipedTorCustomRedirects] + break + case "pipedMaterial": + instancesList = [...pipedMaterialTorRedirectsChecks, ...pipedMaterialTorCustomRedirects] + break + case "cloudtube": + instancesList = [...cloudtubeTorRedirectsChecks, ...cloudtubeTorCustomRedirects] + } + } + if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { + switch (youtubeFrontend) { + case "invidious": + instancesList = [...invidiousNormalRedirectsChecks, ...invidiousNormalCustomRedirects] + break + case "piped": + instancesList = [...pipedNormalRedirectsChecks, ...pipedNormalCustomRedirects] + break + case "pipedMaterial": + instancesList = [...pipedMaterialNormalRedirectsChecks, ...pipedMaterialNormalCustomRedirects] + break + case "cloudtube": + instancesList = [...cloudtubeNormalRedirectsChecks, ...cloudtubeNormalCustomRedirects] + } + } + + const i = instancesList.indexOf(protocolHost) + if (i > -1) instancesList.splice(i, 1) + if (instancesList.length == 0) { + resolve() + return + } + + const randomInstance = utils.getRandomInstance(instancesList) + resolve(`${randomInstance}${url.pathname}${url.search}`) + }) } function initDefaults() { - return new Promise(async resolve => { - fetch('/instances/data.json').then(response => response.text()).then(async data => { - let dataJson = JSON.parse(data); - for (let i = 0; i < frontends.length; i++) { - redirects[frontends[i]] = dataJson[frontends[i]] - } - browser.storage.local.get('cloudflareBlackList', async r => { + return new Promise(async resolve => { + fetch("/instances/data.json") + .then(response => response.text()) + .then(async data => { + let dataJson = JSON.parse(data) + for (let i = 0; i < frontends.length; i++) { + redirects[frontends[i]] = dataJson[frontends[i]] + } + browser.storage.local.get("cloudflareBlackList", async r => { + invidiousNormalRedirectsChecks = [...redirects.invidious.normal] + pipedNormalRedirectsChecks = [...redirects.piped.normal] + pipedMaterialNormalRedirectsChecks = [...redirects.pipedMaterial.normal] + cloudtubeNormalRedirectsChecks = [...redirects.cloudtube.normal] + + for (const instance of r.cloudflareBlackList) { + const a = invidiousNormalRedirectsChecks.indexOf(instance) + if (a > -1) invidiousNormalRedirectsChecks.splice(a, 1) - invidiousNormalRedirectsChecks = [...redirects.invidious.normal]; - pipedNormalRedirectsChecks = [...redirects.piped.normal]; - pipedMaterialNormalRedirectsChecks = [...redirects.pipedMaterial.normal]; + const b = pipedNormalRedirectsChecks.indexOf(instance) + if (b > -1) pipedNormalRedirectsChecks.splice(b, 1) - for (const instance of r.cloudflareBlackList) { - const a = invidiousNormalRedirectsChecks.indexOf(instance); - if (a > -1) invidiousNormalRedirectsChecks.splice(a, 1); + const c = pipedMaterialNormalRedirectsChecks.indexOf(instance) + if (c > -1) pipedMaterialNormalRedirectsChecks.splice(c, 1) - const b = pipedNormalRedirectsChecks.indexOf(instance); - if (b > -1) pipedNormalRedirectsChecks.splice(b, 1); + const d = cloudtubeNormalRedirectsChecks.indexOf(instance) + if (d > -1) cloudtubeNormalRedirectsChecks.indexOf(instance) + } - const c = pipedMaterialNormalRedirectsChecks.indexOf(instance); - if (c > -1) pipedMaterialNormalRedirectsChecks.splice(c, 1); - } + browser.storage.local.set( + { + disableYoutube: false, + enableYoutubeCustomSettings: false, + onlyEmbeddedVideo: "both", + youtubeRedirects: redirects, + youtubeFrontend: "invidious", - browser.storage.local.set({ - disableYoutube: false, - enableYoutubeCustomSettings: false, - onlyEmbeddedVideo: 'both', - youtubeRedirects: redirects, - youtubeFrontend: 'invidious', + invidiousNormalRedirectsChecks: invidiousNormalRedirectsChecks, + invidiousNormalCustomRedirects: [], - invidiousNormalRedirectsChecks: invidiousNormalRedirectsChecks, - invidiousNormalCustomRedirects: [], + invidiousTorRedirectsChecks: [...redirects.invidious.tor], + invidiousTorCustomRedirects: [], - invidiousTorRedirectsChecks: [...redirects.invidious.tor], - invidiousTorCustomRedirects: [], + invidiousI2pRedirectsChecks: [...redirects.invidious.i2p], + invidiousI2pCustomRedirects: [], - invidiousI2pRedirectsChecks: [...redirects.invidious.i2p], - invidiousI2pCustomRedirects: [], + invidiousLokiRedirectsChecks: [...redirects.invidious.loki], + invidiousLokiCustomRedirects: [], - invidiousLokiRedirectsChecks: [...redirects.invidious.loki], - invidiousLokiCustomRedirects: [], + pipedNormalRedirectsChecks: pipedNormalRedirectsChecks, + pipedNormalCustomRedirects: [], - pipedNormalRedirectsChecks: pipedNormalRedirectsChecks, - pipedNormalCustomRedirects: [], + pipedTorRedirectsChecks: [...redirects.piped.tor], + pipedTorCustomRedirects: [], - pipedTorRedirectsChecks: [...redirects.piped.tor], - pipedTorCustomRedirects: [], + pipedI2pRedirectsChecks: [...redirects.piped.i2p], + pipedI2pCustomRedirects: [], - pipedI2pRedirectsChecks: [...redirects.piped.i2p], - pipedI2pCustomRedirects: [], + pipedLokiRedirectsChecks: [...redirects.piped.loki], + pipedLokiCustomRedirects: [], - pipedLokiRedirectsChecks: [...redirects.piped.loki], - pipedLokiCustomRedirects: [], + pipedMaterialNormalRedirectsChecks: pipedMaterialNormalRedirectsChecks, + pipedMaterialNormalCustomRedirects: [], - pipedMaterialNormalRedirectsChecks: pipedMaterialNormalRedirectsChecks, - pipedMaterialNormalCustomRedirects: [], + pipedMaterialTorRedirectsChecks: [...redirects.pipedMaterial.tor], + pipedMaterialTorCustomRedirects: [], - pipedMaterialTorRedirectsChecks: [...redirects.pipedMaterial.tor], - pipedMaterialTorCustomRedirects: [], + pipedMaterialI2pRedirectsChecks: [...redirects.pipedMaterial.i2p], + pipedMaterialI2pCustomRedirects: [], - pipedMaterialI2pRedirectsChecks: [...redirects.pipedMaterial.i2p], - pipedMaterialI2pCustomRedirects: [], + pipedMaterialLokiRedirectsChecks: [...redirects.pipedMaterial.loki], + pipedMaterialLokiCustomRedirects: [], - pipedMaterialLokiRedirectsChecks: [...redirects.pipedMaterial.loki], - pipedMaterialLokiCustomRedirects: [], + cloudtubeNormalRedirectsChecks: cloudtubeNormalRedirectsChecks, + cloudtubeNormalCustomRedirects: [], - youtubeEmbedFrontend: 'invidious' - }, () => resolve()) - }) - }) - }) + cloudtubeTorRedirectsChecks: [...redirects.cloudtube.tor], + cloudtubeTorCustomRedirects: [], + + cloudtubeI2pRedirectsChecks: [...redirects.cloudtube.i2p], + cloudtubeI2pCustomRedirects: [], + + cloudtubeLokiRedirectsChecks: [...redirects.cloudtube.loki], + cloudtubeLokiCustomRedirects: [], + + youtubeEmbedFrontend: "invidious", + }, + () => resolve() + ) + }) + }) + }) } function copyPasteInvidiousCookies(test, from) { - return new Promise(async resolve => { - await init(); - if (disableYoutube || youtubeFrontend != 'invidious') { resolve(); return; } - const protocolHost = utils.protocolHost(from); - if (![ - ...invidiousNormalRedirectsChecks, - ...invidiousTorRedirectsChecks, - ...invidiousNormalCustomRedirects, - ...invidiousTorCustomRedirects, - ...invidiousI2pCustomRedirects, - ...invidiousLokiCustomRedirects - ].includes(protocolHost)) { resolve(); return; } - if (!test) { - let checkedInstances = []; - - if (protocol == 'loki') checkedInstances = [...invidiousLokiCustomRedirects]; - else if (protocol == 'i2p') checkedInstances = [...invidiousI2pCustomRedirects]; - else if (protocol == 'tor') checkedInstances = [...invidiousTorRedirectsChecks, ...invidiousTorCustomRedirects]; - if ((checkedInstances.length === 0 && protocolFallback) || protocol == 'normal') { - checkedInstances = [...invidiousNormalRedirectsChecks, ...invidiousNormalCustomRedirects]; - } - const i = checkedInstances.indexOf(protocolHost); - if (i !== -1) checkedInstances.splice(i, 1); - await utils.copyCookie('invidious', from, checkedInstances, 'PREFS'); - } - resolve(true); - }) + return new Promise(async resolve => { + await init() + if (disableYoutube || youtubeFrontend != "invidious") { + resolve() + return + } + const protocolHost = utils.protocolHost(from) + if ( + ![ + ...invidiousNormalRedirectsChecks, + ...invidiousTorRedirectsChecks, + ...invidiousNormalCustomRedirects, + ...invidiousTorCustomRedirects, + ...invidiousI2pCustomRedirects, + ...invidiousLokiCustomRedirects, + ].includes(protocolHost) + ) { + resolve() + return + } + if (!test) { + let checkedInstances = [] + + if (protocol == "loki") checkedInstances = [...invidiousLokiCustomRedirects] + else if (protocol == "i2p") checkedInstances = [...invidiousI2pCustomRedirects] + else if (protocol == "tor") checkedInstances = [...invidiousTorRedirectsChecks, ...invidiousTorCustomRedirects] + if ((checkedInstances.length === 0 && protocolFallback) || protocol == "normal") { + checkedInstances = [...invidiousNormalRedirectsChecks, ...invidiousNormalCustomRedirects] + } + const i = checkedInstances.indexOf(protocolHost) + if (i !== -1) checkedInstances.splice(i, 1) + await utils.copyCookie("invidious", from, checkedInstances, "PREFS") + } + resolve(true) + }) } function pasteInvidiousCookies() { - return new Promise(async resolve => { - await init(); - if (disableYoutube || youtubeFrontend != 'invidious') { resolve(); return; } - let checkedInstances = []; - if (protocol == 'loki') checkedInstances = [...invidiousLokiCustomRedirects]; - else if (protocol == 'i2p') checkedInstances = [...invidiousI2pCustomRedirects]; - else if (protocol == 'tor') checkedInstances = [...invidiousTorRedirectsChecks, ...invidiousTorCustomRedirects] - if ((checkedInstances.length === 0 && protocolFallback) || protocol == 'normal') { - checkedInstances = [...invidiousNormalRedirectsChecks, ...invidiousNormalCustomRedirects] - } - utils.getCookiesFromStorage('invidious', checkedInstances, 'PREFS'); - resolve(); - }) + return new Promise(async resolve => { + await init() + if (disableYoutube || youtubeFrontend != "invidious") { + resolve() + return + } + let checkedInstances = [] + if (protocol == "loki") checkedInstances = [...invidiousLokiCustomRedirects] + else if (protocol == "i2p") checkedInstances = [...invidiousI2pCustomRedirects] + else if (protocol == "tor") checkedInstances = [...invidiousTorRedirectsChecks, ...invidiousTorCustomRedirects] + if ((checkedInstances.length === 0 && protocolFallback) || protocol == "normal") { + checkedInstances = [...invidiousNormalRedirectsChecks, ...invidiousNormalCustomRedirects] + } + utils.getCookiesFromStorage("invidious", checkedInstances, "PREFS") + resolve() + }) } function copyPastePipedLocalStorage(test, url, tabId) { - return new Promise(async resolve => { - await init(); - if (disableYoutube || youtubeFrontend != 'piped') { resolve(); return; } - const protocolHost = utils.protocolHost(url); - if (![ - ...pipedNormalCustomRedirects, - ...pipedNormalRedirectsChecks, - ...pipedTorRedirectsChecks, - ...pipedTorCustomRedirects, - ...pipedI2pCustomRedirects, - ...pipedLokiCustomRedirects - ].includes(protocolHost)) { resolve(); return; } - - if (!test) { - browser.tabs.executeScript(tabId, { file: "/assets/javascripts/youtube/get_piped_preferences.js", runAt: "document_start" }); - - let checkedInstances = []; - if (protocol == 'loki') checkedInstances = [...pipedLokiCustomRedirects]; - else if (protocol == 'i2p') checkedInstances = [...pipedI2pCustomRedirects]; - else if (protocol == 'tor') checkedInstances = [...pipedTorRedirectsChecks, ...pipedTorCustomRedirects] - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - checkedInstances = [...pipedNormalCustomRedirects, ...pipedNormalRedirectsChecks] - } - const i = checkedInstances.indexOf(protocolHost); - if (i !== -1) checkedInstances.splice(i, 1); - for (const to of checkedInstances) { - browser.tabs.create({ url: to }, - tab => browser.tabs.executeScript(tab.id, { file: "/assets/javascripts/youtube/set_piped_preferences.js", runAt: "document_start" })) - } - } - resolve(true); - }) + return new Promise(async resolve => { + await init() + if (disableYoutube || youtubeFrontend != "piped") { + resolve() + return + } + const protocolHost = utils.protocolHost(url) + if ( + ![...pipedNormalCustomRedirects, ...pipedNormalRedirectsChecks, ...pipedTorRedirectsChecks, ...pipedTorCustomRedirects, ...pipedI2pCustomRedirects, ...pipedLokiCustomRedirects].includes( + protocolHost + ) + ) { + resolve() + return + } + + if (!test) { + browser.tabs.executeScript(tabId, { + file: "/assets/javascripts/youtube/get_piped_preferences.js", + runAt: "document_start", + }) + + let checkedInstances = [] + if (protocol == "loki") checkedInstances = [...pipedLokiCustomRedirects] + else if (protocol == "i2p") checkedInstances = [...pipedI2pCustomRedirects] + else if (protocol == "tor") checkedInstances = [...pipedTorRedirectsChecks, ...pipedTorCustomRedirects] + if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { + checkedInstances = [...pipedNormalCustomRedirects, ...pipedNormalRedirectsChecks] + } + const i = checkedInstances.indexOf(protocolHost) + if (i !== -1) checkedInstances.splice(i, 1) + for (const to of checkedInstances) { + browser.tabs.create({ url: to }, tab => + browser.tabs.executeScript(tab.id, { + file: "/assets/javascripts/youtube/set_piped_preferences.js", + runAt: "document_start", + }) + ) + } + } + resolve(true) + }) } function pastePipedLocalStorage() { - return new Promise(async resolve => { - await init(); - if (disableYoutube || youtubeFrontend != 'piped') { resolve(); return; } - let checkedInstances = []; - if (protocol == 'loki') checkedInstances = [...pipedLokiCustomRedirects]; - else if (protocol == 'i2p') checkedInstances = [...pipedI2pCustomRedirects]; - else if (protocol == 'tor') checkedInstances = [...pipedTorRedirectsChecks, ...pipedTorCustomRedirects] - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - checkedInstances = [...pipedNormalCustomRedirects, ...pipedNormalRedirectsChecks] - } - for (const to of checkedInstances) { - browser.tabs.create({ url: to }, - tab => browser.tabs.executeScript(tab.id, { file: "/assets/javascripts/youtube/set_piped_preferences.js", runAt: "document_start" })) - } - resolve(); - }) + return new Promise(async resolve => { + await init() + if (disableYoutube || youtubeFrontend != "piped") { + resolve() + return + } + let checkedInstances = [] + if (protocol == "loki") checkedInstances = [...pipedLokiCustomRedirects] + else if (protocol == "i2p") checkedInstances = [...pipedI2pCustomRedirects] + else if (protocol == "tor") checkedInstances = [...pipedTorRedirectsChecks, ...pipedTorCustomRedirects] + if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { + checkedInstances = [...pipedNormalCustomRedirects, ...pipedNormalRedirectsChecks] + } + for (const to of checkedInstances) { + browser.tabs.create({ url: to }, tab => + browser.tabs.executeScript(tab.id, { + file: "/assets/javascripts/youtube/set_piped_preferences.js", + runAt: "document_start", + }) + ) + } + resolve() + }) } -function copyPastePipedMaterialLocalStorage(test, url, tabId,) { - return new Promise(async resolve => { - await init(); - if (disableYoutube || youtubeFrontend != 'pipedMaterial') { resolve(); return; } - const protocolHost = utils.protocolHost(url); - if (![ - ...pipedMaterialNormalRedirectsChecks, - ...pipedMaterialNormalCustomRedirects, - //...pipedMaterialTorRedirectsChecks, - ...pipedMaterialTorCustomRedirects, - ...pipedMaterialI2pCustomRedirects, - ...pipedMaterialLokiCustomRedirects - ].includes(protocolHost)) { resolve(); return; } - - if (!test) { - browser.tabs.executeScript(tabId, { file: "/assets/javascripts/youtube/get_pipedMaterial_preferences.js", runAt: "document_start" }); - - let checkedInstances = []; - if (protocol == 'loki') checkedInstances = [...pipedMaterialLokiCustomRedirects]; - else if (protocol == 'i2p') checkedInstances = [...pipedMaterialI2pCustomRedirects]; - else if (protocol == 'tor') checkedInstances = [...pipedMaterialTorCustomRedirects]; //...pipedMaterialTorRedirectsChecks, - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - checkedInstances = [...pipedMaterialNormalRedirectsChecks, ...pipedMaterialNormalCustomRedirects] - } - const i = checkedInstances.indexOf(protocolHost); - if (i !== -1) checkedInstances.splice(i, 1); - for (const to of checkedInstances) - browser.tabs.create( - { url: to }, - tab => browser.tabs.executeScript(tab.id, { file: "/assets/javascripts/youtube/set_pipedMaterial_preferences.js", runAt: "document_start" }) - ); - } - resolve(true); - }) +function copyPastePipedMaterialLocalStorage(test, url, tabId) { + return new Promise(async resolve => { + await init() + if (disableYoutube || youtubeFrontend != "pipedMaterial") { + resolve() + return + } + const protocolHost = utils.protocolHost(url) + if ( + ![ + ...pipedMaterialNormalRedirectsChecks, + ...pipedMaterialNormalCustomRedirects, + //...pipedMaterialTorRedirectsChecks, + ...pipedMaterialTorCustomRedirects, + ...pipedMaterialI2pCustomRedirects, + ...pipedMaterialLokiCustomRedirects, + ].includes(protocolHost) + ) { + resolve() + return + } + + if (!test) { + browser.tabs.executeScript(tabId, { + file: "/assets/javascripts/youtube/get_pipedMaterial_preferences.js", + runAt: "document_start", + }) + + let checkedInstances = [] + if (protocol == "loki") checkedInstances = [...pipedMaterialLokiCustomRedirects] + else if (protocol == "i2p") checkedInstances = [...pipedMaterialI2pCustomRedirects] + else if (protocol == "tor") checkedInstances = [...pipedMaterialTorCustomRedirects] //...pipedMaterialTorRedirectsChecks, + if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { + checkedInstances = [...pipedMaterialNormalRedirectsChecks, ...pipedMaterialNormalCustomRedirects] + } + const i = checkedInstances.indexOf(protocolHost) + if (i !== -1) checkedInstances.splice(i, 1) + for (const to of checkedInstances) + browser.tabs.create({ url: to }, tab => + browser.tabs.executeScript(tab.id, { + file: "/assets/javascripts/youtube/set_pipedMaterial_preferences.js", + runAt: "document_start", + }) + ) + } + resolve(true) + }) } function pastePipedMaterialLocalStorage() { - return new Promise(async resolve => { - await init(); - if (disableYoutube || youtubeFrontend != 'pipedMaterial') { resolve(); return; } - let checkedInstances = []; - if (protocol == 'loki') checkedInstances = [...pipedMaterialLokiCustomRedirects]; - else if (protocol == 'i2p') checkedInstances = [...pipedMaterialI2pCustomRedirects]; - else if (protocol == 'tor') checkedInstances = [...pipedMaterialTorCustomRedirects]; //...pipedMaterialTorRedirectsChecks, - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - checkedInstances = [...pipedMaterialNormalRedirectsChecks, ...pipedMaterialNormalCustomRedirects] - } - for (const to of checkedInstances) { - browser.tabs.create({ url: to }, - tab => browser.tabs.executeScript(tab.id, { file: "/assets/javascripts/youtube/set_pipedMaterial_preferences.js", runAt: "document_start" })) - } - resolve(); - }) + return new Promise(async resolve => { + await init() + if (disableYoutube || youtubeFrontend != "pipedMaterial") { + resolve() + return + } + let checkedInstances = [] + if (protocol == "loki") checkedInstances = [...pipedMaterialLokiCustomRedirects] + else if (protocol == "i2p") checkedInstances = [...pipedMaterialI2pCustomRedirects] + else if (protocol == "tor") checkedInstances = [...pipedMaterialTorCustomRedirects] //...pipedMaterialTorRedirectsChecks, + if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { + checkedInstances = [...pipedMaterialNormalRedirectsChecks, ...pipedMaterialNormalCustomRedirects] + } + for (const to of checkedInstances) { + browser.tabs.create({ url: to }, tab => + browser.tabs.executeScript(tab.id, { + file: "/assets/javascripts/youtube/set_pipedMaterial_preferences.js", + runAt: "document_start", + }) + ) + } + resolve() + }) } function removeXFrameOptions(e) { - let isChanged = false; - - if (e.type == 'main_frame') { - for (const i in e.responseHeaders) { - if (e.responseHeaders[i].name == 'content-security-policy') { - let instancesList = []; - if (protocol == 'loki') { - if (youtubeFrontend == 'invidious') instancesList = [...invidiousLokiCustomRedirects]; //...invidiousLokiRedirectsChecks, - if (youtubeFrontend == 'piped') instancesList = [...pipedLokiCustomRedirects]; //...pipedLokiRedirectsChecks, - if (youtubeFrontend == 'pipedMaterial') instancesList = [...pipedMaterialLokiCustomRedirects]; //...pipedMaterialLokiRedirectsChecks, - } - else if (protocol == 'i2p') { - if (youtubeFrontend == 'invidious') instancesList = [...invidiousI2pCustomRedirects]; //...invidiousI2pRedirectsChecks, - if (youtubeFrontend == 'piped') instancesList = [...pipedI2pCustomRedirects]; //...pipedI2pRedirectsChecks, - if (youtubeFrontend == 'pipedMaterial') instancesList = [...pipedMaterialI2pCustomRedirects]; //...pipedMaterialI2pRedirectsChecks, - } - else if (protocol == 'tor') { - if (youtubeFrontend == 'invidious') instancesList = [...invidiousTorRedirectsChecks, ...invidiousTorCustomRedirects]; - if (youtubeFrontend == 'piped') instancesList = [...pipedTorRedirectsChecks, ...pipedTorCustomRedirects]; - if (youtubeFrontend == 'pipedMaterial') instancesList = [...pipedMaterialTorCustomRedirects]; //...pipedMaterialTorRedirectsChecks, - } - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - if (youtubeFrontend == 'invidious') instancesList = [...invidiousNormalRedirectsChecks, ...invidiousNormalCustomRedirects]; - if (youtubeFrontend == 'piped') instancesList = [...pipedNormalRedirectsChecks, ...pipedNormalCustomRedirects]; - if (youtubeFrontend == 'pipedMaterial') instancesList = [...pipedMaterialNormalRedirectsChecks, ...pipedMaterialNormalCustomRedirects]; - } - let securityPolicyList = e.responseHeaders[i].value.split(';'); - for (const i in securityPolicyList) securityPolicyList[i] = securityPolicyList[i].trim(); - - let newSecurity = ''; - for (const item of securityPolicyList) { - if (item.trim() == '') continue - let regex = item.match(/([a-z-]{0,}) (.*)/) - if (regex == null) continue - let [, key, vals] = regex; - if (key == 'frame-src') vals = vals + ' ' + instancesList.join(' '); - newSecurity += key + ' ' + vals + '; '; - } - - e.responseHeaders[i].value = newSecurity; - isChanged = true; - } - } - } - else if (e.type == 'sub_frame') { - const url = new URL(e.url); - const protocolHost = utils.protocolHost(url); - if (all().includes(protocolHost)) { - for (const i in e.responseHeaders) { - if (e.responseHeaders[i].name == 'x-frame-options') { - e.responseHeaders.splice(i, 1); - isChanged = true; - } - else if (e.responseHeaders[i].name == 'content-security-policy') { - e.responseHeaders.splice(i, 1); - isChanged = true; - } - } - } - } - if (isChanged) return { responseHeaders: e.responseHeaders }; + let isChanged = false + + if (e.type == "main_frame") { + for (const i in e.responseHeaders) { + if (e.responseHeaders[i].name == "content-security-policy") { + let instancesList = [] + switch (protocol) { + case "loki": + switch (youtubeFrontend) { + case "invidious": + instancesList = [...invidiousLokiRedirectsChecks, ...invidiousLokiCustomRedirects] + break + case "piped": + instancesList = [...pipedLokiRedirectsChecks, ...pipedLokiCustomRedirects] + break + case "pipedMaterial": + instancesList = [...pipedMaterialLokiRedirectsChecks, ...pipedMaterialLokiCustomRedirects] + break + case "cloudtube": + instancesList = [...cloudtubeLokiRedirectsChecks, ...cloudtubeLokiCustomRedirects] + } + break + case "i2p": + switch (youtubeFrontend) { + case "invidious": + instancesList = [...invidiousI2pRedirectsChecks, ...invidiousI2pCustomRedirects] + break + case "piped": + instancesList = [...pipedI2pRedirectsChecks, ...pipedI2pCustomRedirects] + break + case "pipedMaterial": + instancesList = [...pipedMaterialI2pRedirectsChecks, ...pipedMaterialI2pCustomRedirects] + break + case "cloudtube": + instancesList = [...cloudtubeI2pRedirectsChecks, ...cloudtubeI2pCustomRedirects] + } + break + case "tor": + switch (youtubeFrontend) { + case "invidious": + instancesList = [...invidiousTorRedirectsChecks, ...invidiousTorCustomRedirects] + break + case "piped": + instancesList = [...pipedTorRedirectsChecks, ...pipedTorCustomRedirects] + break + case "pipedMaterial": + instancesList = [...pipedMaterialTorRedirectsChecks, ...pipedMaterialTorCustomRedirects] + break + case "cloudtube": + instancesList = [...cloudtubeTorRedirectsChecks, ...cloudtubeTorCustomRedirects] + } + } + if ((instancesList.length === 0 && protocolFallback) || protocol == "normal") { + switch (youtubeFrontend) { + case "invidious": + instancesList = [...invidiousNormalRedirectsChecks, ...invidiousNormalCustomRedirects] + break + case "piped": + instancesList = [...pipedNormalRedirectsChecks, ...pipedNormalCustomRedirects] + break + case "pipedMaterial": + instancesList = [...pipedMaterialNormalRedirectsChecks, ...pipedMaterialNormalCustomRedirects] + break + case "cloudtube": + instancesList = [...cloudtubeNormalRedirectsChecks, ...cloudtubeNormalCustomRedirects] + } + } + let securityPolicyList = e.responseHeaders[i].value.split(";") + for (const i in securityPolicyList) securityPolicyList[i] = securityPolicyList[i].trim() + + let newSecurity = "" + for (const item of securityPolicyList) { + if (item.trim() == "") continue + let regex = item.match(/([a-z-]{0,}) (.*)/) + if (regex == null) continue + let [, key, vals] = regex + if (key == "frame-src") vals = vals + " " + instancesList.join(" ") + newSecurity += key + " " + vals + "; " + } + + e.responseHeaders[i].value = newSecurity + isChanged = true + } + } + } else if (e.type == "sub_frame") { + const url = new URL(e.url) + const protocolHost = utils.protocolHost(url) + if (all().includes(protocolHost)) { + for (const i in e.responseHeaders) { + if (e.responseHeaders[i].name == "x-frame-options") { + e.responseHeaders.splice(i, 1) + isChanged = true + } else if (e.responseHeaders[i].name == "content-security-policy") { + e.responseHeaders.splice(i, 1) + isChanged = true + } + } + } + } + if (isChanged) return { responseHeaders: e.responseHeaders } } export default { - setRedirects, - copyPastePipedLocalStorage, - pastePipedLocalStorage, - copyPastePipedMaterialLocalStorage, - pastePipedMaterialLocalStorage, - copyPasteInvidiousCookies, - pasteInvidiousCookies, - redirect, - reverse, - switchInstance, - initDefaults, - removeXFrameOptions, -}; + setRedirects, + copyPastePipedLocalStorage, + pastePipedLocalStorage, + copyPastePipedMaterialLocalStorage, + pastePipedMaterialLocalStorage, + copyPasteInvidiousCookies, + pasteInvidiousCookies, + redirect, + reverse, + switchInstance, + initDefaults, + removeXFrameOptions, +} diff --git a/src/assets/javascripts/youtubeMusic.js b/src/assets/javascripts/youtubeMusic.js index 46caf60e..3ff9a174 100644 --- a/src/assets/javascripts/youtubeMusic.js +++ b/src/assets/javascripts/youtubeMusic.js @@ -1,61 +1,192 @@ -"use strict"; - -import utils from './utils.js' - -window.browser = window.browser || window.chrome; - -const targets = [ - /^https?:\/{2}music\.youtube\.com(\/.*|$)/, -]; -let redirects = { - "beatbump": { - "normal": [ - "https://beatbump.ml" - ], - "tor": [], - "i2p": [], - "loki": [] - }, -}; - -let - disableYoutubeMusic, - protocol, - protocolFallback, - beatbumpNormalRedirectsChecks, - beatbumpNormalCustomRedirects, - beatbumpTorCustomRedirects, - beatbumpI2pCustomRedirects, - beatbumpLokiCustomRedirects; +"use strict" + +import utils from "./utils.js" + +window.browser = window.browser || window.chrome + +const targets = [/^https?:\/{2}music\.youtube\.com(\/.*|$)/] + +const frontends = new Array("beatbump", "hyperpipe") +const protocols = new Array("normal", "tor", "i2p", "loki") + +let redirects = {} + +for (let i = 0; i < frontends.length; i++) { + redirects[frontends[i]] = {} + for (let x = 0; x < protocols.length; x++) { + redirects[frontends[i]][protocols[x]] = [] + } +} + +function setRedirects(val) { + browser.storage.local.get("cloudflareBlackList", r => { + redirects = val + beatbumpNormalRedirectsChecks = [...redirects.beatbump.normal] + hyperpipeNormalRedirectsChecks = [...redirects.hyperpipe.normal] + for (const instance of r.cloudflareBlackList) { + const a = beatbumpNormalRedirectsChecks.indexOf(instance) + if (a > -1) beatbumpNormalRedirectsChecks.splice(a, 1) + + const b = hyperpipeNormalRedirectsChecks.indexOf(instance) + if (b > -1) hyperpipeNormalRedirectsChecks.splice(b, 1) + } + browser.storage.local.set({ + youtubeMusicRedirects: redirects, + beatbumpNormalRedirectsChecks, + hyperpipeNormalRedirectsChecks, + }) + }) +} + +let disableYoutubeMusic, + youtubeMusicFrontend, + youtubeMusicRedirects, + protocol, + protocolFallback, + beatbumpNormalRedirectsChecks, + beatbumpNormalCustomRedirects, + beatbumpTorRedirectsChecks, + beatbumpTorCustomRedirects, + beatbumpI2pRedirectsChecks, + beatbumpI2pCustomRedirects, + beatbumpLokiRedirectsChecks, + beatbumpLokiCustomRedirects, + hyperpipeNormalRedirectsChecks, + hyperpipeNormalCustomRedirects, + hyperpipeTorRedirectsChecks, + hyperpipeTorCustomRedirects, + hyperpipeI2pRedirectsChecks, + hyperpipeI2pCustomRedirects, + hyperpipeLokiRedirectsChecks, + hyperpipeLokiCustomRedirects function init() { - browser.storage.local.get( - [ - "disableYoutubeMusic", - "protocol", - "protocolFallback", - "beatbumpNormalRedirectsChecks", - "beatbumpNormalCustomRedirects", - "beatbumpTorCustomRedirects", - "beatbumpI2pCustomRedirects", - "beatbumpLokiCustomRedirects" - ], - r => { - disableYoutubeMusic = r.disableYoutubeMusic; - protocol = r.protocol; - protocolFallback = r.protocolFallback; - beatbumpNormalRedirectsChecks = r.beatbumpNormalRedirectsChecks; - beatbumpNormalCustomRedirects = r.beatbumpNormalCustomRedirects; - beatbumpTorCustomRedirects = r.beatbumpTorCustomRedirects; - beatbumpI2pCustomRedirects = r.beatbumpI2pCustomRedirects; - beatbumpLokiCustomRedirects = r.beatbumpLokiCustomRedirects; - } - ) + return new Promise(async resolve => { + browser.storage.local.get( + [ + "disableYoutubeMusic", + "youtubeMusicFrontend", + "youtubeMusicRedirects", + "protocol", + "protocolFallback", + "beatbumpNormalRedirectsChecks", + "beatbumpNormalCustomRedirects", + "beatbumpTorRedirectsChecks", + "beatbumpTorCustomRedirects", + "beatbumpI2pRedirectsChecks", + "beatbumpI2pCustomRedirects", + "beatbumpLokiRedirectsChecks", + "beatbumpLokiCustomRedirects", + "hyperpipeNormalRedirectsChecks", + "hyperpipeNormalCustomRedirects", + "hyperpipeTorRedirectsChecks", + "hyperpipeTorCustomRedirects", + "hyperpipeI2pRedirectsChecks", + "hyperpipeI2pCustomRedirects", + "hyperpipeLokiRedirectsChecks", + "hyperpipeLokiCustomRedirects", + ], + r => { + disableYoutubeMusic = r.disableYoutubeMusic + youtubeMusicFrontend = r.youtubeMusicFrontend + youtubeMusicRedirects = r.youtubeMusicRedirects + protocol = r.protocol + protocolFallback = r.protocolFallback + beatbumpNormalRedirectsChecks = r.beatbumpNormalRedirectsChecks + beatbumpNormalCustomRedirects = r.beatbumpNormalCustomRedirects + beatbumpTorRedirectsChecks = r.beatbumpTorRedirectsChecks + beatbumpTorCustomRedirects = r.beatbumpTorCustomRedirects + beatbumpI2pRedirectsChecks = r.beatbumpI2pRedirectsChecks + beatbumpI2pCustomRedirects = r.beatbumpI2pCustomRedirects + beatbumpLokiRedirectsChecks = r.beatbumpLokiRedirectsChecks + beatbumpLokiCustomRedirects = r.beatbumpLokiCustomRedirects + hyperpipeNormalRedirectsChecks = r.hyperpipeNormalRedirectsChecks + hyperpipeNormalCustomRedirects = r.hyperpipeNormalCustomRedirects + hyperpipeTorRedirectsChecks = r.hyperpipeTorRedirectsChecks + hyperpipeTorCustomRedirects = r.hyperpipeTorCustomRedirects + hyperpipeI2pRedirectsChecks = r.hyperpipeI2pRedirectsChecks + hyperpipeI2pCustomRedirects = r.hyperpipeI2pCustomRedirects + hyperpipeLokiRedirectsChecks = r.hyperpipeLokiRedirectsChecks + hyperpipeLokiCustomRedirects = r.hyperpipeLokiCustomRedirects + resolve() + } + ) + }) } -init(); +init() browser.storage.onChanged.addListener(init) +function all() { + return [ + ...beatbumpNormalRedirectsChecks, + ...beatbumpNormalCustomRedirects, + ...beatbumpTorRedirectsChecks, + ...beatbumpTorCustomRedirects, + ...beatbumpI2pRedirectsChecks, + ...beatbumpI2pCustomRedirects, + ...beatbumpLokiRedirectsChecks, + ...beatbumpLokiCustomRedirects, + ...hyperpipeNormalRedirectsChecks, + ...hyperpipeNormalCustomRedirects, + ...hyperpipeTorRedirectsChecks, + ...hyperpipeTorCustomRedirects, + ...hyperpipeI2pRedirectsChecks, + ...hyperpipeI2pCustomRedirects, + ...hyperpipeLokiRedirectsChecks, + ...hyperpipeLokiCustomRedirects, + ] +} + +function getInstanceList() { + let tmpList = [] + switch (youtubeMusicFrontend) { + case "beatbump": + switch (protocol) { + case "loki": + tmpList = [...beatbumpLokiRedirectsChecks, ...beatbumpLokiCustomRedirects] + break + case "i2p": + tmpList = [...beatbumpI2pRedirectsChecks, ...beatbumpI2pCustomRedirects] + break + case "tor": + tmpList = [...beatbumpTorRedirectsChecks, ...beatbumpTorCustomRedirects] + } + if ((tmpList.length === 0 && protocolFallback) || protocol == "normal") { + tmpList = [...beatbumpNormalRedirectsChecks, ...beatbumpNormalCustomRedirects] + } + break + case "hyperpipe": + switch (protocol) { + case "loki": + tmpList = [...hyperpipeLokiRedirectsChecks, ...hyperpipeLokiCustomRedirects] + break + case "i2p": + tmpList = [...hyperpipeI2pRedirectsChecks, ...hyperpipeI2pCustomRedirects] + break + case "tor": + tmpList = [...hyperpipeTorRedirectsChecks, ...hyperpipeTorCustomRedirects] + } + if ((tmpList.length === 0 && protocolFallback) || protocol == "normal") { + tmpList = [...hyperpipeNormalRedirectsChecks, ...hyperpipeNormalCustomRedirects] + } + } + return tmpList +} + +function getUrl(randomInstance, url) { + switch (youtubeMusicFrontend) { + case "beatbump": + return `${randomInstance}${url.pathname}${url.search}` + .replace("/watch?v=", "/listen?id=") + .replace("/channel/", "/artist/") + .replace("/playlist?list=", "/playlist/VL") + .replace(/\/search\?q=.*/, searchQuery => searchQuery.replace("?q=", "/") + "?filter=EgWKAQIIAWoKEAMQBBAKEAkQBQ%3D%3D") + case "hyperpipe": + return `${randomInstance}${url.pathname}${url.search}`.replace(/\/search\?q=.*/, searchQuery => searchQuery.replace("?q=", "/")) + } +} + /* Video https://music.youtube.com/watch?v=_PkGiKBW-DA&list=RDAMVM_PkGiKBW-DA @@ -88,48 +219,105 @@ https://music.youtube.com/search?q=test https://beatbump.ml/search/test?filter=EgWKAQIIAWoKEAMQBBAKEAkQBQ%3D%3D */ -function redirect(url, disableOverride) { - if (disableYoutubeMusic && !disableOverride) return; - if (!targets.some(rx => rx.test(url.href))) return; - - let instancesList = []; - if (protocol == 'loki') instancesList = [...beatbumpLokiCustomRedirects]; - else if (protocol == 'i2p') instancesList = [...beatbumpI2pCustomRedirects]; - else if (protocol == 'tor') instancesList = [...beatbumpTorCustomRedirects]; - if ((instancesList.length === 0 && protocolFallback) || protocol == 'normal') { - instancesList = [...beatbumpNormalRedirectsChecks, ...beatbumpNormalCustomRedirects]; - } - if (instancesList.length === 0) return; - const randomInstance = utils.getRandomInstance(instancesList); - return `${randomInstance}${url.pathname}${url.search}` - .replace("/watch?v=", "/listen?id=") - .replace("/channel/", "/artist/") - .replace("/playlist?list=", "/playlist/VL") - .replace(/\/search\?q=.*/, searchQuery => searchQuery.replace("?q=", "/") + "?filter=EgWKAQIIAWoKEAMQBBAKEAkQBQ%3D%3D"); +function redirect(url, type, initiator, disableOverride) { + if (disableYoutubeMusic && !disableOverride) return + if (!targets.some(rx => rx.test(url.href))) return + + let instancesList = getInstanceList() + + if (instancesList.length === 0) return + const randomInstance = utils.getRandomInstance(instancesList) + return getUrl(randomInstance, url) +} + +function switchInstance(url, disableOverride) { + return new Promise(async resolve => { + await init() + if (disableYoutubeMusic && !disableOverride) { + resolve() + return + } + const protocolHost = utils.protocolHost(url) + if (!all().includes(protocolHost)) { + resolve() + return + } + + let instancesList = getInstanceList() + + const i = instancesList.indexOf(protocolHost) + if (i > -1) instancesList.splice(i, 1) + if (instancesList.length === 0) { + resolve() + return + } + + const randomInstance = utils.getRandomInstance(instancesList) + return getUrl(randomInstance, url) + }) } -async function initDefaults() { - return new Promise(resolve => - browser.storage.local.set({ - disableYoutubeMusic: true, - youtubeMusicRedirects: redirects, +function initDefaults() { + return new Promise(resolve => { + fetch("/instances/data.json") + .then(response => response.text()) + .then(async data => { + let dataJson = JSON.parse(data) + for (let i = 0; i < frontends.length; i++) { + redirects[frontends[i]] = dataJson[frontends[i]] + } + browser.storage.local.get("cloudflareBlackList", async r => { + beatbumpNormalRedirectsChecks = [...redirects.beatbump.normal] + hyperpipeNormalRedirectsChecks = [...redirects.hyperpipe.normal] + for (const instance of r.cloudflareBlackList) { + let i - beatbumpNormalRedirectsChecks: [...redirects.beatbump.normal], - beatbumpNormalCustomRedirects: [], + i = beatbumpNormalRedirectsChecks.indexOf(instance) + if (i > -1) beatbumpNormalRedirectsChecks.splice(i, 1) - beatbumpTorRedirectsChecks: [...redirects.beatbump.tor], - beatbumpTorCustomRedirects: [], + i = hyperpipeNormalRedirectsChecks.indexOf(instance) + if (i > -1) hyperpipeNormalRedirectsChecks.splice(i, 1) + } + browser.storage.local.set( + { + disableYoutubeMusic: false, + youtubeMusicFrontend: "hyperpipe", + youtubeMusicRedirects: redirects, - beatbumpI2pRedirectsChecks: [...redirects.beatbump.i2p], - beatbumpI2pCustomRedirects: [], + beatbumpNormalRedirectsChecks: beatbumpNormalRedirectsChecks, + beatbumpNormalCustomRedirects: [], - beatbumpLokiRedirectsChecks: [...redirects.beatbump.loki], - beatbumpLokiCustomRedirects: [] - }, () => resolve()) - ) + beatbumpTorRedirectsChecks: [...redirects.beatbump.tor], + beatbumpTorCustomRedirects: [], + + beatbumpI2pRedirectsChecks: [...redirects.beatbump.i2p], + beatbumpI2pCustomRedirects: [], + + beatbumpLokiRedirectsChecks: [...redirects.beatbump.loki], + beatbumpLokiCustomRedirects: [], + + hyperpipeNormalRedirectsChecks: hyperpipeNormalRedirectsChecks, + hyperpipeNormalCustomRedirects: [], + + hyperpipeTorRedirectsChecks: [...redirects.hyperpipe.tor], + hyperpipeTorCustomRedirects: [], + + hyperpipeI2pRedirectsChecks: [...redirects.hyperpipe.i2p], + hyperpipeI2pCustomRedirects: [], + + hyperpipeLokiRedirectsChecks: [...redirects.hyperpipe.loki], + hyperpipeLokiCustomRedirects: [], + }, + () => resolve() + ) + }) + }) + }) } export default { - redirect, - initDefaults, -}; + setRedirects, + switchInstance, + redirect, + initDefaults, +} |