From 90762a3d17e8fa5c9984aeaca764cf53d68d8944 Mon Sep 17 00:00:00 2001 From: ManeraKai Date: Thu, 12 Sep 2024 11:13:54 +0300 Subject: Updated skunkyArt redirection logic --- src/assets/javascripts/services.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'src/assets/javascripts') diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js index d19d8aa2..48c0a2db 100644 --- a/src/assets/javascripts/services.js +++ b/src/assets/javascripts/services.js @@ -519,16 +519,16 @@ function rewrite(url, originUrl, frontend, randomInstance) { return `${randomInstance}${url.pathname}${url.search}` } case "skunkyArt": { - if (url.pathname.startsWith("/search")) return `${randomInstance}${url.pathname}${url.search}&scope=all` + if (url.pathname.startsWith("/search")) return `${randomInstance}${url.pathname}${url.search}&type=all` - const artReg = /^\/.*?\/art\/(.*)\/?/.exec(url.pathname) - if (artReg) return `${randomInstance}/post/art/${artReg[1]}${url.search}` + const artReg = /^\/(.*?)\/art\/(.*)\/?/.exec(url.pathname) + if (artReg) return `${randomInstance}/post/${artReg[1]}/${artReg[2]}${url.search}` const userReg = /^\/([^\/]+)$/.exec(url.pathname) - if (userReg) return `${randomInstance}/user/${userReg[1]}${url.search}` + if (userReg)return `${randomInstance}/group_user?q=${userReg[1]}&type=about` - const galleryReg = /^\/.*?\/gallery(\/$|$)$/.exec(url.pathname) - if (galleryReg) return `${randomInstance}/user/${userReg[1]}?a=gallery` + const galleryReg = /^\/(.*?)\/gallery(\/$|$)$/.exec(url.pathname) + if (galleryReg) return `${randomInstance}/group_user?q=${galleryReg[1]}&type=gallery` return `${randomInstance}${url.pathname}${url.search}` } -- cgit 1.4.1 From df61cdb265c90b37ba0317417d04d709204e74b3 Mon Sep 17 00:00:00 2001 From: ManeraKai Date: Fri, 13 Sep 2024 21:11:49 +0300 Subject: Fixing bugs. 2.9.1 => 3.0.0 --- src/assets/javascripts/services.js | 3 ++- src/manifest.json | 2 +- src/pages/background/background.js | 27 ++++++++++++++------------- 3 files changed, 17 insertions(+), 15 deletions(-) (limited to 'src/assets/javascripts') diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js index 48c0a2db..1c84eff0 100644 --- a/src/assets/javascripts/services.js +++ b/src/assets/javascripts/services.js @@ -525,7 +525,7 @@ function rewrite(url, originUrl, frontend, randomInstance) { if (artReg) return `${randomInstance}/post/${artReg[1]}/${artReg[2]}${url.search}` const userReg = /^\/([^\/]+)$/.exec(url.pathname) - if (userReg)return `${randomInstance}/group_user?q=${userReg[1]}&type=about` + if (userReg) return `${randomInstance}/group_user?q=${userReg[1]}&type=about` const galleryReg = /^\/(.*?)\/gallery(\/$|$)$/.exec(url.pathname) if (galleryReg) return `${randomInstance}/group_user?q=${galleryReg[1]}&type=gallery` @@ -941,6 +941,7 @@ async function copyRaw(url) { * @param {URL} url */ function isException(url) { + if (!options) return false if (!options.exceptions) return false let exceptions = options.exceptions if (exceptions && url) { diff --git a/src/manifest.json b/src/manifest.json index 16a863f1..7bb01fd8 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -1,7 +1,7 @@ { "name": "__MSG_extensionName__", "description": "__MSG_extensionDescription__", - "version": "2.9.1", + "version": "3.0.0", "manifest_version": 2, "browser_specific_settings": { "gecko": { diff --git a/src/pages/background/background.js b/src/pages/background/background.js index 1fcba190..d566ff5c 100644 --- a/src/pages/background/background.js +++ b/src/pages/background/background.js @@ -71,6 +71,7 @@ browser.webRequest.onBeforeRequest.addListener( (newUrl && newUrl.startsWith("https://no-instance.libredirect.invalid")) || (!newUrl && url.href.startsWith("https://no-instance.libredirect.invalid")) ) { + if (details.type != "main_frame") return null newUrl = newUrl ? new URL(newUrl) : url const frontend = newUrl.searchParams.get("frontend") const oldUrl = new URL(newUrl.searchParams.get("url")) @@ -85,17 +86,16 @@ browser.webRequest.onBeforeRequest.addListener( return { cancel: true } } - if (!newUrl) { - if (url.href.match(/^https?:\/{2}(.*\.)?libredirect\.invalid.*/)) { - const params = new URLSearchParams({ - message: "disabled", - url: url.href, - }) - browser.tabs.update({ - url: browser.runtime.getURL(`/pages/messages/index.html?${params.toString()}`), - }) - return { cancel: true } - } + if (!newUrl && url.href.match(/^https?:\/{2}(.*\.)?libredirect\.invalid.*/)) { + if (details.type != "main_frame") return null + const params = new URLSearchParams({ + message: "disabled", + url: url.href, + }) + browser.tabs.update({ + url: browser.runtime.getURL(`/pages/messages/index.html?${params.toString()}`), + }) + return { cancel: true } } if (newUrl === "CANCEL") { @@ -121,8 +121,9 @@ browser.webRequest.onHeadersReceived.addListener( details => { if (details.statusCode >= 501 || details.statusCode == 429 || details.statusCode == 403) { const url = new URL(details.url) - const { service, frontend } = servicesHelper.computeFrontend(url) - if (!service) return + const r = servicesHelper.computeFrontend(url) + if (!r) return + const { service, frontend } = r const params = new URLSearchParams({ message: "server_error", code: details.statusCode, -- cgit 1.4.1 From 823af5a0a31a628d84a106dc5b78b2085329a5e7 Mon Sep 17 00:00:00 2001 From: ManeraKai Date: Sat, 14 Sep 2024 22:51:35 +0300 Subject: Moving Server error listener to popup https://github.com/libredirect/browser_extension/issues/992 --- src/assets/javascripts/services.js | 4 +- src/pages/background/background.js | 24 ------- src/pages/messages_src/App.svelte | 61 ---------------- src/pages/popup_src/Buttons.svelte | 113 ++++++++++++++++++++++++++---- src/pages/popup_src/components/Row.svelte | 23 +++--- 5 files changed, 115 insertions(+), 110 deletions(-) (limited to 'src/assets/javascripts') diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js index 1c84eff0..a0ba0111 100644 --- a/src/assets/javascripts/services.js +++ b/src/assets/javascripts/services.js @@ -669,7 +669,9 @@ 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).findIndex(instance => url.href.startsWith(instance)) >= 0) { + const instances = all(service, frontend, options, config) + const i = instances.findIndex(instance => url.href.startsWith(instance)) + if (i >= 0) { return { service, frontend } } } diff --git a/src/pages/background/background.js b/src/pages/background/background.js index 029686a3..4b46ea89 100644 --- a/src/pages/background/background.js +++ b/src/pages/background/background.js @@ -117,30 +117,6 @@ browser.webRequest.onBeforeRequest.addListener( ["blocking"] ) -// browser.webRequest.onHeadersReceived.addListener( -// details => { -// if (details.statusCode >= 501 || details.statusCode == 429 || details.statusCode == 403) { -// const url = new URL(details.url) -// const r = servicesHelper.computeFrontend(url) -// if (!r) return -// const { service, frontend } = r -// const params = new URLSearchParams({ -// message: "server_error", -// code: details.statusCode, -// url: url.href, -// frontend: frontend, -// service: service, -// }) -// setTimeout(() => { -// browser.tabs.update({ -// url: browser.runtime.getURL(`/pages/messages/index.html?${params.toString()}`), -// }) -// }, 2000) -// } -// }, -// { urls: [""] } -// ) - browser.tabs.onRemoved.addListener(tabId => { if (tabIdRedirects[tabId] != undefined) { delete tabIdRedirects[tabId] diff --git a/src/pages/messages_src/App.svelte b/src/pages/messages_src/App.svelte index 1c5170dd..9f464ac7 100644 --- a/src/pages/messages_src/App.svelte +++ b/src/pages/messages_src/App.svelte @@ -80,39 +80,6 @@ const newUrl = await servicesHelper.redirectAsync(oldUrl, "main_frame", null, null, false, true) browser.tabs.update({ url: newUrl }) } - - async function switchInstance() { - const newUrl = await servicesHelper.switchInstance(oldUrl) - browser.tabs.update({ url: newUrl }) - } - - async function removeInstance() { - const service = await servicesHelper.computeService(oldUrl) - const frontend = params.get("frontend") - 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) - browser.tabs.update({ url: newUrl }) - } - - async function removeAndAutoPickInstance() { - const service = await servicesHelper.computeService(oldUrl) - - const frontend = params.get("frontend") - const i = _options[frontend].findIndex(instance => oldUrl.href.startsWith(instance)) - _options[frontend].splice(i, 1) - options.set(_options) - await autoPick() - const newUrl = await servicesHelper.switchInstance(oldUrl, service) - browser.tabs.update({ url: newUrl }) - } - - async function addAutoPickInstance() { - await autoPick() - const newUrl = await servicesHelper.switchInstance(oldUrl) - browser.tabs.update({ url: newUrl }) - } {#if _options && _config} @@ -124,34 +91,6 @@ {browser.i18n.getMessage("enable") || "Enable"} - {:else if params.get("message") == "server_error"} - -
-

Your selected instance gave out an error: {params.get("code")}

- {#if _options[params.get("frontend")].length > 1} - - - {:else} - - - {/if} -
{:else if params.get("message") == "no_instance"}

You have no instance selected for this frontend

diff --git a/src/pages/popup_src/Buttons.svelte b/src/pages/popup_src/Buttons.svelte index ab5682dc..d2fc5433 100644 --- a/src/pages/popup_src/Buttons.svelte +++ b/src/pages/popup_src/Buttons.svelte @@ -10,11 +10,14 @@ import SettingsIcon from "../icons/SettingsIcon.svelte" import { options, config } from "./stores" import { onDestroy } from "svelte" - import servicesHelper from "../../assets/javascripts/services" + import servicesHelper, { computeFrontend } from "../../assets/javascripts/services" import Switch from "./components/Switch.svelte" + import AutoPickIcon from "../icons/AutoPickIcon.svelte" + import utils from "../../assets/javascripts/utils" let _options let _config + let autoPicking = false const unsubscribeOptions = options.subscribe(val => (_options = val)) const unsubscribeConfig = config.subscribe(val => (_config = val)) @@ -28,6 +31,8 @@ let redirectToOriginal let redirect let currentService + let frontend + let service browser.tabs.query({ active: true, currentWindow: true }, async tabs => { if (tabs[0].url) { url = new URL(tabs[0].url) @@ -35,8 +40,51 @@ servicesHelper.reverse(url).then(r => (redirectToOriginal = r)) servicesHelper.redirectAsync(url, "main_frame", null, null, false, true).then(r => (redirect = r)) servicesHelper.computeService(url).then(r => (currentService = r)) + const computed = servicesHelper.computeFrontend(url) + if (computed) { + ;({ service, frontend } = computed) + } } }) + + async function removeInstance() { + const i = _options[frontend].findIndex(instance => url.href.startsWith(instance)) + _options[frontend].splice(i, 1) + options.set(_options) + const newUrl = await servicesHelper.switchInstance(url, service) + browser.tabs.update({ url: newUrl }) + } + + async function autoPick() { + 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 => { + return [instance, await utils.ping(instance)] + }), + ]) + pings.sort((a, b) => a[1] - b[1]) + _options[frontend].push(pings[0][0]) + options.set(_options) + autoPicking = false + } + + async function addAutoPickInstance() { + await autoPick() + const newUrl = await servicesHelper.switchInstance(url) + browser.tabs.update({ url: newUrl }) + } + + async function removeAndAutoPickInstance() { + const i = _options[frontend].findIndex(instance => url.href.startsWith(instance)) + _options[frontend].splice(i, 1) + options.set(_options) + await autoPick() + const newUrl = await servicesHelper.switchInstance(url, service) + browser.tabs.update({ url: newUrl }) + } + $: console.log("autoPicking", autoPicking)
@@ -56,17 +104,44 @@ {/if} - {#if switchInstance} - - browser.tabs.update({ url: switchInstance }, () => { - window.close() - })} - > - - - + {#if service && frontend} + {#if _options[frontend].length > 1} + {#if switchInstance} + + browser.tabs.update({ url: switchInstance }, () => { + window.close() + })} + > + + + + {/if} + + + + + {:else} + + + + + + + + + {/if} {/if} {#if redirectToOriginal} @@ -130,6 +205,20 @@ transform: translateY(1px); } + :global(.disabled) { + cursor: not-allowed; + opacity: 0.5; + } + + :global(.disabled:hover) { + color: var(--text); + cursor: not-allowed; + } + + :global(.disabled:active) { + transform: none; + } + :global(img, svg) { margin-right: 5px; margin-left: 0; diff --git a/src/pages/popup_src/components/Row.svelte b/src/pages/popup_src/components/Row.svelte index a4d78f07..064942da 100644 --- a/src/pages/popup_src/components/Row.svelte +++ b/src/pages/popup_src/components/Row.svelte @@ -1,13 +1,12 @@
- -
- - - \ No newline at end of file + +
+ + -- cgit 1.4.1 From ae3ae00cb7a622a2c0a3fd053c78b3f1b73117fd Mon Sep 17 00:00:00 2001 From: ManeraKai Date: Sun, 15 Sep 2024 07:03:24 +0300 Subject: Fixed last slash bug when adding a custom instance https://github.com/libredirect/browser_extension/issues/996 --- src/assets/javascripts/utils.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/assets/javascripts') diff --git a/src/assets/javascripts/utils.js b/src/assets/javascripts/utils.js index e5b8ba46..d81a96bc 100644 --- a/src/assets/javascripts/utils.js +++ b/src/assets/javascripts/utils.js @@ -31,7 +31,8 @@ function protocolHost(url) { if (url.pathname == "/TekstoLibre/" && url.host.endsWith("github.io")) return `${url.protocol}//${url.host}${url.pathname.slice(0, -1)}` - return `${url.protocol}//${url.host}${url.pathname}` + const pathname = url.pathname != "/" ? url.pathname : "" + return `${url.protocol}//${url.host}${pathname}` } /** -- cgit 1.4.1 From d4151c826fff5008a0d6017feced261061585deb Mon Sep 17 00:00:00 2001 From: ManeraKai Date: Sat, 21 Sep 2024 09:30:22 +0300 Subject: Restricted maps regex --- src/assets/javascripts/services.js | 40 ++++------- src/assets/javascripts/utils.js | 17 +++++ src/config.json | 3 +- src/pages/messages_src/App.svelte | 43 +++++------ src/pages/options_src/Services/Instances.svelte | 57 ++++++++------- src/pages/popup_src/Buttons.svelte | 95 ++++++++++++------------- 6 files changed, 126 insertions(+), 129 deletions(-) (limited to 'src/assets/javascripts') diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js index a0ba0111..80a4851c 100644 --- a/src/assets/javascripts/services.js +++ b/src/assets/javascripts/services.js @@ -647,32 +647,19 @@ async function redirectAsync(url, type, originUrl, documentUrl, incognito, force /** * @param {URL} url */ -function computeService(url) { - return new Promise(async resolve => { - const config = await utils.getConfig() - const options = await utils.getOptions() - for (const service in config.services) { - if (regexArray(service, url, config, options)) { - resolve(service) - return - } else { - for (const frontend in config.services[service].frontends) { - if (all(service, frontend, options, config).findIndex(instance => url.href.startsWith(instance)) >= 0) { - return resolve(service) - } - } - } - } - resolve() - }) -} -export function computeFrontend(url) { +async function computeServiceFrontend(url) { + const config = await utils.getConfig() + const options = await utils.getOptions() for (const service in config.services) { - for (const frontend in config.services[service].frontends) { - const instances = all(service, frontend, options, config) - const i = instances.findIndex(instance => url.href.startsWith(instance)) - if (i >= 0) { - return { service, frontend } + if (regexArray(service, url, config, options)) { + return { service, frontend: null } + } else { + for (const frontend in config.services[service].frontends) { + const instances = all(service, frontend, options, config) + const i = instances.findIndex(instance => url.href.startsWith(instance)) + if (i >= 0) { + return { service, frontend } + } } } } @@ -970,12 +957,11 @@ function isException(url) { export default { redirect, redirectAsync, - computeService, + computeServiceFrontend, reverse, initDefaults, processUpdate, copyRaw, switchInstance, isException, - computeFrontend, } diff --git a/src/assets/javascripts/utils.js b/src/assets/javascripts/utils.js index d81a96bc..f360a15b 100644 --- a/src/assets/javascripts/utils.js +++ b/src/assets/javascripts/utils.js @@ -222,6 +222,22 @@ export function randomInstances(clearnet, n) { } return instances } + +async function autoPickInstance(clearnet, url) { + if (url) { + const i = clearnet.findIndex(instance => url.href.startsWith(instance)) + if (i >= 0) clearnet.splice(i, 1) + } + const random = randomInstances(clearnet, 5) + const pings = await Promise.all([ + ...random.map(async instance => { + return [instance, await ping(instance)] + }), + ]) + pings.sort((a, b) => a[1] - b[1]) + return pings[0][0] +} + export function style(options, window) { const vars = cssVariables(options, window) return `--text: ${vars.text}; @@ -277,4 +293,5 @@ export default { convertMapCentre, randomInstances, style, + autoPickInstance, } diff --git a/src/config.json b/src/config.json index 045d7f20..9767bf43 100644 --- a/src/config.json +++ b/src/config.json @@ -1147,7 +1147,8 @@ }, "targets": [ "^https?:\\/{2}maps\\.libredirect\\.invalid", - "^https?:\\/{2}(((www|maps)\\.)?(google\\.).*(\\/maps)|maps\\.(google\\.).*)" + "^https?:\\/{2}(www\\.)?maps\\.google(\\.[a-z]{2,3}){1,2}\\/", + "^https?:\\/{2}(www\\.)?google(\\.[a-z]{2,3}){1,2}\\/maps\\/?" ], "name": "Maps", "options": { diff --git a/src/pages/messages_src/App.svelte b/src/pages/messages_src/App.svelte index 9f464ac7..82526530 100644 --- a/src/pages/messages_src/App.svelte +++ b/src/pages/messages_src/App.svelte @@ -9,7 +9,6 @@ import { options, config, page } from "./stores" import Button from "../components/Button.svelte" import AutoPickIcon from "../icons/AutoPickIcon.svelte" - import SwitchInstanceIcon from "../icons/SwitchInstanceIcon.svelte" let _options const unsubscribeOptions = options.subscribe(val => { @@ -49,33 +48,16 @@ const oldUrl = new URL(params.get("url")) async function autoPick() { - const frontend = params.get("frontend") autoPicking = true + const frontend = params.get("frontend") const redirects = await utils.getList(_options) - const instances = utils.randomInstances(redirects[frontend]["clearnet"], 5) - const pings = await Promise.all([ - ...instances.map(async instance => { - return [instance, await utils.ping(instance)] - }), - ]) - pings.sort((a, b) => a[1] - b[1]) - _options[frontend].push(pings[0][0]) + const clearnet = redirects[frontend]["clearnet"] + const instance = await utils.autoPickInstance(clearnet) + _options[frontend].push(instance) options.set(_options) autoPicking = false } - async function autoPickInstance() { - await autoPick() - await redirectUrl() - } - - async function enableService() { - const service = await servicesHelper.computeService(oldUrl) - _options[service].enabled = true - options.set(_options) - await redirectUrl() - } - async function redirectUrl() { const newUrl = await servicesHelper.redirectAsync(oldUrl, "main_frame", null, null, false, true) browser.tabs.update({ url: newUrl }) @@ -87,14 +69,27 @@ {#if params.get("message") == "disabled"}

You disabled redirections for this service

-
{:else if params.get("message") == "no_instance"}

You have no instance selected for this frontend

- diff --git a/src/pages/options_src/Services/Instances.svelte b/src/pages/options_src/Services/Instances.svelte index 4e5d1e7d..7a04b04e 100644 --- a/src/pages/options_src/Services/Instances.svelte +++ b/src/pages/options_src/Services/Instances.svelte @@ -56,30 +56,6 @@ return true } - async function pingInstances() { - pingCache = {} - for (const instance of allInstances) { - pingCache[instance] = { color: "lightblue", value: "pinging..." } - const time = await utils.ping(instance) - pingCache[instance] = colorTime(time) - } - } - - async function autoPickInstance() { - const instances = utils.randomInstances(redirects[selectedFrontend]["clearnet"], 5) - const myInstancesCache = [] - for (const instance of instances) { - pingCache[instance] = { color: "lightblue", value: "pinging..." } - const time = await utils.ping(instance) - pingCache[instance] = colorTime(time) - myInstancesCache.push([instance, time]) - } - myInstancesCache.sort((a, b) => a[1] - b[1]) - - _options[selectedFrontend].push(myInstancesCache[0][0]) - options.set(_options) - } - function colorTime(time) { let value let color @@ -113,17 +89,46 @@ options.set(_options) } } + + let autoPicking = false + let pinging = false {#if serviceConf.frontends[selectedFrontend].instanceList && redirects && blacklist}
- - diff --git a/src/pages/popup_src/Buttons.svelte b/src/pages/popup_src/Buttons.svelte index 992ed8e2..2354fcac 100644 --- a/src/pages/popup_src/Buttons.svelte +++ b/src/pages/popup_src/Buttons.svelte @@ -17,7 +17,6 @@ let _options let _config - let autoPicking = false const unsubscribeOptions = options.subscribe(val => (_options = val)) const unsubscribeConfig = config.subscribe(val => (_config = val)) @@ -30,7 +29,6 @@ let switchInstance let redirectToOriginal let redirect - let currentService let frontend let service browser.tabs.query({ active: true, currentWindow: true }, async tabs => { @@ -39,57 +37,20 @@ servicesHelper.switchInstance(url).then(r => (switchInstance = r)) servicesHelper.reverse(url).then(r => (redirectToOriginal = r)) servicesHelper.redirectAsync(url, "main_frame", null, null, false, true).then(r => (redirect = r)) - servicesHelper.computeService(url).then(r => (currentService = r)) - const computed = servicesHelper.computeFrontend(url) - if (computed) { - ;({ service, frontend } = computed) - } + servicesHelper.computeServiceFrontend(url).then(r => ({ service, frontend } = r)) } }) - async function removeInstance() { - const i = _options[frontend].findIndex(instance => url.href.startsWith(instance)) - _options[frontend].splice(i, 1) - options.set(_options) - const newUrl = await servicesHelper.switchInstance(url, service) - browser.tabs.update({ url: newUrl }) - window.close() - } - - async function autoPickInstance() { + let autoPicking = false + async function autoPick() { autoPicking = true const redirects = await utils.getList(_options) const clearnet = redirects[frontend]["clearnet"] - const i = clearnet.findIndex(instance => url.href.startsWith(instance)) - if (i >= 0) clearnet.splice(i, 1) - const randomInstances = utils.randomInstances(clearnet, 5) - const pings = await Promise.all([ - ...randomInstances.map(async instance => { - return [instance, await utils.ping(instance)] - }), - ]) - pings.sort((a, b) => a[1] - b[1]) - _options[frontend].push(pings[0][0]) + const instance = await utils.autoPickInstance(clearnet, url) + _options[frontend].push(instance) options.set(_options) autoPicking = false } - - async function addAutoPickInstance() { - await autoPickInstance() - browser.tabs.update({ url: await servicesHelper.switchInstance(url, service) }, () => { - window.close() - }) - } - - async function removeAndAutoPickInstance() { - const i = _options[frontend].findIndex(instance => url.href.startsWith(instance)) - _options[frontend].splice(i, 1) - options.set(_options) - await autoPickInstance() - browser.tabs.update({ url: await servicesHelper.switchInstance(url, service) }, () => { - window.close() - }) - }
@@ -125,7 +86,18 @@ {/if} - + { + const i = _options[frontend].findIndex(instance => url.href.startsWith(instance)) + _options[frontend].splice(i, 1) + options.set(_options) + const newUrl = await servicesHelper.switchInstance(url, service) + browser.tabs.update({ url: newUrl }, () => { + window.close() + }) + }} + > {:else} - + { + const i = _options[frontend].findIndex(instance => url.href.startsWith(instance)) + _options[frontend].splice(i, 1) + options.set(_options) + await autoPick() + browser.tabs.update({ url: await servicesHelper.switchInstance(url, service) }, () => { + window.close() + }) + }} + > - + { + await autoPick() + browser.tabs.update({ url: await servicesHelper.switchInstance(url, service) }, () => { + window.close() + }) + }} + > @@ -161,7 +152,9 @@ on:click={() => { browser.tabs.query({ active: true, currentWindow: true }, tabs => { browser.runtime.sendMessage({ message: "reverse", tabId: tabs[0].id }, () => { - browser.tabs.update({ url: redirectToOriginal }) + browser.tabs.update({ url: redirectToOriginal }, () => { + window.close() + }) }) }) }} @@ -175,13 +168,13 @@
{/if} - {#if currentService} - + {#if service} +
{/if} {#each _options.popupServices as serviceKey} - {#if currentService !== serviceKey} + {#if service !== serviceKey} {/if} {/each} -- cgit 1.4.1 From cb2da515491294a7abb560f8b1399f036d3ba5a1 Mon Sep 17 00:00:00 2001 From: DokterKaj <54882101+DokterKaj@users.noreply.github.com> Date: Sat, 28 Sep 2024 12:52:58 +0800 Subject: Redirect redd.it/xxxxxx shortlinks --- src/assets/javascripts/services.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src/assets/javascripts') diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js index 80a4851c..3609d6c1 100644 --- a/src/assets/javascripts/services.js +++ b/src/assets/javascripts/services.js @@ -220,15 +220,17 @@ function rewrite(url, originUrl, frontend, randomInstance) { return `${randomInstance}${url.pathname}${url.search}` case "redlib": case "libreddit": { - const subdomain = url.hostname.match(/^(?:(?:external-)?preview|i)(?=\.redd\.it)/) + const subdomain = url.hostname.match(/^(?:((?:external-)?preview|i)\.)?redd\.it/) if (!subdomain) return `${randomInstance}${url.pathname}${url.search}` - switch (subdomain[0]) { + switch (subdomain[1]) { case "preview": return `${randomInstance}/preview/pre${url.pathname}${url.search}` case "external-preview": return `${randomInstance}/preview/external-pre${url.pathname}${url.search}` case "i": return `${randomInstance}/img${url.pathname}` + default: + return `${randomInstance}/comments${url.pathname}` } return randomInstance } -- cgit 1.4.1 From 6e5a0f1f41112d4dd4b3931dbd3407a8c7dad286 Mon Sep 17 00:00:00 2001 From: DokterKaj <54882101+DokterKaj@users.noreply.github.com> Date: Sun, 13 Oct 2024 13:02:49 +0800 Subject: redirect *.meta.stackexchange.com --- src/assets/javascripts/services.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src/assets/javascripts') diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js index 3609d6c1..e85b5bf1 100644 --- a/src/assets/javascripts/services.js +++ b/src/assets/javascripts/services.js @@ -269,8 +269,11 @@ function rewrite(url, originUrl, frontend, randomInstance) { // https://stackexchange.com or https://superuser.com return `${randomInstance}${url.pathname}${url.search}` } - const regex = url.href.match(/https?:\/{2}(?:([a-zA-Z0-9-]+)\.)?stackexchange\.com\//) + const regex = url.href.match(/https?:\/{2}(?:([a-zA-Z0-9-]+)\.(meta\.)?)?stackexchange\.com\//) if (regex && regex.length > 1) { + if (regex[2]) { + return `${randomInstance}/exchange/${url.hostname}${url.pathname}${url.search}` + } const subdomain = regex[1] return `${randomInstance}/exchange/${subdomain}${url.pathname}${url.search}` } -- cgit 1.4.1 From 85dd515d204791a780a9c980c62a2f57ad8a274a Mon Sep 17 00:00:00 2001 From: ManeraKai Date: Sat, 2 Nov 2024 22:17:54 +0300 Subject: Added DuckDuckGo AI Chat https://github.com/libredirect/browser_extension/issues/969 --- src/assets/images/chatGpt-icon-light.svg | 10 ++++++++++ src/assets/images/chatGpt-icon.svg | 1 + src/assets/javascripts/services.js | 3 +++ src/config.json | 19 +++++++++++++++++++ 4 files changed, 33 insertions(+) create mode 100644 src/assets/images/chatGpt-icon-light.svg create mode 100644 src/assets/images/chatGpt-icon.svg (limited to 'src/assets/javascripts') diff --git a/src/assets/images/chatGpt-icon-light.svg b/src/assets/images/chatGpt-icon-light.svg new file mode 100644 index 00000000..b3df81fb --- /dev/null +++ b/src/assets/images/chatGpt-icon-light.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/images/chatGpt-icon.svg b/src/assets/images/chatGpt-icon.svg new file mode 100644 index 00000000..e04db75a --- /dev/null +++ b/src/assets/images/chatGpt-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js index e85b5bf1..0a6b3e94 100644 --- a/src/assets/javascripts/services.js +++ b/src/assets/javascripts/services.js @@ -555,6 +555,9 @@ function rewrite(url, originUrl, frontend, randomInstance) { const accountReg = /^\/([^\/]+)\/?$/.exec(url.pathname) if (accountReg) return `${randomInstance}/account${url.pathname}${url.search}` + case "duckDuckGoAiChat": + return "https://duckduckgo.com/?q=DuckDuckGo+AI+Chat&ia=chat&duckai=1" + case "piped": case "pipedMaterial": case "cloudtube": diff --git a/src/config.json b/src/config.json index 340df46c..48eecc24 100644 --- a/src/config.json +++ b/src/config.json @@ -219,6 +219,25 @@ "embeddable": true, "url": "https://twitter.com" }, + "chatGpt": { + "frontends": { + "duckDuckGoAiChat": { + "name": "DuckDuckGo AI Chat", + "instanceList": false, + "url": "https://duckduckgo.com/duckduckgo-help-pages/aichat/" + } + }, + "targets": ["^https?:\\/{2}chatgpt\\.com"], + "name": "ChatGPT", + "options": { + "enabled": false, + "unsupportedUrls": "bypass", + "frontend": "duckDuckGoAiChat", + "redirectOnlyInIncognito": false + }, + "imageType": "svgMono", + "url": "https://chatgpt.com/" + }, "bluesky": { "frontends": { "skyview": { -- cgit 1.4.1 From 2d8b01dec9c0f3bd904c8630fe1ffa09c15d0b45 Mon Sep 17 00:00:00 2001 From: Miguel Ángel Moreno Date: Tue, 3 Dec 2024 23:11:55 +0100 Subject: Update Tubo main instance and source repository --- src/assets/javascripts/services.js | 4 ++-- src/config.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'src/assets/javascripts') diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js index 0a6b3e94..98c39908 100644 --- a/src/assets/javascripts/services.js +++ b/src/assets/javascripts/services.js @@ -814,8 +814,8 @@ const defaultInstances = { safetwitch: ["https://safetwitch.drgns.space"], twineo: ["https://twineo.exozy.me"], proxigram: ["https://ig.opnxng.com"], - tuboYoutube: ["https://tubo.migalmoreno.com"], - tuboSoundcloud: ["https://tubo.migalmoreno.com"], + tuboYoutube: ["https://tubo.media"], + tuboSoundcloud: ["https://tubo.media"], tekstoLibre: ["https://davilarek.github.io/TekstoLibre"], skyview: ["https://skyview.social"], priviblur: ["https://pb.bloat.cat"], diff --git a/src/config.json b/src/config.json index 48eecc24..f5f3819d 100644 --- a/src/config.json +++ b/src/config.json @@ -82,7 +82,7 @@ "name": "Tubo", "embeddable": false, "instanceList": true, - "url": "https://git.migalmoreno.com/tubo/about/", + "url": "https://github.com/migalmoreno/tubo", "excludeTargets": [ 2, 3 @@ -558,7 +558,7 @@ "name": "Tubo", "embeddable": false, "instanceList": true, - "url": "https://git.migalmoreno.com/tubo/about/" + "url": "https://github.com/migalmoreno/tubo" } }, "targets": [ -- cgit 1.4.1 From ce47e8cff701d4c87605d4e30b5fa4f60b555b55 Mon Sep 17 00:00:00 2001 From: Laptop Date: Sun, 8 Dec 2024 11:03:50 +0200 Subject: add soundcloak --- src/assets/javascripts/services.js | 66 ++++++++++++++++++++++++++++++++++++++ src/config.json | 6 ++++ 2 files changed, 72 insertions(+) (limited to 'src/assets/javascripts') diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js index 0a6b3e94..7b9ce986 100644 --- a/src/assets/javascripts/services.js +++ b/src/assets/javascripts/services.js @@ -557,7 +557,40 @@ function rewrite(url, originUrl, frontend, randomInstance) { case "duckDuckGoAiChat": return "https://duckduckgo.com/?q=DuckDuckGo+AI+Chat&ia=chat&duckai=1" + + case "soundcloak": + if (url.pathname.startsWith("/feed") || url.pathname.startsWith("/stream")) { // this feature requires authentication and is unsupported, so just redirect to main page + return randomInstance + } + + if (url.pathname.startsWith("/search")) { + if (!url.search) { + return randomInstance + } + + let type = "" + if (url.pathname.startsWith("/search/sounds")) { + type = "tracks" + } else if (url.pathname.startsWith("/search/people")) { + type = "users" + } else if (url.pathname.startsWith("/search/albums") || url.pathname.startsWith("/search/sets")) { + type = "playlists" + } + + if (type) { + type = "&type="+type + } else { + return randomInstance // fallback for unsupported search types (searching for anything for example) + } + + return `${randomInstance}/search${url.search}${type}` + } + + if (url.host == "on.soundcloud.com") { + return `${randomInstance}/on${url.pathname}` + } + return `${randomInstance}${url.pathname}${url.search}` case "piped": case "pipedMaterial": case "cloudtube": @@ -762,6 +795,38 @@ async function reverse(url) { return `${config.services[service].url}/${url.search.slice(1)}` case "goodreads": return `https://goodreads.com${url.pathname}${url.search}` + case "soundcloud": + if (frontend == "soundcloak") { + if (url.pathname.includes("/_/")) { // soundcloak-specific pages + return `${config.services[service].url}${url.pathname.split("/_/")[0]}` + } + + if (url.pathname == "/search") { + let type = url.searchParams.get("type") + switch (type) { + case "playlists": + type = "sets" + break + case "tracks": + type = "sounds" + break + case "users": + type = "people" + break + default: + type = "" + } + + url.searchParams.delete("type") + if (!type) { + return `${config.services[service].url}/search?${url.searchParams.toString()}` + } else { + return `${config.services[service].url}/search/${type}?${url.searchParams.toString()}` + } + } + + return `${config.services[service].url}${url.pathname}` + } default: return } @@ -828,6 +893,7 @@ const defaultInstances = { ytify: ["https://ytify.netlify.app"], nerdsForNerds: ["https://nn.vern.cc"], koub: ["https://koub.clovius.club"], + soundcloak: ["https://soundcloak.fly.dev"] } async function getDefaults() { diff --git a/src/config.json b/src/config.json index 48eecc24..70f38c8f 100644 --- a/src/config.json +++ b/src/config.json @@ -559,6 +559,12 @@ "embeddable": false, "instanceList": true, "url": "https://git.migalmoreno.com/tubo/about/" + }, + "soundcloak": { + "name": "soundcloak", + "embeddable": false, + "instanceList": true, + "url": "https://github.com/maid-zone/soundcloak" } }, "targets": [ -- cgit 1.4.1 From aaaed0281d373b96ce702252ec7c487d3017f1cc Mon Sep 17 00:00:00 2001 From: Animesh <69345507+n-ce@users.noreply.github.com> Date: Wed, 15 Jan 2025 14:44:24 +0530 Subject: replace ytify.netlify.app to ytify.us.kg --- src/assets/javascripts/services.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/assets/javascripts') diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js index 7b9ce986..d78fd16c 100644 --- a/src/assets/javascripts/services.js +++ b/src/assets/javascripts/services.js @@ -890,7 +890,7 @@ const defaultInstances = { ratAintTieba: ["https://rat.fis.land"], shoelace: ["https://shoelace.mint.lgbt"], skunkyArt: ["https://skunky.bloat.cat"], - ytify: ["https://ytify.netlify.app"], + ytify: ["https://ytify.us.kg"], nerdsForNerds: ["https://nn.vern.cc"], koub: ["https://koub.clovius.club"], soundcloak: ["https://soundcloak.fly.dev"] -- cgit 1.4.1 From 03b21086c29b7340ed75dd9179aeec3eaf7f3feb Mon Sep 17 00:00:00 2001 From: ManeraKai Date: Mon, 20 Jan 2025 12:08:40 +0300 Subject: Disabled autoplay for embedded invidious https://github.com/libredirect/browser_extension/issues/319 --- src/assets/javascripts/services.js | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'src/assets/javascripts') diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js index 3870d6bd..36da7481 100644 --- a/src/assets/javascripts/services.js +++ b/src/assets/javascripts/services.js @@ -54,9 +54,10 @@ function regexArray(service, url, config, options, frontend) { * @param {URL} url * @param {string} frontend * @param {string} randomInstance + * @param {string} type * @returns {undefined|string} */ -function rewrite(url, originUrl, frontend, randomInstance) { +function rewrite(url, originUrl, frontend, randomInstance, type) { switch (frontend) { case "hyperpipe": for (const key of [...url.searchParams.keys()]) if (key !== "q") url.searchParams.delete(key) @@ -384,10 +385,14 @@ function rewrite(url, originUrl, frontend, randomInstance) { return `${randomInstance}${url.pathname}${url.search}` } case "invidious": { + // tracker url.searchParams.delete("si") + + if (type == "sub_frame") url.searchParams.append("autoplay", "0") + if (url.hostname == "youtu.be" || (url.hostname.endsWith("youtube.com") && url.pathname.startsWith("/live"))) { const watch = url.pathname.substring(url.pathname.lastIndexOf("/") + 1) - return `${randomInstance}/watch?v=${watch}${url.search.replace("?", "&")}` + return `${randomInstance}/watch?v=${watch}&${url.search.substring(1)}` } if (url.hostname.endsWith("youtube.com") && url.pathname.startsWith("/redirect?")) return url.href return `${randomInstance}${url.pathname}${url.search}` @@ -557,7 +562,7 @@ function rewrite(url, originUrl, frontend, randomInstance) { case "duckDuckGoAiChat": return "https://duckduckgo.com/?q=DuckDuckGo+AI+Chat&ia=chat&duckai=1" - + case "soundcloak": if (url.pathname.startsWith("/feed") || url.pathname.startsWith("/stream")) { // this feature requires authentication and is unsupported, so just redirect to main page return randomInstance @@ -668,7 +673,7 @@ function redirect(url, type, originUrl, documentUrl, incognito, forceRedirection } if (!frontend) return - return rewrite(url, originUrl, frontend, randomInstance) + return rewrite(url, originUrl, frontend, randomInstance, type) } /** -- cgit 1.4.1 From 9df5a680b964b35d539db35ec8454b5553f9c734 Mon Sep 17 00:00:00 2001 From: ManeraKai Date: Mon, 20 Jan 2025 14:30:55 +0300 Subject: Added Ultimate Tab https://github.com/libredirect/browser_extension/issues/942 --- src/assets/javascripts/services.js | 14 +++++++++----- src/config.json | 5 +++++ 2 files changed, 14 insertions(+), 5 deletions(-) (limited to 'src/assets/javascripts') diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js index 36da7481..34233453 100644 --- a/src/assets/javascripts/services.js +++ b/src/assets/javascripts/services.js @@ -387,7 +387,7 @@ function rewrite(url, originUrl, frontend, randomInstance, type) { case "invidious": { // tracker url.searchParams.delete("si") - + if (type == "sub_frame") url.searchParams.append("autoplay", "0") if (url.hostname == "youtu.be" || (url.hostname.endsWith("youtube.com") && url.pathname.startsWith("/live"))) { @@ -511,6 +511,7 @@ function rewrite(url, originUrl, frontend, randomInstance, type) { } return `${randomInstance}${url.pathname}${url.search}` } + case "ultimateTab": case "freetar": if (url.pathname.startsWith("/search.php")) { url.searchParams.set("search_term", url.searchParams.get("value")) @@ -564,7 +565,8 @@ function rewrite(url, originUrl, frontend, randomInstance, type) { return "https://duckduckgo.com/?q=DuckDuckGo+AI+Chat&ia=chat&duckai=1" case "soundcloak": - if (url.pathname.startsWith("/feed") || url.pathname.startsWith("/stream")) { // this feature requires authentication and is unsupported, so just redirect to main page + if (url.pathname.startsWith("/feed") || url.pathname.startsWith("/stream")) { + // this feature requires authentication and is unsupported, so just redirect to main page return randomInstance } @@ -583,7 +585,7 @@ function rewrite(url, originUrl, frontend, randomInstance, type) { } if (type) { - type = "&type="+type + type = "&type=" + type } else { return randomInstance // fallback for unsupported search types (searching for anything for example) } @@ -802,7 +804,8 @@ async function reverse(url) { return `https://goodreads.com${url.pathname}${url.search}` case "soundcloud": if (frontend == "soundcloak") { - if (url.pathname.includes("/_/")) { // soundcloak-specific pages + if (url.pathname.includes("/_/")) { + // soundcloak-specific pages return `${config.services[service].url}${url.pathname.split("/_/")[0]}` } @@ -892,13 +895,14 @@ const defaultInstances = { nitter: ["https://nitter.privacydev.net"], pasted: ["https://pasted.drakeerv.com"], freetar: ["https://freetar.de"], + ultimateTab: ["https://ultimate-tab.com"], ratAintTieba: ["https://rat.fis.land"], shoelace: ["https://shoelace.mint.lgbt"], skunkyArt: ["https://skunky.bloat.cat"], ytify: ["https://ytify.us.kg"], nerdsForNerds: ["https://nn.vern.cc"], koub: ["https://koub.clovius.club"], - soundcloak: ["https://soundcloak.fly.dev"] + soundcloak: ["https://soundcloak.fly.dev"], } async function getDefaults() { diff --git a/src/config.json b/src/config.json index 13f9d761..55074df4 100644 --- a/src/config.json +++ b/src/config.json @@ -1262,6 +1262,11 @@ "name": "Freetar", "instanceList": true, "url": "https://github.com/kmille/freetar" + }, + "ultimateTab": { + "name": "Ultimate Tab", + "instanceList": true, + "url": "https://github.com/BenoitBellegarde/UltimateTab" } }, "targets": [ -- cgit 1.4.1 From 95f2fae19ac763d4e4aa4d3c7e0f6636898c3b59 Mon Sep 17 00:00:00 2001 From: ManeraKai Date: Mon, 20 Jan 2025 14:37:32 +0300 Subject: Added Troddit https://github.com/libredirect/browser_extension/issues/1002 --- src/assets/javascripts/services.js | 6 +++--- src/config.json | 8 +++++++- 2 files changed, 10 insertions(+), 4 deletions(-) (limited to 'src/assets/javascripts') diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js index 34233453..8f10a3a9 100644 --- a/src/assets/javascripts/services.js +++ b/src/assets/javascripts/services.js @@ -230,10 +230,8 @@ function rewrite(url, originUrl, frontend, randomInstance, type) { return `${randomInstance}/preview/external-pre${url.pathname}${url.search}` case "i": return `${randomInstance}/img${url.pathname}` - default: - return `${randomInstance}/comments${url.pathname}` } - return randomInstance + return `${randomInstance}/comments${url.pathname}` } case "teddit": if (/^(?:(?:external-)?preview|i)\.redd\.it/.test(url.hostname)) { @@ -241,6 +239,7 @@ function rewrite(url, originUrl, frontend, randomInstance, type) { else return `${randomInstance}${url.pathname}${url.search}&teddit_proxy=${url.hostname}` } return `${randomInstance}${url.pathname}${url.search}` + case "troddit": case "eddrit": if (/^(?:(?:external-)?preview|i)\.redd\.it/.test(url.hostname)) return randomInstance return `${randomInstance}${url.pathname}${url.search}` @@ -853,6 +852,7 @@ const defaultInstances = { proxiTok: ["https://proxitok.pabloferreiro.es"], redlib: ["https://safereddit.com"], eddrit: ["https://eddrit.com"], + troddit: ["https://www.troddit.com"], scribe: ["https://scribe.rip"], libMedium: ["https://md.vern.cc"], quetre: ["https://quetre.iket.me"], diff --git a/src/config.json b/src/config.json index 55074df4..e49a044a 100644 --- a/src/config.json +++ b/src/config.json @@ -284,6 +284,12 @@ "instanceList": true, "url": "https://github.com/corenting/eddrit", "localhost": false + }, + "troddit": { + "name": "Troddit", + "instanceList": false, + "url": "https://github.com/burhan-syed/troddit", + "localhost": false } }, "targets": [ @@ -1265,7 +1271,7 @@ }, "ultimateTab": { "name": "Ultimate Tab", - "instanceList": true, + "instanceList": false, "url": "https://github.com/BenoitBellegarde/UltimateTab" } }, -- cgit 1.4.1 From 4dbc36c55929dd0cc40260dd786efe21b5503280 Mon Sep 17 00:00:00 2001 From: ManeraKai Date: Mon, 20 Jan 2025 14:49:35 +0300 Subject: Added GoCook https://github.com/libredirect/browser_extension/issues/988 --- src/assets/images/chefkoch-icon.svg | 43 +++++++++++++++++++++++++++++++++++++ src/assets/javascripts/services.js | 1 + src/config.json | 21 ++++++++++++++++++ 3 files changed, 65 insertions(+) create mode 100644 src/assets/images/chefkoch-icon.svg (limited to 'src/assets/javascripts') diff --git a/src/assets/images/chefkoch-icon.svg b/src/assets/images/chefkoch-icon.svg new file mode 100644 index 00000000..12e1f3ba --- /dev/null +++ b/src/assets/images/chefkoch-icon.svg @@ -0,0 +1,43 @@ + + diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js index 8f10a3a9..5fe3e2eb 100644 --- a/src/assets/javascripts/services.js +++ b/src/assets/javascripts/services.js @@ -903,6 +903,7 @@ const defaultInstances = { nerdsForNerds: ["https://nn.vern.cc"], koub: ["https://koub.clovius.club"], soundcloak: ["https://soundcloak.fly.dev"], + gocook: ["https://cook.adminforge.de"], } async function getDefaults() { diff --git a/src/config.json b/src/config.json index e49a044a..ca38d2ec 100644 --- a/src/config.json +++ b/src/config.json @@ -1392,6 +1392,27 @@ }, "imageType": "svg", "url": "https://coub.com" + }, + "chefkoch": { + "frontends": { + "gocook": { + "name": "GoCook", + "instanceList": true, + "url": "https://github.com/NoUmlautsAllowed/gocook" + } + }, + "targets": [ + "^https?:\\/{2}(www\\.)?chefkoch\\.de" + ], + "name": "Chefkoch", + "options": { + "enabled": false, + "unsupportedUrls": "bypass", + "frontend": "gocook", + "redirectOnlyInIncognito": false + }, + "imageType": "svg", + "url": "https://www.chefkoch.de" } } } -- cgit 1.4.1 From fc7a1c5f124b601d59363c61cb2db76398362117 Mon Sep 17 00:00:00 2001 From: ManeraKai Date: Mon, 20 Jan 2025 14:56:43 +0300 Subject: Added Painterest https://github.com/libredirect/browser_extension/issues/1011 --- src/assets/javascripts/services.js | 6 +++++- src/config.json | 6 ++++++ 2 files changed, 11 insertions(+), 1 deletion(-) (limited to 'src/assets/javascripts') diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js index 5fe3e2eb..c602b917 100644 --- a/src/assets/javascripts/services.js +++ b/src/assets/javascripts/services.js @@ -358,7 +358,10 @@ function rewrite(url, originUrl, frontend, randomInstance, type) { } } case "binternet": - if (url.hostname == "i.pinimg.com") return `${randomInstance}/image_proxy.php?url=${url.href}` + if (url.hostname == "i.pinimg.com") return `${randomInstance}/image_proxy.php?url=${encodeURIComponent(url.href)}` + return `${randomInstance}${url.pathname}${url.search}` + case "painterest": + if (url.hostname == "i.pinimg.com") return `${randomInstance}/_/proxy?url=${encodeURIComponent(url.href)}` return `${randomInstance}${url.pathname}${url.search}` case "laboratory": { let path = url.pathname @@ -880,6 +883,7 @@ const defaultInstances = { wolfreeAlpha: ["https://gqq.gitlab.io", "https://uqq.gitlab.io"], laboratory: ["https://lab.vern.cc"], binternet: ["https://bn.bloat.cat"], + painterest: ["https://pt.bloat.cat"], pixivFe: ["https://pixivfe.exozy.me"], liteXiv: ["https://litexiv.exozy.me"], indestructables: ["https://indestructables.private.coffee"], diff --git a/src/config.json b/src/config.json index ca38d2ec..2f779b79 100644 --- a/src/config.json +++ b/src/config.json @@ -541,6 +541,12 @@ "instanceList": true, "url": "https://github.com/Ahwxorg/Binternet", "embeddable": true + }, + "painterest": { + "name": "Painterest", + "instanceList": true, + "url": "https://codeberg.org/thirtysix/painterest", + "embeddable": true } }, "targets": [ -- cgit 1.4.1 From f2f4e674bda71c0d6da1613f6b7a47391fee4fdf Mon Sep 17 00:00:00 2001 From: ManeraKai Date: Mon, 20 Jan 2025 15:00:27 +0300 Subject: Added Offtiktok https://github.com/libredirect/browser_extension/issues/1018 --- src/assets/javascripts/services.js | 2 ++ src/config.json | 6 ++++++ 2 files changed, 8 insertions(+) (limited to 'src/assets/javascripts') diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js index c602b917..31325574 100644 --- a/src/assets/javascripts/services.js +++ b/src/assets/javascripts/services.js @@ -297,6 +297,7 @@ function rewrite(url, originUrl, frontend, randomInstance, type) { } return `${randomInstance}${url.pathname}${url.search}${url.hash}` } + case "offtiktok": case "proxiTok": if (url.pathname.startsWith("/email")) return randomInstance return `${randomInstance}${url.pathname}${url.search}` @@ -853,6 +854,7 @@ const defaultInstances = { lightTube: ["https://tube.kuylar.dev"], poketube: ["https://poketube.fun"], proxiTok: ["https://proxitok.pabloferreiro.es"], + offtiktok: ["https://www.offtiktok.com"], redlib: ["https://safereddit.com"], eddrit: ["https://eddrit.com"], troddit: ["https://www.troddit.com"], diff --git a/src/config.json b/src/config.json index 2f779b79..4fb40ae8 100644 --- a/src/config.json +++ b/src/config.json @@ -375,6 +375,12 @@ "instanceList": true, "url": "https://github.com/pablouser1/ProxiTok", "localhost": true + }, + "offtiktok": { + "name": "Offtiktok", + "instanceList": true, + "url": "https://github.com/MarsHeer/offtiktok", + "localhost": false } }, "targets": [ -- cgit 1.4.1 From 756c0ac3e3ea80e2c7678f0abc114094f247dbf3 Mon Sep 17 00:00:00 2001 From: ManeraKai Date: Mon, 20 Jan 2025 15:09:05 +0300 Subject: Added Wikimore https://github.com/libredirect/browser_extension/issues/1025 --- src/assets/javascripts/services.js | 10 ++++++++++ src/config.json | 5 +++++ 2 files changed, 15 insertions(+) (limited to 'src/assets/javascripts') diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js index 31325574..e5e4cc57 100644 --- a/src/assets/javascripts/services.js +++ b/src/assets/javascripts/services.js @@ -287,6 +287,15 @@ function rewrite(url, originUrl, frontend, randomInstance, type) { } case "biblioReads": return `${randomInstance}${url.pathname}${url.search}` + case "wikimore": { + let hostSplit = url.host.split(".") + // wikiless doesn't have mobile view support yet + if (hostSplit[0] != "wikipedia" && hostSplit[0] != "www") { + const lang = url.hostname.split(".")[0] + return `${randomInstance}/wiki/${lang}${url.pathname}${url.search}${url.hash}` + } + return `${randomInstance}${url.pathname}${url.search}${url.hash}` + } case "wikiless": { let hostSplit = url.host.split(".") // wikiless doesn't have mobile view support yet @@ -910,6 +919,7 @@ const defaultInstances = { koub: ["https://koub.clovius.club"], soundcloak: ["https://soundcloak.fly.dev"], gocook: ["https://cook.adminforge.de"], + wikimore: ["https://wikimore.private.coffee"], } async function getDefaults() { diff --git a/src/config.json b/src/config.json index 4fb40ae8..b9d61832 100644 --- a/src/config.json +++ b/src/config.json @@ -1012,6 +1012,11 @@ "name": "Wikiless", "instanceList": true, "url": "https://wikiless.org" + }, + "wikimore": { + "name": "Wikimore", + "instanceList": true, + "url": "https://git.private.coffee/privatecoffee/wikimore" } }, "targets": [ -- cgit 1.4.1 From 5877083ff596c7e496b7105191e045de08b06774 Mon Sep 17 00:00:00 2001 From: ManeraKai Date: Mon, 20 Jan 2025 15:12:07 +0300 Subject: Added Pasty https://github.com/libredirect/browser_extension/issues/1035 --- src/assets/javascripts/services.js | 1 + src/config.json | 5 +++++ 2 files changed, 6 insertions(+) (limited to 'src/assets/javascripts') diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js index e5e4cc57..d89f47f2 100644 --- a/src/assets/javascripts/services.js +++ b/src/assets/javascripts/services.js @@ -909,6 +909,7 @@ const defaultInstances = { priviblur: ["https://pb.bloat.cat"], nitter: ["https://nitter.privacydev.net"], pasted: ["https://pasted.drakeerv.com"], + pasty: ["https://pasty.lus.pm"], freetar: ["https://freetar.de"], ultimateTab: ["https://ultimate-tab.com"], ratAintTieba: ["https://rat.fis.land"], diff --git a/src/config.json b/src/config.json index b9d61832..3b245c36 100644 --- a/src/config.json +++ b/src/config.json @@ -1264,6 +1264,11 @@ "name": "Pasted", "instanceList": true, "url": "https://github.com/Dragynfruit/pasted" + }, + "pasty": { + "name": "Pasty", + "instanceList": true, + "url": "https://github.com/lus/pasty" } }, "targets": [ -- cgit 1.4.1 From 181b2518e2d6beda9d46ce16e85c681657767ecc Mon Sep 17 00:00:00 2001 From: ManeraKai Date: Mon, 27 Jan 2025 22:32:50 +0300 Subject: Added Small https://codeberg.org/LibRedirect/browser_extension/issues/155 --- src/assets/javascripts/services.js | 2 ++ src/config.json | 5 +++++ 2 files changed, 7 insertions(+) (limited to 'src/assets/javascripts') diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js index d89f47f2..5cc93f45 100644 --- a/src/assets/javascripts/services.js +++ b/src/assets/javascripts/services.js @@ -100,6 +100,7 @@ function rewrite(url, originUrl, frontend, randomInstance, type) { if (/\/@[a-z]+\//.exec(url.pathname)) return randomInstance return `${randomInstance}${url.pathname}${url.search}` } + case "small": case "libMedium": case "scribe": { const regex = url.hostname.match(/^(link|cdn-images-\d+|.*)\.medium\.com/) @@ -869,6 +870,7 @@ const defaultInstances = { troddit: ["https://www.troddit.com"], scribe: ["https://scribe.rip"], libMedium: ["https://md.vern.cc"], + small: ["https://small.bloat.cat"], quetre: ["https://quetre.iket.me"], libremdb: ["https://libremdb.iket.me"], simplyTranslate: ["https://simplytranslate.org"], diff --git a/src/config.json b/src/config.json index 3b245c36..429b7865 100644 --- a/src/config.json +++ b/src/config.json @@ -683,6 +683,11 @@ "name": "LibMedium", "instanceList": true, "url": "https://github.com/realaravinth/libmedium" + }, + "small": { + "name": "Small", + "instanceList": true, + "url": "https://git.private.coffee/PrivateCoffee/small" } }, "targets": [ -- cgit 1.4.1 From 7b988b818f6b9113b2cd760ee3a19ea3d13f9644 Mon Sep 17 00:00:00 2001 From: ManeraKai Date: Mon, 27 Jan 2025 22:48:12 +0300 Subject: Added Vixipy https://codeberg.org/LibRedirect/browser_extension/issues/169 --- src/assets/javascripts/services.js | 10 ++++++++++ src/config.json | 5 +++++ 2 files changed, 15 insertions(+) (limited to 'src/assets/javascripts') diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js index 5cc93f45..1db192a0 100644 --- a/src/assets/javascripts/services.js +++ b/src/assets/javascripts/services.js @@ -397,6 +397,15 @@ function rewrite(url, originUrl, frontend, randomInstance, type) { } return `${randomInstance}${url.pathname}${url.search}` } + case "vixipy": { + const regex = /\/[a-z]{1,3}\/(.*)/.exec(url.pathname) + if (regex) { + let path = regex[1] + if (path.startsWith("tags/")) path = path.replace(/tags/, "tag") + return `${randomInstance}/${path}${url.search}` + } + return `${randomInstance}${url.pathname}${url.search}` + } case "invidious": { // tracker url.searchParams.delete("si") @@ -899,6 +908,7 @@ const defaultInstances = { painterest: ["https://pt.bloat.cat"], pixivFe: ["https://pixivfe.exozy.me"], liteXiv: ["https://litexiv.exozy.me"], + vixipy: ["https://vx.maid.zone"], indestructables: ["https://indestructables.private.coffee"], destructables: ["https://ds.vern.cc"], safetwitch: ["https://safetwitch.drgns.space"], diff --git a/src/config.json b/src/config.json index 429b7865..115bf2eb 100644 --- a/src/config.json +++ b/src/config.json @@ -477,6 +477,11 @@ "name": "LiteXiv", "instanceList": true, "url": "https://codeberg.org/Peaksol/LiteXiv" + }, + "vixipy": { + "name": "Vixipy", + "instanceList": true, + "url": "https://codeberg.org/vixipy/Vixipy" } }, "targets": [ -- cgit 1.4.1 From a1ef0bf8c360e92d3df62e04f906d2d757e2eb6e Mon Sep 17 00:00:00 2001 From: ManeraKai Date: Mon, 27 Jan 2025 22:54:17 +0300 Subject: Added Ducks for Ducks https://codeberg.org/LibRedirect/browser_extension/issues/157 --- src/assets/javascripts/services.js | 1 + src/config.json | 5 +++++ 2 files changed, 6 insertions(+) (limited to 'src/assets/javascripts') diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js index 1db192a0..fb42e8b7 100644 --- a/src/assets/javascripts/services.js +++ b/src/assets/javascripts/services.js @@ -929,6 +929,7 @@ const defaultInstances = { skunkyArt: ["https://skunky.bloat.cat"], ytify: ["https://ytify.us.kg"], nerdsForNerds: ["https://nn.vern.cc"], + ducksForDucks: ["https://ducksforducks.private.coffee"], koub: ["https://koub.clovius.club"], soundcloak: ["https://soundcloak.fly.dev"], gocook: ["https://cook.adminforge.de"], diff --git a/src/config.json b/src/config.json index 115bf2eb..26453dc2 100644 --- a/src/config.json +++ b/src/config.json @@ -1389,6 +1389,11 @@ "name": "NerdsforNerds", "instanceList": true, "url": "https://git.vern.cc/cobra/NerdsforNerds" + }, + "ducksForDucks": { + "name": "Ducks for Ducks", + "instanceList": true, + "url": "https://git.private.coffee/PrivateCoffee/ducksforducks" } }, "targets": [ -- cgit 1.4.1 From c56a2132edac3cdc9adb690af73ed1e8fb201741 Mon Sep 17 00:00:00 2001 From: ManeraKai Date: Mon, 27 Jan 2025 23:05:03 +0300 Subject: Added Structables, and made it the default https://codeberg.org/LibRedirect/browser_extension/issues/161 --- src/assets/javascripts/services.js | 1 + src/config.json | 13 +++++++++---- 2 files changed, 10 insertions(+), 4 deletions(-) (limited to 'src/assets/javascripts') diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js index fb42e8b7..febd1198 100644 --- a/src/assets/javascripts/services.js +++ b/src/assets/javascripts/services.js @@ -911,6 +911,7 @@ const defaultInstances = { vixipy: ["https://vx.maid.zone"], indestructables: ["https://indestructables.private.coffee"], destructables: ["https://ds.vern.cc"], + structables: ["https://structables.private.coffee"], safetwitch: ["https://safetwitch.drgns.space"], twineo: ["https://twineo.exozy.me"], proxigram: ["https://ig.opnxng.com"], diff --git a/src/config.json b/src/config.json index 26453dc2..b6338462 100644 --- a/src/config.json +++ b/src/config.json @@ -993,15 +993,20 @@ "instructables": { "name": "Instructables", "frontends": { - "indestructables": { - "name": "Indestructables", + "structables": { + "name": "Structables", "instanceList": true, - "url": "https://indestructables.codeberg.page" + "url": "https://github.com/PrivateCoffee/structables" }, "destructables": { "name": "Destructables", "instanceList": true, "url": "https://git.vern.cc/cobra/Destructables" + }, + "indestructables": { + "name": "Indestructables", + "instanceList": true, + "url": "https://indestructables.codeberg.page" } }, "targets": [ @@ -1010,7 +1015,7 @@ "options": { "enabled": false, "unsupportedUrls": "bypass", - "frontend": "indestructables", + "frontend": "structables", "redirectOnlyInIncognito": false }, "imageType": "svg", -- cgit 1.4.1