Skip to content

Instantly share code, notes, and snippets.

@maxcal
Created March 15, 2012 10:54
Show Gist options
  • Select an option

  • Save maxcal/2043616 to your computer and use it in GitHub Desktop.

Select an option

Save maxcal/2043616 to your computer and use it in GitHub Desktop.
jQuery.splitLabels
/**
* @author [email protected]
* @deps jQuery 1.42+
**/
/***
* P3 Hack thats removes the combined FirstnameLastname label adds a forname / lastname label
* Call it on a newsletter signup widget.
* @param fields object
* @return jQuery
**/
$.fn.splitLabel = function(options, fields){
var options = $.extend(true, {
mode : ($(this).parents('#main').length !== 0) ? 'main' : 'sidebar'
}, options || {});
var fields = $.extend(true, {
surname : {
sel : '.input-holder.last-name',
text : "Lastname",
req : true,
input: 'input[id$="txtLastName"]'
},
forename : {
sel : '.input-holder.first-name',
text : "Forename",
req : true,
input: 'input[id$="txtFirstName"]'
}
}, fields);
if ( options.mode === 'main' && ! $(this).hasClass('splitLabeled')) {
(function($parent){
var $clone = $parent.find('.row:first').clone();
$parent.find('.row:first').remove();
$.each(fields, function(){
var $obj = $('<div class="row splitLabel">');
$obj.prepend('<label>'+this.text+'</label>')
.append( $clone.find(this.sel).parents('.edit-box').clone() )
.find('.input-holder')
.not(this.sel)
.remove();
$parent.prepend($obj);
});
$parent.addClass('splitLabeled');
}($(this)));
}
else if ( options.mode === 'sidebar' && ! $(this).hasClass('splitLabeled')) {
(function($parent, fields){
$parent.find('label').remove();
// Loop through fields and create a label for each.
$.each(fields, function(){
var $obj = $parent.find(this.sel), $label = $('<label>');
$label.text(this.text + (this.req ? ' *': '') )
.attr('for', $obj.find('input').attr('id'));
$obj.prepend($label);
});
$parent.addClass('splitLabeled');
}($(this), fields));
}
}
// this is how you would call it for danish
$('#main #content .newsletter-frm').splitLabel({}, {});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment