summaryrefslogtreecommitdiffstatshomepage
path: root/core/misc/autocomplete.js
diff options
context:
space:
mode:
Diffstat (limited to 'core/misc/autocomplete.js')
-rw-r--r--core/misc/autocomplete.js30
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