CGI-FormBuilder
view release on metacpan or search on metacpan
lib/CGI/FormBuilder.pm view on Meta::CPAN
use Scalar::Util qw(weaken);
use CGI::FormBuilder::Util;
use CGI::FormBuilder::Field;
use CGI::FormBuilder::Messages;
our $VERSION = '3.20';
our $AUTOLOAD;
# Default options for FormBuilder
our %DEFAULT = (
sticky => 1,
method => 'get',
submit => 1,
reset => 0,
header => 0,
body => { },
text => '',
table => { },
tr => { },
th => { },
td => { },
div => { },
jsname => 'validate',
jsprefix => 'fb_', # prefix for JS tags
sessionidname => '_sessionid',
submittedname => '_submitted',
pagename => '_page',
template => '', # default template
debug => 0, # can be 1 or 2
javascript => 'auto', # 0, 1, or 'auto'
cookies => 1,
cleanopts => 1,
render => 'render', # render sub name
smartness => 1, # can be 1 or 2
selectname => 1, # include -select-?
selectnum => 5,
stylesheet => 0, # use stylesheet stuff?
styleclass => 'fb', # style class to use
# For translating tag names (experimental)
tagnames => { },
# I don't see any reason why these are variables
formname => '_form',
submitname => '_submit',
resetname => '_reset',
bodyname => '_body',
tabname => '_tab',
rowname => '_row',
labelname => '_label',
fieldname => '_field', # equiv of <tmpl_var field-tag>
buttonname => '_button',
errorname => '_error',
othername => '_other',
growname => '_grow',
statename => '_state',
extraname => '_extra',
dtd => <<'EOD', # modified from CGI.pm
<?xml version="1.0" encoding="{charset}"?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="{lang}" xml:lang="{lang}">
EOD
);
# Which options to rearrange from new() into field()
our %REARRANGE = qw(
options options
optgroups optgroups
labels label
validate validate
required required
selectname selectname
selectnum selectnum
sortopts sortopts
nameopts nameopts
cleanopts cleanopts
sticky sticky
disabled disabled
columns columns
);
*redo = \&new;
sub new {
local $^W = 0; # -w sucks
my $self = shift;
# A single arg is a source; others are opt => val pairs
my %opt;
if (@_ == 1) {
%opt = UNIVERSAL::isa($_[0], 'HASH')
? %{ $_[0] }
: ( source => shift() );
} else {
%opt = arghash(@_);
}
# Pre-check for an external source
if (my $src = delete $opt{source}) {
# check for engine type
my $mod;
my $sopt; # opts returned from parsing
my $ref = ref $src;
unless ($ref) {
# string filename; redo format (ala $self->{template})
$src = {
type => 'File',
source => $src,
# pass catalyst class for \&validate refs
($opt{c} && $opt{c}->action)
? (caller => $opt{c}->action->class) : ()
};
$ref = 'HASH'; # tricky
debug 2, "rewrote 'source' option since found filename";
}
debug 1, "creating form from source ", $ref || $src;
if ($ref eq 'HASH') {
# grab module
( run in 0.428 second using v1.01-cache-2.11-cpan-9581c071862 )