-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpopup.js
More file actions
65 lines (55 loc) · 2.71 KB
/
popup.js
File metadata and controls
65 lines (55 loc) · 2.71 KB
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
document.addEventListener('DOMContentLoaded', function() {
const enableCheckbox = document.getElementById('enableTranslation');
const languageSearch = document.getElementById('languageSearch');
const languageList = document.getElementById('languageList');
let languages = [];
let selectedLanguages = ['es'];
// Fetch languages from Google Translate
fetch('https://translate.googleapis.com/translate_a/l?client=gtx&dt=t')
.then(response => response.json())
.then(data => {
languages = Object.entries(data.tl).map(([code, name]) => ({ code, name }));
updateLanguageList();
})
.catch(error => console.error('Error fetching languages:', error));
chrome.storage.sync.get(['enabled', 'languages'], function(result) {
enableCheckbox.checked = result.enabled !== undefined ? result.enabled : true;
selectedLanguages = result.languages || ['es'];
updateLanguageList();
});
enableCheckbox.addEventListener('change', function() {
chrome.storage.sync.set({enabled: this.checked});
});
languageSearch.addEventListener('input', updateLanguageList);
function updateLanguageList() {
const searchTerm = languageSearch.value.toLowerCase();
const filteredLanguages = languages.filter(lang =>
lang.name.toLowerCase().includes(searchTerm) || lang.code.toLowerCase().includes(searchTerm)
);
// Separate selected and unselected languages
const selected = filteredLanguages.filter(lang => selectedLanguages.includes(lang.code));
const unselected = filteredLanguages.filter(lang => !selectedLanguages.includes(lang.code));
// Combine selected and unselected languages
const sortedLanguages = [...selected, ...unselected];
languageList.innerHTML = sortedLanguages.map(lang =>
`<div class="${selectedLanguages.includes(lang.code) ? 'selected' : ''}">
<input type="checkbox" id="${lang.code}" value="${lang.code}" ${selectedLanguages.includes(lang.code) ? 'checked' : ''}>
<label for="${lang.code}">${lang.name} (${lang.code})</label>
</div>`
).join('');
languageList.querySelectorAll('input[type="checkbox"]').forEach(checkbox => {
checkbox.addEventListener('change', function() {
if (this.checked && selectedLanguages.length < 2) {
selectedLanguages.push(this.value);
} else if (!this.checked) {
selectedLanguages = selectedLanguages.filter(lang => lang !== this.value);
} else {
this.checked = false;
}
chrome.storage.sync.set({languages: selectedLanguages}, function() {
updateLanguageList();
});
});
});
}
});