Updated Drupal to 8.6. This goes with the following updates because it's possible...
[yaffs-website] / web / core / misc / autocomplete.js
1 /**
2 * DO NOT EDIT THIS FILE.
3 * See the following change record for more information,
4 * https://www.drupal.org/node/2815083
5 * @preserve
6 **/
7
8 (function ($, Drupal) {
9   var autocomplete = void 0;
10
11   function autocompleteSplitValues(value) {
12     var result = [];
13     var quote = false;
14     var current = '';
15     var valueLength = value.length;
16     var character = void 0;
17
18     for (var i = 0; i < valueLength; i++) {
19       character = value.charAt(i);
20       if (character === '"') {
21         current += character;
22         quote = !quote;
23       } else if (character === ',' && !quote) {
24         result.push(current.trim());
25         current = '';
26       } else {
27         current += character;
28       }
29     }
30     if (value.length > 0) {
31       result.push($.trim(current));
32     }
33
34     return result;
35   }
36
37   function extractLastTerm(terms) {
38     return autocomplete.splitValues(terms).pop();
39   }
40
41   function searchHandler(event) {
42     var options = autocomplete.options;
43
44     if (options.isComposing) {
45       return false;
46     }
47
48     var term = autocomplete.extractLastTerm(event.target.value);
49
50     if (term.length > 0 && options.firstCharacterBlacklist.indexOf(term[0]) !== -1) {
51       return false;
52     }
53
54     return term.length >= options.minLength;
55   }
56
57   function sourceData(request, response) {
58     var elementId = this.element.attr('id');
59
60     if (!(elementId in autocomplete.cache)) {
61       autocomplete.cache[elementId] = {};
62     }
63
64     function showSuggestions(suggestions) {
65       var tagged = autocomplete.splitValues(request.term);
66       var il = tagged.length;
67       for (var i = 0; i < il; i++) {
68         var index = suggestions.indexOf(tagged[i]);
69         if (index >= 0) {
70           suggestions.splice(index, 1);
71         }
72       }
73       response(suggestions);
74     }
75
76     var term = autocomplete.extractLastTerm(request.term);
77
78     function sourceCallbackHandler(data) {
79       autocomplete.cache[elementId][term] = data;
80
81       showSuggestions(data);
82     }
83
84     if (autocomplete.cache[elementId].hasOwnProperty(term)) {
85       showSuggestions(autocomplete.cache[elementId][term]);
86     } else {
87       var options = $.extend({ success: sourceCallbackHandler, data: { q: term } }, autocomplete.ajax);
88       $.ajax(this.element.attr('data-autocomplete-path'), options);
89     }
90   }
91
92   function focusHandler() {
93     return false;
94   }
95
96   function selectHandler(event, ui) {
97     var terms = autocomplete.splitValues(event.target.value);
98
99     terms.pop();
100
101     terms.push(ui.item.value);
102
103     event.target.value = terms.join(', ');
104
105     return false;
106   }
107
108   function renderItem(ul, item) {
109     return $('<li>').append($('<a>').html(item.label)).appendTo(ul);
110   }
111
112   Drupal.behaviors.autocomplete = {
113     attach: function attach(context) {
114       var $autocomplete = $(context).find('input.form-autocomplete').once('autocomplete');
115       if ($autocomplete.length) {
116         var blacklist = $autocomplete.attr('data-autocomplete-first-character-blacklist');
117         $.extend(autocomplete.options, {
118           firstCharacterBlacklist: blacklist || ''
119         });
120
121         $autocomplete.autocomplete(autocomplete.options).each(function () {
122           $(this).data('ui-autocomplete')._renderItem = autocomplete.options.renderItem;
123         });
124
125         $autocomplete.on('compositionstart.autocomplete', function () {
126           autocomplete.options.isComposing = true;
127         });
128         $autocomplete.on('compositionend.autocomplete', function () {
129           autocomplete.options.isComposing = false;
130         });
131       }
132     },
133     detach: function detach(context, settings, trigger) {
134       if (trigger === 'unload') {
135         $(context).find('input.form-autocomplete').removeOnce('autocomplete').autocomplete('destroy');
136       }
137     }
138   };
139
140   autocomplete = {
141     cache: {},
142
143     splitValues: autocompleteSplitValues,
144     extractLastTerm: extractLastTerm,
145
146     options: {
147       source: sourceData,
148       focus: focusHandler,
149       search: searchHandler,
150       select: selectHandler,
151       renderItem: renderItem,
152       minLength: 1,
153
154       firstCharacterBlacklist: '',
155
156       isComposing: false
157     },
158     ajax: {
159       dataType: 'json'
160     }
161   };
162
163   Drupal.autocomplete = autocomplete;
164 })(jQuery, Drupal);