diff --git a/packages/rocketchat-ui-message/client/messageBox.coffee b/packages/rocketchat-ui-message/client/messageBox.coffee index 7536cd0d3bdb..27f794224560 100644 --- a/packages/rocketchat-ui-message/client/messageBox.coffee +++ b/packages/rocketchat-ui-message/client/messageBox.coffee @@ -116,6 +116,45 @@ Template.messageBox.helpers showSandstorm: -> return Meteor.settings.public.sandstorm && !Meteor.isCordova +firefoxPasteUpload = (fn) -> + user = navigator.userAgent.match(/Firefox\/(\d+)\.\d/) + if !user or user[1] > 49 + return fn + return (event, instance) -> + if (event.originalEvent.ctrlKey or event.originalEvent.metaKey) and (event.keyCode == 86) + textarea = instance.find("textarea") + selectionStart = textarea.selectionStart + selectionEnd = textarea.selectionEnd + contentEditableDiv = instance.find('#msg_contenteditable') + contentEditableDiv.focus() + Meteor.setTimeout -> + pastedImg = contentEditableDiv.querySelector 'img' + textareaContent = textarea.value + startContent = textareaContent.substring(0, selectionStart) + endContent = textareaContent.substring(selectionEnd) + restoreSelection = (pastedText) -> + textarea.value = startContent + pastedText + endContent + textarea.selectionStart = selectionStart + pastedText.length + textarea.selectionEnd = textarea.selectionStart + contentEditableDiv.innerHTML = '' if pastedImg + textarea.focus + return if (!pastedImg || contentEditableDiv.innerHTML.length > 0) + [].slice.call(contentEditableDiv.querySelectorAll("br")).forEach (el) -> + contentEditableDiv.replaceChild(new Text("\n") , el) + restoreSelection(contentEditableDiv.innerText) + imageSrc = pastedImg.getAttribute("src") + if imageSrc.match(/^data:image/) + fetch(imageSrc) + .then((img)-> + return img.blob()) + .then (blob)-> + fileUpload [{ + file: blob + name: 'Clipboard' + }] + , 150 + fn?.apply @, arguments + Template.messageBox.events 'click .join': (event) -> @@ -157,7 +196,6 @@ Template.messageBox.events if not e.originalEvent.clipboardData? return - items = e.originalEvent.clipboardData.items files = [] for item in items @@ -172,8 +210,8 @@ Template.messageBox.events else instance.isMessageFieldEmpty.set(false) - 'keydown .input-message': (event) -> - chatMessages[@_id].keydown(@_id, event, Template.instance()) + 'keydown .input-message': firefoxPasteUpload((event, instance) -> + chatMessages[@_id].keydown(@_id, event, Template.instance())) 'input .input-message': (event) -> chatMessages[@_id].valueChanged(@_id, event, Template.instance()) @@ -318,4 +356,4 @@ Meteor.startup -> navigator.geolocation.watchPosition success, error else - RocketChat.Geolocation.set false + RocketChat.Geolocation.set false \ No newline at end of file diff --git a/packages/rocketchat-ui-message/client/messageBox.html b/packages/rocketchat-ui-message/client/messageBox.html index 65a36bf0e109..ece95e88cb03 100644 --- a/packages/rocketchat-ui-message/client/messageBox.html +++ b/packages/rocketchat-ui-message/client/messageBox.html @@ -5,6 +5,7 @@ {{#if allowedToSend}}