From d426c3474f2b5703b5c1f69b5ae1313a791c8a6d Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Sat, 19 May 2018 21:36:22 +0100 Subject: [PATCH] fix strikethough & code, improve shift-return & backspace --- .../views/rooms/MessageComposerInput.js | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/src/components/views/rooms/MessageComposerInput.js b/src/components/views/rooms/MessageComposerInput.js index 6eadbae5ec..d7884e3c83 100644 --- a/src/components/views/rooms/MessageComposerInput.js +++ b/src/components/views/rooms/MessageComposerInput.js @@ -551,9 +551,9 @@ export default class MessageComposerInput extends React.Component { switch (ev.keyCode) { case KeyCode.ENTER: - return this.handleReturn(ev); + return this.handleReturn(ev, change); case KeyCode.BACKSPACE: - return this.onBackspace(ev); + return this.onBackspace(ev, change); case KeyCode.UP: return this.onVerticalArrow(ev, true); case KeyCode.DOWN: @@ -568,19 +568,27 @@ export default class MessageComposerInput extends React.Component { } }; - onBackspace = (ev: Event): boolean => { + onBackspace = (ev: Event, change: Change): Change => { if (this.state.isRichtextEnabled) { // let backspace exit lists const isList = this.hasBlock('list-item'); const { editorState } = this.state; + if (isList && editorState.anchorOffset == 0) { - const change = editorState.change(); change .setBlocks(DEFAULT_NODE) .unwrapBlock('bulleted-list') .unwrapBlock('numbered-list'); - this.onChange(change); - return true; + return change; + } + else if (editorState.anchorOffset == 0 && + (this.hasBlock('block-quote') || + this.hasBlock('heading-one') || + this.hasBlock('heading-two') || + this.hasBlock('heading-three') || + this.hasBlock('code-block'))) + { + return change.setBlocks(DEFAULT_NODE); } } return; @@ -770,12 +778,13 @@ export default class MessageComposerInput extends React.Component { return true; }; */ - handleReturn = (ev) => { + handleReturn = (ev, change) => { if (ev.shiftKey) { + // FIXME: we should insert a
equivalent rather than letting Slate // split the current block, otherwise

will be split into two paragraphs // and it'll look like a double line-break. - return; + return change.insertText('\n'); } if (this.state.editorState.blocks.some( @@ -1235,11 +1244,11 @@ export default class MessageComposerInput extends React.Component { e.preventDefault(); // don't steal focus from the editor! const command = { - code: 'code-block', + // code: 'code-block', // let's have the button do inline code for now quote: 'block-quote', bullet: 'bulleted-list', numbullet: 'numbered-list', - strike: 'strike-through', + strike: 'strikethrough', }[name] || name; this.handleKeyCommand(command); };