libredirect/src/assets/javascripts/helpers/translate.js

376 lines
12 KiB
JavaScript

window.browser = window.browser || window.chrome;
import commonHelper from './common.js'
const targets = [
"translate.google.com",
"translate.google.no"
];
let redirects = {
"simplyTranslate": {
"normal": [],
"tor": []
},
"lingva": {
"normal": [],
"tor": []
}
};
const getRedirects = () => redirects;
const getCustomRedirects = function () {
return {
"simplyTranslate": {
"normal": [...simplyTranslateNormalRedirectsChecks, ...simplyTranslateNormalCustomRedirects],
"tor": [...simplyTranslateTorRedirectsChecks, ...simplyTranslateTorCustomRedirects]
},
"lingva": {
"normal": [...lingvaNormalRedirectsChecks, ...lingvaNormalCustomRedirects],
"tor": [...lingvaTorRedirectsChecks, ...lingvaTorCustomRedirects]
}
};
};
function setSimplyTranslateRedirects(val) {
redirects.simplyTranslate = val;
browser.storage.local.set({ translateRedirects: redirects })
console.log("simplyTranslateRedirects:", val)
for (const item of simplyTranslateNormalRedirectsChecks)
if (!redirects.simplyTranslate.normal.includes(item)) {
var index = simplyTranslateNormalRedirectsChecks.indexOf(item);
if (index !== -1) simplyTranslateNormalRedirectsChecks.splice(index, 1);
}
setSimplyTranslateNormalRedirectsChecks(simplyTranslateNormalRedirectsChecks);
for (const item of simplyTranslateTorRedirectsChecks)
if (!redirects.simplyTranslate.normal.includes(item)) {
var index = simplyTranslateTorRedirectsChecks.indexOf(item);
if (index !== -1) simplyTranslateTorRedirectsChecks.splice(index, 1);
}
setSimplyTranslateTorRedirectsChecks(simplyTranslateTorRedirectsChecks);
}
let simplyTranslateNormalRedirectsChecks;
const getSimplyTranslateNormalRedirectsChecks = () => simplyTranslateNormalRedirectsChecks;
function setSimplyTranslateNormalRedirectsChecks(val) {
simplyTranslateNormalRedirectsChecks = val;
browser.storage.local.set({ simplyTranslateNormalRedirectsChecks })
console.log("simplyTranslateNormalRedirectsChecks: ", val)
}
let simplyTranslateTorRedirectsChecks;
const getSimplyTranslateTorRedirectsChecks = () => simplyTranslateTorRedirectsChecks;
function setSimplyTranslateTorRedirectsChecks(val) {
simplyTranslateTorRedirectsChecks = val;
browser.storage.local.set({ simplyTranslateTorRedirectsChecks })
console.log("simplyTranslateTorRedirectsChecks: ", val)
}
let simplyTranslateNormalCustomRedirects = [];
const getSimplyTranslateNormalCustomRedirects = () => simplyTranslateNormalCustomRedirects;
function setSimplyTranslateNormalCustomRedirects(val) {
simplyTranslateNormalCustomRedirects = val;
browser.storage.local.set({ simplyTranslateNormalCustomRedirects })
console.log("simplyTranslateNormalCustomRedirects: ", val)
}
let simplyTranslateTorCustomRedirects = [];
const getSimplyTranslateTorCustomRedirects = () => simplyTranslateTorCustomRedirects;
function setSimplyTranslateTorCustomRedirects(val) {
simplyTranslateTorCustomRedirects = val;
browser.storage.local.set({ simplyTranslateTorCustomRedirects })
console.log("simplyTranslateTorCustomRedirects: ", val)
}
function setLingvaRedirects(val) {
redirects.lingva = val;
browser.storage.local.set({ translateRedirects: redirects })
console.log("lingvaRedirects:", val)
for (const item of lingvaNormalRedirectsChecks)
if (!redirects.lingva.normal.includes(item)) {
var index = lingvaNormalRedirectsChecks.indexOf(item);
if (index !== -1) lingvaNormalRedirectsChecks.splice(index, 1);
}
setLingvaNormalRedirectsChecks(lingvaNormalRedirectsChecks);
for (const item of lingvaTorRedirectsChecks)
if (!redirects.lingva.normal.includes(item)) {
var index = lingvaTorRedirectsChecks.indexOf(item);
if (index !== -1) lingvaTorRedirectsChecks.splice(index, 1);
}
setLingvaTorRedirectsChecks(lingvaTorRedirectsChecks);
}
let lingvaNormalRedirectsChecks;
const getLingvaNormalRedirectsChecks = () => lingvaNormalRedirectsChecks;
function setLingvaNormalRedirectsChecks(val) {
lingvaNormalRedirectsChecks = val;
browser.storage.local.set({ lingvaNormalRedirectsChecks })
console.log("lingvaNormalRedirectsChecks: ", val)
}
let lingvaTorRedirectsChecks;
const getLingvaTorRedirectsChecks = () => lingvaTorRedirectsChecks;
function setLingvaTorRedirectsChecks(val) {
lingvaTorRedirectsChecks = val;
browser.storage.local.set({ lingvaTorRedirectsChecks })
console.log("lingvaTorRedirectsChecks: ", val)
}
let lingvaNormalCustomRedirects = [];
const getLingvaNormalCustomRedirects = () => lingvaNormalCustomRedirects;
function setLingvaNormalCustomRedirects(val) {
lingvaNormalCustomRedirects = val;
browser.storage.local.set({ lingvaNormalCustomRedirects })
console.log("lingvaNormalCustomRedirects: ", val)
}
let lingvaTorCustomRedirects = [];
const getLingvaTorCustomRedirects = () => lingvaTorCustomRedirects;
function setLingvaTorCustomRedirects(val) {
lingvaTorCustomRedirects = val;
browser.storage.local.set({ lingvaTorCustomRedirects })
console.log("lingvaTorCustomRedirects: ", val)
}
let disable;
const getDisable = () => disable;
function setDisable(val) {
disable = val;
browser.storage.local.set({ translateDisable: disable })
console.log("disable: ", disable)
}
let frontend;
const getFrontend = () => frontend;
function setFrontend(val) {
frontend = val;
browser.storage.local.set({ translateFrontend: frontend })
console.log("translateFrontend: ", frontend)
}
let protocol;
const getProtocol = () => protocol;
function setProtocol(val) {
protocol = val;
browser.storage.local.set({ translateProtocol: val })
console.log("translateProtocol: ", val)
}
let from;
const getFrom = () => from;
function setFrom(val) {
from = val;
browser.storage.local.set({ translateFrom: from })
console.log("from: ", from)
}
let to;
const getTo = () => to;
function setTo(val) {
to = val;
browser.storage.local.set({ translateTo: to })
console.log("to: ", to)
}
let simplyTranslateEngine;
const getSimplyTranslateEngine = () => simplyTranslateEngine;
function setSimplyTranslateEngine(val) {
simplyTranslateEngine = val;
browser.storage.local.set({ simplyTranslateEngine: val })
console.log("simplyTranslateEngine: ", val)
}
function isTranslate(url, initiator) {
if (disable) return false;
return targets.includes(url.host)
}
function redirect(url) {
let params_arr = url.search.split('&');
params_arr[0] = params_arr[0].substring(1);
let myMap = {};
for (let i = 0; i < params_arr.length; i++) {
let pair = params_arr[i].split('=');
myMap[pair[0]] = pair[1];
}
if (frontend == 'simplyTranslate') {
let instancesList;
if (protocol == 'normal') instancesList = [...simplyTranslateNormalRedirectsChecks, ...simplyTranslateNormalCustomRedirects];
if (protocol == 'tor') instancesList = [...simplyTranslateTorRedirectsChecks, ...simplyTranslateTorCustomRedirects];
if (instancesList.length === 0) return null;
let randomInstance = commonHelper.getRandomInstance(instancesList)
if (myMap.sl && myMap.tl && myMap.text)
return `${randomInstance}/${url.search}`;
else {
if (from != "DEFAULT") url.searchParams.append("sl", from);
if (to != "DEFAULT") url.searchParams.append("tl", to);
if (simplyTranslateEngine != "DEFAULT") url.searchParams.append("engine", simplyTranslateEngine);
return `${randomInstance}/${url.search}`
}
}
else if (frontend == 'lingva') {
let instancesList;
if (protocol == 'normal') instancesList = [...lingvaNormalRedirectsChecks, ...lingvaNormalCustomRedirects];
if (protocol == 'tor') instancesList = [...lingvaTorRedirectsChecks, ...lingvaTorCustomRedirects];
if (instancesList.length === 0) return null;
let randomInstance = commonHelper.getRandomInstance(instancesList)
if (myMap.sl && myMap.tl && myMap.text)
return `${randomInstance}/${myMap.sl}/${myMap.tl}/${myMap.text}`;
else
return randomInstance;
}
}
function changeInstance(url) {
let protocolHost = `${url.protocol}//${url.host}`;
let translateList = [
...redirects.simplyTranslate.normal,
...redirects.simplyTranslate.tor,
...simplyTranslateNormalCustomRedirects,
...simplyTranslateTorCustomRedirects,
...redirects.lingva.normal,
...redirects.lingva.tor,
...lingvaNormalCustomRedirects,
...lingvaTorCustomRedirects,
]
if (!translateList.includes(protocolHost)) return null;
let instancesList;
if (frontend == 'simplyTranslate') {
if (protocol == 'normal') instancesList = [...simplyTranslateNormalRedirectsChecks, ...simplyTranslateNormalCustomRedirects];
else if (protocol == 'tor') instancesList = [...simplyTranslateTorRedirectsChecks, ...simplyTranslateTorCustomRedirects];
}
else if (frontend == 'lingva') {
if (protocol == 'normal') instancesList = [...lingvaNormalRedirectsChecks, ...lingvaNormalCustomRedirects];
else if (protocol == 'tor') instancesList = [...lingvaTorRedirectsChecks, ...lingvaTorCustomRedirects];
}
console.log("instancesList", instancesList);
let index = instancesList.indexOf(protocolHost);
if (index > -1) instancesList.splice(index, 1);
if (instancesList.length === 0) return null;
let randomInstance = commonHelper.getRandomInstance(instancesList);
return `${randomInstance}${url.pathname}${url.search}`;
}
async function init() {
return new Promise((resolve) => {
fetch('/instances/data.json').then(response => response.text()).then(data => {
let dataJson = JSON.parse(data);
browser.storage.local.get(
[
"translateDisable",
"translateFrontend",
"translateProtocol",
"translateRedirects",
"simplyTranslateNormalRedirectsChecks",
"simplyTranslateNormalCustomRedirects",
"simplyTranslateTorRedirectsChecks",
"simplyTranslateTorCustomRedirects",
"lingvaNormalRedirectsChecks",
"lingvaNormalCustomRedirects",
"lingvaTorRedirectsChecks",
"lingvaTorCustomRedirects",
"translateFrom",
"translateTo",
"simplyTranslateEngine",
],
(result) => {
disable = result.translateDisable ?? false;
frontend = result.translateFrontend ?? "simplyTranslate";
protocol = result.translateProtocol ?? 'normal';
from = result.translateFrom ?? "DEFAULT";
to = result.translateTo ?? 'DEFAULT';
simplyTranslateEngine = result.simplyTranslateEngine ?? 'DEFAULT';
redirects.simplyTranslate = dataJson.simplyTranslate;
redirects.lingva = dataJson.lingva;
if (result.translateRedirects) redirects = result.translateRedirects;
simplyTranslateNormalRedirectsChecks = result.simplyTranslateNormalRedirectsChecks ?? [...redirects.simplyTranslate.normal];
simplyTranslateNormalCustomRedirects = result.simplyTranslateNormalCustomRedirects ?? [];
simplyTranslateTorRedirectsChecks = result.simplyTranslateTorRedirectsChecks ?? [...redirects.simplyTranslate.tor];
simplyTranslateTorCustomRedirects = result.simplyTranslateTorCustomRedirects ?? [];
lingvaNormalRedirectsChecks = result.lingvaNormalRedirectsChecks ?? [...redirects.lingva.normal];
lingvaNormalCustomRedirects = result.lingvaNormalCustomRedirects ?? [];
lingvaTorRedirectsChecks = result.lingvaTorRedirectsChecks ?? [...redirects.lingva.tor];
lingvaTorCustomRedirects = result.lingvaTorCustomRedirects ?? [];
resolve();
});
});
});
}
export default {
getRedirects,
getCustomRedirects,
setSimplyTranslateRedirects,
setLingvaRedirects,
isTranslate,
getDisable,
setDisable,
getFrontend,
setFrontend,
getProtocol,
setProtocol,
getFrom,
setFrom,
getTo,
setTo,
getSimplyTranslateEngine,
setSimplyTranslateEngine,
getSimplyTranslateNormalRedirectsChecks,
setSimplyTranslateNormalRedirectsChecks,
getSimplyTranslateTorRedirectsChecks,
setSimplyTranslateTorRedirectsChecks,
getSimplyTranslateNormalCustomRedirects,
setSimplyTranslateNormalCustomRedirects,
getSimplyTranslateTorCustomRedirects,
setSimplyTranslateTorCustomRedirects,
getLingvaNormalRedirectsChecks,
setLingvaNormalRedirectsChecks,
getLingvaTorRedirectsChecks,
setLingvaTorRedirectsChecks,
getLingvaNormalCustomRedirects,
setLingvaNormalCustomRedirects,
getLingvaTorCustomRedirects,
setLingvaTorCustomRedirects,
redirect,
init,
changeInstance,
};