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 )