fomantic-ui 2.10.0-beta.0 → 2.10.0-beta.10
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/.all-contributorsrc +9 -0
- package/.eslintrc.js +0 -10
- package/.github/workflows/ci.yml +3 -3
- package/CONTRIBUTING.md +4 -1
- package/CONTRIBUTORS.md +1 -0
- package/FAQ.md +7 -2
- package/README.md +5 -9
- package/ROADMAP.md +4 -4
- package/SECURITY.md +8 -7
- package/changelog-setup.js +64 -70
- package/dist/components/accordion.css +1 -1
- package/dist/components/accordion.js +103 -142
- 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 +157 -210
- 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 -2
- package/dist/components/button.min.css +2 -2
- package/dist/components/calendar.css +1 -2
- package/dist/components/calendar.js +314 -352
- package/dist/components/calendar.min.css +2 -2
- 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 -2
- package/dist/components/checkbox.js +85 -135
- package/dist/components/checkbox.min.css +2 -2
- 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 +2 -4
- package/dist/components/container.min.css +2 -2
- package/dist/components/dimmer.css +1 -11
- package/dist/components/dimmer.js +61 -94
- package/dist/components/dimmer.min.css +2 -2
- package/dist/components/dimmer.min.js +2 -2
- package/dist/components/divider.css +1 -2
- package/dist/components/divider.min.css +2 -2
- package/dist/components/dropdown.css +30 -51
- package/dist/components/dropdown.js +736 -1055
- package/dist/components/dropdown.min.css +2 -2
- package/dist/components/dropdown.min.js +2 -2
- package/dist/components/embed.css +1 -1
- package/dist/components/embed.js +85 -114
- package/dist/components/embed.min.css +1 -1
- package/dist/components/embed.min.js +2 -2
- package/dist/components/emoji.css +3809 -7617
- package/dist/components/emoji.min.css +2 -2
- 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 +2 -3
- package/dist/components/flyout.js +226 -355
- package/dist/components/flyout.min.css +2 -2
- package/dist/components/flyout.min.js +2 -2
- package/dist/components/form.css +5 -95
- package/dist/components/form.js +335 -444
- package/dist/components/form.min.css +2 -2
- package/dist/components/form.min.js +2 -2
- package/dist/components/grid.css +2 -58
- package/dist/components/grid.min.css +2 -2
- package/dist/components/header.css +1 -1
- package/dist/components/header.min.css +1 -1
- package/dist/components/icon.css +4 -4
- package/dist/components/icon.min.css +2 -2
- package/dist/components/image.css +1 -1
- package/dist/components/image.min.css +1 -1
- package/dist/components/input.css +1 -536
- package/dist/components/input.min.css +2 -2
- 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 -3
- package/dist/components/list.min.css +2 -2
- package/dist/components/loader.css +1 -1
- package/dist/components/loader.min.css +1 -1
- package/dist/components/menu.css +1 -9
- package/dist/components/menu.min.css +2 -2
- package/dist/components/message.css +1 -1
- package/dist/components/message.min.css +1 -1
- package/dist/components/modal.css +5 -9
- package/dist/components/modal.js +261 -384
- package/dist/components/modal.min.css +2 -2
- package/dist/components/modal.min.js +2 -2
- package/dist/components/nag.css +1 -1
- package/dist/components/nag.js +68 -98
- 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 -2
- package/dist/components/popup.js +198 -271
- package/dist/components/popup.min.css +2 -2
- package/dist/components/popup.min.js +2 -2
- package/dist/components/progress.css +1 -1
- package/dist/components/progress.js +109 -144
- 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 +91 -123
- 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 +2 -9
- package/dist/components/search.js +277 -379
- package/dist/components/search.min.css +2 -2
- package/dist/components/search.min.js +2 -2
- package/dist/components/segment.css +2 -7
- package/dist/components/segment.min.css +2 -2
- package/dist/components/shape.css +1 -2
- package/dist/components/shape.js +158 -224
- package/dist/components/shape.min.css +2 -2
- package/dist/components/shape.min.js +2 -2
- package/dist/components/sidebar.css +2 -3
- package/dist/components/sidebar.js +124 -206
- package/dist/components/sidebar.min.css +2 -2
- package/dist/components/sidebar.min.js +2 -2
- package/dist/components/site.css +9 -25
- package/dist/components/site.js +38 -57
- package/dist/components/site.min.css +2 -2
- package/dist/components/site.min.js +2 -2
- package/dist/components/slider.css +1 -1
- package/dist/components/slider.js +246 -329
- package/dist/components/slider.min.css +1 -1
- package/dist/components/slider.min.js +2 -2
- package/dist/components/state.js +70 -100
- 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 +135 -180
- 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 +176 -244
- package/dist/components/tab.min.css +1 -1
- package/dist/components/tab.min.js +2 -2
- package/dist/components/table.css +3 -37
- package/dist/components/table.min.css +2 -2
- package/dist/components/text.css +1 -1
- package/dist/components/text.min.css +1 -1
- package/dist/components/toast.css +1 -3
- package/dist/components/toast.js +109 -147
- 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 +91 -146
- package/dist/components/transition.min.css +1 -1
- package/dist/components/transition.min.js +2 -2
- package/dist/components/visibility.js +146 -224
- package/dist/components/visibility.min.js +2 -2
- package/dist/semantic.css +3906 -8720
- package/dist/semantic.js +4397 -6155
- package/dist/semantic.min.css +2 -2
- package/dist/semantic.min.js +2 -2
- package/examples/assets/show-examples.js +2 -4
- package/gulpfile.js +5 -7
- package/package.json +20 -16
- package/scripts/nightly-version.js +7 -10
- package/src/README.md +3 -3
- package/src/definitions/behaviors/api.js +156 -209
- package/src/definitions/behaviors/form.js +334 -443
- package/src/definitions/behaviors/state.js +69 -99
- package/src/definitions/behaviors/visibility.js +145 -223
- package/src/definitions/collections/form.less +1 -13
- package/src/definitions/collections/grid.less +1 -61
- package/src/definitions/collections/menu.less +0 -11
- package/src/definitions/collections/table.less +1 -35
- package/src/definitions/elements/input.less +1 -61
- package/src/definitions/elements/segment.less +0 -6
- package/src/definitions/globals/site.js +37 -56
- package/src/definitions/globals/site.less +2 -18
- package/src/definitions/modules/accordion.js +102 -141
- package/src/definitions/modules/calendar.js +313 -351
- package/src/definitions/modules/checkbox.js +84 -134
- package/src/definitions/modules/dimmer.js +60 -93
- package/src/definitions/modules/dimmer.less +0 -9
- package/src/definitions/modules/dropdown.js +735 -1054
- package/src/definitions/modules/dropdown.less +31 -47
- package/src/definitions/modules/embed.js +84 -113
- package/src/definitions/modules/flyout.js +225 -354
- package/src/definitions/modules/modal.js +260 -383
- package/src/definitions/modules/modal.less +1 -1
- package/src/definitions/modules/nag.js +67 -97
- package/src/definitions/modules/popup.js +197 -270
- package/src/definitions/modules/progress.js +108 -143
- package/src/definitions/modules/rating.js +90 -122
- package/src/definitions/modules/search.js +276 -378
- package/src/definitions/modules/search.less +0 -3
- package/src/definitions/modules/shape.js +157 -223
- package/src/definitions/modules/sidebar.js +123 -205
- package/src/definitions/modules/slider.js +245 -328
- package/src/definitions/modules/slider.less +1 -1
- package/src/definitions/modules/sticky.js +134 -179
- package/src/definitions/modules/tab.js +175 -243
- package/src/definitions/modules/toast.js +108 -146
- package/src/definitions/modules/toast.less +1 -1
- package/src/definitions/modules/transition.js +90 -145
- package/src/theme.less +0 -13
- package/src/themes/basic/elements/icon.variables +1 -1
- package/src/themes/default/collections/grid.variables +0 -30
- package/src/themes/default/collections/table.variables +1 -5
- package/src/themes/default/elements/icon.variables +3 -3
- package/src/themes/default/globals/site.variables +8 -15
- package/src/themes/default/globals/variation.variables +1 -2
- package/src/themes/default/modules/dropdown.variables +1 -0
- package/src/themes/default/modules/slider.variables +1 -1
- package/src/themes/github/elements/icon.variables +1 -1
- package/src/themes/material/elements/icon.variables +1 -1
- package/tasks/README.md +1 -1
- package/tasks/admin/components/create.js +89 -122
- package/tasks/admin/components/init.js +34 -65
- package/tasks/admin/components/update.js +50 -61
- package/tasks/admin/distributions/create.js +71 -111
- package/tasks/admin/distributions/init.js +32 -63
- package/tasks/admin/distributions/update.js +49 -57
- package/tasks/admin/publish.js +1 -1
- package/tasks/admin/register.js +14 -19
- package/tasks/admin/release.js +2 -2
- package/tasks/build/assets.js +14 -18
- package/tasks/build/css.js +59 -68
- package/tasks/build/javascript.js +48 -56
- package/tasks/build.js +4 -6
- package/tasks/check-install.js +5 -8
- package/tasks/clean.js +5 -7
- package/tasks/collections/admin.js +14 -16
- package/tasks/collections/build.js +6 -8
- package/tasks/collections/docs.js +4 -6
- 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 +9 -19
- package/tasks/config/admin/templates/README.md +2 -2
- package/tasks/config/admin/templates/bower.json +2 -4
- package/tasks/config/admin/templates/composer.json +1 -1
- package/tasks/config/admin/templates/css-package.js +1 -4
- package/tasks/config/admin/templates/less-package.js +1 -3
- package/tasks/config/defaults.js +0 -1
- package/tasks/config/npm/gulpfile.js +4 -6
- package/tasks/config/project/config.js +27 -35
- package/tasks/config/project/install.js +64 -82
- package/tasks/config/project/release.js +7 -9
- package/tasks/config/tasks.js +16 -30
- package/tasks/config/user.js +14 -20
- package/tasks/docs/build.js +26 -31
- package/tasks/docs/metadata.js +30 -39
- package/tasks/docs/serve.js +23 -27
- package/tasks/install.js +94 -128
- package/tasks/rtl/build.js +2 -4
- package/tasks/rtl/watch.js +3 -5
- package/tasks/watch.js +13 -13
- package/test/meteor/fonts.js +1 -2
- package/test/modules/module.spec.js +16 -18
- package/types/fomantic-ui-calendar.d.ts +1 -1
- package/types/fomantic-ui-dropdown.d.ts +45 -1
- package/types/fomantic-ui-embed.d.ts +1 -1
- package/types/fomantic-ui-flyout.d.ts +1 -1
- package/types/fomantic-ui-form.d.ts +0 -7
- package/types/fomantic-ui-modal.d.ts +1 -1
- package/types/fomantic-ui-search.d.ts +12 -6
- package/types/fomantic-ui-toast.d.ts +1 -1
- package/src/themes/basic/assets/fonts/icons.woff +0 -0
- package/src/themes/default/assets/fonts/Lato-Bold.woff +0 -0
- package/src/themes/default/assets/fonts/Lato-BoldItalic.woff +0 -0
- package/src/themes/default/assets/fonts/Lato-Italic.woff +0 -0
- package/src/themes/default/assets/fonts/Lato-Regular.woff +0 -0
- package/src/themes/default/assets/fonts/LatoLatin-Bold.woff +0 -0
- package/src/themes/default/assets/fonts/LatoLatin-BoldItalic.woff +0 -0
- package/src/themes/default/assets/fonts/LatoLatin-Italic.woff +0 -0
- package/src/themes/default/assets/fonts/LatoLatin-Regular.woff +0 -0
- package/src/themes/default/assets/fonts/brand-icons.woff +0 -0
- package/src/themes/default/assets/fonts/icons.woff +0 -0
- package/src/themes/default/assets/fonts/outline-icons.woff +0 -0
- package/src/themes/github/assets/fonts/octicons.woff +0 -0
- package/src/themes/material/assets/fonts/icons.woff +0 -0
@@ -1,5 +1,5 @@
|
|
1
1
|
/*!
|
2
|
-
* # Fomantic-UI 2.10.0-beta.
|
2
|
+
* # Fomantic-UI 2.10.0-beta.10+3ca268e - 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
|
|
@@ -114,11 +110,6 @@
|
|
114
110
|
if (module.is.alreadySetup()) {
|
115
111
|
module.setup.reference();
|
116
112
|
} else {
|
117
|
-
if (settings.ignoreDiacritics && !String.prototype.normalize) {
|
118
|
-
settings.ignoreDiacritics = false;
|
119
|
-
module.error(error.noNormalize, element);
|
120
|
-
}
|
121
|
-
|
122
113
|
module.create.id();
|
123
114
|
module.setup.layout();
|
124
115
|
|
@@ -147,8 +138,7 @@
|
|
147
138
|
module.verbose('Storing instance of dropdown', module);
|
148
139
|
instance = module;
|
149
140
|
$module
|
150
|
-
.data(moduleNamespace, module)
|
151
|
-
;
|
141
|
+
.data(moduleNamespace, module);
|
152
142
|
},
|
153
143
|
|
154
144
|
destroy: function () {
|
@@ -159,29 +149,24 @@
|
|
159
149
|
$menu.removeClass(className.visible).addClass(className.hidden);
|
160
150
|
$module
|
161
151
|
.off(eventNamespace)
|
162
|
-
.removeData(moduleNamespace)
|
163
|
-
;
|
152
|
+
.removeData(moduleNamespace);
|
164
153
|
$menu
|
165
|
-
.off(eventNamespace)
|
166
|
-
;
|
154
|
+
.off(eventNamespace);
|
167
155
|
$document
|
168
|
-
.off(elementNamespace)
|
169
|
-
;
|
156
|
+
.off(elementNamespace);
|
170
157
|
module.disconnect.menuObserver();
|
171
158
|
module.disconnect.selectObserver();
|
172
159
|
module.disconnect.classObserver();
|
173
160
|
},
|
174
161
|
|
175
162
|
observeChanges: function () {
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
module.observe.class();
|
184
|
-
}
|
163
|
+
selectObserver = new MutationObserver(module.event.select.mutation);
|
164
|
+
menuObserver = new MutationObserver(module.event.menu.mutation);
|
165
|
+
classObserver = new MutationObserver(module.event.class.mutation);
|
166
|
+
module.debug('Setting up mutation observer', selectObserver, menuObserver, classObserver);
|
167
|
+
module.observe.select();
|
168
|
+
module.observe.menu();
|
169
|
+
module.observe.class();
|
185
170
|
},
|
186
171
|
|
187
172
|
disconnect: {
|
@@ -235,11 +220,9 @@
|
|
235
220
|
module.verbose('Creating unique id for element', id);
|
236
221
|
},
|
237
222
|
userChoice: function (values) {
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
html
|
242
|
-
;
|
223
|
+
let $userChoices;
|
224
|
+
let $userChoice;
|
225
|
+
let html;
|
243
226
|
values = values || module.get.userValues();
|
244
227
|
if (!values) {
|
245
228
|
return false;
|
@@ -255,8 +238,7 @@
|
|
255
238
|
.attr('data-' + metadata.value, value)
|
256
239
|
.attr('data-' + metadata.text, value)
|
257
240
|
.addClass(className.addition)
|
258
|
-
.addClass(className.item)
|
259
|
-
;
|
241
|
+
.addClass(className.item);
|
260
242
|
if (settings.hideAdditions) {
|
261
243
|
$userChoice.addClass(className.hidden);
|
262
244
|
}
|
@@ -270,9 +252,7 @@
|
|
270
252
|
return $userChoices;
|
271
253
|
},
|
272
254
|
userLabels: function (value) {
|
273
|
-
|
274
|
-
userValues = module.get.userValues()
|
275
|
-
;
|
255
|
+
let userValues = module.get.userValues();
|
276
256
|
if (userValues) {
|
277
257
|
module.debug('Adding user labels', userValues);
|
278
258
|
$.each(userValues, function (index, value) {
|
@@ -284,14 +264,12 @@
|
|
284
264
|
menu: function () {
|
285
265
|
$menu = $('<div />')
|
286
266
|
.addClass(className.menu)
|
287
|
-
.appendTo($module)
|
288
|
-
;
|
267
|
+
.appendTo($module);
|
289
268
|
},
|
290
269
|
sizer: function () {
|
291
270
|
$sizer = $('<span />')
|
292
271
|
.addClass(className.sizer)
|
293
|
-
.insertAfter($search)
|
294
|
-
;
|
272
|
+
.insertAfter($search);
|
295
273
|
},
|
296
274
|
},
|
297
275
|
|
@@ -317,16 +295,13 @@
|
|
317
295
|
.not(selector.unselectable)
|
318
296
|
.not(selector.addition + selector.hidden)
|
319
297
|
.eq(0)
|
320
|
-
.addClass(className.selected)
|
321
|
-
;
|
298
|
+
.addClass(className.selected);
|
322
299
|
},
|
323
300
|
nextAvailable: function ($selected) {
|
324
301
|
$selected = $selected.eq(0);
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
hasNext = $nextAvailable.length > 0
|
329
|
-
;
|
302
|
+
let $nextAvailable = $selected.nextAll(selector.item).not(selector.unselectable).eq(0);
|
303
|
+
let $prevAvailable = $selected.prevAll(selector.item).not(selector.unselectable).eq(0);
|
304
|
+
let hasNext = $nextAvailable.length > 0;
|
330
305
|
if (hasNext) {
|
331
306
|
module.verbose('Moving selection to', $nextAvailable);
|
332
307
|
$nextAvailable.addClass(className.selected);
|
@@ -339,20 +314,17 @@
|
|
339
314
|
|
340
315
|
setup: {
|
341
316
|
api: function () {
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
}
|
351
|
-
;
|
317
|
+
let apiSettings = {
|
318
|
+
debug: settings.debug,
|
319
|
+
urlData: {
|
320
|
+
value: module.get.value(),
|
321
|
+
query: module.get.query(),
|
322
|
+
},
|
323
|
+
on: false,
|
324
|
+
};
|
352
325
|
module.verbose('First request, initializing API');
|
353
326
|
$module
|
354
|
-
.api(apiSettings)
|
355
|
-
;
|
327
|
+
.api(apiSettings);
|
356
328
|
},
|
357
329
|
layout: function () {
|
358
330
|
if ($module.is('select')) {
|
@@ -366,18 +338,14 @@
|
|
366
338
|
module.verbose('Adding clear icon');
|
367
339
|
$clear = $('<i />')
|
368
340
|
.addClass('remove icon')
|
369
|
-
.insertAfter($icon)
|
370
|
-
;
|
341
|
+
.insertAfter($icon);
|
371
342
|
}
|
372
343
|
if (module.is.search() && !module.has.search()) {
|
373
344
|
module.verbose('Adding search input');
|
374
|
-
|
375
|
-
labelNode = $module.prev('label')
|
376
|
-
;
|
345
|
+
let labelNode = $module.prev('label');
|
377
346
|
$search = $('<input />')
|
378
347
|
.addClass(className.search)
|
379
|
-
.prop('autocomplete', module.is.chrome() ? 'fomantic-search' : 'off')
|
380
|
-
;
|
348
|
+
.prop('autocomplete', module.is.chrome() ? 'fomantic-search' : 'off');
|
381
349
|
if (labelNode.length > 0) {
|
382
350
|
if (!labelNode.attr('id')) {
|
383
351
|
labelNode.attr('id', '_' + module.get.id() + '_formLabel');
|
@@ -394,9 +362,7 @@
|
|
394
362
|
}
|
395
363
|
},
|
396
364
|
select: function () {
|
397
|
-
|
398
|
-
selectValues = module.get.selectValues()
|
399
|
-
;
|
365
|
+
let selectValues = module.get.selectValues();
|
400
366
|
module.debug('Dropdown initialized on a select', selectValues);
|
401
367
|
if ($module.is('select')) {
|
402
368
|
$input = $module;
|
@@ -416,9 +382,8 @@
|
|
416
382
|
.attr('class', $input.attr('class'))
|
417
383
|
.addClass(className.selection)
|
418
384
|
.addClass(className.dropdown)
|
419
|
-
.html(templates.dropdown(selectValues,
|
420
|
-
.insertBefore($input)
|
421
|
-
;
|
385
|
+
.html(templates.dropdown(selectValues, settings))
|
386
|
+
.insertBefore($input);
|
422
387
|
if ($input.hasClass(className.multiple) && $input.prop('multiple') === false) {
|
423
388
|
module.error(error.missingMultiple);
|
424
389
|
$input.prop('multiple', true);
|
@@ -440,13 +405,12 @@
|
|
440
405
|
.prop('required', false)
|
441
406
|
.removeAttr('class')
|
442
407
|
.detach()
|
443
|
-
.prependTo($module)
|
444
|
-
;
|
408
|
+
.prependTo($module);
|
445
409
|
}
|
446
410
|
module.refresh();
|
447
411
|
},
|
448
412
|
menu: function (values) {
|
449
|
-
$menu.html(templates.menu(values,
|
413
|
+
$menu.html(templates.menu(values, settings));
|
450
414
|
$item = $menu.find(selector.item);
|
451
415
|
$divider = settings.hideDividers ? $item.parent().children(selector.divider) : $();
|
452
416
|
},
|
@@ -460,11 +424,9 @@
|
|
460
424
|
module.setup.returnedObject();
|
461
425
|
},
|
462
426
|
returnedObject: function () {
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
;
|
467
|
-
// adjust all modules to use correct reference
|
427
|
+
let $firstModules = $allModules.slice(0, elementIndex);
|
428
|
+
let $lastModules = $allModules.slice(elementIndex + 1);
|
429
|
+
// adjust all modules to use the correct reference
|
468
430
|
$allModules = $firstModules.add($module).add($lastModules);
|
469
431
|
},
|
470
432
|
},
|
@@ -497,21 +459,18 @@
|
|
497
459
|
module.verbose('Refreshing cached metadata');
|
498
460
|
$item
|
499
461
|
.removeData(metadata.text)
|
500
|
-
.removeData(metadata.value)
|
501
|
-
;
|
462
|
+
.removeData(metadata.value);
|
502
463
|
},
|
503
464
|
|
504
465
|
clearData: function () {
|
505
466
|
module.verbose('Clearing metadata');
|
506
467
|
$item
|
507
468
|
.removeData(metadata.text)
|
508
|
-
.removeData(metadata.value)
|
509
|
-
;
|
469
|
+
.removeData(metadata.value);
|
510
470
|
$module
|
511
471
|
.removeData(metadata.defaultText)
|
512
472
|
.removeData(metadata.defaultValue)
|
513
|
-
.removeData(metadata.placeholderText)
|
514
|
-
;
|
473
|
+
.removeData(metadata.placeholderText);
|
515
474
|
},
|
516
475
|
|
517
476
|
clearItems: function () {
|
@@ -578,11 +537,11 @@
|
|
578
537
|
});
|
579
538
|
// Hide submenus explicitly. On some browsers (esp. mobile), they will not automatically receive a
|
580
539
|
// mouseleave event
|
581
|
-
|
540
|
+
let $subMenu = $module.find(selector.menu);
|
582
541
|
if ($subMenu.length > 0) {
|
583
542
|
module.verbose('Hiding sub-menu', $subMenu);
|
584
543
|
$subMenu.each(function () {
|
585
|
-
|
544
|
+
let $sub = $(this);
|
586
545
|
if (!module.is.animating($sub)) {
|
587
546
|
module.animate.hide(false, $sub);
|
588
547
|
}
|
@@ -601,8 +560,7 @@
|
|
601
560
|
$allModules
|
602
561
|
.not($module)
|
603
562
|
.has(selector.menu + '.' + className.visible)
|
604
|
-
.dropdown('hide')
|
605
|
-
;
|
563
|
+
.dropdown('hide');
|
606
564
|
},
|
607
565
|
|
608
566
|
hideMenu: function () {
|
@@ -613,9 +571,7 @@
|
|
613
571
|
},
|
614
572
|
|
615
573
|
hideSubMenus: function () {
|
616
|
-
|
617
|
-
$subMenus = $menu.children(selector.item).find(selector.menu)
|
618
|
-
;
|
574
|
+
let $subMenus = $menu.children(selector.item).find(selector.menu);
|
619
575
|
module.verbose('Hiding sub menus', $subMenus);
|
620
576
|
$subMenus.transition('hide');
|
621
577
|
},
|
@@ -629,28 +585,23 @@
|
|
629
585
|
keyboardEvents: function () {
|
630
586
|
module.verbose('Binding keyboard events');
|
631
587
|
$module
|
632
|
-
.on('keydown' + eventNamespace, module.event.keydown)
|
633
|
-
;
|
588
|
+
.on('keydown' + eventNamespace, module.event.keydown);
|
634
589
|
if (module.has.search()) {
|
635
590
|
$module
|
636
|
-
.on(module.get.inputEvent() + eventNamespace, selector.search, module.event.input)
|
637
|
-
;
|
591
|
+
.on(module.get.inputEvent() + eventNamespace, selector.search, module.event.input);
|
638
592
|
}
|
639
593
|
if (module.is.multiple()) {
|
640
594
|
$document
|
641
|
-
.on('keydown' + elementNamespace, module.event.document.keydown)
|
642
|
-
;
|
595
|
+
.on('keydown' + elementNamespace, module.event.document.keydown);
|
643
596
|
}
|
644
597
|
},
|
645
598
|
inputEvents: function () {
|
646
599
|
module.verbose('Binding input change events');
|
647
600
|
$module
|
648
|
-
.on('change' + eventNamespace, selector.input, module.event.change)
|
649
|
-
;
|
601
|
+
.on('change' + eventNamespace, selector.input, module.event.change);
|
650
602
|
if (module.is.multiple() && module.is.searchSelection()) {
|
651
603
|
$module
|
652
|
-
.on('paste' + eventNamespace, selector.search, module.event.paste)
|
653
|
-
;
|
604
|
+
.on('paste' + eventNamespace, selector.search, module.event.paste);
|
654
605
|
}
|
655
606
|
},
|
656
607
|
mouseEvents: function () {
|
@@ -658,8 +609,7 @@
|
|
658
609
|
if (module.is.multiple()) {
|
659
610
|
$module
|
660
611
|
.on('click' + eventNamespace, selector.label, module.event.label.click)
|
661
|
-
.on('click' + eventNamespace, selector.remove, module.event.remove.click)
|
662
|
-
;
|
612
|
+
.on('click' + eventNamespace, selector.remove, module.event.remove.click);
|
663
613
|
}
|
664
614
|
if (module.is.searchSelection()) {
|
665
615
|
$module
|
@@ -672,60 +622,50 @@
|
|
672
622
|
.on('focus' + eventNamespace, selector.search, module.event.search.focus)
|
673
623
|
.on('click' + eventNamespace, selector.search, module.event.search.focus)
|
674
624
|
.on('blur' + eventNamespace, selector.search, module.event.search.blur)
|
675
|
-
.on('click' + eventNamespace, selector.text, module.event.text.focus)
|
676
|
-
;
|
625
|
+
.on('click' + eventNamespace, selector.text, module.event.text.focus);
|
677
626
|
if (module.is.multiple()) {
|
678
627
|
$module
|
679
628
|
.on('click' + eventNamespace, module.event.click)
|
680
|
-
.on('click' + eventNamespace, module.event.search.focus)
|
681
|
-
;
|
629
|
+
.on('click' + eventNamespace, module.event.search.focus);
|
682
630
|
}
|
683
631
|
} else {
|
684
632
|
if (settings.on === 'click') {
|
685
633
|
$module
|
686
634
|
.on('click' + eventNamespace, selector.icon, module.event.icon.click)
|
687
|
-
.on('click' + eventNamespace, module.event.test.toggle)
|
688
|
-
;
|
635
|
+
.on('click' + eventNamespace, module.event.test.toggle);
|
689
636
|
} else if (settings.on === 'hover') {
|
690
637
|
$module
|
691
638
|
.on('mouseenter' + eventNamespace, module.delay.show)
|
692
639
|
.on('mouseleave' + eventNamespace, module.delay.hide)
|
693
640
|
.on('touchstart' + eventNamespace, module.event.test.toggle)
|
694
|
-
.on('touchstart' + eventNamespace, selector.icon, module.event.icon.click)
|
695
|
-
;
|
641
|
+
.on('touchstart' + eventNamespace, selector.icon, module.event.icon.click);
|
696
642
|
} else {
|
697
643
|
$module
|
698
|
-
.on(settings.on + eventNamespace, module.toggle)
|
699
|
-
;
|
644
|
+
.on(settings.on + eventNamespace, module.toggle);
|
700
645
|
}
|
701
646
|
$module
|
702
647
|
.on('mousedown' + eventNamespace, module.event.mousedown)
|
703
648
|
.on('mouseup' + eventNamespace, module.event.mouseup)
|
704
649
|
.on('focus' + eventNamespace, module.event.focus)
|
705
|
-
.on('click' + eventNamespace, selector.clearIcon, module.event.clearIcon.click)
|
706
|
-
;
|
650
|
+
.on('click' + eventNamespace, selector.clearIcon, module.event.clearIcon.click);
|
707
651
|
if (module.has.menuSearch()) {
|
708
652
|
$module
|
709
|
-
.on('blur' + eventNamespace, selector.search, module.event.search.blur)
|
710
|
-
;
|
653
|
+
.on('blur' + eventNamespace, selector.search, module.event.search.blur);
|
711
654
|
} else {
|
712
655
|
$module
|
713
|
-
.on('blur' + eventNamespace, module.event.blur)
|
714
|
-
;
|
656
|
+
.on('blur' + eventNamespace, module.event.blur);
|
715
657
|
}
|
716
658
|
}
|
717
659
|
$menu
|
718
660
|
.on('mouseenter' + eventNamespace, selector.item, module.event.item.mouseenter)
|
719
661
|
.on('touchstart' + eventNamespace, selector.item, module.event.item.mouseenter)
|
720
662
|
.on('mouseleave' + eventNamespace, selector.item, module.event.item.mouseleave)
|
721
|
-
.on('click' + eventNamespace, selector.item, module.event.item.click)
|
722
|
-
;
|
663
|
+
.on('click' + eventNamespace, selector.item, module.event.item.click);
|
723
664
|
},
|
724
665
|
intent: function () {
|
725
666
|
module.verbose('Binding hide intent event to document');
|
726
667
|
$document
|
727
|
-
.on('click' + elementNamespace, module.event.test.hide)
|
728
|
-
;
|
668
|
+
.on('click' + elementNamespace, module.event.test.hide);
|
729
669
|
},
|
730
670
|
},
|
731
671
|
|
@@ -733,52 +673,49 @@
|
|
733
673
|
intent: function () {
|
734
674
|
module.verbose('Removing hide intent event from document');
|
735
675
|
$document
|
736
|
-
.off('click' + elementNamespace)
|
737
|
-
;
|
676
|
+
.off('click' + elementNamespace);
|
738
677
|
},
|
739
678
|
},
|
740
679
|
|
741
680
|
filter: function (query) {
|
742
|
-
|
743
|
-
|
744
|
-
|
745
|
-
|
746
|
-
|
747
|
-
|
748
|
-
|
749
|
-
|
750
|
-
|
751
|
-
|
752
|
-
|
753
|
-
if (
|
754
|
-
if (settings.
|
755
|
-
if (settings.
|
756
|
-
|
757
|
-
|
758
|
-
|
759
|
-
module.hideMenu();
|
760
|
-
}
|
761
|
-
} else {
|
762
|
-
module.verbose('All items filtered, showing message', searchTerm);
|
763
|
-
module.add.message(message.noResults);
|
681
|
+
let searchTerm = query !== undefined
|
682
|
+
? query
|
683
|
+
: module.get.query();
|
684
|
+
let afterFiltered = function () {
|
685
|
+
if (module.is.multiple()) {
|
686
|
+
module.filterActive();
|
687
|
+
}
|
688
|
+
if (query || (!query && module.get.activeItem().length === 0)) {
|
689
|
+
module.select.firstUnfiltered();
|
690
|
+
}
|
691
|
+
if (module.has.allResultsFiltered()) {
|
692
|
+
if (settings.onNoResults.call(element, searchTerm)) {
|
693
|
+
if (settings.allowAdditions) {
|
694
|
+
if (settings.hideAdditions) {
|
695
|
+
module.verbose('User addition with no menu, setting empty style');
|
696
|
+
module.set.empty();
|
697
|
+
module.hideMenu();
|
764
698
|
}
|
765
699
|
} else {
|
766
|
-
module.verbose('All items filtered,
|
767
|
-
module.
|
768
|
-
module.hideMenu();
|
700
|
+
module.verbose('All items filtered, showing message', searchTerm);
|
701
|
+
module.add.message(message.noResults);
|
769
702
|
}
|
770
703
|
} else {
|
771
|
-
module.
|
772
|
-
module.
|
773
|
-
|
774
|
-
if (settings.allowAdditions) {
|
775
|
-
module.add.userSuggestion(module.escape.htmlEntities(query));
|
776
|
-
}
|
777
|
-
if (module.is.searchSelection() && module.can.show() && module.is.focusedOnSearch() && !module.is.empty()) {
|
778
|
-
module.show();
|
704
|
+
module.verbose('All items filtered, hiding dropdown', searchTerm);
|
705
|
+
module.set.empty();
|
706
|
+
module.hideMenu();
|
779
707
|
}
|
708
|
+
} else {
|
709
|
+
module.remove.empty();
|
710
|
+
module.remove.message();
|
780
711
|
}
|
781
|
-
|
712
|
+
if (settings.allowAdditions) {
|
713
|
+
module.add.userSuggestion(module.escape.htmlEntities(query));
|
714
|
+
}
|
715
|
+
if (module.is.searchSelection() && module.can.show() && module.is.focusedOnSearch() && !module.is.empty()) {
|
716
|
+
module.show();
|
717
|
+
}
|
718
|
+
};
|
782
719
|
if (settings.useLabels && module.has.maxSelections()) {
|
783
720
|
module.show();
|
784
721
|
|
@@ -790,15 +727,14 @@
|
|
790
727
|
if (settings.filterRemoteData) {
|
791
728
|
module.filterItems(searchTerm);
|
792
729
|
}
|
793
|
-
|
730
|
+
let preSelected = $input.val();
|
794
731
|
if (!Array.isArray(preSelected)) {
|
795
732
|
preSelected = preSelected && preSelected !== '' ? preSelected.split(settings.delimiter) : [];
|
796
733
|
}
|
797
734
|
if (module.is.multiple()) {
|
798
735
|
$.each(preSelected, function (index, value) {
|
799
|
-
$item.filter('[data-' + metadata.value + '="' + value + '"]')
|
800
|
-
.addClass(className.filtered)
|
801
|
-
;
|
736
|
+
$item.filter('[data-' + metadata.value + '="' + CSS.escape(value) + '"]')
|
737
|
+
.addClass(className.filtered);
|
802
738
|
});
|
803
739
|
}
|
804
740
|
module.focusSearch(true);
|
@@ -817,88 +753,81 @@
|
|
817
753
|
if (!Array.isArray(callbackParameters)) {
|
818
754
|
callbackParameters = [callbackParameters];
|
819
755
|
}
|
820
|
-
|
821
|
-
|
822
|
-
|
823
|
-
|
824
|
-
|
825
|
-
|
826
|
-
query: query,
|
827
|
-
},
|
756
|
+
let apiSettings = {
|
757
|
+
errorDuration: false,
|
758
|
+
cache: 'local',
|
759
|
+
throttle: settings.throttle,
|
760
|
+
urlData: {
|
761
|
+
query: query,
|
828
762
|
},
|
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
|
-
|
854
|
-
|
855
|
-
|
856
|
-
|
857
|
-
|
858
|
-
module.setup.menu(menuConfig);
|
763
|
+
};
|
764
|
+
let apiCallbacks = {
|
765
|
+
onError: function (errorMessage, $module, xhr) {
|
766
|
+
module.add.message(message.serverError);
|
767
|
+
iconClicked = false;
|
768
|
+
focused = false;
|
769
|
+
callback.apply(null, callbackParameters);
|
770
|
+
if (typeof settings.apiSettings.onError === 'function') {
|
771
|
+
settings.apiSettings.onError.call(this, errorMessage, $module, xhr);
|
772
|
+
}
|
773
|
+
},
|
774
|
+
onFailure: function (response, $module, xhr) {
|
775
|
+
module.add.message(message.serverError);
|
776
|
+
iconClicked = false;
|
777
|
+
focused = false;
|
778
|
+
callback.apply(null, callbackParameters);
|
779
|
+
if (typeof settings.apiSettings.onFailure === 'function') {
|
780
|
+
settings.apiSettings.onFailure.call(this, response, $module, xhr);
|
781
|
+
}
|
782
|
+
},
|
783
|
+
onSuccess: function (response, $module, xhr) {
|
784
|
+
let values = response[fields.remoteValues];
|
785
|
+
if (!Array.isArray(values)) {
|
786
|
+
values = [];
|
787
|
+
}
|
788
|
+
module.remove.message();
|
789
|
+
let menuConfig = {};
|
790
|
+
menuConfig[fields.values] = values;
|
791
|
+
module.setup.menu(menuConfig);
|
859
792
|
|
860
|
-
|
861
|
-
|
862
|
-
|
863
|
-
|
864
|
-
|
865
|
-
|
866
|
-
|
867
|
-
}
|
868
|
-
}
|
869
|
-
iconClicked = false;
|
870
|
-
focused = false;
|
871
|
-
callback.apply(null, callbackParameters);
|
872
|
-
if (typeof settings.apiSettings.onSuccess === 'function') {
|
873
|
-
settings.apiSettings.onSuccess.call(this, response, $module, xhr);
|
793
|
+
if (values.length === 0 && !settings.allowAdditions) {
|
794
|
+
module.add.message(message.noResults);
|
795
|
+
} else {
|
796
|
+
let value = module.is.multiple() ? module.get.values() : module.get.value();
|
797
|
+
if (value !== '') {
|
798
|
+
module.verbose('Value(s) present after click icon, select value(s) in items');
|
799
|
+
module.set.selected(value, null, true, true);
|
874
800
|
}
|
875
|
-
}
|
876
|
-
|
877
|
-
|
801
|
+
}
|
802
|
+
iconClicked = false;
|
803
|
+
focused = false;
|
804
|
+
callback.apply(null, callbackParameters);
|
805
|
+
if (typeof settings.apiSettings.onSuccess === 'function') {
|
806
|
+
settings.apiSettings.onSuccess.call(this, response, $module, xhr);
|
807
|
+
}
|
808
|
+
},
|
809
|
+
};
|
878
810
|
if (!$module.api('get request')) {
|
879
811
|
module.setup.api();
|
880
812
|
}
|
881
813
|
apiSettings = $.extend(true, {}, apiSettings, settings.apiSettings, apiCallbacks, tempDisableApiCache ? { cache: false } : {});
|
882
814
|
$module
|
883
815
|
.api('setting', apiSettings)
|
884
|
-
.api('query')
|
885
|
-
;
|
816
|
+
.api('query');
|
886
817
|
tempDisableApiCache = false;
|
887
818
|
},
|
888
819
|
|
889
820
|
filterItems: function (query) {
|
890
|
-
|
891
|
-
|
892
|
-
query
|
893
|
-
|
894
|
-
|
895
|
-
|
896
|
-
|
897
|
-
|
898
|
-
|
899
|
-
|
900
|
-
beginsWithRegExp = new RegExp('^' + escapedTerm, regExpFlags)
|
901
|
-
;
|
821
|
+
let searchTerm = module.remove.diacritics(
|
822
|
+
query !== undefined
|
823
|
+
? query
|
824
|
+
: module.get.query()
|
825
|
+
);
|
826
|
+
let results = null;
|
827
|
+
let escapedTerm = module.escape.string(searchTerm);
|
828
|
+
let regExpIgnore = settings.ignoreSearchCase ? 'i' : '';
|
829
|
+
let regExpFlags = regExpIgnore + 'gm';
|
830
|
+
let beginsWithRegExp = new RegExp('^' + escapedTerm, regExpFlags);
|
902
831
|
module.remove.filteredItem();
|
903
832
|
// avoid loop if we're matching nothing
|
904
833
|
if (module.has.query()) {
|
@@ -907,11 +836,9 @@
|
|
907
836
|
module.verbose('Searching for matching values', searchTerm);
|
908
837
|
$item
|
909
838
|
.each(function () {
|
910
|
-
|
911
|
-
|
912
|
-
|
913
|
-
value
|
914
|
-
;
|
839
|
+
let $choice = $(this);
|
840
|
+
let text;
|
841
|
+
let value;
|
915
842
|
if ($choice.hasClass(className.unfilterable)) {
|
916
843
|
results.push(this);
|
917
844
|
|
@@ -939,32 +866,28 @@
|
|
939
866
|
return true;
|
940
867
|
}
|
941
868
|
}
|
942
|
-
})
|
943
|
-
;
|
869
|
+
});
|
944
870
|
}
|
945
871
|
module.debug('Showing only matched items', searchTerm);
|
946
872
|
if (results) {
|
947
873
|
$item
|
948
874
|
.not(results)
|
949
|
-
.addClass(className.filtered)
|
950
|
-
;
|
875
|
+
.addClass(className.filtered);
|
951
876
|
if (settings.highlightMatches && (settings.match === 'both' || settings.match === 'text')) {
|
952
|
-
|
953
|
-
|
954
|
-
|
955
|
-
|
956
|
-
|
957
|
-
|
958
|
-
|
959
|
-
|
877
|
+
let querySplit = query.split('');
|
878
|
+
let diacriticReg = settings.ignoreDiacritics ? '[\u0300-\u036F]?' : '';
|
879
|
+
let htmlReg = '(?![^<]*>)';
|
880
|
+
let markedRegExp = new RegExp(htmlReg + '(' + querySplit.join(diacriticReg + ')(.*?)' + htmlReg + '(') + diacriticReg + ')', regExpIgnore);
|
881
|
+
let markedReplacer = function () {
|
882
|
+
let args = [].slice.call(arguments, 1, querySplit.length * 2).map(function (x, i) {
|
883
|
+
return i & 1 ? x : '<mark>' + x + '</mark>'; // eslint-disable-line no-bitwise
|
884
|
+
});
|
960
885
|
|
961
|
-
|
962
|
-
|
963
|
-
;
|
886
|
+
return args.join('');
|
887
|
+
};
|
964
888
|
$.each(results, function (index, result) {
|
965
|
-
|
966
|
-
|
967
|
-
;
|
889
|
+
let $result = $(result);
|
890
|
+
let markedHTML = module.get.choiceText($result, true);
|
968
891
|
if (settings.ignoreDiacritics) {
|
969
892
|
markedHTML = markedHTML.normalize('NFD');
|
970
893
|
}
|
@@ -975,19 +898,17 @@
|
|
975
898
|
|
976
899
|
if (!module.has.query()) {
|
977
900
|
$divider
|
978
|
-
.removeClass(className.hidden)
|
979
|
-
;
|
901
|
+
.removeClass(className.hidden);
|
980
902
|
} else if (settings.hideDividers === true) {
|
981
903
|
$divider
|
982
|
-
.addClass(className.hidden)
|
983
|
-
;
|
904
|
+
.addClass(className.hidden);
|
984
905
|
} else if (settings.hideDividers === 'empty') {
|
985
906
|
$divider
|
986
907
|
.removeClass(className.hidden)
|
987
908
|
.filter(function () {
|
988
909
|
// First find the last divider in this divider group
|
989
910
|
// Dividers which are direct siblings are considered a group
|
990
|
-
|
911
|
+
let $lastDivider = $(this).nextUntil(selector.item);
|
991
912
|
|
992
913
|
return ($lastDivider.length > 0 ? $lastDivider : $(this))
|
993
914
|
// Count all non-filtered items until the next divider (or end of the dropdown)
|
@@ -996,16 +917,13 @@
|
|
996
917
|
// Hide divider if no items are found
|
997
918
|
.length === 0;
|
998
919
|
})
|
999
|
-
.addClass(className.hidden)
|
1000
|
-
;
|
920
|
+
.addClass(className.hidden);
|
1001
921
|
}
|
1002
922
|
},
|
1003
923
|
|
1004
924
|
fuzzySearch: function (query, term) {
|
1005
|
-
|
1006
|
-
|
1007
|
-
queryLength = query.length
|
1008
|
-
;
|
925
|
+
let termLength = term.length;
|
926
|
+
let queryLength = query.length;
|
1009
927
|
if (settings.ignoreSearchCase) {
|
1010
928
|
query = query.toLowerCase();
|
1011
929
|
term = term.toLowerCase();
|
@@ -1016,11 +934,9 @@
|
|
1016
934
|
if (queryLength === termLength) {
|
1017
935
|
return query === term;
|
1018
936
|
}
|
1019
|
-
for (
|
1020
|
-
|
1021
|
-
|
1022
|
-
queryCharacter = query.charCodeAt(characterIndex)
|
1023
|
-
;
|
937
|
+
for (let characterIndex = 0, nextCharacterIndex = 0; characterIndex < queryLength; characterIndex++) {
|
938
|
+
let continueSearch = false;
|
939
|
+
let queryCharacter = query.charCodeAt(characterIndex);
|
1024
940
|
while (nextCharacterIndex < termLength) {
|
1025
941
|
if (term.charCodeAt(nextCharacterIndex++) === queryCharacter) {
|
1026
942
|
continueSearch = true;
|
@@ -1045,8 +961,7 @@
|
|
1045
961
|
filterActive: function () {
|
1046
962
|
if (settings.useLabels) {
|
1047
963
|
$item.filter('.' + className.active)
|
1048
|
-
.addClass(className.filtered)
|
1049
|
-
;
|
964
|
+
.addClass(className.filtered);
|
1050
965
|
}
|
1051
966
|
},
|
1052
967
|
|
@@ -1069,14 +984,12 @@
|
|
1069
984
|
},
|
1070
985
|
|
1071
986
|
forceSelection: function () {
|
1072
|
-
|
1073
|
-
|
1074
|
-
|
1075
|
-
|
1076
|
-
|
1077
|
-
|
1078
|
-
hasSelected = $selectedItem.length > 0
|
1079
|
-
;
|
987
|
+
let $currentlySelected = $item.not(className.filtered).filter('.' + className.selected).eq(0);
|
988
|
+
let $activeItem = $item.not(className.filtered).filter('.' + className.active).eq(0);
|
989
|
+
let $selectedItem = $currentlySelected.length > 0
|
990
|
+
? $currentlySelected
|
991
|
+
: $activeItem;
|
992
|
+
let hasSelected = $selectedItem.length > 0;
|
1080
993
|
if (settings.allowAdditions || (hasSelected && !module.is.multiple())) {
|
1081
994
|
module.debug('Forcing partial selection to selected item', $selectedItem);
|
1082
995
|
module.event.item.click.call($selectedItem, {}, true);
|
@@ -1091,7 +1004,7 @@
|
|
1091
1004
|
module.clear();
|
1092
1005
|
}
|
1093
1006
|
module.debug('Creating dropdown with specified values', values);
|
1094
|
-
|
1007
|
+
let menuConfig = {};
|
1095
1008
|
menuConfig[fields.values] = values;
|
1096
1009
|
module.setup.menu(menuConfig);
|
1097
1010
|
$.each(values, function (index, item) {
|
@@ -1109,13 +1022,11 @@
|
|
1109
1022
|
$input.html('');
|
1110
1023
|
$input.append('<option disabled selected value></option>');
|
1111
1024
|
$.each(values, function (index, item) {
|
1112
|
-
|
1113
|
-
|
1114
|
-
name
|
1115
|
-
|
1116
|
-
|
1117
|
-
)
|
1118
|
-
;
|
1025
|
+
let value = settings.templates.escape(item[fields.value]);
|
1026
|
+
let name = settings.templates.escape(
|
1027
|
+
item[fields.name] || '',
|
1028
|
+
settings
|
1029
|
+
);
|
1119
1030
|
$input.append('<option value="' + value + '"' + (item.selected === true ? ' selected' : '') + '>' + name + '</option>');
|
1120
1031
|
});
|
1121
1032
|
module.observe.select();
|
@@ -1125,11 +1036,9 @@
|
|
1125
1036
|
|
1126
1037
|
event: {
|
1127
1038
|
paste: function (event) {
|
1128
|
-
|
1129
|
-
|
1130
|
-
|
1131
|
-
notFoundTokens = []
|
1132
|
-
;
|
1039
|
+
let pasteValue = (event.originalEvent.clipboardData || window.clipboardData).getData('text');
|
1040
|
+
let tokens = pasteValue.split(settings.delimiter);
|
1041
|
+
let notFoundTokens = [];
|
1133
1042
|
tokens.forEach(function (value) {
|
1134
1043
|
if (module.set.selected(module.escape.htmlEntities(value.trim()), null, false, true) === false) {
|
1135
1044
|
notFoundTokens.push(value.trim());
|
@@ -1137,13 +1046,12 @@
|
|
1137
1046
|
});
|
1138
1047
|
event.preventDefault();
|
1139
1048
|
if (notFoundTokens.length > 0) {
|
1140
|
-
|
1141
|
-
|
1142
|
-
|
1143
|
-
|
1144
|
-
|
1145
|
-
|
1146
|
-
;
|
1049
|
+
let searchEl = $search[0];
|
1050
|
+
let startPos = searchEl.selectionStart;
|
1051
|
+
let endPos = searchEl.selectionEnd;
|
1052
|
+
let orgText = searchEl.value;
|
1053
|
+
let pasteText = notFoundTokens.join(settings.delimiter);
|
1054
|
+
let newEndPos = startPos + pasteText.length;
|
1147
1055
|
$search.val(orgText.slice(0, startPos) + pasteText + orgText.slice(endPos));
|
1148
1056
|
searchEl.selectionStart = newEndPos;
|
1149
1057
|
searchEl.selectionEnd = newEndPos;
|
@@ -1171,7 +1079,7 @@
|
|
1171
1079
|
},
|
1172
1080
|
mousedown: function () {
|
1173
1081
|
if (module.is.searchSelection(true)) {
|
1174
|
-
// prevent menu hiding on immediate re-focus
|
1082
|
+
// prevent the menu hiding on immediate re-focus
|
1175
1083
|
willRefocus = true;
|
1176
1084
|
} else {
|
1177
1085
|
// prevents focus callback from occurring on mousedown
|
@@ -1180,16 +1088,14 @@
|
|
1180
1088
|
},
|
1181
1089
|
mouseup: function () {
|
1182
1090
|
if (module.is.searchSelection(true)) {
|
1183
|
-
// prevent menu hiding on immediate re-focus
|
1091
|
+
// prevent the menu hiding on immediate re-focus
|
1184
1092
|
willRefocus = false;
|
1185
1093
|
} else {
|
1186
1094
|
activated = false;
|
1187
1095
|
}
|
1188
1096
|
},
|
1189
1097
|
click: function (event) {
|
1190
|
-
|
1191
|
-
$target = $(event.target)
|
1192
|
-
;
|
1098
|
+
let $target = $(event.target);
|
1193
1099
|
// focus search
|
1194
1100
|
if ($target.is($module)) {
|
1195
1101
|
if (!module.is.focusedOnSearch()) {
|
@@ -1273,16 +1179,14 @@
|
|
1273
1179
|
},
|
1274
1180
|
label: {
|
1275
1181
|
click: function (event) {
|
1276
|
-
|
1277
|
-
|
1278
|
-
|
1279
|
-
|
1280
|
-
|
1281
|
-
|
1282
|
-
|
1283
|
-
|
1284
|
-
: $label.prevUntil($prevActive).add($activeLabels).add($label)
|
1285
|
-
;
|
1182
|
+
let $label = $(this);
|
1183
|
+
let $labels = $module.find(selector.label);
|
1184
|
+
let $activeLabels = $labels.filter('.' + className.active);
|
1185
|
+
let $nextActive = $label.nextAll('.' + className.active);
|
1186
|
+
let $prevActive = $label.prevAll('.' + className.active);
|
1187
|
+
let $range = $nextActive.length > 0
|
1188
|
+
? $label.nextUntil($nextActive).add($activeLabels).add($label)
|
1189
|
+
: $label.prevUntil($prevActive).add($activeLabels).add($label);
|
1286
1190
|
if (event.shiftKey) {
|
1287
1191
|
$activeLabels.removeClass(className.active);
|
1288
1192
|
$range.addClass(className.active);
|
@@ -1298,9 +1202,7 @@
|
|
1298
1202
|
},
|
1299
1203
|
remove: {
|
1300
1204
|
click: function (event) {
|
1301
|
-
|
1302
|
-
$label = $(this).parent()
|
1303
|
-
;
|
1205
|
+
let $label = $(this).parent();
|
1304
1206
|
if ($label.hasClass(className.active)) {
|
1305
1207
|
// remove all selected labels
|
1306
1208
|
module.remove.activeLabels();
|
@@ -1313,11 +1215,9 @@
|
|
1313
1215
|
},
|
1314
1216
|
test: {
|
1315
1217
|
toggle: function (event) {
|
1316
|
-
|
1317
|
-
|
1318
|
-
|
1319
|
-
: module.toggle
|
1320
|
-
;
|
1218
|
+
let toggleBehavior = module.is.multiple()
|
1219
|
+
? module.show
|
1220
|
+
: module.toggle;
|
1321
1221
|
if (module.is.bubbledLabelClick(event) || module.is.bubbledIconClick(event)) {
|
1322
1222
|
return;
|
1323
1223
|
}
|
@@ -1361,18 +1261,16 @@
|
|
1361
1261
|
},
|
1362
1262
|
menu: {
|
1363
1263
|
mutation: function (mutations) {
|
1364
|
-
|
1365
|
-
|
1366
|
-
$
|
1367
|
-
|
1368
|
-
|
1369
|
-
$
|
1370
|
-
|
1371
|
-
|
1372
|
-
|
1373
|
-
|
1374
|
-
isMessage = $changedNodes.is(selector.message) || $changedNodes.closest(selector.message).length > 0
|
1375
|
-
;
|
1264
|
+
let mutation = mutations[0];
|
1265
|
+
let $addedNode = mutation.addedNodes
|
1266
|
+
? $(mutation.addedNodes[0])
|
1267
|
+
: $(false);
|
1268
|
+
let $removedNode = mutation.removedNodes
|
1269
|
+
? $(mutation.removedNodes[0])
|
1270
|
+
: $(false);
|
1271
|
+
let $changedNodes = $addedNode.add($removedNode);
|
1272
|
+
let isUserAddition = $changedNodes.is(selector.addition) || $changedNodes.closest(selector.addition).length > 0;
|
1273
|
+
let isMessage = $changedNodes.is(selector.message) || $changedNodes.closest(selector.message).length > 0;
|
1376
1274
|
if (isUserAddition || isMessage) {
|
1377
1275
|
module.debug('Updating item selector cache');
|
1378
1276
|
module.refreshItems();
|
@@ -1390,14 +1288,12 @@
|
|
1390
1288
|
},
|
1391
1289
|
item: {
|
1392
1290
|
mouseenter: function (event) {
|
1393
|
-
|
1394
|
-
|
1395
|
-
|
1396
|
-
|
1397
|
-
|
1398
|
-
|
1399
|
-
isBubbledEvent = $subMenu.find($target).length > 0
|
1400
|
-
;
|
1291
|
+
let $target = $(event.target);
|
1292
|
+
let $item = $(this);
|
1293
|
+
let $subMenu = $item.children(selector.menu);
|
1294
|
+
let $otherMenus = $item.siblings(selector.item).children(selector.menu);
|
1295
|
+
let hasSubMenu = $subMenu.length > 0;
|
1296
|
+
let isBubbledEvent = $subMenu.find($target).length > 0;
|
1401
1297
|
if (!isBubbledEvent && hasSubMenu) {
|
1402
1298
|
clearTimeout(module.itemTimer);
|
1403
1299
|
module.itemTimer = setTimeout(function () {
|
@@ -1411,9 +1307,7 @@
|
|
1411
1307
|
}
|
1412
1308
|
},
|
1413
1309
|
mouseleave: function (event) {
|
1414
|
-
|
1415
|
-
$subMenu = $(this).find(selector.menu)
|
1416
|
-
;
|
1310
|
+
let $subMenu = $(this).find(selector.menu);
|
1417
1311
|
if ($subMenu.length > 0) {
|
1418
1312
|
clearTimeout(module.itemTimer);
|
1419
1313
|
module.itemTimer = setTimeout(function () {
|
@@ -1425,18 +1319,15 @@
|
|
1425
1319
|
}
|
1426
1320
|
},
|
1427
1321
|
click: function (event, skipRefocus) {
|
1428
|
-
|
1429
|
-
|
1430
|
-
$target
|
1431
|
-
|
1432
|
-
|
1433
|
-
|
1434
|
-
|
1435
|
-
|
1436
|
-
|
1437
|
-
isBubbledEvent = $subMenu.find($target).length > 0
|
1438
|
-
;
|
1439
|
-
// prevents IE11 bug where menu receives focus even though `tabindex=-1`
|
1322
|
+
let $choice = $(this);
|
1323
|
+
let $target = event
|
1324
|
+
? $(event.target || '')
|
1325
|
+
: $('');
|
1326
|
+
let $subMenu = $choice.find(selector.menu);
|
1327
|
+
let text = module.get.choiceText($choice);
|
1328
|
+
let value = module.get.choiceValue($choice, text);
|
1329
|
+
let hasSubMenu = $subMenu.length > 0;
|
1330
|
+
let isBubbledEvent = $subMenu.find($target).length > 0;
|
1440
1331
|
if (document.activeElement.tagName.toLowerCase() !== 'input') {
|
1441
1332
|
$(document.activeElement).trigger('blur');
|
1442
1333
|
}
|
@@ -1468,29 +1359,25 @@
|
|
1468
1359
|
},
|
1469
1360
|
|
1470
1361
|
document: {
|
1471
|
-
// label selection should occur even when element has no focus
|
1362
|
+
// label selection should occur even when the element has no focus
|
1472
1363
|
keydown: function (event) {
|
1473
|
-
|
1474
|
-
|
1475
|
-
isShortcutKey = module.is.inObject(pressedKey, keys)
|
1476
|
-
;
|
1364
|
+
let pressedKey = event.which;
|
1365
|
+
let isShortcutKey = module.is.inObject(pressedKey, keys);
|
1477
1366
|
if (isShortcutKey) {
|
1478
|
-
|
1479
|
-
|
1480
|
-
|
1481
|
-
|
1482
|
-
|
1483
|
-
|
1484
|
-
|
1485
|
-
|
1486
|
-
|
1487
|
-
|
1488
|
-
|
1489
|
-
|
1490
|
-
|
1491
|
-
|
1492
|
-
isSelectedSearch = caretAtStart && module.get.caretPosition(true) !== 0
|
1493
|
-
;
|
1367
|
+
let $label = $module.find(selector.label);
|
1368
|
+
let $activeLabel = $label.filter('.' + className.active);
|
1369
|
+
let activeValue = $activeLabel.data(metadata.value);
|
1370
|
+
let labelIndex = $label.index($activeLabel);
|
1371
|
+
let labelCount = $label.length;
|
1372
|
+
let hasActiveLabel = $activeLabel.length > 0;
|
1373
|
+
let hasMultipleActive = $activeLabel.length > 1;
|
1374
|
+
let isFirstLabel = labelIndex === 0;
|
1375
|
+
let isLastLabel = labelIndex + 1 === labelCount;
|
1376
|
+
let isSearch = module.is.searchSelection();
|
1377
|
+
let isFocusedOnSearch = module.is.focusedOnSearch();
|
1378
|
+
let isFocused = module.is.focused();
|
1379
|
+
let caretAtStart = isFocusedOnSearch && module.get.caretPosition(false) === 0;
|
1380
|
+
let isSelectedSearch = caretAtStart && module.get.caretPosition(true) !== 0;
|
1494
1381
|
if (isSearch && !hasActiveLabel && !isFocusedOnSearch) {
|
1495
1382
|
return;
|
1496
1383
|
}
|
@@ -1513,8 +1400,7 @@
|
|
1513
1400
|
} else {
|
1514
1401
|
$activeLabel.prev(selector.siblingLabel)
|
1515
1402
|
.addClass(className.active)
|
1516
|
-
.end()
|
1517
|
-
;
|
1403
|
+
.end();
|
1518
1404
|
}
|
1519
1405
|
event.preventDefault();
|
1520
1406
|
}
|
@@ -1589,32 +1475,28 @@
|
|
1589
1475
|
},
|
1590
1476
|
|
1591
1477
|
keydown: function (event) {
|
1592
|
-
|
1593
|
-
|
1594
|
-
isShortcutKey = module.is.inObject(pressedKey, keys) || event.key === settings.delimiter
|
1595
|
-
;
|
1478
|
+
let pressedKey = event.which;
|
1479
|
+
let isShortcutKey = module.is.inObject(pressedKey, keys) || event.key === settings.delimiter;
|
1596
1480
|
if (isShortcutKey) {
|
1597
|
-
|
1598
|
-
|
1599
|
-
|
1600
|
-
|
1601
|
-
|
1602
|
-
|
1603
|
-
|
1604
|
-
|
1605
|
-
|
1606
|
-
|
1607
|
-
|
1608
|
-
|
1609
|
-
|
1610
|
-
|
1611
|
-
|
1612
|
-
|
1613
|
-
|
1614
|
-
|
1615
|
-
|
1616
|
-
;
|
1617
|
-
// allow selection with menu closed
|
1481
|
+
let $currentlySelected = $item.not(selector.unselectable).filter('.' + className.selected).eq(0);
|
1482
|
+
let $activeItem = $menu.children('.' + className.active).eq(0);
|
1483
|
+
let $selectedItem = $currentlySelected.length > 0
|
1484
|
+
? $currentlySelected
|
1485
|
+
: $activeItem;
|
1486
|
+
let $visibleItems = $selectedItem.length > 0
|
1487
|
+
? $selectedItem.siblings(':not(.' + className.filtered + ')').addBack()
|
1488
|
+
: $menu.children(':not(.' + className.filtered + ')');
|
1489
|
+
let $subMenu = $selectedItem.children(selector.menu);
|
1490
|
+
let $parentMenu = $selectedItem.closest(selector.menu);
|
1491
|
+
let inVisibleMenu = $parentMenu.hasClass(className.visible) || $parentMenu.hasClass(className.animating) || $parentMenu.parent(selector.menu).length > 0;
|
1492
|
+
let hasSubMenu = $subMenu.length > 0;
|
1493
|
+
let hasSelectedItem = $selectedItem.length > 0;
|
1494
|
+
let selectedIsSelectable = $selectedItem.not(selector.unselectable).length > 0;
|
1495
|
+
let delimiterPressed = event.key === settings.delimiter && module.is.multiple();
|
1496
|
+
let isAdditionWithoutMenu = settings.allowAdditions && (pressedKey === keys.enter || delimiterPressed);
|
1497
|
+
let $nextItem;
|
1498
|
+
let isSubMenuItem;
|
1499
|
+
// allow selection with the menu closed
|
1618
1500
|
if (isAdditionWithoutMenu) {
|
1619
1501
|
if (selectedIsSelectable && settings.hideAdditions) {
|
1620
1502
|
module.verbose('Selecting item from keyboard shortcut', $selectedItem);
|
@@ -1630,7 +1512,7 @@
|
|
1630
1512
|
|
1631
1513
|
// visible menu keyboard shortcuts
|
1632
1514
|
if (module.is.visible()) {
|
1633
|
-
// enter (select or open
|
1515
|
+
// enter (select or open submenu)
|
1634
1516
|
if (pressedKey === keys.enter || delimiterPressed) {
|
1635
1517
|
if (pressedKey === keys.enter && hasSelectedItem && hasSubMenu && !settings.allowCategorySelection) {
|
1636
1518
|
module.verbose('Pressed enter on unselectable category, opening sub menu');
|
@@ -1659,28 +1541,24 @@
|
|
1659
1541
|
module.verbose('Left key pressed, closing sub-menu');
|
1660
1542
|
module.animate.hide(false, $parentMenu);
|
1661
1543
|
$selectedItem
|
1662
|
-
.removeClass(className.selected)
|
1663
|
-
;
|
1544
|
+
.removeClass(className.selected);
|
1664
1545
|
$parentMenu
|
1665
1546
|
.closest(selector.item)
|
1666
|
-
.addClass(className.selected)
|
1667
|
-
;
|
1547
|
+
.addClass(className.selected);
|
1668
1548
|
event.preventDefault();
|
1669
1549
|
}
|
1670
1550
|
}
|
1671
1551
|
|
1672
|
-
// right arrow (show
|
1552
|
+
// right arrow (show submenu)
|
1673
1553
|
if (pressedKey === keys.rightArrow) {
|
1674
1554
|
if (hasSubMenu) {
|
1675
1555
|
module.verbose('Right key pressed, opening sub-menu');
|
1676
1556
|
module.animate.show(false, $subMenu);
|
1677
1557
|
$selectedItem
|
1678
|
-
.removeClass(className.selected)
|
1679
|
-
;
|
1558
|
+
.removeClass(className.selected);
|
1680
1559
|
$subMenu
|
1681
1560
|
.find(selector.item).eq(0)
|
1682
|
-
.addClass(className.selected)
|
1683
|
-
;
|
1561
|
+
.addClass(className.selected);
|
1684
1562
|
event.preventDefault();
|
1685
1563
|
}
|
1686
1564
|
}
|
@@ -1700,11 +1578,9 @@
|
|
1700
1578
|
|
1701
1579
|
module.verbose('Up key pressed, changing active item');
|
1702
1580
|
$selectedItem
|
1703
|
-
.removeClass(className.selected)
|
1704
|
-
;
|
1581
|
+
.removeClass(className.selected);
|
1705
1582
|
$nextItem
|
1706
|
-
.addClass(className.selected)
|
1707
|
-
;
|
1583
|
+
.addClass(className.selected);
|
1708
1584
|
module.set.scrollPosition($nextItem);
|
1709
1585
|
if (settings.selectOnKeydown && module.is.single() && !$nextItem.hasClass(className.actionable)) {
|
1710
1586
|
module.set.selectedItem($nextItem);
|
@@ -1727,11 +1603,9 @@
|
|
1727
1603
|
|
1728
1604
|
module.verbose('Down key pressed, changing active item');
|
1729
1605
|
$item
|
1730
|
-
.removeClass(className.selected)
|
1731
|
-
;
|
1606
|
+
.removeClass(className.selected);
|
1732
1607
|
$nextItem
|
1733
|
-
.addClass(className.selected)
|
1734
|
-
;
|
1608
|
+
.addClass(className.selected);
|
1735
1609
|
module.set.scrollPosition($nextItem);
|
1736
1610
|
if (settings.selectOnKeydown && module.is.single() && !$nextItem.hasClass(className.actionable)) {
|
1737
1611
|
module.set.selectedItem($nextItem);
|
@@ -1763,6 +1637,7 @@
|
|
1763
1637
|
}
|
1764
1638
|
// down arrow (open menu)
|
1765
1639
|
if (pressedKey === keys.downArrow && !module.is.visible()) {
|
1640
|
+
focused = true;
|
1766
1641
|
module.verbose('Down key pressed, showing dropdown');
|
1767
1642
|
module.show();
|
1768
1643
|
event.preventDefault();
|
@@ -1778,11 +1653,9 @@
|
|
1778
1653
|
|
1779
1654
|
trigger: {
|
1780
1655
|
change: function () {
|
1781
|
-
|
1782
|
-
inputElement = $input[0]
|
1783
|
-
;
|
1656
|
+
let inputElement = $input[0];
|
1784
1657
|
if (inputElement) {
|
1785
|
-
|
1658
|
+
let events = document.createEvent('HTMLEvents');
|
1786
1659
|
module.verbose('Triggering native change event');
|
1787
1660
|
events.initEvent('change', true, false);
|
1788
1661
|
inputElement.dispatchEvent(events);
|
@@ -1806,11 +1679,9 @@
|
|
1806
1679
|
selectActionActive = false;
|
1807
1680
|
},
|
1808
1681
|
eventInModule: function (event, callback) {
|
1809
|
-
|
1810
|
-
|
1811
|
-
|
1812
|
-
inModule = $target.closest($module).length > 0
|
1813
|
-
;
|
1682
|
+
let $target = $(event.target);
|
1683
|
+
let inDocument = $target.closest(document.documentElement).length > 0;
|
1684
|
+
let inModule = $target.closest($module).length > 0;
|
1814
1685
|
callback = isFunction(callback)
|
1815
1686
|
? callback
|
1816
1687
|
: function () {};
|
@@ -1826,13 +1697,11 @@
|
|
1826
1697
|
return false;
|
1827
1698
|
},
|
1828
1699
|
eventOnElement: function (event, callback) {
|
1829
|
-
|
1830
|
-
|
1831
|
-
|
1832
|
-
|
1833
|
-
|
1834
|
-
notInMenu = $target.closest($menu).length === 0
|
1835
|
-
;
|
1700
|
+
let $target = $(event.target);
|
1701
|
+
let $label = $target.closest(selector.siblingLabel);
|
1702
|
+
let inVisibleDOM = document.body.contains(event.target);
|
1703
|
+
let notOnLabel = $module.find($label).length === 0 || !(module.is.multiple() && settings.useLabels);
|
1704
|
+
let notInMenu = $target.closest($menu).length === 0;
|
1836
1705
|
callback = isFunction(callback)
|
1837
1706
|
? callback
|
1838
1707
|
: function () {};
|
@@ -1922,13 +1791,11 @@
|
|
1922
1791
|
$sizer.text(value);
|
1923
1792
|
|
1924
1793
|
// prevent rounding issues
|
1925
|
-
return Math.ceil($sizer.width() +
|
1794
|
+
return Math.ceil($sizer.width() + 1);
|
1926
1795
|
},
|
1927
1796
|
selectionCount: function () {
|
1928
|
-
|
1929
|
-
|
1930
|
-
count
|
1931
|
-
;
|
1797
|
+
let values = module.get.values();
|
1798
|
+
let count;
|
1932
1799
|
count = module.is.multiple()
|
1933
1800
|
? (Array.isArray(values) ? values.length : 0)
|
1934
1801
|
: (module.get.value() !== '' ? 1 : 0);
|
@@ -1941,9 +1808,7 @@
|
|
1941
1808
|
: settings.transition;
|
1942
1809
|
},
|
1943
1810
|
userValues: function () {
|
1944
|
-
|
1945
|
-
values = module.get.values(true)
|
1946
|
-
;
|
1811
|
+
let values = module.get.values(true);
|
1947
1812
|
if (!values) {
|
1948
1813
|
return false;
|
1949
1814
|
}
|
@@ -1961,11 +1826,9 @@
|
|
1961
1826
|
});
|
1962
1827
|
},
|
1963
1828
|
caretPosition: function (returnEndPos) {
|
1964
|
-
|
1965
|
-
|
1966
|
-
|
1967
|
-
rangeLength
|
1968
|
-
;
|
1829
|
+
let input = $search[0];
|
1830
|
+
let range;
|
1831
|
+
let rangeLength;
|
1969
1832
|
if (returnEndPos && 'selectionEnd' in input) {
|
1970
1833
|
return input.selectionEnd;
|
1971
1834
|
}
|
@@ -1985,22 +1848,18 @@
|
|
1985
1848
|
}
|
1986
1849
|
},
|
1987
1850
|
value: function () {
|
1988
|
-
|
1989
|
-
|
1990
|
-
|
1991
|
-
|
1992
|
-
|
1993
|
-
|
1994
|
-
|
1995
|
-
// prevents placeholder element from being selected when multiple
|
1851
|
+
let value = $input.length > 0
|
1852
|
+
? $input.val()
|
1853
|
+
: $module.data(metadata.value);
|
1854
|
+
let isEmptyMultiselect = Array.isArray(value) && value.length === 1 && value[0] === '';
|
1855
|
+
|
1856
|
+
// prevents the placeholder element from being selected when multiple
|
1996
1857
|
return value === undefined || isEmptyMultiselect
|
1997
1858
|
? ''
|
1998
1859
|
: value;
|
1999
1860
|
},
|
2000
1861
|
values: function (raw) {
|
2001
|
-
|
2002
|
-
value = module.get.value()
|
2003
|
-
;
|
1862
|
+
let value = module.get.value();
|
2004
1863
|
if (value === '') {
|
2005
1864
|
return '';
|
2006
1865
|
}
|
@@ -2014,18 +1873,14 @@
|
|
2014
1873
|
: value;
|
2015
1874
|
},
|
2016
1875
|
remoteValues: function () {
|
2017
|
-
|
2018
|
-
|
2019
|
-
remoteValues = false
|
2020
|
-
;
|
1876
|
+
let values = module.get.values();
|
1877
|
+
let remoteValues = false;
|
2021
1878
|
if (values) {
|
2022
1879
|
if (typeof values === 'string') {
|
2023
1880
|
values = [values];
|
2024
1881
|
}
|
2025
1882
|
$.each(values, function (index, value) {
|
2026
|
-
|
2027
|
-
name = module.read.remoteData(value)
|
2028
|
-
;
|
1883
|
+
let name = module.read.remoteData(value);
|
2029
1884
|
module.verbose('Restoring value from session data', name, value);
|
2030
1885
|
if (name) {
|
2031
1886
|
if (!remoteValues) {
|
@@ -2074,9 +1929,7 @@
|
|
2074
1929
|
: String(choiceText));
|
2075
1930
|
},
|
2076
1931
|
inputEvent: function () {
|
2077
|
-
|
2078
|
-
input = $search[0]
|
2079
|
-
;
|
1932
|
+
let input = $search[0];
|
2080
1933
|
if (input) {
|
2081
1934
|
return input.oninput !== undefined
|
2082
1935
|
? 'input'
|
@@ -2088,26 +1941,22 @@
|
|
2088
1941
|
return false;
|
2089
1942
|
},
|
2090
1943
|
selectValues: function () {
|
2091
|
-
|
2092
|
-
|
2093
|
-
|
2094
|
-
values = []
|
2095
|
-
;
|
1944
|
+
let select = {};
|
1945
|
+
let oldGroup = [];
|
1946
|
+
let values = [];
|
2096
1947
|
$module
|
2097
1948
|
.find('option')
|
2098
1949
|
.each(function () {
|
2099
|
-
|
2100
|
-
|
2101
|
-
|
2102
|
-
|
2103
|
-
|
2104
|
-
|
2105
|
-
|
2106
|
-
|
2107
|
-
|
2108
|
-
|
2109
|
-
group = $option.parent('optgroup')
|
2110
|
-
;
|
1950
|
+
let $option = $(this);
|
1951
|
+
let name = $option.html();
|
1952
|
+
let disabled = $option.attr('disabled');
|
1953
|
+
let value = $option.attr('value') !== undefined
|
1954
|
+
? $option.attr('value')
|
1955
|
+
: name;
|
1956
|
+
let text = $option.data(metadata.text) !== undefined
|
1957
|
+
? $option.data(metadata.text)
|
1958
|
+
: name;
|
1959
|
+
let group = $option.parent('optgroup');
|
2111
1960
|
if (settings.placeholder === 'auto' && value === '') {
|
2112
1961
|
select.placeholder = name;
|
2113
1962
|
} else {
|
@@ -2126,8 +1975,7 @@
|
|
2126
1975
|
disabled: disabled,
|
2127
1976
|
});
|
2128
1977
|
}
|
2129
|
-
})
|
2130
|
-
;
|
1978
|
+
});
|
2131
1979
|
if (settings.placeholder && settings.placeholder !== 'auto') {
|
2132
1980
|
module.debug('Setting placeholder value to', settings.placeholder);
|
2133
1981
|
select.placeholder = settings.placeholder;
|
@@ -2157,20 +2005,16 @@
|
|
2157
2005
|
return $item.filter('.' + className.active);
|
2158
2006
|
},
|
2159
2007
|
selectedItem: function () {
|
2160
|
-
|
2161
|
-
$selectedItem = $item.not(selector.unselectable).filter('.' + className.selected)
|
2162
|
-
;
|
2008
|
+
let $selectedItem = $item.not(selector.unselectable).filter('.' + className.selected);
|
2163
2009
|
|
2164
2010
|
return $selectedItem.length > 0
|
2165
2011
|
? $selectedItem
|
2166
2012
|
: $item.eq(0);
|
2167
2013
|
},
|
2168
2014
|
itemWithAdditions: function (value) {
|
2169
|
-
|
2170
|
-
|
2171
|
-
|
2172
|
-
hasUserItems = $userItems && $userItems.length > 0
|
2173
|
-
;
|
2015
|
+
let $items = module.get.item(value);
|
2016
|
+
let $userItems = module.create.userChoice(value);
|
2017
|
+
let hasUserItems = $userItems && $userItems.length > 0;
|
2174
2018
|
if (hasUserItems) {
|
2175
2019
|
$items = $items.length > 0
|
2176
2020
|
? $items.add($userItems)
|
@@ -2180,11 +2024,9 @@
|
|
2180
2024
|
return $items;
|
2181
2025
|
},
|
2182
2026
|
item: function (value, strict) {
|
2183
|
-
|
2184
|
-
|
2185
|
-
|
2186
|
-
isMultiple
|
2187
|
-
;
|
2027
|
+
let $selectedItem = false;
|
2028
|
+
let shouldSearch;
|
2029
|
+
let isMultiple;
|
2188
2030
|
value = value !== undefined
|
2189
2031
|
? value
|
2190
2032
|
: (module.get.values() !== undefined
|
@@ -2200,11 +2042,9 @@
|
|
2200
2042
|
if (shouldSearch) {
|
2201
2043
|
$item
|
2202
2044
|
.each(function () {
|
2203
|
-
|
2204
|
-
|
2205
|
-
|
2206
|
-
optionValue = module.get.choiceValue($choice, optionText)
|
2207
|
-
;
|
2045
|
+
let $choice = $(this);
|
2046
|
+
let optionText = module.get.choiceText($choice);
|
2047
|
+
let optionValue = module.get.choiceValue($choice, optionText);
|
2208
2048
|
// safe early exit
|
2209
2049
|
if (optionValue === null || optionValue === undefined) {
|
2210
2050
|
return;
|
@@ -2234,8 +2074,7 @@
|
|
2234
2074
|
return true;
|
2235
2075
|
}
|
2236
2076
|
}
|
2237
|
-
})
|
2238
|
-
;
|
2077
|
+
});
|
2239
2078
|
}
|
2240
2079
|
|
2241
2080
|
return $selectedItem;
|
@@ -2285,10 +2124,8 @@
|
|
2285
2124
|
module.restore.defaultValue();
|
2286
2125
|
},
|
2287
2126
|
defaultText: function () {
|
2288
|
-
|
2289
|
-
|
2290
|
-
placeholderText = module.get.placeholderText
|
2291
|
-
;
|
2127
|
+
let defaultText = module.get.defaultText();
|
2128
|
+
let placeholderText = module.get.placeholderText;
|
2292
2129
|
if (defaultText === placeholderText) {
|
2293
2130
|
module.debug('Restoring default placeholder text', defaultText);
|
2294
2131
|
module.set.placeholderText(defaultText);
|
@@ -2301,9 +2138,7 @@
|
|
2301
2138
|
module.set.placeholderText();
|
2302
2139
|
},
|
2303
2140
|
defaultValue: function () {
|
2304
|
-
|
2305
|
-
defaultValue = module.get.defaultValue()
|
2306
|
-
;
|
2141
|
+
let defaultValue = module.get.defaultValue();
|
2307
2142
|
if (defaultValue !== undefined) {
|
2308
2143
|
module.debug('Restoring default value', defaultValue);
|
2309
2144
|
if (defaultValue !== '') {
|
@@ -2336,14 +2171,14 @@
|
|
2336
2171
|
}
|
2337
2172
|
},
|
2338
2173
|
values: function () {
|
2339
|
-
// prevents callbacks from occurring on initial load
|
2174
|
+
// prevents callbacks from occurring on the initial load
|
2340
2175
|
module.set.initialLoad();
|
2341
2176
|
if (settings.apiSettings && settings.saveRemoteData && module.get.remoteValues()) {
|
2342
2177
|
module.restore.remoteValues();
|
2343
2178
|
} else {
|
2344
2179
|
module.set.selected();
|
2345
2180
|
}
|
2346
|
-
|
2181
|
+
let value = module.get.value();
|
2347
2182
|
if (value && value !== '' && !(Array.isArray(value) && value.length === 0)) {
|
2348
2183
|
$input.removeClass(className.noselection);
|
2349
2184
|
} else {
|
@@ -2352,9 +2187,7 @@
|
|
2352
2187
|
module.remove.initialLoad();
|
2353
2188
|
},
|
2354
2189
|
remoteValues: function () {
|
2355
|
-
|
2356
|
-
values = module.get.remoteValues()
|
2357
|
-
;
|
2190
|
+
let values = module.get.remoteValues();
|
2358
2191
|
module.debug('Recreating selected from session data', values);
|
2359
2192
|
if (values) {
|
2360
2193
|
if (module.is.single()) {
|
@@ -2372,9 +2205,7 @@
|
|
2372
2205
|
|
2373
2206
|
read: {
|
2374
2207
|
remoteData: function (value) {
|
2375
|
-
|
2376
|
-
name
|
2377
|
-
;
|
2208
|
+
let name;
|
2378
2209
|
if (window.Storage === undefined) {
|
2379
2210
|
module.error(error.noStorage);
|
2380
2211
|
|
@@ -2395,23 +2226,17 @@
|
|
2395
2226
|
module.save.defaultValue();
|
2396
2227
|
},
|
2397
2228
|
defaultValue: function () {
|
2398
|
-
|
2399
|
-
value = module.get.value()
|
2400
|
-
;
|
2229
|
+
let value = module.get.value();
|
2401
2230
|
module.verbose('Saving default value as', value);
|
2402
2231
|
$module.data(metadata.defaultValue, value);
|
2403
2232
|
},
|
2404
2233
|
defaultText: function () {
|
2405
|
-
|
2406
|
-
text = module.get.text()
|
2407
|
-
;
|
2234
|
+
let text = module.get.text();
|
2408
2235
|
module.verbose('Saving default text as', text);
|
2409
2236
|
$module.data(metadata.defaultText, text);
|
2410
2237
|
},
|
2411
2238
|
placeholderText: function () {
|
2412
|
-
|
2413
|
-
text
|
2414
|
-
;
|
2239
|
+
let text;
|
2415
2240
|
if (settings.placeholder !== false && $text.hasClass(className.placeholder)) {
|
2416
2241
|
text = module.get.text();
|
2417
2242
|
module.verbose('Saving placeholder text as', text);
|
@@ -2451,21 +2276,19 @@
|
|
2451
2276
|
},
|
2452
2277
|
|
2453
2278
|
scrollPage: function (direction, $selectedItem) {
|
2454
|
-
|
2455
|
-
|
2456
|
-
|
2457
|
-
|
2458
|
-
|
2459
|
-
|
2460
|
-
|
2461
|
-
|
2462
|
-
|
2463
|
-
|
2464
|
-
|
2465
|
-
|
2466
|
-
|
2467
|
-
elementIndex
|
2468
|
-
;
|
2279
|
+
let $currentItem = $selectedItem || module.get.selectedItem();
|
2280
|
+
let $menu = $currentItem.closest(selector.menu);
|
2281
|
+
let menuHeight = $menu.outerHeight();
|
2282
|
+
let currentScroll = $menu.scrollTop();
|
2283
|
+
let itemHeight = $item.eq(0).outerHeight();
|
2284
|
+
let itemsPerPage = Math.floor(menuHeight / itemHeight);
|
2285
|
+
let newScroll = direction === 'up'
|
2286
|
+
? currentScroll - (itemHeight * itemsPerPage)
|
2287
|
+
: currentScroll + (itemHeight * itemsPerPage);
|
2288
|
+
let $selectableItem = $item.not(selector.unselectable);
|
2289
|
+
let isWithinRange;
|
2290
|
+
let $nextSelectedItem;
|
2291
|
+
let elementIndex;
|
2469
2292
|
elementIndex = direction === 'up'
|
2470
2293
|
? $selectableItem.index($currentItem) - itemsPerPage
|
2471
2294
|
: $selectableItem.index($currentItem) + itemsPerPage;
|
@@ -2480,33 +2303,28 @@
|
|
2480
2303
|
if ($nextSelectedItem.length > 0) {
|
2481
2304
|
module.debug('Scrolling page', direction, $nextSelectedItem);
|
2482
2305
|
$currentItem
|
2483
|
-
.removeClass(className.selected)
|
2484
|
-
;
|
2306
|
+
.removeClass(className.selected);
|
2485
2307
|
$nextSelectedItem
|
2486
|
-
.addClass(className.selected)
|
2487
|
-
;
|
2308
|
+
.addClass(className.selected);
|
2488
2309
|
if (settings.selectOnKeydown && module.is.single() && !$nextSelectedItem.hasClass(className.actionable)) {
|
2489
2310
|
module.set.selectedItem($nextSelectedItem);
|
2490
2311
|
}
|
2491
2312
|
$menu
|
2492
|
-
.scrollTop(newScroll)
|
2493
|
-
;
|
2313
|
+
.scrollTop(newScroll);
|
2494
2314
|
}
|
2495
2315
|
},
|
2496
2316
|
|
2497
2317
|
set: {
|
2498
2318
|
filtered: function () {
|
2499
|
-
|
2500
|
-
|
2501
|
-
|
2502
|
-
|
2503
|
-
|
2504
|
-
|
2505
|
-
|
2506
|
-
|
2507
|
-
|
2508
|
-
valueIsSet = searchValue !== ''
|
2509
|
-
;
|
2319
|
+
let isMultiple = module.is.multiple();
|
2320
|
+
let isSearch = module.is.searchSelection();
|
2321
|
+
let isSearchMultiple = isMultiple && isSearch;
|
2322
|
+
let searchValue = isSearch
|
2323
|
+
? module.get.query()
|
2324
|
+
: '';
|
2325
|
+
let hasSearchValue = typeof searchValue === 'string' && searchValue.length > 0;
|
2326
|
+
let searchWidth = module.get.searchWidth();
|
2327
|
+
let valueIsSet = searchValue !== '';
|
2510
2328
|
if (isMultiple && hasSearchValue) {
|
2511
2329
|
module.verbose('Adjusting input width', searchWidth);
|
2512
2330
|
$search.css('width', searchWidth + 'px');
|
@@ -2535,21 +2353,17 @@
|
|
2535
2353
|
if (module.is.searchSelection()) {
|
2536
2354
|
module.debug('Added tabindex to searchable dropdown');
|
2537
2355
|
$search
|
2538
|
-
.val('')
|
2539
|
-
;
|
2356
|
+
.val('');
|
2540
2357
|
module.check.disabled();
|
2541
2358
|
$menu
|
2542
|
-
.attr('tabindex', -1)
|
2543
|
-
;
|
2359
|
+
.attr('tabindex', -1);
|
2544
2360
|
} else {
|
2545
2361
|
module.debug('Added tabindex to dropdown');
|
2546
2362
|
if ($module.attr('tabindex') === undefined) {
|
2547
2363
|
$module
|
2548
|
-
.attr('tabindex', $input.attr('tabindex') || 0)
|
2549
|
-
;
|
2364
|
+
.attr('tabindex', $input.attr('tabindex') || 0);
|
2550
2365
|
$menu
|
2551
|
-
.attr('tabindex', -1)
|
2552
|
-
;
|
2366
|
+
.attr('tabindex', -1);
|
2553
2367
|
}
|
2554
2368
|
}
|
2555
2369
|
$input.removeAttr('tabindex');
|
@@ -2566,24 +2380,20 @@
|
|
2566
2380
|
}
|
2567
2381
|
},
|
2568
2382
|
partialSearch: function (text) {
|
2569
|
-
|
2570
|
-
length = module.get.query().length
|
2571
|
-
;
|
2383
|
+
let length = module.get.query().length;
|
2572
2384
|
$search.val(text.slice(0, length));
|
2573
2385
|
},
|
2574
2386
|
scrollPosition: function ($item, forceScroll) {
|
2575
|
-
|
2576
|
-
|
2577
|
-
|
2578
|
-
|
2579
|
-
|
2580
|
-
|
2581
|
-
|
2582
|
-
|
2583
|
-
|
2584
|
-
|
2585
|
-
belowPage
|
2586
|
-
;
|
2387
|
+
let edgeTolerance = 5;
|
2388
|
+
let $menu;
|
2389
|
+
let hasActive;
|
2390
|
+
let offset;
|
2391
|
+
let itemOffset;
|
2392
|
+
let menuOffset;
|
2393
|
+
let menuScroll;
|
2394
|
+
let menuHeight;
|
2395
|
+
let abovePage;
|
2396
|
+
let belowPage;
|
2587
2397
|
|
2588
2398
|
$item = $item || module.get.selectedItem();
|
2589
2399
|
$menu = $item.closest(selector.menu);
|
@@ -2628,8 +2438,7 @@
|
|
2628
2438
|
}
|
2629
2439
|
module.debug('Changing text', text, $text);
|
2630
2440
|
$text
|
2631
|
-
.removeClass(className.filtered)
|
2632
|
-
;
|
2441
|
+
.removeClass(className.filtered);
|
2633
2442
|
if (settings.preserveHTML) {
|
2634
2443
|
$text.html(text);
|
2635
2444
|
} else {
|
@@ -2638,11 +2447,9 @@
|
|
2638
2447
|
}
|
2639
2448
|
},
|
2640
2449
|
selectedItem: function ($item) {
|
2641
|
-
|
2642
|
-
|
2643
|
-
|
2644
|
-
text = module.get.choiceText($item)
|
2645
|
-
;
|
2450
|
+
let value = module.get.choiceValue($item);
|
2451
|
+
let searchText = module.get.choiceText($item, false);
|
2452
|
+
let text = module.get.choiceText($item);
|
2646
2453
|
module.debug('Setting user selection to item', $item);
|
2647
2454
|
module.remove.activeItem();
|
2648
2455
|
module.set.partialSearch(searchText);
|
@@ -2651,13 +2458,11 @@
|
|
2651
2458
|
module.set.text(text);
|
2652
2459
|
},
|
2653
2460
|
selectedLetter: function (letter) {
|
2654
|
-
|
2655
|
-
|
2656
|
-
|
2657
|
-
|
2658
|
-
|
2659
|
-
;
|
2660
|
-
// check next of same letter
|
2461
|
+
let $selectedItem = $item.filter('.' + className.selected);
|
2462
|
+
let alreadySelectedLetter = $selectedItem.length > 0 && module.has.firstLetter($selectedItem, letter);
|
2463
|
+
let $nextValue = false;
|
2464
|
+
let $nextItem;
|
2465
|
+
// check next of the same letter
|
2661
2466
|
if (alreadySelectedLetter) {
|
2662
2467
|
$nextItem = $selectedItem.nextAll($item).eq(0);
|
2663
2468
|
if (module.has.firstLetter($nextItem, letter)) {
|
@@ -2673,10 +2478,9 @@
|
|
2673
2478
|
|
2674
2479
|
return false;
|
2675
2480
|
}
|
2676
|
-
})
|
2677
|
-
;
|
2481
|
+
});
|
2678
2482
|
}
|
2679
|
-
// set next value
|
2483
|
+
// set the next value
|
2680
2484
|
if ($nextValue) {
|
2681
2485
|
module.verbose('Scrolling to next value with letter', letter);
|
2682
2486
|
module.set.scrollPosition($nextValue);
|
@@ -2693,7 +2497,7 @@
|
|
2693
2497
|
if (!$menu) {
|
2694
2498
|
module.remove.upward();
|
2695
2499
|
} else if (module.is.upward($menu)) {
|
2696
|
-
// we need make sure when make assertion openDownward for $menu, $menu does not have upward class
|
2500
|
+
// we need to make sure when make assertion openDownward for $menu, $menu does not have upward class
|
2697
2501
|
module.remove.upward($menu);
|
2698
2502
|
}
|
2699
2503
|
|
@@ -2710,11 +2514,11 @@
|
|
2710
2514
|
}
|
2711
2515
|
},
|
2712
2516
|
upward: function ($currentMenu) {
|
2713
|
-
|
2517
|
+
let $element = $currentMenu || $module;
|
2714
2518
|
$element.addClass(className.upward);
|
2715
2519
|
},
|
2716
2520
|
leftward: function ($currentMenu) {
|
2717
|
-
|
2521
|
+
let $element = $currentMenu || $menu;
|
2718
2522
|
$element.addClass(className.leftward);
|
2719
2523
|
},
|
2720
2524
|
value: function (value, text, $selected, preventChangeTrigger) {
|
@@ -2728,14 +2532,12 @@
|
|
2728
2532
|
} else {
|
2729
2533
|
$input.addClass(className.noselection);
|
2730
2534
|
}
|
2731
|
-
|
2732
|
-
|
2733
|
-
|
2734
|
-
|
2735
|
-
|
2736
|
-
|
2737
|
-
: value
|
2738
|
-
;
|
2535
|
+
let escapedValue = module.escape.value(value);
|
2536
|
+
let hasInput = $input.length > 0;
|
2537
|
+
let currentValue = module.get.values();
|
2538
|
+
let stringValue = value !== undefined
|
2539
|
+
? String(value)
|
2540
|
+
: value;
|
2739
2541
|
if (hasInput) {
|
2740
2542
|
if (!settings.allowReselection && stringValue == currentValue) {
|
2741
2543
|
module.verbose('Skipping value update already same value', value, currentValue);
|
@@ -2751,8 +2553,7 @@
|
|
2751
2553
|
module.debug('Updating input value', escapedValue, currentValue);
|
2752
2554
|
internalChange = true;
|
2753
2555
|
$input
|
2754
|
-
.val(escapedValue)
|
2755
|
-
;
|
2556
|
+
.val(escapedValue);
|
2756
2557
|
if (settings.fireOnInit === false && module.is.initialLoad()) {
|
2757
2558
|
module.debug('Input native change event ignored on initial load');
|
2758
2559
|
} else if (preventChangeTrigger !== true) {
|
@@ -2773,8 +2574,7 @@
|
|
2773
2574
|
},
|
2774
2575
|
active: function () {
|
2775
2576
|
$module
|
2776
|
-
.addClass(className.active)
|
2777
|
-
;
|
2577
|
+
.addClass(className.active);
|
2778
2578
|
},
|
2779
2579
|
multiple: function () {
|
2780
2580
|
$module.addClass(className.multiple);
|
@@ -2797,9 +2597,7 @@
|
|
2797
2597
|
preventChangeTrigger = $selectedItem;
|
2798
2598
|
$selectedItem = undefined;
|
2799
2599
|
}
|
2800
|
-
|
2801
|
-
isMultiple = module.is.multiple()
|
2802
|
-
;
|
2600
|
+
let isMultiple = module.is.multiple();
|
2803
2601
|
$selectedItem = settings.allowAdditions
|
2804
2602
|
? $selectedItem || module.get.itemWithAdditions(value)
|
2805
2603
|
: $selectedItem || module.get.item(value);
|
@@ -2827,17 +2625,15 @@
|
|
2827
2625
|
// select each item
|
2828
2626
|
$selectedItem
|
2829
2627
|
.each(function () {
|
2830
|
-
|
2831
|
-
|
2832
|
-
|
2833
|
-
|
2834
|
-
|
2835
|
-
|
2836
|
-
|
2837
|
-
|
2838
|
-
|
2839
|
-
shouldAnimate = isMultiple && $selectedItem && $selectedItem.length === 1
|
2840
|
-
;
|
2628
|
+
let $selected = $(this);
|
2629
|
+
let selectedText = module.get.choiceText($selected);
|
2630
|
+
let selectedValue = module.get.choiceValue($selected, selectedText);
|
2631
|
+
|
2632
|
+
let isFiltered = $selected.hasClass(className.filtered);
|
2633
|
+
let isActive = $selected.hasClass(className.active);
|
2634
|
+
let isActionable = $selected.hasClass(className.actionable);
|
2635
|
+
let isUserValue = $selected.hasClass(className.addition);
|
2636
|
+
let shouldAnimate = isMultiple && $selectedItem && $selectedItem.length === 1;
|
2841
2637
|
if (isActionable) {
|
2842
2638
|
if ((!isMultiple || (!isActive || isUserValue)) && settings.apiSettings && settings.saveRemoteData) {
|
2843
2639
|
module.save.remoteData(selectedText, selectedValue);
|
@@ -2873,11 +2669,9 @@
|
|
2873
2669
|
module.set.value(selectedValue, selectedText, $selected, preventChangeTrigger);
|
2874
2670
|
$selected
|
2875
2671
|
.addClass(className.active)
|
2876
|
-
.addClass(className.selected)
|
2877
|
-
;
|
2672
|
+
.addClass(className.selected);
|
2878
2673
|
}
|
2879
|
-
})
|
2880
|
-
;
|
2674
|
+
});
|
2881
2675
|
if (!keepSearchTerm) {
|
2882
2676
|
module.remove.searchTerm();
|
2883
2677
|
}
|
@@ -2890,21 +2684,18 @@
|
|
2890
2684
|
|
2891
2685
|
add: {
|
2892
2686
|
label: function (value, text, shouldAnimate) {
|
2893
|
-
|
2894
|
-
$
|
2895
|
-
|
2896
|
-
|
2897
|
-
|
2898
|
-
$label
|
2899
|
-
;
|
2687
|
+
let $next = module.is.searchSelection()
|
2688
|
+
? $search
|
2689
|
+
: $text;
|
2690
|
+
let escapedValue = module.escape.value(value);
|
2691
|
+
let $label;
|
2900
2692
|
if (settings.ignoreCase) {
|
2901
2693
|
escapedValue = escapedValue.toLowerCase();
|
2902
2694
|
}
|
2903
2695
|
$label = $('<a />')
|
2904
2696
|
.addClass(className.label)
|
2905
2697
|
.attr('data-' + metadata.value, escapedValue)
|
2906
|
-
.html(templates.label(escapedValue, text, settings
|
2907
|
-
;
|
2698
|
+
.html(templates.label(escapedValue, text, settings));
|
2908
2699
|
$label = settings.onLabelCreate.call($label, escapedValue, text);
|
2909
2700
|
|
2910
2701
|
if (module.has.label(value)) {
|
@@ -2926,38 +2717,30 @@
|
|
2926
2717
|
verbose: settings.verbose,
|
2927
2718
|
silent: settings.silent,
|
2928
2719
|
duration: settings.label.duration,
|
2929
|
-
})
|
2930
|
-
;
|
2720
|
+
});
|
2931
2721
|
} else {
|
2932
2722
|
module.debug('Adding selection label', $label);
|
2933
2723
|
$label
|
2934
|
-
.insertBefore($next)
|
2935
|
-
;
|
2724
|
+
.insertBefore($next);
|
2936
2725
|
}
|
2937
2726
|
},
|
2938
2727
|
message: function (message) {
|
2939
|
-
|
2940
|
-
|
2941
|
-
html = settings.templates.message(module.add.variables(message))
|
2942
|
-
;
|
2728
|
+
let $message = $menu.children(selector.message);
|
2729
|
+
let html = settings.templates.message(module.add.variables(message));
|
2943
2730
|
if ($message.length > 0) {
|
2944
2731
|
$message
|
2945
|
-
.html(html)
|
2946
|
-
;
|
2732
|
+
.html(html);
|
2947
2733
|
} else {
|
2948
2734
|
$('<div/>')
|
2949
2735
|
.html(html)
|
2950
2736
|
.addClass(className.message)
|
2951
|
-
.appendTo($menu)
|
2952
|
-
;
|
2737
|
+
.appendTo($menu);
|
2953
2738
|
}
|
2954
2739
|
},
|
2955
2740
|
optionValue: function (value) {
|
2956
|
-
|
2957
|
-
|
2958
|
-
|
2959
|
-
hasOption = $option.length > 0
|
2960
|
-
;
|
2741
|
+
let escapedValue = module.escape.value(value);
|
2742
|
+
let $option = $input.find('option[value="' + CSS.escape(escapedValue) + '"]');
|
2743
|
+
let hasOption = $option.length > 0;
|
2961
2744
|
if (hasOption) {
|
2962
2745
|
return;
|
2963
2746
|
}
|
@@ -2971,19 +2754,16 @@
|
|
2971
2754
|
.prop('value', escapedValue)
|
2972
2755
|
.addClass(className.addition)
|
2973
2756
|
.text(value)
|
2974
|
-
.appendTo($input)
|
2975
|
-
;
|
2757
|
+
.appendTo($input);
|
2976
2758
|
module.verbose('Adding user addition as an <option>', value);
|
2977
2759
|
module.observe.select();
|
2978
2760
|
},
|
2979
2761
|
userSuggestion: function (value) {
|
2980
|
-
|
2981
|
-
|
2982
|
-
|
2983
|
-
|
2984
|
-
|
2985
|
-
html
|
2986
|
-
;
|
2762
|
+
let $addition = $menu.children(selector.addition);
|
2763
|
+
let $existingItem = module.get.item(value);
|
2764
|
+
let alreadyHasValue = $existingItem && $existingItem.not(selector.addition).length > 0;
|
2765
|
+
let hasUserSuggestion = $addition.length > 0;
|
2766
|
+
let html;
|
2987
2767
|
if (settings.useLabels && module.has.maxSelections()) {
|
2988
2768
|
return;
|
2989
2769
|
}
|
@@ -2998,38 +2778,32 @@
|
|
2998
2778
|
.data(metadata.text, value)
|
2999
2779
|
.attr('data-' + metadata.value, value)
|
3000
2780
|
.attr('data-' + metadata.text, value)
|
3001
|
-
.removeClass(className.filtered)
|
3002
|
-
;
|
2781
|
+
.removeClass(className.filtered);
|
3003
2782
|
if (!settings.hideAdditions) {
|
3004
2783
|
html = settings.templates.addition(module.add.variables(message.addResult, value));
|
3005
2784
|
$addition
|
3006
|
-
.html(html)
|
3007
|
-
;
|
2785
|
+
.html(html);
|
3008
2786
|
}
|
3009
2787
|
module.verbose('Replacing user suggestion with new value', $addition);
|
3010
2788
|
} else {
|
3011
2789
|
$addition = module.create.userChoice(value);
|
3012
2790
|
$addition
|
3013
|
-
.prependTo($menu)
|
3014
|
-
;
|
2791
|
+
.prependTo($menu);
|
3015
2792
|
module.verbose('Adding item choice to menu corresponding with user choice addition', $addition);
|
3016
2793
|
}
|
3017
2794
|
if (!settings.hideAdditions || module.is.allFiltered()) {
|
3018
2795
|
$addition
|
3019
2796
|
.addClass(className.selected)
|
3020
2797
|
.siblings()
|
3021
|
-
.removeClass(className.selected)
|
3022
|
-
;
|
2798
|
+
.removeClass(className.selected);
|
3023
2799
|
}
|
3024
2800
|
module.refreshItems();
|
3025
2801
|
},
|
3026
2802
|
variables: function (message, term) {
|
3027
|
-
|
3028
|
-
|
3029
|
-
|
3030
|
-
|
3031
|
-
query
|
3032
|
-
;
|
2803
|
+
let hasCount = message.search('{count}') !== -1;
|
2804
|
+
let hasMaxCount = message.search('{maxCount}') !== -1;
|
2805
|
+
let hasTerm = message.search('{term}') !== -1;
|
2806
|
+
let query;
|
3033
2807
|
module.verbose('Adding templated variables to message', message);
|
3034
2808
|
if (hasCount) {
|
3035
2809
|
message = message.replace('{count}', module.get.selectionCount());
|
@@ -3050,10 +2824,8 @@
|
|
3050
2824
|
$selectedItem = undefined;
|
3051
2825
|
addedText = undefined;
|
3052
2826
|
}
|
3053
|
-
|
3054
|
-
|
3055
|
-
newValue
|
3056
|
-
;
|
2827
|
+
let currentValue = module.get.values(true);
|
2828
|
+
let newValue;
|
3057
2829
|
if (module.has.value(addedValue)) {
|
3058
2830
|
module.debug('Value already selected');
|
3059
2831
|
|
@@ -3109,11 +2881,11 @@
|
|
3109
2881
|
initialLoad = false;
|
3110
2882
|
},
|
3111
2883
|
upward: function ($currentMenu) {
|
3112
|
-
|
2884
|
+
let $element = $currentMenu || $module;
|
3113
2885
|
$element.removeClass(className.upward);
|
3114
2886
|
},
|
3115
2887
|
leftward: function ($currentMenu) {
|
3116
|
-
|
2888
|
+
let $element = $currentMenu || $menu;
|
3117
2889
|
$element.removeClass(className.leftward);
|
3118
2890
|
},
|
3119
2891
|
visible: function () {
|
@@ -3125,7 +2897,7 @@
|
|
3125
2897
|
filteredItem: function () {
|
3126
2898
|
if (settings.highlightMatches) {
|
3127
2899
|
$.each($item, function (index, item) {
|
3128
|
-
|
2900
|
+
let $markItem = $(item);
|
3129
2901
|
$markItem.html($markItem.html().replace(/<\/?mark>/g, ''));
|
3130
2902
|
});
|
3131
2903
|
}
|
@@ -3143,11 +2915,9 @@
|
|
3143
2915
|
module.remove.empty();
|
3144
2916
|
},
|
3145
2917
|
optionValue: function (value) {
|
3146
|
-
|
3147
|
-
|
3148
|
-
|
3149
|
-
hasOption = $option.length > 0
|
3150
|
-
;
|
2918
|
+
let escapedValue = module.escape.value(value);
|
2919
|
+
let $option = $input.find('option[value="' + CSS.escape(escapedValue) + '"]');
|
2920
|
+
let hasOption = $option.length > 0;
|
3151
2921
|
if (!hasOption || !$option.hasClass(className.addition)) {
|
3152
2922
|
return;
|
3153
2923
|
}
|
@@ -3182,11 +2952,9 @@
|
|
3182
2952
|
|
3183
2953
|
$selectedItem
|
3184
2954
|
.each(function () {
|
3185
|
-
|
3186
|
-
|
3187
|
-
|
3188
|
-
selectedValue = module.get.choiceValue($selected, selectedText)
|
3189
|
-
;
|
2955
|
+
let $selected = $(this);
|
2956
|
+
let selectedText = module.get.choiceText($selected);
|
2957
|
+
let selectedValue = module.get.choiceValue($selected, selectedText);
|
3190
2958
|
if (module.is.multiple()) {
|
3191
2959
|
if (settings.useLabels) {
|
3192
2960
|
module.remove.value(selectedValue, selectedText, $selected, preventChangeTrigger);
|
@@ -3204,22 +2972,18 @@
|
|
3204
2972
|
}
|
3205
2973
|
$selected
|
3206
2974
|
.removeClass(className.filtered)
|
3207
|
-
.removeClass(className.active)
|
3208
|
-
;
|
2975
|
+
.removeClass(className.active);
|
3209
2976
|
if (settings.useLabels) {
|
3210
2977
|
$selected.removeClass(className.selected);
|
3211
2978
|
}
|
3212
|
-
})
|
3213
|
-
;
|
2979
|
+
});
|
3214
2980
|
},
|
3215
2981
|
selectedItem: function () {
|
3216
2982
|
$item.removeClass(className.selected);
|
3217
2983
|
},
|
3218
2984
|
value: function (removedValue, removedText, $removedItem, preventChangeTrigger) {
|
3219
|
-
|
3220
|
-
|
3221
|
-
newValue
|
3222
|
-
;
|
2985
|
+
let values = module.get.values(true);
|
2986
|
+
let newValue;
|
3223
2987
|
if (module.has.selectInput()) {
|
3224
2988
|
module.verbose('Input is <select> removing selected option', removedValue);
|
3225
2989
|
newValue = module.remove.arrayValue(removedValue, values);
|
@@ -3249,11 +3013,9 @@
|
|
3249
3013
|
return values;
|
3250
3014
|
},
|
3251
3015
|
label: function (value, shouldAnimate) {
|
3252
|
-
|
3253
|
-
|
3254
|
-
|
3255
|
-
$removedLabel = $labels.filter('[data-' + metadata.value + '="' + module.escape.string(settings.ignoreCase ? escapedValue.toLowerCase() : escapedValue) + '"]')
|
3256
|
-
;
|
3016
|
+
let escapedValue = module.escape.value(value);
|
3017
|
+
let $labels = $module.find(selector.label);
|
3018
|
+
let $removedLabel = $labels.filter('[data-' + metadata.value + '="' + CSS.escape(settings.ignoreCase ? escapedValue.toLowerCase() : escapedValue) + '"]');
|
3257
3019
|
module.verbose('Removing label', $removedLabel);
|
3258
3020
|
$removedLabel.remove();
|
3259
3021
|
},
|
@@ -3267,14 +3029,12 @@
|
|
3267
3029
|
module.verbose('Removing labels', $labels);
|
3268
3030
|
$labels
|
3269
3031
|
.each(function () {
|
3270
|
-
|
3271
|
-
|
3272
|
-
|
3273
|
-
|
3274
|
-
|
3275
|
-
|
3276
|
-
isUserValue = module.is.userValue(stringValue)
|
3277
|
-
;
|
3032
|
+
let $label = $(this);
|
3033
|
+
let value = $label.data(metadata.value);
|
3034
|
+
let stringValue = value !== undefined
|
3035
|
+
? String(value)
|
3036
|
+
: value;
|
3037
|
+
let isUserValue = module.is.userValue(stringValue);
|
3278
3038
|
if (settings.onLabelRemove.call($label, value) === false) {
|
3279
3039
|
module.debug('Label remove callback cancelled removal');
|
3280
3040
|
|
@@ -3288,26 +3048,21 @@
|
|
3288
3048
|
// selected will also remove label
|
3289
3049
|
module.remove.selected(stringValue, false, preventChangeTrigger);
|
3290
3050
|
}
|
3291
|
-
})
|
3292
|
-
;
|
3051
|
+
});
|
3293
3052
|
},
|
3294
3053
|
tabbable: function () {
|
3295
3054
|
if (module.is.searchSelection()) {
|
3296
3055
|
module.debug('Searchable dropdown initialized');
|
3297
3056
|
$search
|
3298
|
-
.removeAttr('tabindex')
|
3299
|
-
;
|
3057
|
+
.removeAttr('tabindex');
|
3300
3058
|
$menu
|
3301
|
-
.removeAttr('tabindex')
|
3302
|
-
;
|
3059
|
+
.removeAttr('tabindex');
|
3303
3060
|
} else {
|
3304
3061
|
module.debug('Simple selection dropdown initialized');
|
3305
3062
|
$module
|
3306
|
-
.removeAttr('tabindex')
|
3307
|
-
;
|
3063
|
+
.removeAttr('tabindex');
|
3308
3064
|
$menu
|
3309
|
-
.removeAttr('tabindex')
|
3310
|
-
;
|
3065
|
+
.removeAttr('tabindex');
|
3311
3066
|
}
|
3312
3067
|
},
|
3313
3068
|
diacritics: function (text) {
|
@@ -3344,10 +3099,8 @@
|
|
3344
3099
|
return true;
|
3345
3100
|
},
|
3346
3101
|
firstLetter: function ($item, letter) {
|
3347
|
-
|
3348
|
-
|
3349
|
-
firstLetter
|
3350
|
-
;
|
3102
|
+
let text;
|
3103
|
+
let firstLetter;
|
3351
3104
|
if (!$item || $item.length === 0 || typeof letter !== 'string') {
|
3352
3105
|
return false;
|
3353
3106
|
}
|
@@ -3373,23 +3126,19 @@
|
|
3373
3126
|
return $menu.children(selector.message).length > 0;
|
3374
3127
|
},
|
3375
3128
|
label: function (value) {
|
3376
|
-
|
3377
|
-
|
3378
|
-
$labels = $module.find(selector.label)
|
3379
|
-
;
|
3129
|
+
let escapedValue = module.escape.value(value);
|
3130
|
+
let $labels = $module.find(selector.label);
|
3380
3131
|
if (settings.ignoreCase) {
|
3381
3132
|
escapedValue = escapedValue.toLowerCase();
|
3382
3133
|
}
|
3383
3134
|
|
3384
|
-
return $labels.filter('[data-' + metadata.value + '="' +
|
3135
|
+
return $labels.filter('[data-' + metadata.value + '="' + CSS.escape(escapedValue) + '"]').length > 0;
|
3385
3136
|
},
|
3386
3137
|
maxSelections: function () {
|
3387
3138
|
return settings.maxSelections && module.get.selectionCount() >= settings.maxSelections;
|
3388
3139
|
},
|
3389
3140
|
allResultsFiltered: function () {
|
3390
|
-
|
3391
|
-
$normalResults = $item.not(selector.addition)
|
3392
|
-
;
|
3141
|
+
let $normalResults = $item.not(selector.addition);
|
3393
3142
|
|
3394
3143
|
return $normalResults.filter(selector.unselectable).length === $normalResults.length;
|
3395
3144
|
},
|
@@ -3405,20 +3154,16 @@
|
|
3405
3154
|
: module.has.valueMatchingCase(value);
|
3406
3155
|
},
|
3407
3156
|
valueMatchingCase: function (value) {
|
3408
|
-
|
3409
|
-
|
3410
|
-
|
3411
|
-
|
3412
|
-
: values == value
|
3413
|
-
;
|
3157
|
+
let values = module.get.values(true);
|
3158
|
+
let hasValue = Array.isArray(values)
|
3159
|
+
? values && ($.inArray(value, values) !== -1)
|
3160
|
+
: values == value;
|
3414
3161
|
|
3415
3162
|
return !!hasValue;
|
3416
3163
|
},
|
3417
3164
|
valueIgnoringCase: function (value) {
|
3418
|
-
|
3419
|
-
|
3420
|
-
hasValue = false
|
3421
|
-
;
|
3165
|
+
let values = module.get.values(true);
|
3166
|
+
let hasValue = false;
|
3422
3167
|
if (!Array.isArray(values)) {
|
3423
3168
|
values = [values];
|
3424
3169
|
}
|
@@ -3450,9 +3195,6 @@
|
|
3450
3195
|
bubbledIconClick: function (event) {
|
3451
3196
|
return $(event.target).closest($icon).length > 0;
|
3452
3197
|
},
|
3453
|
-
edge: function () {
|
3454
|
-
return !!window.chrome && !!window.StyleMedia;
|
3455
|
-
},
|
3456
3198
|
empty: function () {
|
3457
3199
|
return $module.hasClass(className.empty);
|
3458
3200
|
},
|
@@ -3468,12 +3210,12 @@
|
|
3468
3210
|
: $menu.transition && $menu.transition('is animating');
|
3469
3211
|
},
|
3470
3212
|
leftward: function ($subMenu) {
|
3471
|
-
|
3213
|
+
let $selectedMenu = $subMenu || $menu;
|
3472
3214
|
|
3473
3215
|
return $selectedMenu.hasClass(className.leftward);
|
3474
3216
|
},
|
3475
3217
|
clearable: function () {
|
3476
|
-
|
3218
|
+
let hasClearableClass = $module.hasClass(className.clearable);
|
3477
3219
|
if (!hasClearableClass && settings.clearable) {
|
3478
3220
|
$module.addClass(className.clearable);
|
3479
3221
|
}
|
@@ -3499,9 +3241,7 @@
|
|
3499
3241
|
return initialLoad;
|
3500
3242
|
},
|
3501
3243
|
inObject: function (needle, object) {
|
3502
|
-
|
3503
|
-
found = false
|
3504
|
-
;
|
3244
|
+
let found = false;
|
3505
3245
|
$.each(object, function (index, property) {
|
3506
3246
|
if (property == needle) {
|
3507
3247
|
found = true;
|
@@ -3525,9 +3265,7 @@
|
|
3525
3265
|
return !module.is.multiple();
|
3526
3266
|
},
|
3527
3267
|
selectMutation: function (mutations) {
|
3528
|
-
|
3529
|
-
selectChanged = false
|
3530
|
-
;
|
3268
|
+
let selectChanged = false;
|
3531
3269
|
$.each(mutations, function (index, mutation) {
|
3532
3270
|
if ($(mutation.target).is('option, optgroup') || $(mutation.addedNodes).is('select') || ($(mutation.target).is('select') && mutation.type !== 'attributes')) {
|
3533
3271
|
selectChanged = true;
|
@@ -3551,7 +3289,7 @@
|
|
3551
3289
|
return $.inArray(value, module.get.userValues()) !== -1;
|
3552
3290
|
},
|
3553
3291
|
upward: function ($menu) {
|
3554
|
-
|
3292
|
+
let $element = $menu || $module;
|
3555
3293
|
|
3556
3294
|
return $element.hasClass(className.upward);
|
3557
3295
|
},
|
@@ -3561,20 +3299,16 @@
|
|
3561
3299
|
: $menu.hasClass(className.visible);
|
3562
3300
|
},
|
3563
3301
|
verticallyScrollableContext: function () {
|
3564
|
-
|
3565
|
-
|
3566
|
-
|
3567
|
-
: false
|
3568
|
-
;
|
3302
|
+
let overflowY = $context[0] !== window
|
3303
|
+
? $context.css('overflow-y')
|
3304
|
+
: false;
|
3569
3305
|
|
3570
3306
|
return overflowY === 'auto' || overflowY === 'scroll';
|
3571
3307
|
},
|
3572
3308
|
horizontallyScrollableContext: function () {
|
3573
|
-
|
3574
|
-
|
3575
|
-
|
3576
|
-
: false
|
3577
|
-
;
|
3309
|
+
let overflowX = $context[0] !== window
|
3310
|
+
? $context.css('overflow-X')
|
3311
|
+
: false;
|
3578
3312
|
|
3579
3313
|
return overflowX === 'auto' || overflowX === 'scroll';
|
3580
3314
|
},
|
@@ -3589,15 +3323,12 @@
|
|
3589
3323
|
);
|
3590
3324
|
},
|
3591
3325
|
openDownward: function ($subMenu) {
|
3592
|
-
|
3593
|
-
|
3594
|
-
|
3595
|
-
|
3596
|
-
calculations
|
3597
|
-
;
|
3326
|
+
let $currentMenu = $subMenu || $menu;
|
3327
|
+
let canOpenDownward;
|
3328
|
+
let onScreen;
|
3329
|
+
let calculations;
|
3598
3330
|
$currentMenu
|
3599
|
-
.addClass(className.loading)
|
3600
|
-
;
|
3331
|
+
.addClass(className.loading);
|
3601
3332
|
calculations = {
|
3602
3333
|
context: {
|
3603
3334
|
offset: $context[0] === window
|
@@ -3636,15 +3367,12 @@
|
|
3636
3367
|
return canOpenDownward;
|
3637
3368
|
},
|
3638
3369
|
openRightward: function ($subMenu) {
|
3639
|
-
|
3640
|
-
|
3641
|
-
|
3642
|
-
|
3643
|
-
calculations
|
3644
|
-
;
|
3370
|
+
let $currentMenu = $subMenu || $menu;
|
3371
|
+
let canOpenRightward = true;
|
3372
|
+
let isOffscreenRight = false;
|
3373
|
+
let calculations;
|
3645
3374
|
$currentMenu
|
3646
|
-
.addClass(className.loading)
|
3647
|
-
;
|
3375
|
+
.addClass(className.loading);
|
3648
3376
|
calculations = {
|
3649
3377
|
context: {
|
3650
3378
|
offset: $context[0] === window
|
@@ -3691,17 +3419,15 @@
|
|
3691
3419
|
|
3692
3420
|
animate: {
|
3693
3421
|
show: function (callback, $subMenu) {
|
3694
|
-
|
3695
|
-
|
3696
|
-
|
3697
|
-
|
3698
|
-
|
3699
|
-
|
3700
|
-
|
3701
|
-
|
3702
|
-
|
3703
|
-
transition
|
3704
|
-
;
|
3422
|
+
let $currentMenu = $subMenu || $menu;
|
3423
|
+
let start = $subMenu
|
3424
|
+
? function () {}
|
3425
|
+
: function () {
|
3426
|
+
module.hideSubMenus();
|
3427
|
+
module.hideOthers();
|
3428
|
+
module.set.active();
|
3429
|
+
};
|
3430
|
+
let transition;
|
3705
3431
|
callback = isFunction(callback)
|
3706
3432
|
? callback
|
3707
3433
|
: function () {};
|
@@ -3732,22 +3458,19 @@
|
|
3732
3458
|
onComplete: function () {
|
3733
3459
|
callback.call(element);
|
3734
3460
|
},
|
3735
|
-
})
|
3736
|
-
;
|
3461
|
+
});
|
3737
3462
|
}
|
3738
3463
|
}
|
3739
3464
|
},
|
3740
3465
|
hide: function (callback, $subMenu) {
|
3741
|
-
|
3742
|
-
|
3743
|
-
|
3744
|
-
|
3745
|
-
|
3746
|
-
|
3747
|
-
|
3748
|
-
|
3749
|
-
transition = settings.transition.hideMethod || module.get.transition($subMenu)
|
3750
|
-
;
|
3466
|
+
let $currentMenu = $subMenu || $menu;
|
3467
|
+
let start = $subMenu
|
3468
|
+
? function () {}
|
3469
|
+
: function () {
|
3470
|
+
module.unbind.intent();
|
3471
|
+
module.remove.active();
|
3472
|
+
};
|
3473
|
+
let transition = settings.transition.hideMethod || module.get.transition($subMenu);
|
3751
3474
|
callback = isFunction(callback)
|
3752
3475
|
? callback
|
3753
3476
|
: function () {};
|
@@ -3774,8 +3497,7 @@
|
|
3774
3497
|
onComplete: function () {
|
3775
3498
|
callback.call(element);
|
3776
3499
|
},
|
3777
|
-
})
|
3778
|
-
;
|
3500
|
+
});
|
3779
3501
|
} else {
|
3780
3502
|
module.error(error.transition);
|
3781
3503
|
}
|
@@ -3816,13 +3538,11 @@
|
|
3816
3538
|
|
3817
3539
|
escape: {
|
3818
3540
|
value: function (value) {
|
3819
|
-
|
3820
|
-
|
3821
|
-
|
3822
|
-
|
3823
|
-
|
3824
|
-
values = []
|
3825
|
-
;
|
3541
|
+
let multipleValues = Array.isArray(value);
|
3542
|
+
let stringValue = typeof value === 'string';
|
3543
|
+
let isUnparsable = !stringValue && !multipleValues;
|
3544
|
+
let hasQuotes = stringValue && value.search(regExp.quote) !== -1;
|
3545
|
+
let values = [];
|
3826
3546
|
if (isUnparsable || !hasQuotes) {
|
3827
3547
|
return value;
|
3828
3548
|
}
|
@@ -3844,26 +3564,19 @@
|
|
3844
3564
|
},
|
3845
3565
|
htmlEntities: function (string, forceAmpersand) {
|
3846
3566
|
forceAmpersand = typeof forceAmpersand === 'number' ? false : forceAmpersand;
|
3847
|
-
var
|
3848
|
-
badChars = /["'<>`]/g,
|
3849
|
-
shouldEscape = /["&'<>`]/,
|
3850
|
-
escape = {
|
3851
|
-
'<': '<',
|
3852
|
-
'>': '>',
|
3853
|
-
'"': '"',
|
3854
|
-
"'": ''',
|
3855
|
-
'`': '`',
|
3856
|
-
},
|
3857
|
-
escapedChar = function (chr) {
|
3858
|
-
return escape[chr];
|
3859
|
-
}
|
3860
|
-
;
|
3861
|
-
if (shouldEscape.test(string)) {
|
3862
|
-
string = string.replace(forceAmpersand ? /&/g : /&(?![\d#a-z]{1,12};)/gi, '&');
|
3863
|
-
string = string.replace(badChars, escapedChar);
|
3864
|
-
}
|
3865
3567
|
|
3866
|
-
|
3568
|
+
const badChars = forceAmpersand
|
3569
|
+
? /["&'<>]/g
|
3570
|
+
: /["'<>]|&(?![\d#A-Za-z]{1,12};)/g;
|
3571
|
+
const escape = {
|
3572
|
+
'"': '"',
|
3573
|
+
'&': '&',
|
3574
|
+
"'": ''',
|
3575
|
+
'<': '<',
|
3576
|
+
'>': '>',
|
3577
|
+
};
|
3578
|
+
|
3579
|
+
return String(string).replace(badChars, (chr) => escape[chr]);
|
3867
3580
|
},
|
3868
3581
|
},
|
3869
3582
|
|
@@ -3918,11 +3631,9 @@
|
|
3918
3631
|
},
|
3919
3632
|
performance: {
|
3920
3633
|
log: function (message) {
|
3921
|
-
|
3922
|
-
|
3923
|
-
|
3924
|
-
previousTime
|
3925
|
-
;
|
3634
|
+
let currentTime;
|
3635
|
+
let executionTime;
|
3636
|
+
let previousTime;
|
3926
3637
|
if (settings.performance) {
|
3927
3638
|
currentTime = Date.now();
|
3928
3639
|
previousTime = time || currentTime;
|
@@ -3941,10 +3652,8 @@
|
|
3941
3652
|
}, 500);
|
3942
3653
|
},
|
3943
3654
|
display: function () {
|
3944
|
-
|
3945
|
-
|
3946
|
-
totalTime = 0
|
3947
|
-
;
|
3655
|
+
let title = settings.name + ':';
|
3656
|
+
let totalTime = 0;
|
3948
3657
|
time = false;
|
3949
3658
|
clearTimeout(module.performance.timer);
|
3950
3659
|
$.each(performance, function (index, data) {
|
@@ -3966,22 +3675,19 @@
|
|
3966
3675
|
},
|
3967
3676
|
},
|
3968
3677
|
invoke: function (query, passedArguments, context) {
|
3969
|
-
|
3970
|
-
|
3971
|
-
|
3972
|
-
|
3973
|
-
response
|
3974
|
-
;
|
3678
|
+
let object = instance;
|
3679
|
+
let maxDepth;
|
3680
|
+
let found;
|
3681
|
+
let response;
|
3975
3682
|
passedArguments = passedArguments || queryArguments;
|
3976
3683
|
context = context || element;
|
3977
3684
|
if (typeof query === 'string' && object !== undefined) {
|
3978
3685
|
query = query.split(/[ .]/);
|
3979
3686
|
maxDepth = query.length - 1;
|
3980
3687
|
$.each(query, function (depth, value) {
|
3981
|
-
|
3688
|
+
let camelCaseValue = depth !== maxDepth
|
3982
3689
|
? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
|
3983
|
-
: query
|
3984
|
-
;
|
3690
|
+
: query;
|
3985
3691
|
if ($.isPlainObject(object[camelCaseValue]) && (depth !== maxDepth)) {
|
3986
3692
|
object = object[camelCaseValue];
|
3987
3693
|
} else if (object[camelCaseValue] !== undefined) {
|
@@ -4066,33 +3772,33 @@
|
|
4066
3772
|
match: 'both', // what to match against with search selection (both, text, or label)
|
4067
3773
|
fullTextSearch: 'exact', // search anywhere in value (set to 'exact' to require exact matches)
|
4068
3774
|
highlightMatches: false, // Whether search result should highlight matching strings
|
4069
|
-
ignoreDiacritics: false, // match results also if they contain diacritics of the same base character (for example searching for "a" will also match "á" or "â" or "à", etc...)
|
3775
|
+
ignoreDiacritics: false, // match results also if they contain diacritics of the same base character (for example, searching for "a" will also match "á" or "â" or "à", etc...)
|
4070
3776
|
hideDividers: false, // Whether to hide any divider elements (specified in selector.divider) that are sibling to any items when searched (set to true will hide all dividers, set to 'empty' will hide them when they are not followed by a visible item)
|
4071
3777
|
|
4072
|
-
placeholder: 'auto', // whether to convert blank <select> values to placeholder text
|
4073
|
-
preserveHTML:
|
3778
|
+
placeholder: 'auto', // whether to convert blank <select> values to the placeholder text
|
3779
|
+
preserveHTML: false, // preserve HTML when selecting value
|
4074
3780
|
sortSelect: false, // sort selection on init
|
4075
3781
|
|
4076
3782
|
forceSelection: false, // force a choice on blur with search selection
|
4077
3783
|
|
4078
3784
|
allowAdditions: false, // whether multiple select should allow user added values
|
4079
|
-
keepSearchTerm: false, // whether the search value should be kept and menu stays filtered on item selection
|
3785
|
+
keepSearchTerm: false, // whether the search value should be kept, and the menu stays filtered on item selection
|
4080
3786
|
ignoreCase: false, // whether to consider case sensitivity when creating labels
|
4081
3787
|
ignoreSearchCase: true, // whether to consider case sensitivity when filtering items
|
4082
|
-
hideAdditions: true, // whether
|
3788
|
+
hideAdditions: true, // whether to hide a special message prompting a user, they can enter a value
|
4083
3789
|
|
4084
|
-
maxSelections: false, // When set to a number limits the number of selections to this count
|
3790
|
+
maxSelections: false, // When set to a number, limits the number of selections to this count
|
4085
3791
|
useLabels: true, // whether multiple select should filter currently active selections from choices
|
4086
|
-
delimiter: ',', // when multiselect uses normal <input
|
3792
|
+
delimiter: ',', // when multiselect uses normal <input >, the values will be delimited with this character
|
4087
3793
|
|
4088
|
-
showOnFocus: false, // show menu on focus
|
3794
|
+
showOnFocus: false, // show the menu on focus
|
4089
3795
|
allowReselection: false, // whether current value should trigger callbacks when reselected
|
4090
|
-
allowTab: true, // add tabindex to element
|
4091
|
-
allowCategorySelection: false, // allow elements with
|
3796
|
+
allowTab: true, // add tabindex to the element
|
3797
|
+
allowCategorySelection: false, // allow elements with submenus to be selected
|
4092
3798
|
|
4093
3799
|
fireOnInit: false, // Whether callbacks should fire when initializing dropdown values
|
4094
3800
|
|
4095
|
-
transition: 'auto', // auto transition will slide down or up based on direction
|
3801
|
+
transition: 'auto', // auto transition will slide down or up based on the direction
|
4096
3802
|
duration: 200, // duration of transition
|
4097
3803
|
displayType: false, // displayType of transition
|
4098
3804
|
|
@@ -4156,7 +3862,6 @@
|
|
4156
3862
|
noAPI: 'The API module is required to load resources remotely',
|
4157
3863
|
noStorage: 'Saving remote data requires session storage',
|
4158
3864
|
noElement: 'This module requires ui {element}',
|
4159
|
-
noNormalize: '"ignoreDiacritics" setting will be ignored. Browser does not support String().normalize(). You may consider including <https://cdn.jsdelivr.net/npm/unorm@1.4.1/lib/unorm.min.js> as a polyfill.',
|
4160
3865
|
},
|
4161
3866
|
|
4162
3867
|
regExp: {
|
@@ -4172,23 +3877,23 @@
|
|
4172
3877
|
value: 'value',
|
4173
3878
|
},
|
4174
3879
|
|
4175
|
-
// property names for remote query
|
3880
|
+
// property names for the remote query
|
4176
3881
|
fields: {
|
4177
3882
|
remoteValues: 'results', // grouping for api results
|
4178
3883
|
values: 'values', // grouping for all dropdown values
|
4179
3884
|
disabled: 'disabled', // whether value should be disabled
|
4180
|
-
name: 'name', // displayed dropdown text
|
3885
|
+
name: 'name', // the displayed dropdown text
|
4181
3886
|
description: 'description', // displayed dropdown description
|
4182
3887
|
descriptionVertical: 'descriptionVertical', // whether description should be vertical
|
4183
3888
|
value: 'value', // actual dropdown value
|
4184
|
-
text: 'text', // displayed text when selected
|
3889
|
+
text: 'text', // the displayed text when selected
|
4185
3890
|
data: 'data', // custom data attributes
|
4186
3891
|
type: 'type', // type of dropdown element
|
4187
3892
|
image: 'image', // optional image path
|
4188
3893
|
imageClass: 'imageClass', // optional individual class for image
|
4189
3894
|
alt: 'alt', // optional alt text for image
|
4190
3895
|
icon: 'icon', // optional icon name
|
4191
|
-
iconClass: 'iconClass', // optional individual class for icon (for example to use flag instead)
|
3896
|
+
iconClass: 'iconClass', // optional individual class for icon (for example, to use a flag instead)
|
4192
3897
|
class: 'class', // optional individual class for item/header
|
4193
3898
|
divider: 'divider', // optional divider append for group headers
|
4194
3899
|
actionable: 'actionable', // optional actionable item
|
@@ -4270,137 +3975,115 @@
|
|
4270
3975
|
|
4271
3976
|
/* Templates */
|
4272
3977
|
$.fn.dropdown.settings.templates = {
|
4273
|
-
|
4274
|
-
|
4275
|
-
},
|
4276
|
-
escape: function (string, preserveHTML) {
|
4277
|
-
if (preserveHTML) {
|
3978
|
+
escape: function (string, settings) {
|
3979
|
+
if (settings !== undefined && settings.preserveHTML) {
|
4278
3980
|
return string;
|
4279
3981
|
}
|
4280
|
-
var
|
4281
|
-
badChars = /["'<>`]/g,
|
4282
|
-
shouldEscape = /["&'<>`]/,
|
4283
|
-
escape = {
|
4284
|
-
'<': '<',
|
4285
|
-
'>': '>',
|
4286
|
-
'"': '"',
|
4287
|
-
"'": ''',
|
4288
|
-
'`': '`',
|
4289
|
-
},
|
4290
|
-
escapedChar = function (chr) {
|
4291
|
-
return escape[chr];
|
4292
|
-
}
|
4293
|
-
;
|
4294
|
-
if (shouldEscape.test(string)) {
|
4295
|
-
string = string.replace(/&(?![\d#a-z]{1,12};)/gi, '&');
|
4296
|
-
string = string.replace(badChars, escapedChar);
|
4297
|
-
}
|
4298
3982
|
|
4299
|
-
|
3983
|
+
const badChars = /["'<>]|&(?![\d#A-Za-z]{1,12};)/g;
|
3984
|
+
const escape = {
|
3985
|
+
'"': '"',
|
3986
|
+
'&': '&',
|
3987
|
+
"'": ''',
|
3988
|
+
'<': '<',
|
3989
|
+
'>': '>',
|
3990
|
+
};
|
3991
|
+
|
3992
|
+
return String(string).replace(badChars, (chr) => escape[chr]);
|
4300
3993
|
},
|
4301
3994
|
// generates dropdown from select values
|
4302
|
-
dropdown: function (select,
|
4303
|
-
|
4304
|
-
|
4305
|
-
|
4306
|
-
|
4307
|
-
deQuote = $.fn.dropdown.settings.templates.deQuote
|
4308
|
-
;
|
3995
|
+
dropdown: function (select, settings) {
|
3996
|
+
let placeholder = select.placeholder || false;
|
3997
|
+
let html = '';
|
3998
|
+
let className = settings.className;
|
3999
|
+
let escape = settings.templates.escape;
|
4309
4000
|
html += '<i class="dropdown icon"></i>';
|
4310
4001
|
html += placeholder
|
4311
|
-
? '<div class="default text">' + escape(placeholder,
|
4002
|
+
? '<div class="default text">' + escape(placeholder, settings) + '</div>'
|
4312
4003
|
: '<div class="text"></div>';
|
4313
|
-
html += '<div class="' +
|
4314
|
-
html +=
|
4004
|
+
html += '<div class="' + escape(className.menu) + '">';
|
4005
|
+
html += settings.templates.menu(select, settings);
|
4315
4006
|
html += '</div>';
|
4316
4007
|
|
4317
4008
|
return html;
|
4318
4009
|
},
|
4319
4010
|
|
4320
4011
|
// generates just menu from select
|
4321
|
-
menu: function (response,
|
4322
|
-
|
4323
|
-
|
4324
|
-
|
4325
|
-
|
4326
|
-
|
4327
|
-
;
|
4012
|
+
menu: function (response, settings) {
|
4013
|
+
let fields = settings.fields;
|
4014
|
+
let values = response[fields.values] || [];
|
4015
|
+
let html = '';
|
4016
|
+
let className = settings.className;
|
4017
|
+
let escape = settings.templates.escape;
|
4328
4018
|
$.each(values, function (index, option) {
|
4329
|
-
|
4330
|
-
|
4331
|
-
|
4332
|
-
|
4333
|
-
dataObject = option[fields.data]
|
4334
|
-
;
|
4019
|
+
let itemType = option[fields.type] || 'item';
|
4020
|
+
let isMenu = itemType.indexOf('menu') !== -1;
|
4021
|
+
let maybeData = '';
|
4022
|
+
let dataObject = option[fields.data];
|
4335
4023
|
if (dataObject) {
|
4336
|
-
|
4337
|
-
|
4338
|
-
;
|
4024
|
+
let dataKey;
|
4025
|
+
let dataKeyEscaped;
|
4339
4026
|
for (dataKey in dataObject) {
|
4340
4027
|
dataKeyEscaped = String(dataKey).replace(/\W/g, '');
|
4341
4028
|
if (Object.prototype.hasOwnProperty.call(dataObject, dataKey) && ['text', 'value'].indexOf(dataKeyEscaped.toLowerCase()) === -1) {
|
4342
|
-
maybeData += ' data-' + dataKeyEscaped + '="' +
|
4029
|
+
maybeData += ' data-' + dataKeyEscaped + '="' + escape(String(dataObject[dataKey])) + '"';
|
4343
4030
|
}
|
4344
4031
|
}
|
4345
4032
|
}
|
4346
4033
|
if (itemType === 'item' || isMenu) {
|
4347
|
-
|
4348
|
-
|
4349
|
-
|
4350
|
-
|
4351
|
-
|
4352
|
-
|
4353
|
-
|
4354
|
-
|
4355
|
-
|
4356
|
-
|
4357
|
-
|
4358
|
-
|
4359
|
-
|
4360
|
-
|
4361
|
-
;
|
4362
|
-
html += '<div class="' + deQuote(maybeActionable + maybeDisabled + maybeDescriptionVertical + (option[fields.class] || className.item)) + '" data-value="' + deQuote(option[fields.value], true) + '"' + maybeText + maybeData + '>';
|
4034
|
+
let maybeText = option[fields.text]
|
4035
|
+
? ' data-text="' + escape(option[fields.text]) + '"'
|
4036
|
+
: '';
|
4037
|
+
let maybeActionable = option[fields.actionable]
|
4038
|
+
? className.actionable + ' '
|
4039
|
+
: '';
|
4040
|
+
let maybeDisabled = option[fields.disabled]
|
4041
|
+
? className.disabled + ' '
|
4042
|
+
: '';
|
4043
|
+
let maybeDescriptionVertical = option[fields.descriptionVertical]
|
4044
|
+
? className.descriptionVertical + ' '
|
4045
|
+
: '';
|
4046
|
+
let hasDescription = escape(option[fields.description] || '', settings) !== '';
|
4047
|
+
html += '<div class="' + escape(maybeActionable + maybeDisabled + maybeDescriptionVertical + (option[fields.class] || className.item)) + '" data-value="' + escape(option[fields.value]) + '"' + maybeText + maybeData + '>';
|
4363
4048
|
if (isMenu) {
|
4364
4049
|
html += '<i class="' + (itemType.indexOf('left') !== -1 ? 'left' : '') + ' dropdown icon"></i>';
|
4365
4050
|
}
|
4366
4051
|
if (option[fields.image]) {
|
4367
|
-
html += '<img class="' +
|
4052
|
+
html += '<img class="' + escape(option[fields.imageClass] || className.image) + '" src="' + escape(option[fields.image]) + '"' + (option[fields.alt] ? ' alt="' + escape(option[fields.alt]) + '"' : '') + '>';
|
4368
4053
|
}
|
4369
4054
|
if (option[fields.icon]) {
|
4370
|
-
html += '<i class="' +
|
4055
|
+
html += '<i class="' + escape(option[fields.icon] + ' ' + (option[fields.iconClass] || className.icon)) + '"></i>';
|
4371
4056
|
}
|
4372
4057
|
if (hasDescription) {
|
4373
|
-
html += '<span class="' +
|
4374
|
-
html += !isMenu ? '<span class="' +
|
4058
|
+
html += '<span class="' + escape(className.description) + '">' + escape(option[fields.description] || '', settings) + '</span>';
|
4059
|
+
html += !isMenu ? '<span class="' + escape(className.text) + '">' : '';
|
4375
4060
|
}
|
4376
4061
|
if (isMenu) {
|
4377
|
-
html += '<span class="' +
|
4062
|
+
html += '<span class="' + escape(className.text) + '">';
|
4378
4063
|
}
|
4379
|
-
html += escape(option[fields.name] || '',
|
4064
|
+
html += escape(option[fields.name] || '', settings);
|
4380
4065
|
if (isMenu) {
|
4381
4066
|
html += '</span>';
|
4382
|
-
html += '<div class="' +
|
4383
|
-
html +=
|
4067
|
+
html += '<div class="' + escape(itemType) + '">';
|
4068
|
+
html += settings.templates.menu(option, settings);
|
4384
4069
|
html += '</div>';
|
4385
4070
|
} else if (hasDescription) {
|
4386
4071
|
html += '</span>';
|
4387
4072
|
}
|
4388
4073
|
html += '</div>';
|
4389
4074
|
} else if (itemType === 'header') {
|
4390
|
-
|
4391
|
-
|
4392
|
-
groupIcon = deQuote(option[fields.icon] || className.groupIcon)
|
4393
|
-
;
|
4075
|
+
let groupName = option[fields.name] || '';
|
4076
|
+
let groupIcon = option[fields.icon] || className.groupIcon;
|
4394
4077
|
if (groupName !== '' || groupIcon !== '') {
|
4395
|
-
html += '<div class="' +
|
4078
|
+
html += '<div class="' + escape(option[fields.class] || className.header) + '">';
|
4396
4079
|
if (groupIcon !== '') {
|
4397
|
-
html += '<i class="' +
|
4080
|
+
html += '<i class="' + escape(groupIcon + ' ' + (option[fields.iconClass] || className.icon)) + '"></i>';
|
4398
4081
|
}
|
4399
|
-
html += groupName;
|
4082
|
+
html += escape(groupName, settings);
|
4400
4083
|
html += '</div>';
|
4401
4084
|
}
|
4402
4085
|
if (option[fields.divider]) {
|
4403
|
-
html += '<div class="' +
|
4086
|
+
html += '<div class="' + escape(className.divider) + '"></div>';
|
4404
4087
|
}
|
4405
4088
|
}
|
4406
4089
|
});
|
@@ -4409,13 +4092,11 @@
|
|
4409
4092
|
},
|
4410
4093
|
|
4411
4094
|
// generates label for multiselect
|
4412
|
-
label: function (value, text,
|
4413
|
-
|
4414
|
-
|
4415
|
-
deQuote = $.fn.dropdown.settings.templates.deQuote
|
4416
|
-
;
|
4095
|
+
label: function (value, text, settings) {
|
4096
|
+
let className = settings.className;
|
4097
|
+
let escape = settings.templates.escape;
|
4417
4098
|
|
4418
|
-
return escape(text,
|
4099
|
+
return escape(text, settings) + '<i class="' + escape(className.delete) + ' icon"></i>';
|
4419
4100
|
},
|
4420
4101
|
|
4421
4102
|
// generates messages like "No results"
|
@@ -4423,7 +4104,7 @@
|
|
4423
4104
|
return message;
|
4424
4105
|
},
|
4425
4106
|
|
4426
|
-
// generates user addition to selection menu
|
4107
|
+
// generates user addition to the selection menu
|
4427
4108
|
addition: function (choice) {
|
4428
4109
|
return choice;
|
4429
4110
|
},
|