@@ -7,11 +7,34 @@ declare const scrapbox: Scrapbox;
77 * - second key: listener
88 * - value: encoded options
99 */
10- const listenerMap = new Map <
10+ const listenerMap = /* @__PURE__ */ new Map <
1111 keyof HTMLElementEventMap ,
1212 Map < EventListener , Set < number > >
1313> ( ) ;
14- const onceListenerMap = new Map < EventListener , Map < number , EventListener > > ( ) ;
14+ const onceListenerMap = /* @__PURE__ */ new Map <
15+ EventListener ,
16+ Map < number , EventListener >
17+ > ( ) ;
18+
19+ /** re-register event listeners when the layout changes */
20+ let reRegister : ( ( ) => void ) | undefined = ( ) => {
21+ scrapbox . on ( "layout:changed" , ( ) => {
22+ const textinput = textInput ( ) ;
23+ if ( ! textinput ) return ;
24+ for ( const [ name , argMap ] of listenerMap ) {
25+ for ( const [ listener , encodedOptions ] of argMap ) {
26+ for ( const encoded of encodedOptions ) {
27+ textinput . addEventListener (
28+ name ,
29+ listener as EventListener ,
30+ decode ( encoded ) ,
31+ ) ;
32+ }
33+ }
34+ }
35+ } ) ;
36+ reRegister = undefined ;
37+ } ;
1538
1639/** `#text-input`に対してイベントリスナーを追加する
1740 *
@@ -30,6 +53,7 @@ export const addTextInputEventListener = <K extends keyof HTMLElementEventMap>(
3053 ) => unknown ,
3154 options ?: boolean | AddEventListenerOptions ,
3255) : void => {
56+ reRegister ?.( ) ;
3357 const argMap = listenerMap . get ( name ) ?? new Map < EventListener , Set < number > > ( ) ;
3458 const encodedOptions = argMap . get ( listener as EventListener ) ?? new Set ( ) ;
3559 if ( encodedOptions . has ( encode ( options ) ) ) return ;
@@ -62,30 +86,14 @@ export const addTextInputEventListener = <K extends keyof HTMLElementEventMap>(
6286 textinput . addEventListener < K > ( name , listener , options ) ;
6387} ;
6488
65- // re-register event listeners when the layout changes
66- scrapbox . on ( "layout:changed" , ( ) => {
67- const textinput = textInput ( ) ;
68- if ( ! textinput ) return ;
69- for ( const [ name , argMap ] of listenerMap ) {
70- for ( const [ listener , encodedOptions ] of argMap ) {
71- for ( const encoded of encodedOptions ) {
72- textinput . addEventListener (
73- name ,
74- listener as EventListener ,
75- decode ( encoded ) ,
76- ) ;
77- }
78- }
79- }
80- } ) ;
81-
8289export const removeTextInputEventListener = <
8390 K extends keyof HTMLElementEventMap ,
8491> (
8592 name : K ,
8693 listener : ( event : HTMLElementEventMap [ K ] ) => unknown ,
8794 options ?: boolean | AddEventListenerOptions ,
8895) : void => {
96+ reRegister ?.( ) ;
8997 const argMap = listenerMap . get ( name ) ;
9098 if ( ! argMap ) return ;
9199 const encodedOptions = argMap . get ( listener as EventListener ) ;
0 commit comments