package Ġcom . rost egg . kotlin . web extensions Ċ Ċ import Ġorg . w 3 c . dom . HT M LO ption Element Ċ import Ġorg . w 3 c . dom . HTML Select Element Ċ import Ġorg . w 3 c . dom . get Ċ import Ġorg . w 3 c . xhr . XML HttpRequest Ċ import Ġkotlin . browser . document Ċ import Ġkotlin . browser . window ĊĊ Ċ // ĠTODO Ġproxy , Ġcopy Ġto Ġtextarea , Ġui Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ Ġinit Languages List () ĊĊĠĠĠ Ġtranslate Btn . onclick Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġtranslate Text () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġswap Btn . onclick Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġswap Languages In Menu () ĊĠĠĠ Ġ} ĊĠĠĠ Ġwindow . addEventListener (" mouseover ", Ġ{ Ġinput Panel . focus () ĊĠĠĠĠĠĠĠ Ġdocument . exec Command (" paste ") ĊĠĠĠ Ġ}) Ċ } Ċ Ċ fun Ġtranslate Text (){ ĊĠĠĠ Ġbrowser . storage . local . get (). then ({ Ġitems Ġ-> ĊĠĠĠĠĠĠĠ Ġvar ĠapiKey Ġ= Ġitems [" apiKey "] ĊĠĠĠĠĠĠĠ Ġvar Ġtext Ġ= Ġinput Panel . value ĊĠĠĠĠĠĠĠ Ġvar Ġfrom Language Ġ= Ġ( language From Menu . options [ language From Menu . selectedIndex ] Ġas ĠHT M LO ption Element ). value ĊĠĠĠĠĠĠĠ Ġvar Ġto Language Ġ= Ġ( language To Menu . options [ language To Menu . selectedIndex ] Ġas ĠHT M LO ption Element ). value ĊĠĠĠĠĠĠĠ Ġvar Ġrequest = ĠEnd points . get Translate Text Endpoint ( apiKey ," $ from Language -$ to Language ", text ) ĊĠĠĠĠĠĠĠ Ġsend Request ( request ) ĊĠĠĠ Ġ}) Ċ } Ċ Ċ fun Ġsend Request ( request : ĠString ){ ĊĠĠĠ Ġvar Ġx http Ġ: dynamic = ĠXMLHttpRequest () ĊĠĠĠ Ġx http . open (" GET ", Ġrequest ) ĊĠĠĠ Ġx http . onload = fun (){ ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= ĠJSON . parse < Y an dex Response >( x http . responseText ) ĊĠĠĠĠĠĠĠ Ġif Ġ( error Codes . keys . contains ( response . code )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbrowser . runtime . sendMessage ( js Object Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Type Ġ= Ġ" translation - api - error " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode Ġ= Ġresponse . code ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġerror Codes [ code ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Panel . value Ġ= Ġresponse . text ĊĠĠĠ Ġ} ĊĠĠĠ Ġx http . onerror = fun (){ ĊĠĠĠĠĠĠĠ Ġbrowser . runtime . sendMessage (" error - trans lating ") ĊĠĠĠ Ġ} ĊĠĠĠ Ġx http . send () Ċ } Ċ Ċ fun Ġswap Languages In Menu () Ġ{ ĊĠĠĠ Ġlanguage To Menu . selectedIndex Ġ= Ġlanguage From Menu . selectedIndex . also Ġ{ Ġlanguage From Menu . selectedIndex Ġ= Ġlanguage To Menu . selectedIndex Ġ} Ċ } Ċ Ċ fun Ġinit Languages List () Ġ{ ĊĠĠĠ Ġbrowser . storage . local . get (). then ({ Ġitems Ġ-> ĊĠĠĠĠĠĠĠ Ġvar Ġlanguages Ġ= Ġitems [" languages - list "] Ġas ĠArray < Language > ĊĠĠĠĠĠĠĠ Ġfor Ġ( language Ġin Ġlanguages ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinsert Into Menu ( language . value , Ġlanguage . key , Ġlanguage From Menu ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinsert Into Menu ( language . value , Ġlanguage . key , Ġlanguage To Menu ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġlanguage To Ġ= Ġitems [" language - to "] ĊĠĠĠĠĠĠĠ Ġvar Ġlanguage From Ġ= Ġitems [" language - from "] ĊĠĠĠĠĠĠĠ Ġval Ġlanguages Count Ġ= Ġlanguage From Menu . options . length ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. languages Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( language From Menu . options [ i ] Ġas ĠHT M LO ption Element Ġ). value Ġ== Ġlanguage From . key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlanguage From Menu . selectedIndex Ġ= Ġi ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( language To Menu . options [ i ] Ġas ĠHT M LO ption Element Ġ). value Ġ== Ġlanguage To . key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlanguage To Menu . selectedIndex Ġ= Ġi ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) Ċ Ċ } Ċ Ċ fun Ġinsert Into Menu ( text : String , Ġvalue : String , Ġelement : HTML Select Element ){ ĊĠĠĠ Ġvar Ġoption Ġ= Ġdocument . createElement (" option ") Ġas ĠHT M LO ption Element ĊĠĠĠ Ġoption . value = Ġvalue ĊĠĠĠ Ġoption . text Ġ= Ġtext ĊĠĠĠ Ġelement . add ( option ) Ċ } ĊĊ