Fixed performance issues with large, grouped lists.
This commit is contained in:
parent
a9d52581a5
commit
3ba2d65221
|
@ -684,7 +684,7 @@
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
Chosen.prototype.winnow_results = function() {
|
Chosen.prototype.winnow_results = function() {
|
||||||
var found, option, part, parts, regex, result_id, results, searchText, startTime, startpos, text, zregex, _i, _j, _len, _len2, _ref;
|
var found, option, part, parts, regex, result, result_id, results, searchText, startTime, startpos, text, zregex, _i, _j, _len, _len2, _ref;
|
||||||
startTime = new Date();
|
startTime = new Date();
|
||||||
this.no_results_clear();
|
this.no_results_clear();
|
||||||
results = 0;
|
results = 0;
|
||||||
|
@ -696,10 +696,11 @@
|
||||||
option = _ref[_i];
|
option = _ref[_i];
|
||||||
if (!option.disabled && !option.empty) {
|
if (!option.disabled && !option.empty) {
|
||||||
if (option.group) {
|
if (option.group) {
|
||||||
$('#' + option.dom_id).hide();
|
$('#' + option.dom_id).css('display', 'none');
|
||||||
} else if (!(this.is_multiple && option.selected)) {
|
} else if (!(this.is_multiple && option.selected)) {
|
||||||
found = false;
|
found = false;
|
||||||
result_id = option.dom_id;
|
result_id = option.dom_id;
|
||||||
|
result = $("#" + result_id);
|
||||||
if (regex.test(option.html)) {
|
if (regex.test(option.html)) {
|
||||||
found = true;
|
found = true;
|
||||||
results += 1;
|
results += 1;
|
||||||
|
@ -723,18 +724,18 @@
|
||||||
} else {
|
} else {
|
||||||
text = option.html;
|
text = option.html;
|
||||||
}
|
}
|
||||||
if ($("#" + result_id).html !== text) {
|
if (result.html !== text) {
|
||||||
$("#" + result_id).html(text);
|
result.html(text);
|
||||||
}
|
}
|
||||||
this.result_activate($("#" + result_id));
|
this.result_activate(result);
|
||||||
if (option.group_array_index != null) {
|
if (option.group_array_index != null) {
|
||||||
$("#" + this.results_data[option.group_array_index].dom_id).show();
|
$("#" + this.results_data[option.group_array_index].dom_id).css('display', 'auto');
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (this.result_highlight && result_id === this.result_highlight.attr('id')) {
|
if (this.result_highlight && result_id === this.result_highlight.attr('id')) {
|
||||||
this.result_clear_highlight();
|
this.result_clear_highlight();
|
||||||
}
|
}
|
||||||
this.result_deactivate($("#" + result_id));
|
this.result_deactivate(result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -753,7 +754,7 @@
|
||||||
for (_i = 0, _len = lis.length; _i < _len; _i++) {
|
for (_i = 0, _len = lis.length; _i < _len; _i++) {
|
||||||
li = lis[_i];
|
li = lis[_i];
|
||||||
li = $(li);
|
li = $(li);
|
||||||
_results.push(li.hasClass("group-result") ? li.show() : !this.is_multiple || !li.hasClass("result-selected") ? this.result_activate(li) : void 0);
|
_results.push(li.hasClass("group-result") ? li.css('display', 'auto') : !this.is_multiple || !li.hasClass("result-selected") ? this.result_activate(li) : void 0);
|
||||||
}
|
}
|
||||||
return _results;
|
return _results;
|
||||||
};
|
};
|
||||||
|
|
2
chosen/chosen.jquery.min.js
vendored
2
chosen/chosen.jquery.min.js
vendored
File diff suppressed because one or more lines are too long
|
@ -389,10 +389,11 @@ class Chosen extends AbstractChosen
|
||||||
for option in @results_data
|
for option in @results_data
|
||||||
if not option.disabled and not option.empty
|
if not option.disabled and not option.empty
|
||||||
if option.group
|
if option.group
|
||||||
$('#' + option.dom_id).hide()
|
$('#' + option.dom_id).css('display', 'none')
|
||||||
else if not (@is_multiple and option.selected)
|
else if not (@is_multiple and option.selected)
|
||||||
found = false
|
found = false
|
||||||
result_id = option.dom_id
|
result_id = option.dom_id
|
||||||
|
result = $("#" + result_id)
|
||||||
|
|
||||||
if regex.test option.html
|
if regex.test option.html
|
||||||
found = true
|
found = true
|
||||||
|
@ -414,14 +415,14 @@ class Chosen extends AbstractChosen
|
||||||
else
|
else
|
||||||
text = option.html
|
text = option.html
|
||||||
|
|
||||||
$("#" + result_id).html text if $("#" + result_id).html != text
|
result.html text if result.html != text
|
||||||
|
|
||||||
this.result_activate $("#" + result_id)
|
this.result_activate result
|
||||||
|
|
||||||
$("#" + @results_data[option.group_array_index].dom_id).show() if option.group_array_index?
|
$("#" + @results_data[option.group_array_index].dom_id).css('display', 'auto') if option.group_array_index?
|
||||||
else
|
else
|
||||||
this.result_clear_highlight() if @result_highlight and result_id is @result_highlight.attr 'id'
|
this.result_clear_highlight() if @result_highlight and result_id is @result_highlight.attr 'id'
|
||||||
this.result_deactivate $("#" + result_id)
|
this.result_deactivate result
|
||||||
|
|
||||||
if results < 1 and searchText.length
|
if results < 1 and searchText.length
|
||||||
this.no_results searchText
|
this.no_results searchText
|
||||||
|
@ -435,7 +436,7 @@ class Chosen extends AbstractChosen
|
||||||
for li in lis
|
for li in lis
|
||||||
li = $(li)
|
li = $(li)
|
||||||
if li.hasClass "group-result"
|
if li.hasClass "group-result"
|
||||||
li.show()
|
li.css('display', 'auto')
|
||||||
else if not @is_multiple or not li.hasClass "result-selected"
|
else if not @is_multiple or not li.hasClass "result-selected"
|
||||||
this.result_activate li
|
this.result_activate li
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue