From d443ecabaebb2e1c3c182c02c198fcda8200328f Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Wed, 20 Aug 2025 16:30:44 -0400 Subject: [PATCH] Move most common "handler" functions (textChange/splitMoves/etc.) --- .../pages/basePages/editPage/editPage.jsx | 60 +++++++++++++++ client/homebrew/pages/homePage/homePage.jsx | 22 ------ client/homebrew/pages/newPage/newPage.jsx | 75 ------------------- 3 files changed, 60 insertions(+), 97 deletions(-) diff --git a/client/homebrew/pages/basePages/editPage/editPage.jsx b/client/homebrew/pages/basePages/editPage/editPage.jsx index 8915489d4..bba1d5bc9 100644 --- a/client/homebrew/pages/basePages/editPage/editPage.jsx +++ b/client/homebrew/pages/basePages/editPage/editPage.jsx @@ -27,6 +27,66 @@ const BaseEditPage = (props)=>{ const [currentEditorCursorPageNum, setCurrentEditorCursorPageNum] = useState(1); const [currentBrewRendererPageNum, setCurrentBrewRendererPageNum] = useState(1); const [themeBundle, setThemeBundle] = useState({}); + + const editorRef = useRef(null); + + const handleSplitMove = ()=>{ + editorRef.current.update(); + }; + + const handleEditorViewPageChange = (pageNumber)=>{ + setCurrentEditorViewPageNum(pageNumber); + }; + + const handleEditorCursorPageChange = (pageNumber)=>{ + setCurrentEditorCursorPageNum(pageNumber); + }; + + const handleBrewRendererPageChange = (pageNumber)=>{ + setCurrentBrewRendererPageNum(pageNumber); + }; + + const handleTextChange = (text)=>{ + //If there are HTML errors, run the validator on every change to give quick feedback + if(htmlErrors.length) + htmlErrors = Markdown.validate(text); + + setHTMLErrors(htmlErrors); + setBrew((prevBrew) => ({ ...prevBrew, text })); + + // TODO: ONLY ON /NEW PAGE + localStorage.setItem(BREWKEY, text); + }; + + const handleStyleChange = (style)=>{ + setBrew((prevBrew) => ({ ...prevBrew, style })); + + if(props.useLocalStorage) + localStorage.setItem(STYLEKEY, style); + }; + + const handleSnipChange = (snippet)=>{ + setBrew((prevBrew) => ({ ...prevBrew, snippets: snippet })); + }; + + const handleMetaChange = (metadata, field=undefined)=>{ + if(field == 'theme' || field == 'renderer') // Fetch theme bundle only if theme or renderer was changed + fetchThemeBundle(setError, setThemeBundle, metadata.renderer, metadata.theme); + + setBrew((prevBrew) => ({ ...prevBrew, ...metadata })); + + if(props.useLocalStorage) + localStorage.setItem(METAKEY, JSON.stringify({ + 'renderer' : metadata.renderer, + 'theme' : metadata.theme, + 'lang' : metadata.lang + })); + }; + + const clearError = ()=>{ + setError(null); + setIsSaving(false); + }; return (
diff --git a/client/homebrew/pages/homePage/homePage.jsx b/client/homebrew/pages/homePage/homePage.jsx index 9168f1950..2eb6f3f61 100644 --- a/client/homebrew/pages/homePage/homePage.jsx +++ b/client/homebrew/pages/homePage/homePage.jsx @@ -49,28 +49,6 @@ const HomePage = createClass({ this.setState({ isSaving: false, error: err }); }); }, - handleSplitMove : function(){ - this.editor.current.update(); - }, - - handleEditorViewPageChange : function(pageNumber){ - this.setState({ currentEditorViewPageNum: pageNumber }); - }, - - handleEditorCursorPageChange : function(pageNumber){ - this.setState({ currentEditorCursorPageNum: pageNumber }); - }, - - handleBrewRendererPageChange : function(pageNumber){ - this.setState({ currentBrewRendererPageNum: pageNumber }); - }, - - handleTextChange : function(text){ - this.setState((prevState)=>({ - brew : { ...prevState.brew, text: text }, - })); - }, - renderSaveButton : function(){ if(this.state.isSaving){ return diff --git a/client/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx index 87c03798f..7270df289 100644 --- a/client/homebrew/pages/newPage/newPage.jsx +++ b/client/homebrew/pages/newPage/newPage.jsx @@ -75,81 +75,6 @@ const NewPage = createClass({ document.removeEventListener('keydown', this.handleControlKeys); }, - handleControlKeys : function(e){ - if(!(e.ctrlKey || e.metaKey)) return; - const S_KEY = 83; - const P_KEY = 80; - if(e.keyCode == S_KEY) this.save(); - if(e.keyCode == P_KEY) printCurrentBrew(); - if(e.keyCode == P_KEY || e.keyCode == S_KEY){ - e.stopPropagation(); - e.preventDefault(); - } - }, - - handleSplitMove : function(){ - this.editor.current.update(); - }, - - handleEditorViewPageChange : function(pageNumber){ - this.setState({ currentEditorViewPageNum: pageNumber }); - }, - - handleEditorCursorPageChange : function(pageNumber){ - this.setState({ currentEditorCursorPageNum: pageNumber }); - }, - - handleBrewRendererPageChange : function(pageNumber){ - this.setState({ currentBrewRendererPageNum: pageNumber }); - }, - - handleTextChange : function(text){ - //If there are errors, run the validator on every change to give quick feedback - let htmlErrors = this.state.htmlErrors; - if(htmlErrors.length) htmlErrors = Markdown.validate(text); - - this.setState((prevState)=>({ - brew : { ...prevState.brew, text: text }, - htmlErrors : htmlErrors, - })); - localStorage.setItem(BREWKEY, text); - }, - - handleStyleChange : function(style){ - this.setState((prevState)=>({ - brew : { ...prevState.brew, style: style }, - })); - localStorage.setItem(STYLEKEY, style); - }, - - handleSnipChange : function(snippet){ - //If there are errors, run the validator on every change to give quick feedback - let htmlErrors = this.state.htmlErrors; - if(htmlErrors.length) htmlErrors = Markdown.validate(snippet); - - this.setState((prevState)=>({ - brew : { ...prevState.brew, snippets: snippet }, - htmlErrors : htmlErrors, - }), ()=>{if(this.state.autoSave) this.trySave();}); - }, - - handleMetaChange : function(metadata, field=undefined){ - if(field == 'theme' || field == 'renderer') // Fetch theme bundle only if theme or renderer was changed - fetchThemeBundle(this, metadata.renderer, metadata.theme); - - this.setState((prevState)=>({ - brew : { ...prevState.brew, ...metadata }, - }), ()=>{ - localStorage.setItem(METAKEY, JSON.stringify({ - // 'title' : this.state.brew.title, - // 'description' : this.state.brew.description, - 'renderer' : this.state.brew.renderer, - 'theme' : this.state.brew.theme, - 'lang' : this.state.brew.lang - })); - }); - ; - }, save : async function(){ this.setState({