fomantic-ui 2.10.0-beta.7 → 2.10.0-beta.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (227) hide show
  1. package/.eslintrc.js +0 -10
  2. package/README.md +4 -5
  3. package/changelog-setup.js +64 -70
  4. package/dist/components/accordion.css +1 -1
  5. package/dist/components/accordion.js +94 -131
  6. package/dist/components/accordion.min.css +1 -1
  7. package/dist/components/accordion.min.js +2 -2
  8. package/dist/components/ad.css +1 -1
  9. package/dist/components/ad.min.css +1 -1
  10. package/dist/components/api.js +152 -205
  11. package/dist/components/api.min.js +2 -2
  12. package/dist/components/breadcrumb.css +1 -1
  13. package/dist/components/breadcrumb.min.css +1 -1
  14. package/dist/components/button.css +1 -1
  15. package/dist/components/button.min.css +1 -1
  16. package/dist/components/calendar.css +1 -1
  17. package/dist/components/calendar.js +305 -341
  18. package/dist/components/calendar.min.css +1 -1
  19. package/dist/components/calendar.min.js +2 -2
  20. package/dist/components/card.css +1 -1
  21. package/dist/components/card.min.css +1 -1
  22. package/dist/components/checkbox.css +1 -1
  23. package/dist/components/checkbox.js +76 -116
  24. package/dist/components/checkbox.min.css +1 -1
  25. package/dist/components/checkbox.min.js +2 -2
  26. package/dist/components/comment.css +1 -1
  27. package/dist/components/comment.min.css +1 -1
  28. package/dist/components/container.css +1 -1
  29. package/dist/components/container.min.css +1 -1
  30. package/dist/components/dimmer.css +1 -1
  31. package/dist/components/dimmer.js +58 -91
  32. package/dist/components/dimmer.min.css +1 -1
  33. package/dist/components/dimmer.min.js +2 -2
  34. package/dist/components/divider.css +1 -1
  35. package/dist/components/divider.min.css +1 -1
  36. package/dist/components/dropdown.css +1 -1
  37. package/dist/components/dropdown.js +651 -941
  38. package/dist/components/dropdown.min.css +1 -1
  39. package/dist/components/dropdown.min.js +2 -2
  40. package/dist/components/embed.css +1 -1
  41. package/dist/components/embed.js +70 -108
  42. package/dist/components/embed.min.css +1 -1
  43. package/dist/components/embed.min.js +2 -2
  44. package/dist/components/emoji.css +1 -1
  45. package/dist/components/emoji.min.css +1 -1
  46. package/dist/components/feed.css +1 -1
  47. package/dist/components/feed.min.css +1 -1
  48. package/dist/components/flag.css +1 -1
  49. package/dist/components/flag.min.css +1 -1
  50. package/dist/components/flyout.css +1 -1
  51. package/dist/components/flyout.js +182 -256
  52. package/dist/components/flyout.min.css +1 -1
  53. package/dist/components/flyout.min.js +2 -2
  54. package/dist/components/form.css +1 -1
  55. package/dist/components/form.js +325 -429
  56. package/dist/components/form.min.css +1 -1
  57. package/dist/components/form.min.js +2 -2
  58. package/dist/components/grid.css +1 -1
  59. package/dist/components/grid.min.css +1 -1
  60. package/dist/components/header.css +1 -1
  61. package/dist/components/header.min.css +1 -1
  62. package/dist/components/icon.css +1 -1
  63. package/dist/components/icon.min.css +1 -1
  64. package/dist/components/image.css +1 -1
  65. package/dist/components/image.min.css +1 -1
  66. package/dist/components/input.css +1 -1
  67. package/dist/components/input.min.css +1 -1
  68. package/dist/components/item.css +1 -1
  69. package/dist/components/item.min.css +1 -1
  70. package/dist/components/label.css +1 -1
  71. package/dist/components/label.min.css +1 -1
  72. package/dist/components/list.css +1 -1
  73. package/dist/components/list.min.css +1 -1
  74. package/dist/components/loader.css +1 -1
  75. package/dist/components/loader.min.css +1 -1
  76. package/dist/components/menu.css +1 -1
  77. package/dist/components/menu.min.css +1 -1
  78. package/dist/components/message.css +1 -1
  79. package/dist/components/message.min.css +1 -1
  80. package/dist/components/modal.css +1 -1
  81. package/dist/components/modal.js +211 -295
  82. package/dist/components/modal.min.css +1 -1
  83. package/dist/components/modal.min.js +2 -2
  84. package/dist/components/nag.css +1 -1
  85. package/dist/components/nag.js +67 -97
  86. package/dist/components/nag.min.css +1 -1
  87. package/dist/components/nag.min.js +2 -2
  88. package/dist/components/placeholder.css +1 -1
  89. package/dist/components/placeholder.min.css +1 -1
  90. package/dist/components/popup.css +1 -1
  91. package/dist/components/popup.js +175 -235
  92. package/dist/components/popup.min.css +1 -1
  93. package/dist/components/popup.min.js +2 -2
  94. package/dist/components/progress.css +1 -1
  95. package/dist/components/progress.js +103 -138
  96. package/dist/components/progress.min.css +1 -1
  97. package/dist/components/progress.min.js +2 -2
  98. package/dist/components/rail.css +1 -1
  99. package/dist/components/rail.min.css +1 -1
  100. package/dist/components/rating.css +1 -1
  101. package/dist/components/rating.js +79 -120
  102. package/dist/components/rating.min.css +1 -1
  103. package/dist/components/rating.min.js +2 -2
  104. package/dist/components/reset.css +1 -1
  105. package/dist/components/reset.min.css +1 -1
  106. package/dist/components/reveal.css +1 -1
  107. package/dist/components/reveal.min.css +1 -1
  108. package/dist/components/search.css +1 -1
  109. package/dist/components/search.js +239 -333
  110. package/dist/components/search.min.css +1 -1
  111. package/dist/components/search.min.js +2 -2
  112. package/dist/components/segment.css +1 -1
  113. package/dist/components/segment.min.css +1 -1
  114. package/dist/components/shape.css +1 -1
  115. package/dist/components/shape.js +157 -223
  116. package/dist/components/shape.min.css +1 -1
  117. package/dist/components/shape.min.js +2 -2
  118. package/dist/components/sidebar.css +1 -1
  119. package/dist/components/sidebar.js +122 -163
  120. package/dist/components/sidebar.min.css +1 -1
  121. package/dist/components/sidebar.min.js +2 -2
  122. package/dist/components/site.css +1 -1
  123. package/dist/components/site.js +38 -57
  124. package/dist/components/site.min.css +1 -1
  125. package/dist/components/site.min.js +2 -2
  126. package/dist/components/slider.css +1 -1
  127. package/dist/components/slider.js +242 -325
  128. package/dist/components/slider.min.css +1 -1
  129. package/dist/components/slider.min.js +2 -2
  130. package/dist/components/state.js +68 -98
  131. package/dist/components/state.min.js +2 -2
  132. package/dist/components/statistic.css +1 -1
  133. package/dist/components/statistic.min.css +1 -1
  134. package/dist/components/step.css +1 -1
  135. package/dist/components/step.min.css +1 -1
  136. package/dist/components/sticky.css +1 -1
  137. package/dist/components/sticky.js +116 -159
  138. package/dist/components/sticky.min.css +1 -1
  139. package/dist/components/sticky.min.js +2 -2
  140. package/dist/components/tab.css +1 -1
  141. package/dist/components/tab.js +168 -233
  142. package/dist/components/tab.min.css +1 -1
  143. package/dist/components/tab.min.js +2 -2
  144. package/dist/components/table.css +1 -1
  145. package/dist/components/table.min.css +1 -1
  146. package/dist/components/text.css +1 -1
  147. package/dist/components/text.min.css +1 -1
  148. package/dist/components/toast.css +1 -1
  149. package/dist/components/toast.js +89 -114
  150. package/dist/components/toast.min.css +1 -1
  151. package/dist/components/toast.min.js +2 -2
  152. package/dist/components/transition.css +1 -1
  153. package/dist/components/transition.js +86 -141
  154. package/dist/components/transition.min.css +1 -1
  155. package/dist/components/transition.min.js +2 -2
  156. package/dist/components/visibility.js +134 -210
  157. package/dist/components/visibility.min.js +2 -2
  158. package/dist/semantic.css +53 -53
  159. package/dist/semantic.js +4006 -5558
  160. package/dist/semantic.min.css +1 -1
  161. package/dist/semantic.min.js +2 -2
  162. package/examples/assets/show-examples.js +2 -4
  163. package/gulpfile.js +5 -7
  164. package/package.json +1 -1
  165. package/scripts/nightly-version.js +7 -10
  166. package/src/definitions/behaviors/api.js +151 -204
  167. package/src/definitions/behaviors/form.js +324 -428
  168. package/src/definitions/behaviors/state.js +67 -97
  169. package/src/definitions/behaviors/visibility.js +133 -209
  170. package/src/definitions/globals/site.js +37 -56
  171. package/src/definitions/modules/accordion.js +93 -130
  172. package/src/definitions/modules/calendar.js +304 -340
  173. package/src/definitions/modules/checkbox.js +75 -115
  174. package/src/definitions/modules/dimmer.js +57 -90
  175. package/src/definitions/modules/dropdown.js +650 -940
  176. package/src/definitions/modules/embed.js +69 -107
  177. package/src/definitions/modules/flyout.js +181 -255
  178. package/src/definitions/modules/modal.js +210 -294
  179. package/src/definitions/modules/nag.js +66 -96
  180. package/src/definitions/modules/popup.js +174 -234
  181. package/src/definitions/modules/progress.js +102 -137
  182. package/src/definitions/modules/rating.js +78 -119
  183. package/src/definitions/modules/search.js +238 -332
  184. package/src/definitions/modules/shape.js +156 -222
  185. package/src/definitions/modules/sidebar.js +121 -162
  186. package/src/definitions/modules/slider.js +241 -324
  187. package/src/definitions/modules/sticky.js +115 -158
  188. package/src/definitions/modules/tab.js +167 -232
  189. package/src/definitions/modules/toast.js +88 -113
  190. package/src/definitions/modules/transition.js +85 -140
  191. package/tasks/admin/components/create.js +88 -108
  192. package/tasks/admin/components/init.js +26 -32
  193. package/tasks/admin/components/update.js +46 -53
  194. package/tasks/admin/distributions/create.js +71 -101
  195. package/tasks/admin/distributions/init.js +27 -33
  196. package/tasks/admin/distributions/update.js +45 -52
  197. package/tasks/admin/register.js +11 -15
  198. package/tasks/build/assets.js +14 -18
  199. package/tasks/build/css.js +54 -63
  200. package/tasks/build/javascript.js +45 -53
  201. package/tasks/build.js +4 -6
  202. package/tasks/check-install.js +5 -7
  203. package/tasks/clean.js +2 -4
  204. package/tasks/collections/admin.js +13 -15
  205. package/tasks/collections/build.js +6 -8
  206. package/tasks/collections/docs.js +2 -4
  207. package/tasks/collections/install.js +2 -4
  208. package/tasks/collections/rtl.js +2 -4
  209. package/tasks/collections/various.js +2 -4
  210. package/tasks/config/admin/github.js +7 -9
  211. package/tasks/config/admin/templates/css-package.js +1 -3
  212. package/tasks/config/admin/templates/less-package.js +1 -3
  213. package/tasks/config/npm/gulpfile.js +4 -6
  214. package/tasks/config/project/config.js +22 -30
  215. package/tasks/config/project/install.js +56 -70
  216. package/tasks/config/project/release.js +6 -8
  217. package/tasks/config/tasks.js +8 -12
  218. package/tasks/config/user.js +13 -17
  219. package/tasks/docs/build.js +26 -31
  220. package/tasks/docs/metadata.js +24 -30
  221. package/tasks/docs/serve.js +20 -26
  222. package/tasks/install.js +71 -98
  223. package/tasks/rtl/build.js +2 -4
  224. package/tasks/rtl/watch.js +2 -4
  225. package/tasks/watch.js +9 -11
  226. package/test/meteor/fonts.js +1 -2
  227. package/test/modules/module.spec.js +16 -18
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * # Fomantic-UI 2.10.0-beta.7+13b1bae - Dropdown
2
+ * # Fomantic-UI 2.10.0-beta.8+62e258f - Dropdown
3
3
  * https://github.com/fomantic/Fomantic-UI/
4
4
  *
5
5
  *
@@ -20,91 +20,87 @@
20
20
  : globalThis;
21
21
 
