Squashed a few bugs

This commit is contained in:
Hygna 2022-10-02 15:10:36 +01:00
parent e21ecb4e1d
commit e8a67e9172
No known key found for this signature in database
8 changed files with 432 additions and 263 deletions

View File

@ -1,60 +1,94 @@
async function getConfig() {
return new Promise(resolve => {
fetch("/config/config.json")
.then(response => response.text())
.then(data => {
config = JSON.parse(data)
resolve()
})
})
}
let config
await getConfig()
async function initDefaults() {
return new Promise(async resolve => {
fetch("/instances/data.json")
.then(response => response.text())
.then(async data => {
browser.storage.local.get(["options", "blacklists"], async r => {
let redirects = JSON.parse(data)
let options = r.options
let targets = {}
const localstorage = {}
const latency = {}
for (const service in config.services) {
options[service] = {}
if (config.services[service].targets == "datajson") {
targets[service] = 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 = []
fetch("/config/config.json")
.then(response => response.text())
.then(async config => {
browser.storage.local.get(["options", "blacklists"], async r => {
let redirects = JSON.parse(data)
let options = r.options
let targets = {}
const localstorage = {}
const latency = {}
for (const service in config.services) {
options[service] = {}
if (config.services[service].targets == "datajson") {
targets[service] = redirects[service]
}
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)
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, latency, localstorage })
resolve()
})
})
})
})
}
async function upgradeOptions() {
return new Promise(async resolve => {
fetch("/config/config.json")
.then(response => response.text())
.then(async config => {
initDefaults().then(
browser.storage.local.get(["options", "exceptions", "theme", "popupFrontends"], r => {
let options = r.options
let latency = {}
options.exceptions = r.exceptions
if (r.theme != "DEFAULT") options.theme = r.theme
for (const service in config.services) {
browser.storage.local.get([`disable${utils.camelCase(service)}`, `${service}RedirectType`, `${service}Frontend`, `${service}Latency`, `${service}EmbedFrontend`], r => {
if (r) {
options[service].enabled = r["disable" + utils.camelCase(service)]
if (r[service + "Frontend"]) options[service].frontend = r[service + "Frontend"]
if (r[service + "RedirectType"]) options[service].redirectType = r[service + "RedirectType"]
if (r[service + "EmbedFrontend"] && (service != "youtube" || r[service + "EmbedFrontend"] == ("invidious" || "piped"))) options[service].EmbedFrontend = r[service + "EmbedFrontend"]
if (r[service + "Latency"]) latency[frontend] = r[service + "Latency"]
}
})
for (const frontend in config.services[service].frontends) {
for (const network in config.networks) {
let protocol
if (network == "clearnet") protocol == "normal"
else protocol == network
browser.storage.local.get([`${frontend}${utils.camelCase(network)}RedirectsChecks`, `${frontend}${utils.camelCase(protocol)}CustomRedirects`], r => {
if (r) {
options[frontend][network].checks = r[frontend + utils.camelCase(protocol) + "RedirectsChecks"]
options[frontend][network].custom = r[frontend + utils.camelCase(protocol) + "CustomRedirects"]
}
})
}
}
}
}
browser.storage.local.set({ redirects, options, targets, latency, localstorage })
resolve()
})
browser.storage.local.set({ options, latency })
resolve()
})
)
})
})
}
export default {
initDefaults,
upgradeOptions,
}

View File

