diff --git a/client/homebrew/editor/editor.jsx b/client/homebrew/editor/editor.jsx index dc799f263..62412319b 100644 --- a/client/homebrew/editor/editor.jsx +++ b/client/homebrew/editor/editor.jsx @@ -22,6 +22,20 @@ const EditorThemes = Object.entries(themes) .filter(([name, value])=>Array.isArray(value) && !name.endsWith('Init') && !name.endsWith('Style')) .map(([name])=>name); +const themeNames = Object.entries(themes) + .filter(([name, value])=>Array.isArray(value) && + !name.endsWith('Init') && + !name.endsWith('Style') + ) + .map(([name])=>name); + +const EditorThemeNameList = [ + 'default', + ...themeNames + .filter((name)=>name !== 'default') + .sort((a, b)=>a.localeCompare(b)) +]; + //const PAGEBREAK_REGEX_V3 = /^(?=\\page(?:break)?(?: *{[^\n{}]*})?$)/m; //const SNIPPETBREAK_REGEX_V3 = /^\\snippet\ .*$/; const DEFAULT_STYLE_TEXT = dedent` @@ -53,7 +67,6 @@ const Editor = forwardRef( onCursorPageChange = ()=>{}, onViewPageChange = ()=>{}, - editorTheme = 'default', renderer = 'legacy', moveBrew, @@ -72,7 +85,6 @@ const Editor = forwardRef( }, ref, )=>{ - const [currentEditorTheme, setEditorTheme] = useState(editorTheme); const [view, setView] = useState('text'); // 'text', 'style', 'meta', 'snippet' const [snippetBarHeight, setSnippetBarHeight] = useState(26); const [editorSettings, setEditorSettings] = useState({ @@ -80,7 +92,8 @@ const Editor = forwardRef( showImagePreviews: true, activeLineShading: true, lineNumbers: true, - fontSize: 13 + fontSize: 13, + editorTheme: 'default', }) const editor = useRef(null); @@ -100,8 +113,10 @@ const Editor = forwardRef( brewRenderer.onload = ()=>brewRenderer.contentDocument?.addEventListener('keydown', handleControlKeys); document.addEventListener('keydown', handleControlKeys); - const editorTheme = window.localStorage.getItem(EDITOR_THEME_KEY); - if(editorTheme && EditorThemes.includes(editorTheme)) setEditorTheme(editorTheme); else setEditorTheme('default'); + const localEditorTheme = window.localStorage.getItem(EDITOR_THEME_KEY); + if(localEditorTheme && EditorThemes.includes(localEditorTheme)) { + setEditorSettings({...editorSettings , editorTheme: localEditorTheme}) + } else setEditorSettings({...editorSettings , editorTheme: 'default'}); const localEditorSettings = window.localStorage.getItem(EDITOR_SETTINGS_KEY); if (localEditorSettings) setEditorSettings(JSON.parse(localEditorSettings)); const snippetBar = document.querySelector('.editor > .snippetBar'); @@ -220,7 +235,7 @@ const Editor = forwardRef( const updateEditorTheme = (newTheme)=>{ window.localStorage.setItem(EDITOR_THEME_KEY, newTheme); - setEditorTheme(newTheme); + setEditorSettings({...editorSettings , editorTheme: newTheme}) }; const updateEditorSettings = (newEditorSettings) => { @@ -242,7 +257,7 @@ const Editor = forwardRef( onChange={onBrewChange('text')} onCursorChange={(page)=>updateCurrentCursorPage(page)} onViewChange={(page)=>updateCurrentViewPage(page)} - editorTheme={currentEditorTheme} + editorTheme={editorSettings.editorTheme} renderer={brew.renderer} style={{ height: `calc(100% - ${snippetBarHeight}px)` }} settings={editorSettings} @@ -261,7 +276,7 @@ const Editor = forwardRef( view={view} value={brew.style ?? DEFAULT_STYLE_TEXT} onChange={onBrewChange('style')} - editorTheme={currentEditorTheme} + editorTheme={editorSettings.editorTheme} renderer={brew.renderer} style={{ height: `calc(100% - ${snippetBarHeight}px)` }} settings={editorSettings} @@ -284,7 +299,7 @@ const Editor = forwardRef( value={brew.snippets} onChange={onBrewChange('snippets')} enableFolding={true} - editorTheme={currentEditorTheme} + editorTheme={editorSettings.editorTheme} renderer={brew.renderer} style={{ height: `calc(100% - 25px)` }} settings={editorSettings} @@ -318,6 +333,7 @@ const Editor = forwardRef( /> @@ -357,7 +373,7 @@ const Editor = forwardRef( foldCode={foldCode} unfoldCode={unfoldCode} historySize={historySize()} - currentEditorTheme={currentEditorTheme} + currentEditorTheme={editorSettings.editorTheme} updateEditorTheme={updateEditorTheme} themeBundle={themeBundle} cursorPos={codeEditor.current?.getCursorPosition() || {}} diff --git a/client/homebrew/editor/settingsEditor/settingsEditor.jsx b/client/homebrew/editor/settingsEditor/settingsEditor.jsx index 1cd6b3784..06d88d4f9 100644 --- a/client/homebrew/editor/settingsEditor/settingsEditor.jsx +++ b/client/homebrew/editor/settingsEditor/settingsEditor.jsx @@ -1,7 +1,7 @@ import '../uiEditor.less'; import React, { useState } from 'react'; -const SettingsEditor = ({ settings, updateSettings = ()=>{} })=>{ +const SettingsEditor = ({ settings, updateSettings = ()=>{}, EditorThemeNameList })=>{ const [currentSettings, setCurrentSettings] = useState(settings); const validations = { @@ -52,6 +52,20 @@ const SettingsEditor = ({ settings, updateSettings = ()=>{} })=>{ return (

Editor Settings

+ +
+ +
+ +
+
+ {/*
-
- - {this.state.themeSelector && this.renderThemeSelector()} -
}