formbuilder toTemplateVars is now complete and tested
This commit is contained in:
parent
67918361e6
commit
04a420e0bd
7 changed files with 254 additions and 105 deletions
|
|
@ -144,8 +144,13 @@ sub toHtml {
|
|||
|
||||
=cut
|
||||
|
||||
sub toTemplateVars {
|
||||
|
||||
}
|
||||
around toTemplateVars => sub {
|
||||
my ( $orig, $self ) = @_;
|
||||
my $var = $self->$orig();
|
||||
$var->{ name } = $self->name;
|
||||
$var->{ label } = $self->label;
|
||||
$var->{ legend } = $self->label;
|
||||
return $var;
|
||||
};
|
||||
|
||||
1;
|
||||
|
|
|
|||
|
|
@ -91,9 +91,10 @@ sub addFieldAt {
|
|||
for my $obj ( @{$self->objects} ) {
|
||||
next unless blessed $obj;
|
||||
# A field isn't allowed to have child objects
|
||||
if ( !$obj->can('does') || !$obj->does('WebGUI::FormBuilder::Role::HasObjects') ) {
|
||||
push @{$self->fields}, $obj;
|
||||
}
|
||||
next if ( $obj->can('does') && $obj->does('WebGUI::FormBuilder::Role::HasObjects') );
|
||||
next if $obj->isa('WebGUI::FormBuilder::Tabset');
|
||||
|
||||
push @{$self->fields}, $obj;
|
||||
}
|
||||
return $field;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ package WebGUI::FormBuilder::Role::HasObjects;
|
|||
|
||||
=cut
|
||||
|
||||
|
||||
use WebGUI::BestPractices;
|
||||
use Moose::Role;
|
||||
|
||||
has 'objects' => (
|
||||
|
|
@ -80,5 +80,69 @@ sub addObjectAt {
|
|||
return $object;
|
||||
}
|
||||
|
||||
=head2 toTemplateVars ( prefix, var )
|
||||
|
||||
Get all the objects as a set of template vars with the given prefix. $var is
|
||||
an optional hashref to add the variables to.
|
||||
|
||||
=cut
|
||||
|
||||
sub toTemplateVars {
|
||||
my ( $self, $prefix, $var ) = @_;
|
||||
$prefix ||= "";
|
||||
$var ||= {};
|
||||
|
||||
# Loop over all objects, adding to appropriate template loops
|
||||
for my $obj ( @{ $self->objects } ) {
|
||||
# Prepare our object's variables and add to object type loop
|
||||
my $props = {};
|
||||
|
||||
given ( blessed $obj ) {
|
||||
when ( undef ) {
|
||||
# Treat as raw template properties
|
||||
$props = $obj;
|
||||
}
|
||||
when ( $_->isa( 'WebGUI::FormBuilder::Tabset' ) ) {
|
||||
my $name = $obj->name;
|
||||
$props = $obj->toTemplateVars;
|
||||
for my $key ( keys %{$props} ) {
|
||||
$var->{ "${prefix}tabset_${name}_${key}" } = $props->{$key};
|
||||
}
|
||||
push @{$var->{ "${prefix}tabsetloop" }}, $props;
|
||||
}
|
||||
when ( $_->isa( 'WebGUI::FormBuilder::Fieldset' ) ) {
|
||||
my $name = $obj->name;
|
||||
$props = $obj->toTemplateVars;
|
||||
for my $key ( keys %{$props} ) {
|
||||
$var->{ "${prefix}fieldset_${name}_${key}" } = $props->{$key};
|
||||
}
|
||||
push @{$var->{ "${prefix}fieldsetloop" }}, $props;
|
||||
}
|
||||
# Form field objects
|
||||
when ( $_->isa( 'WebGUI::Form::Control' ) ) {
|
||||
my $name = $obj->get('name');
|
||||
$props = $obj->toTemplateVars;
|
||||
# Add the whole field to the vars
|
||||
$props->{ field } = $obj->toHtmlWithWrapper;
|
||||
$props->{ field_input } = $obj->toHtml;
|
||||
$var->{ "${prefix}field_${name}" } = $props->{ field };
|
||||
# Add to fieldloop
|
||||
push @{$var->{"${prefix}fieldloop"}}, $props;
|
||||
# Individual accessors
|
||||
for my $key ( keys %{$props} ) {
|
||||
$var->{ "${prefix}field_${name}_${key}" } = $props->{$key};
|
||||
}
|
||||
# Loop accessor
|
||||
push @{$var->{ "${prefix}field_${name}_loop" }}, $props;
|
||||
}
|
||||
}
|
||||
|
||||
# Add to the global object loop
|
||||
push @{ $var->{ "${prefix}objects" } }, $props;
|
||||
}
|
||||
|
||||
return $var;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
|
|
|
|||
|
|
@ -105,4 +105,20 @@ sub toHtml {
|
|||
return $html;
|
||||
}
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
=head2 toTemplateVars ( )
|
||||
|
||||
Get the template vars for this tab
|
||||
|
||||
=cut
|
||||
|
||||
around toTemplateVars => sub {
|
||||
my ( $orig, $self ) = @_;
|
||||
my $var = $self->$orig();
|
||||
$var->{ name } = $self->name;
|
||||
$var->{ label } = $self->label;
|
||||
return $var;
|
||||
};
|
||||
|
||||
1;
|
||||
|
|
|
|||
|
|
@ -71,7 +71,6 @@ has 'session' => (
|
|||
);
|
||||
|
||||
with Storage( format => 'JSON' );
|
||||
with 'WebGUI::FormBuilder::Role::HasObjects';
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
|
|
@ -90,9 +89,15 @@ sub BUILDARGS {
|
|||
#----------------------------------------------------------------------------
|
||||
|
||||
sub addTab {
|
||||
my ( $self, $tab ) = @_;
|
||||
my $self = shift;
|
||||
my $tab;
|
||||
if ( scalar @_ == 1 ) {
|
||||
$tab = $_[0];
|
||||
}
|
||||
else {
|
||||
$tab = WebGUI::FormBuilder::Tab->new( $self->session, @_ );
|
||||
}
|
||||
push @{$self->tabs}, $tab;
|
||||
$self->addObject( $tab );
|
||||
return $tab;
|
||||
}
|
||||
|
||||
|
|
@ -151,13 +156,14 @@ sub toTemplateVars {
|
|||
my ( $self ) = @_;
|
||||
my $var = {};
|
||||
|
||||
$var->{ name } = $self->name;
|
||||
$var->{ tabs } = [];
|
||||
for my $tab ( $self->tabs ) {
|
||||
for my $tab ( @{ $self->tabs } ) {
|
||||
my $name = $tab->name;
|
||||
my $props = $tab->toTemplateVars;
|
||||
$var->{ "tabs_${name}" } = $tab->toHtml;
|
||||
push @{$var->{tabs}}, $props;
|
||||
for my $key ( %$props ) {
|
||||
for my $key ( keys %{$props} ) {
|
||||
$var->{ "tabs_${name}_${key}" } = $props->{$key};
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue