/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 7 - present ĠRobert ĠJar os Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ Ġ* Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ Ġ* ĠSOFTWARE . Ċ Ġ*/ Ċ package Ġpl . tre k soft . k vision . modal Ċ Ċ import Ġcom . github . sn ab bd om . V Node Ċ import Ġpl . tre k soft . k vision . core . Component Ċ import Ġpl . tre k soft . k vision . core . String Bool Pair Ċ import Ġpl . tre k soft . k vision . core . String Pair Ċ import Ġpl . tre k soft . k vision . core . Widget Ċ import Ġpl . tre k soft . k vision . html . Button Ċ import Ġpl . tre k soft . k vision . html . TAG Ċ import Ġpl . tre k soft . k vision . html . Tag Ċ import Ġpl . tre k soft . k vision . panel . Root Ċ import Ġpl . tre k soft . k vision . panel . Simple Panel Ċ import Ġpl . tre k soft . k vision . utils . obj Ċ Ċ /** Ċ Ġ* ĠModal Ġwindow Ġsizes . Ċ Ġ*/ Ċ enum Ġclass ĠModal Size ( val ĠclassName : ĠString ) Ġ{ ĊĠĠĠ ĠL ARGE (" modal - lg "), ĊĠĠĠ ĠSMALL (" modal - sm ") Ċ } Ċ Ċ /** Ċ Ġ* ĠConfigur able Ġmodal Ġwindow Ġbased Ġon ĠBootstrap Ġmodal . Ċ Ġ* Ċ Ġ* Ġ@ constructor Ċ Ġ* Ġ@ param Ġcaption Ġwindow Ġtitle Ċ Ġ* Ġ@ param Ġclose Button Ġdetermines Ġif ĠClose Ġbutton Ġis Ġvisible Ċ Ġ* Ġ@ param Ġsize Ġmodal Ġwindow Ġsize Ċ Ġ* Ġ@ param Ġanimation Ġdetermines Ġif Ġanimations Ġare Ġused Ċ Ġ* Ġ@ param Ġescape Ġdetermines Ġif Ġdialog Ġcan Ġbe Ġclosed Ġwith ĠE sc Ġkey Ċ Ġ* Ġ@ param Ġclasses Ġa Ġset Ġof ĠCSS Ġclass Ġnames Ċ Ġ* Ġ@ param Ġinit Ġan Ġinitializer Ġextension Ġfunction Ċ Ġ*/ Ċ @ Suppress (" Too Many Functions ") Ċ open Ġclass ĠModal ( ĊĠĠĠ Ġcaption : ĠString ? Ġ= Ġnull , Ġclose Button : ĠBoolean Ġ= Ġtrue , ĊĠĠĠ Ġsize : ĠModal Size ? Ġ= Ġnull , Ġanimation : ĠBoolean Ġ= Ġtrue , Ġprivate Ġval Ġescape : ĠBoolean Ġ= Ġtrue , ĊĠĠĠ Ġclasses : ĠSet < String > Ġ= Ġset Of (), Ġinit : Ġ( Modal . () Ġ-> ĠUnit )? Ġ= Ġnull Ċ ) Ġ: ĠSimple Panel ( classes ) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWindow Ġcaption Ġtext . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġcaption ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġcaption Tag . content ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcaption Tag . content Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Header Visibility () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDetermines Ġif ĠClose Ġbutton Ġis Ġvisible . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġclose Button ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġclose Icon . visible ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclose Icon . visible Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Header Visibility () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWindow Ġsize . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġsize ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġdialog . size ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . size Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDetermines Ġif Ġanimations Ġare Ġused . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġanimation Ġby Ġrefresh On Update ( animation ) ĊĊĠĠĠ Ġprivate Ġval Ġdialog Ġ= ĠModal Dialog ( size ) ĊĠĠĠ Ġprivate Ġval Ġheader Ġ= ĠSimple Panel ( set Of (" modal - header ")) ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ suppress ĊĠĠĠĠ Ġ* ĠInternal Ġproperty . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġval Ġclose Icon Ġ= ĠClose Icon () ĊĠĠĠ Ġprivate Ġval Ġcaption Tag Ġ= ĠTag ( TAG . H 4 , Ġcaption , Ġclasses Ġ= Ġset Of (" modal - title ")) ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ suppress ĊĠĠĠĠ Ġ* ĠInternal Ġproperty . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġval Ġbody Ġ= ĠSimple Panel ( set Of (" modal - body ")) ĊĠĠĠ Ġprivate Ġval Ġfooter Ġ= ĠSimple Panel ( set Of (" modal - footer ")) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . hide () ĊĠĠĠĠĠĠĠ Ġthis . role Ġ= Ġ" dialog " ĊĠĠĠĠĠĠĠ Ġthis . add Internal ( dialog ) ĊĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= ĠSimple Panel ( set Of (" modal - content ")) ĊĠĠĠĠĠĠĠ Ġdialog . role Ġ= Ġ" document " ĊĠĠĠĠĠĠĠ Ġdialog . add ( content ) ĊĠĠĠĠĠĠĠ Ġclose Icon . visible Ġ= Ġclose Button ĊĠĠĠĠĠĠĠ Ġclose Icon . set EventListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġheader . add ( close Icon ) ĊĠĠĠĠĠĠĠ Ġheader . add ( caption Tag ) ĊĠĠĠĠĠĠĠ Ġcheck Header Visibility () ĊĠĠĠĠĠĠĠ Ġcontent . add ( header ) ĊĠĠĠĠĠĠĠ Ġcontent . add ( body ) ĊĠĠĠĠĠĠĠ Ġcontent . add ( footer ) ĊĠĠĠĠĠĠĠ Ġval Ġroot Ġ= ĠRoot . getLast Root () ĊĠĠĠĠĠĠĠ Ġif Ġ( root Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" Le aking This ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot . add Modal ( this ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" At Ġleast Ġone ĠRoot Ġobject Ġis Ġrequired Ġto Ġcreate Ġa Ġmodal !") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" Le aking This ") ĊĠĠĠĠĠĠĠ Ġinit ?. invoke ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Header Visibility () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! close Button Ġ&& Ġcaption Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader . hide () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader . show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd ( child : ĠComponent ): ĠSimple Panel Ġ{ ĊĠĠĠĠĠĠĠ Ġbody . add ( child ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd All ( children : ĠList < Component >): ĠSimple Panel Ġ{ ĊĠĠĠĠĠĠĠ Ġbody . addAll ( children ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove ( child : ĠComponent ): ĠSimple Panel Ġ{ ĊĠĠĠĠĠĠĠ Ġbody . remove ( child ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove All (): ĠSimple Panel Ġ{ ĊĠĠĠĠĠĠĠ Ġbody . removeAll () ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Children (): ĠList < Component > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbody . getChildren () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdds Ġgiven Ġbutton Ġto Ġthe Ġbottom Ġsection Ġof Ġdialog Ġwindow . ĊĠĠĠĠ Ġ* Ġ@ param Ġbutton Ġa Ġ[ Button ] Ġcomponent ĊĠĠĠĠ Ġ* Ġ@ return Ġthis Ġmodal ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġadd Button ( button : ĠButton ): ĠModal Ġ{ ĊĠĠĠĠĠĠĠ Ġfooter . add ( button ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemoves Ġgiven Ġbutton Ġfrom Ġthe Ġbottom Ġsection Ġof Ġdialog Ġwindow . ĊĠĠĠĠ Ġ* Ġ@ param Ġbutton Ġa Ġ[ Button ] Ġcomponent ĊĠĠĠĠ Ġ* Ġ@ return Ġthis Ġmodal ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġremove Button ( button : ĠButton ): ĠModal Ġ{ ĊĠĠĠĠĠĠĠ Ġfooter . remove ( button ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemoves Ġall Ġbuttons Ġfrom Ġthe Ġbottom Ġsection Ġof Ġdialog Ġwindow . ĊĠĠĠĠ Ġ* Ġ@ return Ġthis Ġmodal ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġremove All Buttons (): ĠModal Ġ{ ĊĠĠĠĠĠĠĠ Ġfooter . removeAll () ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Sn Attrs (): ĠList < String Pair > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpr Ġ= Ġsuper . get Sn Attrs (). to Mutable List () ĊĠĠĠĠĠĠĠ Ġpr . add (" tab index " Ġto Ġ"- 1 ") ĊĠĠĠĠĠĠĠ Ġreturn Ġpr ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Sn Class (): ĠList < String Bool Pair > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcl Ġ= Ġsuper . get Sn Class (). to Mutable List () ĊĠĠĠĠĠĠĠ Ġcl . add (" modal " Ġto Ġtrue ) ĊĠĠĠĠĠĠĠ Ġif Ġ( animation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcl . add (" fade " Ġto Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcl ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" Unsafe Cast From Dynamic ") ĊĠĠĠ Ġoverride Ġfun Ġafter Insert ( node : ĠV Node ) Ġ{ ĊĠĠĠĠĠĠĠ Ġget Element J Query D ()?. modal ( obj Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkeyboard Ġ= Ġescape ĊĠĠĠĠĠĠĠĠĠĠĠ Ġback drop Ġ= Ġif Ġ( escape ) Ġ" true " Ġelse Ġ" static " ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġthis . getElement J Query ()?. on (" show . bs . modal ", Ġ{ Ġe , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . dispatchEvent (" show Bs Modal ", Ġobj Ġ{ Ġdetail Ġ= Ġe Ġ}) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġthis . getElement J Query ()?. on (" shown . bs . modal ", Ġ{ Ġe , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . dispatchEvent (" shown Bs Modal ", Ġobj Ġ{ Ġdetail Ġ= Ġe Ġ}) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġthis . getElement J Query ()?. on (" hide . bs . modal ", Ġ{ Ġe , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . dispatchEvent (" hide Bs Modal ", Ġobj Ġ{ Ġdetail Ġ= Ġe Ġ}) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġthis . getElement J Query ()?. on (" hidden . bs . modal ", Ġ{ Ġe , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . visible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . dispatchEvent (" hidden Bs Modal ", Ġobj Ġ{ Ġdetail Ġ= Ġe Ġ}) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhide (): ĠWidget Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( visible ) Ġhide Internal () ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . hide () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠToggle Ġmodal Ġwindow Ġvisibility . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġtoggle () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( visible ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide () ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" Unsafe Cast From Dynamic ") ĊĠĠĠ Ġprivate Ġfun Ġshow Internal () Ġ{ ĊĠĠĠĠĠĠĠ Ġget Element J Query D ()?. modal (" show ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" Unsafe Cast From Dynamic ") ĊĠĠĠ Ġprivate Ġfun Ġhide Internal () Ġ{ ĊĠĠĠĠĠĠĠ Ġget Element J Query D ()?. modal (" hide ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠInternal Ġhelper Ġclass Ġfor Ġmodal Ġcontent . Ċ Ġ* Ċ Ġ* Ġ@ constructor Ċ Ġ* Ġ@ param Ġsize Ġmodal Ġwindow Ġsize Ċ Ġ*/ Ċ internal Ġclass ĠModal Dialog ( size : ĠModal Size ?) Ġ: ĠSimple Panel ( set Of (" modal - dialog ")) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠModal Ġwindow Ġsize . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġsize Ġby Ġrefresh On Update ( size ) ĊĊĠĠĠ Ġoverride Ġfun Ġget Sn Class (): ĠList < String Bool Pair > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcl Ġ= Ġsuper . get Sn Class (). to Mutable List () ĊĠĠĠĠĠĠĠ Ġsize ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcl . add ( it . className Ġto Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcl ĊĠĠĠ Ġ} Ċ } Ċ