From 93b181901c45481a3e6e433b7169debc817353fe Mon Sep 17 00:00:00 2001 From: ManeraKai Date: Sat, 6 Aug 2022 09:12:43 +0300 Subject: Made setRedirect functions async --- src/pages/options/index.html | 20 +++++++------- src/pages/options/widgets/general.js | 49 ++++++++++++++++++----------------- src/pages/options/widgets/general.pug | 6 ++--- src/pages/options/widgets/imdb.pug | 2 +- src/pages/options/widgets/quora.pug | 2 +- src/pages/options/widgets/reuters.pug | 2 +- src/pages/popup/popup.html | 12 ++++----- src/pages/popup/popup.pug | 6 ++--- src/pages/widgets/links.pug | 6 ++--- 9 files changed, 53 insertions(+), 52 deletions(-) (limited to 'src/pages') diff --git a/src/pages/options/index.html b/src/pages/options/index.html index 077b3da2..b8541ff9 100644 --- a/src/pages/options/index.html +++ b/src/pages/options/index.html @@ -30,9 +30,9 @@ Medium -
Quora
-
IMDb
-
Reuters
+
Quora
+
IMDb
+
Reuters
PeerTube
LBRY
@@ -237,19 +237,19 @@
- Quora + Quora
- IMDb + IMDb
- Reuters + Reuters
@@ -1774,7 +1774,7 @@
-

Quora

+

Quora


@@ -1881,7 +1881,7 @@
-

IMDb

+

IMDb


@@ -1988,7 +1988,7 @@
-

Reuters

+

Reuters


