Fix: Adding mention through paste user name from clipboard is not successfull

Input buffer wasn't getting updated with the user input when user did a
paste from clipboard, it caused search for the available contacts
to not trigger

closes #6510
This commit is contained in:
Manoj Mishra 2015-10-17 16:55:09 +05:30 committed by Steffen van Bergerem
parent 91127ce95f
commit ab21e6b134
2 changed files with 16 additions and 4 deletions

View file

@ -3,6 +3,7 @@
## Refactor ## Refactor
## Bug fixes ## Bug fixes
* Fix mention autocomplete when pasting the username [#6510](https://github.com/diaspora/diaspora/pull/6510)
## Features ## Features

View file

@ -8,17 +8,19 @@
* *
* License: MIT License - http://www.opensource.org/licenses/mit-license.php * License: MIT License - http://www.opensource.org/licenses/mit-license.php
* *
* Modifcations for Diaspora: * Modifications for Diaspora:
* *
* Prevent replacing the wrong text by marking the replacement position with a special character * Prevent replacing the wrong text by marking the replacement position with a special character
* Don't add a space after inserting a mention * Don't add a space after inserting a mention
* Only use the first div as a wrapperBox * Only use the first div as a wrapperBox
* Binded paste event on input box to trigger contacts search for autocompletion while adding mention via clipboard
*/ */
(function ($, _, undefined) { (function ($, _, undefined) {
// Settings // Settings
var KEY = { BACKSPACE : 8, TAB : 9, RETURN : 13, ESC : 27, LEFT : 37, UP : 38, RIGHT : 39, DOWN : 40, COMMA : 188, SPACE : 32, HOME : 36, END : 35 }; // Keys "enum" var KEY = { PASTE : 118, BACKSPACE : 8, TAB : 9, RETURN : 13, ESC : 27, LEFT : 37, UP : 38, RIGHT : 39,
DOWN : 40, COMMA : 188, SPACE : 32, HOME : 36, END : 35 }; // Keys "enum"
var defaultSettings = { var defaultSettings = {
triggerChar : '@', triggerChar : '@',
onDataRequest : $.noop, onDataRequest : $.noop,
@ -95,6 +97,7 @@
elmInputBox.attr('data-mentions-input', 'true'); elmInputBox.attr('data-mentions-input', 'true');
elmInputBox.bind('keydown', onInputBoxKeyDown); elmInputBox.bind('keydown', onInputBoxKeyDown);
elmInputBox.bind('keypress', onInputBoxKeyPress); elmInputBox.bind('keypress', onInputBoxKeyPress);
elmInputBox.bind('paste',onInputBoxPaste);
elmInputBox.bind('input', onInputBoxInput); elmInputBox.bind('input', onInputBoxInput);
elmInputBox.bind('click', onInputBoxClick); elmInputBox.bind('click', onInputBoxClick);
elmInputBox.bind('blur', onInputBoxBlur); elmInputBox.bind('blur', onInputBoxBlur);
@ -208,6 +211,13 @@
hideAutoComplete(); hideAutoComplete();
} }
function onInputBoxPaste(e) {
pastedData = e.originalEvent.clipboardData.getData("text/plain");
dataArray = pastedData.split("");
_.each(dataArray, function(value) {
inputBuffer.push(value);
});
}
function onInputBoxInput(e) { function onInputBoxInput(e) {
updateValues(); updateValues();
updateMentionsCollection(); updateMentionsCollection();
@ -223,7 +233,8 @@
} }
function onInputBoxKeyPress(e) { function onInputBoxKeyPress(e) {
if(e.keyCode !== KEY.BACKSPACE) { // Excluding ctrl+v from key press event in firefox
if (!((e.which === KEY.PASTE && e.ctrlKey) || (e.keyCode === KEY.BACKSPACE))) {
var typedValue = String.fromCharCode(e.which || e.keyCode); var typedValue = String.fromCharCode(e.which || e.keyCode);
inputBuffer.push(typedValue); inputBuffer.push(typedValue);
} }