Fixed buttons in the general tab

This commit is contained in:
ManeraKai 2022-05-21 16:38:28 +03:00
parent 060629143a
commit 68f9fbb3f7
No known key found for this signature in database
GPG Key ID: 5ABC31FFD562E337
46 changed files with 1209 additions and 1304 deletions

View File

@ -28,7 +28,7 @@ Reddit => [Libreddit](https://github.com/spikecodes/libreddit#instances), [Teddi
Imgur => [Rimgo](https://codeberg.org/video-prize-ranch/rimgo)\ Imgur => [Rimgo](https://codeberg.org/video-prize-ranch/rimgo)\
Wikipedia => [Wikiless](https://codeberg.org/orenom/wikiless)\ Wikipedia => [Wikiless](https://codeberg.org/orenom/wikiless)\
Medium => [Scribe](https://sr.ht/~edwardloveall/scribe/)\ Medium => [Scribe](https://sr.ht/~edwardloveall/scribe/)\
Peertube => [SimpleerTube](https://git.sr.ht/~metalune/simpleweb_peertube)\ PeerTube => [SimpleerTube](https://git.sr.ht/~metalune/simpleweb_peertube)\
LBRY/Odysee => [Librarian](https://codeberg.org/librarian/librarian)\ LBRY/Odysee => [Librarian](https://codeberg.org/librarian/librarian)\
Search => [SearXNG](https://github.com/searxng/searxng), [SearX](https://searx.github.io/searx/), [Whoogle](https://benbusby.com/projects/whoogle-search/)\ Search => [SearXNG](https://github.com/searxng/searxng), [SearX](https://searx.github.io/searx/), [Whoogle](https://benbusby.com/projects/whoogle-search/)\
Translate => [SimplyTranslate](https://git.sr.ht/~metalune/simplytranslate_web), [LingvaTranslate](https://github.com/TheDavidDelta/lingva-translate)\ Translate => [SimplyTranslate](https://git.sr.ht/~metalune/simplytranslate_web), [LingvaTranslate](https://github.com/TheDavidDelta/lingva-translate)\

View File

@ -1,88 +1,49 @@
"use strict"; "use strict";
window.browser = window.browser || window.chrome; window.browser = window.browser || window.chrome;
let theme;
const getTheme = () => theme;
function setTheme(val) {
theme = val
browser.storage.local.set({ theme, instancesCookies: [] });
console.log("theme: ", theme)
}
let exceptions = {
"url": [],
"regex": [],
};
const getExceptions = () => exceptions;
function setExceptions(val) {
exceptions = val;
browser.storage.local.set({ exceptions })
console.log("exceptions: ", val)
}
let autoRedirect;
const getAutoRedirect = () => autoRedirect;
function setAutoRedirect(val) {
autoRedirect = val;
browser.storage.local.set({ autoRedirect })
console.log("autoRedirect: ", val)
}
function isException(url) { function isException(url) {
for (const item of exceptions.url) { return new Promise(resolve => {
console.log(item, `${url.protocol}//${url.host}`) browser.storage.local.get(
if (item == `${url.protocol}//${url.host}`) return true; 'exceptions',
}
for (const item of exceptions.regex)
if (new RegExp(item).test(url.href)) return true;
return false;
}
async function init() {
return new Promise(
resolve => browser.storage.local.get(
[
"exceptions",
"theme",
"popupFrontends",
"autoRedirect"
],
r => { r => {
if (r.exceptions) exceptions = r.exceptions; for (const item of r.exceptions.url)
if (item == `${url.protocol}//${url.host}`) { resolve(true); return; }
theme = r.theme ?? "DEFAULT" for (const item of r.exceptions.regex)
if (new RegExp(item).test(url.href)) { resolve(true); return; }
popupFrontends = r.popupFrontends ?? [ resolve(false); return;
"youtube",
"twitter",
"instagram",
"tikTok",
"imgur",
"reddit",
"search",
"medium",
"translate",
"maps",
];
autoRedirect = r.autoRedirect ?? false;
resolve();
} }
) )
) })
}
function initDefaults() {
return new Promise(async resolve => {
await browser.storage.local.set({
exceptions: {
"url": [],
"regex": [],
},
theme: "DEFAULT",
popupFrontends: [
"youtube",
"twitter",
"instagram",
"tikTok",
"imgur",
"reddit",
"search",
"medium",
"translate",
"maps",
],
autoRedirect: false,
})
resolve();
})
} }
let popupFrontends; const allPopupFrontends = [
const getPopupFrontends = () => popupFrontends;
function setPopupFrontends(val) {
popupFrontends = val;
browser.storage.local.set({ popupFrontends })
console.log("popupFrontends: ", val)
}
let allPopupFrontends = [
"youtube", "youtube",
"youtubeMusic", "youtubeMusic",
"twitter", "twitter",
@ -102,20 +63,7 @@ let allPopupFrontends = [
export default { export default {
getExceptions,
setExceptions,
getAutoRedirect,
setAutoRedirect,
getPopupFrontends,
setPopupFrontends,
allPopupFrontends,
getTheme,
setTheme,
isException, isException,
init, initDefaults,
allPopupFrontends,
} }

View File

@ -167,31 +167,32 @@ function switchInstance(url) {
}) })
} }
async function initDefaults() { function initDefaults() {
fetch('/instances/data.json').then(response => response.text()).then(async data => { return new Promise(resolve => {
let dataJson = JSON.parse(data); fetch('/instances/data.json').then(response => response.text()).then(async data => {
redirects.rimgo = dataJson.rimgo; let dataJson = JSON.parse(data);
browser.storage.local.get('cloudflareList', async r => { redirects.rimgo = dataJson.rimgo;
rimgoNormalRedirectsChecks = [...redirects.rimgo.normal]; browser.storage.local.get('cloudflareList', async r => {
for (const instance of r.cloudflareList) { rimgoNormalRedirectsChecks = [...redirects.rimgo.normal];
let i; for (const instance of r.cloudflareList) {
let i = rimgoNormalRedirectsChecks.indexOf(instance);
if (i > -1) rimgoNormalRedirectsChecks.splice(i, 1);
}
await browser.storage.local.set({
disableImgur: false,
imgurProtocol: 'normal',
imgurRedirects: redirects,
i = rimgoNormalRedirectsChecks.indexOf(instance); rimgoNormalRedirectsChecks: rimgoNormalRedirectsChecks,
if (i > -1) rimgoNormalRedirectsChecks.splice(i, 1); rimgoNormalCustomRedirects: [],
}
await browser.storage.local.set({
disableImgur: false,
imgurProtocol: 'normal',
imgurRedirects: redirects,
rimgoNormalRedirectsChecks: rimgoNormalRedirectsChecks, rimgoTorRedirectsChecks: [...redirects.rimgo.tor],
rimgoNormalCustomRedirects: [], rimgoTorCustomRedirects: [],
rimgoTorRedirectsChecks: [...redirects.rimgo.tor], rimgoI2pRedirectsChecks: [...redirects.rimgo.i2p],
rimgoTorCustomRedirects: [], rimgoI2pCustomRedirects: [],
});
rimgoI2pRedirectsChecks: [...redirects.rimgo.i2p], resolve();
rimgoI2pCustomRedirects: [],
}); });
}); });
}); });

View File

@ -12,15 +12,18 @@ let redirects = {
} }
}; };
function setRedirects(val) { function setRedirects(val) {
redirects.bibliogram = val; browser.storage.local.get('cloudflareList', async r => {
browser.storage.local.set({ instagramRedirects: redirects }) redirects.bibliogram = val;
console.log("instagramRedirects: ", val) bibliogramNormalRedirectsChecks = [...redirects.bibliogram.normal];
for (const item of bibliogramNormalRedirectsChecks) for (const instance of r.cloudflareList) {
if (!redirects.bibliogram.normal.includes(item)) { const a = bibliogramNormalRedirectsChecks.indexOf(instance);
var index = bibliogramNormalRedirectsChecks.indexOf(item); if (a > -1) bibliogramNormalRedirectsChecks.splice(a, 1);
if (index !== -1) bibliogramNormalRedirectsChecks.splice(index, 1);
} }
browser.storage.local.set({ bibliogramNormalRedirectsChecks }); browser.storage.local.set({
instagramRedirects: redirects,
bibliogramNormalRedirectsChecks
})
})
} }
let bibliogramNormalRedirectsChecks; let bibliogramNormalRedirectsChecks;
@ -49,7 +52,7 @@ function redirect(url, type, initiator) {
...r.instagramRedirects.bibliogram.tor, ...r.instagramRedirects.bibliogram.tor,
...r.bibliogramNormalCustomRedirects, ...r.bibliogramNormalCustomRedirects,
...r.bibliogramTorCustomRedirects, ...r.bibliogramTorCustomRedirects,
].includes(initiator.origin) || targets.includes(initiator.host)) ].includes(initiator.origin))
) { resolve('BYPASSTAB'); return; } ) { resolve('BYPASSTAB'); return; }
if (!targets.includes(url.host)) { resolve(); return; } if (!targets.includes(url.host)) { resolve(); return; }

View File

@ -120,28 +120,31 @@ function redirect(url, type, initiator) {
}) })
} }
async function initDefaults() { function initDefaults() {
browser.storage.local.get('cloudflareList', async r => { return new Promise(resolve => {
librarianNormalRedirectsChecks = [...redirects.librarian.normal]; browser.storage.local.get('cloudflareList', async r => {
for (const instance of r.cloudflareList) { librarianNormalRedirectsChecks = [...redirects.librarian.normal];
let i; for (const instance of r.cloudflareList) {
let i;
i = librarianNormalRedirectsChecks.indexOf(instance); i = librarianNormalRedirectsChecks.indexOf(instance);
if (i > -1) librarianNormalRedirectsChecks.splice(i, 1); if (i > -1) librarianNormalRedirectsChecks.splice(i, 1);
} }
await browser.storage.local.set({ await browser.storage.local.set({
disableLbryTargets: true, disableLbryTargets: true,
lbryTargetsRedirects: { lbryTargetsRedirects: {
'librarian': redirects.librarian 'librarian': redirects.librarian
}, },
librarianNormalRedirectsChecks: librarianNormalRedirectsChecks, librarianNormalRedirectsChecks: librarianNormalRedirectsChecks,
librarianNormalCustomRedirects: [], librarianNormalCustomRedirects: [],
librarianTorRedirectsChecks: [...redirects.librarian.tor], librarianTorRedirectsChecks: [...redirects.librarian.tor],
librarianTorCustomRedirects: [], librarianTorCustomRedirects: [],
lbryTargetsProtocol: "normal", lbryTargetsProtocol: "normal",
})
resolve();
}) })
}) })
} }

View File

@ -18,172 +18,180 @@ let redirects = {
} }
}; };
let disable; // disableMaps function redirect(url, initiator) {
let frontend; // mapsFrontend return new Promise(
resolve => {
browser.storage.local.get(
[
"disableMaps",
"mapsFrontend",
let facilNormalRedirectsChecks; "facilNormalRedirectsChecks",
let facilNormalCustomRedirects = []; "facilNormalCustomRedirects",
],
async r => {
const mapCentreRegex = /@(-?\d[0-9.]*),(-?\d[0-9.]*),(\d{1,2})[.z]/;
const dataLatLngRegex = /!3d(-?[0-9]{1,}.[0-9]{1,})!4d(-?[0-9]{1,}.[0-9]{1,})/;
const placeRegex = /\/place\/(.*)\//;
const travelModes = {
driving: "fossgis_osrm_car",
walking: "fossgis_osrm_foot",
bicycling: "fossgis_osrm_bike",
transit: "fossgis_osrm_car", // not implemented on OSM, default to car.
};
const travelModesFacil = {
driving: "car",
walking: "pedestrian",
bicycling: "bicycle",
transit: "car", // not implemented on Facil, default to car.
};
const osmLayers = {
none: "S",
transit: "T",
traffic: "S", // not implemented on OSM, default to standard.
bicycling: "C",
};
async function redirect(url, initiator) { async function addressToLatLng(address) {
const mapCentreRegex = /@(-?\d[0-9.]*),(-?\d[0-9.]*),(\d{1,2})[.z]/; return new Promise(async resolve => {
const dataLatLngRegex = /!3d(-?[0-9]{1,}.[0-9]{1,})!4d(-?[0-9]{1,}.[0-9]{1,})/; const xmlhttp = new XMLHttpRequest();
const placeRegex = /\/place\/(.*)\//; xmlhttp.onreadystatechange = () => {
const travelModes = { if (xmlhttp.readyState === XMLHttpRequest.DONE) {
driving: "fossgis_osrm_car", if (xmlhttp.status === 200) {
walking: "fossgis_osrm_foot", const json = JSON.parse(xmlhttp.responseText)[0];
bicycling: "fossgis_osrm_bike",
transit: "fossgis_osrm_car", // not implemented on OSM, default to car.
};
const travelModesFacil = {
driving: "car",
walking: "pedestrian",
bicycling: "bicycle",
transit: "car", // not implemented on Facil, default to car.
};
const osmLayers = {
none: "S",
transit: "T",
traffic: "S", // not implemented on OSM, default to standard.
bicycling: "C",
};
async function addressToLatLng(address) { if (json) {
return new Promise(async resolve => { console.log('json', json)
const xmlhttp = new XMLHttpRequest(); resolve([
xmlhttp.onreadystatechange = () => { `${json.lat},${json.lon}`,
if (xmlhttp.readyState === XMLHttpRequest.DONE) { `${json.boundingbox[2]},${json.boundingbox[1]},${json.boundingbox[3]},${json.boundingbox[0]}`,
if (xmlhttp.status === 200) { ]);
const json = JSON.parse(xmlhttp.responseText)[0]; }
} else
console.info("Error: Status is " + xmlhttp.status);
}
};
xmlhttp.open(
"GET",
`https://nominatim.openstreetmap.org/search/${address}?format=json&limit=1`,
true
);
xmlhttp.send();
})
}
if (json) { if (r.disableMaps) { resolve(); return; }
console.log('json', json) if (initiator && initiator.host === "earth.google.com") { resolve(); return; }
resolve([ if (!url.href.match(targets)) { resolve(); return; }
`${json.lat},${json.lon}`,
`${json.boundingbox[2]},${json.boundingbox[1]},${json.boundingbox[3]},${json.boundingbox[0]}`, let randomInstance;
]); if (r.mapsFrontend == 'osm') randomInstance = utils.getRandomInstance(redirects.osm.normal);
if (r.mapsFrontend == 'facil') randomInstance = utils.getRandomInstance([...r.facilNormalRedirectsChecks, ...r.facilNormalCustomRedirects]);
let mapCentre = "#";
let prefs = {};
if (url.pathname.match(mapCentreRegex)) { // Set map centre if present
var [, lat, lon, zoom] = url.pathname.match(mapCentreRegex);
} else if (url.searchParams.has("center")) {
var [lat, lon] = url.searchParams.get("center").split(",");
var zoom = url.searchParams.get("zoom") ?? "17";
}
if (lat && lon && zoom) {
if (r.mapsFrontend == 'osm') mapCentre = `#map=${zoom}/${lat}/${lon}`;
if (r.mapsFrontend == 'facil') mapCentre = `#${zoom}/${lat}/${lon}`;
}
if (url.searchParams.get("layer")) prefs.layers = osmLayers[url.searchParams.get("layer")];
if (url.pathname.includes("/embed")) { // Handle Google Maps Embed API
// https://www.google.com/maps/embed/v1/place?key=AIzaSyD4iE2xVSpkLLOXoyqT-RuPwURN3ddScAI&q=Eiffel+Tower,Paris+France
console.log("embed life");
let query = "";
if (url.searchParams.has("q")) query = url.searchParams.get("q");
else if (url.searchParams.has("query")) query = url.searchParams.has("query");
else if (url.searchParams.has("pb"))
try { query = url.searchParams.get("pb").split(/!2s(.*?)!/)[1]; }
catch (error) { console.error(error); } // Unable to find map marker in URL.
let [coords, boundingbox] = await addressToLatLng(query);
prefs.bbox = boundingbox;
prefs.marker = coords;
prefs.layer = "mapnik";
let prefsEncoded = new URLSearchParams(prefs).toString();
if (r.mapsFrontend == 'osm') { resolve(`${randomInstance}/export/embed.html?${prefsEncoded}`); return; }
if (r.mapsFrontend == 'facil') { resolve(`${randomInstance}/#q=${query}`); return; }
} else if (url.pathname.includes("/dir")) { // Handle Google Maps Directions
// https://www.google.com/maps/dir/?api=1&origin=Space+Needle+Seattle+WA&destination=Pike+Place+Market+Seattle+WA&travelmode=bicycling
let travMod = url.searchParams.get("travelmode");
if (url.searchParams.has("travelmode")) prefs.engine = travelModes[travMod];
let orgVal = url.searchParams.get("origin");
let destVal = url.searchParams.get("destination");
let org; addressToLatLng(orgVal, a => org = a);
let dest; addressToLatLng(destVal, a => dest = a);
prefs.route = `${org};${dest}`;
let prefsEncoded = new URLSearchParams(prefs).toString();
if (r.mapsFrontend == 'osm') { resolve(`${randomInstance}/directions?${prefsEncoded}${mapCentre}`); return; }
if (r.mapsFrontend == 'facil') { resolve(`${randomInstance}/#q=${orgVal}%20to%20${destVal}%20by%20${travelModesFacil[travMod]}`); return; }
} else if (url.pathname.includes("data=") && url.pathname.match(dataLatLngRegex)) { // Get marker from data attribute
// https://www.google.com/maps/place/41%C2%B001'58.2%22N+40%C2%B029'18.2%22E/@41.032833,40.4862063,17z/data=!3m1!4b1!4m6!3m5!1s0x0:0xf64286eaf72fc49d!7e2!8m2!3d41.0328329!4d40.4883948
console.log("data life");
let [, mlat, mlon] = url.pathname.match(dataLatLngRegex);
if (r.mapsFrontend == 'osm') { resolve(`${randomInstance}/search?query=${mlat}%2C${mlon}`); return; }
if (r.mapsFrontend == 'facil') { resolve(`${randomInstance}/#q=${mlat}%2C${mlon}`); return; }
} else if (url.searchParams.has("ll")) { // Get marker from ll param
// https://maps.google.com/?ll=38.882147,-76.99017
console.log("ll life");
const [mlat, mlon] = url.searchParams.get("ll").split(",");
if (r.mapsFrontend == 'osm') { resolve(`${randomInstance}/search?query=${mlat}%2C${mlon}`); return; }
if (r.mapsFrontend == 'facil') { resolve(`${randomInstance}/#q=${mlat}%2C${mlon}`); return; }
} else if (url.searchParams.has("viewpoint")) { // Get marker from viewpoint param.
// https://www.google.com/maps/@?api=1&map_action=pano&viewpoint=48.857832,2.295226&heading=-45&pitch=38&fov=80
console.log("viewpoint life");
const [mlat, mlon] = url.searchParams.get("viewpoint").split(",");
if (r.mapsFrontend == 'osm') { resolve(`${randomInstance}/search?query=${mlat}%2C${mlon}`); return; }
if (r.mapsFrontend == 'facil') { resolve(`${randomInstance}/#q=${mlat}%2C${mlon}`); return; }
} else { // Use query as search if present.
console.log("normal life");
let query;
if (url.searchParams.has("q")) query = url.searchParams.get("q");
else if (url.searchParams.has("query")) query = url.searchParams.get("query");
else if (url.pathname.match(placeRegex)) query = url.pathname.match(placeRegex)[1];
let prefsEncoded = new URLSearchParams(prefs).toString();
if (query) {
if (r.mapsFrontend == 'osm') { resolve(`${randomInstance}/search?query="${query}${mapCentre}&${prefsEncoded}`); return; }
if (r.mapsFrontend == 'facil') { resolve(`${randomInstance}/${mapCentre}/Mpnk/${query}`); return; }
} }
} else }
console.info("Error: Status is " + xmlhttp.status);
let prefsEncoded = new URLSearchParams(prefs).toString();
console.log("mapCentre", mapCentre);
console.log("prefs", prefs);
console.log("prefsEncoded", prefsEncoded);
if (r.mapsFrontend == 'osm') { resolve(`${randomInstance}/${mapCentre}&${prefsEncoded}`); return; }
if (r.mapsFrontend == 'facil') { resolve(`${randomInstance}/${mapCentre}/Mpnk`); return; }
} }
}; )
xmlhttp.open(
"GET",
`https://nominatim.openstreetmap.org/search/${address}?format=json&limit=1`,
true
);
xmlhttp.send();
}) })
}
if (disable) return;
if (initiator && initiator.host === "earth.google.com") return;
if (!url.href.match(targets)) return;
let randomInstance;
if (frontend == 'osm') randomInstance = utils.getRandomInstance(redirects.osm.normal);
if (frontend == 'facil') randomInstance = utils.getRandomInstance([...facilNormalRedirectsChecks, ...facilNormalCustomRedirects]);
let mapCentre = "#";
let prefs = {};
if (url.pathname.match(mapCentreRegex)) { // Set map centre if present
var [, lat, lon, zoom] = url.pathname.match(mapCentreRegex);
} else if (url.searchParams.has("center")) {
var [lat, lon] = url.searchParams.get("center").split(",");
var zoom = url.searchParams.get("zoom") ?? "17";
}
if (lat && lon && zoom) {
if (frontend == 'osm') mapCentre = `#map=${zoom}/${lat}/${lon}`;
if (frontend == 'facil') mapCentre = `#${zoom}/${lat}/${lon}`;
}
if (url.searchParams.get("layer")) prefs.layers = osmLayers[url.searchParams.get("layer")];
if (url.pathname.includes("/embed")) { // Handle Google Maps Embed API
// https://www.google.com/maps/embed/v1/place?key=AIzaSyD4iE2xVSpkLLOXoyqT-RuPwURN3ddScAI&q=Eiffel+Tower,Paris+France
console.log("embed life");
let query = "";
if (url.searchParams.has("q")) query = url.searchParams.get("q");
else if (url.searchParams.has("query")) query = url.searchParams.has("query");
else if (url.searchParams.has("pb"))
try { query = url.searchParams.get("pb").split(/!2s(.*?)!/)[1]; }
catch (error) { console.error(error); } // Unable to find map marker in URL.
let [coords, boundingbox] = await addressToLatLng(query);
prefs.bbox = boundingbox;
prefs.marker = coords;
prefs.layer = "mapnik";
let prefsEncoded = new URLSearchParams(prefs).toString();
if (frontend == 'osm') return `${randomInstance}/export/embed.html?${prefsEncoded}`;
if (frontend == 'facil') return `${randomInstance}/#q=${query}`;
} else if (url.pathname.includes("/dir")) { // Handle Google Maps Directions
// https://www.google.com/maps/dir/?api=1&origin=Space+Needle+Seattle+WA&destination=Pike+Place+Market+Seattle+WA&travelmode=bicycling
let travMod = url.searchParams.get("travelmode");
if (url.searchParams.has("travelmode")) prefs.engine = travelModes[travMod];
let orgVal = url.searchParams.get("origin");
let destVal = url.searchParams.get("destination");
let org; addressToLatLng(orgVal, a => org = a);
let dest; addressToLatLng(destVal, a => dest = a);
prefs.route = `${org};${dest}`;
let prefsEncoded = new URLSearchParams(prefs).toString();
if (frontend == 'osm') return `${randomInstance}/directions?${prefsEncoded}${mapCentre}`;
if (frontend == 'facil') return `${randomInstance}/#q=${orgVal}%20to%20${destVal}%20by%20${travelModesFacil[travMod]}`;
} else if (url.pathname.includes("data=") && url.pathname.match(dataLatLngRegex)) { // Get marker from data attribute
// https://www.google.com/maps/place/41%C2%B001'58.2%22N+40%C2%B029'18.2%22E/@41.032833,40.4862063,17z/data=!3m1!4b1!4m6!3m5!1s0x0:0xf64286eaf72fc49d!7e2!8m2!3d41.0328329!4d40.4883948
console.log("data life");
let [, mlat, mlon] = url.pathname.match(dataLatLngRegex);
if (frontend == 'osm') return `${randomInstance}/search?query=${mlat}%2C${mlon}`;
if (frontend == 'facil') return `${randomInstance}/#q=${mlat}%2C${mlon}`;
} else if (url.searchParams.has("ll")) { // Get marker from ll param
// https://maps.google.com/?ll=38.882147,-76.99017
console.log("ll life");
const [mlat, mlon] = url.searchParams.get("ll").split(",");
if (frontend == 'osm') return `${randomInstance}/search?query=${mlat}%2C${mlon}`;
if (frontend == 'facil') return `${randomInstance}/#q=${mlat}%2C${mlon}`;
} else if (url.searchParams.has("viewpoint")) { // Get marker from viewpoint param.
// https://www.google.com/maps/@?api=1&map_action=pano&viewpoint=48.857832,2.295226&heading=-45&pitch=38&fov=80
console.log("viewpoint life");
const [mlat, mlon] = url.searchParams.get("viewpoint").split(",");
if (frontend == 'osm') return `${randomInstance}/search?query=${mlat}%2C${mlon}`;
if (frontend == 'facil') return `${randomInstance}/#q=${mlat}%2C${mlon}`;
} else { // Use query as search if present.
console.log("normal life");
let query;
if (url.searchParams.has("q")) query = url.searchParams.get("q");
else if (url.searchParams.has("query")) query = url.searchParams.get("query");
else if (url.pathname.match(placeRegex)) query = url.pathname.match(placeRegex)[1];
let prefsEncoded = new URLSearchParams(prefs).toString();
if (query) {
if (frontend == 'osm') return `${randomInstance}/search?query="${query}${mapCentre}&${prefsEncoded}`;
if (frontend == 'facil') return `${randomInstance}/${mapCentre}/Mpnk/${query}`
}
}
let prefsEncoded = new URLSearchParams(prefs).toString();
console.log("mapCentre", mapCentre);
console.log("prefs", prefs);
console.log("prefsEncoded", prefsEncoded);
if (frontend == 'osm') return `${randomInstance}/${mapCentre}&${prefsEncoded}`
if (frontend == 'facil') return `${randomInstance}/${mapCentre}/Mpnk`
} }
async function initDefaults() { async function initDefaults() {
@ -198,32 +206,7 @@ async function initDefaults() {
}) })
} }
async function init() {
return new Promise(
resolve => {
browser.storage.local.get(
[
"disableMaps",
"mapsFrontend",
"facilNormalRedirectsChecks",
"facilNormalCustomRedirects",
],
r => {
disable = r.disableMaps;
frontend = r.mapsFrontend;
facilNormalRedirectsChecks = r.facilNormalRedirectsChecks;
facilNormalCustomRedirects = r.facilNormalCustomRedirects;
resolve();
}
);
});
}
export default { export default {
redirect, redirect,
init,
initDefaults, initDefaults,
}; };

View File

@ -35,25 +35,18 @@ let redirects = {
} }
}; };
function setRedirects(val) { function setRedirects(val) {
redirects.scribe = val; browser.storage.local.get('cloudflareList', r => {
browser.storage.local.set({ mediumRedirects: redirects }) redirects.scribe = val;
for (const item of scribeNormalRedirectsChecks) if (!redirects.scribe.normal.includes(item)) { scribeNormalRedirectsChecks = [...redirects.scribe.normal];
var index = scribeNormalRedirectsChecks.indexOf(item); for (const instance of r.cloudflareList) {
if (index !== -1) scribeNormalRedirectsChecks.splice(index, 1); const a = scribeNormalRedirectsChecks.indexOf(instance);
} if (a > -1) scribeNormalRedirectsChecks.splice(a, 1);
browser.storage.local.set({ scribeNormalRedirectsChecks }) }
browser.storage.local.set({
for (const item of scribeNormalRedirectsChecks) if (!redirects.scribe.normal.includes(item)) { mediumRedirects: redirects,
var index = scribeNormalRedirectsChecks.indexOf(item); scribeNormalRedirectsChecks
if (index !== -1) scribeNormalRedirectsChecks.splice(index, 1); })
} })
browser.storage.local.set({ scribeNormalRedirectsChecks })
for (const item of scribeTorRedirectsChecks) if (!redirects.scribe.normal.includes(item)) {
var index = scribeTorRedirectsChecks.indexOf(item);
if (index !== -1) scribeTorRedirectsChecks.splice(index, 1);
}
browser.storage.local.set({ scribeTorRedirectsChecks })
} }
let scribeNormalRedirectsChecks; let scribeNormalRedirectsChecks;
@ -133,27 +126,31 @@ function switchInstance(url) {
} }
function initDefaults() { function initDefaults() {
fetch('/instances/data.json').then(response => response.text()).then(data => { return new Promise(resolve => {
let dataJson = JSON.parse(data); fetch('/instances/data.json').then(response => response.text()).then(data => {
redirects.scribe = dataJson.scribe; let dataJson = JSON.parse(data);
browser.storage.local.get('cloudflareList', r => { redirects.scribe = dataJson.scribe;
scribeNormalRedirectsChecks = [...redirects.scribe.normal]; browser.storage.local.get('cloudflareList',
for (const instance of r.cloudflareList) { async r => {
let i = scribeNormalRedirectsChecks.indexOf(instance); scribeNormalRedirectsChecks = [...redirects.scribe.normal];
if (i > -1) scribeNormalRedirectsChecks.splice(i, 1); for (const instance of r.cloudflareList) {
} let i = scribeNormalRedirectsChecks.indexOf(instance);
browser.storage.local.set({ if (i > -1) scribeNormalRedirectsChecks.splice(i, 1);
disableMedium: false, }
mediumRedirects: redirects, await browser.storage.local.set({
disableMedium: false,
mediumRedirects: redirects,
scribeNormalRedirectsChecks: scribeNormalRedirectsChecks, scribeNormalRedirectsChecks: scribeNormalRedirectsChecks,
scribeNormalCustomRedirects: [], scribeNormalCustomRedirects: [],
scribeTorRedirectsChecks: [...redirects.scribe.tor], scribeTorRedirectsChecks: [...redirects.scribe.tor],
scribeTorCustomRedirects: [], scribeTorCustomRedirects: [],
mediumProtocol: "normal", mediumProtocol: "normal",
}) })
resolve();
})
}) })
}) })
} }

View File

@ -2,8 +2,6 @@ window.browser = window.browser || window.chrome;
import utils from './utils.js' import utils from './utils.js'
let targets = [];
let redirects = { let redirects = {
"simpleertube": { "simpleertube": {
"normal": [ "normal": [
@ -19,7 +17,6 @@ let redirects = {
function setRedirects(val) { function setRedirects(val) {
redirects.simpleertube = val; redirects.simpleertube = val;
browser.storage.local.set({ peertubeTargetsRedirects: redirects }) browser.storage.local.set({ peertubeTargetsRedirects: redirects })
console.log("peertubeTargetsRedirects: ", val)
for (const item of simpleertubeNormalRedirectsChecks) for (const item of simpleertubeNormalRedirectsChecks)
if (!redirects.simpleertube.normal.includes(item)) { if (!redirects.simpleertube.normal.includes(item)) {
var index = simpleertubeNormalRedirectsChecks.indexOf(item); var index = simpleertubeNormalRedirectsChecks.indexOf(item);
@ -34,15 +31,10 @@ function setRedirects(val) {
} }
browser.storage.local.set({ simpleertubeTorRedirectsChecks }) browser.storage.local.set({ simpleertubeTorRedirectsChecks })
} }
let
simpleertubeNormalRedirectsChecks,
simpleertubeTorRedirectsChecks;
let simpleertubeNormalRedirectsChecks;
let simpleertubeTorRedirectsChecks;
let simpleertubeNormalCustomRedirects = [];
let simpleertubeTorCustomRedirects = [];
let disable;
let protocol;
async function switchInstance(url) { async function switchInstance(url) {
return new Promise(resolve => { return new Promise(resolve => {
@ -82,92 +74,82 @@ async function switchInstance(url) {
} }
function redirect(url, type, initiator) { function redirect(url, type, initiator) {
if (disable) return null; return new Promise(resolve => {
if ( browser.storage.local.get(
initiator &&
(
[ [
...redirects.simpleertube.normal, "disablePeertubeTargets",
...simpleertubeNormalCustomRedirects
].includes(initiator.origin) ||
targets.includes(initiator.host)
)
) return null;
let protocolHost = utils.protocolHost(url);
if (!targets.includes(protocolHost)) return null;
if (type != "main_frame") return null; "peertubeRedirects",
let instancesList; "simpleertubeNormalRedirectsChecks",
if (protocol == 'normal') instancesList = [...simpleertubeNormalRedirectsChecks, ...simpleertubeNormalCustomRedirects]; "simpleertubeNormalCustomRedirects",
if (protocol == 'tor') instancesList = [...simpleertubeTorRedirectsChecks, ...simpleertubeTorCustomRedirects];
if (instancesList.length === 0) return null;
let randomInstance = utils.getRandomInstance(instancesList);
if (url.host == 'search.joinpeertube.org') return randomInstance; "simpleertubeTorRedirectsChecks",
"simpleertubeTorCustomRedirects",
return `${randomInstance}/${url.host}${url.pathname}${url.search}`; "peerTubeTargets",
} "peertubeTargetsProtocol"
],
r => {
if (r.disablePeertubeTargets) { resolve(); return; }
if (
initiator &&
(
[
...r.peertubeRedirects.simpleertube.normal,
...r.simpleertubeNormalCustomRedirects
].includes(initiator.origin) ||
r.peerTubeTargets.includes(initiator.host)
)
) { resolve(); return; }
let protocolHost = utils.protocolHost(url);
if (!r.peerTubeTargets.includes(protocolHost)) { resolve(); return; }
if (type != "main_frame") { resolve(); return; }
async function initDefaults() { let instancesList;
fetch('/instances/data.json').then(response => response.text()).then(async data => { if (r.peertubeTargetsProtocol == 'normal') instancesList = [...r.simpleertubeNormalRedirectsChecks, ...r.simpleertubeNormalCustomRedirects];
let dataJson = JSON.parse(data); if (r.peertubeTargetsProtocol == 'tor') instancesList = [...r.simpleertubeTorRedirectsChecks, ...r.simpleertubeTorCustomRedirects];
browser.storage.local.get('cloudflareList', async r => { if (instancesList.length === 0) { resolve(); return; }
simpleertubeNormalRedirectsChecks = [...redirects.simpleertube.normal]; let randomInstance = utils.getRandomInstance(instancesList);
for (const instance of r.cloudflareList) { if (url.host == 'search.joinpeertube.org') { resolve(randomInstance); return; }
let i = simpleertubeNormalRedirectsChecks.indexOf(instance);
if (i > -1) simpleertubeNormalRedirectsChecks.splice(i, 1); resolve(`${randomInstance}/${url.host}${url.pathname}${url.search}`);
} }
await browser.storage.local.set({ )
peerTubeTargets: ['https://search.joinpeertube.org', ...dataJson.peertube], })
disablePeertubeTargets: true, }
peertubeRedirects: redirects, async function initDefaults() {
return new Promise(resolve => {
fetch('/instances/data.json').then(response => response.text()).then(async data => {
let dataJson = JSON.parse(data);
browser.storage.local.get('cloudflareList', async r => {
simpleertubeNormalRedirectsChecks = [...redirects.simpleertube.normal];
for (const instance of r.cloudflareList) {
let i = simpleertubeNormalRedirectsChecks.indexOf(instance);
if (i > -1) simpleertubeNormalRedirectsChecks.splice(i, 1);
}
await browser.storage.local.set({
peerTubeTargets: ['https://search.joinpeertube.org', ...dataJson.peertube],
disablePeertubeTargets: true,
peertubeRedirects: redirects,
simpleertubeNormalRedirectsChecks: simpleertubeNormalRedirectsChecks, simpleertubeNormalRedirectsChecks: simpleertubeNormalRedirectsChecks,
simpleertubeNormalCustomRedirects: [], simpleertubeNormalCustomRedirects: [],
simpleertubeTorRedirectsChecks: [...redirects.simpleertube.tor], simpleertubeTorRedirectsChecks: [...redirects.simpleertube.tor],
simpleertubeTorCustomRedirects: [], simpleertubeTorCustomRedirects: [],
peertubeTargetsProtocol: "normal", peertubeTargetsProtocol: "normal",
})
resolve();
}) })
}) })
}) })
} }
async function init() {
await browser.storage.local.get(
[
"disablePeertubeTargets",
"simpleertubeNormalRedirectsChecks",
"simpleertubeNormalCustomRedirects",
"simpleertubeTorRedirectsChecks",
"simpleertubeTorCustomRedirects",
"peerTubeTargets",
"peertubeTargetsProtocol"
],
r => {
disable = r.disablePeertubeTargets;
protocol = r.peertubeTargetsProtocol;
targets = r.peerTubeTargets;
simpleertubeNormalRedirectsChecks = r.simpleertubeNormalRedirectsChecks;
simpleertubeNormalCustomRedirects = r.simpleertubeNormalCustomRedirects;
simpleertubeTorRedirectsChecks = r.simpleertubeTorRedirectsChecks;
simpleertubeTorCustomRedirects = r.simpleertubeTorCustomRedirects;
}
)
}
export default { export default {
setRedirects, setRedirects,
switchInstance, switchInstance,
redirect, redirect,
initDefaults, initDefaults,
init,
}; };

View File

@ -16,50 +16,29 @@ let redirects = {
"tor": [] "tor": []
}, },
}; };
function setLibredditRedirects(val) { function setRedirects(val) {
redirects.libreddit = val; browser.storage.local.get('cloudflareList', r => {
browser.storage.local.set({ redditRedirects: redirects }) redirects = val;
console.log("libredditRedirects:", val) libredditNormalRedirectsChecks = [...redirects.libreddit.normal];
for (const item of libredditNormalRedirectsChecks) tedditNormalRedirectsChecks = [...redirects.teddit.normal]
if (!redirects.libreddit.normal.includes(item)) { for (const instance of r.cloudflareList) {
var index = libredditNormalRedirectsChecks.indexOf(item); const a = libredditNormalRedirectsChecks.indexOf(instance);
if (index !== -1) libredditNormalRedirectsChecks.splice(index, 1); if (a > -1) libredditNormalRedirectsChecks.splice(a, 1);
}
browser.storage.local.set({ libredditNormalRedirectsChecks })
for (const item of libredditTorRedirectsChecks) const b = tedditNormalRedirectsChecks.indexOf(instance);
if (!redirects.libreddit.normal.includes(item)) { if (b > -1) tedditNormalRedirectsChecks.splice(b, 1);
var index = libredditTorRedirectsChecks.indexOf(item);
if (index !== -1) libredditTorRedirectsChecks.splice(index, 1);
} }
browser.storage.local.set({ libredditTorRedirectsChecks }) browser.storage.local.set({
} redditRedirects: redirects,
libredditNormalRedirectsChecks,
function setTedditRedirects(val) { tedditNormalRedirectsChecks
redirects.teddit = val; })
browser.storage.local.set({ redditRedirects: redirects }) })
console.log("tedditRedirects:", val)
for (const item of tedditNormalRedirectsChecks)
if (!redirects.teddit.normal.includes(item)) {
var index = tedditNormalRedirectsChecks.indexOf(item);
if (index !== -1) tedditNormalRedirectsChecks.splice(index, 1);
}
browser.storage.local.set({ tedditNormalRedirectsChecks })
for (const item of tedditTorRedirectsChecks)
if (!redirects.teddit.normal.includes(item)) {
var index = tedditTorRedirectsChecks.indexOf(item);
if (index !== -1) tedditTorRedirectsChecks.splice(index, 1);
}
browser.storage.local.set({ tedditTorRedirectsChecks })
} }
let let
libredditNormalRedirectsChecks, libredditNormalRedirectsChecks,
libredditTorRedirectsChecks, tedditNormalRedirectsChecks;
tedditNormalRedirectsChecks,
tedditTorRedirectsChecks;
function initLibredditCookies(test, from) { function initLibredditCookies(test, from) {
return new Promise(resolve => { return new Promise(resolve => {
@ -105,35 +84,38 @@ function initLibredditCookies(test, from) {
} }
function setLibredditCookies() { function setLibredditCookies() {
browser.storage.local.get( return new Promise(resolve => {
[ browser.storage.local.get(
"redditProtocol", [
"disableReddit", "redditProtocol",
"redditFrontend", "disableReddit",
"libredditNormalRedirectsChecks", "redditFrontend",
"libredditNormalCustomRedirects", "libredditNormalRedirectsChecks",
"libredditTorRedirectsChecks", "libredditNormalCustomRedirects",
"libredditTorCustomRedirects", "libredditTorRedirectsChecks",
], "libredditTorCustomRedirects",
r => { ],
if (r.disableReddit || r.redditFrontend != 'libreddit' || r.redditProtocol === undefined) return; r => {
let checkedInstances; if (r.disableReddit || r.redditFrontend != 'libreddit' || r.redditProtocol === undefined) { resolve(); return; }
if (r.redditProtocol == 'normal') checkedInstances = [...r.libredditNormalRedirectsChecks, ...r.libredditNormalCustomRedirects] let checkedInstances;
else if (r.redditProtocol == 'tor') checkedInstances = [...r.libredditTorRedirectsChecks, ...r.libredditTorCustomRedirects] if (r.redditProtocol == 'normal') checkedInstances = [...r.libredditNormalRedirectsChecks, ...r.libredditNormalCustomRedirects]
for (const to of checkedInstances) { else if (r.redditProtocol == 'tor') checkedInstances = [...r.libredditTorRedirectsChecks, ...r.libredditTorCustomRedirects]
utils.getCookiesFromStorage('libreddit', to, "theme"); for (const to of checkedInstances) {
utils.getCookiesFromStorage('libreddit', to, "front_page"); utils.getCookiesFromStorage('libreddit', to, "theme");
utils.getCookiesFromStorage('libreddit', to, "layout"); utils.getCookiesFromStorage('libreddit', to, "front_page");
utils.getCookiesFromStorage('libreddit', to, "wide"); utils.getCookiesFromStorage('libreddit', to, "layout");
utils.getCookiesFromStorage('libreddit', to, "post_sort"); utils.getCookiesFromStorage('libreddit', to, "wide");
utils.getCookiesFromStorage('libreddit', to, "comment_sort"); utils.getCookiesFromStorage('libreddit', to, "post_sort");
utils.getCookiesFromStorage('libreddit', to, "show_nsfw"); utils.getCookiesFromStorage('libreddit', to, "comment_sort");
utils.getCookiesFromStorage('libreddit', to, "autoplay_videos"); utils.getCookiesFromStorage('libreddit', to, "show_nsfw");
utils.getCookiesFromStorage('libreddit', to, "use_hls"); utils.getCookiesFromStorage('libreddit', to, "autoplay_videos");
utils.getCookiesFromStorage('libreddit', to, "hide_hls_notification"); utils.getCookiesFromStorage('libreddit', to, "use_hls");
utils.getCookiesFromStorage('libreddit', to, "hide_hls_notification");
}
resolve();
} }
} )
) })
} }
function initTedditCookies(test, from) { function initTedditCookies(test, from) {
@ -181,37 +163,40 @@ function initTedditCookies(test, from) {
} }
function setTedditCookies() { function setTedditCookies() {
browser.storage.local.get( return new Promise(resolve => {
[ browser.storage.local.get(
"redditProtocol", [
"disableReddit", "redditProtocol",
"redditFrontend", "disableReddit",
"tedditNormalRedirectsChecks", "redditFrontend",
"tedditNormalCustomRedirects", "tedditNormalRedirectsChecks",
"tedditTorRedirectsChecks", "tedditNormalCustomRedirects",
"tedditTorCustomRedirects", "tedditTorRedirectsChecks",
], "tedditTorCustomRedirects",
r => { ],
if (r.disableReddit || r.redditFrontend != 'teddit' || r.redditProtocol === undefined) return; r => {
let checkedInstances; if (r.disableReddit || r.redditFrontend != 'teddit' || r.redditProtocol === undefined) { resolve(); return; }
if (r.redditProtocol == 'normal') checkedInstances = [...r.tedditNormalRedirectsChecks, ...r.tedditNormalCustomRedirects] let checkedInstances;
else if (r.redditProtocol == 'tor') checkedInstances = [...r.tedditTorRedirectsChecks, ...r.tedditTorCustomRedirects] if (r.redditProtocol == 'normal') checkedInstances = [...r.tedditNormalRedirectsChecks, ...r.tedditNormalCustomRedirects]
for (const to of checkedInstances) { else if (r.redditProtocol == 'tor') checkedInstances = [...r.tedditTorRedirectsChecks, ...r.tedditTorCustomRedirects]
utils.getCookiesFromStorage('teddit', to, 'collapse_child_comments') for (const to of checkedInstances) {
utils.getCookiesFromStorage('teddit', to, 'domain_instagram') utils.getCookiesFromStorage('teddit', to, 'collapse_child_comments')
utils.getCookiesFromStorage('teddit', to, 'domain_twitter') utils.getCookiesFromStorage('teddit', to, 'domain_instagram')
utils.getCookiesFromStorage('teddit', to, 'domain_youtube') utils.getCookiesFromStorage('teddit', to, 'domain_twitter')
utils.getCookiesFromStorage('teddit', to, 'flairs') utils.getCookiesFromStorage('teddit', to, 'domain_youtube')
utils.getCookiesFromStorage('teddit', to, 'highlight_controversial') utils.getCookiesFromStorage('teddit', to, 'flairs')
utils.getCookiesFromStorage('teddit', to, 'nsfw_enabled') utils.getCookiesFromStorage('teddit', to, 'highlight_controversial')
utils.getCookiesFromStorage('teddit', to, 'post_media_max_height') utils.getCookiesFromStorage('teddit', to, 'nsfw_enabled')
utils.getCookiesFromStorage('teddit', to, 'show_upvoted_percentage') utils.getCookiesFromStorage('teddit', to, 'post_media_max_height')
utils.getCookiesFromStorage('teddit', to, 'show_upvotes') utils.getCookiesFromStorage('teddit', to, 'show_upvoted_percentage')
utils.getCookiesFromStorage('teddit', to, 'theme') utils.getCookiesFromStorage('teddit', to, 'show_upvotes')
utils.getCookiesFromStorage('teddit', to, 'videos_muted') utils.getCookiesFromStorage('teddit', to, 'theme')
utils.getCookiesFromStorage('teddit', to, 'videos_muted')
}
resolve();
} }
} )
) })
} }
function redirect(url, type, initiator) { function redirect(url, type, initiator) {
@ -403,48 +388,49 @@ function switchInstance(url) {
} }
function initDefaults() { function initDefaults() {
fetch('/instances/data.json').then(response => response.text()).then(async data => { return new Promise(resolve => {
let dataJson = JSON.parse(data); fetch('/instances/data.json').then(response => response.text()).then(async data => {
redirects.teddit = dataJson.teddit; let dataJson = JSON.parse(data);
redirects.libreddit = dataJson.libreddit; redirects.teddit = dataJson.teddit;
browser.storage.local.get('cloudflareList', async r => { redirects.libreddit = dataJson.libreddit;
libredditNormalRedirectsChecks = [...redirects.libreddit.normal]; browser.storage.local.get('cloudflareList', async r => {
tedditNormalRedirectsChecks = [...redirects.teddit.normal] libredditNormalRedirectsChecks = [...redirects.libreddit.normal];
for (const instance of r.cloudflareList) { tedditNormalRedirectsChecks = [...redirects.teddit.normal]
let i; for (const instance of r.cloudflareList) {
let i;
i = libredditNormalRedirectsChecks.indexOf(instance); i = libredditNormalRedirectsChecks.indexOf(instance);
if (i > -1) libredditNormalRedirectsChecks.splice(i, 1); if (i > -1) libredditNormalRedirectsChecks.splice(i, 1);
i = tedditNormalRedirectsChecks.indexOf(instance); i = tedditNormalRedirectsChecks.indexOf(instance);
if (i > -1) tedditNormalRedirectsChecks.splice(i, 1); if (i > -1) tedditNormalRedirectsChecks.splice(i, 1);
} }
await browser.storage.local.set({ await browser.storage.local.set({
disableReddit: false, disableReddit: false,
redditProtocol: 'normal', redditProtocol: 'normal',
redditFrontend: 'libreddit', redditFrontend: 'libreddit',
redditRedirects: redirects, redditRedirects: redirects,
libredditNormalRedirectsChecks: libredditNormalRedirectsChecks, libredditNormalRedirectsChecks: libredditNormalRedirectsChecks,
libredditNormalCustomRedirects: [], libredditNormalCustomRedirects: [],
libredditTorRedirectsChecks: [...redirects.libreddit.tor], libredditTorRedirectsChecks: [...redirects.libreddit.tor],
libredditTorCustomRedirects: [], libredditTorCustomRedirects: [],
tedditNormalRedirectsChecks: tedditNormalRedirectsChecks, tedditNormalRedirectsChecks: tedditNormalRedirectsChecks,
tedditNormalCustomRedirects: [], tedditNormalCustomRedirects: [],
tedditTorRedirectsChecks: [...redirects.teddit.tor], tedditTorRedirectsChecks: [...redirects.teddit.tor],
tedditTorCustomRedirects: [], tedditTorCustomRedirects: [],
});
resolve();
}); });
}); });
}); });
} }
export default { export default {
setTedditRedirects, setRedirects,
setLibredditRedirects,
initLibredditCookies, initLibredditCookies,
setLibredditCookies, setLibredditCookies,
initTedditCookies, initTedditCookies,

View File

@ -8,7 +8,7 @@ const targets = [
/^https?:\/{2}yandex(\.[a-z]{2,3}){1,2}/, /^https?:\/{2}yandex(\.[a-z]{2,3}){1,2}/,
/^https?:\/{2}libredirect\.invalid/, /^https?:\/{2}search\.libredirect\.invalid/,
]; ];
let redirects = { let redirects = {
"searx": { "searx": {
@ -28,87 +28,35 @@ let redirects = {
} }
}; };
function setSearxRedirects(val) { function setRedirects(val) {
redirects.searx = val; browser.storage.local.get('cloudflareList', r => {
browser.storage.local.set({ searchRedirects: redirects }) redirects = val;
console.log("searxRedirects:", val) searxNormalRedirectsChecks = [...redirects.searx.normal];
for (const item of searxNormalRedirectsChecks) if (!redirects.searx.normal.includes(item)) { searxngNormalRedirectsChecks = [...redirects.searxng.normal];
var index = searxNormalRedirectsChecks.indexOf(item); whoogleNormalRedirectsChecks = [...redirects.whoogle.normal];
if (index !== -1) searxNormalRedirectsChecks.splice(index, 1); for (const instance of r.cloudflareList) {
} const a = searxNormalRedirectsChecks.indexOf(instance);
browser.storage.local.set({ searxNormalRedirectsChecks }); if (a > -1) searxNormalRedirectsChecks.splice(a, 1);
for (const item of searxTorRedirectsChecks) if (!redirects.searx.tor.includes(item)) { const b = searxngNormalRedirectsChecks.indexOf(instance);
var index = searxTorRedirectsChecks.indexOf(item); if (b > -1) searxngNormalRedirectsChecks.splice(b, 1);
if (index !== -1) searxTorRedirectsChecks.splice(index, 1);
}
browser.storage.local.set({ searxTorRedirectsChecks })
for (const item of searxI2pRedirectsChecks) if (!redirects.searx.i2p.includes(item)) { const c = whoogleNormalRedirectsChecks.indexOf(instance);
var index = searxI2pRedirectsChecks.indexOf(item); if (c > -1) whoogleNormalRedirectsChecks.splice(c, 1);
if (index !== -1) searxI2pRedirectsChecks.splice(index, 1); }
} browser.storage.local.set({
browser.storage.local.set({ searxI2pRedirectsChecks }); searchRedirects: redirects,
} searxNormalRedirectsChecks,
searxngNormalRedirectsChecks,
function setSearxngRedirects(val) { whoogleNormalRedirectsChecks,
redirects.searxng = val; });
browser.storage.local.set({ searchRedirects: redirects }) })
console.log("searxngRedirects:", val)
for (const item of searxngNormalRedirectsChecks) if (!redirects.searxng.normal.includes(item)) {
var index = searxngNormalRedirectsChecks.indexOf(item);
if (index !== -1) searxngNormalRedirectsChecks.splice(index, 1);
}
browser.storage.local.set({ searxngNormalRedirectsChecks })
for (const item of searxngTorRedirectsChecks) if (!redirects.searxng.tor.includes(item)) {
var index = searxngTorRedirectsChecks.indexOf(item);
if (index !== -1) searxngTorRedirectsChecks.splice(index, 1);
}
browser.storage.local.set({ searxngTorRedirectsChecks });
for (const item of searxngI2pRedirectsChecks) if (!redirects.searxng.i2p.includes(item)) {
var index = searxngI2pRedirectsChecks.indexOf(item);
if (index !== -1) searxngI2pRedirectsChecks.splice(index, 1);
}
browser.storage.local.set({ searxngI2pRedirectsChecks })
}
function setWhoogleRedirects(val) {
redirects.whoogle = val;
browser.storage.local.set({ searchRedirects: redirects })
console.log("whoogleRedirects:", val)
for (const item of whoogleNormalRedirectsChecks) if (!redirects.whoogle.normal.includes(item)) {
var index = whoogleNormalRedirectsChecks.indexOf(item);
if (index !== -1) whoogleNormalRedirectsChecks.splice(index, 1);
}
browser.storage.local.set({ whoogleNormalRedirectsChecks })
for (const item of whoogleTorRedirectsChecks) if (!redirects.whoogle.tor.includes(item)) {
var index = whoogleTorRedirectsChecks.indexOf(item);
if (index !== -1) whoogleTorRedirectsChecks.splice(index, 1);
}
browser.storage.local.set({ whoogleTorRedirectsChecks })
for (const item of whoogleI2pRedirectsChecks) if (!redirects.whoogle.i2p.includes(item)) {
var index = whoogleI2pRedirectsChecks.indexOf(item);
if (index !== -1) whoogleI2pRedirectsChecks.splice(index, 1);
}
browser.storage.local.set({ whoogleI2pRedirectsChecks })
} }
let let
searxNormalRedirectsChecks, searxNormalRedirectsChecks,
searxI2pRedirectsChecks,
searxTorRedirectsChecks,
searxngNormalRedirectsChecks, searxngNormalRedirectsChecks,
searxngI2pRedirectsChecks, whoogleNormalRedirectsChecks;
searxngTorRedirectsChecks,
whoogleNormalRedirectsChecks,
whoogleI2pRedirectsChecks,
whoogleTorRedirectsChecks;
function initSearxCookies(test, from) { function initSearxCookies(test, from) {
return new Promise(resolve => { return new Promise(resolve => {
@ -165,42 +113,45 @@ function initSearxCookies(test, from) {
} }
function setSearxCookies() { function setSearxCookies() {
browser.storage.local.get( return new Promise(resolve => {
[ browser.storage.local.get(
"disableSearch", [
"searchProtocol", "disableSearch",
"searchFrontend", "searchProtocol",
"searxNormalRedirectsChecks", "searchFrontend",
"searxNormalCustomRedirects", "searxNormalRedirectsChecks",
"searxTorRedirectsChecks", "searxNormalCustomRedirects",
"searxTorCustomRedirects", "searxTorRedirectsChecks",
], "searxTorCustomRedirects",
r => { ],
if (r.disableSearch || r.searchFrontend != 'searx', r.searchProtocol === undefined) return; r => {
let checkedInstances; if (r.disableSearch || r.searchFrontend != 'searx', r.searchProtocol === undefined) { resolve(); return; }
if (r.searchProtocol == 'normal') checkedInstances = [...r.searxNormalRedirectsChecks, ...r.searxNormalCustomRedirects] let checkedInstances;
else if (r.searchProtocol == 'tor') checkedInstances = [...r.searxTorRedirectsChecks, ...r.searxTorCustomRedirects] if (r.searchProtocol == 'normal') checkedInstances = [...r.searxNormalRedirectsChecks, ...r.searxNormalCustomRedirects]
for (const to of checkedInstances) { else if (r.searchProtocol == 'tor') checkedInstances = [...r.searxTorRedirectsChecks, ...r.searxTorCustomRedirects]
utils.getCookiesFromStorage('searx', to, 'advanced_search'); for (const to of checkedInstances) {
utils.getCookiesFromStorage('searx', to, 'autocomplete'); utils.getCookiesFromStorage('searx', to, 'advanced_search');
utils.getCookiesFromStorage('searx', to, 'categories'); utils.getCookiesFromStorage('searx', to, 'autocomplete');
utils.getCookiesFromStorage('searx', to, 'disabled_engines'); utils.getCookiesFromStorage('searx', to, 'categories');
utils.getCookiesFromStorage('searx', to, 'disabled_plugins'); utils.getCookiesFromStorage('searx', to, 'disabled_engines');
utils.getCookiesFromStorage('searx', to, 'doi_resolver'); utils.getCookiesFromStorage('searx', to, 'disabled_plugins');
utils.getCookiesFromStorage('searx', to, 'enabled_engines'); utils.getCookiesFromStorage('searx', to, 'doi_resolver');
utils.getCookiesFromStorage('searx', to, 'enabled_plugins'); utils.getCookiesFromStorage('searx', to, 'enabled_engines');
utils.getCookiesFromStorage('searx', to, 'image_proxy'); utils.getCookiesFromStorage('searx', to, 'enabled_plugins');
utils.getCookiesFromStorage('searx', to, 'language'); utils.getCookiesFromStorage('searx', to, 'image_proxy');
utils.getCookiesFromStorage('searx', to, 'locale'); utils.getCookiesFromStorage('searx', to, 'language');
utils.getCookiesFromStorage('searx', to, 'method'); utils.getCookiesFromStorage('searx', to, 'locale');
utils.getCookiesFromStorage('searx', to, 'oscar-style'); utils.getCookiesFromStorage('searx', to, 'method');
utils.getCookiesFromStorage('searx', to, 'results_on_new_tab'); utils.getCookiesFromStorage('searx', to, 'oscar-style');
utils.getCookiesFromStorage('searx', to, 'safesearch'); utils.getCookiesFromStorage('searx', to, 'results_on_new_tab');
utils.getCookiesFromStorage('searx', to, 'theme'); utils.getCookiesFromStorage('searx', to, 'safesearch');
utils.getCookiesFromStorage('searx', to, 'tokens'); utils.getCookiesFromStorage('searx', to, 'theme');
utils.getCookiesFromStorage('searx', to, 'tokens');
}
resolve();
} }
} )
) })
} }
function initSearxngCookies(test, from) { function initSearxngCookies(test, from) {
@ -260,44 +211,47 @@ function initSearxngCookies(test, from) {
} }
function setSearxngCookies() { function setSearxngCookies() {
browser.storage.local.get( return new Promise(resolve => {
[ browser.storage.local.get(
"searchProtocol", [
"disableSearch", "searchProtocol",
"searchFrontend", "disableSearch",
"searxngNormalRedirectsChecks", "searchFrontend",
"searxngNormalCustomRedirects", "searxngNormalRedirectsChecks",
"searxngTorRedirectsChecks", "searxngNormalCustomRedirects",
"searxngTorCustomRedirects", "searxngTorRedirectsChecks",
], "searxngTorCustomRedirects",
r => { ],
if (r.disableSearch || r.searchFrontend != 'searxng', r.searchProtocol === undefined) return; r => {
let checkedInstances; if (r.disableSearch || r.searchFrontend != 'searxng', r.searchProtocol === undefined) { resolve(); return; }
if (r.searchProtocol == 'normal') checkedInstances = [...r.searxngNormalRedirectsChecks, ...r.searxngNormalCustomRedirects] let checkedInstances;
else if (r.searchProtocol == 'tor') checkedInstances = [...r.searxngTorRedirectsChecks, ...r.searxngTorCustomRedirects] if (r.searchProtocol == 'normal') checkedInstances = [...r.searxngNormalRedirectsChecks, ...r.searxngNormalCustomRedirects]
for (const to of checkedInstances) { else if (r.searchProtocol == 'tor') checkedInstances = [...r.searxngTorRedirectsChecks, ...r.searxngTorCustomRedirects]
utils.getCookiesFromStorage('searxng', to, 'autocomplete'); for (const to of checkedInstances) {
utils.getCookiesFromStorage('searxng', to, 'categories'); utils.getCookiesFromStorage('searxng', to, 'autocomplete');
utils.getCookiesFromStorage('searxng', to, 'disabled_engines'); utils.getCookiesFromStorage('searxng', to, 'categories');
utils.getCookiesFromStorage('searxng', to, 'disabled_plugins'); utils.getCookiesFromStorage('searxng', to, 'disabled_engines');
utils.getCookiesFromStorage('searxng', to, 'doi_resolver'); utils.getCookiesFromStorage('searxng', to, 'disabled_plugins');
utils.getCookiesFromStorage('searxng', to, 'enabled_plugins'); utils.getCookiesFromStorage('searxng', to, 'doi_resolver');
utils.getCookiesFromStorage('searxng', to, 'enabled_engines'); utils.getCookiesFromStorage('searxng', to, 'enabled_plugins');
utils.getCookiesFromStorage('searxng', to, 'image_proxy'); utils.getCookiesFromStorage('searxng', to, 'enabled_engines');
utils.getCookiesFromStorage('searxng', to, 'infinite_scroll'); utils.getCookiesFromStorage('searxng', to, 'image_proxy');
utils.getCookiesFromStorage('searxng', to, 'language'); utils.getCookiesFromStorage('searxng', to, 'infinite_scroll');
utils.getCookiesFromStorage('searxng', to, 'locale'); utils.getCookiesFromStorage('searxng', to, 'language');
utils.getCookiesFromStorage('searxng', to, 'maintab'); utils.getCookiesFromStorage('searxng', to, 'locale');
utils.getCookiesFromStorage('searxng', to, 'method'); utils.getCookiesFromStorage('searxng', to, 'maintab');
utils.getCookiesFromStorage('searxng', to, 'query_in_title'); utils.getCookiesFromStorage('searxng', to, 'method');
utils.getCookiesFromStorage('searxng', to, 'results_on_new_tab'); utils.getCookiesFromStorage('searxng', to, 'query_in_title');
utils.getCookiesFromStorage('searxng', to, 'safesearch'); utils.getCookiesFromStorage('searxng', to, 'results_on_new_tab');
utils.getCookiesFromStorage('searxng', to, 'simple_style'); utils.getCookiesFromStorage('searxng', to, 'safesearch');
utils.getCookiesFromStorage('searxng', to, 'theme'); utils.getCookiesFromStorage('searxng', to, 'simple_style');
utils.getCookiesFromStorage('searxng', to, 'tokens'); utils.getCookiesFromStorage('searxng', to, 'theme');
utils.getCookiesFromStorage('searxng', to, 'tokens');
}
resolve();
} }
} )
) })
} }
function redirect(url) { function redirect(url) {
@ -381,7 +335,7 @@ function redirect(url) {
( (
url.hostname.includes('google') || url.hostname.includes('google') ||
url.hostname.includes('bing') || url.hostname.includes('bing') ||
url.hostname.includes('libredirect.invalid') url.hostname.includes('search.libredirect.invalid')
) && ) &&
url.searchParams.has('q') url.searchParams.has('q')
) searchQuery = `?q=${url.searchParams.get('q')}`; ) searchQuery = `?q=${url.searchParams.get('q')}`;
@ -485,71 +439,72 @@ async function switchInstance(url) {
}) })
} }
async function initDefaults() { function initDefaults() {
await fetch('/instances/data.json').then(response => response.text()).then(async data => { return new Promise(async resolve => {
let dataJson = JSON.parse(data); fetch('/instances/data.json').then(response => response.text()).then(async data => {
redirects.searx = dataJson.searx; let dataJson = JSON.parse(data);
redirects.searxng = dataJson.searxng; redirects.searx = dataJson.searx;
redirects.whoogle = dataJson.whoogle; redirects.searxng = dataJson.searxng;
redirects.whoogle = dataJson.whoogle;
browser.storage.local.get('cloudflareList', async r => { browser.storage.local.get('cloudflareList', async r => {
whoogleNormalRedirectsChecks = [...redirects.whoogle.normal]; whoogleNormalRedirectsChecks = [...redirects.whoogle.normal];
searxNormalRedirectsChecks = [...redirects.searx.normal]; searxNormalRedirectsChecks = [...redirects.searx.normal];
searxngNormalRedirectsChecks = [...redirects.searxng.normal]; searxngNormalRedirectsChecks = [...redirects.searxng.normal];
for (const instance of r.cloudflareList) { for (const instance of r.cloudflareList) {
let i; let i;
i = whoogleNormalRedirectsChecks.indexOf(instance); i = whoogleNormalRedirectsChecks.indexOf(instance);
if (i > -1) whoogleNormalRedirectsChecks.splice(i, 1); if (i > -1) whoogleNormalRedirectsChecks.splice(i, 1);
i = searxNormalRedirectsChecks.indexOf(instance); i = searxNormalRedirectsChecks.indexOf(instance);
if (i > -1) searxNormalRedirectsChecks.splice(i, 1); if (i > -1) searxNormalRedirectsChecks.splice(i, 1);
i = searxngNormalRedirectsChecks.indexOf(instance); i = searxngNormalRedirectsChecks.indexOf(instance);
if (i > -1) searxngNormalRedirectsChecks.splice(i, 1); if (i > -1) searxngNormalRedirectsChecks.splice(i, 1);
} }
await browser.storage.local.set({ await browser.storage.local.set({
disableSearch: false, disableSearch: false,
searchFrontend: 'searxng', searchFrontend: 'searxng',
searchRedirects: redirects, searchRedirects: redirects,
searxngCustomSettings: false, searxngCustomSettings: false,
searchProtocol: 'normal', searchProtocol: 'normal',
whoogleNormalRedirectsChecks: whoogleNormalRedirectsChecks, whoogleNormalRedirectsChecks: whoogleNormalRedirectsChecks,
whoogleNormalCustomRedirects: [], whoogleNormalCustomRedirects: [],
whoogleTorRedirectsChecks: [...redirects.whoogle.tor], whoogleTorRedirectsChecks: [...redirects.whoogle.tor],
whoogleTorCustomRedirects: [], whoogleTorCustomRedirects: [],
whoogleI2pRedirectsChecks: [...redirects.whoogle.i2p], whoogleI2pRedirectsChecks: [...redirects.whoogle.i2p],
whoogleI2pCustomRedirects: [], whoogleI2pCustomRedirects: [],
searxNormalRedirectsChecks: searxNormalRedirectsChecks, searxNormalRedirectsChecks: searxNormalRedirectsChecks,
searxNormalCustomRedirects: [], searxNormalCustomRedirects: [],
searxTorRedirectsChecks: [...redirects.searx.tor], searxTorRedirectsChecks: [...redirects.searx.tor],
searxTorCustomRedirects: [], searxTorCustomRedirects: [],
searxI2pRedirectsChecks: [...redirects.searx.i2p], searxI2pRedirectsChecks: [...redirects.searx.i2p],
searxI2pCustomRedirects: [], searxI2pCustomRedirects: [],
searxngNormalRedirectsChecks: searxngNormalRedirectsChecks, searxngNormalRedirectsChecks: searxngNormalRedirectsChecks,
searxngNormalCustomRedirects: [], searxngNormalCustomRedirects: [],
searxngTorRedirectsChecks: [...redirects.searxng.tor], searxngTorRedirectsChecks: [...redirects.searxng.tor],
searxngTorCustomRedirects: [], searxngTorCustomRedirects: [],
searxngI2pRedirectsChecks: [...redirects.searxng.i2p], searxngI2pRedirectsChecks: [...redirects.searxng.i2p],
searxngI2pCustomRedirects: [], searxngI2pCustomRedirects: [],
})
resolve();
}) })
}) })
}) })
} }
export default { export default {
setSearxRedirects, setRedirects,
setSearxngRedirects,
setWhoogleRedirects,
initSearxCookies, initSearxCookies,
setSearxCookies, setSearxCookies,

View File

@ -3,7 +3,7 @@ window.browser = window.browser || window.chrome;
import utils from './utils.js' import utils from './utils.js'
const targets = [ const targets = [
/^https?:\/{2}send.invalid\/$/, /^https?:\/{2}send\.libredirect\.invalid\/$/,
/^ https ?: \/\/send\.firefox\.com\/$/, /^ https ?: \/\/send\.firefox\.com\/$/,
/^https?:\/{2}sendfiles\.online\/$/ /^https?:\/{2}sendfiles\.online\/$/
]; ];
@ -15,33 +15,23 @@ let redirects = {
} }
} }
function setRedirects(val) { function setRedirects(val) {
redirects.send = val; browser.storage.local.get('cloudflareList', r => {
browser.storage.local.set({ sendTargetsRedirects: redirects }) redirects.send = val;
console.log("sendTargetsRedirects: ", val) sendNormalRedirectsChecks = [...redirects.send.normal];
for (const item of sendNormalRedirectsChecks) for (const instance of r.cloudflareList) {
if (!redirects.send.normal.includes(item)) { const a = sendNormalRedirectsChecks.indexOf(instance);
var index = sendNormalRedirectsChecks.indexOf(item); if (a > -1) sendNormalRedirectsChecks.splice(a, 1);
if (index !== -1) sendNormalRedirectsChecks.splice(index, 1);
} }
browser.storage.local.set({ sendNormalRedirectsChecks }) browser.storage.local.set({
sendTargetsRedirects: redirects,
for (const item of sendTorRedirectsChecks) sendNormalRedirectsChecks,
if (!redirects.send.normal.includes(item)) { })
var index = sendTorRedirectsChecks.indexOf(item); })
if (index !== -1) sendTorRedirectsChecks.splice(index, 1);
}
browser.storage.local.set({ sendTorRedirectsChecks })
} }
let sendNormalRedirectsChecks; let sendNormalRedirectsChecks;
let sendTorRedirectsChecks;
let sendNormalCustomRedirects = [];
let sendTorCustomRedirects = [];
let disable; // disableSendTarget function switchInstance(url) {
let protocol; // sendTargetsProtocol
async function switchInstance(url) {
return new Promise(resolve => { return new Promise(resolve => {
browser.storage.local.get( browser.storage.local.get(
[ [
@ -82,85 +72,80 @@ async function switchInstance(url) {
} }
function redirect(url, type, initiator) { function redirect(url, type, initiator) {
if (disable) return null; return new Promise(resolve => {
if (type != "main_frame") return null; browser.storage.local.get(
if (initiator && ( [
[...redirects.send.normal, "disableSendTarget",
...sendNormalCustomRedirects "sendTargetsRedirects",
].includes(initiator.origin) ||
targets.includes(initiator.host)
)) return null;
if (!targets.some(rx => rx.test(url.href))) return null;
let instancesList; "sendNormalRedirectsChecks",
if (protocol == 'normal') instancesList = [...sendNormalRedirectsChecks, ...sendNormalCustomRedirects]; "sendNormalCustomRedirects",
if (protocol == 'tor') instancesList = [...sendTorRedirectsChecks, ...sendTorCustomRedirects];
if (instancesList.length === 0) return null;
let randomInstance = utils.getRandomInstance(instancesList);
return randomInstance; "sendTorRedirectsChecks",
"sendTorCustomRedirects",
"sendTargetsProtocol"
],
r => {
if (r.disableSendTarget) { resolve(); return; }
if (type != "main_frame") { resolve(); return; }
if (
initiator && (
[
...r.sendTargetsRedirects.send.normal,
...r.sendTargetsRedirects.send.tor,
...r.sendNormalCustomRedirects,
...r.sendTorRedirectsChecks
].includes(initiator.origin) ||
targets.includes(initiator.host)
)
) { resolve(); return; }
if (!targets.some(rx => rx.test(url.href))) { resolve(); return; }
let instancesList;
if (r.sendTargetsProtocol == 'normal') instancesList = [...r.sendNormalRedirectsChecks, ...r.sendNormalCustomRedirects];
if (r.sendTargetsProtocol == 'tor') instancesList = [...r.sendTorRedirectsChecks, ...r.sendTorCustomRedirects];
if (instancesList.length === 0) { resolve(); return; }
let randomInstance = utils.getRandomInstance(instancesList);
resolve(randomInstance);
}
)
})
} }
async function initDefaults() { function initDefaults() {
fetch('/instances/data.json').then(response => response.text()).then(async data => { return new Promise(resolve => {
let dataJson = JSON.parse(data); fetch('/instances/data.json').then(response => response.text()).then(async data => {
redirects.send = dataJson.send; let dataJson = JSON.parse(data);
browser.storage.local.get('cloudflareList', async r => { redirects.send = dataJson.send;
sendNormalRedirectsChecks = [...redirects.send.normal]; browser.storage.local.get('cloudflareList', async r => {
for (const instance of r.cloudflareList) { sendNormalRedirectsChecks = [...redirects.send.normal];
let i = sendNormalRedirectsChecks.indexOf(instance); for (const instance of r.cloudflareList) {
if (i > -1) sendNormalRedirectsChecks.splice(i, 1); let i = sendNormalRedirectsChecks.indexOf(instance);
} if (i > -1) sendNormalRedirectsChecks.splice(i, 1);
await browser.storage.local.set({ }
disableSendTarget: false, await browser.storage.local.set({
sendTargetsRedirects: redirects, disableSendTarget: false,
sendTargetsRedirects: redirects,
sendNormalRedirectsChecks: sendNormalRedirectsChecks, sendNormalRedirectsChecks: sendNormalRedirectsChecks,
sendNormalCustomRedirects: [], sendNormalCustomRedirects: [],
sendTorRedirectsChecks: [...redirects.send.tor], sendTorRedirectsChecks: [...redirects.send.tor],
sendTorCustomRedirects: [], sendTorCustomRedirects: [],
sendTargetsProtocol: "normal", sendTargetsProtocol: "normal",
})
resolve();
}) })
}) })
}) })
} }
async function init() {
browser.storage.local.get(
[
"disableSendTarget",
"sendTargetsRedirects",
"sendNormalRedirectsChecks",
"sendNormalCustomRedirects",
"sendTorRedirectsChecks",
"sendTorCustomRedirects",
"sendTargetsProtocol"
],
r => {
disable = r.disableSendTarget;
protocol = r.sendTargetsProtocol;
redirects = r.sendTargetsRedirects;
sendNormalRedirectsChecks = r.sendNormalRedirectsChecks;
sendNormalCustomRedirects = r.sendNormalCustomRedirects;
sendTorRedirectsChecks = r.sendTorRedirectsChecks;
sendTorCustomRedirects = r.sendTorCustomRedirects;
}
)
}
export default { export default {
setRedirects, setRedirects,
redirect, redirect,
switchInstance, switchInstance,
initDefaults, initDefaults,
init,
}; };

View File

@ -13,22 +13,18 @@ let redirects = {
} }
} }
function setRedirects(val) { function setRedirects(val) {
redirects.proxiTok = val; browser.storage.local.get('cloudflareList', r => {
browser.storage.local.set({ tiktokRedirects: redirects }) redirects.proxiTok = val;
console.log("tiktokRedirects: ", val) proxiTokNormalRedirectsChecks = [...redirects.proxiTok.normal];
for (const item of proxiTokNormalRedirectsChecks) for (const instance of r.cloudflareList) {
if (!redirects.proxiTok.normal.includes(item)) { const a = proxiTokNormalRedirectsChecks.indexOf(instance);
var index = proxiTokNormalRedirectsChecks.indexOf(item); if (a > -1) proxiTokNormalRedirectsChecks.splice(a, 1);
if (index !== -1) proxiTokNormalRedirectsChecks.splice(index, 1);
} }
browser.storage.local.set({ proxiTokNormalRedirectsChecks }) browser.storage.local.set({
tiktokRedirects: redirects,
for (const item of proxiTokTorRedirectsChecks) proxiTokNormalRedirectsChecks
if (!redirects.proxiTok.normal.includes(item)) { })
var index = proxiTokTorRedirectsChecks.indexOf(item); })
if (index !== -1) proxiTokTorRedirectsChecks.splice(index, 1);
}
browser.storage.local.set({ proxiTokTorRedirectsChecks })
} }
let proxiTokNormalRedirectsChecks; let proxiTokNormalRedirectsChecks;
@ -57,7 +53,7 @@ function initProxiTokCookies(test, from) {
...r.proxiTokTorRedirectsChecks, ...r.proxiTokTorRedirectsChecks,
...r.proxiTokTorCustomRedirects, ...r.proxiTokTorCustomRedirects,
].includes(protocolHost)) resolve(); ].includes(protocolHost)) resolve();
if (!test) { if (!test) {
let checkedInstances; let checkedInstances;
if (r.tiktokProtocol == 'normal') checkedInstances = [...r.proxiTokNormalRedirectsChecks, ...r.proxiTokNormalCustomRedirects] if (r.tiktokProtocol == 'normal') checkedInstances = [...r.proxiTokNormalRedirectsChecks, ...r.proxiTokNormalCustomRedirects]
@ -74,26 +70,29 @@ function initProxiTokCookies(test, from) {
} }
function setProxiTokCookies() { function setProxiTokCookies() {
browser.storage.local.get( return new Promise(resolve => {
[ browser.storage.local.get(
"tiktokProtocol", [
"disableTiktok", "tiktokProtocol",
"proxiTokNormalRedirectsChecks", "disableTiktok",
"proxiTokNormalCustomRedirects", "proxiTokNormalRedirectsChecks",
"proxiTokTorRedirectsChecks", "proxiTokNormalCustomRedirects",
"proxiTokTorCustomRedirects", "proxiTokTorRedirectsChecks",
], "proxiTokTorCustomRedirects",
r => { ],
if (r.disableTiktok || r.tiktokProtocol === undefined) return; r => {
let checkedInstances; if (r.disableTiktok || r.tiktokProtocol === undefined) { resolve(); return; }
if (r.tiktokProtocol == 'normal') checkedInstances = [...r.proxiTokNormalRedirectsChecks, ...r.proxiTokNormalCustomRedirects] let checkedInstances;
else if (r.tiktokProtocol == 'tor') checkedInstances = [...r.proxiTokTorRedirectsChecks, ...r.proxiTokTorCustomRedirects] if (r.tiktokProtocol == 'normal') checkedInstances = [...r.proxiTokNormalRedirectsChecks, ...r.proxiTokNormalCustomRedirects]
for (const to of checkedInstances) { else if (r.tiktokProtocol == 'tor') checkedInstances = [...r.proxiTokTorRedirectsChecks, ...r.proxiTokTorCustomRedirects]
utils.getCookiesFromStorage('proxitok', to, 'theme'); for (const to of checkedInstances) {
utils.getCookiesFromStorage('proxitok', to, 'api-legacy'); utils.getCookiesFromStorage('proxitok', to, 'theme');
utils.getCookiesFromStorage('proxitok', to, 'api-legacy');
}
resolve();
} }
} )
) })
} }
function redirect(url, type, initiator) { function redirect(url, type, initiator) {
@ -163,7 +162,7 @@ async function reverse(url) {
}) })
} }
async function initDefaults() { function initDefaults() {
return new Promise(async resolve => { return new Promise(async resolve => {
fetch('/instances/data.json').then(response => response.text()).then(async data => { fetch('/instances/data.json').then(response => response.text()).then(async data => {
let dataJson = JSON.parse(data); let dataJson = JSON.parse(data);

View File

@ -22,12 +22,11 @@ let
lingvaNormalRedirectsChecks; lingvaNormalRedirectsChecks;
function setRedirects(val) { function setRedirects(val) {
browser.storage.local.get('cloudflareList', async r => { browser.storage.local.get('cloudflareList', r => {
redirects = val; redirects = val;
simplyTranslateNormalRedirectsChecks = [...redirects.simplyTranslate.normal]; simplyTranslateNormalRedirectsChecks = [...redirects.simplyTranslate.normal];
lingvaNormalRedirectsChecks = [...redirects.lingva.normal] lingvaNormalRedirectsChecks = [...redirects.lingva.normal]
for (const instance of r.cloudflareList) { for (const instance of r.cloudflareList) {
let i;
const a = simplyTranslateNormalRedirectsChecks.indexOf(instance); const a = simplyTranslateNormalRedirectsChecks.indexOf(instance);
if (a > -1) simplyTranslateNormalRedirectsChecks.splice(a, 1); if (a > -1) simplyTranslateNormalRedirectsChecks.splice(a, 1);
@ -149,29 +148,32 @@ function initSimplyTranslateCookies(test, from) {
} }
function setSimplyTranslateCookies() { function setSimplyTranslateCookies() {
browser.storage.local.get( return new Promise(resolve => {
[ browser.storage.local.get(
"translateProtocol", [
"translateDisable", "translateProtocol",
"translateFrontend", "translateDisable",
"simplyTranslateNormalRedirectsChecks", "translateFrontend",
"simplyTranslateNormalCustomRedirects", "simplyTranslateNormalRedirectsChecks",
"simplyTranslateTorRedirectsChecks", "simplyTranslateNormalCustomRedirects",
"simplyTranslateTorCustomRedirects", "simplyTranslateTorRedirectsChecks",
], "simplyTranslateTorCustomRedirects",
r => { ],
if (r.translateDisable || r.translateFrontend != 'simplyTranslate') return; r => {
let checkedInstances; if (r.translateDisable || r.translateFrontend != 'simplyTranslate') { resolve(); return; }
if (r.translateProtocol == 'normal') checkedInstances = [...r.simplyTranslateNormalRedirectsChecks, ...r.simplyTranslateNormalCustomRedirects] let checkedInstances;
else if (r.translateProtocol == 'tor') checkedInstances = [...r.simplyTranslateTorRedirectsChecks, ...r.simplyTranslateTorCustomRedirects] if (r.translateProtocol == 'normal') checkedInstances = [...r.simplyTranslateNormalRedirectsChecks, ...r.simplyTranslateNormalCustomRedirects]
for (const to of checkedInstances) { else if (r.translateProtocol == 'tor') checkedInstances = [...r.simplyTranslateTorRedirectsChecks, ...r.simplyTranslateTorCustomRedirects]
utils.getCookiesFromStorage('simplyTranslate', to, 'from_lang'); for (const to of checkedInstances) {
utils.getCookiesFromStorage('simplyTranslate', to, 'to_lang'); utils.getCookiesFromStorage('simplyTranslate', to, 'from_lang');
utils.getCookiesFromStorage('simplyTranslate', to, 'tts_enabled'); utils.getCookiesFromStorage('simplyTranslate', to, 'to_lang');
utils.getCookiesFromStorage('simplyTranslate', to, 'use_text_fields'); utils.getCookiesFromStorage('simplyTranslate', to, 'tts_enabled');
utils.getCookiesFromStorage('simplyTranslate', to, 'use_text_fields');
}
resolve();
} }
} )
) })
} }
function redirect(url) { function redirect(url) {
@ -285,39 +287,41 @@ function switchInstance(url) {
} }
function initDefaults() { function initDefaults() {
fetch('/instances/data.json').then(response => response.text()).then(data => { return new Promise(async resolve => {
let dataJson = JSON.parse(data); fetch('/instances/data.json').then(response => response.text()).then(data => {
redirects.simplyTranslate = dataJson.simplyTranslate; let dataJson = JSON.parse(data);
redirects.lingva = dataJson.lingva; redirects.simplyTranslate = dataJson.simplyTranslate;
browser.storage.local.get( redirects.lingva = dataJson.lingva;
'cloudflareList', browser.storage.local.get('cloudflareList',
r => { async r => {
simplyTranslateNormalRedirectsChecks = [...redirects.simplyTranslate.normal]; simplyTranslateNormalRedirectsChecks = [...redirects.simplyTranslate.normal];
lingvaNormalRedirectsChecks = [...redirects.lingva.normal] lingvaNormalRedirectsChecks = [...redirects.lingva.normal]
for (const instance of r.cloudflareList) { for (const instance of r.cloudflareList) {
const a = simplyTranslateNormalRedirectsChecks.indexOf(instance); const a = simplyTranslateNormalRedirectsChecks.indexOf(instance);
if (a > -1) simplyTranslateNormalRedirectsChecks.splice(a, 1); if (a > -1) simplyTranslateNormalRedirectsChecks.splice(a, 1);
const b = lingvaNormalRedirectsChecks.indexOf(instance); const b = lingvaNormalRedirectsChecks.indexOf(instance);
if (b > -1) lingvaNormalRedirectsChecks.splice(b, 1); if (b > -1) lingvaNormalRedirectsChecks.splice(b, 1);
} }
browser.storage.local.set({ await browser.storage.local.set({
translateDisable: false, translateDisable: false,
translateFrontend: "simplyTranslate", translateFrontend: "simplyTranslate",
translateProtocol: 'normal', translateProtocol: 'normal',
translateRedirects: redirects, translateRedirects: redirects,
simplyTranslateNormalRedirectsChecks: simplyTranslateNormalRedirectsChecks, simplyTranslateNormalRedirectsChecks: simplyTranslateNormalRedirectsChecks,
simplyTranslateNormalCustomRedirects: [], simplyTranslateNormalCustomRedirects: [],
simplyTranslateTorRedirectsChecks: [...redirects.simplyTranslate.tor], simplyTranslateTorRedirectsChecks: [...redirects.simplyTranslate.tor],
simplyTranslateTorCustomRedirects: [], simplyTranslateTorCustomRedirects: [],
lingvaNormalRedirectsChecks: lingvaNormalRedirectsChecks, lingvaNormalRedirectsChecks: lingvaNormalRedirectsChecks,
lingvaNormalCustomRedirects: [], lingvaNormalCustomRedirects: [],
lingvaTorRedirectsChecks: [...redirects.lingva.tor], lingvaTorRedirectsChecks: [...redirects.lingva.tor],
lingvaTorCustomRedirects: [], lingvaTorCustomRedirects: [],
})
resolve();
}) })
}) })
}) })
} }

View File

@ -56,10 +56,11 @@ async function redirect(url, initiator) {
if ( if (
initiator && initiator &&
[...r.twitterRedirects.nitter.normal, [
...r.twitterRedirects.nitter.tor, ...r.twitterRedirects.nitter.normal,
...r.nitterTorCustomRedirects, ...r.twitterRedirects.nitter.tor,
...r.nitterNormalCustomRedirects ...r.nitterTorCustomRedirects,
...r.nitterNormalCustomRedirects
].includes(initiator.origin) ].includes(initiator.origin)
) { resolve('BYPASSTAB'); return; } ) { resolve('BYPASSTAB'); return; }
@ -228,61 +229,67 @@ function initNitterCookies(test, from) {
} }
function setNitterCookies() { function setNitterCookies() {
browser.storage.local.get( return new Promise(resolve => {
[ browser.storage.local.get(
"twitterProtocol", [
"disableTwitter", "twitterProtocol",
"youtubeFrontend", "disableTwitter",
"nitterNormalRedirectsChecks", "youtubeFrontend",
"nitterNormalCustomRedirects", "nitterNormalRedirectsChecks",
"nitterTorRedirectsChecks", "nitterNormalCustomRedirects",
"nitterTorCustomRedirects", "nitterTorRedirectsChecks",
], "nitterTorCustomRedirects",
r => { ],
if (r.disableYoutube || r.youtubeFrontend != 'nitter' || r.twitterProtocol === undefined) return; r => {
let checkedInstances; if (r.disableYoutube || r.youtubeFrontend != 'nitter' || r.twitterProtocol === undefined) { resolve(); return; }
if (r.youtubeProtocol == 'normal') checkedInstances = [...r.nitterNormalRedirectsChecks, ...r.nitterNormalCustomRedirects] let checkedInstances;
else if (r.youtubeProtocol == 'tor') checkedInstances = [...r.nitterTorRedirectsChecks, ...r.nitterTorCustomRedirects] if (r.youtubeProtocol == 'normal') checkedInstances = [...r.nitterNormalRedirectsChecks, ...r.nitterNormalCustomRedirects]
for (const to of checkedInstances) { else if (r.youtubeProtocol == 'tor') checkedInstances = [...r.nitterTorRedirectsChecks, ...r.nitterTorCustomRedirects]
utils.getCookiesFromStorage('nitter', to, 'theme'); for (const to of checkedInstances) {
utils.getCookiesFromStorage('nitter', to, 'infiniteScroll'); utils.getCookiesFromStorage('nitter', to, 'theme');
utils.getCookiesFromStorage('nitter', to, 'stickyProfile'); utils.getCookiesFromStorage('nitter', to, 'infiniteScroll');
utils.getCookiesFromStorage('nitter', to, 'bidiSupport'); utils.getCookiesFromStorage('nitter', to, 'stickyProfile');
utils.getCookiesFromStorage('nitter', to, 'hideTweetStats'); utils.getCookiesFromStorage('nitter', to, 'bidiSupport');
utils.getCookiesFromStorage('nitter', to, 'hideBanner'); utils.getCookiesFromStorage('nitter', to, 'hideTweetStats');
utils.getCookiesFromStorage('nitter', to, 'hidePins'); utils.getCookiesFromStorage('nitter', to, 'hideBanner');
utils.getCookiesFromStorage('nitter', to, 'hideReplies'); utils.getCookiesFromStorage('nitter', to, 'hidePins');
utils.getCookiesFromStorage('nitter', to, 'squareAvatars'); utils.getCookiesFromStorage('nitter', to, 'hideReplies');
utils.getCookiesFromStorage('nitter', to, 'mp4Playback'); utils.getCookiesFromStorage('nitter', to, 'squareAvatars');
utils.getCookiesFromStorage('nitter', to, 'hlsPlayback'); utils.getCookiesFromStorage('nitter', to, 'mp4Playback');
utils.getCookiesFromStorage('nitter', to, 'proxyVideos'); utils.getCookiesFromStorage('nitter', to, 'hlsPlayback');
utils.getCookiesFromStorage('nitter', to, 'muteVideos'); utils.getCookiesFromStorage('nitter', to, 'proxyVideos');
utils.getCookiesFromStorage('nitter', to, 'autoplayGifs'); utils.getCookiesFromStorage('nitter', to, 'muteVideos');
utils.getCookiesFromStorage('nitter', to, 'autoplayGifs');
}
resolve();
} }
} )
) })
} }
function initDefaults() { function initDefaults() {
fetch('/instances/data.json').then(response => response.text()).then(data => { return new Promise(resolve => {
let dataJson = JSON.parse(data); fetch('/instances/data.json').then(response => response.text()).then(data => {
redirects.nitter = dataJson.nitter; let dataJson = JSON.parse(data);
browser.storage.local.get('cloudflareList', r => { redirects.nitter = dataJson.nitter;
nitterNormalRedirectsChecks = [...redirects.nitter.normal]; browser.storage.local.get('cloudflareList', async r => {
for (const instance of r.cloudflareList) { nitterNormalRedirectsChecks = [...redirects.nitter.normal];
let i = nitterNormalRedirectsChecks.indexOf(instance); for (const instance of r.cloudflareList) {
if (i > -1) nitterNormalRedirectsChecks.splice(i, 1); let i = nitterNormalRedirectsChecks.indexOf(instance);
} if (i > -1) nitterNormalRedirectsChecks.splice(i, 1);
browser.storage.local.set({ }
disableTwitter: false, await browser.storage.local.set({
twitterRedirects: redirects, disableTwitter: false,
twitterProtocol: "normal", twitterRedirects: redirects,
twitterProtocol: "normal",
nitterNormalRedirectsChecks, nitterNormalRedirectsChecks,
nitterNormalCustomRedirects: [], nitterNormalCustomRedirects: [],
nitterTorRedirectsChecks: [...redirects.nitter.tor], nitterTorRedirectsChecks: [...redirects.nitter.tor],
nitterTorCustomRedirects: [], nitterTorCustomRedirects: [],
})
resolve();
}) })
}) })
}) })

View File

@ -28,60 +28,31 @@ async function initCloudflareList() {
}); });
} }
async function wholeInit() { function updateInstances() {
await sendTargetsHelper.init(); return new Promise(async resolve => {
await tiktokHelper.init(); let http = new XMLHttpRequest();
await initCloudflareList(); http.open('GET', 'https://raw.githubusercontent.com/libredirect/libredirect/master/src/instances/data.json', false);
} http.send(null);
if (http.status === 200) {
await initCloudflareList();
const instances = JSON.parse(http.responseText);
async function updateInstances() { youtubeHelper.setRedirects({ 'invidious': instances.invidious, 'piped': instances.piped, })
let http = new XMLHttpRequest(); twitterHelper.setRedirects(instances.nitter);
http.open('GET', 'https://raw.githubusercontent.com/libredirect/libredirect/master/src/instances/data.json', false); instagramHelper.setRedirects(instances.bibliogram);
http.send(null); redditHelper.setRedirects({ 'libreddit': instances.libreddit, 'teddit': instances.teddit });
translateHelper.setRedirects({ "simplyTranslate": instances.simplyTranslate, "lingva": instances.lingva });
searchHelper.setRedirects({ 'searx': instances.searx, 'searxng': instances.searxng, 'whoogle': instances.whoogle });
wikipediaHelper.setRedirects(instances.wikiless);
mediumHelper.setRedirects(instances.scribe);
sendTargetsHelper.setRedirects(instances.send);
tiktokHelper.setRedirects(instances.proxiTok);
if (http.status === 200) { console.info("Successfully updated Instances");
await wholeInit(); resolve(true); return;
const instances = JSON.parse(http.responseText); }
resolve()
browser.storage.local.get( })
[
'youtubeRedirects'
],
r =>
brwoser.storage.local.set({
youtubeRedirects: {
'invidious': instances.invidious,
'piped': r.youtubeRedirects.piped,
'pipedMaterial': r.youtubeRedirects.pipedMaterial
},
})
)
twitterHelper.setRedirects(instances.nitter);
instagramHelper.setRedirects(instances.bibliogram);
redditHelper.setTedditRedirects(instances.teddit);
redditHelper.setLibredditRedirects(instances.libreddit);
translateHelper.setRedirects({ "simplyTranslate": instances.simplyTranslate, "lingva": instances.lingva });
searchHelper.setSearxRedirects(instances.searx);
searchHelper.setSearxngRedirects(instances.searxng);
searchHelper.setWhoogleRedirects(instances.whoogle);
wikipediaHelper.setRedirects(instances.wikiless);
mediumHelper.setRedirects(instances.scribe);
sendTargetsHelper.setRedirects(instances.send);
tiktokHelper.setRedirects(instances.proxiTok);
console.info("Successfully updated Instances");
return true;
}
return false;
} }
function protocolHost(url) { function protocolHost(url) {
@ -436,8 +407,6 @@ function switchInstance(test) {
if (!newUrl) newUrl = await imgurHelper.switchInstance(url); if (!newUrl) newUrl = await imgurHelper.switchInstance(url);
if (!newUrl) newUrl = await wikipediaHelper.switchInstance(url); if (!newUrl) newUrl = await wikipediaHelper.switchInstance(url);
console.log('newUrl', newUrl);
console.log('test');
if (newUrl) { if (newUrl) {
if (!test) if (!test)
browser.tabs.update({ url: newUrl }); browser.tabs.update({ url: newUrl });
@ -446,7 +415,6 @@ function switchInstance(test) {
} }
}) })
}) })
return false;
} }
function latency(name, frontend, document, location, splitNames) { function latency(name, frontend, document, location, splitNames) {

View File

@ -12,35 +12,21 @@ let redirects = {
} }
}; };
function setRedirects(val) { function setRedirects(val) {
redirects.wikiless = val; browser.storage.local.get('cloudflareList', r => {
browser.storage.local.set({ wikipediaRedirects: redirects }) redirects.wikiless = val;
console.log("wikipediaRedirects: ", val) wikilessNormalRedirectsChecks = [...redirects.wikiless.normal];
for (const item of wikilessNormalRedirectsChecks) for (const instance of r.cloudflareList) {
if (!redirects.wikiless.normal.includes(item)) { const a = wikilessNormalRedirectsChecks.indexOf(instance);
var index = wikilessNormalRedirectsChecks.indexOf(item); if (a > -1) wikilessNormalRedirectsChecks.splice(a, 1);
if (index !== -1) wikilessNormalRedirectsChecks.splice(index, 1);
} }
browser.storage.local.set({ wikilessNormalRedirectsChecks }) browser.storage.local.set({
wikipediaRedirects: redirects,
for (const item of wikilessTorRedirectsChecks) wikilessNormalRedirectsChecks
if (!redirects.wikiless.tor.includes(item)) { })
var index = wikilessTorRedirectsChecks.indexOf(item); })
if (index !== -1) wikilessTorRedirectsChecks.splice(index, 1);
}
browser.storage.local.set({ wikilessTorRedirectsChecks })
for (const item of wikilessI2pRedirectsChecks)
if (!redirects.wikiless.i2p.includes(item)) {
var index = wikilessI2pRedirectsChecks.indexOf(item);
if (index !== -1) wikilessI2pRedirectsChecks.splice(index, 1);
}
browser.storage.local.set({ wikilessI2pRedirectsChecks })
} }
let let wikilessNormalRedirectsChecks;
wikilessNormalRedirectsChecks,
wikilessTorRedirectsChecks,
wikilessI2pRedirectsChecks;
function initWikilessCookies(test, from) { function initWikilessCookies(test, from) {
return new Promise(resolve => { return new Promise(resolve => {
@ -83,26 +69,29 @@ function initWikilessCookies(test, from) {
} }
function setWikilessCookies() { function setWikilessCookies() {
browser.storage.local.get( return new Promise(resolve => {
[ browser.storage.local.get(
"disableWikipedia", [
"wikipediaProtocol", "disableWikipedia",
"wikilessNormalRedirectsChecks", "wikipediaProtocol",
"wikilessNormalCustomRedirects", "wikilessNormalRedirectsChecks",
"wikilessTorRedirectsChecks", "wikilessNormalCustomRedirects",
"wikilessTorCustomRedirects", "wikilessTorRedirectsChecks",
], "wikilessTorCustomRedirects",
r => { ],
if (r.disableWikipedia || r.wikipediaProtocol === undefined) return; r => {
let checkedInstances; if (r.disableWikipedia || r.wikipediaProtocol === undefined) { resolve(); return; }
if (r.wikipediaProtocol == 'normal') checkedInstances = [...r.wikilessNormalRedirectsChecks, ...r.wikilessNormalCustomRedirects] let checkedInstances;
else if (r.wikipediaProtocol == 'tor') checkedInstances = [...r.wikilessTorRedirectsChecks, ...r.wikilessTorCustomRedirects] if (r.wikipediaProtocol == 'normal') checkedInstances = [...r.wikilessNormalRedirectsChecks, ...r.wikilessNormalCustomRedirects]
for (const to of checkedInstances) { else if (r.wikipediaProtocol == 'tor') checkedInstances = [...r.wikilessTorRedirectsChecks, ...r.wikilessTorCustomRedirects]
utils.getCookiesFromStorage('wikiless', to, 'theme'); for (const to of checkedInstances) {
utils.getCookiesFromStorage('wikiless', to, 'default_lang'); utils.getCookiesFromStorage('wikiless', to, 'theme');
utils.getCookiesFromStorage('wikiless', to, 'default_lang');
}
resolve();
} }
} )
) })
} }
function redirect(url) { function redirect(url) {
@ -206,26 +195,29 @@ function switchInstance(url) {
}) })
} }
async function initDefaults() { function initDefaults() {
fetch('/instances/data.json').then(response => response.text()).then(async data => { return new Promise(resolve => {
let dataJson = JSON.parse(data); fetch('/instances/data.json').then(response => response.text()).then(async data => {
redirects.wikiless = dataJson.wikiless; let dataJson = JSON.parse(data);
browser.storage.local.get('cloudflareList', async r => { redirects.wikiless = dataJson.wikiless;
wikilessNormalRedirectsChecks = [...redirects.wikiless.normal]; browser.storage.local.get('cloudflareList', async r => {
for (const instance of r.cloudflareList) { wikilessNormalRedirectsChecks = [...redirects.wikiless.normal];
let i = wikilessNormalRedirectsChecks.indexOf(instance); for (const instance of r.cloudflareList) {
if (i > -1) wikilessNormalRedirectsChecks.splice(i, 1); let i = wikilessNormalRedirectsChecks.indexOf(instance);
} if (i > -1) wikilessNormalRedirectsChecks.splice(i, 1);
await browser.storage.local.set({ }
disableWikipedia: true, await browser.storage.local.set({
wikipediaRedirects: redirects, disableWikipedia: true,
wikipediaProtocol: "normal", wikipediaRedirects: redirects,
wikilessNormalRedirectsChecks: wikilessNormalRedirectsChecks, wikipediaProtocol: "normal",
wikilessTorRedirectsChecks: [...redirects.wikiless.tor], wikilessNormalRedirectsChecks: wikilessNormalRedirectsChecks,
wikilessI2pRedirectsChecks: [...redirects.wikiless.i2p], wikilessTorRedirectsChecks: [...redirects.wikiless.tor],
wikilessNormalCustomRedirects: [], wikilessI2pRedirectsChecks: [...redirects.wikiless.i2p],
wikilessTorCustomRedirects: [], wikilessNormalCustomRedirects: [],
wikilessI2pCustomRedirects: [], wikilessTorCustomRedirects: [],
wikilessI2pCustomRedirects: [],
})
resolve();
}) })
}) })
}) })

View File

@ -396,25 +396,28 @@ function initInvidiousCookies(test, from) {
} }
function setInvidiousCookies() { function setInvidiousCookies() {
browser.storage.local.get( return new Promise(resolve => {
[ browser.storage.local.get(
"disableYoutube", [
"youtubeProtocol", "disableYoutube",
"youtubeFrontend", "youtubeProtocol",
"invidiousNormalRedirectsChecks", "youtubeFrontend",
"invidiousNormalCustomRedirects", "invidiousNormalRedirectsChecks",
"invidiousTorRedirectsChecks", "invidiousNormalCustomRedirects",
"invidiousTorCustomRedirects", "invidiousTorRedirectsChecks",
], "invidiousTorCustomRedirects",
r => { ],
if (r.disableYoutube || r.youtubeFrontend != 'invidious' || r.youtubeProtocol === undefined) return; r => {
let checkedInstances; if (r.disableYoutube || r.youtubeFrontend != 'invidious' || r.youtubeProtocol === undefined) { resolve(); return; }
if (r.youtubeProtocol == 'normal') checkedInstances = [...r.invidiousNormalRedirectsChecks, ...r.invidiousNormalCustomRedirects] let checkedInstances;
else if (r.youtubeProtocol == 'tor') checkedInstances = [...r.invidiousTorRedirectsChecks, ...r.invidiousTorCustomRedirects] if (r.youtubeProtocol == 'normal') checkedInstances = [...r.invidiousNormalRedirectsChecks, ...r.invidiousNormalCustomRedirects]
for (const to of checkedInstances) else if (r.youtubeProtocol == 'tor') checkedInstances = [...r.invidiousTorRedirectsChecks, ...r.invidiousTorCustomRedirects]
utils.getCookiesFromStorage('invidious', to, 'PREFS'); for (const to of checkedInstances)
} utils.getCookiesFromStorage('invidious', to, 'PREFS');
) resolve();
}
)
})
} }
function initPipedLocalStorage(test, url, tabId) { function initPipedLocalStorage(test, url, tabId) {

View File

@ -349,7 +349,7 @@ def peertube():
myList.append('https://'+k['host']) myList.append('https://'+k['host'])
mightyList['peertube'] = myList mightyList['peertube'] = myList
print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'Peertube') print(Fore.GREEN + 'Fetched ' + Style.RESET_ALL + 'PeerTube')
def isValid(url): # This code is contributed by avanitrachhadiya2155 def isValid(url): # This code is contributed by avanitrachhadiya2155

View File

@ -49,7 +49,7 @@
"name": "__MSG_extensionName__", "name": "__MSG_extensionName__",
"keyword": "libredirect", "keyword": "libredirect",
"favicon_url": "https://raw.githubusercontent.com/libredirect/libredirect/master/src/assets/images/libredirect-16.png", "favicon_url": "https://raw.githubusercontent.com/libredirect/libredirect/master/src/assets/images/libredirect-16.png",
"search_url": "https://libredirect.invalid/?q={searchTerms}", "search_url": "https://search.libredirect.invalid/?q={searchTerms}",
"encoding": "UTF-8", "encoding": "UTF-8",
"is_default": false "is_default": false
} }

View File

@ -1,6 +1,8 @@
"use strict"; "use strict";
import generalHelper from "../../assets/javascripts/helpers/general.js"; import generalHelper from "../../assets/javascripts/helpers/general.js";
import utils from "../../assets/javascripts/helpers/utils.js";
import youtubeHelper from "../../assets/javascripts/helpers/youtube/youtube.js"; import youtubeHelper from "../../assets/javascripts/helpers/youtube/youtube.js";
import youtubeMusicHelper from "../../assets/javascripts/helpers/youtubeMusic.js"; import youtubeMusicHelper from "../../assets/javascripts/helpers/youtubeMusic.js";
import twitterHelper from "../../assets/javascripts/helpers/twitter.js"; import twitterHelper from "../../assets/javascripts/helpers/twitter.js";
@ -16,7 +18,7 @@ import tiktokHelper from "../../assets/javascripts/helpers/tiktok.js";
import sendTargetsHelper from "../../assets/javascripts/helpers/sendTargets.js"; import sendTargetsHelper from "../../assets/javascripts/helpers/sendTargets.js";
import peertubeHelper from "../../assets/javascripts/helpers/peertube.js"; import peertubeHelper from "../../assets/javascripts/helpers/peertube.js";
import lbryHelper from "../../assets/javascripts/helpers/lbry.js"; import lbryHelper from "../../assets/javascripts/helpers/lbry.js";
import utils from "../../assets/javascripts/helpers/utils.js";
window.browser = window.browser || window.chrome; window.browser = window.browser || window.chrome;
@ -35,6 +37,7 @@ browser.runtime.onInstalled.addListener(
if (details.reason == 'install') { if (details.reason == 'install') {
fetch('/instances/blocklist.json').then(response => response.text()).then(async data => { fetch('/instances/blocklist.json').then(response => response.text()).then(async data => {
await browser.storage.local.set({ cloudflareList: JSON.parse(data) }) await browser.storage.local.set({ cloudflareList: JSON.parse(data) })
generalHelper.initDefaults();
youtubeHelper.initDefaults(); youtubeHelper.initDefaults();
youtubeMusicHelper.initDefaults(); youtubeMusicHelper.initDefaults();
twitterHelper.initDefaults(); twitterHelper.initDefaults();
@ -56,10 +59,6 @@ browser.runtime.onInstalled.addListener(
) )
async function wholeInit() { async function wholeInit() {
await mapsHelper.init();
await sendTargetsHelper.init();
await peertubeHelper.init();
await generalHelper.init();
} }
let incognitoInit = false; let incognitoInit = false;
@ -104,10 +103,10 @@ browser.webRequest.onBeforeRequest.addListener(
if ( if (
details.frameAncestors && details.frameAncestors.length > 0 && details.frameAncestors && details.frameAncestors.length > 0 &&
generalHelper.isException(new URL(details.frameAncestors[0].url)) await generalHelper.isException(new URL(details.frameAncestors[0].url))
) newUrl = null; ) newUrl = null;
if (generalHelper.isException(url)) newUrl = 'BYPASSTAB'; if (await generalHelper.isException(url)) newUrl = 'BYPASSTAB';
if (BYPASSTABs.includes(details.tabId)) newUrl = null; if (BYPASSTABs.includes(details.tabId)) newUrl = null;
@ -117,7 +116,7 @@ browser.webRequest.onBeforeRequest.addListener(
return { cancel: true }; return { cancel: true };
} }
else if (newUrl === 'BYPASSTAB') { else if (newUrl === 'BYPASSTAB') {
console.log(`Bybassed ${details.tabId} ${url}`); console.log(`Bypassed ${details.tabId} ${url}`);
if (!BYPASSTABs.includes(details.tabId)) BYPASSTABs.push(details.tabId); if (!BYPASSTABs.includes(details.tabId)) BYPASSTABs.push(details.tabId);
return null; return null;
} }
@ -180,9 +179,21 @@ async function redirectOfflineInstance(url, tabId) {
} }
} }
let counter = 0; let counter = 0;
function isAutoRedirect() {
return new Promise(resolve => {
browser.storage.local.get('autoRedirect',
r => {
if (r.autoRedirect == true) resolve(true)
else resolve(false)
}
)
})
}
browser.webRequest.onResponseStarted.addListener( browser.webRequest.onResponseStarted.addListener(
details => { async details => {
if (!generalHelper.getAutoRedirect()) return null; if (!await isAutoRedirect()) return null;
if (details.type == 'main_frame' && (details.statusCode == 502 || details.statusCode == 503 || details.statusCode == 504)) { if (details.type == 'main_frame' && (details.statusCode == 502 || details.statusCode == 503 || details.statusCode == 504)) {
// if (details.type == 'main_frame' && details.statusCode >= 200) { // if (details.type == 'main_frame' && details.statusCode >= 200) {
@ -195,8 +206,8 @@ browser.webRequest.onResponseStarted.addListener(
) )
browser.webRequest.onErrorOccurred.addListener( browser.webRequest.onErrorOccurred.addListener(
details => { async details => {
if (!generalHelper.getAutoRedirect()) return; if (!await isAutoRedirect()) return;
if (details.type == 'main_frame') { if (details.type == 'main_frame') {
const url = new URL(details.url); const url = new URL(details.url);
redirectOfflineInstance(url, details.tabId); redirectOfflineInstance(url, details.tabId);

View File

@ -3,7 +3,35 @@
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<script type="module" src="incognito.js"></script> <meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title data-localise="__MSG_instanceIsOff__">Initializing Cookies</title>
<link href="../stylesheets/styles.css" rel="stylesheet" />
<style>
body {
margin: 0;
padding: 0;
height: 100vh;
width: 100vw;
flex-wrap: wrap;
justify-content: center;
align-items: center;
font-size: 30px;
display: flex;
}
div {
text-align: center;
}
</style>
</head> </head>
<body>
<div>
<p>Initializing Cookies</p>
</div>
<script type="module" src="incognito.js"></script>
</body>
</html> </html>

View File

@ -1,30 +1,21 @@
"use strict";
import youtubeHelper from "../../assets/javascripts/helpers/youtube/youtube.js"; import youtubeHelper from "../../assets/javascripts/helpers/youtube/youtube.js";
import twitterHelper from "../../assets/javascripts/helpers/twitter.js"; import twitterHelper from "../../assets/javascripts/helpers/twitter.js";
import instagramHelper from "../../assets/javascripts/helpers/instagram.js";
import redditHelper from "../../assets/javascripts/helpers/reddit.js"; import redditHelper from "../../assets/javascripts/helpers/reddit.js";
import searchHelper from "../../assets/javascripts/helpers/search.js"; import searchHelper from "../../assets/javascripts/helpers/search.js";
import translateHelper from "../../assets/javascripts/helpers/translate/translate.js"; import translateHelper from "../../assets/javascripts/helpers/translate/translate.js";
import mapsHelper from "../../assets/javascripts/helpers/maps.js";
import wikipediaHelper from "../../assets/javascripts/helpers/wikipedia.js"; import wikipediaHelper from "../../assets/javascripts/helpers/wikipedia.js";
import mediumHelper from "../../assets/javascripts/helpers/medium.js";
import imgurHelper from "../../assets/javascripts/helpers/imgur.js";
import tiktokHelper from "../../assets/javascripts/helpers/tiktok.js"; import tiktokHelper from "../../assets/javascripts/helpers/tiktok.js";
import sendTargetsHelper from "../../assets/javascripts/helpers/sendTargets.js";
import peertubeHelper from "../../assets/javascripts/helpers/peertube.js";
import lbryHelper from "../../assets/javascripts/helpers/lbry.js";
import generalHelper from "../../assets/javascripts/helpers/general.js";
import youtubeMusicHelper from "../../assets/javascripts/helpers/youtubeMusic.js";
window.browser = window.browser || window.chrome; window.browser = window.browser || window.chrome;
async function wholeInit() { await youtubeHelper.setInvidiousCookies();
await youtubeMusicHelper.init(); await translateHelper.setSimplyTranslateCookies();
await mapsHelper.init(); await twitterHelper.setNitterCookies();
await sendTargetsHelper.init(); await wikipediaHelper.setWikilessCookies();
await peertubeHelper.init(); await searchHelper.setSearxCookies();
await generalHelper.init(); await searchHelper.setSearxngCookies();
} await redditHelper.setLibredditCookies();
await wholeInit(); await redditHelper.setTedditCookies();
await tiktokHelper.setProxiTokCookies();
window.close() window.close()

View File

@ -30,7 +30,7 @@
<ellipse cx="1682" cy="502" rx="88" ry="424"></ellipse> <ellipse cx="1682" cy="502" rx="88" ry="424"></ellipse>
</svg><a href="../medium/medium.html" data-localise="__MSG_medium__">Medium</a> </svg><a href="../medium/medium.html" data-localise="__MSG_medium__">Medium</a>
</div> </div>
<div class="title"> <img src="../../../assets/images/peertube-icon.svg"><a href="../peertube/peertube.html" data-localise="__MSG_peertube__">Peertube</a></div> <div class="title"> <img src="../../../assets/images/peertube-icon.svg"><a href="../peertube/peertube.html" data-localise="__MSG_peertube__">PeerTube</a></div>
<div class="title"> <img src="../../../assets/images/lbry-icon.png"><a href="../lbry/lbry.html" data-localise="__MSG_lbry__">LBRY/Odysee</a></div> <div class="title"> <img src="../../../assets/images/lbry-icon.png"><a href="../lbry/lbry.html" data-localise="__MSG_lbry__">LBRY/Odysee</a></div>
<div class="title"> <div class="title">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">
@ -180,7 +180,7 @@
<input id="medium" type="checkbox"> <input id="medium" type="checkbox">
</div> </div>
<div> <div>
<div> <img src="../../../assets/images/peertube-icon.svg">Peertube</div> <div> <img src="../../../assets/images/peertube-icon.svg">PeerTube</div>
<input id="peertube" type="checkbox"> <input id="peertube" type="checkbox">
</div> </div>
<div> <div>

View File

@ -4,7 +4,21 @@ window.browser = window.browser || window.chrome;
import utils from "../../../assets/javascripts/helpers/utils.js"; import utils from "../../../assets/javascripts/helpers/utils.js";
import generalHelper from "../../../assets/javascripts/helpers/general.js"; import generalHelper from "../../../assets/javascripts/helpers/general.js";
import youtubeHelper from "../../../assets/javascripts/helpers/youtube/youtube.js";
import youtubeMusicHelper from "../../../assets/javascripts/helpers/youtubeMusic.js";
import twitterHelper from "../../../assets/javascripts/helpers/twitter.js";
import instagramHelper from "../../../assets/javascripts/helpers/instagram.js";
import redditHelper from "../../../assets/javascripts/helpers/reddit.js";
import searchHelper from "../../../assets/javascripts/helpers/search.js";
import translateHelper from "../../../assets/javascripts/helpers/translate/translate.js";
import mapsHelper from "../../../assets/javascripts/helpers/maps.js";
import wikipediaHelper from "../../../assets/javascripts/helpers/wikipedia.js";
import mediumHelper from "../../../assets/javascripts/helpers/medium.js";
import imgurHelper from "../../../assets/javascripts/helpers/imgur.js";
import tiktokHelper from "../../../assets/javascripts/helpers/tiktok.js";
import sendTargetsHelper from "../../../assets/javascripts/helpers/sendTargets.js";
import peertubeHelper from "../../../assets/javascripts/helpers/peertube.js";
import lbryHelper from "../../../assets/javascripts/helpers/lbry.js";
let updateInstancesElement = document.getElementById("update-instances"); let updateInstancesElement = document.getElementById("update-instances");
updateInstancesElement.addEventListener("click", () => { updateInstancesElement.addEventListener("click", () => {
@ -68,21 +82,41 @@ function importError() {
let resetSettingsElement = document.getElementById("reset-settings"); let resetSettingsElement = document.getElementById("reset-settings");
resetSettingsElement.addEventListener("click", resetSettingsElement.addEventListener("click",
() => { async () => {
console.log("reset"); console.log("reset");
browser.storage.local.clear(); await browser.storage.local.clear();
location.reload(); fetch('/instances/blocklist.json').then(response => response.text()).then(async data => {
await browser.storage.local.set({ cloudflareList: JSON.parse(data) })
await generalHelper.initDefaults();
await youtubeHelper.initDefaults();
await youtubeMusicHelper.initDefaults();
await twitterHelper.initDefaults();
await instagramHelper.initDefaults();
await mapsHelper.initDefaults();
await searchHelper.initDefaults();
await translateHelper.initDefaults();
await mediumHelper.initDefaults();
await redditHelper.initDefaults();
await wikipediaHelper.initDefaults();
await imgurHelper.initDefaults();
await tiktokHelper.initDefaults();
await sendTargetsHelper.initDefaults();
await peertubeHelper.initDefaults();
await lbryHelper.initDefaults();
location.reload();
})
} }
); );
let autoRedirectElement = document.getElementById("auto-redirect") let autoRedirectElement = document.getElementById("auto-redirect")
autoRedirectElement.addEventListener("change", autoRedirectElement.addEventListener("change",
event => generalHelper.setAutoRedirect(event.target.checked) event => browser.storage.local.set({ autoRedirect: event.target.checked })
); );
let themeElement = document.getElementById("theme"); let themeElement = document.getElementById("theme");
themeElement.addEventListener("change", event => { themeElement.addEventListener("change", event => {
const value = event.target.options[theme.selectedIndex].value; const value = event.target.options[theme.selectedIndex].value;
generalHelper.setTheme(value); browser.storage.local.set({ theme: value });
}) })
let nameCustomInstanceInput = document.getElementById("exceptions-custom-instance"); let nameCustomInstanceInput = document.getElementById("exceptions-custom-instance");
@ -99,84 +133,94 @@ for (const frontend of generalHelper.allPopupFrontends)
var index = popupFrontends.indexOf(frontend); var index = popupFrontends.indexOf(frontend);
if (index !== -1) popupFrontends.splice(index, 1); if (index !== -1) popupFrontends.splice(index, 1);
} }
generalHelper.setPopupFrontends(popupFrontends); browser.storage.local.set({ popupFrontends })
} }
) )
generalHelper.init().then(() => {
autoRedirectElement.checked = generalHelper.getAutoRedirect();
themeElement.value = generalHelper.getTheme();
instanceTypeElement.addEventListener("change",
event => {
instanceType = event.target.options[instanceTypeElement.selectedIndex].value
if (instanceType == 'url') {
nameCustomInstanceInput.setAttribute("type", "url");
nameCustomInstanceInput.setAttribute("placeholder", "https://www.google.com");
}
else if (instanceType == 'regex') {
nameCustomInstanceInput.setAttribute("type", "text");
nameCustomInstanceInput.setAttribute("placeholder", "https?:\/\/(www\.|)youtube\.com\/");
}
}
)
let exceptionsCustomInstances = generalHelper.getExceptions();
function calcExceptionsCustomInstances() {
document.getElementById("exceptions-custom-checklist").innerHTML =
[...exceptionsCustomInstances.url, ...exceptionsCustomInstances.regex].map(
(x) => `<div>
${x}
<button class="add" id="clear-${x}">
<svg xmlns="http://www.w3.org/2000/svg" height="20px" viewBox="0 0 24 24" width="20px"
fill="currentColor">
<path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z" />
</svg>
</button>
</div>
<hr>`
).join('\n');
for (const x of [...exceptionsCustomInstances.url, ...exceptionsCustomInstances.regex]) { browser.storage.local.get(
document.getElementById(`clear-${x}`).addEventListener("click", [
() => { 'theme',
console.log(x); 'autoRedirect',
let index; 'exceptions'
index = exceptionsCustomInstances.url.indexOf(x); ],
if (index > -1) r => {
exceptionsCustomInstances.url.splice(index, 1); autoRedirectElement.checked = r.autoRedirect;
else { themeElement.value = r.theme;
index = exceptionsCustomInstances.regex.indexOf(x); instanceTypeElement.addEventListener("change",
event => {
instanceType = event.target.options[instanceTypeElement.selectedIndex].value
if (instanceType == 'url') {
nameCustomInstanceInput.setAttribute("type", "url");
nameCustomInstanceInput.setAttribute("placeholder", "https://www.google.com");
}
else if (instanceType == 'regex') {
nameCustomInstanceInput.setAttribute("type", "text");
nameCustomInstanceInput.setAttribute("placeholder", "https?:\/\/(www\.|)youtube\.com\/");
}
}
)
let exceptionsCustomInstances = r.exceptions;
function calcExceptionsCustomInstances() {
document.getElementById("exceptions-custom-checklist").innerHTML =
[...exceptionsCustomInstances.url, ...exceptionsCustomInstances.regex].map(
(x) => `<div>
${x}
<button class="add" id="clear-${x}">
<svg xmlns="http://www.w3.org/2000/svg" height="20px" viewBox="0 0 24 24" width="20px"
fill="currentColor">
<path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z" />
</svg>
</button>
</div>
<hr>`
).join('\n');
for (const x of [...exceptionsCustomInstances.url, ...exceptionsCustomInstances.regex]) {
document.getElementById(`clear-${x}`).addEventListener("click",
() => {
console.log(x);
let index;
index = exceptionsCustomInstances.url.indexOf(x);
if (index > -1) if (index > -1)
exceptionsCustomInstances.regex.splice(index, 1); exceptionsCustomInstances.url.splice(index, 1);
} else {
generalHelper.setExceptions(exceptionsCustomInstances); index = exceptionsCustomInstances.regex.indexOf(x);
calcExceptionsCustomInstances(); if (index > -1)
}); exceptionsCustomInstances.regex.splice(index, 1);
} }
} browser.storage.local.set({ exceptions: exceptionsCustomInstances })
calcExceptionsCustomInstances(); calcExceptionsCustomInstances();
document.getElementById("custom-exceptions-instance-form").addEventListener("submit", (event) => { });
event.preventDefault();
let val
if (instanceType == 'url') {
if (nameCustomInstanceInput.validity.valid) {
let url = new URL(nameCustomInstanceInput.value);
val = `${url.protocol}//${url.host}`
if (!exceptionsCustomInstances.url.includes(val)) exceptionsCustomInstances.url.push(val)
} }
} else if (instanceType == 'regex') {
val = nameCustomInstanceInput.value
if (val.trim() != '' && !exceptionsCustomInstances.regex.includes(val)) exceptionsCustomInstances.regex.push(val)
}
if (val) {
generalHelper.setExceptions(exceptionsCustomInstances);
console.log("exceptionsCustomInstances", exceptionsCustomInstances)
nameCustomInstanceInput.value = '';
} }
calcExceptionsCustomInstances(); calcExceptionsCustomInstances();
}) document.getElementById("custom-exceptions-instance-form").addEventListener("submit", (event) => {
event.preventDefault();
popupFrontends = generalHelper.getPopupFrontends(); let val
for (const frontend of generalHelper.allPopupFrontends) if (instanceType == 'url') {
document.getElementById(frontend).checked = popupFrontends.includes(frontend); if (nameCustomInstanceInput.validity.valid) {
}) let url = new URL(nameCustomInstanceInput.value);
val = `${url.protocol}//${url.host}`
if (!exceptionsCustomInstances.url.includes(val)) exceptionsCustomInstances.url.push(val)
}
} else if (instanceType == 'regex') {
val = nameCustomInstanceInput.value
if (val.trim() != '' && !exceptionsCustomInstances.regex.includes(val)) exceptionsCustomInstances.regex.push(val)
}
if (val) {
browser.storage.local.set({ exceptions: exceptionsCustomInstances })
nameCustomInstanceInput.value = '';
}
calcExceptionsCustomInstances();
})
browser.storage.local.get('popupFrontends',
r => {
popupFrontends = r.popupFrontends;
for (const frontend of generalHelper.allPopupFrontends)
document.getElementById(frontend).checked = popupFrontends.includes(frontend);
}
)
})

View File

@ -151,7 +151,7 @@ body.option(dir="auto")
div div
div div
img(src="../../../assets/images/peertube-icon.svg") img(src="../../../assets/images/peertube-icon.svg")
|Peertube |PeerTube
input#peertube(type="checkbox") input#peertube(type="checkbox")
div div

View File

@ -31,7 +31,7 @@
<ellipse cx="1682" cy="502" rx="88" ry="424"></ellipse> <ellipse cx="1682" cy="502" rx="88" ry="424"></ellipse>
</svg><a href="../medium/medium.html" data-localise="__MSG_medium__">Medium</a> </svg><a href="../medium/medium.html" data-localise="__MSG_medium__">Medium</a>
</div> </div>
<div class="title"> <img src="../../../assets/images/peertube-icon.svg"><a href="../peertube/peertube.html" data-localise="__MSG_peertube__">Peertube</a></div> <div class="title"> <img src="../../../assets/images/peertube-icon.svg"><a href="../peertube/peertube.html" data-localise="__MSG_peertube__">PeerTube</a></div>
<div class="title"> <img src="../../../assets/images/lbry-icon.png"><a href="../lbry/lbry.html" data-localise="__MSG_lbry__">LBRY/Odysee</a></div> <div class="title"> <img src="../../../assets/images/lbry-icon.png"><a href="../lbry/lbry.html" data-localise="__MSG_lbry__">LBRY/Odysee</a></div>
<div class="title"> <div class="title">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">

View File

@ -31,7 +31,7 @@
<ellipse cx="1682" cy="502" rx="88" ry="424"></ellipse> <ellipse cx="1682" cy="502" rx="88" ry="424"></ellipse>
</svg><a href="../medium/medium.html" data-localise="__MSG_medium__">Medium</a> </svg><a href="../medium/medium.html" data-localise="__MSG_medium__">Medium</a>
</div> </div>
<div class="title"> <img src="../../../assets/images/peertube-icon.svg"><a href="../peertube/peertube.html" data-localise="__MSG_peertube__">Peertube</a></div> <div class="title"> <img src="../../../assets/images/peertube-icon.svg"><a href="../peertube/peertube.html" data-localise="__MSG_peertube__">PeerTube</a></div>
<div class="title"> <img src="../../../assets/images/lbry-icon.png"><a href="../lbry/lbry.html" data-localise="__MSG_lbry__">LBRY/Odysee</a></div> <div class="title"> <img src="../../../assets/images/lbry-icon.png"><a href="../lbry/lbry.html" data-localise="__MSG_lbry__">LBRY/Odysee</a></div>
<div class="title"> <div class="title">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">

View File

@ -31,7 +31,7 @@
<ellipse cx="1682" cy="502" rx="88" ry="424"></ellipse> <ellipse cx="1682" cy="502" rx="88" ry="424"></ellipse>
</svg><a href="../medium/medium.html" data-localise="__MSG_medium__">Medium</a> </svg><a href="../medium/medium.html" data-localise="__MSG_medium__">Medium</a>
</div> </div>
<div class="title"> <img src="../../../assets/images/peertube-icon.svg"><a href="../peertube/peertube.html" data-localise="__MSG_peertube__">Peertube</a></div> <div class="title"> <img src="../../../assets/images/peertube-icon.svg"><a href="../peertube/peertube.html" data-localise="__MSG_peertube__">PeerTube</a></div>
<div class="title"> <img src="../../../assets/images/lbry-icon.png"><a class="selected" href="../lbry/lbry.html" data-localise="__MSG_lbry__">LBRY/Odysee</a></div> <div class="title"> <img src="../../../assets/images/lbry-icon.png"><a class="selected" href="../lbry/lbry.html" data-localise="__MSG_lbry__">LBRY/Odysee</a></div>
<div class="title"> <div class="title">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">

View File

@ -31,7 +31,7 @@
<ellipse cx="1682" cy="502" rx="88" ry="424"></ellipse> <ellipse cx="1682" cy="502" rx="88" ry="424"></ellipse>
</svg><a href="../medium/medium.html" data-localise="__MSG_medium__">Medium</a> </svg><a href="../medium/medium.html" data-localise="__MSG_medium__">Medium</a>
</div> </div>
<div class="title"> <img src="../../../assets/images/peertube-icon.svg"><a href="../peertube/peertube.html" data-localise="__MSG_peertube__">Peertube</a></div> <div class="title"> <img src="../../../assets/images/peertube-icon.svg"><a href="../peertube/peertube.html" data-localise="__MSG_peertube__">PeerTube</a></div>
<div class="title"> <img src="../../../assets/images/lbry-icon.png"><a href="../lbry/lbry.html" data-localise="__MSG_lbry__">LBRY/Odysee</a></div> <div class="title"> <img src="../../../assets/images/lbry-icon.png"><a href="../lbry/lbry.html" data-localise="__MSG_lbry__">LBRY/Odysee</a></div>
<div class="title"> <div class="title">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">

View File

@ -31,7 +31,7 @@
<ellipse cx="1682" cy="502" rx="88" ry="424"></ellipse> <ellipse cx="1682" cy="502" rx="88" ry="424"></ellipse>
</svg><a class="selected" href="../medium/medium.html" data-localise="__MSG_medium__">Medium</a> </svg><a class="selected" href="../medium/medium.html" data-localise="__MSG_medium__">Medium</a>
</div> </div>
<div class="title"> <img src="../../../assets/images/peertube-icon.svg"><a href="../peertube/peertube.html" data-localise="__MSG_peertube__">Peertube</a></div> <div class="title"> <img src="../../../assets/images/peertube-icon.svg"><a href="../peertube/peertube.html" data-localise="__MSG_peertube__">PeerTube</a></div>
<div class="title"> <img src="../../../assets/images/lbry-icon.png"><a href="../lbry/lbry.html" data-localise="__MSG_lbry__">LBRY/Odysee</a></div> <div class="title"> <img src="../../../assets/images/lbry-icon.png"><a href="../lbry/lbry.html" data-localise="__MSG_lbry__">LBRY/Odysee</a></div>
<div class="title"> <div class="title">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">

View File

@ -31,7 +31,7 @@
<ellipse cx="1682" cy="502" rx="88" ry="424"></ellipse> <ellipse cx="1682" cy="502" rx="88" ry="424"></ellipse>
</svg><a href="../medium/medium.html" data-localise="__MSG_medium__">Medium</a> </svg><a href="../medium/medium.html" data-localise="__MSG_medium__">Medium</a>
</div> </div>
<div class="title"> <img src="../../../assets/images/peertube-icon.svg"><a class="selected" href="../peertube/peertube.html" data-localise="__MSG_peertube__">Peertube</a></div> <div class="title"> <img src="../../../assets/images/peertube-icon.svg"><a class="selected" href="../peertube/peertube.html" data-localise="__MSG_peertube__">PeerTube</a></div>
<div class="title"> <img src="../../../assets/images/lbry-icon.png"><a href="../lbry/lbry.html" data-localise="__MSG_lbry__">LBRY/Odysee</a></div> <div class="title"> <img src="../../../assets/images/lbry-icon.png"><a href="../lbry/lbry.html" data-localise="__MSG_lbry__">LBRY/Odysee</a></div>
<div class="title"> <div class="title">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">

View File

@ -31,7 +31,7 @@
<ellipse cx="1682" cy="502" rx="88" ry="424"></ellipse> <ellipse cx="1682" cy="502" rx="88" ry="424"></ellipse>
</svg><a href="../medium/medium.html" data-localise="__MSG_medium__">Medium</a> </svg><a href="../medium/medium.html" data-localise="__MSG_medium__">Medium</a>
</div> </div>
<div class="title"> <img src="../../../assets/images/peertube-icon.svg"><a href="../peertube/peertube.html" data-localise="__MSG_peertube__">Peertube</a></div> <div class="title"> <img src="../../../assets/images/peertube-icon.svg"><a href="../peertube/peertube.html" data-localise="__MSG_peertube__">PeerTube</a></div>
<div class="title"> <img src="../../../assets/images/lbry-icon.png"><a href="../lbry/lbry.html" data-localise="__MSG_lbry__">LBRY/Odysee</a></div> <div class="title"> <img src="../../../assets/images/lbry-icon.png"><a href="../lbry/lbry.html" data-localise="__MSG_lbry__">LBRY/Odysee</a></div>
<div class="title"> <div class="title">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">

View File

@ -31,7 +31,7 @@
<ellipse cx="1682" cy="502" rx="88" ry="424"></ellipse> <ellipse cx="1682" cy="502" rx="88" ry="424"></ellipse>
</svg><a href="../medium/medium.html" data-localise="__MSG_medium__">Medium</a> </svg><a href="../medium/medium.html" data-localise="__MSG_medium__">Medium</a>
</div> </div>
<div class="title"> <img src="../../../assets/images/peertube-icon.svg"><a href="../peertube/peertube.html" data-localise="__MSG_peertube__">Peertube</a></div> <div class="title"> <img src="../../../assets/images/peertube-icon.svg"><a href="../peertube/peertube.html" data-localise="__MSG_peertube__">PeerTube</a></div>
<div class="title"> <img src="../../../assets/images/lbry-icon.png"><a href="../lbry/lbry.html" data-localise="__MSG_lbry__">LBRY/Odysee</a></div> <div class="title"> <img src="../../../assets/images/lbry-icon.png"><a href="../lbry/lbry.html" data-localise="__MSG_lbry__">LBRY/Odysee</a></div>
<div class="title"> <div class="title">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">

View File

@ -31,7 +31,7 @@
<ellipse cx="1682" cy="502" rx="88" ry="424"></ellipse> <ellipse cx="1682" cy="502" rx="88" ry="424"></ellipse>
</svg><a href="../medium/medium.html" data-localise="__MSG_medium__">Medium</a> </svg><a href="../medium/medium.html" data-localise="__MSG_medium__">Medium</a>
</div> </div>
<div class="title"> <img src="../../../assets/images/peertube-icon.svg"><a href="../peertube/peertube.html" data-localise="__MSG_peertube__">Peertube</a></div> <div class="title"> <img src="../../../assets/images/peertube-icon.svg"><a href="../peertube/peertube.html" data-localise="__MSG_peertube__">PeerTube</a></div>
<div class="title"> <img src="../../../assets/images/lbry-icon.png"><a href="../lbry/lbry.html" data-localise="__MSG_lbry__">LBRY/Odysee</a></div> <div class="title"> <img src="../../../assets/images/lbry-icon.png"><a href="../lbry/lbry.html" data-localise="__MSG_lbry__">LBRY/Odysee</a></div>
<div class="title"> <div class="title">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">

View File

@ -31,7 +31,7 @@
<ellipse cx="1682" cy="502" rx="88" ry="424"></ellipse> <ellipse cx="1682" cy="502" rx="88" ry="424"></ellipse>
</svg><a href="../medium/medium.html" data-localise="__MSG_medium__">Medium</a> </svg><a href="../medium/medium.html" data-localise="__MSG_medium__">Medium</a>
</div> </div>
<div class="title"> <img src="../../../assets/images/peertube-icon.svg"><a href="../peertube/peertube.html" data-localise="__MSG_peertube__">Peertube</a></div> <div class="title"> <img src="../../../assets/images/peertube-icon.svg"><a href="../peertube/peertube.html" data-localise="__MSG_peertube__">PeerTube</a></div>
<div class="title"> <img src="../../../assets/images/lbry-icon.png"><a href="../lbry/lbry.html" data-localise="__MSG_lbry__">LBRY/Odysee</a></div> <div class="title"> <img src="../../../assets/images/lbry-icon.png"><a href="../lbry/lbry.html" data-localise="__MSG_lbry__">LBRY/Odysee</a></div>
<div class="title"> <div class="title">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">

View File

@ -31,7 +31,7 @@
<ellipse cx="1682" cy="502" rx="88" ry="424"></ellipse> <ellipse cx="1682" cy="502" rx="88" ry="424"></ellipse>
</svg><a href="../medium/medium.html" data-localise="__MSG_medium__">Medium</a> </svg><a href="../medium/medium.html" data-localise="__MSG_medium__">Medium</a>
</div> </div>
<div class="title"> <img src="../../../assets/images/peertube-icon.svg"><a href="../peertube/peertube.html" data-localise="__MSG_peertube__">Peertube</a></div> <div class="title"> <img src="../../../assets/images/peertube-icon.svg"><a href="../peertube/peertube.html" data-localise="__MSG_peertube__">PeerTube</a></div>
<div class="title"> <img src="../../../assets/images/lbry-icon.png"><a href="../lbry/lbry.html" data-localise="__MSG_lbry__">LBRY/Odysee</a></div> <div class="title"> <img src="../../../assets/images/lbry-icon.png"><a href="../lbry/lbry.html" data-localise="__MSG_lbry__">LBRY/Odysee</a></div>
<div class="title"> <div class="title">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">

View File

@ -31,7 +31,7 @@
<ellipse cx="1682" cy="502" rx="88" ry="424"></ellipse> <ellipse cx="1682" cy="502" rx="88" ry="424"></ellipse>
</svg><a href="../medium/medium.html" data-localise="__MSG_medium__">Medium</a> </svg><a href="../medium/medium.html" data-localise="__MSG_medium__">Medium</a>
</div> </div>
<div class="title"> <img src="../../../assets/images/peertube-icon.svg"><a href="../peertube/peertube.html" data-localise="__MSG_peertube__">Peertube</a></div> <div class="title"> <img src="../../../assets/images/peertube-icon.svg"><a href="../peertube/peertube.html" data-localise="__MSG_peertube__">PeerTube</a></div>
<div class="title"> <img src="../../../assets/images/lbry-icon.png"><a href="../lbry/lbry.html" data-localise="__MSG_lbry__">LBRY/Odysee</a></div> <div class="title"> <img src="../../../assets/images/lbry-icon.png"><a href="../lbry/lbry.html" data-localise="__MSG_lbry__">LBRY/Odysee</a></div>
<div class="title"> <div class="title">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">

View File

@ -31,7 +31,7 @@
<ellipse cx="1682" cy="502" rx="88" ry="424"></ellipse> <ellipse cx="1682" cy="502" rx="88" ry="424"></ellipse>
</svg><a href="../medium/medium.html" data-localise="__MSG_medium__">Medium</a> </svg><a href="../medium/medium.html" data-localise="__MSG_medium__">Medium</a>
</div> </div>
<div class="title"> <img src="../../../assets/images/peertube-icon.svg"><a href="../peertube/peertube.html" data-localise="__MSG_peertube__">Peertube</a></div> <div class="title"> <img src="../../../assets/images/peertube-icon.svg"><a href="../peertube/peertube.html" data-localise="__MSG_peertube__">PeerTube</a></div>
<div class="title"> <img src="../../../assets/images/lbry-icon.png"><a href="../lbry/lbry.html" data-localise="__MSG_lbry__">LBRY/Odysee</a></div> <div class="title"> <img src="../../../assets/images/lbry-icon.png"><a href="../lbry/lbry.html" data-localise="__MSG_lbry__">LBRY/Odysee</a></div>
<div class="title"> <div class="title">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">

View File

@ -31,7 +31,7 @@
<ellipse cx="1682" cy="502" rx="88" ry="424"></ellipse> <ellipse cx="1682" cy="502" rx="88" ry="424"></ellipse>
</svg><a href="../medium/medium.html" data-localise="__MSG_medium__">Medium</a> </svg><a href="../medium/medium.html" data-localise="__MSG_medium__">Medium</a>
</div> </div>
<div class="title"> <img src="../../../assets/images/peertube-icon.svg"><a href="../peertube/peertube.html" data-localise="__MSG_peertube__">Peertube</a></div> <div class="title"> <img src="../../../assets/images/peertube-icon.svg"><a href="../peertube/peertube.html" data-localise="__MSG_peertube__">PeerTube</a></div>
<div class="title"> <img src="../../../assets/images/lbry-icon.png"><a href="../lbry/lbry.html" data-localise="__MSG_lbry__">LBRY/Odysee</a></div> <div class="title"> <img src="../../../assets/images/lbry-icon.png"><a href="../lbry/lbry.html" data-localise="__MSG_lbry__">LBRY/Odysee</a></div>
<div class="title"> <div class="title">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">

View File

@ -31,7 +31,7 @@
<ellipse cx="1682" cy="502" rx="88" ry="424"></ellipse> <ellipse cx="1682" cy="502" rx="88" ry="424"></ellipse>
</svg><a href="../medium/medium.html" data-localise="__MSG_medium__">Medium</a> </svg><a href="../medium/medium.html" data-localise="__MSG_medium__">Medium</a>
</div> </div>
<div class="title"> <img src="../../../assets/images/peertube-icon.svg"><a href="../peertube/peertube.html" data-localise="__MSG_peertube__">Peertube</a></div> <div class="title"> <img src="../../../assets/images/peertube-icon.svg"><a href="../peertube/peertube.html" data-localise="__MSG_peertube__">PeerTube</a></div>
<div class="title"> <img src="../../../assets/images/lbry-icon.png"><a href="../lbry/lbry.html" data-localise="__MSG_lbry__">LBRY/Odysee</a></div> <div class="title"> <img src="../../../assets/images/lbry-icon.png"><a href="../lbry/lbry.html" data-localise="__MSG_lbry__">LBRY/Odysee</a></div>
<div class="title"> <div class="title">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">

View File

@ -35,7 +35,7 @@
<h4>Reddit</h4></a> <h4>Reddit</h4></a>
<input id="disable-reddit" type="checkbox"> <input id="disable-reddit" type="checkbox">
</div> </div>
<div class="some-block" id="wikipedia"><a class="title" href="https://wikipedia.com"><img src="../../assets/images/wikipedia-icon.png"> <div class="some-block" id="wikipedia"><a class="title" href="https://wikipedia.com"><img src="../../assets/images/wikipedia-icon.svg">
<h4>Wikipedia</h4></a> <h4>Wikipedia</h4></a>
<input id="disable-wikipedia" type="checkbox"> <input id="disable-wikipedia" type="checkbox">
</div> </div>
@ -48,15 +48,15 @@
<h4>Medium</h4></a> <h4>Medium</h4></a>
<input id="disable-medium" type="checkbox"> <input id="disable-medium" type="checkbox">
</div> </div>
<div class="some-block" id="peertube"><a class="title" href="https://peertube.com"><img src="../../assets/images/peertube-icon.png"> <div class="some-block" id="peertube"><a class="title" href="https://peertube.com"><img src="../../assets/images/peertube-icon.svg">
<h4>Peertube</h4></a> <h4>PeerTube</h4></a>
<input id="disable-peertube" type="checkbox"> <input id="disable-peertube" type="checkbox">
</div> </div>
<div class="some-block" id="lbry"><a class="title" href="https://lbry.com"><img src="../../assets/images/lbry-icon.png"> <div class="some-block" id="lbry"><a class="title" href="https://lbry.com"><img src="../../assets/images/lbry-icon.png">
<h4>LBRY</h4></a> <h4>LBRY</h4></a>
<input id="disable-lbry" type="checkbox"> <input id="disable-lbry" type="checkbox">
</div> </div>
<div class="some-block" id="search"><a class="title" href="https://libredirect.invalid"> <div class="some-block" id="search"><a class="title" href="https://search.libredirect.invalid">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">
<path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"></path> <path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"></path>
</svg> </svg>
@ -77,34 +77,35 @@
<h4>Maps</h4></a> <h4>Maps</h4></a>
<input id="disable-osm" type="checkbox"> <input id="disable-osm" type="checkbox">
</div> </div>
<div class="some-block" id="sendTargets"><a class="title" href="https://send.invalid"> <div class="some-block" id="sendTargets"><a class="title" href="https://send.libredirect.invalid">
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor"> <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
<path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96zM14 13v4h-4v-4H7l5-5 5 5h-3z"></path> <path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96zM14 13v4h-4v-4H7l5-5 5 5h-3z"></path>
</svg> </svg>
<h4>Send Files</h4></a> <h4>Send Files</h4></a>
<input id="disable-sendTargets" type="checkbox"> <input id="disable-sendTargets" type="checkbox">
</div> </div>
<hr>
<div class="some-block" id="change_instance_div"><a class="title button" id="change_instance"> <div class="some-block" id="change_instance_div"><a class="title button" id="change_instance">
<h4>Change Instance</h4>
<svg xmlns="http://www.w3.org/2000/svg" height="26px" viewBox="0 0 24 24" width="26px" fill="currentColor"> <svg xmlns="http://www.w3.org/2000/svg" height="26px" viewBox="0 0 24 24" width="26px" fill="currentColor">
<path d="M12 4V1L8 5l4 4V6c3.31 0 6 2.69 6 6 0 1.01-.25 1.97-.7 2.8l1.46 1.46C19.54 15.03 20 13.57 20 12c0-4.42-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6 0-1.01.25-1.97.7-2.8L5.24 7.74C4.46 8.97 4 10.43 4 12c0 4.42 3.58 8 8 8v3l4-4-4-4v3z"></path> <path d="M12 4V1L8 5l4 4V6c3.31 0 6 2.69 6 6 0 1.01-.25 1.97-.7 2.8l1.46 1.46C19.54 15.03 20 13.57 20 12c0-4.42-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6 0-1.01.25-1.97.7-2.8L5.24 7.74C4.46 8.97 4 10.43 4 12c0 4.42 3.58 8 8 8v3l4-4-4-4v3z"></path>
</svg> </svg></a></div>
<h4>Change Instance</h4></a></div>
<div class="some-block"><a class="title button" id="more-options">
<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="26px" viewBox="0 0 24 24" width="26px" fill="currentColor">
<path d="M19.14,12.94c0.04-0.3,0.06-0.61,0.06-0.94c0-0.32-0.02-0.64-0.07-0.94l2.03-1.58c0.18-0.14,0.23-0.41,0.12-0.61 l-1.92-3.32c-0.12-0.22-0.37-0.29-0.59-0.22l-2.39,0.96c-0.5-0.38-1.03-0.7-1.62-0.94L14.4,2.81c-0.04-0.24-0.24-0.41-0.48-0.41 h-3.84c-0.24,0-0.43,0.17-0.47,0.41L9.25,5.35C8.66,5.59,8.12,5.92,7.63,6.29L5.24,5.33c-0.22-0.08-0.47,0-0.59,0.22L2.74,8.87 C2.62,9.08,2.66,9.34,2.86,9.48l2.03,1.58C4.84,11.36,4.8,11.69,4.8,12s0.02,0.64,0.07,0.94l-2.03,1.58 c-0.18,0.14-0.23,0.41-0.12,0.61l1.92,3.32c0.12,0.22,0.37,0.29,0.59,0.22l2.39-0.96c0.5,0.38,1.03,0.7,1.62,0.94l0.36,2.54 c0.05,0.24,0.24,0.41,0.48,0.41h3.84c0.24,0,0.44-0.17,0.47-0.41l0.36-2.54c0.59-0.24,1.13-0.56,1.62-0.94l2.39,0.96 c0.22,0.08,0.47,0,0.59-0.22l1.92-3.32c0.12-0.22,0.07-0.47-0.12-0.61L19.14,12.94z M12,15.6c-1.98,0-3.6-1.62-3.6-3.6 s1.62-3.6,3.6-3.6s3.6,1.62,3.6,3.6S13.98,15.6,12,15.6z"></path>
</svg>
<h4>Settings</h4></a></div>
<div class="some-block" id="copy_raw_div" title="Copy the original redirected link"> <a class="title button" id="copy_raw"> <div class="some-block" id="copy_raw_div" title="Copy the original redirected link"> <a class="title button" id="copy_raw">
<h4>Copy Raw</h4>
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor"> <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
<path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z"></path> <path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z"></path>
</svg> </svg></a></div>
<h4>Copy Raw</h4></a></div>
<div class="some-block" id="unify_div" title="Unify cookies across all selected instances"><a class="title button" id="unify"> <div class="some-block" id="unify_div" title="Unify cookies across all selected instances"><a class="title button" id="unify">
<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor"> <h4>Unify Settings</h4>
<rect fill="none" height="24" width="24"></rect> <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
<path d="M18,2H9C7.9,2,7,2.9,7,4v12c0,1.1,0.9,2,2,2h9c1.1,0,2-0.9,2-2V4C20,2.9,19.1,2,18,2z M18,16H9V4h9V16z M3,15v-2h2v2H3z M3,9.5h2v2H3V9.5z M10,20h2v2h-2V20z M3,18.5v-2h2v2H3z M5,22c-1.1,0-2-0.9-2-2h2V22z M8.5,22h-2v-2h2V22z M13.5,22L13.5,22l0-2h2 v0C15.5,21.1,14.6,22,13.5,22z M5,6L5,6l0,2H3v0C3,6.9,3.9,6,5,6z"></path> <path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"></path>
</svg> </svg></a></div>
<h4>Unify Settings</h4></a></div> <div class="some-block"><a class="title button" id="more-options">
<h4>Settings</h4>
<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="26px" viewBox="0 0 24 24" width="26px" fill="currentColor">
<path d="M19.14,12.94c0.04-0.3,0.06-0.61,0.06-0.94c0-0.32-0.02-0.64-0.07-0.94l2.03-1.58c0.18-0.14,0.23-0.41,0.12-0.61 l-1.92-3.32c-0.12-0.22-0.37-0.29-0.59-0.22l-2.39,0.96c-0.5-0.38-1.03-0.7-1.62-0.94L14.4,2.81c-0.04-0.24-0.24-0.41-0.48-0.41 h-3.84c-0.24,0-0.43,0.17-0.47,0.41L9.25,5.35C8.66,5.59,8.12,5.92,7.63,6.29L5.24,5.33c-0.22-0.08-0.47,0-0.59,0.22L2.74,8.87 C2.62,9.08,2.66,9.34,2.86,9.48l2.03,1.58C4.84,11.36,4.8,11.69,4.8,12s0.02,0.64,0.07,0.94l-2.03,1.58 c-0.18,0.14-0.23,0.41-0.12,0.61l1.92,3.32c0.12,0.22,0.37,0.29,0.59,0.22l2.39-0.96c0.5,0.38,1.03,0.7,1.62,0.94l0.36,2.54 c0.05,0.24,0.24,0.41,0.48,0.41h3.84c0.24,0,0.44-0.17,0.47-0.41l0.36-2.54c0.59-0.24,1.13-0.56,1.62-0.94l2.39,0.96 c0.22,0.08,0.47,0,0.59-0.22l1.92-3.32c0.12-0.22,0.07-0.47-0.12-0.61L19.14,12.94z M12,15.6c-1.98,0-3.6-1.62-3.6-3.6 s1.62-3.6,3.6-3.6s3.6,1.62,3.6,3.6S13.98,15.6,12,15.6z"></path>
</svg></a></div>
<div class="space"></div>
<script type="module" src="../options/init.js"></script> <script type="module" src="../options/init.js"></script>
<script type="module" src="./popup.js"></script> <script type="module" src="./popup.js"></script>
<script src="../../assets/javascripts/localise.js"></script> <script src="../../assets/javascripts/localise.js"></script>

View File

@ -98,14 +98,14 @@ utils.unify(true).then(r => {
} }
}) })
document.getElementById("more-options").addEventListener("click", () => browser.runtime.openOptionsPage()); document.getElementById("more-options").addEventListener("click", () => browser.runtime.openOptionsPage());
generalHelper.init().then(() => { browser.storage.local.get(
let popupFrontends = generalHelper.getPopupFrontends(); 'popupFrontends',
for (const frontend of generalHelper.allPopupFrontends) r => {
if (!popupFrontends.includes(frontend)) for (const frontend of generalHelper.allPopupFrontends)
document.getElementById(frontend).classList.add("hide") if (!r.popupFrontends.includes(frontend))
else document.getElementById(frontend).classList.add("hide")
document.getElementById(frontend).classList.remove("hide") else
}); document.getElementById(frontend).classList.remove("hide")
});

View File

@ -52,7 +52,7 @@ html(lang="en")
#wikipedia.some-block #wikipedia.some-block
a.title(href="https://wikipedia.com") a.title(href="https://wikipedia.com")
img(src="../../assets/images/wikipedia-icon.png") img(src="../../assets/images/wikipedia-icon.svg")
h4 Wikipedia h4 Wikipedia
input#disable-wikipedia(type="checkbox") input#disable-wikipedia(type="checkbox")
@ -64,8 +64,8 @@ html(lang="en")
#peertube.some-block #peertube.some-block
a.title(href="https://peertube.com") a.title(href="https://peertube.com")
img(src="../../assets/images/peertube-icon.png") img(src="../../assets/images/peertube-icon.svg")
h4 Peertube h4 PeerTube
input#disable-peertube(type="checkbox") input#disable-peertube(type="checkbox")
#lbry.some-block #lbry.some-block
@ -75,7 +75,7 @@ html(lang="en")
input#disable-lbry(type="checkbox") input#disable-lbry(type="checkbox")
#search.some-block #search.some-block
a.title(href="https://libredirect.invalid") a.title(href="https://search.libredirect.invalid")
+search +search
h4 Search h4 Search
input#disable-search(type="checkbox") input#disable-search(type="checkbox")
@ -93,30 +93,34 @@ html(lang="en")
input#disable-osm(type="checkbox") input#disable-osm(type="checkbox")
#sendTargets.some-block #sendTargets.some-block
a.title(href="https://send.invalid") a.title(href="https://send.libredirect.invalid")
+send +send
h4 Send Files h4 Send Files
input#disable-sendTargets(type="checkbox") input#disable-sendTargets(type="checkbox")
hr
#change_instance_div.some-block #change_instance_div.some-block
a#change_instance.title.button a#change_instance.title.button
+change_instance
h4 Change Instance h4 Change Instance
+change_instance
.some-block
a#more-options.title.button
+settings
h4 Settings
#copy_raw_div.some-block(title="Copy the original redirected link") #copy_raw_div.some-block(title="Copy the original redirected link")
a#copy_raw.title.button a#copy_raw.title.button
+copy_raw
h4 Copy Raw h4 Copy Raw
+copy_raw
#unify_div.some-block(title="Unify cookies across all selected instances") #unify_div.some-block(title="Unify cookies across all selected instances")
a#unify.title.button a#unify.title.button
+unify
h4 Unify Settings h4 Unify Settings
+unify
.some-block
a#more-options.title.button
h4 Settings
+settings
.space
script(type="module" src="../options/init.js") script(type="module" src="../options/init.js")
script(type="module" src="./popup.js") script(type="module" src="./popup.js")

View File

@ -1,5 +1,5 @@
body { body {
width: 240px; width: 230px;
min-height: auto; min-height: auto;
} }
@ -9,4 +9,15 @@ html, body {
.hide { .hide {
display: none !important; display: none !important;
}
.button {
display: flex;
margin: 0 auto;
justify-content: space-between;
width: 100%;
}
.space {
height: 10px;
} }

View File

@ -39,6 +39,5 @@ mixin general
mixin unify mixin unify
svg(xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor") svg(xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor")
rect(fill="none" height="24" width="24") path(d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z")
path(d="M18,2H9C7.9,2,7,2.9,7,4v12c0,1.1,0.9,2,2,2h9c1.1,0,2-0.9,2-2V4C20,2.9,19.1,2,18,2z M18,16H9V4h9V16z M3,15v-2h2v2H3z M3,9.5h2v2H3V9.5z M10,20h2v2h-2V20z M3,18.5v-2h2v2H3z M5,22c-1.1,0-2-0.9-2-2h2V22z M8.5,22h-2v-2h2V22z M13.5,22L13.5,22l0-2h2 v0C15.5,21.1,14.6,22,13.5,22z M5,6L5,6l0,2H3v0C3,6.9,3.9,6,5,6z")

View File

@ -44,7 +44,7 @@ mixin links(service)
.title .title
img(src="../../../assets/images/peertube-icon.svg") img(src="../../../assets/images/peertube-icon.svg")
a(href="../peertube/peertube.html" data-localise="__MSG_peertube__" class=service == "peertube" ? "selected" : "") Peertube a(href="../peertube/peertube.html" data-localise="__MSG_peertube__" class=service == "peertube" ? "selected" : "") PeerTube
.title .title
img(src="../../../assets/images/lbry-icon.png") img(src="../../../assets/images/lbry-icon.png")