@@ -10,7 +10,8 @@ export interface EnhancedTextarea<T extends CommentSpot = CommentSpot> {
1010} 
1111
1212export  class  EnhancerRegistry  { 
13-   private  enhancers  =  new  Set < CommentEnhancer < any > > ( ) 
13+   private  enhancers  =  new  Set < CommentEnhancer > ( ) 
14+   private  preparedEnhancers  =  new  Set < CommentEnhancer > ( ) 
1415
1516  constructor ( )  { 
1617    // Register all available handlers 
@@ -21,12 +22,17 @@ export class EnhancerRegistry {
2122    this . enhancers . add ( handler ) 
2223  } 
2324
24-   tryToEnhance ( textarea : HTMLTextAreaElement ) : EnhancedTextarea < any >  |  null  { 
25+   tryToEnhance ( textarea : HTMLTextAreaElement ) : EnhancedTextarea  |  null  { 
2526    for  ( const  enhancer  of  this . enhancers )  { 
2627      try  { 
27-         const  result  =  enhancer . tryToEnhance ( textarea ) 
28-         if  ( result )  { 
29-           const  [ overtype ,  spot ]  =  result 
28+         const  spot  =  enhancer . tryToEnhance ( textarea ) 
29+         if  ( spot )  { 
30+           // Prepare enhancer on first use 
31+           if  ( ! this . preparedEnhancers . has ( enhancer ) )  { 
32+             enhancer . prepareForFirstEnhancement ( ) 
33+             this . preparedEnhancers . add ( enhancer ) 
34+           } 
35+           const  overtype  =  enhancer . enhance ( textarea ,  spot ) 
3036          return  {  enhancer,  overtype,  spot,  textarea } 
3137        } 
3238      }  catch  ( error )  { 
@@ -42,7 +48,7 @@ export class EnhancerRegistry {
4248} 
4349
4450export  class  TextareaRegistry  { 
45-   private  textareas  =  new  Map < HTMLTextAreaElement ,  EnhancedTextarea < any > > ( ) 
51+   private  textareas  =  new  Map < HTMLTextAreaElement ,  EnhancedTextarea > ( ) 
4652
4753  register < T  extends  CommentSpot > ( textareaInfo : EnhancedTextarea < T > ) : void { 
4854    this . textareas . set ( textareaInfo . textarea ,  textareaInfo ) 
@@ -56,7 +62,7 @@ export class TextareaRegistry {
5662    } 
5763  } 
5864
59-   get ( textarea : HTMLTextAreaElement ) : EnhancedTextarea < any >  |  undefined  { 
65+   get ( textarea : HTMLTextAreaElement ) : EnhancedTextarea  |  undefined  { 
6066    return  this . textareas . get ( textarea ) 
6167  } 
6268} 
0 commit comments