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