fomantic-ui 2.10.0-beta.6 → 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 +674 -977
- 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 +80 -127
- 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 +192 -274
- 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 +221 -313
- 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 +185 -254
- 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 +89 -139
- 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 +253 -352
- 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 +99 -132
- 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 +4100 -5721
- 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 +673 -976
- package/src/definitions/modules/embed.js +79 -126
- package/src/definitions/modules/flyout.js +191 -273
- package/src/definitions/modules/modal.js +220 -312
- package/src/definitions/modules/nag.js +66 -96
- package/src/definitions/modules/popup.js +184 -253
- package/src/definitions/modules/progress.js +102 -137
- package/src/definitions/modules/rating.js +88 -138
- package/src/definitions/modules/search.js +252 -351
- 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 +98 -131
- 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));
|
775
716
|
}
|
776
|
-
|
717
|
+
if (module.is.searchSelection() && module.can.show() && module.is.focusedOnSearch() && !module.is.empty()) {
|
718
|
+
module.show();
|
719
|
+
}
|
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);
|
@@ -1757,6 +1639,7 @@
|
|
1757
1639
|
}
|
1758
1640
|
// down arrow (open menu)
|
1759
1641
|
if (pressedKey === keys.downArrow && !module.is.visible()) {
|
1642
|
+
focused = true;
|
1760
1643
|
module.verbose('Down key pressed, showing dropdown');
|
1761
1644
|
module.show();
|
1762
1645
|
event.preventDefault();
|
@@ -1772,11 +1655,9 @@
|
|
1772
1655
|
|
1773
1656
|
trigger: {
|
1774
1657
|
change: function () {
|
1775
|
-
|
1776
|
-
inputElement = $input[0]
|
1777
|
-
;
|
1658
|
+
let inputElement = $input[0];
|
1778
1659
|
if (inputElement) {
|
1779
|
-
|
1660
|
+
let events = document.createEvent('HTMLEvents');
|
1780
1661
|
module.verbose('Triggering native change event');
|
1781
1662
|
events.initEvent('change', true, false);
|
1782
1663
|
inputElement.dispatchEvent(events);
|
@@ -1800,11 +1681,9 @@
|
|
1800
1681
|
selectActionActive = false;
|
1801
1682
|
},
|
1802
1683
|
eventInModule: function (event, callback) {
|
1803
|
-
|
1804
|
-
|
1805
|
-
|
1806
|
-
inModule = $target.closest($module).length > 0
|
1807
|
-
;
|
1684
|
+
let $target = $(event.target);
|
1685
|
+
let inDocument = $target.closest(document.documentElement).length > 0;
|
1686
|
+
let inModule = $target.closest($module).length > 0;
|
1808
1687
|
callback = isFunction(callback)
|
1809
1688
|
? callback
|
1810
1689
|
: function () {};
|
@@ -1820,13 +1699,11 @@
|
|
1820
1699
|
return false;
|
1821
1700
|
},
|
1822
1701
|
eventOnElement: function (event, callback) {
|
1823
|
-
|
1824
|
-
|
1825
|
-
|
1826
|
-
|
1827
|
-
|
1828
|
-
notInMenu = $target.closest($menu).length === 0
|
1829
|
-
;
|
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;
|
1830
1707
|
callback = isFunction(callback)
|
1831
1708
|
? callback
|
1832
1709
|
: function () {};
|
@@ -1919,10 +1796,8 @@
|
|
1919
1796
|
return Math.ceil($sizer.width() + 1);
|
1920
1797
|
},
|
1921
1798
|
selectionCount: function () {
|
1922
|
-
|
1923
|
-
|
1924
|
-
count
|
1925
|
-
;
|
1799
|
+
let values = module.get.values();
|
1800
|
+
let count;
|
1926
1801
|
count = module.is.multiple()
|
1927
1802
|
? (Array.isArray(values) ? values.length : 0)
|
1928
1803
|
: (module.get.value() !== '' ? 1 : 0);
|
@@ -1935,9 +1810,7 @@
|
|
1935
1810
|
: settings.transition;
|
1936
1811
|
},
|
1937
1812
|
userValues: function () {
|
1938
|
-
|
1939
|
-
values = module.get.values(true)
|
1940
|
-
;
|
1813
|
+
let values = module.get.values(true);
|
1941
1814
|
if (!values) {
|
1942
1815
|
return false;
|
1943
1816
|
}
|
@@ -1955,11 +1828,9 @@
|
|
1955
1828
|
});
|
1956
1829
|
},
|
1957
1830
|
caretPosition: function (returnEndPos) {
|
1958
|
-
|
1959
|
-
|
1960
|
-
|
1961
|
-
rangeLength
|
1962
|
-
;
|
1831
|
+
let input = $search[0];
|
1832
|
+
let range;
|
1833
|
+
let rangeLength;
|
1963
1834
|
if (returnEndPos && 'selectionEnd' in input) {
|
1964
1835
|
return input.selectionEnd;
|
1965
1836
|
}
|
@@ -1979,12 +1850,10 @@
|
|
1979
1850
|
}
|
1980
1851
|
},
|
1981
1852
|
value: function () {
|
1982
|
-
|
1983
|
-
|
1984
|
-
|
1985
|
-
|
1986
|
-
isEmptyMultiselect = Array.isArray(value) && value.length === 1 && value[0] === ''
|
1987
|
-
;
|
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] === '';
|
1988
1857
|
|
1989
1858
|
// prevents the placeholder element from being selected when multiple
|
1990
1859
|
return value === undefined || isEmptyMultiselect
|
@@ -1992,9 +1861,7 @@
|
|
1992
1861
|
: value;
|
1993
1862
|
},
|
1994
1863
|
values: function (raw) {
|
1995
|
-
|
1996
|
-
value = module.get.value()
|
1997
|
-
;
|
1864
|
+
let value = module.get.value();
|
1998
1865
|
if (value === '') {
|
1999
1866
|
return '';
|
2000
1867
|
}
|
@@ -2008,18 +1875,14 @@
|
|
2008
1875
|
: value;
|
2009
1876
|
},
|
2010
1877
|
remoteValues: function () {
|
2011
|
-
|
2012
|
-
|
2013
|
-
remoteValues = false
|
2014
|
-
;
|
1878
|
+
let values = module.get.values();
|
1879
|
+
let remoteValues = false;
|
2015
1880
|
if (values) {
|
2016
1881
|
if (typeof values === 'string') {
|
2017
1882
|
values = [values];
|
2018
1883
|
}
|
2019
1884
|
$.each(values, function (index, value) {
|
2020
|
-
|
2021
|
-
name = module.read.remoteData(value)
|
2022
|
-
;
|
1885
|
+
let name = module.read.remoteData(value);
|
2023
1886
|
module.verbose('Restoring value from session data', name, value);
|
2024
1887
|
if (name) {
|
2025
1888
|
if (!remoteValues) {
|
@@ -2068,9 +1931,7 @@
|
|
2068
1931
|
: String(choiceText));
|
2069
1932
|
},
|
2070
1933
|
inputEvent: function () {
|
2071
|
-
|
2072
|
-
input = $search[0]
|
2073
|
-
;
|
1934
|
+
let input = $search[0];
|
2074
1935
|
if (input) {
|
2075
1936
|
return input.oninput !== undefined
|
2076
1937
|
? 'input'
|
@@ -2082,26 +1943,22 @@
|
|
2082
1943
|
return false;
|
2083
1944
|
},
|
2084
1945
|
selectValues: function () {
|
2085
|
-
|
2086
|
-
|
2087
|
-
|
2088
|
-
values = []
|
2089
|
-
;
|
1946
|
+
let select = {};
|
1947
|
+
let oldGroup = [];
|
1948
|
+
let values = [];
|
2090
1949
|
$module
|
2091
1950
|
.find('option')
|
2092
1951
|
.each(function () {
|
2093
|
-
|
2094
|
-
|
2095
|
-
|
2096
|
-
|
2097
|
-
|
2098
|
-
|
2099
|
-
|
2100
|
-
|
2101
|
-
|
2102
|
-
|
2103
|
-
group = $option.parent('optgroup')
|
2104
|
-
;
|
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');
|
2105
1962
|
if (settings.placeholder === 'auto' && value === '') {
|
2106
1963
|
select.placeholder = name;
|
2107
1964
|
} else {
|
@@ -2120,8 +1977,7 @@
|
|
2120
1977
|
disabled: disabled,
|
2121
1978
|
});
|
2122
1979
|
}
|
2123
|
-
})
|
2124
|
-
;
|
1980
|
+
});
|
2125
1981
|
if (settings.placeholder && settings.placeholder !== 'auto') {
|
2126
1982
|
module.debug('Setting placeholder value to', settings.placeholder);
|
2127
1983
|
select.placeholder = settings.placeholder;
|
@@ -2151,20 +2007,16 @@
|
|
2151
2007
|
return $item.filter('.' + className.active);
|
2152
2008
|
},
|
2153
2009
|
selectedItem: function () {
|
2154
|
-
|
2155
|
-
$selectedItem = $item.not(selector.unselectable).filter('.' + className.selected)
|
2156
|
-
;
|
2010
|
+
let $selectedItem = $item.not(selector.unselectable).filter('.' + className.selected);
|
2157
2011
|
|
2158
2012
|
return $selectedItem.length > 0
|
2159
2013
|
? $selectedItem
|
2160
2014
|
: $item.eq(0);
|
2161
2015
|
},
|
2162
2016
|
itemWithAdditions: function (value) {
|
2163
|
-
|
2164
|
-
|
2165
|
-
|
2166
|
-
hasUserItems = $userItems && $userItems.length > 0
|
2167
|
-
;
|
2017
|
+
let $items = module.get.item(value);
|
2018
|
+
let $userItems = module.create.userChoice(value);
|
2019
|
+
let hasUserItems = $userItems && $userItems.length > 0;
|
2168
2020
|
if (hasUserItems) {
|
2169
2021
|
$items = $items.length > 0
|
2170
2022
|
? $items.add($userItems)
|
@@ -2174,11 +2026,9 @@
|
|
2174
2026
|
return $items;
|
2175
2027
|
},
|
2176
2028
|
item: function (value, strict) {
|
2177
|
-
|
2178
|
-
|
2179
|
-
|
2180
|
-
isMultiple
|
2181
|
-
;
|
2029
|
+
let $selectedItem = false;
|
2030
|
+
let shouldSearch;
|
2031
|
+
let isMultiple;
|
2182
2032
|
value = value !== undefined
|
2183
2033
|
? value
|
2184
2034
|
: (module.get.values() !== undefined
|
@@ -2194,11 +2044,9 @@
|
|
2194
2044
|
if (shouldSearch) {
|
2195
2045
|
$item
|
2196
2046
|
.each(function () {
|
2197
|
-
|
2198
|
-
|
2199
|
-
|
2200
|
-
optionValue = module.get.choiceValue($choice, optionText)
|
2201
|
-
;
|
2047
|
+
let $choice = $(this);
|
2048
|
+
let optionText = module.get.choiceText($choice);
|
2049
|
+
let optionValue = module.get.choiceValue($choice, optionText);
|
2202
2050
|
// safe early exit
|
2203
2051
|
if (optionValue === null || optionValue === undefined) {
|
2204
2052
|
return;
|
@@ -2228,8 +2076,7 @@
|
|
2228
2076
|
return true;
|
2229
2077
|
}
|
2230
2078
|
}
|
2231
|
-
})
|
2232
|
-
;
|
2079
|
+
});
|
2233
2080
|
}
|
2234
2081
|
|
2235
2082
|
return $selectedItem;
|
@@ -2279,10 +2126,8 @@
|
|
2279
2126
|
module.restore.defaultValue();
|
2280
2127
|
},
|
2281
2128
|
defaultText: function () {
|
2282
|
-
|
2283
|
-
|
2284
|
-
placeholderText = module.get.placeholderText
|
2285
|
-
;
|
2129
|
+
let defaultText = module.get.defaultText();
|
2130
|
+
let placeholderText = module.get.placeholderText;
|
2286
2131
|
if (defaultText === placeholderText) {
|
2287
2132
|
module.debug('Restoring default placeholder text', defaultText);
|
2288
2133
|
module.set.placeholderText(defaultText);
|
@@ -2295,9 +2140,7 @@
|
|
2295
2140
|
module.set.placeholderText();
|
2296
2141
|
},
|
2297
2142
|
defaultValue: function () {
|
2298
|
-
|
2299
|
-
defaultValue = module.get.defaultValue()
|
2300
|
-
;
|
2143
|
+
let defaultValue = module.get.defaultValue();
|
2301
2144
|
if (defaultValue !== undefined) {
|
2302
2145
|
module.debug('Restoring default value', defaultValue);
|
2303
2146
|
if (defaultValue !== '') {
|
@@ -2337,7 +2180,7 @@
|
|
2337
2180
|
} else {
|
2338
2181
|
module.set.selected();
|
2339
2182
|
}
|
2340
|
-
|
2183
|
+
let value = module.get.value();
|
2341
2184
|
if (value && value !== '' && !(Array.isArray(value) && value.length === 0)) {
|
2342
2185
|
$input.removeClass(className.noselection);
|
2343
2186
|
} else {
|
@@ -2346,9 +2189,7 @@
|
|
2346
2189
|
module.remove.initialLoad();
|
2347
2190
|
},
|
2348
2191
|
remoteValues: function () {
|
2349
|
-
|
2350
|
-
values = module.get.remoteValues()
|
2351
|
-
;
|
2192
|
+
let values = module.get.remoteValues();
|
2352
2193
|
module.debug('Recreating selected from session data', values);
|
2353
2194
|
if (values) {
|
2354
2195
|
if (module.is.single()) {
|
@@ -2366,9 +2207,7 @@
|
|
2366
2207
|
|
2367
2208
|
read: {
|
2368
2209
|
remoteData: function (value) {
|
2369
|
-
|
2370
|
-
name
|
2371
|
-
;
|
2210
|
+
let name;
|
2372
2211
|
if (window.Storage === undefined) {
|
2373
2212
|
module.error(error.noStorage);
|
2374
2213
|
|
@@ -2389,23 +2228,17 @@
|
|
2389
2228
|
module.save.defaultValue();
|
2390
2229
|
},
|
2391
2230
|
defaultValue: function () {
|
2392
|
-
|
2393
|
-
value = module.get.value()
|
2394
|
-
;
|
2231
|
+
let value = module.get.value();
|
2395
2232
|
module.verbose('Saving default value as', value);
|
2396
2233
|
$module.data(metadata.defaultValue, value);
|
2397
2234
|
},
|
2398
2235
|
defaultText: function () {
|
2399
|
-
|
2400
|
-
text = module.get.text()
|
2401
|
-
;
|
2236
|
+
let text = module.get.text();
|
2402
2237
|
module.verbose('Saving default text as', text);
|
2403
2238
|
$module.data(metadata.defaultText, text);
|
2404
2239
|
},
|
2405
2240
|
placeholderText: function () {
|
2406
|
-
|
2407
|
-
text
|
2408
|
-
;
|
2241
|
+
let text;
|
2409
2242
|
if (settings.placeholder !== false && $text.hasClass(className.placeholder)) {
|
2410
2243
|
text = module.get.text();
|
2411
2244
|
module.verbose('Saving placeholder text as', text);
|
@@ -2445,21 +2278,19 @@
|
|
2445
2278
|
},
|
2446
2279
|
|
2447
2280
|
scrollPage: function (direction, $selectedItem) {
|
2448
|
-
|
2449
|
-
|
2450
|
-
|
2451
|
-
|
2452
|
-
|
2453
|
-
|
2454
|
-
|
2455
|
-
|
2456
|
-
|
2457
|
-
|
2458
|
-
|
2459
|
-
|
2460
|
-
|
2461
|
-
elementIndex
|
2462
|
-
;
|
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;
|
2463
2294
|
elementIndex = direction === 'up'
|
2464
2295
|
? $selectableItem.index($currentItem) - itemsPerPage
|
2465
2296
|
: $selectableItem.index($currentItem) + itemsPerPage;
|
@@ -2474,33 +2305,28 @@
|
|
2474
2305
|
if ($nextSelectedItem.length > 0) {
|
2475
2306
|
module.debug('Scrolling page', direction, $nextSelectedItem);
|
2476
2307
|
$currentItem
|
2477
|
-
.removeClass(className.selected)
|
2478
|
-
;
|
2308
|
+
.removeClass(className.selected);
|
2479
2309
|
$nextSelectedItem
|
2480
|
-
.addClass(className.selected)
|
2481
|
-
;
|
2310
|
+
.addClass(className.selected);
|
2482
2311
|
if (settings.selectOnKeydown && module.is.single() && !$nextSelectedItem.hasClass(className.actionable)) {
|
2483
2312
|
module.set.selectedItem($nextSelectedItem);
|
2484
2313
|
}
|
2485
2314
|
$menu
|
2486
|
-
.scrollTop(newScroll)
|
2487
|
-
;
|
2315
|
+
.scrollTop(newScroll);
|
2488
2316
|
}
|
2489
2317
|
},
|
2490
2318
|
|
2491
2319
|
set: {
|
2492
2320
|
filtered: function () {
|
2493
|
-
|
2494
|
-
|
2495
|
-
|
2496
|
-
|
2497
|
-
|
2498
|
-
|
2499
|
-
|
2500
|
-
|
2501
|
-
|
2502
|
-
valueIsSet = searchValue !== ''
|
2503
|
-
;
|
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 !== '';
|
2504
2330
|
if (isMultiple && hasSearchValue) {
|
2505
2331
|
module.verbose('Adjusting input width', searchWidth);
|
2506
2332
|
$search.css('width', searchWidth + 'px');
|
@@ -2529,21 +2355,17 @@
|
|
2529
2355
|
if (module.is.searchSelection()) {
|
2530
2356
|
module.debug('Added tabindex to searchable dropdown');
|
2531
2357
|
$search
|
2532
|
-
.val('')
|
2533
|
-
;
|
2358
|
+
.val('');
|
2534
2359
|
module.check.disabled();
|
2535
2360
|
$menu
|
2536
|
-
.attr('tabindex', -1)
|
2537
|
-
;
|
2361
|
+
.attr('tabindex', -1);
|
2538
2362
|
} else {
|
2539
2363
|
module.debug('Added tabindex to dropdown');
|
2540
2364
|
if ($module.attr('tabindex') === undefined) {
|
2541
2365
|
$module
|
2542
|
-
.attr('tabindex', $input.attr('tabindex') || 0)
|
2543
|
-
;
|
2366
|
+
.attr('tabindex', $input.attr('tabindex') || 0);
|
2544
2367
|
$menu
|
2545
|
-
.attr('tabindex', -1)
|
2546
|
-
;
|
2368
|
+
.attr('tabindex', -1);
|
2547
2369
|
}
|
2548
2370
|
}
|
2549
2371
|
$input.removeAttr('tabindex');
|
@@ -2560,24 +2382,20 @@
|
|
2560
2382
|
}
|
2561
2383
|
},
|
2562
2384
|
partialSearch: function (text) {
|
2563
|
-
|
2564
|
-
length = module.get.query().length
|
2565
|
-
;
|
2385
|
+
let length = module.get.query().length;
|
2566
2386
|
$search.val(text.slice(0, length));
|
2567
2387
|
},
|
2568
2388
|
scrollPosition: function ($item, forceScroll) {
|
2569
|
-
|
2570
|
-
|
2571
|
-
|
2572
|
-
|
2573
|
-
|
2574
|
-
|
2575
|
-
|
2576
|
-
|
2577
|
-
|
2578
|
-
|
2579
|
-
belowPage
|
2580
|
-
;
|
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;
|
2581
2399
|
|
2582
2400
|
$item = $item || module.get.selectedItem();
|
2583
2401
|
$menu = $item.closest(selector.menu);
|
@@ -2622,8 +2440,7 @@
|
|
2622
2440
|
}
|
2623
2441
|
module.debug('Changing text', text, $text);
|
2624
2442
|
$text
|
2625
|
-
.removeClass(className.filtered)
|
2626
|
-
;
|
2443
|
+
.removeClass(className.filtered);
|
2627
2444
|
if (settings.preserveHTML) {
|
2628
2445
|
$text.html(text);
|
2629
2446
|
} else {
|
@@ -2632,11 +2449,9 @@
|
|
2632
2449
|
}
|
2633
2450
|
},
|
2634
2451
|
selectedItem: function ($item) {
|
2635
|
-
|
2636
|
-
|
2637
|
-
|
2638
|
-
text = module.get.choiceText($item)
|
2639
|
-
;
|
2452
|
+
let value = module.get.choiceValue($item);
|
2453
|
+
let searchText = module.get.choiceText($item, false);
|
2454
|
+
let text = module.get.choiceText($item);
|
2640
2455
|
module.debug('Setting user selection to item', $item);
|
2641
2456
|
module.remove.activeItem();
|
2642
2457
|
module.set.partialSearch(searchText);
|
@@ -2645,12 +2460,10 @@
|
|
2645
2460
|
module.set.text(text);
|
2646
2461
|
},
|
2647
2462
|
selectedLetter: function (letter) {
|
2648
|
-
|
2649
|
-
|
2650
|
-
|
2651
|
-
|
2652
|
-
$nextItem
|
2653
|
-
;
|
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;
|
2654
2467
|
// check next of the same letter
|
2655
2468
|
if (alreadySelectedLetter) {
|
2656
2469
|
$nextItem = $selectedItem.nextAll($item).eq(0);
|
@@ -2667,8 +2480,7 @@
|
|
2667
2480
|
|
2668
2481
|
return false;
|
2669
2482
|
}
|
2670
|
-
})
|
2671
|
-
;
|
2483
|
+
});
|
2672
2484
|
}
|
2673
2485
|
// set the next value
|
2674
2486
|
if ($nextValue) {
|
@@ -2704,11 +2516,11 @@
|
|
2704
2516
|
}
|
2705
2517
|
},
|
2706
2518
|
upward: function ($currentMenu) {
|
2707
|
-
|
2519
|
+
let $element = $currentMenu || $module;
|
2708
2520
|
$element.addClass(className.upward);
|
2709
2521
|
},
|
2710
2522
|
leftward: function ($currentMenu) {
|
2711
|
-
|
2523
|
+
let $element = $currentMenu || $menu;
|
2712
2524
|
$element.addClass(className.leftward);
|
2713
2525
|
},
|
2714
2526
|
value: function (value, text, $selected, preventChangeTrigger) {
|
@@ -2722,14 +2534,12 @@
|
|
2722
2534
|
} else {
|
2723
2535
|
$input.addClass(className.noselection);
|
2724
2536
|
}
|
2725
|
-
|
2726
|
-
|
2727
|
-
|
2728
|
-
|
2729
|
-
|
2730
|
-
|
2731
|
-
: value
|
2732
|
-
;
|
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;
|
2733
2543
|
if (hasInput) {
|
2734
2544
|
if (!settings.allowReselection && stringValue == currentValue) {
|
2735
2545
|
module.verbose('Skipping value update already same value', value, currentValue);
|
@@ -2745,8 +2555,7 @@
|
|
2745
2555
|
module.debug('Updating input value', escapedValue, currentValue);
|
2746
2556
|
internalChange = true;
|
2747
2557
|
$input
|
2748
|
-
.val(escapedValue)
|
2749
|
-
;
|
2558
|
+
.val(escapedValue);
|
2750
2559
|
if (settings.fireOnInit === false && module.is.initialLoad()) {
|
2751
2560
|
module.debug('Input native change event ignored on initial load');
|
2752
2561
|
} else if (preventChangeTrigger !== true) {
|
@@ -2767,8 +2576,7 @@
|
|
2767
2576
|
},
|
2768
2577
|
active: function () {
|
2769
2578
|
$module
|
2770
|
-
.addClass(className.active)
|
2771
|
-
;
|
2579
|
+
.addClass(className.active);
|
2772
2580
|
},
|
2773
2581
|
multiple: function () {
|
2774
2582
|
$module.addClass(className.multiple);
|
@@ -2791,9 +2599,7 @@
|
|
2791
2599
|
preventChangeTrigger = $selectedItem;
|
2792
2600
|
$selectedItem = undefined;
|
2793
2601
|
}
|
2794
|
-
|
2795
|
-
isMultiple = module.is.multiple()
|
2796
|
-
;
|
2602
|
+
let isMultiple = module.is.multiple();
|
2797
2603
|
$selectedItem = settings.allowAdditions
|
2798
2604
|
? $selectedItem || module.get.itemWithAdditions(value)
|
2799
2605
|
: $selectedItem || module.get.item(value);
|
@@ -2821,17 +2627,15 @@
|
|
2821
2627
|
// select each item
|
2822
2628
|
$selectedItem
|
2823
2629
|
.each(function () {
|
2824
|
-
|
2825
|
-
|
2826
|
-
|
2827
|
-
|
2828
|
-
|
2829
|
-
|
2830
|
-
|
2831
|
-
|
2832
|
-
|
2833
|
-
shouldAnimate = isMultiple && $selectedItem && $selectedItem.length === 1
|
2834
|
-
;
|
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;
|
2835
2639
|
if (isActionable) {
|
2836
2640
|
if ((!isMultiple || (!isActive || isUserValue)) && settings.apiSettings && settings.saveRemoteData) {
|
2837
2641
|
module.save.remoteData(selectedText, selectedValue);
|
@@ -2867,11 +2671,9 @@
|
|
2867
2671
|
module.set.value(selectedValue, selectedText, $selected, preventChangeTrigger);
|
2868
2672
|
$selected
|
2869
2673
|
.addClass(className.active)
|
2870
|
-
.addClass(className.selected)
|
2871
|
-
;
|
2674
|
+
.addClass(className.selected);
|
2872
2675
|
}
|
2873
|
-
})
|
2874
|
-
;
|
2676
|
+
});
|
2875
2677
|
if (!keepSearchTerm) {
|
2876
2678
|
module.remove.searchTerm();
|
2877
2679
|
}
|
@@ -2884,21 +2686,18 @@
|
|
2884
2686
|
|
2885
2687
|
add: {
|
2886
2688
|
label: function (value, text, shouldAnimate) {
|
2887
|
-
|
2888
|
-
$
|
2889
|
-
|
2890
|
-
|
2891
|
-
|
2892
|
-
$label
|
2893
|
-
;
|
2689
|
+
let $next = module.is.searchSelection()
|
2690
|
+
? $search
|
2691
|
+
: $text;
|
2692
|
+
let escapedValue = module.escape.value(value);
|
2693
|
+
let $label;
|
2894
2694
|
if (settings.ignoreCase) {
|
2895
2695
|
escapedValue = escapedValue.toLowerCase();
|
2896
2696
|
}
|
2897
2697
|
$label = $('<a />')
|
2898
2698
|
.addClass(className.label)
|
2899
2699
|
.attr('data-' + metadata.value, escapedValue)
|
2900
|
-
.html(templates.label(escapedValue, text, settings))
|
2901
|
-
;
|
2700
|
+
.html(templates.label(escapedValue, text, settings));
|
2902
2701
|
$label = settings.onLabelCreate.call($label, escapedValue, text);
|
2903
2702
|
|
2904
2703
|
if (module.has.label(value)) {
|
@@ -2920,38 +2719,30 @@
|
|
2920
2719
|
verbose: settings.verbose,
|
2921
2720
|
silent: settings.silent,
|
2922
2721
|
duration: settings.label.duration,
|
2923
|
-
})
|
2924
|
-
;
|
2722
|
+
});
|
2925
2723
|
} else {
|
2926
2724
|
module.debug('Adding selection label', $label);
|
2927
2725
|
$label
|
2928
|
-
.insertBefore($next)
|
2929
|
-
;
|
2726
|
+
.insertBefore($next);
|
2930
2727
|
}
|
2931
2728
|
},
|
2932
2729
|
message: function (message) {
|
2933
|
-
|
2934
|
-
|
2935
|
-
html = settings.templates.message(module.add.variables(message))
|
2936
|
-
;
|
2730
|
+
let $message = $menu.children(selector.message);
|
2731
|
+
let html = settings.templates.message(module.add.variables(message));
|
2937
2732
|
if ($message.length > 0) {
|
2938
2733
|
$message
|
2939
|
-
.html(html)
|
2940
|
-
;
|
2734
|
+
.html(html);
|
2941
2735
|
} else {
|
2942
2736
|
$('<div/>')
|
2943
2737
|
.html(html)
|
2944
2738
|
.addClass(className.message)
|
2945
|
-
.appendTo($menu)
|
2946
|
-
;
|
2739
|
+
.appendTo($menu);
|
2947
2740
|
}
|
2948
2741
|
},
|
2949
2742
|
optionValue: function (value) {
|
2950
|
-
|
2951
|
-
|
2952
|
-
|
2953
|
-
hasOption = $option.length > 0
|
2954
|
-
;
|
2743
|
+
let escapedValue = module.escape.value(value);
|
2744
|
+
let $option = $input.find('option[value="' + CSS.escape(escapedValue) + '"]');
|
2745
|
+
let hasOption = $option.length > 0;
|
2955
2746
|
if (hasOption) {
|
2956
2747
|
return;
|
2957
2748
|
}
|
@@ -2965,19 +2756,16 @@
|
|
2965
2756
|
.prop('value', escapedValue)
|
2966
2757
|
.addClass(className.addition)
|
2967
2758
|
.text(value)
|
2968
|
-
.appendTo($input)
|
2969
|
-
;
|
2759
|
+
.appendTo($input);
|
2970
2760
|
module.verbose('Adding user addition as an <option>', value);
|
2971
2761
|
module.observe.select();
|
2972
2762
|
},
|
2973
2763
|
userSuggestion: function (value) {
|
2974
|
-
|
2975
|
-
|
2976
|
-
|
2977
|
-
|
2978
|
-
|
2979
|
-
html
|
2980
|
-
;
|
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;
|
2981
2769
|
if (settings.useLabels && module.has.maxSelections()) {
|
2982
2770
|
return;
|
2983
2771
|
}
|
@@ -2992,38 +2780,32 @@
|
|
2992
2780
|
.data(metadata.text, value)
|
2993
2781
|
.attr('data-' + metadata.value, value)
|
2994
2782
|
.attr('data-' + metadata.text, value)
|
2995
|
-
.removeClass(className.filtered)
|
2996
|
-
;
|
2783
|
+
.removeClass(className.filtered);
|
2997
2784
|
if (!settings.hideAdditions) {
|
2998
2785
|
html = settings.templates.addition(module.add.variables(message.addResult, value));
|
2999
2786
|
$addition
|
3000
|
-
.html(html)
|
3001
|
-
;
|
2787
|
+
.html(html);
|
3002
2788
|
}
|
3003
2789
|
module.verbose('Replacing user suggestion with new value', $addition);
|
3004
2790
|
} else {
|
3005
2791
|
$addition = module.create.userChoice(value);
|
3006
2792
|
$addition
|
3007
|
-
.prependTo($menu)
|
3008
|
-
;
|
2793
|
+
.prependTo($menu);
|
3009
2794
|
module.verbose('Adding item choice to menu corresponding with user choice addition', $addition);
|
3010
2795
|
}
|
3011
2796
|
if (!settings.hideAdditions || module.is.allFiltered()) {
|
3012
2797
|
$addition
|
3013
2798
|
.addClass(className.selected)
|
3014
2799
|
.siblings()
|
3015
|
-
.removeClass(className.selected)
|
3016
|
-
;
|
2800
|
+
.removeClass(className.selected);
|
3017
2801
|
}
|
3018
2802
|
module.refreshItems();
|
3019
2803
|
},
|
3020
2804
|
variables: function (message, term) {
|
3021
|
-
|
3022
|
-
|
3023
|
-
|
3024
|
-
|
3025
|
-
query
|
3026
|
-
;
|
2805
|
+
let hasCount = message.search('{count}') !== -1;
|
2806
|
+
let hasMaxCount = message.search('{maxCount}') !== -1;
|
2807
|
+
let hasTerm = message.search('{term}') !== -1;
|
2808
|
+
let query;
|
3027
2809
|
module.verbose('Adding templated variables to message', message);
|
3028
2810
|
if (hasCount) {
|
3029
2811
|
message = message.replace('{count}', module.get.selectionCount());
|
@@ -3044,10 +2826,8 @@
|
|
3044
2826
|
$selectedItem = undefined;
|
3045
2827
|
addedText = undefined;
|
3046
2828
|
}
|
3047
|
-
|
3048
|
-
|
3049
|
-
newValue
|
3050
|
-
;
|
2829
|
+
let currentValue = module.get.values(true);
|
2830
|
+
let newValue;
|
3051
2831
|
if (module.has.value(addedValue)) {
|
3052
2832
|
module.debug('Value already selected');
|
3053
2833
|
|
@@ -3103,11 +2883,11 @@
|
|
3103
2883
|
initialLoad = false;
|
3104
2884
|
},
|
3105
2885
|
upward: function ($currentMenu) {
|
3106
|
-
|
2886
|
+
let $element = $currentMenu || $module;
|
3107
2887
|
$element.removeClass(className.upward);
|
3108
2888
|
},
|
3109
2889
|
leftward: function ($currentMenu) {
|
3110
|
-
|
2890
|
+
let $element = $currentMenu || $menu;
|
3111
2891
|
$element.removeClass(className.leftward);
|
3112
2892
|
},
|
3113
2893
|
visible: function () {
|
@@ -3119,7 +2899,7 @@
|
|
3119
2899
|
filteredItem: function () {
|
3120
2900
|
if (settings.highlightMatches) {
|
3121
2901
|
$.each($item, function (index, item) {
|
3122
|
-
|
2902
|
+
let $markItem = $(item);
|
3123
2903
|
$markItem.html($markItem.html().replace(/<\/?mark>/g, ''));
|
3124
2904
|
});
|
3125
2905
|
}
|
@@ -3137,11 +2917,9 @@
|
|
3137
2917
|
module.remove.empty();
|
3138
2918
|
},
|
3139
2919
|
optionValue: function (value) {
|
3140
|
-
|
3141
|
-
|
3142
|
-
|
3143
|
-
hasOption = $option.length > 0
|
3144
|
-
;
|
2920
|
+
let escapedValue = module.escape.value(value);
|
2921
|
+
let $option = $input.find('option[value="' + CSS.escape(escapedValue) + '"]');
|
2922
|
+
let hasOption = $option.length > 0;
|
3145
2923
|
if (!hasOption || !$option.hasClass(className.addition)) {
|
3146
2924
|
return;
|
3147
2925
|
}
|
@@ -3176,11 +2954,9 @@
|
|
3176
2954
|
|
3177
2955
|
$selectedItem
|
3178
2956
|
.each(function () {
|
3179
|
-
|
3180
|
-
|
3181
|
-
|
3182
|
-
selectedValue = module.get.choiceValue($selected, selectedText)
|
3183
|
-
;
|
2957
|
+
let $selected = $(this);
|
2958
|
+
let selectedText = module.get.choiceText($selected);
|
2959
|
+
let selectedValue = module.get.choiceValue($selected, selectedText);
|
3184
2960
|
if (module.is.multiple()) {
|
3185
2961
|
if (settings.useLabels) {
|
3186
2962
|
module.remove.value(selectedValue, selectedText, $selected, preventChangeTrigger);
|
@@ -3198,22 +2974,18 @@
|
|
3198
2974
|
}
|
3199
2975
|
$selected
|
3200
2976
|
.removeClass(className.filtered)
|
3201
|
-
.removeClass(className.active)
|
3202
|
-
;
|
2977
|
+
.removeClass(className.active);
|
3203
2978
|
if (settings.useLabels) {
|
3204
2979
|
$selected.removeClass(className.selected);
|
3205
2980
|
}
|
3206
|
-
})
|
3207
|
-
;
|
2981
|
+
});
|
3208
2982
|
},
|
3209
2983
|
selectedItem: function () {
|
3210
2984
|
$item.removeClass(className.selected);
|
3211
2985
|
},
|
3212
2986
|
value: function (removedValue, removedText, $removedItem, preventChangeTrigger) {
|
3213
|
-
|
3214
|
-
|
3215
|
-
newValue
|
3216
|
-
;
|
2987
|
+
let values = module.get.values(true);
|
2988
|
+
let newValue;
|
3217
2989
|
if (module.has.selectInput()) {
|
3218
2990
|
module.verbose('Input is <select> removing selected option', removedValue);
|
3219
2991
|
newValue = module.remove.arrayValue(removedValue, values);
|
@@ -3243,11 +3015,9 @@
|
|
3243
3015
|
return values;
|
3244
3016
|
},
|
3245
3017
|
label: function (value, shouldAnimate) {
|
3246
|
-
|
3247
|
-
|
3248
|
-
|
3249
|
-
$removedLabel = $labels.filter('[data-' + metadata.value + '="' + module.escape.string(settings.ignoreCase ? escapedValue.toLowerCase() : escapedValue) + '"]')
|
3250
|
-
;
|
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) + '"]');
|
3251
3021
|
module.verbose('Removing label', $removedLabel);
|
3252
3022
|
$removedLabel.remove();
|
3253
3023
|
},
|
@@ -3261,14 +3031,12 @@
|
|
3261
3031
|
module.verbose('Removing labels', $labels);
|
3262
3032
|
$labels
|
3263
3033
|
.each(function () {
|
3264
|
-
|
3265
|
-
|
3266
|
-
|
3267
|
-
|
3268
|
-
|
3269
|
-
|
3270
|
-
isUserValue = module.is.userValue(stringValue)
|
3271
|
-
;
|
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);
|
3272
3040
|
if (settings.onLabelRemove.call($label, value) === false) {
|
3273
3041
|
module.debug('Label remove callback cancelled removal');
|
3274
3042
|
|
@@ -3282,26 +3050,21 @@
|
|
3282
3050
|
// selected will also remove label
|
3283
3051
|
module.remove.selected(stringValue, false, preventChangeTrigger);
|
3284
3052
|
}
|
3285
|
-
})
|
3286
|
-
;
|
3053
|
+
});
|
3287
3054
|
},
|
3288
3055
|
tabbable: function () {
|
3289
3056
|
if (module.is.searchSelection()) {
|
3290
3057
|
module.debug('Searchable dropdown initialized');
|
3291
3058
|
$search
|
3292
|
-
.removeAttr('tabindex')
|
3293
|
-
;
|
3059
|
+
.removeAttr('tabindex');
|
3294
3060
|
$menu
|
3295
|
-
.removeAttr('tabindex')
|
3296
|
-
;
|
3061
|
+
.removeAttr('tabindex');
|
3297
3062
|
} else {
|
3298
3063
|
module.debug('Simple selection dropdown initialized');
|
3299
3064
|
$module
|
3300
|
-
.removeAttr('tabindex')
|
3301
|
-
;
|
3065
|
+
.removeAttr('tabindex');
|
3302
3066
|
$menu
|
3303
|
-
.removeAttr('tabindex')
|
3304
|
-
;
|
3067
|
+
.removeAttr('tabindex');
|
3305
3068
|
}
|
3306
3069
|
},
|
3307
3070
|
diacritics: function (text) {
|
@@ -3338,10 +3101,8 @@
|
|
3338
3101
|
return true;
|
3339
3102
|
},
|
3340
3103
|
firstLetter: function ($item, letter) {
|
3341
|
-
|
3342
|
-
|
3343
|
-
firstLetter
|
3344
|
-
;
|
3104
|
+
let text;
|
3105
|
+
let firstLetter;
|
3345
3106
|
if (!$item || $item.length === 0 || typeof letter !== 'string') {
|
3346
3107
|
return false;
|
3347
3108
|
}
|
@@ -3367,23 +3128,19 @@
|
|
3367
3128
|
return $menu.children(selector.message).length > 0;
|
3368
3129
|
},
|
3369
3130
|
label: function (value) {
|
3370
|
-
|
3371
|
-
|
3372
|
-
$labels = $module.find(selector.label)
|
3373
|
-
;
|
3131
|
+
let escapedValue = module.escape.value(value);
|
3132
|
+
let $labels = $module.find(selector.label);
|
3374
3133
|
if (settings.ignoreCase) {
|
3375
3134
|
escapedValue = escapedValue.toLowerCase();
|
3376
3135
|
}
|
3377
3136
|
|
3378
|
-
return $labels.filter('[data-' + metadata.value + '="' +
|
3137
|
+
return $labels.filter('[data-' + metadata.value + '="' + CSS.escape(escapedValue) + '"]').length > 0;
|
3379
3138
|
},
|
3380
3139
|
maxSelections: function () {
|
3381
3140
|
return settings.maxSelections && module.get.selectionCount() >= settings.maxSelections;
|
3382
3141
|
},
|
3383
3142
|
allResultsFiltered: function () {
|
3384
|
-
|
3385
|
-
$normalResults = $item.not(selector.addition)
|
3386
|
-
;
|
3143
|
+
let $normalResults = $item.not(selector.addition);
|
3387
3144
|
|
3388
3145
|
return $normalResults.filter(selector.unselectable).length === $normalResults.length;
|
3389
3146
|
},
|
@@ -3399,20 +3156,16 @@
|
|
3399
3156
|
: module.has.valueMatchingCase(value);
|
3400
3157
|
},
|
3401
3158
|
valueMatchingCase: function (value) {
|
3402
|
-
|
3403
|
-
|
3404
|
-
|
3405
|
-
|
3406
|
-
: values == value
|
3407
|
-
;
|
3159
|
+
let values = module.get.values(true);
|
3160
|
+
let hasValue = Array.isArray(values)
|
3161
|
+
? values && ($.inArray(value, values) !== -1)
|
3162
|
+
: values == value;
|
3408
3163
|
|
3409
3164
|
return !!hasValue;
|
3410
3165
|
},
|
3411
3166
|
valueIgnoringCase: function (value) {
|
3412
|
-
|
3413
|
-
|
3414
|
-
hasValue = false
|
3415
|
-
;
|
3167
|
+
let values = module.get.values(true);
|
3168
|
+
let hasValue = false;
|
3416
3169
|
if (!Array.isArray(values)) {
|
3417
3170
|
values = [values];
|
3418
3171
|
}
|
@@ -3459,12 +3212,12 @@
|
|
3459
3212
|
: $menu.transition && $menu.transition('is animating');
|
3460
3213
|
},
|
3461
3214
|
leftward: function ($subMenu) {
|
3462
|
-
|
3215
|
+
let $selectedMenu = $subMenu || $menu;
|
3463
3216
|
|
3464
3217
|
return $selectedMenu.hasClass(className.leftward);
|
3465
3218
|
},
|
3466
3219
|
clearable: function () {
|
3467
|
-
|
3220
|
+
let hasClearableClass = $module.hasClass(className.clearable);
|
3468
3221
|
if (!hasClearableClass && settings.clearable) {
|
3469
3222
|
$module.addClass(className.clearable);
|
3470
3223
|
}
|
@@ -3490,9 +3243,7 @@
|
|
3490
3243
|
return initialLoad;
|
3491
3244
|
},
|
3492
3245
|
inObject: function (needle, object) {
|
3493
|
-
|
3494
|
-
found = false
|
3495
|
-
;
|
3246
|
+
let found = false;
|
3496
3247
|
$.each(object, function (index, property) {
|
3497
3248
|
if (property == needle) {
|
3498
3249
|
found = true;
|
@@ -3516,9 +3267,7 @@
|
|
3516
3267
|
return !module.is.multiple();
|
3517
3268
|
},
|
3518
3269
|
selectMutation: function (mutations) {
|
3519
|
-
|
3520
|
-
selectChanged = false
|
3521
|
-
;
|
3270
|
+
let selectChanged = false;
|
3522
3271
|
$.each(mutations, function (index, mutation) {
|
3523
3272
|
if ($(mutation.target).is('option, optgroup') || $(mutation.addedNodes).is('select') || ($(mutation.target).is('select') && mutation.type !== 'attributes')) {
|
3524
3273
|
selectChanged = true;
|
@@ -3542,7 +3291,7 @@
|
|
3542
3291
|
return $.inArray(value, module.get.userValues()) !== -1;
|
3543
3292
|
},
|
3544
3293
|
upward: function ($menu) {
|
3545
|
-
|
3294
|
+
let $element = $menu || $module;
|
3546
3295
|
|
3547
3296
|
return $element.hasClass(className.upward);
|
3548
3297
|
},
|
@@ -3552,20 +3301,16 @@
|
|
3552
3301
|
: $menu.hasClass(className.visible);
|
3553
3302
|
},
|
3554
3303
|
verticallyScrollableContext: function () {
|
3555
|
-
|
3556
|
-
|
3557
|
-
|
3558
|
-
: false
|
3559
|
-
;
|
3304
|
+
let overflowY = $context[0] !== window
|
3305
|
+
? $context.css('overflow-y')
|
3306
|
+
: false;
|
3560
3307
|
|
3561
3308
|
return overflowY === 'auto' || overflowY === 'scroll';
|
3562
3309
|
},
|
3563
3310
|
horizontallyScrollableContext: function () {
|
3564
|
-
|
3565
|
-
|
3566
|
-
|
3567
|
-
: false
|
3568
|
-
;
|
3311
|
+
let overflowX = $context[0] !== window
|
3312
|
+
? $context.css('overflow-X')
|
3313
|
+
: false;
|
3569
3314
|
|
3570
3315
|
return overflowX === 'auto' || overflowX === 'scroll';
|
3571
3316
|
},
|
@@ -3580,15 +3325,12 @@
|
|
3580
3325
|
);
|
3581
3326
|
},
|
3582
3327
|
openDownward: function ($subMenu) {
|
3583
|
-
|
3584
|
-
|
3585
|
-
|
3586
|
-
|
3587
|
-
calculations
|
3588
|
-
;
|
3328
|
+
let $currentMenu = $subMenu || $menu;
|
3329
|
+
let canOpenDownward;
|
3330
|
+
let onScreen;
|
3331
|
+
let calculations;
|
3589
3332
|
$currentMenu
|
3590
|
-
.addClass(className.loading)
|
3591
|
-
;
|
3333
|
+
.addClass(className.loading);
|
3592
3334
|
calculations = {
|
3593
3335
|
context: {
|
3594
3336
|
offset: $context[0] === window
|
@@ -3627,15 +3369,12 @@
|
|
3627
3369
|
return canOpenDownward;
|
3628
3370
|
},
|
3629
3371
|
openRightward: function ($subMenu) {
|
3630
|
-
|
3631
|
-
|
3632
|
-
|
3633
|
-
|
3634
|
-
calculations
|
3635
|
-
;
|
3372
|
+
let $currentMenu = $subMenu || $menu;
|
3373
|
+
let canOpenRightward = true;
|
3374
|
+
let isOffscreenRight = false;
|
3375
|
+
let calculations;
|
3636
3376
|
$currentMenu
|
3637
|
-
.addClass(className.loading)
|
3638
|
-
;
|
3377
|
+
.addClass(className.loading);
|
3639
3378
|
calculations = {
|
3640
3379
|
context: {
|
3641
3380
|
offset: $context[0] === window
|
@@ -3682,17 +3421,15 @@
|
|
3682
3421
|
|
3683
3422
|
animate: {
|
3684
3423
|
show: function (callback, $subMenu) {
|
3685
|
-
|
3686
|
-
|
3687
|
-
|
3688
|
-
|
3689
|
-
|
3690
|
-
|
3691
|
-
|
3692
|
-
|
3693
|
-
|
3694
|
-
transition
|
3695
|
-
;
|
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;
|
3696
3433
|
callback = isFunction(callback)
|
3697
3434
|
? callback
|
3698
3435
|
: function () {};
|
@@ -3723,22 +3460,19 @@
|
|
3723
3460
|
onComplete: function () {
|
3724
3461
|
callback.call(element);
|
3725
3462
|
},
|
3726
|
-
})
|
3727
|
-
;
|
3463
|
+
});
|
3728
3464
|
}
|
3729
3465
|
}
|
3730
3466
|
},
|
3731
3467
|
hide: function (callback, $subMenu) {
|
3732
|
-
|
3733
|
-
|
3734
|
-
|
3735
|
-
|
3736
|
-
|
3737
|
-
|
3738
|
-
|
3739
|
-
|
3740
|
-
transition = settings.transition.hideMethod || module.get.transition($subMenu)
|
3741
|
-
;
|
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);
|
3742
3476
|
callback = isFunction(callback)
|
3743
3477
|
? callback
|
3744
3478
|
: function () {};
|
@@ -3765,8 +3499,7 @@
|
|
3765
3499
|
onComplete: function () {
|
3766
3500
|
callback.call(element);
|
3767
3501
|
},
|
3768
|
-
})
|
3769
|
-
;
|
3502
|
+
});
|
3770
3503
|
} else {
|
3771
3504
|
module.error(error.transition);
|
3772
3505
|
}
|
@@ -3807,13 +3540,11 @@
|
|
3807
3540
|
|
3808
3541
|
escape: {
|
3809
3542
|
value: function (value) {
|
3810
|
-
|
3811
|
-
|
3812
|
-
|
3813
|
-
|
3814
|
-
|
3815
|
-
values = []
|
3816
|
-
;
|
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 = [];
|
3817
3548
|
if (isUnparsable || !hasQuotes) {
|
3818
3549
|
return value;
|
3819
3550
|
}
|
@@ -3835,25 +3566,19 @@
|
|
3835
3566
|
},
|
3836
3567
|
htmlEntities: function (string, forceAmpersand) {
|
3837
3568
|
forceAmpersand = typeof forceAmpersand === 'number' ? false : forceAmpersand;
|
3838
|
-
var
|
3839
|
-
badChars = /["'<>]/g,
|
3840
|
-
shouldEscape = /["&'<>]/,
|
3841
|
-
escape = {
|
3842
|
-
'<': '<',
|
3843
|
-
'>': '>',
|
3844
|
-
'"': '"',
|
3845
|
-
"'": ''',
|
3846
|
-
},
|
3847
|
-
escapedChar = function (chr) {
|
3848
|
-
return escape[chr];
|
3849
|
-
}
|
3850
|
-
;
|
3851
|
-
if (shouldEscape.test(string)) {
|
3852
|
-
string = string.replace(forceAmpersand ? /&/g : /&(?![\d#a-z]{1,12};)/gi, '&');
|
3853
|
-
string = string.replace(badChars, escapedChar);
|
3854
|
-
}
|
3855
3569
|
|
3856
|
-
|
3570
|
+
const badChars = forceAmpersand
|
3571
|
+
? /["&'<>]/g
|
3572
|
+
: /["'<>]|&(?![\d#A-Za-z]{1,12};)/g;
|
3573
|
+
const escape = {
|
3574
|
+
'"': '"',
|
3575
|
+
'&': '&',
|
3576
|
+
"'": ''',
|
3577
|
+
'<': '<',
|
3578
|
+
'>': '>',
|
3579
|
+
};
|
3580
|
+
|
3581
|
+
return string.replace(badChars, (chr) => escape[chr]);
|
3857
3582
|
},
|
3858
3583
|
},
|
3859
3584
|
|
@@ -3908,11 +3633,9 @@
|
|
3908
3633
|
},
|
3909
3634
|
performance: {
|
3910
3635
|
log: function (message) {
|
3911
|
-
|
3912
|
-
|
3913
|
-
|
3914
|
-
previousTime
|
3915
|
-
;
|
3636
|
+
let currentTime;
|
3637
|
+
let executionTime;
|
3638
|
+
let previousTime;
|
3916
3639
|
if (settings.performance) {
|
3917
3640
|
currentTime = Date.now();
|
3918
3641
|
previousTime = time || currentTime;
|
@@ -3931,10 +3654,8 @@
|
|
3931
3654
|
}, 500);
|
3932
3655
|
},
|
3933
3656
|
display: function () {
|
3934
|
-
|
3935
|
-
|
3936
|
-
totalTime = 0
|
3937
|
-
;
|
3657
|
+
let title = settings.name + ':';
|
3658
|
+
let totalTime = 0;
|
3938
3659
|
time = false;
|
3939
3660
|
clearTimeout(module.performance.timer);
|
3940
3661
|
$.each(performance, function (index, data) {
|
@@ -3956,22 +3677,19 @@
|
|
3956
3677
|
},
|
3957
3678
|
},
|
3958
3679
|
invoke: function (query, passedArguments, context) {
|
3959
|
-
|
3960
|
-
|
3961
|
-
|
3962
|
-
|
3963
|
-
response
|
3964
|
-
;
|
3680
|
+
let object = instance;
|
3681
|
+
let maxDepth;
|
3682
|
+
let found;
|
3683
|
+
let response;
|
3965
3684
|
passedArguments = passedArguments || queryArguments;
|
3966
3685
|
context = context || element;
|
3967
3686
|
if (typeof query === 'string' && object !== undefined) {
|
3968
3687
|
query = query.split(/[ .]/);
|
3969
3688
|
maxDepth = query.length - 1;
|
3970
3689
|
$.each(query, function (depth, value) {
|
3971
|
-
|
3690
|
+
let camelCaseValue = depth !== maxDepth
|
3972
3691
|
? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
|
3973
|
-
: query
|
3974
|
-
;
|
3692
|
+
: query;
|
3975
3693
|
if ($.isPlainObject(object[camelCaseValue]) && (depth !== maxDepth)) {
|
3976
3694
|
object = object[camelCaseValue];
|
3977
3695
|
} else if (object[camelCaseValue] !== undefined) {
|
@@ -4263,34 +3981,24 @@
|
|
4263
3981
|
if (settings !== undefined && settings.preserveHTML) {
|
4264
3982
|
return string;
|
4265
3983
|
}
|
4266
|
-
var
|
4267
|
-
badChars = /["'<>]/g,
|
4268
|
-
shouldEscape = /["&'<>]/,
|
4269
|
-
escape = {
|
4270
|
-
'<': '<',
|
4271
|
-
'>': '>',
|
4272
|
-
'"': '"',
|
4273
|
-
"'": ''',
|
4274
|
-
},
|
4275
|
-
escapedChar = function (chr) {
|
4276
|
-
return escape[chr];
|
4277
|
-
}
|
4278
|
-
;
|
4279
|
-
if (shouldEscape.test(string)) {
|
4280
|
-
string = string.replace(/&(?![\d#a-z]{1,12};)/gi, '&');
|
4281
|
-
string = string.replace(badChars, escapedChar);
|
4282
|
-
}
|
4283
3984
|
|
4284
|
-
|
3985
|
+
const badChars = /["'<>]|&(?![\d#A-Za-z]{1,12};)/g;
|
3986
|
+
const escape = {
|
3987
|
+
'"': '"',
|
3988
|
+
'&': '&',
|
3989
|
+
"'": ''',
|
3990
|
+
'<': '<',
|
3991
|
+
'>': '>',
|
3992
|
+
};
|
3993
|
+
|
3994
|
+
return string.replace(badChars, (chr) => escape[chr]);
|
4285
3995
|
},
|
4286
3996
|
// generates dropdown from select values
|
4287
3997
|
dropdown: function (select, settings) {
|
4288
|
-
|
4289
|
-
|
4290
|
-
|
4291
|
-
|
4292
|
-
escape = settings.templates.escape
|
4293
|
-
;
|
3998
|
+
let placeholder = select.placeholder || false;
|
3999
|
+
let html = '';
|
4000
|
+
let className = settings.className;
|
4001
|
+
let escape = settings.templates.escape;
|
4294
4002
|
html += '<i class="dropdown icon"></i>';
|
4295
4003
|
html += placeholder
|
4296
4004
|
? '<div class="default text">' + escape(placeholder, settings) + '</div>'
|
@@ -4304,24 +4012,19 @@
|
|
4304
4012
|
|
4305
4013
|
// generates just menu from select
|
4306
4014
|
menu: function (response, settings) {
|
4307
|
-
|
4308
|
-
|
4309
|
-
|
4310
|
-
|
4311
|
-
|
4312
|
-
escape = settings.templates.escape
|
4313
|
-
;
|
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;
|
4314
4020
|
$.each(values, function (index, option) {
|
4315
|
-
|
4316
|
-
|
4317
|
-
|
4318
|
-
|
4319
|
-
dataObject = option[fields.data]
|
4320
|
-
;
|
4021
|
+
let itemType = option[fields.type] || 'item';
|
4022
|
+
let isMenu = itemType.indexOf('menu') !== -1;
|
4023
|
+
let maybeData = '';
|
4024
|
+
let dataObject = option[fields.data];
|
4321
4025
|
if (dataObject) {
|
4322
|
-
|
4323
|
-
|
4324
|
-
;
|
4026
|
+
let dataKey;
|
4027
|
+
let dataKeyEscaped;
|
4325
4028
|
for (dataKey in dataObject) {
|
4326
4029
|
dataKeyEscaped = String(dataKey).replace(/\W/g, '');
|
4327
4030
|
if (Object.prototype.hasOwnProperty.call(dataObject, dataKey) && ['text', 'value'].indexOf(dataKeyEscaped.toLowerCase()) === -1) {
|
@@ -4330,21 +4033,19 @@
|
|
4330
4033
|
}
|
4331
4034
|
}
|
4332
4035
|
if (itemType === 'item' || isMenu) {
|
4333
|
-
|
4334
|
-
|
4335
|
-
|
4336
|
-
|
4337
|
-
|
4338
|
-
|
4339
|
-
|
4340
|
-
|
4341
|
-
|
4342
|
-
|
4343
|
-
|
4344
|
-
|
4345
|
-
|
4346
|
-
hasDescription = escape(option[fields.description] || '', settings) !== ''
|
4347
|
-
;
|
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) !== '';
|
4348
4049
|
html += '<div class="' + escape(maybeActionable + maybeDisabled + maybeDescriptionVertical + (option[fields.class] || className.item)) + '" data-value="' + escape(option[fields.value]) + '"' + maybeText + maybeData + '>';
|
4349
4050
|
if (isMenu) {
|
4350
4051
|
html += '<i class="' + (itemType.indexOf('left') !== -1 ? 'left' : '') + ' dropdown icon"></i>';
|
@@ -4373,10 +4074,8 @@
|
|
4373
4074
|
}
|
4374
4075
|
html += '</div>';
|
4375
4076
|
} else if (itemType === 'header') {
|
4376
|
-
|
4377
|
-
|
4378
|
-
groupIcon = option[fields.icon] || className.groupIcon
|
4379
|
-
;
|
4077
|
+
let groupName = option[fields.name] || '';
|
4078
|
+
let groupIcon = option[fields.icon] || className.groupIcon;
|
4380
4079
|
if (groupName !== '' || groupIcon !== '') {
|
4381
4080
|
html += '<div class="' + escape(option[fields.class] || className.header) + '">';
|
4382
4081
|
if (groupIcon !== '') {
|
@@ -4396,10 +4095,8 @@
|
|
4396
4095
|
|
4397
4096
|
// generates label for multiselect
|
4398
4097
|
label: function (value, text, settings) {
|
4399
|
-
|
4400
|
-
|
4401
|
-
escape = settings.templates.escape
|
4402
|
-
;
|
4098
|
+
let className = settings.className;
|
4099
|
+
let escape = settings.templates.escape;
|
4403
4100
|
|
4404
4101
|
return escape(text, settings) + '<i class="' + escape(className.delete) + ' icon"></i>';
|
4405
4102
|
},
|