diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index afed137..685c709 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -13,12 +13,12 @@ name: "CodeQL" on: push: - branches: [ master ] + branches: [master] pull_request: # The branches below must be a subset of the branches above - branches: [ master ] + branches: [master] schedule: - - cron: '43 18 * * 3' + - cron: "43 18 * * 3" jobs: analyze: @@ -32,39 +32,39 @@ jobs: strategy: fail-fast: false matrix: - language: [ 'javascript' ] + language: ["javascript"] # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] # Learn more about CodeQL language support at https://git.io/codeql-language-support steps: - - name: Checkout repository - uses: actions/checkout@v2 + - name: Checkout repository + uses: actions/checkout@v2 - # Initializes the CodeQL tools for scanning. - - name: Initialize CodeQL - uses: github/codeql-action/init@v1 - with: - languages: ${{ matrix.language }} - # If you wish to specify custom queries, you can do so here or in a config file. - # By default, queries listed here will override any specified in a config file. - # Prefix the list here with "+" to use these queries and those in the config file. - # queries: ./path/to/local/query, your-org/your-repo/queries@main + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v1 + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + # queries: ./path/to/local/query, your-org/your-repo/queries@main - # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). - # If this step fails, then you should remove it and run the build manually (see below) - - name: Autobuild - uses: github/codeql-action/autobuild@v1 + # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). + # If this step fails, then you should remove it and run the build manually (see below) + - name: Autobuild + uses: github/codeql-action/autobuild@v1 - # ℹī¸ Command-line programs to run using the OS shell. - # 📚 https://git.io/JvXDl + # ℹī¸ Command-line programs to run using the OS shell. + # 📚 https://git.io/JvXDl - # ✏ī¸ If the Autobuild fails above, remove it and uncomment the following three lines - # and modify them (or add more) to build your code if your project - # uses a compiled language + # ✏ī¸ If the Autobuild fails above, remove it and uncomment the following three lines + # and modify them (or add more) to build your code if your project + # uses a compiled language - #- run: | - # make bootstrap - # make release + #- run: | + # make bootstrap + # make release - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v1 + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v1 diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index c63281a..88edbe3 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -2,21 +2,21 @@ name: instances-updater on: schedule: - - cron: '10 22 */3 * *' - + - cron: "10 22 */3 * *" + workflow_dispatch: jobs: build: runs-on: ubuntu-latest - steps: + steps: - name: get repo content uses: actions/checkout@v2 - name: setup python uses: actions/setup-python@v2 with: - python-version: '3.8' # install the python version needed + python-version: "3.8" # install the python version needed - name: install python packages run: | @@ -24,7 +24,7 @@ jobs: pip install requests bs4 colorama - name: run script run: python src/instances/get_instances.py - + - name: commit files run: | git config --local user.email "action@github.com" diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 404ac8d..f31a693 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -9,6 +9,6 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-node@v2 with: - node-version: '16' + node-version: "16" - run: npm install - run: npm test diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..e10fcaa --- /dev/null +++ b/.prettierignore @@ -0,0 +1,11 @@ +web-ext-artifacts/ +.DS_Store +nod +node_modules +package-lock.json +src/instances/data.json +src/instances/blacklist.json +src/pages/options/*.html +src/pages/popup/*.html +src/_locales/ +.vscode diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..d0df3f3 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,23 @@ +{ + "semi": false, + "tabWidth": 2, + "useTabs": true, + "arrowParens": "avoid", + "printWidth": 200, + "overrides": [ + { + "files": ["*.js", "*.json"], + "options": { + "tabWidth": 2, + "singleQuote": false + } + }, + { + "files": ["*.html", "*.py"], + "options": { + "tabWidth": 4, + "singleQuote": true + } + } + ] +} diff --git a/Privacy-Policy.md b/Privacy-Policy.md index fe35754..5445fcc 100644 --- a/Privacy-Policy.md +++ b/Privacy-Policy.md @@ -1,11 +1,13 @@ ## Data collected -* LibRedirect does not collect any Personal Information of any kind. -* LibRedirect doesn't embed any kind of analytics in its code. -* All aspects of the extension work locally in your browser, with the exception of -OpenStreetMap (OSM) reverse geocoding, done via the [OSM Nomantim API](https://nominatim.org/release-docs/develop/api/Overview/), -used as part of OSM redirects, which can be disabled by toggling the OSM redirects. -* It also connects to [this url](https://raw.githubusercontent.com/libredirect/libredirect/master/src/instances/data.json) to update the Instances List. Though this only gets triggered when the user presses the `Update Instances` button. -* For bibliogram instances. To set a cookie you should send an http request to the server as the server stores settings values itself and gives you a token to access them. + +- LibRedirect does not collect any Personal Information of any kind. +- LibRedirect doesn't embed any kind of analytics in its code. +- All aspects of the extension work locally in your browser, with the exception of + OpenStreetMap (OSM) reverse geocoding, done via the [OSM Nomantim API](https://nominatim.org/release-docs/develop/api/Overview/), + used as part of OSM redirects, which can be disabled by toggling the OSM redirects. +- It also connects to [this url](https://raw.githubusercontent.com/libredirect/libredirect/master/src/instances/data.json) to update the Instances List. Though this only gets triggered when the user presses the `Update Instances` button. +- For bibliogram instances. To set a cookie you should send an http request to the server as the server stores settings values itself and gives you a token to access them. ## Future Changes + If we decide to change our privacy policy, we will post those changes on this page. diff --git a/README.md b/README.md index bf3be98..de3788b 100644 --- a/README.md +++ b/README.md @@ -8,10 +8,10 @@ A web extension that redirects YouTube, Twitter, Instagram... requests to altern [![Firefox Add-on](./img/badge-amo.png)](https://addons.mozilla.org/firefox/addon/libredirect/)  - +   - +   @@ -42,6 +42,7 @@ Send Files => [Send](https://gitlab.com/timvisee/send) [FAQ](https://libredirect.github.io/faq.html) ## Donate + [![Liberapay](./img/liberapay.svg)](https://liberapay.com/LibRedirect)  [![Patreon](./img/patreon.svg)](https://patreon.com/LibRedirect)  [![Buy me a coffee](./img/bmc.svg)](https://www.buymeacoffee.com/libredirect) @@ -52,47 +53,59 @@ ETH: 0x896E5796Da76E49A400A9186E1c459CD2C64b4E8\ XMR: 4AM5CVfaGsnEXQQjZSzJvaWufe7pT86ubcZPr83fCjb2Hn3iwcForTWFy2Z3ugXcufUwHaGcucfPMFgPXBFSYGFvNrmV5XR ## Mirror Repos + [![GitHub](https://raw.githubusercontent.com/ManeraKai/manerakai/main/icons/github.svg)](https://github.com/libredirect/libredirect/)   [![Codeberg](https://raw.githubusercontent.com/ManeraKai/manerakai/main/icons/codeberg.svg)](https://codeberg.org/LibRedirect/libredirect)   ## Translate + [![Weblate](./img/weblate.svg)](https://hosted.weblate.org/projects/libredirect/extension) ## Development + ### Install Dependencies + [Node.js](https://nodejs.org/) latest LTS is recommended + ``` npm update npm install ``` If you are modifying any files ending with .pug, the pug cli needs to be installed with the following command (with root privileges): + ``` npm install -g pug-cli ``` -and then run `./script.sh` to generate pages in the background. + +and then run `npm run pug` to generate pages in the background. ### Build + ``` npm run build ``` ### Test + ``` npm run test ``` ### Test in Firefox + ``` npm run start ``` ### Install temporarily + open `about:addons`\ click on the settings button below the addon search bar and select `debug add-on`\ press `load temporarily addon` ### Install in Firefox ESR, Developer Edition, Nightly + open `about:config`\ set `xpinstall.signatures.required` to `false`\ open `about:addons`\ @@ -100,6 +113,7 @@ click on the gear shaped `settings` button and select `Install Add-on From File. select `libredirect-VERSION.zip` from `web-ext-artifacts` folder ### Install in Chromium browsers + open `chrome://extensions`\ enable `dev mode`\ select `load unpacked extension`\ diff --git a/chromium.md b/chromium.md index 1825d78..9b7842f 100644 --- a/chromium.md +++ b/chromium.md @@ -1,4 +1,5 @@ ## Linux + - Download the latest `.crx` file: [libredirect-2.2.1.crx](https://github.com/libredirect/libredirect/releases/download/v2.2.1/libredirect-2.2.1.crx) - Open `chrome://extensions` - Enable `dev mode` @@ -8,6 +9,7 @@ Updates are automatic ## Windows, MacOS + - Download the latest release [libredirect-2.2.1.zip](https://github.com/libredirect/libredirect/releases/download/v2.2.1/libredirect-2.2.1.zip) - Unzip it with `Auto detect subfolder` - Open `chrome://extensions` diff --git a/package.json b/package.json index 2f8f9ab..e6214c8 100644 --- a/package.json +++ b/package.json @@ -1,29 +1,33 @@ { - "name": "libredirect", - "description": "Redirects YouTube, Twitter, Instagram and more to privacy friendly frontends.", - "engines": { - "node": ">=16.13.1", - "npm": ">=8.1.2" - }, - "scripts": { - "start": "web-ext run --browser-console --source-dir ./src/", - "build": "web-ext build --overwrite-dest --source-dir ./src/", - "test": "web-ext lint --source-dir ./src/ || true" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/LibRedirect/LibRedirect.git" - }, - "author": "LibRedirect", - "license": "GPL-3.0-only", - "bugs": { - "url": "https://github.com/LibRedirect/LibRedirect/issues" - }, - "homepage": "https://github.com/LibRedirect/LibRedirect", - "devDependencies": { - "web-ext": "^6.7.0" - }, - "dependencies": { - "buffer": "^6.0.3" - } + "name": "libredirect", + "description": "Redirects YouTube, Twitter, Instagram and more to privacy friendly frontends.", + "engines": { + "node": ">=16.13.1", + "npm": ">=8.1.2" + }, + "scripts": { + "start": "web-ext run --browser-console --source-dir ./src/", + "build": "web-ext build --overwrite-dest --source-dir ./src/", + "test": "web-ext lint --source-dir ./src/ || true", + "pug": "pug ./src/pages/options/*.pug ./src/pages/popup/ -P -w", + "prettier": "npx prettier --write .", + "instances": "python3 src/instances/get_instances.py; git update-index --assume-unchanged src/instances/blacklist.json src/instances/data.json" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/LibRedirect/LibRedirect.git" + }, + "author": "LibRedirect", + "license": "GPL-3.0-only", + "bugs": { + "url": "https://github.com/LibRedirect/LibRedirect/issues" + }, + "homepage": "https://github.com/LibRedirect/LibRedirect", + "devDependencies": { + "prettier": "2.7.1", + "web-ext": "^6.7.0" + }, + "dependencies": { + "buffer": "^6.0.3" + } } diff --git a/script.sh b/script.sh deleted file mode 100755 index 00914fd..0000000 --- a/script.sh +++ /dev/null @@ -1 +0,0 @@ -pug ./src/pages/options/*.pug ./src/pages/popup/ -P -w \ No newline at end of file diff --git a/src/assets/javascripts/general.js b/src/assets/javascripts/general.js index 1c27a55..0b34c14 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 2a8ac2f..9981f1b 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; + 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; } + 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}`; + 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; } + 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}`); - }) + 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, + 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; } + ...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]; - } + 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 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}`); - }) + 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, + 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: [], + libremdbNormalRedirectsChecks: [...redirects.libremdb.normal], + libremdbNormalCustomRedirects: [], - libremdbTorRedirectsChecks: [...redirects.libremdb.tor], - libremdbTorCustomRedirects: [], + libremdbTorRedirectsChecks: [...redirects.libremdb.tor], + libremdbTorCustomRedirects: [], - libremdbI2pRedirectsChecks: [], - libremdbI2pCustomRedirects: [], + libremdbI2pRedirectsChecks: [], + libremdbI2pCustomRedirects: [], - libremdbLokiRedirectsChecks: [], - libremdbLokiCustomRedirects: [] - }, () => resolve()); - }); - }) + 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 f373276..9ccd24a 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; + 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]; + 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); + 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 b = rimgoTorRedirectsChecks.indexOf(instance) + if (b > -1) rimgoTorRedirectsChecks.splice(b, 1) - const c = rimgoI2pRedirectsChecks.indexOf(instance); - if (c > -1) rimgoI2pRedirectsChecks.splice(c, 1); - } + const c = rimgoI2pRedirectsChecks.indexOf(instance) + if (c > -1) rimgoI2pRedirectsChecks.splice(c, 1) + } - browser.storage.local.set({ - imgurRedirects: redirects, - rimgoNormalRedirectsChecks, - rimgoTorRedirectsChecks, - rimgoI2pRedirectsChecks, - }, () => resolve()); - }) - }) + 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; + 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; } + 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}`; + 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]; - } + 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 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}`); - }) + 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, + 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: [], + rimgoNormalRedirectsChecks: rimgoNormalRedirectsChecks, + rimgoNormalCustomRedirects: [], - rimgoTorRedirectsChecks: [...redirects.rimgo.tor], - rimgoTorCustomRedirects: [], + rimgoTorRedirectsChecks: [...redirects.rimgo.tor], + rimgoTorCustomRedirects: [], - rimgoI2pRedirectsChecks: [...redirects.rimgo.i2p], - rimgoI2pCustomRedirects: [], + rimgoI2pRedirectsChecks: [...redirects.rimgo.i2p], + rimgoI2pCustomRedirects: [], - rimgoLokiRedirectsChecks: [...redirects.rimgo.loki], - rimgoLokiCustomRedirects: [] - }, () => resolve()); - }); - }); - }); + 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 182ff4d..2e4503e 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; + 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; + 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) + 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/...' + 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; } + 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}`); - }) + 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; } + 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]; - } + 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 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}`); - }) + 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, + 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: [], + bibliogramNormalRedirectsChecks: bibliogramNormalRedirectsChecks, + bibliogramNormalCustomRedirects: [], - bibliogramTorRedirectsChecks: [...redirects.bibliogram.tor], - bibliogramTorCustomRedirects: [], + bibliogramTorRedirectsChecks: [...redirects.bibliogram.tor], + bibliogramTorCustomRedirects: [], - bibliogramI2pRedirectsChecks: [...redirects.bibliogram.i2p], - bibliogramI2pCustomRedirects: [], + bibliogramI2pRedirectsChecks: [...redirects.bibliogram.i2p], + bibliogramI2pCustomRedirects: [], - bibliogramLokiRedirectsChecks: [...redirects.bibliogram.loki], - bibliogramLokiCustomRedirects: [] - }) - resolve(); - } - ) - }) - }) + 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 cfdf1bb..7f39b73 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; } + 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]; - } + 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 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}`); - }) + 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; + 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; + 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}`; + 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, + 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: [], + librarianNormalRedirectsChecks: [...redirects.librarian.normal], + librarianNormalCustomRedirects: [], - librarianTorRedirectsChecks: [...redirects.librarian.tor], - librarianTorCustomRedirects: [], + librarianTorRedirectsChecks: [...redirects.librarian.tor], + librarianTorCustomRedirects: [], - librarianI2pRedirectsChecks: [...redirects.librarian.i2p], - librarianI2pCustomRedirects: [], + librarianI2pRedirectsChecks: [...redirects.librarian.i2p], + librarianI2pCustomRedirects: [], - librarianLokiRedirectsChecks: [...redirects.librarian.loki], - librarianLokiCustomRedirects: [] - }, () => resolve()); - }); - }) + 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 a4bbca9..34ccd66 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 fd65b1c..9fb10b9 100644 --- a/src/assets/javascripts/maps.js +++ b/src/assets/javascripts/maps.js @@ -1,247 +1,294 @@ -"use strict"; +"use strict" -window.browser = window.browser || window.chrome; -import utils from './utils.js' +window.browser = window.browser || window.chrome +import utils from "./utils.js" -const targets = /^https?:\/{2}(((www|maps)\.)?(google\.).*(\/maps)|maps\.(google\.).*)/; +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": [] - } -}; +const frontends = new Array("facil") +const protocols = new Array("normal", "tor", "i2p", "loki") +let redirects = {} -let - disableMaps, - mapsFrontend, - protocol, - protocolFallback, - facilNormalRedirectsChecks, - facilNormalCustomRedirects, - facilTorCustomRedirects, - facilI2pCustomRedirects, - facilLokiCustomRedirects; - -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; - } - ) +for (let i = 0; i < frontends.length; i++) { + redirects[frontends[i]] = {} + for (let x = 0; x < protocols.length; x++) { + redirects[frontends[i]][protocols[x]] = [] + } } -init(); +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, + }) + }) +} + +let disableMaps, + mapsFrontend, + protocol, + protocolFallback, + facilNormalRedirectsChecks, + facilNormalCustomRedirects, + facilTorRedirectsChecks, + facilTorCustomRedirects, + facilI2pRedirectsChecks, + facilI2pCustomRedirects, + facilLokiRedirectsChecks, + facilLokiCustomRedirects + +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 + } + ) +} + +init() browser.storage.onChanged.addListener(init) 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); - } + 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); + 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) - 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 = {} - 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 (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 (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.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") - 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 query = ""; - if (url.searchParams.has("q")) query = url.searchParams.get("q"); - else if (url.searchParams.has("query")) query = url.searchParams.has("query"); + 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 - 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 travMod = url.searchParams.get("travelmode") + if (url.searchParams.has("travelmode")) prefs.engine = travelModes[travMod] - 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}`; + let orgVal = url.searchParams.get("origin") + let destVal = url.searchParams.get("destination") - } 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 org + addressToLatLng(orgVal, a => (org = a)) + let dest + addressToLatLng(destVal, a => (dest = a)) + prefs.route = `${org};${dest}` - let travMod = url.searchParams.get("travelmode"); - if (url.searchParams.has("travelmode")) prefs.engine = travelModes[travMod]; + 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 orgVal = url.searchParams.get("origin"); - let destVal = url.searchParams.get("destination"); + let [, mlat, mlon] = url.pathname.match(dataLatLngRegex) - let org; addressToLatLng(orgVal, a => org = a); - let dest; addressToLatLng(destVal, a => dest = a); - prefs.route = `${org};${dest}`; + 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") - 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]}`; + const [mlat, mlon] = url.searchParams.get("ll").split(",") - } 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"); + 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") - let [, mlat, mlon] = url.pathname.match(dataLatLngRegex); + 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}`; + 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") - } else if (url.searchParams.has("ll")) { // Get marker from ll param - // https://maps.google.com/?ll=38.882147,-76.99017 - console.log("ll 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] - const [mlat, mlon] = url.searchParams.get("ll").split(","); + 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}` + } + } - 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`; + 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` } -async function initDefaults() { - return new Promise(resolve => - browser.storage.local.set({ - disableMaps: false, - mapsFrontend: 'osm', - mapsRedirects: redirects, - facilNormalRedirectsChecks: [...redirects.facil.normal], - facilNormalCustomRedirects: [], +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: [], + facilTorRedirectsChecks: [...redirects.facil.tor], + facilTorCustomRedirects: [], - facilI2pRedirectsChecks: [...redirects.facil.i2p], - facilI2pCustomRedirects: [], - - facilLokiRedirectsChecks: [...redirects.facil.loki], - facilLokiCustomRedirects: [] - }, () => resolve()) - ) + 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 ddd955c..4c03471 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 = [ - // /(?:.*\.)*(? { - 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 (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; + 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; } + 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}`; + 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, + 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; } + ...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]; - } + 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 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}`); - }) + 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, + 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: [], + scribeNormalRedirectsChecks: scribeNormalRedirectsChecks, + scribeNormalCustomRedirects: [], - scribeTorRedirectsChecks: [...redirects.scribe.tor], - scribeTorCustomRedirects: [], + scribeTorRedirectsChecks: [...redirects.scribe.tor], + scribeTorCustomRedirects: [], - scribeI2pRedirectsChecks: [...redirects.scribe.i2p], - scribeI2pCustomRedirects: [], + scribeI2pRedirectsChecks: [...redirects.scribe.i2p], + scribeI2pCustomRedirects: [], - scribeLokiRedirectsChecks: [...redirects.scribe.loki], - scribeLokiCustomRedirects: [] - }, () => resolve()) - }) - }) - }) + 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 d05e4b2..de25cfa 100644 --- a/src/assets/javascripts/peertube.js +++ b/src/assets/javascripts/peertube.js @@ -1,180 +1,201 @@ -window.browser = window.browser || window.chrome; +window.browser = window.browser || window.chrome -import utils from './utils.js' +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": [] - } +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; + 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; } + 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}`; + 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; } + 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]; - } + 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 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}`); - }) + 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, + 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: [], + simpleertubeNormalRedirectsChecks: simpleertubeNormalRedirectsChecks, + simpleertubeNormalCustomRedirects: [], - simpleertubeTorRedirectsChecks: [...redirects.simpleertube.tor], - simpleertubeTorCustomRedirects: [], + simpleertubeTorRedirectsChecks: [...redirects.simpleertube.tor], + simpleertubeTorCustomRedirects: [], - simpleertubeI2pRedirectsChecks: [...redirects.simpleertube.i2p], - simpleertubeI2pCustomRedirects: [], + simpleertubeI2pRedirectsChecks: [...redirects.simpleertube.i2p], + simpleertubeI2pCustomRedirects: [], - simpleertubeLokiRedirectsChecks: [...redirects.simpleertube.loki], - simpleertubeLokiCustomRedirects: [] - }, () => resolve()); - }) - }) - }) + 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 fed321d..3f9e418 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; + 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; } + 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}`; + 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; } + 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}`); - }) + 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, + 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 + } - ...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] + } - 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 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}`); - }) + 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, + 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, + quoraRedirects: redirects, - quetreNormalRedirectsChecks: [...redirects.quetre.normal], - quetreNormalCustomRedirects: [], + quetreNormalRedirectsChecks: [...redirects.quetre.normal], + quetreNormalCustomRedirects: [], - quetreTorRedirectsChecks: [...redirects.quetre.tor], - quetreTorCustomRedirects: [], + quetreTorRedirectsChecks: [...redirects.quetre.tor], + quetreTorCustomRedirects: [], - quetreI2pRedirectsChecks: [...redirects.quetre.i2p], - quetreI2pCustomRedirects: [], + quetreI2pRedirectsChecks: [...redirects.quetre.i2p], + quetreI2pCustomRedirects: [], - quetreLokiRedirectsChecks: [...redirects.quetre.loki], - quetreLokiCustomRedirects: [] - }, () => resolve()); - }); - }) + 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 bc7b687..699dcf1 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); + 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 - }) - }) + 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; } + 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); - }) + 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 + return new Promise(async resolve => { + await init() + let protocolHost = utils.protocolHost(from) + if ( + ![...tedditNormalRedirectsChecks, ...tedditTorRedirectsChecks, ...tedditNormalCustomRedirects, ...tedditTorCustomRedirects, ...tedditI2pCustomRedirects, ...tedditI2pCustomRedirects].includes( + protocolHost + ) + ) + resolve() - ].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); - }) + 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; + 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 = []; + 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 (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}`; - } - } + 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}`; + 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_"); - } + 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 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}`); - }) + 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; + 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 = 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, + i = tedditNormalRedirectsChecks.indexOf(instance) + if (i > -1) tedditNormalRedirectsChecks.splice(i, 1) + } + browser.storage.local.set( + { + disableReddit: false, + redditFrontend: "libreddit", + redditRedirects: redirects, - libredditNormalRedirectsChecks: libredditNormalRedirectsChecks, - libredditNormalCustomRedirects: [], + libredditNormalRedirectsChecks: libredditNormalRedirectsChecks, + libredditNormalCustomRedirects: [], - libredditTorRedirectsChecks: [...redirects.libreddit.tor], - libredditTorCustomRedirects: [], + libredditTorRedirectsChecks: [...redirects.libreddit.tor], + libredditTorCustomRedirects: [], - libredditI2pRedirectsChecks: [...redirects.libreddit.i2p], - libredditI2pCustomRedirects: [], + libredditI2pRedirectsChecks: [...redirects.libreddit.i2p], + libredditI2pCustomRedirects: [], - libredditLokiRedirectsChecks: [...redirects.libreddit.loki], - libredditLokiCustomRedirects: [], + libredditLokiRedirectsChecks: [...redirects.libreddit.loki], + libredditLokiCustomRedirects: [], - tedditNormalRedirectsChecks: tedditNormalRedirectsChecks, - tedditNormalCustomRedirects: [], + tedditNormalRedirectsChecks: tedditNormalRedirectsChecks, + tedditNormalCustomRedirects: [], - tedditTorRedirectsChecks: [...redirects.teddit.tor], - tedditTorCustomRedirects: [], + tedditTorRedirectsChecks: [...redirects.teddit.tor], + tedditTorCustomRedirects: [], - tedditI2pRedirectsChecks: [...redirects.teddit.i2p], - tedditI2pCustomRedirects: [], + tedditI2pRedirectsChecks: [...redirects.teddit.i2p], + tedditI2pCustomRedirects: [], - tedditLokiRedirectsChecks: [...redirects.teddit.loki], - tedditLokiCustomRedirects: [] - }, () => resolve()); - }); - }); - }); + tedditLokiRedirectsChecks: [...redirects.teddit.loki], + tedditLokiCustomRedirects: [], + }, + () => resolve() + ) + }) + }) + }) } export default { - setRedirects, - initLibredditCookies, - pasteLibredditCookies, - initTedditCookies, - pasteTedditCookies, + setRedirects, + initLibredditCookies, + pasteLibredditCookies, + initTedditCookies, + pasteTedditCookies, - redirect, - initDefaults, - switchInstance, -}; + redirect, + initDefaults, + switchInstance, +} diff --git a/src/assets/javascripts/reuters.js b/src/assets/javascripts/reuters.js index e1d18a4..e4afa19 100644 --- a/src/assets/javascripts/reuters.js +++ b/src/assets/javascripts/reuters.js @@ -1,152 +1,140 @@ -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\.|)reuters\.com.*/ -]; +const targets = [/^https?:\/{2}(www\.|)reuters\.com.*/] -let redirects = { - "neuters": { - "normal": [ - "https://neuters.de" - ], - "tor": [], - "i2p": [], - "loki": [] - } +const frontends = new Array("neuters") +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]] = [] + } } -// 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]] = [] -// } -// } - 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; + 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; + 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}/`; + 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, + 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, + reutersRedirects: redirects, - neutersNormalRedirectsChecks: [...redirects.neuters.normal], - neutersNormalCustomRedirects: [], + neutersNormalRedirectsChecks: [...redirects.neuters.normal], + neutersNormalCustomRedirects: [], - neutersTorRedirectsChecks: [...redirects.neuters.tor], - neutersTorCustomRedirects: [], + neutersTorRedirectsChecks: [...redirects.neuters.tor], + neutersTorCustomRedirects: [], - neutersI2pRedirectsChecks: [...redirects.neuters.i2p], - neutersI2pCustomRedirects: [], + neutersI2pRedirectsChecks: [...redirects.neuters.i2p], + neutersI2pCustomRedirects: [], - neutersLokiRedirectsChecks: [...redirects.neuters.loki], - neutersLokiCustomRedirects: [] - }, () => resolve()); - }); + 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 15272aa..b076f5d 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); + 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 b = searxngNormalRedirectsChecks.indexOf(instance) + if (b > -1) searxngNormalRedirectsChecks.splice(b, 1) - const c = whoogleNormalRedirectsChecks.indexOf(instance); - if (c > -1) whoogleNormalRedirectsChecks.splice(c, 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, - }); - }) + 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; } + 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); - }) + 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; } + 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); - }) + 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; } + 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); - }) + 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; } + 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 == "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 = "/" + } 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" + } 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"; - } + 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 = '/'; + 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')}`; + 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}`; + 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, + 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.searxng.normal, + ...searchRedirects.searxng.tor, + ...searchRedirects.searxng.i2p, - ...searchRedirects.whoogle.normal, - ...searchRedirects.whoogle.tor, - ...searchRedirects.whoogle.i2p, + ...searchRedirects.whoogle.normal, + ...searchRedirects.whoogle.tor, + ...searchRedirects.whoogle.i2p, - ...searchRedirects.librex.normal, - ...searchRedirects.librex.tor, - ...searchRedirects.librex.i2p, + ...searchRedirects.librex.normal, + ...searchRedirects.librex.tor, + ...searchRedirects.librex.i2p, - ...searxNormalCustomRedirects, - ...searxTorCustomRedirects, - ...searxI2pCustomRedirects, - ...searxLokiCustomRedirects, + ...searxNormalCustomRedirects, + ...searxTorCustomRedirects, + ...searxI2pCustomRedirects, + ...searxLokiCustomRedirects, - ...searxngNormalCustomRedirects, - ...searxngTorCustomRedirects, - ...searxngI2pCustomRedirects, - ...searxngLokiCustomRedirects, + ...searxngNormalCustomRedirects, + ...searxngTorCustomRedirects, + ...searxngI2pCustomRedirects, + ...searxngLokiCustomRedirects, - ...whoogleNormalCustomRedirects, - ...whoogleTorCustomRedirects, - ...whoogleI2pCustomRedirects, - ...whoogleLokiCustomRedirects, + ...whoogleNormalCustomRedirects, + ...whoogleTorCustomRedirects, + ...whoogleI2pCustomRedirects, + ...whoogleLokiCustomRedirects, - ...librexNormalCustomRedirects, - ...librexTorCustomRedirects, - ...librexI2pCustomRedirects, - ...librexLokiCustomRedirects - ].includes(protocolHost)) { resolve(); return; } + ...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; } + let instancesList = [] - const randomInstance = utils.getRandomInstance(instancesList); - resolve(`${randomInstance}${url.pathname}${url.search}`); - }) + 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 2ea95d2..ba892fe 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; } + 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]; - } + 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 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}`); - }) + 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; + 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; + 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; + 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, + 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: [], + sendNormalRedirectsChecks: sendNormalRedirectsChecks, + sendNormalCustomRedirects: [], - sendTorRedirectsChecks: [...redirects.send.tor], - sendTorCustomRedirects: [], + sendTorRedirectsChecks: [...redirects.send.tor], + sendTorCustomRedirects: [], - sendI2pRedirectsChecks: [...redirects.send.i2p], - sendI2pCustomRedirects: [], + sendI2pRedirectsChecks: [...redirects.send.i2p], + sendI2pCustomRedirects: [], - sendLokiRedirectsChecks: [...redirects.send.loki], - sendLokiCustomRedirects: [] - }, () => resolve()) - }) - }) - }) + 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 a5c14a2..ba4a9ff 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(); + 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); - }) + 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; + 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; + 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}`; + 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; } + 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}`); - }) + 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, + 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; } + ...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]; - } + 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 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}`); - }) + 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, + 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, + tiktokRedirects: redirects, - proxiTokNormalRedirectsChecks: [...redirects.proxiTok.normal], - proxiTokNormalCustomRedirects: [], + proxiTokNormalRedirectsChecks: [...redirects.proxiTok.normal], + proxiTokNormalCustomRedirects: [], - proxiTokTorRedirectsChecks: [...redirects.proxiTok.tor], - proxiTokTorCustomRedirects: [], + proxiTokTorRedirectsChecks: [...redirects.proxiTok.tor], + proxiTokTorCustomRedirects: [], - proxiTokI2pRedirectsChecks: [...redirects.proxiTok.i2p], - proxiTokI2pCustomRedirects: [], + proxiTokI2pRedirectsChecks: [...redirects.proxiTok.i2p], + proxiTokI2pCustomRedirects: [], - proxiTokLokiRedirectsChecks: [...redirects.proxiTok.loki], - proxiTokLokiCustomRedirects: [] - }, () => resolve()); - }); - }) + 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 40def6a..0d6ff6e 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 a0f2ad8..04a36e1 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 75c5b5f..5512f7f 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", + 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(); - } - ) - }) + "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; } + 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" } - ); + 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); - } - ) + 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 (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; + 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) + 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; - } + 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, + 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, + ...simplyTranslateNormalCustomRedirects, + ...simplyTranslateTorCustomRedirects, + ...simplyTranslateI2pCustomRedirects, + ...simplyTranslateLokiCustomRedirects, - ...translateRedirects.lingva.normal, - ...translateRedirects.lingva.tor, + ...translateRedirects.lingva.normal, + ...translateRedirects.lingva.tor, - ...lingvaNormalCustomRedirects, - ...lingvaTorCustomRedirects, - ...lingvaI2pCustomRedirects, - ...lingvaLokiCustomRedirects - ].includes(protocolHost)) { resolve(); return; } + ...lingvaNormalCustomRedirects, + ...lingvaTorCustomRedirects, + ...lingvaI2pCustomRedirects, + ...lingvaLokiCustomRedirects, + ].includes(protocolHost) + ) { + resolve() + return + } - let instancesList; + 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]; - } + 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 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}`); - }) + 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, + 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: [], + simplyTranslateNormalRedirectsChecks: [...redirects.simplyTranslate.normal], + simplyTranslateNormalCustomRedirects: [], - lingvaNormalRedirectsChecks: lingvaNormalRedirectsChecks, - lingvaNormalCustomRedirects: [], + simplyTranslateTorRedirectsChecks: [...redirects.simplyTranslate.tor], + simplyTranslateTorCustomRedirects: [], - lingvaTorRedirectsChecks: [...redirects.lingva.tor], - lingvaTorCustomRedirects: [], + simplyTranslateI2pRedirectsChecks: [...redirects.simplyTranslate.i2p], + simplyTranslateI2pCustomRedirects: [], - lingvaI2pRedirectsChecks: [...redirects.lingva.i2p], - lingvaI2pCustomRedirects: [], + simplyTranslateLokiRedirectsChecks: [...redirects.simplyTranslate.loki], + simplyTranslateLokiCustomRedirects: [], - lingvaLokiRedirectsChecks: [...redirects.lingva.loki], - lingvaLokiCustomRedirects: [] - }, () => resolve()) - }) - }) - }) + 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 0a85192..1ec4d8e 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 f922572..7a97dcd 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); + 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); + 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() - }) + 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] - 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] - let nameCustomInstances = []; - let nameCheckListElement = nameProtocolElement.getElementsByClassName('checklist')[0]; + await initcloudflareBlackList() - await initcloudflareBlackList(); + let nameDefaultRedirects - let nameDefaultRedirects; + let redirectsChecks = `${name}${camelCase(protocol)}RedirectsChecks` + let customRedirects = `${name}${camelCase(protocol)}CustomRedirects` + let redirectsKey = `${target}Redirects` - let redirectsChecks = `${name}${camelCase(protocol)}RedirectsChecks`; - let customRedirects = `${name}${camelCase(protocol)}CustomRedirects`; - let redirectsKey = `${target}Redirects`; + let 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() + }) + ) + } - 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); + 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 = - [ - `
+ 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 = [ + `
Toggle All
`, - ...redirects[name][protocol].map( - x => { - const cloudflare = cloudflareBlackList.includes(x) ? ' cloudflare' : ''; - const authenticate = authenticateBlackList.includes(x) ? ' authenticate' : ''; + ...redirects[name][protocol].map(x => { + const cloudflare = cloudflareBlackList.includes(x) ? ' cloudflare' : "" + const authenticate = authenticateBlackList.includes(x) ? ' authenticate' : "" - 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'; + 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 ? '' + latencyLimit + '' : ''; + const latency = x in instancesLatency ? '' + latencyLimit + "" : "" - let warnings = [cloudflare, authenticate, latency].join(' '); - return `
+ let warnings = [cloudflare, authenticate, latency].join(" ") + return `
${x}${warnings} -
`; - } - ), - ].join('\n
\n'); +
` + }), + ].join("\n
\n") - localise.localisePage(); + localise.localisePage() - calcNameCheckBoxes(); - nameProtocolElement.getElementsByClassName('toggle-all')[0].addEventListener("change", async event => { - if (event.target.checked) - nameDefaultRedirects = [...redirects[name][protocol]]; - else - nameDefaultRedirects = []; + 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(); - }); + 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(); - }); - } + 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 => `
+ function calcNameCustomInstances() { + nameProtocolElement.getElementsByClassName("custom-checklist")[0].innerHTML = nameCustomInstances + .map( + x => `
${x}

` - ).join('\n'); + ) + .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(); - } - }) + 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"; + 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}: ${text}`; - } - }) - resolve(myList); - }) + let text + if (time == 5000) text = "5000ms+" + else if (time > 5000) text = `ERROR: ${time - 5000}` + else text = `${time}ms` + element.innerHTML = `${href}: ${text}` + } + }) + 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; } + 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); + 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() - } - ) - }) + 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; } + 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); + 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 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) - 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); - } - } - ) - }) + 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); + 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() - } - }) - }) + 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 d2ba7de..d5c9bfa 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; } + 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); - }) + 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; + 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 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; + 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, + 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; } + ...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 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; } + 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 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 9d052f6..df79e13 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 417d64d..388ecd1 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 7415255..59d6dcc 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 346de5c..374f2d6 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 72763c4..e8a77ff 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); + 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 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 - }) - }) + 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, + return [ + ...youtubeRedirects.invidious.normal, + ...youtubeRedirects.invidious.tor, + ...youtubeRedirects.invidious.i2p, + ...youtubeRedirects.invidious.loki, - ...youtubeRedirects.piped.normal, - ...youtubeRedirects.piped.tor, + ...youtubeRedirects.piped.normal, + ...youtubeRedirects.piped.tor, + ...youtubeRedirects.piped.i2p, + ...youtubeRedirects.piped.loki, - ...youtubeRedirects.pipedMaterial.normal, - ...youtubeRedirects.pipedMaterial.tor, + ...youtubeRedirects.pipedMaterial.normal, + ...youtubeRedirects.pipedMaterial.tor, + ...youtubeRedirects.pipedMaterial.i2p, + ...youtubeRedirects.pipedMaterial.loki, - ...invidiousNormalCustomRedirects, - ...invidiousTorCustomRedirects, - ...invidiousI2pCustomRedirects, - ...invidiousLokiCustomRedirects, + ...youtubeRedirects.cloudtube.normal, + ...youtubeRedirects.cloudtube.tor, + ...youtubeRedirects.cloudtube.i2p, + ...youtubeRedirects.cloudtube.loki, - ...pipedNormalCustomRedirects, - ...pipedTorCustomRedirects, - ...pipedI2pCustomRedirects, - ...pipedLokiCustomRedirects, + ...invidiousNormalCustomRedirects, + ...invidiousTorCustomRedirects, + ...invidiousI2pCustomRedirects, + ...invidiousLokiCustomRedirects, - ...pipedMaterialNormalCustomRedirects, - ...pipedMaterialTorCustomRedirects, - ...pipedMaterialI2pCustomRedirects, - ...pipedMaterialLokiCustomRedirects - ]; + ...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'; + 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'; + 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 - //const isFrontendYoutube = youtubeEmbedFrontend == "youtube"; - const isFrontendInvidious = youtubeEmbedFrontend == 'invidious'; - const isFrontendPiped = youtubeEmbedFrontend == 'piped'; - const isFrontendPipedMaterial = youtubeEmbedFrontend == 'pipedMaterial'; + 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 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'; + 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; } + 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]; - } + 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 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}`); - }) + 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] - 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) - 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 b = pipedNormalRedirectsChecks.indexOf(instance); - if (b > -1) pipedNormalRedirectsChecks.splice(b, 1); + const c = pipedMaterialNormalRedirectsChecks.indexOf(instance) + if (c > -1) pipedMaterialNormalRedirectsChecks.splice(c, 1) - const c = pipedMaterialNormalRedirectsChecks.indexOf(instance); - if (c > -1) pipedMaterialNormalRedirectsChecks.splice(c, 1); - } + const d = cloudtubeNormalRedirectsChecks.indexOf(instance) + if (d > -1) cloudtubeNormalRedirectsChecks.indexOf(instance) + } - 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: [], - youtubeEmbedFrontend: 'invidious' - }, () => resolve()) - }) - }) - }) + cloudtubeNormalRedirectsChecks: cloudtubeNormalRedirectsChecks, + cloudtubeNormalCustomRedirects: [], + + 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 = []; + 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); - }) + 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; } + 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" }); + 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); - }) + 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; } +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" }); + 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); - }) + 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; + 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(); + 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 + '; '; - } + 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 }; + 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 46caf60..3ff9a17 100644 --- a/src/assets/javascripts/youtubeMusic.js +++ b/src/assets/javascripts/youtubeMusic.js @@ -1,61 +1,192 @@ -"use strict"; +"use strict" -import utils from './utils.js' +import utils from "./utils.js" -window.browser = window.browser || window.chrome; +window.browser = window.browser || window.chrome -const targets = [ - /^https?:\/{2}music\.youtube\.com(\/.*|$)/, -]; -let redirects = { - "beatbump": { - "normal": [ - "https://beatbump.ml" - ], - "tor": [], - "i2p": [], - "loki": [] - }, -}; +const targets = [/^https?:\/{2}music\.youtube\.com(\/.*|$)/] -let - disableYoutubeMusic, - protocol, - protocolFallback, - beatbumpNormalRedirectsChecks, - beatbumpNormalCustomRedirects, - beatbumpTorCustomRedirects, - beatbumpI2pCustomRedirects, - beatbumpLokiCustomRedirects; +const frontends = new Array("beatbump", "hyperpipe") +const protocols = new Array("normal", "tor", "i2p", "loki") -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; - } - ) +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]] = [] + } } -init(); +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() { + 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() 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; +function redirect(url, type, initiator, 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"); + let instancesList = getInstanceList() + + if (instancesList.length === 0) 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 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 + } - beatbumpNormalRedirectsChecks: [...redirects.beatbump.normal], - beatbumpNormalCustomRedirects: [], + let instancesList = getInstanceList() - beatbumpTorRedirectsChecks: [...redirects.beatbump.tor], - beatbumpTorCustomRedirects: [], + const i = instancesList.indexOf(protocolHost) + if (i > -1) instancesList.splice(i, 1) + if (instancesList.length === 0) { + resolve() + return + } - beatbumpI2pRedirectsChecks: [...redirects.beatbump.i2p], - beatbumpI2pCustomRedirects: [], + const randomInstance = utils.getRandomInstance(instancesList) + return getUrl(randomInstance, url) + }) +} - beatbumpLokiRedirectsChecks: [...redirects.beatbump.loki], - beatbumpLokiCustomRedirects: [] - }, () => resolve()) - ) +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 + + i = beatbumpNormalRedirectsChecks.indexOf(instance) + if (i > -1) beatbumpNormalRedirectsChecks.splice(i, 1) + + i = hyperpipeNormalRedirectsChecks.indexOf(instance) + if (i > -1) hyperpipeNormalRedirectsChecks.splice(i, 1) + } + browser.storage.local.set( + { + disableYoutubeMusic: false, + youtubeMusicFrontend: "hyperpipe", + youtubeMusicRedirects: redirects, + + beatbumpNormalRedirectsChecks: beatbumpNormalRedirectsChecks, + beatbumpNormalCustomRedirects: [], + + 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, +} diff --git a/src/instances/beatbump.json b/src/instances/beatbump.json new file mode 100644 index 0000000..4c7f65a --- /dev/null +++ b/src/instances/beatbump.json @@ -0,0 +1,6 @@ +{ + "normal": ["https://beatbump.ml"], + "tor": [], + "i2p": [], + "loki": [] +} diff --git a/src/instances/cloudtube.json b/src/instances/cloudtube.json new file mode 100644 index 0000000..402adc3 --- /dev/null +++ b/src/instances/cloudtube.json @@ -0,0 +1,6 @@ +{ + "normal": ["https://tube.cadence.moe", "https://yt.beparanoid.de"], + "tor": ["http://yt.prnoid54e44a4bduq5due64jkk7wcnkxcp5kv3juncm7veptjcqudgyd.onion"], + "i2p": [], + "loki": [] +} diff --git a/src/instances/facil.json b/src/instances/facil.json new file mode 100644 index 0000000..798a9cf --- /dev/null +++ b/src/instances/facil.json @@ -0,0 +1,6 @@ +{ + "normal": ["https://facilmap.org"], + "tor": [], + "i2p": [], + "loki": [] +} diff --git a/src/instances/get_instances.py b/src/instances/get_instances.py index b8970ee..5edbfb6 100644 --- a/src/instances/get_instances.py +++ b/src/instances/get_instances.py @@ -12,6 +12,12 @@ import subprocess mightyList = {} +startRegex = "https?:\/{2}(?:[^\s\/]+\.)+" +endRegex = "(?:\/[^\s\/]+)*\/?" +torRegex = startRegex + "onion" + endRegex +i2pRegex = startRegex + "i2p" + endRegex +lokiRegex = startRegex + "loki" + endRegex +authRegex = "https?:\/{2}\S+:\S+@(?:[^\s\/]+\.)+[a-zA-Z0-9]+" + endRegex def filterLastSlash(urlList): tmp = {} @@ -65,16 +71,19 @@ def is_cloudflare(url): instance_bin_masked = instance_bin[:mask] if cloudflare_bin_masked == instance_bin_masked: - print(url + ' is ' + Fore.RED + 'cloudflare' + Style.RESET_ALL) + print(url + ' is behind ' + Fore.RED + 'cloudflare' + Style.RESET_ALL) return True return False def is_authenticate(url): try: + if re.match(authRegex, url): + print(url + ' requires ' + Fore.RED + 'authentication' + Style.RESET_ALL) + return True r = requests.get(url, timeout=5) if 'www-authenticate' in r.headers: - print(url + ' is ' + Fore.RED + 'authenticate' + Style.RESET_ALL) + print(url + ' requires ' + Fore.RED + 'authentication' + Style.RESET_ALL) return True except: return False @@ -99,9 +108,26 @@ def invidious(): def piped(): - json_object = json.dumps(mightyList, ensure_ascii=False, indent=2) - with open('./src/instances/piped.json') as file: - mightyList['piped'] = json.load(file) + r = requests.get( + 'https://raw.githubusercontent.com/wiki/TeamPiped/Piped/Instances.md') + + tmp = re.findall( + '(?:[^\s\/]+\.)+[a-zA-Z]+ (?:\(Official\) )?\| (https:\/{2}(?:[^\s\/]+\.)+[a-zA-Z]+) \| ', r.text) + _list = {} + _list['normal'] = [] + _list['tor'] = [] + _list['i2p'] = [] + _list['loki'] = [] + for item in tmp: + try: + url = requests.get(item, timeout=5).url + if url.strip("/") == item: + continue + else: + _list['normal'].append(url) + except: + continue + mightyList['piped'] = _list print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Piped') @@ -110,7 +136,7 @@ def pipedMaterial(): 'https://raw.githubusercontent.com/mmjee/Piped-Material/master/README.md') tmp = re.findall( - r"\| (https?:\/{2}(?:.+\.)+[a-zA-Z0-9]*) +\|", r.text) + r"\| (https?:\/{2}(?:\S+\.)+[a-zA-Z0-9]*) +\|", r.text) pipedMaterialList = {} pipedMaterialList['normal'] = [] pipedMaterialList['tor'] = [] @@ -122,6 +148,13 @@ def pipedMaterial(): print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'pipedMaterial') +def cloudtube(): + json_object = json.dumps(mightyList, ensure_ascii=False, indent=2) + with open('./src/instances/cloudtube.json') as file: + mightyList['cloudtube'] = json.load(file) + print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'CloudTube') + + def proxitok(): r = requests.get( 'https://raw.githubusercontent.com/wiki/pablouser1/ProxiTok/Public-instances.md') @@ -156,30 +189,29 @@ def send(): def nitter(): - r = requests.get('https://github.com/zedeus/nitter/wiki/Instances') - soup = BeautifulSoup(r.text, 'html.parser') - markdownBody = soup.find(class_='markdown-body') - tables = markdownBody.find_all('table') - tables.pop(3) - tables.pop(3) + r = requests.get('https://raw.githubusercontent.com/wiki/zedeus/nitter/Instances.md') + tmp = re.findall( + r"(?:(?:\| \[(?:\S+\.)+[a-zA-Z]+\]\((https?:\/{2}(?:\S+\.)+[a-zA-Z]+)\/?\) (?:\((?:\S+ ?\S*)\) )? *\| (?:✅|🇩đŸ‡Ē) +\|(?:(?:\n)|(?: (?:❌)|(?: ✅)|(?: ❓)|(?: \[))))|(?:- \[(?:\S+\.)+(?:(?:i2p)|(?:loki))\]\((https?:\/{2}(?:\S+\.)(?:(?:i2p)|(?:loki)))\/?\)))", r.text) + nitterList = {} nitterList['normal'] = [] nitterList['tor'] = [] nitterList['i2p'] = [] nitterList['loki'] = [] - for table in tables: - tbody = table.find('tbody') - trs = tbody.find_all('tr') - for tr in trs: - td = tr.find('td') - a = td.find('a') - url = a.contents[0] - if url.endswith('.onion'): - url = 'http://' + url - nitterList['tor'].append(url) + for item in tmp: + for i in item: + if i == '': + continue else: - url = 'https://' + url - nitterList['normal'].append(url) + item = i + if re.search(torRegex, item): + nitterList['tor'].append(item) + elif re.search(i2pRegex, item): + nitterList['i2p'].append(item) + elif re.search(lokiRegex, item): + nitterList['loki'].append(item) + else: + nitterList['normal'].append(item) mightyList['nitter'] = nitterList print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Nitter') @@ -211,7 +243,7 @@ def libreddit(): r"\| \[.*\]\(([-a-zA-Z0-9@:%_\+.~#?&//=]{2,}\.[a-z]{2,}\b(?:\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?)\)*\|*[A-Z]{0,}.*\|.*\|", r.text) for item in tmp: - if re.search("https?:\/{2}(?:[a-zA-Z0-9]+\.)+onion(?:\/[a-zA-Z0-9]+)*\/?", item): + if re.search(torRegex, item): libredditList['tor'].append(item) else: libredditList['normal'].append(item) @@ -292,7 +324,7 @@ def quetre(): for item in tmp: - if re.search("https?:\/{2}(?:[a-zA-Z0-9]+\.)+onion(?:\/[a-zA-Z0-9]+)*\/?", item): + if re.search(torRegex, item): _list['tor'].append(item) else: _list['normal'].append(item) @@ -316,7 +348,7 @@ def libremdb(): for item in tmp: if item.strip() == "": continue - if re.search("https?:\/{2}(?:[a-zA-Z0-9]+\.)+onion(?:\/[a-zA-Z0-9]+)*\/?", item): + if re.search(torRegex, item): _list['tor'].append(item) else: _list['normal'].append(item) @@ -324,6 +356,19 @@ def libremdb(): mightyList['libremdb'] = _list print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Libremdb') +def simpleertube(): + r = requests.get('https://simple-web.org/instances/simpleertube') + _list = {} + _list['normal'] = [] + _list['tor'] = [] + _list['i2p'] = [] + _list['loki'] = [] + for item in r.text.strip().split('\n'): + _list['normal'].append('https://' + item) + + mightyList['simpleertube'] = _list + print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'SimpleerTube') + def simplytranslate(): r = requests.get('https://simple-web.org/instances/simplytranslate') @@ -381,12 +426,12 @@ def searx_searxng(): searxngList['i2p'] = [] searxngList['loki'] = [] for item in rJson['instances']: - if re.search("https?:\/{2}(?:[a-zA-Z0-9]+\.)+onion(?:\/[a-zA-Z0-9]+)*\/?", item[:-1]): + if re.search(torRegex, item[:-1]): if (rJson['instances'][item].get('generator') == 'searxng'): searxngList['tor'].append(item[:-1]) else: searxList['tor'].append(item[:-1]) - elif re.search("https?:\/{2}(?:[a-zA-Z0-9]+\.)+i2p(?:\/[a-zA-Z0-9]+)*\/?", item[:-1]): + elif re.search(torRegex, item[:-1]): if (rJson['instances'][item].get('generator') == 'searxng'): searxngList['i2p'].append(item[:-1]) else: @@ -412,9 +457,9 @@ def whoogle(): whoogleList['i2p'] = [] whoogleList['loki'] = [] for item in tmpList: - if re.search("https?:\/{2}(?:[a-zA-Z0-9]+\.)+onion(?:\/[a-zA-Z0-9]+)*\/?", item): + if re.search(torRegex, item): whoogleList['tor'].append(item) - elif re.search("https?:\/{2}(?:[a-zA-Z0-9]+\.)+i2p(?:\/[a-zA-Z0-9]+)*\/?", item): + elif re.search(torRegex, item): whoogleList['i2p'].append(item) else: whoogleList['normal'].append(item) @@ -437,9 +482,9 @@ def librex(): for item in tmp: if item.strip() == "": continue - elif re.search("https?:\/{2}(?:[a-zA-Z0-9]+\.)+onion(?:\/[a-zA-Z0-9]+)*\/?", item): + elif re.search(torRegex, item): _list['tor'].append(item) - elif re.search("https?:\/{2}(?:[a-zA-Z0-9]+\.)+i2p(?:\/[a-zA-Z0-9]+)*\/?", item): + elif re.search(i2pRegex, item): _list['i2p'].append(item) else: _list['normal'].append(item) @@ -481,16 +526,64 @@ def librarian(): url = item['url'] if url.strip() == "": continue - elif re.search("https?:\/{2}(?:[a-zA-Z0-9]+\.)+onion(?:\/[a-zA-Z0-9]+)*\/?", url): + elif re.search(torRegex, url): librarianList['tor'].append(url) - elif re.search("https?:\/{2}(?:[a-zA-Z0-9]+\.)+i2p(?:\/[a-zA-Z0-9]+)*\/?", url): + elif re.search(i2pRegex, url): librarianList['i2p'].append(url) + elif re.search(lokiRegex, url): + librarianList['loki'].append(url) else: librarianList['normal'].append(url) mightyList['librarian'] = librarianList print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Librarian') +def neuters(): + json_object = json.dumps(mightyList, ensure_ascii=False, indent=2) + with open('./src/instances/neuters.json') as file: + mightyList['neuters'] = json.load(file) + print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Neuters') + + +def beatbump(): + json_object = json.dumps(mightyList, ensure_ascii=False, indent=2) + with open('./src/instances/beatbump.json') as file: + mightyList['beatbump'] = json.load(file) + print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Beatbump') + + +def hyperpipe(): + r = requests.get( + 'https://codeberg.org/Hyperpipe/pages/raw/branch/main/api/frontend.json') + rJson = json.loads(r.text) + hyperpipeList = {} + hyperpipeList['normal'] = [] + hyperpipeList['tor'] = [] + hyperpipeList['i2p'] = [] + hyperpipeList['loki'] = [] + for item in rJson: + url = item['url'] + if url.strip() == "": + continue + elif re.search(torRegex, url): + hyperpipeList['tor'].append(url) + elif re.search(i2pRegex, url): + hyperpipeList['i2p'].append(url) + elif re.search(lokiRegex, url): + hyperpipeList['loki'].append(url) + else: + hyperpipeList['normal'].append(url) + mightyList['hyperpipe'] = hyperpipeList + print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Hyperpipe') + + +def facil(): + json_object = json.dumps(mightyList, ensure_ascii=False, indent=2) + with open('./src/instances/facil.json') as file: + mightyList['facil'] = json.load(file) + print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'FacilMap') + + def peertube(): r = requests.get( 'https://instances.joinpeertube.org/api/v1/instances?start=0&count=1045&sort=-createdAt') @@ -515,6 +608,7 @@ def isValid(url): # This code is contributed by avanitrachhadiya2155 invidious() piped() pipedMaterial() +cloudtube() proxitok() send() nitter() @@ -532,6 +626,11 @@ whoogle() librex() rimgo() librarian() +neuters() +beatbump() +hyperpipe() +facil() +simpleertube() mightyList = filterLastSlash(mightyList) cloudflare = [] diff --git a/src/instances/neuters.json b/src/instances/neuters.json new file mode 100644 index 0000000..9e224a5 --- /dev/null +++ b/src/instances/neuters.json @@ -0,0 +1,6 @@ +{ + "normal": ["https://neuters.de"], + "tor": [], + "i2p": [], + "loki": [] +} diff --git a/src/instances/piped.json b/src/instances/piped.json deleted file mode 100644 index 2f742ff..0000000 --- a/src/instances/piped.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "normal": [ - "https://piped.kavin.rocks", - "https://piped.tokhmi.xyz", - "https://piped.moomoo.me", - "https://il.ax", - "https://piped.syncpundit.com", - "https://piped.mha.fi", - "https://piped.shimul.me", - "https://pipedus.palash.dev/", - "https://yt.jae.fi", - "https://piped.mint.lgbt", - "https://piped.privacy.com.de", - "https://piped.esmailelbob.xyz" - ], - "tor": [ - "http://piped2bbch4xslbl2ckr6k62q56kon56ffowxaqzy42ai22a4sash3ad.onion" - ], - "i2p": [], - "loki": [] -} \ No newline at end of file diff --git a/src/manifest.json b/src/manifest.json index 6851552..cc804f9 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -1,81 +1,72 @@ { - "name": "__MSG_extensionName__", - "description": "__MSG_extensionDescription__", - "version": "2.2.1", - "manifest_version": 2, - "browser_specific_settings": { - "gecko": { - "id": "7esoorv3@alefvanoon.anonaddy.me", - "strict_min_version": "67.0" - } - }, - "background": { - "page": "pages/background/background.html", - "persistent": true - }, - "icons": { - "16": "assets/images/libredirect-16.png", - "32": "assets/images/libredirect-32.png", - "48": "assets/images/libredirect-48.png", - "128": "assets/images/libredirect-128.png" - }, - "permissions": [ - "webRequest", - "webRequestBlocking", - "storage", - "unlimitedStorage", - "cookies", - "clipboardWrite", - "contextMenus", - "" - ], - "browser_action": { - "default_title": "__MSG_extensionName__", - "browser_style": false, - "default_popup": "pages/popup/popup.html", - "default_icon": { - "16": "assets/images/libredirect-16.png", - "32": "assets/images/libredirect-32.png", - "48": "assets/images/libredirect-48.png", - "128": "assets/images/libredirect-128.png" - } - }, - "options_ui": { - "page": "pages/options/index.html", - "browser_style": false, - "open_in_tab": true - }, - "chrome_settings_overrides": { - "search_provider": { - "name": "__MSG_extensionName__", - "keyword": "libredirect", - "favicon_url": "https://raw.githubusercontent.com/libredirect/libredirect/master/src/assets/images/libredirect-16.png", - "search_url": "https://search.libredirect.invalid/?q={searchTerms}", - "encoding": "UTF-8", - "is_default": false - } - }, - "commands": { - "switchInstance": { - "suggested_key": { - "default": "Alt+Shift+L" - }, - "description": "__MSG_switchInstance__" - }, - "copyRaw": { - "suggested_key": { - "default": "Alt+Shift+C" - }, - "description": "Copies the original link. Ex: Copies the original twitter link while in the nitter website" - }, - "unify": { - "suggested_key": { - "default": "Alt+Shift+U" - }, - "description": "Copies the preferences (cookies, localStorage) from the current opened instance and copy them to all the other selected instances" - } - }, - "default_locale": "en", - "update_url": "https://raw.githubusercontent.com/libredirect/libredirect/master/src/updates/updates.xml", - "key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAroWDSoSRZ1scj+eJRrvnhJbrqXTKnhQuxs6+AJg16sqr0bsMdFV+MSY4i4xnK+K5WOYkBliWXgUyk/wzicoAjOnSJddrL/Md4FuWHI2NVIkrlsLOrYkygi5OLqGPajRH/w8Cdmg7KzEpXe/OnYV0/qS8li8huEdTzdeLdhfbiVl1j3DOr4OJALQ7mPeeNFHFo/oVQ+OkSezWLezA5jUGfhtzPYV6u1TXzX7lCi8E/BbDbwkvvXOMcjXCv08kjdLOY2djCA2a6zr0xAb3q8DlexAMZ8vMof7AQRFtBKhLc9n9VFoipMMdBOVQQj/eIcRILBrmkcZNnJxFKiHNJ+NcZQIDAQAB" -} \ No newline at end of file + "name": "__MSG_extensionName__", + "description": "__MSG_extensionDescription__", + "version": "2.2.1", + "manifest_version": 2, + "browser_specific_settings": { + "gecko": { + "id": "7esoorv3@alefvanoon.anonaddy.me", + "strict_min_version": "67.0" + } + }, + "background": { + "page": "pages/background/background.html", + "persistent": true + }, + "icons": { + "16": "assets/images/libredirect-16.png", + "32": "assets/images/libredirect-32.png", + "48": "assets/images/libredirect-48.png", + "128": "assets/images/libredirect-128.png" + }, + "permissions": ["webRequest", "webRequestBlocking", "storage", "unlimitedStorage", "cookies", "clipboardWrite", "contextMenus", ""], + "browser_action": { + "default_title": "__MSG_extensionName__", + "browser_style": false, + "default_popup": "pages/popup/popup.html", + "default_icon": { + "16": "assets/images/libredirect-16.png", + "32": "assets/images/libredirect-32.png", + "48": "assets/images/libredirect-48.png", + "128": "assets/images/libredirect-128.png" + } + }, + "options_ui": { + "page": "pages/options/index.html", + "browser_style": false, + "open_in_tab": true + }, + "chrome_settings_overrides": { + "search_provider": { + "name": "__MSG_extensionName__", + "keyword": "libredirect", + "favicon_url": "https://raw.githubusercontent.com/libredirect/libredirect/master/src/assets/images/libredirect-16.png", + "search_url": "https://search.libredirect.invalid/?q={searchTerms}", + "encoding": "UTF-8", + "is_default": false + } + }, + "commands": { + "switchInstance": { + "suggested_key": { + "default": "Alt+Shift+L" + }, + "description": "__MSG_switchInstance__" + }, + "copyRaw": { + "suggested_key": { + "default": "Alt+Shift+C" + }, + "description": "Copies the original link. Ex: Copies the original twitter link while in the nitter website" + }, + "unify": { + "suggested_key": { + "default": "Alt+Shift+U" + }, + "description": "Copies the preferences (cookies, localStorage) from the current opened instance and copy them to all the other selected instances" + } + }, + "default_locale": "en", + "update_url": "https://raw.githubusercontent.com/libredirect/libredirect/master/src/updates/updates.xml", + "key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAroWDSoSRZ1scj+eJRrvnhJbrqXTKnhQuxs6+AJg16sqr0bsMdFV+MSY4i4xnK+K5WOYkBliWXgUyk/wzicoAjOnSJddrL/Md4FuWHI2NVIkrlsLOrYkygi5OLqGPajRH/w8Cdmg7KzEpXe/OnYV0/qS8li8huEdTzdeLdhfbiVl1j3DOr4OJALQ7mPeeNFHFo/oVQ+OkSezWLezA5jUGfhtzPYV6u1TXzX7lCi8E/BbDbwkvvXOMcjXCv08kjdLOY2djCA2a6zr0xAb3q8DlexAMZ8vMof7AQRFtBKhLc9n9VFoipMMdBOVQQj/eIcRILBrmkcZNnJxFKiHNJ+NcZQIDAQAB" +} diff --git a/src/pages/background/background.html b/src/pages/background/background.html index c9ae2a8..542df18 100644 --- a/src/pages/background/background.html +++ b/src/pages/background/background.html @@ -1,9 +1,7 @@ - - - - - - - \ No newline at end of file + + + + + diff --git a/src/pages/background/background.js b/src/pages/background/background.js index 293a2c8..359a912 100644 --- a/src/pages/background/background.js +++ b/src/pages/background/background.js @@ -1,263 +1,252 @@ -"use strict"; +"use strict" -import generalHelper from "../../assets/javascripts/general.js"; -import utils from "../../assets/javascripts/utils.js"; +import generalHelper from "../../assets/javascripts/general.js" +import utils from "../../assets/javascripts/utils.js" -import youtubeHelper from "../../assets/javascripts/youtube/youtube.js"; -import youtubeMusicHelper from "../../assets/javascripts/youtubeMusic.js"; -import twitterHelper from "../../assets/javascripts/twitter.js"; -import instagramHelper from "../../assets/javascripts/instagram.js"; -import redditHelper from "../../assets/javascripts/reddit.js"; -import searchHelper from "../../assets/javascripts/search.js"; -import translateHelper from "../../assets/javascripts/translate/translate.js"; -import mapsHelper from "../../assets/javascripts/maps.js"; -import wikipediaHelper from "../../assets/javascripts/wikipedia.js"; -import mediumHelper from "../../assets/javascripts/medium.js"; -import quoraHelper from "../../assets/javascripts/quora.js"; -import libremdbHelper from "../../assets/javascripts/imdb.js"; -import reutersHelper from "../../assets/javascripts/reuters.js"; -import imgurHelper from "../../assets/javascripts/imgur.js"; -import tiktokHelper from "../../assets/javascripts/tiktok.js"; -import sendTargetsHelper from "../../assets/javascripts/sendTargets.js"; -import peertubeHelper from "../../assets/javascripts/peertube.js"; -import lbryHelper from "../../assets/javascripts/lbry.js"; +import youtubeHelper from "../../assets/javascripts/youtube/youtube.js" +import youtubeMusicHelper from "../../assets/javascripts/youtubeMusic.js" +import twitterHelper from "../../assets/javascripts/twitter.js" +import instagramHelper from "../../assets/javascripts/instagram.js" +import redditHelper from "../../assets/javascripts/reddit.js" +import searchHelper from "../../assets/javascripts/search.js" +import translateHelper from "../../assets/javascripts/translate/translate.js" +import mapsHelper from "../../assets/javascripts/maps.js" +import wikipediaHelper from "../../assets/javascripts/wikipedia.js" +import mediumHelper from "../../assets/javascripts/medium.js" +import quoraHelper from "../../assets/javascripts/quora.js" +import libremdbHelper from "../../assets/javascripts/imdb.js" +import reutersHelper from "../../assets/javascripts/reuters.js" +import imgurHelper from "../../assets/javascripts/imgur.js" +import tiktokHelper from "../../assets/javascripts/tiktok.js" +import sendTargetsHelper from "../../assets/javascripts/sendTargets.js" +import peertubeHelper from "../../assets/javascripts/peertube.js" +import lbryHelper from "../../assets/javascripts/lbry.js" +window.browser = window.browser || window.chrome -window.browser = window.browser || window.chrome; +browser.runtime.onInstalled.addListener(details => { + function initDefaults() { + fetch("/instances/blacklist.json") + .then(response => response.text()) + .then(async data => { + browser.storage.local.clear(() => { + browser.storage.local.set({ cloudflareBlackList: JSON.parse(data).cloudflare }, () => { + browser.storage.local.set({ authenticateBlackList: JSON.parse(data).authenticate }, () => { + generalHelper.initDefaults() + youtubeHelper.initDefaults() + youtubeMusicHelper.initDefaults() + twitterHelper.initDefaults() + instagramHelper.initDefaults() + mapsHelper.initDefaults() + searchHelper.initDefaults() + translateHelper.initDefaults() + mediumHelper.initDefaults() + quoraHelper.initDefaults() + libremdbHelper.initDefaults() + reutersHelper.initDefaults() + redditHelper.initDefaults() + wikipediaHelper.initDefaults() + imgurHelper.initDefaults() + tiktokHelper.initDefaults() + sendTargetsHelper.initDefaults() + peertubeHelper.initDefaults() + lbryHelper.initDefaults() + }) + }) + }) + }) + } + if (details.reason == "install") initDefaults() -browser.runtime.onInstalled.addListener( - details => { - function initDefaults() { - fetch('/instances/blacklist.json').then(response => response.text()).then(async data => { - browser.storage.local.clear( - () => { - browser.storage.local.set({ cloudflareBlackList: JSON.parse(data).cloudflare }, - () => { - browser.storage.local.set({ authenticateBlackList: JSON.parse(data).authenticate }, - () => { - generalHelper.initDefaults(); - youtubeHelper.initDefaults(); - youtubeMusicHelper.initDefaults(); - twitterHelper.initDefaults(); - instagramHelper.initDefaults(); - mapsHelper.initDefaults(); - searchHelper.initDefaults(); - translateHelper.initDefaults(); - mediumHelper.initDefaults(); - quoraHelper.initDefaults(); - libremdbHelper.initDefaults(); - reutersHelper.initDefaults(); - redditHelper.initDefaults(); - wikipediaHelper.initDefaults(); - imgurHelper.initDefaults(); - tiktokHelper.initDefaults(); - sendTargetsHelper.initDefaults(); - peertubeHelper.initDefaults(); - lbryHelper.initDefaults(); - }) - }) - }); - }) - }; - if (details.reason == 'install') initDefaults(); + // if (details.reason == 'install' || (details.reason == "update" && details.previousVersion != browser.runtime.getManifest().version)) { + // if (details.reason == "update") + // browser.storage.local.get(null, r => { + // if (r.theme) { + // const old = encodeURIComponent(JSON.stringify(r)) + // browser.tabs.create({ url: browser.runtime.getURL(`/pages/background/reset_warning.html?data=${old}`) }); + // } + // initDefaults(); + // }) + // else initDefaults(); + // } +}) - // if (details.reason == 'install' || (details.reason == "update" && details.previousVersion != browser.runtime.getManifest().version)) { - // if (details.reason == "update") - // browser.storage.local.get(null, r => { - // if (r.theme) { - // const old = encodeURIComponent(JSON.stringify(r)) - // browser.tabs.create({ url: browser.runtime.getURL(`/pages/background/reset_warning.html?data=${old}`) }); - // } - // initDefaults(); - // }) - // else initDefaults(); - // } - } +youtubeHelper.pasteInvidiousCookies() +translateHelper.pasteSimplyTranslateCookies() +twitterHelper.pasteNitterCookies() +wikipediaHelper.pasteWikilessCookies() +searchHelper.pasteSearxCookies() +searchHelper.pasteSearxngCookies() +searchHelper.pasteLibrexCookies() +redditHelper.pasteLibredditCookies() +redditHelper.pasteTedditCookies() +tiktokHelper.pasteProxiTokCookies() + +let BYPASSTABs = [] +browser.webRequest.onBeforeRequest.addListener( + details => { + const url = new URL(details.url) + if (new RegExp(/^chrome-extension:\/{2}.*\/instances\/.*.json$/).test(url.href) && details.type == "xmlhttprequest") return + let initiator + try { + if (details.originUrl) initiator = new URL(details.originUrl) + else if (details.initiator) initiator = new URL(details.initiator) + } catch { + return null + } + + let newUrl = youtubeMusicHelper.redirect(url, details.type) + if (!newUrl) newUrl = youtubeHelper.redirect(url, details.type, initiator) + if (!newUrl) newUrl = twitterHelper.redirect(url, details.type, initiator) + if (!newUrl) newUrl = instagramHelper.redirect(url, details.type, initiator) + if (!newUrl) newUrl = mapsHelper.redirect(url, initiator) + if (!newUrl) newUrl = redditHelper.redirect(url, details.type, initiator) + if (!newUrl) newUrl = mediumHelper.redirect(url, details.type, initiator) + if (!newUrl) newUrl = quoraHelper.redirect(url, details.type, initiator) + if (!newUrl) newUrl = libremdbHelper.redirect(url, details.type, initiator) + if (!newUrl) newUrl = reutersHelper.redirect(url, details.type, initiator) + if (!newUrl) newUrl = imgurHelper.redirect(url, details.type, initiator) + if (!newUrl) newUrl = tiktokHelper.redirect(url, details.type, initiator) + if (!newUrl) newUrl = sendTargetsHelper.redirect(url, details.type, initiator) + if (!newUrl) newUrl = peertubeHelper.redirect(url, details.type, initiator) + if (!newUrl) newUrl = lbryHelper.redirect(url, details.type, initiator) + if (!newUrl) newUrl = translateHelper.redirect(url) + if (!newUrl) newUrl = searchHelper.redirect(url) + if (!newUrl) newUrl = wikipediaHelper.redirect(url) + + if (details.frameAncestors && details.frameAncestors.length > 0 && generalHelper.isException(new URL(details.frameAncestors[0].url))) newUrl = null + + if (generalHelper.isException(url)) newUrl = "BYPASSTAB" + if (BYPASSTABs.includes(details.tabId)) newUrl = null + + if (newUrl) { + if (newUrl === "CANCEL") { + console.log(`Canceled ${url}`) + return { cancel: true } + } + if (newUrl === "BYPASSTAB") { + console.log(`Bypassed ${details.tabId} ${url}`) + if (!BYPASSTABs.includes(details.tabId)) BYPASSTABs.push(details.tabId) + return null + } + console.info("Redirecting", url.href, "=>", newUrl) + return { redirectUrl: newUrl } + } + return null + }, + { urls: [""] }, + ["blocking"] ) -youtubeHelper.pasteInvidiousCookies(); -translateHelper.pasteSimplyTranslateCookies(); -twitterHelper.pasteNitterCookies(); -wikipediaHelper.pasteWikilessCookies(); -searchHelper.pasteSearxCookies(); -searchHelper.pasteSearxngCookies(); -searchHelper.pasteLibrexCookies(); -redditHelper.pasteLibredditCookies(); -redditHelper.pasteTedditCookies(); -tiktokHelper.pasteProxiTokCookies(); - - -let BYPASSTABs = []; -browser.webRequest.onBeforeRequest.addListener( - details => { - const url = new URL(details.url); - if (new RegExp(/^chrome-extension:\/{2}.*\/instances\/.*.json$/).test(url.href) && details.type == 'xmlhttprequest') return; - let initiator; - try { - if (details.originUrl) initiator = new URL(details.originUrl); - else if (details.initiator) initiator = new URL(details.initiator); - } - catch { return null; } - - let newUrl = youtubeMusicHelper.redirect(url, details.type) - if (!newUrl) newUrl = youtubeHelper.redirect(url, details.type, initiator) - if (!newUrl) newUrl = twitterHelper.redirect(url, details.type, initiator); - if (!newUrl) newUrl = instagramHelper.redirect(url, details.type, initiator); - if (!newUrl) newUrl = mapsHelper.redirect(url, initiator); - if (!newUrl) newUrl = redditHelper.redirect(url, details.type, initiator); - if (!newUrl) newUrl = mediumHelper.redirect(url, details.type, initiator); - if (!newUrl) newUrl = quoraHelper.redirect(url, details.type, initiator); - if (!newUrl) newUrl = libremdbHelper.redirect(url, details.type, initiator); - if (!newUrl) newUrl = reutersHelper.redirect(url, details.type, initiator); - if (!newUrl) newUrl = imgurHelper.redirect(url, details.type, initiator); - if (!newUrl) newUrl = tiktokHelper.redirect(url, details.type, initiator); - if (!newUrl) newUrl = sendTargetsHelper.redirect(url, details.type, initiator); - if (!newUrl) newUrl = peertubeHelper.redirect(url, details.type, initiator); - if (!newUrl) newUrl = lbryHelper.redirect(url, details.type, initiator); - if (!newUrl) newUrl = translateHelper.redirect(url); - if (!newUrl) newUrl = searchHelper.redirect(url) - if (!newUrl) newUrl = wikipediaHelper.redirect(url); - - if ( - details.frameAncestors && details.frameAncestors.length > 0 && - generalHelper.isException(new URL(details.frameAncestors[0].url)) - ) newUrl = null; - - if (generalHelper.isException(url)) newUrl = 'BYPASSTAB'; - if (BYPASSTABs.includes(details.tabId)) newUrl = null; - - if (newUrl) { - if (newUrl === 'CANCEL') { - console.log(`Canceled ${url}`); - return { cancel: true }; - } - if (newUrl === 'BYPASSTAB') { - console.log(`Bypassed ${details.tabId} ${url}`); - if (!BYPASSTABs.includes(details.tabId)) BYPASSTABs.push(details.tabId); - return null; - } - console.info("Redirecting", url.href, "=>", newUrl); - return { redirectUrl: newUrl }; - } - return null; - }, - { urls: [""], }, - ["blocking"] -); - -browser.tabs.onRemoved.addListener( - tabId => { - const i = BYPASSTABs.indexOf(tabId); - if (i > -1) { - BYPASSTABs.splice(i, 1); - console.log("Removed BYPASSTABs", tabId); - } - } -); +browser.tabs.onRemoved.addListener(tabId => { + const i = BYPASSTABs.indexOf(tabId) + if (i > -1) { + BYPASSTABs.splice(i, 1) + console.log("Removed BYPASSTABs", tabId) + } +}) browser.webRequest.onHeadersReceived.addListener( - e => { - let response = youtubeHelper.removeXFrameOptions(e); - if (!response) response = twitterHelper.removeXFrameOptions(e); - return response; - }, - { urls: [""] }, - ["blocking", "responseHeaders"] -); + e => { + let response = youtubeHelper.removeXFrameOptions(e) + if (!response) response = twitterHelper.removeXFrameOptions(e) + return response + }, + { urls: [""] }, + ["blocking", "responseHeaders"] +) async function redirectOfflineInstance(url, tabId) { - 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 imgurHelper.switchInstance(url); - if (!newUrl) newUrl = await wikipediaHelper.switchInstance(url); - if (!newUrl) newUrl = await peertubeHelper.switchInstance(url); - if (!newUrl) newUrl = await lbryHelper.switchInstance(url); + 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 imgurHelper.switchInstance(url, true) + if (!newUrl) newUrl = await wikipediaHelper.switchInstance(url, true) + if (!newUrl) newUrl = await peertubeHelper.switchInstance(url, true) + if (!newUrl) newUrl = await lbryHelper.switchInstance(url, true) + if (!newUrl) newUrl = await youtubeMusicHelper.switchInstance(url, true) - if (newUrl) { - if (counter >= 5) { - browser.tabs.update(tabId, { url: `/pages/errors/instance_offline.html?url=${encodeURIComponent(newUrl)}` }); - counter = 0; - } else { - browser.tabs.update(tabId, { url: newUrl }); - counter++; - } - } + if (newUrl) { + if (counter >= 5) { + browser.tabs.update(tabId, { + url: `/pages/errors/instance_offline.html?url=${encodeURIComponent(newUrl)}`, + }) + counter = 0 + } else { + browser.tabs.update(tabId, { url: newUrl }) + counter++ + } + } } -let counter = 0; +let counter = 0 function isAutoRedirect() { - return new Promise(resolve => browser.storage.local.get('autoRedirect', r => resolve(r.autoRedirect == true))) + return new Promise(resolve => browser.storage.local.get("autoRedirect", r => resolve(r.autoRedirect == true))) } browser.webRequest.onResponseStarted.addListener( - async details => { - if (!await isAutoRedirect()) return null; - if (details.type == 'main_frame' && details.statusCode >= 500) redirectOfflineInstance(new URL(details.url), details.tabId); - }, - { urls: [""] } + async details => { + if (!(await isAutoRedirect())) return null + if (details.type == "main_frame" && details.statusCode >= 500) redirectOfflineInstance(new URL(details.url), details.tabId) + }, + { urls: [""] } ) browser.webRequest.onErrorOccurred.addListener( - async details => { - if (!await isAutoRedirect()) return; - if (details.type == 'main_frame') redirectOfflineInstance(new URL(details.url), details.tabId); - }, - { urls: [""] } + async details => { + if (!(await isAutoRedirect())) return + if (details.type == "main_frame") redirectOfflineInstance(new URL(details.url), details.tabId) + }, + { urls: [""] } ) -browser.commands.onCommand.addListener( - command => { - if (command === 'switchInstance') utils.switchInstance(); - else if (command == 'copyRaw') utils.copyRaw(); - else if (command == 'unify') utils.unify(); - } -) +browser.commands.onCommand.addListener(command => { + if (command === "switchInstance") utils.switchInstance() + else if (command == "copyRaw") utils.copyRaw() + else if (command == "unify") utils.unify() +}) browser.contextMenus.create({ - id: "settings", - title: browser.i18n.getMessage("Settings"), - contexts: ["browser_action"] -}); + id: "settings", + title: browser.i18n.getMessage("Settings"), + contexts: ["browser_action"], +}) browser.contextMenus.create({ - id: "switchInstance", - title: browser.i18n.getMessage("switchInstance"), - contexts: ["browser_action"] -}); + id: "switchInstance", + title: browser.i18n.getMessage("switchInstance"), + contexts: ["browser_action"], +}) browser.contextMenus.create({ - id: "copyRaw", - title: browser.i18n.getMessage("copyRaw"), - contexts: ["browser_action"] -}); + id: "copyRaw", + title: browser.i18n.getMessage("copyRaw"), + contexts: ["browser_action"], +}) browser.contextMenus.create({ - id: "unify", - title: browser.i18n.getMessage("unifySettings"), - contexts: ["browser_action"] -}); + id: "unify", + title: browser.i18n.getMessage("unifySettings"), + contexts: ["browser_action"], +}) - -browser.contextMenus.onClicked.addListener( - (info) => { - if (info.menuItemId == 'switchInstance') utils.switchInstance(); - else if (info.menuItemId == 'settings') browser.runtime.openOptionsPage() - else if (info.menuItemId == 'copyRaw') utils.copyRaw(); - else if (info.menuItemId == 'unify') utils.unify(); - } -); +browser.contextMenus.onClicked.addListener(info => { + if (info.menuItemId == "switchInstance") utils.switchInstance() + else if (info.menuItemId == "settings") browser.runtime.openOptionsPage() + else if (info.menuItemId == "copyRaw") utils.copyRaw() + else if (info.menuItemId == "unify") utils.unify() +}) browser.runtime.onMessage.addListener((message, sender, sendResponse) => { - if (message.function === 'unify') utils.unify(false).then(r => sendResponse({ response: r })) - return true; -}); + if (message.function === "unify") utils.unify(false).then(r => sendResponse({ response: r })) + return true +}) -browser.storage.local.set({"version": browser.runtime.getManifest().version}) +browser.storage.local.set({ version: browser.runtime.getManifest().version }) diff --git a/src/pages/background/incognito.html b/src/pages/background/incognito.html index 7b1c0ee..227d99e 100644 --- a/src/pages/background/incognito.html +++ b/src/pages/background/incognito.html @@ -1,37 +1,35 @@ + + + + + + Initializing Cookies + + + - div { - text-align: center; - } - - - - -
-

