File Coverage

blib/lib/HTML/Form/Input.pm
Criterion Covered Total %
statement 67 85 78.8
branch 34 54 62.9
condition 0 9 0.0
subroutine 16 19 84.2
pod 0 18 0.0
total 117 185 63.2


line stmt bran cond sub pod time code
1             package HTML::Form::Input;
2              
3 11     11   5580 use strict;
  11         24  
  11         13108  
4              
5             our $VERSION = '6.13';
6              
7             # ABSTRACT: A generic HTML form input element for use with HTML::Form
8              
9             sub new {
10 154     154 0 190 my $class = shift;
11 154         665 my $self = bless {@_}, $class;
12 154         301 $self;
13             }
14              
15             sub add_to_form {
16 116     116 0 192 my ( $self, $form ) = @_;
17 116         134 push( @{ $form->{'inputs'} }, $self );
  116         263  
18 116         520 $self;
19             }
20              
21             sub strict {
22 10     10 0 1805 my $self = shift;
23 10         25 my $old = $self->{strict};
24 10 100       48 if (@_) {
25 8         16 $self->{strict} = shift;
26             }
27 10         30 $old;
28             }
29              
30       50 0   sub fixup { }
31              
32             sub type {
33 145     145 0 350 shift->{type};
34             }
35              
36             sub name {
37 234     234 0 420 my $self = shift;
38 234         464 my $old = $self->{name};
39 234 100       603 $self->{name} = shift if @_;
40 234         630 $old;
41             }
42              
43             sub id {
44 1     1 0 2 my $self = shift;
45 1         2 my $old = $self->{id};
46 1 50       4 $self->{id} = shift if @_;
47 1         3 $old;
48             }
49              
50             sub class {
51 1     1 0 2 my $self = shift;
52 1         2 my $old = $self->{class};
53 1 50       3 $self->{class} = shift if @_;
54 1         18 $old;
55             }
56              
57             sub selected {
58 580     580 0 795 my ( $self, $sel ) = @_;
59 580 50       823 return undef unless defined $sel;
60 580 100       1459 my $attr
    100          
    100          
61             = $sel =~ s/^\^// ? "name"
62             : $sel =~ s/^#// ? "id"
63             : $sel =~ s/^\.// ? "class"
64             : "name";
65 580 100       1005 return 0 unless defined $self->{$attr};
66 575         1379 return $self->{$attr} eq $sel;
67             }
68              
69             sub value {
70 11     11 0 14 my $self = shift;
71 11         15 my $old = $self->{value};
72 11 100       23 $self->{value} = shift if @_;
73 11         28 $old;
74             }
75              
76             sub autocomplete {
77 6     6 0 20 my $self = shift;
78 6         14 my $old = $self->{autocomplete};
79 6 100       19 $self->{autocomplete} = shift if @_;
80 6         25 $old;
81             }
82              
83             sub possible_values {
84 0     0 0 0 return;
85             }
86              
87             sub other_possible_values {
88 0     0 0 0 return;
89             }
90              
91             sub value_names {
92 0     0 0 0 return;
93             }
94              
95             sub readonly {
96 6     6 0 634 my $self = shift;
97 6         11 my $old = $self->{readonly};
98 6 100       14 $self->{readonly} = shift if @_;
99 6         24 $old;
100             }
101              
102             sub disabled {
103 60     60 0 73 my $self = shift;
104 60         80 my $old = $self->{disabled};
105 60 100       103 $self->{disabled} = shift if @_;
106 60         134 $old;
107             }
108              
109             sub form_name_value {
110 76     76 0 94 my $self = shift;
111 76         102 my $name = $self->{'name'};
112 76 100       133 return unless defined $name;
113 68 100       178 return if $self->disabled;
114 65         147 my $value = $self->value;
115 65 100       177 return unless defined $value;
116             s/\x0d?\x0a|\x0d/\x0d\x0a/g
117 60         319 for $name, $value;
118 60         220 return ( $name => $value );
119             }
120              
121             sub dump {
122 1     1 0 2 my $self = shift;
123 1         6 my $name = $self->name;
124 1 50       33 $name = "" unless defined $name;
125 1         5 my $value = $self->value;
126 1 50       7 $value = "" unless defined $value;
127 1         3 my $dump = "$name=$value";
128              
129 1         5 my $type = $self->type;
130              
131 1 50       6 $type .= " disabled" if $self->disabled;
132 1 50       5 $type .= " readonly" if $self->readonly;
133 1 50       26 return sprintf "%-30s %s", $dump, "($type)" unless $self->{menu};
134              
135 0           my @menu;
136 0           my $i = 0;
137 0           for ( @{ $self->{menu} } ) {
  0            
138 0           my $opt = $_->{value};
139 0 0         $opt = "" unless defined $opt;
140             $opt .= "/$_->{name}"
141 0 0 0       if defined $_->{name} && length $_->{name} && $_->{name} ne $opt;
      0        
142 0 0         substr( $opt, 0, 0 ) = "-" if $_->{disabled};
143 0 0 0       if ( exists $self->{current} && $self->{current} == $i ) {
144 0 0         substr( $opt, 0, 0 ) = "!" unless $_->{seen};
145 0           substr( $opt, 0, 0 ) = "*";
146             }
147             else {
148 0 0         substr( $opt, 0, 0 ) = ":" if $_->{seen};
149             }
150 0           push( @menu, $opt );
151 0           $i++;
152             }
153              
154 0           return sprintf "%-30s %-10s %s", $dump, "($type)",
155             "[" . join( "|", @menu ) . "]";
156             }
157              
158             1;
159              
160             __END__