From 2352c78cb6c9287755733d6113d3ec81e8ce11fb Mon Sep 17 00:00:00 2001 From: hikerpig Date: Fri, 2 Aug 2019 10:41:12 +0800 Subject: [PATCH] Add `CodeEditor::setLineContent` method to manipulate line contents, related #3163 Avoid changing all CodeMirror instance's contents --- browser/components/CodeEditor.js | 11 +++++++++++ browser/components/MarkdownEditor.js | 7 ++++--- browser/components/MarkdownSplitEditor.js | 7 ++++--- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/browser/components/CodeEditor.js b/browser/components/CodeEditor.js index 2a4ae71b..c972103e 100644 --- a/browser/components/CodeEditor.js +++ b/browser/components/CodeEditor.js @@ -836,6 +836,17 @@ export default class CodeEditor extends React.Component { this.editor.setCursor(cursor) } + /** + * Update content of one line + * @param {Number} lineNumber + * @param {String} content + */ + setLineContent (lineNumber, content) { + const prevContent = this.editor.getLine(lineNumber) + const prevContentLength = prevContent ? prevContent.length : 0 + this.editor.replaceRange(content, { line: lineNumber, ch: 0 }, { line: lineNumber, ch: prevContentLength }) + } + handleDropImage (dropEvent) { dropEvent.preventDefault() const { diff --git a/browser/components/MarkdownEditor.js b/browser/components/MarkdownEditor.js index 3dd57f70..ef238166 100644 --- a/browser/components/MarkdownEditor.js +++ b/browser/components/MarkdownEditor.js @@ -169,14 +169,15 @@ class MarkdownEditor extends React.Component { .split('\n') const targetLine = lines[lineIndex] + let newLine = targetLine if (targetLine.match(checkedMatch)) { - lines[lineIndex] = targetLine.replace(checkReplace, '[ ]') + newLine = targetLine.replace(checkReplace, '[ ]') } if (targetLine.match(uncheckedMatch)) { - lines[lineIndex] = targetLine.replace(uncheckReplace, '[x]') + newLine = targetLine.replace(uncheckReplace, '[x]') } - this.refs.code.setValue(lines.join('\n')) + this.refs.code.setLineContent(lineIndex, newLine) } } diff --git a/browser/components/MarkdownSplitEditor.js b/browser/components/MarkdownSplitEditor.js index b283228c..56f6ef8f 100644 --- a/browser/components/MarkdownSplitEditor.js +++ b/browser/components/MarkdownSplitEditor.js @@ -88,14 +88,15 @@ class MarkdownSplitEditor extends React.Component { .split('\n') const targetLine = lines[lineIndex] + let newLine = targetLine if (targetLine.match(checkedMatch)) { - lines[lineIndex] = targetLine.replace(checkReplace, '[ ]') + newLine = targetLine.replace(checkReplace, '[ ]') } if (targetLine.match(uncheckedMatch)) { - lines[lineIndex] = targetLine.replace(uncheckReplace, '[x]') + newLine = targetLine.replace(uncheckReplace, '[x]') } - this.refs.code.setValue(lines.join('\n')) + this.refs.code.setLineContent(lineIndex, newLine) } }