Implement optgroups for select widget

This commit is contained in:
Nathan Gray 2013-04-29 18:36:48 +00:00
parent 06ab2ffcdc
commit 42fd3fe37b

View File

@ -231,16 +231,17 @@ var et2_selectbox = et2_inputWidget.extend(
/** /**
* Add an option to regular drop-down select * Add an option to regular drop-down select
*/ */
_appendOptionElement: function(_value, _label, _title) { _appendOptionElement: function(_value, _label, _title, dom_element) {
if(_value == "" && (_label == null || _label == "")) { if(_value == "" && (_label == null || _label == "")) {
_label = this.options.empty_label; _label = this.options.empty_label;
} }
if(this.input == null) if(this.input == null)
{ {
return this._appendMultiOption(_value, _label, _title); return this._appendMultiOption(_value, _label, _title, dom_element);
} }
var option = $j(document.createElement("option")) var option = $j(document.createElement("option"))
.attr("value", _value) .attr("value", _value)
.text(_label+""); .text(_label+"");
@ -256,14 +257,14 @@ var et2_selectbox = et2_inputWidget.extend(
} }
else else
{ {
option.appendTo(this.input); option.appendTo(dom_element || this.input);
} }
}, },
/** /**
* Append a value to multi-select * Append a value to multi-select
*/ */
_appendMultiOption: function(_value, _label, _title) { _appendMultiOption: function(_value, _label, _title, dom_element) {
var option_data = null; var option_data = null;
if(typeof _label == "object") if(typeof _label == "object")
{ {
@ -309,7 +310,7 @@ var et2_selectbox = et2_inputWidget.extend(
label.append(jQuery("<span>"+_label+"</span>")); label.append(jQuery("<span>"+_label+"</span>"));
var li = jQuery(document.createElement("li")).append(label); var li = jQuery(document.createElement("li")).append(label);
li.appendTo(this.multiOptions); li.appendTo(dom_element || this.multiOptions);
}, },
/** /**
@ -568,7 +569,36 @@ var et2_selectbox = et2_inputWidget.extend(
if (typeof _options[key] === 'object') if (typeof _options[key] === 'object')
{ {
// Optgroup
if(typeof _options[key]["label"] == 'undefined' && typeof _options[key]["title"] == "undefined")
{
var group = $j(document.createElement("optgroup"))
.attr("label", this.options.no_lang ? key : this.egw().lang(key))
.appendTo(this.input);
if(this.input == null) if(this.input == null)
{
group = jQuery(document.createElement("ul"))
.append('<li class="ui-widget-header"><span>'+key+'</span></li>')
.appendTo(this.multiOptions);
}
for(var sub in _options[key])
{
if (typeof _options[key][sub] === 'object')
{
this._appendOptionElement(sub,
_options[key][sub]["label"] ? _options[key][sub]["label"] : "",
_options[key][sub]["title"] ? _options[key][sub]["title"] : "",
group
);
}
else
{
this._appendOptionElement(key, _options[key][sub],undefined,group);
}
}
}
else if(this.input == null)
{ {
// Allow some special extras for objects by passing the whole thing // Allow some special extras for objects by passing the whole thing
_options[key]["label"] = _options[key]["label"] ? _options[key]["label"] : ""; _options[key]["label"] = _options[key]["label"] ? _options[key]["label"] : "";