Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
201 changes: 112 additions & 89 deletions js/prettyCheckboxes.js
Original file line number Diff line number Diff line change
@@ -1,96 +1,119 @@
/* ------------------------------------------------------------------------
prettyCheckboxes

Developped By: Stephane Caron (http://www.no-margin-for-errors.com)
Refactoring by: Norlin (http://github.com/norlin)
Inspired By: All the non user friendly custom checkboxes solutions ;)
Version: 1.1
Version: 1.2

Copyright: Feel free to redistribute the script/modify it, as
long as you leave my infos at the top.
long as you leave my infos at the top.
------------------------------------------------------------------------- */

jQuery.fn.prettyCheckboxes = function(settings) {
settings = jQuery.extend({
checkboxWidth: 17,
checkboxHeight: 17,
className : 'prettyCheckbox',
display: 'list'
}, settings);

$(this).each(function(){
// Find the label
$label = $('label[for="'+$(this).attr('id')+'"]');

// Add the checkbox holder to the label
$label.prepend("<span class='holderWrap'><span class='holder'></span></span>");

// If the checkbox is checked, display it as checked
if($(this).is(':checked')) { $label.addClass('checked'); };

// Assign the class on the label
$label.addClass(settings.className).addClass($(this).attr('type')).addClass(settings.display);

// Assign the dimensions to the checkbox display
$label.find('span.holderWrap').width(settings.checkboxWidth).height(settings.checkboxHeight);
$label.find('span.holder').width(settings.checkboxWidth);

// Hide the checkbox
$(this).addClass('hiddenCheckbox');

// Associate the click event
$label.bind('click',function(){
$('input#' + $(this).attr('for')).triggerHandler('click');

if($('input#' + $(this).attr('for')).is(':checkbox')){
$(this).toggleClass('checked');
$('input#' + $(this).attr('for')).checked = true;

$(this).find('span.holder').css('top',0);
}else{
$toCheck = $('input#' + $(this).attr('for'));

// Uncheck all radio
$('input[name="'+$toCheck.attr('name')+'"]').each(function(){
$('label[for="' + $(this).attr('id')+'"]').removeClass('checked');
});

$(this).addClass('checked');
$toCheck.checked = true;
};
});

$('input#' + $label.attr('for')).bind('keypress',function(e){
if(e.keyCode == 32){
if($.browser.msie){
$('label[for="'+$(this).attr('id')+'"]').toggleClass("checked");
}else{
$(this).trigger('click');
}
return false;
};
});

jQuery.fn.prettyCheckboxes = function(settings) {
var classes = {
checked: 'checked',
holder: 'holder',
holderWrap: 'holderWrap',
hidden: 'hiddenCheckbox'
},
template = '<span class="' + classes.holderWrap + '"><span class="' + classes.holder + '"></span></span>';

settings = jQuery.extend({
checkboxWidth: 17,
checkboxHeight: 17,
className : 'prettyCheckbox',
display: 'list'
}, settings);

$(this).each(function () {
// Find the label
var $input = $(this),
$label = $('label[for="' + $input.attr('id') + '"]');

// Add the checkbox holder to the label
$label.prepend(template);

// If the checkbox is checked, display it as checked
if ($input.is(':checked')) {
$label.addClass(classes.checked);
}

// Assign the class on the label
$label.addClass(settings.className).
addClass($input.attr('type')).
addClass(settings.display);

// Assign the dimensions to the checkbox display
$label.find('.' + classes.holderWrap).
width(settings.checkboxWidth).
height(settings.checkboxHeight);

$label.find('.' + classes.holder).
width(settings.checkboxWidth);

// Hide the checkbox
$input.addClass(classes.hidden);

// Associate the click event
$label.click(function(){
if ($input.is(':disabled')) {
return false;
}

$input.triggerHandler('click');

if ($input.is(':checkbox')){
$label.toggleClass(classes.checked);
$input.checked = true;

$label.find('.' + classes.holder).css('top',0);
} else {
// Uncheck all radio
$('input[name="' + $input.attr('name') + '"]').each(function () {
$('label[for="' + this.id + '"]').removeClass(classes.checked);
});

$label.addClass(classes.checked);
$input.checked = true;
}
});

$input.keypress(function(e) {
if (e.keyCode == 32){
if ($.browser.msie){
$label.toggleClass(classes.checked);
} else {
$input.trigger('click');
}

return false;
}
});
};

checkAllPrettyCheckboxes = function(caller, container){
if($(caller).is(':checked')){
// Find the label corresponding to each checkbox and click it
$(container).find('input[type=checkbox]:not(:checked)').each(function(){
$('label[for="'+$(this).attr('id')+'"]').trigger('click');
if($.browser.msie){
$(this).attr('checked','checked');
}else{
$(this).trigger('click');
};
});
}else{
$(container).find('input[type=checkbox]:checked').each(function(){
$('label[for="'+$(this).attr('id')+'"]').trigger('click');
if($.browser.msie){
$(this).attr('checked','');
}else{
$(this).trigger('click');
};
});
};
};
});
};

var checkAllPrettyCheckboxes = function(caller, container){
var $container = $(container),
$inputs = $container.find('input[type=checkbox]');

// Find the label corresponding to each checkbox...
if ($(caller).is(':checked')) {
$inputs = $inputs.not(':checked');
} else {
$inputs = $inputs.filter(':checked');
}

//...and click it
$inputs.each(function(){
var $this = $(this);

$('label[for="' + this.id + '"]').trigger('click');

if ($.browser.msie) {
$this.attr('checked','checked');
} else {
$this.trigger('click');
}
});
};