Browse Source

Message correction improvements. Updates #1142

Up and down arrows only serve as message correction shortcuts if the
textarea is empty.

This means that:

- Up arrow doesn't start correction of previous message if we're currently writing a message
- Down arrow doesn't erase currently written message

This is based on user-feedback and is also how Slack handles these
shortcuts.
JC Brand 6 years ago
parent
commit
19f6bce246
2 changed files with 8 additions and 2 deletions
  1. 1 0
      CHANGES.md
  2. 7 2
      src/converse-chatview.js

+ 1 - 0
CHANGES.md

@@ -28,6 +28,7 @@
 - New event: [chatBoxBlurred](https://conversejs.org/docs/html/api/-_converse.html#event:chatBoxBlurred)
 - New event: [chatReconnected](https://conversejs.org/docs/html/api/-_converse.html#event:chatReconnected)
 - #316: Add support for XEP-0198 Stream Management
+- #1142: Up/down arrow shouldn't erase current message
 - #1196: Use alternative connection method upon connfail
 - #1296: `embedded` view mode shows `chatbox-navback` arrow in header
 - #1330: Missing room name in MUC invitation popup

+ 7 - 2
src/converse-chatview.js

@@ -1007,8 +1007,13 @@ converse.plugins.add('converse-chatview', {
                         }
                         return this.onFormSubmitted(ev);
                     } else if (ev.keyCode === _converse.keycodes.UP_ARROW && !ev.target.selectionEnd) {
-                        return this.editEarlierMessage();
-                    } else if (ev.keyCode === _converse.keycodes.DOWN_ARROW && ev.target.selectionEnd === ev.target.value.length) {
+                        const textarea = this.el.querySelector('.chat-textarea');
+                        if (!textarea.value || u.hasClass('correcting', textarea)) {
+                            return this.editEarlierMessage();
+                        }
+                    } else if (ev.keyCode === _converse.keycodes.DOWN_ARROW &&
+                            ev.target.selectionEnd === ev.target.value.length &&
+                            u.hasClass('correcting', this.el.querySelector('.chat-textarea'))) {
                         return this.editLaterMessage();
                     }
                 }