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.
- package/.eslintrc.js +0 -10
- package/README.md +4 -5
- package/changelog-setup.js +64 -70
- package/dist/components/accordion.css +1 -1
- package/dist/components/accordion.js +94 -131
- package/dist/components/accordion.min.css +1 -1
- package/dist/components/accordion.min.js +2 -2
- package/dist/components/ad.css +1 -1
- package/dist/components/ad.min.css +1 -1
- package/dist/components/api.js +152 -205
- package/dist/components/api.min.js +2 -2
- package/dist/components/breadcrumb.css +1 -1
- package/dist/components/breadcrumb.min.css +1 -1
- package/dist/components/button.css +1 -1
- package/dist/components/button.min.css +1 -1
- package/dist/components/calendar.css +1 -1
- package/dist/components/calendar.js +305 -341
- package/dist/components/calendar.min.css +1 -1
- package/dist/components/calendar.min.js +2 -2
- package/dist/components/card.css +1 -1
- package/dist/components/card.min.css +1 -1
- package/dist/components/checkbox.css +1 -1
- package/dist/components/checkbox.js +76 -116
- package/dist/components/checkbox.min.css +1 -1
- package/dist/components/checkbox.min.js +2 -2
- package/dist/components/comment.css +1 -1
- package/dist/components/comment.min.css +1 -1
- package/dist/components/container.css +1 -1
- package/dist/components/container.min.css +1 -1
- package/dist/components/dimmer.css +1 -1
- package/dist/components/dimmer.js +58 -91
- package/dist/components/dimmer.min.css +1 -1
- package/dist/components/dimmer.min.js +2 -2
- package/dist/components/divider.css +1 -1
- package/dist/components/divider.min.css +1 -1
- package/dist/components/dropdown.css +1 -1
- package/dist/components/dropdown.js +651 -941
- package/dist/components/dropdown.min.css +1 -1
- package/dist/components/dropdown.min.js +2 -2
- package/dist/components/embed.css +1 -1
- package/dist/components/embed.js +70 -108
- package/dist/components/embed.min.css +1 -1
- package/dist/components/embed.min.js +2 -2
- package/dist/components/emoji.css +1 -1
- package/dist/components/emoji.min.css +1 -1
- package/dist/components/feed.css +1 -1
- package/dist/components/feed.min.css +1 -1
- package/dist/components/flag.css +1 -1
- package/dist/components/flag.min.css +1 -1
- package/dist/components/flyout.css +1 -1
- package/dist/components/flyout.js +182 -256
- package/dist/components/flyout.min.css +1 -1
- package/dist/components/flyout.min.js +2 -2
- package/dist/components/form.css +1 -1
- package/dist/components/form.js +325 -429
- package/dist/components/form.min.css +1 -1
- package/dist/components/form.min.js +2 -2
- package/dist/components/grid.css +1 -1
- package/dist/components/grid.min.css +1 -1
- package/dist/components/header.css +1 -1
- package/dist/components/header.min.css +1 -1
- package/dist/components/icon.css +1 -1
- package/dist/components/icon.min.css +1 -1
- package/dist/components/image.css +1 -1
- package/dist/components/image.min.css +1 -1
- package/dist/components/input.css +1 -1
- package/dist/components/input.min.css +1 -1
- package/dist/components/item.css +1 -1
- package/dist/components/item.min.css +1 -1
- package/dist/components/label.css +1 -1
- package/dist/components/label.min.css +1 -1
- package/dist/components/list.css +1 -1
- package/dist/components/list.min.css +1 -1
- package/dist/components/loader.css +1 -1
- package/dist/components/loader.min.css +1 -1
- package/dist/components/menu.css +1 -1
- package/dist/components/menu.min.css +1 -1
- package/dist/components/message.css +1 -1
- package/dist/components/message.min.css +1 -1
- package/dist/components/modal.css +1 -1
- package/dist/components/modal.js +211 -295
- package/dist/components/modal.min.css +1 -1
- package/dist/components/modal.min.js +2 -2
- package/dist/components/nag.css +1 -1
- package/dist/components/nag.js +67 -97
- package/dist/components/nag.min.css +1 -1
- package/dist/components/nag.min.js +2 -2
- package/dist/components/placeholder.css +1 -1
- package/dist/components/placeholder.min.css +1 -1
- package/dist/components/popup.css +1 -1
- package/dist/components/popup.js +175 -235
- package/dist/components/popup.min.css +1 -1
- package/dist/components/popup.min.js +2 -2
- package/dist/components/progress.css +1 -1
- package/dist/components/progress.js +103 -138
- package/dist/components/progress.min.css +1 -1
- package/dist/components/progress.min.js +2 -2
- package/dist/components/rail.css +1 -1
- package/dist/components/rail.min.css +1 -1
- package/dist/components/rating.css +1 -1
- package/dist/components/rating.js +79 -120
- package/dist/components/rating.min.css +1 -1
- package/dist/components/rating.min.js +2 -2
- package/dist/components/reset.css +1 -1
- package/dist/components/reset.min.css +1 -1
- package/dist/components/reveal.css +1 -1
- package/dist/components/reveal.min.css +1 -1
- package/dist/components/search.css +1 -1
- package/dist/components/search.js +239 -333
- package/dist/components/search.min.css +1 -1
- package/dist/components/search.min.js +2 -2
- package/dist/components/segment.css +1 -1
- package/dist/components/segment.min.css +1 -1
- package/dist/components/shape.css +1 -1
- package/dist/components/shape.js +157 -223
- package/dist/components/shape.min.css +1 -1
- package/dist/components/shape.min.js +2 -2
- package/dist/components/sidebar.css +1 -1
- package/dist/components/sidebar.js +122 -163
- package/dist/components/sidebar.min.css +1 -1
- package/dist/components/sidebar.min.js +2 -2
- package/dist/components/site.css +1 -1
- package/dist/components/site.js +38 -57
- package/dist/components/site.min.css +1 -1
- package/dist/components/site.min.js +2 -2
- package/dist/components/slider.css +1 -1
- package/dist/components/slider.js +242 -325
- package/dist/components/slider.min.css +1 -1
- package/dist/components/slider.min.js +2 -2
- package/dist/components/state.js +68 -98
- package/dist/components/state.min.js +2 -2
- package/dist/components/statistic.css +1 -1
- package/dist/components/statistic.min.css +1 -1
- package/dist/components/step.css +1 -1
- package/dist/components/step.min.css +1 -1
- package/dist/components/sticky.css +1 -1
- package/dist/components/sticky.js +116 -159
- package/dist/components/sticky.min.css +1 -1
- package/dist/components/sticky.min.js +2 -2
- package/dist/components/tab.css +1 -1
- package/dist/components/tab.js +168 -233
- package/dist/components/tab.min.css +1 -1
- package/dist/components/tab.min.js +2 -2
- package/dist/components/table.css +1 -1
- package/dist/components/table.min.css +1 -1
- package/dist/components/text.css +1 -1
- package/dist/components/text.min.css +1 -1
- package/dist/components/toast.css +1 -1
- package/dist/components/toast.js +89 -114
- package/dist/components/toast.min.css +1 -1
- package/dist/components/toast.min.js +2 -2
- package/dist/components/transition.css +1 -1
- package/dist/components/transition.js +86 -141
- package/dist/components/transition.min.css +1 -1
- package/dist/components/transition.min.js +2 -2
- package/dist/components/visibility.js +134 -210
- package/dist/components/visibility.min.js +2 -2
- package/dist/semantic.css +53 -53
- package/dist/semantic.js +4006 -5558
- package/dist/semantic.min.css +1 -1
- package/dist/semantic.min.js +2 -2
- package/examples/assets/show-examples.js +2 -4
- package/gulpfile.js +5 -7
- package/package.json +1 -1
- package/scripts/nightly-version.js +7 -10
- package/src/definitions/behaviors/api.js +151 -204
- package/src/definitions/behaviors/form.js +324 -428
- package/src/definitions/behaviors/state.js +67 -97
- package/src/definitions/behaviors/visibility.js +133 -209
- package/src/definitions/globals/site.js +37 -56
- package/src/definitions/modules/accordion.js +93 -130
- package/src/definitions/modules/calendar.js +304 -340
- package/src/definitions/modules/checkbox.js +75 -115
- package/src/definitions/modules/dimmer.js +57 -90
- package/src/definitions/modules/dropdown.js +650 -940
- package/src/definitions/modules/embed.js +69 -107
- package/src/definitions/modules/flyout.js +181 -255
- package/src/definitions/modules/modal.js +210 -294
- package/src/definitions/modules/nag.js +66 -96
- package/src/definitions/modules/popup.js +174 -234
- package/src/definitions/modules/progress.js +102 -137
- package/src/definitions/modules/rating.js +78 -119
- package/src/definitions/modules/search.js +238 -332
- package/src/definitions/modules/shape.js +156 -222
- package/src/definitions/modules/sidebar.js +121 -162
- package/src/definitions/modules/slider.js +241 -324
- package/src/definitions/modules/sticky.js +115 -158
- package/src/definitions/modules/tab.js +167 -232
- package/src/definitions/modules/toast.js +88 -113
- package/src/definitions/modules/transition.js +85 -140
- package/tasks/admin/components/create.js +88 -108
- package/tasks/admin/components/init.js +26 -32
- package/tasks/admin/components/update.js +46 -53
- package/tasks/admin/distributions/create.js +71 -101
- package/tasks/admin/distributions/init.js +27 -33
- package/tasks/admin/distributions/update.js +45 -52
- package/tasks/admin/register.js +11 -15
- package/tasks/build/assets.js +14 -18
- package/tasks/build/css.js +54 -63
- package/tasks/build/javascript.js +45 -53
- package/tasks/build.js +4 -6
- package/tasks/check-install.js +5 -7
- package/tasks/clean.js +2 -4
- package/tasks/collections/admin.js +13 -15
- package/tasks/collections/build.js +6 -8
- package/tasks/collections/docs.js +2 -4
- package/tasks/collections/install.js +2 -4
- package/tasks/collections/rtl.js +2 -4
- package/tasks/collections/various.js +2 -4
- package/tasks/config/admin/github.js +7 -9
- package/tasks/config/admin/templates/css-package.js +1 -3
- package/tasks/config/admin/templates/less-package.js +1 -3
- package/tasks/config/npm/gulpfile.js +4 -6
- package/tasks/config/project/config.js +22 -30
- package/tasks/config/project/install.js +56 -70
- package/tasks/config/project/release.js +6 -8
- package/tasks/config/tasks.js +8 -12
- package/tasks/config/user.js +13 -17
- package/tasks/docs/build.js +26 -31
- package/tasks/docs/metadata.js +24 -30
- package/tasks/docs/serve.js +20 -26
- package/tasks/install.js +71 -98
- package/tasks/rtl/build.js +2 -4
- package/tasks/rtl/watch.js +2 -4
- package/tasks/watch.js +9 -11
- package/test/meteor/fonts.js +1 -2
- package/test/modules/module.spec.js +16 -18
@@ -1,5 +1,5 @@
|
|
1
1
|
/*!
|
2
|
-
* # Fomantic-UI 2.10.0-beta.
|
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
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
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
|
-
|
45
|
-
|
46
|
-
|
47
|
-
;
|
43
|
+
return $context;
|
44
|
+
};
|
45
|
+
let returnedValue;
|
48
46
|
|
49
47
|
$allModules.each(function (elementIndex) {
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
$divider
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
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
|
-
|
234
|
-
|
235
|
-
|
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
|
-
|
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
|
-
|
321
|
-
|
322
|
-
|
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
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
459
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
738
|
-
|
739
|
-
|
740
|
-
|
741
|
-
|
742
|
-
|
743
|
-
|
744
|
-
|
745
|
-
|
746
|
-
|
747
|
-
|
748
|
-
if (
|
749
|
-
if (settings.
|
750
|
-
if (settings.
|
751
|
-
|
752
|
-
|
753
|
-
|
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,
|
762
|
-
module.
|
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.
|
767
|
-
module.
|
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
|
-
|
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
|
-
|
816
|
-
|
817
|
-
|
818
|
-
|
819
|
-
|
820
|
-
|
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
|
-
|
825
|
-
|
826
|
-
|
827
|
-
|
828
|
-
|
829
|
-
|
830
|
-
|
831
|
-
|
832
|
-
|
833
|
-
}
|
834
|
-
|
835
|
-
|
836
|
-
|
837
|
-
|
838
|
-
|
839
|
-
|
840
|
-
|
841
|
-
|
842
|
-
}
|
843
|
-
|
844
|
-
|
845
|
-
|
846
|
-
|
847
|
-
|
848
|
-
|
849
|
-
|
850
|
-
|
851
|
-
|
852
|
-
|
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
|
-
|
856
|
-
|
857
|
-
|
858
|
-
|
859
|
-
|
860
|
-
|
861
|
-
|
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
|
-
|
886
|
-
|
887
|
-
query
|
888
|
-
|
889
|
-
|
890
|
-
|
891
|
-
|
892
|
-
|
893
|
-
|
894
|
-
|
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
|
-
|
906
|
-
|
907
|
-
|
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
|
-
|
948
|
-
|
949
|
-
|
950
|
-
|
951
|
-
|
952
|
-
|
953
|
-
|
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
|
-
|
957
|
-
|
958
|
-
;
|
888
|
+
return args.join('');
|
889
|
+
};
|
959
890
|
$.each(results, function (index, result) {
|
960
|
-
|
961
|
-
|
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
|
-
|
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
|
-
|
1001
|
-
|
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 (
|
1015
|
-
|
1016
|
-
|
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
|
-
|
1068
|
-
|
1069
|
-
|
1070
|
-
|
1071
|
-
|
1072
|
-
|
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
|
-
|
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
|
-
|
1108
|
-
|
1109
|
-
name
|
1110
|
-
|
1111
|
-
|
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
|
-
|
1124
|
-
|
1125
|
-
|
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
|
-
|
1136
|
-
|
1137
|
-
|
1138
|
-
|
1139
|
-
|
1140
|
-
|
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
|
-
|
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
|
-
|
1272
|
-
|
1273
|
-
|
1274
|
-
|
1275
|
-
|
1276
|
-
|
1277
|
-
|
1278
|
-
|
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
|
-
|
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
|
-
|
1312
|
-
|
1313
|
-
|
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
|
-
|
1360
|
-
|
1361
|
-
$
|
1362
|
-
|
1363
|
-
|
1364
|
-
$
|
1365
|
-
|
1366
|
-
|
1367
|
-
|
1368
|
-
|
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
|
-
|
1389
|
-
|
1390
|
-
|
1391
|
-
|
1392
|
-
|
1393
|
-
|
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
|
-
|
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
|
-
|
1424
|
-
|
1425
|
-
$target
|
1426
|
-
|
1427
|
-
|
1428
|
-
|
1429
|
-
|
1430
|
-
|
1431
|
-
|
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
|
-
|
1468
|
-
|
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
|
-
|
1473
|
-
|
1474
|
-
|
1475
|
-
|
1476
|
-
|
1477
|
-
|
1478
|
-
|
1479
|
-
|
1480
|
-
|
1481
|
-
|
1482
|
-
|
1483
|
-
|
1484
|
-
|
1485
|
-
|
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
|
-
|
1587
|
-
|
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
|
-
|
1592
|
-
|
1593
|
-
|
1594
|
-
|
1595
|
-
|
1596
|
-
|
1597
|
-
|
1598
|
-
|
1599
|
-
|
1600
|
-
|
1601
|
-
|
1602
|
-
|
1603
|
-
|
1604
|
-
|
1605
|
-
|
1606
|
-
|
1607
|
-
|
1608
|
-
|
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
|
-
|
1777
|
-
inputElement = $input[0]
|
1778
|
-
;
|
1658
|
+
let inputElement = $input[0];
|
1779
1659
|
if (inputElement) {
|
1780
|
-
|
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
|
-
|
1805
|
-
|
1806
|
-
|
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
|
-
|
1825
|
-
|
1826
|
-
|
1827
|
-
|
1828
|
-
|
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
|
-
|
1924
|
-
|
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
|
-
|
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
|
-
|
1960
|
-
|
1961
|
-
|
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
|
-
|
1984
|
-
|
1985
|
-
|
1986
|
-
|
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
|
-
|
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
|
-
|
2013
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
2087
|
-
|
2088
|
-
|
2089
|
-
values = []
|
2090
|
-
;
|
1946
|
+
let select = {};
|
1947
|
+
let oldGroup = [];
|
1948
|
+
let values = [];
|
2091
1949
|
$module
|
2092
1950
|
.find('option')
|
2093
1951
|
.each(function () {
|
2094
|
-
|
2095
|
-
|
2096
|
-
|
2097
|
-
|
2098
|
-
|
2099
|
-
|
2100
|
-
|
2101
|
-
|
2102
|
-
|
2103
|
-
|
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
|
-
|
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
|
-
|
2165
|
-
|
2166
|
-
|
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
|
-
|
2179
|
-
|
2180
|
-
|
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
|
-
|
2199
|
-
|
2200
|
-
|
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
|
-
|
2284
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
2450
|
-
|
2451
|
-
|
2452
|
-
|
2453
|
-
|
2454
|
-
|
2455
|
-
|
2456
|
-
|
2457
|
-
|
2458
|
-
|
2459
|
-
|
2460
|
-
|
2461
|
-
|
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
|
-
|
2495
|
-
|
2496
|
-
|
2497
|
-
|
2498
|
-
|
2499
|
-
|
2500
|
-
|
2501
|
-
|
2502
|
-
|
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
|
-
|
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
|
-
|
2571
|
-
|
2572
|
-
|
2573
|
-
|
2574
|
-
|
2575
|
-
|
2576
|
-
|
2577
|
-
|
2578
|
-
|
2579
|
-
|
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
|
-
|
2637
|
-
|
2638
|
-
|
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
|
-
|
2650
|
-
|
2651
|
-
|
2652
|
-
|
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
|
-
|
2519
|
+
let $element = $currentMenu || $module;
|
2709
2520
|
$element.addClass(className.upward);
|
2710
2521
|
},
|
2711
2522
|
leftward: function ($currentMenu) {
|
2712
|
-
|
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
|
-
|
2727
|
-
|
2728
|
-
|
2729
|
-
|
2730
|
-
|
2731
|
-
|
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
|
-
|
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
|
-
|
2826
|
-
|
2827
|
-
|
2828
|
-
|
2829
|
-
|
2830
|
-
|
2831
|
-
|
2832
|
-
|
2833
|
-
|
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
|
-
|
2889
|
-
$
|
2890
|
-
|
2891
|
-
|
2892
|
-
|
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
|
-
|
2935
|
-
|
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
|
-
|
2952
|
-
|
2953
|
-
|
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
|
-
|
2976
|
-
|
2977
|
-
|
2978
|
-
|
2979
|
-
|
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
|
-
|
3023
|
-
|
3024
|
-
|
3025
|
-
|
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
|
-
|
3049
|
-
|
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
|
-
|
2886
|
+
let $element = $currentMenu || $module;
|
3108
2887
|
$element.removeClass(className.upward);
|
3109
2888
|
},
|
3110
2889
|
leftward: function ($currentMenu) {
|
3111
|
-
|
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
|
-
|
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
|
-
|
3142
|
-
|
3143
|
-
|
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
|
-
|
3181
|
-
|
3182
|
-
|
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
|
-
|
3215
|
-
|
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
|
-
|
3248
|
-
|
3249
|
-
|
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
|
-
|
3266
|
-
|
3267
|
-
|
3268
|
-
|
3269
|
-
|
3270
|
-
|
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
|
-
|
3343
|
-
|
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
|
-
|
3372
|
-
|
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 + '="' +
|
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
|
-
|
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
|
-
|
3404
|
-
|
3405
|
-
|
3406
|
-
|
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
|
-
|
3414
|
-
|
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
|
-
|
3215
|
+
let $selectedMenu = $subMenu || $menu;
|
3464
3216
|
|
3465
3217
|
return $selectedMenu.hasClass(className.leftward);
|
3466
3218
|
},
|
3467
3219
|
clearable: function () {
|
3468
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
3557
|
-
|
3558
|
-
|
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
|
-
|
3566
|
-
|
3567
|
-
|
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
|
-
|
3585
|
-
|
3586
|
-
|
3587
|
-
|
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
|
-
|
3632
|
-
|
3633
|
-
|
3634
|
-
|
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
|
-
|
3687
|
-
|
3688
|
-
|
3689
|
-
|
3690
|
-
|
3691
|
-
|
3692
|
-
|
3693
|
-
|
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
|
-
|
3734
|
-
|
3735
|
-
|
3736
|
-
|
3737
|
-
|
3738
|
-
|
3739
|
-
|
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
|
-
|
3812
|
-
|
3813
|
-
|
3814
|
-
|
3815
|
-
|
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
|
-
|
3907
|
-
|
3908
|
-
|
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
|
-
|
3930
|
-
|
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
|
-
|
3955
|
-
|
3956
|
-
|
3957
|
-
|
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
|
-
|
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
|
-
|
4276
|
-
|
4277
|
-
|
4278
|
-
|
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
|
-
|
4295
|
-
|
4296
|
-
|
4297
|
-
|
4298
|
-
|
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
|
-
|
4303
|
-
|
4304
|
-
|
4305
|
-
|
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
|
-
|
4310
|
-
|
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
|
-
|
4321
|
-
|
4322
|
-
|
4323
|
-
|
4324
|
-
|
4325
|
-
|
4326
|
-
|
4327
|
-
|
4328
|
-
|
4329
|
-
|
4330
|
-
|
4331
|
-
|
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
|
-
|
4364
|
-
|
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
|
-
|
4387
|
-
|
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
|
},
|