package HTML::Widget::Element::Checkbox; use warnings; use strict; use base 'HTML::Widget::Element'; use NEXT; __PACKAGE__->mk_accessors(qw/checked comment label value retain_default/); =head1 NAME HTML::Widget::Element::Checkbox - Checkbox Element =head1 SYNOPSIS my $e = $widget->element( 'Checkbox', 'foo' ); $e->comment('(Required)'); $e->label('Foo'); $e->checked('checked'); $e->value('bar'); =head1 DESCRIPTION Checkbox Element. =head1 METHODS =head2 retain_default If true, overrides the default behaviour, so that after a field is missing from the form submission, the xml output will contain the default value, rather than be empty. =head2 new =cut sub new { shift->NEXT::new(@_)->value(1); } =head2 containerize =cut sub containerize { my ( $self, $w, $value, $errors, $args ) = @_; $value = ref $value eq 'ARRAY' ? shift @$value : $value; my $name = $self->name; # Search for multiple checkboxes with the same name my $multi = 0; my @elements = $w->find_elements( name => $name ); for my $element (@elements) { next if $element eq $self; if ( $element->isa('HTML::Widget::Element::Checkbox') ) { $multi++; } } # Generate unique id if ($multi) { $w->{_stash} ||= {}; $w->{_stash}->{checkbox} ||= {}; my $num = ++$w->{_stash}->{checkbox}->{$name}; my $id = $self->id( $w, "$name\_$num" ); $self->attributes->{id} ||= $id; } my $checked = ( defined $value && $value eq $self->value ) ? 'checked' : undef; if ( !defined $value && ( $self->retain_default || !$args->{submitted} ) && $self->checked ) { $checked = 'checked'; } $value = $self->value; my $l = $self->mk_label( $w, $self->label, $self->comment, $errors ); my $i = $self->mk_input( $w, { checked => $checked, type => 'checkbox', value => $value }, $errors ); my $e = $self->mk_error( $w, $errors ); return $self->container( { element => $i, error => $e, label => $l } ); } =head1 SEE ALSO L =head1 AUTHOR Sebastian Riedel, C =head1 LICENSE This library is free software, you can redistribute it and/or modify it under the same terms as Perl itself. =cut 1;