From: Mischa Poslawsky Date: Fri, 1 Aug 2008 18:45:02 +0000 (+0200) Subject: XXX: defaults X-Git-Url: http://git.shiar.net/perl/html-form-simple.git/commitdiff_plain/61dd576040bbb86eb8925c1c80a830bfa998eb41 XXX: defaults --- diff --git a/lib/HTML/Form/Simple.pm b/lib/HTML/Form/Simple.pm index 911b864..2b30d79 100644 --- a/lib/HTML/Form/Simple.pm +++ b/lib/HTML/Form/Simple.pm @@ -9,7 +9,8 @@ our $VERSION = '1.00'; sub new { - bless {}, $_[0]; + my ($class, $default) = @_; + bless {default => $default}, $class; } sub _attr { @@ -83,6 +84,8 @@ sub hidden { $attr->{name } = $name if defined $name; $attr->{value} = $value if defined $value; + $attr->{value} = $self->{default}->{$name} + if not defined $attr->{value} and defined $name and defined $self->{default}; $attr->{type} = 'hidden' unless defined $attr->{type}; return $self->tag(input => $attr); @@ -94,6 +97,8 @@ sub text { $attr->{name } = $name if defined $name; $attr->{value} = $value if defined $value; + $attr->{value} = $self->{default}->{$name} + if not defined $attr->{value} and defined $name and defined $self->{default}; $attr->{id} = $attr->{name} unless defined $attr->{id}; $attr->{type} = 'text' unless defined $attr->{type} or defined $attr->{rows}; $value = delete $attr->{value} if defined $attr->{rows}; @@ -109,13 +114,15 @@ sub select { my $self = shift; my ($name, $rows, $default, $attr) = $self->_attr(3, @_); - $default = $attr->{value} unless defined $default; - delete $attr->{value}; # never a parent attribute - $attr->{name} = $name; $attr->{id} = $attr->{name} unless defined $attr->{id}; $attr->{type} = 'select' unless defined $attr->{type}; + $default = $attr->{value} unless defined $default; + delete $attr->{value}; # never a parent attribute + $default = $self->{default}->{$name} + if not defined $default and defined $name and defined $self->{default}; + my @options = map { ref $_ ? $_ : {value => $_} } @$rows; my @return; diff --git a/t/html.t b/t/html.t index b4420e1..89f82a1 100644 --- a/t/html.t +++ b/t/html.t @@ -5,7 +5,7 @@ use warnings; use Test::More; -plan tests => 59; +plan tests => 65; use_ok('HTML::Form::Simple'); @@ -455,5 +455,43 @@ is_deeply( 'various checkboxes' ); +# defaults + +my $defform = HTML::Form::Simple->new({foo => '<">', '' => 'empty', 0 => 0}); +ok($defform, 'form with defaults'); + +is( + $defform->hidden(''), + '', + 'hidden with default' +); + +is( + $defform->hidden(undef), + '', + 'nameless hidden' +); + +is( + $defform->text('foo'), + '', + 'input with default' +); + +is( + $defform->text('foo', {value => 'custom'}), + '', + 'input with value and default' +); + +is_deeply( + [ $defform->radio(0 => undef, [1, 0]) ], + [ + '', + '', + ], + 'select with default' +); + #TODO