22
22
  $.fn.dropdown = function (parameters) {
23
- var
24
- $allModules = $(this),
25
- $document = $(document),
26
-
27
- time = Date.now(),
28
- performance = [],
29
-
30
- query = arguments[0],
31
- methodInvoked = typeof query === 'string',
32
- queryArguments = [].slice.call(arguments, 1),
33
- contextCheck = function (context, win) {
34
- var $context;
35
- if ([window, document].indexOf(context) >= 0) {
36
- $context = $(context);
37
- } else {
38
- $context = $(win.document).find(context);
39
- if ($context.length === 0) {
40
- $context = win.frameElement ? contextCheck(context, win.parent) : window;
41
- }
23
+ let $allModules = $(this);
24
+ let $document = $(document);
25
+
26
+ let time = Date.now();
27
+ let performance = [];
28
+
29
+ let query = arguments[0];
30
+ let methodInvoked = typeof query === 'string';
31
+ let queryArguments = [].slice.call(arguments, 1);
32
+ let contextCheck = function (context, win) {
33
+ let $context;
34
+ if ([window, document].indexOf(context) >= 0) {
35
+ $context = $(context);
36
+ } else {
37
+ $context = $(win.document).find(context);
38
+ if ($context.length === 0) {
39
+ $context = win.frameElement ? contextCheck(context, win.parent) : window;
42
40
  }
41
+ }
43
42
 
44
- return $context;
45
- },
46
- returnedValue
47
- ;
43
+ return $context;
44
+ };
45
+ let returnedValue;
48
46
 
49
47
  $allModules.each(function (elementIndex) {
50
- var
51
- settings = $.isPlainObject(parameters)
52
- ? $.extend(true, {}, $.fn.dropdown.settings, parameters)
53
- : $.extend({}, $.fn.dropdown.settings),
54
-
55
- className = settings.className,
56
- message = settings.message,
57
- fields = settings.fields,
58
- keys = settings.keys,
59
- metadata = settings.metadata,
60
- namespace = settings.namespace,
61
- regExp = settings.regExp,
62
- selector = settings.selector,
63
- error = settings.error,
64
- templates = settings.templates,
65
-
66
- eventNamespace = '.' + namespace,
67
- moduleNamespace = 'module-' + namespace,
68
-
69
- $module = $(this),
70
- $context = contextCheck(settings.context, window),
71
- $text = $module.find(selector.text),
72
- $search = $module.find(selector.search),
73
- $sizer = $module.find(selector.sizer),
74
- $input = $module.find(selector.input),
75
- $icon = $module.find(selector.icon),
76
- $clear = $module.find(selector.clearIcon),
77
-
78
- $combo = $module.prev().find(selector.text).length > 0
79
- ? $module.prev().find(selector.text)
80
- : $module.prev(),
81
-
82
- $menu = $module.children(selector.menu),
83
- $item = $menu.find(selector.item),
84
- $divider = settings.hideDividers
85
- ? $item.parent().children(selector.divider)
86
- : $(),
87
-
88
- activated = false,
89
- itemActivated = false,
90
- internalChange = false,
91
- iconClicked = false,
92
- element = this,
93
- focused = false,
94
- instance = $module.data(moduleNamespace),
95
-
96
- selectActionActive,
97
- initialLoad,
98
- pageLostFocus,
99
- willRefocus,
100
- elementNamespace,
101
- id,
102
- selectObserver,
103
- menuObserver,
104
- classObserver,
105
- module,
106
- tempDisableApiCache = false
107
- ;
48
+ let settings = $.isPlainObject(parameters)
49
+ ? $.extend(true, {}, $.fn.dropdown.settings, parameters)
50
+ : $.extend({}, $.fn.dropdown.settings);
51
+
52
+ let className = settings.className;
53
+ let message = settings.message;
54
+ let fields = settings.fields;
55
+ let keys = settings.keys;
56
+ let metadata = settings.metadata;
57
+ let namespace = settings.namespace;
58
+ let regExp = settings.regExp;
59
+ let selector = settings.selector;
60
+ let error = settings.error;
61
+ let templates = settings.templates;
62
+
63
+ let eventNamespace = '.' + namespace;
64
+ let moduleNamespace = 'module-' + namespace;
65
+
66
+ let $module = $(this);
67
+ let $context = contextCheck(settings.context, window);
68
+ let $text = $module.find(selector.text);
69
+ let $search = $module.find(selector.search);
70
+ let $sizer = $module.find(selector.sizer);
71
+ let $input = $module.find(selector.input);
72
+ let $icon = $module.find(selector.icon);
73
+ let $clear = $module.find(selector.clearIcon);
74
+
75
+ let $combo = $module.prev().find(selector.text).length > 0
76
+ ? $module.prev().find(selector.text)
77
+ : $module.prev();
78
+
79
+ let $menu = $module.children(selector.menu);
80
+ let $item = $menu.find(selector.item);
81
+ let $divider = settings.hideDividers
82
+ ? $item.parent().children(selector.divider)
83
+ : $();
84
+
85
+ let activated = false;
86
+ let itemActivated = false;
87
+ let internalChange = false;
88
+ let iconClicked = false;
89
+ let element = this;
90
+ let focused = false;
91
+ let instance = $module.data(moduleNamespace);
92
+
93
+ let selectActionActive;
94
+ let initialLoad;
95
+ let pageLostFocus;
96
+ let willRefocus;
97
+ let elementNamespace;
98
+ let id;
99
+ let selectObserver;
100
+ let menuObserver;
101
+ let classObserver;
102
+ let module;
103
+ let tempDisableApiCache = false;
108
104
 
109
105
  module = {
110
106
 
@@ -142,8 +138,7 @@
142
138
  module.verbose('Storing instance of dropdown', module);
143
139
  instance = module;
144
140
  $module
145
- .data(moduleNamespace, module)
146
- ;
141
+ .data(moduleNamespace, module);
147
142
  },
148
143
 
149
144
  destroy: function () {
@@ -154,14 +149,11 @@
154
149
  $menu.removeClass(className.visible).addClass(className.hidden);
155
150
  $module
156
151
  .off(eventNamespace)
157
- .removeData(moduleNamespace)
158
- ;
152
+ .removeData(moduleNamespace);
159
153
  $menu
160
- .off(eventNamespace)
161
- ;
154
+ .off(eventNamespace);
162
155
  $document
163
- .off(elementNamespace)
164
- ;
156
+ .off(elementNamespace);
165
157
  module.disconnect.menuObserver();
166
158
  module.disconnect.selectObserver();
167
159
  module.disconnect.classObserver();
@@ -230,11 +222,9 @@
230
222
  module.verbose('Creating unique id for element', id);
231
223
  },
232
224
  userChoice: function (values) {
233
- var
234
- $userChoices,
235
- $userChoice,
236
- html
237
- ;
225
+ let $userChoices;
226
+ let $userChoice;
227
+ let html;
238
228
  values = values || module.get.userValues();
239
229
  if (!values) {
240
230
  return false;
@@ -250,8 +240,7 @@
250
240
  .attr('data-' + metadata.value, value)
251
241
  .attr('data-' + metadata.text, value)
252
242
  .addClass(className.addition)
253
- .addClass(className.item)
254
- ;
243
+ .addClass(className.item);
255
244
  if (settings.hideAdditions) {
256
245
  $userChoice.addClass(className.hidden);
257
246
  }
@@ -265,9 +254,7 @@
265
254
  return $userChoices;
266
255
  },
267
256
  userLabels: function (value) {
268
- var
269
- userValues = module.get.userValues()
270
- ;
257
+ let userValues = module.get.userValues();
271
258
  if (userValues) {
272
259
  module.debug('Adding user labels', userValues);
273
260
  $.each(userValues, function (index, value) {
@@ -279,14 +266,12 @@
279
266
  menu: function () {
280
267
  $menu = $('<div />')
281
268
  .addClass(className.menu)
282
- .appendTo($module)
283
- ;
269
+ .appendTo($module);
284
270
  },
285
271
  sizer: function () {
286
272
  $sizer = $('<span />')
287
273
  .addClass(className.sizer)
288
- .insertAfter($search)
289
- ;
274
+ .insertAfter($search);
290
275
  },
291
276
  },
292
277
 
@@ -312,16 +297,13 @@
312
297
  .not(selector.unselectable)
313
298
  .not(selector.addition + selector.hidden)
314
299
  .eq(0)
315
- .addClass(className.selected)
316
- ;
300
+ .addClass(className.selected);
317
301
  },
318
302
  nextAvailable: function ($selected) {
319
303
  $selected = $selected.eq(0);
320
- var
321
- $nextAvailable = $selected.nextAll(selector.item).not(selector.unselectable).eq(0),
322
- $prevAvailable = $selected.prevAll(selector.item).not(selector.unselectable).eq(0),
323
- hasNext = $nextAvailable.length > 0
324
- ;
304
+ let $nextAvailable = $selected.nextAll(selector.item).not(selector.unselectable).eq(0);
305
+ let $prevAvailable = $selected.prevAll(selector.item).not(selector.unselectable).eq(0);
306
+ let hasNext = $nextAvailable.length > 0;
325
307
  if (hasNext) {
326
308
  module.verbose('Moving selection to', $nextAvailable);
327
309
  $nextAvailable.addClass(className.selected);
@@ -334,20 +316,17 @@
334
316
 
335
317
  setup: {
336
318
  api: function () {
337
- var
338
- apiSettings = {
339
- debug: settings.debug,
340
- urlData: {
341
- value: module.get.value(),
342
- query: module.get.query(),
343
- },
344
- on: false,
345
- }
346
- ;
319
+ let apiSettings = {
320
+ debug: settings.debug,
321
+ urlData: {
322
+ value: module.get.value(),
323
+ query: module.get.query(),
324
+ },
325
+ on: false,
326
+ };
347
327
  module.verbose('First request, initializing API');
348
328
  $module
349
- .api(apiSettings)
350
- ;
329
+ .api(apiSettings);
351
330
  },
352
331
  layout: function () {
353
332
  if ($module.is('select')) {
@@ -361,18 +340,14 @@
361
340
  module.verbose('Adding clear icon');
362
341
  $clear = $('<i />')
363
342
  .addClass('remove icon')
364
- .insertAfter($icon)
365
- ;
343
+ .insertAfter($icon);
366
344
  }
367
345
  if (module.is.search() && !module.has.search()) {
368
346
  module.verbose('Adding search input');
369
- var
370
- labelNode = $module.prev('label')
371
- ;
347
+ let labelNode = $module.prev('label');
372
348
  $search = $('<input />')
373
349
  .addClass(className.search)
374
- .prop('autocomplete', module.is.chrome() ? 'fomantic-search' : 'off')
375
- ;
350
+ .prop('autocomplete', module.is.chrome() ? 'fomantic-search' : 'off');
376
351
  if (labelNode.length > 0) {
377
352
  if (!labelNode.attr('id')) {
378
353
  labelNode.attr('id', '_' + module.get.id() + '_formLabel');
@@ -389,9 +364,7 @@
389
364
  }
390
365
  },
391
366
  select: function () {
392
- var
393
- selectValues = module.get.selectValues()
394
- ;
367
+ let selectValues = module.get.selectValues();
395
368
  module.debug('Dropdown initialized on a select', selectValues);
396
369
  if ($module.is('select')) {
397
370
  $input = $module;
@@ -412,8 +385,7 @@
412
385
  .addClass(className.selection)
413
386
  .addClass(className.dropdown)
414
387
  .html(templates.dropdown(selectValues, settings))
415
- .insertBefore($input)
416
- ;
388
+ .insertBefore($input);
417
389
  if ($input.hasClass(className.multiple) && $input.prop('multiple') === false) {
418
390
  module.error(error.missingMultiple);
419
391
  $input.prop('multiple', true);
@@ -435,8 +407,7 @@
435
407
  .prop('required', false)
436
408
  .removeAttr('class')
437
409
  .detach()
438
- .prependTo($module)
439
- ;
410
+ .prependTo($module);
440
411
  }
441
412
  module.refresh();
442
413
  },
@@ -455,10 +426,8 @@
455
426
  module.setup.returnedObject();
456
427
  },
457
428
  returnedObject: function () {
458
- var
459
- $firstModules = $allModules.slice(0, elementIndex),
460
- $lastModules = $allModules.slice(elementIndex + 1)
461
- ;
429
+ let $firstModules = $allModules.slice(0, elementIndex);
430
+ let $lastModules = $allModules.slice(elementIndex + 1);
462
431
  // adjust all modules to use the correct reference
463
432
  $allModules = $firstModules.add($module).add($lastModules);
464
433
  },
@@ -492,21 +461,18 @@
492
461
  module.verbose('Refreshing cached metadata');
493
462
  $item
494
463
  .removeData(metadata.text)
495
- .removeData(metadata.value)
496
- ;
464
+ .removeData(metadata.value);
497
465
  },
498
466
 
499
467
  clearData: function () {
500
468
  module.verbose('Clearing metadata');
501
469
  $item
502
470
  .removeData(metadata.text)
503
- .removeData(metadata.value)
504
- ;
471
+ .removeData(metadata.value);
505
472
  $module
506
473
  .removeData(metadata.defaultText)
507
474
  .removeData(metadata.defaultValue)
508
- .removeData(metadata.placeholderText)
509
- ;
475
+ .removeData(metadata.placeholderText);
510
476
  },
511
477
 
512
478
  clearItems: function () {
@@ -573,11 +539,11 @@
573
539
  });
574
540
  // Hide submenus explicitly. On some browsers (esp. mobile), they will not automatically receive a
575
541
  // mouseleave event
576
- var $subMenu = $module.find(selector.menu);
542
+ let $subMenu = $module.find(selector.menu);
577
543
  if ($subMenu.length > 0) {
578
544
  module.verbose('Hiding sub-menu', $subMenu);
579
545
  $subMenu.each(function () {
580
- var $sub = $(this);
546
+ let $sub = $(this);
581
547
  if (!module.is.animating($sub)) {
582
548
  module.animate.hide(false, $sub);
583
549
  }
@@ -596,8 +562,7 @@
596
562
  $allModules
597
563
  .not($module)
598
564
  .has(selector.menu + '.' + className.visible)
599
- .dropdown('hide')
600
- ;
565
+ .dropdown('hide');
601
566
  },
602
567
 
603
568
  hideMenu: function () {
@@ -608,9 +573,7 @@
608
573
  },
609
574
 
610
575
  hideSubMenus: function () {
611
- var
612
- $subMenus = $menu.children(selector.item).find(selector.menu)
613
- ;
576
+ let $subMenus = $menu.children(selector.item).find(selector.menu);
614
577
  module.verbose('Hiding sub menus', $subMenus);
615
578
  $subMenus.transition('hide');
616
579
  },
@@ -624,28 +587,23 @@
624
587
  keyboardEvents: function () {
625
588
  module.verbose('Binding keyboard events');
626
589
  $module
627
- .on('keydown' + eventNamespace, module.event.keydown)
628
- ;
590
+ .on('keydown' + eventNamespace, module.event.keydown);
629
591
  if (module.has.search()) {
630
592
  $module
631
- .on(module.get.inputEvent() + eventNamespace, selector.search, module.event.input)
632
- ;
593
+ .on(module.get.inputEvent() + eventNamespace, selector.search, module.event.input);
633
594
  }
634
595
  if (module.is.multiple()) {
635
596
  $document
636
- .on('keydown' + elementNamespace, module.event.document.keydown)
637
- ;
597
+ .on('keydown' + elementNamespace, module.event.document.keydown);
638
598
  }
639
599
  },
640
600
  inputEvents: function () {
641
601
  module.verbose('Binding input change events');
642
602
  $module
643
- .on('change' + eventNamespace, selector.input, module.event.change)
644
- ;
603
+ .on('change' + eventNamespace, selector.input, module.event.change);
645
604
  if (module.is.multiple() && module.is.searchSelection()) {
646
605
  $module
647
- .on('paste' + eventNamespace, selector.search, module.event.paste)
648
- ;
606
+ .on('paste' + eventNamespace, selector.search, module.event.paste);
649
607
  }
650
608
  },
651
609
  mouseEvents: function () {
@@ -653,8 +611,7 @@
653
611
  if (module.is.multiple()) {
654
612
  $module
655
613
  .on('click' + eventNamespace, selector.label, module.event.label.click)
656
- .on('click' + eventNamespace, selector.remove, module.event.remove.click)
657
- ;
614
+ .on('click' + eventNamespace, selector.remove, module.event.remove.click);
658
615
  }
659
616
  if (module.is.searchSelection()) {
660
617
  $module
@@ -667,60 +624,50 @@
667
624
  .on('focus' + eventNamespace, selector.search, module.event.search.focus)
668
625
  .on('click' + eventNamespace, selector.search, module.event.search.focus)
669
626
  .on('blur' + eventNamespace, selector.search, module.event.search.blur)
670
- .on('click' + eventNamespace, selector.text, module.event.text.focus)
671
- ;
627
+ .on('click' + eventNamespace, selector.text, module.event.text.focus);
672
628
  if (module.is.multiple()) {
673
629
  $module
674
630
  .on('click' + eventNamespace, module.event.click)
675
- .on('click' + eventNamespace, module.event.search.focus)
676
- ;
631
+ .on('click' + eventNamespace, module.event.search.focus);
677
632
  }
678
633
  } else {
679
634
  if (settings.on === 'click') {
680
635
  $module
681
636
  .on('click' + eventNamespace, selector.icon, module.event.icon.click)
682
- .on('click' + eventNamespace, module.event.test.toggle)
683
- ;
637
+ .on('click' + eventNamespace, module.event.test.toggle);
684
638
  } else if (settings.on === 'hover') {
685
639
  $module
686
640
  .on('mouseenter' + eventNamespace, module.delay.show)
687
641
  .on('mouseleave' + eventNamespace, module.delay.hide)
688
642
  .on('touchstart' + eventNamespace, module.event.test.toggle)
689
- .on('touchstart' + eventNamespace, selector.icon, module.event.icon.click)
690
- ;
643
+ .on('touchstart' + eventNamespace, selector.icon, module.event.icon.click);
691
644
  } else {
692
645
  $module
693
- .on(settings.on + eventNamespace, module.toggle)
694
- ;
646
+ .on(settings.on + eventNamespace, module.toggle);
695
647
  }
696
648
  $module
697
649
  .on('mousedown' + eventNamespace, module.event.mousedown)
698
650
  .on('mouseup' + eventNamespace, module.event.mouseup)
699
651
  .on('focus' + eventNamespace, module.event.focus)
700
- .on('click' + eventNamespace, selector.clearIcon, module.event.clearIcon.click)
701
- ;
652
+ .on('click' + eventNamespace, selector.clearIcon, module.event.clearIcon.click);
702
653
  if (module.has.menuSearch()) {
703
654
  $module
704
- .on('blur' + eventNamespace, selector.search, module.event.search.blur)
705
- ;
655
+ .on('blur' + eventNamespace, selector.search, module.event.search.blur);
706
656
  } else {
707
657
  $module
708
- .on('blur' + eventNamespace, module.event.blur)
709
- ;
658
+ .on('blur' + eventNamespace, module.event.blur);
710
659
  }
711
660
  }
712
661
  $menu
713
662
  .on('mouseenter' + eventNamespace, selector.item, module.event.item.mouseenter)
714
663
  .on('touchstart' + eventNamespace, selector.item, module.event.item.mouseenter)
715
664
  .on('mouseleave' + eventNamespace, selector.item, module.event.item.mouseleave)
716
- .on('click' + eventNamespace, selector.item, module.event.item.click)
717
- ;
665
+ .on('click' + eventNamespace, selector.item, module.event.item.click);
718
666
  },
719
667
  intent: function () {
720
668
  module.verbose('Binding hide intent event to document');
721
669
  $document
722
- .on('click' + elementNamespace, module.event.test.hide)
723
- ;
670
+ .on('click' + elementNamespace, module.event.test.hide);
724
671
  },
725
672
  },
726
673
 
@@ -728,52 +675,49 @@
728
675
  intent: function () {
729
676
  module.verbose('Removing hide intent event from document');
730
677
  $document
731
- .off('click' + elementNamespace)
732
- ;
678
+ .off('click' + elementNamespace);
733
679
  },
734
680
  },
735
681
 
736
682
  filter: function (query) {
737
- var
738
- searchTerm = query !== undefined
739
- ? query
740
- : module.get.query(),
741
- afterFiltered = function () {
742
- if (module.is.multiple()) {
743
- module.filterActive();
744
- }
745
- if (query || (!query && module.get.activeItem().length === 0)) {
746
- module.select.firstUnfiltered();
747
- }
748
- if (module.has.allResultsFiltered()) {
749
- if (settings.onNoResults.call(element, searchTerm)) {
750
- if (settings.allowAdditions) {
751
- if (settings.hideAdditions) {
752
- module.verbose('User addition with no menu, setting empty style');
753
- module.set.empty();
754
- module.hideMenu();
755
- }
756
- } else {
757
- module.verbose('All items filtered, showing message', searchTerm);
758
- module.add.message(message.noResults);
683
+ let searchTerm = query !== undefined
684
+ ? query
685
+ : module.get.query();
686
+ let afterFiltered = function () {
687
+ if (module.is.multiple()) {
688
+ module.filterActive();
689
+ }
690
+ if (query || (!query && module.get.activeItem().length === 0)) {
691
+ module.select.firstUnfiltered();
692
+ }
693
+ if (module.has.allResultsFiltered()) {
694
+ if (settings.onNoResults.call(element, searchTerm)) {
695
+ if (settings.allowAdditions) {
696
+ if (settings.hideAdditions) {
697
+ module.verbose('User addition with no menu, setting empty style');
698
+ module.set.empty();
699
+ module.hideMenu();
759
700
  }
760
701
  } else {
761
- module.verbose('All items filtered, hiding dropdown', searchTerm);
762
- module.set.empty();
763
- module.hideMenu();
702
+ module.verbose('All items filtered, showing message', searchTerm);
703
+ module.add.message(message.noResults);
764
704
  }
765
705
  } else {
766
- module.remove.empty();
767
- module.remove.message();
768
- }
769
- if (settings.allowAdditions) {
770
- module.add.userSuggestion(module.escape.htmlEntities(query));
771
- }
772
- if (module.is.searchSelection() && module.can.show() && module.is.focusedOnSearch() && !module.is.empty()) {
773
- module.show();
706
+ module.verbose('All items filtered, hiding dropdown', searchTerm);
707
+ module.set.empty();
708
+ module.hideMenu();
774
709
  }
710
+ } else {
711
+ module.remove.empty();
712
+ module.remove.message();
713
+ }
714
+ if (settings.allowAdditions) {
715
+ module.add.userSuggestion(module.escape.htmlEntities(query));
716
+ }
717
+ if (module.is.searchSelection() && module.can.show() && module.is.focusedOnSearch() && !module.is.empty()) {
718
+ module.show();
775
719
  }
776
- ;
720
+ };
777
721
  if (settings.useLabels && module.has.maxSelections()) {
778
722
  module.show();
779
723
 
@@ -785,15 +729,14 @@
785
729
  if (settings.filterRemoteData) {
786
730
  module.filterItems(searchTerm);
787
731
  }
788
- var preSelected = $input.val();
732
+ let preSelected = $input.val();
789
733
  if (!Array.isArray(preSelected)) {
790
734
  preSelected = preSelected && preSelected !== '' ? preSelected.split(settings.delimiter) : [];
791
735
  }
792
736
  if (module.is.multiple()) {
793
737
  $.each(preSelected, function (index, value) {
794
- $item.filter('[data-' + metadata.value + '="' + value + '"]')
795
- .addClass(className.filtered)
796
- ;
738
+ $item.filter('[data-' + metadata.value + '="' + CSS.escape(value) + '"]')
739
+ .addClass(className.filtered);
797
740
  });
798
741
  }
799
742
  module.focusSearch(true);
@@ -812,88 +755,81 @@
812
755
  if (!Array.isArray(callbackParameters)) {
813
756
  callbackParameters = [callbackParameters];
814
757
  }
815
- var
816
- apiSettings = {
817
- errorDuration: false,
818
- cache: 'local',
819
- throttle: settings.throttle,
820
- urlData: {
821
- query: query,
822
- },
758
+ let apiSettings = {
759
+ errorDuration: false,
760
+ cache: 'local',
761
+ throttle: settings.throttle,
762
+ urlData: {
763
+ query: query,
823
764
  },
824
- apiCallbacks = {
825
- onError: function (errorMessage, $module, xhr) {
826
- module.add.message(message.serverError);
827
- iconClicked = false;
828
- focused = false;
829
- callback.apply(null, callbackParameters);
830
- if (typeof settings.apiSettings.onError === 'function') {
831
- settings.apiSettings.onError.call(this, errorMessage, $module, xhr);
832
- }
833
- },
834
- onFailure: function (response, $module, xhr) {
835
- module.add.message(message.serverError);
836
- iconClicked = false;
837
- focused = false;
838
- callback.apply(null, callbackParameters);
839
- if (typeof settings.apiSettings.onFailure === 'function') {
840
- settings.apiSettings.onFailure.call(this, response, $module, xhr);
841
- }
842
- },
843
- onSuccess: function (response, $module, xhr) {
844
- var
845
- values = response[fields.remoteValues]
846
- ;
847
- if (!Array.isArray(values)) {
848
- values = [];
849
- }
850
- module.remove.message();
851
- var menuConfig = {};
852
- menuConfig[fields.values] = values;
853
- module.setup.menu(menuConfig);
765
+ };
766
+ let apiCallbacks = {
767
+ onError: function (errorMessage, $module, xhr) {
768
+ module.add.message(message.serverError);
769
+ iconClicked = false;
770
+ focused = false;
771
+ callback.apply(null, callbackParameters);
772
+ if (typeof settings.apiSettings.onError === 'function') {
773
+ settings.apiSettings.onError.call(this, errorMessage, $module, xhr);
774
+ }
775
+ },
776
+ onFailure: function (response, $module, xhr) {
777
+ module.add.message(message.serverError);
778
+ iconClicked = false;
779
+ focused = false;
780
+ callback.apply(null, callbackParameters);
781
+ if (typeof settings.apiSettings.onFailure === 'function') {
782
+ settings.apiSettings.onFailure.call(this, response, $module, xhr);
783
+ }
784
+ },
785
+ onSuccess: function (response, $module, xhr) {
786
+ let values = response[fields.remoteValues];
787
+ if (!Array.isArray(values)) {
788
+ values = [];
789
+ }
790
+ module.remove.message();
791
+ let menuConfig = {};
792
+ menuConfig[fields.values] = values;
793
+ module.setup.menu(menuConfig);
854
794
 
855
- if (values.length === 0 && !settings.allowAdditions) {
856
- module.add.message(message.noResults);
857
- } else {
858
- var value = module.is.multiple() ? module.get.values() : module.get.value();
859
- if (value !== '') {
860
- module.verbose('Value(s) present after click icon, select value(s) in items');
861
- module.set.selected(value, null, true, true);
862
- }
863
- }
864
- iconClicked = false;
865
- focused = false;
866
- callback.apply(null, callbackParameters);
867
- if (typeof settings.apiSettings.onSuccess === 'function') {
868
- settings.apiSettings.onSuccess.call(this, response, $module, xhr);
795
+ if (values.length === 0 && !settings.allowAdditions) {
796
+ module.add.message(message.noResults);
797
+ } else {
798
+ let value = module.is.multiple() ? module.get.values() : module.get.value();
799
+ if (value !== '') {
800
+ module.verbose('Value(s) present after click icon, select value(s) in items');
801
+ module.set.selected(value, null, true, true);
869
802
  }
870
- },
871
- }
872
- ;
803
+ }
804
+ iconClicked = false;
805
+ focused = false;
806
+ callback.apply(null, callbackParameters);
807
+ if (typeof settings.apiSettings.onSuccess === 'function') {
808
+ settings.apiSettings.onSuccess.call(this, response, $module, xhr);
809
+ }
810
+ },
811
+ };
873
812
  if (!$module.api('get request')) {
874
813
  module.setup.api();
875
814
  }
876
815
  apiSettings = $.extend(true, {}, apiSettings, settings.apiSettings, apiCallbacks, tempDisableApiCache ? { cache: false } : {});
877
816
  $module
878
817
  .api('setting', apiSettings)
879
- .api('query')
880
- ;
818
+ .api('query');
881
819
  tempDisableApiCache = false;
882
820
  },
883
821
 
884
822
  filterItems: function (query) {
885
- var
886
- searchTerm = module.remove.diacritics(
887
- query !== undefined
888
- ? query
889
- : module.get.query()
890
- ),
891
- results = null,
892
- escapedTerm = module.escape.string(searchTerm),
893
- regExpIgnore = settings.ignoreSearchCase ? 'i' : '',
894
- regExpFlags = regExpIgnore + 'gm',
895
- beginsWithRegExp = new RegExp('^' + escapedTerm, regExpFlags)
896
- ;
823
+ let searchTerm = module.remove.diacritics(
824
+ query !== undefined
825
+ ? query
826
+ : module.get.query()
827
+ );
828
+ let results = null;
829
+ let escapedTerm = module.escape.string(searchTerm);
830
+ let regExpIgnore = settings.ignoreSearchCase ? 'i' : '';
831
+ let regExpFlags = regExpIgnore + 'gm';
832
+ let beginsWithRegExp = new RegExp('^' + escapedTerm, regExpFlags);
897
833
  module.remove.filteredItem();
898
834
  // avoid loop if we're matching nothing
899
835
  if (module.has.query()) {
@@ -902,11 +838,9 @@
902
838
  module.verbose('Searching for matching values', searchTerm);
903
839
  $item
904
840
  .each(function () {
905
- var
906
- $choice = $(this),
907
- text,
908
- value
909
- ;
841
+ let $choice = $(this);
842
+ let text;
843
+ let value;
910
844
  if ($choice.hasClass(className.unfilterable)) {
911
845
  results.push(this);
912
846
 
@@ -934,32 +868,28 @@
934
868
  return true;
935
869
  }
936
870
  }
937
- })
938
- ;
871
+ });
939
872
  }
940
873
  module.debug('Showing only matched items', searchTerm);
941
874
  if (results) {
942
875
  $item
943
876
  .not(results)
944
- .addClass(className.filtered)
945
- ;
877
+ .addClass(className.filtered);
946
878
  if (settings.highlightMatches && (settings.match === 'both' || settings.match === 'text')) {
947
- var querySplit = query.split(''),
948
- diacriticReg = settings.ignoreDiacritics ? '[\u0300-\u036F]?' : '',
949
- htmlReg = '(?![^<]*>)',
950
- markedRegExp = new RegExp(htmlReg + '(' + querySplit.join(diacriticReg + ')(.*?)' + htmlReg + '(') + diacriticReg + ')', regExpIgnore),
951
- markedReplacer = function () {
952
- var args = [].slice.call(arguments, 1, querySplit.length * 2).map(function (x, i) {
953
- return i & 1 ? x : '<mark>' + x + '</mark>'; // eslint-disable-line no-bitwise
954
- });
879
+ let querySplit = query.split('');
880
+ let diacriticReg = settings.ignoreDiacritics ? '[\u0300-\u036F]?' : '';
881
+ let htmlReg = '(?![^<]*>)';
882
+ let markedRegExp = new RegExp(htmlReg + '(' + querySplit.join(diacriticReg + ')(.*?)' + htmlReg + '(') + diacriticReg + ')', regExpIgnore);
883
+ let markedReplacer = function () {
884
+ let args = [].slice.call(arguments, 1, querySplit.length * 2).map(function (x, i) {
885
+ return i & 1 ? x : '<mark>' + x + '</mark>'; // eslint-disable-line no-bitwise
886
+ });
955
887
 
956
- return args.join('');
957
- }
958
- ;
888
+ return args.join('');
889
+ };
959
890
  $.each(results, function (index, result) {
960
- var $result = $(result),
961
- markedHTML = module.get.choiceText($result, true)
962
- ;
891
+ let $result = $(result);
892
+ let markedHTML = module.get.choiceText($result, true);
963
893
  if (settings.ignoreDiacritics) {
964
894
  markedHTML = markedHTML.normalize('NFD');
965
895
  }
@@ -970,19 +900,17 @@
970
900
 
971
901
  if (!module.has.query()) {
972
902
  $divider
973
- .removeClass(className.hidden)
974
- ;
903
+ .removeClass(className.hidden);
975
904
  } else if (settings.hideDividers === true) {
976
905
  $divider
977
- .addClass(className.hidden)
978
- ;
906
+ .addClass(className.hidden);
979
907
  } else if (settings.hideDividers === 'empty') {
980
908
  $divider
981
909
  .removeClass(className.hidden)
982
910
  .filter(function () {
983
911
  // First find the last divider in this divider group
984
912
  // Dividers which are direct siblings are considered a group
985
- var $lastDivider = $(this).nextUntil(selector.item);
913
+ let $lastDivider = $(this).nextUntil(selector.item);
986
914
 
987
915
  return ($lastDivider.length > 0 ? $lastDivider : $(this))
988
916
  // Count all non-filtered items until the next divider (or end of the dropdown)
@@ -991,16 +919,13 @@
991
919
  // Hide divider if no items are found
992
920
  .length === 0;
993
921
  })
994
- .addClass(className.hidden)
995
- ;
922
+ .addClass(className.hidden);
996
923
  }
997
924
  },
998
925
 
999
926
  fuzzySearch: function (query, term) {
1000
- var
1001
- termLength = term.length,
1002
- queryLength = query.length
1003
- ;
927
+ let termLength = term.length;
928
+ let queryLength = query.length;
1004
929
  if (settings.ignoreSearchCase) {
1005
930
  query = query.toLowerCase();
1006
931
  term = term.toLowerCase();
@@ -1011,11 +936,9 @@
1011
936
  if (queryLength === termLength) {
1012
937
  return query === term;
1013
938
  }
1014
- for (var characterIndex = 0, nextCharacterIndex = 0; characterIndex < queryLength; characterIndex++) {
1015
- var
1016
- continueSearch = false,
1017
- queryCharacter = query.charCodeAt(characterIndex)
1018
- ;
939
+ for (let characterIndex = 0, nextCharacterIndex = 0; characterIndex < queryLength; characterIndex++) {
940
+ let continueSearch = false;
941
+ let queryCharacter = query.charCodeAt(characterIndex);
1019
942
  while (nextCharacterIndex < termLength) {
1020
943
  if (term.charCodeAt(nextCharacterIndex++) === queryCharacter) {
1021
944
  continueSearch = true;
@@ -1040,8 +963,7 @@
1040
963
  filterActive: function () {
1041
964
  if (settings.useLabels) {
1042
965
  $item.filter('.' + className.active)
1043
- .addClass(className.filtered)
1044
- ;
966
+ .addClass(className.filtered);
1045
967
  }
1046
968
  },
1047
969
 
@@ -1064,14 +986,12 @@
1064
986
  },
1065
987
 
1066
988
  forceSelection: function () {
1067
- var
1068
- $currentlySelected = $item.not(className.filtered).filter('.' + className.selected).eq(0),
1069
- $activeItem = $item.not(className.filtered).filter('.' + className.active).eq(0),
1070
- $selectedItem = $currentlySelected.length > 0
1071
- ? $currentlySelected
1072
- : $activeItem,
1073
- hasSelected = $selectedItem.length > 0
1074
- ;
989
+ let $currentlySelected = $item.not(className.filtered).filter('.' + className.selected).eq(0);
990
+ let $activeItem = $item.not(className.filtered).filter('.' + className.active).eq(0);
991
+ let $selectedItem = $currentlySelected.length > 0
992
+ ? $currentlySelected
993
+ : $activeItem;
994
+ let hasSelected = $selectedItem.length > 0;
1075
995
  if (settings.allowAdditions || (hasSelected && !module.is.multiple())) {
1076
996
  module.debug('Forcing partial selection to selected item', $selectedItem);
1077
997
  module.event.item.click.call($selectedItem, {}, true);
@@ -1086,7 +1006,7 @@
1086
1006
  module.clear();
1087
1007
  }
1088
1008
  module.debug('Creating dropdown with specified values', values);
1089
- var menuConfig = {};
1009
+ let menuConfig = {};
1090
1010
  menuConfig[fields.values] = values;
1091
1011
  module.setup.menu(menuConfig);
1092
1012
  $.each(values, function (index, item) {
@@ -1104,13 +1024,11 @@
1104
1024
  $input.html('');
1105
1025
  $input.append('<option disabled selected value></option>');
1106
1026
  $.each(values, function (index, item) {
1107
- var
1108
- value = settings.templates.escape(item[fields.value]),
1109
- name = settings.templates.escape(
1110
- item[fields.name] || '',
1111
- settings
1112
- )
1113
- ;
1027
+ let value = settings.templates.escape(item[fields.value]);
1028
+ let name = settings.templates.escape(
1029
+ item[fields.name] || '',
1030
+ settings
1031
+ );
1114
1032
  $input.append('<option value="' + value + '"' + (item.selected === true ? ' selected' : '') + '>' + name + '</option>');
1115
1033
  });
1116
1034
  module.observe.select();
@@ -1120,11 +1038,9 @@
1120
1038
 
1121
1039
  event: {
1122
1040
  paste: function (event) {
1123
- var
1124
- pasteValue = (event.originalEvent.clipboardData || window.clipboardData).getData('text'),
1125
- tokens = pasteValue.split(settings.delimiter),
1126
- notFoundTokens = []
1127
- ;
1041
+ let pasteValue = (event.originalEvent.clipboardData || window.clipboardData).getData('text');
1042
+ let tokens = pasteValue.split(settings.delimiter);
1043
+ let notFoundTokens = [];
1128
1044
  tokens.forEach(function (value) {
1129
1045
  if (module.set.selected(module.escape.htmlEntities(value.trim()), null, false, true) === false) {
1130
1046
  notFoundTokens.push(value.trim());
@@ -1132,13 +1048,12 @@
1132
1048
  });
1133
1049
  event.preventDefault();
1134
1050
  if (notFoundTokens.length > 0) {
1135
- var searchEl = $search[0],
1136
- startPos = searchEl.selectionStart,
1137
- endPos = searchEl.selectionEnd,
1138
- orgText = searchEl.value,
1139
- pasteText = notFoundTokens.join(settings.delimiter),
1140
- newEndPos = startPos + pasteText.length
1141
- ;
1051
+ let searchEl = $search[0];
1052
+ let startPos = searchEl.selectionStart;
1053
+ let endPos = searchEl.selectionEnd;
1054
+ let orgText = searchEl.value;
1055
+ let pasteText = notFoundTokens.join(settings.delimiter);
1056
+ let newEndPos = startPos + pasteText.length;
1142
1057
  $search.val(orgText.slice(0, startPos) + pasteText + orgText.slice(endPos));
1143
1058
  searchEl.selectionStart = newEndPos;
1144
1059
  searchEl.selectionEnd = newEndPos;
@@ -1182,9 +1097,7 @@
1182
1097
  }
1183
1098
  },
1184
1099
  click: function (event) {
1185
- var
1186
- $target = $(event.target)
1187
- ;
1100
+ let $target = $(event.target);
1188
1101
  // focus search
1189
1102
  if ($target.is($module)) {
1190
1103
  if (!module.is.focusedOnSearch()) {
@@ -1268,16 +1181,14 @@
1268
1181
  },
1269
1182
  label: {
1270
1183
  click: function (event) {
1271
- var
1272
- $label = $(this),
1273
- $labels = $module.find(selector.label),
1274
- $activeLabels = $labels.filter('.' + className.active),
1275
- $nextActive = $label.nextAll('.' + className.active),
1276
- $prevActive = $label.prevAll('.' + className.active),
1277
- $range = $nextActive.length > 0
1278
- ? $label.nextUntil($nextActive).add($activeLabels).add($label)
1279
- : $label.prevUntil($prevActive).add($activeLabels).add($label)
1280
- ;
1184
+ let $label = $(this);
1185
+ let $labels = $module.find(selector.label);
1186
+ let $activeLabels = $labels.filter('.' + className.active);
1187
+ let $nextActive = $label.nextAll('.' + className.active);
1188
+ let $prevActive = $label.prevAll('.' + className.active);
1189
+ let $range = $nextActive.length > 0
1190
+ ? $label.nextUntil($nextActive).add($activeLabels).add($label)
1191
+ : $label.prevUntil($prevActive).add($activeLabels).add($label);
1281
1192
  if (event.shiftKey) {
1282
1193
  $activeLabels.removeClass(className.active);
1283
1194
  $range.addClass(className.active);
@@ -1293,9 +1204,7 @@
1293
1204
  },
1294
1205
  remove: {
1295
1206
  click: function (event) {
1296
- var
1297
- $label = $(this).parent()
1298
- ;
1207
+ let $label = $(this).parent();
1299
1208
  if ($label.hasClass(className.active)) {
1300
1209
  // remove all selected labels
1301
1210
  module.remove.activeLabels();
@@ -1308,11 +1217,9 @@
1308
1217
  },
1309
1218
  test: {
1310
1219
  toggle: function (event) {
1311
- var
1312
- toggleBehavior = module.is.multiple()
1313
- ? module.show
1314
- : module.toggle
1315
- ;
1220
+ let toggleBehavior = module.is.multiple()
1221
+ ? module.show
1222
+ : module.toggle;
1316
1223
  if (module.is.bubbledLabelClick(event) || module.is.bubbledIconClick(event)) {
1317
1224
  return;
1318
1225
  }
@@ -1356,18 +1263,16 @@
1356
1263
  },
1357
1264
  menu: {
1358
1265
  mutation: function (mutations) {
1359
- var
1360
- mutation = mutations[0],
1361
- $addedNode = mutation.addedNodes
1362
- ? $(mutation.addedNodes[0])
1363
- : $(false),
1364
- $removedNode = mutation.removedNodes
1365
- ? $(mutation.removedNodes[0])
1366
- : $(false),
1367
- $changedNodes = $addedNode.add($removedNode),
1368
- isUserAddition = $changedNodes.is(selector.addition) || $changedNodes.closest(selector.addition).length > 0,
1369
- isMessage = $changedNodes.is(selector.message) || $changedNodes.closest(selector.message).length > 0
1370
- ;
1266
+ let mutation = mutations[0];
1267
+ let $addedNode = mutation.addedNodes
1268
+ ? $(mutation.addedNodes[0])
1269
+ : $(false);
1270
+ let $removedNode = mutation.removedNodes
1271
+ ? $(mutation.removedNodes[0])
1272
+ : $(false);
1273
+ let $changedNodes = $addedNode.add($removedNode);
1274
+ let isUserAddition = $changedNodes.is(selector.addition) || $changedNodes.closest(selector.addition).length > 0;
1275
+ let isMessage = $changedNodes.is(selector.message) || $changedNodes.closest(selector.message).length > 0;
1371
1276
  if (isUserAddition || isMessage) {
1372
1277
  module.debug('Updating item selector cache');
1373
1278
  module.refreshItems();
@@ -1385,14 +1290,12 @@
1385
1290
  },
1386
1291
  item: {
1387
1292
  mouseenter: function (event) {
1388
- var
1389
- $target = $(event.target),
1390
- $item = $(this),
1391
- $subMenu = $item.children(selector.menu),
1392
- $otherMenus = $item.siblings(selector.item).children(selector.menu),
1393
- hasSubMenu = $subMenu.length > 0,
1394
- isBubbledEvent = $subMenu.find($target).length > 0
1395
- ;
1293
+ let $target = $(event.target);
1294
+ let $item = $(this);
1295
+ let $subMenu = $item.children(selector.menu);
1296
+ let $otherMenus = $item.siblings(selector.item).children(selector.menu);
1297
+ let hasSubMenu = $subMenu.length > 0;
1298
+ let isBubbledEvent = $subMenu.find($target).length > 0;
1396
1299
  if (!isBubbledEvent && hasSubMenu) {
1397
1300
  clearTimeout(module.itemTimer);
1398
1301
  module.itemTimer = setTimeout(function () {
@@ -1406,9 +1309,7 @@
1406
1309
  }
1407
1310
  },
1408
1311
  mouseleave: function (event) {
1409
- var
1410
- $subMenu = $(this).find(selector.menu)
1411
- ;
1312
+ let $subMenu = $(this).find(selector.menu);
1412
1313
  if ($subMenu.length > 0) {
1413
1314
  clearTimeout(module.itemTimer);
1414
1315
  module.itemTimer = setTimeout(function () {
@@ -1420,17 +1321,15 @@
1420
1321
  }
1421
1322
  },
1422
1323
  click: function (event, skipRefocus) {
1423
- var
1424
- $choice = $(this),
1425
- $target = event
1426
- ? $(event.target || '')
1427
- : $(''),
1428
- $subMenu = $choice.find(selector.menu),
1429
- text = module.get.choiceText($choice),
1430
- value = module.get.choiceValue($choice, text),
1431
- hasSubMenu = $subMenu.length > 0,
1432
- isBubbledEvent = $subMenu.find($target).length > 0
1433
- ;
1324
+ let $choice = $(this);
1325
+ let $target = event
1326
+ ? $(event.target || '')
1327
+ : $('');
1328
+ let $subMenu = $choice.find(selector.menu);
1329
+ let text = module.get.choiceText($choice);
1330
+ let value = module.get.choiceValue($choice, text);
1331
+ let hasSubMenu = $subMenu.length > 0;
1332
+ let isBubbledEvent = $subMenu.find($target).length > 0;
1434
1333
  if (document.activeElement.tagName.toLowerCase() !== 'input') {
1435
1334
  $(document.activeElement).trigger('blur');
1436
1335
  }
@@ -1464,27 +1363,23 @@
1464
1363
  document: {
1465
1364
  // label selection should occur even when the element has no focus
1466
1365
  keydown: function (event) {
1467
- var
1468
- pressedKey = event.which,
1469
- isShortcutKey = module.is.inObject(pressedKey, keys)
1470
- ;
1366
+ let pressedKey = event.which;
1367
+ let isShortcutKey = module.is.inObject(pressedKey, keys);
1471
1368
  if (isShortcutKey) {
1472
- var
1473
- $label = $module.find(selector.label),
1474
- $activeLabel = $label.filter('.' + className.active),
1475
- activeValue = $activeLabel.data(metadata.value),
1476
- labelIndex = $label.index($activeLabel),
1477
- labelCount = $label.length,
1478
- hasActiveLabel = $activeLabel.length > 0,
1479
- hasMultipleActive = $activeLabel.length > 1,
1480
- isFirstLabel = labelIndex === 0,
1481
- isLastLabel = labelIndex + 1 === labelCount,
1482
- isSearch = module.is.searchSelection(),
1483
- isFocusedOnSearch = module.is.focusedOnSearch(),
1484
- isFocused = module.is.focused(),
1485
- caretAtStart = isFocusedOnSearch && module.get.caretPosition(false) === 0,
1486
- isSelectedSearch = caretAtStart && module.get.caretPosition(true) !== 0
1487
- ;
1369
+ let $label = $module.find(selector.label);
1370
+ let $activeLabel = $label.filter('.' + className.active);
1371
+ let activeValue = $activeLabel.data(metadata.value);
1372
+ let labelIndex = $label.index($activeLabel);
1373
+ let labelCount = $label.length;
1374
+ let hasActiveLabel = $activeLabel.length > 0;
1375
+ let hasMultipleActive = $activeLabel.length > 1;
1376
+ let isFirstLabel = labelIndex === 0;
1377
+ let isLastLabel = labelIndex + 1 === labelCount;
1378
+ let isSearch = module.is.searchSelection();
1379
+ let isFocusedOnSearch = module.is.focusedOnSearch();
1380
+ let isFocused = module.is.focused();
1381
+ let caretAtStart = isFocusedOnSearch && module.get.caretPosition(false) === 0;
1382
+ let isSelectedSearch = caretAtStart && module.get.caretPosition(true) !== 0;
1488
1383
  if (isSearch && !hasActiveLabel && !isFocusedOnSearch) {
1489
1384
  return;
1490
1385
  }
@@ -1507,8 +1402,7 @@
1507
1402
  } else {
1508
1403
  $activeLabel.prev(selector.siblingLabel)
1509
1404
  .addClass(className.active)
1510
- .end()
1511
- ;
1405
+ .end();
1512
1406
  }
1513
1407
  event.preventDefault();
1514
1408
  }
@@ -1583,31 +1477,27 @@
1583
1477
  },
1584
1478
 
1585
1479
  keydown: function (event) {
1586
- var
1587
- pressedKey = event.which,
1588
- isShortcutKey = module.is.inObject(pressedKey, keys) || event.key === settings.delimiter
1589
- ;
1480
+ let pressedKey = event.which;
1481
+ let isShortcutKey = module.is.inObject(pressedKey, keys) || event.key === settings.delimiter;
1590
1482
  if (isShortcutKey) {
1591
- var
1592
- $currentlySelected = $item.not(selector.unselectable).filter('.' + className.selected).eq(0),
1593
- $activeItem = $menu.children('.' + className.active).eq(0),
1594
- $selectedItem = $currentlySelected.length > 0
1595
- ? $currentlySelected
1596
- : $activeItem,
1597
- $visibleItems = $selectedItem.length > 0
1598
- ? $selectedItem.siblings(':not(.' + className.filtered + ')').addBack()
1599
- : $menu.children(':not(.' + className.filtered + ')'),
1600
- $subMenu = $selectedItem.children(selector.menu),
1601
- $parentMenu = $selectedItem.closest(selector.menu),
1602
- inVisibleMenu = $parentMenu.hasClass(className.visible) || $parentMenu.hasClass(className.animating) || $parentMenu.parent(selector.menu).length > 0,
1603
- hasSubMenu = $subMenu.length > 0,
1604
- hasSelectedItem = $selectedItem.length > 0,
1605
- selectedIsSelectable = $selectedItem.not(selector.unselectable).length > 0,
1606
- delimiterPressed = event.key === settings.delimiter && module.is.multiple(),
1607
- isAdditionWithoutMenu = settings.allowAdditions && (pressedKey === keys.enter || delimiterPressed),
1608
- $nextItem,
1609
- isSubMenuItem
1610
- ;
1483
+ let $currentlySelected = $item.not(selector.unselectable).filter('.' + className.selected).eq(0);
1484
+ let $activeItem = $menu.children('.' + className.active).eq(0);
1485
+ let $selectedItem = $currentlySelected.length > 0
1486
+ ? $currentlySelected
1487
+ : $activeItem;
1488
+ let $visibleItems = $selectedItem.length > 0
1489
+ ? $selectedItem.siblings(':not(.' + className.filtered + ')').addBack()
1490
+ : $menu.children(':not(.' + className.filtered + ')');
1491
+ let $subMenu = $selectedItem.children(selector.menu);
1492
+ let $parentMenu = $selectedItem.closest(selector.menu);
1493
+ let inVisibleMenu = $parentMenu.hasClass(className.visible) || $parentMenu.hasClass(className.animating) || $parentMenu.parent(selector.menu).length > 0;
1494
+ let hasSubMenu = $subMenu.length > 0;
1495
+ let hasSelectedItem = $selectedItem.length > 0;
1496
+ let selectedIsSelectable = $selectedItem.not(selector.unselectable).length > 0;
1497
+ let delimiterPressed = event.key === settings.delimiter && module.is.multiple();
1498
+ let isAdditionWithoutMenu = settings.allowAdditions && (pressedKey === keys.enter || delimiterPressed);
1499
+ let $nextItem;
1500
+ let isSubMenuItem;
1611
1501
  // allow selection with the menu closed
1612
1502
  if (isAdditionWithoutMenu) {
1613
1503
  if (selectedIsSelectable && settings.hideAdditions) {
@@ -1653,12 +1543,10 @@
1653
1543
  module.verbose('Left key pressed, closing sub-menu');
1654
1544
  module.animate.hide(false, $parentMenu);
1655
1545
  $selectedItem
1656
- .removeClass(className.selected)
1657
- ;
1546
+ .removeClass(className.selected);
1658
1547
  $parentMenu
1659
1548
  .closest(selector.item)
1660
- .addClass(className.selected)
1661
- ;
1549
+ .addClass(className.selected);
1662
1550
  event.preventDefault();
1663
1551
  }
1664
1552
  }
@@ -1669,12 +1557,10 @@
1669
1557
  module.verbose('Right key pressed, opening sub-menu');
1670
1558
  module.animate.show(false, $subMenu);
1671
1559
  $selectedItem
1672
- .removeClass(className.selected)
1673
- ;
1560
+ .removeClass(className.selected);
1674
1561
  $subMenu
1675
1562
  .find(selector.item).eq(0)
1676
- .addClass(className.selected)
1677
- ;
1563
+ .addClass(className.selected);
1678
1564
  event.preventDefault();
1679
1565
  }
1680
1566
  }
@@ -1694,11 +1580,9 @@
1694
1580
 
1695
1581
  module.verbose('Up key pressed, changing active item');
1696
1582
  $selectedItem
1697
- .removeClass(className.selected)
1698
- ;
1583
+ .removeClass(className.selected);
1699
1584
  $nextItem
1700
- .addClass(className.selected)
1701
- ;
1585
+ .addClass(className.selected);
1702
1586
  module.set.scrollPosition($nextItem);
1703
1587
  if (settings.selectOnKeydown && module.is.single() && !$nextItem.hasClass(className.actionable)) {
1704
1588
  module.set.selectedItem($nextItem);
@@ -1721,11 +1605,9 @@
1721
1605
 
1722
1606
  module.verbose('Down key pressed, changing active item');
1723
1607
  $item
1724
- .removeClass(className.selected)
1725
- ;
1608
+ .removeClass(className.selected);
1726
1609
  $nextItem
1727
- .addClass(className.selected)
1728
- ;
1610
+ .addClass(className.selected);
1729
1611
  module.set.scrollPosition($nextItem);
1730
1612
  if (settings.selectOnKeydown && module.is.single() && !$nextItem.hasClass(className.actionable)) {
1731
1613
  module.set.selectedItem($nextItem);
@@ -1773,11 +1655,9 @@
1773
1655
 
1774
1656
  trigger: {
1775
1657
  change: function () {
1776
- var
1777
- inputElement = $input[0]
1778
- ;
1658
+ let inputElement = $input[0];
1779
1659
  if (inputElement) {
1780
- var events = document.createEvent('HTMLEvents');
1660
+ let events = document.createEvent('HTMLEvents');
1781
1661
  module.verbose('Triggering native change event');
1782
1662
  events.initEvent('change', true, false);
1783
1663
  inputElement.dispatchEvent(events);
@@ -1801,11 +1681,9 @@
1801
1681
  selectActionActive = false;
1802
1682
  },
1803
1683
  eventInModule: function (event, callback) {
1804
- var
1805
- $target = $(event.target),
1806
- inDocument = $target.closest(document.documentElement).length > 0,
1807
- inModule = $target.closest($module).length > 0
1808
- ;
1684
+ let $target = $(event.target);
1685
+ let inDocument = $target.closest(document.documentElement).length > 0;
1686
+ let inModule = $target.closest($module).length > 0;
1809
1687
  callback = isFunction(callback)
1810
1688
  ? callback
1811
1689
  : function () {};
@@ -1821,13 +1699,11 @@
1821
1699
  return false;
1822
1700
  },
1823
1701
  eventOnElement: function (event, callback) {
1824
- var
1825
- $target = $(event.target),
1826
- $label = $target.closest(selector.siblingLabel),
1827
- inVisibleDOM = document.body.contains(event.target),
1828
- notOnLabel = $module.find($label).length === 0 || !(module.is.multiple() && settings.useLabels),
1829
- notInMenu = $target.closest($menu).length === 0
1830
- ;
1702
+ let $target = $(event.target);
1703
+ let $label = $target.closest(selector.siblingLabel);
1704
+ let inVisibleDOM = document.body.contains(event.target);
1705
+ let notOnLabel = $module.find($label).length === 0 || !(module.is.multiple() && settings.useLabels);
1706
+ let notInMenu = $target.closest($menu).length === 0;
1831
1707
  callback = isFunction(callback)
1832
1708
  ? callback
1833
1709
  : function () {};
@@ -1920,10 +1796,8 @@
1920
1796
  return Math.ceil($sizer.width() + 1);
1921
1797
  },
1922
1798
  selectionCount: function () {
1923
- var
1924
- values = module.get.values(),
1925
- count
1926
- ;
1799
+ let values = module.get.values();
1800
+ let count;
1927
1801
  count = module.is.multiple()
1928
1802
  ? (Array.isArray(values) ? values.length : 0)
1929
1803
  : (module.get.value() !== '' ? 1 : 0);
@@ -1936,9 +1810,7 @@
1936
1810
  : settings.transition;
1937
1811
  },
1938
1812
  userValues: function () {
1939
- var
1940
- values = module.get.values(true)
1941
- ;
1813
+ let values = module.get.values(true);
1942
1814
  if (!values) {
1943
1815
  return false;
1944
1816
  }
@@ -1956,11 +1828,9 @@
1956
1828
  });
1957
1829
  },
1958
1830
  caretPosition: function (returnEndPos) {
1959
- var
1960
- input = $search[0],
1961
- range,
1962
- rangeLength
1963
- ;
1831
+ let input = $search[0];
1832
+ let range;
1833
+ let rangeLength;
1964
1834
  if (returnEndPos && 'selectionEnd' in input) {
1965
1835
  return input.selectionEnd;
1966
1836
  }
@@ -1980,12 +1850,10 @@
1980
1850
  }
1981
1851
  },
1982
1852
  value: function () {
1983
- var
1984
- value = $input.length > 0
1985
- ? $input.val()
1986
- : $module.data(metadata.value),
1987
- isEmptyMultiselect = Array.isArray(value) && value.length === 1 && value[0] === ''
1988
- ;
1853
+ let value = $input.length > 0
1854
+ ? $input.val()
1855
+ : $module.data(metadata.value);
1856
+ let isEmptyMultiselect = Array.isArray(value) && value.length === 1 && value[0] === '';
1989
1857
 
1990
1858
  // prevents the placeholder element from being selected when multiple
1991
1859
  return value === undefined || isEmptyMultiselect
@@ -1993,9 +1861,7 @@
1993
1861
  : value;
1994
1862
  },
1995
1863
  values: function (raw) {
1996
- var
1997
- value = module.get.value()
1998
- ;
1864
+ let value = module.get.value();
1999
1865
  if (value === '') {
2000
1866
  return '';
2001
1867
  }
@@ -2009,18 +1875,14 @@
2009
1875
  : value;
2010
1876
  },
2011
1877
  remoteValues: function () {
2012
- var
2013
- values = module.get.values(),
2014
- remoteValues = false
2015
- ;
1878
+ let values = module.get.values();
1879
+ let remoteValues = false;
2016
1880
  if (values) {
2017
1881
  if (typeof values === 'string') {
2018
1882
  values = [values];
2019
1883
  }
2020
1884
  $.each(values, function (index, value) {
2021
- var
2022
- name = module.read.remoteData(value)
2023
- ;
1885
+ let name = module.read.remoteData(value);
2024
1886
  module.verbose('Restoring value from session data', name, value);
2025
1887
  if (name) {
2026
1888
  if (!remoteValues) {
@@ -2069,9 +1931,7 @@
2069
1931
  : String(choiceText));
2070
1932
  },
2071
1933
  inputEvent: function () {
2072
- var
2073
- input = $search[0]
2074
- ;
1934
+ let input = $search[0];
2075
1935
  if (input) {
2076
1936
  return input.oninput !== undefined
2077
1937
  ? 'input'
@@ -2083,26 +1943,22 @@
2083
1943
  return false;
2084
1944
  },
2085
1945
  selectValues: function () {
2086
- var
2087
- select = {},
2088
- oldGroup = [],
2089
- values = []
2090
- ;
1946
+ let select = {};
1947
+ let oldGroup = [];
1948
+ let values = [];
2091
1949
  $module
2092
1950
  .find('option')
2093
1951
  .each(function () {
2094
- var
2095
- $option = $(this),
2096
- name = $option.html(),
2097
- disabled = $option.attr('disabled'),
2098
- value = $option.attr('value') !== undefined
2099
- ? $option.attr('value')
2100
- : name,
2101
- text = $option.data(metadata.text) !== undefined
2102
- ? $option.data(metadata.text)
2103
- : name,
2104
- group = $option.parent('optgroup')
2105
- ;
1952
+ let $option = $(this);
1953
+ let name = $option.html();
1954
+ let disabled = $option.attr('disabled');
1955
+ let value = $option.attr('value') !== undefined
1956
+ ? $option.attr('value')
1957
+ : name;
1958
+ let text = $option.data(metadata.text) !== undefined
1959
+ ? $option.data(metadata.text)
1960
+ : name;
1961
+ let group = $option.parent('optgroup');
2106
1962
  if (settings.placeholder === 'auto' && value === '') {
2107
1963
  select.placeholder = name;
2108
1964
  } else {
@@ -2121,8 +1977,7 @@
2121
1977
  disabled: disabled,
2122
1978
  });
2123
1979
  }
2124
- })
2125
- ;
1980
+ });
2126
1981
  if (settings.placeholder && settings.placeholder !== 'auto') {
2127
1982
  module.debug('Setting placeholder value to', settings.placeholder);
2128
1983
  select.placeholder = settings.placeholder;
@@ -2152,20 +2007,16 @@
2152
2007
  return $item.filter('.' + className.active);
2153
2008
  },
2154
2009
  selectedItem: function () {
2155
- var
2156
- $selectedItem = $item.not(selector.unselectable).filter('.' + className.selected)
2157
- ;
2010
+ let $selectedItem = $item.not(selector.unselectable).filter('.' + className.selected);
2158
2011
 
2159
2012
  return $selectedItem.length > 0
2160
2013
  ? $selectedItem
2161
2014
  : $item.eq(0);
2162
2015
  },
2163
2016
  itemWithAdditions: function (value) {
2164
- var
2165
- $items = module.get.item(value),
2166
- $userItems = module.create.userChoice(value),
2167
- hasUserItems = $userItems && $userItems.length > 0
2168
- ;
2017
+ let $items = module.get.item(value);
2018
+ let $userItems = module.create.userChoice(value);
2019
+ let hasUserItems = $userItems && $userItems.length > 0;
2169
2020
  if (hasUserItems) {
2170
2021
  $items = $items.length > 0
2171
2022
  ? $items.add($userItems)
@@ -2175,11 +2026,9 @@
2175
2026
  return $items;
2176
2027
  },
2177
2028
  item: function (value, strict) {
2178
- var
2179
- $selectedItem = false,
2180
- shouldSearch,
2181
- isMultiple
2182
- ;
2029
+ let $selectedItem = false;
2030
+ let shouldSearch;
2031
+ let isMultiple;
2183
2032
  value = value !== undefined
2184
2033
  ? value
2185
2034
  : (module.get.values() !== undefined
@@ -2195,11 +2044,9 @@
2195
2044
  if (shouldSearch) {
2196
2045
  $item
2197
2046
  .each(function () {
2198
- var
2199
- $choice = $(this),
2200
- optionText = module.get.choiceText($choice),
2201
- optionValue = module.get.choiceValue($choice, optionText)
2202
- ;
2047
+ let $choice = $(this);
2048
+ let optionText = module.get.choiceText($choice);
2049
+ let optionValue = module.get.choiceValue($choice, optionText);
2203
2050
  // safe early exit
2204
2051
  if (optionValue === null || optionValue === undefined) {
2205
2052
  return;
@@ -2229,8 +2076,7 @@
2229
2076
  return true;
2230
2077
  }
2231
2078
  }
2232
- })
2233
- ;
2079
+ });
2234
2080
  }
2235
2081
 
2236
2082
  return $selectedItem;
@@ -2280,10 +2126,8 @@
2280
2126
  module.restore.defaultValue();
2281
2127
  },
2282
2128
  defaultText: function () {
2283
- var
2284
- defaultText = module.get.defaultText(),
2285
- placeholderText = module.get.placeholderText
2286
- ;
2129
+ let defaultText = module.get.defaultText();
2130
+ let placeholderText = module.get.placeholderText;
2287
2131
  if (defaultText === placeholderText) {
2288
2132
  module.debug('Restoring default placeholder text', defaultText);
2289
2133
  module.set.placeholderText(defaultText);
@@ -2296,9 +2140,7 @@
2296
2140
  module.set.placeholderText();
2297
2141
  },
2298
2142
  defaultValue: function () {
2299
- var
2300
- defaultValue = module.get.defaultValue()
2301
- ;
2143
+ let defaultValue = module.get.defaultValue();
2302
2144
  if (defaultValue !== undefined) {
2303
2145
  module.debug('Restoring default value', defaultValue);
2304
2146
  if (defaultValue !== '') {
@@ -2338,7 +2180,7 @@
2338
2180
  } else {
2339
2181
  module.set.selected();
2340
2182
  }
2341
- var value = module.get.value();
2183
+ let value = module.get.value();
2342
2184
  if (value && value !== '' && !(Array.isArray(value) && value.length === 0)) {
2343
2185
  $input.removeClass(className.noselection);
2344
2186
  } else {
@@ -2347,9 +2189,7 @@
2347
2189
  module.remove.initialLoad();
2348
2190
  },
2349
2191
  remoteValues: function () {
2350
- var
2351
- values = module.get.remoteValues()
2352
- ;
2192
+ let values = module.get.remoteValues();
2353
2193
  module.debug('Recreating selected from session data', values);
2354
2194
  if (values) {
2355
2195
  if (module.is.single()) {
@@ -2367,9 +2207,7 @@
2367
2207
 
2368
2208
  read: {
2369
2209
  remoteData: function (value) {
2370
- var
2371
- name
2372
- ;
2210
+ let name;
2373
2211
  if (window.Storage === undefined) {
2374
2212
  module.error(error.noStorage);
2375
2213
 
@@ -2390,23 +2228,17 @@
2390
2228
  module.save.defaultValue();
2391
2229
  },
2392
2230
  defaultValue: function () {
2393
- var
2394
- value = module.get.value()
2395
- ;
2231
+ let value = module.get.value();
2396
2232
  module.verbose('Saving default value as', value);
2397
2233
  $module.data(metadata.defaultValue, value);
2398
2234
  },
2399
2235
  defaultText: function () {
2400
- var
2401
- text = module.get.text()
2402
- ;
2236
+ let text = module.get.text();
2403
2237
  module.verbose('Saving default text as', text);
2404
2238
  $module.data(metadata.defaultText, text);
2405
2239
  },
2406
2240
  placeholderText: function () {
2407
- var
2408
- text
2409
- ;
2241
+ let text;
2410
2242
  if (settings.placeholder !== false && $text.hasClass(className.placeholder)) {
2411
2243
  text = module.get.text();
2412
2244
  module.verbose('Saving placeholder text as', text);
@@ -2446,21 +2278,19 @@
2446
2278
  },
2447
2279
 
2448
2280
  scrollPage: function (direction, $selectedItem) {
2449
- var
2450
- $currentItem = $selectedItem || module.get.selectedItem(),
2451
- $menu = $currentItem.closest(selector.menu),
2452
- menuHeight = $menu.outerHeight(),
2453
- currentScroll = $menu.scrollTop(),
2454
- itemHeight = $item.eq(0).outerHeight(),
2455
- itemsPerPage = Math.floor(menuHeight / itemHeight),
2456
- newScroll = direction === 'up'
2457
- ? currentScroll - (itemHeight * itemsPerPage)
2458
- : currentScroll + (itemHeight * itemsPerPage),
2459
- $selectableItem = $item.not(selector.unselectable),
2460
- isWithinRange,
2461
- $nextSelectedItem,
2462
- elementIndex
2463
- ;
2281
+ let $currentItem = $selectedItem || module.get.selectedItem();
2282
+ let $menu = $currentItem.closest(selector.menu);
2283
+ let menuHeight = $menu.outerHeight();
2284
+ let currentScroll = $menu.scrollTop();
2285
+ let itemHeight = $item.eq(0).outerHeight();
2286
+ let itemsPerPage = Math.floor(menuHeight / itemHeight);
2287
+ let newScroll = direction === 'up'
2288
+ ? currentScroll - (itemHeight * itemsPerPage)
2289
+ : currentScroll + (itemHeight * itemsPerPage);
2290
+ let $selectableItem = $item.not(selector.unselectable);
2291
+ let isWithinRange;
2292
+ let $nextSelectedItem;
2293
+ let elementIndex;
2464
2294
  elementIndex = direction === 'up'
2465
2295
  ? $selectableItem.index($currentItem) - itemsPerPage
2466
2296
  : $selectableItem.index($currentItem) + itemsPerPage;
@@ -2475,33 +2305,28 @@
2475
2305
  if ($nextSelectedItem.length > 0) {
2476
2306
  module.debug('Scrolling page', direction, $nextSelectedItem);
2477
2307
  $currentItem
2478
- .removeClass(className.selected)
2479
- ;
2308
+ .removeClass(className.selected);
2480
2309
  $nextSelectedItem
2481
- .addClass(className.selected)
2482
- ;
2310
+ .addClass(className.selected);
2483
2311
  if (settings.selectOnKeydown && module.is.single() && !$nextSelectedItem.hasClass(className.actionable)) {
2484
2312
  module.set.selectedItem($nextSelectedItem);
2485
2313
  }
2486
2314
  $menu
2487
- .scrollTop(newScroll)
2488
- ;
2315
+ .scrollTop(newScroll);
2489
2316
  }
2490
2317
  },
2491
2318
 
2492
2319
  set: {
2493
2320
  filtered: function () {
2494
- var
2495
- isMultiple = module.is.multiple(),
2496
- isSearch = module.is.searchSelection(),
2497
- isSearchMultiple = isMultiple && isSearch,
2498
- searchValue = isSearch
2499
- ? module.get.query()
2500
- : '',
2501
- hasSearchValue = typeof searchValue === 'string' && searchValue.length > 0,
2502
- searchWidth = module.get.searchWidth(),
2503
- valueIsSet = searchValue !== ''
2504
- ;
2321
+ let isMultiple = module.is.multiple();
2322
+ let isSearch = module.is.searchSelection();
2323
+ let isSearchMultiple = isMultiple && isSearch;
2324
+ let searchValue = isSearch
2325
+ ? module.get.query()
2326
+ : '';
2327
+ let hasSearchValue = typeof searchValue === 'string' && searchValue.length > 0;
2328
+ let searchWidth = module.get.searchWidth();
2329
+ let valueIsSet = searchValue !== '';
2505
2330
  if (isMultiple && hasSearchValue) {
2506
2331
  module.verbose('Adjusting input width', searchWidth);
2507
2332
  $search.css('width', searchWidth + 'px');
@@ -2530,21 +2355,17 @@
2530
2355
  if (module.is.searchSelection()) {
2531
2356
  module.debug('Added tabindex to searchable dropdown');
2532
2357
  $search
2533
- .val('')
2534
- ;
2358
+ .val('');
2535
2359
  module.check.disabled();
2536
2360
  $menu
2537
- .attr('tabindex', -1)
2538
- ;
2361
+ .attr('tabindex', -1);
2539
2362
  } else {
2540
2363
  module.debug('Added tabindex to dropdown');
2541
2364
  if ($module.attr('tabindex') === undefined) {
2542
2365
  $module
2543
- .attr('tabindex', $input.attr('tabindex') || 0)
2544
- ;
2366
+ .attr('tabindex', $input.attr('tabindex') || 0);
2545
2367
  $menu
2546
- .attr('tabindex', -1)
2547
- ;
2368
+ .attr('tabindex', -1);
2548
2369
  }
2549
2370
  }
2550
2371
  $input.removeAttr('tabindex');
@@ -2561,24 +2382,20 @@
2561
2382
  }
2562
2383
  },
2563
2384
  partialSearch: function (text) {
2564
- var
2565
- length = module.get.query().length
2566
- ;
2385
+ let length = module.get.query().length;
2567
2386
  $search.val(text.slice(0, length));
2568
2387
  },
2569
2388
  scrollPosition: function ($item, forceScroll) {
2570
- var
2571
- edgeTolerance = 5,
2572
- $menu,
2573
- hasActive,
2574
- offset,
2575
- itemOffset,
2576
- menuOffset,
2577
- menuScroll,
2578
- menuHeight,
2579
- abovePage,
2580
- belowPage
2581
- ;
2389
+ let edgeTolerance = 5;
2390
+ let $menu;
2391
+ let hasActive;
2392
+ let offset;
2393
+ let itemOffset;
2394
+ let menuOffset;
2395
+ let menuScroll;
2396
+ let menuHeight;
2397
+ let abovePage;
2398
+ let belowPage;
2582
2399
 
2583
2400
  $item = $item || module.get.selectedItem();
2584
2401
  $menu = $item.closest(selector.menu);
@@ -2623,8 +2440,7 @@
2623
2440
  }
2624
2441
  module.debug('Changing text', text, $text);
2625
2442
  $text
2626
- .removeClass(className.filtered)
2627
- ;
2443
+ .removeClass(className.filtered);
2628
2444
  if (settings.preserveHTML) {
2629
2445
  $text.html(text);
2630
2446
  } else {
@@ -2633,11 +2449,9 @@
2633
2449
  }
2634
2450
  },
2635
2451
  selectedItem: function ($item) {
2636
- var
2637
- value = module.get.choiceValue($item),
2638
- searchText = module.get.choiceText($item, false),
2639
- text = module.get.choiceText($item)
2640
- ;
2452
+ let value = module.get.choiceValue($item);
2453
+ let searchText = module.get.choiceText($item, false);
2454
+ let text = module.get.choiceText($item);
2641
2455
  module.debug('Setting user selection to item', $item);
2642
2456
  module.remove.activeItem();
2643
2457
  module.set.partialSearch(searchText);
@@ -2646,12 +2460,10 @@
2646
2460
  module.set.text(text);
2647
2461
  },
2648
2462
  selectedLetter: function (letter) {
2649
- var
2650
- $selectedItem = $item.filter('.' + className.selected),
2651
- alreadySelectedLetter = $selectedItem.length > 0 && module.has.firstLetter($selectedItem, letter),
2652
- $nextValue = false,
2653
- $nextItem
2654
- ;
2463
+ let $selectedItem = $item.filter('.' + className.selected);
2464
+ let alreadySelectedLetter = $selectedItem.length > 0 && module.has.firstLetter($selectedItem, letter);
2465
+ let $nextValue = false;
2466
+ let $nextItem;
2655
2467
  // check next of the same letter
2656
2468
  if (alreadySelectedLetter) {
2657
2469
  $nextItem = $selectedItem.nextAll($item).eq(0);
@@ -2668,8 +2480,7 @@
2668
2480
 
2669
2481
  return false;
2670
2482
  }
2671
- })
2672
- ;
2483
+ });
2673
2484
  }
2674
2485
  // set the next value
2675
2486
  if ($nextValue) {
@@ -2705,11 +2516,11 @@
2705
2516
  }
2706
2517
  },
2707
2518
  upward: function ($currentMenu) {
2708
- var $element = $currentMenu || $module;
2519
+ let $element = $currentMenu || $module;
2709
2520
  $element.addClass(className.upward);
2710
2521
  },
2711
2522
  leftward: function ($currentMenu) {
2712
- var $element = $currentMenu || $menu;
2523
+ let $element = $currentMenu || $menu;
2713
2524
  $element.addClass(className.leftward);
2714
2525
  },
2715
2526
  value: function (value, text, $selected, preventChangeTrigger) {
@@ -2723,14 +2534,12 @@
2723
2534
  } else {
2724
2535
  $input.addClass(className.noselection);
2725
2536
  }
2726
- var
2727
- escapedValue = module.escape.value(value),
2728
- hasInput = $input.length > 0,
2729
- currentValue = module.get.values(),
2730
- stringValue = value !== undefined
2731
- ? String(value)
2732
- : value
2733
- ;
2537
+ let escapedValue = module.escape.value(value);
2538
+ let hasInput = $input.length > 0;
2539
+ let currentValue = module.get.values();
2540
+ let stringValue = value !== undefined
2541
+ ? String(value)
2542
+ : value;
2734
2543
  if (hasInput) {
2735
2544
  if (!settings.allowReselection && stringValue == currentValue) {
2736
2545
  module.verbose('Skipping value update already same value', value, currentValue);
@@ -2746,8 +2555,7 @@
2746
2555
  module.debug('Updating input value', escapedValue, currentValue);
2747
2556
  internalChange = true;
2748
2557
  $input
2749
- .val(escapedValue)
2750
- ;
2558
+ .val(escapedValue);
2751
2559
  if (settings.fireOnInit === false && module.is.initialLoad()) {
2752
2560
  module.debug('Input native change event ignored on initial load');
2753
2561
  } else if (preventChangeTrigger !== true) {
@@ -2768,8 +2576,7 @@
2768
2576
  },
2769
2577
  active: function () {
2770
2578
  $module
2771
- .addClass(className.active)
2772
- ;
2579
+ .addClass(className.active);
2773
2580
  },
2774
2581
  multiple: function () {
2775
2582
  $module.addClass(className.multiple);
@@ -2792,9 +2599,7 @@
2792
2599
  preventChangeTrigger = $selectedItem;
2793
2600
  $selectedItem = undefined;
2794
2601
  }
2795
- var
2796
- isMultiple = module.is.multiple()
2797
- ;
2602
+ let isMultiple = module.is.multiple();
2798
2603
  $selectedItem = settings.allowAdditions
2799
2604
  ? $selectedItem || module.get.itemWithAdditions(value)
2800
2605
  : $selectedItem || module.get.item(value);
@@ -2822,17 +2627,15 @@
2822
2627
  // select each item
2823
2628
  $selectedItem
2824
2629
  .each(function () {
2825
- var
2826
- $selected = $(this),
2827
- selectedText = module.get.choiceText($selected),
2828
- selectedValue = module.get.choiceValue($selected, selectedText),
2829
-
2830
- isFiltered = $selected.hasClass(className.filtered),
2831
- isActive = $selected.hasClass(className.active),
2832
- isActionable = $selected.hasClass(className.actionable),
2833
- isUserValue = $selected.hasClass(className.addition),
2834
- shouldAnimate = isMultiple && $selectedItem && $selectedItem.length === 1
2835
- ;
2630
+ let $selected = $(this);
2631
+ let selectedText = module.get.choiceText($selected);
2632
+ let selectedValue = module.get.choiceValue($selected, selectedText);
2633
+
2634
+ let isFiltered = $selected.hasClass(className.filtered);
2635
+ let isActive = $selected.hasClass(className.active);
2636
+ let isActionable = $selected.hasClass(className.actionable);
2637
+ let isUserValue = $selected.hasClass(className.addition);
2638
+ let shouldAnimate = isMultiple && $selectedItem && $selectedItem.length === 1;
2836
2639
  if (isActionable) {
2837
2640
  if ((!isMultiple || (!isActive || isUserValue)) && settings.apiSettings && settings.saveRemoteData) {
2838
2641
  module.save.remoteData(selectedText, selectedValue);
@@ -2868,11 +2671,9 @@
2868
2671
  module.set.value(selectedValue, selectedText, $selected, preventChangeTrigger);
2869
2672
  $selected
2870
2673
  .addClass(className.active)
2871
- .addClass(className.selected)
2872
- ;
2674
+ .addClass(className.selected);
2873
2675
  }
2874
- })
2875
- ;
2676
+ });
2876
2677
  if (!keepSearchTerm) {
2877
2678
  module.remove.searchTerm();
2878
2679
  }
@@ -2885,21 +2686,18 @@
2885
2686
 
2886
2687
  add: {
2887
2688
  label: function (value, text, shouldAnimate) {
2888
- var
2889
- $next = module.is.searchSelection()
2890
- ? $search
2891
- : $text,
2892
- escapedValue = module.escape.value(value),
2893
- $label
2894
- ;
2689
+ let $next = module.is.searchSelection()
2690
+ ? $search
2691
+ : $text;
2692
+ let escapedValue = module.escape.value(value);
2693
+ let $label;
2895
2694
  if (settings.ignoreCase) {
2896
2695
  escapedValue = escapedValue.toLowerCase();
2897
2696
  }
2898
2697
  $label = $('<a />')
2899
2698
  .addClass(className.label)
2900
2699
  .attr('data-' + metadata.value, escapedValue)
2901
- .html(templates.label(escapedValue, text, settings))
2902
- ;
2700
+ .html(templates.label(escapedValue, text, settings));
2903
2701
  $label = settings.onLabelCreate.call($label, escapedValue, text);
2904
2702
 
2905
2703
  if (module.has.label(value)) {
@@ -2921,38 +2719,30 @@
2921
2719
  verbose: settings.verbose,
2922
2720
  silent: settings.silent,
2923
2721
  duration: settings.label.duration,
2924
- })
2925
- ;
2722
+ });
2926
2723
  } else {
2927
2724
  module.debug('Adding selection label', $label);
2928
2725
  $label
2929
- .insertBefore($next)
2930
- ;
2726
+ .insertBefore($next);
2931
2727
  }
2932
2728
  },
2933
2729
  message: function (message) {
2934
- var
2935
- $message = $menu.children(selector.message),
2936
- html = settings.templates.message(module.add.variables(message))
2937
- ;
2730
+ let $message = $menu.children(selector.message);
2731
+ let html = settings.templates.message(module.add.variables(message));
2938
2732
  if ($message.length > 0) {
2939
2733
  $message
2940
- .html(html)
2941
- ;
2734
+ .html(html);
2942
2735
  } else {
2943
2736
  $('<div/>')
2944
2737
  .html(html)
2945
2738
  .addClass(className.message)
2946
- .appendTo($menu)
2947
- ;
2739
+ .appendTo($menu);
2948
2740
  }
2949
2741
  },
2950
2742
  optionValue: function (value) {
2951
- var
2952
- escapedValue = module.escape.value(value),
2953
- $option = $input.find('option[value="' + module.escape.string(escapedValue) + '"]'),
2954
- hasOption = $option.length > 0
2955
- ;
2743
+ let escapedValue = module.escape.value(value);
2744
+ let $option = $input.find('option[value="' + CSS.escape(escapedValue) + '"]');
2745
+ let hasOption = $option.length > 0;
2956
2746
  if (hasOption) {
2957
2747
  return;
2958
2748
  }
@@ -2966,19 +2756,16 @@
2966
2756
  .prop('value', escapedValue)
2967
2757
  .addClass(className.addition)
2968
2758
  .text(value)
2969
- .appendTo($input)
2970
- ;
2759
+ .appendTo($input);
2971
2760
  module.verbose('Adding user addition as an <option>', value);
2972
2761
  module.observe.select();
2973
2762
  },
2974
2763
  userSuggestion: function (value) {
2975
- var
2976
- $addition = $menu.children(selector.addition),
2977
- $existingItem = module.get.item(value),
2978
- alreadyHasValue = $existingItem && $existingItem.not(selector.addition).length > 0,
2979
- hasUserSuggestion = $addition.length > 0,
2980
- html
2981
- ;
2764
+ let $addition = $menu.children(selector.addition);
2765
+ let $existingItem = module.get.item(value);
2766
+ let alreadyHasValue = $existingItem && $existingItem.not(selector.addition).length > 0;
2767
+ let hasUserSuggestion = $addition.length > 0;
2768
+ let html;
2982
2769
  if (settings.useLabels && module.has.maxSelections()) {
2983
2770
  return;
2984
2771
  }
@@ -2993,38 +2780,32 @@
2993
2780
  .data(metadata.text, value)
2994
2781
  .attr('data-' + metadata.value, value)
2995
2782
  .attr('data-' + metadata.text, value)
2996
- .removeClass(className.filtered)
2997
- ;
2783
+ .removeClass(className.filtered);
2998
2784
  if (!settings.hideAdditions) {
2999
2785
  html = settings.templates.addition(module.add.variables(message.addResult, value));
3000
2786
  $addition
3001
- .html(html)
3002
- ;
2787
+ .html(html);
3003
2788
  }
3004
2789
  module.verbose('Replacing user suggestion with new value', $addition);
3005
2790
  } else {
3006
2791
  $addition = module.create.userChoice(value);
3007
2792
  $addition
3008
- .prependTo($menu)
3009
- ;
2793
+ .prependTo($menu);
3010
2794
  module.verbose('Adding item choice to menu corresponding with user choice addition', $addition);
3011
2795
  }
3012
2796
  if (!settings.hideAdditions || module.is.allFiltered()) {
3013
2797
  $addition
3014
2798
  .addClass(className.selected)
3015
2799
  .siblings()
3016
- .removeClass(className.selected)
3017
- ;
2800
+ .removeClass(className.selected);
3018
2801
  }
3019
2802
  module.refreshItems();
3020
2803
  },
3021
2804
  variables: function (message, term) {
3022
- var
3023
- hasCount = message.search('{count}') !== -1,
3024
- hasMaxCount = message.search('{maxCount}') !== -1,
3025
- hasTerm = message.search('{term}') !== -1,
3026
- query
3027
- ;
2805
+ let hasCount = message.search('{count}') !== -1;
2806
+ let hasMaxCount = message.search('{maxCount}') !== -1;
2807
+ let hasTerm = message.search('{term}') !== -1;
2808
+ let query;
3028
2809
  module.verbose('Adding templated variables to message', message);
3029
2810
  if (hasCount) {
3030
2811
  message = message.replace('{count}', module.get.selectionCount());
@@ -3045,10 +2826,8 @@
3045
2826
  $selectedItem = undefined;
3046
2827
  addedText = undefined;
3047
2828
  }
3048
- var
3049
- currentValue = module.get.values(true),
3050
- newValue
3051
- ;
2829
+ let currentValue = module.get.values(true);
2830
+ let newValue;
3052
2831
  if (module.has.value(addedValue)) {
3053
2832
  module.debug('Value already selected');
3054
2833
 
@@ -3104,11 +2883,11 @@
3104
2883
  initialLoad = false;
3105
2884
  },
3106
2885
  upward: function ($currentMenu) {
3107
- var $element = $currentMenu || $module;
2886
+ let $element = $currentMenu || $module;
3108
2887
  $element.removeClass(className.upward);
3109
2888
  },
3110
2889
  leftward: function ($currentMenu) {
3111
- var $element = $currentMenu || $menu;
2890
+ let $element = $currentMenu || $menu;
3112
2891
  $element.removeClass(className.leftward);
3113
2892
  },
3114
2893
  visible: function () {
@@ -3120,7 +2899,7 @@
3120
2899
  filteredItem: function () {
3121
2900
  if (settings.highlightMatches) {
3122
2901
  $.each($item, function (index, item) {
3123
- var $markItem = $(item);
2902
+ let $markItem = $(item);
3124
2903
  $markItem.html($markItem.html().replace(/<\/?mark>/g, ''));
3125
2904
  });
3126
2905
  }
@@ -3138,11 +2917,9 @@
3138
2917
  module.remove.empty();
3139
2918
  },
3140
2919
  optionValue: function (value) {
3141
- var
3142
- escapedValue = module.escape.value(value),
3143
- $option = $input.find('option[value="' + module.escape.string(escapedValue) + '"]'),
3144
- hasOption = $option.length > 0
3145
- ;
2920
+ let escapedValue = module.escape.value(value);
2921
+ let $option = $input.find('option[value="' + CSS.escape(escapedValue) + '"]');
2922
+ let hasOption = $option.length > 0;
3146
2923
  if (!hasOption || !$option.hasClass(className.addition)) {
3147
2924
  return;
3148
2925
  }
@@ -3177,11 +2954,9 @@
3177
2954
 
3178
2955
  $selectedItem
3179
2956
  .each(function () {
3180
- var
3181
- $selected = $(this),
3182
- selectedText = module.get.choiceText($selected),
3183
- selectedValue = module.get.choiceValue($selected, selectedText)
3184
- ;
2957
+ let $selected = $(this);
2958
+ let selectedText = module.get.choiceText($selected);
2959
+ let selectedValue = module.get.choiceValue($selected, selectedText);
3185
2960
  if (module.is.multiple()) {
3186
2961
  if (settings.useLabels) {
3187
2962
  module.remove.value(selectedValue, selectedText, $selected, preventChangeTrigger);
@@ -3199,22 +2974,18 @@
3199
2974
  }
3200
2975
  $selected
3201
2976
  .removeClass(className.filtered)
3202
- .removeClass(className.active)
3203
- ;
2977
+ .removeClass(className.active);
3204
2978
  if (settings.useLabels) {
3205
2979
  $selected.removeClass(className.selected);
3206
2980
  }
3207
- })
3208
- ;
2981
+ });
3209
2982
  },
3210
2983
  selectedItem: function () {
3211
2984
  $item.removeClass(className.selected);
3212
2985
  },
3213
2986
  value: function (removedValue, removedText, $removedItem, preventChangeTrigger) {
3214
- var
3215
- values = module.get.values(true),
3216
- newValue
3217
- ;
2987
+ let values = module.get.values(true);
2988
+ let newValue;
3218
2989
  if (module.has.selectInput()) {
3219
2990
  module.verbose('Input is <select> removing selected option', removedValue);
3220
2991
  newValue = module.remove.arrayValue(removedValue, values);
@@ -3244,11 +3015,9 @@
3244
3015
  return values;
3245
3016
  },
3246
3017
  label: function (value, shouldAnimate) {
3247
- var
3248
- escapedValue = module.escape.value(value),
3249
- $labels = $module.find(selector.label),
3250
- $removedLabel = $labels.filter('[data-' + metadata.value + '="' + module.escape.string(settings.ignoreCase ? escapedValue.toLowerCase() : escapedValue) + '"]')
3251
- ;
3018
+ let escapedValue = module.escape.value(value);
3019
+ let $labels = $module.find(selector.label);
3020
+ let $removedLabel = $labels.filter('[data-' + metadata.value + '="' + CSS.escape(settings.ignoreCase ? escapedValue.toLowerCase() : escapedValue) + '"]');
3252
3021
  module.verbose('Removing label', $removedLabel);
3253
3022
  $removedLabel.remove();
3254
3023
  },
@@ -3262,14 +3031,12 @@
3262
3031
  module.verbose('Removing labels', $labels);
3263
3032
  $labels
3264
3033
  .each(function () {
3265
- var
3266
- $label = $(this),
3267
- value = $label.data(metadata.value),
3268
- stringValue = value !== undefined
3269
- ? String(value)
3270
- : value,
3271
- isUserValue = module.is.userValue(stringValue)
3272
- ;
3034
+ let $label = $(this);
3035
+ let value = $label.data(metadata.value);
3036
+ let stringValue = value !== undefined
3037
+ ? String(value)
3038
+ : value;
3039
+ let isUserValue = module.is.userValue(stringValue);
3273
3040
  if (settings.onLabelRemove.call($label, value) === false) {
3274
3041
  module.debug('Label remove callback cancelled removal');
3275
3042
 
@@ -3283,26 +3050,21 @@
3283
3050
  // selected will also remove label
3284
3051
  module.remove.selected(stringValue, false, preventChangeTrigger);
3285
3052
  }
3286
- })
3287
- ;
3053
+ });
3288
3054
  },
3289
3055
  tabbable: function () {
3290
3056
  if (module.is.searchSelection()) {
3291
3057
  module.debug('Searchable dropdown initialized');
3292
3058
  $search
3293
- .removeAttr('tabindex')
3294
- ;
3059
+ .removeAttr('tabindex');
3295
3060
  $menu
3296
- .removeAttr('tabindex')
3297
- ;
3061
+ .removeAttr('tabindex');
3298
3062
  } else {
3299
3063
  module.debug('Simple selection dropdown initialized');
3300
3064
  $module
3301
- .removeAttr('tabindex')
3302
- ;
3065
+ .removeAttr('tabindex');
3303
3066
  $menu
3304
- .removeAttr('tabindex')
3305
- ;
3067
+ .removeAttr('tabindex');
3306
3068
  }
3307
3069
  },
3308
3070
  diacritics: function (text) {
@@ -3339,10 +3101,8 @@
3339
3101
  return true;
3340
3102
  },
3341
3103
  firstLetter: function ($item, letter) {
3342
- var
3343
- text,
3344
- firstLetter
3345
- ;
3104
+ let text;
3105
+ let firstLetter;
3346
3106
  if (!$item || $item.length === 0 || typeof letter !== 'string') {
3347
3107
  return false;
3348
3108
  }
@@ -3368,23 +3128,19 @@
3368
3128
  return $menu.children(selector.message).length > 0;
3369
3129
  },
3370
3130
  label: function (value) {
3371
- var
3372
- escapedValue = module.escape.value(value),
3373
- $labels = $module.find(selector.label)
3374
- ;
3131
+ let escapedValue = module.escape.value(value);
3132
+ let $labels = $module.find(selector.label);
3375
3133
  if (settings.ignoreCase) {
3376
3134
  escapedValue = escapedValue.toLowerCase();
3377
3135
  }
3378
3136
 
3379
- return $labels.filter('[data-' + metadata.value + '="' + module.escape.string(escapedValue) + '"]').length > 0;
3137
+ return $labels.filter('[data-' + metadata.value + '="' + CSS.escape(escapedValue) + '"]').length > 0;
3380
3138
  },
3381
3139
  maxSelections: function () {
3382
3140
  return settings.maxSelections && module.get.selectionCount() >= settings.maxSelections;
3383
3141
  },
3384
3142
  allResultsFiltered: function () {
3385
- var
3386
- $normalResults = $item.not(selector.addition)
3387
- ;
3143
+ let $normalResults = $item.not(selector.addition);
3388
3144
 
3389
3145
  return $normalResults.filter(selector.unselectable).length === $normalResults.length;
3390
3146
  },
@@ -3400,20 +3156,16 @@
3400
3156
  : module.has.valueMatchingCase(value);
3401
3157
  },
3402
3158
  valueMatchingCase: function (value) {
3403
- var
3404
- values = module.get.values(true),
3405
- hasValue = Array.isArray(values)
3406
- ? values && ($.inArray(value, values) !== -1)
3407
- : values == value
3408
- ;
3159
+ let values = module.get.values(true);
3160
+ let hasValue = Array.isArray(values)
3161
+ ? values && ($.inArray(value, values) !== -1)
3162
+ : values == value;
3409
3163
 
3410
3164
  return !!hasValue;
3411
3165
  },
3412
3166
  valueIgnoringCase: function (value) {
3413
- var
3414
- values = module.get.values(true),
3415
- hasValue = false
3416
- ;
3167
+ let values = module.get.values(true);
3168
+ let hasValue = false;
3417
3169
  if (!Array.isArray(values)) {
3418
3170
  values = [values];
3419
3171
  }
@@ -3460,12 +3212,12 @@
3460
3212
  : $menu.transition && $menu.transition('is animating');
3461
3213
  },
3462
3214
  leftward: function ($subMenu) {
3463
- var $selectedMenu = $subMenu || $menu;
3215
+ let $selectedMenu = $subMenu || $menu;
3464
3216
 
3465
3217
  return $selectedMenu.hasClass(className.leftward);
3466
3218
  },
3467
3219
  clearable: function () {
3468
- var hasClearableClass = $module.hasClass(className.clearable);
3220
+ let hasClearableClass = $module.hasClass(className.clearable);
3469
3221
  if (!hasClearableClass && settings.clearable) {
3470
3222
  $module.addClass(className.clearable);
3471
3223
  }
@@ -3491,9 +3243,7 @@
3491
3243
  return initialLoad;
3492
3244
  },
3493
3245
  inObject: function (needle, object) {
3494
- var
3495
- found = false
3496
- ;
3246
+ let found = false;
3497
3247
  $.each(object, function (index, property) {
3498
3248
  if (property == needle) {
3499
3249
  found = true;
@@ -3517,9 +3267,7 @@
3517
3267
  return !module.is.multiple();
3518
3268
  },
3519
3269
  selectMutation: function (mutations) {
3520
- var
3521
- selectChanged = false
3522
- ;
3270
+ let selectChanged = false;
3523
3271
  $.each(mutations, function (index, mutation) {
3524
3272
  if ($(mutation.target).is('option, optgroup') || $(mutation.addedNodes).is('select') || ($(mutation.target).is('select') && mutation.type !== 'attributes')) {
3525
3273
  selectChanged = true;
@@ -3543,7 +3291,7 @@
3543
3291
  return $.inArray(value, module.get.userValues()) !== -1;
3544
3292
  },
3545
3293
  upward: function ($menu) {
3546
- var $element = $menu || $module;
3294
+ let $element = $menu || $module;
3547
3295
 
3548
3296
  return $element.hasClass(className.upward);
3549
3297
  },
@@ -3553,20 +3301,16 @@
3553
3301
  : $menu.hasClass(className.visible);
3554
3302
  },
3555
3303
  verticallyScrollableContext: function () {
3556
- var
3557
- overflowY = $context[0] !== window
3558
- ? $context.css('overflow-y')
3559
- : false
3560
- ;
3304
+ let overflowY = $context[0] !== window
3305
+ ? $context.css('overflow-y')
3306
+ : false;
3561
3307
 
3562
3308
  return overflowY === 'auto' || overflowY === 'scroll';
3563
3309
  },
3564
3310
  horizontallyScrollableContext: function () {
3565
- var
3566
- overflowX = $context[0] !== window
3567
- ? $context.css('overflow-X')
3568
- : false
3569
- ;
3311
+ let overflowX = $context[0] !== window
3312
+ ? $context.css('overflow-X')
3313
+ : false;
3570
3314
 
3571
3315
  return overflowX === 'auto' || overflowX === 'scroll';
3572
3316
  },
@@ -3581,15 +3325,12 @@
3581
3325
  );
3582
3326
  },
3583
3327
  openDownward: function ($subMenu) {
3584
- var
3585
- $currentMenu = $subMenu || $menu,
3586
- canOpenDownward,
3587
- onScreen,
3588
- calculations
3589
- ;
3328
+ let $currentMenu = $subMenu || $menu;
3329
+ let canOpenDownward;
3330
+ let onScreen;
3331
+ let calculations;
3590
3332
  $currentMenu
3591
- .addClass(className.loading)
3592
- ;
3333
+ .addClass(className.loading);
3593
3334
  calculations = {
3594
3335
  context: {
3595
3336
  offset: $context[0] === window
@@ -3628,15 +3369,12 @@
3628
3369
  return canOpenDownward;
3629
3370
  },
3630
3371
  openRightward: function ($subMenu) {
3631
- var
3632
- $currentMenu = $subMenu || $menu,
3633
- canOpenRightward = true,
3634
- isOffscreenRight = false,
3635
- calculations
3636
- ;
3372
+ let $currentMenu = $subMenu || $menu;
3373
+ let canOpenRightward = true;
3374
+ let isOffscreenRight = false;
3375
+ let calculations;
3637
3376
  $currentMenu
3638
- .addClass(className.loading)
3639
- ;
3377
+ .addClass(className.loading);
3640
3378
  calculations = {
3641
3379
  context: {
3642
3380
  offset: $context[0] === window
@@ -3683,17 +3421,15 @@
3683
3421
 
3684
3422
  animate: {
3685
3423
  show: function (callback, $subMenu) {
3686
- var
3687
- $currentMenu = $subMenu || $menu,
3688
- start = $subMenu
3689
- ? function () {}
3690
- : function () {
3691
- module.hideSubMenus();
3692
- module.hideOthers();
3693
- module.set.active();
3694
- },
3695
- transition
3696
- ;
3424
+ let $currentMenu = $subMenu || $menu;
3425
+ let start = $subMenu
3426
+ ? function () {}
3427
+ : function () {
3428
+ module.hideSubMenus();
3429
+ module.hideOthers();
3430
+ module.set.active();
3431
+ };
3432
+ let transition;
3697
3433
  callback = isFunction(callback)
3698
3434
  ? callback
3699
3435
  : function () {};
@@ -3724,22 +3460,19 @@
3724
3460
  onComplete: function () {
3725
3461
  callback.call(element);
3726
3462
  },
3727
- })
3728
- ;
3463
+ });
3729
3464
  }
3730
3465
  }
3731
3466
  },
3732
3467
  hide: function (callback, $subMenu) {
3733
- var
3734
- $currentMenu = $subMenu || $menu,
3735
- start = $subMenu
3736
- ? function () {}
3737
- : function () {
3738
- module.unbind.intent();
3739
- module.remove.active();
3740
- },
3741
- transition = settings.transition.hideMethod || module.get.transition($subMenu)
3742
- ;
3468
+ let $currentMenu = $subMenu || $menu;
3469
+ let start = $subMenu
3470
+ ? function () {}
3471
+ : function () {
3472
+ module.unbind.intent();
3473
+ module.remove.active();
3474
+ };
3475
+ let transition = settings.transition.hideMethod || module.get.transition($subMenu);
3743
3476
  callback = isFunction(callback)
3744
3477
  ? callback
3745
3478
  : function () {};
@@ -3766,8 +3499,7 @@
3766
3499
  onComplete: function () {
3767
3500
  callback.call(element);
3768
3501
  },
3769
- })
3770
- ;
3502
+ });
3771
3503
  } else {
3772
3504
  module.error(error.transition);
3773
3505
  }
@@ -3808,13 +3540,11 @@
3808
3540
 
3809
3541
  escape: {
3810
3542
  value: function (value) {
3811
- var
3812
- multipleValues = Array.isArray(value),
3813
- stringValue = typeof value === 'string',
3814
- isUnparsable = !stringValue && !multipleValues,
3815
- hasQuotes = stringValue && value.search(regExp.quote) !== -1,
3816
- values = []
3817
- ;
3543
+ let multipleValues = Array.isArray(value);
3544
+ let stringValue = typeof value === 'string';
3545
+ let isUnparsable = !stringValue && !multipleValues;
3546
+ let hasQuotes = stringValue && value.search(regExp.quote) !== -1;
3547
+ let values = [];
3818
3548
  if (isUnparsable || !hasQuotes) {
3819
3549
  return value;
3820
3550
  }
@@ -3903,11 +3633,9 @@
3903
3633
  },
3904
3634
  performance: {
3905
3635
  log: function (message) {
3906
- var
3907
- currentTime,
3908
- executionTime,
3909
- previousTime
3910
- ;
3636
+ let currentTime;
3637
+ let executionTime;
3638
+ let previousTime;
3911
3639
  if (settings.performance) {
3912
3640
  currentTime = Date.now();
3913
3641
  previousTime = time || currentTime;
@@ -3926,10 +3654,8 @@
3926
3654
  }, 500);
3927
3655
  },
3928
3656
  display: function () {
3929
- var
3930
- title = settings.name + ':',
3931
- totalTime = 0
3932
- ;
3657
+ let title = settings.name + ':';
3658
+ let totalTime = 0;
3933
3659
  time = false;
3934
3660
  clearTimeout(module.performance.timer);
3935
3661
  $.each(performance, function (index, data) {
@@ -3951,22 +3677,19 @@
3951
3677
  },
3952
3678
  },
3953
3679
  invoke: function (query, passedArguments, context) {
3954
- var
3955
- object = instance,
3956
- maxDepth,
3957
- found,
3958
- response
3959
- ;
3680
+ let object = instance;
3681
+ let maxDepth;
3682
+ let found;
3683
+ let response;
3960
3684
  passedArguments = passedArguments || queryArguments;
3961
3685
  context = context || element;
3962
3686
  if (typeof query === 'string' && object !== undefined) {
3963
3687
  query = query.split(/[ .]/);
3964
3688
  maxDepth = query.length - 1;
3965
3689
  $.each(query, function (depth, value) {
3966
- var camelCaseValue = depth !== maxDepth
3690
+ let camelCaseValue = depth !== maxDepth
3967
3691
  ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
3968
- : query
3969
- ;
3692
+ : query;
3970
3693
  if ($.isPlainObject(object[camelCaseValue]) && (depth !== maxDepth)) {
3971
3694
  object = object[camelCaseValue];
3972
3695
  } else if (object[camelCaseValue] !== undefined) {
@@ -4272,12 +3995,10 @@
4272
3995
  },
4273
3996
  // generates dropdown from select values
4274
3997
  dropdown: function (select, settings) {
4275
- var
4276
- placeholder = select.placeholder || false,
4277
- html = '',
4278
- className = settings.className,
4279
- escape = settings.templates.escape
4280
- ;
3998
+ let placeholder = select.placeholder || false;
3999
+ let html = '';
4000
+ let className = settings.className;
4001
+ let escape = settings.templates.escape;
4281
4002
  html += '<i class="dropdown icon"></i>';
4282
4003
  html += placeholder
4283
4004
  ? '<div class="default text">' + escape(placeholder, settings) + '</div>'
@@ -4291,24 +4012,19 @@
4291
4012
 
4292
4013
  // generates just menu from select
4293
4014
  menu: function (response, settings) {
4294
- var
4295
- fields = settings.fields,
4296
- values = response[fields.values] || [],
4297
- html = '',
4298
- className = settings.className,
4299
- escape = settings.templates.escape
4300
- ;
4015
+ let fields = settings.fields;
4016
+ let values = response[fields.values] || [];
4017
+ let html = '';
4018
+ let className = settings.className;
4019
+ let escape = settings.templates.escape;
4301
4020
  $.each(values, function (index, option) {
4302
- var
4303
- itemType = option[fields.type] || 'item',
4304
- isMenu = itemType.indexOf('menu') !== -1,
4305
- maybeData = '',
4306
- dataObject = option[fields.data]
4307
- ;
4021
+ let itemType = option[fields.type] || 'item';
4022
+ let isMenu = itemType.indexOf('menu') !== -1;
4023
+ let maybeData = '';
4024
+ let dataObject = option[fields.data];
4308
4025
  if (dataObject) {
4309
- var dataKey,
4310
- dataKeyEscaped
4311
- ;
4026
+ let dataKey;
4027
+ let dataKeyEscaped;
4312
4028
  for (dataKey in dataObject) {
4313
4029
  dataKeyEscaped = String(dataKey).replace(/\W/g, '');
4314
4030
  if (Object.prototype.hasOwnProperty.call(dataObject, dataKey) && ['text', 'value'].indexOf(dataKeyEscaped.toLowerCase()) === -1) {
@@ -4317,21 +4033,19 @@
4317
4033
  }
4318
4034
  }
4319
4035
  if (itemType === 'item' || isMenu) {
4320
- var
4321
- maybeText = option[fields.text]
4322
- ? ' data-text="' + escape(option[fields.text]) + '"'
4323
- : '',
4324
- maybeActionable = option[fields.actionable]
4325
- ? className.actionable + ' '
4326
- : '',
4327
- maybeDisabled = option[fields.disabled]
4328
- ? className.disabled + ' '
4329
- : '',
4330
- maybeDescriptionVertical = option[fields.descriptionVertical]
4331
- ? className.descriptionVertical + ' '
4332
- : '',
4333
- hasDescription = escape(option[fields.description] || '', settings) !== ''
4334
- ;
4036
+ let maybeText = option[fields.text]
4037
+ ? ' data-text="' + escape(option[fields.text]) + '"'
4038
+ : '';
4039
+ let maybeActionable = option[fields.actionable]
4040
+ ? className.actionable + ' '
4041
+ : '';
4042
+ let maybeDisabled = option[fields.disabled]
4043
+ ? className.disabled + ' '
4044
+ : '';
4045
+ let maybeDescriptionVertical = option[fields.descriptionVertical]
4046
+ ? className.descriptionVertical + ' '
4047
+ : '';
4048
+ let hasDescription = escape(option[fields.description] || '', settings) !== '';
4335
4049
  html += '<div class="' + escape(maybeActionable + maybeDisabled + maybeDescriptionVertical + (option[fields.class] || className.item)) + '" data-value="' + escape(option[fields.value]) + '"' + maybeText + maybeData + '>';
4336
4050
  if (isMenu) {
4337
4051
  html += '<i class="' + (itemType.indexOf('left') !== -1 ? 'left' : '') + ' dropdown icon"></i>';
@@ -4360,10 +4074,8 @@
4360
4074
  }
4361
4075
  html += '</div>';
4362
4076
  } else if (itemType === 'header') {
4363
- var
4364
- groupName = option[fields.name] || '',
4365
- groupIcon = option[fields.icon] || className.groupIcon
4366
- ;
4077
+ let groupName = option[fields.name] || '';
4078
+ let groupIcon = option[fields.icon] || className.groupIcon;
4367
4079
  if (groupName !== '' || groupIcon !== '') {
4368
4080
  html += '<div class="' + escape(option[fields.class] || className.header) + '">';
4369
4081
  if (groupIcon !== '') {
@@ -4383,10 +4095,8 @@
4383
4095
 
4384
4096
  // generates label for multiselect
4385
4097
  label: function (value, text, settings) {
4386
- var
4387
- className = settings.className,
4388
- escape = settings.templates.escape
4389
- ;
4098
+ let className = settings.className;
4099
+ let escape = settings.templates.escape;
4390
4100
 
4391
4101
  return escape(text, settings) + '<i class="' + escape(className.delete) + ' icon"></i>';
4392
4102
  },