aboutsummaryrefslogtreecommitdiffstats
path: root/src/pages/options
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
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')
-rw-r--r--src/pages/options/index.js148
-rw-r--r--src/pages/options/widgets/general.js35
-rw-r--r--src/pages/options/widgets/services.pug14
3 files changed, 76 insertions, 121 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 (path != 'general' && path != 'about') {
+ const service = path;
- 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] = {}
+ 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)
+ 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>' : ""
+ ...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 `
+ 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")
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