From 15a5366aadfaf085e1a7ac05ce34cf8cde3a6847 Mon Sep 17 00:00:00 2001 From: Patrick Filler Date: Fri, 15 Jul 2011 18:04:37 -0400 Subject: [PATCH] Fix some issues with parsing blank options. --- chosen/chosen.jquery.js | 38 +++++++++++++++++++++---------------- chosen/chosen.proto.js | 38 +++++++++++++++++++++---------------- coffee/chosen.jquery.coffee | 30 ++++++++++++++++------------- coffee/chosen.proto.coffee | 30 ++++++++++++++++------------- 4 files changed, 78 insertions(+), 58 deletions(-) diff --git a/chosen/chosen.jquery.js b/chosen/chosen.jquery.js index ade076a..c7053e7 100644 --- a/chosen/chosen.jquery.js +++ b/chosen/chosen.jquery.js @@ -214,7 +214,7 @@ data = _ref[_i]; if (data.group) { content += this.result_add_group(data); - } else { + } else if (!data.empty) { content += this.result_add_option(data); if (data.selected && this.is_multiple) { this.choice_build(data); @@ -443,7 +443,7 @@ _ref = this.results_data; for (_i = 0, _len = _ref.length; _i < _len; _i++) { option = _ref[_i]; - if (!option.disabled) { + if (!option.disabled && !option.empty) { if (option.group) { $(option.dom_id).hide(); } else if (!(this.is_multiple && option.selected)) { @@ -696,21 +696,27 @@ }; OptionsParser.prototype.add_option = function(option, group_id, group_disabled) { var _ref; - if (option.nodeName === "OPTION" && (this.sel_index > 0 || option.text !== "")) { - if (group_id || group_id === 0) { - this.parsed[group_id].children += 1; + if (option.nodeName === "OPTION") { + if (option.text !== "") { + if (group_id || group_id === 0) { + this.parsed[group_id].children += 1; + } + this.parsed.push({ + id: this.sel_index + this.group_index, + select_index: this.sel_index, + value: option.value, + text: option.text, + selected: option.selected, + disabled: (_ref = group_disabled === true) != null ? _ref : { + group_disabled: option.disabled + }, + group_id: group_id + }); + } else { + this.parsed.push({ + empty: true + }); } - this.parsed.push({ - id: this.sel_index + this.group_index, - select_index: this.sel_index, - value: option.value, - text: option.text, - selected: option.selected, - disabled: (_ref = group_disabled === true) != null ? _ref : { - group_disabled: option.disabled - }, - group_id: group_id - }); return this.sel_index += 1; } }; diff --git a/chosen/chosen.proto.js b/chosen/chosen.proto.js index 2aa4519..11e66d8 100644 --- a/chosen/chosen.proto.js +++ b/chosen/chosen.proto.js @@ -211,7 +211,7 @@ data = _ref[_i]; if (data.group) { content += this.result_add_group(data); - } else { + } else if (!data.empty) { content += this.result_add_option(data); if (data.selected && this.is_multiple) { this.choice_build(data); @@ -447,7 +447,7 @@ _ref = this.results_data; for (_i = 0, _len = _ref.length; _i < _len; _i++) { option = _ref[_i]; - if (!option.disabled) { + if (!option.disabled && !option.empty) { if (option.group) { $(option.dom_id).hide(); } else if (!(this.is_multiple && option.selected)) { @@ -715,21 +715,27 @@ }; OptionsParser.prototype.add_option = function(option, group_id, group_disabled) { var _ref; - if (option.nodeName === "OPTION" && (this.sel_index > 0 || option.text !== "")) { - if (group_id || group_id === 0) { - this.parsed[group_id].children += 1; + if (option.nodeName === "OPTION") { + if (option.text !== "") { + if (group_id || group_id === 0) { + this.parsed[group_id].children += 1; + } + this.parsed.push({ + id: this.sel_index + this.group_index, + select_index: this.sel_index, + value: option.value, + text: option.text, + selected: option.selected, + disabled: (_ref = group_disabled === true) != null ? _ref : { + group_disabled: option.disabled + }, + group_id: group_id + }); + } else { + this.parsed.push({ + empty: true + }); } - this.parsed.push({ - id: this.sel_index + this.group_index, - select_index: this.sel_index, - value: option.value, - text: option.text, - selected: option.selected, - disabled: (_ref = group_disabled === true) != null ? _ref : { - group_disabled: option.disabled - }, - group_id: group_id - }); return this.sel_index += 1; } }; diff --git a/coffee/chosen.jquery.coffee b/coffee/chosen.jquery.coffee index 174fa60..e31b794 100644 --- a/coffee/chosen.jquery.coffee +++ b/coffee/chosen.jquery.coffee @@ -189,7 +189,7 @@ class Chosen for data in @results_data if data.group content += this.result_add_group data - else + else if !data.empty content += this.result_add_option data if data.selected and @is_multiple this.choice_build data @@ -397,7 +397,7 @@ class Chosen zregex = new RegExp(searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'i') for option in @results_data - if not option.disabled + if not option.disabled and not option.empty if option.group $(option.dom_id).hide() else if not (@is_multiple and option.selected) @@ -597,17 +597,21 @@ class OptionsParser @group_index += 1 add_option: (option, group_id, group_disabled) -> - if option.nodeName is "OPTION" and (@sel_index > 0 or option.text != "") - if group_id || group_id is 0 - @parsed[group_id].children += 1 - @parsed.push - id: @sel_index + @group_index - select_index: @sel_index - value: option.value - text: option.text - selected: option.selected - disabled: ((group_disabled is true) ? group_disabled : option.disabled) - group_id: group_id + if option.nodeName is "OPTION" + if option.text != "" + if group_id || group_id is 0 + @parsed[group_id].children += 1 + @parsed.push + id: @sel_index + @group_index + select_index: @sel_index + value: option.value + text: option.text + selected: option.selected + disabled: ((group_disabled is true) ? group_disabled : option.disabled) + group_id: group_id + else + @parsed.push + empty: true @sel_index += 1 OptionsParser.select_to_array = (select) -> diff --git a/coffee/chosen.proto.coffee b/coffee/chosen.proto.coffee index 93f1f0b..94895bf 100644 --- a/coffee/chosen.proto.coffee +++ b/coffee/chosen.proto.coffee @@ -184,7 +184,7 @@ class Chosen for data in @results_data if data.group content += this.result_add_group data - else + else if !data.empty content += this.result_add_option data if data.selected and @is_multiple this.choice_build data @@ -389,7 +389,7 @@ class Chosen zregex = new RegExp(searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'i') for option in @results_data - if not option.disabled + if not option.disabled and not option.empty if option.group $(option.dom_id).hide() else if not (@is_multiple and option.selected) @@ -595,17 +595,21 @@ class OptionsParser @group_index += 1 add_option: (option, group_id, group_disabled) -> - if option.nodeName is "OPTION" and (@sel_index > 0 or option.text != "") - if group_id || group_id is 0 - @parsed[group_id].children += 1 - @parsed.push - id: @sel_index + @group_index - select_index: @sel_index - value: option.value - text: option.text - selected: option.selected - disabled: ((group_disabled is true) ? group_disabled : option.disabled) - group_id: group_id + if option.nodeName is "OPTION" + if option.text != "" + if group_id || group_id is 0 + @parsed[group_id].children += 1 + @parsed.push + id: @sel_index + @group_index + select_index: @sel_index + value: option.value + text: option.text + selected: option.selected + disabled: ((group_disabled is true) ? group_disabled : option.disabled) + group_id: group_id + else + @parsed.push + empty: true @sel_index += 1 OptionsParser.select_to_array = (select) ->