From a74d9d9ca8f51cf8a7a527307a1d6bd48d1cbaaa Mon Sep 17 00:00:00 2001 From: Eric Date: Thu, 1 Oct 2026 01:06:09 +1000 Subject: [PATCH 1/6] disallow clanker access to /share, /download, /print does not block search engine bots, just the scrapers that feed the LLM training --- robots.txt | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/robots.txt b/robots.txt index 9abbfb965..c7fd30d1c 100644 --- a/robots.txt +++ b/robots.txt @@ -2,3 +2,45 @@ User-agent: * Disallow: /edit/ +# AI / LLM training crawlers + +User-agent: GPTBot +Disallow: /share/ +Disallow: /download/ +Disallow: /print/ + +User-agent: ClaudeBot +Disallow: /share/ +Disallow: /download/ +Disallow: /print/ + +User-agent: CCBot +Disallow: /share/ +Disallow: /download/ +Disallow: /print/ + +User-agent: Google-Extended +Disallow: /share/ +Disallow: /download/ +Disallow: /print/ + +User-agent: Bytespider +Disallow: /share/ +Disallow: /download/ +Disallow: /print/ + +User-agent: Applebot-Extended +Disallow: /share/ +Disallow: /download/ +Disallow: /print/ + +User-agent: Meta-ExternalAgent +Disallow: /share/ +Disallow: /download/ +Disallow: /print/ + +User-agent: Amazonbot +Disallow: /share/ +Disallow: /download/ +Disallow: /print/ + From 658eab7ee7b3c568e4b36de07fdf293b33b50ca2 Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Wed, 30 Sep 2026 13:36:48 -0400 Subject: [PATCH 2/6] Combine user agents since they all use the same rules --- robots.txt | 30 +----------------------------- 1 file changed, 1 insertion(+), 29 deletions(-) diff --git a/robots.txt b/robots.txt index c7fd30d1c..03ccfb57f 100644 --- a/robots.txt +++ b/robots.txt @@ -5,42 +5,14 @@ Disallow: /edit/ # AI / LLM training crawlers User-agent: GPTBot -Disallow: /share/ -Disallow: /download/ -Disallow: /print/ - User-agent: ClaudeBot -Disallow: /share/ -Disallow: /download/ -Disallow: /print/ - User-agent: CCBot -Disallow: /share/ -Disallow: /download/ -Disallow: /print/ - User-agent: Google-Extended -Disallow: /share/ -Disallow: /download/ -Disallow: /print/ - User-agent: Bytespider -Disallow: /share/ -Disallow: /download/ -Disallow: /print/ - User-agent: Applebot-Extended -Disallow: /share/ -Disallow: /download/ -Disallow: /print/ - User-agent: Meta-ExternalAgent -Disallow: /share/ -Disallow: /download/ -Disallow: /print/ - User-agent: Amazonbot Disallow: /share/ Disallow: /download/ Disallow: /print/ - +Disallow: /edit/ From d954ff6981a98db5f2575f34b67e1399e5637fa2 Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Wed, 30 Sep 2026 14:13:44 -0400 Subject: [PATCH 3/6] Add one more path for broken-image temporary fix --- vitePlugins/generateAssetsPlugin.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/vitePlugins/generateAssetsPlugin.js b/vitePlugins/generateAssetsPlugin.js index 4e838478b..7eef8bda5 100644 --- a/vitePlugins/generateAssetsPlugin.js +++ b/vitePlugins/generateAssetsPlugin.js @@ -12,9 +12,13 @@ export function generateAssetsPlugin(isDev = false) { // Copy favicon await fs.copy('./client/homebrew/favicon.ico', `${buildDir}/assets/favicon.ico`); - //hopefully temporary to fix 406 flood coming from editor + //Copy this image into multiple paths to avoid server spam where browser requests an image + //at the wrong path, gets a 406, then in response requests broken-image which also fails. Error handler + //used the wrong path for this image causing an infinite request loop. Should be able to remove + //in some time once all users haver refreshed their browser await fs.copy('./client/icons/broken-image.jpg', `${buildDir}/edit/client/icons/broken-image.jpg`); await fs.copy('./client/icons/broken-image.jpg', `${buildDir}/new/client/icons/broken-image.jpg`); + await fs.copy('./client/icons/broken-image.jpg', `${buildDir}/client/icons/broken-image.jpg`); // Copy shared styles/fonts const assets = fs.readdirSync('./shared/naturalcrit/styles'); From b673f4ea10485c0f7f23bb21feee894a4aae91b6 Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Wed, 30 Sep 2026 21:19:10 +0000 Subject: [PATCH 4/6] Move main component rendering to common hook --- client/homebrew/pages/editPage/editPage.jsx | 76 +++-------------- client/homebrew/pages/homePage/homePage.jsx | 64 +++------------ client/homebrew/pages/newPage/newPage.jsx | 58 +++---------- .../utils/commonEditPageFunctions.jsx | 82 ++++++++++++++++++- 4 files changed, 114 insertions(+), 166 deletions(-) diff --git a/client/homebrew/pages/editPage/editPage.jsx b/client/homebrew/pages/editPage/editPage.jsx index 990403d6c..b8a254497 100644 --- a/client/homebrew/pages/editPage/editPage.jsx +++ b/client/homebrew/pages/editPage/editPage.jsx @@ -11,10 +11,6 @@ import { DEFAULT_BREW_LOAD } from '../../../../server/brewDefau import useCommonEditPageFunctions from '../../utils/commonEditPageFunctions.jsx'; -import SplitPane from '@components/splitPane/splitPane.jsx'; -import Editor from '../../editor/editor.jsx'; -import BrewRenderer from '../../brewRenderer/brewRenderer.jsx'; - import Nav from '@navbar/nav.jsx'; import Navbar from '@navbar/navbar.jsx'; import NewBrewItem from '@navbar/newbrew.navitem.jsx'; @@ -27,14 +23,11 @@ import RecentNavItems from '@navbar/recent.navitem.jsx'; const { both: RecentNavItem } = RecentNavItems; // Page specific imports -import Headtags from '../../../../vitreum/headtags.js'; -const Meta = Headtags.Meta; import { md5 } from 'hash-wasm'; import { gzipSync, strToU8 } from 'fflate'; import { makePatches, stringifyPatches } from '@sanity/diff-match-patch'; import ShareNavItem from '@navbar/share.navitem.jsx'; -import LockNotification from './lockNotification/lockNotification.jsx'; import { updateHistory, versionHistoryGarbageCollection } from '../../utils/versionHistory.js'; import googleDriveIcon from '../../googleDrive.svg'; @@ -43,8 +36,10 @@ const STYLEKEY = 'HB_newPage_style'; const SNIPKEY = 'HB_newPage_snippets'; const METAKEY = 'HB_newPage_meta'; -const useLocalStorage = false; -const sandbox = false; +const useLocalStorage = false; +const sandbox = false; +const showFloatingButtons = false; +const pageName = "editPage"; const EditPage = (props)=>{ props = { @@ -56,25 +51,13 @@ const EditPage = (props)=>{ const [saveGoogle, setSaveGoogle] = useState(!!props.brew.googleId); const [error, setError] = useState(null); const [HTMLErrors, setHTMLErrors] = useState(hbfm.validate(props.brew.text)); - const [currentEditorViewPageNum, setCurrentEditorViewPageNum] = useState(1); - const [currentEditorCursorPageNum, setCurrentEditorCursorPageNum] = useState(1); - const [currentBrewRendererPageNum, setCurrentBrewRendererPageNum] = useState(1); - const [themeBundle, setThemeBundle] = useState({}); const [alertTrashedGoogleBrew, setAlertTrashedGoogleBrew] = useState(props.brew.trashed); const [alertNoGoogleToTransfer, setAlertNoGoogleToTransfer] = useState(false); const [alertOwnershipToTransfer, setAlertOwnershipToTransfer] = useState(false); const [confirmGoogleTransfer, setConfirmGoogleTransfer] = useState(false); - const editorRef = useRef(null); const lastSavedBrew = useRef(_.cloneDeep(props.brew)); - const updateBrew = (newData)=>setCurrentBrew((prevBrew)=>({ - ...prevBrew, - style : newData.style, - text : newData.text, - snippets : newData.snippets - })); - const handleGoogleClick = ()=>{ if(currentBrew.authors.length > 0 && global.account?.username !== currentBrew.authors[0]) { setAlertOwnershipToTransfer(true); @@ -238,12 +221,13 @@ const EditPage = (props)=>{ toggleAutoSave, clearError, renderSaveButton, + renderPanels, autoSaveEnabled, - trySave + trySave, + currentBrewRendererPageNum } = useCommonEditPageFunctions({ saveGoogle, setError, - setThemeBundle, HTMLErrors, setHTMLErrors, currentBrew, @@ -255,51 +239,15 @@ const EditPage = (props)=>{ METAKEY, hbfm, sandbox, + showFloatingButtons, lastSavedBrew, - editorRef, save, + renderNavbar, + pageName, + userThemes: props.userThemes }); - return ( -
- - - {renderNavbar()} - - {currentBrew.lock && } - -
- - - - -
-
- ); + return renderPanels(); }; export default EditPage; diff --git a/client/homebrew/pages/homePage/homePage.jsx b/client/homebrew/pages/homePage/homePage.jsx index af4c4cbf5..a3fb3e557 100644 --- a/client/homebrew/pages/homePage/homePage.jsx +++ b/client/homebrew/pages/homePage/homePage.jsx @@ -11,10 +11,6 @@ import { DEFAULT_BREW } from '../../../../server/brewDefau import useCommonEditPageFunctions from '../../utils/commonEditPageFunctions.jsx'; -import SplitPane from '@components/splitPane/splitPane.jsx'; -import Editor from '../../editor/editor.jsx'; -import BrewRenderer from '../../brewRenderer/brewRenderer.jsx'; - import Nav from '@navbar/nav.jsx'; import Navbar from '@navbar/navbar.jsx'; import NewBrewItem from '@navbar/newbrew.navitem.jsx'; @@ -28,16 +24,17 @@ const { both: RecentNavItem } = RecentNavItems; // Page specific imports -import Headtags from '@vitreum/headtags.js'; -const Meta = Headtags.Meta; + const BREWKEY = 'HB_newPage_content'; const STYLEKEY = 'HB_newPage_style'; const SNIPKEY = 'HB_newPage_snippets'; const METAKEY = 'HB_newPage_meta'; -const useLocalStorage = false; -const sandbox = true; +const useLocalStorage = false; +const sandbox = true; +const showFloatingButtons = true; +const pageName = "homePage"; const HomePage =(props)=>{ props = { @@ -49,12 +46,7 @@ const HomePage =(props)=>{ const [saveGoogle, setSaveGoogle] = useState(global.account?.googleId ? true : false); const [error, setError] = useState(undefined); const [HTMLErrors, setHTMLErrors] = useState(hbfm.validate(props.brew.text)); - const [currentEditorViewPageNum, setCurrentEditorViewPageNum] = useState(1); - const [currentEditorCursorPageNum, setCurrentEditorCursorPageNum] = useState(1); - const [currentBrewRendererPageNum, setCurrentBrewRendererPageNum] = useState(1); - const [themeBundle, setThemeBundle] = useState({}); - const editorRef = useRef(null); const lastSavedBrew = useRef(_.cloneDeep(props.brew)); const save = async (brew, saveToGoogle)=>{ @@ -93,12 +85,12 @@ const HomePage =(props)=>{ handleBrewChange, clearError, renderSaveButton, + renderPanels, unsavedChanges, trySave } = useCommonEditPageFunctions({ saveGoogle, setError, - setThemeBundle, HTMLErrors, setHTMLErrors, currentBrew, @@ -110,49 +102,15 @@ const HomePage =(props)=>{ METAKEY, hbfm, sandbox, + showFloatingButtons, lastSavedBrew, - editorRef, save, + renderNavbar, + pageName, + userThemes: {} }); - return ( -
- - {renderNavbar()} -
- - - - -
-
trySave(true, true, saveGoogle)}> - Save current -
- - - Create your own - -
- ); + return renderPanels(); }; export default HomePage; diff --git a/client/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx index b7f8fb7cd..0e86381c1 100644 --- a/client/homebrew/pages/newPage/newPage.jsx +++ b/client/homebrew/pages/newPage/newPage.jsx @@ -12,10 +12,6 @@ import { printCurrentBrew, fetchThemeBundle, splitTextStyleAndMetadata } from '@ import useCommonEditPageFunctions from '../../utils/commonEditPageFunctions.jsx'; -import SplitPane from '@components/splitPane/splitPane.jsx'; -import Editor from '../../editor/editor.jsx'; -import BrewRenderer from '../../brewRenderer/brewRenderer.jsx'; - import Nav from '@navbar/nav.jsx'; import Navbar from '@navbar/navbar.jsx'; import NewBrewItem from '@navbar/newbrew.navitem.jsx'; @@ -35,8 +31,10 @@ const METAKEY = 'HB_newPage_meta'; const SAVEKEYPREFIX = 'HB_editor_defaultSave_'; -const useLocalStorage = true; -const sandbox = true; +const useLocalStorage = true; +const sandbox = true; +const showFloatingButtons = false; +const pageName = "newPage"; const NewPage = (props)=>{ props = { @@ -48,12 +46,7 @@ const NewPage = (props)=>{ const [saveGoogle, setSaveGoogle] = useState(global.account?.googleId ? true : false); const [error, setError] = useState(null); const [HTMLErrors, setHTMLErrors] = useState(hbfm.validate(props.brew.text)); - const [currentEditorViewPageNum, setCurrentEditorViewPageNum] = useState(1); - const [currentEditorCursorPageNum, setCurrentEditorCursorPageNum] = useState(1); - const [currentBrewRendererPageNum, setCurrentBrewRendererPageNum] = useState(1); - const [themeBundle, setThemeBundle] = useState({}); - const editorRef = useRef(null); const lastSavedBrew = useRef(_.cloneDeep(props.brew)); useEffect(()=>{ @@ -140,11 +133,11 @@ const NewPage = (props)=>{ handleSplitMove, handleBrewChange, clearError, - renderSaveButton + renderSaveButton, + renderPanels } = useCommonEditPageFunctions({ saveGoogle, setError, - setThemeBundle, HTMLErrors, setHTMLErrors, currentBrew, @@ -156,44 +149,15 @@ const NewPage = (props)=>{ METAKEY, hbfm, sandbox, + showFloatingButtons, lastSavedBrew, - editorRef, save, + renderNavbar, + pageName, + userThemes: props.userThemes }); - return ( -
- {renderNavbar()} -
- - - - -
-
- ); + return renderPanels(); }; export default NewPage; diff --git a/client/homebrew/utils/commonEditPageFunctions.jsx b/client/homebrew/utils/commonEditPageFunctions.jsx index b4d3022b4..0945b37be 100644 --- a/client/homebrew/utils/commonEditPageFunctions.jsx +++ b/client/homebrew/utils/commonEditPageFunctions.jsx @@ -3,6 +3,13 @@ import { printCurrentBrew, fetchThemeBundle } from '@shared/helpers.js'; import _ from 'lodash'; import Nav from '@navbar/nav.jsx'; +import Headtags from '@vitreum/headtags.js'; +import SplitPane from '@components/splitPane/splitPane.jsx'; +import Editor from '../editor/editor.jsx'; +import BrewRenderer from '../brewRenderer/brewRenderer.jsx'; +import LockNotification from '../pages/editPage/lockNotification/lockNotification.jsx'; +const Meta = Headtags.Meta; + const AUTOSAVE_KEY = 'HB_editor_autoSaveOn'; const SAVE_TIMEOUT = 10000; //Autosave 10 seconds after last change @@ -13,7 +20,6 @@ export default function useCommonEditPageFunctions(dependencies) { const { saveGoogle, setError, - setThemeBundle, HTMLErrors, setHTMLErrors, currentBrew, @@ -25,9 +31,12 @@ export default function useCommonEditPageFunctions(dependencies) { METAKEY, hbfm, sandbox, + showFloatingButtons, lastSavedBrew, - editorRef, save, + renderNavbar, + pageName, + userThemes = {} } = dependencies; const [isSaving, setIsSaving] = useState(false); @@ -35,10 +44,16 @@ export default function useCommonEditPageFunctions(dependencies) { const [autoSaveEnabled, setAutoSaveEnabled] = useState(!sandbox); const [warnUnsavedChanges, setWarnUnsavedChanges] = useState(true); const [unsavedChanges, setUnsavedChanges] = useState(false); + const [themeBundle, setThemeBundle] = useState({}); + + const [currentEditorViewPageNum, setCurrentEditorViewPageNum] = useState(1); + const [currentEditorCursorPageNum, setCurrentEditorCursorPageNum] = useState(1); + const [currentBrewRendererPageNum, setCurrentBrewRendererPageNum] = useState(1); const unsavedChangesRef = useRef(unsavedChanges); // onBeforeUnload lives outside React and needs ref to unsavedChanges const warnUnsavedTimeout = useRef(null); // timers live outside React and need ref to consistently track time const saveTimeout = useRef(null); + const editorRef = useRef(null); //==--------- Page setup ----------==// useEffect(()=>{ @@ -171,6 +186,67 @@ export default function useCommonEditPageFunctions(dependencies) { return saved; }; + //TODO: Candidate for removal; only used in editPage, so may not be necessary + const updateBrew = (newData)=>setCurrentBrew((prevBrew)=>({ + ...prevBrew, + style : newData.style, + text : newData.text, + snippets : newData.snippets + })); + + const renderFloatingSaveButtons = ()=>( + <> +
trySave(true, true, saveGoogle)}> + Save current +
+ + + Create your own + + + ); + + const renderPanels = ()=>( +
+ + {(pageName == 'editPage') && } + {renderNavbar()} + {currentBrew.lock && } +
+ + + + +
+ {showFloatingButtons && renderFloatingSaveButtons()} +
+ ); + return { handleSplitMove, handleBrewChange, @@ -178,7 +254,9 @@ export default function useCommonEditPageFunctions(dependencies) { clearError, trySave, renderSaveButton, + renderPanels, autoSaveEnabled, unsavedChanges, + currentBrewRendererPageNum }; } \ No newline at end of file From d18859e17d27fed349a7dbaba173d1610b0676aa Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Wed, 30 Sep 2026 19:34:45 -0400 Subject: [PATCH 5/6] Fix editor tab buttons missing --- client/homebrew/pages/editPage/editPage.jsx | 4 +++- client/homebrew/pages/homePage/homePage.jsx | 2 ++ client/homebrew/pages/newPage/newPage.jsx | 2 ++ client/homebrew/utils/commonEditPageFunctions.jsx | 3 ++- 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/client/homebrew/pages/editPage/editPage.jsx b/client/homebrew/pages/editPage/editPage.jsx index b8a254497..7cc3c7ef6 100644 --- a/client/homebrew/pages/editPage/editPage.jsx +++ b/client/homebrew/pages/editPage/editPage.jsx @@ -37,8 +37,9 @@ const SNIPKEY = 'HB_newPage_snippets'; const METAKEY = 'HB_newPage_meta'; const useLocalStorage = false; -const sandbox = false; +const sandbox = false; const showFloatingButtons = false; +const showEditorButtons = true; const pageName = "editPage"; const EditPage = (props)=>{ @@ -244,6 +245,7 @@ const EditPage = (props)=>{ save, renderNavbar, pageName, + showEditorButtons, userThemes: props.userThemes }); diff --git a/client/homebrew/pages/homePage/homePage.jsx b/client/homebrew/pages/homePage/homePage.jsx index a3fb3e557..8364c533f 100644 --- a/client/homebrew/pages/homePage/homePage.jsx +++ b/client/homebrew/pages/homePage/homePage.jsx @@ -34,6 +34,7 @@ const METAKEY = 'HB_newPage_meta'; const useLocalStorage = false; const sandbox = true; const showFloatingButtons = true; +const showEditorButtons = false; const pageName = "homePage"; const HomePage =(props)=>{ @@ -107,6 +108,7 @@ const HomePage =(props)=>{ save, renderNavbar, pageName, + showEditorButtons, userThemes: {} }); diff --git a/client/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx index 0e86381c1..18fb4a521 100644 --- a/client/homebrew/pages/newPage/newPage.jsx +++ b/client/homebrew/pages/newPage/newPage.jsx @@ -34,6 +34,7 @@ const SAVEKEYPREFIX = 'HB_editor_defaultSave_'; const useLocalStorage = true; const sandbox = true; const showFloatingButtons = false; +const showEditorButtons = true; const pageName = "newPage"; const NewPage = (props)=>{ @@ -154,6 +155,7 @@ const NewPage = (props)=>{ save, renderNavbar, pageName, + showEditorButtons, userThemes: props.userThemes }); diff --git a/client/homebrew/utils/commonEditPageFunctions.jsx b/client/homebrew/utils/commonEditPageFunctions.jsx index 0945b37be..c8badf858 100644 --- a/client/homebrew/utils/commonEditPageFunctions.jsx +++ b/client/homebrew/utils/commonEditPageFunctions.jsx @@ -36,6 +36,7 @@ export default function useCommonEditPageFunctions(dependencies) { save, renderNavbar, pageName, + showEditorButtons, userThemes = {} } = dependencies; @@ -221,7 +222,7 @@ export default function useCommonEditPageFunctions(dependencies) { reportError={setError} renderer={currentBrew.renderer} userThemes={userThemes} - showEditButtons={false} + showEditButtons={showEditorButtons} themeBundle={themeBundle} updateBrew={updateBrew} onCursorPageChange={setCurrentEditorCursorPageNum} From df108c95d6b6166cc7c212b978b1b5d6c6a2d2da Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Wed, 30 Sep 2026 20:24:26 -0400 Subject: [PATCH 6/6] Shift setHTMLErrors into common hook --- client/homebrew/pages/editPage/editPage.jsx | 7 ------- client/homebrew/pages/homePage/homePage.jsx | 9 +-------- client/homebrew/pages/newPage/newPage.jsx | 5 ----- client/homebrew/utils/commonEditPageFunctions.jsx | 15 +++++++-------- 4 files changed, 8 insertions(+), 28 deletions(-) diff --git a/client/homebrew/pages/editPage/editPage.jsx b/client/homebrew/pages/editPage/editPage.jsx index 7cc3c7ef6..2a35f81bd 100644 --- a/client/homebrew/pages/editPage/editPage.jsx +++ b/client/homebrew/pages/editPage/editPage.jsx @@ -51,7 +51,6 @@ const EditPage = (props)=>{ const [currentBrew, setCurrentBrew] = useState(props.brew); const [saveGoogle, setSaveGoogle] = useState(!!props.brew.googleId); const [error, setError] = useState(null); - const [HTMLErrors, setHTMLErrors] = useState(hbfm.validate(props.brew.text)); const [alertTrashedGoogleBrew, setAlertTrashedGoogleBrew] = useState(props.brew.trashed); const [alertNoGoogleToTransfer, setAlertNoGoogleToTransfer] = useState(false); const [alertOwnershipToTransfer, setAlertOwnershipToTransfer] = useState(false); @@ -90,8 +89,6 @@ const EditPage = (props)=>{ }; const save = async (brew, saveToGoogle)=>{ - setHTMLErrors(hbfm.validate(brew.text)); - await updateHistory(brew).catch(console.error); await versionHistoryGarbageCollection().catch(console.error); @@ -217,8 +214,6 @@ const EditPage = (props)=>{ }; const { - handleSplitMove, - handleBrewChange, toggleAutoSave, clearError, renderSaveButton, @@ -229,8 +224,6 @@ const EditPage = (props)=>{ } = useCommonEditPageFunctions({ saveGoogle, setError, - HTMLErrors, - setHTMLErrors, currentBrew, setCurrentBrew, useLocalStorage, diff --git a/client/homebrew/pages/homePage/homePage.jsx b/client/homebrew/pages/homePage/homePage.jsx index 8364c533f..f3b734bfb 100644 --- a/client/homebrew/pages/homePage/homePage.jsx +++ b/client/homebrew/pages/homePage/homePage.jsx @@ -46,7 +46,6 @@ const HomePage =(props)=>{ const [currentBrew, setCurrentBrew] = useState(props.brew); const [saveGoogle, setSaveGoogle] = useState(global.account?.googleId ? true : false); const [error, setError] = useState(undefined); - const [HTMLErrors, setHTMLErrors] = useState(hbfm.validate(props.brew.text)); const lastSavedBrew = useRef(_.cloneDeep(props.brew)); @@ -82,18 +81,12 @@ const HomePage =(props)=>{ }; const { - handleSplitMove, - handleBrewChange, clearError, renderSaveButton, - renderPanels, - unsavedChanges, - trySave + renderPanels } = useCommonEditPageFunctions({ saveGoogle, setError, - HTMLErrors, - setHTMLErrors, currentBrew, setCurrentBrew, useLocalStorage, diff --git a/client/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx index 18fb4a521..ca65c17bb 100644 --- a/client/homebrew/pages/newPage/newPage.jsx +++ b/client/homebrew/pages/newPage/newPage.jsx @@ -46,7 +46,6 @@ const NewPage = (props)=>{ const [currentBrew, setCurrentBrew] = useState(props.brew); const [saveGoogle, setSaveGoogle] = useState(global.account?.googleId ? true : false); const [error, setError] = useState(null); - const [HTMLErrors, setHTMLErrors] = useState(hbfm.validate(props.brew.text)); const lastSavedBrew = useRef(_.cloneDeep(props.brew)); @@ -131,16 +130,12 @@ const NewPage = (props)=>{ ); const { - handleSplitMove, - handleBrewChange, clearError, renderSaveButton, renderPanels } = useCommonEditPageFunctions({ saveGoogle, setError, - HTMLErrors, - setHTMLErrors, currentBrew, setCurrentBrew, useLocalStorage, diff --git a/client/homebrew/utils/commonEditPageFunctions.jsx b/client/homebrew/utils/commonEditPageFunctions.jsx index c8badf858..ac7d804bc 100644 --- a/client/homebrew/utils/commonEditPageFunctions.jsx +++ b/client/homebrew/utils/commonEditPageFunctions.jsx @@ -20,8 +20,6 @@ export default function useCommonEditPageFunctions(dependencies) { const { saveGoogle, setError, - HTMLErrors, - setHTMLErrors, currentBrew, setCurrentBrew, useLocalStorage, @@ -40,12 +38,13 @@ export default function useCommonEditPageFunctions(dependencies) { userThemes = {} } = dependencies; - const [isSaving, setIsSaving] = useState(false); - const [lastSavedTime, setLastSavedTime] = useState(new Date()); - const [autoSaveEnabled, setAutoSaveEnabled] = useState(!sandbox); + const [isSaving, setIsSaving] = useState(false); + const [lastSavedTime, setLastSavedTime] = useState(new Date()); + const [autoSaveEnabled, setAutoSaveEnabled] = useState(!sandbox); const [warnUnsavedChanges, setWarnUnsavedChanges] = useState(true); - const [unsavedChanges, setUnsavedChanges] = useState(false); - const [themeBundle, setThemeBundle] = useState({}); + const [unsavedChanges, setUnsavedChanges] = useState(false); + const [themeBundle, setThemeBundle] = useState({}); + const [HTMLErrors, setHTMLErrors] = useState(hbfm.validate(currentBrew.text)); const [currentEditorViewPageNum, setCurrentEditorViewPageNum] = useState(1); const [currentEditorCursorPageNum, setCurrentEditorCursorPageNum] = useState(1); @@ -61,7 +60,6 @@ export default function useCommonEditPageFunctions(dependencies) { const autoSavePref = !sandbox && JSON.parse(localStorage.getItem(AUTOSAVE_KEY) ?? true); setAutoSaveEnabled(autoSavePref); setWarnUnsavedChanges(!autoSavePref); - setHTMLErrors(hbfm.validate(currentBrew.text)); fetchThemeBundle(setError, setThemeBundle, currentBrew.renderer, currentBrew.theme); const handleControlKeys = (e)=>{ @@ -148,6 +146,7 @@ export default function useCommonEditPageFunctions(dependencies) { saveTimeout.current = setTimeout(async ()=>{ setIsSaving(true); setError(null); + setHTMLErrors(hbfm.validate(currentBrew.text)); await save(currentBrew, saveToGoogle) .catch((err)=>{ setError(err);