about summary refs log tree commit diff stats
path: root/src/pages/options/index.js
diff options
context:
space:
mode:
authorManeraKai <manerakai@protonmail.com>2023-01-07 00:24:25 +0300
committerManeraKai <manerakai@protonmail.com>2023-01-07 00:24:25 +0300
commit868dccfb3b732d6862fa9d1e6aab2f651a9aa06e (patch)
treefef762a0e7ef7c4622263812d48544f10386bf81 /src/pages/options/index.js
parentRemoved Wikiless, Neuters. Optimization (diff)
downloadlibredirect-868dccfb3b732d6862fa9d1e6aab2f651a9aa06e.zip
Changed Update Instances selection mechanism. https://github.com/libredirect/libredirect/issues/334 Removed Peertube (maybe will readd it later). Optimized code
Diffstat (limited to 'src/pages/options/index.js')
-rw-r--r--src/pages/options/index.js154
1 files changed, 60 insertions, 94 deletions
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 = [
+				`
 			<div class="some-block option-block">
 				<h4>${utils.camelCase(network)}</h4>
 			</div>
 			`,
-			...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) ? ' <span style="color:red;">cloudflare</span>' : ""
-					const authenticate = authenticateBlackList.includes(x) ? ' <span style="color:orange;">authenticate</span>' : ""
-
-					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) ? ' <span style="color:red;">cloudflare</span>' : ""
+						const authenticate = blacklist.authenticate.includes(x) ? ' <span style="color:orange;">authenticate</span>' : ""
+
+						let warnings = [cloudflare, authenticate].join(" ")
+						return `
 					<div>
 						<x>
 							<a href="${x}" target="_blank">${x}</a>${warnings}
 						</x>
-						<input type="checkbox" class="${x}"/>
                   	</div>`
-				}),
-			'<br>'
-		].join("\n<hr>\n")
+					}),
+				'<br>'
+			].join("\n<hr>\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")