From 1f1dbfbb89070b2c1902588ec17af5c2f259017c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Sun, 5 Apr 2026 12:14:40 +0200 Subject: [PATCH] fix movebrew --- client/components/codeEditor/codeEditor.jsx | 3 +- client/homebrew/editor/editor.jsx | 35 +++++++++++++++++---- 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/client/components/codeEditor/codeEditor.jsx b/client/components/codeEditor/codeEditor.jsx index cd140ad07..6e962b912 100644 --- a/client/components/codeEditor/codeEditor.jsx +++ b/client/components/codeEditor/codeEditor.jsx @@ -16,6 +16,7 @@ const CodeEditor = createReactClass({ value : '', wrap : true, onChange : ()=>{}, + onReady : ()=>{}, enableFolding : true, editorTheme : 'default' }; @@ -177,7 +178,7 @@ const CodeEditor = createReactClass({ // return el; // } }); - + this.props.onReady?.(this.codeMirror); // Add custom behaviors (auto-close curlies and auto-complete emojis) closeTag.autoCloseCurlyBraces(CodeMirror, this.codeMirror); autoCompleteEmoji.showAutocompleteEmoji(CodeMirror, this.codeMirror); diff --git a/client/homebrew/editor/editor.jsx b/client/homebrew/editor/editor.jsx index 06fd469a0..ced40f48f 100644 --- a/client/homebrew/editor/editor.jsx +++ b/client/homebrew/editor/editor.jsx @@ -76,9 +76,6 @@ const Editor = createReactClass({ document.getElementById('BrewRenderer').addEventListener('keydown', this.handleControlKeys); document.addEventListener('keydown', this.handleControlKeys); - this.codeEditor.current.codeMirror?.on('cursorActivity', (cm)=>{this.updateCurrentCursorPage(cm.getCursor());}); - this.codeEditor.current.codeMirror?.on('scroll', _.throttle(()=>{this.updateCurrentViewPage(this.codeEditor.current.getTopVisibleLine());}, 200)); - const editorTheme = window.localStorage.getItem(EDITOR_THEME_KEY); if(editorTheme) { this.setState({ @@ -436,6 +433,29 @@ const Editor = createReactClass({ this.forceUpdate(); }, + //temporary fix until cm6 comes next update + attachCodeMirrorListeners : function(cm) { + if(!cm) return; + // detach previous (important on remount / view switch) + if(this._cm) { + this._cm.off('cursorActivity', this._onCursor); + this._cm.off('scroll', this._onScroll); + } + + this._cm = cm; + + this._onCursor = ()=>{ + this.updateCurrentCursorPage(cm.getCursor()); + }; + + this._onScroll = _.throttle(()=>{ + const topLine = cm.lineAtHeight(cm.getScrollInfo().top, 'local'); + this.updateCurrentViewPage(topLine); + }, 200); + + cm.on('cursorActivity', this._onCursor); + cm.on('scroll', this._onScroll); + }, renderEditor : function(){ if(this.isText()){ return <> @@ -448,7 +468,8 @@ const Editor = createReactClass({ onChange={this.props.onBrewChange('text')} editorTheme={this.state.editorTheme} rerenderParent={this.rerenderParent} - style={{ height: `calc(100% - ${this.state.snippetBarHeight}px)` }} /> + style={{ height: `calc(100% - ${this.state.snippetBarHeight}px)` }} + onReady={this.attachCodeMirrorListeners}/> ; } if(this.isStyle()){ @@ -463,7 +484,8 @@ const Editor = createReactClass({ enableFolding={true} editorTheme={this.state.editorTheme} rerenderParent={this.rerenderParent} - style={{ height: `calc(100% - ${this.state.snippetBarHeight}px)` }} /> + style={{ height: `calc(100% - ${this.state.snippetBarHeight}px)` }} + onReady={this.attachCodeMirrorListeners}/> ; } if(this.isMeta()){ @@ -493,7 +515,8 @@ const Editor = createReactClass({ enableFolding={true} editorTheme={this.state.editorTheme} rerenderParent={this.rerenderParent} - style={{ height: `calc(100% -${this.state.snippetBarHeight}px)` }} /> + style={{ height: `calc(100% -${this.state.snippetBarHeight}px)` }} + onReady={this.attachCodeMirrorListeners}/> ; } },