// Ċ // Ġ( C ) ĠCopyright Ġ 2 0 1 7 - 2 0 1 9 ĠMartin ĠE . ĠN ord berg ĠIII Ċ // ĠApache Ġ 2 . 0 ĠLicense Ċ // Ċ Ċ package Ġi . kat yd id . v dom . elements Ċ Ċ import Ġo . kat yd id . v dom . elements . K at yd id Node Ċ import Ġx . kat yd id . v dom . dom . Document Ċ import Ġx . kat yd id . v dom . dom . Node Ċ import Ġx . kat yd id . v dom . dom . events . Event Ċ import Ġo . kat yd id . v dom . types . Event Cancellation Exception Ċ import Ġo . kat yd id . v dom . types . EventHandler Ċ Ċ //---------------------------------------------------------------- ------------------------------------------------ ----- Ċ Ċ /** Ċ Ġ* ĠTop most Ġabstract Ġbase Ġclass Ġfor ĠK at yd id - V DOM Ġvirtual ĠDOM . ĠCorre spon ds Ġto ĠDOM ĠNode . Ċ Ġ* Ġ@ param ĠMsg Ġthe Ġtype Ġof Ġmessage Ġreturned Ġby Ġevents Ġfrom Ġthis Ġelement Ġwhen Ġan ĠEl m - like Ġarchitecture Ġis Ġin Ġuse . Ċ Ġ* Ċ Ġ* Ġ@ constructor ĠConstructs Ġa Ġnew Ġnode Ġwith Ġgiven Ġ[_ key ] Ġor Ġwith Ġthe Ġnode Ġname Ġas Ġkey Ġif Ġ[_ key ] Ġis Ġnull . Ċ Ġ* Ġ@ param Ġ_ key Ġa Ġkey Ġfor Ġthis ĠK at yd id - V DOM Ġnode Ġthat Ġis Ġunique Ġamong Ġall Ġthe Ġs iblings Ġof Ġthis Ġnode . ĠIf Ġ[_ key ] Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Ġnull , Ġthen Ġthe Ġnode Ġname Ġbecomes Ġthe Ġkey . Ċ Ġ*/ Ċ internal Ġabstract Ġclass ĠK at yd id Node Impl < Msg > Ġ( ĊĠĠĠ Ġprivate Ġval Ġ_ key : ĠAny ? Ċ ) Ġ: ĠK at yd id Node < Msg > Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠStates Ġin Ġthe Ġlifecycle Ġof Ġa Ġnode . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġenum Ġclass ĠE State Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġnode Ġis Ġstill Ġopen Ġfor Ġits Ġattributes Ġto Ġbe Ġset Ġby Ġone Ġof Ġthe ĠK at yd id - V DOM Ġbuild ers . Ġ*/ ĊĠĠĠĠĠĠĠ ĠADD ING _ ATTRIBUTES , ĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġnode Ġis Ġbeing Ġmodified Ġfor Ġevent Ġhandling . Ġ*/ ĊĠĠĠĠĠĠĠ ĠADD ING _ EVENT _ HAND L ERS , ĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġnode 's Ġchildren Ġare Ġstill Ġunder Ġconstruction . Ġ*/ ĊĠĠĠĠĠĠĠ ĠADD ING _ CHILD _ NODES , ĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġnode Ġhas Ġbeen Ġfully Ġdefined Ġand Ġis Ġready Ġto Ġbe Ġestablished Ġin Ġthe Ġreal ĠDOM . Ġ*/ ĊĠĠĠĠĠĠĠ ĠCON STRUCT ED , ĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġnode Ġhas Ġbeen Ġestablished Ġin Ġthe Ġreal ĠDOM Ġ( either Ġthe Ġfirst Ġedition Ġor Ġreplacing Ġa Ġprior Ġedition ). Ġ*/ ĊĠĠĠĠĠĠĠ ĠEST AB L ISHED , ĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġnode Ġhas Ġbeen Ġreplaced Ġby Ġa Ġnewer Ġedition Ġin Ġthe Ġreal ĠDOM . Ġ*/ ĊĠĠĠĠĠĠĠ ĠP ATCH ED _ REPL AC ED , ĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġnode Ġdoes Ġnot Ġappear Ġin Ġa Ġnewer Ġedition . Ġ*/ ĊĠĠĠĠĠĠĠ ĠP ATCH ED _ RE MOVED ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ//// ĊĊĠĠĠ Ġ/** ĠA Ġmap Ġof Ġchild Ġnodes Ġby Ġtheir Ġkey . Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġchild Nodes ByKey : ĠMutable Map < Any , ĠK at yd id Node Impl < Msg >> Ġ= Ġhash Map Of () ĊĊĠĠĠ Ġ/** ĠThe Ġestablished ĠDOM Ġnode Ġafter Ġthis Ġnode Ġhas Ġbeen Ġestablished Ġor Ġpatched . Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġdom Node : ĠNode ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĠA Ġmap Ġof Ġregistered Ġevent Ġhandlers . Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġevent Handlers : ĠMutable Map < String , ĠEventHandler > Ġ= Ġmutable Map Of () ĊĊĠĠĠ Ġ/** ĠThe Ġfirst Ġchild Ġnode Ġwithin Ġthis Ġnode . ĠStarts Ġas ĠNothing , Ġmeaning Ġno Ġchildren . Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġfirst Child Node : ĠK at yd id Node Impl < Msg >? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĠThe Ġlast Ġchild Ġnode Ġwithin Ġthis Ġnode . ĠStarts Ġas ĠNothing , Ġmeaning Ġno Ġchildren . Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġlast Child Node : ĠK at yd id Node Impl < Msg >? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĠThe Ġnext Ġsibling Ġnode Ġwithin Ġthis Ġnode . ĠPoints Ġto ĠNothing Ġfrom Ġlast Ġchild Ġin Ġthe Ġlist . Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġnext Sibling Node : ĠK at yd id Node Impl < Msg >? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĠThe Ġprevious Ġsibling Ġnode Ġwithin Ġthis Ġnode . ĠLinked Ġto ĠNothing Ġfor Ġfirst Ġchild Ġin Ġthe Ġlist . Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġprev Sibling Node : ĠK at yd id Node Impl < Msg >? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĠFlag Ġset Ġto Ġtrue Ġonce Ġthe Ġnode Ġis Ġfully Ġconstructed . Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġstate : ĠE State Ġ= ĠE State . ADDING _ ATTRIBUTES ĊĊĠĠĠ Ġ//// ĊĊĠĠĠ Ġ/** ĠWhether Ġthis Ġnode Ġis Ġstill Ġhaving Ġits Ġattributes Ġset . Ġ*/ ĊĠĠĠ Ġprotected Ġval Ġis Adding Attributes ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġstate Ġ== ĠE State . ADDING _ ATTRIBUTES ĊĊĠĠĠ Ġ/** ĠWhether Ġthis Ġnode Ġis Ġstill Ġbeing Ġbuilt . Ġ*/ ĊĠĠĠ Ġprotected Ġval Ġis Adding Child Nodes ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġstate Ġ== ĠE State . ADDING _ CHILD _ NODES ĊĊĠĠĠ Ġ/** ĠWhether Ġthis Ġnode Ġis Ġstill Ġhaving Ġits Ġevent Ġhandlers Ġset . Ġ*/ ĊĠĠĠ Ġprotected Ġval Ġis Adding Event Handlers ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġstate Ġ== ĠE State . ADDING _ EVENT _ HAND L ERS ĊĊĠĠĠ Ġ/** ĠWhether Ġthis Ġnode Ġis Ġfully Ġconstructed . Ġ*/ ĊĠĠĠ Ġprotected Ġval Ġis Construct ed ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġstate Ġ== ĠE State . CON STRUCT ED ĊĊĠĠĠ Ġ/** ĠWhether Ġthis Ġnode Ġhas Ġbeen Ġestablished Ġin Ġthe Ġreal ĠDOM . Ġ*/ ĊĠĠĠ Ġprotected Ġval Ġis Est ab lished ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġstate Ġ== ĠE State . EST AB L ISHED ĊĊĠĠĠ Ġ/** ĠWhether Ġthis Ġnode Ġhas Ġbeen Ġremoved Ġfrom Ġa Ġlater Ġedition Ġin Ġthe Ġreal ĠDOM . Ġ*/ ĊĠĠĠ Ġprotected Ġval Ġis Pat ched Removed ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġstate Ġ== ĠE State . PATCH ED _ RE MOVED ĊĊĠĠĠ Ġ/** ĠWhether Ġthis Ġnode Ġhas Ġbeen Ġreplaced Ġby Ġa Ġlater Ġedition Ġin Ġthe Ġreal ĠDOM . Ġ*/ ĊĠĠĠ Ġprotected Ġval Ġis Pat ched Re placed ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġstate Ġ== ĠE State . PATCH ED _ REPL AC ED ĊĊĠĠĠ Ġ/** ĠThe Ġkey Ġfor Ġthis Ġnode . ĠIf Ġnone Ġprovided , Ġuses Ġthe Ġnode Ġname . Ġ*/ ĊĠĠĠ Ġoverride Ġval Ġkey : ĠAny ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ key Ġ?: ĠnodeName ĊĊĠĠĠ Ġ/** ĠThe Ġname Ġof Ġthis Ġnode Ġ( usually Ġthe ĠHTML Ġtag Ġname , Ġotherwise Ġa Ġpseudo Ġtag Ġname Ġlike Ġ"# text "). Ġ*/ ĊĠĠĠ Ġabstract Ġoverride Ġval ĠnodeName : ĠString ĊĊĠĠĠ Ġ/** ĠThe Ġfirst Ġand Ġonly Ġchild Ġnode Ġin Ġthis Ġnode . Ġ( Exception Ġif Ġthere Ġis Ġnone Ġor Ġmore Ġthan Ġone .) Ġ*/ ĊĠĠĠ Ġoverride Ġval Ġsole Child Node : ĠK at yd id Node Impl < Msg > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( firstChild Node Ġ!= Ġnull ) Ġ{ Ġ" No Ġchild Ġfound ." Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( firstChild Node Ġ== Ġlast Child Node ) Ġ{ Ġ" More Ġthan Ġone Ġchild Ġnode Ġfound ." Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfirst Child Node !! ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ//// ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdds Ġa Ġnew Ġchild Ġnode Ġto Ġthis Ġnode . ĊĠĠĠĠ Ġ* Ġ@ param Ġchild Node Ġthe Ġchild Ġnode Ġto Ġadd . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Child Node ( child Node : ĠK at yd id Node Impl < Msg >) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Adding Attributes ĠĠĠ Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfreeze Attributes () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠE State . ADDING _ CHILD _ NODES ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Adding Event Handlers Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠE State . ADDING _ CHILD _ NODES ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( is Adding Child Nodes ) Ġ{ Ġ" Cannot Ġmodify Ġa ĠK at yd id - V DOM Ġnode Ġafter Ġit Ġhas Ġbeen Ġfully Ġconstructed ." Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrequire (! childNodes ByKey . containsKey ( child Node . key )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Duplicate Ġkey : Ġ" Ġ+ Ġchild Node . key Ġ+ Ġ" Ġin Ġparent Ġelement Ġwith Ġkey Ġ" Ġ+ Ġthis . key ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( firstChild Node Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Child Node Ġ= Ġchild Node ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Child Node Ġ= Ġchild Node ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild Node . prev Sibling Node Ġ= Ġlast Child Node ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Child Node !!. next Sibling Node Ġ= Ġchild Node ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Child Node Ġ= Ġchild Node ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġchild Nodes ByKey [ child Node . key ] Ġ= Ġchild Node ĊĊĠĠĠĠĠĠĠ Ġafter AddChild Node ( child Node ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdds Ġa Ġgeneral Ġevent Ġhandler Ġfor Ġthe Ġgiven Ġtype Ġof Ġevent . ĊĠĠĠĠ Ġ* Ġ@ param ĠeventName Ġthe Ġname Ġof Ġthe Ġkind Ġof Ġevent ĊĠĠĠĠ Ġ* Ġ@ param Ġhandler Ġthe Ġcallback Ġwhen Ġthe Ġvent Ġoccurs ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd EventHandler ( eventName : ĠString , Ġhandler : ĠEventHandler ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is Adding Attributes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfreeze Attributes () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠE State . ADDING _ EVENT _ HAND L ERS ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( is Adding Event Handlers ) Ġ{ Ġ" K at yd id - V DOM Ġnode 's Ġevent Ġhandlers Ġmust Ġbe Ġdefined Ġbefore Ġits Ġchild Ġnodes ." Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcheck (! event Handlers . containsKey ( eventName )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Only Ġone Ġ'${ eventName }' Ġhandler Ġcan Ġbe Ġdefined Ġper Ġelement ." ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġevent Handlers [ eventName ] Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġevent : ĠEvent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcatch Ġ( exception : ĠEvent Cancellation Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . preventDefault () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPerforms Ġextra Ġhandling Ġafter Ġa Ġ[ child Node ] Ġhas Ġbeen Ġadded . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġopen Ġfun Ġafter AddChild Node ( child Node : ĠK at yd id Node Impl < Msg >) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġnew ĠDOM Ġnode Ġwithin Ġthe Ġgiven Ġ[ document ] Ġthat Ġis Ġa Ġchild Ġnode Ġof Ġ[ parent Dom Node ] Ġand Ġis Ġinserted ĊĠĠĠĠ Ġ* Ġjust Ġbefore Ġthe Ġgiven Ġ[ following Dom Child ] Ġor Ġat Ġthe Ġend Ġof Ġthe Ġchild Ġlist Ġif Ġ[ following Dom Child ] Ġis Ġnull . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġabstract Ġfun Ġcreate Dom Node ( document : ĠDocument , Ġparent Dom Node : ĠNode , Ġfollowing Dom Child : ĠNode ?) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġattributes Ġand Ġchild Ġnodes Ġof Ġa Ġnewly Ġcreated Ġreal ĠDOM Ġnode Ġto Ġmatch Ġthis Ġvirtual ĠDOM Ġnode . ĊĠĠĠĠ Ġ* Ġ@ param Ġdom Node Ġthe Ġreal ĠDOM Ġnode Ġto Ġbe Ġconfigured Ġto Ġmirror Ġthis Ġvirtual ĠDOM Ġnode . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġestablish ( dom Node : ĠNode ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġcheck ( state Ġ>= ĠE State . CON STRUCT ED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" K at yd id - V DOM Ġnode Ġmust Ġbe Ġfully Ġconstructed Ġbefore Ġestablish ing Ġthe Ġreal ĠDOM ." ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcheck ( state Ġ<= ĠE State . CON STRUCT ED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" K at yd id - V DOM Ġnode Ġalready Ġestablished ." ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrequire ( dom Node . nodeName Ġ== ĠnodeName ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Cannot Ġestablish Ġa Ġreal ĠDOM Ġnode Ġdiffer ing Ġin Ġtype Ġfrom Ġthe ĠK at yd id - V DOM Ġnode ." ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( nodeName Ġ!= Ġ"# text ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġestablish Attributes ( dom Node ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġestablish Event Handlers ( dom Node ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġestablish Child Nodes ( dom Node ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthis . dom Node Ġ= Ġdom Node ĊĊĠĠĠĠĠĠĠ Ġstate Ġ= ĠE State . EST AB L ISHED ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPerforms Ġthe ĠDOM Ġelement Ġconfiguration Ġneeded Ġby Ġa Ġderived Ġclass . ĊĠĠĠĠ Ġ* Ġ@ param Ġdom Element Ġthe Ġreal ĠDOM Ġelement Ġbeing Ġbuilt . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġabstract Ġfun Ġestablish Attributes ( dom Element : ĠNode ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEst abl ishes Ġchild Ġnodes Ġin Ġthe Ġgiven ĠDOM Ġnode Ġmatching Ġthe Ġchild Ġnodes Ġof Ġthis ĠK at yd id - V DOM Ġnode . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġestablish Child Nodes ( dom Node : ĠNode ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= ĠcheckNotNull ( dom Node . owner Document , Ġ{ Ġ" DOM Ġelement Ġmust Ġhave Ġan Ġowner Ġdocument ." Ġ}) ĊĊĠĠĠĠĠĠĠ Ġvar Ġchild Node Ġ= Ġfirst Child Node ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( child Node Ġ!= Ġnull ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild Node . create Dom Node ( document , Ġdom Node , Ġnull ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild Node Ġ= Ġchild Node . next Sibling Node ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEst abl ishes Ġevent Ġhandlers Ġfor Ġthe Ġgiven Ġdom Node Ġfrom Ġthe Ġevent Ġhandlers Ġof Ġthis ĠK at yd id - V DOM Ġnode . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġestablish Event Handlers ( dom Node : ĠNode ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfor Ġ(( key , Ġevent Handler ) Ġin Ġevent Handlers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdom Node . addEventListener ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent Handler ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFree zes Ġthe Ġcontent Ġof Ġthis Ġnode . ĠMakes Ġany Ġfurther Ġattempt Ġto Ġadd Ġchild Ġnodes Ġor Ġattributes Ġfail . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġfreeze () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġcheck ( state Ġ<= ĠE State . CON STRUCT ED ) Ġ{ Ġ" K at yd id - V DOM Ġnode Ġalready Ġfully Ġconstructed ." Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is Adding Attributes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfreeze Attributes () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġstate Ġ= ĠE State . CON STRUCT ED ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemoves Ġthe Ġscaffold ing Ġof Ġa Ġderived Ġclass . ĠOverride Ġas Ġneeded . ĠBase Ġclass Ġmethod Ġdoes Ġnothing . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġabstract Ġfun Ġfreeze Attributes () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWhether Ġthis ĠK at yd id - V DOM Ġnode Ġmatches Ġthe Ġgiven ĠK at yd id - V DOM Ġnode Ġfor Ġpurposes Ġof Ġpatch ing . ĊĠĠĠĠ Ġ* Ġ@ param Ġother Node Ġthe Ġnode Ġto Ġcompare Ġwith . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġmatches ( other Node : ĠK at yd id Node Impl < Msg >? ): ĠBoolean Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( other Node Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( nodeName Ġ!= Ġother Node . nodeName ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġkey Ġ== Ġother Node . key ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPat ches Ġa Ġreal ĠDOM Ġnode Ġby Ġdetermining Ġthe Ġdifference Ġbetween Ġthis ĠK at yd id - V DOM Ġnode Ġand Ġits Ġprior Ġedition . ĊĠĠĠĠ Ġ* Ġ@ param Ġprior Node Ġthe Ġprior Ġedition Ġof Ġthis ĠK at yd id - V DOM Ġnode . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġpatch ( prior Node : ĠK at yd id Node Impl < Msg >) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// ĠQu it Ġearly Ġif Ġthe Ġnode Ġis Ġthe Ġsame Ġ( e . g . Ġmemoized ). ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġprior Node ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( is Pat ched Re placed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" New ĠK at yd id - V DOM Ġnode Ġis Ġidentical Ġto Ġprior Ġnode Ġbut Ġprior Ġnode Ġhas Ġnot Ġbeen Ġpatched ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcheck ( state Ġ>= ĠE State . CON STRUCT ED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" K at yd id - V DOM Ġnode Ġmust Ġbe Ġfully Ġconstructed Ġbefore Ġestablish ing Ġthe Ġreal ĠDOM ." ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcheck ( state Ġ<= ĠE State . CON STRUCT ED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" K at yd id - V DOM Ġnode Ġalready Ġestablished ." ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcheck (! prior Node . is Pat ched Removed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Prior Ġnode Ġcannot Ġbe Ġpatched Ġafter Ġbeing Ġremoved ." ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcheck (! prior Node . is Pat ched Re placed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Prior Ġnode Ġcannot Ġbe Ġpatched Ġtwice ." ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcheck ( prior Node . is Est ab lished ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Prior ĠK at yd id - V DOM Ġnode Ġmust Ġbe Ġestablished Ġbefore Ġpatch ing . Ġ" Ġ+ Ġprior Node . nodeName Ġ+ Ġ"." Ġ+ Ġprior Node . key ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrequire ( prior Node . nodeName Ġ== ĠnodeName ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Cannot Ġpatch Ġa Ġdifference Ġbetween Ġtwo ĠK at yd id - V DOM Ġnodes Ġof Ġdifferent Ġtypes ." ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdom Node Ġ= ĠcheckNotNull ( prior Node . dom Node ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Prior ĠK at yd id - V DOM Ġnode Ġis Ġnot Ġlinked Ġto Ġits ĠDOM Ġnode ." ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠPatch Ġthe Ġattributes . ĊĠĠĠĠĠĠĠ Ġpatch Attributes ( dom Node , Ġprior Node ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠPatch Ġthe Ġevent Ġhandlers ĊĠĠĠĠĠĠĠ Ġpatch Event Handlers ( dom Node , Ġprior Node ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠPatch Ġthe Ġchild Ġnodes . ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprior Node . firstChild Node Ġ== Ġnull Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġestablish Child Nodes ( dom Node ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Child Node Ġ== Ġnull ĠĠĠĠĠĠĠĠĠĠ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( dom Node . has Child Nodes ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdom Node . removeChild ( dom Node . firstChild !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpatch Child Nodes ( dom Node , Ġprior Node ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthis . dom Node Ġ= Ġdom Node ĊĠĠĠĠĠĠĠ Ġstate Ġ= ĠE State . EST AB L ISHED ĊĊĠĠĠĠĠĠĠ Ġprior Node . state Ġ= ĠE State . PATCH ED _ REPL AC ED ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPerforms Ġthe Ġpatch Ġneeded Ġby Ġa Ġderived Ġclass . ĠOverride Ġas Ġneeded . ĠBase Ġclass Ġmethod Ġdoes Ġnothing . ĊĠĠĠĠ Ġ* Ġ@ param Ġdom Element Ġthe Ġreal ĠDOM Ġnode Ġbeing Ġpatched . ĊĠĠĠĠ Ġ* Ġ@ param Ġprior Element Ġthe Ġprior Ġedition Ġof Ġthis ĠK at yd id - V DOM Ġnode Ġfrom Ġwhich Ġto Ġcompute Ġthe Ġpatch . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġabstract Ġfun Ġpatch Attributes ( dom Element : ĠNode , Ġprior Element : ĠK at yd id Node Impl < Msg >) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPat ches Ġthe Ġchild Ġnodes Ġof Ġthe ĠDOM Ġwith Ġchanges Ġbetween Ġthis Ġnode Ġand Ġthe Ġprior Ġnode . ĊĠĠĠĠ Ġ* Ġ@ param Ġdom Node Ġthe ĠDOM Ġnode Ġto Ġpatch Ġchanges Ġinto . ĊĠĠĠĠ Ġ* Ġ@ param Ġprior Node Ġthe Ġprior Ġedition Ġof Ġthis ĠK at yd id - V DOM Ġnode Ġthat Ġcorresponds Ġto Ġthe Ġgiven Ġdom Node . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġpatch Child Nodes ( dom Node : ĠNode , Ġprior Node : ĠK at yd id Node Impl < Msg >) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// ĠSh rink ing Ġinterval Ġof Ġchild Ġnodes Ġof Ġthis Ġnode . ĊĠĠĠĠĠĠĠ Ġvar Ġstart Child Ġ= Ġfirst Child Node ĊĠĠĠĠĠĠĠ Ġvar Ġend Child Ġ= Ġlast Child Node ĊĊĠĠĠĠĠĠĠ Ġ// ĠSh rink ing Ġinternal Ġof Ġchild Ġnodes Ġof Ġprior Ġnode . ĊĠĠĠĠĠĠĠ Ġvar Ġprior Start Child Ġ= Ġprior Node . firstChild Node ĊĠĠĠĠĠĠĠ Ġvar Ġprior End Child Ġ= Ġprior Node . last Child Node ĊĊĠĠĠĠĠĠĠ Ġ// ĠFirst Ġexisting ĠDOM Ġnode Ġ- Ġmoves Ġforward Ġas Ġthe Ġinterval Ġshrink s Ġin Ġthe Ġfront ĊĠĠĠĠĠĠĠ Ġvar Ġdom Child Ġ= Ġdom Node . firstChild ĊĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= ĠcheckNotNull ( dom Node . owner Document ) Ġ{ Ġ" DOM Ġelement Ġmust Ġhave Ġan Ġowner Ġdocument ." Ġ} ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( start Child Ġ!= Ġnull Ġ&& Ġend Child Ġ!= Ġnull Ġ&& Ġstart Child Ġ!= Ġend Child . next Sibling Node Ġ&& Ġend Child Ġ!= Ġstart Child . prev Sibling Node ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Child . matches ( prior Start Child ) Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdom Child Ġ= Ġdom Child !!. next Sibling ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Child . patch ( prior Start Child !! ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Child Ġ= Ġstart Child . next Sibling Node ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprior Start Child Ġ= Ġprior Start Child . next Sibling Node ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Child . matches ( prior End Child ) ĠĠĠĠ Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Child . patch ( prior End Child !! ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Child Ġ= Ġend Child . prev Sibling Node ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprior End Child Ġ= Ġprior End Child . prev Sibling Node ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Child . matches ( prior End Child ) ĠĠ Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdom Node . insertBefore ( prior End Child !!. dom Node !! , Ġdom Child ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Child . patch ( prior End Child ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Child Ġ= Ġstart Child . next Sibling Node ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprior End Child Ġ= Ġprior End Child . prev Sibling Node ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Child . matches ( prior Start Child ) ĠĠ Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( end Child . next Sibling Node Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdom Node . insertBefore ( prior Start Child !!. dom Node !! , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdom Node . insertBefore ( prior Start Child !!. dom Node !! , Ġend Child . next Sibling Node !!. dom Node ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Child . patch ( prior Start Child ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Child Ġ= Ġend Child . prev Sibling Node ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprior Start Child Ġ= Ġprior Start Child . next Sibling Node ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprior Child Ġ= Ġprior Node . childNodes ByKey [ start Child . key ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( prior Child Ġ!= Ġnull ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdom Node . insertBefore ( prior Child . dom Node !! , Ġdom Child ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Child . patch ( prior Child ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Child . create Dom Node ( document , Ġdom Node , Ġdom Child ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Child Ġ= Ġstart Child . next Sibling Node ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠDelete Ġany Ġobsolete Ġprior Ġnodes . ĊĠĠĠĠĠĠĠ Ġwhile Ġ( prior Start Child Ġ!= Ġnull Ġ&& Ġprior End Child Ġ!= Ġnull Ġ&& Ġprior Start Child Ġ!= Ġprior End Child . next Sibling Node ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( prior Start Child . is Est ab lished ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdom Node . removeChild ( prior Start Child . dom Node !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprior Start Child . state Ġ= ĠE State . PATCH ED _ RE MOVED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprior Start Child Ġ= Ġprior Start Child . next Sibling Node ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPat ches Ġthe Ġevent Ġhandlers Ġof Ġthe ĠDOM Ġwith Ġchanges Ġbetween Ġthis Ġnode Ġand Ġthe Ġprior Ġnode . ĊĠĠĠĠ Ġ* Ġ@ param Ġdom Node Ġthe ĠDOM Ġnode Ġto Ġpatch Ġchanges Ġinto . ĊĠĠĠĠ Ġ* Ġ@ param Ġprior Node Ġthe Ġprior Ġedition Ġof Ġthis ĠK at yd id - V DOM Ġnode Ġthat Ġcorresponds Ġto Ġthe Ġgiven Ġdom Node . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġpatch Event Handlers ( dom Node : ĠNode , Ġprior Node : ĠK at yd id Node Impl < Msg >) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠNeed Ġthe Ġevent Ġhandlers Ġto Ġimplement Ġequals ĊĊĠĠĠĠĠĠĠ Ġ// ĠEst ablish Ġthe Ġnew Ġevent Ġlisteners ĊĠĠĠĠĠĠĠ Ġfor Ġ(( key , Ġevent Handler ) Ġin Ġevent Handlers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event Handler Ġ!= Ġprior Node . event Handlers [ key ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprior EventHandler Ġ= Ġprior Node . event Handlers [ key ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( prior EventHandler Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdom Node . removeEventListener ( key , Ġprior EventHandler ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdom Node . addEventListener ( key , Ġevent Handler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠKill Ġoff Ġthe Ġold Ġones ĊĠĠĠĠĠĠĠ Ġfor Ġ(( key , Ġprior EventHandler ) Ġin Ġprior Node . event Handlers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! event Handlers . contains ( key )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdom Node . removeEventListener ( key , Ġprior EventHandler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConverts Ġthis Ġnode Ġto Ġa Ġstring Ġfor Ġdebugging Ġpurposes . ĠThe Ġoutput Ġlooks Ġlike Ġan ĠHTML Ġtag Ġwith Ġno Ġattributes : ĊĠĠĠĠ Ġ* Ġ`< some tag >`. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ"< " Ġ+ ĠnodeName . toLowerCase () Ġ+ Ġ" >" ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ //---------------------------------------------------------------- ------------------------------------------------ ----- Ċ