@@ -273,6 +273,9 @@ helpMenu.addButton(
273273 menu . append ( title , tabs , body , close ) ;
274274 menu . setAttribute ( "closedBy" , "any" ) ;
275275 menu . showModal ( ) ;
276+ menu . onclose = ( ) => {
277+ menu . remove ( ) ;
278+ } ;
276279 } ,
277280) ;
278281
@@ -281,6 +284,48 @@ helpButton.textContent = I18n.help.help();
281284actionRow . append ( helpButton ) ;
282285helpMenu . bindContextmenu ( helpButton , undefined , undefined , true ) ;
283286
287+ const settingsButton = document . createElement ( "button" ) ;
288+ settingsButton . textContent = I18n . settings . settings ( ) ;
289+ actionRow . append ( settingsButton ) ;
290+ let theme = localStorage . getItem ( "theme" ) || ( "dark" as "light" ) || "dark" ;
291+ function updateTheme ( ) {
292+ document . body . className = theme + "-theme" ;
293+ }
294+ updateTheme ( ) ;
295+ settingsButton . onclick = ( ) => {
296+ const menu = document . createElement ( "dialog" ) ;
297+ menu . classList . add ( "flexttb" ) ;
298+ const h1 = document . createElement ( "h1" ) ;
299+ h1 . textContent = I18n . settings . settings ( ) ;
300+
301+ const themeSpan = document . createElement ( "span" ) ;
302+ themeSpan . textContent = I18n . settings . theme . theme ( ) ;
303+
304+ const themeSelect = document . createElement ( "select" ) ;
305+ const light = document . createElement ( "option" ) ;
306+ light . textContent = I18n . settings . theme . light ( ) ;
307+ light . value = "light" ;
308+ const dark = document . createElement ( "option" ) ;
309+ dark . textContent = I18n . settings . theme . dark ( ) ;
310+ dark . value = "dark" ;
311+ if ( theme === "dark" ) dark . selected = true ;
312+ themeSelect . value = theme ;
313+ themeSelect . append ( light , dark ) ;
314+ themeSelect . onchange = ( ) => {
315+ theme = themeSelect . value ;
316+ localStorage . setItem ( "theme" , theme ) ;
317+ updateTheme ( ) ;
318+ } ;
319+
320+ menu . append ( h1 , themeSpan , themeSelect ) ;
321+ document . body . append ( menu ) ;
322+ menu . setAttribute ( "closedBy" , "any" ) ;
323+ menu . showModal ( ) ;
324+ menu . onclose = ( ) => {
325+ menu . remove ( ) ;
326+ } ;
327+ } ;
328+
284329const area = document . getElementById ( "area" ) as HTMLElement ;
285330if ( ! area ) throw Error ( "area not found" ) ;
286331let editors : Editor [ ] = [ ] ;
0 commit comments