@@ -44,8 +44,6 @@ export class Runtime {
4444 #tokenizer;
4545 #globalScope;
4646 #scriptAttrs = null ;
47- #hyperscriptFeaturesMap = new WeakMap ;
48- #internalDataMap = new WeakMap ;
4947
5048 constructor ( globalScope , kernel , tokenizer ) {
5149 this . #globalScope = globalScope ;
@@ -212,13 +210,11 @@ export class Runtime {
212210 }
213211
214212 getHyperscriptFeatures ( elt ) {
215- var hyperscriptFeatures = this . #hyperscriptFeaturesMap. get ( elt ) ;
216- if ( typeof hyperscriptFeatures === 'undefined' ) {
217- if ( elt ) {
218- this . #hyperscriptFeaturesMap. set ( elt , hyperscriptFeatures = { } ) ;
219- }
213+ var data = this . getInternalData ( elt ) ;
214+ if ( ! data . features ) {
215+ data . features = { } ;
220216 }
221- return hyperscriptFeatures ;
217+ return data . features ;
222218 }
223219
224220 addFeatures ( owner , ctx ) {
@@ -318,11 +314,10 @@ export class Runtime {
318314 }
319315
320316 getInternalData ( elt ) {
321- var internalData = this . #internalDataMap. get ( elt ) ;
322- if ( typeof internalData === 'undefined' ) {
323- this . #internalDataMap. set ( elt , internalData = { } ) ;
317+ if ( ! elt . _hyperscript ) {
318+ elt . _hyperscript = { } ;
324319 }
325- return internalData ;
320+ return elt . _hyperscript ;
326321 }
327322
328323 #getElementScope( context ) {
@@ -585,39 +580,48 @@ export class Runtime {
585580 . join ( ", " ) ;
586581 }
587582
583+ #hashScript( str ) {
584+ var hash = 5381 ;
585+ for ( var i = 0 ; i < str . length ; i ++ ) {
586+ hash = ( ( hash << 5 ) + hash ) + str . charCodeAt ( i ) ;
587+ }
588+ return hash ;
589+ }
590+
588591 #initElement( elt , target ) {
589592 if ( elt . closest && elt . closest ( config . disableSelector ) ) {
590593 return ;
591594 }
592595 var internalData = this . getInternalData ( elt ) ;
593- if ( ! internalData . initialized ) {
594- var src = this . #getScript( elt ) ;
595- if ( src ) {
596- try {
597- internalData . initialized = true ;
598- internalData . script = src ;
599- var tokens = this . #tokenizer. tokenize ( src ) ;
600- var hyperScript = this . #kernel. parseHyperScript ( tokens ) ;
601- if ( ! hyperScript ) return ;
602- hyperScript . apply ( target || elt , elt , null , this ) ;
603- setTimeout ( ( ) => {
604- this . triggerEvent ( target || elt , "load" , {
605- hyperscript : true ,
606- } ) ;
607- } , 1 ) ;
608- } catch ( e ) {
609- this . triggerEvent ( elt , "exception" , {
610- error : e ,
611- } ) ;
612- console . error (
613- "hyperscript errors were found on the following element:" ,
614- elt ,
615- "\n\n" ,
616- e . message ,
617- e . stack
618- ) ;
619- }
620- }
596+ var src = this . #getScript( elt ) ;
597+ if ( ! src ) return ;
598+ var hash = this . #hashScript( src ) ;
599+ if ( internalData . initialized ) {
600+ if ( internalData . scriptHash === hash ) return ;
601+ }
602+ internalData . initialized = true ;
603+ internalData . scriptHash = hash ;
604+ try {
605+ var tokens = this . #tokenizer. tokenize ( src ) ;
606+ var hyperScript = this . #kernel. parseHyperScript ( tokens ) ;
607+ if ( ! hyperScript ) return ;
608+ hyperScript . apply ( target || elt , elt , null , this ) ;
609+ setTimeout ( ( ) => {
610+ this . triggerEvent ( target || elt , "load" , {
611+ hyperscript : true ,
612+ } ) ;
613+ } , 1 ) ;
614+ } catch ( e ) {
615+ this . triggerEvent ( elt , "exception" , {
616+ error : e ,
617+ } ) ;
618+ console . error (
619+ "hyperscript errors were found on the following element:" ,
620+ elt ,
621+ "\n\n" ,
622+ e . message ,
623+ e . stack
624+ ) ;
621625 }
622626 }
623627
0 commit comments