-
Notifications
You must be signed in to change notification settings - Fork 1
/
translate.js
85 lines (73 loc) · 4.02 KB
/
translate.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
// Check if activated via the local storage, changed in the popup
chrome.storage.sync.get("active", function (result) {
if (typeof result !== "undefined") {
if (result["active"] !== false) {
chrome.storage.sync.get("amount", function (result) {
let amount = result["amount"];
chrome.storage.sync.get("type", function (result) {
let type = result["type"]; // Traditional or Simplified
let customReplace = (function () {
let searched = [];
return function (match, element) {
// Checks for duplicates
if (searched.lastIndexOf(match) === -1) {
searched.push(match);
let p = new Promise((init, resolve) => {
chrome.runtime.sendMessage(match.trim(), function (response) {
if (response === "init") {
init();
} else {
resolve(response);
}
})
});
p.then(
(init) => { // This is the init phase
window.title = "Mini Translate - Extension";
window.alert("Thank you for using MiniTranslate. \nWe will shortly start initializing" +
" the dictionary database. \nThis should take less than a minute, " +
"but might freeze your screen. \n\nPlease bear with it. Thank you.")
},
(response) => {
if (response != null && response.length > 0) {
element.innerHTML = element.innerHTML.replace(match, word.replaceWord(match, response, type));
}
}
);
}
}
})();
// Get some nouns from the text and translate a few of them to the selected language
let pattern = / ([a-z]\w{4,}) /gm;
let p = document.getElementsByTagName('p');
let count = 0;
first_loop:
for (let i = 0; i < p.length; i++) {
// Remove all the links from the text, as we don't want a character appearing inside a link
let clone = p[i].cloneNode(true);
let links = clone.getElementsByTagName("a");
while (links.length > 0) {
links[0].parentNode.removeChild(links[0]);
}
let matches = clone.innerText.match(pattern);
if (matches == null) {
continue;
}
for (let j = 1; j < matches.length; j++) {
customReplace(matches[j], p[i]);
count++;
if (count > (amount - 1)) {
break first_loop;
}
// It would do everything in the first paragraph if we don't skip it here
// Depending on if there are enough paragraphs
if (p.length * j >= 7) {
break;
}
}
}
});
});
}
}
});