From 554374dbf91e16d954460534001ac9c85346f38f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Wed, 21 Oct 2026 18:33:52 +0200 Subject: [PATCH 1/3] fix shortcuts in foldall and unfoldall functions --- client/components/codeEditor/codeEditor.jsx | 52 ++++++++++--------- .../codeEditor/extensions/customKeyMaps.js | 4 +- 2 files changed, 31 insertions(+), 25 deletions(-) diff --git a/client/components/codeEditor/codeEditor.jsx b/client/components/codeEditor/codeEditor.jsx index bda7e3b73..230a30e1f 100644 --- a/client/components/codeEditor/codeEditor.jsx +++ b/client/components/codeEditor/codeEditor.jsx @@ -156,6 +156,31 @@ const CodeEditor = forwardRef( return folds; }; + const foldAll = (view = viewRef.current)=>{ + if(!view) return false; + + const doc = view.state.doc; + const pages = pageMap.current; + + const effects = pages.map((start, i)=>{ + const next = pages[i + 1] || doc.length; + const from = i ? doc.line(doc.lineAt(start).number + 1).from : 0; + const to = doc.line(doc.lineAt(next).number).from - 1; + + return to > from ? foldEffect.of({ from, to }) : null; + }).filter(Boolean); + + view.dispatch({ effects }); + return true; + }; + + const unfoldAll = (view = viewRef.current)=>{ + if(!view) return false; + + view.dispatch(unfoldAllCmd(view)); + return true; + }; + const createExtensions = ({ onChange, language, editorTheme })=>{ const setEventListeners = EditorView.updateListener.of((update)=>{ if(update.docChanged) { @@ -199,7 +224,7 @@ const CodeEditor = forwardRef( //keyboard shortcut keymap.of([...defaultKeymap, foldKeymap, ...searchKeymap]), - generalKeymap, + generalKeymap(foldAll, unfoldAll), ...(tab === 'brewStyles' ? [cssKeymap] : [markdownKeymap]), //multiple cursors and selections @@ -404,29 +429,8 @@ const CodeEditor = forwardRef( undone : redoDepth(view.state), }; }, - - foldAll : ()=>{ - const view = viewRef.current; - if(!view) return; - - const doc = view.state.doc; - const pages = pageMap.current; - - const effects = pages.map((start, i)=>{ - const next = pages[i + 1] || doc.length; - const from = i ? doc.line(doc.lineAt(start).number + 1).from : 0; - const to = doc.line(doc.lineAt(next).number).from - 1; - - return to > from ? foldEffect.of({ from, to }) : null; - }).filter(Boolean); - - view.dispatch({ effects }); - }, - unfoldAll : ()=>{ - const view = viewRef.current; - if(!view) return; - view.dispatch(unfoldAllCmd(view)); - }, + foldAll : ()=>foldAll(), + unfoldAll : ()=>unfoldAll(), focus : ()=>viewRef.current.focus(), })); diff --git a/client/components/codeEditor/extensions/customKeyMaps.js b/client/components/codeEditor/extensions/customKeyMaps.js index af7fa7131..e6adec71e 100644 --- a/client/components/codeEditor/extensions/customKeyMaps.js +++ b/client/components/codeEditor/extensions/customKeyMaps.js @@ -215,13 +215,15 @@ const newBreak = (type)=>(view)=>forEachSelection(view, (state, from, to, select }; }); -export const generalKeymap = Prec.high(keymap.of([ +export const generalKeymap = (foldAll, unfoldAll) => Prec.high(keymap.of([ { key: 'Tab', run: insertTab }, { key: 'Shift-Tab', run: indentLess }, { key: 'Mod-z', run: undo }, //it may be unnecessary { key: 'Mod-Shift-z', run: redo }, { key: 'Mod-y', run: redo }, //user asked, so double keybind { key: 'Mod-d', run: deleteLine }, //annoyingly overrides "selectNextOccurrence" because users asked + { key: 'Mod-Shift-[', run: foldAll }, + { key: 'Mod-Shift-]', run: unfoldAll }, ])); export const cssKeymap = Prec.highest(keymap.of([ From 25c583c9df49a13c2a47aa14c0a863f96edad85d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Wed, 21 Oct 2026 23:07:29 +0200 Subject: [PATCH 2/3] add title, description and tags to new brew metadata --- .../pages/basePages/editPage/editorPage.jsx | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/client/homebrew/pages/basePages/editPage/editorPage.jsx b/client/homebrew/pages/basePages/editPage/editorPage.jsx index b9fb34597..536f4e34b 100644 --- a/client/homebrew/pages/basePages/editPage/editorPage.jsx +++ b/client/homebrew/pages/basePages/editPage/editorPage.jsx @@ -112,12 +112,15 @@ const EditorPage = (props)=>{ const snipStorage = localStorage.getItem(SNIPKEY); const metaStorage = JSON.parse(localStorage.getItem(METAKEY)); - brew.text = brewStorage ?? brew.text; - brew.style = styleStorage ?? brew.style; - brew.snippets = snipStorage ?? brew.snippets; - brew.renderer = metaStorage?.renderer ?? brew.renderer; - brew.theme = metaStorage?.theme ?? brew.theme; - brew.lang = metaStorage?.lang ?? brew.lang; + brew.title = metaStorage?.title ?? brew.title; + brew.description = metaStorage?.description ?? brew.description; + brew.tags = metaStorage?.tags ?? brew.tags; + brew.text = brewStorage ?? brew.text; + brew.style = styleStorage ?? brew.style; + brew.snippets = snipStorage ?? brew.snippets; + brew.renderer = metaStorage?.renderer ?? brew.renderer; + brew.theme = metaStorage?.theme ?? brew.theme; + brew.lang = metaStorage?.lang ?? brew.lang; } const SAVEKEY = `${SAVEKEY_PREFIX}${global.account?.username}`; @@ -130,7 +133,7 @@ const EditorPage = (props)=>{ localStorage.setItem(BREWKEY, brew.text); if(brew.style) localStorage.setItem(STYLEKEY, brew.style); if(brew.snippets) localStorage.setItem(SNIPKEY, brew.snippets); - localStorage.setItem(METAKEY, JSON.stringify({ renderer: brew.renderer, theme: brew.theme, lang: brew.lang })); + localStorage.setItem(METAKEY, JSON.stringify({ title: brew.title, description: brew.description, tags: brew.tags, renderer: brew.renderer, theme: brew.theme, lang: brew.lang })); if(window.location.pathname !== '/new') window.history.replaceState({}, window.location.title, '/new/'); }; @@ -177,9 +180,12 @@ const EditorPage = (props)=>{ if(field == 'style') localStorage.setItem(STYLEKEY, value); if(field == 'snippets') localStorage.setItem(SNIPKEY, value); if(field == 'metadata') localStorage.setItem(METAKEY, JSON.stringify({ - renderer : value.renderer, - theme : value.theme, - lang : value.lang + title : value.title, + description : value.description, + tags : value.tags, + renderer : value.renderer, + theme : value.theme, + lang : value.lang })); } }; From d084586d553da42cef2be4c5e4cf24943f209d97 Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Thu, 22 Oct 2026 20:20:18 +0000 Subject: [PATCH 3/3] Fix typo in patch logging --- server/homebrew.api.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/homebrew.api.js b/server/homebrew.api.js index c572b2cec..75cbbeca4 100644 --- a/server/homebrew.api.js +++ b/server/homebrew.api.js @@ -368,8 +368,8 @@ const api = { if(failedPatchCount){ throw (`Patch failure: ${failedPatchCount}/${result[1].length} did not apply`); } - patchedText = decodeURI(result[0]); - if(patchedText != brewFromClient.text){ + const patchedText = decodeURI(result[0]); + if(patchedText !== brewFromClient.text){ debugTextMismatch(brewFromClient.text, patchedText, `edit/${brewFromClient.editId}`); throw ('Patches did not apply cleanly, text mismatch detected'); }