more tests and moosification
This commit is contained in:
parent
7ee8fec611
commit
631f6ad267
7 changed files with 109 additions and 72 deletions
|
|
@ -119,18 +119,18 @@ Return the HTML for the form
|
|||
|
||||
=cut
|
||||
|
||||
sub toHtml {
|
||||
override 'toHtml' => sub {
|
||||
my ( $self ) = @_;
|
||||
|
||||
my @attrs = qw{ action method name enctype };
|
||||
my $attrs = join " ", map { qq{$_="} . $self->get($_) . qq{"} } @attrs;
|
||||
my $attrs = join " ", map { qq{$_="} . $self->$_ . qq{"} } grep { $self->$_ } @attrs;
|
||||
|
||||
my $html = sprintf '<form %s>', $attrs;
|
||||
$html .= $self->maybe::next::method;
|
||||
$html .= super();
|
||||
$html .= '</form>';
|
||||
|
||||
return $html;
|
||||
}
|
||||
};
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
|
|
|
|||
|
|
@ -114,8 +114,8 @@ Returns the HTML to render the fieldset.
|
|||
sub toHtml {
|
||||
my ( $self ) = @_;
|
||||
|
||||
my $html = '<fieldset><legend>' . $self->legend . '</legend>';
|
||||
$html .= $self->maybe::next::method;
|
||||
my $html = '<fieldset><legend>' . $self->label . '</legend>';
|
||||
$html .= inner();
|
||||
$html .= '</fieldset>';
|
||||
|
||||
return $html;
|
||||
|
|
|
|||
|
|
@ -48,12 +48,12 @@ sub addField {
|
|||
# Is $type a class name?
|
||||
eval { WebGUI::Pluggable::load( $type ) };
|
||||
if ( $@ ) {
|
||||
eval { WebGUI::Pluggable::load( "WebGUI::Form::$type" ) };
|
||||
eval { WebGUI::Pluggable::load( "WebGUI::Form::" . ucfirst( $type ) ) };
|
||||
if ( $@ ) {
|
||||
$self->session->error("Could not load field type '$type'. Try loading it manually." );
|
||||
confess "Could not load field type '$type'. Try loading it manually.";
|
||||
}
|
||||
$type = "WebGUI::Form::$type";
|
||||
$type = "WebGUI::Form::" . ucfirst( $type );
|
||||
}
|
||||
$field = $type->new( $self->session, { @properties } );
|
||||
}
|
||||
|
|
@ -65,6 +65,26 @@ sub addField {
|
|||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
=head2 deleteField ( name )
|
||||
|
||||
Delete a field by name. Returns the field deleted.
|
||||
|
||||
=cut
|
||||
|
||||
sub deleteField {
|
||||
my ( $self, $name ) = @_;
|
||||
my $field = delete $self->{_fieldsByName}{$name};
|
||||
for ( my $i = 0; $i < scalar @{$self->fields}; $i++ ) {
|
||||
my $testField = $self->fields->[$i];
|
||||
if ( $testField->get('name') eq $name ) {
|
||||
splice @{$self->fields}, $i, 1;
|
||||
}
|
||||
}
|
||||
return $field;
|
||||
}
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
=head2 getField ( name )
|
||||
|
||||
Get a field by name. Returns the field object.
|
||||
|
|
@ -107,16 +127,15 @@ Render the fields in this part of the form.
|
|||
|
||||
=cut
|
||||
|
||||
sub toHtml {
|
||||
my ( $self ) = @_;
|
||||
override 'toHtml' => sub {
|
||||
my ( $orig, $self ) = @_;
|
||||
|
||||
# This will always be the first one called, so no maybe::next::method
|
||||
my $html = '';
|
||||
my $html = super();
|
||||
for my $field ( @{$self->fields} ) {
|
||||
$html .= $field->toHtmlWithWrapper;
|
||||
}
|
||||
|
||||
return $html;
|
||||
}
|
||||
};
|
||||
|
||||
1;
|
||||
|
|
|
|||
|
|
@ -41,12 +41,12 @@ of name => value pairs to override properties in the C<object> (such as name and
|
|||
=cut
|
||||
|
||||
sub addFieldset {
|
||||
my ( $fieldset, $self );
|
||||
if ( blessed( $_[1] ) ) {
|
||||
my ( $self, $object, %properties ) = @_;
|
||||
( $self, my $object, my %properties ) = @_;
|
||||
$properties{ name } ||= $object->can('name') ? $object->name : "";
|
||||
$properties{ label } ||= $object->can('label') ? $object->label : "";
|
||||
my $fieldset = WebGUI::FormBuilder::Fieldset->new( $self->session, %properties );
|
||||
push @{$self->fieldsets}, $fieldset;
|
||||
$fieldset = WebGUI::FormBuilder::Fieldset->new( $self->session, %properties );
|
||||
if ( $object->DOES('WebGUI::FormBuilder::Role::HasTabs') ) {
|
||||
for my $objectTab ( @{$object->tabs} ) {
|
||||
$fieldset->addTab( $objectTab );
|
||||
|
|
@ -62,35 +62,14 @@ sub addFieldset {
|
|||
$fieldset->addField( $objectField );
|
||||
}
|
||||
}
|
||||
return $fieldset;
|
||||
}
|
||||
else {
|
||||
my ( $self, @properties ) = @_;
|
||||
my $fieldset = WebGUI::FormBuilder::Fieldset->new( $self->session, @properties );
|
||||
push @{$self->fieldsets}, $fieldset;
|
||||
$self->{_fieldsetsByName}{ $fieldset->name } = $fieldset;
|
||||
return $fieldset;
|
||||
( $self, my @properties ) = @_;
|
||||
$fieldset = WebGUI::FormBuilder::Fieldset->new( $self->session, @properties );
|
||||
}
|
||||
}
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
=head2 addFromHashRef( hashRef )
|
||||
|
||||
Add the fieldsets from the given serialized hashRef. See C<toHashRef> for more
|
||||
information.
|
||||
|
||||
=cut
|
||||
|
||||
sub addFromHashRef {
|
||||
my ( $self, $hashref ) = @_;
|
||||
|
||||
for my $fieldset ( @{$hashref->{fieldsets}} ) {
|
||||
my $fs = WebGUI::FormBuilder::Fieldset->newFromHashref( $self->session, $fieldset );
|
||||
$self->addFieldset( $fs );
|
||||
}
|
||||
|
||||
$self->maybe::next::method;
|
||||
push @{$self->fieldsets}, $fieldset;
|
||||
$self->{_fieldsetsByName}{ $fieldset->name } = $fieldset;
|
||||
return $fieldset;
|
||||
}
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
|
@ -134,13 +113,13 @@ Render the fieldsets in this part of the form
|
|||
|
||||
=cut
|
||||
|
||||
sub toHtml {
|
||||
override 'toHtml' => sub {
|
||||
my ( $self ) = @_;
|
||||
my $html = $self->maybe::next::method;
|
||||
my $html = super();
|
||||
for my $fieldset ( @{$self->fieldsets} ) {
|
||||
$html .= $fieldset->toHtml;
|
||||
}
|
||||
return $html;
|
||||
}
|
||||
};
|
||||
|
||||
1;
|
||||
|
|
|
|||
|
|
@ -30,12 +30,12 @@ Any sub-tabs or fieldsets will also be included.
|
|||
=cut
|
||||
|
||||
sub addTab {
|
||||
my ($tab, $self);
|
||||
if ( blessed( $_[1] ) ) {
|
||||
my ( $self, $object, %properties ) = @_;
|
||||
( $self, my $object, my %properties ) = @_;
|
||||
$properties{ name } ||= $object->can('name') ? $object->name : "";
|
||||
$properties{ label } ||= $object->can('label') ? $object->label : "";
|
||||
my $tab = WebGUI::FormBuilder::Tab->new( $self->session, %properties );
|
||||
push @{ $self->tabs }, $tab;
|
||||
$tab = WebGUI::FormBuilder::Tab->new( $self->session, %properties );
|
||||
if ( $object->DOES('WebGUI::FormBuilder::Role::HasTabs') ) {
|
||||
for my $objectTab ( @{$object->tabs} ) {
|
||||
$tab->addTab( $objectTab );
|
||||
|
|
@ -51,15 +51,14 @@ sub addTab {
|
|||
$tab->addField( $objectField );
|
||||
}
|
||||
}
|
||||
return $tab;
|
||||
}
|
||||
else {
|
||||
my ( $self, @properties ) = @_;
|
||||
my $tab = WebGUI::FormBuilder::Tab->new( $self->session, @properties );
|
||||
push @{$self->tabs}, $tab;
|
||||
$self->{_tabsByName}{$tab->name} = $tab;
|
||||
return $tab;
|
||||
( $self, my @properties ) = @_;
|
||||
$tab = WebGUI::FormBuilder::Tab->new( $self->session, @properties );
|
||||
}
|
||||
push @{$self->tabs}, $tab;
|
||||
$self->{_tabsByName}{$tab->name} = $tab;
|
||||
return $tab;
|
||||
}
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
|
@ -97,32 +96,19 @@ sub getTab {
|
|||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
=head2 getTabs ( )
|
||||
|
||||
Get all tab objects. Returns the arrayref of tabs.
|
||||
|
||||
=cut
|
||||
|
||||
sub getTabs {
|
||||
my ( $self ) = @_;
|
||||
return $self->tabs;
|
||||
}
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
=head2 toHtml ( )
|
||||
|
||||
Render the tabs in this part of the form
|
||||
|
||||
=cut
|
||||
|
||||
sub toHtml {
|
||||
override 'toHtml' => sub {
|
||||
my ( $self ) = @_;
|
||||
my $html = $self->maybe::next::method;
|
||||
my $html = super();
|
||||
for my $tab ( @{$self->tabs} ) {
|
||||
$html .= $tab->toHtml;
|
||||
}
|
||||
return $html;
|
||||
}
|
||||
};
|
||||
|
||||
1;
|
||||
|
|
|
|||
|
|
@ -98,7 +98,7 @@ sub toHtml {
|
|||
my $html = '<div class="yui-tab">'
|
||||
. '<div class="yui-tab-label">' . $self->label . '</div>'
|
||||
;
|
||||
$html .= $self->maybe::next::method;
|
||||
$html .= inner();
|
||||
$html .= '</div>';
|
||||
|
||||
return $html;
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ my $session = WebGUI::Test->session;
|
|||
#----------------------------------------------------------------------------
|
||||
# Tests
|
||||
|
||||
plan tests => 53; # Increment this number for each test you create
|
||||
plan tests => 66; # Increment this number for each test you create
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Constructor and properties
|
||||
|
|
@ -108,7 +108,22 @@ ok( $newTab->fieldsets->[0], 'fieldset exists' );
|
|||
is( $newTab->fieldsets->[0]->name, 'advanced', 'fieldset has same name' );
|
||||
ok( $newTab->tabs->[0], 'subtab exists' );
|
||||
is( $newTab->tabs->[0]->name, 'more', 'subtab has same name' );
|
||||
cmp_deeply(
|
||||
$fb->tabs,
|
||||
[ $tab, $newTab ],
|
||||
'added tab',
|
||||
);
|
||||
is( $fb->getTab('newname'), $newTab, 'new tab can be gotten' );
|
||||
|
||||
# deleteTab
|
||||
my $deletedTab = $fb->deleteTab( 'newname' );
|
||||
is( $deletedTab, $newTab, 'deleteTab returns object' );
|
||||
cmp_deeply(
|
||||
$fb->tabs,
|
||||
[ $tab ],
|
||||
'deleted tab',
|
||||
);
|
||||
ok( !$fb->getTab('newname'), 'deleted tab cannot be gotten' );
|
||||
|
||||
# addFieldset with properties
|
||||
$fb = WebGUI::FormBuilder->new( $session );
|
||||
|
|
@ -151,6 +166,22 @@ ok( $newFset->fieldsets->[0], 'subfieldset exists' );
|
|||
is( $newFset->fieldsets->[0]->name, 'advanced', 'subfieldset has same name' );
|
||||
ok( $newFset->tabs->[0], 'tab exists' );
|
||||
is( $newFset->tabs->[0]->name, 'more', 'tab has same name' );
|
||||
cmp_deeply(
|
||||
$fb->fieldsets,
|
||||
[ $fset, $newFset],
|
||||
'added fieldset',
|
||||
);
|
||||
is( $fb->getFieldset('newname'), $newFset, 'new fieldset can be gotten' );
|
||||
|
||||
# deletefieldset
|
||||
my $deletedFieldset = $fb->deleteFieldset( 'newname' );
|
||||
is( $deletedFieldset, $newFset, 'deletefieldset returns object' );
|
||||
cmp_deeply(
|
||||
$fb->fieldsets,
|
||||
[ $fset ],
|
||||
'deleted fieldset',
|
||||
);
|
||||
ok( !$fb->getFieldset('newname'), 'deleted fieldset cannot be gotten' );
|
||||
|
||||
# addField with properties
|
||||
$fb = WebGUI::FormBuilder->new( $session );
|
||||
|
|
@ -185,8 +216,30 @@ cmp_deeply(
|
|||
'fields 2',
|
||||
);
|
||||
|
||||
# deleteField
|
||||
my $field3 = $fb->deleteField( 'type' );
|
||||
is( $field3, $field2, 'deleteField returns same field' );
|
||||
ok( !$fb->getField('type'), 'field is deleted' );
|
||||
cmp_deeply(
|
||||
$fb->fields,
|
||||
[ $field ],
|
||||
'field is deleted from fields',
|
||||
);
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Serialize and deserialize
|
||||
|
||||
my $fb = WebGUI::FormBuilder->new( $session );
|
||||
my $fset = $fb->addFieldset( name => 'search', label => 'Search' );
|
||||
$fset->addField( 'text', name => 'keywords', label => 'Keywords' );
|
||||
my $tab = $fb->addTab( name => 'advanced', label => 'Advanced Search' );
|
||||
$tab->addField( 'text', name => 'type', label => 'Type' );
|
||||
$fb->addField( 'submit', name => 'submit', label => 'Submit' );
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# toHtml
|
||||
|
||||
print $fb->toHtml;
|
||||
|
||||
#vim:ft=perl
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue