Moved the HTML5 placeholder attribute emulation in ext.vector.simpleSearch into it's own jQuery plugin called jquery.placeholder.

This commit is contained in:
Trevor Parscal 2010-10-05 23:24:56 +00:00
parent a48858382a
commit 8467176cca
2 changed files with 51 additions and 0 deletions

View file

@ -48,6 +48,9 @@ return array(
'jquery.highlightText' => new ResourceLoaderFileModule(
array( 'scripts' => 'resources/jquery/jquery.highlightText.js' )
),
'jquery.placeholder' => new ResourceLoaderFileModule(
array( 'scripts' => 'resources/jquery/jquery.placeholder.js' )
),
'jquery.suggestions' => new ResourceLoaderFileModule(
array(
'scripts' => 'resources/jquery/jquery.suggestions.js',

View file

@ -0,0 +1,48 @@
/**
* HTML5 placeholder emulation for jQuery plugin
*
* This will automatically use the HTML5 placeholder attribute if supported, or emulate this behavior if not.
*
* @author Trevor Parscal <tparscal@wikimedia.org>
* @version 0.1.0
* @license GPL v2
*/
jQuery.fn.placeholder = function( text ) {
// If the HTML5 placeholder attribute is supported, use it
if ( 'placeholder' in document.createElement( 'input' ) ) {
jQuery(this).attr( 'placeholder', text );
}
// Otherwise, use a combination of blur and focus event handlers and a placeholder class
else {
jQuery(this).each( function() {
$input = jQuery(this);
$input
// Show on blur if empty
.bind( 'blur', function() {
if ( $input.val().length == 0 ) {
$input
.val( text )
.addClass( 'placeholder' );
}
} )
// Hide on focus
.bind( 'focus', function() {
if ( $input.hasClass( 'placeholder' ) ) {
$input
.val( '' )
.removeClass( 'placeholder' );
}
} )
// Blank on submit -- prevents submitting with unintended value
.parents( 'form' )
.bind( 'submit', function() {
$input.trigger( 'focus' );
} );
// Show initially, if empty
if ( $input.val() == '' ) {
$input.trigger( 'blur' );
}
} );
}
};