package HTML::FormFu::Filter; use Moose; with 'HTML::FormFu::Role::NestedHashUtils', 'HTML::FormFu::Role::HasParent', 'HTML::FormFu::Role::Populate'; use HTML::FormFu::Attribute qw( mk_inherited_accessors ); use HTML::FormFu::ObjectUtil qw( form name parent nested_name nested_names ); use Carp qw( croak ); has type => ( is => 'rw', traits => ['Chained'] ); has localize_args => ( is => 'rw', traits => ['Chained'] ); sub process { my ( $self, $result, $params ) = @_; my $name = $self->nested_name; my $value = $self->get_nested_hash_value( $params, $name ); my $filtered; if ( ref $value eq 'ARRAY' ) { $filtered = [ map { $self->filter( $_, $params ) } @$value ]; } else { $filtered = $self->filter( $value, $params ); } $self->set_nested_hash_value( $params, $name, $filtered ); return; } sub clone { my ($self) = @_; my %new = %$self; return bless \%new, ref $self; } __PACKAGE__->meta->make_immutable; 1; __END__ =head1 NAME HTML::FormFu::Filter - Filter Base Class =head1 SYNOPSIS --- elements: - type: Text name: foo filters: - type: Encode candidates: - utf8 - Hebrew - type: Text name: bar filters: - LowerCase - Encode filters: - TrimEdges =head1 DESCRIPTION C and C can be called on any L, L (includes fieldsets) or L. If called on a field element, no C argument should be passed. If called on a L or L, if no C argument is provided, a new filter is created for and added to every field on that form or block. See L for further details. =head1 METHODS =head2 type Returns the C argument originally used to create the filter. =head2 localise_args Provide arguments that should be passed to L to replace C<[_1]>, C<[_2]>, etc. in the localized string. =head2 parent Returns the L object that the filter is associated with. =head2 get_parent Arguments: \%options Traverses the parent hierarchy, returning the first parent that matches the supplied options. =head2 form Returns the L object that the filter's field is attached to. =head2 name Shorthand for C<< $filter->parent->name >> =head1 CORE FILTERS =over =item L =item L =item L =item L =item L =item L =item L =item L =item L =item L =item L =item L =item L =item L =item L =item L =back =head1 FILTER BASE CLASSES The following are base classes for other filters, and generally needn't be used directly. =over =item L =back =head1 AUTHOR Carl Franks, C Based on the original source code of L, by Sebastian Riedel. =head1 LICENSE This library is free software, you can redistribute it and/or modify it under the same terms as Perl itself. =cut