From ab21e6b1343e58011f9ca857cb93c0f2673211f3 Mon Sep 17 00:00:00 2001
From: Manoj Mishra <b0rn2c0d3@gmail.com>
Date: Sat, 17 Oct 2015 16:55:09 +0530
Subject: [PATCH] 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
---
 Changelog.md                                  |  1 +
 .../javascripts/jquery.mentionsInput.js       | 19 +++++++++++++++----
 2 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/Changelog.md b/Changelog.md
index 11f227d7b2..fd7f2826b7 100644
--- a/Changelog.md
+++ b/Changelog.md
@@ -3,6 +3,7 @@
 ## Refactor
 
 ## Bug fixes
+* Fix mention autocomplete when pasting the username [#6510](https://github.com/diaspora/diaspora/pull/6510)
 
 ## Features
 
diff --git a/lib/assets/javascripts/jquery.mentionsInput.js b/lib/assets/javascripts/jquery.mentionsInput.js
index d3a7d25b2e..7693caaeef 100644
--- a/lib/assets/javascripts/jquery.mentionsInput.js
+++ b/lib/assets/javascripts/jquery.mentionsInput.js
@@ -7,18 +7,20 @@
  * Using underscore.js
  *
  * 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
  * Don't add a space after inserting a mention
  * 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) {
 
   // 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 = {
     triggerChar   : '@',
     onDataRequest : $.noop,
@@ -95,6 +97,7 @@
       elmInputBox.attr('data-mentions-input', 'true');
       elmInputBox.bind('keydown', onInputBoxKeyDown);
       elmInputBox.bind('keypress', onInputBoxKeyPress);
+      elmInputBox.bind('paste',onInputBoxPaste);
       elmInputBox.bind('input', onInputBoxInput);
       elmInputBox.bind('click', onInputBoxClick);
       elmInputBox.bind('blur', onInputBoxBlur);
@@ -208,6 +211,13 @@
       hideAutoComplete();
     }
 
+    function onInputBoxPaste(e) {
+      pastedData = e.originalEvent.clipboardData.getData("text/plain");
+      dataArray = pastedData.split("");
+      _.each(dataArray, function(value) {
+        inputBuffer.push(value);
+      });
+    }
     function onInputBoxInput(e) {
       updateValues();
       updateMentionsCollection();
@@ -223,7 +233,8 @@
     }
 
     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);
         inputBuffer.push(typedValue);
       }
-- 
GitLab