@@ -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