about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--src/assets/javascripts/services.js40
-rw-r--r--src/assets/javascripts/utils.js46
-rw-r--r--src/config.json22
-rw-r--r--src/pages/background/background.js6
-rw-r--r--src/pages/options/index.js23
-rw-r--r--src/pages/options/widgets/general.js5
-rw-r--r--src/pages/options/widgets/general.pug7
-rw-r--r--src/pages/options/widgets/services.pug8
8 files changed, 94 insertions, 63 deletions
diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js
index 2b630d6d..3e05f047 100644
--- a/src/assets/javascripts/services.js
+++ b/src/assets/javascripts/services.js
@@ -618,6 +618,7 @@ function initDefaults() {
 			}
 			options['theme'] = "detect"
 			options['popupServices'] = ["youtube", "twitter", "tiktok", "imgur", "reddit", "quora", "translate", "maps"]
+			options['fetchInstances'] = 'github'
 
 			options = { ...options, ...defaultInstances }
 
@@ -631,45 +632,10 @@ function initDefaults() {
 function upgradeOptions() {
 	return new Promise(async resolve => {
 		const oldOptions = await utils.getOptions()
-		const config = await utils.getConfig()
 
 		let options = {}
-
-		options.exceptions = oldOptions.exceptions
-		options.theme = oldOptions.theme
-		options.popupServices = oldOptions.popupServices
-
-		for (const service in config.services) {
-			if (service in oldOptions) {
-				options[service] = oldOptions[service]
-				delete options[service].embedFrontend
-			}
-			else {
-				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) {
-						options[frontend] = []
-					}
-				}
-			}
-
-			for (const frontend in config.services[service].frontends) {
-				if (config.services[service].frontends[frontend].instanceList) {
-					if (frontend in oldOptions) {
-						options[frontend] = [
-							...oldOptions[frontend].clearnet.enabled,
-							...oldOptions[frontend].clearnet.custom
-						]
-					}
-					else {
-						options[frontend] = defaultInstances[frontend]
-					}
-				}
-			}
-		}
+		options = [...oldOptions]
+		options.fetchInstances = 'github'
 
 		browser.storage.local.clear(() => {
 			browser.storage.local.set({ options }, () => {
diff --git a/src/assets/javascripts/utils.js b/src/assets/javascripts/utils.js
index 2b9a9193..6644f8ed 100644
--- a/src/assets/javascripts/utils.js
+++ b/src/assets/javascripts/utils.js
@@ -32,30 +32,68 @@ function getOptions() {
 	)
 }
 
-function getBlacklist() {
+function getBlacklist(options) {
 	return new Promise(resolve => {
+		let url
+		if (options.fetchInstances == 'github') {
+			url = 'https://raw.githubusercontent.com/libredirect/instances/main/blacklist.json'
+		}
+		else if (options.fetchInstances == 'codeberg') {
+			url = 'https://codeberg.org/LibRedirect/instances/raw/branch/main/blacklist.json'
+		}
+		else {
+			resolve('disabled')
+			return
+		}
 		const http = new XMLHttpRequest()
-		http.open("GET", "https://raw.githubusercontent.com/libredirect/instances/main/blacklist.json", true)
+		http.open("GET", url, true)
 		http.onreadystatechange = () => {
 			if (http.status === 200 && http.readyState == XMLHttpRequest.DONE) {
 				resolve(JSON.parse(http.responseText))
 				return
 			}
 		}
+		http.onerror = () => {
+			resolve()
+			return
+		}
+		http.ontimeout = () => {
+			resolve()
+			return
+		}
 		http.send(null)
 	})
 }
 
-function getList() {
+function getList(options) {
 	return new Promise(resolve => {
+		let url
+		if (options.fetchInstances == 'github') {
+			url = 'https://raw.githubusercontent.com/libredirect/instances/main/data.json'
+		}
+		else if (options.fetchInstances == 'codeberg') {
+			url = 'https://codeberg.org/LibRedirect/instances/raw/branch/main/data.json'
+		}
+		else {
+			resolve('disabled')
+			return
+		}
 		const http = new XMLHttpRequest()
-		http.open("GET", "https://raw.githubusercontent.com/libredirect/instances/main/data.json", true)
+		http.open("GET", url, true)
 		http.onreadystatechange = () => {
 			if (http.status === 200 && http.readyState == XMLHttpRequest.DONE) {
 				resolve(JSON.parse(http.responseText))
 				return
 			}
 		}
+		http.onerror = () => {
+			resolve()
+			return
+		}
+		http.ontimeout = () => {
+			resolve()
+			return
+		}
 		http.send(null)
 	})
 }
diff --git a/src/config.json b/src/config.json
index 3a3ed06b..41a87f79 100644
--- a/src/config.json
+++ b/src/config.json
@@ -46,6 +46,16 @@
 					"instanceList": true,
 					"url": "https://github.com/mmjee/Piped-Material"
 				},
+				"poketube": {
+					"excludeTargets": [
+						2,
+						3
+					],
+					"name": "PokeTube",
+					"embeddable": true,
+					"instanceList": true,
+					"url": "https://codeberg.org/Ashley/poketube"
+				},
 				"cloudtube": {
 					"name": "CloudTube",
 					"embeddable": false,
@@ -71,16 +81,6 @@
 					"embeddable": false,
 					"instanceList": false,
 					"url": "https://github.com/yattee/yattee"
-				},
-				"poketube": {
-					"excludeTargets": [
-						2,
-						3
-					],
-					"name": "PokeTube",
-					"embeddable": true,
-					"instanceList": true,
-					"url": "https://codeberg.org/Ashley/poketube/"
 				}
 			},
 			"targets": [
@@ -611,4 +611,4 @@
 			"url": "https://www.snopes.com"
 		}
 	}
-}
+}
\ No newline at end of file
diff --git a/src/pages/background/background.js b/src/pages/background/background.js
index 1a62f4e2..faeaf002 100644
--- a/src/pages/background/background.js
+++ b/src/pages/background/background.js
@@ -16,7 +16,7 @@ browser.runtime.onInstalled.addListener(async details => {
 			browser.runtime.openOptionsPage()
 		}
 		else if (details.reason == "update") {
-			if (details.previousVersion == '2.3.4') {
+			if (details.previousVersion == '2.5.2') {
 				await servicesHelper.upgradeOptions()
 			} else {
 				await servicesHelper.processUpdate()
@@ -115,7 +115,7 @@ browser.contextMenus.create({
 })
 
 browser.contextMenus.create({
-	id: "reverse",
+	id: "reverseTab",
 	title: 'Reverse redirect',
 	contexts: ["browser_action"],
 })
@@ -157,7 +157,7 @@ browser.contextMenus.onClicked.addListener(async (info, tab) => {
 			servicesHelper.copyRaw(url)
 			return
 		}
-		case 'reverse': {
+		case 'reverseTab': {
 			const url = new URL(info.pageUrl)
 			const newUrl = await servicesHelper.reverse(url)
 			if (newUrl) {
diff --git a/src/pages/options/index.js b/src/pages/options/index.js
index 18fb120f..f122f3fc 100644
--- a/src/pages/options/index.js
+++ b/src/pages/options/index.js
@@ -99,11 +99,25 @@ async function loadPage(path) {
 		}
 
 		!async function () {
-			const blacklist = await utils.getBlacklist()
-			const redirects = await utils.getList()
+			const blacklist = await utils.getBlacklist(options)
+			const redirects = await utils.getList(options)
+
 			for (const frontend in config.services[service].frontends) {
 				if (config.services[service].frontends[frontend].instanceList) {
-					createList(frontend, config.networks, document, redirects, blacklist)
+					if (redirects == 'disabled' || blacklist == 'disabled') {
+						document.getElementById(frontend).getElementsByClassName('clearnet')[0].style.display = 'none'
+						document.getElementById(frontend).getElementsByClassName('ping')[0].style.display = 'none'
+					}
+					else if (!redirects || !blacklist) {
+						document.getElementById(frontend)
+							.getElementsByClassName('clearnet')[0]
+							.getElementsByClassName("checklist")[0]
+							.getElementsByClassName('loading')[0]
+							.innerHTML = 'Could not fetch instances.'
+					}
+					else {
+						createList(frontend, config.networks, document, redirects, blacklist)
+					}
 				}
 			}
 		}()
@@ -240,8 +254,9 @@ async function ping(frontend) {
 		.getElementsByClassName('clearnet')[0]
 		.getElementsByTagName('x')
 	for (const element of instanceElements) {
-		let span = element.getElementsByTagName('span')[0]
+		let span = element.getElementsByClassName('ping')[0]
 		if (!span) span = document.createElement('span')
+		span.classList = ['ping']
 		span.innerHTML = '<span style="color:lightblue">pinging...</span>'
 		element.appendChild(span)
 
diff --git a/src/pages/options/widgets/general.js b/src/pages/options/widgets/general.js
index 09c222a2..b676046b 100644
--- a/src/pages/options/widgets/general.js
+++ b/src/pages/options/widgets/general.js
@@ -71,6 +71,11 @@ resetSettings.addEventListener("click", async () => {
 	location.reload()
 })
 
+document.getElementById('fetch-instances').addEventListener('change', event => {
+	setOption('fetchInstances', 'select', event)
+	location.reload()
+})
+
 let themeElement = document.getElementById("theme")
 themeElement.addEventListener("change", event => {
 	setOption("theme", "select", event)
diff --git a/src/pages/options/widgets/general.pug b/src/pages/options/widgets/general.pug
index dc3c3d93..52ea21c2 100644
--- a/src/pages/options/widgets/general.pug
+++ b/src/pages/options/widgets/general.pug
@@ -11,6 +11,13 @@ section(class="option-block" id="general_page")
             option(value="dark" data-localise="__MSG_dark__") Dark
 
     div(class="some-block option-block")
+        h4 Fetch public instances
+        select(id="fetch-instances")
+            option(value="github") GitHub
+            option(value="codeberg") Codeberg
+            option(value="disable") Disable
+
+    div(class="some-block option-block")
         h4(data-localise="__MSG_excludeFromRedirecting__") Excluded from redirecting
 
     form(id="custom-exceptions-instance-form")
diff --git a/src/pages/options/widgets/services.pug b/src/pages/options/widgets/services.pug
index 345e16af..1ebd626b 100644
--- a/src/pages/options/widgets/services.pug
+++ b/src/pages/options/widgets/services.pug
@@ -44,22 +44,22 @@ each val, service in services
 
                         form(class="custom-instance-form")
                             div(class="some-block option-block")
-                                input(class="custom-instance" type="url" )
+                                input(class="custom-instance" type="url" placeholder="https://instance.com")
                                 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")  
 
-                        div(class="some-block")
+                        div(class="ping some-block")
                             a(class="button button-inline" id=`ping-${frontend}`)
                                 svg(xmlns="http://www.w3.org/2000/svg" height="20px" viewBox="0 0 24 24" width="20px" fill="currentColor")
                                     path(d="M10.45 15.5q.6.6 1.55.587.95-.012 1.4-.687L19 7l-8.4 5.6q-.675.45-.712 1.375-.038.925.562 1.525ZM12 4q1.475 0 2.838.412Q16.2 4.825 17.4 5.65l-1.9 1.2q-.825-.425-1.712-.637Q12.9 6 12 6 8.675 6 6.338 8.337 4 10.675 4 14q0 1.05.287 2.075Q4.575 17.1 5.1 18h13.8q.575-.95.838-1.975Q20 15 20 13.9q0-.9-.212-1.75-.213-.85-.638-1.65l1.2-1.9q.75 1.175 1.188 2.5.437 1.325.462 2.75.025 1.425-.325 2.725-.35 1.3-1.025 2.475-.275.45-.75.7-.475.25-1 .25H5.1q-.525 0-1-.25t-.75-.7q-.65-1.125-1-2.387Q2 15.4 2 14q0-2.075.788-3.888.787-1.812 2.15-3.175Q6.3 5.575 8.125 4.787 9.95 4 12 4Zm.175 7.825Z")
                                 |&nbsp;
                                 x() Ping instances
-                            
+
                         each val, network in networks
                             div(class=network)
                                 div(class="checklist")
                                     if (network == 'clearnet')
-                                        div(class="some-block option-block") Loading...
\ No newline at end of file
+                                        div(class="some-block option-block loading") Loading...
\ No newline at end of file