diff options
Diffstat (limited to 'core/misc/autocomplete.js')
-rw-r--r-- | core/misc/autocomplete.js | 30 |
1 files changed, 14 insertions, 16 deletions
diff --git a/core/misc/autocomplete.js b/core/misc/autocomplete.js index 52ddfd2ab482..8931d4def79b 100644 --- a/core/misc/autocomplete.js +++ b/core/misc/autocomplete.js @@ -6,17 +6,18 @@ **/ (function ($, Drupal) { - var autocomplete = void 0; + var autocomplete; function autocompleteSplitValues(value) { var result = []; var quote = false; var current = ''; var valueLength = value.length; - var character = void 0; + var character; for (var i = 0; i < valueLength; i++) { character = value.charAt(i); + if (character === '"') { current += character; quote = !quote; @@ -27,6 +28,7 @@ current += character; } } + if (value.length > 0) { result.push($.trim(current)); } @@ -64,12 +66,15 @@ function showSuggestions(suggestions) { var tagged = autocomplete.splitValues(request.term); var il = tagged.length; + for (var i = 0; i < il; i++) { var index = suggestions.indexOf(tagged[i]); + if (index >= 0) { suggestions.splice(index, 1); } } + response(suggestions); } @@ -77,14 +82,18 @@ function sourceCallbackHandler(data) { autocomplete.cache[elementId][term] = data; - showSuggestions(data); } if (autocomplete.cache[elementId].hasOwnProperty(term)) { showSuggestions(autocomplete.cache[elementId][term]); } else { - var options = $.extend({ success: sourceCallbackHandler, data: { q: term } }, autocomplete.ajax); + var options = $.extend({ + success: sourceCallbackHandler, + data: { + q: term + } + }, autocomplete.ajax); $.ajax(this.element.attr('data-autocomplete-path'), options); } } @@ -95,13 +104,9 @@ function selectHandler(event, ui) { var terms = autocomplete.splitValues(event.target.value); - terms.pop(); - terms.push(ui.item.value); - event.target.value = terms.join(', '); - return false; } @@ -112,16 +117,15 @@ Drupal.behaviors.autocomplete = { attach: function attach(context) { var $autocomplete = $(context).find('input.form-autocomplete').once('autocomplete'); + if ($autocomplete.length) { var blacklist = $autocomplete.attr('data-autocomplete-first-character-blacklist'); $.extend(autocomplete.options, { firstCharacterBlacklist: blacklist || '' }); - $autocomplete.autocomplete(autocomplete.options).each(function () { $(this).data('ui-autocomplete')._renderItem = autocomplete.options.renderItem; }); - $autocomplete.on('compositionstart.autocomplete', function () { autocomplete.options.isComposing = true; }); @@ -136,13 +140,10 @@ } } }; - autocomplete = { cache: {}, - splitValues: autocompleteSplitValues, extractLastTerm: extractLastTerm, - options: { source: sourceData, focus: focusHandler, @@ -150,15 +151,12 @@ select: selectHandler, renderItem: renderItem, minLength: 1, - firstCharacterBlacklist: '', - isComposing: false }, ajax: { dataType: 'json' } }; - Drupal.autocomplete = autocomplete; })(jQuery, Drupal);
\ No newline at end of file |