[PATCH] Make HTML::Form more extensible
Father Chrysostomos <[email protected]>
| Newsgroups | gmane.comp.lang.perl.modules.lwp |
|---|---|
| Message-ID | <[email protected]> |
To whom it may concern:
I am trying to write a module that inherits some behaviour from
HTML::Form but has a different internal structure. In order to make
this work, I've changed instances of @{$self->{'inputs'}} to $self-
>inputs, $self->{'method'} to $self->method, etc., and other
changes. Is this all right? All the tests pass. If you could release
a new version of LWP with this patch applied, I would be very grateful.
Father Chrysostomos
P.S.: Please CC any replies to me so I don't have to subscribe. Thank
you.
html-form.diff
(application/octet-stream, 3.1 KB)
--- lib/HTML/Form.pm.orig 2007-09-21 12:54:06.000000000 -0700
+++ lib/HTML/Form.pm 2007-09-22 22:22:19.000000000 -0700
@@ -7,7 +7,7 @@ use URI;
use Carp ();
use vars qw($VERSION);
-$VERSION = sprintf("%d.%03d", q$Revision: 1.54 $ =~ /(\d+)\.(\d+)/);
+$VERSION = sprintf("%d.%03d", q$Revision: 1.55 $ =~ /(\d+)\.(\d+)/);
my %form_tags = map {$_ => 1} qw(input textarea button select option);
@@ -390,12 +390,12 @@ sub find_input
if (wantarray) {
my @res;
my $c;
- for (@{$self->{'inputs'}}) {
+ for ($self->inputs) {
if (defined $name) {
- next unless exists $_->{name};
- next if $name ne $_->{name};
+ next unless defined(my $n = $_->name);
+ next if $name ne $n;
}
- next if $type && $type ne $_->{type};
+ next if $type && $type ne $_->type;
$c++;
next if $no && $no != $c;
push(@res, $_);
@@ -405,12 +405,12 @@ sub find_input
}
else {
$no ||= 1;
- for (@{$self->{'inputs'}}) {
+ for ($self->inputs) {
if (defined $name) {
- next unless exists $_->{name};
- next if $name ne $_->{name};
+ next unless defined(my $n = $_->name);
+ next if $name ne $n;
}
- next if $type && $type ne $_->{type};
+ next if $type && $type ne $_->type;
next if --$no;
return $_;
}
@@ -565,7 +565,7 @@ sub try_others
{
my($self, $cb) = @_;
my @try;
- for (@{$self->{'inputs'}}) {
+ for ($self->inputs) {
my @not_tried_yet = $_->other_possible_values;
next unless @not_tried_yet;
push(@try, [\@not_tried_yet, $_]);
@@ -595,9 +595,9 @@ of the form. You might want to use the
sub make_request
{
my $self = shift;
- my $method = uc $self->{'method'};
- my $uri = $self->{'action'};
- my $enctype = $self->{'enctype'};
+ my $method = uc $self->method;
+ my $uri = $self->action;
+ my $enctype = lc $self->enctype;
my @form = $self->form;
if ($method eq "GET") {
@@ -658,7 +658,7 @@ sub click
$name = shift if (@_ % 2) == 1; # odd number of arguments
# try to find first submit button to activate
- for (@{$self->{'inputs'}}) {
+ for ($self->inputs) {
next unless $_->can("click");
next if $name && $_->name ne $name;
next if $_->disabled;
@@ -683,7 +683,7 @@ generated.
sub form
{
my $self = shift;
- map { $_->form_name_value($self) } @{$self->{'inputs'}};
+ map { $_->form_name_value($self) } $self->inputs;
}
@@ -901,9 +901,9 @@ incorporated in the form value from this
sub form_name_value
{
my $self = shift;
- my $name = $self->{'name'};
- return unless defined $name;
- return if $self->{disabled};
+ my $name = $self->name;
+ return unless defined $name && length $name;
+ return if $self->disabled;
my $value = $self->value;
return unless defined $value;
return ($name => $value);
@@ -1321,8 +1321,8 @@ sub headers {
sub form_name_value {
my($self, $form) = @_;
return $self->SUPER::form_name_value($form)
- if $form->method ne "POST" ||
- $form->enctype ne "multipart/form-data";
+ if uc $form->method ne "POST" ||
+ lc $form->enctype ne "multipart/form-data";
my $name = $self->name;
return unless defined $name;