mirror of
https://github.com/Hopiu/jquery-mobile.git
synced 2026-03-16 22:10:25 +00:00
107 lines
2.7 KiB
JavaScript
107 lines
2.7 KiB
JavaScript
/*
|
||
* "button" plugin - links that proxy to native input/buttons
|
||
*/
|
||
|
||
//>>excludeStart("jqmBuildExclude", pragmas.jqmBuildExclude);
|
||
define( [ "jquery.mobile.widget", "jquery.mobile.buttonMarkup" ], function() {
|
||
//>>excludeEnd("jqmBuildExclude");
|
||
(function( $, undefined ) {
|
||
|
||
$.widget( "mobile.button", $.mobile.widget, {
|
||
options: {
|
||
theme: null,
|
||
icon: null,
|
||
iconpos: null,
|
||
inline: null,
|
||
corners: true,
|
||
shadow: true,
|
||
iconshadow: true,
|
||
initSelector: "button, [type='button'], [type='submit'], [type='reset'], [type='image']"
|
||
},
|
||
_create: function() {
|
||
var $el = this.element,
|
||
o = this.options,
|
||
type,
|
||
name,
|
||
$buttonPlaceholder;
|
||
|
||
// Add ARIA role
|
||
this.button = $( "<div></div>" )
|
||
.text( $el.text() || $el.val() )
|
||
.insertBefore( $el )
|
||
.buttonMarkup({
|
||
theme: o.theme,
|
||
icon: o.icon,
|
||
iconpos: o.iconpos,
|
||
inline: o.inline,
|
||
corners: o.corners,
|
||
shadow: o.shadow,
|
||
iconshadow: o.iconshadow
|
||
})
|
||
.append( $el.addClass( "ui-btn-hidden" ) );
|
||
|
||
type = $el.attr( "type" );
|
||
name = $el.attr( "name" );
|
||
|
||
// Add hidden input during submit if input type="submit" has a name.
|
||
if ( type !== "button" && type !== "reset" && name ) {
|
||
$el.bind( "vclick", function() {
|
||
// Add hidden input if it doesn’t already exist.
|
||
if( $buttonPlaceholder === undefined ) {
|
||
$buttonPlaceholder = $( "<input>", {
|
||
type: "hidden",
|
||
name: $el.attr( "name" ),
|
||
value: $el.attr( "value" )
|
||
}).insertBefore( $el );
|
||
|
||
// Bind to doc to remove after submit handling
|
||
$( document ).one("submit", function(){
|
||
$buttonPlaceholder.remove();
|
||
|
||
// reset the local var so that the hidden input
|
||
// will be re-added on subsequent clicks
|
||
$buttonPlaceholder = undefined;
|
||
});
|
||
}
|
||
});
|
||
}
|
||
|
||
this.refresh();
|
||
},
|
||
|
||
enable: function() {
|
||
this.element.attr( "disabled", false );
|
||
this.button.removeClass( "ui-disabled" ).attr( "aria-disabled", false );
|
||
return this._setOption( "disabled", false );
|
||
},
|
||
|
||
disable: function() {
|
||
this.element.attr( "disabled", true );
|
||
this.button.addClass( "ui-disabled" ).attr( "aria-disabled", true );
|
||
return this._setOption( "disabled", true );
|
||
},
|
||
|
||
refresh: function() {
|
||
var $el = this.element;
|
||
|
||
if ( $el.prop("disabled") ) {
|
||
this.disable();
|
||
} else {
|
||
this.enable();
|
||
}
|
||
|
||
// the textWrapper is stored as a data element on the button object
|
||
// to prevent referencing by it's implementation details (eg 'class')
|
||
this.button.data( 'textWrapper' ).text( $el.text() || $el.val() );
|
||
}
|
||
});
|
||
|
||
//auto self-init widgets
|
||
$( document ).bind( "pagecreate create", function( e ){
|
||
$.mobile.button.prototype.enhanceWithin( e.target );
|
||
});
|
||
|
||
})( jQuery );
|
||
//>>excludeStart("jqmBuildExclude", pragmas.jqmBuildExclude);
|
||
});
|
||
//>>excludeEnd("jqmBuildExclude");
|