package Ġio . frame d . framework . view Ċ Ċ import Ġde . west erm ann . k observe . property . property Ċ import Ġio . frame d . framework . pict o gram . Context Event Ċ import Ġorg . w 3 c . dom . HTML Div Element Ċ import Ġorg . w 3 c . dom . events . Keyboard Event Ċ import Ġkotlinx . browser . window Ċ import Ġkotlin . math . min Ċ Ċ /** Ċ Ġ* ĠRepresents Ġa Ġon ContextMenu Ġmenu Ġwith Ġoptional Ġheader . Ċ Ġ* Ċ Ġ* Ġ@ author Ġl ars Ċ Ġ*/ Ċ class ĠContext Menu Ġ: ĠView < HTML Div Element >(" div ") Ġ{ ĊĠĠĠ Ġprivate Ġval ĠlistView Ġ= ĠListView () ĊĊĠĠĠ Ġprivate Ġval Ġtitle View Ġ= ĠTextView (). also Ġ{ ĊĠĠĠĠĠĠĠ Ġit . display Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlast Event : ĠContext Event ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHeader Ġcontent Ġof Ġthe Ġcontent Ġmenu . ĠBl ank Ġtitle Ġwill Ġremove Ġthe Ġheader . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġtitle : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtitle View . text ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle View . text Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle View . display Ġ= Ġvalue . isNotBlank () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Property . invalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġtitle Property Ġ= Ġproperty ( this :: title ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġan Ġitem Ġto Ġthe Ġon ContextMenu Ġmenu . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġicon ĠIcon Ġfor Ġthe Ġmenu Ġentry . Ġ` null ` Ġmeans Ġno Ġicon . ĊĠĠĠĠ Ġ* Ġ@ param Ġname ĠName Ġfor Ġthe Ġmenu Ġentry . ĊĠĠĠĠ Ġ* Ġ@ param Ġcallback ĠClick Ġcallback Ġis Ġcalled Ġwhen Ġentry Ġis Ġselected . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Item ( icon : ĠIcon ?, Ġname : ĠString , Ġcallback : Ġ( Context Event ) Ġ-> ĠUnit ): ĠListView Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġl Ġ= ĠListView () ĊĠĠĠĠĠĠĠ Ġl Ġ+= ĠIcon View ( icon ) ĊĠĠĠĠĠĠĠ Ġl Ġ+= ĠTextView ( name ) ĊĠĠĠĠĠĠĠ Ġl . onClick Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ( last Event ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠlistView Ġ+= Ġl ĊĠĠĠĠĠĠĠ Ġreturn Ġl ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval ĠisEmpty : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠlistView . isEmpty ĊĊĠĠĠ Ġval Ġkey Listener Ġ= Ġ{ Ġevent : ĠKeyboard Event Ġ-> ĊĠĠĠĠĠĠĠ Ġwhen Ġ( event . keyCode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 7 Ġ-> Ġclose () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOpen Ġthe Ġcontext Ġmenu Ġat Ġthe Ġgiven Ġposition , Ġrelative Ġto Ġthe Ġbody . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġopen ( event : ĠContext Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlast Event Ġ= Ġevent ĊĠĠĠĠĠĠĠ ĠRoot Ġ+= Ġthis ĊĊĠĠĠĠĠĠĠ Ġval Ġleft Ġ= Ġmin ( window . innerWidth Ġ- ĠlistView . client Width Ġ- Ġ 8 . 0 , Ġevent . position . x ) ĊĠĠĠĠĠĠĠ Ġval Ġtop Ġ= Ġmin ( window . innerHeight Ġ- ĠlistView . client Height Ġ- Ġ 8 . 0 , Ġevent . position . y ) ĊĊĠĠĠĠĠĠĠ ĠlistView . left Ġ= Ġleft ĊĠĠĠĠĠĠĠ ĠlistView . top Ġ= Ġtop ĊĊĠĠĠĠĠĠĠ ĠRoot . on KeyDown Ġ+= Ġkey Listener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClose Ġthe Ġon ContextMenu Ġmenu . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠ ĠRoot Ġ-= Ġthis ĊĠĠĠĠĠĠĠ ĠRoot . on KeyDown Ġ-= Ġkey Listener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠlistView Ġ+= Ġtitle View ĊĊĠĠĠĠĠĠĠ Ġhtml . appendChild ( list View . html ) ĊĊĠĠĠĠĠĠĠ ĠonClick Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . stopPropagation () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclose () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġon Context Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . stopPropagation () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclose () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠCreate Ġa Ġnew Ġcontext Ġmenu . Ċ Ġ* Ċ Ġ* Ġ@ param Ġinit ĠBuilder Ġfor Ġthe Ġnew Ġcontext Ġmenu . Ċ Ġ* Ċ Ġ* Ġ@ return ĠThe Ġnew Ġcontext Ġmenu . Ċ Ġ*/ Ċ fun Ġcontext Menu ( init : ĠContext Menu . () Ġ-> ĠUnit ): ĠContext Menu Ġ= ĠContext Menu (). also ( init ) Ċ