From da446a981bd4d29bdb47b4fbf58a8c561d05f578 Mon Sep 17 00:00:00 2001 From: Hygna Date: Wed, 7 Sep 2022 18:05:18 +0100 Subject: Started work on services.js --- src/pages/background/background.js | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src/pages/background') diff --git a/src/pages/background/background.js b/src/pages/background/background.js index c6e9ab7a..87d498e4 100644 --- a/src/pages/background/background.js +++ b/src/pages/background/background.js @@ -22,6 +22,8 @@ import sendTargetsHelper from "../../assets/javascripts/sendTargets.js" import peertubeHelper from "../../assets/javascripts/peertube.js" import lbryHelper from "../../assets/javascripts/lbry.js" +import servicesHelper from "../../assets/javascripts/services.js" + window.browser = window.browser || window.chrome browser.runtime.onInstalled.addListener(details => { @@ -86,6 +88,7 @@ browser.webRequest.onBeforeRequest.addListener( return null } + /* let newUrl = youtubeMusicHelper.redirect(url, details.type) if (!newUrl) newUrl = youtubeHelper.redirect(url, details.type, initiator) if (!newUrl) newUrl = twitterHelper.redirect(url, details.type, initiator) @@ -104,6 +107,8 @@ browser.webRequest.onBeforeRequest.addListener( if (!newUrl) newUrl = translateHelper.redirect(url) if (!newUrl) newUrl = searchHelper.redirect(url) if (!newUrl) newUrl = wikipediaHelper.redirect(url) + */ + let newUrl = servicesHelper.redirect(url, details.type, initiator) if (details.frameAncestors && details.frameAncestors.length > 0 && generalHelper.isException(new URL(details.frameAncestors[0].url))) newUrl = null -- cgit 1.4.1 From 4cab752e05dd479c4c3da7c06c276de51ca9f637 Mon Sep 17 00:00:00 2001 From: Hygna Date: Fri, 9 Sep 2022 15:55:33 +0100 Subject: All irregular url structures completed --- src/assets/javascripts/services.js | 259 ++++++++++++++++++- src/config/config.json | 2 +- src/pages/background/background.js | 499 +++++++++++++++++++------------------ 3 files changed, 505 insertions(+), 255 deletions(-) (limited to 'src/pages/background') diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js index 973e44b4..9c880432 100644 --- a/src/assets/javascripts/services.js +++ b/src/assets/javascripts/services.js @@ -6,11 +6,13 @@ let config function getConfig() { return new Promise(async resolve => { + let data fetch("/config/config.json") .then(response => response.text()) .then(data => { - config = JSON.parse(data) + data = JSON.parse(data) }) + config = data resolve() }) } @@ -25,7 +27,6 @@ function init() { networkFallback = r.networkFallback }) //cur = current - getConfig() for (service in config.services) { redirects = {} browser.storage.local.get([`disable${camelCase(service)}`, `${service}Redirects`, `${service}RedirectType,`, `${service}Frontend`], r => { @@ -46,6 +47,8 @@ function init() { }) } +getConfig() +console.log(config) init() browser.storage.onChanged.addListener(init) @@ -54,9 +57,13 @@ function redirect(url, type, initiator) { if (url.pathname == "/") return for (service in config.services) { if (disabled && !disableOverride) continue + let targets = service.targets + if (targets == "datajson") { + browser.storage.local.get(`${service}Targets`, (targets = r[service + "Targets"])) + } + if (initiator && (all().includes(initiator.origin) || targets.includes(initiator.host))) continue - //if (!targets.some(rx => rx.test(url.href))) continue - if (!target.test(url)) continue + if (!targets.some(rx => rx.test(url.href))) continue if (type != redirectType && type != "both") continue browser.storage.local.get(`${service}Frontend`, (frontend = r[service + "Frontend"])) let instanceList = redirects[frontend][curNetwork] @@ -64,6 +71,26 @@ function redirect(url, type, initiator) { if (instanceList.length === 0 && redirects.indexOf(frontend) != -1) return randomInstance = utils.getRandomInstance(instanceList) } + + // Here is a (temperory) space for defining constants required in 2 or more switch cases. + // When possible, try have the two switch cases share all their code as done with searx and searxng. + // Do not do that when they do not share 100% of their code. + + const mapCentreRegex = /@(-?\d[0-9.]*),(-?\d[0-9.]*),(\d{1,2})[.z]/ + const dataLatLngRegex = /!3d(-?[0-9]{1,}.[0-9]{1,})!4d(-?[0-9]{1,}.[0-9]{1,})/ + const placeRegex = /\/place\/(.*)\// + function convertMapCentre() { + let [, lat, lon, zoom] = 0 + if (url.pathname.match(mapCentreRegex)) { + // Set map centre if present + ;[, lat, lon, zoom] = url.pathname.match(mapCentreRegex) + } else if (url.searchParams.has("center")) { + ;[lat, lon] = url.searchParams.get("center").split(",") + zoom = url.searchParams.get("zoom") ?? "17" + } + return [zoom, lon, lat] + } + switch (frontend) { // This is where all instance-specific code must be ran to convert the service url to one that can be understood by the frontend. case "beatbump": @@ -108,9 +135,229 @@ function redirect(url, type, initiator) { return `freetube://https://youtube.com${url.pathname}${url.search}` case "simplyTranslate": return `${randomInstance}/${url.search}` + case "osm": { + if (initiator && initiator.host === "earth.google.com") return + travelModes = { + driving: "fossgis_osrm_car", + walking: "fossgis_osrm_foot", + bicycling: "fossgis_osrm_bike", + transit: "fossgis_osrm_car", // not implemented on OSM, default to car. + } + + function addressToLatLng(address) { + const xmlhttp = new XMLHttpRequest() + xmlhttp.open("GET", `https://nominatim.openstreetmap.org/search/${address}?format=json&limit=1`, false) + xmlhttp.send() + if (xmlhttp.status === 200) { + const json = JSON.parse(xmlhttp.responseText)[0] + if (json) { + console.log("json", json) + return [`${json.lat},${json.lon}`, `${json.boundingbox[2]},${json.boundingbox[1]},${json.boundingbox[3]},${json.boundingbox[0]}`] + } + } + console.info("Error: Status is " + xmlhttp.status) + } + + let mapCentre = "#" + let prefs = {} + + const mapCentreData = convertMapCentre() + if (mapCentreData[0] && mapCentreData[1] && mapCentreData[2]) mapCentre = `#map=${mapCentreData[0]}/${mapCentreData[1]}/${mapCentreData[2]}` + if (url.searchParams.get("layer")) prefs.layers = osmLayers[url.searchParams.get("layer")] + + if (url.pathname.includes("/embed")) { + // Handle Google Maps Embed API + // https://www.google.com/maps/embed/v1/place?key=AIzaSyD4iE2xVSpkLLOXoyqT-RuPwURN3ddScAI&q=Eiffel+Tower,Paris+France + //console.log("embed life") + + let query = "" + if (url.searchParams.has("q")) query = url.searchParams.get("q") + else if (url.searchParams.has("query")) query = url.searchParams.has("query") + else if (url.searchParams.has("pb")) + try { + query = url.searchParams.get("pb").split(/!2s(.*?)!/)[1] + } catch (error) { + console.error(error) + } // Unable to find map marker in URL. + + let [coords, boundingbox] = addressToLatLng(query) + prefs.bbox = boundingbox + prefs.marker = coords + prefs.layer = "mapnik" + let prefsEncoded = new URLSearchParams(prefs).toString() + return `${randomInstance}/export/embed.html?${prefsEncoded}` + } else if (url.pathname.includes("/dir")) { + // Handle Google Maps Directions + // https://www.google.com/maps/dir/?api=1&origin=Space+Needle+Seattle+WA&destination=Pike+Place+Market+Seattle+WA&travelmode=bicycling + + let travMod = url.searchParams.get("travelmode") + if (url.searchParams.has("travelmode")) prefs.engine = travelModes[travMod] + + let orgVal = url.searchParams.get("origin") + let destVal = url.searchParams.get("destination") + + let org + addressToLatLng(orgVal, a => (org = a)) + let dest + addressToLatLng(destVal, a => (dest = a)) + prefs.route = `${org};${dest}` + + let prefsEncoded = new URLSearchParams(prefs).toString() + return `${randomInstance}/directions?${prefsEncoded}${mapCentre}` + } else if (url.pathname.includes("data=") && url.pathname.match(dataLatLngRegex)) { + // Get marker from data attribute + // https://www.google.com/maps/place/41%C2%B001'58.2%22N+40%C2%B029'18.2%22E/@41.032833,40.4862063,17z/data=!3m1!4b1!4m6!3m5!1s0x0:0xf64286eaf72fc49d!7e2!8m2!3d41.0328329!4d40.4883948 + //console.log("data life") + + let [, mlat, mlon] = url.pathname.match(dataLatLngRegex) + + return `${randomInstance}/search?query=${mlat}%2C${mlon}` + } else if (url.searchParams.has("ll")) { + // Get marker from ll param + // https://maps.google.com/?ll=38.882147,-76.99017 + //console.log("ll life") + + const [mlat, mlon] = url.searchParams.get("ll").split(",") + + return `${randomInstance}/search?query=${mlat}%2C${mlon}` + } else if (url.searchParams.has("viewpoint")) { + // Get marker from viewpoint param. + // https://www.google.com/maps/@?api=1&map_action=pano&viewpoint=48.857832,2.295226&heading=-45&pitch=38&fov=80 + //console.log("viewpoint life") + + const [mlat, mlon] = url.searchParams.get("viewpoint").split(",") + + return `${randomInstance}/search?query=${mlat}%2C${mlon}` + } else { + // Use query as search if present. + //console.log("normal life") + + let query + if (url.searchParams.has("q")) query = url.searchParams.get("q") + else if (url.searchParams.has("query")) query = url.searchParams.get("query") + else if (url.pathname.match(placeRegex)) query = url.pathname.match(placeRegex)[1] + + let prefsEncoded = new URLSearchParams(prefs).toString() + if (query) return `${randomInstance}/search?query="${query}${mapCentre}&${prefsEncoded}` + } + + let prefsEncoded = new URLSearchParams(prefs).toString() + console.log("mapCentre", mapCentre) + console.log("prefs", prefs) + console.log("prefsEncoded", prefsEncoded) + return `${randomInstance}/${mapCentre}&${prefsEncoded}` + } + case "facil": { + if (initiator && initiator.host === "earth.google.com") return + let travelModes = { + driving: "car", + walking: "pedestrian", + bicycling: "bicycle", + transit: "car", // not implemented on Facil, default to car. + } + const mapCentreData = convertMapCentre() + let mapCentre = "#" + if (mapCentreData[0] && mapCentreData[1] && mapCentreData[2]) mapCentre = `#${mapCentreData[0]}/${mapCentreData[1]}/${mapCentreData[2]}` + + if (url.pathname.includes("/embed")) { + // Handle Google Maps Embed API + // https://www.google.com/maps/embed/v1/place?key=AIzaSyD4iE2xVSpkLLOXoyqT-RuPwURN3ddScAI&q=Eiffel+Tower,Paris+France + //console.log("embed life") + + let query = "" + if (url.searchParams.has("q")) query = url.searchParams.get("q") + else if (url.searchParams.has("query")) query = url.searchParams.has("query") + else if (url.searchParams.has("pb")) + try { + query = url.searchParams.get("pb").split(/!2s(.*?)!/)[1] + } catch (error) { + console.error(error) + } // Unable to find map marker in URL. + + return `${randomInstance}/#q=${query}` + } else if (url.pathname.includes("/dir")) { + // Handle Google Maps Directions + // https://www.google.com/maps/dir/?api=1&origin=Space+Needle+Seattle+WA&destination=Pike+Place+Market+Seattle+WA&travelmode=bicycling + + let travMod = url.searchParams.get("travelmode") + + let orgVal = url.searchParams.get("origin") + let destVal = url.searchParams.get("destination") + + return `${randomInstance}/#q=${orgVal}%20to%20${destVal}%20by%20${travelModes[travMod]}` + } else if (url.pathname.includes("data=") && url.pathname.match(dataLatLngRegex)) { + // Get marker from data attribute + // https://www.google.com/maps/place/41%C2%B001'58.2%22N+40%C2%B029'18.2%22E/@41.032833,40.4862063,17z/data=!3m1!4b1!4m6!3m5!1s0x0:0xf64286eaf72fc49d!7e2!8m2!3d41.0328329!4d40.4883948 + //console.log("data life") + + let [, mlat, mlon] = url.pathname.match(dataLatLngRegex) + + return `${randomInstance}/#q=${mlat}%2C${mlon}` + } else if (url.searchParams.has("ll")) { + // Get marker from ll param + // https://maps.google.com/?ll=38.882147,-76.99017 + //console.log("ll life") + + const [mlat, mlon] = url.searchParams.get("ll").split(",") + + return `${randomInstance}/#q=${mlat}%2C${mlon}` + } else if (url.searchParams.has("viewpoint")) { + // Get marker from viewpoint param. + // https://www.google.com/maps/@?api=1&map_action=pano&viewpoint=48.857832,2.295226&heading=-45&pitch=38&fov=80 + //console.log("viewpoint life") + + const [mlat, mlon] = url.searchParams.get("viewpoint").split(",") + + return `${randomInstance}/#q=${mlat}%2C${mlon}` + } else { + // Use query as search if present. + //console.log("normal life") + + let query + if (url.searchParams.has("q")) query = url.searchParams.get("q") + else if (url.searchParams.has("query")) query = url.searchParams.get("query") + else if (url.pathname.match(placeRegex)) query = url.pathname.match(placeRegex)[1] + + if (query) return `${randomInstance}/${mapCentre}/Mpnk/${query}` + } + } + case "wikiless": + let GETArguments = [] + if (url.search.length > 0) { + let search = url.search.substring(1) //get rid of '?' + let argstrings = search.split("&") + for (let i = 0; i < argstrings.length; i++) { + let args = argstrings[i].split("=") + GETArguments.push([args[0], args[1]]) + } + } + + let link = `${randomInstance}${url.pathname}` + let urlSplit = url.host.split(".") + if (urlSplit[0] != "wikipedia" && urlSplit[0] != "www") { + if (urlSplit[0] == "m") GETArguments.push(["mobileaction", "toggle_view_mobile"]) + else GETArguments.push(["lang", urlSplit[0]]) + if (urlSplit[1] == "m") GETArguments.push(["mobileaction", "toggle_view_mobile"]) + // wikiless doesn't have mobile view support yet + } + for (let i = 0; i < GETArguments.length; i++) link += (i == 0 ? "?" : "&") + GETArguments[i][0] + "=" + GETArguments[i][1] + return link + + case "lingva": + let params_arr = url.search.split("&") + params_arr[0] = params_arr[0].substring(1) + let params = {} + for (let i = 0; i < params_arr.length; i++) { + let pair = params_arr[i].split("=") + params[pair[0]] = pair[1] + } + if (params.sl && params.tl && params.text) { + return `${randomInstance}/${params.sl}/${params.tl}/${params.text}` + } + return randomInstance default: return `${randomInstance}${url.pathname}${url.search}` - } // TODO: Wikiless, All youtube frontends by changing regex, lingva + } } function initDefaults() { @@ -124,7 +371,7 @@ function initDefaults() { for (service in config.services) { for (defaultOption in service.defaults) { browser.storage.local.set({ - [defaultOption]: defaultOption.value, + [defaultOption]: service.defaults[defaultOption], }) } for (frontend in service.frontends) { diff --git a/src/config/config.json b/src/config/config.json index db991772..3d4d3f8b 100644 --- a/src/config/config.json +++ b/src/config/config.json @@ -64,7 +64,7 @@ }, "singleInstanceFrontends": ["freetube", "yatte"], "targets": [ - "^https?:\\/{2}(www\\.|music\\.|m\\.|)youtube.com(\\/.*|$)", + "^https?:\\/{2}(www\\.|music\\.|m\\.|)youtube.com(\\(?!iframe_api)/.*|$)", "^https?:\\/{2}img\\.youtube.com\\/vi\\/.*\\/..*", "^https?:\\/{2}(i|s)\\.ytimg.com\\/vi\\/.*\\/..*", "^https?:\\/{2}(www\\.|music\\.|)youtube.com\\/watch?v=..*", diff --git a/src/pages/background/background.js b/src/pages/background/background.js index 87d498e4..e93e3d03 100644 --- a/src/pages/background/background.js +++ b/src/pages/background/background.js @@ -1,248 +1,251 @@ -"use strict" - -import generalHelper from "../../assets/javascripts/general.js" -import utils from "../../assets/javascripts/utils.js" - -import youtubeHelper from "../../assets/javascripts/youtube/youtube.js" -import youtubeMusicHelper from "../../assets/javascripts/youtubeMusic.js" -import twitterHelper from "../../assets/javascripts/twitter.js" -import instagramHelper from "../../assets/javascripts/instagram.js" -import redditHelper from "../../assets/javascripts/reddit.js" -import searchHelper from "../../assets/javascripts/search.js" -import translateHelper from "../../assets/javascripts/translate/translate.js" -import mapsHelper from "../../assets/javascripts/maps.js" -import wikipediaHelper from "../../assets/javascripts/wikipedia.js" -import mediumHelper from "../../assets/javascripts/medium.js" -import quoraHelper from "../../assets/javascripts/quora.js" -import libremdbHelper from "../../assets/javascripts/imdb.js" -import reutersHelper from "../../assets/javascripts/reuters.js" -import imgurHelper from "../../assets/javascripts/imgur.js" -import tiktokHelper from "../../assets/javascripts/tiktok.js" -import sendTargetsHelper from "../../assets/javascripts/sendTargets.js" -import peertubeHelper from "../../assets/javascripts/peertube.js" -import lbryHelper from "../../assets/javascripts/lbry.js" - -import servicesHelper from "../../assets/javascripts/services.js" - -window.browser = window.browser || window.chrome - -browser.runtime.onInstalled.addListener(details => { - function initDefaults() { - fetch("/instances/blacklist.json") - .then(response => response.text()) - .then(async data => { - browser.storage.local.clear(() => { - browser.storage.local.set({ cloudflareBlackList: JSON.parse(data).cloudflare }, () => { - browser.storage.local.set({ authenticateBlackList: JSON.parse(data).authenticate }, () => { - browser.storage.local.set({ offlineBlackList: JSON.parse(data).offline }, () => { - generalHelper.initDefaults() - youtubeHelper.initDefaults() - youtubeMusicHelper.initDefaults() - twitterHelper.initDefaults() - instagramHelper.initDefaults() - mapsHelper.initDefaults() - searchHelper.initDefaults() - translateHelper.initDefaults() - mediumHelper.initDefaults() - quoraHelper.initDefaults() - libremdbHelper.initDefaults() - reutersHelper.initDefaults() - redditHelper.initDefaults() - wikipediaHelper.initDefaults() - imgurHelper.initDefaults() - tiktokHelper.initDefaults() - sendTargetsHelper.initDefaults() - peertubeHelper.initDefaults() - lbryHelper.initDefaults() - }) - }) - }) - }) - }) - } - if (details.reason == "install") initDefaults() - - // if (details.reason == 'install' || (details.reason == "update" && details.previousVersion != browser.runtime.getManifest().version)) { - // if (details.reason == "update") - // browser.storage.local.get(null, r => { - // if (r.theme) { - // const old = encodeURIComponent(JSON.stringify(r)) - // browser.tabs.create({ url: browser.runtime.getURL(`/pages/background/reset_warning.html?data=${old}`) }); - // } - // initDefaults(); - // }) - // else initDefaults(); - // } -}) - -let BYPASSTABs = [] -browser.webRequest.onBeforeRequest.addListener( - details => { - const url = new URL(details.url) - if (new RegExp(/^chrome-extension:\/{2}.*\/instances\/.*.json$/).test(url.href) && details.type == "xmlhttprequest") return - let initiator - try { - if (details.originUrl) initiator = new URL(details.originUrl) - else if (details.initiator) initiator = new URL(details.initiator) - } catch { - return null - } - - /* - let newUrl = youtubeMusicHelper.redirect(url, details.type) - if (!newUrl) newUrl = youtubeHelper.redirect(url, details.type, initiator) - if (!newUrl) newUrl = twitterHelper.redirect(url, details.type, initiator) - if (!newUrl) newUrl = instagramHelper.redirect(url, details.type, initiator) - if (!newUrl) newUrl = mapsHelper.redirect(url, initiator) - if (!newUrl) newUrl = redditHelper.redirect(url, details.type, initiator) - if (!newUrl) newUrl = mediumHelper.redirect(url, details.type, initiator) - if (!newUrl) newUrl = quoraHelper.redirect(url, details.type, initiator) - if (!newUrl) newUrl = libremdbHelper.redirect(url, details.type, initiator) - if (!newUrl) newUrl = reutersHelper.redirect(url, details.type, initiator) - if (!newUrl) newUrl = imgurHelper.redirect(url, details.type, initiator) - if (!newUrl) newUrl = tiktokHelper.redirect(url, details.type, initiator) - if (!newUrl) newUrl = sendTargetsHelper.redirect(url, details.type, initiator) - if (!newUrl) newUrl = peertubeHelper.redirect(url, details.type, initiator) - if (!newUrl) newUrl = lbryHelper.redirect(url, details.type, initiator) - if (!newUrl) newUrl = translateHelper.redirect(url) - if (!newUrl) newUrl = searchHelper.redirect(url) - if (!newUrl) newUrl = wikipediaHelper.redirect(url) - */ - let newUrl = servicesHelper.redirect(url, details.type, initiator) - - if (details.frameAncestors && details.frameAncestors.length > 0 && generalHelper.isException(new URL(details.frameAncestors[0].url))) newUrl = null - - if (generalHelper.isException(url)) newUrl = "BYPASSTAB" - if (BYPASSTABs.includes(details.tabId)) newUrl = null - - if (newUrl) { - if (newUrl === "CANCEL") { - console.log(`Canceled ${url}`) - return { cancel: true } - } - if (newUrl === "BYPASSTAB") { - console.log(`Bypassed ${details.tabId} ${url}`) - if (!BYPASSTABs.includes(details.tabId)) BYPASSTABs.push(details.tabId) - return null - } - console.info("Redirecting", url.href, "=>", newUrl) - return { redirectUrl: newUrl } - } - return null - }, - { urls: [""] }, - ["blocking"] -) - -browser.tabs.onRemoved.addListener(tabId => { - const i = BYPASSTABs.indexOf(tabId) - if (i > -1) { - BYPASSTABs.splice(i, 1) - console.log("Removed BYPASSTABs", tabId) - } -}) - -browser.webRequest.onHeadersReceived.addListener( - e => { - let response = youtubeHelper.removeXFrameOptions(e) - if (!response) response = twitterHelper.removeXFrameOptions(e) - return response - }, - { urls: [""] }, - ["blocking", "responseHeaders"] -) - -async function redirectOfflineInstance(url, tabId) { - let newUrl = await youtubeHelper.switchInstance(url, true) - if (!newUrl) newUrl = await twitterHelper.switchInstance(url, true) - if (!newUrl) newUrl = await instagramHelper.switchInstance(url, true) - if (!newUrl) newUrl = await redditHelper.switchInstance(url, true) - if (!newUrl) newUrl = await searchHelper.switchInstance(url, true) - if (!newUrl) newUrl = await translateHelper.switchInstance(url, true) - if (!newUrl) newUrl = await mediumHelper.switchInstance(url, true) - if (!newUrl) newUrl = await quoraHelper.switchInstance(url, true) - if (!newUrl) newUrl = await libremdbHelper.switchInstance(url, true) - if (!newUrl) newUrl = await tiktokHelper.switchInstance(url, true) - if (!newUrl) newUrl = await imgurHelper.switchInstance(url, true) - if (!newUrl) newUrl = await wikipediaHelper.switchInstance(url, true) - if (!newUrl) newUrl = await peertubeHelper.switchInstance(url, true) - if (!newUrl) newUrl = await lbryHelper.switchInstance(url, true) - if (!newUrl) newUrl = await youtubeMusicHelper.switchInstance(url, true) - - if (newUrl) { - if (counter >= 5) { - browser.tabs.update(tabId, { - url: `/pages/errors/instance_offline.html?url=${encodeURIComponent(newUrl)}`, - }) - counter = 0 - } else { - browser.tabs.update(tabId, { url: newUrl }) - counter++ - } - } -} -let counter = 0 - -function isAutoRedirect() { - return new Promise(resolve => browser.storage.local.get("autoRedirect", r => resolve(r.autoRedirect == true))) -} - -browser.webRequest.onResponseStarted.addListener( - async details => { - if (!(await isAutoRedirect())) return null - if (details.type == "main_frame" && details.statusCode >= 500) redirectOfflineInstance(new URL(details.url), details.tabId) - }, - { urls: [""] } -) - -browser.webRequest.onErrorOccurred.addListener( - async details => { - if (!(await isAutoRedirect())) return - if (details.type == "main_frame") redirectOfflineInstance(new URL(details.url), details.tabId) - }, - { urls: [""] } -) - -browser.commands.onCommand.addListener(command => { - if (command === "switchInstance") utils.switchInstance() - else if (command == "copyRaw") utils.copyRaw() - else if (command == "unify") utils.unify() -}) - -browser.contextMenus.create({ - id: "settings", - title: browser.i18n.getMessage("Settings"), - contexts: ["browser_action"], -}) - -browser.contextMenus.create({ - id: "switchInstance", - title: browser.i18n.getMessage("switchInstance"), - contexts: ["browser_action"], -}) - -browser.contextMenus.create({ - id: "copyRaw", - title: browser.i18n.getMessage("copyRaw"), - contexts: ["browser_action"], -}) - -browser.contextMenus.create({ - id: "unify", - title: browser.i18n.getMessage("unifySettings"), - contexts: ["browser_action"], -}) - -browser.contextMenus.onClicked.addListener(info => { - if (info.menuItemId == "switchInstance") utils.switchInstance() - else if (info.menuItemId == "settings") browser.runtime.openOptionsPage() - else if (info.menuItemId == "copyRaw") utils.copyRaw() - else if (info.menuItemId == "unify") utils.unify() -}) - -browser.runtime.onMessage.addListener((message, sender, sendResponse) => { - if (message.function === "unify") utils.unify(false).then(r => sendResponse({ response: r })) - return true -}) - -browser.storage.local.set({ version: browser.runtime.getManifest().version }) +"use strict" + +import generalHelper from "../../assets/javascripts/general.js" +import utils from "../../assets/javascripts/utils.js" + +import youtubeHelper from "../../assets/javascripts/youtube/youtube.js" +import youtubeMusicHelper from "../../assets/javascripts/youtubeMusic.js" +import twitterHelper from "../../assets/javascripts/twitter.js" +import instagramHelper from "../../assets/javascripts/instagram.js" +import redditHelper from "../../assets/javascripts/reddit.js" +import searchHelper from "../../assets/javascripts/search.js" +import translateHelper from "../../assets/javascripts/translate/translate.js" +import mapsHelper from "../../assets/javascripts/maps.js" +import wikipediaHelper from "../../assets/javascripts/wikipedia.js" +import mediumHelper from "../../assets/javascripts/medium.js" +import quoraHelper from "../../assets/javascripts/quora.js" +import libremdbHelper from "../../assets/javascripts/imdb.js" +import reutersHelper from "../../assets/javascripts/reuters.js" +import imgurHelper from "../../assets/javascripts/imgur.js" +import tiktokHelper from "../../assets/javascripts/tiktok.js" +import sendTargetsHelper from "../../assets/javascripts/sendTargets.js" +import peertubeHelper from "../../assets/javascripts/peertube.js" +import lbryHelper from "../../assets/javascripts/lbry.js" + +import servicesHelper from "../../assets/javascripts/services.js" + +window.browser = window.browser || window.chrome + +browser.runtime.onInstalled.addListener(details => { + function initDefaults() { + fetch("/instances/blacklist.json") + .then(response => response.text()) + .then(async data => { + browser.storage.local.clear(() => { + browser.storage.local.set({ cloudflareBlackList: JSON.parse(data).cloudflare }, () => { + browser.storage.local.set({ authenticateBlackList: JSON.parse(data).authenticate }, () => { + browser.storage.local.set({ offlineBlackList: JSON.parse(data).offline }, () => { + generalHelper.initDefaults() + /* + youtubeHelper.initDefaults() + youtubeMusicHelper.initDefaults() + twitterHelper.initDefaults() + instagramHelper.initDefaults() + mapsHelper.initDefaults() + searchHelper.initDefaults() + translateHelper.initDefaults() + mediumHelper.initDefaults() + quoraHelper.initDefaults() + libremdbHelper.initDefaults() + reutersHelper.initDefaults() + redditHelper.initDefaults() + wikipediaHelper.initDefaults() + imgurHelper.initDefaults() + tiktokHelper.initDefaults() + sendTargetsHelper.initDefaults() + peertubeHelper.initDefaults() + lbryHelper.initDefaults() + */ + servicesHelper.initDefaults() + }) + }) + }) + }) + }) + } + if (details.reason == "install") initDefaults() + + // if (details.reason == 'install' || (details.reason == "update" && details.previousVersion != browser.runtime.getManifest().version)) { + // if (details.reason == "update") + // browser.storage.local.get(null, r => { + // if (r.theme) { + // const old = encodeURIComponent(JSON.stringify(r)) + // browser.tabs.create({ url: browser.runtime.getURL(`/pages/background/reset_warning.html?data=${old}`) }); + // } + // initDefaults(); + // }) + // else initDefaults(); + // } +}) + +let BYPASSTABs = [] +browser.webRequest.onBeforeRequest.addListener( + details => { + const url = new URL(details.url) + if (new RegExp(/^chrome-extension:\/{2}.*\/instances\/.*.json$/).test(url.href) && details.type == "xmlhttprequest") return + let initiator + try { + if (details.originUrl) initiator = new URL(details.originUrl) + else if (details.initiator) initiator = new URL(details.initiator) + } catch { + return null + } + + /* + let newUrl = youtubeMusicHelper.redirect(url, details.type) + if (!newUrl) newUrl = youtubeHelper.redirect(url, details.type, initiator) + if (!newUrl) newUrl = twitterHelper.redirect(url, details.type, initiator) + if (!newUrl) newUrl = instagramHelper.redirect(url, details.type, initiator) + if (!newUrl) newUrl = mapsHelper.redirect(url, initiator) + if (!newUrl) newUrl = redditHelper.redirect(url, details.type, initiator) + if (!newUrl) newUrl = mediumHelper.redirect(url, details.type, initiator) + if (!newUrl) newUrl = quoraHelper.redirect(url, details.type, initiator) + if (!newUrl) newUrl = libremdbHelper.redirect(url, details.type, initiator) + if (!newUrl) newUrl = reutersHelper.redirect(url, details.type, initiator) + if (!newUrl) newUrl = imgurHelper.redirect(url, details.type, initiator) + if (!newUrl) newUrl = tiktokHelper.redirect(url, details.type, initiator) + if (!newUrl) newUrl = sendTargetsHelper.redirect(url, details.type, initiator) + if (!newUrl) newUrl = peertubeHelper.redirect(url, details.type, initiator) + if (!newUrl) newUrl = lbryHelper.redirect(url, details.type, initiator) + if (!newUrl) newUrl = translateHelper.redirect(url) + if (!newUrl) newUrl = searchHelper.redirect(url) + if (!newUrl) newUrl = wikipediaHelper.redirect(url) + */ + let newUrl = servicesHelper.redirect(url, details.type, initiator) + + if (details.frameAncestors && details.frameAncestors.length > 0 && generalHelper.isException(new URL(details.frameAncestors[0].url))) newUrl = null + + if (generalHelper.isException(url)) newUrl = "BYPASSTAB" + if (BYPASSTABs.includes(details.tabId)) newUrl = null + + if (newUrl) { + if (newUrl === "CANCEL") { + console.log(`Canceled ${url}`) + return { cancel: true } + } + if (newUrl === "BYPASSTAB") { + console.log(`Bypassed ${details.tabId} ${url}`) + if (!BYPASSTABs.includes(details.tabId)) BYPASSTABs.push(details.tabId) + return null + } + console.info("Redirecting", url.href, "=>", newUrl) + return { redirectUrl: newUrl } + } + return null + }, + { urls: [""] }, + ["blocking"] +) + +browser.tabs.onRemoved.addListener(tabId => { + const i = BYPASSTABs.indexOf(tabId) + if (i > -1) { + BYPASSTABs.splice(i, 1) + console.log("Removed BYPASSTABs", tabId) + } +}) + +browser.webRequest.onHeadersReceived.addListener( + e => { + let response = youtubeHelper.removeXFrameOptions(e) + if (!response) response = twitterHelper.removeXFrameOptions(e) + return response + }, + { urls: [""] }, + ["blocking", "responseHeaders"] +) + +async function redirectOfflineInstance(url, tabId) { + let newUrl = await youtubeHelper.switchInstance(url, true) + if (!newUrl) newUrl = await twitterHelper.switchInstance(url, true) + if (!newUrl) newUrl = await instagramHelper.switchInstance(url, true) + if (!newUrl) newUrl = await redditHelper.switchInstance(url, true) + if (!newUrl) newUrl = await searchHelper.switchInstance(url, true) + if (!newUrl) newUrl = await translateHelper.switchInstance(url, true) + if (!newUrl) newUrl = await mediumHelper.switchInstance(url, true) + if (!newUrl) newUrl = await quoraHelper.switchInstance(url, true) + if (!newUrl) newUrl = await libremdbHelper.switchInstance(url, true) + if (!newUrl) newUrl = await tiktokHelper.switchInstance(url, true) + if (!newUrl) newUrl = await imgurHelper.switchInstance(url, true) + if (!newUrl) newUrl = await wikipediaHelper.switchInstance(url, true) + if (!newUrl) newUrl = await peertubeHelper.switchInstance(url, true) + if (!newUrl) newUrl = await lbryHelper.switchInstance(url, true) + if (!newUrl) newUrl = await youtubeMusicHelper.switchInstance(url, true) + + if (newUrl) { + if (counter >= 5) { + browser.tabs.update(tabId, { + url: `/pages/errors/instance_offline.html?url=${encodeURIComponent(newUrl)}`, + }) + counter = 0 + } else { + browser.tabs.update(tabId, { url: newUrl }) + counter++ + } + } +} +let counter = 0 + +function isAutoRedirect() { + return new Promise(resolve => browser.storage.local.get("autoRedirect", r => resolve(r.autoRedirect == true))) +} + +browser.webRequest.onResponseStarted.addListener( + async details => { + if (!(await isAutoRedirect())) return null + if (details.type == "main_frame" && details.statusCode >= 500) redirectOfflineInstance(new URL(details.url), details.tabId) + }, + { urls: [""] } +) + +browser.webRequest.onErrorOccurred.addListener( + async details => { + if (!(await isAutoRedirect())) return + if (details.type == "main_frame") redirectOfflineInstance(new URL(details.url), details.tabId) + }, + { urls: [""] } +) + +browser.commands.onCommand.addListener(command => { + if (command === "switchInstance") utils.switchInstance() + else if (command == "copyRaw") utils.copyRaw() + else if (command == "unify") utils.unify() +}) + +browser.contextMenus.create({ + id: "settings", + title: browser.i18n.getMessage("Settings"), + contexts: ["browser_action"], +}) + +browser.contextMenus.create({ + id: "switchInstance", + title: browser.i18n.getMessage("switchInstance"), + contexts: ["browser_action"], +}) + +browser.contextMenus.create({ + id: "copyRaw", + title: browser.i18n.getMessage("copyRaw"), + contexts: ["browser_action"], +}) + +browser.contextMenus.create({ + id: "unify", + title: browser.i18n.getMessage("unifySettings"), + contexts: ["browser_action"], +}) + +browser.contextMenus.onClicked.addListener(info => { + if (info.menuItemId == "switchInstance") utils.switchInstance() + else if (info.menuItemId == "settings") browser.runtime.openOptionsPage() + else if (info.menuItemId == "copyRaw") utils.copyRaw() + else if (info.menuItemId == "unify") utils.unify() +}) + +browser.runtime.onMessage.addListener((message, sender, sendResponse) => { + if (message.function === "unify") utils.unify(false).then(r => sendResponse({ response: r })) + return true +}) + +browser.storage.local.set({ version: browser.runtime.getManifest().version }) -- cgit 1.4.1 From f87eb20ceed147362f4d446aa10e15f865c0bc16 Mon Sep 17 00:00:00 2001 From: Hygna Date: Fri, 23 Sep 2022 20:57:25 +0100 Subject: Started optimizing popup.js --- src/assets/javascripts/services.js | 43 +++- src/config/config.json | 10 +- src/pages/background/background.js | 2 + src/pages/options/index.html | 36 +-- src/pages/popup/popup.js | 494 +++++++------------------------------ src/pages/widgets/links.ejs | 2 +- 6 files changed, 154 insertions(+), 433 deletions(-) (limited to 'src/pages/background') diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js index f4c30873..d3b7290f 100644 --- a/src/assets/javascripts/services.js +++ b/src/assets/javascripts/services.js @@ -20,10 +20,10 @@ async function getConfig() { function init() { return new Promise(async resolve => { - browser.storage.local.get(["network", "networkFallback"], r => { + browser.storage.local.get(["network", "networkFallback", "redirects"], r => { options.network = r.network options.networkFallback = r.networkFallback - options.redirects = r.redirects + redirects = r.redirects }) for (const service in config.services) { options[service] = {} @@ -50,14 +50,26 @@ function init() { function all(service) { let tmp = [] - for (frontend in config.services[service].frontends) { - for (network in config.networks) tmp.push([...redirects[frontend][network]]) + for (const frontend in config.services[service].frontends) { + if (config.services[service].frontends[frontend].instanceList) { + for (const network in config.networks) { + tmp.push(...redirects[frontend][network]) + } + } } return tmp } +function regexArray(service, url) { + for (const targetString in config.services[service].targets) { + const target = new RegExp(config.services[service].targets[targetString]) + if (target.test(url.href)) return true + } + return false +} + await getConfig() -init() +await init() browser.storage.onChanged.addListener(init) function redirect(url, type, initiator) { @@ -69,7 +81,7 @@ function redirect(url, type, initiator) { if (url.pathname == "/") return for (const service in config.services) { if (!options[service].enabled) continue - let targets = service.targets + let targets = config.services[service].targets if (targets == "datajson") { browser.storage.local.get(`${service}Targets`, (targets = r[service + "Targets"])) } @@ -424,12 +436,29 @@ function initDefaults() { browser.storage.local.set({ redirects: dataJson, }) - ;() => resolve() + resolve() }) }) } +function computeService(url) { + for (const service in config.services) { + const regex = config.services[service].targets + console.log(regex) + if (regexArray(service, url)) { + console.log(service + "gi") + return service + } else if (all(service).includes(utils.protocolHost(url))) { + console.log(service) + return service + } + } + console.log("moment") + return null +} + export default { redirect, initDefaults, + computeService, } diff --git a/src/config/config.json b/src/config/config.json index 1c8f5f9f..a4bcf125 100644 --- a/src/config/config.json +++ b/src/config/config.json @@ -87,12 +87,12 @@ }, "singleInstanceFrontends": ["freetube", "yatte"], "targets": [ - "^https?:\\/{2}(www\\.|music\\.|m\\.|)youtube.com(\\(?!iframe_api)/.*|$)", + "^https?:\\/{2}(?:www\\.|music\\.|m\\.|)youtube.com(\\(?!iframe_api/.*|$)", "^https?:\\/{2}img\\.youtube.com\\/vi\\/.*\\/..*", - "^https?:\\/{2}(i|s)\\.ytimg.com\\/vi\\/.*\\/..*", - "^https?:\\/{2}(www\\.|music\\.|)youtube.com\\/watch?v=..*", + "^https?:\\/{2}(?:i|s)\\.ytimg.com\\/vi\\/.*\\/..*", + "^https?:\\/{2}(?:www\\.|music\\.|)youtube.com\\/watch?v=..*", "^https?:\\/{2}youtu\\.be\\/..*", - "^https?:\\/{2}(www\\.|)(youtube|youtube-nocookie)\\.com\\/embed\\/..*" + "^https?:\\/{2}(?:www\\.|)(youtube|youtube-nocookie)\\.com\\/embed\\/..*" ], "name": "Youtube", "options": { @@ -275,7 +275,7 @@ "instanceList": true } }, - "targets": ["^https?:\\/{2}([a-z]+\\.)*wikipedia\\.org"], + "targets": ["^https?:\\/{2}(?:[a-z]+\\.)*wikipedia\\.org"], "name": "Wikipedia", "options": { "enabled": false }, "imageType": "svg", diff --git a/src/pages/background/background.js b/src/pages/background/background.js index e93e3d03..e0228df6 100644 --- a/src/pages/background/background.js +++ b/src/pages/background/background.js @@ -145,6 +145,7 @@ browser.tabs.onRemoved.addListener(tabId => { } }) +/* browser.webRequest.onHeadersReceived.addListener( e => { let response = youtubeHelper.removeXFrameOptions(e) @@ -154,6 +155,7 @@ browser.webRequest.onHeadersReceived.addListener( { urls: [""] }, ["blocking", "responseHeaders"] ) +*/ async function redirectOfflineInstance(url, tabId) { let newUrl = await youtubeHelper.switchInstance(url, true) diff --git a/src/pages/options/index.html b/src/pages/options/index.html index a23ff247..b6ea1535 100644 --- a/src/pages/options/index.html +++ b/src/pages/options/index.html @@ -16,28 +16,28 @@ General + Youtube + YT Music + Twitter + Instagram + TikTok + Reddit + Imgur + Wikipedia
@@ -45,46 +45,46 @@ - medium
+ Medium + Quora
- imdb
+ IMDb + Reuters + PeerTube
- lbry
+ LBRY + Search + Translate
- maps
+ Maps + Send Files
diff --git a/src/pages/popup/popup.js b/src/pages/popup/popup.js index 465080c5..fa269e6d 100644 --- a/src/pages/popup/popup.js +++ b/src/pages/popup/popup.js @@ -3,40 +3,7 @@ window.browser = window.browser || window.chrome import utils from "../../assets/javascripts/utils.js" import generalHelper from "../../assets/javascripts/general.js" - -import youtubeHelper from "../../assets/javascripts/youtube/youtube.js" -import youtubeMusicHelper from "../../assets/javascripts/youtubeMusic.js" -import twitterHelper from "../../assets/javascripts/twitter.js" -import instagramHelper from "../../assets/javascripts/instagram.js" -import redditHelper from "../../assets/javascripts/reddit.js" -import searchHelper from "../../assets/javascripts/search.js" -import translateHelper from "../../assets/javascripts/translate/translate.js" -import mapsHelper from "../../assets/javascripts/maps.js" -import wikipediaHelper from "../../assets/javascripts/wikipedia.js" -import mediumHelper from "../../assets/javascripts/medium.js" -import quoraHelper from "../../assets/javascripts/quora.js" -import libremdbHelper from "../../assets/javascripts/imdb.js" -import reutersHelper from "../../assets/javascripts/reuters.js" -import imgurHelper from "../../assets/javascripts/imgur.js" -import tiktokHelper from "../../assets/javascripts/tiktok.js" -import sendTargetsHelper from "../../assets/javascripts/sendTargets.js" -import peertubeHelper from "../../assets/javascripts/peertube.js" -import lbryHelper from "../../assets/javascripts/lbry.js" - -utils.unify(true).then(r => { - if (!r) document.getElementById("unify_div").style.display = "none" - else { - const unify = document.getElementById("unify") - const textElement = document.getElementById("unify").getElementsByTagName("h4")[0] - unify.addEventListener("click", () => { - const oldHtml = textElement.innerHTML - textElement.innerHTML = "..." - browser.runtime.sendMessage({ function: "unify" }, response => { - if (response && response.response) textElement.innerHTML = oldHtml - }) - }) - } -}) +import serviceHelper from "../../assets/javascripts/services.js" utils.switchInstance(true).then(r => { if (!r) document.getElementById("change_instance_div").style.display = "none" @@ -52,389 +19,112 @@ utils.copyRaw(true).then(r => { }) document.getElementById("more-options").addEventListener("click", () => browser.runtime.openOptionsPage()) -const allSites = document.getElementsByClassName("all_sites")[0] -const currSite = document.getElementsByClassName("current_site")[0] - -const disableTwitterCurrentSite = currSite.getElementsByClassName("disable-nitter")[0] -const disableTwitterAllSites = allSites.getElementsByClassName("disable-nitter")[0] - -const disableYoutubeCurrentSite = currSite.getElementsByClassName("disable-youtube")[0] -const disableYoutubeAllSites = allSites.getElementsByClassName("disable-youtube")[0] - -const disableYoutubeMusicCurrentSite = currSite.getElementsByClassName("disable-youtubeMusic")[0] -const disableYoutubeMusicAllSites = allSites.getElementsByClassName("disable-youtubeMusic")[0] - -const disableInstagramCurrentSite = currSite.getElementsByClassName("disable-bibliogram")[0] -const disableInstagramAllSites = allSites.getElementsByClassName("disable-bibliogram")[0] - -const disableMapsCurrentSite = currSite.getElementsByClassName("disable-osm")[0] -const disableMapsAllSites = allSites.getElementsByClassName("disable-osm")[0] - -const disableRedditCurrentSite = currSite.getElementsByClassName("disable-reddit")[0] -const disableRedditAllSites = allSites.getElementsByClassName("disable-reddit")[0] - -const disableSearchCurrentSite = currSite.getElementsByClassName("disable-search")[0] -const disableSearchAllSites = allSites.getElementsByClassName("disable-search")[0] - -const disableTranslateCurrentSite = currSite.getElementsByClassName("disable-translate")[0] -const disableTranslateAllSites = allSites.getElementsByClassName("disable-translate")[0] - -const disableWikipediaCurrentSite = currSite.getElementsByClassName("disable-wikipedia")[0] -const disableWikipediaAllSites = allSites.getElementsByClassName("disable-wikipedia")[0] - -const disableMediumCurrentSite = currSite.getElementsByClassName("disable-medium")[0] -const disableMediumAllSites = allSites.getElementsByClassName("disable-medium")[0] - -const disableQuoraCurrentSite = currSite.getElementsByClassName("disable-quora")[0] -const disableQuoraAllSites = allSites.getElementsByClassName("disable-quora")[0] - -const disableImdbCurrentSite = currSite.getElementsByClassName("disable-imdb")[0] -const disableImdbAllSites = allSites.getElementsByClassName("disable-imdb")[0] - -const disableReutersCurrentSite = currSite.getElementsByClassName("disable-reuters")[0] -const disableReutersAllSites = allSites.getElementsByClassName("disable-reuters")[0] - -const disablePeertubeTargetsCurrentSite = currSite.getElementsByClassName("disable-peertube")[0] -const disablePeertubeTargetsAllSites = allSites.getElementsByClassName("disable-peertube")[0] +let config +let divs = {} + +async function getConfig() { + return new Promise(resolve => { + fetch("/config/config.json") + .then(response => response.text()) + .then(data => { + const tmp = JSON.parse(data) + config = tmp.config + resolve() + }) + }) +} -const disableLbryTargetsCurrentSite = currSite.getElementsByClassName("disable-lbry")[0] -const disableLbryTargetsAllSites = allSites.getElementsByClassName("disable-lbry")[0] +await getConfig() -const disableSendTargetsCurrentSite = currSite.getElementsByClassName("disable-sendTargets")[0] -const disableSendTargetsAllSites = allSites.getElementsByClassName("disable-sendTargets")[0] +const allSites = document.getElementsByClassName("all_sites")[0] +const currSite = document.getElementsByClassName("current_site")[0] -const disableImgurCurrentSite = currSite.getElementsByClassName("disable-imgur")[0] -const disableImgurAllSites = allSites.getElementsByClassName("disable-imgur")[0] +function setDivs() { + return new Promise(resolve => { + for (const service in config.services) { + divs[service] = {} + divs[service].toggle = {} + divs[service].current = currSite.getElementsByClassName(service)[0] + divs[service].all = allSites.getElementsByClassName(service)[0] + divs[service].toggle.current = currSite.getElementsByClassName(service + "-enabled")[0] + divs[service].toggle.all = allSites.getElementsByClassName(service + "-enabled")[0] + } + resolve() + }) +} -const disableTiktokCurrentSite = currSite.getElementsByClassName("disable-tiktok")[0] -const disableTiktokAllSites = allSites.getElementsByClassName("disable-tiktok")[0] +await setDivs() const currentSiteIsFrontend = document.getElementById("current_site_divider") -browser.storage.local.get( - [ - "disableTwitter", - "disableYoutube", - "disableYoutubeMusic", - "disableInstagram", - "disableMaps", - "disableReddit", - "disableSearch", - "translateDisable", - "disableWikipedia", - "disableImgur", - "disableTiktok", - "disableMedium", - "disableQuora", - "disableImdb", - "disableReuters", - "disablePeertubeTargets", - "disableLbryTargets", - "disableSendTarget", - "popupFrontends", - ], - r => { - disableTwitterCurrentSite.checked = !r.disableTwitter - disableTwitterAllSites.checked = !r.disableTwitter - disableYoutubeCurrentSite.checked = !r.disableYoutube - disableYoutubeAllSites.checked = !r.disableYoutube - disableYoutubeMusicCurrentSite.checked = !r.disableYoutubeMusic - disableYoutubeMusicAllSites.checked = !r.disableYoutubeMusic - disableInstagramCurrentSite.checked = !r.disableInstagram - disableInstagramAllSites.checked = !r.disableInstagram - disableMapsCurrentSite.checked = !r.disableMaps - disableMapsAllSites.checked = !r.disableMaps - disableRedditCurrentSite.checked = !r.disableReddit - disableRedditAllSites.checked = !r.disableReddit - disableSearchCurrentSite.checked = !r.disableSearch - disableSearchAllSites.checked = !r.disableSearch - disableTranslateCurrentSite.checked = !r.translateDisable - disableTranslateAllSites.checked = !r.translateDisable - disableWikipediaCurrentSite.checked = !r.disableWikipedia - disableWikipediaAllSites.checked = !r.disableWikipedia - disableImgurCurrentSite.checked = !r.disableImgur - disableImgurAllSites.checked = !r.disableImgur - disableTiktokCurrentSite.checked = !r.disableTiktok - disableTiktokAllSites.checked = !r.disableTiktok - disableMediumCurrentSite.checked = !r.disableMedium - disableMediumAllSites.checked = !r.disableMedium - disableQuoraCurrentSite.checked = !r.disableQuora - disableQuoraAllSites.checked = !r.disableQuora - disableImdbCurrentSite.checked = !r.disableImdb - disableImdbAllSites.checked = !r.disableImdb - disableReutersCurrentSite.checked = !r.disableReuters - disableReutersAllSites.checked = !r.disableReuters - disablePeertubeTargetsCurrentSite.checked = !r.disablePeertubeTargets - disablePeertubeTargetsAllSites.checked = !r.disablePeertubeTargets - disableLbryTargetsCurrentSite.checked = !r.disableLbryTargets - disableLbryTargetsAllSites.checked = !r.disableLbryTargets - disableSendTargetsCurrentSite.checked = !r.disableSendTarget - disableSendTargetsAllSites.checked = !r.disableSendTarget +function getEnabled() { + return new Promise(async resolve => { + for (const service in config.services) { + browser.storage.local.get(`${service}Enabled`, r => { + divs[service].toggle.all.checked = r[service + "Enabled"] + divs[service].toggle.current.checked = r[service + "Enabled"] + }) + } + resolve() + }) +} - browser.tabs.query({ active: true, currentWindow: true }, async tabs => { - for (const frontend of generalHelper.allPopupFrontends) { - if (!r.popupFrontends.includes(frontend)) allSites.getElementsByClassName(frontend)[0].classList.add("hide") - else allSites.getElementsByClassName(frontend)[0].classList.remove("hide") - currSite.getElementsByClassName(frontend)[0].classList.add("hide") - } +browser.storage.local.get("popupFrontends", r => { + browser.tabs.query({ active: true, currentWindow: true }, async tabs => { + for (const frontend of generalHelper.allPopupFrontends) { + if (!r.popupFrontends.includes(frontend)) allSites.getElementsByClassName(frontend)[0].classList.add("hide") + else allSites.getElementsByClassName(frontend)[0].classList.remove("hide") + currSite.getElementsByClassName(frontend)[0].classList.add("hide") + } - let url - try { - url = new URL(tabs[0].url) - } catch { - currentSiteIsFrontend.classList.add("hide") - return - } + let url + try { + url = new URL(tabs[0].url) + console.log(url.href) + } catch { + currentSiteIsFrontend.classList.add("hide") + return + } - if (youtubeMusicHelper.redirect(url, "main_frame", false, true) || (await youtubeMusicHelper.switchInstance(url, true))) { - currSite.getElementsByClassName("youtubeMusic")[0].classList.remove("hide") - allSites.getElementsByClassName("youtubeMusic")[0].classList.add("hide") - } else if (twitterHelper.redirect(url, "main_frame", false, true) || (await twitterHelper.switchInstance(url, "main_frame", false, true))) { - currSite.getElementsByClassName("twitter")[0].classList.remove("hide") - allSites.getElementsByClassName("twitter")[0].classList.add("hide") - } else if (instagramHelper.redirect(url, "main_frame", false, true) || (await instagramHelper.switchInstance(url, "main_frame", false, true))) { - currSite.getElementsByClassName("instagram")[0].classList.remove("hide") - allSites.getElementsByClassName("instagram")[0].classList.add("hide") - } else if (mapsHelper.redirect(url, false)) { - currSite.getElementsByClassName("maps")[0].classList.remove("hide") - allSites.getElementsByClassName("maps")[0].classList.add("hide") - } else if (redditHelper.redirect(url, "main_frame", false, true) || (await redditHelper.switchInstance(url, "main_frame", false, true))) { - currSite.getElementsByClassName("reddit")[0].classList.remove("hide") - allSites.getElementsByClassName("reddit")[0].classList.add("hide") - } else if (mediumHelper.redirect(url, "main_frame", false, true) || (await mediumHelper.switchInstance(url, "main_frame", false, true))) { - currSite.getElementsByClassName("medium")[0].classList.remove("hide") - allSites.getElementsByClassName("medium")[0].classList.add("hide") - } else if (quoraHelper.redirect(url, "main_frame", false, true) || (await quoraHelper.switchInstance(url, "main_frame", false, true))) { - currSite.getElementsByClassName("quora")[0].classList.remove("hide") - allSites.getElementsByClassName("quora")[0].classList.add("hide") - } else if (libremdbHelper.redirect(url, "main_frame", false, true) || (await libremdbHelper.switchInstance(url, "main_frame", false, true))) { - currSite.getElementsByClassName("imdb")[0].classList.remove("hide") - allSites.getElementsByClassName("imdb")[0].classList.add("hide") - } else if (reutersHelper.redirect(url, "main_frame", false, true)) { - currSite.getElementsByClassName("reuters")[0].classList.remove("hide") - allSites.getElementsByClassName("reuters")[0].classList.add("hide") - } else if (imgurHelper.redirect(url, "main_frame", false, true) || (await imgurHelper.switchInstance(url, "main_frame", false, true))) { - currSite.getElementsByClassName("imgur")[0].classList.remove("hide") - allSites.getElementsByClassName("imgur")[0].classList.add("hide") - } else if (tiktokHelper.redirect(url, "main_frame", false, true) || (await tiktokHelper.switchInstance(url, "main_frame", false, true))) { - currSite.getElementsByClassName("tiktok")[0].classList.remove("hide") - allSites.getElementsByClassName("tiktok")[0].classList.add("hide") - } else if (sendTargetsHelper.redirect(url, "main_frame", false, true) || (await sendTargetsHelper.switchInstance(url, "main_frame", false, true))) { - currSite.getElementsByClassName("sendTargets")[0].classList.remove("hide") - allSites.getElementsByClassName("sendTargets")[0].classList.add("hide") - } else if (peertubeHelper.redirect(url, "main_frame", false, true) || (await peertubeHelper.switchInstance(url, true))) { - currSite.getElementsByClassName("peertube")[0].classList.remove("hide") - allSites.getElementsByClassName("peertube")[0].classList.add("hide") - } else if (lbryHelper.redirect(url, "main_frame", false, true) || (await lbryHelper.switchInstance(url, "main_frame", false, true))) { - currSite.getElementsByClassName("lbry")[0].classList.remove("hide") - allSites.getElementsByClassName("lbry")[0].classList.add("hide") - } else if (translateHelper.redirect(url, true) || (await translateHelper.switchInstance(url, true))) { - currSite.getElementsByClassName("translate")[0].classList.remove("hide") - allSites.getElementsByClassName("translate")[0].classList.add("hide") - } else if (searchHelper.redirect(url, true) || (await searchHelper.switchInstance(url, true))) { - currSite.getElementsByClassName("search")[0].classList.remove("hide") - allSites.getElementsByClassName("search")[0].classList.add("hide") - } else if (wikipediaHelper.redirect(url, true) || (await wikipediaHelper.switchInstance(url, true))) { - currSite.getElementsByClassName("wikipedia")[0].classList.remove("hide") - allSites.getElementsByClassName("wikipedia")[0].classList.add("hide") - } else if (youtubeHelper.redirect(url, "main_frame", false, true) || (await youtubeHelper.switchInstance(url, "main_frame", false, true))) { - currSite.getElementsByClassName("youtube")[0].classList.remove("hide") - allSites.getElementsByClassName("youtube")[0].classList.add("hide") + await getEnabled() + + const currentService = serviceHelper.computeService(url) + if (currentService != null) { + divs[currentService].current.classList.remove("hide") + divs[currentService].all.classList.add("hide") + if (config.services[currentService].preferences != {}) { + const unify = document.getElementById("unify") + const textElement = document.getElementById("unify").getElementsByTagName("h4")[0] + unify.addEventListener("click", () => { + const oldHtml = textElement.innerHTML + textElement.innerHTML = "..." + browser.runtime.sendMessage({ function: "unify" }, response => { + if (response && response.response) textElement.innerHTML = oldHtml + }) + }) } else { - currentSiteIsFrontend.classList.add("hide") + document.getElementById("unify_div").style.display = "none" } - }) - } -) - -document.addEventListener("change", () => { - browser.storage.local.get( - [ - "disableTwitter", - "disableYoutube", - "disableYoutubeMusic", - "disableInstagram", - "disableMaps", - "disableReddit", - "disableSearch", - "translateDisable", - "disableWikipedia", - "disableImgur", - "disableTiktok", - "disableMedium", - "disableQuora", - "disableImdb", - "disableReuters", - "disablePeertubeTargets", - "disableLbryTargets", - "disableSendTarget", - ], - r => { - if (!r.disableTwitter != disableTwitterCurrentSite.checked) - browser.storage.local.set({ - disableTwitter: !disableTwitterCurrentSite.checked, - }) - else if (!r.disableTwitter != disableTwitterAllSites.checked) - browser.storage.local.set({ - disableTwitter: !disableTwitterAllSites.checked, - }) - - if (!r.disableYoutube != disableYoutubeCurrentSite.checked) - browser.storage.local.set({ - disableYoutube: !disableYoutubeCurrentSite.checked, - }) - else if (!r.disableYoutube != disableYoutubeAllSites.checked) - browser.storage.local.set({ - disableYoutube: !disableYoutubeAllSites.checked, - }) - - if (!r.disableYoutubeMusic != disableYoutubeMusicCurrentSite.checked) - browser.storage.local.set({ - disableYoutubeMusic: !disableYoutubeMusicCurrentSite.checked, - }) - else if (!r.disableYoutubeMusic != disableYoutubeMusicAllSites.checked) - browser.storage.local.set({ - disableYoutubeMusic: !disableYoutubeMusicAllSites.checked, - }) - - if (!r.disableInstagram != disableInstagramCurrentSite.checked) - browser.storage.local.set({ - disableInstagram: !disableInstagramCurrentSite.checked, - }) - else if (!r.disableInstagram != disableInstagramAllSites.checked) - browser.storage.local.set({ - disableInstagram: !disableInstagramAllSites.checked, - }) - - if (!r.disableMaps != disableMapsCurrentSite.checked) - browser.storage.local.set({ - disableMaps: !disableMapsCurrentSite.checked, - }) - else if (!r.disableMaps != disableMapsAllSites.checked) - browser.storage.local.set({ - disableMaps: !disableMapsAllSites.checked, - }) - - if (!r.disableReddit != disableRedditCurrentSite.checked) - browser.storage.local.set({ - disableReddit: !disableRedditCurrentSite.checked, - }) - else if (!r.disableReddit != disableRedditAllSites.checked) - browser.storage.local.set({ - disableReddit: !disableRedditAllSites.checked, - }) - - if (!r.disableSearch != disableSearchCurrentSite.checked) - browser.storage.local.set({ - disableSearch: !disableSearchCurrentSite.checked, - }) - else if (!r.disableSearch != disableSearchAllSites.checked) - browser.storage.local.set({ - disableSearch: !disableSearchAllSites.checked, - }) - - if (!r.translateDisable != disableTranslateCurrentSite.checked) - browser.storage.local.set({ - translateDisable: !disableTranslateCurrentSite.checked, - }) - else if (!r.translateDisable != disableTranslateAllSites.checked) - browser.storage.local.set({ - translateDisable: !disableTranslateAllSites.checked, - }) - - if (!r.disableWikipedia != disableWikipediaCurrentSite.checked) - browser.storage.local.set({ - disableWikipedia: !disableWikipediaCurrentSite.checked, - }) - else if (!r.disableWikipedia != disableWikipediaAllSites.checked) - browser.storage.local.set({ - disableWikipedia: !disableWikipediaAllSites.checked, - }) - - if (!r.disableImgur != disableImgurCurrentSite.checked) - browser.storage.local.set({ - disableImgur: !disableImgurCurrentSite.checked, - }) - else if (!r.disableImgur != disableImgurAllSites.checked) - browser.storage.local.set({ - disableImgur: !disableImgurAllSites.checked, - }) - - if (!r.disableTiktok != disableTiktokCurrentSite.checked) - browser.storage.local.set({ - disableTiktok: !disableTiktokCurrentSite.checked, - }) - else if (!r.disableTiktok != disableTiktokAllSites.checked) - browser.storage.local.set({ - disableTiktok: !disableTiktokAllSites.checked, - }) - - if (!r.disableMedium != disableMediumCurrentSite.checked) - browser.storage.local.set({ - disableMedium: !disableMediumCurrentSite.checked, - }) - else if (!r.disableMedium != disableMediumAllSites.checked) - browser.storage.local.set({ - disableMedium: !disableMediumAllSites.checked, - }) - - if (!r.disableQuora != disableQuoraCurrentSite.checked) - browser.storage.local.set({ - disableQuora: !disableQuoraCurrentSite.checked, - }) - else if (!r.disableQuora != disableQuoraAllSites.checked) - browser.storage.local.set({ - disableQuora: !disableQuoraAllSites.checked, - }) - - if (!r.disableImdb != disableImdbCurrentSite.checked) - browser.storage.local.set({ - disableImdb: !disableImdbCurrentSite.checked, - }) - else if (!r.disableImdb != disableImdbAllSites.checked) - browser.storage.local.set({ - disableImdb: !disableImdbAllSites.checked, - }) - - if (!r.disableReuters != disableReutersCurrentSite.checked) - browser.storage.local.set({ - disableReuters: !disableReutersCurrentSite.checked, - }) - else if (!r.disableReuters != disableReutersAllSites.checked) - browser.storage.local.set({ - disableReuters: !disableReutersAllSites.checked, - }) - - if (!r.disablePeertubeTargets != disablePeertubeTargetsCurrentSite.checked) - browser.storage.local.set({ - disablePeertubeTargets: !disablePeertubeTargetsCurrentSite.checked, - }) - else if (!r.disablePeertubeTargets != disablePeertubeTargetsAllSites.checked) - browser.storage.local.set({ - disablePeertubeTargets: !disablePeertubeTargetsAllSites.checked, - }) - - if (!r.disableLbryTargets != disableLbryTargetsCurrentSite.checked) - browser.storage.local.set({ - disableLbryTargets: !disableLbryTargetsCurrentSite.checked, - }) - else if (!r.disableLbryTargets != disableLbryTargetsAllSites.checked) - browser.storage.local.set({ - disableLbryTargets: !disableLbryTargetsAllSites.checked, - }) - - if (!r.disableSendTarget != disableSendTargetsCurrentSite.checked) - browser.storage.local.set({ - disableSendTarget: !disableSendTargetsCurrentSite.checked, - }) - else if (!r.disableSendTarget != disableSendTargetsAllSites.checked) - browser.storage.local.set({ - disableSendTarget: !disableSendTargetsAllSites.checked, - }) + } else { + currentSiteIsFrontend.classList.add("hide") + document.getElementById("unify_div").style.display = "none" } - ) + }) }) +for (const service in config.services) { + divs[service].toggle.all.addEventListener("change", () => { + browser.storage.local.set({ + [service + "Enabled"]: divs[service].toggle.all.checked, + }) + }) + divs[service].toggle.current.addEventListener("change", () => { + browser.storage.local.set({ + [service + "Enabled"]: divs[service].toggle.current.checked, + }) + }) +} + for (const a of document.getElementsByTagName("a")) { a.addEventListener("click", e => { if (!a.classList.contains("prevent")) { diff --git a/src/pages/widgets/links.ejs b/src/pages/widgets/links.ejs index 86b9f260..24a02e90 100644 --- a/src/pages/widgets/links.ejs +++ b/src/pages/widgets/links.ejs @@ -7,7 +7,7 @@ <% } else { _%> <%- include ('src/assets/images/' + service + '-icon.svg') %> <% } _%> - <%= service %>
+ <%= config.services[service].name %> <% }; -%>
<%- include ('src/assets/images/about-icon.svg') %>About
-- cgit 1.4.1 From 7e8c13bb3b175af56ed02d69897991b1e72d7557 Mon Sep 17 00:00:00 2001 From: ManeraKai Date: Sun, 25 Sep 2022 17:10:38 +0300 Subject: Fix some error in runtime.onInstalled --- src/assets/javascripts/general.js | 11 +++++++---- src/assets/javascripts/services.js | 4 ++-- src/pages/background/background.js | 40 +------------------------------------- 3 files changed, 10 insertions(+), 45 deletions(-) (limited to 'src/pages/background') diff --git a/src/assets/javascripts/general.js b/src/assets/javascripts/general.js index 072ff3c1..720b5769 100644 --- a/src/assets/javascripts/general.js +++ b/src/assets/javascripts/general.js @@ -1,17 +1,20 @@ "use strict" window.browser = window.browser || window.chrome +let exceptions + function isException(url) { for (const item of exceptions.url) if (item == `${url.protocol}//${url.host}`) return true for (const item of exceptions.regex) if (new RegExp(item).test(url.href)) return true return false } -let exceptions - function init() { - browser.storage.local.get("exceptions", r => { - exceptions = r.exceptions + return new Promise(resolve => { + browser.storage.local.get("exceptions", r => { + exceptions = r.exceptions + resolve() + }) }) } diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js index 64bed3bb..3aa93c53 100644 --- a/src/assets/javascripts/services.js +++ b/src/assets/javascripts/services.js @@ -76,8 +76,8 @@ function regexArray(service, url) { return false } -await getConfig() -await init() +getConfig() +init() browser.storage.onChanged.addListener(init) function redirect(url, type, initiator) { diff --git a/src/pages/background/background.js b/src/pages/background/background.js index e0228df6..1f5bf24f 100644 --- a/src/pages/background/background.js +++ b/src/pages/background/background.js @@ -3,29 +3,11 @@ import generalHelper from "../../assets/javascripts/general.js" import utils from "../../assets/javascripts/utils.js" -import youtubeHelper from "../../assets/javascripts/youtube/youtube.js" -import youtubeMusicHelper from "../../assets/javascripts/youtubeMusic.js" -import twitterHelper from "../../assets/javascripts/twitter.js" -import instagramHelper from "../../assets/javascripts/instagram.js" -import redditHelper from "../../assets/javascripts/reddit.js" -import searchHelper from "../../assets/javascripts/search.js" -import translateHelper from "../../assets/javascripts/translate/translate.js" -import mapsHelper from "../../assets/javascripts/maps.js" -import wikipediaHelper from "../../assets/javascripts/wikipedia.js" -import mediumHelper from "../../assets/javascripts/medium.js" -import quoraHelper from "../../assets/javascripts/quora.js" -import libremdbHelper from "../../assets/javascripts/imdb.js" -import reutersHelper from "../../assets/javascripts/reuters.js" -import imgurHelper from "../../assets/javascripts/imgur.js" -import tiktokHelper from "../../assets/javascripts/tiktok.js" -import sendTargetsHelper from "../../assets/javascripts/sendTargets.js" -import peertubeHelper from "../../assets/javascripts/peertube.js" -import lbryHelper from "../../assets/javascripts/lbry.js" - import servicesHelper from "../../assets/javascripts/services.js" window.browser = window.browser || window.chrome + browser.runtime.onInstalled.addListener(details => { function initDefaults() { fetch("/instances/blacklist.json") @@ -36,26 +18,6 @@ browser.runtime.onInstalled.addListener(details => { browser.storage.local.set({ authenticateBlackList: JSON.parse(data).authenticate }, () => { browser.storage.local.set({ offlineBlackList: JSON.parse(data).offline }, () => { generalHelper.initDefaults() - /* - youtubeHelper.initDefaults() - youtubeMusicHelper.initDefaults() - twitterHelper.initDefaults() - instagramHelper.initDefaults() - mapsHelper.initDefaults() - searchHelper.initDefaults() - translateHelper.initDefaults() - mediumHelper.initDefaults() - quoraHelper.initDefaults() - libremdbHelper.initDefaults() - reutersHelper.initDefaults() - redditHelper.initDefaults() - wikipediaHelper.initDefaults() - imgurHelper.initDefaults() - tiktokHelper.initDefaults() - sendTargetsHelper.initDefaults() - peertubeHelper.initDefaults() - lbryHelper.initDefaults() - */ servicesHelper.initDefaults() }) }) -- cgit 1.4.1 From 03f242fe11091455b717168a5221c14e84779988 Mon Sep 17 00:00:00 2001 From: Hygna Date: Sun, 25 Sep 2022 17:27:43 +0100 Subject: Started work on instance switching --- src/assets/javascripts/general.js | 24 +----------------- src/assets/javascripts/services.js | 47 ++++++++++++++++++++++++++++++------ src/assets/javascripts/utils.js | 18 ++------------ src/pages/background/background.js | 22 ----------------- src/pages/options/widgets/general.js | 41 ++++++++++++++++++++++--------- src/pages/popup/popup.js | 10 ++++---- 6 files changed, 76 insertions(+), 86 deletions(-) (limited to 'src/pages/background') diff --git a/src/assets/javascripts/general.js b/src/assets/javascripts/general.js index 720b5769..35ead2f0 100644 --- a/src/assets/javascripts/general.js +++ b/src/assets/javascripts/general.js @@ -30,7 +30,7 @@ async function initDefaults() { regex: [], }, theme: "DEFAULT", - popupFrontends: ["youtube", "twitter", "instagram", "tiktok", "imgur", "reddit", "quora", "translate", "maps"], + popupServices: ["youtube", "twitter", "instagram", "tiktok", "imgur", "reddit", "quora", "translate", "maps"], autoRedirect: false, firstPartyIsolate: false, network: "clearnet", @@ -42,29 +42,7 @@ async function initDefaults() { ) } -const allPopupFrontends = [ - "youtube", - "youtubeMusic", - "twitter", - "instagram", - "tiktok", - "imgur", - "reddit", - "search", - "translate", - "maps", - "wikipedia", - "medium", - "quora", - "imdb", - "reuters", - "peertube", - "lbry", - "sendTargets", -] - export default { isException, initDefaults, - allPopupFrontends, } diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js index 3aa93c53..286a6eda 100644 --- a/src/assets/javascripts/services.js +++ b/src/assets/javascripts/services.js @@ -19,7 +19,7 @@ async function getConfig() { } function init() { - return new Promise(async resolve => { + return new Promise(resolve => { browser.storage.local.get(["network", "networkFallback", "redirects"], r => { options.network = r.network options.networkFallback = r.networkFallback @@ -401,7 +401,7 @@ function initDefaults() { .then(response => response.text()) .then(async data => { let dataJson = JSON.parse(data) - redirects = JSON.parse(data) + let tmpRedirects = JSON.parse(data) browser.storage.local.get(["cloudflareBlackList", "authenticateBlackList", "offlineBlackList"], async r => { for (const service in config.services) { if (config.services[service].targets == "datajson") { @@ -413,7 +413,7 @@ function initDefaults() { } for (const frontend in config.services[service].frontends) { if (config.services[service].frontends[frontend].instanceList) { - let clearnetChecks = redirects[frontend].clearnet + let clearnetChecks = tmpRedirects[frontend].clearnet for (const instance of [...r.cloudflareBlackList, ...r.authenticateBlackList, ...r.offlineBlackList]) { let i = clearnetChecks.indexOf(instance) if (i > -1) clearnetChecks.splice(i, 1) @@ -428,7 +428,7 @@ function initDefaults() { break default: browser.storage.local.set({ - [frontend + utils.camelCase(network) + "RedirectsChecks"]: [...redirects[frontend][network]], + [frontend + utils.camelCase(network) + "RedirectsChecks"]: [...tmpRedirects[frontend][network]], [frontend + utils.camelCase(network) + "CustomRedirects"]: [], }) } @@ -436,11 +436,11 @@ function initDefaults() { } } } + browser.storage.local.set({ + redirects: dataJson, + }) + resolve() }) - browser.storage.local.set({ - redirects: dataJson, - }) - resolve() }) }) } @@ -456,8 +456,39 @@ function computeService(url) { return null } +function switchInstance(url) { + return new Promise(async resolve => { + await getConfig() + await init() + for (const service in config.services) { + if (!options[service].enabled) continue + const protocolHost = utils.protocolHost(url) + if (!all(service).includes(protocolHost)) continue + + let instancesList = [...options[options[service].frontend][options.network].checks, ...options[options[service].frontend][options.network].custom] + if (instancesList.length === 0 && options.networkFallback) instancesList = [...options[options[service].frontend].clearnet.checks, ...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 + resolve(oldUrl.replace(oldUrl, randomInstance)) + } + }) +} + export default { redirect, initDefaults, computeService, + switchInstance, } diff --git a/src/assets/javascripts/utils.js b/src/assets/javascripts/utils.js index 7337a13d..371838ff 100644 --- a/src/assets/javascripts/utils.js +++ b/src/assets/javascripts/utils.js @@ -18,6 +18,7 @@ import reutersHelper from "./reuters.js" import youtubeMusicHelper from "./youtubeMusic.js" import mapsHelper from "./maps.js" import localise from "./localise.js" +import servicesHelper from "./services.js" function getRandomInstance(instances) { return instances[~~(instances.length * Math.random())] @@ -479,22 +480,7 @@ function switchInstance(test) { resolve() return } - let newUrl = await youtubeHelper.switchInstance(url, true) - if (!newUrl) newUrl = await twitterHelper.switchInstance(url, true) - if (!newUrl) newUrl = await instagramHelper.switchInstance(url, true) - if (!newUrl) newUrl = await redditHelper.switchInstance(url, true) - if (!newUrl) newUrl = await searchHelper.switchInstance(url, true) - if (!newUrl) newUrl = await translateHelper.switchInstance(url, true) - if (!newUrl) newUrl = await mediumHelper.switchInstance(url, true) - if (!newUrl) newUrl = await quoraHelper.switchInstance(url, true) - if (!newUrl) newUrl = await libremdbHelper.switchInstance(url, true) - if (!newUrl) newUrl = await tiktokHelper.switchInstance(url, true) - if (!newUrl) newUrl = await sendTargetsHelper.switchInstance(url, true) - if (!newUrl) newUrl = await peertubeHelper.switchInstance(url, true) - if (!newUrl) newUrl = await lbryHelper.switchInstance(url, true) - if (!newUrl) newUrl = await imgurHelper.switchInstance(url, true) - if (!newUrl) newUrl = await wikipediaHelper.switchInstance(url, true) - if (!newUrl) newUrl = await youtubeMusicHelper.switchInstance(url, true) + let newUrl = await servicesHelper.switchInstance(url) if (newUrl) { if (!test) browser.tabs.update({ url: newUrl }) diff --git a/src/pages/background/background.js b/src/pages/background/background.js index 1f5bf24f..7ee1358e 100644 --- a/src/pages/background/background.js +++ b/src/pages/background/background.js @@ -2,12 +2,10 @@ import generalHelper from "../../assets/javascripts/general.js" import utils from "../../assets/javascripts/utils.js" - import servicesHelper from "../../assets/javascripts/services.js" window.browser = window.browser || window.chrome - browser.runtime.onInstalled.addListener(details => { function initDefaults() { fetch("/instances/blacklist.json") @@ -53,26 +51,6 @@ browser.webRequest.onBeforeRequest.addListener( return null } - /* - let newUrl = youtubeMusicHelper.redirect(url, details.type) - if (!newUrl) newUrl = youtubeHelper.redirect(url, details.type, initiator) - if (!newUrl) newUrl = twitterHelper.redirect(url, details.type, initiator) - if (!newUrl) newUrl = instagramHelper.redirect(url, details.type, initiator) - if (!newUrl) newUrl = mapsHelper.redirect(url, initiator) - if (!newUrl) newUrl = redditHelper.redirect(url, details.type, initiator) - if (!newUrl) newUrl = mediumHelper.redirect(url, details.type, initiator) - if (!newUrl) newUrl = quoraHelper.redirect(url, details.type, initiator) - if (!newUrl) newUrl = libremdbHelper.redirect(url, details.type, initiator) - if (!newUrl) newUrl = reutersHelper.redirect(url, details.type, initiator) - if (!newUrl) newUrl = imgurHelper.redirect(url, details.type, initiator) - if (!newUrl) newUrl = tiktokHelper.redirect(url, details.type, initiator) - if (!newUrl) newUrl = sendTargetsHelper.redirect(url, details.type, initiator) - if (!newUrl) newUrl = peertubeHelper.redirect(url, details.type, initiator) - if (!newUrl) newUrl = lbryHelper.redirect(url, details.type, initiator) - if (!newUrl) newUrl = translateHelper.redirect(url) - if (!newUrl) newUrl = searchHelper.redirect(url) - if (!newUrl) newUrl = wikipediaHelper.redirect(url) - */ let newUrl = servicesHelper.redirect(url, details.type, initiator) if (details.frameAncestors && details.frameAncestors.length > 0 && generalHelper.isException(new URL(details.frameAncestors[0].url))) newUrl = null diff --git a/src/pages/options/widgets/general.js b/src/pages/options/widgets/general.js index 9dac9bfd..2249f830 100644 --- a/src/pages/options/widgets/general.js +++ b/src/pages/options/widgets/general.js @@ -15,6 +15,20 @@ updateInstancesElement.addEventListener("click", async () => { } else updateInstancesElement.innerHTML = "Failed Miserabely" }) +let config + +async function getConfig() { + return new Promise(resolve => { + fetch("/config/config.json") + .then(response => response.text()) + .then(data => { + const tmp = JSON.parse(data) + config = tmp.config + resolve() + }) + }) +} + let exportSettingsElement = document.getElementById("export-settings") function exportSettings() { @@ -111,17 +125,20 @@ let nameCustomInstanceInput = document.getElementById("exceptions-custom-instanc let instanceTypeElement = document.getElementById("exceptions-custom-instance-type") let instanceType = "url" -let popupFrontends -for (const frontend of generalHelper.allPopupFrontends) - document.getElementById(frontend).addEventListener("change", event => { - if (event.target.checked && !popupFrontends.includes(frontend)) popupFrontends.push(frontend) - else if (popupFrontends.includes(frontend)) { - var index = popupFrontends.indexOf(frontend) - if (index !== -1) popupFrontends.splice(index, 1) +let popupServices + +await getConfig() + +for (const service in config.services) { + document.getElementById(service).addEventListener("change", event => { + if (event.target.checked && !popupServices.includes(service)) popupServices.push(service) + else if (popupServices.includes(service)) { + var index = popupServices.indexOf(service) + if (index !== -1) popupServices.splice(index, 1) } - browser.storage.local.set({ popupFrontends }) + browser.storage.local.set({ popupServices }) }) - +} // const firstPartyIsolate = document.getElementById('firstPartyIsolate'); // firstPartyIsolate.addEventListener("change", () => browser.storage.local.set({ firstPartyIsolate: firstPartyIsolate.checked })) @@ -214,9 +231,9 @@ browser.storage.local.get( calcExceptionsCustomInstances() }) - browser.storage.local.get("popupFrontends", r => { - popupFrontends = r.popupFrontends - for (const frontend of generalHelper.allPopupFrontends) document.getElementById(frontend).checked = popupFrontends.includes(frontend) + browser.storage.local.get("popupServices", r => { + popupServices = r.popupServices + for (const service in config.services) document.getElementById(service).checked = popupServices.includes(service) }) } ) diff --git a/src/pages/popup/popup.js b/src/pages/popup/popup.js index a2e001d3..fce451cb 100644 --- a/src/pages/popup/popup.js +++ b/src/pages/popup/popup.js @@ -69,12 +69,12 @@ function getEnabled() { }) } -browser.storage.local.get("popupFrontends", r => { +browser.storage.local.get("popupServices", r => { browser.tabs.query({ active: true, currentWindow: true }, async tabs => { - for (const frontend of generalHelper.allPopupFrontends) { - if (!r.popupFrontends.includes(frontend)) allSites.getElementsByClassName(frontend)[0].classList.add("hide") - else allSites.getElementsByClassName(frontend)[0].classList.remove("hide") - currSite.getElementsByClassName(frontend)[0].classList.add("hide") + for (const service in config.services) { + if (!r.popupServices.includes(service)) allSites.getElementsByClassName(service)[0].classList.add("hide") + else allSites.getElementsByClassName(service)[0].classList.remove("hide") + currSite.getElementsByClassName(service)[0].classList.add("hide") } await getEnabled() -- cgit 1.4.1 From 5d48d60e96179f112d40d105e76f80f9cc51175b Mon Sep 17 00:00:00 2001 From: Hygna Date: Tue, 27 Sep 2022 20:59:25 +0100 Subject: Started converting storage format --- src/assets/javascripts/general.js | 22 ++-- src/assets/javascripts/services.js | 192 +++++++++++++++++++----------- src/assets/javascripts/utils.js | 16 +-- src/config/config.json | 7 +- src/pages/background/background.js | 40 +++---- src/pages/options/widgets/general.js | 191 ++++++++++++++--------------- src/pages/options/widgets/imdb.js | 55 --------- src/pages/options/widgets/imgur.js | 55 --------- src/pages/options/widgets/instagram.js | 55 --------- src/pages/options/widgets/lbry.js | 60 ---------- src/pages/options/widgets/maps.js | 57 --------- src/pages/options/widgets/medium.js | 55 --------- src/pages/options/widgets/peertube.js | 55 --------- src/pages/options/widgets/quora.js | 55 --------- src/pages/options/widgets/reddit.js | 57 --------- src/pages/options/widgets/reuters.js | 55 --------- src/pages/options/widgets/search.js | 91 -------------- src/pages/options/widgets/sendTargets.js | 55 --------- src/pages/options/widgets/services.js | 23 ++-- src/pages/options/widgets/tiktok.js | 55 --------- src/pages/options/widgets/translate.js | 57 --------- src/pages/options/widgets/twitter.js | 60 ---------- src/pages/options/widgets/wikipedia.js | 55 --------- src/pages/options/widgets/youtube.js | 92 -------------- src/pages/options/widgets/youtubeMusic.js | 57 --------- src/pages/popup/popup.ejs | 6 +- src/pages/popup/popup.js | 33 +++-- src/pages/widgets/switches.ejs | 10 +- 28 files changed, 283 insertions(+), 1338 deletions(-) delete mode 100644 src/pages/options/widgets/imdb.js delete mode 100644 src/pages/options/widgets/imgur.js delete mode 100644 src/pages/options/widgets/instagram.js delete mode 100644 src/pages/options/widgets/lbry.js delete mode 100644 src/pages/options/widgets/maps.js delete mode 100644 src/pages/options/widgets/medium.js delete mode 100644 src/pages/options/widgets/peertube.js delete mode 100644 src/pages/options/widgets/quora.js delete mode 100644 src/pages/options/widgets/reddit.js delete mode 100644 src/pages/options/widgets/reuters.js delete mode 100644 src/pages/options/widgets/search.js delete mode 100644 src/pages/options/widgets/sendTargets.js delete mode 100644 src/pages/options/widgets/tiktok.js delete mode 100644 src/pages/options/widgets/translate.js delete mode 100644 src/pages/options/widgets/twitter.js delete mode 100644 src/pages/options/widgets/wikipedia.js delete mode 100644 src/pages/options/widgets/youtube.js delete mode 100644 src/pages/options/widgets/youtubeMusic.js (limited to 'src/pages/background') diff --git a/src/assets/javascripts/general.js b/src/assets/javascripts/general.js index 35ead2f0..3a8987ac 100644 --- a/src/assets/javascripts/general.js +++ b/src/assets/javascripts/general.js @@ -25,17 +25,19 @@ async function initDefaults() { return new Promise(resolve => browser.storage.local.set( { - exceptions: { - url: [], - regex: [], + options: { + exceptions: { + url: [], + regex: [], + }, + theme: "DEFAULT", + popupServices: ["youtube", "twitter", "instagram", "tiktok", "imgur", "reddit", "quora", "translate", "maps"], + autoRedirect: false, + firstPartyIsolate: false, + network: "clearnet", + networkFallback: true, + latencyThreshold: 1000, }, - theme: "DEFAULT", - popupServices: ["youtube", "twitter", "instagram", "tiktok", "imgur", "reddit", "quora", "translate", "maps"], - autoRedirect: false, - firstPartyIsolate: false, - network: "clearnet", - networkFallback: true, - latencyThreshold: 1000, }, () => resolve() ) diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js index 25e998d2..9fc5a0a3 100644 --- a/src/assets/javascripts/services.js +++ b/src/assets/javascripts/services.js @@ -2,9 +2,7 @@ window.browser = window.browser || window.chrome import utils from "./utils.js" -let config = {}, - redirects = {}, - options = {} +let config, redirects, options, targets, blacklists async function getConfig() { return new Promise(resolve => { @@ -19,48 +17,44 @@ async function getConfig() { function init() { return new Promise(async resolve => { - await getConfig() - browser.storage.local.get(["network", "networkFallback", "redirects"], r => { - options.network = r.network - options.networkFallback = r.networkFallback + // await getConfig() + browser.storage.local.get(["options", "targets", "redirects", "blacklists"], r => { + blacklists = r.blacklists redirects = r.redirects + targets = r.targets + options = r.options + resolve() }) - for (const service in config.services) { - options[service] = {} - browser.storage.local.get([`${service}Enabled`, `${service}RedirectType`, `${service}Frontend`], r => { - options[service].enabled = r[service + "Enabled"] - options[service].frontend = r[service + "Frontend"] - options[service].redirectType = r[service + "RedirectType"] - }) - for (const frontend in config.services[service].frontends) { - options[frontend] = {} - for (const network in config.networks) { - options[frontend][network] = {} - options[frontend][network] = {} - browser.storage.local.get([`${frontend}${utils.camelCase(network)}RedirectsChecks`, `${frontend}${utils.camelCase(network)}CustomRedirects`], r => { - options[frontend][network].checks = r[frontend + utils.camelCase(network) + "RedirectsChecks"] - options[frontend][network].custom = r[frontend + utils.camelCase(network) + "CustomRedirects"] - }) - } - } - } - resolve() }) } -function all(service) { - init() +await init() +await getConfig() + +function fetchFrontendInstanceList(service, frontend) { let tmp = [] - for (const frontend in config.services[service].frontends) { - if (config.services[service].frontends[frontend].instanceList) { - for (const network in config.networks) { - tmp.push(...redirects[frontend][network], ...options[frontend][network].custom) - } - } else if (config.services[service].frontends[frontend].singleInstance != undefined) tmp.push(config.services[service].frontends[frontend].singleInstance) - } + if (!config.services[service].frontends[frontend].singleInstance) { + for (const network in config.networks) { + tmp.push(...redirects[frontend][network], ...options[frontend][network].custom) + } + } else if (config.services[service].frontends[frontend].singleInstance != undefined) tmp = config.services[service].frontends[frontend].singleInstance return tmp } +function all(service, frontend) { + // init() + // getConfig() + let instances = [] + if (!frontend) { + for (const frontend in config.services[service].frontends) { + instances.push(...fetchFrontendInstanceList(service, frontend)) + } + } else { + instances.push(...fetchFrontendInstanceList(service, frontend)) + } + return instances +} + function regexArray(service, url) { let targets if (config.services[service].targets == "datajson") { @@ -77,8 +71,6 @@ function regexArray(service, url) { return false } -getConfig() -init() browser.storage.onChanged.addListener(init) function redirect(url, type, initiator) { @@ -101,8 +93,8 @@ function redirect(url, type, initiator) { } if (config.services[service].frontends[frontend].instanceList) { - let instanceList = [...options[frontend][network].checks, ...options[frontend][network].custom] - if (instanceList.length === 0 && options.networkFallback) instanceList = [...options[frontend].clearnet.checks, ...options[frontend].clearnet.custom] + let instanceList = [...options[frontend][network].enabled, ...options[frontend][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) } else if (config.services[service].frontends[frontend].singleInstance) randomInstance = config.services[service].frontends[frontend].singleInstance @@ -401,45 +393,37 @@ function initDefaults() { fetch("/instances/data.json") .then(response => response.text()) .then(async data => { - let dataJson = JSON.parse(data) - let tmpRedirects = JSON.parse(data) - browser.storage.local.get(["cloudflareBlackList", "authenticateBlackList", "offlineBlackList"], async r => { + browser.storage.local.get(["options", "blacklists"], async r => { + let redirects = JSON.parse(data) + let options = r.options + let targets = {} for (const service in config.services) { + options[service] = {} if (config.services[service].targets == "datajson") { - browser.storage.local.set({ [service + "Targets"]: [...dataJson[service]] }) - delete dataJson[service] + targets[service] = redirects[service] + //delete dataJson[service] } for (const defaultOption in config.services[service].options) { - browser.storage.local.set({ [service + utils.camelCase(defaultOption)]: config.services[service].options[defaultOption] }) + options[service][defaultOption] = config.services[service].options[defaultOption] } for (const frontend in config.services[service].frontends) { if (config.services[service].frontends[frontend].instanceList) { - let clearnetChecks = tmpRedirects[frontend].clearnet - for (const instance of [...r.cloudflareBlackList, ...r.authenticateBlackList, ...r.offlineBlackList]) { - let i = clearnetChecks.indexOf(instance) - if (i > -1) clearnetChecks.splice(i, 1) - } + options[frontend] = {} for (const network in config.networks) { - switch (network) { - case "clearnet": - browser.storage.local.set({ - [frontend + "ClearnetRedirectsChecks"]: [...clearnetChecks], - [frontend + "ClearnetCustomRedirects"]: [], - }) - break - default: - browser.storage.local.set({ - [frontend + utils.camelCase(network) + "RedirectsChecks"]: [...tmpRedirects[frontend][network]], - [frontend + utils.camelCase(network) + "CustomRedirects"]: [], - }) + options[frontend][network] = {} + options[frontend][network].enabled = redirects[frontend][network] + options[frontend][network].custom = [] + } + 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) } } } } } - browser.storage.local.set({ - redirects: dataJson, - }) + browser.storage.local.set({ redirects, options, targets }) resolve() }) }) @@ -459,15 +443,15 @@ function computeService(url) { function switchInstance(url) { return new Promise(async resolve => { - await init() - await getConfig() + // await init() + // await getConfig() 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].checks, ...options[options[service].frontend][options.network].custom] - if (instancesList.length === 0 && options.networkFallback) instancesList = [...options[options[service].frontend].clearnet.checks, ...options[options[service].frontend].clearnet.custom] + 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) @@ -492,8 +476,8 @@ function switchInstance(url) { function reverse(url) { return new Promise(async resolve => { - await init() - await getConfig() + // await init() + // await getConfig() let protocolHost = utils.protocolHost(url) let currentService for (const service in config.services) { @@ -504,6 +488,8 @@ function reverse(url) { 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": @@ -518,10 +504,72 @@ function reverse(url) { }) } +function unifyPreferences(url) { + return new Promise(async resolve => { + // await init() + // await getConfig() + 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 in frontend.preferences.cookies) { + await utils.copyCookie(currentFrontend, url, instancesList, cookie) + } + } + if ("localStorage" in frontend.preferences) { + } + 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 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) + } + } + } + } + } + browser.storage.local.set({ redirects, targets, options }) + }) +} + export default { redirect, initDefaults, computeService, switchInstance, reverse, + unifyPreferences, + setRedirects, } diff --git a/src/assets/javascripts/utils.js b/src/assets/javascripts/utils.js index c28af018..0e8acb3c 100644 --- a/src/assets/javascripts/utils.js +++ b/src/assets/javascripts/utils.js @@ -440,21 +440,7 @@ function unify(test) { return } - let result = await youtubeHelper.copyPasteInvidiousCookies(test, url) - if (!result) result = await youtubeHelper.copyPastePipedLocalStorage(test, url, currTab.id) - if (!result) result = await youtubeHelper.copyPastePipedMaterialLocalStorage(test, url, currTab.id) - - if (!result) result = await twitterHelper.initNitterCookies(test, url) - if (!result) result = await redditHelper.initLibredditCookies(test, url) - if (!result) result = await redditHelper.initTedditCookies(test, url) - if (!result) result = await searchHelper.initSearxCookies(test, url) - if (!result) result = await searchHelper.initSearxngCookies(test, url) - if (!result) result = await searchHelper.initLibrexCookies(test, url) - if (!result) result = await tiktokHelper.initProxiTokCookies(test, url) - if (!result) result = await wikipediaHelper.initWikilessCookies(test, url) - if (!result) result = await translateHelper.copyPasteSimplyTranslateCookies(test, url) - if (!result) result = await translateHelper.copyPasteLingvaLocalStorage(test, url) - if (!result) result = await instagramHelper.initBibliogramPreferences(test, url) + let result = await servicesHelper.unifyPreferences(url) resolve(result) } diff --git a/src/config/config.json b/src/config/config.json index ca835d51..09774895 100644 --- a/src/config/config.json +++ b/src/config/config.json @@ -116,7 +116,7 @@ "hyperpipe": { "preferences": { "localstorage": ["api", "authapi", "codec", "locale", "next", "pipedapi", "quality", "theme", "vol"], - "indexeddb": ["hyperpipedb"] + "indexeddb": "hyperpipedb" }, "name": "HyperPipe", "instanceList": true @@ -542,5 +542,10 @@ "embeddable": false, "url": "https://send.libredirect.invalid" } + }, + "blacklist": { + "cloudflare": { "color": "red" }, + "authenticate": { "color": "orange" }, + "offline": { "color": "grey" } } } diff --git a/src/pages/background/background.js b/src/pages/background/background.js index 7ee1358e..241b51de 100644 --- a/src/pages/background/background.js +++ b/src/pages/background/background.js @@ -12,18 +12,13 @@ browser.runtime.onInstalled.addListener(details => { .then(response => response.text()) .then(async data => { browser.storage.local.clear(() => { - browser.storage.local.set({ cloudflareBlackList: JSON.parse(data).cloudflare }, () => { - browser.storage.local.set({ authenticateBlackList: JSON.parse(data).authenticate }, () => { - browser.storage.local.set({ offlineBlackList: JSON.parse(data).offline }, () => { - generalHelper.initDefaults() - servicesHelper.initDefaults() - }) - }) + browser.storage.local.set({ blacklists: JSON.parse(data) }, () => { + generalHelper.initDefaults() + servicesHelper.initDefaults() }) }) }) } - if (details.reason == "install") initDefaults() // if (details.reason == 'install' || (details.reason == "update" && details.previousVersion != browser.runtime.getManifest().version)) { // if (details.reason == "update") @@ -36,6 +31,17 @@ browser.runtime.onInstalled.addListener(details => { // }) // else initDefaults(); // } + switch (details.reason) { + case "install": + initDefaults() + break + case "update": + switch (details.previousVersion) { + case "2.2.1": + //do stuff + break + } + } }) let BYPASSTABs = [] @@ -98,21 +104,7 @@ browser.webRequest.onHeadersReceived.addListener( */ async function redirectOfflineInstance(url, tabId) { - let newUrl = await youtubeHelper.switchInstance(url, true) - if (!newUrl) newUrl = await twitterHelper.switchInstance(url, true) - if (!newUrl) newUrl = await instagramHelper.switchInstance(url, true) - if (!newUrl) newUrl = await redditHelper.switchInstance(url, true) - if (!newUrl) newUrl = await searchHelper.switchInstance(url, true) - if (!newUrl) newUrl = await translateHelper.switchInstance(url, true) - if (!newUrl) newUrl = await mediumHelper.switchInstance(url, true) - if (!newUrl) newUrl = await quoraHelper.switchInstance(url, true) - if (!newUrl) newUrl = await libremdbHelper.switchInstance(url, true) - if (!newUrl) newUrl = await tiktokHelper.switchInstance(url, true) - if (!newUrl) newUrl = await imgurHelper.switchInstance(url, true) - if (!newUrl) newUrl = await wikipediaHelper.switchInstance(url, true) - if (!newUrl) newUrl = await peertubeHelper.switchInstance(url, true) - if (!newUrl) newUrl = await lbryHelper.switchInstance(url, true) - if (!newUrl) newUrl = await youtubeMusicHelper.switchInstance(url, true) + let newUrl = await servicesHelper.switchInstance(url, true) if (newUrl) { if (counter >= 5) { @@ -189,5 +181,3 @@ browser.runtime.onMessage.addListener((message, sender, sendResponse) => { if (message.function === "unify") utils.unify(false).then(r => sendResponse({ response: r })) return true }) - -browser.storage.local.set({ version: browser.runtime.getManifest().version }) diff --git a/src/pages/options/widgets/general.js b/src/pages/options/widgets/general.js index cfc95df2..89d0b6b0 100644 --- a/src/pages/options/widgets/general.js +++ b/src/pages/options/widgets/general.js @@ -28,6 +28,24 @@ async function getConfig() { }) } +function setOption(option, multiChoice, event) { + browser.storage.local.get("options", r => { + let options = r.options + browser.storage.local.set({ options }) + }) + + browser.storage.local.get("options", r => { + let options = r.options + if (multiChoice) { + options[option] = event.target.options[[option].selectedIndex].value + } else { + options[option] = event.target.checked + } + browser.storage.local.set({ options }) + location.reload() + }) +} + let exportSettingsElement = document.getElementById("export-settings") function exportSettings() { @@ -75,13 +93,9 @@ resetSettings.addEventListener("click", async () => { fetch("/instances/blacklist.json") .then(response => response.text()) .then(async data => { - browser.storage.local.set({ cloudflareBlackList: JSON.parse(data).cloudflare }, () => { - browser.storage.local.set({ offlineBlackList: JSON.parse(data).offline }, () => { - browser.storage.local.set({ authenticateBlackList: JSON.parse(data).authenticate }, async () => { - await servicesHelper.initDefaults() - location.reload() - }) - }) + browser.storage.local.set({ blacklists: JSON.parse(data) }, async () => { + await servicesHelper.initDefaults() + location.reload() }) }) }) @@ -89,32 +103,30 @@ resetSettings.addEventListener("click", async () => { let autoRedirectElement = document.getElementById("auto-redirect") autoRedirectElement.addEventListener("change", event => { - browser.storage.local.set({ autoRedirect: event.target.checked }) + setOption("autoRedirect", false, event) }) let themeElement = document.getElementById("theme") themeElement.addEventListener("change", event => { - const value = event.target.options[theme.selectedIndex].value - browser.storage.local.set({ theme: value }) + setOption("theme", true, event) location.reload() }) let networkElement = document.getElementById("network") networkElement.addEventListener("change", event => { - const value = event.target.options[network.selectedIndex].value - browser.storage.local.set({ network: value }) + setOption("network", true, event) location.reload() }) let networkFallbackCheckbox = document.getElementById("network-fallback-checkbox") networkFallbackCheckbox.addEventListener("change", event => { - browser.storage.local.set({ networkFallback: event.target.checked }) + setOption("networkFallback", false, event) }) let latencyOutput = document.getElementById("latency-output") let latencyInput = document.getElementById("latency-input") latencyInput.addEventListener("change", event => { - browser.storage.local.set({ latencyThreshold: event.target.value }) + setOption("latencyThreshold", false, event) }) latencyInput.addEventListener("input", event => { latencyOutput.value = event.target.value @@ -141,46 +153,36 @@ for (const service in config.services) { // const firstPartyIsolate = document.getElementById('firstPartyIsolate'); // firstPartyIsolate.addEventListener("change", () => browser.storage.local.set({ firstPartyIsolate: firstPartyIsolate.checked })) -browser.storage.local.get( - [ - "theme", - "autoRedirect", - "exceptions", - "network", - "networkFallback", - "latencyThreshold", - // 'firstPartyIsolate' - ], - r => { - autoRedirectElement.checked = r.autoRedirect - themeElement.value = r.theme - networkElement.value = r.network - networkFallbackCheckbox.checked = r.networkFallback - latencyOutput.value = r.latencyThreshold - // firstPartyIsolate.checked = r.firstPartyIsolate; - - let networkFallbackElement = document.getElementById("network-fallback") - if (networkElement.value == "clearnet") { - networkFallbackElement.style.display = "none" - } else { - networkFallbackElement.style.display = "block" - } +browser.storage.local.get("options", r => { + autoRedirectElement.checked = r.options.autoRedirect + themeElement.value = r.options.theme + networkElement.value = r.options.network + networkFallbackCheckbox.checked = r.options.networkFallback + latencyOutput.value = r.options.latencyThreshold + // firstPartyIsolate.checked = r.firstPartyIsolate; + + let networkFallbackElement = document.getElementById("network-fallback") + if (networkElement.value == "clearnet") { + networkFallbackElement.style.display = "none" + } else { + networkFallbackElement.style.display = "block" + } - instanceTypeElement.addEventListener("change", event => { - instanceType = event.target.options[instanceTypeElement.selectedIndex].value - if (instanceType == "url") { - nameCustomInstanceInput.setAttribute("type", "url") - nameCustomInstanceInput.setAttribute("placeholder", "https://www.google.com") - } else if (instanceType == "regex") { - nameCustomInstanceInput.setAttribute("type", "text") - nameCustomInstanceInput.setAttribute("placeholder", "https?://(www.|)youtube.com/") - } - }) - let exceptionsCustomInstances = r.exceptions - function calcExceptionsCustomInstances() { - document.getElementById("exceptions-custom-checklist").innerHTML = [...exceptionsCustomInstances.url, ...exceptionsCustomInstances.regex] - .map( - x => `
+ instanceTypeElement.addEventListener("change", event => { + instanceType = event.target.options[instanceTypeElement.selectedIndex].value + if (instanceType == "url") { + nameCustomInstanceInput.setAttribute("type", "url") + nameCustomInstanceInput.setAttribute("placeholder", "https://www.google.com") + } else if (instanceType == "regex") { + nameCustomInstanceInput.setAttribute("type", "text") + nameCustomInstanceInput.setAttribute("placeholder", "https?://(www.|)youtube.com/") + } + }) + let exceptionsCustomInstances = r.options.exceptions + function calcExceptionsCustomInstances() { + document.getElementById("exceptions-custom-checklist").innerHTML = [...exceptionsCustomInstances.url, ...exceptionsCustomInstances.regex] + .map( + x => `
${x}

` - ) - .join("\n") - - 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) - else { - index = exceptionsCustomInstances.regex.indexOf(x) - if (index > -1) exceptionsCustomInstances.regex.splice(index, 1) - } - browser.storage.local.set({ exceptions: exceptionsCustomInstances }) - calcExceptionsCustomInstances() - }) + ) + .join("\n") + + 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) + else { + index = exceptionsCustomInstances.regex.indexOf(x) + if (index > -1) exceptionsCustomInstances.regex.splice(index, 1) + } + options.exceptions = exceptionsCustomInstances + browser.storage.local.set({ options }) + calcExceptionsCustomInstances() + }) + } + } + calcExceptionsCustomInstances() + document.getElementById("custom-exceptions-instance-form").addEventListener("submit", event => { + event.preventDefault() + + let val + if (instanceType == "url") { + if (nameCustomInstanceInput.validity.valid) { + let url = new URL(nameCustomInstanceInput.value) + val = `${url.network}//${url.host}` + if (!exceptionsCustomInstances.url.includes(val)) exceptionsCustomInstances.url.push(val) } + } else if (instanceType == "regex") { + val = nameCustomInstanceInput.value + if (val.trim() != "" && !exceptionsCustomInstances.regex.includes(val)) exceptionsCustomInstances.regex.push(val) + } + if (val) { + options.exceptions = exceptionsCustomInstances + browser.storage.local.set({ options }) + nameCustomInstanceInput.value = "" } calcExceptionsCustomInstances() - document.getElementById("custom-exceptions-instance-form").addEventListener("submit", event => { - event.preventDefault() - - let val - if (instanceType == "url") { - if (nameCustomInstanceInput.validity.valid) { - let url = new URL(nameCustomInstanceInput.value) - val = `${url.network}//${url.host}` - if (!exceptionsCustomInstances.url.includes(val)) exceptionsCustomInstances.url.push(val) - } - } else if (instanceType == "regex") { - val = nameCustomInstanceInput.value - if (val.trim() != "" && !exceptionsCustomInstances.regex.includes(val)) exceptionsCustomInstances.regex.push(val) - } - if (val) { - browser.storage.local.set({ exceptions: exceptionsCustomInstances }) - nameCustomInstanceInput.value = "" - } - calcExceptionsCustomInstances() - }) + }) - browser.storage.local.get("popupServices", r => { - popupServices = r.popupServices - for (const service in config.services) document.getElementById(service).checked = popupServices.includes(service) - }) - } -) + popupServices = r.options.popupServices + for (const service in config.services) document.getElementById(service).checked = popupServices.includes(service) +}) diff --git a/src/pages/options/widgets/imdb.js b/src/pages/options/widgets/imdb.js deleted file mode 100644 index f04bef20..00000000 --- a/src/pages/options/widgets/imdb.js +++ /dev/null @@ -1,55 +0,0 @@ -import utils from "../../../assets/javascripts/utils.js" - -// UNCOMMENT ALL COMMENTS ONCE OTHER FRONTENDS EXIST - -const frontends = new Array("libremdb") -const protocols = new Array("clearnet", "tor", "i2p", "loki") - -const enable = document.getElementById("imdb-enable") -const imdb = document.getElementById("imdb_page") -//const frontend = document.getElementById("imdb-frontend"); -let protocol - -/* -function changeFrontendsSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - if (frontends[i] == frontend.value) { - frontendDiv.style.display = 'block' - } else { - frontendDiv.style.display = 'none' - } - } -} -*/ - -function changeProtocolSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - for (let x = 0; x < protocols.length; x++) { - const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] - if (protocols[x] == protocol) { - protocolDiv.style.display = "block" - } else { - protocolDiv.style.display = "none" - } - } - } -} - -browser.storage.local.get(["disableImdb", "protocol"], r => { - enable.checked = !r.disableImdb - protocol = r.network - changeProtocolSettings() -}) - -imdb.addEventListener("change", () => { - browser.storage.local.set({ disableImdb: !enable.checked }) -}) - -for (let i = 0; i < frontends.length; i++) { - for (let x = 0; x < protocols.length; x++) { - utils.processDefaultCustomInstances("imdb", frontends[i], protocols[x], document) - } - utils.latency("imdb", frontends[i], document, location) -} diff --git a/src/pages/options/widgets/imgur.js b/src/pages/options/widgets/imgur.js deleted file mode 100644 index 0272b94e..00000000 --- a/src/pages/options/widgets/imgur.js +++ /dev/null @@ -1,55 +0,0 @@ -import utils from "../../../assets/javascripts/utils.js" - -// UNCOMMENT ALL COMMENTS ONCE OTHER FRONTENDS EXIST - -const frontends = new Array("rimgo") -const protocols = new Array("clearnet", "tor", "i2p", "loki") - -const enable = document.getElementById("imgur-enable") -const imgur = document.getElementById("imgur_page") -//const frontend = document.getElementById("imgur-frontend"); -let protocol - -/* -function changeFrontendsSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - if (frontends[i] == frontend.value) { - frontendDiv.style.display = 'block' - } else { - frontendDiv.style.display = 'none' - } - } -} -*/ - -function changeProtocolSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - for (let x = 0; x < protocols.length; x++) { - const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] - if (protocols[x] == protocol) { - protocolDiv.style.display = "block" - } else { - protocolDiv.style.display = "none" - } - } - } -} - -browser.storage.local.get(["disableImgur", "protocol"], r => { - enable.checked = !r.disableImgur - protocol = r.network - changeProtocolSettings() -}) - -imgur.addEventListener("change", () => { - browser.storage.local.set({ disableImgur: !enable.checked }) -}) - -for (let i = 0; i < frontends.length; i++) { - for (let x = 0; x < protocols.length; x++) { - utils.processDefaultCustomInstances("imgur", frontends[i], protocols[x], document) - } - utils.latency("imgur", frontends[i], document, location) -} diff --git a/src/pages/options/widgets/instagram.js b/src/pages/options/widgets/instagram.js deleted file mode 100644 index f8301ae7..00000000 --- a/src/pages/options/widgets/instagram.js +++ /dev/null @@ -1,55 +0,0 @@ -import utils from "../../../assets/javascripts/utils.js" - -// UNCOMMENT ALL COMMENTS ONCE OTHER FRONTENDS EXIST - -const frontends = new Array("bibliogram") -const protocols = new Array("clearnet", "tor", "i2p", "loki") - -const enable = document.getElementById("instagram-enable") -const instagram = document.getElementById("instagram_page") -//const frontend = document.getElementById("instagram-frontend"); -let protocol - -/* -function changeFrontendsSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - if (frontends[i] == frontend.value) { - frontendDiv.style.display = 'block' - } else { - frontendDiv.style.display = 'none' - } - } -} -*/ - -function changeProtocolSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - for (let x = 0; x < protocols.length; x++) { - const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] - if (protocols[x] == protocol) { - protocolDiv.style.display = "block" - } else { - protocolDiv.style.display = "none" - } - } - } -} - -browser.storage.local.get(["disableInstagram", "protocol"], r => { - enable.checked = !r.disableInstagram - protocol = r.network - changeProtocolSettings() -}) - -instagram.addEventListener("change", () => { - browser.storage.local.set({ disableInstagram: !enable.checked }) -}) - -for (let i = 0; i < frontends.length; i++) { - for (let x = 0; x < protocols.length; x++) { - utils.processDefaultCustomInstances("instagram", frontends[i], protocols[x], document) - } - utils.latency("instagram", frontends[i], document, location) -} diff --git a/src/pages/options/widgets/lbry.js b/src/pages/options/widgets/lbry.js deleted file mode 100644 index 970f9130..00000000 --- a/src/pages/options/widgets/lbry.js +++ /dev/null @@ -1,60 +0,0 @@ -import utils from "../../../assets/javascripts/utils.js" - -const frontends = new Array("librarian") -const protocols = new Array("clearnet", "tor", "i2p", "loki") - -const enable = document.getElementById("lbry-enable") -const lbry = document.getElementById("lbry_page") -const redirectType = document.getElementById("lbry-redirect_type") -const frontend = document.getElementById("lbry-frontend") -let protocol - -function changeFrontendsSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - if (frontends[i] == frontend.value) { - frontendDiv.style.display = "block" - } else { - frontendDiv.style.display = "none" - } - } -} - -function changeProtocolSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - for (let x = 0; x < protocols.length; x++) { - const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] - if (protocols[x] == protocol) { - protocolDiv.style.display = "block" - } else { - protocolDiv.style.display = "none" - } - } - } -} - -browser.storage.local.get(["disableLbryTargets", "protocol", "lbryFrontend", "lbryRedirectType"], r => { - enable.checked = !r.disableLbryTargets - protocol = r.network - redirectType.value = r.lbryRedirectType - frontend.value = r.lbryFrontend - changeFrontendsSettings() - changeProtocolSettings() -}) - -lbry.addEventListener("change", () => { - browser.storage.local.set({ - disableLbryTargets: !enable.checked, - lbryRedirectType: redirectType.value, - lbryFrontend: frontend.value, - }) - changeFrontendsSettings() -}) - -for (let i = 0; i < frontends.length; i++) { - for (let x = 0; x < protocols.length; x++) { - utils.processDefaultCustomInstances("lbryTargets", frontends[i], protocols[x], document) - } - utils.latency("lbryTargets", frontends[i], document, location) -} diff --git a/src/pages/options/widgets/maps.js b/src/pages/options/widgets/maps.js deleted file mode 100644 index ba44c0c0..00000000 --- a/src/pages/options/widgets/maps.js +++ /dev/null @@ -1,57 +0,0 @@ -import utils from "../../../assets/javascripts/utils.js" - -const frontends = new Array("facil") -const protocols = new Array("clearnet", "tor", "i2p", "loki") - -const enable = document.getElementById("maps-enable") -const maps = document.getElementById("maps_page") -const frontend = document.getElementById("maps-frontend") -let protocol - -function changeProtocolSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - for (let x = 0; x < protocols.length; x++) { - const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] - if (protocols[x] == protocol) { - protocolDiv.style.display = "block" - } else { - protocolDiv.style.display = "none" - } - } - } -} - -function changeFrontendsSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - if (frontends[i] == frontend.value) { - frontendDiv.style.display = "block" - } else { - frontendDiv.style.display = "none" - } - } -} - -browser.storage.local.get(["disableMaps", "protocol", "mapsFrontend"], r => { - enable.checked = !r.disableMaps - protocol = r.network - frontend.value = r.mapsFrontend - changeFrontendsSettings() - changeProtocolSettings() -}) - -maps.addEventListener("change", () => { - browser.storage.local.set({ - disableMaps: !enable.checked, - mapsFrontend: frontend.value, - }) - changeFrontendsSettings() -}) - -for (let i = 0; i < frontends.length; i++) { - for (let x = 0; x < protocols.length; x++) { - utils.processDefaultCustomInstances("maps", frontends[i], protocols[x], document) - } - utils.latency("maps", frontends[i], document, location) -} diff --git a/src/pages/options/widgets/medium.js b/src/pages/options/widgets/medium.js deleted file mode 100644 index c12df456..00000000 --- a/src/pages/options/widgets/medium.js +++ /dev/null @@ -1,55 +0,0 @@ -import utils from "../../../assets/javascripts/utils.js" - -// UNCOMMENT ALL COMMENTS ONCE OTHER FRONTENDS EXIST - -const frontends = new Array("scribe") -const protocols = new Array("clearnet", "tor", "i2p", "loki") - -const enable = document.getElementById("medium-enable") -const medium = document.getElementById("medium_page") -//const frontend = document.getElementById("medium-frontend"); -let protocol - -/* -function changeFrontendsSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - if (frontends[i] == frontend.value) { - frontendDiv.style.display = 'block' - } else { - frontendDiv.style.display = 'none' - } - } -} -*/ - -function changeProtocolSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - for (let x = 0; x < protocols.length; x++) { - const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] - if (protocols[x] == protocol) { - protocolDiv.style.display = "block" - } else { - protocolDiv.style.display = "none" - } - } - } -} - -browser.storage.local.get(["disableMedium", "protocol"], r => { - enable.checked = !r.disableMedium - protocol = r.network - changeProtocolSettings() -}) - -medium.addEventListener("change", () => { - browser.storage.local.set({ disableMedium: !enable.checked }) -}) - -for (let i = 0; i < frontends.length; i++) { - for (let x = 0; x < protocols.length; x++) { - utils.processDefaultCustomInstances("medium", frontends[i], protocols[x], document) - } - utils.latency("medium", frontends[i], document, location) -} diff --git a/src/pages/options/widgets/peertube.js b/src/pages/options/widgets/peertube.js deleted file mode 100644 index ca2be429..00000000 --- a/src/pages/options/widgets/peertube.js +++ /dev/null @@ -1,55 +0,0 @@ -import utils from "../../../assets/javascripts/utils.js" - -// UNCOMMENT ALL COMMENTS ONCE OTHER FRONTENDS EXIST - -const frontends = new Array("simpleertube") -const protocols = new Array("clearnet", "tor", "i2p", "loki") - -const enable = document.getElementById("peertube-enable") -const peertube = document.getElementById("peertube_page") -//const frontend = document.getElementById("peertube-frontend"); -let protocol - -/* -function changeFrontendsSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - if (frontends[i] == frontend.value) { - frontendDiv.style.display = 'block' - } else { - frontendDiv.style.display = 'none' - } - } -} -*/ - -function changeProtocolSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - for (let x = 0; x < protocols.length; x++) { - const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] - if (protocols[x] == protocol) { - protocolDiv.style.display = "block" - } else { - protocolDiv.style.display = "none" - } - } - } -} - -browser.storage.local.get(["disablePeertubeTargets", "protocol"], r => { - enable.checked = !r.disablePeertubeTargets - protocol = r.network - changeProtocolSettings() -}) - -peertube.addEventListener("change", () => { - browser.storage.local.set({ disablePeertubeTargets: !enable.checked }) -}) - -for (let i = 0; i < frontends.length; i++) { - for (let x = 0; x < protocols.length; x++) { - utils.processDefaultCustomInstances("peertube", frontends[i], protocols[x], document) - } - utils.latency("peertube", frontends[i], document, location) -} diff --git a/src/pages/options/widgets/quora.js b/src/pages/options/widgets/quora.js deleted file mode 100644 index c0c0d68f..00000000 --- a/src/pages/options/widgets/quora.js +++ /dev/null @@ -1,55 +0,0 @@ -import utils from "../../../assets/javascripts/utils.js" - -// UNCOMMENT ALL COMMENTS ONCE OTHER FRONTENDS EXIST - -const frontends = new Array("quetre") -const protocols = new Array("clearnet", "tor", "i2p", "loki") - -const enable = document.getElementById("quora-enable") -const quora = document.getElementById("quora_page") -//const frontend = document.getElementById("quora-frontend"); -let protocol - -/* -function changeFrontendsSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - if (frontends[i] == frontend.value) { - frontendDiv.style.display = 'block' - } else { - frontendDiv.style.display = 'none' - } - } -} -*/ - -function changeProtocolSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - for (let x = 0; x < protocols.length; x++) { - const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] - if (protocols[x] == protocol) { - protocolDiv.style.display = "block" - } else { - protocolDiv.style.display = "none" - } - } - } -} - -browser.storage.local.get(["disableQuora", "protocol"], r => { - enable.checked = !r.disableQuora - protocol = r.network - changeProtocolSettings() -}) - -quora.addEventListener("change", () => { - browser.storage.local.set({ disableQuora: !enable.checked }) -}) - -for (let i = 0; i < frontends.length; i++) { - for (let x = 0; x < protocols.length; x++) { - utils.processDefaultCustomInstances("quora", frontends[i], protocols[x], document) - } - utils.latency("quora", frontends[i], document, location) -} diff --git a/src/pages/options/widgets/reddit.js b/src/pages/options/widgets/reddit.js deleted file mode 100644 index cae7a764..00000000 --- a/src/pages/options/widgets/reddit.js +++ /dev/null @@ -1,57 +0,0 @@ -import utils from "../../../assets/javascripts/utils.js" - -const frontends = new Array("libreddit", "teddit") -const protocols = new Array("clearnet", "tor", "i2p", "loki") - -const enable = document.getElementById("reddit-enable") -const reddit = document.getElementById("reddit_page") -const frontend = document.getElementById("reddit-frontend") -let protocol - -function changeFrontendsSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - if (frontends[i] == frontend.value) { - frontendDiv.style.display = "block" - } else { - frontendDiv.style.display = "none" - } - } -} - -function changeProtocolSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - for (let x = 0; x < protocols.length; x++) { - const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] - if (protocols[x] == protocol) { - protocolDiv.style.display = "block" - } else { - protocolDiv.style.display = "none" - } - } - } -} - -browser.storage.local.get(["disableReddit", "protocol", "redditFrontend"], r => { - enable.checked = !r.disableReddit - protocol = r.network - frontend.value = r.redditFrontend - changeFrontendsSettings() - changeProtocolSettings() -}) - -reddit.addEventListener("change", () => { - browser.storage.local.set({ - disableReddit: !enable.checked, - redditFrontend: frontend.value, - }) - changeFrontendsSettings() -}) - -for (let i = 0; i < frontends.length; i++) { - for (let x = 0; x < protocols.length; x++) { - utils.processDefaultCustomInstances("reddit", frontends[i], protocols[x], document) - } - utils.latency("reddit", frontends[i], document, location) -} diff --git a/src/pages/options/widgets/reuters.js b/src/pages/options/widgets/reuters.js deleted file mode 100644 index 58299969..00000000 --- a/src/pages/options/widgets/reuters.js +++ /dev/null @@ -1,55 +0,0 @@ -import utils from "../../../assets/javascripts/utils.js" - -// UNCOMMENT ALL COMMENTS ONCE OTHER FRONTENDS EXIST - -const frontends = new Array("neuters") -const protocols = new Array("clearnet", "tor", "i2p", "loki") - -const enable = document.getElementById("reuters-enable") -const reuters = document.getElementById("reuters_page") -//const frontend = document.getElementById("reuters-frontend"); -let protocol - -/* -function changeFrontendsSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - if (frontends[i] == frontend.value) { - frontendDiv.style.display = 'block' - } else { - frontendDiv.style.display = 'none' - } - } -} -*/ - -function changeProtocolSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - for (let x = 0; x < protocols.length; x++) { - const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] - if (protocols[x] == protocol) { - protocolDiv.style.display = "block" - } else { - protocolDiv.style.display = "none" - } - } - } -} - -browser.storage.local.get(["disableReuters", "protocol"], r => { - enable.checked = !r.disableReuters - protocol = r.network - changeProtocolSettings() -}) - -reuters.addEventListener("change", () => { - browser.storage.local.set({ disableReuters: !enable.checked }) -}) - -for (let i = 0; i < frontends.length; i++) { - for (let x = 0; x < protocols.length; x++) { - utils.processDefaultCustomInstances("reuters", frontends[i], protocols[x], document) - } - utils.latency("reuters", frontends[i], document, location) -} diff --git a/src/pages/options/widgets/search.js b/src/pages/options/widgets/search.js deleted file mode 100644 index aa0aa94d..00000000 --- a/src/pages/options/widgets/search.js +++ /dev/null @@ -1,91 +0,0 @@ -import utils from "../../../assets/javascripts/utils.js" - -// GOAL: to never mention frontends/protocls outside these two arrays, so that adding a new frontend/protocol is as easy as adding it here. -// This may be expanded across the whole project, where almost everything becomes a template, and the frontend/protocol parts just become a JSON file. - -// ONCE FINISHED: add librex and see if it works -const frontends = new Array("searx", "searxng", "whoogle", "librex") // Add librex once /javascripts/search.js is made agnostic -const protocols = new Array("clearnet", "tor", "i2p", "loki") -//let frontendProtocols = (frontends.length) - -// I will leave comments of my privious attemps so that people can learn from my mistakes. :) - -/* -for (let i = 0; i < frontends.length; i++) { - this.frontends[i] = frontends[i].getElementsByClassName(protocol) -} -*/ -// There was a class here, but I deleted a bit of it -/* - this.searxDiv = searxDiv.getElementsByClassName(protocol)[0]; - this.searxngDiv = searxngDiv.getElementsByClassName(protocol)[0]; - this.librexDiv = librexDiv.getElementsByClassName(protocol)[0]; - */ - -/* - * Here I was trying to solve the issue by making a 2D array, but I later realised I was overcomplicating things -for (var i = 0; i < frontends.length; i++) { - frontendProtocols[i] = new Array(protocols.length) -} -*/ - -const enable = document.getElementById("search-enable") -const search = document.getElementById("search_page") -const frontend = document.getElementById("search-frontend") -let protocol - -function changeFrontendsSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - if (frontends[i] == frontend.value) { - frontendDiv.style.display = "block" - } else { - frontendDiv.style.display = "none" - } - } -} - -function changeProtocolSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - //if (frontends[i] == frontend.value) { // Here we are checking if the frontend matches the current one. This skips the protocol checking for that frontend, speeding things up. I no longer do this as protocol setting is only set once in the ui so every frontend needs to get their protocols setup immidiately. - for (let x = 0; x < protocols.length; x++) { - const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] - if (protocols[x] == protocol) { - //if the frontend value equals the selected one, it will show. Otherwise, it will be hidden - protocolDiv.style.display = "block" - } else { - protocolDiv.style.display = "none" - } - } - /* - } else { - continue - } - */ - } -} - -browser.storage.local.get(["disableSearch", "searchFrontend", "protocol"], r => { - enable.checked = !r.disableSearch - frontend.value = r.searchFrontend - protocol = r.network - - changeFrontendsSettings() - changeProtocolSettings() -}) - -for (let i = 0; i < frontends.length; i++) { - for (let x = 0; x < protocols.length; x++) { - utils.processDefaultCustomInstances("search", frontends[i], protocols[x], document) - } - utils.latency("search", frontends[i], document, location) -} - -search.addEventListener("change", () => { - browser.storage.local.set({ - disableSearch: !enable.checked, - searchFrontend: frontend.value, - }) - changeFrontendsSettings() -}) diff --git a/src/pages/options/widgets/sendTargets.js b/src/pages/options/widgets/sendTargets.js deleted file mode 100644 index b6acc02c..00000000 --- a/src/pages/options/widgets/sendTargets.js +++ /dev/null @@ -1,55 +0,0 @@ -import utils from "../../../assets/javascripts/utils.js" - -// UNCOMMENT ALL COMMENTS ONCE OTHER FRONTENDS EXIST - -const frontends = new Array("send") -const protocols = new Array("clearnet", "tor", "i2p", "loki") - -const enable = document.getElementById("sendTargets-enable") -const sendTargets = document.getElementById("sendTargets_page") -//const frontend = document.getElementById("sendTargets-frontend"); -let protocol - -/* -function changeFrontendsSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - if (frontends[i] == frontend.value) { - frontendDiv.style.display = 'block' - } else { - frontendDiv.style.display = 'none' - } - } -} -*/ - -function changeProtocolSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - for (let x = 0; x < protocols.length; x++) { - const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] - if (protocols[x] == protocol) { - protocolDiv.style.display = "block" - } else { - protocolDiv.style.display = "none" - } - } - } -} - -browser.storage.local.get(["disableSendTarget", "protocol"], r => { - enable.checked = !r.disableSendTarget - protocol = r.network - changeProtocolSettings() -}) - -sendTargets.addEventListener("change", () => { - browser.storage.local.set({ disableSendTarget: !enable.checked }) -}) - -for (let i = 0; i < frontends.length; i++) { - for (let x = 0; x < protocols.length; x++) { - utils.processDefaultCustomInstances("sendTargets", frontends[i], protocols[x], document) - } - utils.latency("sendTargets", frontends[i], document, location) -} diff --git a/src/pages/options/widgets/services.js b/src/pages/options/widgets/services.js index dbb66dec..d709a05b 100644 --- a/src/pages/options/widgets/services.js +++ b/src/pages/options/widgets/services.js @@ -1,7 +1,7 @@ import utils from "../../../assets/javascripts/utils.js" let config, - selectedNetwork, + options, divs = {} function getConfig() { @@ -15,17 +15,17 @@ function getConfig() { }) } -function getNetwork() { +function getOptions() { return new Promise(resolve => { - browser.storage.local.get("network", r => { - selectedNetwork = r.network + browser.storage.local.get("options", r => { + options = r.options resolve() }) }) } await getConfig() -await getNetwork() +await getOptions() function changeFrontendsSettings(service) { for (const frontend in config.services[service].frontends) { @@ -63,7 +63,7 @@ function changeNetworkSettings() { const frontendDiv = document.getElementById(frontend) for (const network in config.networks) { const networkDiv = frontendDiv.getElementsByClassName(network)[0] - if (network == selectedNetwork) { + if (network == options.network) { networkDiv.style.display = "block" } else { networkDiv.style.display = "none" @@ -81,14 +81,13 @@ for (const service in config.services) { for (const option in config.services[service].options) { divs[service][option] = document.getElementById(`${service}-${option}`) - browser.storage.local.get([`${service + utils.camelCase(option)}`], r => { - if (typeof config.services[service].options[option] == "boolean") divs[service][option].checked = r[service + utils.camelCase(option)] - else divs[service][option].value = r[service + utils.camelCase(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", () => { - if (typeof config.services[service].options[option] == "boolean") browser.storage.local.set({ [service + utils.camelCase(option)]: divs[service][option].checked }) - else browser.storage.local.set({ [service + utils.camelCase(option)]: divs[service][option].value }) + if (typeof config.services[service].options[option] == "boolean") options[service][option] = divs[service][option].checked + else options[service][option] = divs[service][option].value + browser.local.storage.set({ options }) changeFrontendsSettings(service) }) } diff --git a/src/pages/options/widgets/tiktok.js b/src/pages/options/widgets/tiktok.js deleted file mode 100644 index f382ad5a..00000000 --- a/src/pages/options/widgets/tiktok.js +++ /dev/null @@ -1,55 +0,0 @@ -import utils from "../../../assets/javascripts/utils.js" - -// UNCOMMENT ALL COMMENTS ONCE OTHER FRONTENDS EXIST - -const frontends = new Array("proxiTok") -const protocols = new Array("clearnet", "tor", "i2p", "loki") - -const enable = document.getElementById("tiktok-enable") -const tiktok = document.getElementById("tiktok_page") -//const frontend = document.getElementById("tiktok-frontend"); -let protocol - -/* -function changeFrontendsSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - if (frontends[i] == frontend.value) { - frontendDiv.style.display = 'block' - } else { - frontendDiv.style.display = 'none' - } - } -} -*/ - -function changeProtocolSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - for (let x = 0; x < protocols.length; x++) { - const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] - if (protocols[x] == protocol) { - protocolDiv.style.display = "block" - } else { - protocolDiv.style.display = "none" - } - } - } -} - -browser.storage.local.get(["disableTiktok", "protocol"], r => { - enable.checked = !r.disableTiktok - protocol = r.network - changeProtocolSettings() -}) - -tiktok.addEventListener("change", () => { - browser.storage.local.set({ disableTiktok: !enable.checked }) -}) - -for (let i = 0; i < frontends.length; i++) { - for (let x = 0; x < protocols.length; x++) { - utils.processDefaultCustomInstances("tiktok", frontends[i], protocols[x], document) - } - utils.latency("tiktok", frontends[i], document, location) -} diff --git a/src/pages/options/widgets/translate.js b/src/pages/options/widgets/translate.js deleted file mode 100644 index c70b679f..00000000 --- a/src/pages/options/widgets/translate.js +++ /dev/null @@ -1,57 +0,0 @@ -import utils from "../../../assets/javascripts/utils.js" - -const frontends = new Array("simplyTranslate", "lingva") -const protocols = new Array("clearnet", "tor", "i2p", "loki") - -const enable = document.getElementById("translate-enable") -const translate = document.getElementById("translate_page") -const frontend = document.getElementById("translate-frontend") -let protocol - -function changeFrontendsSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - if (frontends[i] == frontend.value) { - frontendDiv.style.display = "block" - } else { - frontendDiv.style.display = "none" - } - } -} - -function changeProtocolSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - for (let x = 0; x < protocols.length; x++) { - const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] - if (protocols[x] == protocol) { - protocolDiv.style.display = "block" - } else { - protocolDiv.style.display = "none" - } - } - } -} - -browser.storage.local.get(["translateDisable", "translateFrontend", "protocol"], r => { - enable.checked = !r.translateDisable - frontend.value = r.translateFrontend - protocol = r.network - changeFrontendsSettings() - changeProtocolSettings() -}) - -translate.addEventListener("change", () => { - browser.storage.local.set({ - translateDisable: !enable.checked, - translateFrontend: frontend.value, - }) - changeFrontendsSettings() -}) - -for (let i = 0; i < frontends.length; i++) { - for (let x = 0; x < protocols.length; x++) { - utils.processDefaultCustomInstances("translate", frontends[i], protocols[x], document) - } - utils.latency("translate", frontends[i], document, location) -} diff --git a/src/pages/options/widgets/twitter.js b/src/pages/options/widgets/twitter.js deleted file mode 100644 index 52d7a73b..00000000 --- a/src/pages/options/widgets/twitter.js +++ /dev/null @@ -1,60 +0,0 @@ -import utils from "../../../assets/javascripts/utils.js" - -// UNCOMMENT ALL COMMENTS ONCE OTHER FRONTENDS EXIST - -const frontends = new Array("nitter") -const protocols = new Array("clearnet", "tor", "i2p", "loki") - -const enable = document.getElementById("twitter-enable") -const twitter = document.getElementById("twitter_page") -const redirectType = document.getElementById("twitter-redirect_type") -//const frontend = document.getElementById("twitter-frontend"); -let protocol - -/* -function changeFrontendsSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - if (frontends[i] == frontend.value) { - frontendDiv.style.display = 'block' - } else { - frontendDiv.style.display = 'none' - } - } -} -*/ - -function changeProtocolSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - for (let x = 0; x < protocols.length; x++) { - const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] - if (protocols[x] == protocol) { - protocolDiv.style.display = "block" - } else { - protocolDiv.style.display = "none" - } - } - } -} - -browser.storage.local.get(["disableTwitter", "protocol", "twitterRedirectType"], r => { - enable.checked = !r.disableTwitter - protocol = r.network - redirectType.value = r.twitterRedirectType - changeProtocolSettings() -}) - -twitter.addEventListener("change", () => { - browser.storage.local.set({ - disableTwitter: !enable.checked, - twitterRedirectType: redirectType.value, - }) -}) - -for (let i = 0; i < frontends.length; i++) { - for (let x = 0; x < protocols.length; x++) { - utils.processDefaultCustomInstances("twitter", frontends[i], protocols[x], document) - } - utils.latency("twitter", frontends[i], document, location) -} diff --git a/src/pages/options/widgets/wikipedia.js b/src/pages/options/widgets/wikipedia.js deleted file mode 100644 index 120af919..00000000 --- a/src/pages/options/widgets/wikipedia.js +++ /dev/null @@ -1,55 +0,0 @@ -import utils from "../../../assets/javascripts/utils.js" - -// UNCOMMENT ALL COMMENTS ONCE OTHER FRONTENDS EXIST - -const frontends = new Array("wikiless") -const protocols = new Array("clearnet", "tor", "i2p", "loki") - -const enable = document.getElementById("wikipedia-enable") -const wikipedia = document.getElementById("wikipedia_page") -//const frontend = document.getElementById("wikipedia-frontend"); -let protocol - -/* -function changeFrontendsSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - if (frontends[i] == frontend.value) { - frontendDiv.style.display = 'block' - } else { - frontendDiv.style.display = 'none' - } - } -} -*/ - -function changeProtocolSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - for (let x = 0; x < protocols.length; x++) { - const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] - if (protocols[x] == protocol) { - protocolDiv.style.display = "block" - } else { - protocolDiv.style.display = "none" - } - } - } -} - -browser.storage.local.get(["disableWikipedia", "protocol"], r => { - enable.checked = !r.disableWikipedia - protocol = r.network - changeProtocolSettings() -}) - -wikipedia.addEventListener("change", () => { - browser.storage.local.set({ disableWikipedia: !enable.checked }) -}) - -for (let i = 0; i < frontends.length; i++) { - for (let x = 0; x < protocols.length; x++) { - utils.processDefaultCustomInstances("wikipedia", frontends[i], protocols[x], document) - } - utils.latency("wikipedia", frontends[i], document, location) -} diff --git a/src/pages/options/widgets/youtube.js b/src/pages/options/widgets/youtube.js deleted file mode 100644 index 4e4bbbae..00000000 --- a/src/pages/options/widgets/youtube.js +++ /dev/null @@ -1,92 +0,0 @@ -import utils from "../../../assets/javascripts/utils.js" - -const frontends = new Array("invidious", "piped", "pipedMaterial", "cloudtube") -const protocols = new Array("clearnet", "tor", "i2p", "loki") -const singleInstanceFrontends = new Array("freetube", "yatte") - -const enable = document.getElementById("youtube-enable") -const youtube = document.getElementById("youtube_page") -const youtubeEmbedFrontend = document.getElementById("youtube-embed_frontend") -const onlyEmbeddedVideo = document.getElementById("youtube-redirect_type") -const embeddedFrontendDiv = document.getElementById("youtube-embedded_frontend") -const frontend = document.getElementById("youtube-frontend") -let protocol - -function changeProtocolSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - for (let x = 0; x < protocols.length; x++) { - const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] - if (protocols[x] == protocol) { - protocolDiv.style.display = "block" - } else { - protocolDiv.style.display = "none" - } - } - } -} - -function changeEmbedFrontendsSettings() { - if (embeddedFrontendDiv.style.display == "block") { - for (let i = 0; i < frontends.length; i++) { - const embeddedFrontendDiv = document.getElementById(frontends[i]) - if (frontends[i] == youtubeEmbedFrontend.value) { - embeddedFrontendDiv.style.display = "block" - } else { - embeddedFrontendDiv.style.display = "none" - } - } - } -} - -function changeFrontendsSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - if (frontends[i] == frontend.value) { - frontendDiv.style.display = "block" - } else { - frontendDiv.style.display = "none" - } - } - let singleInstanceFrontend = false - for (let i = 0; i < singleInstanceFrontends.length; i++) { - if (singleInstanceFrontends[i] == frontend.value) { - singleInstanceFrontend = true - } - } - if (singleInstanceFrontend == true) { - embeddedFrontendDiv.style.display = "block" - } else { - embeddedFrontendDiv.style.display = "none" - } -} - -browser.storage.local.get(["disableYoutube", "onlyEmbeddedVideo", "youtubeRedirects", "youtubeFrontend", "youtubeEmbedFrontend", "protocol"], r => { - enable.checked = !r.disableYoutube - onlyEmbeddedVideo.value = r.onlyEmbeddedVideo - youtubeEmbedFrontend.value = r.youtubeEmbedFrontend - frontend.value = r.youtubeFrontend - protocol = r.network - - changeFrontendsSettings() - changeProtocolSettings() - changeEmbedFrontendsSettings() -}) - -youtube.addEventListener("change", () => { - browser.storage.local.set({ - disableYoutube: !enable.checked, - youtubeEmbedFrontend: youtubeEmbedFrontend.value, - youtubeFrontend: frontend.value, - onlyEmbeddedVideo: onlyEmbeddedVideo.value, - }) - changeFrontendsSettings() - changeEmbedFrontendsSettings() -}) - -for (let i = 0; i < frontends.length; i++) { - for (let x = 0; x < protocols.length; x++) { - utils.processDefaultCustomInstances("youtube", frontends[i], protocols[x], document) - } - utils.latency("youtube", frontends[i], document, location) -} diff --git a/src/pages/options/widgets/youtubeMusic.js b/src/pages/options/widgets/youtubeMusic.js deleted file mode 100644 index bb985b28..00000000 --- a/src/pages/options/widgets/youtubeMusic.js +++ /dev/null @@ -1,57 +0,0 @@ -import utils from "../../../assets/javascripts/utils.js" - -const frontends = new Array("beatbump", "hyperpipe") -const protocols = new Array("clearnet", "tor", "i2p", "loki") - -let enable = document.getElementById("youtubeMusic-enable") -const youtubeMusic = document.getElementById("youtubeMusic_page") -const frontend = document.getElementById("youtubeMusic-frontend") -let protocol - -function changeFrontendsSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - if (frontends[i] == frontend.value) { - frontendDiv.style.display = "block" - } else { - frontendDiv.style.display = "none" - } - } -} - -function changeProtocolSettings() { - for (let i = 0; i < frontends.length; i++) { - const frontendDiv = document.getElementById(frontends[i]) - for (let x = 0; x < protocols.length; x++) { - const protocolDiv = frontendDiv.getElementsByClassName(protocols[x])[0] - if (protocols[x] == protocol) { - protocolDiv.style.display = "block" - } else { - protocolDiv.style.display = "none" - } - } - } -} - -browser.storage.local.get(["disableYoutubeMusic", "youtubeMusicFrontend", "protocol"], r => { - enable.checked = !r.disableYoutubeMusic - frontend.value = r.youtubeMusicFrontend - protocol = r.network - changeFrontendsSettings() - changeProtocolSettings() -}) - -youtubeMusic.addEventListener("change", () => { - browser.storage.local.set({ - disableYoutubeMusic: !enable.checked, - youtubeMusicFrontend: frontend.value, - }) - changeFrontendsSettings() -}) - -for (let i = 0; i < frontends.length; i++) { - for (let x = 0; x < protocols.length; x++) { - utils.processDefaultCustomInstances("youtubeMusic", frontends[i], protocols[x], document) - } - utils.latency("youtubeMusic", frontends[i], document, location) -} diff --git a/src/pages/popup/popup.ejs b/src/pages/popup/popup.ejs index 5b3bb026..e862e0cb 100644 --- a/src/pages/popup/popup.ejs +++ b/src/pages/popup/popup.ejs @@ -8,13 +8,13 @@
- <%- include('src/pages/widgets/switches', {config: {networks, services}}) -%> + <%- include('src/pages/widgets/switches', {services: services}) -%>

- <%- include('src/pages/widgets/switches', {config: {networks, services}}) -%> + <%- include('src/pages/widgets/switches', {services: services}) -%>

-
+

Unify Settings

diff --git a/src/pages/popup/popup.js b/src/pages/popup/popup.js index c28f2d94..098ae01a 100644 --- a/src/pages/popup/popup.js +++ b/src/pages/popup/popup.js @@ -56,27 +56,18 @@ await setDivs() const currentSiteIsFrontend = document.getElementById("current_site_divider") -function getEnabled() { - return new Promise(async resolve => { - for (const service in config.services) { - browser.storage.local.get(`${service}Enabled`, r => { - divs[service].toggle.all.checked = r[service + "Enabled"] - divs[service].toggle.current.checked = r[service + "Enabled"] - }) - } - resolve() - }) -} - -browser.storage.local.get("popupServices", r => { +browser.storage.local.get("options", r => { browser.tabs.query({ active: true, currentWindow: true }, async tabs => { for (const service in config.services) { - if (!r.popupServices.includes(service)) allSites.getElementsByClassName(service)[0].classList.add("hide") + if (!r.options.popupServices.includes(service)) allSites.getElementsByClassName(service)[0].classList.add("hide") else allSites.getElementsByClassName(service)[0].classList.remove("hide") currSite.getElementsByClassName(service)[0].classList.add("hide") } - await getEnabled() + for (const service in config.services) { + divs[service].toggle.all.checked = r.options[service].enabled + divs[service].toggle.current.checked = r.options[service].enabled + } let url try { @@ -113,13 +104,17 @@ browser.storage.local.get("popupServices", r => { for (const service in config.services) { divs[service].toggle.all.addEventListener("change", () => { - browser.storage.local.set({ - [service + "Enabled"]: divs[service].toggle.all.checked, + browser.storage.local.get("options", r => { + let options = r.options + options[service].enabled = divs[service].toggle.all.checked + browser.storage.local.set({ options }) }) }) divs[service].toggle.current.addEventListener("change", () => { - browser.storage.local.set({ - [service + "Enabled"]: divs[service].toggle.current.checked, + browser.storage.local.get("options", r => { + let options = r.options + options[service].enabled = divs[service].toggle.current.checked + browser.storage.local.set({ options }) }) }) } diff --git a/src/pages/widgets/switches.ejs b/src/pages/widgets/switches.ejs index 45bcd790..e3ffdae7 100644 --- a/src/pages/widgets/switches.ejs +++ b/src/pages/widgets/switches.ejs @@ -1,11 +1,11 @@ -<% for (const service in config.services) { -%> -
- <% if (config.services[service].imageType != "svgMono") { _%> - +<% for (const service in services) { -%> + <% } %> -- cgit 1.4.1 From 800d0cbd9fd4286f0affcb5a28f01f03532655fb Mon Sep 17 00:00:00 2001 From: Hygna Date: Wed, 28 Sep 2022 20:18:32 +0100 Subject: Unify cookies --- README.md | 14 ++--- package.json | 2 - src/assets/javascripts/general.js | 6 +- src/assets/javascripts/services.js | 41 ++++++++----- src/assets/javascripts/utils.js | 106 +++++++++++++++++----------------- src/config/config.json | 2 +- src/pages/background/background.js | 2 +- src/pages/options/index.html | 2 +- src/pages/options/init.js | 4 +- src/pages/options/widgets/general.ejs | 2 +- src/pages/popup/popup.html | 2 +- src/pages/popup/popup.js | 10 ++-- 12 files changed, 99 insertions(+), 94 deletions(-) (limited to 'src/pages/background') diff --git a/README.md b/README.md index 4de39765..2c06b0a2 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ Imgur => [Rimgo](https://codeberg.org/video-prize-ranch/rimgo)\ Wikipedia => [Wikiless](https://codeberg.org/orenom/wikiless)\ Medium => [Scribe](https://sr.ht/~edwardloveall/scribe/)\ Quora => [Quetre](https://github.com/zyachel/quetre)\ -IMDb => [Libremdb](https://github.com/zyachel/libremdb)\ +IMDb => [libremdb](https://github.com/zyachel/libremdb)\ PeerTube => [SimpleerTube](https://git.sr.ht/~metalune/simpleweb_peertube)\ LBRY/Odysee => [Librarian](https://codeberg.org/librarian/librarian), [LBRY Desktop](https://lbry.com/get)\ Search => [SearXNG](https://github.com/searxng/searxng), [SearX](https://searx.github.io/searx/), [Whoogle](https://benbusby.com/projects/whoogle-search/), [LibreX](https://github.com/hnhx/librex/)\ @@ -72,21 +72,19 @@ npm update npm install ``` -If you are modifying any files ending with .pug, the pug cli needs to be installed with the following command (with root privileges): +If you are modifying any files ending with .ejs, you need to run the following command to render html: ``` -npm install -g pug-cli +npm run ejs ``` -and then run `npm run pug` to generate pages in the background. - -### Build +### Build the extention zip archive: ``` npm run build ``` -### Test +### Run automated tests ``` npm run test @@ -120,4 +118,4 @@ select `load unpacked extension`\ select `src` folder [Privacy Policy](Privacy-Policy.md)\ -Credits: [Privacy Redirect](https://github.com/SimonBrazell/privacy-redirect) +Forked from [Privacy Redirect](https://github.com/SimonBrazell/privacy-redirect) diff --git a/package.json b/package.json index 76f57474..ec39aee4 100644 --- a/package.json +++ b/package.json @@ -9,8 +9,6 @@ "start": "web-ext run --browser-console --source-dir ./src/", "build": "web-ext build --overwrite-dest --source-dir ./src/", "test": "web-ext lint --source-dir ./src/ || true", - "pug": "pug ./src/pages/options/*.pug ./src/pages/popup/ -P -w", - "prettier": "npx prettier --write .", "instances": "python3 src/instances/get_instances.py; git update-index --assume-unchanged src/instances/blacklist.json src/instances/data.json", "ejs": "npx ejs src/pages/options/index.ejs -f src/config/config.json -o src/pages/options/index.html; npx ejs src/pages/popup/popup.ejs -f src/config/config.json -o src/pages/popup/popup.html" }, diff --git a/src/assets/javascripts/general.js b/src/assets/javascripts/general.js index 3a8987ac..9dcba752 100644 --- a/src/assets/javascripts/general.js +++ b/src/assets/javascripts/general.js @@ -11,8 +11,8 @@ function isException(url) { function init() { return new Promise(resolve => { - browser.storage.local.get("exceptions", r => { - exceptions = r.exceptions + browser.storage.local.get("options", r => { + exceptions = r.options.exceptions resolve() }) }) @@ -30,7 +30,7 @@ async function initDefaults() { url: [], regex: [], }, - theme: "DEFAULT", + theme: "detect", popupServices: ["youtube", "twitter", "instagram", "tiktok", "imgur", "reddit", "quora", "translate", "maps"], autoRedirect: false, firstPartyIsolate: false, diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js index 9fc5a0a3..3db12595 100644 --- a/src/assets/javascripts/services.js +++ b/src/assets/javascripts/services.js @@ -19,25 +19,28 @@ function init() { return new Promise(async resolve => { // await getConfig() browser.storage.local.get(["options", "targets", "redirects", "blacklists"], r => { - blacklists = r.blacklists - redirects = r.redirects - targets = r.targets - options = r.options + if (r.options) { + blacklists = r.blacklists + redirects = r.redirects + targets = r.targets + options = r.options + } resolve() }) }) } -await init() await getConfig() +await init() function fetchFrontendInstanceList(service, frontend) { let tmp = [] - if (!config.services[service].frontends[frontend].singleInstance) { + if (config.services[service].frontends[frontend].instanceList) { for (const network in config.networks) { + if (!redirects[frontend]) console.log(frontend) tmp.push(...redirects[frontend][network], ...options[frontend][network].custom) } - } else if (config.services[service].frontends[frontend].singleInstance != undefined) tmp = config.services[service].frontends[frontend].singleInstance + } else if (config.services[service].frontends[frontend].singleInstance) tmp = config.services[service].frontends[frontend].singleInstance return tmp } @@ -58,8 +61,8 @@ function all(service, frontend) { function regexArray(service, url) { let targets if (config.services[service].targets == "datajson") { - browser.storage.local.get(`${service}Targets`, r => { - targets = r[service + "Targets"] + browser.storage.local.get("targets", r => { + targets = r.targets[service] }) } else { targets = config.services[service].targets @@ -397,8 +400,10 @@ function initDefaults() { let redirects = JSON.parse(data) let options = r.options let targets = {} + // let latency = {} for (const service in config.services) { options[service] = {} + // latency[service] = {} if (config.services[service].targets == "datajson") { targets[service] = redirects[service] //delete dataJson[service] @@ -423,19 +428,25 @@ function initDefaults() { } } } - browser.storage.local.set({ redirects, options, targets }) + browser.storage.local.set({ redirects, options, targets /*, latency*/ }) resolve() }) }) }) } -function computeService(url) { +function computeService(url, returnFrontend) { for (const service in config.services) { if (regexArray(service, url)) { - return service - } else if (all(service).includes(utils.protocolHost(url))) { - return service + 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 + } + } } } return null @@ -524,7 +535,7 @@ function unifyPreferences(url) { const frontend = config.services[currentService].frontends[currentFrontend] if ("cookies" in frontend.preferences) { - for (const cookie in frontend.preferences.cookies) { + for (const cookie of frontend.preferences.cookies) { await utils.copyCookie(currentFrontend, url, instancesList, cookie) } } diff --git a/src/assets/javascripts/utils.js b/src/assets/javascripts/utils.js index 0e8acb3c..70a93240 100644 --- a/src/assets/javascripts/utils.js +++ b/src/assets/javascripts/utils.js @@ -111,29 +111,27 @@ function protocolHost(url) { return `${url.protocol}//${url.host}` } -async function processDefaultCustomInstances(target, name, protocol, document) { - let latencyKey = `${name}Latency` +async function processDefaultCustomInstances(service, name, network, document) { let instancesLatency - let nameProtocolElement = document.getElementById(name).getElementsByClassName(protocol)[0] + let nameNetworkElement = document.getElementById(name).getElementsByClassName(network)[0] let nameCustomInstances = [] - let nameCheckListElement = nameProtocolElement.getElementsByClassName("checklist")[0] + let nameCheckListElement = nameNetworkElement.getElementsByClassName("checklist")[0] await initBlackList() let nameDefaultRedirects - let redirectsChecks = `${name}${camelCase(protocol)}RedirectsChecks` - let customRedirects = `${name}${camelCase(protocol)}CustomRedirects` - - let redirects + let redirects, options async function getFromStorage() { return new Promise(async resolve => - browser.storage.local.get([redirectsChecks, customRedirects, "redirects", latencyKey], r => { - nameDefaultRedirects = r[redirectsChecks] - nameCustomInstances = r[customRedirects] - instancesLatency = r[latencyKey] ?? [] + browser.storage.local.get(["options", "redirects", "latency"], r => { + nameDefaultRedirects = r.options[name][network].enabled + nameCustomInstances = r.options[name][network].custom + options = r.options + if (r.latency) instancesLatency = r.latency[name] ?? [] + else instancesLatency = [] redirects = r.redirects resolve() }) @@ -141,12 +139,11 @@ async function processDefaultCustomInstances(target, name, protocol, document) { } await getFromStorage() - if (nameCustomInstances === undefined) console.log(customRedirects) function calcNameCheckBoxes() { let isTrue = true - for (const item of redirects[name][protocol]) { - if (nameDefaultRedirects === undefined) console.log(name + protocol + " is undefined") + for (const item of redirects[name][network]) { + if (nameDefaultRedirects === undefined) console.log(name + network + " is undefined") if (!nameDefaultRedirects.includes(item)) { isTrue = false break @@ -156,14 +153,14 @@ async function processDefaultCustomInstances(target, name, protocol, document) { element.checked = nameDefaultRedirects.includes(element.className) } if (nameDefaultRedirects.length == 0) isTrue = false - nameProtocolElement.getElementsByClassName("toggle-all")[0].checked = isTrue + nameNetworkElement.getElementsByClassName("toggle-all")[0].checked = isTrue } nameCheckListElement.innerHTML = [ `
Toggle All
`, - ...redirects[name][protocol].map(x => { + ...redirects[name][network].map(x => { const cloudflare = cloudflareBlackList.includes(x) ? ' cloudflare' : "" const authenticate = authenticateBlackList.includes(x) ? ' authenticate' : "" const offline = offlineBlackList.includes(x) ? ' offline' : "" @@ -188,31 +185,32 @@ async function processDefaultCustomInstances(target, name, protocol, document) { localise.localisePage() calcNameCheckBoxes() - nameProtocolElement.getElementsByClassName("toggle-all")[0].addEventListener("change", async event => { - if (event.target.checked) nameDefaultRedirects = [...redirects[name][protocol]] + nameNetworkElement.getElementsByClassName("toggle-all")[0].addEventListener("change", async event => { + if (event.service.checked) nameDefaultRedirects = [...redirects[name][network]] else nameDefaultRedirects = [] - browser.storage.local.set({ [redirectsChecks]: nameDefaultRedirects }) + options[service][network].enabled = nameDefaultRedirects + browser.storage.local.set({ options }) calcNameCheckBoxes() }) for (let element of nameCheckListElement.getElementsByTagName("input")) { if (element.className != "toggle-all") - nameProtocolElement.getElementsByClassName(element.className)[0].addEventListener("change", async event => { - if (event.target.checked) nameDefaultRedirects.push(element.className) + nameNetworkElement.getElementsByClassName(element.className)[0].addEventListener("change", async event => { + if (event.service.checked) nameDefaultRedirects.push(element.className) else { let index = nameDefaultRedirects.indexOf(element.className) if (index > -1) nameDefaultRedirects.splice(index, 1) } - browser.storage.local.set({ - [redirectsChecks]: nameDefaultRedirects, - }) + + options[service][network].enabled = nameDefaultRedirects + browser.storage.local.set({ options }) calcNameCheckBoxes() }) } function calcNameCustomInstances() { - nameProtocolElement.getElementsByClassName("custom-checklist")[0].innerHTML = nameCustomInstances + nameNetworkElement.getElementsByClassName("custom-checklist")[0].innerHTML = nameCustomInstances .map( x => `
${x} @@ -227,24 +225,26 @@ async function processDefaultCustomInstances(target, name, protocol, document) { .join("\n") for (const item of nameCustomInstances) { - nameProtocolElement.getElementsByClassName(`clear-${item}`)[0].addEventListener("click", async () => { + nameNetworkElement.getElementsByClassName(`clear-${item}`)[0].addEventListener("click", async () => { let index = nameCustomInstances.indexOf(item) if (index > -1) nameCustomInstances.splice(index, 1) - browser.storage.local.set({ [customRedirects]: nameCustomInstances }) + options[service][network].custom = nameCustomInstances + browser.storage.local.set({ options }) calcNameCustomInstances() }) } } calcNameCustomInstances() - nameProtocolElement.getElementsByClassName("custom-instance-form")[0].addEventListener("submit", async event => { + nameNetworkElement.getElementsByClassName("custom-instance-form")[0].addEventListener("submit", async event => { event.preventDefault() - let nameCustomInstanceInput = nameProtocolElement.getElementsByClassName("custom-instance")[0] + let nameCustomInstanceInput = nameNetworkElement.getElementsByClassName("custom-instance")[0] let url = new URL(nameCustomInstanceInput.value) let protocolHostVar = protocolHost(url) - if (nameCustomInstanceInput.validity.valid && !redirects[name][protocol].includes(protocolHostVar)) { + if (nameCustomInstanceInput.validity.valid && !redirects[name][network].includes(protocolHostVar)) { if (!nameCustomInstances.includes(protocolHostVar)) { nameCustomInstances.push(protocolHostVar) - browser.storage.local.set({ [customRedirects]: nameCustomInstances }) + options[service][network].custom = nameCustomInstances + browser.storage.local.set({ options }) nameCustomInstanceInput.value = "" } calcNameCustomInstances() @@ -299,9 +299,9 @@ async function testLatency(element, instances, frontend) { let myList = {} let latencyThreshold let redirectsChecks = [] - browser.storage.local.get(["latencyThreshold", `${frontend}ClearnetRedirectsChecks`], r => { - latencyThreshold = r.latencyThreshold - redirectsChecks = r[`${frontend}ClearnetRedirectsChecks`] + browser.storage.local.get(["options"], r => { + latencyThreshold = r.options.latencyThreshold + redirectsChecks = r.options[frontend].clearnet.enabled }) for (const href of instances) await ping(href).then(time => { @@ -331,9 +331,9 @@ async function testLatency(element, instances, frontend) { function copyCookie(frontend, targetUrl, urls, name) { return new Promise(resolve => { - browser.storage.local.get("firstPartyIsolate", r => { + browser.storage.local.get("options", r => { let query - if (!r.firstPartyIsolate) + if (!r.options.firstPartyIsolate) query = { url: protocolHost(targetUrl), name: name, @@ -348,7 +348,7 @@ function copyCookie(frontend, targetUrl, urls, name) { for (const cookie of cookies) if (cookie.name == name) { for (const url of urls) { - const setQuery = r.firstPartyIsolate + const setQuery = r.options.firstPartyIsolate ? { url: url, name: name, @@ -375,23 +375,21 @@ function copyCookie(frontend, targetUrl, urls, name) { function getPreferencesFromToken(frontend, targetUrl, urls, name, endpoint) { return new Promise(resolve => { - browser.storage.local.get("firstPartyIsolate", r => { + const http = new XMLHttpRequest() + const url = `${targetUrl}${endpoint}` + http.open("GET", url, false) + //http.setRequestHeader("Cookie", `${name}=${cookie.value}`) + http.send(null) + const preferences = JSON.parse(http.responseText) + let formdata = new FormData() + for (var key in preferences) formdata.append(key, preferences[key]) + for (const url of urls) { const http = new XMLHttpRequest() - const url = `${targetUrl}${endpoint}` - http.open("GET", url, false) - http.setRequestHeader("Cookie", `${name}=${cookie.value}`) + http.open("POST", `${url}/settings/stay`, false) http.send(null) - const preferences = JSON.parse(http.responseText) - let formdata = new FormData() - for (var key in preferences) formdata.append(key, preferences[key]) - for (const url of urls) { - const http = new XMLHttpRequest() - http.open("POST", `${url}/settings/stay`, false) - http.send(null) - } - resolve() - return - }) + } + resolve() + return }) } @@ -427,7 +425,7 @@ function copyRaw(test, copyRawElement) { }) } -function unify(test) { +function unify() { return new Promise(resolve => { browser.tabs.query({ active: true, currentWindow: true }, async tabs => { let currTab = tabs[0] diff --git a/src/config/config.json b/src/config/config.json index 09774895..6f926034 100644 --- a/src/config/config.json +++ b/src/config/config.json @@ -184,7 +184,7 @@ "instanceList": true } }, - "targets": ["^https?:\\/{2}(www\\.)?instagram\\.com"], + "targets": ["^https?:\\/{2}(www\\.)?instagram\\.com\\/p\\/"], "name": "Instagram", "options": { "enabled": true }, "imageType": "png", diff --git a/src/pages/background/background.js b/src/pages/background/background.js index 241b51de..e9bf691f 100644 --- a/src/pages/background/background.js +++ b/src/pages/background/background.js @@ -121,7 +121,7 @@ async function redirectOfflineInstance(url, tabId) { let counter = 0 function isAutoRedirect() { - return new Promise(resolve => browser.storage.local.get("autoRedirect", r => resolve(r.autoRedirect == true))) + return new Promise(resolve => browser.storage.local.get("options", r => resolve(r.options.autoRedirect == true))) } browser.webRequest.onResponseStarted.addListener( diff --git a/src/pages/options/index.html b/src/pages/options/index.html index 20592637..6ef33723 100644 --- a/src/pages/options/index.html +++ b/src/pages/options/index.html @@ -99,7 +99,7 @@

Theme

diff --git a/src/pages/options/init.js b/src/pages/options/init.js index 5b679da4..cac23748 100644 --- a/src/pages/options/init.js +++ b/src/pages/options/init.js @@ -4,8 +4,8 @@ import localise from "../../assets/javascripts/localise.js" function changeTheme() { return new Promise(resolve => { - browser.storage.local.get("theme", r => { - switch (r.theme) { + browser.storage.local.get("options", r => { + switch (r.options.theme) { case "dark": document.body.classList.add("dark-theme") document.body.classList.remove("light-theme") diff --git a/src/pages/options/widgets/general.ejs b/src/pages/options/widgets/general.ejs index fa85e8bc..8f7ab029 100644 --- a/src/pages/options/widgets/general.ejs +++ b/src/pages/options/widgets/general.ejs @@ -6,7 +6,7 @@

Theme

diff --git a/src/pages/popup/popup.html b/src/pages/popup/popup.html index e21a63a0..d52a34b6 100644 --- a/src/pages/popup/popup.html +++ b/src/pages/popup/popup.html @@ -241,7 +241,7 @@
-
+

Unify Settings

diff --git a/src/pages/popup/popup.js b/src/pages/popup/popup.js index 098ae01a..5a5ccb53 100644 --- a/src/pages/popup/popup.js +++ b/src/pages/popup/popup.js @@ -78,11 +78,11 @@ browser.storage.local.get("options", r => { return } - const currentService = serviceHelper.computeService(url) - if (currentService != null) { - divs[currentService].current.classList.remove("hide") - divs[currentService].all.classList.add("hide") - if (config.services[currentService].preferences != undefined) { + const [service, frontend] = serviceHelper.computeService(url, true) + if (service) { + divs[service].current.classList.remove("hide") + divs[service].all.classList.add("hide") + if (config.services[service].frontends[frontend].preferences) { const unify = document.getElementById("unify") const textElement = document.getElementById("unify").getElementsByTagName("h4")[0] unify.addEventListener("click", () => { -- cgit 1.4.1 From 18facf37a2f058b1314f5fd3a1f9d36c70ba27f5 Mon Sep 17 00:00:00 2001 From: Hygna Date: Fri, 30 Sep 2022 14:54:56 +0100 Subject: Squashed a few bugs --- src/assets/images/sendTargets-icon.svg | 3 - src/assets/javascripts/services.js | 36 +++++++--- src/assets/javascripts/utils.js | 124 ++++++++++++++++----------------- src/config/config.json | 19 ++--- src/pages/background/background.js | 30 ++++---- src/pages/options/index.html | 14 ++-- src/pages/options/widgets/general.js | 2 +- src/pages/options/widgets/services.js | 2 +- src/pages/popup/popup.html | 20 +++--- 9 files changed, 131 insertions(+), 119 deletions(-) delete mode 100644 src/assets/images/sendTargets-icon.svg (limited to 'src/pages/background') diff --git a/src/assets/images/sendTargets-icon.svg b/src/assets/images/sendTargets-icon.svg deleted file mode 100644 index 5557664e..00000000 --- a/src/assets/images/sendTargets-icon.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js index 49af6d1f..404962ee 100644 --- a/src/assets/javascripts/services.js +++ b/src/assets/javascripts/services.js @@ -391,7 +391,7 @@ function redirect(url, type, initiator) { } } -function initDefaults() { +async function initDefaults() { return new Promise(async resolve => { fetch("/instances/data.json") .then(response => response.text()) @@ -400,13 +400,12 @@ function initDefaults() { let redirects = JSON.parse(data) let options = r.options let targets = {} - // let latency = {} + const localstorage = {} + const latency = {} for (const service in config.services) { options[service] = {} - // latency[service] = {} if (config.services[service].targets == "datajson") { targets[service] = redirects[service] - //delete dataJson[service] } for (const defaultOption in config.services[service].options) { options[service][defaultOption] = config.services[service].options[defaultOption] @@ -416,11 +415,11 @@ function initDefaults() { options[frontend] = {} for (const network in config.networks) { options[frontend][network] = {} - options[frontend][network].enabled = redirects[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 blacklist) { + 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) } @@ -428,7 +427,7 @@ function initDefaults() { } } } - browser.storage.local.set({ redirects, options, targets /*, latency*/ }) + browser.storage.local.set({ redirects, options, targets, latency, localstorage }) resolve() }) }) @@ -449,7 +448,8 @@ function computeService(url, returnFrontend) { } } } - return null + if (returnFrontend) return [null, null] + else return null } function switchInstance(url) { @@ -515,7 +515,7 @@ function reverse(url) { }) } -function unifyPreferences(url) { +function unifyPreferences(url, tabId) { return new Promise(async resolve => { // await init() // await getConfig() @@ -539,7 +539,23 @@ function unifyPreferences(url) { await utils.copyCookie(currentFrontend, url, instancesList, cookie) } } - if ("localStorage" in frontend.preferences) { + if ("localstorage" in frontend.preferences) { + browser.tabs.executeScript(tabId, { + code: "const frontend = " + frontend, + code: "const items = " + config.services[currentService].frontends[currentFrontend].preferences.localStorage, + //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, { + code: "const frontend = " + frontend, + code: "const items = " + config.services[currentService].frontends[currentFrontend].preferences.localStorage, + file: "/assets/javascripts/set-localstorage.js", + runAt: "document_start", + }) + ) } if ("indexeddb" in frontend.preferences) { } diff --git a/src/assets/javascripts/utils.js b/src/assets/javascripts/utils.js index 186fae43..a1c559df 100644 --- a/src/assets/javascripts/utils.js +++ b/src/assets/javascripts/utils.js @@ -59,27 +59,26 @@ function protocolHost(url) { return `${url.protocol}//${url.host}` } -async function processDefaultCustomInstances(service, name, network, document) { +async function processDefaultCustomInstances(service, frontend, network, document) { let instancesLatency - let nameNetworkElement = document.getElementById(name).getElementsByClassName(network)[0] + let frontendNetworkElement = document.getElementById(frontend).getElementsByClassName(network)[0] - let nameCustomInstances = [] - let nameCheckListElement = nameNetworkElement.getElementsByClassName("checklist")[0] + let frontendCustomInstances = [] + let frontendCheckListElement = frontendNetworkElement.getElementsByClassName("checklist")[0] await initBlackList() - let nameDefaultRedirects + let frontendDefaultRedirects let redirects, options async function getFromStorage() { return new Promise(async resolve => browser.storage.local.get(["options", "redirects", "latency"], r => { - nameDefaultRedirects = r.options[name][network].enabled - nameCustomInstances = r.options[name][network].custom + frontendDefaultRedirects = r.options[frontend][network].enabled + frontendCustomInstances = r.options[frontend][network].custom options = r.options - if (r.latency) instancesLatency = r.latency[name] ?? [] - else instancesLatency = [] + instancesLatency = r.latency[frontend] ?? [] redirects = r.redirects resolve() }) @@ -88,27 +87,26 @@ async function processDefaultCustomInstances(service, name, network, document) { await getFromStorage() - function calcNameCheckBoxes() { + function calcFrontendCheckBoxes() { let isTrue = true - for (const item of redirects[name][network]) { - if (nameDefaultRedirects === undefined) console.log(name + network + " is undefined") - if (!nameDefaultRedirects.includes(item)) { + for (const item of redirects[frontend][network]) { + if (!frontendDefaultRedirects.includes(item)) { isTrue = false break } } - for (const element of nameCheckListElement.getElementsByTagName("input")) { - element.checked = nameDefaultRedirects.includes(element.className) + for (const element of frontendCheckListElement.getElementsByTagName("input")) { + element.checked = frontendDefaultRedirects.includes(element.className) } - if (nameDefaultRedirects.length == 0) isTrue = false - nameNetworkElement.getElementsByClassName("toggle-all")[0].checked = isTrue + if (frontendDefaultRedirects.length == 0) isTrue = false + frontendNetworkElement.getElementsByClassName("toggle-all")[0].checked = isTrue } - nameCheckListElement.innerHTML = [ + frontendCheckListElement.innerHTML = [ `
Toggle All
`, - ...redirects[name][network].map(x => { + ...redirects[frontend][network].map(x => { const cloudflare = cloudflareBlackList.includes(x) ? ' cloudflare' : "" const authenticate = authenticateBlackList.includes(x) ? ' authenticate' : "" const offline = offlineBlackList.includes(x) ? ' offline' : "" @@ -132,33 +130,33 @@ async function processDefaultCustomInstances(service, name, network, document) { localise.localisePage() - calcNameCheckBoxes() - nameNetworkElement.getElementsByClassName("toggle-all")[0].addEventListener("change", async event => { - if (event.service.checked) nameDefaultRedirects = [...redirects[name][network]] - else nameDefaultRedirects = [] + calcFrontendCheckBoxes() + frontendNetworkElement.getElementsByClassName("toggle-all")[0].addEventListener("change", async event => { + if (event.target.checked) frontendDefaultRedirects = [...redirects[frontend][network]] + else frontendDefaultRedirects = [] - options[service][network].enabled = nameDefaultRedirects + options[frontend][network].enabled = frontendDefaultRedirects browser.storage.local.set({ options }) - calcNameCheckBoxes() + calcFrontendCheckBoxes() }) - for (let element of nameCheckListElement.getElementsByTagName("input")) { + for (let element of frontendCheckListElement.getElementsByTagName("input")) { if (element.className != "toggle-all") - nameNetworkElement.getElementsByClassName(element.className)[0].addEventListener("change", async event => { - if (event.service.checked) nameDefaultRedirects.push(element.className) + frontendNetworkElement.getElementsByClassName(element.className)[0].addEventListener("change", async event => { + if (event.target.checked) frontendDefaultRedirects.push(element.className) else { - let index = nameDefaultRedirects.indexOf(element.className) - if (index > -1) nameDefaultRedirects.splice(index, 1) + let index = frontendDefaultRedirects.indexOf(element.className) + if (index > -1) frontendDefaultRedirects.splice(index, 1) } - options[service][network].enabled = nameDefaultRedirects + options[frontend][network].enabled = frontendDefaultRedirects browser.storage.local.set({ options }) - calcNameCheckBoxes() + calcFrontendCheckBoxes() }) } - function calcNameCustomInstances() { - nameNetworkElement.getElementsByClassName("custom-checklist")[0].innerHTML = nameCustomInstances + function calcFrontendCustomInstances() { + frontendNetworkElement.getElementsByClassName("custom-checklist")[0].innerHTML = frontendCustomInstances .map( x => `
${x} @@ -172,30 +170,30 @@ async function processDefaultCustomInstances(service, name, network, document) { ) .join("\n") - for (const item of nameCustomInstances) { - nameNetworkElement.getElementsByClassName(`clear-${item}`)[0].addEventListener("click", async () => { - let index = nameCustomInstances.indexOf(item) - if (index > -1) nameCustomInstances.splice(index, 1) - options[service][network].custom = nameCustomInstances + for (const item of frontendCustomInstances) { + frontendNetworkElement.getElementsByClassName(`clear-${item}`)[0].addEventListener("click", async () => { + let index = frontendCustomInstances.indexOf(item) + if (index > -1) frontendCustomInstances.splice(index, 1) + options[frontend][network].custom = frontendCustomInstances browser.storage.local.set({ options }) - calcNameCustomInstances() + calcFrontendCustomInstances() }) } } - calcNameCustomInstances() - nameNetworkElement.getElementsByClassName("custom-instance-form")[0].addEventListener("submit", async event => { + calcFrontendCustomInstances() + frontendNetworkElement.getElementsByClassName("custom-instance-form")[0].addEventListener("submit", async event => { event.preventDefault() - let nameCustomInstanceInput = nameNetworkElement.getElementsByClassName("custom-instance")[0] - let url = new URL(nameCustomInstanceInput.value) + let frontendCustomInstanceInput = frontendNetworkElement.getElementsByClassName("custom-instance")[0] + let url = new URL(frontendCustomInstanceInput.value) let protocolHostVar = protocolHost(url) - if (nameCustomInstanceInput.validity.valid && !redirects[name][network].includes(protocolHostVar)) { - if (!nameCustomInstances.includes(protocolHostVar)) { - nameCustomInstances.push(protocolHostVar) - options[service][network].custom = nameCustomInstances + if (frontendCustomInstanceInput.validity.valid && !redirects[frontend][network].includes(protocolHostVar)) { + if (!frontendCustomInstances.includes(protocolHostVar)) { + frontendCustomInstances.push(protocolHostVar) + options[frontend][network].custom = frontendCustomInstances browser.storage.local.set({ options }) - nameCustomInstanceInput.value = "" + frontendCustomInstanceInput.value = "" } - calcNameCustomInstances() + calcFrontendCustomInstances() } }) } @@ -245,11 +243,12 @@ function pingOnce(href) { async function testLatency(element, instances, frontend) { return new Promise(async resolve => { let myList = {} - let latencyThreshold - let redirectsChecks = [] + let latencyThreshold, options + //let redirectsChecks = [] browser.storage.local.get(["options"], r => { latencyThreshold = r.options.latencyThreshold - redirectsChecks = r.options[frontend].clearnet.enabled + //redirectsChecks = r.options[frontend].clearnet.enabled + options = r.options }) for (const href of instances) await ping(href).then(time => { @@ -261,11 +260,9 @@ async function testLatency(element, instances, frontend) { else color = "red" if (time > latencyThreshold) { - redirectsChecks.splice(redirectsChecks.indexOf(href), 1) + options[frontend].clearnet.enabled.splice(options[frontend].clearnet.enabled.indexOf(href), 1) } - browser.storage.local.set({ [`${frontend}ClearnetRedirectsChecks`]: redirectsChecks }) - let text if (time == 5000) text = "5000ms+" else if (time > 5000) text = `ERROR: ${time - 5000}` @@ -273,6 +270,7 @@ async function testLatency(element, instances, frontend) { element.innerHTML = `${href}: ${text}` } }) + browser.storage.local.set({ options }) resolve(myList) }) } @@ -386,7 +384,7 @@ function unify() { return } - let result = await servicesHelper.unifyPreferences(url) + let result = await servicesHelper.unifyPreferences(url, currTab.id) resolve(result) } @@ -417,21 +415,21 @@ function switchInstance(test) { }) } -function latency(name, frontend, document, location) { +function latency(service, frontend, document, location) { let latencyElement = document.getElementById(`latency-${frontend}`) let latencyLabel = document.getElementById(`latency-${frontend}-label`) latencyElement.addEventListener("click", async () => { let reloadWindow = () => location.reload() latencyElement.addEventListener("click", reloadWindow) - let key = `${name} Redirects` - browser.storage.local.get(key, r => { - let redirects = r[key] + browser.storage.local.get(["redirects", "latency"], r => { + let redirects = r.redirects const oldHtml = latencyLabel.innerHTML latencyLabel.innerHTML = "..." testLatency(latencyLabel, redirects[frontend].clearnet, frontend).then(r => { - browser.storage.local.set({ [`${frontend}Latency`]: r }) + latency[frontend] = r + browser.storage.local.set({ latency }) latencyLabel.innerHTML = oldHtml - processDefaultCustomInstances(name, frontend, "clearnet", document) + processDefaultCustomInstances(service, frontend, "clearnet", document) latencyElement.removeEventListener("click", reloadWindow) }) }) diff --git a/src/config/config.json b/src/config/config.json index e2b511b9..b15c20d4 100644 --- a/src/config/config.json +++ b/src/config/config.json @@ -48,7 +48,8 @@ "sponsorblock", "theme", "volume", - "watchHistory" + "watchHistory", + "localSubscriptions" ] }, "name": "Piped", @@ -490,13 +491,13 @@ }, "lingva": { "preferences": { - "localstorage": ["isauto", "source", "target"] + "localstorage": ["isauto", "source", "target", "chakra-ui-color-mode"] }, - "name": "Lingva", + "name": "Lingva Translate", "instanceList": true } }, - "targets": ["^https?:\\/{2}translate\\.google(\\.[a-z]{2,3}){1,2}\\/"], + "targets": ["^https?:\\/{2}translate\\.google(\\.[a-z]{2,3}){1,2}\\/", "^https?:\\/{2}translate\\.libredirect\\.invalid"], "name": "Translate", "options": { "enabled": true, @@ -504,7 +505,7 @@ }, "imageType": "svgMono", "embeddable": false, - "url": "https://translate.google.com" + "url": "https://translate.libredirect.invalid" }, "maps": { "frontends": { @@ -518,7 +519,7 @@ "singleInstance": "https://www.openstreetmap.org" } }, - "targets": ["^https?:\\/{2}(((www|maps)\\.)?(google\\.).*(\\/maps)|maps\\.(google\\.).*)"], + "targets": ["^https?:\\/{2}maps\\.libredirect\\.invalid", "^https?:\\/{2}(((www|maps)\\.)?(google\\.).*(\\/maps)|maps\\.(google\\.).*)"], "name": "Maps", "options": { "enabled": true, @@ -526,16 +527,16 @@ }, "imageType": "svgMono", "embeddable": false, - "url": "https://maps.google.com" + "url": "https://maps.libredirect.invalid" }, - "sendTargets": { + "uploadFiles": { "frontends": { "send": { "name": "Send", "instanceList": "true" } }, - "targets": ["^https?:\\/{2}send\\.libredirect\\.invalid\\/?$", "^https?:\\/{2}send\\.firefox\\.com\\/?$", "^https?:\\/{2}sendfiles\\.online\\/?$"], + "targets": ["^https?:\\/{2}send\\.libredirect\\.invalid", "^https?:\\/{2}send\\.firefox\\.com\\/?$", "^https?:\\/{2}sendfiles\\.online\\/?$"], "name": "Send Files", "options": { "enabled": true }, "imageType": "svgMono", diff --git a/src/pages/background/background.js b/src/pages/background/background.js index e9bf691f..3a900609 100644 --- a/src/pages/background/background.js +++ b/src/pages/background/background.js @@ -6,20 +6,7 @@ import servicesHelper from "../../assets/javascripts/services.js" window.browser = window.browser || window.chrome -browser.runtime.onInstalled.addListener(details => { - function initDefaults() { - fetch("/instances/blacklist.json") - .then(response => response.text()) - .then(async data => { - browser.storage.local.clear(() => { - browser.storage.local.set({ blacklists: JSON.parse(data) }, () => { - generalHelper.initDefaults() - servicesHelper.initDefaults() - }) - }) - }) - } - +browser.runtime.onInstalled.addListener(async details => { // if (details.reason == 'install' || (details.reason == "update" && details.previousVersion != browser.runtime.getManifest().version)) { // if (details.reason == "update") // browser.storage.local.get(null, r => { @@ -38,12 +25,25 @@ browser.runtime.onInstalled.addListener(details => { case "update": switch (details.previousVersion) { case "2.2.1": - //do stuff + initDefaults() 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 servicesHelper.initDefaults() + }) + }) + }) +} + let BYPASSTABs = [] browser.webRequest.onBeforeRequest.addListener( details => { diff --git a/src/pages/options/index.html b/src/pages/options/index.html index 6ef33723..71d04fd0 100644 --- a/src/pages/options/index.html +++ b/src/pages/options/index.html @@ -84,7 +84,7 @@ - Send Files
+ Send Files
@@ -318,9 +318,9 @@ - Send Files + Send Files
- +
@@ -2818,7 +2818,7 @@

Frontend

@@ -3134,14 +3134,14 @@
-
+
-

Send Files

+

Send Files


Enable

- +

diff --git a/src/pages/options/widgets/general.js b/src/pages/options/widgets/general.js index 23ed73ee..cd5cfb47 100644 --- a/src/pages/options/widgets/general.js +++ b/src/pages/options/widgets/general.js @@ -37,7 +37,6 @@ function setOption(option, multiChoice, event) { browser.storage.local.get("options", r => { let options = r.options if (multiChoice) { - console.log(event.target.options) options[option] = event.target.options[event.target.options.selectedIndex].value } else { options[option] = event.target.checked @@ -95,6 +94,7 @@ resetSettings.addEventListener("click", async () => { .then(response => response.text()) .then(async data => { browser.storage.local.set({ blacklists: JSON.parse(data) }, async () => { + await generalHelper.initDefaults() await servicesHelper.initDefaults() location.reload() }) diff --git a/src/pages/options/widgets/services.js b/src/pages/options/widgets/services.js index 873950f3..98e068a1 100644 --- a/src/pages/options/widgets/services.js +++ b/src/pages/options/widgets/services.js @@ -77,7 +77,7 @@ function changeNetworkSettings() { changeNetworkSettings() for (const service in config.services) { divs[service] = {} - divs[service][service] = document.getElementById(`${service}_page`) + //divs[service].page = document.getElementById(`${service}_page`) for (const option in config.services[service].options) { divs[service][option] = document.getElementById(`${service}-${option}`) diff --git a/src/pages/popup/popup.html b/src/pages/popup/popup.html index d52a34b6..56e4ca14 100644 --- a/src/pages/popup/popup.html +++ b/src/pages/popup/popup.html @@ -91,7 +91,7 @@

Search

-
+ -
+ -
+
-

Send Files

- +

Send Files

+
@@ -204,7 +204,7 @@

Search

-
+ -
+ -
+
-

Send Files

- +

Send Files

+
-- cgit 1.4.1 From e21ecb4e1d640add426865d5719ba8cd63eab977 Mon Sep 17 00:00:00 2001 From: Hygna Date: Sat, 1 Oct 2022 11:17:32 +0100 Subject: Unify Localstorage --- src/assets/images/uploadFiles-icon.svg | 3 ++ src/assets/javascripts/get-localstorage.js | 15 ++++++ src/assets/javascripts/init.js | 60 +++++++++++++++++++++++ src/assets/javascripts/services.js | 76 ++++-------------------------- src/assets/javascripts/set-localstorage.js | 13 +++++ src/assets/javascripts/utils.js | 14 ++++-- src/pages/background/background.js | 3 +- src/pages/options/index.html | 8 ++-- src/pages/options/widgets/about.ejs | 8 ++-- src/pages/options/widgets/services.js | 2 +- 10 files changed, 119 insertions(+), 83 deletions(-) create mode 100644 src/assets/images/uploadFiles-icon.svg create mode 100644 src/assets/javascripts/get-localstorage.js create mode 100644 src/assets/javascripts/init.js create mode 100644 src/assets/javascripts/set-localstorage.js (limited to 'src/pages/background') diff --git a/src/assets/images/uploadFiles-icon.svg b/src/assets/images/uploadFiles-icon.svg new file mode 100644 index 00000000..5557664e --- /dev/null +++ b/src/assets/images/uploadFiles-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/javascripts/get-localstorage.js b/src/assets/javascripts/get-localstorage.js new file mode 100644 index 00000000..66740408 --- /dev/null +++ b/src/assets/javascripts/get-localstorage.js @@ -0,0 +1,15 @@ +window.browser = window.browser || window.chrome + +browser.storage.local.get(["localstorage", "tmp"], r => { + let localstorageJson = r.localstorage + const frontend = r.tmp[0] + const items = r.tmp[1] + localstorageJson[frontend] = {} + + for (const item of items) { + let tmp = localStorage.getItem(item) + if (tmp) localstorageJson[frontend][item] = tmp + } + + browser.storage.local.set({ localstorage: localstorageJson }) +}) diff --git a/src/assets/javascripts/init.js b/src/assets/javascripts/init.js new file mode 100644 index 00000000..c6758530 --- /dev/null +++ b/src/assets/javascripts/init.js @@ -0,0 +1,60 @@ +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 = [] + } + 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() + }) + }) + }) +} + +export default { + initDefaults, +} diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js index 404962ee..718b3f5e 100644 --- a/src/assets/javascripts/services.js +++ b/src/assets/javascripts/services.js @@ -2,7 +2,7 @@ window.browser = window.browser || window.chrome import utils from "./utils.js" -let config, redirects, options, targets, blacklists +let config, redirects, options, blacklists async function getConfig() { return new Promise(resolve => { @@ -17,12 +17,10 @@ async function getConfig() { function init() { return new Promise(async resolve => { - // await getConfig() - browser.storage.local.get(["options", "targets", "redirects", "blacklists"], r => { + browser.storage.local.get(["options", "redirects", "blacklists"], r => { if (r.options) { blacklists = r.blacklists redirects = r.redirects - targets = r.targets options = r.options } resolve() @@ -37,7 +35,6 @@ function fetchFrontendInstanceList(service, frontend) { let tmp = [] if (config.services[service].frontends[frontend].instanceList) { for (const network in config.networks) { - if (!redirects[frontend]) console.log(frontend) tmp.push(...redirects[frontend][network], ...options[frontend][network].custom) } } else if (config.services[service].frontends[frontend].singleInstance) tmp = config.services[service].frontends[frontend].singleInstance @@ -45,8 +42,6 @@ function fetchFrontendInstanceList(service, frontend) { } function all(service, frontend) { - // init() - // getConfig() let instances = [] if (!frontend) { for (const frontend in config.services[service].frontends) { @@ -90,10 +85,9 @@ function redirect(url, type, initiator) { if (!regexArray(service, url)) continue if (Object.keys(config.services[service].frontends).length > 1) { - frontend = options[service].frontend - } else { - frontend = Object.keys(config.services[service].frontends)[0] - } + if (type == "sub_frame") frontend = options[service].embedFrontend + else frontend = options[service].frontend + } 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] @@ -103,7 +97,7 @@ function redirect(url, type, initiator) { } else if (config.services[service].frontends[frontend].singleInstance) randomInstance = config.services[service].frontends[frontend].singleInstance break } - if (frontend == null) return + if (!frontend) return // Here is a (temperory) space for defining constants required in 2 or more switch cases. // When possible, try have the two switch cases share all their code as done with searx and searxng. @@ -391,49 +385,6 @@ function redirect(url, type, initiator) { } } -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 = [] - } - 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 computeService(url, returnFrontend) { for (const service in config.services) { if (regexArray(service, url)) { @@ -454,8 +405,6 @@ function computeService(url, returnFrontend) { function switchInstance(url) { return new Promise(async resolve => { - // await init() - // await getConfig() const protocolHost = utils.protocolHost(url) for (const service in config.services) { if (!options[service].enabled) continue @@ -487,8 +436,6 @@ function switchInstance(url) { function reverse(url) { return new Promise(async resolve => { - // await init() - // await getConfig() let protocolHost = utils.protocolHost(url) let currentService for (const service in config.services) { @@ -517,8 +464,6 @@ function reverse(url) { function unifyPreferences(url, tabId) { return new Promise(async resolve => { - // await init() - // await getConfig() const protocolHost = utils.protocolHost(url) let currentFrontend, currentService serviceloop: for (const service in config.services) { @@ -540,18 +485,14 @@ function unifyPreferences(url, tabId) { } } if ("localstorage" in frontend.preferences) { + browser.storage.local.set({ tmp: [currentFrontend, frontend.preferences.localstorage] }) browser.tabs.executeScript(tabId, { - code: "const frontend = " + frontend, - code: "const items = " + config.services[currentService].frontends[currentFrontend].preferences.localStorage, - //file: "/assets/javascripts/get-localstorage.js", + 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, { - code: "const frontend = " + frontend, - code: "const items = " + config.services[currentService].frontends[currentFrontend].preferences.localStorage, file: "/assets/javascripts/set-localstorage.js", runAt: "document_start", }) @@ -594,7 +535,6 @@ function setRedirects(redirects) { export default { redirect, - initDefaults, computeService, switchInstance, reverse, diff --git a/src/assets/javascripts/set-localstorage.js b/src/assets/javascripts/set-localstorage.js new file mode 100644 index 00000000..8dbfcad7 --- /dev/null +++ b/src/assets/javascripts/set-localstorage.js @@ -0,0 +1,13 @@ +window.browser = window.browser || window.chrome + +browser.storage.local.get(["localstorage", "tmp"], r => { + const localstorageJson = r.localstorage + const frontend = r.tmp[0] + const items = localstorageJson[frontend] + + for (const item in items) { + localStorage.setItem(item, items[item]) + } + + window.close() +}) diff --git a/src/assets/javascripts/utils.js b/src/assets/javascripts/utils.js index a1c559df..aaa52955 100644 --- a/src/assets/javascripts/utils.js +++ b/src/assets/javascripts/utils.js @@ -244,22 +244,20 @@ async function testLatency(element, instances, frontend) { return new Promise(async resolve => { let myList = {} let latencyThreshold, options - //let redirectsChecks = [] browser.storage.local.get(["options"], r => { latencyThreshold = r.options.latencyThreshold - //redirectsChecks = r.options[frontend].clearnet.enabled options = r.options }) - for (const href of instances) + for (const href of instances) { await ping(href).then(time => { + let color if (time) { myList[href] = time - let color if (time <= 1000) color = "green" else if (time <= 2000) color = "orange" else color = "red" - if (time > latencyThreshold) { + if (time > latencyThreshold && options[frontend].clearnet.enabled.includes(href)) { options[frontend].clearnet.enabled.splice(options[frontend].clearnet.enabled.indexOf(href), 1) } @@ -268,8 +266,13 @@ async function testLatency(element, instances, frontend) { else if (time > 5000) text = `ERROR: ${time - 5000}` else text = `${time}ms` element.innerHTML = `${href}: ${text}` + } else { + color = "red" + element.innerHTML = `${href}: Server not found` + if (options[frontend].clearnet.enabled.includes(href)) options[frontend].clearnet.enabled.splice(options[frontend].clearnet.enabled.indexOf(href), 1) } }) + } browser.storage.local.set({ options }) resolve(myList) }) @@ -423,6 +426,7 @@ function latency(service, frontend, document, location) { latencyElement.addEventListener("click", reloadWindow) browser.storage.local.get(["redirects", "latency"], r => { let redirects = r.redirects + let latency = r.latency const oldHtml = latencyLabel.innerHTML latencyLabel.innerHTML = "..." testLatency(latencyLabel, redirects[frontend].clearnet, frontend).then(r => { diff --git a/src/pages/background/background.js b/src/pages/background/background.js index 3a900609..5e164d58 100644 --- a/src/pages/background/background.js +++ b/src/pages/background/background.js @@ -3,6 +3,7 @@ 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 @@ -38,7 +39,7 @@ function initDefaults() { .then(async data => { browser.storage.local.set({ blacklists: JSON.parse(data) }, async () => { await generalHelper.initDefaults() - await servicesHelper.initDefaults() + await initHelper.initDefaults() }) }) }) diff --git a/src/pages/options/index.html b/src/pages/options/index.html index 71d04fd0..384b32bd 100644 --- a/src/pages/options/index.html +++ b/src/pages/options/index.html @@ -3252,19 +3252,19 @@
diff --git a/src/pages/options/widgets/about.ejs b/src/pages/options/widgets/about.ejs index 99202141..63c5b027 100644 --- a/src/pages/options/widgets/about.ejs +++ b/src/pages/options/widgets/about.ejs @@ -6,19 +6,19 @@
diff --git a/src/pages/options/widgets/services.js b/src/pages/options/widgets/services.js index 98e068a1..eb7f1ba7 100644 --- a/src/pages/options/widgets/services.js +++ b/src/pages/options/widgets/services.js @@ -40,7 +40,7 @@ function changeFrontendsSettings(service) { } if (config.services[service].embeddable) { - if (!config.services[service].frontends[divs[service].frontend.value].instanceList) { + if (!config.services[service].frontends[divs[service].frontend.value].embeddable) { divs[service].embedFrontend.disabled = false for (const frontend in config.services[service].frontends) { if (config.services[service].frontends[frontend].embeddable) { -- cgit 1.4.1 From e8a67e91729e9ade89bb7f6f9e1c8bf2f4d64ea2 Mon Sep 17 00:00:00 2001 From: Hygna Date: Sun, 2 Oct 2022 15:10:36 +0100 Subject: Squashed a few bugs --- src/assets/javascripts/init.js | 118 ++++++---- src/assets/javascripts/services.js | 445 ++++++++++++++++++++++------------- src/assets/javascripts/utils.js | 8 +- src/manifest.json | 2 +- src/pages/background/background.js | 47 ++-- src/pages/options/index.html | 5 + src/pages/options/widgets/general.js | 1 + src/pages/popup/popup.js | 43 ++-- 8 files changed, 419 insertions(+), 250 deletions(-) (limited to 'src/pages/background') diff --git a/src/assets/javascripts/init.js b/src/assets/javascripts/init.js index c6758530..568d9cdc 100644 --- a/src/assets/javascripts/init.js +++ b/src/assets/javascripts/init.js @@ -1,60 +1,94 @@ -async function getConfig() { - return new Promise(resolve => { - fetch("/config/config.json") +async function initDefaults() { + return new Promise(async resolve => { + fetch("/instances/data.json") .then(response => response.text()) - .then(data => { - config = JSON.parse(data) - resolve() + .then(async data => { + 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 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() + }) + }) }) }) } -let config -await getConfig() - -async function initDefaults() { +async function upgradeOptions() { return new Promise(async resolve => { - fetch("/instances/data.json") + fetch("/config/config.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 = [] + .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 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 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, } diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js index 718b3f5e..d84db4fe 100644 --- a/src/assets/javascripts/services.js +++ b/src/assets/javascripts/services.js @@ -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 +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 + // 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() - }) +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) + } + }) + }) } -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 - } - }) +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 + } + } + }) + }) } -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 +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 + } + } } - } - } - 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) +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 } - } - 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", + 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() + }) }) - ) - } - 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) +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"] + } + }) + } + }) + } + } + }) } - } - } - } - } - console.log(redirects) - browser.storage.local.set({ redirects, targets, options }) - //}) + browser.storage.local.set({ options, latency }) + resolve() + }) + }) + }) } export default { @@ -540,4 +655,6 @@ export default { reverse, unifyPreferences, setRedirects, + initDefaults, + upgradeOptions, } diff --git a/src/assets/javascripts/utils.js b/src/assets/javascripts/utils.js index aaa52955..26fe11d6 100644 --- a/src/assets/javascripts/utils.js +++ b/src/assets/javascripts/utils.js @@ -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 }) diff --git a/src/manifest.json b/src/manifest.json index cc804f9d..5674b8f6 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -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": { diff --git a/src/pages/background/background.js b/src/pages/background/background.js index 5e164d58..eba436cb 100644 --- a/src/pages/background/background.js +++ b/src/pages/background/background.js @@ -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 => { diff --git a/src/pages/options/index.html b/src/pages/options/index.html index 384b32bd..2549566c 100644 --- a/src/pages/options/index.html +++ b/src/pages/options/index.html @@ -150,6 +150,11 @@
+
diff --git a/src/pages/options/widgets/general.js b/src/pages/options/widgets/general.js index cd5cfb47..1a2f44c6 100644 --- a/src/pages/options/widgets/general.js +++ b/src/pages/options/widgets/general.js @@ -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") diff --git a/src/pages/popup/popup.js b/src/pages/popup/popup.js index 5a5ccb53..9899e79e 100644 --- a/src/pages/popup/popup.js +++ b/src/pages/popup/popup.js @@ -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", () => { -- cgit 1.4.1