package Ġde . west erm ann . robots . website . toolkit . widget Ċ Ċ import Ġde . west erm ann . robots . website . toolkit . Router Ċ import Ġde . west erm ann . robots . website . toolkit . view .* Ċ import Ġorg . w 3 c . dom . HTMLElement Ċ import Ġorg . w 3 c . dom . events . Event Ċ import Ġorg . w 3 c . dom . events . EventListener Ċ import Ġorg . w 3 c . dom . events . MouseEvent Ċ import Ġkotlin . browser . document Ċ import Ġkotlin . browser . window Ċ Ċ /** Ċ Ġ* Ġ@ author Ġl ars Ċ Ġ*/ Ċ class ĠButton View ( ĊĠĠĠĠĠĠĠ Ġtext : ĠString Ġ= Ġ"", ĊĠĠĠĠĠĠĠ Ġinit : ĠButton View . () Ġ-> ĠUnit Ġ= Ġ{} Ċ ) Ġ: ĠView () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġbutton Ġ= Ġ( document . createElement (" div ") Ġas ĠHTMLElement ). also Ġ{ ĊĠĠĠĠĠĠĠ Ġelement . appendChild ( it ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġdown Ġ= ĠTimeout EventHandler < Unit >() ĊĠĠĠ Ġval Ġup Ġ= ĠTimeout EventHandler < Unit >() ĊĊĠĠĠ Ġvar Ġtext : ĠString Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" ast ef : Ġ$ value ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton . textContent Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġdisable : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġelement . classList . contains (" disabled ") ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement . classList . toggle (" disabled ", Ġvalue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġstop Listener Ġ= Ġobject Ġ: ĠEvent Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhandle Event ( event : ĠEvent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop Click ( event ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġidentifier : ĠInt ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġfun Ġstart Click ( event : ĠEvent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġevent . preventDefault () ĊĠĠĠĠĠĠĠ Ġevent . stopPropagation () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( identifier Ġ!= Ġnull Ġ|| Ġdisable ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġif Ġ( js TypeOf ( js (" Touch Event ")) Ġ!= Ġ" undefined ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( event Ġas ? ĠTouch Event )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtouch Ġ= Ġit . changed Tou ches [ 0 ] Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġidentifier Ġ= Ġtouch . identifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . addEventListener (" touch end ", Ġstop Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . addEventListener (" touch cancel ", Ġstop Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdown . fire ( Unit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ( event Ġas ? ĠMouseEvent )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġidentifier Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . addEventListener (" mouseup ", Ġstop Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdown . fire ( Unit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstop Click ( event : ĠEvent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġevent . preventDefault () ĊĠĠĠĠĠĠĠ Ġevent . stopPropagation () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( js TypeOf ( js (" Touch Event ")) Ġ!= Ġ" undefined ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( event Ġas ? ĠTouch Event )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . changed Tou ches . find ( identifier Ġ?: Ġ- 1 ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . removeEventListener (" touch end ", Ġstop Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . removeEventListener (" touch cancel ", Ġstop Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġidentifier Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġup . fire ( Unit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ( event Ġas ? ĠMouseEvent )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . removeEventListener (" mouseup ", Ġstop Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġidentifier Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġup . fire ( Unit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġelement . addEventListener (" mousedown ", Ġthis :: start Click ) ĊĠĠĠĠĠĠĠ Ġelement . addEventListener (" touch start ", Ġthis :: start Click ) ĊĠĠĠĠĠĠĠ Ġelement . addEventListener (" context menu ", Ġobject Ġ: ĠEvent Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhandle Event ( event : ĠEvent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . stopPropagation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . preventDefault () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġthis . text Ġ= Ġtext ĊĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠRouter . button View ( text : ĠString , Ġinit : ĠButton View . () Ġ-> ĠUnit Ġ= Ġ{}) Ġ= Ġview Ġ{ ĠButton View ( text , Ġinit ) Ġ}