Skip to content
Permalink
Browse files

Selectmenu: Introduce _renderButtonItem() method

Fixes #10142
Closes gh-1299
  • Loading branch information...
fnagel authored and scottgonzalez committed Jul 28, 2014
1 parent e648447 commit fb4124b7af4e87712eca9893f7aefb5fee7905de
Showing with 71 additions and 18 deletions.
  1. +34 −0 tests/unit/selectmenu/selectmenu_core.js
  2. +37 −18 ui/selectmenu.js
@@ -45,6 +45,40 @@ asyncTest( "accessibility", function() {
});


test( "_renderButtonItem()", function() {
expect( 2 );

var option,
element = $( "#speed" ).selectmenu(),
instance = element.selectmenu( "instance" ),
button = element.selectmenu( "widget" ),
menu = element.selectmenu( "menuWidget" );

instance._renderButtonItem = function( item ) {
var buttonItem = $( "<span>" );
this._setText( buttonItem, item.label + item.index );

return buttonItem;
};

element.selectmenu( "refresh" );
option = element.find( "option:selected" );
equal(
option.text() + element[ 0 ].selectedIndex,
button.text(),
"refresh: button item text"
);

button.trigger( "click" );
menu.find( "li" ).last().simulate( "mouseover" ).trigger( "click" );
option = element.find( "option" ).last();
equal(
option.text() + element[ 0 ].selectedIndex,
button.text(),
"click: button item text"
);
});

$.each([
{
type: "default",
@@ -67,7 +67,11 @@ return $.widget( "ui.selectmenu", {
},

_drawButton: function() {
var that = this;
var that = this,
item = this._parseOption(
this.element.find( "option:selected" ),
this.element[ 0 ].selectedIndex
);

// Associate existing label with the new button
this.label = $( "label[for='" + this.ids.element + "']" ).attr( "for", this.ids.button );
@@ -99,12 +103,9 @@ return $.widget( "ui.selectmenu", {
})
.prependTo( this.button );

this.buttonText = $( "<span>", {
"class": "ui-selectmenu-text"
})
this.buttonItem = this._renderButtonItem( item )
.appendTo( this.button );

this._setText( this.buttonText, this.element.find( "option:selected" ).text() );
this._resizeButton();

this._on( this.button, this._buttonEvents );
@@ -190,7 +191,11 @@ return $.widget( "ui.selectmenu", {

refresh: function() {
this._refreshMenu();
this._setText( this.buttonText, this._getSelectedItem().text() );
this.buttonItem.replaceWith(
this.buttonItem = this._renderButtonItem(
this._getSelectedItem().data( "ui-selectmenu-item" )
)
);
if ( !this.options.width ) {
this._resizeButton();
}
@@ -275,6 +280,15 @@ return $.widget( "ui.selectmenu", {
return this.menu;
},

_renderButtonItem: function( item ) {
var buttonItem = $( "<span>", {
"class": "ui-selectmenu-text"
});
this._setText( buttonItem, item.label );

return buttonItem;
},

_renderMenu: function( ul, items ) {
var that = this,
currentOptgroup = "";
@@ -480,7 +494,7 @@ return $.widget( "ui.selectmenu", {

// Change native select element
this.element[ 0 ].selectedIndex = item.index;
this._setText( this.buttonText, item.label );
this.buttonItem.replaceWith( this.buttonItem = this._renderButtonItem( item ) );
this._setAria( item );
this._trigger( "select", event, { item: item } );

@@ -590,22 +604,27 @@ return $.widget( "ui.selectmenu", {
},

_parseOptions: function( options ) {
var data = [];
var that = this,
data = [];
options.each(function( index, item ) {
var option = $( item ),
optgroup = option.parent( "optgroup" );
data.push({
element: option,
index: index,
value: option.attr( "value" ),
label: option.text(),
optgroup: optgroup.attr( "label" ) || "",
disabled: optgroup.prop( "disabled" ) || option.prop( "disabled" )
});
data.push( that._parseOption( $( item ), index ) );
});
this.items = data;
},

_parseOption: function( option, index ) {
var optgroup = option.parent( "optgroup" );

return {
element: option,
index: index,
value: option.attr( "value" ),
label: option.text(),
optgroup: optgroup.attr( "label" ) || "",
disabled: optgroup.prop( "disabled" ) || option.prop( "disabled" )
};
},

_destroy: function() {
this.menuWrap.remove();
this.button.remove();

0 comments on commit fb4124b

Please sign in to comment.
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.