use warnings;
use strict;
package Jifty::Web::Form::Field::Radio;
use base qw/Jifty::Web::Form::Field/;
=head1 NAME
Jifty::Web::Form::Field::Radio - Add a radio button to your forms
=head1 METHODS
=head2 render_widget
Renders the whole radio button collection.
=cut
sub render_widget {
my $self = shift;
for my $opt ($self->available_values) {
$self->render_option($opt);
}
}
=head2 render_label
We need to output the label as a span instead since the labels are associated
with the individual options.
=cut
sub render_label {
my $self = shift;
Jifty->web->out(
qq!<span class="label @{[$self->classes]}">@{[_($self->label) ]}</span>\n!
);
return '';
}
=head2 render_option option
Renders a radio widget
=cut
sub render_option {
my $self = shift;
my $opt = shift;
my $display = ref($opt) ? $opt->{'display'} : $opt;
my $value = ref($opt) ? $opt->{'value'} : $opt;
$value = '' if !defined($value);
my $id = $self->element_id . "-" . $value;
$id =~ s/\s+/_/;
my $field = qq! <input type="radio" !;
$field .= qq! name="@{[ $self->input_name ]}"!;
$field .= qq! id="@{[ $id ]}"!;
$field .= qq! title="@{[ $self->title ]}"! if ($self->title);
$field .= qq! value="@{[ $value ]}"!;
$field .= $self->_widget_class;
$field .= qq! checked="checked" !
if defined $self->current_value and $self->current_value eq $value;
$field .= $self->javascript;
$field .= qq! /><label for="@{[ $id ]}"!;
$field .= $self->_widget_class;
$field .= qq!>$display</label>\n!;
$field = qq{<span class="radiooption">$field</span>};
Jifty->web->out($field);
'';
}
1;