};
sub validate_form {
- my ($self,$to,$fill) = @_;
+ my ($self,$to) = @_;
$self->collect({
filter => sub {
return
- $_->select('input')->validate_and_fill($to,$fill)
- ->select('select')->validate_and_fill($to,$fill);
+ $_->select('input')->validation_rules($to)
+ ->select('select')->validation_rules($to);
},
passthrough => 1,
});
}
-sub val {
- my ($self, $value) = @_;
- #set value on an element. if its a select select its option
- #if it's a checkbox check it otherwise set attr value
+sub fill_form {
+ my ($self,$val) = @_;
+ $self->collect({
+ filter => sub {
+ return
+ $_->select('input')->val($val)
+ #->select('select')->val($val)
+ ;
+ },
+ passthrough => 1,
+ });
+}
+
+sub validation_rules {
+ my ($self, $to) = @_;
sub {
- return $self->set_attribute(value => $value);
+ my ($evt) = @_;
+ $to->{$evt->{'attrs'}->{'name'}}
+ = [split ' ', $evt->{'attrs'}->{'data-validate'}||""];
+ $evt;
}
}
-sub validate_and_fill {
- my ($self, $to, $fill) = @_;
+sub val {
+ #if val is a hashref automatically match to name, otherwise fill as is.
+ my ($self, $val) = @_;
sub {
my ($evt) = @_;
- my $nm = $evt->{'attrs'}->{'name'};
- if(defined $fill && $fill->{$nm}) {
- $evt->{'raw'} = undef;
- $evt->{'raw_attrs'} = undef;
- push @{$evt->{'attr_names'}}, 'value' unless exists $evt->{'attrs'}->{'value'};
- $evt->{'attrs'}->{'value'} = $fill->{$nm};
+ my $attrs = $evt->{'attrs'};
+ my $nm = $attrs->{'name'};
+ my $tar = defined $val && ref $val eq 'HASH' ? $val->{$nm} : $val;
+ if(defined $tar) {
+ if($evt->{'name'} eq 'select') {
+ #if we are select do something more complicated
+ warn "Can't do selects yet";
+ } else {
+ $evt->{'raw'} = undef;
+ $evt->{'raw_attrs'} = undef;
+ push @{$evt->{'attr_names'}}, 'value' unless exists $attrs->{'value'};
+ $attrs->{'value'} = $tar;
+ #check if we are a checkbox
+ if($attrs->{'type'} eq 'checkbox') {
+ if($tar) {
+ push @{$evt->{'attr_names'}}, 'selected' unless exists $attrs->{'selected'};
+ $attrs->{'selected'} = $tar ? 'selected' : '';
+ } else {
+ delete $attrs->{'selected'};
+ $evt->{'attr_names'} = [ grep $_ ne 'selected', @{$evt->{'attr_names'}} ];
+ }
+ }
+ }
}
- $to->{$nm} =
- [split ' ', $evt->{'attrs'}->{'data-validate'}||""];
$evt;
}
}
'set value on input=text'
);
-($expect = $tmpl) =~ s/name="input_field" /name="input_field" value="testval" /;
+$z = HTML::Zoom->from_html($tmpl);
+($expect = $tmpl) =~ s/value="0" type="checkbox" name="input_check" /value="1" type="checkbox" name="input_check" selected="selected" /;
is(
$z->select('input[name="input_check"]')->val(1)->to_html,
'set value on input=checkbox'
);
-# my %rules;
-# my $validate_and_fill = sub {
-# $_ = $_->set_attribute("test" => "test");
-# #use Devel::Dwarn;Dwarn \@_;
-# $_;
-# };
-#
-# print $z->select('form')->validate_form(\%rules, {input_field => "Test", input_field2 => "Moo"})->to_html;
-# use Devel::Dwarn;Dwarn \%rules;
+($expect = $tmpl) =~ s/value="1" type="checkbox" name="input_check" selected="selected" \>/value="0" type="checkbox" name="input_check" \>/;
+
+is(
+ $z->select('input[name="input_check"]')->val(0)->to_html,
+ $expect,
+ 'remove value on input=checkbox'
+);
+
+$z = HTML::Zoom->from_html($tmpl);
+($expect = $tmpl) =~ s/name="input_field" /name="input_field" value="testval" /;
+
+is(
+ $z->select('input')->val({input_field => "testval"})->to_html,
+ $expect,
+ 'alternate fill'
+);
+
+
+SKIP: {
+ skip "not implemented",1;
+ $z = HTML::Zoom->from_html($tmpl);
+ ($expect = $tmpl) =~ s/option value="2" /option value="2" selected="selected" /;
+
+ is(
+ $z->select('select[name="select_field"]')->val(2)->to_html,
+ $expect,
+ 'Set value on select'
+ );
+
+}
+
+my %rules;
+$z->select('form')->validate_form(\%rules)->to_html;
+is(scalar keys %rules, 5, "Correctly extracted validation info");
+done_testing();