|
18 | 18 |
|
19 | 19 | // "{{term}}" is a placeholder below for where the search term
|
20 | 20 | // would be inserted in the resulting regular expression.
|
21 |
| - filterRules = { |
22 |
| - 'contains': '{{term}}', |
23 |
| - 'beginsWith': '^{{term}}', |
24 |
| - 'endsWith': '{{term}}$', |
25 |
| - 'exactMatch': '^{{term}}$', |
26 |
| - 'containsNumber': '\d', |
27 |
| - 'isNumeric': '^\d+$', |
28 |
| - 'isNonNumeric': '^\D+$' |
| 21 | + var filterRules = { |
| 22 | + contains: '{{term}}', |
| 23 | + beginsWith: '^{{term}}', |
| 24 | + endsWith: '{{term}}$', |
| 25 | + exactMatch: '^{{term}}$', |
| 26 | + containsNumber: '\d', |
| 27 | + isNumeric: '^\d+$', |
| 28 | + isNonNumeric: '^\D+$' |
29 | 29 | };
|
30 | 30 |
|
| 31 | + var headerSelector = '.ui-multiselect-header'; |
| 32 | + var hasFilterClass = 'ui-multiselect-hasfilter'; |
| 33 | + var filterClass = 'ui-multiselect-filter'; |
| 34 | + var optgroupClass = 'ui-multiselect-optgroup'; |
| 35 | + var groupLabelClass = 'ui-multiselect-grouplabel'; |
| 36 | + var hiddenClass = 'ui-multiselect-excluded'; |
| 37 | + |
31 | 38 | //Courtesy of underscore.js
|
32 | 39 | function debounce(func, wait, immediate) {
|
33 | 40 | var timeout;
|
|
75 | 82 | var $element = this.element;
|
76 | 83 |
|
77 | 84 | // get the multiselect instance -- instance() method no longer supported -- use data()
|
78 |
| - this.instance = $element.multiselect().data('ech-multiselect'); |
| 85 | + this.instance = $element.data('ech-multiselect'); |
79 | 86 |
|
80 | 87 | // store header; add filter class so the close/check all/uncheck all links can be positioned correctly
|
81 |
| - this.$header = this.instance.$menu.find('.ui-multiselect-header').addClass('ui-multiselect-hasfilter'); |
| 88 | + this.$header = this.instance.$menu.find(headerSelector).addClass(hasFilterClass); |
82 | 89 |
|
83 | 90 | // wrapper $element
|
84 | 91 | this.$input = $(document.createElement('input'))
|
|
131 | 138 |
|
132 | 139 | var $label = $(document.createElement('label')).text(opts.label).append(this.$input);
|
133 | 140 | this.$wrapper = $(document.createElement('div'))
|
134 |
| - .addClass(' ui-multiselect-filter') |
| 141 | + .addClass(filterClass) |
135 | 142 | .append($label)
|
136 | 143 | .prependTo(this.$header);
|
137 | 144 |
|
|
170 | 177 | var searchGroups = !!this.options.searchGroups;
|
171 | 178 | var $checkboxes = this.instance.$checkboxes;
|
172 | 179 | var cache = this.cache; // Cached text() object
|
173 |
| - var optgroupClass = "ui-multiselect-optgroup"; |
174 |
| - var hiddenClass = 'ui-multiselect-excluded'; |
175 | 180 |
|
176 | 181 | this.$rows.toggleClass(hiddenClass, !!term);
|
177 | 182 | var filteredInputs = $checkboxes.children().map(function(x) {
|
178 |
| - var $this = $(this); |
179 |
| - var $groupItems = $this; |
| 183 | + var elem = this; |
| 184 | + var $groupItems = $(elem); |
180 | 185 | var groupShown = false;
|
181 | 186 |
|
182 | 187 | // Account for optgroups
|
183 | 188 | // If we are searching in option group labels and we match an optgroup label,
|
184 | 189 | // then show all its children and return all its inputs also.
|
185 |
| - if ($this.hasClass(optgroupClass)) { |
186 |
| - var $groupItems = $this.find('li'); |
| 190 | + if (elem.classList.contains(optgroupClass)) { |
| 191 | + var $groupItems = $groupItems.find('li'); |
187 | 192 | if (searchGroups && regex.test( cache[x] ) ) {
|
188 |
| - $this.removeClass(hiddenClass); |
| 193 | + elem.classList.remove(hiddenClass); |
189 | 194 | $groupItems.removeClass(hiddenClass);
|
190 | 195 | return $groupItems.find('input').get();
|
191 | 196 | }
|
192 | 197 | }
|
193 | 198 |
|
194 | 199 | return $groupItems.map(function(y) {
|
195 |
| - var $listItem = $(this); |
196 | 200 | if ( regex.test( cache[x + '.' + y] ) ) {
|
197 | 201 | // Show the opt group heading if needed
|
198 | 202 | if (!groupShown) {
|
199 |
| - $this.removeClass(hiddenClass); |
| 203 | + elem.classList.remove(hiddenClass); |
200 | 204 | groupShown = true;
|
201 | 205 | }
|
202 |
| - $listItem.removeClass(hiddenClass); |
| 206 | + this.classList.remove(hiddenClass); |
203 | 207 | return this.getElementsByTagName('input')[0];
|
204 | 208 | }
|
205 | 209 | return null;
|
|
228 | 232 | this.instance.$checkboxes.children().each(function(x) {
|
229 | 233 | var $element = $(this);
|
230 | 234 | // Account for optgroups
|
231 |
| - if ($element.hasClass('ui-multiselect-optgroup')) { |
| 235 | + if (this.classList.contains(optgroupClass)) { |
232 | 236 | // Single number keys are the option labels
|
233 |
| - cache[x] = $element.children('a').text(); |
| 237 | + cache[x] = this.getElementsByClassName(groupLabelClass)[0].textContent; |
234 | 238 | $element = $element.find('li');
|
235 | 239 | }
|
236 | 240 | $element.each(function(y) {
|
237 |
| - cache[x + '.' + y] = $(this).text(); |
| 241 | + cache[x + '.' + y] = this.textContent; |
238 | 242 | });
|
239 | 243 | });
|
240 | 244 | this.cache = cache;
|
|
257 | 261 | destroy: function() {
|
258 | 262 | $.Widget.prototype.destroy.call(this);
|
259 | 263 | this.$input.val('').trigger("keyup").off('keydown input search');
|
260 |
| - this.instance.$menu.find('.ui-multiselect-header').removeClass('ui-multiselect-hasfilter'); |
| 264 | + this.instance.$menu.find(headerSelector).removeClass(hasFilterClass); |
261 | 265 | this.$wrapper.remove();
|
262 | 266 | }
|
263 | 267 | });
|
|
0 commit comments