package Ġio . frame d . framework . view Ċ Ċ import Ġde . west erm ann . k observe . Property Ċ import Ġde . west erm ann . k observe . event . EventHandler Ċ import Ġio . frame d . framework . util . bind Ċ import Ġorg . w 3 c . dom . HTML Span Element Ċ import Ġorg . w 3 c . dom . events . Event Ċ import Ġorg . w 3 c . dom . events . EventListener Ċ import Ġorg . w 3 c . dom . events . Focus Event Ċ import Ġorg . w 3 c . dom . events . Keyboard Event Ċ Ċ /** Ċ Ġ* ĠRepresents Ġa Ġhtml Ġspan Ġelement . Ċ Ġ* Ċ Ġ* Ġ@ author Ġl ars Ċ Ġ*/ Ċ class ĠTextView ( ĊĠĠĠĠĠĠĠ Ġvalue : ĠString Ġ= Ġ"" Ċ ) Ġ: ĠView < HTML Span Element >(" span ") Ġ{ ĊĊĠĠĠ Ġconstructor ( text : ĠProperty < String >) Ġ: Ġthis () Ġ{ ĊĠĠĠĠĠĠĠ Ġbind ( text ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠText Ġto Ġdisplay . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġtext : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġhtml . textContent Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhtml . textContent Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġcontent Ġto Ġeditable . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġcontent Editable : ĠBoolean Ġby ĠAttribute Delegate ( Boolean :: class , Ġfalse ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIf Ġthe Ġcontent Ġis Ġeditable , Ġprevents Ġthe Ġinsertion Ġof Ġline Ġbreaks . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġsingle Line Property Ġby ĠClass Delegate () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIf Ġthe Ġcontent Ġis Ġeditable , Ġprevents Ġthe Ġinsertion Ġof Ġline Ġbreaks . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġsingle Line Ġby Ġsingle Line Property ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠF ires Ġon Ġevery Ġuser Ġchange Ġto Ġthe Ġcontent ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval ĠonChange Ġ= ĠEventHandler < String >() ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠF ires Ġon Ġfocus Ġleave . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġon Focus Leave Ġ= ĠEventHandler < Focus Event >() ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠF ires Ġon Ġfocus Ġgain . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġon Focus Enter Ġ= ĠEventHandler < Focus Event >() ĊĊĊĠĠĠ Ġfun Ġbind ( property : ĠProperty < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġtext Ġ= Ġproperty . get () ĊĠĠĠĠĠĠĠ ĠonChange Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproperty . set ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġon Focus Leave Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproperty . set ( text . trim ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġproperty . onChange Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Ġ= Ġproperty . get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( text Ġ!= Ġnew ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġnew ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġtext Ġ= Ġvalue ĊĊĠĠĠĠĠĠĠ Ġval Ġchange Listener Ġ= Ġobject Ġ: ĠEvent Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhandle Event ( event : ĠEvent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonChange . emit ( text ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( event Ġas ? ĠKeyboard Event )?. let Ġ{ Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( e . keyCode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 3 , Ġ 2 7 Ġ-> Ġblur () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġhtml . addEventListener (" on change ", Ġchange Listener ) ĊĠĠĠĠĠĠĠ Ġhtml . addEventListener (" keypress ", Ġchange Listener ) ĊĊĠĠĠĠĠĠĠ Ġon Focus Enter . bind ( html , Ġ" focus ") ĊĠĠĠĠĠĠĠ Ġon Focus Leave . bind ( html , Ġ" blur ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠView Collection < in ĠTextView , Ġ* >. textView ( text : ĠString Ġ= Ġ"", Ġinit : ĠTextView . () Ġ-> ĠUnit Ġ= Ġ{}) Ġ= ĊĠĠĠĠĠĠĠ ĠTextView ( text ). also ( this :: append ). also ( init ) Ċ Ċ fun ĠView Collection < in ĠTextView , Ġ* >. textView ( text : ĠProperty < String >, Ġinit : ĠTextView . () Ġ-> ĠUnit Ġ= Ġ{}) Ġ= ĊĠĠĠĠĠĠĠ ĠTextView ( text ). also ( this :: append ). also ( init ) Ċ