HTML-FormsDj
view release on metacpan or search on metacpan
lib/HTML/FormsDj.pm view on Meta::CPAN
else {
# it's a fieldset
foreach my $fieldset (@{$this->{meta}->{fieldsets}}) {
my $htmlfields;
foreach my $field (@{$fieldset->{fields}}) {
$htmlfields .= $this->_p_field($field);
}
$html .= $this->_fieldset(
join(' ', @{$fieldset->{classes}}),
$fieldset->{id},
$fieldset->{legend},
$htmlfields
);
}
}
return $html;
}
sub as_table {
my($this) = @_;
lib/HTML/FormsDj.pm view on Meta::CPAN
}
return $this->_table('formtable', $html);
}
else {
# it's a fieldset
foreach my $fieldset (@{$this->{meta}->{fieldsets}}) {
my $htmlfields;
foreach my $field (@{$fieldset->{fields}}) {
$htmlfields .= $this->_tr_field($field);
}
$html .= $this->_table($fieldset->{id}, $htmlfields, $fieldset->{legend});
}
}
return $html;
}
sub as_is {
my($this) = @_;
$this->_normalize();
return $this->{meta};
lib/HTML/FormsDj.pm view on Meta::CPAN
);
}
sub _tr {
my($this, $class, $id, $label, $input) = @_;
return sprintf qq(<tr id="%s"><td class="%s tdlabel">%s</td><td class="%s tdinput">%s</td></tr>\n),
$id, $class, $label, $class, $input;
}
sub _table {
my($this, $id, $cdata, $legend) = @_;
my $html = sprintf qq(<table id="%s">), $id;
if ($legend) {
$html .= sprintf qq(<thead><tr><td colspan="2">%s</td></tr></thead>\n), $legend;
}
$html .= sprintf qq(<tbody>%s</tbody></table>\n), $cdata;
return $html;
}
sub _normalize_field {
my($this, $field) = @_;
if (! exists $field->{label}) {
$field->{label} = $field->{field};
lib/HTML/FormsDj.pm view on Meta::CPAN
}
else {
$fieldset->{id} = 'id_fieldset_' . $fieldset->{name};
}
}
if (! exists $fieldset->{classes}) {
$fieldset->{classes} = [ qw(formfieldset) ];
}
if (! exists $fieldset->{legend}) {
$fieldset->{legend} = qq();
}
my @normalized;
foreach my $field (@{$fieldset->{fields}}) {
if (! exists $field->{field}) {
carp 'unnamed field, ignoring!';
next;
}
push @normalized, $this->_normalize_field($field);
}
lib/HTML/FormsDj.pm view on Meta::CPAN
push @fieldsets, $fieldset;
}
$this->{meta}->{fieldsets} = \@fieldsets;
}
return;
}
sub _fieldset {
my($this, $class, $id, $legend, $cdata) = @_;
return sprintf qq(<fieldset class="%s" id="%s"><legend>%s</legend>\n%s\n</fieldset>\n),
$class, $id, $legend, $cdata;
}
sub _p_field {
my($this, $field) = @_;
return $this->_p(
join(' ', @{$field->{classes}}),
$field->{id},
$this->_label(
$field->{id} . '_input',
$field->{label}
lib/HTML/FormsDj.pm view on Meta::CPAN
validate => valid_string(),
required => 1,
},
},
name => 'registerform',
meta => {
fieldsets => [
{
name => 'titleset',
description => 'Enter book title data here',
legend => 'Book Title',
fields => [
{
field => 'title',
label => 'Enter a book title',
message => 'A book title must be at least 4 characters long',
classes => [ qw(titlefield) ],
},
]
},
{
name => 'authorset',
description => 'Enter book author data here',
legend => 'Book Author',
fields => [
{
field => 'author',
label => 'Enter an author name',
message => 'A book title must be at least 4 characters long',
classes => [ qw(authorfield) ],
},
]
},
]
}
);
Ok, this looks a little bit more complicated. Essentially
there is just one more level in the definition. A fieldset
is just a list of groups of fields. It is defined as a list
(an arrayref) which contains hashes, one hash per fieldset.
Each fieldset hash consists of some parameters, like a B<name>
or a B<legend> plus a list of fields, which is exactly defined
as in the B<meta> parameter B<fields> as seen above.
The output of the form is just devided into fieldsets, which
is a HTML tag as well. Each fieldset will have a title, the B<legend>
parameter, an (optional) B<description> and a B<name>.
This is the very same as the META subclass in django forms
is working.
B<Please note: you cannot mix a field list and fieldsets!>
Only one of the two is possible.
If you omit the B<meta> parameter at all, B<HTML::FormsDj> will
( run in 1.334 second using v1.01-cache-2.11-cpan-49f99fa48dc )