From 868dccfb3b732d6862fa9d1e6aab2f651a9aa06e Mon Sep 17 00:00:00 2001 From: ManeraKai Date: Sat, 7 Jan 2023 00:24:25 +0300 Subject: Changed Update Instances selection mechanism. https://github.com/libredirect/libredirect/issues/334 Removed Peertube (maybe will readd it later). Optimized code --- README.md | 1 - src/assets/images/about-icon-white.svg | 44 ++++++++ src/assets/images/general-icon-white.svg | 41 +++++++ src/assets/images/instance-icon.svg | 3 - src/assets/images/maps-icon-white.svg | 40 +++++++ src/assets/images/medium-icon.svg | 65 ++++++++++- src/assets/images/search-icon-white.svg | 38 +++++++ src/assets/images/sendFiles-icon-white.svg | 40 +++++++ src/assets/images/textStorage-icon-white.svg | 40 +++++++ src/assets/images/translate-icon-white.svg | 40 +++++++ src/assets/javascripts/services.js | 140 +++++------------------- src/assets/javascripts/utils.js | 16 +++ src/config.json | 26 +---- src/instances/get_instances.py | 25 ----- src/pages/background/background.js | 54 +++++----- src/pages/options/index.js | 154 +++++++++++---------------- src/pages/options/widgets/general.js | 35 ++---- src/pages/options/widgets/services.pug | 14 ++- src/pages/popup/popup.js | 2 +- src/pages/widgets/head.pug | 2 +- src/pages/widgets/links.pug | 5 +- src/pages/widgets/switches.pug | 5 +- 22 files changed, 503 insertions(+), 327 deletions(-) create mode 100644 src/assets/images/about-icon-white.svg create mode 100644 src/assets/images/general-icon-white.svg delete mode 100644 src/assets/images/instance-icon.svg create mode 100644 src/assets/images/maps-icon-white.svg create mode 100644 src/assets/images/search-icon-white.svg create mode 100644 src/assets/images/sendFiles-icon-white.svg create mode 100644 src/assets/images/textStorage-icon-white.svg create mode 100644 src/assets/images/translate-icon-white.svg diff --git a/README.md b/README.md index a7bfd030..56b75633 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,6 @@ A web extension that redirects YouTube, Twitter, Instagram... requests to altern - Medium => [Scribe](https://sr.ht/~edwardloveall/Scribe/) - Quora => [Quetre](https://github.com/zyachel/quetre) - IMDb => [libremdb](https://github.com/zyachel/libremdb) -- PeerTube => [SimpleerTube](https://git.sr.ht/~metalune/simpleweb_peertube) - LBRY/Odysee => [Librarian](https://codeberg.org/librarian/librarian), [LBRY Desktop](https://lbry.com/get) - Search => [SearXNG](https://github.com/searxng/searxng), [SearX](https://searx.github.io/searx/), [Whoogle](https://benbusby.com/projects/whoogle-search/), [LibreX](https://github.com/hnhx/librex/) - Translate => [SimplyTranslate](https://git.sr.ht/~metalune/simplytranslate_web), [LingvaTranslate](https://github.com/TheDavidDelta/lingva-translate), [LibreTranslate](https://github.com/LibreTranslate/LibreTranslate) diff --git a/src/assets/images/about-icon-white.svg b/src/assets/images/about-icon-white.svg new file mode 100644 index 00000000..7c4ef3ca --- /dev/null +++ b/src/assets/images/about-icon-white.svg @@ -0,0 +1,44 @@ + + + + + + + diff --git a/src/assets/images/general-icon-white.svg b/src/assets/images/general-icon-white.svg new file mode 100644 index 00000000..9e4c8a06 --- /dev/null +++ b/src/assets/images/general-icon-white.svg @@ -0,0 +1,41 @@ + + + + + + diff --git a/src/assets/images/instance-icon.svg b/src/assets/images/instance-icon.svg deleted file mode 100644 index 6b034c6f..00000000 --- a/src/assets/images/instance-icon.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/assets/images/maps-icon-white.svg b/src/assets/images/maps-icon-white.svg new file mode 100644 index 00000000..faefa200 --- /dev/null +++ b/src/assets/images/maps-icon-white.svg @@ -0,0 +1,40 @@ + + + + + + diff --git a/src/assets/images/medium-icon.svg b/src/assets/images/medium-icon.svg index 72612486..f77ed5bb 100644 --- a/src/assets/images/medium-icon.svg +++ b/src/assets/images/medium-icon.svg @@ -1,5 +1,62 @@ - - - - + + + + + + + + diff --git a/src/assets/images/search-icon-white.svg b/src/assets/images/search-icon-white.svg new file mode 100644 index 00000000..432fd136 --- /dev/null +++ b/src/assets/images/search-icon-white.svg @@ -0,0 +1,38 @@ + + + + + + diff --git a/src/assets/images/sendFiles-icon-white.svg b/src/assets/images/sendFiles-icon-white.svg new file mode 100644 index 00000000..f2447a77 --- /dev/null +++ b/src/assets/images/sendFiles-icon-white.svg @@ -0,0 +1,40 @@ + + + + + + diff --git a/src/assets/images/textStorage-icon-white.svg b/src/assets/images/textStorage-icon-white.svg new file mode 100644 index 00000000..3ca7c595 --- /dev/null +++ b/src/assets/images/textStorage-icon-white.svg @@ -0,0 +1,40 @@ + + + + + + diff --git a/src/assets/images/translate-icon-white.svg b/src/assets/images/translate-icon-white.svg new file mode 100644 index 00000000..f884ee14 --- /dev/null +++ b/src/assets/images/translate-icon-white.svg @@ -0,0 +1,40 @@ + + + + + + diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js index 598dd30e..4f3b6be3 100644 --- a/src/assets/javascripts/services.js +++ b/src/assets/javascripts/services.js @@ -8,7 +8,6 @@ function init() { return new Promise(async resolve => { browser.storage.local.get(["options", "redirects", "targets"], r => { options = r.options - redirects = r.redirects targets = r.targets fetch("/config.json") .then(response => response.text()) @@ -27,7 +26,7 @@ function fetchFrontendInstanceList(service, frontend, redirects, options, config let tmp = [] if (config.services[service].frontends[frontend].instanceList) { for (const network in config.networks) { - tmp.push(...redirects[network], ...options[frontend][network].custom) + tmp.push(...options[frontend]) } } return tmp @@ -82,7 +81,7 @@ function redirect(url, type, initiator, forceRedirection) { let instanceList = [] for (const network in options[frontend]) { - instanceList.push(...[...options[frontend][network].enabled, ...options[frontend][network].custom]) + instanceList.push(...options[frontend]) } if (instanceList.length === 0) return randomInstance = utils.getRandomInstance(instanceList) @@ -105,7 +104,6 @@ function redirect(url, type, initiator, forceRedirection) { } return [zoom, lon, lat] } - console.log(frontend) switch (frontend) { // This is where all instance-specific code must be ran to convert the service url to one that can be understood by the frontend. case "beatbump": @@ -189,7 +187,6 @@ function redirect(url, type, initiator, forceRedirection) { 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]}`] } } @@ -280,9 +277,9 @@ function redirect(url, type, initiator, forceRedirection) { } let prefsEncoded = new URLSearchParams(prefs).toString() - console.log("mapCentre", mapCentre) - console.log("prefs", prefs) - console.log("prefsEncoded", prefsEncoded) + // console.log("mapCentre", mapCentre) + // console.log("prefs", prefs) + // console.log("prefsEncoded", prefsEncoded) return `${randomInstance}/${mapCentre}&${prefsEncoded}` } case "facil": { @@ -423,7 +420,6 @@ function computeService(url, returnFrontend) { .then(configData => { const config = JSON.parse(configData) browser.storage.local.get(["redirects", "options"], r => { - const redirects = r.redirects const options = r.options for (const service in config.services) { if (regexArray(service, url, config)) { @@ -456,12 +452,12 @@ function switchInstance(url) { if (Object.keys(config.services[service].frontends).length == 1) { const frontend = Object.keys(config.services[service].frontends)[0] for (const network in options[frontend]) { - instancesList.push(...[...options[frontend][network].enabled, ...options[frontend][network].custom]) + instancesList.push(...options[frontend]) } } else { const frontend = options[service].frontend for (const network in options[frontend]) { - instancesList.push(...[...options[frontend][network].enabled, ...options[frontend][network].custom]) + instancesList.push(...options[frontend]) } } @@ -523,106 +519,36 @@ function reverse(url, urlString) { }) } -function setRedirects(passedRedirects) { +function initDefaults() { return new Promise(resolve => { fetch("/config.json") .then(response => response.text()) .then(configData => { - browser.storage.local.get(/* [ */ "options" /* , "blacklists"] */, async r => { - let redirects = passedRedirects + browser.storage.local.get(["options"], r => { let options = r.options - const config = JSON.parse(configData) let targets = {} + let config = JSON.parse(configData) + const localstorage = {} for (const service in config.services) { - if (config.services[service].targets == "datajson") { - targets[service] = redirects[service] - delete redirects[service] + options[service] = {} + for (const defaultOption in config.services[service].options) { + options[service][defaultOption] = config.services[service].options[defaultOption] } for (const frontend in config.services[service].frontends) { if (config.services[service].frontends[frontend].instanceList) { - for (const network in config.networks) { - for (const instance of options[frontend][network].enabled) { - let i = redirects[frontend][network].indexOf(instance) - if (i < 0) options[frontend][network].enabled.splice(i, 1) - } - } - } - } - /* - for (const frontend in config.services[service].frontends) { - if (config.services[service].frontends[frontend].instanceList) { - for (const network in config.networks) { - options[frontend][network].enabled = redirects[frontend][network] - } - for (const blacklist in r.blacklists) { - for (const instance of blacklist) { - let i = options[frontend].clearnet.enabled.indexOf(instance) - if (i > -1) options[frontend].clearnet.enabled.splice(i, 1) - } - } + options[frontend] = [] } } - */ - // The above will be implemented with https://github.com/libredirect/libredirect/issues/334 } - for (const frontend in redirects) { - let exists = false - for (const service in config.services) if (config.services[service].frontends[frontend]) exists = true - if (!exists) delete redirects[frontend] - else for (const network in redirects[frontend]) if (!config.networks[network]) delete redirects[frontend][network] - } - browser.storage.local.set({ redirects, targets, options }, () => resolve()) + browser.storage.local.set( + { options, targets, localstorage }, + () => resolve() + ) }) }) }) } -function initDefaults() { - return new Promise(resolve => { - fetch("/instances/data.json") - .then(response => response.text()) - .then(data => { - fetch("/config.json") - .then(response => response.text()) - .then(configData => { - browser.storage.local.get(["options", "blacklists"], r => { - let redirects = JSON.parse(data) - let options = r.options - let targets = {} - let config = JSON.parse(configData) - const localstorage = {} - for (const service in config.services) { - options[service] = {} - if (config.services[service].targets == "datajson") { - targets[service] = redirects[service] - delete redirects[service] - } - for (const defaultOption in config.services[service].options) options[service][defaultOption] = config.services[service].options[defaultOption] - for (const frontend in config.services[service].frontends) { - if (config.services[service].frontends[frontend].instanceList) { - options[frontend] = {} - for (const network in config.networks) { - options[frontend][network] = {} - options[frontend][network].enabled = JSON.parse(data)[frontend][network] - options[frontend][network].custom = [] - } - for (const blacklist in r.blacklists) { - for (const instance of r.blacklists[blacklist]) { - let i = options[frontend].clearnet.enabled.indexOf(instance) - if (i > -1) options[frontend].clearnet.enabled.splice(i, 1) - } - } - } - } - } - browser.storage.local.set({ redirects, options, targets, localstorage }) - resolve() - }) - }) - }) - }) -} - function upgradeOptions() { return new Promise(resolve => { fetch("/config.json") @@ -675,14 +601,6 @@ function upgradeOptions() { let protocol if (network == "clearnet") protocol = "normal" else protocol = network - if (r[frontend + utils.camelCase(protocol) + "RedirectsChecks"]) { - options[frontend][network].enabled = r[frontend + utils.camelCase(protocol) + "RedirectsChecks"] - options[frontend][network].custom = r[frontend + utils.camelCase(protocol) + "CustomRedirects"] - for (const instance of options[frontend][network].enabled) { - let i = r.redirects[frontend][network].indexOf(instance) - if (i < 0) options[frontend][network].enabled.splice(i, 1) - } - } } } } @@ -700,7 +618,7 @@ function processUpdate() { fetch("/config.json") .then(response => response.text()) .then(configData => { - browser.storage.local.get(["options", "blacklists", "targets"], r => { + browser.storage.local.get(["options", "targets"], r => { let redirects = JSON.parse(data) let options = r.options let targets = r.targets @@ -720,23 +638,16 @@ function processUpdate() { if (config.services[service].frontends[frontend].instanceList) { if (!options[frontend]) options[frontend] = {} for (const network in config.networks) { - if (!options[frontend][network]) { - options[frontend][network] = {} - options[frontend][network].enabled = JSON.parse(data)[frontend][network] - options[frontend][network].custom = [] + if (!options[frontend]) { + options[frontend] = [] if (network == "clearnet") { - for (const blacklist in r.blacklists) { - for (const instance of r.blacklists[blacklist]) { + for (const blacklist of getBlacklist()) { + for (const instance of blacklist) { let i = options[frontend].clearnet.enabled.indexOf(instance) if (i > -1) options[frontend].clearnet.enabled.splice(i, 1) } } } - } else { - for (const instance of options[frontend][network].enabled) { - let i = redirects[frontend][network].indexOf(instance) - if (i < 0) options[frontend][network].enabled.splice(i, 1) - } } } } @@ -762,7 +673,7 @@ function modifyContentSecurityPolicy(details) { for (const frontend in config.services[service].frontends) { if (config.services[service].frontends[frontend].embeddable) { for (const network in config.networks) { - instancesList.push(...options[frontend][network].enabled, ...options[frontend][network].custom) + instancesList.push(...options[frontend]) } } } @@ -793,7 +704,6 @@ export default { computeService, switchInstance, reverse, - setRedirects, initDefaults, upgradeOptions, processUpdate, diff --git a/src/assets/javascripts/utils.js b/src/assets/javascripts/utils.js index d6c5e300..6e6b6707 100644 --- a/src/assets/javascripts/utils.js +++ b/src/assets/javascripts/utils.js @@ -70,10 +70,26 @@ function switchInstance(test) { }) } +function getBlacklist() { + let http = new XMLHttpRequest() + http.open("GET", "https://codeberg.org/LibRedirect/libredirect/raw/branch/master/src/instances/blacklist.json", false) + http.send(null) + return JSON.parse(http.responseText) +} + +function getList() { + let http = new XMLHttpRequest() + http.open("GET", "https://codeberg.org/LibRedirect/libredirect/raw/branch/master/src/instances/data.json", false) + http.send(null) + return JSON.parse(http.responseText) +} + export default { getRandomInstance, protocolHost, switchInstance, copyRaw, + getList, + getBlacklist, camelCase, } diff --git a/src/config.json b/src/config.json index ae9a9f64..97e84f61 100644 --- a/src/config.json +++ b/src/config.json @@ -299,22 +299,6 @@ "embeddable": false, "url": "https://fandom.com" }, - "peertube": { - "frontends": { - "simpleertube": { - "name": "SimpleerTube", - "instanceList": true - } - }, - "targets": "datajson", - "name": "PeerTube", - "options": { - "enabled": false - }, - "imageType": "svg", - "embeddable": false, - "url": "https://joinpeertube.org" - }, "lbry": { "frontends": { "librarian": { @@ -369,7 +353,7 @@ "enabled": true, "frontend": "searxng" }, - "imageType": "svg", + "imageType": "svgMono", "embeddable": false, "url": "https://search.libredirect.invalid" }, @@ -397,7 +381,7 @@ "enabled": true, "frontend": "simplyTranslate" }, - "imageType": "svg", + "imageType": "svgMono", "embeddable": false, "url": "https://translate.libredirect.invalid" }, @@ -421,7 +405,7 @@ "enabled": false, "frontend": "osm" }, - "imageType": "svg", + "imageType": "svgMono", "embeddable": false, "url": "https://maps.libredirect.invalid" }, @@ -441,7 +425,7 @@ "options": { "enabled": true }, - "imageType": "svg", + "imageType": "svgMono", "embeddable": false, "url": "https://send.libredirect.invalid" }, @@ -459,7 +443,7 @@ "options": { "enabled": true }, - "imageType": "svg", + "imageType": "svgMono", "embeddable": false, "url": "https://paste.libredirect.invalid" } diff --git a/src/instances/get_instances.py b/src/instances/get_instances.py index 248f719a..7ae8948a 100755 --- a/src/instances/get_instances.py +++ b/src/instances/get_instances.py @@ -414,10 +414,6 @@ def librarian(): 'https://codeberg.org/librarian/librarian/raw/branch/main/instances.json', 'url', True) -def neuters(): - fetchFromFile('neuters', 'Neuters') - - def beatbump(): fetchFromFile('beatbump', 'Beatbump') @@ -449,23 +445,6 @@ def privateBin(): fetchJsonList('privateBin', 'PrivateBin', 'https://privatebin.info/directory/api?top=100&https_redirect=true&min_rating=A&csp_header=true&min_uptime=100&attachments=true', 'url', False) - -def peertube(): - try: - r = requests.get( - 'https://instances.joinpeertube.org/api/v1/instances?start=0&count=1045&sort=-createdAt', headers=headers) - rJson = json.loads(r.text) - - myList = ['https://search.joinpeertube.org'] - for k in rJson['data']: - myList.append('https://'+k['host']) - - mightyList['peertube'] = myList - print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'PeerTube') - except Exception: - fetchCache('peertube', 'PeerTube') - - def isValid(url): # This code is contributed by avanitrachhadiya2155 try: result = urlparse(url) @@ -495,7 +474,6 @@ whoogle() librex() rimgo() librarian() -neuters() beatbump() hyperpipe() facil() @@ -520,9 +498,6 @@ for k1, v1 in mightyList.items(): cloudflare.append(instance) if not instance.endswith('.onion') and not instance.endswith('.i2p') and not instance.endswith('.loki') and is_authenticate(instance): authenticate.append(instance) - -peertube() - blacklist = { 'cloudflare': cloudflare, 'authenticate': authenticate, diff --git a/src/pages/background/background.js b/src/pages/background/background.js index 33f0d40b..77128612 100644 --- a/src/pages/background/background.js +++ b/src/pages/background/background.js @@ -6,40 +6,34 @@ import servicesHelper from "../../assets/javascripts/services.js" window.browser = window.browser || window.chrome -browser.runtime.onInstalled.addListener(details => { +browser.runtime.onInstalled.addListener(async details => { if (details.previousVersion != browser.runtime.getManifest().version) { // ^Used to prevent this running when debugging with auto-reload - fetch("/instances/blacklist.json") - .then(response => response.text()) - .then(async data => { - browser.storage.local.set({ blacklists: JSON.parse(data) }, async () => { - switch (details.reason) { - case "install": - browser.storage.local.get("options", async r => { - if (!r.options) { - await generalHelper.initDefaults() - await servicesHelper.initDefaults() - } - }) - break - case "update": - switch (details.previousVersion) { - case "2.2.0": - case "2.2.1": - browser.storage.local.get("options", async r => { - if (!r.options) { - await generalHelper.initDefaults() - await servicesHelper.initDefaults() - await servicesHelper.upgradeOptions() - } - }) - break - default: - await servicesHelper.processUpdate() - } + switch (details.reason) { + case "install": + browser.storage.local.get("options", async r => { + if (!r.options) { + await generalHelper.initDefaults() + await servicesHelper.initDefaults() } }) - }) + break + case "update": + switch (details.previousVersion) { + case "2.2.0": + case "2.2.1": + browser.storage.local.get("options", async r => { + if (!r.options) { + await generalHelper.initDefaults() + await servicesHelper.initDefaults() + await servicesHelper.upgradeOptions() + } + }) + break + default: + await servicesHelper.processUpdate() + } + } } }) diff --git a/src/pages/options/index.js b/src/pages/options/index.js index a735110a..6fb8e452 100644 --- a/src/pages/options/index.js +++ b/src/pages/options/index.js @@ -53,124 +53,86 @@ function loadPage(path) { let stateObj = { id: "100" } window.history.pushState(stateObj, "Page 2", `/pages/options/index.html#${path}`) - const service = path; - divs[service] = {} - for (const option in config.services[service].options) { - divs[service][option] = document.getElementById(`${service}-${option}`) - - if (typeof config.services[service].options[option] == "boolean") divs[service][option].checked = options[service][option] - else divs[service][option].value = options[service][option] - - divs[service][option].addEventListener("change", () => { - browser.storage.local.get("options", r => { - let options = r.options - if (typeof config.services[service].options[option] == "boolean") options[service][option] = divs[service][option].checked - else options[service][option] = divs[service][option].value - browser.storage.local.set({ options }) - changeFrontendsSettings(service) + if (path != 'general' && path != 'about') { + const service = path; + + divs[service] = {} + for (const option in config.services[service].options) { + divs[service][option] = document.getElementById(`${service}-${option}`) + if (typeof config.services[service].options[option] == "boolean") divs[service][option].checked = options[service][option] + else divs[service][option].value = options[service][option] + + divs[service][option].addEventListener("change", () => { + browser.storage.local.get("options", r => { + let options = r.options + if (typeof config.services[service].options[option] == "boolean") options[service][option] = divs[service][option].checked + else options[service][option] = divs[service][option].value + browser.storage.local.set({ options }) + changeFrontendsSettings(service) + }) }) - }) - } + } - if (Object.keys(config.services[service].frontends).length > 1) { - changeFrontendsSettings(service) - } + if (Object.keys(config.services[service].frontends).length > 1) { + changeFrontendsSettings(service) + } - for (const frontend in config.services[service].frontends) { - if (config.services[service].frontends[frontend].instanceList) { - for (const network in config.networks) { - processDefaultCustomInstances(frontend, network, document) + for (const frontend in config.services[service].frontends) { + if (config.services[service].frontends[frontend].instanceList) { + processDefaultCustomInstances(frontend, config.networks, document) } } } } -const r = window.location.href.match(/#(.*)/) -if (r) loadPage(r[1]) -else loadPage("general") -async function processDefaultCustomInstances(frontend, network, document) { - let networkElement = document.getElementById(frontend).getElementsByClassName(network)[0] +async function processDefaultCustomInstances(frontend, networks, document) { let customInstances = [] - let checkListElement = networkElement.getElementsByClassName("checklist")[0] - - let cloudflareBlackList = [] - let authenticateBlackList = [] - await new Promise(resolve => { - fetch("/instances/blacklist.json") - .then(response => response.text()) - .then(data => { - cloudflareBlackList = JSON.parse(data).cloudflare - authenticateBlackList = JSON.parse(data).authenticate - resolve() - }) - }) - - let frontendDefaultRedirects - - let redirects, options - + let options await new Promise(async resolve => - browser.storage.local.get(["options", "redirects",], r => { - frontendDefaultRedirects = r.options[frontend][network].enabled - customInstances = r.options[frontend][network].custom + browser.storage.local.get(["options"], r => { + customInstances = r.options[frontend] options = r.options - redirects = r.redirects resolve() }) ) - function calcCheckBoxes() { - for (const element of checkListElement.getElementsByTagName("input")) { - element.checked = frontendDefaultRedirects.includes(element.className) - } - } - if (redirects[frontend][network].length > 0) - checkListElement.innerHTML = [ - ` + const blacklist = utils.getBlacklist() + const redirects = utils.getList() + + for (const network in networks) { + if (redirects[frontend][network].length > 0) { + document.getElementById(frontend).getElementsByClassName(network)[0].getElementsByClassName("checklist")[0].innerHTML = [ + `

${utils.camelCase(network)}

`, - ...redirects[frontend][network] - .sort((a, b) => - (cloudflareBlackList.includes(a) && !cloudflareBlackList.includes(b)) - || - (authenticateBlackList.includes(a) && !authenticateBlackList.includes(b)) - ) - .map(x => { - const cloudflare = cloudflareBlackList.includes(x) ? ' cloudflare' : "" - const authenticate = authenticateBlackList.includes(x) ? ' authenticate' : "" - - let warnings = [cloudflare, authenticate].join(" ") - return ` + ...redirects[frontend][network] + .sort((a, b) => + (blacklist.cloudflare.includes(a) && !blacklist.cloudflare.includes(b)) + || + (blacklist.authenticate.includes(a) && !blacklist.authenticate.includes(b)) + ) + .map(x => { + const cloudflare = blacklist.cloudflare.includes(x) ? ' cloudflare' : "" + const authenticate = blacklist.authenticate.includes(x) ? ' authenticate' : "" + + let warnings = [cloudflare, authenticate].join(" ") + return `
${x}${warnings} -
` - }), - '
' - ].join("\n
\n") + }), + '
' + ].join("\n
\n") + } + } localise.localisePage() - calcCheckBoxes() - - for (let element of checkListElement.getElementsByTagName("input")) { - networkElement.getElementsByClassName(element.className)[0].addEventListener("change", async event => { - if (event.target.checked) frontendDefaultRedirects.push(element.className) - else { - let index = frontendDefaultRedirects.indexOf(element.className) - if (index > -1) frontendDefaultRedirects.splice(index, 1) - } - - options[frontend][network].enabled = frontendDefaultRedirects - browser.storage.local.set({ options }, () => calcCheckBoxes()) - }) - } - function calcCustomInstances() { document.getElementById(frontend).getElementsByClassName("custom-checklist")[0].innerHTML = customInstances .map( @@ -191,7 +153,7 @@ async function processDefaultCustomInstances(frontend, network, document) { document.getElementById(frontend).getElementsByClassName(`clear-${item}`)[0].addEventListener("click", async () => { let index = customInstances.indexOf(item) if (index > -1) customInstances.splice(index, 1) - options[frontend][network].custom = customInstances + options[frontend] = customInstances browser.storage.local.set({ options }, () => calcCustomInstances()) }) } @@ -208,10 +170,10 @@ async function processDefaultCustomInstances(frontend, network, document) { return } let protocolHostVar = utils.protocolHost(url) - if (frontendCustomInstanceInput.validity.valid && !redirects[frontend][network].includes(protocolHostVar)) { + if (frontendCustomInstanceInput.validity.valid) { if (!customInstances.includes(protocolHostVar)) { customInstances.push(protocolHostVar) - options[frontend][network].custom = customInstances + options[frontend] = customInstances browser.storage.local.set({ options }, () => { frontendCustomInstanceInput.value = "" calcCustomInstances() @@ -219,4 +181,8 @@ async function processDefaultCustomInstances(frontend, network, document) { } } }) -} \ No newline at end of file +} + +const r = window.location.href.match(/#(.*)/) +if (r) loadPage(r[1]) +else loadPage("general") diff --git a/src/pages/options/widgets/general.js b/src/pages/options/widgets/general.js index 2fd6a9a5..63938d78 100644 --- a/src/pages/options/widgets/general.js +++ b/src/pages/options/widgets/general.js @@ -58,20 +58,12 @@ importSettingsElement.addEventListener("change", () => { 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 }, () => { - fetch("/instances/blacklist.json") - .then(response => response.text()) - .then(async data => { - browser.storage.local.set({ blacklists: JSON.parse(data) }, async () => { - await generalHelper.initDefaults() - await servicesHelper.initDefaults() - await servicesHelper.upgradeOptions() - location.reload() - }) - }) - }) - ) + browser.storage.local.clear(async () => { + await generalHelper.initDefaults() + await servicesHelper.initDefaults() + await servicesHelper.upgradeOptions() + location.reload() + }) } else if ("version" in data) { let options = data delete options.version @@ -98,16 +90,10 @@ function importError() { 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({ blacklists: JSON.parse(data) }, async () => { - await generalHelper.initDefaults() - await servicesHelper.initDefaults() - location.reload() - }) - }) + browser.storage.local.clear(async () => { + await generalHelper.initDefaults() + await servicesHelper.initDefaults() + location.reload() }) }) @@ -170,7 +156,6 @@ browser.storage.local.get("options", r => { 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) diff --git a/src/pages/options/widgets/services.pug b/src/pages/options/widgets/services.pug index ddd244d4..dc527c78 100644 --- a/src/pages/options/widgets/services.pug +++ b/src/pages/options/widgets/services.pug @@ -28,18 +28,22 @@ each val, service in services option(value="sub_frame" data-localise="__MSG_onlyEmbedded__") Only Embedded option(value="main_frame" data-localise="__MSG_onlyNotEmbedded__") Only Not Embedded + hr + each val, frontend in services[service].frontends if services[service].frontends[frontend].instanceList div(id=frontend) - each val, network in networks - div(class=network) - div(class="checklist") div(class="some-block option-block") - h4(data-localise="__MSG_customInstances__") Custom Instances + h4(data-localise="__MSG_instances__") Add your favorite instances + form(class="custom-instance-form") div(class="some-block option-block") input(class="custom-instance" placeholder=`http://${frontend}.com` type="url" ) button(class="add add-instance" type="submit") svg(xmlns="https://www.w3.org/2000/svg" height="20px" viewBox="0 0 24 24" width="20px" fill="currentColor") path(d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z") - div(class="checklist custom-checklist") \ No newline at end of file + + div(class="checklist custom-checklist") + each val, network in networks + div(class=network) + div(class="checklist") \ No newline at end of file diff --git a/src/pages/popup/popup.js b/src/pages/popup/popup.js index b2f2c299..aa3fb0d7 100644 --- a/src/pages/popup/popup.js +++ b/src/pages/popup/popup.js @@ -85,7 +85,7 @@ browser.storage.local.get(["options", "redirects"], r => { frontend = service[1] service = service[0] let isCustom = false - for (const network in config.networks) if (r.options[frontend][network].custom.indexOf(instance) > -1) isCustom = true + for (const network in config.networks) if (r.options[frontend].indexOf(instance) > -1) isCustom = true } divs[service].current.classList.remove("hide") divs[service].all.classList.add("hide") diff --git a/src/pages/widgets/head.pug b/src/pages/widgets/head.pug index 15e6d8d6..0c6e9fdb 100644 --- a/src/pages/widgets/head.pug +++ b/src/pages/widgets/head.pug @@ -3,5 +3,5 @@ head meta(name="viewport" content="width=device-width, initial-scale=1") link(rel="icon" type="image/x-icon" href="../../../assets/images/libredirect.svg") link(href="../stylesheets/styles.css" rel="stylesheet") - title General + title Settings script(type="module" src="./init.js") \ No newline at end of file diff --git a/src/pages/widgets/links.pug b/src/pages/widgets/links.pug index 8c5a3915..82e82dbe 100644 --- a/src/pages/widgets/links.pug +++ b/src/pages/widgets/links.pug @@ -7,7 +7,10 @@ section(class="links" id="links") each val, key in services div(class="title") a(href="#"+key) - img(src=`/assets/images/${key}-icon.${services[key].imageType}`) + if services[key].imageType == 'svgMono' + img(src=`/assets/images/${key}-icon.svg`) + else + img(src=`/assets/images/${key}-icon.${services[key].imageType}`) span(data-localise="__MSG_"+key+"__")=services[key].name div(class="title") diff --git a/src/pages/widgets/switches.pug b/src/pages/widgets/switches.pug index 390c414d..7054ea72 100644 --- a/src/pages/widgets/switches.pug +++ b/src/pages/widgets/switches.pug @@ -1,6 +1,9 @@ each val, service in services div(class=service + " some-block") a(class="title" href=services[service].url) - img(src="../../assets/images/"+service+"-icon."+services[service].imageType) + if services[service].imageType == 'svgMono' + img(src=`../../assets/images/${service}-icon.svg`) + else + img(src=`../../assets/images/${service}-icon.${services[service].imageType}`) h4(data-localise="__MSG_"+service+"__")=services[service].name input(class=service + "-enabled" type="checkbox") \ No newline at end of file -- cgit 1.4.1