From c6de68c4c4bda3edcf6cf012bd98adea3baf866b Mon Sep 17 00:00:00 2001 From: ManeraKai Date: Thu, 25 Jul 2024 15:17:57 +0300 Subject: Migrating popup to svelte --- src/pages/popup_src/App.svelte | 114 ++++++++++++++++ src/pages/popup_src/Buttons.svelte | 158 ++++++++++++++++++++++ src/pages/popup_src/components/PopupButton.svelte | 11 ++ src/pages/popup_src/components/Row.svelte | 13 ++ src/pages/popup_src/components/ServiceIcon.svelte | 40 ++++++ src/pages/popup_src/main.js | 7 + src/pages/popup_src/stores.js | 5 + 7 files changed, 348 insertions(+) create mode 100644 src/pages/popup_src/App.svelte create mode 100644 src/pages/popup_src/Buttons.svelte create mode 100644 src/pages/popup_src/components/PopupButton.svelte create mode 100644 src/pages/popup_src/components/Row.svelte create mode 100644 src/pages/popup_src/components/ServiceIcon.svelte create mode 100644 src/pages/popup_src/main.js create mode 100644 src/pages/popup_src/stores.js (limited to 'src/pages/popup_src') diff --git a/src/pages/popup_src/App.svelte b/src/pages/popup_src/App.svelte new file mode 100644 index 00000000..cf88234d --- /dev/null +++ b/src/pages/popup_src/App.svelte @@ -0,0 +1,114 @@ + + +{#if _options && _config} +
+ +
+{:else} +

Loading...

+{/if} + + diff --git a/src/pages/popup_src/Buttons.svelte b/src/pages/popup_src/Buttons.svelte new file mode 100644 index 00000000..39208c37 --- /dev/null +++ b/src/pages/popup_src/Buttons.svelte @@ -0,0 +1,158 @@ + + +{#if redirect} + browser.runtime.sendMessage("redirectTab")}> + + + +{/if} + +{#if switchInstance} + browser.tabs.update({ url: await servicesHelper.switchInstance(url) })}> + + + +{/if} + +{#if redirectToOriginal} + servicesHelper.copyRaw(url)}> + + + + browser.runtime.sendMessage("reverseTab")}> + + + +{/if} + +
+ +{#if currentService} + +
window.open(browser.runtime.getURL(_config.services[currentService].url), "_blank")} + > + + +
+
+ { + _options[currentService].enabled = e.target.checked + options.set(_options) + }} + /> + browser.tabs.update({ url: await servicesHelper.switchInstance(url, currentService) })} + /> +
+
+{/if} + +
+ +{#each _options.popupServices as serviceKey} + {#if currentService !== serviceKey} + +
window.open(browser.runtime.getURL(_config.services[serviceKey].url), "_blank")} + > + + +
+
+ { + console.log(e.target.checked) + _options[serviceKey].enabled = e.target.checked + options.set(_options) + }} + /> + browser.tabs.update({ url: await servicesHelper.switchInstance(url, serviceKey) })} + /> +
+
+ {/if} +{/each} + +
+ + window.open(browser.runtime.getURL("pages/options/index.html"), "_blank")}> + + + + + diff --git a/src/pages/popup_src/components/PopupButton.svelte b/src/pages/popup_src/components/PopupButton.svelte new file mode 100644 index 00000000..9c4953c4 --- /dev/null +++ b/src/pages/popup_src/components/PopupButton.svelte @@ -0,0 +1,11 @@ + + + + + + diff --git a/src/pages/popup_src/components/Row.svelte b/src/pages/popup_src/components/Row.svelte new file mode 100644 index 00000000..a4d78f07 --- /dev/null +++ b/src/pages/popup_src/components/Row.svelte @@ -0,0 +1,13 @@ +
+ +
+ + + \ No newline at end of file diff --git a/src/pages/popup_src/components/ServiceIcon.svelte b/src/pages/popup_src/components/ServiceIcon.svelte new file mode 100644 index 00000000..89393cf6 --- /dev/null +++ b/src/pages/popup_src/components/ServiceIcon.svelte @@ -0,0 +1,40 @@ + + +{#if imageType} + {#if imageType == "svgMono"} + {#if theme == "dark"} + {details.label} + {:else} + {details.label} + {/if} + {:else} + {details.label} + {/if} +{/if} diff --git a/src/pages/popup_src/main.js b/src/pages/popup_src/main.js new file mode 100644 index 00000000..c4012f4a --- /dev/null +++ b/src/pages/popup_src/main.js @@ -0,0 +1,7 @@ +import App from "./App.svelte" + +const app = new App({ + target: document.body, +}) + +export default app diff --git a/src/pages/popup_src/stores.js b/src/pages/popup_src/stores.js new file mode 100644 index 00000000..782f6064 --- /dev/null +++ b/src/pages/popup_src/stores.js @@ -0,0 +1,5 @@ +import { writable } from "svelte/store" + +export const options = writable(null) +export const config = writable(null) +export const page = writable("general") -- cgit 1.4.1 From f047a1d02def5158cfa845f923da554f6649247e Mon Sep 17 00:00:00 2001 From: ManeraKai Date: Thu, 25 Jul 2024 16:35:18 +0300 Subject: Improved code --- src/pages/popup_src/Buttons.svelte | 86 +++++------------------ src/pages/popup_src/components/PopupButton.svelte | 11 --- src/pages/popup_src/components/Switch.svelte | 58 +++++++++++++++ 3 files changed, 77 insertions(+), 78 deletions(-) delete mode 100644 src/pages/popup_src/components/PopupButton.svelte create mode 100644 src/pages/popup_src/components/Switch.svelte (limited to 'src/pages/popup_src') diff --git a/src/pages/popup_src/Buttons.svelte b/src/pages/popup_src/Buttons.svelte index 39208c37..449404ba 100644 --- a/src/pages/popup_src/Buttons.svelte +++ b/src/pages/popup_src/Buttons.svelte @@ -9,10 +9,9 @@ import SwitchInstanceIcon from "../icons/SwitchInstanceIcon.svelte" import SettingsIcon from "../icons/SettingsIcon.svelte" import { options, config } from "./stores" - import ServiceIcon from "./components/ServiceIcon.svelte" import { onDestroy } from "svelte" import servicesHelper from "../../assets/javascripts/services" - import Checkbox from "../components/Checkbox.svelte" + import Switch from "./components/Switch.svelte" let _options let _config @@ -35,117 +34,70 @@ servicesHelper.switchInstance(url).then(r => (switchInstance = r)) servicesHelper.reverse(url).then(r => (redirectToOriginal = r)) servicesHelper.redirectAsync(url, "main_frame", null, true).then(r => (redirect = r)) - currentService = await servicesHelper.computeService(url) + servicesHelper.computeService(url).then(r => (currentService = r)) } }) {#if redirect} - browser.runtime.sendMessage("redirectTab")}> + browser.runtime.sendMessage("redirectTab")}> {/if} {#if switchInstance} - browser.tabs.update({ url: await servicesHelper.switchInstance(url) })}> + browser.tabs.update({ url: await servicesHelper.switchInstance(url) })} + > {/if} {#if redirectToOriginal} - servicesHelper.copyRaw(url)}> + servicesHelper.copyRaw(url)}> - browser.runtime.sendMessage("reverseTab")}> + browser.runtime.sendMessage("reverseTab")}> {/if} -
+{#if redirect || switchInstance || redirectToOriginal} +
+{/if} {#if currentService} - -
window.open(browser.runtime.getURL(_config.services[currentService].url), "_blank")} - > - - -
-
- { - _options[currentService].enabled = e.target.checked - options.set(_options) - }} - /> - browser.tabs.update({ url: await servicesHelper.switchInstance(url, currentService) })} - /> -
-
+ +
{/if} -
- {#each _options.popupServices as serviceKey} {#if currentService !== serviceKey} - -
window.open(browser.runtime.getURL(_config.services[serviceKey].url), "_blank")} - > - - -
-
- { - console.log(e.target.checked) - _options[serviceKey].enabled = e.target.checked - options.set(_options) - }} - /> - browser.tabs.update({ url: await servicesHelper.switchInstance(url, serviceKey) })} - /> -
-
+ {/if} {/each}
- window.open(browser.runtime.getURL("pages/options/index.html"), "_blank")}> + window.open(browser.runtime.getURL("pages/options/index.html"), "_blank")}> -- cgit 1.4.1 From e97b618660094491013d9d4999ac4802429f3dc7 Mon Sep 17 00:00:00 2001 From: ManeraKai Date: Fri, 26 Jul 2024 23:53:31 +0300 Subject: Added translation support to Svelte --- package.json | 1 + src/assets/javascripts/localise.js | 34 ------ src/pages/components/Checkbox.svelte | 19 ++-- src/pages/icons/ExportIcon.svelte | 9 +- src/pages/icons/ImportIcon.svelte | 17 ++- src/pages/icons/PingIcon.svelte | 9 +- src/pages/icons/ResetIcon.svelte | 1 + src/pages/options/init.js | 8 -- src/pages/options_src/App.svelte | 9 +- src/pages/options_src/General/Exceptions.svelte | 10 +- src/pages/options_src/General/General.svelte | 18 ++-- .../options_src/General/SettingsButtons.svelte | 31 ++++-- src/pages/options_src/Services/Instances.svelte | 32 +++--- src/pages/options_src/Services/RedirectType.svelte | 12 ++- src/pages/options_src/Services/Services.svelte | 115 +++++++++++---------- src/pages/options_src/Sidebar.svelte | 23 +++-- src/pages/popup_src/App.svelte | 2 +- src/pages/popup_src/Buttons.svelte | 94 +++++++++-------- src/pages/popup_src/components/Switch.svelte | 13 ++- 19 files changed, 251 insertions(+), 206 deletions(-) delete mode 100644 src/assets/javascripts/localise.js delete mode 100644 src/pages/options/init.js (limited to 'src/pages/popup_src') diff --git a/package.json b/package.json index 0f89cbdb..2a79b660 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "scripts": { "start": "web-ext run", "nightly": "web-ext run --firefox=/home/esmail/software/firefox_nightly/firefox", + "start_ar": "web-ext run --firefox=/home/esmail/software/firefox_ar/firefox", "android": "web-ext run -t firefox-android --adb-device emulator-5554 --firefox-apk org.mozilla.fenix ", "build": "web-ext build", "test": "web-ext lint", diff --git a/src/assets/javascripts/localise.js b/src/assets/javascripts/localise.js deleted file mode 100644 index d26d07d4..00000000 --- a/src/assets/javascripts/localise.js +++ /dev/null @@ -1,34 +0,0 @@ -window.browser = window.browser || window.chrome - -function localisePage() { - /** - * @param {string} tag - */ - function getMessage(tag) { - return tag.replace(/__MSG_(\w+)__/g, (_match, v1) => { - return v1 ? browser.i18n.getMessage(v1) : null - }) - } - - const elements = document.querySelectorAll("[data-localise]") - for (let i in elements) - if (elements.hasOwnProperty(i)) { - const obj = elements[i] - const tag = obj.getAttribute("data-localise").toString() - const msg = getMessage(tag) - if (msg && msg !== tag) obj.textContent = msg - } - - const placeholders = document.querySelectorAll("[data-localise-placeholder]") - for (let i in placeholders) - if (placeholders.hasOwnProperty(i)) { - const obj = placeholders[i] - const tag = obj.getAttribute("data-localise-placeholder").toString() - const msg = getMessage(tag) - if (msg && msg !== tag) obj.placeholder = msg - } -} - -export default { - localisePage, -} diff --git a/src/pages/components/Checkbox.svelte b/src/pages/components/Checkbox.svelte index dbefd7e9..9ba9c56c 100644 --- a/src/pages/components/Checkbox.svelte +++ b/src/pages/components/Checkbox.svelte @@ -1,9 +1,10 @@ - + diff --git a/src/pages/icons/ExportIcon.svelte b/src/pages/icons/ExportIcon.svelte index 196726a8..d155e5c5 100644 --- a/src/pages/icons/ExportIcon.svelte +++ b/src/pages/icons/ExportIcon.svelte @@ -1,4 +1,11 @@ - + diff --git a/src/pages/icons/ImportIcon.svelte b/src/pages/icons/ImportIcon.svelte index f022b4f0..f64d0ff6 100644 --- a/src/pages/icons/ImportIcon.svelte +++ b/src/pages/icons/ImportIcon.svelte @@ -1,5 +1,12 @@ - - - \ No newline at end of file + + + diff --git a/src/pages/icons/PingIcon.svelte b/src/pages/icons/PingIcon.svelte index 8fcfe27b..34c4a37d 100644 --- a/src/pages/icons/PingIcon.svelte +++ b/src/pages/icons/PingIcon.svelte @@ -1,4 +1,11 @@ - + - let browser = window.browser || window.chrome + const browser = window.browser || window.chrome import General from "./General/General.svelte" import utils from "../../assets/javascripts/utils.js" @@ -67,12 +67,15 @@ cssVariables = light } } + + const dir = ["ar", "iw", "ku", "fa", "ur"].includes(browser.i18n.getUILanguage()) ? "rtl" : "ltr" + document.body.dir = dir {#if _options && _config}
-
- - - + + + +
- let browser = window.browser || window.chrome + const browser = window.browser || window.chrome import Exceptions from "./Exceptions.svelte" import SettingsButtons from "./SettingsButtons.svelte" @@ -26,12 +26,12 @@
- + { _options.fetchInstances = e.target.options[e.target.options.selectedIndex].value @@ -60,7 +60,7 @@ - + { @@ -71,7 +71,7 @@ - + diff --git a/src/pages/options_src/General/SettingsButtons.svelte b/src/pages/options_src/General/SettingsButtons.svelte index c37a3702..3ea46a2d 100644 --- a/src/pages/options_src/General/SettingsButtons.svelte +++ b/src/pages/options_src/General/SettingsButtons.svelte @@ -1,5 +1,5 @@ - + { @@ -130,8 +136,8 @@ options.set(_options) }} values={[ - { value: "bypass", name: "Bypass" }, - { value: "block", name: "Block" }, + { value: "bypass", name: browser.i18n.getMessage("bypass") || "Bypass" }, + { value: "block", name: browser.i18n.getMessage("block") || "Block" }, ]} /> @@ -139,13 +145,14 @@ {#if selectedService == "search"} {/if} @@ -184,8 +191,10 @@ justify-content: start; align-items: center; } + :global(.svelte_select img, .svelte_select svg) { margin-right: 10px; + margin-left: 0; height: 26px; width: 26px; color: var(--text); diff --git a/src/pages/options_src/Sidebar.svelte b/src/pages/options_src/Sidebar.svelte index 4a808268..fb515f53 100644 --- a/src/pages/options_src/Sidebar.svelte +++ b/src/pages/options_src/Sidebar.svelte @@ -1,4 +1,6 @@ -{#if redirect} - browser.runtime.sendMessage("redirectTab")}> - - - -{/if} - -{#if switchInstance} - browser.tabs.update({ url: await servicesHelper.switchInstance(url) })} - > - - - -{/if} +
+ {#if redirect} + browser.runtime.sendMessage("redirectTab")}> + + + + {/if} -{#if redirectToOriginal} - servicesHelper.copyRaw(url)}> - - - - browser.runtime.sendMessage("reverseTab")}> - - - -{/if} + {#if switchInstance} + browser.tabs.update({ url: await servicesHelper.switchInstance(url) })} + > + + + + {/if} -{#if redirect || switchInstance || redirectToOriginal} -
-{/if} + {#if redirectToOriginal} + servicesHelper.copyRaw(url)}> + + + + browser.runtime.sendMessage("reverseTab")}> + + + + {/if} -{#if currentService} - -
-{/if} + {#if redirect || switchInstance || redirectToOriginal} +
+ {/if} -{#each _options.popupServices as serviceKey} - {#if currentService !== serviceKey} - + {#if currentService} + +
{/if} -{/each} -
+ {#each _options.popupServices as serviceKey} + {#if currentService !== serviceKey} + + {/if} + {/each} + +
- window.open(browser.runtime.getURL("pages/options/index.html"), "_blank")}> - - - + window.open(browser.runtime.getURL("pages/options/index.html"), "_blank")}> + + + +
diff --git a/src/pages/popup_src/components/Switch.svelte b/src/pages/popup_src/components/Switch.svelte index f420caa1..e581e5f4 100644 --- a/src/pages/popup_src/components/Switch.svelte +++ b/src/pages/popup_src/components/Switch.svelte @@ -1,5 +1,5 @@ diff --git a/src/pages/options_src/General/General.svelte b/src/pages/options_src/General/General.svelte index 37c38a0a..b6ed1b46 100644 --- a/src/pages/options_src/General/General.svelte +++ b/src/pages/options_src/General/General.svelte @@ -14,13 +14,30 @@ const unsubscribe = options.subscribe(val => (_options = val)) onDestroy(unsubscribe) + let disableBookmarks = null + browser.runtime.getPlatformInfo(r => { + switch (r.os) { + case "fuchsia": + case "ios": + case "android": + disableBookmarks = true + break + default: + disableBookmarks = false + } + if (!disableBookmarks) { + browser.permissions.contains({ permissions: ["bookmarks"] }, r => (bookmarksPermission = r)) + } + }) + let bookmarksPermission - browser.permissions.contains({ permissions: ["bookmarks"] }, r => (bookmarksPermission = r)) - $: if (bookmarksPermission) { - browser.permissions.request({ permissions: ["bookmarks"] }, r => (bookmarksPermission = r)) - } else { - browser.permissions.remove({ permissions: ["bookmarks"] }) - bookmarksPermission = false + $: if (disableBookmarks !== null && disableBookmarks === false) { + if (bookmarksPermission) { + browser.permissions.request({ permissions: ["bookmarks"] }, r => (bookmarksPermission = r)) + } else { + browser.permissions.remove({ permissions: ["bookmarks"] }) + bookmarksPermission = false + } } @@ -68,10 +85,12 @@ /> - - - - + {#if disableBookmarks === false} + + + + + {/if} diff --git a/src/pages/options_src/Services/Instances.svelte b/src/pages/options_src/Services/Instances.svelte index 862bbf7e..3b870c4b 100644 --- a/src/pages/options_src/Services/Instances.svelte +++ b/src/pages/options_src/Services/Instances.svelte @@ -59,7 +59,6 @@ async function pingInstances() { pingCache = {} for (const instance of allInstances) { - console.log("pinging...", instance) pingCache[instance] = { color: "lightblue", value: "pinging..." } const time = await utils.ping(instance) pingCache[instance] = colorTime(time) diff --git a/src/pages/options_src/Services/Services.svelte b/src/pages/options_src/Services/Services.svelte index 4e719447..b0f0d5e3 100644 --- a/src/pages/options_src/Services/Services.svelte +++ b/src/pages/options_src/Services/Services.svelte @@ -32,8 +32,9 @@
diff --git a/src/pages/popup_src/Buttons.svelte b/src/pages/popup_src/Buttons.svelte index bfa162f8..0b454675 100644 --- a/src/pages/popup_src/Buttons.svelte +++ b/src/pages/popup_src/Buttons.svelte @@ -41,7 +41,14 @@
{#if redirect} - browser.runtime.sendMessage("redirectTab")}> + { + browser.runtime.sendMessage("redirectTab", () => { + window.close() + }) + }} + > @@ -50,7 +57,10 @@ {#if switchInstance} browser.tabs.update({ url: await servicesHelper.switchInstance(url) })} + on:click={async () => + browser.tabs.update({ url: await servicesHelper.switchInstance(url) }, () => { + window.close() + })} > @@ -62,7 +72,13 @@ - browser.runtime.sendMessage("reverseTab")}> + + browser.runtime.sendMessage("reverseTab", () => { + window.close() + })} + > @@ -85,7 +101,13 @@
- window.open(browser.runtime.getURL("pages/options/index.html"), "_blank")}> + + browser.tabs.create({ url: browser.runtime.getURL("pages/options/index.html") }, () => { + window.close() + })} + > diff --git a/src/pages/popup_src/components/Switch.svelte b/src/pages/popup_src/components/Switch.svelte index e581e5f4..42a86403 100644 --- a/src/pages/popup_src/components/Switch.svelte +++ b/src/pages/popup_src/components/Switch.svelte @@ -28,7 +28,10 @@
window.open(browser.runtime.getURL(_config.services[serviceKey].url), "_blank")} + on:click={() => + browser.tabs.create({ url: browser.runtime.getURL(_config.services[serviceKey].url) }, () => { + window.close() + })} > -- cgit 1.4.1 From 101e2eb89e21f6fecf8f2c39d26b29437fd180d4 Mon Sep 17 00:00:00 2001 From: ManeraKai Date: Fri, 2 Aug 2024 16:49:28 +0300 Subject: Closed popup after switching instance --- src/pages/popup_src/components/Switch.svelte | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src/pages/popup_src') diff --git a/src/pages/popup_src/components/Switch.svelte b/src/pages/popup_src/components/Switch.svelte index 42a86403..f3df9317 100644 --- a/src/pages/popup_src/components/Switch.svelte +++ b/src/pages/popup_src/components/Switch.svelte @@ -48,7 +48,10 @@ /> browser.tabs.update({ url: await servicesHelper.switchInstance(url, serviceKey) })} + on:click={async () => + browser.tabs.update({ url: await servicesHelper.switchInstance(url, serviceKey) }, () => { + window.close() + })} />
-- cgit 1.4.1 From feca205994a6d5def48233c115cd3d50f2568506 Mon Sep 17 00:00:00 2001 From: Monstorix Date: Sat, 10 Aug 2024 21:47:55 +0800 Subject: Fix sidebar layouts and font fallbacks for CJK --- src/pages/options_src/App.svelte | 2 +- src/pages/options_src/Sidebar.svelte | 3 ++- src/pages/popup_src/App.svelte | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) (limited to 'src/pages/popup_src') diff --git a/src/pages/options_src/App.svelte b/src/pages/options_src/App.svelte index dfafe1f0..b5a44856 100644 --- a/src/pages/options_src/App.svelte +++ b/src/pages/options_src/App.svelte @@ -110,7 +110,7 @@ margin: 0; padding-top: 50px; justify-content: center; - font-family: "Inter"; + font-family: "Inter", sans-serif; box-sizing: border-box; font-size: 16px; background-color: var(--bg-main); diff --git a/src/pages/options_src/Sidebar.svelte b/src/pages/options_src/Sidebar.svelte index 97780b15..5e2f4931 100644 --- a/src/pages/options_src/Sidebar.svelte +++ b/src/pages/options_src/Sidebar.svelte @@ -14,7 +14,7 @@ page.set("services")} style={$page == "services" && "color: var(--active);"}> - {browser.i18n.getMessage("general") || "Services"} + {browser.i18n.getMessage("services") || "Services"} @@ -37,6 +37,7 @@ color: var(--text); transition: 0.1s; margin: 10px; + min-width: max-content; } a:hover { diff --git a/src/pages/popup_src/App.svelte b/src/pages/popup_src/App.svelte index df37d55d..52aadc74 100644 --- a/src/pages/popup_src/App.svelte +++ b/src/pages/popup_src/App.svelte @@ -106,7 +106,7 @@ margin: 0; padding: 10px; padding-top: 20px; - font-family: "Inter"; + font-family: "Inter", sans-serif; font-size: 16px; background-color: var(--bg-main); color: var(--text); -- cgit 1.4.1 From 6bd542f858ceaa392e11a526c713359d8f667399 Mon Sep 17 00:00:00 2001 From: ManeraKai Date: Fri, 16 Aug 2024 15:53:53 +0300 Subject: Added arrow icon to dropdowns. Added settings button to each service in the popup https://github.com/libredirect/browser_extension/issues/961 --- src/pages/icons/SettingsIcon.svelte | 3 ++ src/pages/options_src/App.svelte | 10 +++---- src/pages/options_src/Services/Services.svelte | 13 +++++++-- src/pages/options_src/Sidebar.svelte | 6 ++-- src/pages/options_src/stores.js | 1 - src/pages/options_src/url.js | 38 ++++++++++++++++++++++++++ src/pages/popup_src/App.svelte | 2 +- src/pages/popup_src/Buttons.svelte | 4 +-- src/pages/popup_src/components/Switch.svelte | 8 ++++++ 9 files changed, 69 insertions(+), 16 deletions(-) create mode 100644 src/pages/options_src/url.js (limited to 'src/pages/popup_src') diff --git a/src/pages/icons/SettingsIcon.svelte b/src/pages/icons/SettingsIcon.svelte index f47d078a..00798289 100644 --- a/src/pages/icons/SettingsIcon.svelte +++ b/src/pages/icons/SettingsIcon.svelte @@ -1,10 +1,13 @@ (_page = val)) - const dark = { text: "#fff", bgMain: "#121212", @@ -85,9 +83,9 @@ --light-grey: {cssVariables.lightGrey};" > - {#if _page == "general"} + {#if !$url.hash || $url.hash == "#general"} - {:else if _page == "services"} + {:else if $url.hash.startsWith("#services")} {/if}
diff --git a/src/pages/options_src/Services/Services.svelte b/src/pages/options_src/Services/Services.svelte index 7c4a92b3..93afcded 100644 --- a/src/pages/options_src/Services/Services.svelte +++ b/src/pages/options_src/Services/Services.svelte @@ -1,6 +1,7 @@
- page.set("general")} style={$page == "general" && "color: var(--active);"}> + {browser.i18n.getMessage("general") || "General"} - page.set("services")} style={$page == "services" && "color: var(--active);"}> + {browser.i18n.getMessage("services") || "Services"} diff --git a/src/pages/options_src/stores.js b/src/pages/options_src/stores.js index 782f6064..7ae0f8c7 100644 --- a/src/pages/options_src/stores.js +++ b/src/pages/options_src/stores.js @@ -2,4 +2,3 @@ import { writable } from "svelte/store" export const options = writable(null) export const config = writable(null) -export const page = writable("general") diff --git a/src/pages/options_src/url.js b/src/pages/options_src/url.js new file mode 100644 index 00000000..010e5b21 --- /dev/null +++ b/src/pages/options_src/url.js @@ -0,0 +1,38 @@ +// https://svelte.dev/repl/5abaac000b164aa1aacc6051d5c4f584?version=3.59.2 + +import { derived, writable } from 'svelte/store' + +export function createUrlStore(ssrUrl) { + // Ideally a bundler constant so that it's tree-shakable + if (typeof window === 'undefined') { + const { subscribe } = writable(ssrUrl) + return { subscribe } + } + + const href = writable(window.location.href) + + const originalPushState = history.pushState + const originalReplaceState = history.replaceState + + const updateHref = () => href.set(window.location.href) + + history.pushState = () => { + originalPushState.apply(this, arguments) + updateHref() + } + + history.replaceState = () => { + originalReplaceState.apply(this, arguments) + updateHref() + } + + window.addEventListener('popstate', updateHref) + window.addEventListener('hashchange', updateHref) + + return { + subscribe: derived(href, ($href) => new URL($href)).subscribe + } +} + +// If you're using in a pure SPA, you can return a store directly and share it everywhere +export default createUrlStore() diff --git a/src/pages/popup_src/App.svelte b/src/pages/popup_src/App.svelte index 52aadc74..3409052d 100644 --- a/src/pages/popup_src/App.svelte +++ b/src/pages/popup_src/App.svelte @@ -88,7 +88,7 @@ diff --git a/src/pages/popup_src/components/Switch.svelte b/src/pages/popup_src/components/Switch.svelte index f3df9317..6485f875 100644 --- a/src/pages/popup_src/components/Switch.svelte +++ b/src/pages/popup_src/components/Switch.svelte @@ -9,6 +9,7 @@ import { onDestroy } from "svelte" import servicesHelper from "../../../assets/javascripts/services" import { options, config } from "../stores" + import SettingsIcon from "../../icons/SettingsIcon.svelte" let _options let _config @@ -53,6 +54,13 @@ window.close() })} /> + + browser.tabs.create({ url: browser.runtime.getURL(`pages/options/index.html#services:${serviceKey}`) }, () => { + window.close() + })} + />
-- cgit 1.4.1 From a94ad51a346d58f090e4d9a26fe5e78f15474acd Mon Sep 17 00:00:00 2001 From: ManeraKai Date: Sun, 18 Aug 2024 13:00:57 +0300 Subject: Allowing to import from previous version https://github.com/libredirect/browser_extension/issues/961 --- src/assets/javascripts/services.js | 134 +++++++++------------ src/pages/background/background.js | 8 +- .../options_src/General/SettingsButtons.svelte | 28 ++--- src/pages/options_src/Services/Services.svelte | 2 +- src/pages/popup_src/App.svelte | 2 +- 5 files changed, 76 insertions(+), 98 deletions(-) (limited to 'src/pages/popup_src') diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js index 417f66c3..9b6ef325 100644 --- a/src/assets/javascripts/services.js +++ b/src/assets/javascripts/services.js @@ -831,99 +831,86 @@ const defaultInstances = { ytify: ["https://ytify.netlify.app"], } +async function getDefaults() { + let config = await utils.getConfig() + let options = {} + for (const service in config.services) { + options[service] = {} + for (const defaultOption in config.services[service].options) { + options[service][defaultOption] = config.services[service].options[defaultOption] + } + for (const frontend in config.services[service].frontends) { + if (config.services[service].frontends[frontend].instanceList) { + options[frontend] = [] + } + } + } + options.exceptions = { + url: [], + regex: [], + } + options.theme = "detect" + options.popupServices = ["youtube", "tiktok", "imgur", "reddit", "quora", "translate", "maps"] + options.fetchInstances = "github" + options.redirectOnlyInIncognito = false + options = { ...options, ...defaultInstances } + return options +} + function initDefaults() { return new Promise(resolve => { browser.storage.local.clear(async () => { - let config = await utils.getConfig() - let options = {} - for (const service in config.services) { - options[service] = {} - for (const defaultOption in config.services[service].options) { - options[service][defaultOption] = config.services[service].options[defaultOption] - } - for (const frontend in config.services[service].frontends) { - if (config.services[service].frontends[frontend].instanceList) { - options[frontend] = [] - } - } - } - options.exceptions = { - url: [], - regex: [], - } - options.theme = "detect" - options.popupServices = ["youtube", "tiktok", "imgur", "reddit", "quora", "translate", "maps"] - options.fetchInstances = "github" - options.redirectOnlyInIncognito = false - - options = { ...options, ...defaultInstances } - + options = await getDefaults() browser.storage.local.set({ options }, () => resolve()) }) }) } -function upgradeOptions() { - return new Promise(async resolve => { - let options = await utils.getOptions() - - browser.storage.local.clear(() => { - browser.storage.local.set({ options }, () => { - resolve() - }) - }) - }) -} - -function processUpdate() { +function processUpdate(_options) { return new Promise(async resolve => { - let frontends = [] const config = await utils.getConfig() - let options = await utils.getOptions() - for (const service in config.services) { - if (!options[service]) options[service] = {} + let options = _options ?? await utils.getOptions() - if (!(options[service].frontend in config.services[service].frontends)) { - options[service] = config.services[service].options // Reset settings for service - delete options[options[service].frontend] // Remove deprecated frontend - } + const defaults = await getDefaults() - for (const defaultOption in config.services[service].options) { - if (!(defaultOption in options[service])) { - options[service][defaultOption] = config.services[service].options[defaultOption] + // Remove any unknown option or subOption + for (const optionName in options) { + if (!(optionName in defaults)) delete options[optionName] + else if (typeof optionName === 'object' && optionName !== null) { + for (const subOptionName in options[optionName]) { + if (!(subOptionName in defaults[optionName])) delete options[optionName][subOptionName] } } + } + + // Remove any unknwon popupService + options.popupServices = options.popupServices.filter(service => service in config.services) + + // Add missing options + for (const [defaultName, defaultValue] of Object.entries(defaults)) { + if (!(defaultName in options)) { + options[defaultName] = defaultValue + } + } - for (const frontend in config.services[service].frontends) { - frontends.push(frontend) - if (!(frontend in options) && config.services[service].frontends[frontend].instanceList) { - options[frontend] = defaultInstances[frontend] || [] - } + for (const [serviceName, serviceValue] of Object.entries(config.services)) { + // Reset service options if selected frontend is deprecated + if (!(options[serviceName].frontend in serviceValue.frontends)) { + options[serviceName] = serviceValue.options } - for (const frontend of options.popupServices) { - if (!Object.keys(config.services).includes(frontend)) { - const i = options.popupServices.indexOf(frontend) - if (i > -1) options.popupServices.splice(i, 1) + // Add a default service option if it's not present + for (const optionName in serviceValue.options) { + if (!(optionName in options[serviceName])) { + options[serviceName][optionName] = serviceValue.options[optionName] } } } - const general = ["theme", "popupServices", "fetchInstances", "redirectOnlyInIncognito"] - const combined = [ - ...Object.keys(config.services), - ...frontends, - ...general, - "exceptions", - "popupServices", - "version", - ] - for (const key in options) { - if (combined.indexOf(key) < 0) { - delete options[key] // Remove any unknown settings in options - } - } - browser.storage.local.set({ options }, () => { - resolve() + + browser.storage.local.clear(() => { + browser.storage.local.set({ options }, () => { + resolve(options) + }) }) }) } @@ -973,7 +960,6 @@ export default { computeService, reverse, initDefaults, - upgradeOptions, processUpdate, copyRaw, switchInstance, diff --git a/src/pages/background/background.js b/src/pages/background/background.js index d42e5027..576365bd 100644 --- a/src/pages/background/background.js +++ b/src/pages/background/background.js @@ -13,14 +13,8 @@ browser.runtime.onInstalled.addListener(async details => { if (!(await utils.getOptions())) { await servicesHelper.initDefaults() } - browser.runtime.openOptionsPage() } else if (details.reason == "update") { - if (details.previousVersion == "2.5.2") { - await servicesHelper.upgradeOptions() - await servicesHelper.processUpdate() - } else { - await servicesHelper.processUpdate() - } + await servicesHelper.processUpdate() } } }) diff --git a/src/pages/options_src/General/SettingsButtons.svelte b/src/pages/options_src/General/SettingsButtons.svelte index 2f574199..29b756d2 100644 --- a/src/pages/options_src/General/SettingsButtons.svelte +++ b/src/pages/options_src/General/SettingsButtons.svelte @@ -20,14 +20,12 @@ const reader = new FileReader() reader.readAsText(importSettingsFiles[0]) reader.onload = async () => { - const data = JSON.parse(reader.result) - if ("theme" in data && data.version == browser.runtime.getManifest().version) { - browser.storage.local.clear(async () => { - options.set(data) - }) - } else { - alert("Incompatible settings") + let data = JSON.parse(reader.result) + if (data.version != browser.runtime.getManifest().version) { + alert("Importing from a previous version. Be careful") } + data = await servicesHelper.processUpdate(data) + options.set(data) } reader.onerror = error => { console.log("error", error) @@ -51,20 +49,20 @@ } async function importSettingsSync() { - browser.storage.sync.get({ options }, r => { - const optionsSync = r.options - if (optionsSync.version == browser.runtime.getManifest().version) { - options.set(optionsSync) - } else { - alert("Error") + browser.storage.sync.get({ options }, async r => { + let data = r.options + if (data.version != browser.runtime.getManifest().version) { + alert("Importing from a previous version. Be careful") } + data = await servicesHelper.processUpdate(data) + options.set(data) }) } async function resetSettings() { browser.storage.local.clear(async () => { - await servicesHelper.initDefaults() - options.set(await utils.getOptions()) + const data = await servicesHelper.initDefaults() + options.set(data) }) } diff --git a/src/pages/options_src/Services/Services.svelte b/src/pages/options_src/Services/Services.svelte index 481afb83..6b16e824 100644 --- a/src/pages/options_src/Services/Services.svelte +++ b/src/pages/options_src/Services/Services.svelte @@ -72,7 +72,7 @@ {selection.label} {:else} - {browser.i18n.getMessage("search_service") || "Search Service"} + {browser.i18n.getMessage("searchService") || "Search Service"} {/if}
🮦
diff --git a/src/pages/popup_src/App.svelte b/src/pages/popup_src/App.svelte index 3409052d..2bd16169 100644 --- a/src/pages/popup_src/App.svelte +++ b/src/pages/popup_src/App.svelte @@ -88,7 +88,7 @@ diff --git a/src/pages/messages/index.html b/src/pages/messages/index.html new file mode 100644 index 00000000..8701c152 --- /dev/null +++ b/src/pages/messages/index.html @@ -0,0 +1,14 @@ + + + + + + + Settings + + + + + + + diff --git a/src/pages/messages/no_instance.html b/src/pages/messages/no_instance.html deleted file mode 100644 index 55e5fac7..00000000 --- a/src/pages/messages/no_instance.html +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - No instances found - - - - -
-

LibRedirect: You have no instance selected for this frontend

-
- - diff --git a/src/pages/messages_src/App.svelte b/src/pages/messages_src/App.svelte new file mode 100644 index 00000000..b08a143b --- /dev/null +++ b/src/pages/messages_src/App.svelte @@ -0,0 +1,132 @@ + + +{#if _options && _config} +
+ {#if window.location.search.includes("message=disabled")} +
+

You disabled redirections for this service

+ +
+ {:else if window.location.search.includes("message=no_instance")} +
+

You have no instance selected for this frontend

+ +
+ {/if} +
+{:else} +

Loading...

+{/if} + + diff --git a/src/pages/messages_src/main.js b/src/pages/messages_src/main.js new file mode 100644 index 00000000..c4012f4a --- /dev/null +++ b/src/pages/messages_src/main.js @@ -0,0 +1,7 @@ +import App from "./App.svelte" + +const app = new App({ + target: document.body, +}) + +export default app diff --git a/src/pages/messages_src/stores.js b/src/pages/messages_src/stores.js new file mode 100644 index 00000000..782f6064 --- /dev/null +++ b/src/pages/messages_src/stores.js @@ -0,0 +1,5 @@ +import { writable } from "svelte/store" + +export const options = writable(null) +export const config = writable(null) +export const page = writable("general") diff --git a/src/pages/options_src/App.svelte b/src/pages/options_src/App.svelte index 565aacef..1c4830bf 100644 --- a/src/pages/options_src/App.svelte +++ b/src/pages/options_src/App.svelte @@ -2,7 +2,7 @@ const browser = window.browser || window.chrome import General from "./General/General.svelte" - import url from './url' + import url from "./url" import utils from "../../assets/javascripts/utils.js" import { onDestroy } from "svelte" import servicesHelper from "../../assets/javascripts/services.js" @@ -37,51 +37,15 @@ config.set(await utils.getConfig()) }) - const dark = { - text: "#fff", - bgMain: "#121212", - bgSecondary: "#202020", - active: "#fbc117", - danger: "#f04141", - lightGrey: "#c3c3c3", - } - const light = { - text: "black", - bgMain: "white", - bgSecondary: "#e4e4e4", - active: "#fb9817", - danger: "#f04141", - lightGrey: "#c3c3c3", - } - let cssVariables - $: if (_options) { - if (_options.theme == "dark") { - cssVariables = dark - } else if (_options.theme == "light") { - cssVariables = light - } else if (window.matchMedia("(prefers-color-scheme: dark)").matches) { - cssVariables = dark - } else { - cssVariables = light - } - } + let style + $: if (_options) style = utils.style(_options, window) const dir = ["ar", "iw", "ku", "fa", "ur"].includes(browser.i18n.getUILanguage()) ? "rtl" : "ltr" document.body.dir = dir {#if _options && _config} -
+
{#if !$url.hash || $url.hash == "#general"} diff --git a/src/pages/options_src/Services/Instances.svelte b/src/pages/options_src/Services/Instances.svelte index 32425b80..4e5d1e7d 100644 --- a/src/pages/options_src/Services/Instances.svelte +++ b/src/pages/options_src/Services/Instances.svelte @@ -64,16 +64,9 @@ pingCache[instance] = colorTime(time) } } - function randomInstances(n) { - let instances = [] - for (let i = 0; i < n; i++) { - instances.push(redirects[selectedFrontend]["clearnet"][Math.floor(Math.random() * allInstances.length)]) - } - return instances - } async function autoPickInstance() { - const instances = randomInstances(5) + const instances = utils.randomInstances(redirects[selectedFrontend]["clearnet"], 5) const myInstancesCache = [] for (const instance of instances) { pingCache[instance] = { color: "lightblue", value: "pinging..." } @@ -81,9 +74,7 @@ pingCache[instance] = colorTime(time) myInstancesCache.push([instance, time]) } - myInstancesCache.sort(function (a, b) { - return a[1] - b[1] - }) + myInstancesCache.sort((a, b) => a[1] - b[1]) _options[selectedFrontend].push(myInstancesCache[0][0]) options.set(_options) diff --git a/src/pages/popup_src/App.svelte b/src/pages/popup_src/App.svelte index 8f958a3e..f6699312 100644 --- a/src/pages/popup_src/App.svelte +++ b/src/pages/popup_src/App.svelte @@ -38,48 +38,12 @@ let _page page.subscribe(val => (_page = val)) - const dark = { - text: "#fff", - bgMain: "#121212", - bgSecondary: "#202020", - active: "#fbc117", - danger: "#f04141", - lightGrey: "#c3c3c3", - } - const light = { - text: "black", - bgMain: "white", - bgSecondary: "#e4e4e4", - active: "#fb9817", - danger: "#f04141", - lightGrey: "#c3c3c3", - } - let cssVariables - $: if (_options) { - if (_options.theme == "dark") { - cssVariables = dark - } else if (_options.theme == "light") { - cssVariables = light - } else if (window.matchMedia("(prefers-color-scheme: dark)").matches) { - cssVariables = dark - } else { - cssVariables = light - } - } + let style + $: if (_options) style = utils.style(_options, window) {#if _options && _config} -
+
{:else} -- cgit 1.4.1 From 51686a395eee7e3d325a86ee69b19f0f732bd547 Mon Sep 17 00:00:00 2001 From: ManeraKai Date: Tue, 3 Sep 2024 21:57:18 +0300 Subject: Fixing bugs --- src/assets/javascripts/services.js | 38 ++++++++++++++------------------------ src/pages/background/background.js | 34 +++++++++++++++++++++++++--------- src/pages/messages_src/App.svelte | 17 +++++++++++------ src/pages/popup_src/Buttons.svelte | 17 +++++++++++------ 4 files changed, 61 insertions(+), 45 deletions(-) (limited to 'src/pages/popup_src') diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js index 243f0598..d19d8aa2 100644 --- a/src/assets/javascripts/services.js +++ b/src/assets/javascripts/services.js @@ -66,7 +66,6 @@ function rewrite(url, originUrl, frontend, randomInstance) { case "searx": case "searxng": for (const key of [...url.searchParams.keys()]) if (key !== "q") url.searchParams.delete(key) - console.log(url.searchParams) return `${randomInstance}/${url.search}` case "whoogle": for (const key of [...url.searchParams.keys()]) if (key !== "q") url.searchParams.delete(key) @@ -658,7 +657,7 @@ function computeService(url) { return } else { for (const frontend in config.services[service].frontends) { - if (all(service, frontend, options, config).includes(utils.protocolHost(url))) { + if (all(service, frontend, options, config).findIndex(instance => url.href.startsWith(instance)) >= 0) { return resolve(service) } } @@ -670,8 +669,8 @@ function computeService(url) { export function computeFrontend(url) { for (const service in config.services) { for (const frontend in config.services[service].frontends) { - if (all(service, frontend, options, config).includes(utils.protocolHost(url))) { - return {service, frontend} + if (all(service, frontend, options, config).findIndex(instance => url.href.startsWith(instance)) >= 0) { + return { service, frontend } } } } @@ -692,25 +691,20 @@ function switchInstance(url, customService) { if (instancesList !== undefined) { const newInstance = utils.getNextInstance(url.origin, instancesList) if (newInstance) { - resolve(`${newInstance}${url.pathname}${url.search}`) - return + return resolve(`${newInstance}${url.pathname}${url.search}`) } } } else { for (const service in config.services) { let instancesList = options[options[service].frontend] if (instancesList === undefined) continue - if (!instancesList.includes(protocolHost)) continue - - instancesList.splice(instancesList.indexOf(protocolHost), 1) - if (instancesList.length === 0) { - resolve() - return - } + const index = instancesList.findIndex(instance => url.href.startsWith(instance)) + if (index < 0) continue + instancesList.splice(index, 1) + if (instancesList.length === 0) return resolve() const newInstance = utils.getNextInstance(url.origin, instancesList) if (newInstance) { - resolve(`${newInstance}${url.pathname}${url.search}`) - return + return resolve(`${newInstance}${url.pathname}${url.search}`) } } } @@ -724,11 +718,14 @@ function switchInstance(url, customService) { async function reverse(url) { let options = await utils.getOptions() let config = await utils.getConfig() - let protocolHost = utils.protocolHost(url) for (const service in config.services) { let frontend = options[service].frontend if (options[frontend] == undefined) continue - if (!options[frontend].includes(protocolHost) && protocolHost != `http://${frontend}.localhost:8080`) continue + if ( + options[frontend].findIndex(instance => url.href.startsWith(instance)) < 0 && + !url.href.startsWith(`http://${frontend}.localhost:8080`) + ) + continue switch (service) { case "youtube": case "imdb": @@ -776,7 +773,6 @@ async function reverse(url) { } const defaultInstances = { - // invidious: ["https://inv.vern.cc"], materialious: ["https://app.materialio.us"], viewtube: ["https://viewtube.io"], piped: ["https://pipedapi-libre.kavin.rocks"], @@ -786,8 +782,6 @@ const defaultInstances = { poketube: ["https://poketube.fun"], proxiTok: ["https://proxitok.pabloferreiro.es"], redlib: ["https://safereddit.com"], - libreddit: ["https://libreddit.spike.codes"], - teddit: ["https://teddit.net"], eddrit: ["https://eddrit.com"], scribe: ["https://scribe.rip"], libMedium: ["https://md.vern.cc"], @@ -807,15 +801,11 @@ const defaultInstances = { intellectual: ["https://intellectual.insprill.net"], ruralDictionary: ["https://rd.vern.cc"], anonymousOverflow: ["https://code.whatever.social"], - biblioReads: ["https://biblioreads.ml"], - wikiless: ["https://wikiless.org"], suds: ["https://sd.vern.cc"], unfunny: ["https://uf.vern.cc"], soprano: ["https://sp.vern.cc"], meme: ["https://mm.vern.cc"], waybackClassic: ["https://wayback-classic.net"], - gothub: ["https://gh.odyssey346.dev"], - mikuInvidious: ["https://mikuinv.resrv.org"], tent: ["https://tent.sny.sh"], wolfreeAlpha: ["https://gqq.gitlab.io", "https://uqq.gitlab.io"], laboratory: ["https://lab.vern.cc"], diff --git a/src/pages/background/background.js b/src/pages/background/background.js index 0d558b01..1fcba190 100644 --- a/src/pages/background/background.js +++ b/src/pages/background/background.js @@ -67,16 +67,22 @@ browser.webRequest.onBeforeRequest.addListener( tabIdRedirects[details.tabId] ) - if (newUrl && newUrl.startsWith("https://no-instance.libredirect.invalid")) { - const url = new URL(newUrl) - const frontend = url.searchParams.get("frontend") - const oldUrl = new URL(url.searchParams.get("url")) + if ( + (newUrl && newUrl.startsWith("https://no-instance.libredirect.invalid")) || + (!newUrl && url.href.startsWith("https://no-instance.libredirect.invalid")) + ) { + newUrl = newUrl ? new URL(newUrl) : url + const frontend = newUrl.searchParams.get("frontend") + const oldUrl = new URL(newUrl.searchParams.get("url")) const params = new URLSearchParams({ message: "no_instance", url: oldUrl, frontend: frontend, }) - newUrl = browser.runtime.getURL(`/pages/messages/index.html?${params.toString()}`) + browser.tabs.update({ + url: browser.runtime.getURL(`/pages/messages/index.html?${params.toString()}`), + }) + return { cancel: true } } if (!newUrl) { @@ -85,7 +91,10 @@ browser.webRequest.onBeforeRequest.addListener( message: "disabled", url: url.href, }) - newUrl = browser.runtime.getURL(`/pages/messages/index.html?${params.toString()}`) + browser.tabs.update({ + url: browser.runtime.getURL(`/pages/messages/index.html?${params.toString()}`), + }) + return { cancel: true } } } @@ -121,9 +130,11 @@ browser.webRequest.onHeadersReceived.addListener( frontend: frontend, service: service, }) - browser.tabs.update({ - url: browser.runtime.getURL(`/pages/messages/index.html?${params.toString()}`), - }) + setTimeout(() => { + browser.tabs.update({ + url: browser.runtime.getURL(`/pages/messages/index.html?${params.toString()}`), + }) + }, 2000) } }, { urls: [""] } @@ -365,3 +376,8 @@ browser.runtime.getPlatformInfo(r => { }) } }) + +browser.runtime.onMessage.addListener(r => { + if (r.message == "reverse") tabIdRedirects[r.tabId] = false + else if (r.message == "redirect") tabIdRedirects[r.tabId] = true +}) diff --git a/src/pages/messages_src/App.svelte b/src/pages/messages_src/App.svelte index 6d68ff5f..1c5170dd 100644 --- a/src/pages/messages_src/App.svelte +++ b/src/pages/messages_src/App.svelte @@ -33,7 +33,6 @@ await servicesHelper.initDefaults() opts = await utils.getOptions() } - redirects = await utils.getList(opts) options.set(opts) config.set(await utils.getConfig()) }) @@ -45,7 +44,6 @@ $: if (_options) style = utils.style(_options, window) let autoPicking = false - let redirects const params = new URLSearchParams(window.location.search) const oldUrl = new URL(params.get("url")) @@ -53,10 +51,14 @@ async function autoPick() { const frontend = params.get("frontend") autoPicking = true + const redirects = await utils.getList(_options) const instances = utils.randomInstances(redirects[frontend]["clearnet"], 5) - const pings = await Promise.all([...instances.map(async instance => [instance, await utils.ping(instance)])]) + const pings = await Promise.all([ + ...instances.map(async instance => { + return [instance, await utils.ping(instance)] + }), + ]) pings.sort((a, b) => a[1] - b[1]) - console.log(pings) _options[frontend].push(pings[0][0]) options.set(_options) autoPicking = false @@ -85,8 +87,9 @@ } async function removeInstance() { + const service = await servicesHelper.computeService(oldUrl) const frontend = params.get("frontend") - const i = _options[frontend].indexOf(utils.protocolHost(oldUrl)) + const i = _options[frontend].findIndex(instance => oldUrl.href.startsWith(instance)) _options[frontend].splice(i, 1) options.set(_options) const newUrl = await servicesHelper.switchInstance(oldUrl, service) @@ -94,8 +97,10 @@ } async function removeAndAutoPickInstance() { + const service = await servicesHelper.computeService(oldUrl) + const frontend = params.get("frontend") - const i = _options[frontend].indexOf(utils.protocolHost(oldUrl)) + const i = _options[frontend].findIndex(instance => oldUrl.href.startsWith(instance)) _options[frontend].splice(i, 1) options.set(_options) await autoPick() diff --git a/src/pages/popup_src/Buttons.svelte b/src/pages/popup_src/Buttons.svelte index c0644ff7..ab5682dc 100644 --- a/src/pages/popup_src/Buttons.svelte +++ b/src/pages/popup_src/Buttons.svelte @@ -44,8 +44,10 @@ { - browser.tabs.update({ url: redirect }, () => { - window.close() + browser.tabs.query({ active: true, currentWindow: true }, tabs => { + browser.runtime.sendMessage({ message: "redirect", tabId: tabs[0].id }, () => { + browser.tabs.update({ url: redirect }) + }) }) }} > @@ -74,10 +76,13 @@ - browser.tabs.update({ url: redirectToOriginal }, () => { - window.close() - })} + on:click={() => { + browser.tabs.query({ active: true, currentWindow: true }, tabs => { + browser.runtime.sendMessage({ message: "reverse", tabId: tabs[0].id }, () => { + browser.tabs.update({ url: redirectToOriginal }) + }) + }) + }} > -- cgit 1.4.1