Apache-Wyrd
view release on metacpan or search on metacpan
Wyrd/Input/Set.pm view on Meta::CPAN
unless ($effective_value or ($value eq '0') or $self->_flags->reset) {
my ($attempt, $success) = $self->{'_parent'}->_get_value($self->{'name'});
if ($self->{'_check_null_submit'}) {
if ($self->dbl->param('_being_submitted_' . $self->{'name'})) {
$self->{'_parent'}->{'_variables'}->{$self->{'name'}} = undef;
}
}
$value = $attempt;
$value ||= $self->{'_parent'}->{'_variables'}->{$self->{'name'}};
$value ||= ($self->{'_multiple'} ? [token_parse($self->{'default'})] : $self->{'default'}) || ($self->{'_multiple'} ? [] : '');
}
if ($self->{'_multiple'}) {
$value = [$value] if (ref($value) ne 'ARRAY');
foreach my $option (@{$value}) {
$values{'_' . $option . '_on_'} = $self->{'_on_button'};
}
} else {
$value = shift(@{$value}) if (ref($value) eq 'ARRAY');
$values{'_' . $value . '_on_'} = $self->{'_on_button'};
}
return ($self->_set(\%values, $self->{'_template'}));
}
sub _process_child {
my ($self, $child) = @_;
my $name = (defined($child->name) ? $child->name : $child->value);
my $value = (defined($child->value) ? $child->value : $child->name);
$self->{'_options'}->{$name} = $value;
}
=pod
=head1 AUTHOR
Barry King E<lt>wyrd@nospam.wyrdwright.comE<gt>
=head1 SEE ALSO
=over
=item Apache::Wyrd
General-purpose HTML-embeddable perl object
=item Apache::Wyrd::Input::Opt
Options of the multi-value Input.
=back
=head1 LICENSE
Copyright 2002-2007 Wyrdwright, Inc. and licensed under the GNU GPL.
See LICENSE under the documentation for C<Apache::Wyrd>.
=cut
sub _parse_options {
my ($self) = @_;
$self->SUPER::_parse_options;
my $options = $self->{'options'};
if (ref($options) eq 'ARRAY') {
use Apache::Wyrd::Input::Opt;
foreach my $option (@$options) {
my $object = Apache::Wyrd::Input::Opt->new($self->dbl, {value => $option});
$self->register_child($object);
}
} elsif (ref($options) eq 'HASH') {
use Apache::Wyrd::Input::Opt;
my ($name, $value) = ();
while (($name, $value) = each %$options) {
my $object = Apache::Wyrd::Input::Opt->new($self->dbl, {name => $name, value => $value});
$self->register_child($object);
}
} else {
$self->_info('No valid options given');
}
}
sub _startup_radiobuttons {
my ($self, $value, $params) = @_;
$self->{'_check_null_submit'} = 1;
$self->{'_on_button'} = ' checked';
$params->{'options'} = [keys(%{$self->{'_options'}})];
$self->{'_datum'} ||= (Apache::Wyrd::Datum::Enum->new($value, $params));
$self->{'sort'} ||= 'value';
my @sort = token_parse($self->{'sort'});
my $name = $self->name;
my $template = qq(<input type="hidden" name="_being_submitted_$name" value="1">);
my $emptyname = $self->{'emptyname'};
my $emptyclass = $self->{'emptyclass'};
my $emptystyle = $self->{'emptystyle'};
my @objects = @{$self->{'_children'}};
unless ($self->_flags->nosort) {
@objects = sort {sort_by_ikey($a, $b, @sort)} @objects;
}
if ($emptyname and not($self->_flags->noauto)) {
#pre-layed-out checkbox options should include their own empty option.
if (UNIVERSAL::can($self->{'_children'}->[0], 'clone')) {
my $object = $self->{'_children'}->[0]->clone;
if ($object->can('radiobutton')) {
$object->{'value'} = $emptyname;
$object->{'class'} = $emptyclass;
$object->{'style'} = $emptystyle;
$object->{'name'} = '';
$self->_process_child($object);
unshift @objects, $object;
} else {
$self->_error(ref($object) . ' object cannot make a radiobutton for the requested emptyname');
}
}
}
foreach my $object (@objects) {
my $option = ($object->name || ($object->name eq '0'? '0' : $self->{'_options'}->{$object->value}));
my $option_on = '$:_' . $option . '_on_';
$self->{'_' . $option . '_on_'} = undef;
if ($self->_flags->noauto) {
$object->{'_template'} = $self->_set({option => $option, option_on => $option_on, option_text => $self->{_options}->{$option}}, $object->radiobutton);
} else {
$template .= $self->_set({option => $option, option_on => $option_on, option_text => $self->{_options}->{$option}}, $object->radiobutton);
( run in 0.512 second using v1.01-cache-2.11-cpan-98e64b0badf )