insert manually, as insertHTML command moves caret inconsistently

across browsers
This commit is contained in:
Bruno Windels 2019-06-19 17:37:52 +02:00
parent f0271b593d
commit b16bc0178a

View file

@ -78,6 +78,14 @@ export default class MessageEditor extends React.Component {
this.model.update(text, event.inputType, caret); this.model.update(text, event.inputType, caret);
} }
_insertText(textToInsert, inputType = "insertText") {
const sel = document.getSelection();
const {caret, text} = getCaretOffsetAndText(this._editorRef, sel);
const newText = text.substr(0, caret.offset) + textToInsert + text.substr(caret.offset);
caret.offset += textToInsert.length;
this.model.update(newText, inputType, caret);
}
_isCaretAtStart() { _isCaretAtStart() {
const {caret} = getCaretOffsetAndText(this._editorRef, document.getSelection()); const {caret} = getCaretOffsetAndText(this._editorRef, document.getSelection());
return caret.offset === 0; return caret.offset === 0;
@ -92,7 +100,7 @@ export default class MessageEditor extends React.Component {
// insert newline on Shift+Enter // insert newline on Shift+Enter
if (event.shiftKey && event.key === "Enter") { if (event.shiftKey && event.key === "Enter") {
event.preventDefault(); // just in case the browser does support this event.preventDefault(); // just in case the browser does support this
document.execCommand("insertHTML", undefined, "\n"); this._insertText("\n");
return; return;
} }
// autocomplete or enter to send below shouldn't have any modifier keys pressed. // autocomplete or enter to send below shouldn't have any modifier keys pressed.