Initializing Cookies...

-
- - - - \ No newline at end of file + +
+

Initializing Cookies...

+
+ + + diff --git a/src/pages/background/incognito.js b/src/pages/background/incognito.js index f42eadc..c7ed2b7 100644 --- a/src/pages/background/incognito.js +++ b/src/pages/background/incognito.js @@ -1,22 +1,22 @@ -import youtubeHelper from "../../assets/javascripts/youtube/youtube.js"; -import twitterHelper from "../../assets/javascripts/twitter.js"; -import redditHelper from "../../assets/javascripts/reddit.js"; -import searchHelper from "../../assets/javascripts/search.js"; -import translateHelper from "../../assets/javascripts/translate/translate.js"; -import wikipediaHelper from "../../assets/javascripts/wikipedia.js"; -import tiktokHelper from "../../assets/javascripts/tiktok.js"; +import youtubeHelper from "../../assets/javascripts/youtube/youtube.js" +import twitterHelper from "../../assets/javascripts/twitter.js" +import redditHelper from "../../assets/javascripts/reddit.js" +import searchHelper from "../../assets/javascripts/search.js" +import translateHelper from "../../assets/javascripts/translate/translate.js" +import wikipediaHelper from "../../assets/javascripts/wikipedia.js" +import tiktokHelper from "../../assets/javascripts/tiktok.js" -window.browser = window.browser || window.chrome; +window.browser = window.browser || window.chrome -await youtubeHelper.pasteInvidiousCookies(); -await translateHelper.pasteSimplyTranslateCookies(); -await twitterHelper.pasteNitterCookies(); -await wikipediaHelper.pasteWikilessCookies(); -await searchHelper.pasteSearxCookies(); -await searchHelper.pasteSearxngCookies(); -await searchHelper.pasteLibrexCookies(); -await redditHelper.pasteLibredditCookies(); -await redditHelper.pasteTedditCookies(); -await tiktokHelper.pasteProxiTokCookies(); +await youtubeHelper.pasteInvidiousCookies() +await translateHelper.pasteSimplyTranslateCookies() +await twitterHelper.pasteNitterCookies() +await wikipediaHelper.pasteWikilessCookies() +await searchHelper.pasteSearxCookies() +await searchHelper.pasteSearxngCookies() +await searchHelper.pasteLibrexCookies() +await redditHelper.pasteLibredditCookies() +await redditHelper.pasteTedditCookies() +await tiktokHelper.pasteProxiTokCookies() window.close() diff --git a/src/pages/background/reset_warning.html b/src/pages/background/reset_warning.html index d2d493e..f1881ed 100644 --- a/src/pages/background/reset_warning.html +++ b/src/pages/background/reset_warning.html @@ -1,66 +1,59 @@ + + + + + Reset Warning + + + - img { - width: 90px; - height: auto; - } - + +
+ - +

