Apache-Wyrd
view release on metacpan or search on metacpan
Wyrd/Input.pm view on Meta::CPAN
A description for this input, to be used in error messages.
=item maxlength
Maximum length of the inputted text, applies both to text and textarea
type Inputs.
=item name
Required. The name of the Input.
=item param
The CGI parameter to use for this Input, if not the B<name>.
=item triggers
The triggers fired (comma separated list) by this input if invalid, if
not B<param> or B<name> (in that order of precedence).
=item width
Width of the item, in pixels. This is an estimated value based on the
browser in use and assuming default style-sheets for those browsers.
Meant for really quick-and-dirty formatting. Applies only to text and
textarea Inputs, or Inputs that somehow make use of the
C<Apache::Wyrd::Interfaces::SmartInput> interface.
=item height
With the same caveats as width, this attribute is the height of the
item, in pixels. As with width, applies only to textarea attributes or
SmartInputs that implement a height in chars.
=item type
Required. The type of the Input.
=item flags
=over
=item allow_zero
By default, a value of zero is not considered a valid value, and a value of zero
will trigger an error if the required flag is set. This flag will allow values
that are mathematically equivalent to zero. It may become the default behavior
in future versions of this Wyrd.
=item escape
Escape the HTML of the value, so as to avoid HTML parsing errors.
Default behavior for Inputs who's end-result input tags have this
problem, such as E<lt>input type="text"E<gt>
=item no_fail
Always accept value, even when invalid.
=item not_null
an alias for required.
=item quiet
Do not report error messages, only errors.
=item required
trigger an error if empty
=item reset
Do not track the value of this input, but allow it to be reset on every
submit (used in some no_submit flagged forms).
=item strict
Enforce the strict pragma on the underlying datum object. Of limited
use outside of debugging Input objects.
=back
=back
=head2 PERL METHODS
I<(format: (returns) name (arguments after self))>
=over
=item (scalar) C<name/type/value/description/param> (void)
Input has read-only methods for C<name>, C<type>, C<value>,
C<description>, C<triggers>, and C<param>. The C<param> attribute is optional for
Inputs which might need to use another name than the CGI variable of
their associated HTML input, such as to use 'username' and 'password' when
the browser may attempt to auto-fill these values.
Note that the C<value> call gets the current value of the input from the
underlying C<_datum> object, and not from it's temporary storage under
the C<_value> attribute. This allows the Datum to be independent of the
temporary value of the Input.
=cut
sub name {
my ($self) = @_;
return $self->{'name'};
}
sub type {
my ($self) = @_;
return $self->{'type'};
}
sub param {
my ($self) = @_;
return $self->{'param'} if ($self->{'param'});
return $self->{'name'};
Wyrd/Input.pm view on Meta::CPAN
$value =~ s/\&/\&/g;
$value =~ s/\'/'/g;
$value =~ s/\"/"/g;
$value =~ s/\</</g;
$value =~ s/\>/>/g;
$value =~ s/\?\x00:/\?:/g;
$value =~ s/\!\x00:/\!:/g;
$value =~ s/\$\x00:/\$:/g;
return $value;
}
=pod
=item (scalar) C<_template_foo> (scalar)
the C<_template> methods should provide an
C<Apache::Wyrd::Interfaces::Setter>-style template for a given input.
Built-in templates are text, textarea, password
=cut
sub _template_text {
return '<input type="text" name="$:param" value="$:value"?:size{ size="$:size"}?:class{ class="$:class"}?:style{ style="$:style"}?:id{ id="$:id"}?:maxlength{ maxlength="$:maxlength"}?:tabindex{ tabindex="$:tabindex"}?:accesskey{ accesskey="$:tabinde...
}
sub _template_textarea {
return '<textarea name="$:param"?:cols{ cols="$:cols"}?:rows{ rows="$:rows"}?:wrap{ wrap="$:wrap"}?:id{ id="$:id"}?:class{ class="$:class"}?:style{ style="$:style"}?:tabindex{ tabindex="$:tabindex"}?:accesskey{ accesskey="$:accesskey"}?:onblur{ onbl...
}
sub _template_password {
return '<input type="password" name="$:param" value="$:value"?:size{ size="$:size"}?:id{ id="$:id"}?:maxlength{ maxlength="$:maxlength"}?:class{ class="$:class"}?:style{ style="$:style"}?:tabindex{ tabindex="$:tabindex"}?:accesskey{ accesskey="$:tab...
}
sub _template_hidden {
return '<input type="hidden" name="$:param" value="$:value">';
}
=pod
=back
=head1 BUGS/CAVEATS/RESERVED METHODS
Reserves the C<_format_output> and C<_generate_output> methods. Also
reserves the C<final_output> method.
=cut
sub _format_output {
my ($self) = @_;
$self->{'value'} ||= undef;#value will be set by the end if not earlier
$self->{'_error_messages'} ||= [];
my $name = $self->{'name'};
$self->{'param'} ||= $name;
my $type = $self->{'type'};
$self->_parse_options;
#primitives are overriden by instances of Apache::Wyrd::Input
my %params = (
#default params
strict => ($self->_flags->{strict} || undef),
not_null => ($self->_flags->not_null || $self->_flags->required || undef),
options => $self->{'options'}
);
if ($self->_flags->readonly) {
$self->{'readonly'} = 'true';
}
$self->{'_template'} = $self->{'_data'};
if ($name eq '') {
$self->_raise_exception('All Inputs must have a name')
} elsif ($type eq '') {
$self->_raise_exception('All Inputs must have a type')
} elsif ($self->can('_setup_' . $type)) {
my $result = eval('$self->_setup_' . $type);
if ($@) {
$self->_raise_exception($@);
}
#send the datums the "value" for defaults.
} elsif ($type eq 'text') {
$self->_flags->escape(1);
my $max_length = $self->{'maxlength'};
if ($max_length and ($max_length < 255)) {
$params{'length'} = $max_length;
$self->{'_datum'} ||= (Apache::Wyrd::Datum::Char->new($self->{'value'}, \%params));
} else {
$self->{'_datum'} ||= (Apache::Wyrd::Datum::Text->new($self->{'value'}, \%params));
};
$self->{'_template'} ||= $self->_template_text;
} elsif ($type eq 'textarea') {
$self->_flags->escape(1);
$self->{'value'} ||= $self->_data;#value may be enclosed in a textarea input
$self->{'_datum'} ||= Apache::Wyrd::Datum::Text->new($self->{'value'}, \%params);
if ($self->{'_template'} !~ /<textarea/) {
$self->{'_template'} = $self->_template_textarea;
}
} elsif ($type eq 'hidden') {
$self->_flags->escape(1);
$self->{'_datum'} ||= Apache::Wyrd::Datum::Text->new($self->{'value'}, \%params);
$self->{'_template'} ||= $self->_template_hidden;
} elsif ($type eq 'password') {
$self->{'_datum'} ||= Apache::Wyrd::Datum::Text->new($self->{'value'}, \%params);
$self->{'_template'} ||= $self->_template_password;
} elsif ($type eq 'plaintext') {
$self->{'_datum'} ||= Apache::Wyrd::Datum::Text->new($self->{'value'}, \%params);
$self->{'_template'} ||= '$:value<input type="hidden" name="$:name" value="$:value">';
} else {
if ($self->can('_startup_' . $type)) {
eval('$self->_startup_' . $type .'($self->{\'value\'}, \\%params)');
$self->_raise_exception($@ . " while trying to create an input of type '$type'") if ($@);
} else {
$self->_raise_exception("Don't know how to handle a '$type'");
}
}
$self->_input_size;
$self->_raise_exception('Input must be a top-level item in a Form-family Wyrd. This parent is: ' . $self->_parent->class_name)
unless ($self->{'_parent'}->can('register_input'));
$self->{'_id'} = $self->{'_parent'}->register_input($self);
}
sub _generate_output {
my ($self) = @_;
my $id = $self->{'_id'};
( run in 2.036 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )