/** * DO NOT EDIT THIS FILE. * See the following change record for more information, * https://www.drupal.org/node/2815083 * @preserve **/ (function ($, Drupal) { var autocomplete; function autocompleteSplitValues(value) { var result = []; var quote = false; var current = ''; var valueLength = value.length; var character; for (var i = 0; i < valueLength; i++) { character = value.charAt(i); if (character === '"') { current += character; quote = !quote; } else if (character === ',' && !quote) { result.push(current.trim()); current = ''; } else { current += character; } } if (value.length > 0) { result.push(current.trim()); } return result; } function extractLastTerm(terms) { return autocomplete.splitValues(terms).pop(); } function searchHandler(event) { var options = autocomplete.options; if (options.isComposing) { return false; } var term = autocomplete.extractLastTerm(event.target.value); if (term.length > 0 && options.firstCharacterBlacklist.indexOf(term[0]) !== -1) { return false; } return term.length >= options.minLength; } function sourceData(request, response) { var elementId = this.element.attr('id'); if (!(elementId in autocomplete.cache)) { autocomplete.cache[elementId] = {}; } 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); } var term = autocomplete.extractLastTerm(request.term); 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); $.ajax(this.element.attr('data-autocomplete-path'), options); } } function focusHandler() { return false; } 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; } function renderItem(ul, item) { return $('
  • ').append($('').html(item.label)).appendTo(ul); } Drupal.behaviors.autocomplete = { attach: function attach(context) { var $autocomplete = $(once('autocomplete', 'input.form-autocomplete', context)); 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; }); $autocomplete.on('compositionend.autocomplete', function () { autocomplete.options.isComposing = false; }); } }, detach: function detach(context, settings, trigger) { if (trigger === 'unload') { $(once.remove('autocomplete', 'input.form-autocomplete', context)).autocomplete('destroy'); } } }; autocomplete = { cache: {}, splitValues: autocompleteSplitValues, extractLastTerm: extractLastTerm, options: { source: sourceData, focus: focusHandler, search: searchHandler, select: selectHandler, renderItem: renderItem, minLength: 1, firstCharacterBlacklist: '', isComposing: false }, ajax: { dataType: 'json', jsonp: false } }; Drupal.autocomplete = autocomplete; })(jQuery, Drupal);