From c8d070e6024b734aa5675132a1ca459f70d1bef4 Mon Sep 17 00:00:00 2001 From: Toks Date: Mon, 24 Jun 2013 10:30:14 -0400 Subject: [PATCH] proper fix for #1758; keep caret position after using autocomplete --- app/assets/javascripts/posts.js | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/app/assets/javascripts/posts.js b/app/assets/javascripts/posts.js index a236cb4f2..998c2c7cd 100644 --- a/app/assets/javascripts/posts.js +++ b/app/assets/javascripts/posts.js @@ -51,17 +51,26 @@ return false; }, select: function(event, ui) { - this.value = this.value.replace(/\S+\s*$/g, ui.item.value + " "); + var before_caret_text = this.value.substring(0, this.selectionStart); + var after_caret_text = this.value.substring(this.selectionStart); + + this.value = before_caret_text.replace(/\S+\s*$/g, ui.item.value + " "); + + // Preserve original caret position to prevent it from jumping to the end + var original_start = this.selectionStart; + this.value += after_caret_text; + this.selectionStart = this.selectionEnd = original_start; + return false; }, source: function(req, resp) { - var pre_caret_text = req.term.substring(0, this.element.get(0).selectionStart); + var before_caret_text = req.term.substring(0, this.element.get(0).selectionStart); - if (pre_caret_text.match(/ $/)) { + if (before_caret_text.match(/ $/)) { return; } - var term = pre_caret_text.match(/\S+/g).pop(); + var term = before_caret_text.match(/\S+/g).pop(); $.ajax({ url: "/tags.json", data: {