package Ġtz . co . as oft Ċ Ċ import Ġorg . w 3 c . dom . Element Ċ import Ġorg . w 3 c . dom . HTMLElement Ċ import Ġkotlin . browser . document Ċ Ċ class ĠUI ID Ġprivate Ġconstructor ( val Ġvalue : ĠString ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġids Ġby Ġlazy Ġ{ Ġmutable ListOf < String >() Ġ} ĊĠĠĠĠĠĠĠ Ġfun ĠgetId ( name : ĠString Ġ= Ġ" view "): ĠUI ID Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ(! ids . contains ( name ) Ġ&& Ġdocument . body ?. find < Element >( By . id ( name )) Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUI ID ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġguess Ġ= Ġ"$ name - id -${ ( 1 0 0 0 0 0 0 .. 9 9 9 9 9 9 9 ). random () }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! ids . contains ( guess ) Ġ&& Ġdocument . body ?. find < Element >( By . id ( guess )) Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUI ID ( guess ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetId ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġids . add ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrelease () Ġ{ ĊĠĠĠĠĠĠĠ Ġids . remove ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T Ġ: ĠHTMLElement > Ġget () Ġ= Ġdocument . body ?. find < T >( By . id ( value )) Ġ?: Ġthrow ĠException (" Element Ġwith ĠID Ġ$ value Ġnot Ġfound ") Ċ }