From 6f271e85d3847cc67c8b20f9a8c69b015fb33a3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Scott=20Gonz=C3=A1lez?= Date: Tue, 29 Jul 2014 10:40:02 -0400 Subject: [PATCH 1/2] Selectmenu: Properly set width for button Fixes #10145 --- tests/unit/selectmenu/selectmenu_options.js | 12 +++++++++-- ui/selectmenu.js | 22 +++++++++++++++------ 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/tests/unit/selectmenu/selectmenu_options.js b/tests/unit/selectmenu/selectmenu_options.js index 25448fd403d..35cd910fab9 100644 --- a/tests/unit/selectmenu/selectmenu_options.js +++ b/tests/unit/selectmenu/selectmenu_options.js @@ -86,8 +86,8 @@ test( "CSS styles", function() { }); -test( "Width", function() { - expect( 8 ); +test( "width", function() { + expect( 9 ); var button, menu, element = $( "#speed" ); @@ -124,6 +124,14 @@ test( "Width", function() { equal( button.outerWidth(), element.outerWidth(), "button width with long option" ); element.selectmenu( "open" ); ok( menu.outerWidth() >= element.outerWidth(), "menu width with long option" ); + + element = $( "#selectmenu-wrap2" ) + .outerWidth( 300 ) + .children( "select" ) + .css( "width", "100%" ) + .selectmenu(); + button = element.selectmenu( "widget" ); + equal( button.outerWidth(), 300, "button width fills container" ); }); })( jQuery ); diff --git a/ui/selectmenu.js b/ui/selectmenu.js index 2107285fe36..0b47feb5340 100644 --- a/ui/selectmenu.js +++ b/ui/selectmenu.js @@ -106,7 +106,7 @@ return $.widget( "ui.selectmenu", { .appendTo( this.button ); this._setText( this.buttonText, this.element.find( "option:selected" ).text() ); - this._setOption( "width", this.options.width ); + this._resizeButton(); this._on( this.button, this._buttonEvents ); this.button.one( "focusin", function() { @@ -186,7 +186,9 @@ return $.widget( "ui.selectmenu", { refresh: function() { this._refreshMenu(); this._setText( this.buttonText, this._getSelectedItem().text() ); - this._setOption( "width", this.options.width ); + if ( !this.options.width ) { + this._resizeButton(); + } }, _refreshMenu: function() { @@ -475,10 +477,7 @@ return $.widget( "ui.selectmenu", { } if ( key === "width" ) { - if ( !value ) { - value = this.element.outerWidth(); - } - this.button.outerWidth( value ); + this._resizeButton(); } }, @@ -511,6 +510,17 @@ return $.widget( "ui.selectmenu", { this.menu.attr( "aria-hidden", !this.isOpen ); }, + _resizeButton: function() { + var width = this.options.width; + + if ( !width ) { + width = this.element.show().outerWidth(); + this.element.hide(); + } + + this.button.outerWidth( width ); + }, + _resizeMenu: function() { this.menu.outerWidth( Math.max( this.button.outerWidth(), From acc9505b3003c8995df981bcffbe76abfe7f9992 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Scott=20Gonz=C3=A1lez?= Date: Tue, 29 Jul 2014 13:11:24 -0400 Subject: [PATCH 2/2] [fixup]: Actually init the widget --- tests/unit/selectmenu/selectmenu_options.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/unit/selectmenu/selectmenu_options.js b/tests/unit/selectmenu/selectmenu_options.js index 35cd910fab9..ae847f5e1ab 100644 --- a/tests/unit/selectmenu/selectmenu_options.js +++ b/tests/unit/selectmenu/selectmenu_options.js @@ -125,11 +125,11 @@ test( "width", function() { element.selectmenu( "open" ); ok( menu.outerWidth() >= element.outerWidth(), "menu width with long option" ); - element = $( "#selectmenu-wrap2" ) - .outerWidth( 300 ) - .children( "select" ) - .css( "width", "100%" ) - .selectmenu(); + element.parent().outerWidth( 300 ); + element + .selectmenu( "destroy" ) + .css( "width", "100%" ) + .selectmenu(); button = element.selectmenu( "widget" ); equal( button.outerWidth(), 300, "button width fills container" ); });