import Ġcom . yahoo . behavior graph . Extent Ċ import Ġcom . yahoo . behavior graph . Graph Ċ import Ġcom . yahoo . behavior graph . Moment Ċ import Ġcom . yahoo . behavior graph . State Ċ Ċ // Ġtag :: login _ enable _ extent [] Ċ class ĠLogin Extent ( graph : ĠGraph ) Ġ: ĠExt ent < Login Extent >( graph ) Ġ{ ĊĠĠĠ Ġval Ġemail : ĠState < String > ĊĠĠĠ Ġval Ġpassword : ĠState < String > Ċ // Ġend :: login _ enable _ extent [] ĊĊĠĠĠ Ġval Ġlogging In Ġ= ĠState < Boolean >( this , Ġfalse ) ĊĠĠĠ Ġval Ġemail Valid Ġ= Ġ ĠState ( this , Ġfalse ) ĊĠĠĠ Ġval Ġpassword Valid Ġ= ĠState ( this , Ġfalse ) ĊĠĠĠ Ġval Ġlogin Enabled Ġ= ĠState ( this , Ġfalse ) ĊĠĠĠ Ġval Ġlogin Click Ġ= ĠMoment < Unit >( this ) ĊĠĠĠ Ġval Ġreturn Key Ġ= ĠMoment < Unit >( this ) ĊĠĠĠ Ġval Ġlogin Complete Ġ= ĠMoment < Boolean >( this ) ĊĊĠĠĠ Ġ// Ġtag :: login _ enable _ init [] ĊĠĠĠ Ġinit Ġ{ ĊĊĠĠĠĠĠĠĠ Ġthis . email Ġ= ĠState ( this , Ġ"") ĊĠĠĠĠĠĠĠ Ġthis . password Ġ= ĠState ( this , Ġ"") ĊĊĠĠĠĠĠĠĠ Ġ// Ġtag :: login _ enable _ behavior [] ĊĠĠĠĠĠĠĠ Ġthis . make Behavior ( listOf ( email , Ġpassword ), Ġnull ) Ġ{ Ġlogin Extent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġend :: login _ enable _ init [] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġemail Ġ= Ġlogin Extent . email . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpassword 2 : ĠString Ġ= Ġlogin Extent . password . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Password Ġ= Ġpassword 2 . length Ġ> Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlogin Enabled Ġ= Ġlogin Extent . valid EmailAddress ( email ) Ġ&& Ġhas Password ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Extent . side Effect (" enable Ġlogin Ġbutton ") Ġ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Extent . enable Login Button ( login Enabled ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġend :: login _ enable _ behavior [] ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġvalid EmailAddress ( email : ĠString ) Ġ: ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( email . length Ġ> Ġ 0 ) Ġ&& Ġemail . includes ('@ ') ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdo Login ( email : ĠString , Ġpassword : ĠString , Ġcomplete : Ġ( Boolean ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠ Ġ// Ġlogin Ġapi Ġcalls ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġenable Login Button ( enabled : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġside Ġeffect Ġto Ġset Ġthe Ġenabled Ġstate Ġof Ġthe Ġlogin Ġbutton ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġtag :: login _ sequence _ compare [] ĊĠĠĠ Ġfun Ġemail Changed Since Password () Ġ: ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . email . event . sequence Ġ> Ġthis . password . event . sequence ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// Ġend :: login _ sequence _ compare [] ĊĠĠĠĠĊĠĠĠ Ġ// Ġtag :: login _ timestamp [] ĊĠĠĠ Ġfun Ġlogin Completed When () Ġ: ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . login Complete . event !!. timestamp ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// Ġend :: login _ timestamp [] ĊĊ Ċ } Ċ class ĠLogin Complete Extent ( graph : ĠGraph ) Ġ: ĠExt ent < Login Complete Extent >( graph ) Ġ{ ĊĠĠĠ Ġval Ġemail Ġ= ĠState ( this , Ġ"") ĊĠĠĠ Ġval Ġpassword Ġ= ĠState ( this , Ġ"") ĊĊĠĠĠ Ġval Ġlogging In Ġ= ĠState < Boolean >( this , Ġfalse ) ĊĠĠĠ Ġval Ġemail Valid Ġ= Ġ ĠState ( this , Ġfalse ) ĊĠĠĠ Ġval Ġpassword Valid Ġ= ĠState ( this , Ġfalse ) ĊĊĠĠĠ Ġ// begin Ġcomplete Ġconstructor ĊĊĠĠĠ Ġinit Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// Ġtag :: login _ complete _ email [] ĊĠĠĠĠĠĠ Ġval Ġemail Valid Ġ= Ġ ĠState ( this , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġmake Behavior ( listOf ( email ), ĠlistOf ( email Valid )) Ġ{ Ġlogin Extent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġemail Ġ= Ġlogin Extent . email . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġemail Valid Ġ= Ġlogin Extent . valid EmailAddress ( email ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Extent . email Valid . update ( email Valid , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġend :: login _ complete _ email [] ĊĊĠĠĠĠĠĠĠ Ġmake Behavior ( listOf ( password ), ĠlistOf ( password Valid )) Ġ{ Ġlogin Extent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpassword Ġ= Ġlogin Extent . password . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpassword Valid Ġ= Ġpassword . length Ġ> Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Extent . password Valid . update ( password Valid , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġtag :: login _ complete _ enable [] ĊĠĠĠĠĠĠĠ Ġval Ġlogin Enabled Ġ= ĠState ( this , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġmake Behavior ( listOf ( email Valid , Ġpassword Valid , Ġlogging In ), ĠlistOf ( login Enabled )) Ġ{ Ġlogin Extent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġenabled Ġ= Ġlogin Extent . email Valid . value Ġ&& Ġlogin Extent . password Valid . value Ġ&& Ġ! login Extent . logging In . value ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Extent . login Enabled . update ( enabled , Ġtrue ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Extent . side Effect (" enable Ġlogin Ġbutton ") Ġ{ Ġlogin Extent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Extent . enable Login Button ( login Extent . login Enabled . value ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġend :: login _ complete _ enable [] ĊĊĠĠĠĠĠĠĠ Ġ// Ġtag :: login _ complete _ login [] ĊĠĠĠĠĠĠĠ Ġval Ġlogin Click Ġ= ĠMoment < Unit >( this ) ĊĠĠĠĠĠĠĠ Ġval Ġreturn Key Ġ= ĠMoment < Unit >( this ) ĊĠĠĠĠĠĠĠ Ġval Ġlogin Complete Ġ= ĠMoment < Boolean >( this ) ĊĠĠĠĠĠĠĠ Ġmake Behavior ( listOf ( login Click , Ġreturn Key , Ġlogin Complete ), ĠlistOf ( this . logging In )) Ġ{ Ġlogin Extent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( login Extent . login Click . just Updated Ġ|| Ġlogin Extent . return Key . just Updated ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Extent . login Enabled . trace Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStart Ġlogin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Extent . logging In . update ( true , Ġtrue ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( login Extent . login Complete . just Updated Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! login Extent . login Complete . value Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Extent . logging In . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLogin Ġfailed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Extent . logging In . update ( false , Ġtrue ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( login Extent . logging In . just Updated To ( true )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Extent . side Effect (" login Ġapi Ġcall ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . do Login ( it . email . value , Ġit . password . value ) Ġ{ Ġsuccess Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . action (" login Ġcall Ġreturned ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . login Complete . update ( success ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġend :: login _ complete _ login [] ĊĊĠĠĠĠĠĠĠ Ġ// ĠD ont Ġdelete ; Ġits Ġused Ġin Ġthe Ġdocumentation ĊĠĠĠĠĠĠĠ Ġ// Ġthis Ġhas Ġan Ġexample Ġof Ġrequire Sync ĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠ Ġmake Behavior ( listOf ( login Click , Ġreturn Key , Ġlogin Complete ), ĠlistOf ( logging In )) Ġ{ Ġextent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( extent . login Click . just Updated Ġ|| Ġextent . return Key . just Updated ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextent . login Enabled . tr aced . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStart Ġlogin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextent . logging In . update ( true , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( extent . login Complete . just Updated Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! extent . login Complete . value Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextent . logging In . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLogin Ġfailed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextent . logging In . update ( false , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( extent . logging In . just Updated To ( true )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtag :: login _ complete _ log inal t [] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextent . side Effect (" login Ġapi Ġcall ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . do Login ( extent . email . value , Ġextent . password . value ) Ġ{ Ġsuccess Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . action Async (" login Ġcall Ġreturned ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . login Complete . update ( success ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġend :: login _ complete _ log inal t [] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// end Ġcomplete Ġconstructor ĊĊĊĠĠĠ Ġfun Ġvalid EmailAddress ( email : ĠString ) Ġ: ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( email . length Ġ> Ġ 0 ) Ġ&& Ġemail . includes ('@ ') ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdo Login ( email : ĠString , Ġpassword : ĠString , Ġcomplete : Ġ( Boolean ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġlogin Ġapi Ġcalls ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġenable Login Button ( enabled : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġside Ġeffect Ġto Ġset Ġthe Ġenabled Ġstate Ġof Ġthe Ġlogin Ġbutton ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ class ĠLogin Short Extent Ġ{ ĊĠĠĠ Ġval Ġemail Ġ= ĠState ( this , Ġ"") ĊĠĠĠ Ġval Ġpassword Ġ= ĠState ( this , Ġ"") ĊĊĠĠĠ Ġval Ġlogging In Ġ= ĠState < Boolean >( this , Ġfalse ) ĊĠĠĠ Ġval Ġemail Valid Ġ= Ġ ĠState ( this , Ġfalse ) ĊĠĠĠ Ġval Ġpassword Valid Ġ= ĠState ( this , Ġfalse ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġtag :: login _ intro _ short 1 [] ĊĠĠĠĠĠĠĠ Ġmake Behavior ( listOf ( email , Ġpassword ), ĠlistOf ( login Enabled )) Ġ{ Ġextent Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġemail Valid Ġ= Ġextent . valid EmailAddress ( email . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpassword Valid Ġ= Ġextent . password . value . length Ġ> Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġenabled Ġ= Ġemail Valid Ġ&& Ġpassword Valid ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextent . login Enabled . update ( enabled ) ĊĊĠĠĠĠĠĠĠ Ġ}; ĊĠĠĠĠĠĠĠ Ġ// Ġend :: login _ intro _ short 1 [] ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ// Ġtag :: login _ intro _ short 2 [] ĊĠĠĠĠĠĠĠ Ġmake Behavior ( listOf ( login Click ), ĠlistOf ( logging In )) Ġ{ Ġextent Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( extent . login Click . just Updated Ġ&& Ġ! extent . logging In . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextent . logging In . update ( true ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmake Behavior ( listOf ( email , Ġpassword , Ġlogging In ), ĠlistOf ( login Enabled )) Ġ{ Ġextent Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġemail Valid Ġ= Ġextent . valid EmailAddress ( email . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpassword Valid Ġ= Ġextent . password . value . length Ġ> Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġenabled Ġ= Ġemail Valid Ġ&& Ġpassword Valid Ġ&& Ġ! extent . logging In . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextent . login Enabled . update ( enabled ) ĊĊĠĠĠĠĠĠĠ Ġ}; ĊĠĠĠĠĠĠĠ Ġ// Ġend :: login _ intro _ short 2 [] ĊĊĠĠĠĠĠĠĠ Ġ// Ġtag :: login _ intro _ side effect [] ĊĠĠĠĠĠĠĠ Ġmake Behavior ( listOf ( email , Ġpassword , Ġlogging In ), ĠlistOf ( login Enabled )) Ġ{ Ġextent Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġemail Valid Ġ= Ġextent . valid EmailAddress ( email . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpassword Valid Ġ= Ġextent . password . value . length Ġ> Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġenabled Ġ= Ġemail Valid Ġ&& Ġpassword Valid Ġ&& Ġ! extent . logging In . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextent . login Enabled . update ( enabled ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġextent . side Effect (" login Ġbutton Ġenabled ") Ġ{ Ġextent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextent . login Button . enabled Ġ= Ġextent . login Enabled . value ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ}; ĊĠĠĠĠĠĠĠ Ġ// Ġend :: login _ intro _ side effect [] ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġtag :: login _ intro _ action [] ĊĠĠĠ Ġfun Ġlogin Button Clicked () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . graph . action (" login Ġbutton Ġclicked ") Ġ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . login Click . update ( Unit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// Ġend :: login _ intro _ action [] Ċ Ċ } Ċ Ċ class ĠLogin Page Ġ{ ĊĊĠĠĠ Ġval Ġgraph : ĠGraph ĊĠĠĠ Ġval Ġlogin Extent : ĠLogin Extent ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠ Ġ// Ġtag :: login _ enable _ setup [] ĊĠĠĠĠĠĠĠ Ġthis . graph Ġ= Ġ ĠGraph () ĊĠĠĠĠĠĠĠ Ġthis . login Extent Ġ= ĠLogin Extent ( graph ) ĊĠĠĠĠĠĠĠ Ġthis . graph . action (" new Ġlogin Ġpage ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . login Extent . addTo Graph () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// Ġend :: login _ enable _ setup [] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġtag :: login _ enable _ actions [] ĊĠĠĠ Ġfun Ġdid Update Email Field ( contents : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . graph . action (" update Ġemail Ġfield ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . login Extent . email . update ( contents , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdid Update Password Field ( contents : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . graph . action (" update Ġpassword Ġfield ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . login Extent . password . update ( contents , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// Ġend :: login _ enable _ actions [] ĊĠĠĠĠĊĠĠĠ Ġ// Ġtag :: login _ complete _ click [] ĊĠĠĠ Ġfun Ġlogin Button Clicked () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . graph . action (" login Ġbutton Ġclicked ") Ġ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . login Extent . login Click . update ( Unit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// Ġend :: login _ complete _ click [] ĊĠĠĠĠĊ Ċ } Ċ