changeset 6966:781b28e55b9e

js: set cursor position after @mention selection Based on work by Dominik Ruff and Stack Overflow.
author Mads Kiilerich <mads@kiilerich.com>
date Tue, 31 Oct 2017 03:17:52 +0100
parents 7b73f54d84dc
children 6c3bda995a88
files kallithea/public/js/base.js
diffstat 1 files changed, 20 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/kallithea/public/js/base.js	Tue Oct 31 03:16:58 2017 +0100
+++ b/kallithea/public/js/base.js	Tue Oct 31 03:17:52 2017 +0100
@@ -1200,7 +1200,7 @@
             var elLI = aArgs[1]; // reference to the selected LI element
             var oData = aArgs[2]; // object literal of selected item's result data
             myAC.getInputEl().value = $container.data('before') + oData.nname + ' ' + $container.data('after');
-            myAC.getInputEl().focus(); // Y U NO WORK !?
+            _setCaretPosition($(myAC.getInputEl()), myAC.dataSource.before.length + oData.nname.length + 1);
         });
     }
 
@@ -1228,6 +1228,25 @@
         });
 }
 
+
+// Set caret at the given position in the input element
+function _setCaretPosition($inputElement, caretPos) {
+    $inputElement.each(function(){
+        if(this.createTextRange) { // IE
+            var range = this.createTextRange();
+            range.move('character', caretPos);
+            range.select();
+        }
+        else if(this.selectionStart) { // other recent browsers
+            this.focus();
+            this.setSelectionRange(caretPos, caretPos);
+        }
+        else // last resort - very old browser
+            this.focus();
+    });
+}
+
+
 var addReviewMember = function(id,fname,lname,nname,gravatar_link,gravatar_size){
     var displayname = nname;
     if ((fname != "") && (lname != "")) {