more tests and moosification

This commit is contained in:
Doug Bell 2009-11-16 18:26:46 -06:00
parent 7ee8fec611
commit 631f6ad267
7 changed files with 109 additions and 72 deletions

View file

@ -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;
}
};
#----------------------------------------------------------------------------

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;