1+ document . addEventListener ( 'DOMContentLoaded' , function ( ) {
2+ const enableCheckbox = document . getElementById ( 'enableTranslation' ) ;
3+ const languageSearch = document . getElementById ( 'languageSearch' ) ;
4+ const languageList = document . getElementById ( 'languageList' ) ;
5+
6+ let languages = [ ] ;
7+ let selectedLanguage = 'es' ;
8+
9+ // Fetch languages from Google Translate
10+ fetch ( 'https://translate.googleapis.com/translate_a/l?client=gtx&dt=t' )
11+ . then ( response => response . json ( ) )
12+ . then ( data => {
13+ languages = Object . entries ( data . tl ) . map ( ( [ code , name ] ) => ( { code, name } ) ) ;
14+ updateLanguageList ( ) ;
15+ } )
16+ . catch ( error => console . error ( 'Error fetching languages:' , error ) ) ;
17+
18+ chrome . storage . sync . get ( [ 'enabled' , 'language' ] , function ( result ) {
19+ enableCheckbox . checked = result . enabled !== undefined ? result . enabled : true ;
20+ selectedLanguage = result . language || 'es' ;
21+ updateLanguageList ( ) ;
22+ } ) ;
23+
24+ enableCheckbox . addEventListener ( 'change' , function ( ) {
25+ chrome . storage . sync . set ( { enabled : this . checked } ) ;
26+ } ) ;
27+
28+ languageSearch . addEventListener ( 'input' , updateLanguageList ) ;
29+
30+ function updateLanguageList ( ) {
31+ const searchTerm = languageSearch . value . toLowerCase ( ) ;
32+ const filteredLanguages = languages . filter ( lang =>
33+ lang . name . toLowerCase ( ) . includes ( searchTerm ) || lang . code . toLowerCase ( ) . includes ( searchTerm )
34+ ) ;
35+
36+ languageList . innerHTML = filteredLanguages . map ( lang =>
37+ `<div>
38+ <input type="radio" name="language" id="${ lang . code } " value="${ lang . code } " ${ lang . code === selectedLanguage ? 'checked' : '' } >
39+ <label for="${ lang . code } ">${ lang . name } (${ lang . code } )</label>
40+ </div>`
41+ ) . join ( '' ) ;
42+
43+ languageList . addEventListener ( 'change' , function ( e ) {
44+ if ( e . target . type === 'radio' ) {
45+ selectedLanguage = e . target . value ;
46+ chrome . storage . sync . set ( { language : selectedLanguage } ) ;
47+ }
48+ } ) ;
49+ }
50+ } ) ;
0 commit comments