@ -2,58 +2,49 @@ window.browser = window.browser || window.chrome
import utils from "./utils.js"
let config, redirects, options, blacklists
async function getConfig() {
return new Promise(resolve => {
fetch("/config/config.json")
.then(response => response.text())
.then(data => {
config = JSON.parse(data)
resolve()
})
})
}
let config, options, redirects
function init() {
return new Promise(async resolve => {
browser.storage.local.get(["options", "redirects", "blacklists"], r => {
if (r.options) {
blacklists = r.blacklists
redirects = r.redirects
options = r.options
}
resolve()
browser.storage.local.get(["options", "redirects"], r => {
options = r.options
redirects = r.redirects
fetch("/config/config.json")
.then(response => response.text())
.then(configData => {
config = JSON.parse(configData)
resolve()
})
})
})
}
await getConfig()
await init()
init()
browser.storage.onChanged.addListener(init)
function fetchFrontendInstanceList(service, frontend) {
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[frontend][network], ...options[frontend][network].custom)
tmp.push(...redirects[network], ...options[frontend][network].custom)
}
} else if (config.services[service].frontends[frontend].singleInstance) tmp = config.services[service].frontends[frontend].singleInstance
return tmp
}
function all(service, frontend) {
function all(service, frontend, options, config, redirects) {
let instances = []
if (!frontend) {
for (const frontend in config.services[service].frontends) {
instances.push(...fetchFrontendInstanceList(service, frontend))
instances.push(...fetchFrontendInstanceList(service, frontend, redirects[frontend], options, config))
}
} else {
instances.push(...fetchFrontendInstanceList(service, frontend))
instances.push(...fetchFrontendInstanceList(service, frontend, redirects[frontend], options, config))
}
return instances
}
function regexArray(service, url) {
function regexArray(service, url, config) {
let targets
if (config.services[service].targets == "datajson") {
browser.storage.local.get("targets", r => {
@ -69,20 +60,20 @@ function regexArray(service, url) {
return false
}
browser.storage.onChanged.addListener(init)
function redirect(url, type, initiator) {
let randomInstance
let frontend
let network = options.network
for (const service in config.services) {
if (!options[service].enabled) continue
if (config.services[service].embeddable && type != options[service].redirectType && options[service].redirectType != "both") continue
if (!config.services[service].embeddable && type != "main_frame") continue
let targets = new RegExp(config.services[service].targets.join("|"), "i")
if (initiator && (all(service).includes(initiator.origin) || targets.test(initiator.host))) continue
if (!regexArray(service, url)) continue
if (!regexArray(service, url, config)) continue
if (initiator) {
if (targets.test(initiator.host)) continue
if (all(service, null, options, config, redirects).includes(initiator.origin)) return "BYPASSTAB"
}
if (Object.keys(config.services[service].frontends).length > 1) {
if (type == "sub_frame") frontend = options[service].embedFrontend
@ -90,7 +81,7 @@ function redirect(url, type, initiator) {
} else frontend = Object.keys(config.services[service].frontends)[0]
if (config.services[service].frontends[frontend].instanceList) {
let instanceList = [...options[frontend][network].enabled, ...options[frontend][network].custom]
let instanceList = [...options[frontend][options.network].enabled, ...options[frontend][options.network].custom]
if (instanceList.length === 0 && options.networkFallback) instanceList = [...options[frontend].clearnet.enabled, ...options[frontend].clearnet.custom]
if (instanceList.length === 0) return
randomInstance = utils.getRandomInstance(instanceList)
@ -385,152 +376,276 @@ function redirect(url, type, initiator) {
}
}
function computeService(url, returnFrontend) {
for (const service in config.services) {
if (regexArray(service, url)) {
if (returnFrontend) return [service, null]
else return service
} else {
for (const frontend in config.services[service].frontends) {
if (all(service, frontend).includes(utils.protocolHost(url))) {
if (returnFrontend) return [service, frontend]
else return service
}
}
}
}
if (returnFrontend) return [null, null]
else return null
}
function switchInstance(url) {
return new Promise(async resolve => {
const protocolHost = utils.protocolHost(url)
for (const service in config.services) {
if (!options[service].enabled) continue
if (!all(service).includes(protocolHost)) continue
let instancesList = [...options[options[service].frontend][options.network].enabled, ...options[options[service].frontend][options.network].custom]
if (instancesList.length === 0 && options.networkFallback) instancesList = [...options[options[service].frontend].clearnet.enabled, ...options[options[service].frontend].clearnet.custom]
let oldInstance
const i = instancesList.indexOf(protocolHost)
if (i > -1) {
oldInstance = instancesList[i]
instancesList.splice(i, 1)
}
if (instancesList.length === 0) {
resolve()
return
}
const randomInstance = utils.getRandomInstance(instancesList)
const oldUrl = `${oldInstance}${url.pathname}${url.search}`
// This is to make instance switching work when the instance depends on the pathname, eg https://darmarit.org/searx
// Doesn't work because of .includes array method, not a top priotiry atm
resolve(oldUrl.replace(oldInstance, randomInstance))
return
}
resolve()
})
}
function reverse(url) {
return new Promise(async resolve => {
let protocolHost = utils.protocolHost(url)
let currentService
for (const service in config.services) {
if (!all(service).includes(protocolHost)) continue
currentService = service
}
switch (currentService) {
case "instagram":
if (url.pathname.startsWith("/p")) resolve(`https://instagram.com${url.pathname.replace("/p", "")}${url.search}`)
if (url.pathname.startsWith("/u")) resolve(`https://instagram.com${url.pathname.replace("/u", "")}${url.search}`)
resolve(config.services[currentService].url + url.pathname + url.search)
return
case "youtube":
case "imdb":
case "imgur":
case "tiktok":
case "twitter":
resolve(config.services[currentService].url + url.pathname + url.search)
return
default:
resolve()
return
}
})
}
function unifyPreferences(url, tabId) {
return new Promise(async resolve => {
const protocolHost = utils.protocolHost(url)
let currentFrontend, currentService
serviceloop: for (const service in config.services) {
for (const frontend in config.services[service].frontends) {
if (all(service, frontend).includes(protocolHost)) {
currentFrontend = frontend
currentService = service
break serviceloop
}
}
}
let instancesList = [...options[currentFrontend][options.network].enabled, ...options[currentFrontend][options.network].custom]
if (options.networkFallback && options.network != "clearnet") instancesList.push(...options[currentFrontend].clearnet.enabled, ...options[currentFrontend].clearnet.custom)
const frontend = config.services[currentService].frontends[currentFrontend]
if ("cookies" in frontend.preferences) {
for (const cookie of frontend.preferences.cookies) {
await utils.copyCookie(currentFrontend, url, instancesList, cookie)
}
}
if ("localstorage" in frontend.preferences) {
browser.storage.local.set({ tmp: [currentFrontend, frontend.preferences.localstorage] })
browser.tabs.executeScript(tabId, {
file: "/assets/javascripts/get-localstorage.js",
runAt: "document_start",
})
for (const instance of instancesList)
browser.tabs.create({ url: instance }, tab =>
browser.tabs.executeScript(tab.id, {
file: "/assets/javascripts/set-localstorage.js",
runAt: "document_start",
})
)
}
if ("indexeddb" in frontend.preferences) {
}
if ("token" in frontend.preferences) {
}
resolve(true)
})
}
function setRedirects(redirects) {
//browser.storage.local.get(["options", "blacklists"], async r => {
//let options = r.options
let targets = {}
for (const service in config.services) {
if (config.services[service].targets == "datajson") {
targets[service] = redirects[service]
}
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 blacklists) {
for (const instance of blacklist) {
let i = options[frontend].clearnet.enabled.indexOf(instance)
if (i > -1) options[frontend].clearnet.enabled.splice(i, 1)
async function computeService(url, returnFrontend) {
fetch("/config/config.json")
.then(response => response.text())
.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)) {
if (returnFrontend) return [service, null]
else return service
} else {
for (const frontend in config.services[service].frontends) {
if (all(service, frontend, options, config, redirects).includes(utils.protocolHost(url))) {
if (returnFrontend) {
return [service, frontend]
} else return service
}
}
}
}
// if (returnFrontend) return [null, null]
// else return null
})
})
}
async function switchInstance(url) {
fetch("/config/config.json")
.then(response => response.text())
.then(configData => {
const config = JSON.parse(configData)
browser.storage.local.get(["redirects", "options"], r => {
const redirects = r.redirects
const options = r.options
const protocolHost = utils.protocolHost(url)
for (const service in config.services) {
if (!options[service].enabled) continue
if (!all(service, null, options, config, redirects).includes(protocolHost)) continue
let instancesList = [...options[options[service].frontend][options.network].enabled, ...options[options[service].frontend][options.network].custom]
if (instancesList.length === 0 && options.networkFallback) instancesList = [...options[options[service].frontend].clearnet.enabled, ...options[options[service].frontend].clearnet.custom]
let oldInstance
const i = instancesList.indexOf(protocolHost)
if (i > -1) {
oldInstance = instancesList[i]
instancesList.splice(i, 1)
}
if (instancesList.length === 0) return
const randomInstance = utils.getRandomInstance(instancesList)
const oldUrl = `${oldInstance}${url.pathname}${url.search}`
// This is to make instance switching work when the instance depends on the pathname, eg https://darmarit.org/searx
// Doesn't work because of .includes array method, not a top priotiry atm
return oldUrl.replace(oldInstance, randomInstance)
}
})
})
}
async function reverse(url) {
fetch("/config/config.json")
.then(response => response.text())
.then(configData => {
const config = JSON.parse(configData)
browser.storage.local.get(["redirects", "options"], r => {
const redirects = r.redirects
const options = r.options
let protocolHost = utils.protocolHost(url)
for (const service in config.services) {
if (!all(service, null, options, config, redirects).includes(protocolHost)) continue
switch (service) {
case "instagram":
if (url.pathname.startsWith("/p")) return `https://instagram.com${url.pathname.replace("/p", "")}${url.search}`
if (url.pathname.startsWith("/u")) return `https://instagram.com${url.pathname.replace("/u", "")}${url.search}`
return config.services[service].url + url.pathname + url.search
case "youtube":
case "imdb":
case "imgur":
case "tiktok":
case "twitter":
case "reddit":
return config.services[service].url + url.pathname + url.search
default:
return
}
}
})
})
}
async function unifyPreferences(url, tabId) {
fetch("/config/config.json")
.then(response => response.text())
.then(configData => {
const config = JSON.parse(configData)
browser.storage.local.get(["options", "reidrects"], r => {
const redirects = r.redirects
const options = r.options
const protocolHost = utils.protocolHost(url)
for (const service in config.services) {
for (const frontend in config.services[service].frontends) {
if (all(service, frontend, options, config, redirects).includes(protocolHost)) {
let instancesList = [...options[frontend][options.network].enabled, ...options[frontend][options.network].custom]
if (options.networkFallback && options.network != "clearnet") instancesList.push(...options[frontend].clearnet.enabled, ...options[frontend].clearnet.custom)
const frontend = config.services[service].frontends[frontend]
if ("cookies" in frontend.preferences) {
for (const cookie of frontend.preferences.cookies) {
utils.copyCookie(frontend, url, instancesList, cookie)
}
}
if ("localstorage" in frontend.preferences) {
browser.storage.local.set({ tmp: [frontend, frontend.preferences.localstorage] })
browser.tabs.executeScript(tabId, {
file: "/assets/javascripts/get-localstorage.js",
runAt: "document_start",
})
for (const instance of instancesList)
browser.tabs.create({ url: instance }, tab =>
browser.tabs.executeScript(tab.id, {
file: "/assets/javascripts/set-localstorage.js",
runAt: "document_start",
})
)
}
if ("indexeddb" in frontend.preferences) {
}
if ("token" in frontend.preferences) {
}
return true
}
}
}
})
})
}
async function setRedirects(redirects) {
fetch("/config/config.json")
.then(response => response.text())
.then(configData => {
//browser.storage.local.get(["options", "blacklists"], async r => {
//const options = r.options
const config = JSON.parse(configData)
let targets = {}
for (const service in config.services) {
if (config.services[service].targets == "datajson") {
targets[service] = redirects[service]
}
/*
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)
}
}
}
}
*/
// The above will be implemented with https://github.com/libredirect/libredirect/issues/334
}
}
}
console.log(redirects)
browser.storage.local.set({ redirects, targets, options })
//})
browser.storage.local.set({ redirects, targets /*, options*/ })
//})
})
}
function initDefaults() {
return new Promise(resolve => {
fetch("/instances/data.json")
.then(response => response.text())
.then(data => {
fetch("/config/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 = {}
const latency = {}
for (const service in config.services) {
options[service] = {}
if (config.services[service].targets == "datajson") {
targets[service] = 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, latency, localstorage })
resolve()
})
})
})
})
}
function upgradeOptions() {
return new Promise(resolve => {
fetch("/config/config.json")
.then(response => response.text())
.then(configData => {
browser.storage.local.get(["options", "exceptions", "theme", "popupFrontends", "autoRedirect", "firstPartyIsolate"], r => {
let options = r.options
let latency = {}
const config = JSON.parse(configData)
options.exceptions = r.exceptions
if (r.theme != "DEFAULT") options.theme = r.theme
options.popupServices = r.popupFrontends
options.firstPartyIsolate = r.firstPartyIsolate
options.autoRedirect = r.autoRedirect
for (const service in config.services) {
browser.storage.local.get([`disable${utils.camelCase(service)}`, `${service}RedirectType`, `${service}Frontend`, `${service}Latency`, `${service}EmbedFrontend`], r => {
if (r) {
options[service].enabled = !r["disable" + utils.camelCase(service)]
if (r[service + "Frontend"]) {
if (r[service + "Frontend"] == "yatte") options[service].frontend = "yattee"
else options[service].frontend = r[service + "Frontend"]
}
if (r[service + "RedirectType"]) options[service].redirectType = r[service + "RedirectType"]
if (r[service + "EmbedFrontend"] && (service != "youtube" || r[service + "EmbedFrontend"] == "invidious" || "piped")) options[service].embedFrontend = r[service + "EmbedFrontend"]
for (const frontend in config.services[service].frontends) {
browser.local.storage.get(`${frontend}Latency`, r => {
if (r) latency[frontend] = r[frontend + "Latency"]
for (const network in config.networks) {
let protocol
if (network == "clearnet") protocol = "normal"
else protocol = network
browser.storage.local.get([`${frontend}${utils.camelCase(protocol)}RedirectsChecks`, `${frontend}${utils.camelCase(protocol)}CustomRedirects`], r => {
if (r) {
options[frontend][network].checks = r[frontend + utils.camelCase(protocol) + "RedirectsChecks"]
options[frontend][network].custom = r[frontend + utils.camelCase(protocol) + "CustomRedirects"]
}
})
}
})
}
}
})
}
browser.storage.local.set({ options, latency })
resolve()
})
})
})
}
export default {
@ -540,4 +655,6 @@ export default {
reverse,
unifyPreferences,
setRedirects,
initDefaults,
upgradeOptions,
}

View File

@ -342,7 +342,7 @@ function getPreferencesFromToken(frontend, targetUrl, urls, name, endpoint) {
})
}
function copyRaw(test, copyRawElement) {
function copyRaw(test, copyRawElement, config) {
return new Promise(resolve => {
browser.tabs.query({ active: true, currentWindow: true }, async tabs => {
let currTab = tabs[0]
@ -355,7 +355,7 @@ function copyRaw(test, copyRawElement) {
return
}
let newUrl = await servicesHelper.reverse(url)
let newUrl = servicesHelper.reverse(url, config)
if (newUrl) {
resolve(newUrl)
@ -387,7 +387,7 @@ function unify() {
return
}
let result = await servicesHelper.unifyPreferences(url, currTab.id)
const result = await servicesHelper.unifyPreferences(url, currTab.id)
resolve(result)
}
@ -407,7 +407,7 @@ function switchInstance(test) {
resolve()
return
}
let newUrl = await servicesHelper.switchInstance(url)
const newUrl = await servicesHelper.switchInstance(url)
if (newUrl) {
if (!test) browser.tabs.update({ url: newUrl })

View File

@ -1,7 +1,7 @@
{
"name": "__MSG_extensionName__",
"description": "__MSG_extensionDescription__",
"version": "2.2.1",
"version": "2.3.0",
"manifest_version": 2,
"browser_specific_settings": {
"gecko": {

View File

@ -3,11 +3,23 @@
import generalHelper from "../../assets/javascripts/general.js"
import utils from "../../assets/javascripts/utils.js"
import servicesHelper from "../../assets/javascripts/services.js"
import initHelper from "../../assets/javascripts/init.js"
window.browser = window.browser || window.chrome
browser.runtime.onInstalled.addListener(async details => {
function initDefaults() {
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()
})
})
})
}
browser.runtime.onInstalled.addListener(details => {
// if (details.reason == 'install' || (details.reason == "update" && details.previousVersion != browser.runtime.getManifest().version)) {
// if (details.reason == "update")
// browser.storage.local.get(null, r => {
@ -24,27 +36,22 @@ browser.runtime.onInstalled.addListener(async details => {
initDefaults()
break
case "update":
switch (details.previousVersion) {
case "2.2.1":
initDefaults()
break
}
fetch("/instances/blacklist.json")
.then(response => response.text())
.then(async data => {
browser.storage.local.set({ blacklists: JSON.parse(data) }, async () => {
switch (details.previousVersion) {
case "2.2.1":
await generalHelper.initDefaults()
await servicesHelper.initDefaults()
await servicesHelper.upgradeOptions()
break
}
})
})
}
})
function initDefaults() {
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 initHelper.initDefaults()
})
})
})
}
let BYPASSTABs = []
browser.webRequest.onBeforeRequest.addListener(
details => {

View File

@ -150,6 +150,11 @@
</button>
</div>
</form>
<div class="buttons buttons-inline"><a class="button button-inline" id="test">
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
<path d="M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"></path>
</svg>
Test Test Yes Yes</a>&nbsp; &nbsp;</div>
<div class="checklist" id="exceptions-custom-checklist"></div>
<div class="buttons buttons-inline"><a class="button button-inline" id="update-instances">
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">

View File

@ -58,6 +58,7 @@ function exportSettings() {
exportSettings()
document.getElementById("general_page").addEventListener("click", exportSettings)
document.getElementById("test").addEventListener("click", servicesHelper.upgradeOptions)
let importSettingsElement = document.getElementById("import-settings")
let importSettingsElementText = document.getElementById("import_settings_text")

View File

@ -2,25 +2,11 @@
window.browser = window.browser || window.chrome
import utils from "../../assets/javascripts/utils.js"
import generalHelper from "../../assets/javascripts/general.js"
// import generalHelper from "../../assets/javascripts/general.js"
import serviceHelper from "../../assets/javascripts/services.js"
utils.switchInstance(true).then(r => {
if (!r) document.getElementById("change_instance_div").style.display = "none"
else document.getElementById("change_instance").addEventListener("click", () => utils.switchInstance(false))
})
utils.copyRaw(true).then(r => {
if (!r) document.getElementById("copy_raw_div").style.display = "none"
else {
const copy_raw = document.getElementById("copy_raw")
copy_raw.addEventListener("click", () => utils.copyRaw(false, copy_raw))
}
})
document.getElementById("more-options").addEventListener("click", () => browser.runtime.openOptionsPage())
let config
let divs = {}
let config,
divs = {}
async function getConfig() {
return new Promise(resolve => {
@ -35,6 +21,20 @@ async function getConfig() {
await getConfig()
utils.switchInstance(true).then(r => {
if (!r) document.getElementById("change_instance_div").style.display = "none"
else document.getElementById("change_instance").addEventListener("click", () => utils.switchInstance(false))
})
utils.copyRaw(true, null, config).then(r => {
if (!r) document.getElementById("copy_raw_div").style.display = "none"
else {
const copy_raw = document.getElementById("copy_raw")
copy_raw.addEventListener("click", () => utils.copyRaw(false, copy_raw))
}
})
document.getElementById("more-options").addEventListener("click", () => browser.runtime.openOptionsPage())
const allSites = document.getElementsByClassName("all_sites")[0]
const currSite = document.getElementsByClassName("current_site")[0]
@ -78,11 +78,16 @@ browser.storage.local.get("options", r => {
return
}
const [service, frontend] = serviceHelper.computeService(url, true)
let service = await serviceHelper.computeService(url, true)
let frontend
if (service) {
if (service[1]) {
frontend = service[1]
service = frontend[0]
}
divs[service].current.classList.remove("hide")
divs[service].all.classList.add("hide")
if (config.services[service].frontends[frontend].preferences) {
if (config.services[service].frontends[frontend].preferences && !config.services[service].frontends[frontend].preferences.token) {
const unify = document.getElementById("unify")
const textElement = document.getElementById("unify").getElementsByTagName("h4")[0]
unify.addEventListener("click", () => {