Mercurial > kallithea
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 != "")) {