0
0
mirror of https://github.com/naturalcrit/homebrewery.git synced 2026-01-06 20:52:40 +00:00

fix refs in editor.jsx

now has refs `editorWrapper` and `editor`-- the former includes the snippet bar and codemirror editor, and the latter includes only the codemirror editor.
This commit is contained in:
Gazook89
2024-05-16 23:12:10 -05:00
parent d3080c03a4
commit 46c14ef23b

View File

@@ -48,6 +48,9 @@ const Editor = createClass({
}; };
}, },
editorWrapper : React.createRef(null),
editor : React.createRef(null),
isText : function() {return this.state.view == 'text';}, isText : function() {return this.state.view == 'text';},
isStyle : function() {return this.state.view == 'style';}, isStyle : function() {return this.state.view == 'style';},
isMeta : function() {return this.state.view == 'meta';}, isMeta : function() {return this.state.view == 'meta';},
@@ -80,15 +83,15 @@ const Editor = createClass({
}, },
updateEditorSize : function() { updateEditorSize : function() {
if(this.refs.codeEditor) { if(this.editor.current) {
let paneHeight = this.refs.main.parentNode.clientHeight; let paneHeight = this.editorWrapper.current.parentNode.clientHeight;
paneHeight -= SNIPPETBAR_HEIGHT; paneHeight -= SNIPPETBAR_HEIGHT;
this.refs.codeEditor.codeMirror.setSize(null, paneHeight); this.editor.current.codeMirror.setSize(null, paneHeight);
} }
}, },
handleInject : function(injectText){ handleInject : function(injectText){
this.refs.codeEditor?.injectText(injectText, false); this.editor.current?.injectText(injectText, false);
}, },
handleViewChange : function(newView){ handleViewChange : function(newView){
@@ -99,7 +102,7 @@ const Editor = createClass({
}, },
getCurrentPage : function(){ getCurrentPage : function(){
const lines = this.props.brew.text.split('\n').slice(0, this.refs.codeEditor.getCursorPosition().line + 1); const lines = this.props.brew.text.split('\n').slice(0, this.editor.current.getCursorPosition().line + 1);
return _.reduce(lines, (r, line)=>{ return _.reduce(lines, (r, line)=>{
if( if(
(this.props.renderer == 'legacy' && line.indexOf('\\page') !== -1) (this.props.renderer == 'legacy' && line.indexOf('\\page') !== -1)
@@ -111,9 +114,9 @@ const Editor = createClass({
}, },
highlightCustomMarkdown : function(){ highlightCustomMarkdown : function(){
if(!this.refs.codeEditor) return; if(!this.editor.current) return;
if(this.state.view === 'text') { if(this.state.view === 'text') {
const codeMirror = this.refs.codeEditor.codeMirror; const codeMirror = this.editor.current.codeMirror;
codeMirror.operation(()=>{ // Batch CodeMirror styling codeMirror.operation(()=>{ // Batch CodeMirror styling
//reset custom text styles //reset custom text styles
@@ -302,23 +305,23 @@ const Editor = createClass({
targetLine = lineCount - 1; //Scroll to `\page`, which is one line back. targetLine = lineCount - 1; //Scroll to `\page`, which is one line back.
let currentY = this.refs.codeEditor.codeMirror.getScrollInfo().top; let currentY = this.editor.current.codeMirror.getScrollInfo().top;
let targetY = this.refs.codeEditor.codeMirror.heightAtLine(targetLine, 'local', true); let targetY = this.editor.current.codeMirror.heightAtLine(targetLine, 'local', true);
//Scroll 1/10 of the way every 10ms until 1px off. //Scroll 1/10 of the way every 10ms until 1px off.
const incrementalScroll = setInterval(()=>{ const incrementalScroll = setInterval(()=>{
currentY += (targetY - currentY) / 10; currentY += (targetY - currentY) / 10;
this.refs.codeEditor.codeMirror.scrollTo(null, currentY); this.editor.current.codeMirror.scrollTo(null, currentY);
// Update target: target height is not accurate until within +-10 lines of the visible window // Update target: target height is not accurate until within +-10 lines of the visible window
if(Math.abs(targetY - currentY > 100)) if(Math.abs(targetY - currentY > 100))
targetY = this.refs.codeEditor.codeMirror.heightAtLine(targetLine, 'local', true); targetY = this.editor.current.codeMirror.heightAtLine(targetLine, 'local', true);
// End when close enough // End when close enough
if(Math.abs(targetY - currentY) < 1) { if(Math.abs(targetY - currentY) < 1) {
this.refs.codeEditor.codeMirror.scrollTo(null, targetY); // Scroll any remaining difference this.editor.current.codeMirror.scrollTo(null, targetY); // Scroll any remaining difference
this.refs.codeEditor.setCursorPosition({ line: targetLine + 1, ch: 0 }); this.editor.current.setCursorPosition({ line: targetLine + 1, ch: 0 });
this.refs.codeEditor.codeMirror.addLineClass(targetLine + 1, 'wrap', 'sourceMoveFlash'); this.editor.current.codeMirror.addLineClass(targetLine + 1, 'wrap', 'sourceMoveFlash');
clearInterval(incrementalScroll); clearInterval(incrementalScroll);
} }
}, 10); }, 10);
@@ -328,7 +331,7 @@ const Editor = createClass({
//Called when there are changes to the editor's dimensions //Called when there are changes to the editor's dimensions
update : function(){ update : function(){
this.refs.codeEditor?.updateSize(); this.editor.current?.updateSize();
}, },
updateEditorTheme : function(newTheme){ updateEditorTheme : function(newTheme){
@@ -347,7 +350,7 @@ const Editor = createClass({
if(this.isText()){ if(this.isText()){
return <> return <>
<CodeEditor key='codeEditor' <CodeEditor key='codeEditor'
ref='codeEditor' ref={this.editor}
language='gfm' language='gfm'
view={this.state.view} view={this.state.view}
value={this.props.brew.text} value={this.props.brew.text}
@@ -359,7 +362,7 @@ const Editor = createClass({
if(this.isStyle()){ if(this.isStyle()){
return <> return <>
<CodeEditor key='codeEditor' <CodeEditor key='codeEditor'
ref='codeEditor' ref={this.editor}
language='css' language='css'
view={this.state.view} view={this.state.view}
value={this.props.brew.style ?? DEFAULT_STYLE_TEXT} value={this.props.brew.style ?? DEFAULT_STYLE_TEXT}
@@ -384,28 +387,28 @@ const Editor = createClass({
}, },
redo : function(){ redo : function(){
return this.refs.codeEditor?.redo(); return this.editor.current?.redo();
}, },
historySize : function(){ historySize : function(){
return this.refs.codeEditor?.historySize(); return this.editor.current?.historySize();
}, },
undo : function(){ undo : function(){
return this.refs.codeEditor?.undo(); return this.editor.current?.undo();
}, },
foldCode : function(){ foldCode : function(){
return this.refs.codeEditor?.foldAllCode(); return this.editor.current?.foldAllCode();
}, },
unfoldCode : function(){ unfoldCode : function(){
return this.refs.codeEditor?.unfoldAllCode(); return this.editor.current?.unfoldAllCode();
}, },
render : function(){ render : function(){
return ( return (
<div className='editor' ref='main'> <div className='editor' ref={this.editorWrapper}>
<SnippetBar <SnippetBar
brew={this.props.brew} brew={this.props.brew}
view={this.state.view} view={this.state.view}
@@ -421,7 +424,7 @@ const Editor = createClass({
historySize={this.historySize()} historySize={this.historySize()}
currentEditorTheme={this.state.editorTheme} currentEditorTheme={this.state.editorTheme}
updateEditorTheme={this.updateEditorTheme} updateEditorTheme={this.updateEditorTheme}
cursorPos={this.refs.codeEditor?.getCursorPosition() || {}} /> cursorPos={this.editor.current?.getCursorPosition() || {}} />
{this.renderEditor()} {this.renderEditor()}
</div> </div>