/* Ċ Ġ* Ġ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 . form . upload Ċ Ċ import Ġorg . w 3 c . files . File Ċ import Ġpl . tre k soft . k vision . core . Container Ċ import Ġpl . tre k soft . k vision . core . String Bool Pair Ċ import Ġpl . tre k soft . k vision . core . Widget Ċ import Ġpl . tre k soft . k vision . form . Field Label Ċ import Ġpl . tre k soft . k vision . form . Invalid Feedback Ċ import Ġpl . tre k soft . k vision . form . K Files FormControl Ċ import Ġpl . tre k soft . k vision . panel . Simple Panel Ċ import Ġpl . tre k soft . k vision . types . K File Ċ import Ġpl . tre k soft . k vision . utils . Sn On Ċ Ċ /** Ċ Ġ* ĠThe Ġform Ġfield Ġfile Ġupload Ġcomponent . Ċ Ġ* Ċ Ġ* Ġ@ constructor Ċ Ġ* Ġ@ param Ġupload Url Ġthe Ġoptional ĠURL Ġfor Ġthe Ġupload Ġprocessing Ġaction Ċ Ġ* Ġ@ param Ġmultiple Ġdetermines Ġif Ġmultiple Ġfile Ġupload Ġis Ġsupported Ċ Ġ* Ġ@ param Ġlabel Ġlabel Ġtext Ġbound Ġto Ġthe Ġinput Ġelement Ċ Ġ* Ġ@ param Ġrich Ġdetermines Ġif Ġ[ label ] Ġcan Ġcontain ĠHTML Ġcode Ċ Ġ*/ Ċ @ Suppress (" Too Many Functions ") Ċ open Ġclass ĠUpload ( ĊĠĠĠ Ġupload Url : ĠString ? Ġ= Ġnull , Ġmultiple : ĠBoolean Ġ= Ġfalse , Ġlabel : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġrich : ĠBoolean Ġ= Ġfalse Ċ ) Ġ: ĠSimple Panel ( set Of (" form - group ")), ĠK Files FormControl Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFile Ġinput Ġvalue . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġvar Ġvalue ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġinput . value ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput . value Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġoptional ĠURL Ġfor Ġthe Ġupload Ġprocessing Ġaction . ĊĠĠĠĠ Ġ* ĠIf Ġnot Ġset Ġthe Ġupload Ġbutton Ġaction Ġwill Ġdefault Ġto Ġform Ġsubmission . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġupload Url ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġinput . upload Url ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput . upload Url Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDetermines Ġif Ġmultiple Ġfile Ġupload Ġis Ġsupported . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġmultiple ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġinput . multiple ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput . multiple Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġextra Ġdata Ġthat Ġwill Ġbe Ġpassed Ġas Ġdata Ġto Ġthe ĠAJAX Ġserver Ġcall Ġvia ĠPOST . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġupload Extra Data ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġinput . upload Extra Data ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput . upload Extra Data Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDetermines Ġif Ġthe Ġexplorer Ġtheme Ġis Ġused . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġexplorer Theme ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġinput . explorer Theme ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput . explorer Theme Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDetermines Ġif Ġthe Ġinput Ġselection Ġis Ġrequired . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġrequired ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġinput . required ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput . required Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDetermines Ġif Ġthe Ġcaption Ġis Ġshown . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġshow Caption ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġinput . show Caption ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput . show Caption Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDetermines Ġif Ġthe Ġpreview Ġis Ġshown . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġshow Preview ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġinput . show Preview ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput . show Preview Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDetermines Ġif Ġthe Ġremove Ġbutton Ġis Ġshown . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġshow Remove ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġinput . show Remove ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput . show Remove Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDetermines Ġif Ġthe Ġupload Ġbutton Ġis Ġshown . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġshow Upload ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġinput . show Upload ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput . show Upload Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDetermines Ġif Ġthe Ġcancel Ġbutton Ġis Ġshown . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġshow Cancel ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġinput . show Cancel ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput . show Cancel Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDetermines Ġif Ġthe Ġfile Ġbrowse Ġbutton Ġis Ġshown . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġshow Browse ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġinput . show Browse ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput . show Browse Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDetermines Ġif Ġthe Ġclick Ġon Ġthe Ġpreview Ġzone Ġopens Ġfile Ġbrowse Ġwindow . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġbrowse On Zone Click ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġinput . browse On Zone Click ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput . browse On Zone Click Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDetermines Ġif Ġthe Ġicon ic Ġpreview Ġis Ġprefer ed . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġprefer Icon ic Preview ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġinput . prefer Icon ic Preview ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput . prefer Icon ic Preview Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAllowed Ġfile Ġtypes . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġallowed File Types ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġinput . allowed File Types ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput . allowed File Types Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAllowed Ġfile Ġextensions . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġallowed File Extensions ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġinput . allowed File Extensions ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput . allowed File Extensions Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDetermines Ġif ĠDrag & Drop Ġzone Ġis Ġenabled . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġdrop Zone Enabled ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġinput . drop Zone Enabled ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput . drop Zone Enabled Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġplaceholder Ġfor Ġthe Ġupload Ġcontrol . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġplaceholder ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġinput . placeholder ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput . placeholder Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġlabel Ġtext Ġbound Ġto Ġthe Ġspinner Ġinput Ġelement . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġlabel ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġf label . content ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf label . content Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDetermines Ġif Ġ[ label ] Ġcan Ġcontain ĠHTML Ġcode . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġrich ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġf label . rich ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf label . rich Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġval Ġid c Ġ= Ġ" kv _ form _ upload _$ counter " ĊĠĠĠ Ġfinal Ġoverride Ġval Ġinput : ĠUpload Input Ġ= ĠUpload Input ( upload Url , Ġmultiple ) ĊĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . id Ġ= Ġid c ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . name Ġ= Ġname ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġfinal Ġoverride Ġval Ġf label : ĠField Label Ġ= ĠField Label ( id c , Ġlabel , Ġrich , Ġset Of (" control - label ")) ĊĠĠĠ Ġfinal Ġoverride Ġval Ġinvalid Feedback : ĠInvalid Feedback Ġ= ĠInvalid Feedback (). apply Ġ{ Ġvisible Ġ= Ġfalse Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" Le aking This ") ĊĠĠĠĠĠĠĠ Ġinput . event Target Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġthis . add Internal ( f label ) ĊĠĠĠĠĠĠĠ Ġthis . add Internal ( input ) ĊĠĠĠĠĠĠĠ Ġthis . add Internal ( invalid Feedback ) ĊĠĠĠĠĠĠĠ Ġcounter ++ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Sn Class (): ĠList < String Bool Pair > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcl Ġ= Ġsuper . get Sn Class (). to Mutable List () ĊĠĠĠĠĠĠĠ Ġif Ġ( validator Error Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcl . add (" text - danger " Ġto Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcl ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠWidget > Ġset EventListener ( block : ĠSn On < T >. () Ġ-> ĠUnit ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinput . set EventListener ( block ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove EventListener ( id : ĠInt ): ĠWidget Ġ{ ĊĠĠĠĠĠĠĠ Ġinput . removeEventListener ( id ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove Event Listeners (): ĠWidget Ġ{ ĊĠĠĠĠĠĠĠ Ġinput . remove Event Listeners () ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetValue AsString (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinput . getValue AsString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġnative ĠJavaScript ĠFile Ġobject . ĊĠĠĠĠ Ġ* Ġ@ param Ġk File ĠK File Ġobject ĊĠĠĠĠ Ġ* Ġ@ return ĠFile Ġobject ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġget Native File ( k File : ĠK File ): ĠFile ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinput . get Native File ( k File ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRe sets Ġthe Ġfile Ġinput Ġcontrol . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġreset Input () Ġ{ ĊĠĠĠĠĠĠĠ Ġinput . reset Input () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClear s Ġthe Ġfile Ġinput Ġcontrol Ġ( including Ġthe Ġnative Ġinput ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġclear Input () Ġ{ ĊĠĠĠĠĠĠĠ Ġinput . clear Input () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTrigger Ġajax Ġupload Ġ( only Ġfor Ġajax Ġmode ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġupload () Ġ{ ĊĠĠĠĠĠĠĠ Ġinput . upload () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCancel Ġan Ġongoing Ġajax Ġupload Ġ( only Ġfor Ġajax Ġmode ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġcancel () Ġ{ ĊĠĠĠĠĠĠĠ Ġinput . cancel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLock s Ġthe Ġfile Ġinput Ġ( dis abling Ġall Ġbuttons Ġexcept Ġa Ġcancel Ġbutton ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġlock () Ġ{ ĊĠĠĠĠĠĠĠ Ġinput . lock () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUn locks Ġthe Ġfile Ġinput . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġunlock () Ġ{ ĊĠĠĠĠĠĠĠ Ġinput . unlock () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfocus () Ġ{ ĊĠĠĠĠĠĠĠ Ġinput . focus () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġblur () Ġ{ ĊĠĠĠĠĠĠĠ Ġinput . blur () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġcounter Ġ= Ġ 0 ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠDSL Ġbuilder Ġextension Ġfunction . Ċ Ġ* Ċ Ġ* ĠIt Ġtakes Ġthe Ġsame Ġparameters Ġas Ġthe Ġconstructor Ġof Ġthe Ġbuilt Ġcomponent . Ċ Ġ*/ Ċ fun ĠContainer . upload ( ĊĠĠĠ Ġupload Url : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġmultiple : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġlabel : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġrich : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġinit : Ġ( Upload . () Ġ-> ĠUnit )? Ġ= Ġnull Ċ ): ĠUpload Ġ{ ĊĠĠĠ Ġval Ġupload Ġ= ĠUpload ( upload Url , Ġmultiple , Ġlabel , Ġrich ). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ?. invoke ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġthis . add ( upload ) ĊĠĠĠ Ġreturn Ġupload Ċ } Ċ