package Rose::HTML::Form::Field::Submit;
use strict;
use Carp();
use base 'Rose::HTML::Form::Field::Input';
use Rose::Object::MakeMethods::Generic
(
'boolean' => 'was_submitted',
);
use Rose::HTML::Object::MakeMethods::Localization
(
localized_message =>
[
qw(_value)
],
);
__PACKAGE__->add_required_html_attrs(
{
type => 'submit',
name => '',
});
our $VERSION = '0.616';
sub is_button { 1 }
sub is_empty { 1 }
sub hidden_fields { (wantarray) ? () : [] }
sub html_hidden_fields { (wantarray) ? () : [] }
*xhtml_hidden_fields = \&html_hidden_fields;
sub clear { shift->was_submitted(0) }
sub reset { shift->was_submitted(0) }
sub image_html { shift->__image_html(0, @_) }
sub image_xhtml { shift->__image_html(1, @_) }
sub __image_html
{
my($self, $xhtml, %args) = @_;
$args{'type'} = 'image';
my %old;
while(my($k, $v) = each(%args))
{
if($self->html_attr_exists($k))
{
$old{$k} = $self->html_attr($k);
}
$self->html_attr($k => $v);
}
Carp::croak("Missing src attribute") unless(length $self->html_attr('src'));
my $ret = $xhtml ? $self->xhtml : $self->html;
# Back out changes
foreach my $attr (keys %args)
{
if(exists $old{$attr})
{
$self->html_attr($attr => $old{$attr});
}
else
{
$self->delete_html_attr($attr);
}
}
return $ret;
}
sub value_message_id
{
my($self) = shift;
if(@_)
{
$self->_value_message_id(@_);
return $self->html_attr(value => $self->_value);
}
return $self->_value_message_id;
}
*value_id = \&value_message_id;
sub value
{
my($self) = shift;
if(@_)
{
my $value = $self->_value(@_);
return $self->SUPER::value($value);
}
my $value = $self->html_attr('value');
unless(defined $value)
{
return $self->html_attr(value => $self->_value);
}
return $value;
}
sub input_value
{
my ($self, $value) = @_;
no warnings 'uninitialized';
$self->was_submitted($value eq $self->value);
}
sub internal_value
{
my ($self) = shift;
return $self->value if($self->was_submitted);
return undef;
}
1;
__END__
=head1 NAME
Rose::HTML::Form::Field::Submit - Object representation of a submit button in an HTML form.
=head1 SYNOPSIS
$field =
Rose::HTML::Form::Field::Submit->new(name => 'run',
value => 'Do it!');
print $field->html;
# or...
print $field->image_html(src => 'images/run_button.gif');
...
=head1 DESCRIPTION
L<Rose::HTML::Form::Field::Submit> is an object representation of a submit button in an HTML form.
This class inherits from, and follows the conventions of, L<Rose::HTML::Form::Field>. Inherited methods that are not overridden will not be documented a second time here. See the L<Rose::HTML::Form::Field> documentation for more information.
=head1 HTML ATTRIBUTES
Valid attributes:
accept
accesskey
alt
checked
class
dir
disabled
id
ismap
lang
maxlength
name
onblur
onchange
onclick
ondblclick
onfocus
onkeydown
onkeypress
onkeyup
onmousedown
onmousemove
onmouseout
onmouseover
onmouseup
onselect
readonly
size
src
style
tabindex
title
type
usemap
value
xml:lang
Required attributes (default values in parentheses):
name
type (submit)
Boolean attributes:
checked
disabled
ismap
readonly
=head1 CONSTRUCTOR
=over 4
=item B<new PARAMS>
Constructs a new L<Rose::HTML::Form::Field::Submit> object based on PARAMS, where PARAMS are name/value pairs. Any object method is a valid parameter name.
=back
=head1 OBJECT METHODS
=over 4
=item B<image_html [ARGS]>
Returns the HTML serialization of the submit button using an image instead of a standard button widget (in other words, type="image"). ARGS is a list of HTML attribute name/value pairs which are temporarily set, then backed out before the method returns. (The type="image" change is also backed out.)
The "src" HTML attribute must be set (either in ARGS or from an existing value for that attribute) or a fatal error will occur.
=item B<image_xhtml [ARGS]>
Like L<image_html()|/image_html>, but serialized to XHTML instead.
=item B<is_empty>
Returns true.
=item B<value [VALUE]>
Gets or sets the value of the "value" HTML attribute.
=item B<was_submitted>
Returns true if this submit button was pressed, false otherwise.
=back
=head1 AUTHOR
John C. Siracusa (siracusa@gmail.com)
=head1 LICENSE
Copyright (c) 2010 by John C. Siracusa. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.