HTML-FormFu
view release on metacpan or search on metacpan
lib/HTML/FormFu/Element/Block.pm view on Meta::CPAN
sub render_data_non_recursive {
my ( $self, $args ) = @_;
my $render = $self->SUPER::render_data_non_recursive(
{ tag => $self->tag,
content => xml_escape( $self->content ),
$args ? %$args : (),
} );
return $render;
}
sub prepare_id {
my ( $self, $render ) = @_;
if ( !defined $render->{attributes}{id}
&& defined $self->auto_block_id
&& length $self->auto_block_id )
{
my $form_name
= defined $self->form->id
? $self->form->id
: $EMPTY_STR;
my %string = ( f => $form_name, );
my $id = $self->auto_block_id;
$id =~ s/%([f])/$string{$1}/g;
if ( defined( my $count = $self->repeatable_count ) ) {
$id =~ s/%r/$count/g;
}
$render->{attributes}{id} = $id;
}
return;
}
sub string {
my ( $self, $args ) = @_;
$args ||= {};
my $render
= exists $args->{render_data}
? $args->{render_data}
: $self->render_data_non_recursive;
# start_block template
my $html = '';
if ( defined $render->{tag} ) {
$html .= sprintf "<%s%s>",
$render->{tag},
process_attrs( $render->{attributes} ),
;
}
if ( defined $render->{legend} ) {
$html .=
sprintf "\n<legend%s>%s</legend>",
defined( $render->{legend_attributes} )
? process_attrs( $render->{legend_attributes} )
: '',
$render->{legend};
}
# block template
$html .= "\n";
if ( defined $render->{content} ) {
$html .= sprintf "%s\n", $render->{content};
}
else {
for my $elem ( @{ $self->get_elements } ) {
# call render, so that child elements can use a different renderer
my $elem_html = $elem->render;
# skip Blank fields
if ( length $elem_html ) {
$html .= $elem_html . "\n";
}
}
}
# end_block template
if ( defined $render->{tag} ) {
$html .= sprintf "</%s>", $render->{tag};
}
return $html;
}
sub start {
my ($self) = @_;
return $self->tt(
{ filename => 'start_block',
render_data => $self->render_data_non_recursive,
} );
}
sub end {
my ($self) = @_;
return $self->tt(
{ filename => 'end_block',
render_data => $self->render_data_non_recursive,
} );
}
sub clone {
my $self = shift;
my $clone = $self->SUPER::clone(@_);
$clone->_elements( [ map { $_->clone } @{ $self->_elements } ] );
map { $_->parent($clone) } @{ $clone->_elements };
$clone->default_args( Clone::clone( $self->default_args ) );
( run in 0.475 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )