flashlang/src/background/gtranslate_content_script.ts
2020-08-07 21:52:32 +02:00

45 lines
1.2 KiB
TypeScript

import { browser } from "webextension-polyfill-ts";
declare interface Window {
hasRun: boolean;
}
(async () => {
if (window.location.host != "translate.google.com" || window.hasRun) return;
window.hasRun = true;
const conn = browser.runtime.connect(<any>{
name: "gtranslate_scraper_conn",
});
const src = <HTMLTextAreaElement>document.querySelector("textarea#source");
const result = <HTMLDivElement>(
document.querySelector("div.results-container")
);
const isTranslating = () => result.classList.contains("translating");
const observer = new MutationObserver((mutations) => {
console.log(mutations);
const wasTranslating = mutations.some((m) =>
m.oldValue!.split(" ").some((c) => c == "translating")
);
if (wasTranslating && !isTranslating()) {
sendTranslation();
}
});
observer.observe(result, {
attributes: true,
attributeOldValue: true,
attributeFilter: ["class"],
});
const sendTranslation = () => {
conn.postMessage({ src: src.value, result: result.innerText.trim() });
};
conn.onMessage.addListener((to_translate: string) => {
if (src.value == to_translate && !isTranslating()) sendTranslation();
else src.value = to_translate;
});
})();