All settings have been reset as they're incompatible with the previous version.

+

Sorry for the inconvenience, but we're going in a fast development process and can't support nor convert older settings. It will reach a stable plateau though.

- -
- - -

All settings have been reset as they're incompatible with the - previous version.

-

Sorry for the inconvenience, but we're going in a fast development process and can't - support nor convert older settings. It will reach a stable plateau though.

- - - - - - - -   - Export Settings - -
- - - - \ No newline at end of file + + + + +   + Export Settings + +
+ + + diff --git a/src/pages/background/reset_warning.js b/src/pages/background/reset_warning.js index 15e3a59..9ce49c9 100644 --- a/src/pages/background/reset_warning.js +++ b/src/pages/background/reset_warning.js @@ -1,11 +1,7 @@ -let params = new URLSearchParams(location.search); +let params = new URLSearchParams(location.search) -const resultString = JSON.stringify( - JSON.parse(params.get('data')), - null, - ' ' -); +const resultString = JSON.stringify(JSON.parse(params.get("data")), null, " ") -let exportSettingsElement = document.getElementById("export-settings"); -exportSettingsElement.href = 'data:application/json;base64,' + btoa(resultString); -exportSettingsElement.download = 'libredirect-settings.json'; +let exportSettingsElement = document.getElementById("export-settings") +exportSettingsElement.href = "data:application/json;base64," + btoa(resultString) +exportSettingsElement.download = "libredirect-settings.json" diff --git a/src/pages/errors/instance_offline.html b/src/pages/errors/instance_offline.html index 3b7e46d..4f27445 100644 --- a/src/pages/errors/instance_offline.html +++ b/src/pages/errors/instance_offline.html @@ -1,41 +1,38 @@ + + + + + Instance is offline + + + - div { - text-align: center; - } - + +
+

