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;