Fixed performance issues with large, grouped lists.

This commit is contained in:
Graham Randall 2011-11-03 18:21:02 -05:00
parent a9d52581a5
commit 3ba2d65221
3 changed files with 18 additions and 16 deletions

View file

@ -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;
}; };

File diff suppressed because one or more lines are too long

View file

@ -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