From 486b92af5faa28f2535b245d2dbfe0a34ea2dd30 Mon Sep 17 00:00:00 2001 From: ManeraKai Date: Sun, 8 Jan 2023 11:05:45 +0300 Subject: Optimized the getList and getBlacklist functions --- src/assets/javascripts/services.js | 4 +- src/assets/javascripts/utils.js | 31 ++++++++++---- src/pages/options/index.js | 86 +++++++++++++++++++++----------------- 3 files changed, 72 insertions(+), 49 deletions(-) diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js index 988f6348..0b4e495a 100644 --- a/src/assets/javascripts/services.js +++ b/src/assets/javascripts/services.js @@ -624,7 +624,7 @@ function processUpdate() { fetch("/config.json") .then(response => response.text()) .then(configData => { - browser.storage.local.get(["options", "targets"], r => { + browser.storage.local.get(["options", "targets"], async r => { let redirects = JSON.parse(data) let options = r.options let targets = r.targets @@ -647,7 +647,7 @@ function processUpdate() { if (!options[frontend]) { options[frontend] = [] if (network == "clearnet") { - for (const blacklist of getBlacklist()) { + for (const blacklist of await utils.getBlacklist()) { for (const instance of blacklist) { let i = options[frontend].clearnet.enabled.indexOf(instance) if (i > -1) options[frontend].clearnet.enabled.splice(i, 1) diff --git a/src/assets/javascripts/utils.js b/src/assets/javascripts/utils.js index 6e6b6707..86b9b402 100644 --- a/src/assets/javascripts/utils.js +++ b/src/assets/javascripts/utils.js @@ -71,17 +71,32 @@ 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) + return new Promise(resolve => { + const http = new XMLHttpRequest() + http.open("GET", "https://codeberg.org/LibRedirect/libredirect/raw/branch/master/src/instances/blacklist.json", true) + http.onreadystatechange = () => { + if (http.status === 200 && http.readyState == XMLHttpRequest.DONE) { + resolve(JSON.parse(http.responseText)) + return + } + } + http.send(null) + }) } 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) + return new Promise(resolve => { + const http = new XMLHttpRequest() + http.open("GET", "https://codeberg.org/LibRedirect/libredirect/raw/branch/master/src/instances/data.json", true) + http.onreadystatechange = () => { + if (http.status === 200 && http.readyState == XMLHttpRequest.DONE) { + resolve(JSON.parse(http.responseText)) + return + } + } + http.send(null) + }) + } export default { diff --git a/src/pages/options/index.js b/src/pages/options/index.js index 006b5248..68f45d6a 100644 --- a/src/pages/options/index.js +++ b/src/pages/options/index.js @@ -86,13 +86,23 @@ function loadPage(path) { for (const frontend in config.services[service].frontends) { if (config.services[service].frontends[frontend].instanceList) { - processDefaultCustomInstances(frontend, config.networks, document) + processDefaultCustomInstances(frontend, document) } } + + !async function () { + const blacklist = await utils.getBlacklist() + const redirects = await utils.getList() + for (const frontend in config.services[service].frontends) { + if (config.services[service].frontends[frontend].instanceList) { + createList(frontend, config.networks, document, redirects, blacklist) + } + } + }() } } -async function processDefaultCustomInstances(frontend, networks, document) { +async function processDefaultCustomInstances(frontend, document) { let customInstances = [] let options await new Promise(async resolve => @@ -103,42 +113,6 @@ async function processDefaultCustomInstances(frontend, networks, document) { }) ) - !async function () { - 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) => - (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") - } - } - }() - localise.localisePage() function calcCustomInstances() { @@ -191,6 +165,40 @@ async function processDefaultCustomInstances(frontend, networks, document) { }) } +function createList(frontend, networks, document, redirects, blacklist) { + 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) => + (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") + } + } +} + + const r = window.location.href.match(/#(.*)/) if (r) loadPage(r[1]) -else loadPage("general") +else loadPage("general") \ No newline at end of file -- cgit 1.4.1