/* Ċ Ġ* Ġ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 Ġio . k vision . html Ċ Ċ import Ġio . k vision . sn ab bd om . V Node Ċ import Ġio . k vision . KV Manager Ċ import Ġio . k vision . core . Class Set Builder Ċ import Ġio . k vision . core . Container Ċ import Ġio . k vision . core . Css Class Ċ import Ġio . k vision . i 1 8 n . I 1 8 n Ċ import Ġio . k vision . panel . Simple Panel Ċ import Ġorg . w 3 c . dom . Element Ċ Ċ /** Ċ Ġ* ĠHTML Ġtags . Ċ Ġ*/ Ċ @ Suppress (" Enum Naming ") Ċ enum Ġclass ĠTAG ( internal Ġval ĠtagName : ĠString ) Ġ{ ĊĠĠĠ ĠA (" a "), ĊĠĠĠ ĠAB BR (" abbr "), ĊĠĠĠ ĠADDRESS (" address "), ĊĠĠĠ ĠARE A (" area "), ĊĠĠĠ ĠA RT IC LE (" article "), ĊĠĠĠ ĠAS IDE (" aside "), ĊĠĠĠ ĠA UDIO (" audio "), ĊĠĠĠ ĠB (" b "), ĊĠĠĠ ĠBASE (" base "), ĊĠĠĠ ĠB DI (" b di "), ĊĠĠĠ ĠB DO (" b do "), ĊĠĠĠ ĠBLOCK QUOTE (" blockquote "), ĊĠĠĠ ĠB ODY (" body "), ĊĠĠĠ ĠBR (" br "), ĊĠĠĠ ĠBUTTON (" button "), ĊĠĠĠ ĠCAN V AS (" canvas "), ĊĠĠĠ ĠCAP TION (" caption "), ĊĠĠĠ ĠC ITE (" cite "), ĊĠĠĠ ĠCODE (" code "), ĊĠĠĠ ĠCOL (" col "), ĊĠĠĠ ĠCOL GROUP (" colgroup "), ĊĠĠĠ ĠDATA (" data "), ĊĠĠĠ ĠDAT ALIST (" datal ist "), ĊĠĠĠ ĠDD (" dd "), ĊĠĠĠ ĠDEL (" del "), ĊĠĠĠ ĠDET AIL S (" details "), ĊĠĠĠ ĠD FN (" dfn "), ĊĠĠĠ ĠDIALOG (" dialog "), ĊĠĠĠ ĠDIV (" div "), ĊĠĠĠ ĠDL (" dl "), ĊĠĠĠ ĠDT (" dt "), ĊĠĠĠ ĠEM (" em "), ĊĠĠĠ ĠE MB ED (" embed "), ĊĠĠĠ ĠFIELD SET (" fieldset "), ĊĠĠĠ ĠF IG CAP TION (" figcaption "), ĊĠĠĠ ĠF IG URE (" figure "), ĊĠĠĠ ĠFO OTER (" footer "), ĊĠĠĠ ĠFORM (" form "), ĊĠĠĠ ĠH 1 (" h 1 "), ĊĠĠĠ ĠH 2 (" h 2 "), ĊĠĠĠ ĠH 3 (" h 3 "), ĊĠĠĠ ĠH 4 (" h 4 "), ĊĠĠĠ ĠH 5 (" h 5 "), ĊĠĠĠ ĠH 6 (" h 6 "), ĊĠĠĠ ĠHEAD (" head "), ĊĠĠĠ ĠHEADER (" header "), ĊĠĠĠ ĠH GROUP (" h group "), ĊĠĠĠ ĠHR (" hr "), ĊĠĠĠ ĠHTML (" html "), ĊĠĠĠ ĠI (" i "), ĊĠĠĠ ĠI FRAME (" iframe "), ĊĠĠĠ ĠI MG (" img "), ĊĠĠĠ ĠINPUT (" input "), ĊĠĠĠ ĠIN S (" ins "), ĊĠĠĠ ĠK BD (" kbd "), ĊĠĠĠ ĠLABEL (" label "), ĊĠĠĠ ĠLE G END (" legend "), ĊĠĠĠ ĠLI (" li "), ĊĠĠĠ ĠLINK (" link "), ĊĠĠĠ ĠMAIN (" main "), ĊĠĠĠ ĠMAP (" map "), ĊĠĠĠ ĠMARK (" mark "), ĊĠĠĠ ĠM ATH (" math "), ĊĠĠĠ ĠMENU (" menu "), ĊĠĠĠ ĠMENU ITEM (" menu item "), ĊĠĠĠ ĠMETA (" meta "), ĊĠĠĠ ĠMET ER (" meter "), ĊĠĠĠ ĠNAV (" nav "), ĊĠĠĠ ĠNO SCRIPT (" noscript "), ĊĠĠĠ ĠOBJECT (" object "), ĊĠĠĠ ĠO L (" ol "), ĊĠĠĠ ĠOPT GROUP (" opt group "), ĊĠĠĠ ĠOPTION (" option "), ĊĠĠĠ ĠOUTPUT (" output "), ĊĠĠĠ ĠP (" p "), ĊĠĠĠ ĠPARAM (" param "), ĊĠĠĠ ĠP ICT URE (" picture "), ĊĠĠĠ ĠPRE (" pre "), ĊĠĠĠ ĠPROG RESS (" progress "), ĊĠĠĠ ĠQ (" q "), ĊĠĠĠ ĠRB (" rb "), ĊĠĠĠ ĠRP (" rp "), ĊĠĠĠ ĠRT (" rt "), ĊĠĠĠ ĠRTC (" rtc "), ĊĠĠĠ ĠR UBY (" ruby "), ĊĠĠĠ ĠS (" s "), ĊĠĠĠ ĠS AMP (" samp "), ĊĠĠĠ ĠS CRIPT (" script "), ĊĠĠĠ ĠSECTION (" section "), ĊĠĠĠ ĠSELECT (" select "), ĊĠĠĠ ĠSLOT (" slot "), ĊĠĠĠ ĠSMALL (" small "), ĊĠĠĠ ĠSOURCE (" source "), ĊĠĠĠ ĠSP AN (" span "), ĊĠĠĠ ĠSTR ONG (" strong "), ĊĠĠĠ ĠSTYLE (" style "), ĊĠĠĠ ĠSUB (" sub "), ĊĠĠĠ ĠSUMMARY (" summary "), ĊĠĠĠ ĠSUP (" sup "), ĊĠĠĠ ĠSVG (" svg "), ĊĠĠĠ ĠTABLE (" table "), ĊĠĠĠ ĠT BODY (" tbody "), ĊĠĠĠ ĠTD (" td "), ĊĠĠĠ ĠTEMPLATE (" template "), ĊĠĠĠ ĠTEXT AREA (" textarea "), ĊĠĠĠ ĠT FO OT (" tfoot "), ĊĠĠĠ ĠTH (" th "), ĊĠĠĠ ĠTHE AD (" thead "), ĊĠĠĠ ĠTIME (" time "), ĊĠĠĠ ĠTITLE (" title "), ĊĠĠĠ ĠTR (" tr "), ĊĠĠĠ ĠTR ACK (" track "), ĊĠĠĠ ĠU (" u "), ĊĠĠĠ ĠU L (" ul "), ĊĠĠĠ ĠVAR (" var "), ĊĠĠĠ ĠV IDE O (" video "), ĊĠĠĠ ĠW BR (" w br ") Ċ } Ċ Ċ /** Ċ Ġ* ĠCSS Ġalign Ġattributes . Ċ Ġ*/ Ċ enum Ġclass ĠAlign ( override Ġval ĠclassName : ĠString ) Ġ: ĠCss Class Ġ{ ĊĠĠĠ ĠLEFT (" text - start "), ĊĠĠĠ ĠC ENTER (" text - center "), ĊĠĠĠ ĠRIGHT (" text - end "), ĊĊĠĠĠ Ġ@ Deprecated (" Usage Ġis Ġdis cour aged ", ĠReplace With (" LEFT ")) ĊĠĠĠ ĠJ UST IFY (" text - justify "), ĊĠĠĠ ĠNOWRAP (" text - nowrap ") Ċ } Ċ Ċ /** Ċ Ġ* ĠHTML Ġtag Ġcomponent . Ċ Ġ* Ċ Ġ* Ġ@ constructor Ċ Ġ* Ġ@ param Ġtype Ġtag Ġtype Ċ Ġ* Ġ@ param Ġcontent Ġcontent Ġtext Ġof Ġthe Ġtag Ċ Ġ* Ġ@ param Ġrich Ġdetermines Ġif Ġ[ content ] Ġcan Ġcontain ĠHTML Ġcode Ċ Ġ* Ġ@ param Ġalign Ġcontent Ġalign Ċ Ġ* Ġ@ param ĠclassName ĠCSS Ġclass Ġnames Ċ Ġ* Ġ@ param Ġattributes Ġa Ġmap Ġof Ġadditional Ġattributes Ċ Ġ* Ġ@ param Ġinit Ġan Ġinitializer Ġextension Ġfunction Ċ Ġ*/ Ċ @ Tag Marker Ċ open Ġclass ĠTag ( ĊĠĠĠ Ġtype : ĠTAG , Ġcontent : ĠString ? Ġ= Ġnull , Ġrich : ĠBoolean Ġ= Ġfalse , Ġalign : ĠAlign ? Ġ= Ġnull , ĊĠĠĠ ĠclassName : ĠString ? Ġ= Ġnull , Ġattributes : ĠMap < String , ĠString >? Ġ= Ġnull , ĊĠĠĠ Ġinit : Ġ( Tag . () Ġ-> ĠUnit )? Ġ= Ġnull Ċ ) Ġ: ĠSimple Panel ( className ), ĠTemplate Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTag Ġtype . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġtype Ġby Ġrefresh On Update ( type ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠText Ġcontent Ġof Ġthe Ġtag . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġvar Ġcontent Ġby Ġrefresh On Update ( content ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDetermines Ġif Ġ[ content ] Ġcan Ġcontain ĠHTML Ġcode . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġvar Ġrich Ġby Ġrefresh On Update ( rich ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠText Ġalign . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġalign Ġby Ġrefresh On Update ( align ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ suppress ĊĠĠĠĠ Ġ* ĠInternal Ġproperty ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġvar Ġtemplate Data Obj : ĠAny ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHandle bars Ġtemplate . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġvar Ġtemplate : Ġ(( Any ?) Ġ-> ĠString )? Ġby Ġrefresh On Update () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHandle bars Ġtemplates Ġfor Ġi 1 8 n . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġvar Ġtemplates : ĠMap < String , Ġ( Any ?) Ġ-> ĠString > Ġby Ġrefresh On Update ( map Of ()) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( attributes Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . attributes Ġ== Ġnull ) Ġthis . attributes Ġ= Ġmutable Map Of () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . attributes !! Ġ+= Ġattributes ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" Le aking This ") ĊĠĠĠĠĠĠĠ Ġinit ?. invoke ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrender (): ĠV Node Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( template Data Obj Ġ!= Ġnull Ġ&& Ġlast Language Ġ!= Ġnull Ġ&& Ġlast Language Ġ!= ĠI 1 8 n . language ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Root ()?. let Ġ{ Ġit . single Render ers ++ Ġ} Ġ// Ġdisable Ġrendering Ġwithout Ġre - rendering ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemplate Data Ġ= Ġtemplate Data Obj ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Root ()?. let Ġ{ Ġit . single Render ers -- Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( content Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtranslated Content Ġ= Ġcontent ?. let Ġ{ Ġtranslate ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rich ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype . tagName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( KV Manager . virtual ize ("< span Ġstyle =\" display : Ġcontents ;\ ">$ translated Content </ span > ")) Ġ+ Ġchildren V Nodes () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender ( type . tagName , Ġchildren V Nodes () Ġ+ ĠarrayOf ( translated Content )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrender ( type . tagName , Ġchildren V Nodes ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfocus () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( getElement ()?. unsafe Cast < Element >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . getAttribute (" tab index ") Ġ== Ġundefined ĊĠĠĠĠĠĠĠ Ġ) Ġget Element ()?. unsafe Cast < Element >() ?. setAttribute (" tab index ", Ġ"- 1 ") ĊĠĠĠĠĠĠĠ Ġsuper . focus () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbuild Class Set ( class Set Builder : ĠClass Set Builder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . build Class Set ( class Set Builder ) ĊĠĠĠĠĠĠĠ Ġclass Set Builder . add ( align ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġoperator Ġfun ĠString . unary Plus () Ġ{ ĊĠĠĠĠĠĠĠ Ġadd ( Text Node ( this , Ġrich )) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠDSL Ġbuilder Ġextension Ġfunction . Ċ Ġ* Ċ Ġ* ĠIt Ġtakes Ġthe Ġsame Ġparameters Ġas Ġthe Ġconstructor Ġof Ġthe Ġbuilt Ġcomponent . Ċ Ġ*/ Ċ fun ĠContainer . tag ( ĊĠĠĠ Ġtype : ĠTAG , Ġcontent : ĠString ? Ġ= Ġnull , Ġrich : ĠBoolean Ġ= Ġfalse , Ġalign : ĠAlign ? Ġ= Ġnull , ĊĠĠĠ ĠclassName : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġattributes : ĠMap < String , ĠString >? Ġ= Ġnull , ĊĠĠĠ Ġinit : Ġ( Tag . () Ġ-> ĠUnit )? Ġ= Ġnull Ċ ): ĠTag Ġ{ ĊĠĠĠ Ġval Ġtag Ġ= ĠTag ( type , Ġcontent , Ġrich , Ġalign , ĠclassName , Ġattributes , Ġinit ) ĊĠĠĠ Ġthis . add ( tag ) ĊĠĠĠ Ġreturn Ġtag Ċ } Ċ