The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use warnings;
use strict;
 
package Jifty::Web::Form::Field::Checkbox;

use base qw/Jifty::Web::Form::Field/;
__PACKAGE__->mk_accessors(qw/checked value/);

=head1 NAME

Jifty::Web::Form::Field::Checkbox - Add checkboxes to your forms

=head1 METHODS

=head2 accessors

Provide C<checked> and C<value> accessors, in addition to
L<Jifty::Web::Form::Field>'s default accessors.  C<value> defaults to
"1".

=cut

sub accessors { shift->SUPER::accessors(), 'checked' , 'value' }

=head2 render_widget

Renders the checkbox widget.

=cut

sub render_widget {
    my $self  = shift;
    my $field =  qq!<input type="hidden" name="@{[ $self->fallback_name ]}" value="0" />\n!;

    $field .= qq!<input!;
    $field .= qq! type="checkbox"!;
    $field .= qq! title="@{[ $self->title ]}"! if ($self->title);
    $field .= qq! name="@{[ $self->input_name ]}"!;
    $field .= qq! id="@{[ $self->element_id ]}"!;
    $field .= qq! value="@{[$self->value ||1]}"!;
    $field .= $self->_widget_class;
    $field .= qq! checked="checked"! if ($self->checked or $self->current_value);

    $field .= $self->javascript;
    
    $field .= qq! />\n!;
    Jifty->web->out($field);
    '';
}

=head2 render_value

Renders value as a checkbox widget.

=cut

sub render_value {
    my $self  = shift;
    my $field .= qq!<input type="checkbox"!;
    $field .= qq! name="@{[ $self->input_name ]}"!;
    $field .= qq! title="@{[ $self->title ]}"! if ($self->title);
    $field .= qq! id="@{[ $self->element_id ]}"!;
    $field .= qq! value="@{[$self->value ||1]}"!;
    $field .= $self->_widget_class;
    $field .= qq! checked="checked"! if ($self->checked or $self->current_value);
    $field .= qq! disabled="disabled" readonly="readonly"!;
    $field .= qq! />\n!;

    Jifty->web->out($field);
    return '';
}

=head2 javascript_preempt

By default, javascript (such as onclick handlers) should not actually
prevent browsers from placing the checkmark in the checkbox.

=cut

sub javascript_preempt { return 0; }

1;