@@ -3186,4 +3186,4 @@
- + \ No newline at end of file diff --git a/src/pages/options/widgets/general.js b/src/pages/options/widgets/general.js index d6824251..61b422f4 100644 --- a/src/pages/options/widgets/general.js +++ b/src/pages/options/widgets/general.js @@ -36,15 +36,16 @@ updateInstancesElement.addEventListener("click", async () => { let exportSettingsElement = document.getElementById("export-settings") function exportSettings() { - browser.storage.local.get(null, result => { + return browser.storage.local.get(null, result => { let resultString = JSON.stringify(result, null, " ") exportSettingsElement.href = "data:application/json;base64," + btoa(encodeURI(resultString)) exportSettingsElement.download = "libredirect-settings.json" + return }) } exportSettings() -document.getElementById("general_page").addEventListener("click", exportSettings) +document.getElementById("general_page").onclick = exportSettings let importSettingsElement = document.getElementById("import-settings") let importSettingsElementText = document.getElementById("import_settings_text") @@ -82,28 +83,28 @@ resetSettings.addEventListener("click", async () => { .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 generalHelper.initDefaults() - await youtubeHelper.initDefaults() - await youtubeMusicHelper.initDefaults() - await twitterHelper.initDefaults() - await instagramHelper.initDefaults() - await mapsHelper.initDefaults() - await searchHelper.initDefaults() - await translateHelper.initDefaults() - await mediumHelper.initDefaults() - await quoraHelper.initDefaults() - await libremdbHelper.initDefaults() - await reutersHelper.initDefaults() - await redditHelper.initDefaults() - await wikipediaHelper.initDefaults() - await imgurHelper.initDefaults() - await tiktokHelper.initDefaults() - await sendTargetsHelper.initDefaults() - await peertubeHelper.initDefaults() - await lbryHelper.initDefaults() - location.reload() - }) + browser.storage.local.set({ authenticateBlackList: JSON.parse(data).authenticate }, async () => { + await generalHelper.initDefaults() + await youtubeHelper.initDefaults() + await youtubeMusicHelper.initDefaults() + await twitterHelper.initDefaults() + await instagramHelper.initDefaults() + await mapsHelper.initDefaults() + await searchHelper.initDefaults() + await translateHelper.initDefaults() + await mediumHelper.initDefaults() + await quoraHelper.initDefaults() + await libremdbHelper.initDefaults() + await reutersHelper.initDefaults() + await redditHelper.initDefaults() + await wikipediaHelper.initDefaults() + await imgurHelper.initDefaults() + await tiktokHelper.initDefaults() + await sendTargetsHelper.initDefaults() + await peertubeHelper.initDefaults() + await lbryHelper.initDefaults() + location.reload() + }) }) }) }) diff --git a/src/pages/options/widgets/general.pug b/src/pages/options/widgets/general.pug index e523d5bb..891217ca 100644 --- a/src/pages/options/widgets/general.pug +++ b/src/pages/options/widgets/general.pug @@ -172,19 +172,19 @@ section#general_page.option-block div div img(src="../../../assets/images/quora.png") - x(data-localise="__MSG_quora__") Quora + x() Quora input#quora(type="checkbox") div div img(src="../../../assets/images/imdb.svg") - x(data-localise="__MSG_imdb__") IMDb + x IMDb input#imdb(type="checkbox") div div img(src="../../../assets/images/reuters.svg") - x(data-localise="__MSG_reuters__") Reuters + x Reuters input#reuters(type="checkbox") div diff --git a/src/pages/options/widgets/imdb.pug b/src/pages/options/widgets/imdb.pug index 008e1c00..257d2c1a 100644 --- a/src/pages/options/widgets/imdb.pug +++ b/src/pages/options/widgets/imdb.pug @@ -1,6 +1,6 @@ section#imdb_page.option-block .some-block.option-block - h1(data-localise="__MSG_imdb__") IMDb + h1() IMDb hr .some-block.option-block h4(data-localise="__MSG_enable__") Enable diff --git a/src/pages/options/widgets/quora.pug b/src/pages/options/widgets/quora.pug index 9e45abc9..addfe280 100644 --- a/src/pages/options/widgets/quora.pug +++ b/src/pages/options/widgets/quora.pug @@ -1,6 +1,6 @@ section#quora_page.option-block .some-block.option-block - h1(data-localise="__MSG_quora__") Quora + h1() Quora hr .some-block.option-block h4(data-localise="__MSG_enable__") Enable diff --git a/src/pages/options/widgets/reuters.pug b/src/pages/options/widgets/reuters.pug index 08a37d50..9ed6b3b9 100644 --- a/src/pages/options/widgets/reuters.pug +++ b/src/pages/options/widgets/reuters.pug @@ -1,6 +1,6 @@ section#reuters_page.option-block .some-block.option-block - h1(data-localise="__MSG_reuters__") Reuters + h1() Reuters hr .some-block.option-block h4(data-localise="__MSG_enable__") Enable diff --git a/src/pages/popup/popup.html b/src/pages/popup/popup.html index 25f70f48..1c3f6ea2 100644 --- a/src/pages/popup/popup.html +++ b/src/pages/popup/popup.html @@ -50,15 +50,15 @@
-

Quora

+

Quora

-

IMDb

+

IMDb

-

Reuters

+

Reuters

-

Quora

+

Quora

-

IMDb

+

IMDb

-

Reuters

+

Reuters

diff --git a/src/pages/popup/popup.pug b/src/pages/popup/popup.pug index 7da687cc..cc7fc7a2 100644 --- a/src/pages/popup/popup.pug +++ b/src/pages/popup/popup.pug @@ -58,19 +58,19 @@ mixin services .quora.some-block a.title(href="https://quora.com") img(src="../../assets/images/quora.png") - h4(data-localise="__MSG_quora__") Quora + h4() Quora input.disable-quora(type="checkbox") .imdb.some-block a.title(href="https://imdb.com") img(src="../../assets/images/imdb.svg") - h4(data-localise="__MSG_imdb__") IMDb + h4() IMDb input.disable-imdb(type="checkbox") .reuters.some-block a.title(href="https://reuters.com") img(src="../../assets/images/reuters.svg") - h4(data-localise="__MSG_reuters__") Reuters + h4() Reuters input.disable-reuters(type="checkbox") .peertube.some-block diff --git a/src/pages/widgets/links.pug b/src/pages/widgets/links.pug index c7f8e0a6..37fe9375 100644 --- a/src/pages/widgets/links.pug +++ b/src/pages/widgets/links.pug @@ -44,15 +44,15 @@ mixin links(service) .title img(src="../../../assets/images/quora.png") - a(href="#quora" data-localise="__MSG_quora__") Quora + a(href="#quora" ) Quora .title img(src="../../../assets/images/imdb.svg") - a(href="#imdb" data-localise="__MSG_imdb__") IMDb + a(href="#imdb") IMDb .title img(src="../../../assets/images/reuters.svg") - a(href="#reuters" data-localise="__MSG_reuters__") Reuters + a(href="#reuters") Reuters .title img(src="../../../assets/images/peertube-icon.svg") -- cgit 1.4.1 From 7a56715877f122701015acdb038c3c7e9a121379 Mon Sep 17 00:00:00 2001 From: ManeraKai Date: Mon, 8 Aug 2022 11:47:25 +0300 Subject: improving the general Class --- src/assets/javascripts/frontend.js | 148 ++++++++++++++++++++++++++++++++----- src/pages/background/background.js | 3 + 2 files changed, 132 insertions(+), 19 deletions(-) (limited to 'src/pages') diff --git a/src/assets/javascripts/frontend.js b/src/assets/javascripts/frontend.js index 73b864b4..ab71cc0d 100644 --- a/src/assets/javascripts/frontend.js +++ b/src/assets/javascripts/frontend.js @@ -1,33 +1,143 @@ class FrontEnd { - constructor({ name, redirect, frontends, protocols, enable }) { - this.name = name - this.redirect = redirect + constructor({ enable, frontends, frontend, redirect }) { + this.redirects = {} this.enable = enable + this.frontend = frontend + this.protocol = "normal" + this.protocolFallback = true fetch("/instances/data.json") .then(response => response.text()) .then(async data => { - const json = JSON.parse(data) - this.frontends = {} - for (const frontend of frontends) { - this.frontends[frontend] = json[frontend] - for (const protocol of json[frontend]) { - browser.storage.local.set({ - [`${name}_${protocol}_checks`]: json[frontend][protocol], - }) - } + data = JSON.parse(data) + fetch("/instances/blacklist.json") + .then(response => response.text()) + .then(async blackList => { + blackList = JSON.parse(blackList) + for (const frontend in frontends) { + this.redirects[frontend] = {} + + this.redirects[frontend].cookies = [...frontends[frontend].cookies] + + for (const protocol in data[frontend]) { + this.redirects[frontend][protocol] = {} + + this.redirects[frontend][protocol].all = [...data[frontend][protocol]] + + this.redirects[frontend][protocol].custom = [] + + this.redirects[frontend][protocol].checked = [...data[frontend][protocol]] + for (const instance of blackList.cloudflare) { + const a = this.redirects[frontend][protocol].checked.indexOf(instance) + if (a > -1) this.redirects[frontend][protocol].checked.splice(a, 1) + } + for (const instance of blackList.offline) { + const a = this.redirects[frontend][protocol].checked.indexOf(instance) + if (a > -1) this.redirects[frontend][protocol].checked.splice(a, 1) + } + } + } + }) + }) + this.unifyCookies = from => + new Promise(async resolve => { + await init() + const protocolHost = utils.protocolHost(from) + const list = [...this.redirects[this.frontend][this.protocol]] + if (![...list.checked, ...list.custom].includes(protocolHost)) { + resolve() + return + } + for (const cookie of this.redirects[this.frontend].cookies) { + await utils.copyCookie(frontend, protocolHost, [...list.checked, list.custom], cookie) } + resolve(true) }) - browser.storage.local.get(["cloudflareBlackList", "offlineBlackList"], r => {}) - this.protocols = protocols + this.switchInstance = (url, disableOverride) => { + if (!this.enable && !disableOverride) return + + const protocolHost = utils.protocolHost(url) + + const list = [...this.redirects[this.frontend][this.protocol]] + if (!list.all.includes(protocolHost)) return + + let userList = [...list.checked, ...list.custom] + if (userList.length === 0 && this.protocolFallback) userList = [...list.normal.all] + + const i = userList.indexOf(protocolHost) + if (i > -1) userList.splice(i, 1) + if (userList.length === 0) return + + const randomInstance = utils.getRandomInstance(userList) + return `${randomInstance}${url.pathname}${url.search}` + } + + this.redirect = (url, type, initiator, disableOverride) => { + const result = redirect(url, type, initiator, disableOverride) + if (result == "BYPASSTAB") return "BYPASSTAB" + if (result) { + const list = [...this.redirects[this.frontend][this.protocol]] + let userList = [...list.checked, ...list.custom] + const randomInstance = utils.getRandomInstance(userList) + return `${randomInstance}${result.pathname}${result.search}` + } + } + + let init = () => new Promise(async resolve => {}) } - switchInstance(url) {} } let Reddit = new FrontEnd({ - name: "youtube", - redirect: function () {}, - targets: [/^https?:\/{2}(www\.|old\.|np\.|new\.|amp\.|)reddit\.com/, /^https?:\/{2}(i\.|preview\.)redd\.it/], - frontends: ["libreddit", "teddit"], enable: true, + frontends: { + libreddit: { cookies: ["theme", "front_page", "layout", "wide", "post_sort", "comment_sort", "show_nsfw", "autoplay_videos", "use_hls", "hide_hls_notification", "subscriptions", "filters"] }, + teddit: { + cookies: [ + "collapse_child_comments", + "domain_instagram", + "domain_twitter", + "domain_youtube", + "flairs", + "highlight_controversial", + "nsfw_enabled", + "post_media_max_height", + "show_upvoted_percentage", + "show_upvotes", + "theme", + "videos_muted", + ], + }, + }, + frontend: "libreddit", + redirect: (url, type, initiator, disableOverride) => { + if (this.enable && !disableOverride) return + + const targets = [/^https?:\/{2}(www\.|old\.|np\.|new\.|amp\.|)reddit\.com/, /^https?:\/{2}(i\.|preview\.)redd\.it/] + if (!targets.some(rx => rx.test(url.href))) return + + if (initiator && all().includes(initiator.origin)) return "BYPASSTAB" + if (!["main_frame", "xmlhttprequest", "other", "image", "media"].includes(type)) return + + const bypassPaths = /\/(gallery\/poll\/rpan\/settings\/topics)/ + if (url.pathname.match(bypassPaths)) return + + const protocolHost = utils.protocolHost(url) + + if (url.host === "i.redd.it") { + if (this.frontend == "libreddit") return `${protocolHost}/img${url.pathname}${url.search}` + if (this.frontend == "teddit") return `${protocolHost}/pics/w:null_${url.pathname.substring(1)}${url.search}` + } else if (url.host === "redd.it") { + // https://redd.it/foo => https://libredd.it/comments/foo + if (this.frontend == "libreddit" && !url.pathname.match(/^\/+[^\/]+\/+[^\/]/)) return `${protocolHost}/comments${url.pathname}${url.search}` + // https://redd.it/foo => https://teddit.net/comments/foo + if (this.frontend == "teddit" && !url.pathname.match(/^\/+[^\/]+\/+[^\/]/)) return `${protocolHost}/comments${url.pathname}${url.search}` + } else if (url.host === "preview.redd.it") { + if (this.frontend == "libreddit") return `${protocolHost}/preview/pre${url.pathname}${url.search}` + if (this.frontend == "teddit") return + } else { + return `${url.href}` + } + }, }) + +export default {} diff --git a/src/pages/background/background.js b/src/pages/background/background.js index c6e9ab7a..39c10052 100644 --- a/src/pages/background/background.js +++ b/src/pages/background/background.js @@ -22,8 +22,11 @@ import sendTargetsHelper from "../../assets/javascripts/sendTargets.js" import peertubeHelper from "../../assets/javascripts/peertube.js" import lbryHelper from "../../assets/javascripts/lbry.js" +import frontend from "../../assets/javascripts/frontend.js" + window.browser = window.browser || window.chrome + browser.runtime.onInstalled.addListener(details => { function initDefaults() { fetch("/instances/blacklist.json") -- cgit 1.4.1