From 020e714b85e9f5763b552363d52411dff691cad9 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Tue, 24 Jul 2018 15:54:24 +0100 Subject: [PATCH] fix focus and too many

s after a Event>Quote in RT mode Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- .../views/rooms/MessageComposerInput.js | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/src/components/views/rooms/MessageComposerInput.js b/src/components/views/rooms/MessageComposerInput.js index 9cdb926a68..f455db7fbc 100644 --- a/src/components/views/rooms/MessageComposerInput.js +++ b/src/components/views/rooms/MessageComposerInput.js @@ -387,17 +387,28 @@ export default class MessageComposerInput extends React.Component { const anchorText = editorState.anchorText; if ((!anchorText || anchorText.text === '') && editorState.anchorBlock.nodes.size === 1) { // replace the current block rather than split the block + // XXX: this destroys our focus by deleting the thing we are anchored/focused on change = change.replaceNodeByKey(editorState.anchorBlock.key, quote); - } - else { + } else { // insert it into the middle of the block (splitting it) change = change.insertBlock(quote); } - change = change.insertFragmentByKey(quote.key, 0, fragment.document) - .focus(); + + // XXX: heuristic to strip out wrapping

which breaks quoting in RT mode + if (fragment.document.nodes.size && fragment.document.nodes.get(0).type === DEFAULT_NODE) { + change = change.insertFragmentByKey(quote.key, 0, fragment.document.nodes.get(0)); + } else { + change = change.insertFragmentByKey(quote.key, 0, fragment.document); + } + + // XXX: this is to bring back the focus in a sane place and add a paragraph after it + change = change.select({ + anchorKey: quote.key, + focusKey: quote.key, + }).collapseToEndOfBlock().insertBlock(Block.create(DEFAULT_NODE)).focus(); + this.onChange(change); - } - else { + } else { let fragmentChange = fragment.change(); fragmentChange.moveToRangeOf(fragment.document) .wrapBlock(quote);