package Catalyst::Plugin::HTML::Widget; use warnings; use strict; use HTML::Widget; our $VERSION = '1.1'; =head1 NAME Catalyst::Plugin::HTML::Widget - HTML Widget And Validation Framework =head1 SYNOPSIS use Catalyst qw/HTML::Widget; $c->widget('foo')->method('get')->action('/foo/action'); $c->widget('foo')->element( 'Textfield', 'age' )->label('Age')->size(3); $c->widget('foo')->element( 'Textfield', 'name' )->label('Name')->size(60); $c->widget('foo')->element( 'Submit', 'ok' )->value('OK'); $c->widget('foo')->constraint( 'Integer', 'age' )->message('No integer.'); $c->widget('foo')->constraint( 'All', 'age', 'name' ) ->message('Missing value.'); $c->widget( HTML::Widget->new('foo') ); $c->widget('foo')->indicator('some_field'); my $result = $c->widget('foo')->process; my $result = $c->widget('foo')->process($query); my $result = $c->widget_result('foo'); # with query params =head1 DESCRIPTION HTML Widget And Validation Framework. =head1 METHODS =head2 $c->widget( $name, $widget ) Returns a L. If no object exists, it will be created on the fly. The widget name defaults to C<_widget>. =cut sub widget { my ( $c, $name, $widget ) = @_; $widget = $name if ref $name; $c->{_widget} ||= {}; $name ||= $widget ? $widget->name ? $widget->name : '_widget' : '_widget'; $c->{_widget}->{$name} ||= ( $widget || HTML::Widget->new($name) ); return $c->{_widget}->{$name}; } =head2 $c->widget_result($name) Returns a L object, processed B query and upload parameters. =cut sub widget_result { my $c = shift; my $w = $c->widget(@_); my $result; my $indi = $w->indicator; $indi = ref $indi ? $indi : sub { $c->request->param( $w->indicator ) }; if ( $indi->() ) { local $w->{query} = $c->request; local $w->{uploads} = $c->request->uploads; $result = $w->result; } else { local $w->{query} = undef; local $w->{uploads} = undef; $result = $w->result; } return $result; } =head1 SEE ALSO L, L =head1 AUTHOR Sebastian Riedel, C =head1 LICENSE This library is free software, you can redistribute it and/or modify it under the same terms as Perl itself. =cut 1;