@@ -109,35 +109,46 @@ export const createCodeBlockSpec = createBlockSpec(
109109 const pre = document . createElement ( "pre" ) ;
110110 const code = document . createElement ( "code" ) ;
111111 pre . appendChild ( code ) ;
112- const select = document . createElement ( "select" ) ;
113- const selectWrapper = document . createElement ( "div" ) ;
114- const handleLanguageChange = ( event : Event ) => {
115- const language = ( event . target as HTMLSelectElement ) . value ;
116112
117- editor . updateBlock ( block . id , { props : { language } } ) ;
118- } ;
113+ let removeSelectChangeListener = undefined ;
119114
120- Object . entries ( options . supportedLanguages ?? { } ) . forEach (
121- ( [ id , { name } ] ) => {
122- const option = document . createElement ( "option" ) ;
115+ if ( options . supportedLanguages ) {
116+ const select = document . createElement ( "select" ) ;
123117
124- option . value = id ;
125- option . text = name ;
126- select . appendChild ( option ) ;
127- } ,
128- ) ;
118+ const handleLanguageChange = ( event : Event ) => {
119+ const language = ( event . target as HTMLSelectElement ) . value ;
120+
121+ editor . updateBlock ( block . id , { props : { language } } ) ;
122+ } ;
123+ select . addEventListener ( "change" , handleLanguageChange ) ;
129124
130- selectWrapper . contentEditable = "false" ;
131- select . value = block . props . language || options . defaultLanguage || "text" ;
132- wrapper . appendChild ( selectWrapper ) ;
125+ const selectWrapper = document . createElement ( "div" ) ;
126+ selectWrapper . contentEditable = "false" ;
127+ select . value =
128+ block . props . language || options . defaultLanguage || "text" ;
129+
130+ Object . entries ( options . supportedLanguages ?? { } ) . forEach (
131+ ( [ id , { name } ] ) => {
132+ const option = document . createElement ( "option" ) ;
133+
134+ option . value = id ;
135+ option . text = name ;
136+ select . appendChild ( option ) ;
137+ } ,
138+ ) ;
139+ selectWrapper . appendChild ( select ) ;
140+ wrapper . appendChild ( selectWrapper ) ;
141+
142+ removeSelectChangeListener = ( ) =>
143+ select . removeEventListener ( "change" , handleLanguageChange ) ;
144+ }
133145 wrapper . appendChild ( pre ) ;
134- selectWrapper . appendChild ( select ) ;
135- select . addEventListener ( "change" , handleLanguageChange ) ;
146+
136147 return {
137148 dom : wrapper ,
138149 contentDOM : code ,
139150 destroy : ( ) => {
140- select . removeEventListener ( "change" , handleLanguageChange ) ;
151+ removeSelectChangeListener ?. ( ) ;
141152 } ,
142153 } ;
143154 } ,
0 commit comments