/* Ċ Ġ* Ġ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 . ons enu i . core Ċ Ċ import Ġcom . github . sn ab bd om . V Node Ċ import Ġio . k vision . core . Attribute Set Builder Ċ import Ġio . k vision . core . Component Ċ import Ġio . k vision . core . Container Ċ import Ġio . k vision . html . Span Ċ import Ġio . k vision . ons enu i . Back Button Event Ċ import Ġio . k vision . ons enu i . dialog . Dialog Ċ import Ġio . k vision . ons enu i . splitter . Splitter Content Ċ import Ġio . k vision . ons enu i . splitter . Splitter Side Ċ import Ġio . k vision . ons enu i . tab bar . Tab Ċ import Ġio . k vision . ons enu i . toolbar . Toolbar Ċ import Ġio . k vision . panel . Root Ċ import Ġio . k vision . panel . Simple Panel Ċ import Ġio . k vision . utils . obj Ċ import Ġkotlin . collections . set Ċ Ċ /** Ċ Ġ* ĠA Ġpage Ġcomponent . Ċ Ġ* Ċ Ġ* Ġ@ constructor ĠCreates Ġa Ġpage Ġcomponent . Ċ Ġ* Ġ@ param ĠclassName ĠCSS Ġclass Ġnames Ċ Ġ* Ġ@ param Ġinit Ġan Ġinitializer Ġextension Ġfunction Ċ Ġ*/ Ċ @ Suppress (" Le aking This ") Ċ open Ġclass ĠPage ( className : ĠString ? Ġ= Ġnull , Ġinit : Ġ( Page . () Ġ-> ĠUnit )? Ġ= Ġnull ) Ġ: ĊĠĠĠ ĠSimple Panel (( className ?. let Ġ{ Ġ"$ it Ġ" Ġ} Ġ?: Ġ"") Ġ+ Ġ" page ") Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġpage Ġtoolbar . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġtoolbar Panel : ĠToolbar ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue ?. parent Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġpage Ġbackground . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġbackground Panel Ġ= ĠSimple Panel (" page __ background ") ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġpage Ġcontent . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġcontent Panel Ġ= ĠSimple Panel (" page __ content ") ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFixed Ġcontent . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġfixed Panel Ġ= ĠSpan () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġmodifier Ġattribute Ġto Ġspecify Ġcustom Ġstyles . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġmodifier : ĠString ? Ġby Ġrefresh On Update () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġdynamic Ġparameter Ġobject Ġpassed Ġto Ġthe Ġpage Ġwhen Ġpushed Ġto Ġthe Ġstack . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġdata : Ġdynamic ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġget Element ()?. as Dynamic ()?. data ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIn finite Ġscroll Ġevent Ġlistener Ġfunction . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġvar Ġon Infinite Scroll Callback : Ġ(( () Ġ-> ĠUnit ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDevice Ġback Ġbutton Ġevent Ġlistener Ġfunction . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġvar Ġon Device Back Button Callback : Ġ(( Back Button Event ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġbackground Panel . parent Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġcontent Panel . parent Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġfixed Panel . parent Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġinit ?. invoke ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrender (): ĠV Node Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtoolbar Arr Ġ= Ġtoolbar Panel ?. let Ġ{ ĠarrayOf ( it . render V Node ()) Ġ} Ġ?: Ġempty Array () ĊĠĠĠĠĠĠĠ Ġreturn Ġrender ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ons - page ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoolbar Arr Ġ+ ĠarrayOf ( background Panel . render V Node (), Ġcontent Panel . render V Node (), Ġfixed Panel . render V Node ()) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbuild Attribute Set ( attribute Set Builder : ĠAttributeSet Builder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . build Attribute Set ( attribute Set Builder ) ĊĠĠĠĠĠĠĠ Ġmodifier ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattribute Set Builder . add (" modifier ", Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġafter Insert ( node : ĠV Node ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( on Infinite Scroll Callback Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Element ()?. as Dynamic ()?. on Infinite Scroll Ġ= Ġon Infinite Scroll Callback ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( on Device Back Button Callback Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Element ()?. as Dynamic ()?. on Device Back Button Ġ= Ġon Device Back Button Callback ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd ( child : ĠComponent ): ĠPage Ġ{ ĊĠĠĠĠĠĠĠ Ġcontent Panel . add ( child ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd ( position : ĠInt , Ġchild : ĠComponent ): ĠPage Ġ{ ĊĠĠĠĠĠĠĠ Ġcontent Panel . add ( position , Ġchild ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd All ( children : ĠList < Component >): ĠPage Ġ{ ĊĠĠĠĠĠĠĠ Ġcontent Panel . addAll ( children ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove ( child : ĠComponent ): ĠPage Ġ{ ĊĠĠĠĠĠĠĠ Ġcontent Panel . remove ( child ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove At ( position : ĠInt ): ĠPage Ġ{ ĊĠĠĠĠĠĠĠ Ġcontent Panel . remove At ( position ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove All (): ĠPage Ġ{ ĊĠĠĠĠĠĠĠ Ġcontent Panel . removeAll () ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdispose All (): ĠPage Ġ{ ĊĠĠĠĠĠĠĠ Ġcontent Panel . dispose All () ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Children (): ĠList < Component > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcontent Panel . getChildren () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDSL Ġbuilder Ġfunction Ġto Ġadd Ġfixed Ġelements Ġto Ġthe Ġpage . ĊĠĠĠĠ Ġ* Ġ@ param Ġbuilder Ġa Ġbuilder Ġextension Ġfunction ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġfixed ( builder : ĠContainer . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfixed Panel . builder () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġinfinite Ġscroll Ġevent Ġlistener . ĊĠĠĠĠ Ġ* Ġ@ param Ġcallback Ġan Ġevent Ġlistener ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġon Infinite Scroll ( callback : Ġ( done : Ġ() Ġ-> ĠUnit ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Infinite Scroll Callback Ġ= Ġcallback ĊĠĠĠĠĠĠĠ Ġget Element ()?. as Dynamic ()?. on Infinite Scroll Ġ= Ġcallback ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClear s Ġinfinite Ġscroll Ġevent Ġlistener . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġon Infinite Scroll Clear () Ġ{ ĊĠĠĠĠĠĠĠ Ġon Infinite Scroll Callback Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġget Element ()?. as Dynamic ()?. on Infinite Scroll Ġ= Ġundefined ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġdevice Ġback Ġbutton Ġevent Ġlistener . ĊĠĠĠĠ Ġ* Ġ@ param Ġcallback Ġan Ġevent Ġlistener ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġon Device Back Button ( callback : Ġ( event : ĠBack Button Event ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Device Back Button Callback Ġ= Ġcallback ĊĠĠĠĠĠĠĠ Ġget Element ()?. as Dynamic ()?. on Device Back Button Ġ= Ġcallback ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClear s Ġdevice Ġback Ġbutton Ġevent Ġlistener . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġon Device Back Button Clear () Ġ{ ĊĠĠĠĠĠĠĠ Ġon Device Back Button Callback Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġget Element ()?. as Dynamic ()?. on Device Back Button Ġ= Ġundefined ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" Unsafe Cast From Dynamic ") ĊĠĠĠ Ġinternal Ġfun Ġdispatch Hide Event () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . dispatchEvent (" hide ", Ġobj Ġ{ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" Unsafe Cast From Dynamic ") ĊĠĠĠ Ġinternal Ġfun Ġdispatch Destroy Event () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . dispatchEvent (" destroy ", Ġobj Ġ{ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdispose () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . dispose () ĊĠĠĠĠĠĠĠ Ġtoolbar Panel ?. dispose () ĊĠĠĠĠĠĠĠ Ġbackground Panel . dispose () ĊĠĠĠĠĠĠĠ Ġcontent Panel . dispose () ĊĠĠĠĠĠĠĠ Ġfixed Panel . dispose () ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠDSL Ġbuilder Ġextension Ġfunction . Ċ Ġ* Ċ Ġ* ĠIt Ġtakes Ġthe Ġsame Ġparameters Ġas Ġthe Ġconstructor Ġof Ġthe Ġbuilt Ġcomponent . Ċ Ġ*/ Ċ fun ĠRoot . page ( ĊĠĠĠ ĠclassName : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġinit : Ġ( Page . () Ġ-> ĠUnit )? Ġ= Ġnull Ċ ): ĠPage Ġ{ ĊĠĠĠ Ġval Ġpage Ġ= ĠPage ( className , Ġinit ) ĊĠĠĠ Ġthis . add ( page ) ĊĠĠĠ Ġreturn Ġpage Ċ } Ċ Ċ /** Ċ Ġ* ĠDSL Ġbuilder Ġextension Ġfunction . Ċ Ġ* Ċ Ġ* ĠIt Ġtakes Ġthe Ġsame Ġparameters Ġas Ġthe Ġconstructor Ġof Ġthe Ġbuilt Ġcomponent . Ċ Ġ*/ Ċ fun ĠNavigator . page ( ĊĠĠĠ Ġpage Id : ĠString ? Ġ= Ġnull , ĊĠĠĠ ĠclassName : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġinit : Ġ( Page . () Ġ-> ĠUnit )? Ġ= Ġnull Ċ ): ĠPage Ġ{ ĊĠĠĠ Ġval Ġpage Ġ= ĠPage ( className , Ġinit ) ĊĠĠĠ Ġif Ġ( page Id Ġ== Ġnull Ġ|| Ġthis . getChildren (). isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . add ( page ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( page Id Ġ!= Ġnull ) Ġthis . pages Map [ page Id ] Ġ= Ġpage ĊĠĠĠ Ġreturn Ġpage Ċ } Ċ Ċ /** Ċ Ġ* ĠDSL Ġbuilder Ġextension Ġfunction . Ċ Ġ* Ċ Ġ* ĠIt Ġtakes Ġthe Ġsame Ġparameters Ġas Ġthe Ġconstructor Ġof Ġthe Ġbuilt Ġcomponent . Ċ Ġ*/ Ċ fun ĠSplit ter Side . page ( ĊĠĠĠ Ġpage Id : ĠString ? Ġ= Ġnull , ĊĠĠĠ ĠclassName : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġinit : Ġ( Page . () Ġ-> ĠUnit )? Ġ= Ġnull Ċ ): ĠPage Ġ{ ĊĠĠĠ Ġval Ġpage Ġ= ĠPage ( className , Ġinit ) ĊĠĠĠ Ġif Ġ( page Id Ġ== Ġnull Ġ|| Ġthis . getChildren (). isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . add ( page ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( page Id Ġ!= Ġnull ) Ġthis . pages Map [ page Id ] Ġ= Ġpage ĊĠĠĠ Ġreturn Ġpage Ċ } Ċ Ċ /** Ċ Ġ* ĠDSL Ġbuilder Ġextension Ġfunction . Ċ Ġ* Ċ Ġ* ĠIt Ġtakes Ġthe Ġsame Ġparameters Ġas Ġthe Ġconstructor Ġof Ġthe Ġbuilt Ġcomponent . Ċ Ġ*/ Ċ fun ĠSplit ter Content . page ( ĊĠĠĠ Ġpage Id : ĠString ? Ġ= Ġnull , ĊĠĠĠ ĠclassName : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġinit : Ġ( Page . () Ġ-> ĠUnit )? Ġ= Ġnull Ċ ): ĠPage Ġ{ ĊĠĠĠ Ġval Ġpage Ġ= ĠPage ( className , Ġinit ) ĊĠĠĠ Ġif Ġ( page Id Ġ== Ġnull Ġ|| Ġthis . getChildren (). isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . add ( page ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( page Id Ġ!= Ġnull ) Ġthis . pages Map [ page Id ] Ġ= Ġpage ĊĠĠĠ Ġreturn Ġpage Ċ } Ċ Ċ /** Ċ Ġ* ĠDSL Ġbuilder Ġextension Ġfunction . Ċ Ġ* Ċ Ġ* ĠIt Ġtakes Ġthe Ġsame Ġparameters Ġas Ġthe Ġconstructor Ġof Ġthe Ġbuilt Ġcomponent . Ċ Ġ*/ Ċ fun ĠTab . page ( ĊĠĠĠ ĠclassName : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġinit : Ġ( Page . () Ġ-> ĠUnit )? Ġ= Ġnull Ċ ): ĠPage Ġ{ ĊĠĠĠ Ġval Ġpage Ġ= ĠPage ( className , Ġinit ) ĊĠĠĠ Ġthis . add ( page ) ĊĠĠĠ Ġreturn Ġpage Ċ } Ċ Ċ /** Ċ Ġ* ĠDSL Ġbuilder Ġextension Ġfunction . Ċ Ġ* Ċ Ġ* ĠIt Ġtakes Ġthe Ġsame Ġparameters Ġas Ġthe Ġconstructor Ġof Ġthe Ġbuilt Ġcomponent . Ċ Ġ*/ Ċ fun ĠDialog . page ( ĊĠĠĠ ĠclassName : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġinit : Ġ( Page . () Ġ-> ĠUnit )? Ġ= Ġnull Ċ ): ĠPage Ġ{ ĊĠĠĠ Ġval Ġpage Ġ= ĠPage ( className , Ġinit ) ĊĠĠĠ Ġthis . add ( page ) ĊĠĠĠ Ġreturn Ġpage Ċ } Ċ