Handle all events for enter key in message box (#12507)

pull/12524/head
Tasso Evangelista 8 years ago committed by Rodrigo Nascimento
parent 74a400d275
commit 5732f35d35
  1. 9
      packages/rocketchat-ui-message/client/messageBox.js
  2. 53
      packages/rocketchat-ui/client/lib/chatMessages.js

@ -425,19 +425,24 @@ Template.messageBox.events({
return instance.isMessageFieldEmpty.set(false);
}
},
'keydown .js-input-message': firefoxPasteUpload(function(event, t) {
if ((navigator.platform.indexOf('Mac') !== -1 && event.metaKey) || (navigator.platform.indexOf('Mac') === -1 && event.ctrlKey)) {
const action = markdownButtons.find((action) => action.command === event.key.toLowerCase() && (!action.condition || action.condition()));
const isMacOS = navigator.platform.indexOf('Mac') !== -1;
if (isMacOS && (event.metaKey || event.ctrlKey)) {
const action = markdownButtons.find(
(action) => action.command === event.key.toLowerCase() && (!action.condition || action.condition()));
if (action) {
applyMd.apply(action, [event, t]);
}
}
return chatMessages[this._id].keydown(this._id, event, Template.instance());
}),
'input .js-input-message'(event, instance) {
instance.sendIcon.set(event.target.value !== '');
return chatMessages[this._id].valueChanged(this._id, event, Template.instance());
},
'propertychange .js-input-message'(event) {
if (event.originalEvent.propertyName === 'value') {
return chatMessages[this._id].valueChanged(this._id, event, Template.instance());

@ -424,6 +424,23 @@ this.ChatMessages = class ChatMessages {
}
}
insertNewLine(input) {
if (document.selection) {
input.focus();
const sel = document.selection.createRange();
sel.text = '\n';
} else if (input.selectionStart || input.selectionStart === 0) {
const before = input.value.substring(0, input.selectionStart);
const after = input.value.substring(input.selectionEnd, input.value.length);
input.value = `${ before }\n${ after }`;
} else {
input.value += '\n';
}
input.blur();
input.focus();
typeof input.updateAutogrow === 'function' && input.updateAutogrow();
}
restoreText(rid) {
const text = localStorage.getItem(`messagebox_${ rid }`);
if (typeof text === 'string' && this.input) {
@ -475,30 +492,24 @@ this.ChatMessages = class ChatMessages {
}
keydown(rid, event) {
const input = event.currentTarget;
// const $input = $(input);
const k = event.which;
const { currentTarget: input, which: k } = event;
if (k === 13) {
if ((sendOnEnter == null || sendOnEnter === 'normal' || sendOnEnter === 'desktop') && Meteor.Device.isDesktop()) {
if (!event.shiftKey && !event.ctrlKey && !event.altKey && !event.metaKey) { // Enter without shift/ctrl/alt
event.preventDefault();
event.stopPropagation();
this.send(rid, input);
return;
} else if (!event.shiftKey) {
return input.value += '\n';
}
} else if (sendOnEnter === 'alternative') {
if (event.shiftKey || event.ctrlKey || event.altKey || event.metaKey) { // Enter with shift/ctrl/alt
event.preventDefault();
event.stopPropagation();
this.send(rid, input);
return;
}
if (k === 13 || k === 10) { // New line or carriage return
const sendOnEnterActive = sendOnEnter == null || sendOnEnter === 'normal' ||
(sendOnEnter === 'desktop' && Meteor.Device.isDesktop());
const withModifier = event.shiftKey || event.ctrlKey || event.altKey || event.metaKey;
const isSending = (sendOnEnterActive && !withModifier) || (!sendOnEnterActive && withModifier);
event.preventDefault();
event.stopPropagation();
if (isSending) {
this.send(rid, input);
} else {
this.insertNewLine(input);
}
}
return;
}
if (k === 9) { // Tab
event.preventDefault();

Loading…
Cancel
Save