+ This instance is offline, you'll be redirected after 2 seconds +

+ +
- - - -
-

This instance is offline, you'll be redirected - after 2 seconds -

- -
- - - - - \ No newline at end of file + + + diff --git a/src/pages/errors/instance_offline.js b/src/pages/errors/instance_offline.js index 8137ccd..fadb768 100644 --- a/src/pages/errors/instance_offline.js +++ b/src/pages/errors/instance_offline.js @@ -1,25 +1,20 @@ -import localise from "../../assets/javascripts/localise.js"; +import localise from "../../assets/javascripts/localise.js" - -const params = new Proxy( - new URLSearchParams(window.location.search), - { get: (searchParams, prop) => searchParams.get(prop) } -); - -let number = document.getElementById("number"); -setTimeout(() => number.innerHTML = '1', 1000); -setTimeout( - () => { - number.innerHTML = '0' - if (!isCanceled) window.location = params.url; - }, - 2000 -); - -let isCanceled = false; -document.getElementById("cancel").addEventListener("click", () => { - isCanceled = true; - document.getElementById("message").innerHTML = browser.i18n.getMessage('redirectionCanceled'); +const params = new Proxy(new URLSearchParams(window.location.search), { + get: (searchParams, prop) => searchParams.get(prop), }) -localise.localisePage(); \ No newline at end of file +let number = document.getElementById("number") +setTimeout(() => (number.innerHTML = "1"), 1000) +setTimeout(() => { + number.innerHTML = "0" + if (!isCanceled) window.location = params.url +}, 2000) + +let isCanceled = false +document.getElementById("cancel").addEventListener("click", () => { + isCanceled = true + document.getElementById("message").innerHTML = browser.i18n.getMessage("redirectionCanceled") +}) + +localise.localisePage() diff --git a/src/pages/options/index.html b/src/pages/options/index.html index 29e454b..a1e14d2 100644 --- a/src/pages/options/index.html +++ b/src/pages/options/index.html @@ -285,6 +285,7 @@ + @@ -296,6 +297,7 @@ +
@@ -595,6 +597,102 @@
+
+
+
+
+

Default Instances

+
+
+
+
+

Custom Instances

+
+
+
+ + +
+
+
+
+ + +
+
+
+
+

Default Instances

+
+
+
+
+

Custom Instances

+
+
+
+ + +
+
+
+
+
+
+

Default Instances

+
+
+
+
+

Custom Instances

+
+
+
+ + +
+
+
+
+
+
+

Default Instances

+
+
+
+
+

Custom Instances

+
+
+
+ + +
+
+
+
+
@@ -606,6 +704,13 @@

Enable

+
+

Frontend

+ +

@@ -619,7 +724,7 @@
- +
+
+
+
+
+

Default Instances

+
+
+
+
+

Custom Instances

+
+ +
+ + +
+ +
+
+ + +
+
+
+
+

Default Instances

+
+
+
+
+

Custom Instances

+
+
+
+ + +
+
+
+
+
+
+

Default Instances

+
+
+
+
+

Custom Instances

+
+
+
+ + +
+
+
+
+
+
+

Default Instances

+
+
+
+
+

Custom Instances

+
+
+
+ + +
+
+
+
+
diff --git a/src/pages/options/index.js b/src/pages/options/index.js index 39f9c8f..409fa5b 100644 --- a/src/pages/options/index.js +++ b/src/pages/options/index.js @@ -1,24 +1,23 @@ -for (const a of document.getElementById('links').getElementsByTagName('a')) { - a.addEventListener('click', e => { - const path = a.getAttribute('href').replace('#', ''); - loadPage(path); - e.preventDefault(); - }) +for (const a of document.getElementById("links").getElementsByTagName("a")) { + a.addEventListener("click", e => { + const path = a.getAttribute("href").replace("#", "") + loadPage(path) + e.preventDefault() + }) } function loadPage(path) { - for (const section of document.getElementById('pages').getElementsByTagName('section')) - section.style.display = 'none'; - document.getElementById(`${path}_page`).style.display = 'block'; + for (const section of document.getElementById("pages").getElementsByTagName("section")) section.style.display = "none" + document.getElementById(`${path}_page`).style.display = "block" - for (const a of document.getElementById('links').getElementsByTagName('a')) - if (a.getAttribute('href') == `#${path}`) a.classList.add('selected') - else a.classList.remove('selected') + for (const a of document.getElementById("links").getElementsByTagName("a")) + if (a.getAttribute("href") == `#${path}`) a.classList.add("selected") + else a.classList.remove("selected") - let stateObj = { id: "100" }; - window.history.pushState(stateObj, "Page 2", `/pages/options/index.html#${path}`); + let stateObj = { id: "100" } + window.history.pushState(stateObj, "Page 2", `/pages/options/index.html#${path}`) } const r = window.location.href.match(/#(.*)/) -if (r) loadPage(r[1]); -else loadPage('general'); \ No newline at end of file +if (r) loadPage(r[1]) +else loadPage("general") diff --git a/src/pages/options/init.js b/src/pages/options/init.js index daea296..5b679da 100644 --- a/src/pages/options/init.js +++ b/src/pages/options/init.js @@ -1,38 +1,35 @@ -window.browser = window.browser || window.chrome; +window.browser = window.browser || window.chrome -import localise from "../../assets/javascripts/localise.js"; +import localise from "../../assets/javascripts/localise.js" function changeTheme() { - return new Promise(resolve => { - browser.storage.local.get( - "theme", - r => { - switch (r.theme) { - case "dark": - document.body.classList.add("dark-theme"); - document.body.classList.remove("light-theme"); - break; - case "light": - document.body.classList.add("light-theme"); - document.body.classList.remove("dark-theme"); - break; - default: - if (matchMedia("(prefers-color-scheme: light)").matches) { - document.body.classList.add("light-theme"); - document.body.classList.remove("dark-theme"); - } else { - document.body.classList.add("dark-theme"); - document.body.classList.remove("light-theme"); - } - } - resolve(); - } - ) - }) + return new Promise(resolve => { + browser.storage.local.get("theme", r => { + switch (r.theme) { + case "dark": + document.body.classList.add("dark-theme") + document.body.classList.remove("light-theme") + break + case "light": + document.body.classList.add("light-theme") + document.body.classList.remove("dark-theme") + break + default: + if (matchMedia("(prefers-color-scheme: light)").matches) { + document.body.classList.add("light-theme") + document.body.classList.remove("dark-theme") + } else { + document.body.classList.add("dark-theme") + document.body.classList.remove("light-theme") + } + } + resolve() + }) + }) } -changeTheme(); -if (["ar", "iw", "ku", "fa", "ur"].includes(browser.i18n.getUILanguage())) document.getElementsByTagName("body")[0].classList.add("rtl"); -localise.localisePage(); +changeTheme() +if (["ar", "iw", "ku", "fa", "ur"].includes(browser.i18n.getUILanguage())) document.getElementsByTagName("body")[0].classList.add("rtl") +localise.localisePage() -window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", changeTheme) \ No newline at end of file +window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", changeTheme) diff --git a/src/pages/options/widgets/general.js b/src/pages/options/widgets/general.js index 352e4b7..5407159 100644 --- a/src/pages/options/widgets/general.js +++ b/src/pages/options/widgets/general.js @@ -1,242 +1,217 @@ -"use strict"; -window.browser = window.browser || window.chrome; +"use strict" +window.browser = window.browser || window.chrome -import utils from "../../../assets/javascripts/utils.js"; -import generalHelper from "../../../assets/javascripts/general.js"; +import utils from "../../../assets/javascripts/utils.js" +import generalHelper from "../../../assets/javascripts/general.js" -import youtubeHelper from "../../../assets/javascripts/youtube/youtube.js"; -import youtubeMusicHelper from "../../../assets/javascripts/youtubeMusic.js"; -import twitterHelper from "../../../assets/javascripts/twitter.js"; -import instagramHelper from "../../../assets/javascripts/instagram.js"; -import redditHelper from "../../../assets/javascripts/reddit.js"; -import searchHelper from "../../../assets/javascripts/search.js"; -import translateHelper from "../../../assets/javascripts/translate/translate.js"; -import mapsHelper from "../../../assets/javascripts/maps.js"; -import wikipediaHelper from "../../../assets/javascripts/wikipedia.js"; -import mediumHelper from "../../../assets/javascripts/medium.js"; -import quoraHelper from "../../../assets/javascripts/quora.js"; -import libremdbHelper from "../../../assets/javascripts/imdb.js"; -import reutersHelper from "../../../assets/javascripts/reuters.js"; -import imgurHelper from "../../../assets/javascripts/imgur.js"; -import tiktokHelper from "../../../assets/javascripts/tiktok.js"; -import sendTargetsHelper from "../../../assets/javascripts/sendTargets.js"; -import peertubeHelper from "../../../assets/javascripts/peertube.js"; -import lbryHelper from "../../../assets/javascripts/lbry.js"; +import youtubeHelper from "../../../assets/javascripts/youtube/youtube.js" +import youtubeMusicHelper from "../../../assets/javascripts/youtubeMusic.js" +import twitterHelper from "../../../assets/javascripts/twitter.js" +import instagramHelper from "../../../assets/javascripts/instagram.js" +import redditHelper from "../../../assets/javascripts/reddit.js" +import searchHelper from "../../../assets/javascripts/search.js" +import translateHelper from "../../../assets/javascripts/translate/translate.js" +import mapsHelper from "../../../assets/javascripts/maps.js" +import wikipediaHelper from "../../../assets/javascripts/wikipedia.js" +import mediumHelper from "../../../assets/javascripts/medium.js" +import quoraHelper from "../../../assets/javascripts/quora.js" +import libremdbHelper from "../../../assets/javascripts/imdb.js" +import reutersHelper from "../../../assets/javascripts/reuters.js" +import imgurHelper from "../../../assets/javascripts/imgur.js" +import tiktokHelper from "../../../assets/javascripts/tiktok.js" +import sendTargetsHelper from "../../../assets/javascripts/sendTargets.js" +import peertubeHelper from "../../../assets/javascripts/peertube.js" +import lbryHelper from "../../../assets/javascripts/lbry.js" -let updateInstancesElement = document.getElementById("update-instances"); +let updateInstancesElement = document.getElementById("update-instances") updateInstancesElement.addEventListener("click", async () => { - let oldHtml = updateInstancesElement.innerHTML - updateInstancesElement.innerHTML = '...'; - if (await utils.updateInstances()) { - updateInstancesElement.innerHTML = oldHtml; - location.reload(); - } - else - updateInstancesElement.innerHTML = 'Failed Miserabely'; -}); + let oldHtml = updateInstancesElement.innerHTML + updateInstancesElement.innerHTML = "..." + if (await utils.updateInstances()) { + updateInstancesElement.innerHTML = oldHtml + location.reload() + } else updateInstancesElement.innerHTML = "Failed Miserabely" +}) -let exportSettingsElement = document.getElementById("export-settings"); +let exportSettingsElement = document.getElementById("export-settings") function exportSettings() { - browser.storage.local.get( - null, - result => { - let resultString = JSON.stringify(result, null, ' '); - exportSettingsElement.href = 'data:application/json;base64,' + btoa(encodeURI(resultString)); - exportSettingsElement.download = 'libredirect-settings.json'; - } - ); + browser.storage.local.get(null, result => { + let resultString = JSON.stringify(result, null, " ") + exportSettingsElement.href = "data:application/json;base64," + btoa(encodeURI(resultString)) + exportSettingsElement.download = "libredirect-settings.json" + }) } -exportSettings(); +exportSettings() -document.getElementById('general_page').addEventListener('click', exportSettings) +document.getElementById("general_page").addEventListener("click", exportSettings) -let importSettingsElement = document.getElementById("import-settings"); -let importSettingsElementText = document.getElementById('import_settings_text'); -importSettingsElement.addEventListener("change", - () => { - importSettingsElementText.innerHTML = '...'; - let file = importSettingsElement.files[0]; - const reader = new FileReader(); - reader.readAsText(file); - reader.onload = async () => { - const data = JSON.parse(reader.result) - if ( - "theme" in data && - "disableImgur" in data && - "imgurRedirects" in data - ) { - browser.storage.local.clear( - () => { - browser.storage.local.set({ ...data }, - async () => { - await youtubeHelper.pasteInvidiousCookies(); - await youtubeHelper.pastePipedLocalStorage(); - await youtubeHelper.pastePipedMaterialLocalStorage(); +let importSettingsElement = document.getElementById("import-settings") +let importSettingsElementText = document.getElementById("import_settings_text") +importSettingsElement.addEventListener("change", () => { + importSettingsElementText.innerHTML = "..." + let file = importSettingsElement.files[0] + const reader = new FileReader() + reader.readAsText(file) + reader.onload = async () => { + const data = JSON.parse(reader.result) + if ("theme" in data && "disableImgur" in data && "imgurRedirects" in data) { + browser.storage.local.clear(() => { + browser.storage.local.set({ ...data }, async () => { + await youtubeHelper.pasteInvidiousCookies() + await youtubeHelper.pastePipedLocalStorage() + await youtubeHelper.pastePipedMaterialLocalStorage() - await translateHelper.pasteSimplyTranslateCookies(); - await translateHelper.pasteLingvaLocalStorage(); + await translateHelper.pasteSimplyTranslateCookies() + await translateHelper.pasteLingvaLocalStorage() - await twitterHelper.pasteNitterCookies(); + await twitterHelper.pasteNitterCookies() - await wikipediaHelper.pasteWikilessCookies(); + await wikipediaHelper.pasteWikilessCookies() - await searchHelper.pasteSearxCookies(); - await searchHelper.pasteSearxngCookies(); - await searchHelper.pasteLibrexCookies(); + await searchHelper.pasteSearxCookies() + await searchHelper.pasteSearxngCookies() + await searchHelper.pasteLibrexCookies() - await redditHelper.pasteLibredditCookies(); - await redditHelper.pasteTedditCookies(); + await redditHelper.pasteLibredditCookies() + await redditHelper.pasteTedditCookies() - await tiktokHelper.pasteProxiTokCookies(); + await tiktokHelper.pasteProxiTokCookies() - location.reload(); - }) - - }); - } else { - console.log('incompatible settings'); - importError() - } - } - reader.onerror = error => { - console.log('error', error); - importError() - }; - } -); + location.reload() + }) + }) + } else { + console.log("incompatible settings") + importError() + } + } + reader.onerror = error => { + console.log("error", error) + importError() + } +}) function importError() { - const oldHTML = importSettingsElementText.innerHTML; - importSettingsElementText.innerHTML = 'Error!'; - setTimeout(() => importSettingsElementText.innerHTML = oldHTML, 1000); + const oldHTML = importSettingsElementText.innerHTML + importSettingsElementText.innerHTML = 'Error!' + setTimeout(() => (importSettingsElementText.innerHTML = oldHTML), 1000) } -const resetSettings = document.getElementById("reset-settings"); -resetSettings.addEventListener("click", - async () => { - resetSettings.innerHTML = '...' - browser.storage.local.clear( - () => { - fetch('/instances/blacklist.json').then(response => response.text()).then(async data => { - browser.storage.local.set({ cloudflareBlackList: JSON.parse(data).cloudflare }, - () => { - browser.storage.local.set({ authenticateBlackList: JSON.parse(data).authenticate }, - async () => { - await generalHelper.initDefaults(); - await youtubeHelper.initDefaults(); - await youtubeMusicHelper.initDefaults(); - await twitterHelper.initDefaults(); - await instagramHelper.initDefaults(); - await mapsHelper.initDefaults(); - await searchHelper.initDefaults(); - await translateHelper.initDefaults(); - await mediumHelper.initDefaults(); - await quoraHelper.initDefaults(); - await libremdbHelper.initDefaults(); - await reutersHelper.initDefaults(); - await redditHelper.initDefaults(); - await wikipediaHelper.initDefaults(); - await imgurHelper.initDefaults(); - await tiktokHelper.initDefaults(); - await sendTargetsHelper.initDefaults(); - await peertubeHelper.initDefaults(); - await lbryHelper.initDefaults(); - location.reload(); - }) - }) - }) - }); - - } -); +const resetSettings = document.getElementById("reset-settings") +resetSettings.addEventListener("click", async () => { + resetSettings.innerHTML = "..." + browser.storage.local.clear(() => { + fetch("/instances/blacklist.json") + .then(response => response.text()) + .then(async data => { + browser.storage.local.set({ cloudflareBlackList: JSON.parse(data).cloudflare }, () => { + browser.storage.local.set({ authenticateBlackList: JSON.parse(data).authenticate }, async () => { + await generalHelper.initDefaults() + await youtubeHelper.initDefaults() + await youtubeMusicHelper.initDefaults() + await twitterHelper.initDefaults() + await instagramHelper.initDefaults() + await mapsHelper.initDefaults() + await searchHelper.initDefaults() + await translateHelper.initDefaults() + await mediumHelper.initDefaults() + await quoraHelper.initDefaults() + await libremdbHelper.initDefaults() + await reutersHelper.initDefaults() + await redditHelper.initDefaults() + await wikipediaHelper.initDefaults() + await imgurHelper.initDefaults() + await tiktokHelper.initDefaults() + await sendTargetsHelper.initDefaults() + await peertubeHelper.initDefaults() + await lbryHelper.initDefaults() + location.reload() + }) + }) + }) + }) +}) let autoRedirectElement = document.getElementById("auto-redirect") autoRedirectElement.addEventListener("change", event => { - browser.storage.local.set({ autoRedirect: event.target.checked }) -}); - -let themeElement = document.getElementById("theme"); -themeElement.addEventListener("change", event => { - const value = event.target.options[theme.selectedIndex].value; - browser.storage.local.set({ theme: value }); - location.reload(); + browser.storage.local.set({ autoRedirect: event.target.checked }) }) -let protocolElement = document.getElementById("protocol"); +let themeElement = document.getElementById("theme") +themeElement.addEventListener("change", event => { + const value = event.target.options[theme.selectedIndex].value + browser.storage.local.set({ theme: value }) + location.reload() +}) + +let protocolElement = document.getElementById("protocol") protocolElement.addEventListener("change", event => { - const value = event.target.options[protocol.selectedIndex].value; - browser.storage.local.set({ protocol: value }); - location.reload(); + const value = event.target.options[protocol.selectedIndex].value + browser.storage.local.set({ protocol: value }) + location.reload() }) let protocolFallbackCheckbox = document.getElementById("protocol-fallback-checkbox") protocolFallbackCheckbox.addEventListener("change", event => { - browser.storage.local.set({ protocolFallback: event.target.checked }); + browser.storage.local.set({ protocolFallback: event.target.checked }) }) -let nameCustomInstanceInput = document.getElementById("exceptions-custom-instance"); -let instanceTypeElement = document.getElementById("exceptions-custom-instance-type"); +let nameCustomInstanceInput = document.getElementById("exceptions-custom-instance") +let instanceTypeElement = document.getElementById("exceptions-custom-instance-type") let instanceType = "url" -let popupFrontends; +let popupFrontends for (const frontend of generalHelper.allPopupFrontends) - document.getElementById(frontend).addEventListener("change", - event => { - if (event.target.checked && !popupFrontends.includes(frontend)) - popupFrontends.push(frontend) - else if (popupFrontends.includes(frontend)) { - var index = popupFrontends.indexOf(frontend); - if (index !== -1) popupFrontends.splice(index, 1); - } - browser.storage.local.set({ popupFrontends }) - } - ) + document.getElementById(frontend).addEventListener("change", event => { + if (event.target.checked && !popupFrontends.includes(frontend)) popupFrontends.push(frontend) + else if (popupFrontends.includes(frontend)) { + var index = popupFrontends.indexOf(frontend) + if (index !== -1) popupFrontends.splice(index, 1) + } + browser.storage.local.set({ popupFrontends }) + }) // const firstPartyIsolate = document.getElementById('firstPartyIsolate'); // firstPartyIsolate.addEventListener("change", () => browser.storage.local.set({ firstPartyIsolate: firstPartyIsolate.checked })) browser.storage.local.get( - [ - 'theme', - 'autoRedirect', - 'exceptions', - 'protocol', - 'protocolFallback' - // 'firstPartyIsolate' - ], - r => { - autoRedirectElement.checked = r.autoRedirect; - themeElement.value = r.theme; - protocolElement.value = r.protocol; - protocolFallbackCheckbox.checked = r.protocolFallback; - // firstPartyIsolate.checked = r.firstPartyIsolate; + [ + "theme", + "autoRedirect", + "exceptions", + "protocol", + "protocolFallback", + // 'firstPartyIsolate' + ], + r => { + autoRedirectElement.checked = r.autoRedirect + themeElement.value = r.theme + protocolElement.value = r.protocol + protocolFallbackCheckbox.checked = r.protocolFallback + // firstPartyIsolate.checked = r.firstPartyIsolate; - let protocolFallbackElement = document.getElementById('protocol-fallback') - if (protocolElement.value == "normal") { - protocolFallbackElement.style.display = 'none'; - } else { - protocolFallbackElement.style.display = 'block'; - } + let protocolFallbackElement = document.getElementById("protocol-fallback") + if (protocolElement.value == "normal") { + protocolFallbackElement.style.display = "none" + } else { + protocolFallbackElement.style.display = "block" + } - - instanceTypeElement.addEventListener("change", - event => { - instanceType = event.target.options[instanceTypeElement.selectedIndex].value - if (instanceType == 'url') { - nameCustomInstanceInput.setAttribute("type", "url"); - nameCustomInstanceInput.setAttribute("placeholder", "https://www.google.com"); - } - else if (instanceType == 'regex') { - nameCustomInstanceInput.setAttribute("type", "text"); - nameCustomInstanceInput.setAttribute("placeholder", "https?:\/\/(www\.|)youtube\.com\/"); - } - } - ) - let exceptionsCustomInstances = r.exceptions; - function calcExceptionsCustomInstances() { - document.getElementById("exceptions-custom-checklist").innerHTML = - [...exceptionsCustomInstances.url, ...exceptionsCustomInstances.regex].map( - (x) => `
+ instanceTypeElement.addEventListener("change", event => { + instanceType = event.target.options[instanceTypeElement.selectedIndex].value + if (instanceType == "url") { + nameCustomInstanceInput.setAttribute("type", "url") + nameCustomInstanceInput.setAttribute("placeholder", "https://www.google.com") + } else if (instanceType == "regex") { + nameCustomInstanceInput.setAttribute("type", "text") + nameCustomInstanceInput.setAttribute("placeholder", "https?://(www.|)youtube.com/") + } + }) + let exceptionsCustomInstances = r.exceptions + function calcExceptionsCustomInstances() { + document.getElementById("exceptions-custom-checklist").innerHTML = [...exceptionsCustomInstances.url, ...exceptionsCustomInstances.regex] + .map( + x => `
${x}

` - ).join('\n'); + ) + .join("\n") - for (const x of [...exceptionsCustomInstances.url, ...exceptionsCustomInstances.regex]) { - document.getElementById(`clear-${x}`).addEventListener("click", - () => { - console.log(x); - let index; - index = exceptionsCustomInstances.url.indexOf(x); - if (index > -1) - exceptionsCustomInstances.url.splice(index, 1); - else { - index = exceptionsCustomInstances.regex.indexOf(x); - if (index > -1) - exceptionsCustomInstances.regex.splice(index, 1); - } - browser.storage.local.set({ exceptions: exceptionsCustomInstances }) - calcExceptionsCustomInstances(); - }); - } - } - calcExceptionsCustomInstances(); - document.getElementById("custom-exceptions-instance-form").addEventListener("submit", (event) => { - event.preventDefault(); + for (const x of [...exceptionsCustomInstances.url, ...exceptionsCustomInstances.regex]) { + document.getElementById(`clear-${x}`).addEventListener("click", () => { + console.log(x) + let index + index = exceptionsCustomInstances.url.indexOf(x) + if (index > -1) exceptionsCustomInstances.url.splice(index, 1) + else { + index = exceptionsCustomInstances.regex.indexOf(x) + if (index > -1) exceptionsCustomInstances.regex.splice(index, 1) + } + browser.storage.local.set({ exceptions: exceptionsCustomInstances }) + calcExceptionsCustomInstances() + }) + } + } + calcExceptionsCustomInstances() + document.getElementById("custom-exceptions-instance-form").addEventListener("submit", event => { + event.preventDefault() - let val - if (instanceType == 'url') { - if (nameCustomInstanceInput.validity.valid) { - let url = new URL(nameCustomInstanceInput.value); - val = `${url.protocol}//${url.host}` - if (!exceptionsCustomInstances.url.includes(val)) exceptionsCustomInstances.url.push(val) - } - } else if (instanceType == 'regex') { - val = nameCustomInstanceInput.value - if (val.trim() != '' && !exceptionsCustomInstances.regex.includes(val)) exceptionsCustomInstances.regex.push(val) - } - if (val) { - browser.storage.local.set({ exceptions: exceptionsCustomInstances }) - nameCustomInstanceInput.value = ''; - } - calcExceptionsCustomInstances(); - }) + let val + if (instanceType == "url") { + if (nameCustomInstanceInput.validity.valid) { + let url = new URL(nameCustomInstanceInput.value) + val = `${url.protocol}//${url.host}` + if (!exceptionsCustomInstances.url.includes(val)) exceptionsCustomInstances.url.push(val) + } + } else if (instanceType == "regex") { + val = nameCustomInstanceInput.value + if (val.trim() != "" && !exceptionsCustomInstances.regex.includes(val)) exceptionsCustomInstances.regex.push(val) + } + if (val) { + browser.storage.local.set({ exceptions: exceptionsCustomInstances }) + nameCustomInstanceInput.value = "" + } + calcExceptionsCustomInstances() + }) - browser.storage.local.get('popupFrontends', - r => { - popupFrontends = r.popupFrontends; - for (const frontend of generalHelper.allPopupFrontends) - document.getElementById(frontend).checked = popupFrontends.includes(frontend); - } - ) - }) + browser.storage.local.get("popupFrontends", r => { + popupFrontends = r.popupFrontends + for (const frontend of generalHelper.allPopupFrontends) document.getElementById(frontend).checked = popupFrontends.includes(frontend) + }) + } +) diff --git a/src/pages/options/widgets/imdb.js b/src/pages/options/widgets/imdb.js index ad115e9..094c567 100644 --- a/src/pages/options/widgets/imdb.js +++ b/src/pages/options/widgets/imdb.js @@ -1,12 +1,12 @@ -import utils from "../../../assets/javascripts/utils.js"; +import utils from "../../../assets/javascripts/utils.js" // UNCOMMENT ALL COMMENTS ONCE OTHER FRONTENDS EXIST const frontends = new Array("libremdb") const protocols = new Array("normal", "tor", "i2p", "loki") -const enable = document.getElementById("imdb-enable"); -const imdb = document.getElementById('imdb_page'); +const enable = document.getElementById("imdb-enable") +const imdb = document.getElementById("imdb_page") //const frontend = document.getElementById("imdb-frontend"); let protocol @@ -24,38 +24,32 @@ function changeFrontendsSettings() { */ function changeProtocolSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - for (let x = 0; x < protocols.length; x++) { - const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] - if (protocols[x] == protocol) { - protocolDiv.style.display = 'block' - } else { - protocolDiv.style.display = 'none' - } - } - } + for (let i = 0; i < frontends.length; i++) { + const frontendDiv = document.getElementById(frontends[i]) + for (let x = 0; x < protocols.length; x++) { + const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] + if (protocols[x] == protocol) { + protocolDiv.style.display = "block" + } else { + protocolDiv.style.display = "none" + } + } + } } -browser.storage.local.get( - [ - "disableImdb", - "protocol" - ], - r => { - enable.checked = !r.disableImdb; - protocol = r.protocol; - changeProtocolSettings(); - } -) +browser.storage.local.get(["disableImdb", "protocol"], r => { + enable.checked = !r.disableImdb + protocol = r.protocol + changeProtocolSettings() +}) imdb.addEventListener("change", () => { - browser.storage.local.set({ disableImdb: !enable.checked }) + browser.storage.local.set({ disableImdb: !enable.checked }) }) for (let i = 0; i < frontends.length; i++) { - for (let x = 0; x < protocols.length; x++){ - utils.processDefaultCustomInstances('imdb', frontends[i], protocols[x], document) - } - utils.latency('imdb', frontends[i], document, location) + for (let x = 0; x < protocols.length; x++) { + utils.processDefaultCustomInstances("imdb", frontends[i], protocols[x], document) + } + utils.latency("imdb", frontends[i], document, location) } diff --git a/src/pages/options/widgets/imgur.js b/src/pages/options/widgets/imgur.js index 475bf47..236e809 100644 --- a/src/pages/options/widgets/imgur.js +++ b/src/pages/options/widgets/imgur.js @@ -1,12 +1,12 @@ -import utils from "../../../assets/javascripts/utils.js"; +import utils from "../../../assets/javascripts/utils.js" // UNCOMMENT ALL COMMENTS ONCE OTHER FRONTENDS EXIST const frontends = new Array("rimgo") const protocols = new Array("normal", "tor", "i2p", "loki") -const enable = document.getElementById("imgur-enable"); -const imgur = document.getElementById('imgur_page'); +const enable = document.getElementById("imgur-enable") +const imgur = document.getElementById("imgur_page") //const frontend = document.getElementById("imgur-frontend"); let protocol @@ -24,38 +24,32 @@ function changeFrontendsSettings() { */ function changeProtocolSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - for (let x = 0; x < protocols.length; x++) { - const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] - if (protocols[x] == protocol) { - protocolDiv.style.display = 'block' - } else { - protocolDiv.style.display = 'none' - } - } - } + for (let i = 0; i < frontends.length; i++) { + const frontendDiv = document.getElementById(frontends[i]) + for (let x = 0; x < protocols.length; x++) { + const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] + if (protocols[x] == protocol) { + protocolDiv.style.display = "block" + } else { + protocolDiv.style.display = "none" + } + } + } } -browser.storage.local.get( - [ - "disableImgur", - "protocol" - ], - r => { - enable.checked = !r.disableImgur; - protocol = r.protocol; - changeProtocolSettings(); - } -); +browser.storage.local.get(["disableImgur", "protocol"], r => { + enable.checked = !r.disableImgur + protocol = r.protocol + changeProtocolSettings() +}) imgur.addEventListener("change", () => { - browser.storage.local.set({ disableImgur: !enable.checked }); + browser.storage.local.set({ disableImgur: !enable.checked }) }) for (let i = 0; i < frontends.length; i++) { - for (let x = 0; x < protocols.length; x++){ - utils.processDefaultCustomInstances('imgur', frontends[i], protocols[x], document) - } - utils.latency('imgur', frontends[i], document, location) + for (let x = 0; x < protocols.length; x++) { + utils.processDefaultCustomInstances("imgur", frontends[i], protocols[x], document) + } + utils.latency("imgur", frontends[i], document, location) } diff --git a/src/pages/options/widgets/instagram.js b/src/pages/options/widgets/instagram.js index 8445684..e22f720 100644 --- a/src/pages/options/widgets/instagram.js +++ b/src/pages/options/widgets/instagram.js @@ -1,12 +1,12 @@ -import utils from "../../../assets/javascripts/utils.js"; +import utils from "../../../assets/javascripts/utils.js" // UNCOMMENT ALL COMMENTS ONCE OTHER FRONTENDS EXIST const frontends = new Array("bibliogram") const protocols = new Array("normal", "tor", "i2p", "loki") -const enable = document.getElementById("instagram-enable"); -const instagram = document.getElementById('instagram_page') +const enable = document.getElementById("instagram-enable") +const instagram = document.getElementById("instagram_page") //const frontend = document.getElementById("instagram-frontend"); let protocol @@ -24,38 +24,32 @@ function changeFrontendsSettings() { */ function changeProtocolSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - for (let x = 0; x < protocols.length; x++) { - const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] - if (protocols[x] == protocol) { - protocolDiv.style.display = 'block' - } else { - protocolDiv.style.display = 'none' - } - } - } + for (let i = 0; i < frontends.length; i++) { + const frontendDiv = document.getElementById(frontends[i]) + for (let x = 0; x < protocols.length; x++) { + const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] + if (protocols[x] == protocol) { + protocolDiv.style.display = "block" + } else { + protocolDiv.style.display = "none" + } + } + } } -browser.storage.local.get( - [ - "disableInstagram", - "protocol" - ], - r => { - enable.checked = !r.disableInstagram; - protocol = r.protocol; - changeProtocolSettings(); - } -) +browser.storage.local.get(["disableInstagram", "protocol"], r => { + enable.checked = !r.disableInstagram + protocol = r.protocol + changeProtocolSettings() +}) instagram.addEventListener("change", () => { - browser.storage.local.set({ disableInstagram: !enable.checked }) + browser.storage.local.set({ disableInstagram: !enable.checked }) }) for (let i = 0; i < frontends.length; i++) { - for (let x = 0; x < protocols.length; x++){ - utils.processDefaultCustomInstances('instagram', frontends[i], protocols[x], document) - } - utils.latency('instagram', frontends[i], document, location) + for (let x = 0; x < protocols.length; x++) { + utils.processDefaultCustomInstances("instagram", frontends[i], protocols[x], document) + } + utils.latency("instagram", frontends[i], document, location) } diff --git a/src/pages/options/widgets/lbry.js b/src/pages/options/widgets/lbry.js index 645017f..79be6e1 100644 --- a/src/pages/options/widgets/lbry.js +++ b/src/pages/options/widgets/lbry.js @@ -1,12 +1,12 @@ -import utils from "../../../assets/javascripts/utils.js"; +import utils from "../../../assets/javascripts/utils.js" // UNCOMMENT ALL COMMENTS ONCE OTHER FRONTENDS EXIST const frontends = new Array("librarian") const protocols = new Array("normal", "tor", "i2p", "loki") -const enable = document.getElementById("lbry-enable"); -const lbry = document.getElementById('lbry_page'); +const enable = document.getElementById("lbry-enable") +const lbry = document.getElementById("lbry_page") //const frontend = document.getElementById("lbry-frontend"); let protocol @@ -24,38 +24,32 @@ function changeFrontendsSettings() { */ function changeProtocolSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - for (let x = 0; x < protocols.length; x++) { - const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] - if (protocols[x] == protocol) { - protocolDiv.style.display = 'block' - } else { - protocolDiv.style.display = 'none' - } - } - } + for (let i = 0; i < frontends.length; i++) { + const frontendDiv = document.getElementById(frontends[i]) + for (let x = 0; x < protocols.length; x++) { + const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] + if (protocols[x] == protocol) { + protocolDiv.style.display = "block" + } else { + protocolDiv.style.display = "none" + } + } + } } -browser.storage.local.get( - [ - "disableLbryTargets", - "protocol" - ], - r => { - enable.checked = !r.disableLbryTargets; - protocol = r.protocol; - changeProtocolSettings(); - } -) +browser.storage.local.get(["disableLbryTargets", "protocol"], r => { + enable.checked = !r.disableLbryTargets + protocol = r.protocol + changeProtocolSettings() +}) lbry.addEventListener("change", () => { - browser.storage.local.set({ disableLbryTargets: !enable.checked }); + browser.storage.local.set({ disableLbryTargets: !enable.checked }) }) for (let i = 0; i < frontends.length; i++) { - for (let x = 0; x < protocols.length; x++){ - utils.processDefaultCustomInstances('lbryTargets', frontends[i], protocols[x], document) - } - utils.latency('lbryTargets', frontends[i], document, location) + for (let x = 0; x < protocols.length; x++) { + utils.processDefaultCustomInstances("lbryTargets", frontends[i], protocols[x], document) + } + utils.latency("lbryTargets", frontends[i], document, location) } diff --git a/src/pages/options/widgets/maps.js b/src/pages/options/widgets/maps.js index 9e4be6d..acc8aca 100644 --- a/src/pages/options/widgets/maps.js +++ b/src/pages/options/widgets/maps.js @@ -1,64 +1,57 @@ -import utils from "../../../assets/javascripts/utils.js"; +import utils from "../../../assets/javascripts/utils.js" const frontends = new Array("facil") const protocols = new Array("normal", "tor", "i2p", "loki") -const enable = document.getElementById("maps-enable"); -const maps = document.getElementById('maps_page'); -const frontend = document.getElementById("maps-frontend"); +const enable = document.getElementById("maps-enable") +const maps = document.getElementById("maps_page") +const frontend = document.getElementById("maps-frontend") let protocol function changeProtocolSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - for (let x = 0; x < protocols.length; x++) { - const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] - if (protocols[x] == protocol) { - protocolDiv.style.display = 'block' - } else { - protocolDiv.style.display = 'none' - } - } - } + for (let i = 0; i < frontends.length; i++) { + const frontendDiv = document.getElementById(frontends[i]) + for (let x = 0; x < protocols.length; x++) { + const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] + if (protocols[x] == protocol) { + protocolDiv.style.display = "block" + } else { + protocolDiv.style.display = "none" + } + } + } } function changeFrontendsSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - if (frontends[i] == frontend.value) { - frontendDiv.style.display = 'block' - } else { - frontendDiv.style.display = 'none' - } - } + for (let i = 0; i < frontends.length; i++) { + const frontendDiv = document.getElementById(frontends[i]) + if (frontends[i] == frontend.value) { + frontendDiv.style.display = "block" + } else { + frontendDiv.style.display = "none" + } + } } -browser.storage.local.get( - [ - "disableMaps", - "protocol", - "mapsFrontend" - ], - r => { - enable.checked = !r.disableMaps; - protocol = r.protocol; - frontend.value = r.mapsFrontend; - changeFrontendsSettings(); - changeProtocolSettings(); - } -) +browser.storage.local.get(["disableMaps", "protocol", "mapsFrontend"], r => { + enable.checked = !r.disableMaps + protocol = r.protocol + frontend.value = r.mapsFrontend + changeFrontendsSettings() + changeProtocolSettings() +}) maps.addEventListener("change", () => { - browser.storage.local.set({ - disableMaps: !enable.checked, - mapsFrontend: frontend.value - }); - changeFrontendsSettings(); + browser.storage.local.set({ + disableMaps: !enable.checked, + mapsFrontend: frontend.value, + }) + changeFrontendsSettings() }) for (let i = 0; i < frontends.length; i++) { - for (let x = 0; x < protocols.length; x++) { - utils.processDefaultCustomInstances('maps', frontends[i], protocols[x], document) - } - utils.latency('maps', frontends[i], document, location) + for (let x = 0; x < protocols.length; x++) { + utils.processDefaultCustomInstances("maps", frontends[i], protocols[x], document) + } + utils.latency("maps", frontends[i], document, location) } diff --git a/src/pages/options/widgets/medium.js b/src/pages/options/widgets/medium.js index 765a956..8db5c0f 100644 --- a/src/pages/options/widgets/medium.js +++ b/src/pages/options/widgets/medium.js @@ -1,12 +1,12 @@ -import utils from "../../../assets/javascripts/utils.js"; +import utils from "../../../assets/javascripts/utils.js" // UNCOMMENT ALL COMMENTS ONCE OTHER FRONTENDS EXIST const frontends = new Array("scribe") const protocols = new Array("normal", "tor", "i2p", "loki") -const enable = document.getElementById("medium-enable"); -const medium = document.getElementById('medium_page'); +const enable = document.getElementById("medium-enable") +const medium = document.getElementById("medium_page") //const frontend = document.getElementById("medium-frontend"); let protocol @@ -24,38 +24,32 @@ function changeFrontendsSettings() { */ function changeProtocolSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - for (let x = 0; x < protocols.length; x++) { - const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] - if (protocols[x] == protocol) { - protocolDiv.style.display = 'block' - } else { - protocolDiv.style.display = 'none' - } - } - } + for (let i = 0; i < frontends.length; i++) { + const frontendDiv = document.getElementById(frontends[i]) + for (let x = 0; x < protocols.length; x++) { + const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] + if (protocols[x] == protocol) { + protocolDiv.style.display = "block" + } else { + protocolDiv.style.display = "none" + } + } + } } -browser.storage.local.get( - [ - "disableMedium", - "protocol" - ], - r => { - enable.checked = !r.disableMedium; - protocol = r.protocol; - changeProtocolSettings(); - } -) +browser.storage.local.get(["disableMedium", "protocol"], r => { + enable.checked = !r.disableMedium + protocol = r.protocol + changeProtocolSettings() +}) medium.addEventListener("change", () => { - browser.storage.local.set({ disableMedium: !enable.checked }) + browser.storage.local.set({ disableMedium: !enable.checked }) }) for (let i = 0; i < frontends.length; i++) { - for (let x = 0; x < protocols.length; x++){ - utils.processDefaultCustomInstances('medium', frontends[i], protocols[x], document) - } - utils.latency('medium', frontends[i], document, location) + for (let x = 0; x < protocols.length; x++) { + utils.processDefaultCustomInstances("medium", frontends[i], protocols[x], document) + } + utils.latency("medium", frontends[i], document, location) } diff --git a/src/pages/options/widgets/peertube.js b/src/pages/options/widgets/peertube.js index 9e99411..e3b8dcc 100644 --- a/src/pages/options/widgets/peertube.js +++ b/src/pages/options/widgets/peertube.js @@ -1,12 +1,12 @@ -import utils from "../../../assets/javascripts/utils.js"; +import utils from "../../../assets/javascripts/utils.js" // UNCOMMENT ALL COMMENTS ONCE OTHER FRONTENDS EXIST const frontends = new Array("simpleertube") const protocols = new Array("normal", "tor", "i2p", "loki") -const enable = document.getElementById("peertube-enable"); -const peertube = document.getElementById('peertube_page'); +const enable = document.getElementById("peertube-enable") +const peertube = document.getElementById("peertube_page") //const frontend = document.getElementById("peertube-frontend"); let protocol @@ -24,38 +24,32 @@ function changeFrontendsSettings() { */ function changeProtocolSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - for (let x = 0; x < protocols.length; x++) { - const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] - if (protocols[x] == protocol) { - protocolDiv.style.display = 'block' - } else { - protocolDiv.style.display = 'none' - } - } - } + for (let i = 0; i < frontends.length; i++) { + const frontendDiv = document.getElementById(frontends[i]) + for (let x = 0; x < protocols.length; x++) { + const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] + if (protocols[x] == protocol) { + protocolDiv.style.display = "block" + } else { + protocolDiv.style.display = "none" + } + } + } } -browser.storage.local.get( - [ - "disablePeertubeTargets", - "protocol" - ], - r => { - enable.checked = !r.disablePeertubeTargets; - protocol = r.protocol; - changeProtocolSettings(); - } -) +browser.storage.local.get(["disablePeertubeTargets", "protocol"], r => { + enable.checked = !r.disablePeertubeTargets + protocol = r.protocol + changeProtocolSettings() +}) peertube.addEventListener("change", () => { - browser.storage.local.set({ disablePeertubeTargets: !enable.checked }) + browser.storage.local.set({ disablePeertubeTargets: !enable.checked }) }) for (let i = 0; i < frontends.length; i++) { - for (let x = 0; x < protocols.length; x++){ - utils.processDefaultCustomInstances('peertube', frontends[i], protocols[x], document) - } - utils.latency('peertube', frontends[i], document, location) + for (let x = 0; x < protocols.length; x++) { + utils.processDefaultCustomInstances("peertube", frontends[i], protocols[x], document) + } + utils.latency("peertube", frontends[i], document, location) } diff --git a/src/pages/options/widgets/quora.js b/src/pages/options/widgets/quora.js index ded21e5..f3e361c 100644 --- a/src/pages/options/widgets/quora.js +++ b/src/pages/options/widgets/quora.js @@ -1,12 +1,12 @@ -import utils from "../../../assets/javascripts/utils.js"; +import utils from "../../../assets/javascripts/utils.js" // UNCOMMENT ALL COMMENTS ONCE OTHER FRONTENDS EXIST const frontends = new Array("quetre") const protocols = new Array("normal", "tor", "i2p", "loki") -const enable = document.getElementById("quora-enable"); -const quora = document.getElementById('quora_page'); +const enable = document.getElementById("quora-enable") +const quora = document.getElementById("quora_page") //const frontend = document.getElementById("quora-frontend"); let protocol @@ -24,38 +24,32 @@ function changeFrontendsSettings() { */ function changeProtocolSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - for (let x = 0; x < protocols.length; x++) { - const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] - if (protocols[x] == protocol) { - protocolDiv.style.display = 'block' - } else { - protocolDiv.style.display = 'none' - } - } - } + for (let i = 0; i < frontends.length; i++) { + const frontendDiv = document.getElementById(frontends[i]) + for (let x = 0; x < protocols.length; x++) { + const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] + if (protocols[x] == protocol) { + protocolDiv.style.display = "block" + } else { + protocolDiv.style.display = "none" + } + } + } } -browser.storage.local.get( - [ - "disableQuora", - "protocol" - ], - r => { - enable.checked = !r.disableQuora; - protocol = r.protocol; - changeProtocolSettings(); - } -) +browser.storage.local.get(["disableQuora", "protocol"], r => { + enable.checked = !r.disableQuora + protocol = r.protocol + changeProtocolSettings() +}) quora.addEventListener("change", () => { - browser.storage.local.set({ disableQuora: !enable.checked }) + browser.storage.local.set({ disableQuora: !enable.checked }) }) for (let i = 0; i < frontends.length; i++) { - for (let x = 0; x < protocols.length; x++){ - utils.processDefaultCustomInstances('quora', frontends[i], protocols[x], document) - } - utils.latency('quora', frontends[i], document, location) + for (let x = 0; x < protocols.length; x++) { + utils.processDefaultCustomInstances("quora", frontends[i], protocols[x], document) + } + utils.latency("quora", frontends[i], document, location) } diff --git a/src/pages/options/widgets/reddit.js b/src/pages/options/widgets/reddit.js index a32632d..c2d16fa 100644 --- a/src/pages/options/widgets/reddit.js +++ b/src/pages/options/widgets/reddit.js @@ -1,64 +1,57 @@ -import utils from "../../../assets/javascripts/utils.js"; +import utils from "../../../assets/javascripts/utils.js" const frontends = new Array("libreddit", "teddit") const protocols = new Array("normal", "tor", "i2p", "loki") -const enable = document.getElementById("reddit-enable"); -const reddit = document.getElementById('reddit_page'); -const frontend = document.getElementById("reddit-frontend"); +const enable = document.getElementById("reddit-enable") +const reddit = document.getElementById("reddit_page") +const frontend = document.getElementById("reddit-frontend") let protocol function changeFrontendsSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - if (frontends[i] == frontend.value) { - frontendDiv.style.display = 'block' - } else { - frontendDiv.style.display = 'none' - } - } + for (let i = 0; i < frontends.length; i++) { + const frontendDiv = document.getElementById(frontends[i]) + if (frontends[i] == frontend.value) { + frontendDiv.style.display = "block" + } else { + frontendDiv.style.display = "none" + } + } } function changeProtocolSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - for (let x = 0; x < protocols.length; x++) { - const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] - if (protocols[x] == protocol) { - protocolDiv.style.display = 'block' - } else { - protocolDiv.style.display = 'none' - } - } - } + for (let i = 0; i < frontends.length; i++) { + const frontendDiv = document.getElementById(frontends[i]) + for (let x = 0; x < protocols.length; x++) { + const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] + if (protocols[x] == protocol) { + protocolDiv.style.display = "block" + } else { + protocolDiv.style.display = "none" + } + } + } } -browser.storage.local.get( - [ - "disableReddit", - "protocol", - "redditFrontend", - ], - r => { - enable.checked = !r.disableReddit - protocol = r.protocol - frontend.value = r.redditFrontend - changeFrontendsSettings(); - changeProtocolSettings(); - } -) +browser.storage.local.get(["disableReddit", "protocol", "redditFrontend"], r => { + enable.checked = !r.disableReddit + protocol = r.protocol + frontend.value = r.redditFrontend + changeFrontendsSettings() + changeProtocolSettings() +}) reddit.addEventListener("change", () => { - browser.storage.local.set({ - disableReddit: !enable.checked, - redditFrontend: frontend.value - }); - changeFrontendsSettings(); + browser.storage.local.set({ + disableReddit: !enable.checked, + redditFrontend: frontend.value, + }) + changeFrontendsSettings() }) for (let i = 0; i < frontends.length; i++) { - for (let x = 0; x < protocols.length; x++){ - utils.processDefaultCustomInstances('reddit', frontends[i], protocols[x], document) - } - utils.latency('reddit', frontends[i], document, location) + for (let x = 0; x < protocols.length; x++) { + utils.processDefaultCustomInstances("reddit", frontends[i], protocols[x], document) + } + utils.latency("reddit", frontends[i], document, location) } diff --git a/src/pages/options/widgets/reuters.js b/src/pages/options/widgets/reuters.js index 297e3e7..d8c937e 100644 --- a/src/pages/options/widgets/reuters.js +++ b/src/pages/options/widgets/reuters.js @@ -1,12 +1,12 @@ -import utils from "../../../assets/javascripts/utils.js"; +import utils from "../../../assets/javascripts/utils.js" // UNCOMMENT ALL COMMENTS ONCE OTHER FRONTENDS EXIST const frontends = new Array("neuters") const protocols = new Array("normal", "tor", "i2p", "loki") -const enable = document.getElementById("reuters-enable"); -const reuters = document.getElementById('reuters_page'); +const enable = document.getElementById("reuters-enable") +const reuters = document.getElementById("reuters_page") //const frontend = document.getElementById("reuters-frontend"); let protocol @@ -24,38 +24,32 @@ function changeFrontendsSettings() { */ function changeProtocolSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - for (let x = 0; x < protocols.length; x++) { - const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] - if (protocols[x] == protocol) { - protocolDiv.style.display = 'block' - } else { - protocolDiv.style.display = 'none' - } - } - } + for (let i = 0; i < frontends.length; i++) { + const frontendDiv = document.getElementById(frontends[i]) + for (let x = 0; x < protocols.length; x++) { + const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] + if (protocols[x] == protocol) { + protocolDiv.style.display = "block" + } else { + protocolDiv.style.display = "none" + } + } + } } -browser.storage.local.get( - [ - "disableReuters", - "protocol" - ], - r => { - enable.checked = !r.disableReuters; - protocol = r.protocol; - changeProtocolSettings(); - } -) +browser.storage.local.get(["disableReuters", "protocol"], r => { + enable.checked = !r.disableReuters + protocol = r.protocol + changeProtocolSettings() +}) reuters.addEventListener("change", () => { - browser.storage.local.set({ disableReuters: !enable.checked }) + browser.storage.local.set({ disableReuters: !enable.checked }) }) for (let i = 0; i < frontends.length; i++) { - for (let x = 0; x < protocols.length; x++){ - utils.processDefaultCustomInstances('reuters', frontends[i], protocols[x], document) - } - utils.latency('reuters', frontends[i], document, location) + for (let x = 0; x < protocols.length; x++) { + utils.processDefaultCustomInstances("reuters", frontends[i], protocols[x], document) + } + utils.latency("reuters", frontends[i], document, location) } diff --git a/src/pages/options/widgets/search.js b/src/pages/options/widgets/search.js index 7cadf14..3301cd7 100644 --- a/src/pages/options/widgets/search.js +++ b/src/pages/options/widgets/search.js @@ -1,4 +1,4 @@ -import utils from "../../../assets/javascripts/utils.js"; +import utils from "../../../assets/javascripts/utils.js" // GOAL: to never mention frontends/protocls outside these two arrays, so that adding a new frontend/protocol is as easy as adding it here. // This may be expanded across the whole project, where almost everything becomes a template, and the frontend/protocol parts just become a JSON file. @@ -15,8 +15,8 @@ for (let i = 0; i < frontends.length; i++) { this.frontends[i] = frontends[i].getElementsByClassName(protocol) } */ - // There was a class here, but I deleted a bit of it - /* +// There was a class here, but I deleted a bit of it +/* this.searxDiv = searxDiv.getElementsByClassName(protocol)[0]; this.searxngDiv = searxngDiv.getElementsByClassName(protocol)[0]; this.librexDiv = librexDiv.getElementsByClassName(protocol)[0]; @@ -35,23 +35,22 @@ const searxngDiv = document.getElementById("searxng"); const whoogleDiv = document.getElementById("whoogle"); */ -const enable = document.getElementById("search-enable"); -const search = document.getElementById('search_page'); -const frontend = document.getElementById("search-frontend"); +const enable = document.getElementById("search-enable") +const search = document.getElementById("search_page") +const frontend = document.getElementById("search-frontend") let protocol function changeFrontendsSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - if (frontends[i] == frontend.value) { - frontendDiv.style.display = 'block' - } else { - frontendDiv.style.display = 'none' - } - } + for (let i = 0; i < frontends.length; i++) { + const frontendDiv = document.getElementById(frontends[i]) + if (frontends[i] == frontend.value) { + frontendDiv.style.display = "block" + } else { + frontendDiv.style.display = "none" + } + } - - /* + /* if (frontend.value == 'searx') { searxDiv.style.display = 'block'; searxngDiv.style.display = 'none'; @@ -79,32 +78,27 @@ function changeFrontendsSettings() { */ } - - function changeProtocolSettings() { - - - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - //if (frontends[i] == frontend.value) { // Here we are checking if the frontend matches the current one. This skips the protocol checking for that frontend, speeding things up. I no longer do this as protocol setting is only set once in the ui so every frontend needs to get their protocols setup immidiately. - for (let x = 0; x < protocols.length; x++) { - const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] - if (protocols[x] == protocol) { //if the frontend value equals the selected one, it will show. Otherwise, it will be hidden - protocolDiv.style.display = 'block' - } else { - protocolDiv.style.display = 'none' - } - } - /* + for (let i = 0; i < frontends.length; i++) { + const frontendDiv = document.getElementById(frontends[i]) + //if (frontends[i] == frontend.value) { // Here we are checking if the frontend matches the current one. This skips the protocol checking for that frontend, speeding things up. I no longer do this as protocol setting is only set once in the ui so every frontend needs to get their protocols setup immidiately. + for (let x = 0; x < protocols.length; x++) { + const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] + if (protocols[x] == protocol) { + //if the frontend value equals the selected one, it will show. Otherwise, it will be hidden + protocolDiv.style.display = "block" + } else { + protocolDiv.style.display = "none" + } + } + /* } else { continue } */ - } + } - - -/* + /* * "Legacy" code const normalsearxDiv = searxDiv.getElementsByClassName("normal")[0]; const torsearxDiv = searxDiv.getElementsByClassName("tor")[0]; @@ -168,35 +162,28 @@ function changeProtocolSettings() { */ } -browser.storage.local.get( - [ - "disableSearch", - "searchFrontend", - "protocol", - ], - r => { - enable.checked = !r.disableSearch; - frontend.value = r.searchFrontend; - protocol = r.protocol; +browser.storage.local.get(["disableSearch", "searchFrontend", "protocol"], r => { + enable.checked = !r.disableSearch + frontend.value = r.searchFrontend + protocol = r.protocol - changeFrontendsSettings(); - changeProtocolSettings(); - } -); + changeFrontendsSettings() + changeProtocolSettings() +}) for (let i = 0; i < frontends.length; i++) { - for (let x = 0; x < protocols.length; x++){ - utils.processDefaultCustomInstances('search', frontends[i], protocols[x], document) - } - utils.latency('search', frontends[i], document, location) + for (let x = 0; x < protocols.length; x++) { + utils.processDefaultCustomInstances("search", frontends[i], protocols[x], document) + } + utils.latency("search", frontends[i], document, location) } search.addEventListener("change", () => { - browser.storage.local.set({ - disableSearch: !enable.checked, - searchFrontend: frontend.value, - }); - changeFrontendsSettings(); + browser.storage.local.set({ + disableSearch: !enable.checked, + searchFrontend: frontend.value, + }) + changeFrontendsSettings() }) /* diff --git a/src/pages/options/widgets/sendTargets.js b/src/pages/options/widgets/sendTargets.js index 27c90d4..9380a72 100644 --- a/src/pages/options/widgets/sendTargets.js +++ b/src/pages/options/widgets/sendTargets.js @@ -1,12 +1,12 @@ -import utils from "../../../assets/javascripts/utils.js"; +import utils from "../../../assets/javascripts/utils.js" // UNCOMMENT ALL COMMENTS ONCE OTHER FRONTENDS EXIST const frontends = new Array("send") const protocols = new Array("normal", "tor", "i2p", "loki") -const enable = document.getElementById("sendTargets-enable"); -const sendTargets = document.getElementById('sendTargets_page'); +const enable = document.getElementById("sendTargets-enable") +const sendTargets = document.getElementById("sendTargets_page") //const frontend = document.getElementById("sendTargets-frontend"); let protocol @@ -24,38 +24,32 @@ function changeFrontendsSettings() { */ function changeProtocolSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - for (let x = 0; x < protocols.length; x++) { - const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] - if (protocols[x] == protocol) { - protocolDiv.style.display = 'block' - } else { - protocolDiv.style.display = 'none' - } - } - } + for (let i = 0; i < frontends.length; i++) { + const frontendDiv = document.getElementById(frontends[i]) + for (let x = 0; x < protocols.length; x++) { + const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] + if (protocols[x] == protocol) { + protocolDiv.style.display = "block" + } else { + protocolDiv.style.display = "none" + } + } + } } -browser.storage.local.get( - [ - "disableSendTarget", - "protocol" - ], - r => { - enable.checked = !r.disableSendTarget; - protocol = r.protocol; - changeProtocolSettings(); - } -) +browser.storage.local.get(["disableSendTarget", "protocol"], r => { + enable.checked = !r.disableSendTarget + protocol = r.protocol + changeProtocolSettings() +}) sendTargets.addEventListener("change", () => { - browser.storage.local.set({ disableSendTarget: !enable.checked }) + browser.storage.local.set({ disableSendTarget: !enable.checked }) }) for (let i = 0; i < frontends.length; i++) { - for (let x = 0; x < protocols.length; x++){ - utils.processDefaultCustomInstances('sendTargets', frontends[i], protocols[x], document) - } - utils.latency('sendTargets', frontends[i], document, location) + for (let x = 0; x < protocols.length; x++) { + utils.processDefaultCustomInstances("sendTargets", frontends[i], protocols[x], document) + } + utils.latency("sendTargets", frontends[i], document, location) } diff --git a/src/pages/options/widgets/tiktok.js b/src/pages/options/widgets/tiktok.js index 37c3636..38ec9ea 100644 --- a/src/pages/options/widgets/tiktok.js +++ b/src/pages/options/widgets/tiktok.js @@ -1,12 +1,12 @@ -import utils from "../../../assets/javascripts/utils.js"; +import utils from "../../../assets/javascripts/utils.js" // UNCOMMENT ALL COMMENTS ONCE OTHER FRONTENDS EXIST const frontends = new Array("proxiTok") const protocols = new Array("normal", "tor", "i2p", "loki") -const enable = document.getElementById("tiktok-enable"); -const tiktok = document.getElementById('tiktok_page'); +const enable = document.getElementById("tiktok-enable") +const tiktok = document.getElementById("tiktok_page") //const frontend = document.getElementById("tiktok-frontend"); let protocol @@ -24,38 +24,32 @@ function changeFrontendsSettings() { */ function changeProtocolSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - for (let x = 0; x < protocols.length; x++) { - const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] - if (protocols[x] == protocol) { - protocolDiv.style.display = 'block' - } else { - protocolDiv.style.display = 'none' - } - } - } + for (let i = 0; i < frontends.length; i++) { + const frontendDiv = document.getElementById(frontends[i]) + for (let x = 0; x < protocols.length; x++) { + const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] + if (protocols[x] == protocol) { + protocolDiv.style.display = "block" + } else { + protocolDiv.style.display = "none" + } + } + } } -browser.storage.local.get( - [ - "disableTiktok", - "protocol" - ], - r => { - enable.checked = !r.disableTiktok; - protocol = r.protocol; - changeProtocolSettings(); - } -) +browser.storage.local.get(["disableTiktok", "protocol"], r => { + enable.checked = !r.disableTiktok + protocol = r.protocol + changeProtocolSettings() +}) tiktok.addEventListener("change", () => { - browser.storage.local.set({ disableTiktok: !enable.checked }); + browser.storage.local.set({ disableTiktok: !enable.checked }) }) for (let i = 0; i < frontends.length; i++) { - for (let x = 0; x < protocols.length; x++){ - utils.processDefaultCustomInstances('tiktok', frontends[i], protocols[x], document) - } - utils.latency('tiktok', frontends[i], document, location) + for (let x = 0; x < protocols.length; x++) { + utils.processDefaultCustomInstances("tiktok", frontends[i], protocols[x], document) + } + utils.latency("tiktok", frontends[i], document, location) } diff --git a/src/pages/options/widgets/translate.js b/src/pages/options/widgets/translate.js index 87b8bb8..e100813 100644 --- a/src/pages/options/widgets/translate.js +++ b/src/pages/options/widgets/translate.js @@ -1,64 +1,57 @@ -import utils from "../../../assets/javascripts/utils.js"; +import utils from "../../../assets/javascripts/utils.js" const frontends = new Array("simplyTranslate", "lingva") const protocols = new Array("normal", "tor", "i2p", "loki") -const enable = document.getElementById("translate-enable"); -const translate = document.getElementById('translate_page'); -const frontend = document.getElementById("translate-frontend"); +const enable = document.getElementById("translate-enable") +const translate = document.getElementById("translate_page") +const frontend = document.getElementById("translate-frontend") let protocol function changeFrontendsSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - if (frontends[i] == frontend.value) { - frontendDiv.style.display = 'block' - } else { - frontendDiv.style.display = 'none' - } - } + for (let i = 0; i < frontends.length; i++) { + const frontendDiv = document.getElementById(frontends[i]) + if (frontends[i] == frontend.value) { + frontendDiv.style.display = "block" + } else { + frontendDiv.style.display = "none" + } + } } function changeProtocolSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - for (let x = 0; x < protocols.length; x++) { - const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] - if (protocols[x] == protocol) { - protocolDiv.style.display = 'block' - } else { - protocolDiv.style.display = 'none' - } - } - } + for (let i = 0; i < frontends.length; i++) { + const frontendDiv = document.getElementById(frontends[i]) + for (let x = 0; x < protocols.length; x++) { + const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] + if (protocols[x] == protocol) { + protocolDiv.style.display = "block" + } else { + protocolDiv.style.display = "none" + } + } + } } -browser.storage.local.get( - [ - "translateDisable", - "translateFrontend", - "protocol" - ], - r => { - enable.checked = !r.translateDisable; - frontend.value = r.translateFrontend; - protocol = r.protocol; - changeFrontendsSettings(); - changeProtocolSettings(); - } -); +browser.storage.local.get(["translateDisable", "translateFrontend", "protocol"], r => { + enable.checked = !r.translateDisable + frontend.value = r.translateFrontend + protocol = r.protocol + changeFrontendsSettings() + changeProtocolSettings() +}) translate.addEventListener("change", () => { - browser.storage.local.set({ - translateDisable: !enable.checked, - translateFrontend: frontend.value, - }) - changeFrontendsSettings(); + browser.storage.local.set({ + translateDisable: !enable.checked, + translateFrontend: frontend.value, + }) + changeFrontendsSettings() }) for (let i = 0; i < frontends.length; i++) { - for (let x = 0; x < protocols.length; x++){ - utils.processDefaultCustomInstances('translate', frontends[i], protocols[x], document) - } - utils.latency('translate', frontends[i], document, location) + for (let x = 0; x < protocols.length; x++) { + utils.processDefaultCustomInstances("translate", frontends[i], protocols[x], document) + } + utils.latency("translate", frontends[i], document, location) } diff --git a/src/pages/options/widgets/twitter.js b/src/pages/options/widgets/twitter.js index d54fc92..5ad760b 100644 --- a/src/pages/options/widgets/twitter.js +++ b/src/pages/options/widgets/twitter.js @@ -1,13 +1,13 @@ -import utils from "../../../assets/javascripts/utils.js"; +import utils from "../../../assets/javascripts/utils.js" // UNCOMMENT ALL COMMENTS ONCE OTHER FRONTENDS EXIST const frontends = new Array("nitter") const protocols = new Array("normal", "tor", "i2p", "loki") -const enable = document.getElementById("twitter-enable"); -const twitter = document.getElementById('twitter_page'); -const redirectType = document.getElementById("twitter-redirect_type"); +const enable = document.getElementById("twitter-enable") +const twitter = document.getElementById("twitter_page") +const redirectType = document.getElementById("twitter-redirect_type") //const frontend = document.getElementById("twitter-frontend"); let protocol @@ -25,43 +25,36 @@ function changeFrontendsSettings() { */ function changeProtocolSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - for (let x = 0; x < protocols.length; x++) { - const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] - if (protocols[x] == protocol) { - protocolDiv.style.display = 'block' - } else { - protocolDiv.style.display = 'none' - } - } - } + for (let i = 0; i < frontends.length; i++) { + const frontendDiv = document.getElementById(frontends[i]) + for (let x = 0; x < protocols.length; x++) { + const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] + if (protocols[x] == protocol) { + protocolDiv.style.display = "block" + } else { + protocolDiv.style.display = "none" + } + } + } } -browser.storage.local.get( - [ - "disableTwitter", - "protocol", - "twitterRedirectType" - ], - r => { - enable.checked = !r.disableTwitter; - protocol = r.protocol; - redirectType.value = r.twitterRedirectType; - changeProtocolSettings(); - } -) +browser.storage.local.get(["disableTwitter", "protocol", "twitterRedirectType"], r => { + enable.checked = !r.disableTwitter + protocol = r.protocol + redirectType.value = r.twitterRedirectType + changeProtocolSettings() +}) twitter.addEventListener("change", () => { - browser.storage.local.set({ - disableTwitter: !enable.checked, - twitterRedirectType: redirectType.value, - }); + browser.storage.local.set({ + disableTwitter: !enable.checked, + twitterRedirectType: redirectType.value, + }) }) for (let i = 0; i < frontends.length; i++) { - for (let x = 0; x < protocols.length; x++){ - utils.processDefaultCustomInstances('twitter', frontends[i], protocols[x], document) - } - utils.latency('twitter', frontends[i], document, location) + for (let x = 0; x < protocols.length; x++) { + utils.processDefaultCustomInstances("twitter", frontends[i], protocols[x], document) + } + utils.latency("twitter", frontends[i], document, location) } diff --git a/src/pages/options/widgets/wikipedia.js b/src/pages/options/widgets/wikipedia.js index 09b21d0..9d06488 100644 --- a/src/pages/options/widgets/wikipedia.js +++ b/src/pages/options/widgets/wikipedia.js @@ -1,12 +1,12 @@ -import utils from "../../../assets/javascripts/utils.js"; +import utils from "../../../assets/javascripts/utils.js" // UNCOMMENT ALL COMMENTS ONCE OTHER FRONTENDS EXIST const frontends = new Array("wikiless") const protocols = new Array("normal", "tor", "i2p", "loki") -const enable = document.getElementById("wikipedia-enable"); -const wikipedia = document.getElementById('wikipedia_page'); +const enable = document.getElementById("wikipedia-enable") +const wikipedia = document.getElementById("wikipedia_page") //const frontend = document.getElementById("wikipedia-frontend"); let protocol @@ -24,38 +24,32 @@ function changeFrontendsSettings() { */ function changeProtocolSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - for (let x = 0; x < protocols.length; x++) { - const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] - if (protocols[x] == protocol) { - protocolDiv.style.display = 'block' - } else { - protocolDiv.style.display = 'none' - } - } - } + for (let i = 0; i < frontends.length; i++) { + const frontendDiv = document.getElementById(frontends[i]) + for (let x = 0; x < protocols.length; x++) { + const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] + if (protocols[x] == protocol) { + protocolDiv.style.display = "block" + } else { + protocolDiv.style.display = "none" + } + } + } } -browser.storage.local.get( - [ - "disableWikipedia", - "protocol" - ], - r => { - enable.checked = !r.disableWikipedia; - protocol = r.protocol; - changeProtocolSettings(); - } -) +browser.storage.local.get(["disableWikipedia", "protocol"], r => { + enable.checked = !r.disableWikipedia + protocol = r.protocol + changeProtocolSettings() +}) wikipedia.addEventListener("change", () => { - browser.storage.local.set({ disableWikipedia: !enable.checked }) + browser.storage.local.set({ disableWikipedia: !enable.checked }) }) for (let i = 0; i < frontends.length; i++) { - for (let x = 0; x < protocols.length; x++) { - utils.processDefaultCustomInstances('wikipedia', frontends[i], protocols[x], document) - } - utils.latency('wikipedia', frontends[i], document, location) + for (let x = 0; x < protocols.length; x++) { + utils.processDefaultCustomInstances("wikipedia", frontends[i], protocols[x], document) + } + utils.latency("wikipedia", frontends[i], document, location) } diff --git a/src/pages/options/widgets/youtube.js b/src/pages/options/widgets/youtube.js index 0bf4ec1..065a195 100644 --- a/src/pages/options/widgets/youtube.js +++ b/src/pages/options/widgets/youtube.js @@ -1,103 +1,92 @@ -import utils from "../../../assets/javascripts/utils.js"; +import utils from "../../../assets/javascripts/utils.js" -const frontends = new Array("invidious", "piped", "pipedMaterial") +const frontends = new Array("invidious", "piped", "pipedMaterial", "cloudtube") const protocols = new Array("normal", "tor", "i2p", "loki") const singleInstanceFrontends = new Array("freetube", "yatte") -const enable = document.getElementById("youtube-enable"); -const youtube = document.getElementById('youtube_page'); -const youtubeEmbedFrontend = document.getElementById("youtube-embed_frontend"); -const onlyEmbeddedVideo = document.getElementById("youtube-redirect_type"); -const embeddedFrontendDiv = document.getElementById("youtube-embedded_frontend"); -const frontend = document.getElementById("youtube-frontend"); +const enable = document.getElementById("youtube-enable") +const youtube = document.getElementById("youtube_page") +const youtubeEmbedFrontend = document.getElementById("youtube-embed_frontend") +const onlyEmbeddedVideo = document.getElementById("youtube-redirect_type") +const embeddedFrontendDiv = document.getElementById("youtube-embedded_frontend") +const frontend = document.getElementById("youtube-frontend") let protocol function changeProtocolSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - for (let x = 0; x < protocols.length; x++) { - const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] - if (protocols[x] == protocol) { - protocolDiv.style.display = 'block' - } else { - protocolDiv.style.display = 'none' - } - } - } + for (let i = 0; i < frontends.length; i++) { + const frontendDiv = document.getElementById(frontends[i]) + for (let x = 0; x < protocols.length; x++) { + const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] + if (protocols[x] == protocol) { + protocolDiv.style.display = "block" + } else { + protocolDiv.style.display = "none" + } + } + } } function changeEmbedFrontendsSettings() { - if (embeddedFrontendDiv.style.display == 'block') { - for (let i = 0; i < frontends.length; i++) { - const embeddedFrontendDiv = document.getElementById(frontends[i]) - if (frontends[i] == youtubeEmbedFrontend.value) { - embeddedFrontendDiv.style.display = 'block' - } else { - embeddedFrontendDiv.style.display = 'none' - } - } - } + if (embeddedFrontendDiv.style.display == "block") { + for (let i = 0; i < frontends.length; i++) { + const embeddedFrontendDiv = document.getElementById(frontends[i]) + if (frontends[i] == youtubeEmbedFrontend.value) { + embeddedFrontendDiv.style.display = "block" + } else { + embeddedFrontendDiv.style.display = "none" + } + } + } } function changeFrontendsSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - if (frontends[i] == frontend.value) { - frontendDiv.style.display = 'block' - } else { - frontendDiv.style.display = 'none' - } - } - let singleInstanceFrontend = false - for (let i = 0; i < singleInstanceFrontends.length; i++) { - if (singleInstanceFrontends[i] == frontend.value) { - singleInstanceFrontend = true - } - } - if (singleInstanceFrontend == true) { - embeddedFrontendDiv.style.display = 'block' - } else { - embeddedFrontendDiv.style.display = 'none' - } + for (let i = 0; i < frontends.length; i++) { + const frontendDiv = document.getElementById(frontends[i]) + if (frontends[i] == frontend.value) { + frontendDiv.style.display = "block" + } else { + frontendDiv.style.display = "none" + } + } + let singleInstanceFrontend = false + for (let i = 0; i < singleInstanceFrontends.length; i++) { + if (singleInstanceFrontends[i] == frontend.value) { + singleInstanceFrontend = true + } + } + if (singleInstanceFrontend == true) { + embeddedFrontendDiv.style.display = "block" + } else { + embeddedFrontendDiv.style.display = "none" + } } -browser.storage.local.get( - [ - "disableYoutube", - "onlyEmbeddedVideo", - "youtubeRedirects", - "youtubeFrontend", +browser.storage.local.get(["disableYoutube", "onlyEmbeddedVideo", "youtubeRedirects", "youtubeFrontend", "youtubeEmbedFrontend", "protocol"], r => { + enable.checked = !r.disableYoutube + onlyEmbeddedVideo.value = r.onlyEmbeddedVideo + youtubeEmbedFrontend.value = r.youtubeEmbedFrontend + frontend.value = r.youtubeFrontend + protocol = r.protocol - "youtubeEmbedFrontend", - "protocol" - ], - r => { - enable.checked = !r.disableYoutube; - onlyEmbeddedVideo.value = r.onlyEmbeddedVideo; - youtubeEmbedFrontend.value = r.youtubeEmbedFrontend; - frontend.value = r.youtubeFrontend; - protocol = r.protocol; - - changeFrontendsSettings(); - changeProtocolSettings(); - changeEmbedFrontendsSettings(); - } -); + changeFrontendsSettings() + changeProtocolSettings() + changeEmbedFrontendsSettings() +}) youtube.addEventListener("change", () => { - browser.storage.local.set({ - disableYoutube: !enable.checked, - youtubeEmbedFrontend: youtubeEmbedFrontend.value, - youtubeFrontend: frontend.value, - onlyEmbeddedVideo: onlyEmbeddedVideo.value - }) - changeFrontendsSettings(); - changeEmbedFrontendsSettings(); + browser.storage.local.set({ + disableYoutube: !enable.checked, + youtubeEmbedFrontend: youtubeEmbedFrontend.value, + youtubeFrontend: frontend.value, + onlyEmbeddedVideo: onlyEmbeddedVideo.value, + }) + changeFrontendsSettings() + changeEmbedFrontendsSettings() }) for (let i = 0; i < frontends.length; i++) { - for (let x = 0; x < protocols.length; x++) { - utils.processDefaultCustomInstances('youtube', frontends[i], protocols[x], document) - } - utils.latency('youtube', frontends[i], document, location) + for (let x = 0; x < protocols.length; x++) { + utils.processDefaultCustomInstances("youtube", frontends[i], protocols[x], document) + } + utils.latency("youtube", frontends[i], document, location) } diff --git a/src/pages/options/widgets/youtube.pug b/src/pages/options/widgets/youtube.pug index a7832d4..33a43c3 100644 --- a/src/pages/options/widgets/youtube.pug +++ b/src/pages/options/widgets/youtube.pug @@ -12,6 +12,7 @@ section#youtube_page.option-block option(value="invidious") Invidious option(value="piped") Piped option(value="pipedMaterial") Piped-Material + option(value="cloudtube") CloudTube option(value="freetube") FreeTube option(value="yatte") Yattee @@ -22,6 +23,7 @@ section#youtube_page.option-block option(value="invidious") Invidious option(value="piped") Piped option(value="pipedMaterial") Piped-Material + option(value="cloudtube") CloudTube .some-block.option-block h4(data-localise="__MSG_redirectType__") Redirect Type @@ -81,4 +83,21 @@ section#youtube_page.option-block include ../../widgets/instances.pug +instances('http://piped-material.loki') + #cloudtube + hr + .normal + include ../../widgets/instances.pug + +instances('https://cloudtube.com') + include ../../widgets/latency.pug + +latency('cloudtube') + .tor + +instances('http://cloudtube.onion') + include ../../widgets/instances.pug + .i2p + include ../../widgets/instances.pug + +instances('http://cloudtube.i2p') + .loki + include ../../widgets/instances.pug + +instances('http://cloudtube.loki') + script(type="module" src="./widgets/youtube.js") diff --git a/src/pages/options/widgets/youtubeMusic.js b/src/pages/options/widgets/youtubeMusic.js index 4d33c1f..ad51ce7 100644 --- a/src/pages/options/widgets/youtubeMusic.js +++ b/src/pages/options/widgets/youtubeMusic.js @@ -1,61 +1,57 @@ -import utils from "../../../assets/javascripts/utils.js"; +import utils from "../../../assets/javascripts/utils.js" -// UNCOMMENT ALL COMMENTS ONCE OTHER FRONTENDS EXIST - -const frontends = new Array("beatbump") +const frontends = new Array("beatbump", "hyperpipe") const protocols = new Array("normal", "tor", "i2p", "loki") -let enable = document.getElementById("youtubeMusic-enable"); -const youtubeMusic = document.getElementById('youtubeMusic_page'); -//const frontend = document.getElementById("youtubeMusic-frontend"); +let enable = document.getElementById("youtubeMusic-enable") +const youtubeMusic = document.getElementById("youtubeMusic_page") +const frontend = document.getElementById("youtubeMusic-frontend") let protocol -/* function changeFrontendsSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - if (frontends[i] == frontend.value) { - frontendDiv.style.display = 'block' - } else { - frontendDiv.style.display = 'none' - } - } + for (let i = 0; i < frontends.length; i++) { + const frontendDiv = document.getElementById(frontends[i]) + if (frontends[i] == frontend.value) { + frontendDiv.style.display = "block" + } else { + frontendDiv.style.display = "none" + } + } } -*/ function changeProtocolSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - for (let x = 0; x < protocols.length; x++) { - const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] - if (protocols[x] == protocol) { - protocolDiv.style.display = 'block' - } else { - protocolDiv.style.display = 'none' - } - } - } + for (let i = 0; i < frontends.length; i++) { + const frontendDiv = document.getElementById(frontends[i]) + for (let x = 0; x < protocols.length; x++) { + const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] + if (protocols[x] == protocol) { + protocolDiv.style.display = "block" + } else { + protocolDiv.style.display = "none" + } + } + } } -browser.storage.local.get( - [ - "disableYoutubeMusic", - "protocol" - ], - r => { - enable.checked = !r.disableYoutubeMusic - protocol = r.protocol - changeProtocolSettings() - } -); +browser.storage.local.get(["disableYoutubeMusic", "youtubeMusicFrontend", "protocol"], r => { + enable.checked = !r.disableYoutubeMusic + frontend.value = r.youtubeMusicFrontend + protocol = r.protocol + changeFrontendsSettings() + changeProtocolSettings() +}) youtubeMusic.addEventListener("change", () => { - browser.storage.local.set({ disableYoutubeMusic: !enable.checked }) + browser.storage.local.set({ + disableYoutubeMusic: !enable.checked, + youtubeMusicFrontend: frontend.value, + }) + changeFrontendsSettings() }) for (let i = 0; i < frontends.length; i++) { - for (let x = 0; x < protocols.length; x++) { - utils.processDefaultCustomInstances('youtubeMusic', frontends[i], protocols[x], document) - } - utils.latency('youtubeMusic', frontends[i], document, location) + for (let x = 0; x < protocols.length; x++) { + utils.processDefaultCustomInstances("youtubeMusic", frontends[i], protocols[x], document) + } + utils.latency("youtubeMusic", frontends[i], document, location) } diff --git a/src/pages/options/widgets/youtubeMusic.pug b/src/pages/options/widgets/youtubeMusic.pug index f307ae9..bcba3d2 100644 --- a/src/pages/options/widgets/youtubeMusic.pug +++ b/src/pages/options/widgets/youtubeMusic.pug @@ -6,11 +6,17 @@ section#youtubeMusic_page.option-block h4(data-localise="__MSG_enable__") Enable input#youtubeMusic-enable(type="checkbox") + .some-block.option-block + h4(data-localise="__MSG_frontend__") Frontend + select#youtubeMusic-frontend + option(value="beatbump") Beatbump + option(value="hyperpipe") Hyperpipe + #beatbump hr .normal include ../../widgets/instances.pug - +instances('https://beatbump.wewe') + +instances('https://beatbump.org') include ../../widgets/latency.pug +latency('beatbump') .tor @@ -23,4 +29,21 @@ section#youtubeMusic_page.option-block include ../../widgets/instances.pug +instances('http://beatbump.loki') + #hyperpipe + hr + .normal + include ../../widgets/instances.pug + +instances('https://hyperpipe.org') + include ../../widgets/latency.pug + +latency('hyperpipe') + .tor + +instances('http://hyperpipe.onion') + include ../../widgets/instances.pug + .i2p + include ../../widgets/instances.pug + +instances('http://hyperpipe.i2p') + .loki + include ../../widgets/instances.pug + +instances('http://hyperpipe.loki') + script(type="module" src="./widgets/youtubeMusic.js") diff --git a/src/pages/popup/popup.js b/src/pages/popup/popup.js index 05a2a50..465080c 100644 --- a/src/pages/popup/popup.js +++ b/src/pages/popup/popup.js @@ -1,337 +1,445 @@ -"use strict"; -window.browser = window.browser || window.chrome; +"use strict" +window.browser = window.browser || window.chrome -import utils from "../../assets/javascripts/utils.js"; -import generalHelper from "../../assets/javascripts/general.js"; - -import youtubeHelper from "../../assets/javascripts/youtube/youtube.js"; -import youtubeMusicHelper from "../../assets/javascripts/youtubeMusic.js"; -import twitterHelper from "../../assets/javascripts/twitter.js"; -import instagramHelper from "../../assets/javascripts/instagram.js"; -import redditHelper from "../../assets/javascripts/reddit.js"; -import searchHelper from "../../assets/javascripts/search.js"; -import translateHelper from "../../assets/javascripts/translate/translate.js"; -import mapsHelper from "../../assets/javascripts/maps.js"; -import wikipediaHelper from "../../assets/javascripts/wikipedia.js"; -import mediumHelper from "../../assets/javascripts/medium.js"; -import quoraHelper from "../../assets/javascripts/quora.js"; -import libremdbHelper from "../../assets/javascripts/imdb.js"; -import reutersHelper from "../../assets/javascripts/reuters.js"; -import imgurHelper from "../../assets/javascripts/imgur.js"; -import tiktokHelper from "../../assets/javascripts/tiktok.js"; -import sendTargetsHelper from "../../assets/javascripts/sendTargets.js"; -import peertubeHelper from "../../assets/javascripts/peertube.js"; -import lbryHelper from "../../assets/javascripts/lbry.js"; +import utils from "../../assets/javascripts/utils.js" +import generalHelper from "../../assets/javascripts/general.js" +import youtubeHelper from "../../assets/javascripts/youtube/youtube.js" +import youtubeMusicHelper from "../../assets/javascripts/youtubeMusic.js" +import twitterHelper from "../../assets/javascripts/twitter.js" +import instagramHelper from "../../assets/javascripts/instagram.js" +import redditHelper from "../../assets/javascripts/reddit.js" +import searchHelper from "../../assets/javascripts/search.js" +import translateHelper from "../../assets/javascripts/translate/translate.js" +import mapsHelper from "../../assets/javascripts/maps.js" +import wikipediaHelper from "../../assets/javascripts/wikipedia.js" +import mediumHelper from "../../assets/javascripts/medium.js" +import quoraHelper from "../../assets/javascripts/quora.js" +import libremdbHelper from "../../assets/javascripts/imdb.js" +import reutersHelper from "../../assets/javascripts/reuters.js" +import imgurHelper from "../../assets/javascripts/imgur.js" +import tiktokHelper from "../../assets/javascripts/tiktok.js" +import sendTargetsHelper from "../../assets/javascripts/sendTargets.js" +import peertubeHelper from "../../assets/javascripts/peertube.js" +import lbryHelper from "../../assets/javascripts/lbry.js" utils.unify(true).then(r => { - if (!r) document.getElementById('unify_div').style.display = 'none'; - else { - const unify = document.getElementById('unify'); - const textElement = document.getElementById('unify').getElementsByTagName('h4')[0] - unify.addEventListener("click", () => { - const oldHtml = textElement.innerHTML; - textElement.innerHTML = '...'; - browser.runtime.sendMessage({ function: 'unify' }, - response => { if (response && response.response) textElement.innerHTML = oldHtml }) - } - ); - } + if (!r) document.getElementById("unify_div").style.display = "none" + else { + const unify = document.getElementById("unify") + const textElement = document.getElementById("unify").getElementsByTagName("h4")[0] + unify.addEventListener("click", () => { + const oldHtml = textElement.innerHTML + textElement.innerHTML = "..." + browser.runtime.sendMessage({ function: "unify" }, response => { + if (response && response.response) textElement.innerHTML = oldHtml + }) + }) + } }) utils.switchInstance(true).then(r => { - if (!r) document.getElementById("change_instance_div").style.display = 'none'; - else document.getElementById("change_instance").addEventListener("click", () => utils.switchInstance(false)); -}); + if (!r) document.getElementById("change_instance_div").style.display = "none" + else document.getElementById("change_instance").addEventListener("click", () => utils.switchInstance(false)) +}) utils.copyRaw(true).then(r => { - if (!r) document.getElementById('copy_raw_div').style.display = 'none'; - else { - const copy_raw = document.getElementById('copy_raw'); - copy_raw.addEventListener("click", () => utils.copyRaw(false, copy_raw)); - } + if (!r) document.getElementById("copy_raw_div").style.display = "none" + else { + const copy_raw = document.getElementById("copy_raw") + copy_raw.addEventListener("click", () => utils.copyRaw(false, copy_raw)) + } }) -document.getElementById("more-options").addEventListener("click", () => browser.runtime.openOptionsPage()); +document.getElementById("more-options").addEventListener("click", () => browser.runtime.openOptionsPage()) -const allSites = document.getElementsByClassName('all_sites')[0]; -const currSite = document.getElementsByClassName('current_site')[0]; +const allSites = document.getElementsByClassName("all_sites")[0] +const currSite = document.getElementsByClassName("current_site")[0] -const disableTwitterCurrentSite = currSite.getElementsByClassName("disable-nitter")[0]; -const disableTwitterAllSites = allSites.getElementsByClassName("disable-nitter")[0]; +const disableTwitterCurrentSite = currSite.getElementsByClassName("disable-nitter")[0] +const disableTwitterAllSites = allSites.getElementsByClassName("disable-nitter")[0] -const disableYoutubeCurrentSite = currSite.getElementsByClassName("disable-youtube")[0]; -const disableYoutubeAllSites = allSites.getElementsByClassName("disable-youtube")[0]; +const disableYoutubeCurrentSite = currSite.getElementsByClassName("disable-youtube")[0] +const disableYoutubeAllSites = allSites.getElementsByClassName("disable-youtube")[0] -const disableYoutubeMusicCurrentSite = currSite.getElementsByClassName("disable-youtubeMusic")[0]; -const disableYoutubeMusicAllSites = allSites.getElementsByClassName("disable-youtubeMusic")[0]; +const disableYoutubeMusicCurrentSite = currSite.getElementsByClassName("disable-youtubeMusic")[0] +const disableYoutubeMusicAllSites = allSites.getElementsByClassName("disable-youtubeMusic")[0] -const disableInstagramCurrentSite = currSite.getElementsByClassName("disable-bibliogram")[0]; -const disableInstagramAllSites = allSites.getElementsByClassName("disable-bibliogram")[0]; +const disableInstagramCurrentSite = currSite.getElementsByClassName("disable-bibliogram")[0] +const disableInstagramAllSites = allSites.getElementsByClassName("disable-bibliogram")[0] -const disableMapsCurrentSite = currSite.getElementsByClassName("disable-osm")[0]; -const disableMapsAllSites = allSites.getElementsByClassName("disable-osm")[0]; +const disableMapsCurrentSite = currSite.getElementsByClassName("disable-osm")[0] +const disableMapsAllSites = allSites.getElementsByClassName("disable-osm")[0] -const disableRedditCurrentSite = currSite.getElementsByClassName("disable-reddit")[0]; -const disableRedditAllSites = allSites.getElementsByClassName("disable-reddit")[0]; +const disableRedditCurrentSite = currSite.getElementsByClassName("disable-reddit")[0] +const disableRedditAllSites = allSites.getElementsByClassName("disable-reddit")[0] -const disableSearchCurrentSite = currSite.getElementsByClassName("disable-search")[0]; -const disableSearchAllSites = allSites.getElementsByClassName("disable-search")[0]; +const disableSearchCurrentSite = currSite.getElementsByClassName("disable-search")[0] +const disableSearchAllSites = allSites.getElementsByClassName("disable-search")[0] -const disableTranslateCurrentSite = currSite.getElementsByClassName("disable-translate")[0]; -const disableTranslateAllSites = allSites.getElementsByClassName("disable-translate")[0]; +const disableTranslateCurrentSite = currSite.getElementsByClassName("disable-translate")[0] +const disableTranslateAllSites = allSites.getElementsByClassName("disable-translate")[0] -const disableWikipediaCurrentSite = currSite.getElementsByClassName("disable-wikipedia")[0]; -const disableWikipediaAllSites = allSites.getElementsByClassName("disable-wikipedia")[0]; +const disableWikipediaCurrentSite = currSite.getElementsByClassName("disable-wikipedia")[0] +const disableWikipediaAllSites = allSites.getElementsByClassName("disable-wikipedia")[0] -const disableMediumCurrentSite = currSite.getElementsByClassName("disable-medium")[0]; -const disableMediumAllSites = allSites.getElementsByClassName("disable-medium")[0]; +const disableMediumCurrentSite = currSite.getElementsByClassName("disable-medium")[0] +const disableMediumAllSites = allSites.getElementsByClassName("disable-medium")[0] -const disableQuoraCurrentSite = currSite.getElementsByClassName("disable-quora")[0]; -const disableQuoraAllSites = allSites.getElementsByClassName("disable-quora")[0]; +const disableQuoraCurrentSite = currSite.getElementsByClassName("disable-quora")[0] +const disableQuoraAllSites = allSites.getElementsByClassName("disable-quora")[0] -const disableImdbCurrentSite = currSite.getElementsByClassName("disable-imdb")[0]; -const disableImdbAllSites = allSites.getElementsByClassName("disable-imdb")[0]; +const disableImdbCurrentSite = currSite.getElementsByClassName("disable-imdb")[0] +const disableImdbAllSites = allSites.getElementsByClassName("disable-imdb")[0] -const disableReutersCurrentSite = currSite.getElementsByClassName("disable-reuters")[0]; -const disableReutersAllSites = allSites.getElementsByClassName("disable-reuters")[0]; +const disableReutersCurrentSite = currSite.getElementsByClassName("disable-reuters")[0] +const disableReutersAllSites = allSites.getElementsByClassName("disable-reuters")[0] -const disablePeertubeTargetsCurrentSite = currSite.getElementsByClassName("disable-peertube")[0]; -const disablePeertubeTargetsAllSites = allSites.getElementsByClassName("disable-peertube")[0]; +const disablePeertubeTargetsCurrentSite = currSite.getElementsByClassName("disable-peertube")[0] +const disablePeertubeTargetsAllSites = allSites.getElementsByClassName("disable-peertube")[0] -const disableLbryTargetsCurrentSite = currSite.getElementsByClassName("disable-lbry")[0]; -const disableLbryTargetsAllSites = allSites.getElementsByClassName("disable-lbry")[0]; +const disableLbryTargetsCurrentSite = currSite.getElementsByClassName("disable-lbry")[0] +const disableLbryTargetsAllSites = allSites.getElementsByClassName("disable-lbry")[0] -const disableSendTargetsCurrentSite = currSite.getElementsByClassName("disable-sendTargets")[0]; -const disableSendTargetsAllSites = allSites.getElementsByClassName("disable-sendTargets")[0]; +const disableSendTargetsCurrentSite = currSite.getElementsByClassName("disable-sendTargets")[0] +const disableSendTargetsAllSites = allSites.getElementsByClassName("disable-sendTargets")[0] -const disableImgurCurrentSite = currSite.getElementsByClassName("disable-imgur")[0]; -const disableImgurAllSites = allSites.getElementsByClassName("disable-imgur")[0]; +const disableImgurCurrentSite = currSite.getElementsByClassName("disable-imgur")[0] +const disableImgurAllSites = allSites.getElementsByClassName("disable-imgur")[0] -const disableTiktokCurrentSite = currSite.getElementsByClassName("disable-tiktok")[0]; -const disableTiktokAllSites = allSites.getElementsByClassName("disable-tiktok")[0]; +const disableTiktokCurrentSite = currSite.getElementsByClassName("disable-tiktok")[0] +const disableTiktokAllSites = allSites.getElementsByClassName("disable-tiktok")[0] -const currentSiteIsFrontend = document.getElementById('current_site_divider') +const currentSiteIsFrontend = document.getElementById("current_site_divider") browser.storage.local.get( - [ - "disableTwitter", - "disableYoutube", - "disableYoutubeMusic", - "disableInstagram", - "disableMaps", - "disableReddit", - "disableSearch", - "translateDisable", - "disableWikipedia", - "disableImgur", - "disableTiktok", - "disableMedium", - "disableQuora", - "disableImdb", - "disableReuters", - "disablePeertubeTargets", - "disableLbryTargets", - "disableSendTarget", - "popupFrontends", - ], - r => { - disableTwitterCurrentSite.checked = !r.disableTwitter; disableTwitterAllSites.checked = !r.disableTwitter; - disableYoutubeCurrentSite.checked = !r.disableYoutube; disableYoutubeAllSites.checked = !r.disableYoutube; - disableYoutubeMusicCurrentSite.checked = !r.disableYoutubeMusic; disableYoutubeMusicAllSites.checked = !r.disableYoutubeMusic; - disableInstagramCurrentSite.checked = !r.disableInstagram; disableInstagramAllSites.checked = !r.disableInstagram; - disableMapsCurrentSite.checked = !r.disableMaps; disableMapsAllSites.checked = !r.disableMaps; - disableRedditCurrentSite.checked = !r.disableReddit; disableRedditAllSites.checked = !r.disableReddit; - disableSearchCurrentSite.checked = !r.disableSearch; disableSearchAllSites.checked = !r.disableSearch; - disableTranslateCurrentSite.checked = !r.translateDisable; disableTranslateAllSites.checked = !r.translateDisable; - disableWikipediaCurrentSite.checked = !r.disableWikipedia; disableWikipediaAllSites.checked = !r.disableWikipedia; - disableImgurCurrentSite.checked = !r.disableImgur; disableImgurAllSites.checked = !r.disableImgur; - disableTiktokCurrentSite.checked = !r.disableTiktok; disableTiktokAllSites.checked = !r.disableTiktok; - disableMediumCurrentSite.checked = !r.disableMedium; disableMediumAllSites.checked = !r.disableMedium; - disableQuoraCurrentSite.checked = !r.disableQuora; disableQuoraAllSites.checked = !r.disableQuora; - disableImdbCurrentSite.checked = !r.disableImdb; disableImdbAllSites.checked = !r.disableImdb; - disableReutersCurrentSite.checked = !r.disableReuters; disableReutersAllSites.checked = !r.disableReuters; - disablePeertubeTargetsCurrentSite.checked = !r.disablePeertubeTargets; disablePeertubeTargetsAllSites.checked = !r.disablePeertubeTargets; - disableLbryTargetsCurrentSite.checked = !r.disableLbryTargets; disableLbryTargetsAllSites.checked = !r.disableLbryTargets; - disableSendTargetsCurrentSite.checked = !r.disableSendTarget; disableSendTargetsAllSites.checked = !r.disableSendTarget; + [ + "disableTwitter", + "disableYoutube", + "disableYoutubeMusic", + "disableInstagram", + "disableMaps", + "disableReddit", + "disableSearch", + "translateDisable", + "disableWikipedia", + "disableImgur", + "disableTiktok", + "disableMedium", + "disableQuora", + "disableImdb", + "disableReuters", + "disablePeertubeTargets", + "disableLbryTargets", + "disableSendTarget", + "popupFrontends", + ], + r => { + disableTwitterCurrentSite.checked = !r.disableTwitter + disableTwitterAllSites.checked = !r.disableTwitter + disableYoutubeCurrentSite.checked = !r.disableYoutube + disableYoutubeAllSites.checked = !r.disableYoutube + disableYoutubeMusicCurrentSite.checked = !r.disableYoutubeMusic + disableYoutubeMusicAllSites.checked = !r.disableYoutubeMusic + disableInstagramCurrentSite.checked = !r.disableInstagram + disableInstagramAllSites.checked = !r.disableInstagram + disableMapsCurrentSite.checked = !r.disableMaps + disableMapsAllSites.checked = !r.disableMaps + disableRedditCurrentSite.checked = !r.disableReddit + disableRedditAllSites.checked = !r.disableReddit + disableSearchCurrentSite.checked = !r.disableSearch + disableSearchAllSites.checked = !r.disableSearch + disableTranslateCurrentSite.checked = !r.translateDisable + disableTranslateAllSites.checked = !r.translateDisable + disableWikipediaCurrentSite.checked = !r.disableWikipedia + disableWikipediaAllSites.checked = !r.disableWikipedia + disableImgurCurrentSite.checked = !r.disableImgur + disableImgurAllSites.checked = !r.disableImgur + disableTiktokCurrentSite.checked = !r.disableTiktok + disableTiktokAllSites.checked = !r.disableTiktok + disableMediumCurrentSite.checked = !r.disableMedium + disableMediumAllSites.checked = !r.disableMedium + disableQuoraCurrentSite.checked = !r.disableQuora + disableQuoraAllSites.checked = !r.disableQuora + disableImdbCurrentSite.checked = !r.disableImdb + disableImdbAllSites.checked = !r.disableImdb + disableReutersCurrentSite.checked = !r.disableReuters + disableReutersAllSites.checked = !r.disableReuters + disablePeertubeTargetsCurrentSite.checked = !r.disablePeertubeTargets + disablePeertubeTargetsAllSites.checked = !r.disablePeertubeTargets + disableLbryTargetsCurrentSite.checked = !r.disableLbryTargets + disableLbryTargetsAllSites.checked = !r.disableLbryTargets + disableSendTargetsCurrentSite.checked = !r.disableSendTarget + disableSendTargetsAllSites.checked = !r.disableSendTarget - browser.tabs.query({ active: true, currentWindow: true }, async tabs => { - for (const frontend of generalHelper.allPopupFrontends) { - if (!r.popupFrontends.includes(frontend)) - allSites.getElementsByClassName(frontend)[0].classList.add("hide") - else - allSites.getElementsByClassName(frontend)[0].classList.remove("hide") - currSite.getElementsByClassName(frontend)[0].classList.add("hide") - } + browser.tabs.query({ active: true, currentWindow: true }, async tabs => { + for (const frontend of generalHelper.allPopupFrontends) { + if (!r.popupFrontends.includes(frontend)) allSites.getElementsByClassName(frontend)[0].classList.add("hide") + else allSites.getElementsByClassName(frontend)[0].classList.remove("hide") + currSite.getElementsByClassName(frontend)[0].classList.add("hide") + } - let url; - try { url = new URL(tabs[0].url); } - catch { - currentSiteIsFrontend.classList.add("hide") - return; - } + let url + try { + url = new URL(tabs[0].url) + } catch { + currentSiteIsFrontend.classList.add("hide") + return + } - if (youtubeHelper.redirect(url, 'main_frame', false, true) || await youtubeHelper.switchInstance(url, 'main_frame', false, true)) { - currSite.getElementsByClassName('youtube')[0].classList.remove("hide"); - allSites.getElementsByClassName('youtube')[0].classList.add("hide"); - } - else if (twitterHelper.redirect(url, 'main_frame', false, true) || await twitterHelper.switchInstance(url, 'main_frame', false, true)) { - currSite.getElementsByClassName('twitter')[0].classList.remove("hide"); - allSites.getElementsByClassName('twitter')[0].classList.add("hide"); - } - else if (instagramHelper.redirect(url, 'main_frame', false, true) || await instagramHelper.switchInstance(url, 'main_frame', false, true)) { - currSite.getElementsByClassName('instagram')[0].classList.remove("hide"); - allSites.getElementsByClassName('instagram')[0].classList.add("hide"); - } - else if (mapsHelper.redirect(url, false)) { - currSite.getElementsByClassName('maps')[0].classList.remove("hide"); - allSites.getElementsByClassName('maps')[0].classList.add("hide"); - } - else if (redditHelper.redirect(url, 'main_frame', false, true) || await redditHelper.switchInstance(url, 'main_frame', false, true)) { - currSite.getElementsByClassName('reddit')[0].classList.remove("hide"); - allSites.getElementsByClassName('reddit')[0].classList.add("hide"); - } - else if (mediumHelper.redirect(url, 'main_frame', false, true) || await mediumHelper.switchInstance(url, 'main_frame', false, true)) { - currSite.getElementsByClassName('medium')[0].classList.remove("hide"); - allSites.getElementsByClassName('medium')[0].classList.add("hide"); - } - else if (quoraHelper.redirect(url, 'main_frame', false, true) || await quoraHelper.switchInstance(url, 'main_frame', false, true)) { - currSite.getElementsByClassName('quora')[0].classList.remove("hide"); - allSites.getElementsByClassName('quora')[0].classList.add("hide"); - } - else if (libremdbHelper.redirect(url, 'main_frame', false, true) || await libremdbHelper.switchInstance(url, 'main_frame', false, true)) { - currSite.getElementsByClassName('imdb')[0].classList.remove("hide"); - allSites.getElementsByClassName('imdb')[0].classList.add("hide"); - } - else if (reutersHelper.redirect(url, 'main_frame', false, true)) { - currSite.getElementsByClassName('reuters')[0].classList.remove("hide"); - allSites.getElementsByClassName('reuters')[0].classList.add("hide"); - } - else if (imgurHelper.redirect(url, 'main_frame', false, true) || await imgurHelper.switchInstance(url, 'main_frame', false, true)) { - currSite.getElementsByClassName('imgur')[0].classList.remove("hide"); - allSites.getElementsByClassName('imgur')[0].classList.add("hide"); - } - else if (tiktokHelper.redirect(url, 'main_frame', false, true) || await tiktokHelper.switchInstance(url, 'main_frame', false, true)) { - currSite.getElementsByClassName('tiktok')[0].classList.remove("hide"); - allSites.getElementsByClassName('tiktok')[0].classList.add("hide"); - } - else if (sendTargetsHelper.redirect(url, 'main_frame', false, true) || await sendTargetsHelper.switchInstance(url, 'main_frame', false, true)) { - currSite.getElementsByClassName('sendTargets')[0].classList.remove("hide"); - allSites.getElementsByClassName('sendTargets')[0].classList.add("hide"); - } - else if (peertubeHelper.redirect(url, 'main_frame', false, true) || await peertubeHelper.switchInstance(url, 'main_frame', false, true)) { - currSite.getElementsByClassName('peertube')[0].classList.remove("hide"); - allSites.getElementsByClassName('peertube')[0].classList.add("hide"); - } - else if (lbryHelper.redirect(url, 'main_frame', false, true) || await lbryHelper.switchInstance(url, 'main_frame', false, true)) { - currSite.getElementsByClassName('lbry')[0].classList.remove("hide"); - allSites.getElementsByClassName('lbry')[0].classList.add("hide"); - } - else if (translateHelper.redirect(url, true) || await translateHelper.switchInstance(url, true)) { - currSite.getElementsByClassName('translate')[0].classList.remove("hide"); - allSites.getElementsByClassName('translate')[0].classList.add("hide"); - } - else if (searchHelper.redirect(url, true) || await searchHelper.switchInstance(url, true)) { - currSite.getElementsByClassName('search')[0].classList.remove("hide"); - allSites.getElementsByClassName('search')[0].classList.add("hide"); - } - else if (wikipediaHelper.redirect(url, true) || await wikipediaHelper.switchInstance(url, true)) { - currSite.getElementsByClassName('wikipedia')[0].classList.remove("hide"); - allSites.getElementsByClassName('wikipedia')[0].classList.add("hide"); - } - else if (youtubeMusicHelper.redirect(url, 'main_frame', false, true)) { - currSite.getElementsByClassName('youtubeMusic')[0].classList.remove("hide"); - allSites.getElementsByClassName('youtubeMusic')[0].classList.add("hide"); - } else { - currentSiteIsFrontend.classList.add("hide") - } - }) - } + if (youtubeMusicHelper.redirect(url, "main_frame", false, true) || (await youtubeMusicHelper.switchInstance(url, true))) { + currSite.getElementsByClassName("youtubeMusic")[0].classList.remove("hide") + allSites.getElementsByClassName("youtubeMusic")[0].classList.add("hide") + } else if (twitterHelper.redirect(url, "main_frame", false, true) || (await twitterHelper.switchInstance(url, "main_frame", false, true))) { + currSite.getElementsByClassName("twitter")[0].classList.remove("hide") + allSites.getElementsByClassName("twitter")[0].classList.add("hide") + } else if (instagramHelper.redirect(url, "main_frame", false, true) || (await instagramHelper.switchInstance(url, "main_frame", false, true))) { + currSite.getElementsByClassName("instagram")[0].classList.remove("hide") + allSites.getElementsByClassName("instagram")[0].classList.add("hide") + } else if (mapsHelper.redirect(url, false)) { + currSite.getElementsByClassName("maps")[0].classList.remove("hide") + allSites.getElementsByClassName("maps")[0].classList.add("hide") + } else if (redditHelper.redirect(url, "main_frame", false, true) || (await redditHelper.switchInstance(url, "main_frame", false, true))) { + currSite.getElementsByClassName("reddit")[0].classList.remove("hide") + allSites.getElementsByClassName("reddit")[0].classList.add("hide") + } else if (mediumHelper.redirect(url, "main_frame", false, true) || (await mediumHelper.switchInstance(url, "main_frame", false, true))) { + currSite.getElementsByClassName("medium")[0].classList.remove("hide") + allSites.getElementsByClassName("medium")[0].classList.add("hide") + } else if (quoraHelper.redirect(url, "main_frame", false, true) || (await quoraHelper.switchInstance(url, "main_frame", false, true))) { + currSite.getElementsByClassName("quora")[0].classList.remove("hide") + allSites.getElementsByClassName("quora")[0].classList.add("hide") + } else if (libremdbHelper.redirect(url, "main_frame", false, true) || (await libremdbHelper.switchInstance(url, "main_frame", false, true))) { + currSite.getElementsByClassName("imdb")[0].classList.remove("hide") + allSites.getElementsByClassName("imdb")[0].classList.add("hide") + } else if (reutersHelper.redirect(url, "main_frame", false, true)) { + currSite.getElementsByClassName("reuters")[0].classList.remove("hide") + allSites.getElementsByClassName("reuters")[0].classList.add("hide") + } else if (imgurHelper.redirect(url, "main_frame", false, true) || (await imgurHelper.switchInstance(url, "main_frame", false, true))) { + currSite.getElementsByClassName("imgur")[0].classList.remove("hide") + allSites.getElementsByClassName("imgur")[0].classList.add("hide") + } else if (tiktokHelper.redirect(url, "main_frame", false, true) || (await tiktokHelper.switchInstance(url, "main_frame", false, true))) { + currSite.getElementsByClassName("tiktok")[0].classList.remove("hide") + allSites.getElementsByClassName("tiktok")[0].classList.add("hide") + } else if (sendTargetsHelper.redirect(url, "main_frame", false, true) || (await sendTargetsHelper.switchInstance(url, "main_frame", false, true))) { + currSite.getElementsByClassName("sendTargets")[0].classList.remove("hide") + allSites.getElementsByClassName("sendTargets")[0].classList.add("hide") + } else if (peertubeHelper.redirect(url, "main_frame", false, true) || (await peertubeHelper.switchInstance(url, true))) { + currSite.getElementsByClassName("peertube")[0].classList.remove("hide") + allSites.getElementsByClassName("peertube")[0].classList.add("hide") + } else if (lbryHelper.redirect(url, "main_frame", false, true) || (await lbryHelper.switchInstance(url, "main_frame", false, true))) { + currSite.getElementsByClassName("lbry")[0].classList.remove("hide") + allSites.getElementsByClassName("lbry")[0].classList.add("hide") + } else if (translateHelper.redirect(url, true) || (await translateHelper.switchInstance(url, true))) { + currSite.getElementsByClassName("translate")[0].classList.remove("hide") + allSites.getElementsByClassName("translate")[0].classList.add("hide") + } else if (searchHelper.redirect(url, true) || (await searchHelper.switchInstance(url, true))) { + currSite.getElementsByClassName("search")[0].classList.remove("hide") + allSites.getElementsByClassName("search")[0].classList.add("hide") + } else if (wikipediaHelper.redirect(url, true) || (await wikipediaHelper.switchInstance(url, true))) { + currSite.getElementsByClassName("wikipedia")[0].classList.remove("hide") + allSites.getElementsByClassName("wikipedia")[0].classList.add("hide") + } else if (youtubeHelper.redirect(url, "main_frame", false, true) || (await youtubeHelper.switchInstance(url, "main_frame", false, true))) { + currSite.getElementsByClassName("youtube")[0].classList.remove("hide") + allSites.getElementsByClassName("youtube")[0].classList.add("hide") + } else { + currentSiteIsFrontend.classList.add("hide") + } + }) + } ) document.addEventListener("change", () => { - browser.storage.local.get( - [ - "disableTwitter", - "disableYoutube", - "disableYoutubeMusic", - "disableInstagram", - "disableMaps", - "disableReddit", - "disableSearch", - "translateDisable", - "disableWikipedia", - "disableImgur", - "disableTiktok", - "disableMedium", - "disableQuora", - "disableImdb", - "disableReuters", - "disablePeertubeTargets", - "disableLbryTargets", - "disableSendTarget", - ], - r => { - if (!r.disableTwitter != disableTwitterCurrentSite.checked) browser.storage.local.set({ disableTwitter: !disableTwitterCurrentSite.checked }) - else if (!r.disableTwitter != disableTwitterAllSites.checked) browser.storage.local.set({ disableTwitter: !disableTwitterAllSites.checked }) + browser.storage.local.get( + [ + "disableTwitter", + "disableYoutube", + "disableYoutubeMusic", + "disableInstagram", + "disableMaps", + "disableReddit", + "disableSearch", + "translateDisable", + "disableWikipedia", + "disableImgur", + "disableTiktok", + "disableMedium", + "disableQuora", + "disableImdb", + "disableReuters", + "disablePeertubeTargets", + "disableLbryTargets", + "disableSendTarget", + ], + r => { + if (!r.disableTwitter != disableTwitterCurrentSite.checked) + browser.storage.local.set({ + disableTwitter: !disableTwitterCurrentSite.checked, + }) + else if (!r.disableTwitter != disableTwitterAllSites.checked) + browser.storage.local.set({ + disableTwitter: !disableTwitterAllSites.checked, + }) - if (!r.disableYoutube != disableYoutubeCurrentSite.checked) browser.storage.local.set({ disableYoutube: !disableYoutubeCurrentSite.checked }) - else if (!r.disableYoutube != disableYoutubeAllSites.checked) browser.storage.local.set({ disableYoutube: !disableYoutubeAllSites.checked }) + if (!r.disableYoutube != disableYoutubeCurrentSite.checked) + browser.storage.local.set({ + disableYoutube: !disableYoutubeCurrentSite.checked, + }) + else if (!r.disableYoutube != disableYoutubeAllSites.checked) + browser.storage.local.set({ + disableYoutube: !disableYoutubeAllSites.checked, + }) - if (!r.disableYoutubeMusic != disableYoutubeMusicCurrentSite.checked) browser.storage.local.set({ disableYoutubeMusic: !disableYoutubeMusicCurrentSite.checked }) - else if (!r.disableYoutubeMusic != disableYoutubeMusicAllSites.checked) browser.storage.local.set({ disableYoutubeMusic: !disableYoutubeMusicAllSites.checked }) + if (!r.disableYoutubeMusic != disableYoutubeMusicCurrentSite.checked) + browser.storage.local.set({ + disableYoutubeMusic: !disableYoutubeMusicCurrentSite.checked, + }) + else if (!r.disableYoutubeMusic != disableYoutubeMusicAllSites.checked) + browser.storage.local.set({ + disableYoutubeMusic: !disableYoutubeMusicAllSites.checked, + }) - if (!r.disableInstagram != disableInstagramCurrentSite.checked) browser.storage.local.set({ disableInstagram: !disableInstagramCurrentSite.checked }) - else if (!r.disableInstagram != disableInstagramAllSites.checked) browser.storage.local.set({ disableInstagram: !disableInstagramAllSites.checked }) + if (!r.disableInstagram != disableInstagramCurrentSite.checked) + browser.storage.local.set({ + disableInstagram: !disableInstagramCurrentSite.checked, + }) + else if (!r.disableInstagram != disableInstagramAllSites.checked) + browser.storage.local.set({ + disableInstagram: !disableInstagramAllSites.checked, + }) - if (!r.disableMaps != disableMapsCurrentSite.checked) browser.storage.local.set({ disableMaps: !disableMapsCurrentSite.checked }) - else if (!r.disableMaps != disableMapsAllSites.checked) browser.storage.local.set({ disableMaps: !disableMapsAllSites.checked }) + if (!r.disableMaps != disableMapsCurrentSite.checked) + browser.storage.local.set({ + disableMaps: !disableMapsCurrentSite.checked, + }) + else if (!r.disableMaps != disableMapsAllSites.checked) + browser.storage.local.set({ + disableMaps: !disableMapsAllSites.checked, + }) - if (!r.disableReddit != disableRedditCurrentSite.checked) browser.storage.local.set({ disableReddit: !disableRedditCurrentSite.checked }) - else if (!r.disableReddit != disableRedditAllSites.checked) browser.storage.local.set({ disableReddit: !disableRedditAllSites.checked }) + if (!r.disableReddit != disableRedditCurrentSite.checked) + browser.storage.local.set({ + disableReddit: !disableRedditCurrentSite.checked, + }) + else if (!r.disableReddit != disableRedditAllSites.checked) + browser.storage.local.set({ + disableReddit: !disableRedditAllSites.checked, + }) - if (!r.disableSearch != disableSearchCurrentSite.checked) browser.storage.local.set({ disableSearch: !disableSearchCurrentSite.checked }) - else if (!r.disableSearch != disableSearchAllSites.checked) browser.storage.local.set({ disableSearch: !disableSearchAllSites.checked }) + if (!r.disableSearch != disableSearchCurrentSite.checked) + browser.storage.local.set({ + disableSearch: !disableSearchCurrentSite.checked, + }) + else if (!r.disableSearch != disableSearchAllSites.checked) + browser.storage.local.set({ + disableSearch: !disableSearchAllSites.checked, + }) - if (!r.translateDisable != disableTranslateCurrentSite.checked) browser.storage.local.set({ translateDisable: !disableTranslateCurrentSite.checked }) - else if (!r.translateDisable != disableTranslateAllSites.checked) browser.storage.local.set({ translateDisable: !disableTranslateAllSites.checked }) + if (!r.translateDisable != disableTranslateCurrentSite.checked) + browser.storage.local.set({ + translateDisable: !disableTranslateCurrentSite.checked, + }) + else if (!r.translateDisable != disableTranslateAllSites.checked) + browser.storage.local.set({ + translateDisable: !disableTranslateAllSites.checked, + }) - if (!r.disableWikipedia != disableWikipediaCurrentSite.checked) browser.storage.local.set({ disableWikipedia: !disableWikipediaCurrentSite.checked }) - else if (!r.disableWikipedia != disableWikipediaAllSites.checked) browser.storage.local.set({ disableWikipedia: !disableWikipediaAllSites.checked }) + if (!r.disableWikipedia != disableWikipediaCurrentSite.checked) + browser.storage.local.set({ + disableWikipedia: !disableWikipediaCurrentSite.checked, + }) + else if (!r.disableWikipedia != disableWikipediaAllSites.checked) + browser.storage.local.set({ + disableWikipedia: !disableWikipediaAllSites.checked, + }) - if (!r.disableImgur != disableImgurCurrentSite.checked) browser.storage.local.set({ disableImgur: !disableImgurCurrentSite.checked }) - else if (!r.disableImgur != disableImgurAllSites.checked) browser.storage.local.set({ disableImgur: !disableImgurAllSites.checked }) + if (!r.disableImgur != disableImgurCurrentSite.checked) + browser.storage.local.set({ + disableImgur: !disableImgurCurrentSite.checked, + }) + else if (!r.disableImgur != disableImgurAllSites.checked) + browser.storage.local.set({ + disableImgur: !disableImgurAllSites.checked, + }) - if (!r.disableTiktok != disableTiktokCurrentSite.checked) browser.storage.local.set({ disableTiktok: !disableTiktokCurrentSite.checked }) - else if (!r.disableTiktok != disableTiktokAllSites.checked) browser.storage.local.set({ disableTiktok: !disableTiktokAllSites.checked }) + if (!r.disableTiktok != disableTiktokCurrentSite.checked) + browser.storage.local.set({ + disableTiktok: !disableTiktokCurrentSite.checked, + }) + else if (!r.disableTiktok != disableTiktokAllSites.checked) + browser.storage.local.set({ + disableTiktok: !disableTiktokAllSites.checked, + }) - if (!r.disableMedium != disableMediumCurrentSite.checked) browser.storage.local.set({ disableMedium: !disableMediumCurrentSite.checked }) - else if (!r.disableMedium != disableMediumAllSites.checked) browser.storage.local.set({ disableMedium: !disableMediumAllSites.checked }) + if (!r.disableMedium != disableMediumCurrentSite.checked) + browser.storage.local.set({ + disableMedium: !disableMediumCurrentSite.checked, + }) + else if (!r.disableMedium != disableMediumAllSites.checked) + browser.storage.local.set({ + disableMedium: !disableMediumAllSites.checked, + }) - if (!r.disableQuora != disableQuoraCurrentSite.checked) browser.storage.local.set({ disableQuora: !disableQuoraCurrentSite.checked }) - else if (!r.disableQuora != disableQuoraAllSites.checked) browser.storage.local.set({ disableQuora: !disableQuoraAllSites.checked }) + if (!r.disableQuora != disableQuoraCurrentSite.checked) + browser.storage.local.set({ + disableQuora: !disableQuoraCurrentSite.checked, + }) + else if (!r.disableQuora != disableQuoraAllSites.checked) + browser.storage.local.set({ + disableQuora: !disableQuoraAllSites.checked, + }) - if (!r.disableImdb != disableImdbCurrentSite.checked) browser.storage.local.set({ disableImdb: !disableImdbCurrentSite.checked }) - else if (!r.disableImdb != disableImdbAllSites.checked) browser.storage.local.set({ disableImdb: !disableImdbAllSites.checked }) + if (!r.disableImdb != disableImdbCurrentSite.checked) + browser.storage.local.set({ + disableImdb: !disableImdbCurrentSite.checked, + }) + else if (!r.disableImdb != disableImdbAllSites.checked) + browser.storage.local.set({ + disableImdb: !disableImdbAllSites.checked, + }) - if (!r.disableReuters != disableReutersCurrentSite.checked) browser.storage.local.set({ disableReuters: !disableReutersCurrentSite.checked }) - else if (!r.disableReuters != disableReutersAllSites.checked) browser.storage.local.set({ disableReuters: !disableReutersAllSites.checked }) + if (!r.disableReuters != disableReutersCurrentSite.checked) + browser.storage.local.set({ + disableReuters: !disableReutersCurrentSite.checked, + }) + else if (!r.disableReuters != disableReutersAllSites.checked) + browser.storage.local.set({ + disableReuters: !disableReutersAllSites.checked, + }) - if (!r.disablePeertubeTargets != disablePeertubeTargetsCurrentSite.checked) browser.storage.local.set({ disablePeertubeTargets: !disablePeertubeTargetsCurrentSite.checked }) - else if (!r.disablePeertubeTargets != disablePeertubeTargetsAllSites.checked) browser.storage.local.set({ disablePeertubeTargets: !disablePeertubeTargetsAllSites.checked }) + if (!r.disablePeertubeTargets != disablePeertubeTargetsCurrentSite.checked) + browser.storage.local.set({ + disablePeertubeTargets: !disablePeertubeTargetsCurrentSite.checked, + }) + else if (!r.disablePeertubeTargets != disablePeertubeTargetsAllSites.checked) + browser.storage.local.set({ + disablePeertubeTargets: !disablePeertubeTargetsAllSites.checked, + }) - if (!r.disableLbryTargets != disableLbryTargetsCurrentSite.checked) browser.storage.local.set({ disableLbryTargets: !disableLbryTargetsCurrentSite.checked }) - else if (!r.disableLbryTargets != disableLbryTargetsAllSites.checked) browser.storage.local.set({ disableLbryTargets: !disableLbryTargetsAllSites.checked }) + if (!r.disableLbryTargets != disableLbryTargetsCurrentSite.checked) + browser.storage.local.set({ + disableLbryTargets: !disableLbryTargetsCurrentSite.checked, + }) + else if (!r.disableLbryTargets != disableLbryTargetsAllSites.checked) + browser.storage.local.set({ + disableLbryTargets: !disableLbryTargetsAllSites.checked, + }) - if (!r.disableSendTarget != disableSendTargetsCurrentSite.checked) browser.storage.local.set({ disableSendTarget: !disableSendTargetsCurrentSite.checked }) - else if (!r.disableSendTarget != disableSendTargetsAllSites.checked) browser.storage.local.set({ disableSendTarget: !disableSendTargetsAllSites.checked }) - }) + if (!r.disableSendTarget != disableSendTargetsCurrentSite.checked) + browser.storage.local.set({ + disableSendTarget: !disableSendTargetsCurrentSite.checked, + }) + else if (!r.disableSendTarget != disableSendTargetsAllSites.checked) + browser.storage.local.set({ + disableSendTarget: !disableSendTargetsAllSites.checked, + }) + } + ) }) -for (const a of document.getElementsByTagName('a')) { - a.addEventListener('click', e => { - if (!a.classList.contains('prevent')) { - browser.tabs.create({ url: a.getAttribute('href') }); - e.preventDefault(); - } - }) +for (const a of document.getElementsByTagName("a")) { + a.addEventListener("click", e => { + if (!a.classList.contains("prevent")) { + browser.tabs.create({ url: a.getAttribute("href") }) + e.preventDefault() + } + }) } diff --git a/src/pages/popup/style.css b/src/pages/popup/style.css index d2171dd..0cb2791 100644 --- a/src/pages/popup/style.css +++ b/src/pages/popup/style.css @@ -1,23 +1,24 @@ body { - width: 230px; - min-height: auto; + width: 230px; + min-height: auto; } -html, body { - margin: 0; +html, +body { + margin: 0; } .hide { - display: none !important; + display: none !important; } .button { - display: flex; - margin: 0 auto; - justify-content: space-between; - width: 100%; + display: flex; + margin: 0 auto; + justify-content: space-between; + width: 100%; } .space { - height: 10px; + height: 10px; } diff --git a/src/pages/stylesheets/styles.css b/src/pages/stylesheets/styles.css index 67b0229..06abab3 100644 --- a/src/pages/stylesheets/styles.css +++ b/src/pages/stylesheets/styles.css @@ -1,465 +1,466 @@ body { - --text: #fff; - --bg-main: #121212; - --bg-secondary: #202020; - --active: #fbc117; - --space: 5px; - --danger: #f04141; - --danger-light: #f9d0d5; - --dark-grey: #767676; - --light-grey: #c3c3c3; + --text: #fff; + --bg-main: #121212; + --bg-secondary: #202020; + --active: #fbc117; + --space: 5px; + --danger: #f04141; + --danger-light: #f9d0d5; + --dark-grey: #767676; + --light-grey: #c3c3c3; } @font-face { - font-family: 'Inter'; - src: url('Inter-VariableFont_slnt,wght.ttf'); - font-weight: normal; - font-style: normal; + font-family: "Inter"; + src: url("Inter-VariableFont_slnt,wght.ttf"); + font-weight: normal; + font-style: normal; } @font-face { - font-family: 'Vazirmatn'; - src: url('Vazirmatn-VariableFont_wght.ttf'); - font-weight: normal; - font-style: normal; + font-family: "Vazirmatn"; + src: url("Vazirmatn-VariableFont_wght.ttf"); + font-weight: normal; + font-style: normal; } body { - margin: auto; - padding: 0; - font-family: 'Inter'; - background-color: var(--bg-main); - color: var(--text); - overflow-x: hidden + margin: auto; + padding: 0; + font-family: "Inter"; + background-color: var(--bg-main); + color: var(--text); + overflow-x: hidden; } body.rtl { - font-family: 'Vazirmatn'; - /* line-height: 1; */ + font-family: "Vazirmatn"; + /* line-height: 1; */ } div.some-block input[type="checkbox"] { - appearance: none; - -moz-appearance: none; - -webkit-appearance: none; + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; } .title { - display: flex; - align-items: center; - text-decoration: none; - color: var(--text); + display: flex; + align-items: center; + text-decoration: none; + color: var(--text); } -img, svg { - margin-right: 10px; - height: 26px; - width: 26px; - color: var(--text); +img, +svg { + margin-right: 10px; + height: 26px; + width: 26px; + color: var(--text); } -body.rtl img, body.rtl svg { - margin-right: 0px; - margin-left: 10px; +body.rtl img, +body.rtl svg { + margin-right: 0px; + margin-left: 10px; } input[type="url"], input[type="text"], select { - font-weight: bold; - box-sizing: border-box; - border-style: solid; - border-color: #767676; - color: var(--text); - font-size: 16px; - padding: 8px; - background-color: var(--bg-secondary); - border: none; - margin: 0; - max-width: 500px; - border-radius: 3px; + font-weight: bold; + box-sizing: border-box; + border-style: solid; + border-color: #767676; + color: var(--text); + font-size: 16px; + padding: 8px; + background-color: var(--bg-secondary); + border: none; + margin: 0; + max-width: 500px; + border-radius: 3px; } input[type="url"], input[type="text"] { - width: 400px; + width: 400px; } input:invalid { - color: var(--danger); - border-color: var(--danger); + color: var(--danger); + border-color: var(--danger); } .button svg { - height: 18px; - width: 18px; + height: 18px; + width: 18px; } section.option-block { - width: 750px; - margin: 0 50px; + width: 750px; + margin: 0 50px; } section.option-block h2 { - margin: 0; + margin: 0; } body.option { - display: flex; - padding: 40px; - width: 900px; + display: flex; + padding: 40px; + width: 900px; } section.links div { - margin: 20px 0; - width: max-content; + margin: 20px 0; + width: max-content; } a { - color: var(--active); + color: var(--active); } section.links a { - display: flex; - align-items: center; - font-size: 18px; - text-decoration: none; - color: white; - transition: 0.1s; + display: flex; + align-items: center; + font-size: 18px; + text-decoration: none; + color: white; + transition: 0.1s; } section.links a:hover, section.links a.selected { - color: var(--active); + color: var(--active); } input[type="range"] { - -webkit-appearance: none; - width: 350px; - height: 7px; - border-radius: 50px; - background: var(--text); + -webkit-appearance: none; + width: 350px; + height: 7px; + border-radius: 50px; + background: var(--text); } input[type="range"]:hover { - background: var(--light-grey); + background: var(--light-grey); } input[type="range"]::-webkit-slider-thumb { - appearance: none; - width: 20px; - height: 20px; - border-radius: 50%; - background: var(--active); - border: none; + appearance: none; + width: 20px; + height: 20px; + border-radius: 50%; + background: var(--active); + border: none; } input[type="range"]::-moz-range-thumb { - width: 20px; - height: 20px; - border-radius: 50%; - background: var(--active); - border: none; + width: 20px; + height: 20px; + border-radius: 50%; + background: var(--active); + border: none; } ::placeholder { - color: var(--text); - opacity: 0.7; + color: var(--text); + opacity: 0.7; } #volume-value { - color: var(--active); + color: var(--active); } /* \25BE */ hr { - height: 2px; - margin: 0 15px; - background-color: rgb(77, 77, 77); - border: none; + height: 2px; + margin: 0 15px; + background-color: rgb(77, 77, 77); + border: none; } div.some-block { - padding: 0 15px; - justify-content: space-between; - display: flex; - align-items: center; - margin-top: 10px; - margin-bottom: 10px; + padding: 0 15px; + justify-content: space-between; + display: flex; + align-items: center; + margin-top: 10px; + margin-bottom: 10px; } div.option-block { - margin: 30px 0; + margin: 30px 0; } h4 { - margin: 10px 0; - font-size: 18px; + margin: 10px 0; + font-size: 18px; } div.some-block h4 { - margin: 0; + margin: 0; } div.option-block h4 { - margin-right: 5px; - width: 80%; - min-width: 150px; - font-size: 18px; + margin-right: 5px; + width: 80%; + min-width: 150px; + font-size: 18px; } div.option-block h1 { - margin: 0; - font-size: 28px; - color: var(--text); + margin: 0; + font-size: 28px; + color: var(--text); } div.option-block div { - text-align: center; + text-align: center; } div.some-block input[type="checkbox"] { - width: 46px; - height: 23px; - background-color: var(--light-grey); - border-radius: 50px; - transition: .4s; - cursor: pointer; + width: 46px; + height: 23px; + background-color: var(--light-grey); + border-radius: 50px; + transition: 0.4s; + cursor: pointer; } div.some-block input[type="checkbox"]:checked { - background-color: var(--active); + background-color: var(--active); } div.some-block input[type="checkbox"]::before { - content: ""; - display: inline-block; - width: 18px; - height: 18px; - box-sizing: border-box; - position: relative; - top: 2.5px; - left: 3.5px; - background-color: white; - border-radius: 50%; - transition: .3s; + content: ""; + display: inline-block; + width: 18px; + height: 18px; + box-sizing: border-box; + position: relative; + top: 2.5px; + left: 3.5px; + background-color: white; + border-radius: 50%; + transition: 0.3s; } body.rtl div.some-block input[type="checkbox"]::before { - left: auto; - right: 4px; + left: auto; + right: 4px; } div.some-block input[type="checkbox"]:checked::before { - left: 24px; + left: 24px; } body.rtl div.some-block input[type="checkbox"]:checked::before { - left: auto; - right: 24px; + left: auto; + right: 24px; } div.buttons { - display: flex; - margin: 0 15px; - margin-bottom: 15px; - margin-top: 15px; - flex-wrap: wrap; - align-items: center; + display: flex; + margin: 0 15px; + margin-bottom: 15px; + margin-top: 15px; + flex-wrap: wrap; + align-items: center; } div.buttons-popup { - border-radius: 5px; - display: flex; - flex-wrap: wrap; - margin: 0 10px 7px 10px; - justify-content: start; - align-items: center; + border-radius: 5px; + display: flex; + flex-wrap: wrap; + margin: 0 10px 7px 10px; + justify-content: start; + align-items: center; } .button { - color: var(--text); - font-size: 16px; - font-weight: bold; - text-decoration: none; - cursor: pointer; - transition-duration: 0.1s; + color: var(--text); + font-size: 16px; + font-weight: bold; + text-decoration: none; + cursor: pointer; + transition-duration: 0.1s; } .button:hover { - color: var(--active); + color: var(--active); } .button svg { - width: auto; - height: auto; - padding: 0; - margin-right: 5px; + width: auto; + height: auto; + padding: 0; + margin-right: 5px; } .button:hover svg { - color: var(--active); + color: var(--active); } div.buttons-inline { - display: flex; - justify-content: start; - /* padding: 0 15px; */ + display: flex; + justify-content: start; + /* padding: 0 15px; */ } .button-inline { - display: inline-flex; - align-items: center; - margin: 7.5px 0; - background-color: var(--bg-secondary); - border-radius: 5px; - padding: 10px; + display: inline-flex; + align-items: center; + margin: 7.5px 0; + background-color: var(--bg-secondary); + border-radius: 5px; + padding: 10px; } .button:active { - transform: translateY(1px); + transform: translateY(1px); } button.default { - margin-left: 30px; - background-color: transparent; - border: none; - color: white; - padding: 5px; - width: 34px; - height: 34px; - text-align: center; - text-decoration: none; - display: inline-block; - font-size: 16px; - margin: 4px 2px; - cursor: pointer; + margin-left: 30px; + background-color: transparent; + border: none; + color: white; + padding: 5px; + width: 34px; + height: 34px; + text-align: center; + text-decoration: none; + display: inline-block; + font-size: 16px; + margin: 4px 2px; + cursor: pointer; } button svg { - color: var(--text); + color: var(--text); } -div.checklist{ -direction: ltr; +div.checklist { + direction: ltr; } div.checklist div { - justify-content: space-between; - margin: 5px 15px; - padding: 10px 0; - word-wrap: break-word; - display: flex; - + justify-content: space-between; + margin: 5px 15px; + padding: 10px 0; + word-wrap: break-word; + display: flex; } div.checklist a { - text-decoration: none; - color: var(--text); + text-decoration: none; + color: var(--text); } div.checklist a:hover { - text-decoration: underline; + text-decoration: underline; } div.checklist-popup div { - justify-content: space-between; - margin: 5px 15px; - padding: 5px 0; - max-width: 200px; - display: flex; - align-items: center; + justify-content: space-between; + margin: 5px 15px; + padding: 5px 0; + max-width: 200px; + display: flex; + align-items: center; } div.checklist-popup div div { - margin: 0; + margin: 0; } button.add { - background-color: transparent; - border: none; - padding: 0; - margin: 0; - text-decoration: none; - display: inline-block; - cursor: pointer; + background-color: transparent; + border: none; + padding: 0; + margin: 0; + text-decoration: none; + display: inline-block; + cursor: pointer; } div.disabled { - background-color: rgb(39, 39, 39); - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; + background-color: rgb(39, 39, 39); + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; } .light-theme.popup, .light-theme .popup { - background-color: var(--bg-secondary); + background-color: var(--bg-secondary); } body.light-theme { - --text: black; - --bg-main: white; - --bg-secondary: #fff; - --active: #fb9817; + --text: black; + --bg-main: white; + --bg-secondary: #fff; + --active: #fb9817; } body.light-theme select { - border: 1px solid black; + border: 1px solid black; } body.light-theme textarea { - color: black; - border: 1px solid #767676; + color: black; + border: 1px solid #767676; } body.light-theme textarea:focus { - outline: none; + outline: none; } body.light-theme a { - color: black; + color: black; } section.general { - display: flex; - flex-wrap: wrap; - margin-right: 0; - width: 100%; - justify-content: space-between; + display: flex; + flex-wrap: wrap; + margin-right: 0; + width: 100%; + justify-content: space-between; } section.general div { - margin-right: 20px; + margin-right: 20px; } #customize-popup { - width: 250px; + width: 250px; } button { - background-color:transparent; - color: var(--text); - border: none; - padding: 10px 5px; - text-decoration: none; - display: inline-block; - cursor: pointer; - border-radius: 5px; + background-color: transparent; + color: var(--text); + border: none; + padding: 10px 5px; + text-decoration: none; + display: inline-block; + cursor: pointer; + border-radius: 5px; } body div section { - display: none; + display: none; } -div.about > div{ - justify-content: start; - width: 520px; +div.about > div { + justify-content: start; + width: 520px; } div.about h4 { - width: auto; -} \ No newline at end of file + width: auto; +} diff --git a/web-ext-config.js b/web-ext-config.js index a2f0dc1..f30b73e 100644 --- a/web-ext-config.js +++ b/web-ext-config.js @@ -1,5 +1,3 @@ module.exports = { - ignoreFiles: [ - "instances/get_instances.py" - ], -}; \ No newline at end of file + ignoreFiles: ["instances/get_instances.py"], +}