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([ diff --git a/client/homebrew/homebrew.jsx b/client/homebrew/homebrew.jsx index 1ee5efa2a..1ff80a483 100644 --- a/client/homebrew/homebrew.jsx +++ b/client/homebrew/homebrew.jsx @@ -69,25 +69,29 @@ const Homebrew = (props)=>{ ); } - return (
- } /> - } /> - } /> - } /> - } /> - }/> - } /> - } /> - } /> - } /> + } /> + } /> } /> - } /> - } /> - } /> + + } /> + } /> + + } /> + + } /> + } /> + } /> + } /> + + } /> + } /> + + } /> + }/>
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 })); } }; diff --git a/index.html b/index.html index f30a42c91..1f79c174f 100644 --- a/index.html +++ b/index.html @@ -6,14 +6,11 @@ name="viewport" content="width=device-width, initial-scale=1, height=device-height, interactive-widget=resizes-visual" /> - The Homebrewery - NaturalCrit -
-