package HTML::FormFu::Filter; use strict; use Class::C3; use HTML::FormFu::Attribute qw( mk_accessors ); use HTML::FormFu::ObjectUtil qw( populate form name parent nested_name nested_names get_nested_hash_value set_nested_hash_value nested_hash_key_exists ); use Carp qw( croak ); __PACKAGE__->mk_accessors(qw/ type localize_args /); sub new { my $class = shift; my %attrs; eval { %attrs = %{ $_[0] } if @_ }; croak "attributes argument must be a hashref" if $@; my $self = bless {}, $class; if ( exists $attrs{parent} ) { $self->parent( delete $attrs{parent} ); } $self->populate( \%attrs ); return $self; } 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; } 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 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 =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.