Add tampermonkey script
This commit is contained in:
parent
f7e68949d1
commit
50ccde74b1
|
@ -0,0 +1,71 @@
|
|||
// ==UserScript==
|
||||
// @name SN translator
|
||||
// @namespace http://tampermonkey.net/
|
||||
// @version 0.1
|
||||
// @description Translate posts on SN
|
||||
// @author You
|
||||
// @match https://stacker.news/*
|
||||
// @icon https://www.google.com/s2/favicons?sz=64&domain=tampermonkey.net
|
||||
// @grant GM_xmlhttpRequest
|
||||
// ==/UserScript==
|
||||
|
||||
const headers = {
|
||||
origin: "https://libretranslate.com",
|
||||
accept: "*/*",
|
||||
"accept-language": "de-DE,de;q=0.9,ru-DE;q=0.8,ru;q=0.7,en-US;q=0.6,en;q=0.5",
|
||||
"sec-ch-ua":
|
||||
'"Not?A_Brand";v="8", "Chromium";v="108", "Google Chrome";v="108"',
|
||||
"sec-ch-ua-mobile": "?0",
|
||||
"sec-ch-ua-platform": '"Linux"',
|
||||
"sec-fetch-dest": "empty",
|
||||
"sec-fetch-mode": "cors",
|
||||
"sec-fetch-site": "same-origin",
|
||||
};
|
||||
|
||||
function translate(text, source, target) {
|
||||
const formData = new FormData();
|
||||
formData.append("q", text);
|
||||
formData.append("source", source);
|
||||
formData.append("target", target);
|
||||
return new Promise((resolve, reject) => {
|
||||
GM_xmlhttpRequest({
|
||||
method: "POST",
|
||||
url: "https://libretranslate.com/translate",
|
||||
data: formData,
|
||||
headers,
|
||||
synchronous: true,
|
||||
onload: function (res) {
|
||||
const body = JSON.parse(res.responseText);
|
||||
if (res.status !== 200) return reject(body);
|
||||
return resolve(body.translatedText);
|
||||
},
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
|
||||
|
||||
(async function () {
|
||||
await sleep(1000);
|
||||
console.log("sn-translator: Adding button to every comment ...");
|
||||
const commentSection = document.querySelector(".item_comments__cN57K");
|
||||
const comments = commentSection.querySelectorAll(".comment_comment__5uvl3");
|
||||
const commentNodes = commentSection.querySelectorAll(".comment_text__nHI0E");
|
||||
for (const comment of comments) {
|
||||
const topBar = comment.querySelector(".item_other__qNlji");
|
||||
const content = comment.querySelector(".comment_text__nHI0E");
|
||||
const padding = document.createElement("span");
|
||||
padding.innerText = " ";
|
||||
const btn = document.createElement("button");
|
||||
btn.innerText = "Translate";
|
||||
btn.onclick = async (e) => {
|
||||
const t = await translate(content.innerText, "en", "es").catch(
|
||||
console.error
|
||||
);
|
||||
if (t) content.innerText = t;
|
||||
};
|
||||
topBar.appendChild(padding);
|
||||
topBar.appendChild(btn);
|
||||
}
|
||||
console.log("Done");
|
||||
})();
|
Loading…
Reference in New Issue