Skip to content
This repository was archived by the owner on Oct 8, 2021. It is now read-only.

Commit b5db639

Browse files
author
Gabriel Schulhof
committed
[buttonMarkup] Track addition/removal of up/down/hover classes to reconstruct button state during re-enhancement -- Fixes #3637
1 parent 2e21c6b commit b5db639

File tree

1 file changed

+27
-7
lines changed

1 file changed

+27
-7
lines changed

js/jquery.mobile.buttonMarkup.js

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ $.fn.buttonMarkup = function( options ) {
3636
innerClass = "ui-btn-inner",
3737
textClass = "ui-btn-text",
3838
buttonClass, iconClass,
39+
hover = false,
40+
state = "up",
3941
// Button inner markup
4042
buttonInner,
4143
buttonText,
@@ -60,6 +62,8 @@ $.fn.buttonMarkup = function( options ) {
6062
// We will recreate this icon below
6163
$( buttonElements.icon ).remove();
6264
buttonElements.icon = null;
65+
hover = buttonElements.hover;
66+
state = buttonElements.state;
6367
}
6468
else {
6569
buttonInner = document.createElement( o.wrapperEls );
@@ -76,7 +80,9 @@ $.fn.buttonMarkup = function( options ) {
7680
o.theme = $.mobile.getInheritedTheme( el, "c" );
7781
}
7882

79-
buttonClass = "ui-btn ui-btn-up-" + o.theme;
83+
buttonClass = "ui-btn ";
84+
buttonClass += ( hover ? "ui-btn-hover-" + o.theme : "" );
85+
buttonClass += ( state ? " ui-btn-" + state + "-" + o.theme : "" );
8086
buttonClass += o.shadow ? " ui-shadow" : "";
8187
buttonClass += o.corners ? " ui-btn-corner-all" : "";
8288

@@ -145,6 +151,8 @@ $.fn.buttonMarkup = function( options ) {
145151
// Assign a structure containing the elements of this button to the elements of this button. This
146152
// will allow us to recognize this as an already-enhanced button in future calls to buttonMarkup().
147153
buttonElements = {
154+
hover : hover,
155+
state : state,
148156
bcls : buttonClass,
149157
outer : e,
150158
inner : buttonInner,
@@ -189,6 +197,18 @@ function closestEnabledButton( element ) {
189197
return element;
190198
}
191199

200+
function updateButtonClass( $btn, classToRemove, classToAdd, hover, state ) {
201+
var buttonElements = $.data( $btn[ 0 ], "buttonElements" );
202+
$btn.removeClass( classToRemove ).addClass( classToAdd );
203+
if ( buttonElements ) {
204+
buttonElements.bcls = $btn[ 0 ].className;
205+
if ( hover !== undefined ) {
206+
buttonElements.hover = hover;
207+
}
208+
buttonElements.state = state;
209+
}
210+
}
211+
192212
var attachEvents = function() {
193213
var hoverDelay = $.mobile.buttonMarkup.hoverDelay, hov, foc;
194214

@@ -206,24 +226,24 @@ var attachEvents = function() {
206226
if ( isTouchEvent ) {
207227
// Use a short delay to determine if the user is scrolling before highlighting
208228
hov = setTimeout( function() {
209-
$btn.removeClass( "ui-btn-up-" + theme ).addClass( "ui-btn-down-" + theme );
229+
updateButtonClass( $btn, "ui-btn-up-" + theme, "ui-btn-down-" + theme, undefined, "down" );
210230
}, hoverDelay );
211231
} else {
212-
$btn.removeClass( "ui-btn-up-" + theme ).addClass( "ui-btn-down-" + theme );
232+
updateButtonClass( $btn, "ui-btn-up-" + theme, "ui-btn-down-" + theme, undefined, "down" );
213233
}
214234
} else if ( evt === "vmousecancel" || evt === "vmouseup" ) {
215-
$btn.removeClass( "ui-btn-down-" + theme ).addClass( "ui-btn-up-" + theme );
235+
updateButtonClass( $btn, "ui-btn-down-" + theme, "ui-btn-up-" + theme, undefined, "up" );
216236
} else if ( evt === "vmouseover" || evt === "focus" ) {
217237
if ( isTouchEvent ) {
218238
// Use a short delay to determine if the user is scrolling before highlighting
219239
foc = setTimeout( function() {
220-
$btn.removeClass( "ui-btn-up-" + theme ).addClass( "ui-btn-hover-" + theme );
240+
updateButtonClass( $btn, "ui-btn-up-" + theme, "ui-btn-hover-" + theme, true, "" );
221241
}, hoverDelay );
222242
} else {
223-
$btn.removeClass( "ui-btn-up-" + theme ).addClass( "ui-btn-hover-" + theme );
243+
updateButtonClass( $btn, "ui-btn-up-" + theme, "ui-btn-hover-" + theme, true, "" );
224244
}
225245
} else if ( evt === "vmouseout" || evt === "blur" || evt === "scrollstart" ) {
226-
$btn.removeClass( "ui-btn-hover-" + theme + " ui-btn-down-" + theme ).addClass( "ui-btn-up-" + theme );
246+
updateButtonClass( $btn, "ui-btn-hover-" + theme + " ui-btn-down-" + theme, "ui-btn-up-" + theme, false, "up" );
227247
if ( hov ) {
228248
clearTimeout( hov );
229249
}

0 commit comments

Comments
 (0)