HTML-FormHandler

 view release on metacpan or  search on metacpan

lib/HTML/FormHandler/Manual/Rendering.pod  view on Meta::CPAN

   form#id_of_your_form div div label, form#id_of_your_form div div input {
      float: left;
      display: inline-block;
      width: 40%
   } /* make sure the parent element is sized appropriately.  700px is a good width */

Going a little bit farther in using FormHandler rendering, you can render
each of the fields individually, using 'render' or 'renderx':

     <form id="myform" action="/edit/example" method="post">
     <fieldset><legend>My Foo</legend>
     [% form.field('foo').render %]
     </fieldset>
     [% form.field('bar').renderx(element_class => 'cb33')  %]
     [% form.field('save').render %]
     </form>

If you don't want the wrappers, use a widget_wrapper of 'None'.

    has '+widget_wrapper' => ( default => 'None' );

lib/HTML/FormHandler/Manual/Rendering.pod  view on Meta::CPAN


Here is the definition of a fieldset block that contains two fields:

   has_field 'foo';
   has_field 'bar';
   has_block 'first_fset' => ( tag => 'fieldset, label => 'Two Fields',
       render_list => ['foo', 'bar'] );

The 'first_fset' block will render like this:

    <fieldset><legend>Two Fields</legend>
        <div>
           <label>Foo</label>
           <input type="text" name="foo" id="foo" value="" />
        <div>
        <div>
           <label>Bar</label>
           <input type="text" name="bar" id="bar" value="" />
        <div>
    </fieldset>

lib/HTML/FormHandler/Manual/Templates.pod  view on Meta::CPAN

           [%~ content ~%][%~ f.label %]
        </label>
    </div>
    [% END -%]

    [% BLOCK wrapper_none -%]
    [% content %]
    [% END -%]

    [% BLOCK wrapper_fieldset -%]
    <fieldset[% process_attrs(f.wrapper_attributes)%]><legend>[% f.label %]</legend>
    [% content -%]
    </fieldset>
    [% END -%]

=head1 AUTHOR

FormHandler Contributors - see HTML::FormHandler

=head1 COPYRIGHT AND LICENSE

lib/HTML/FormHandler/Render/Simple.pm  view on Meta::CPAN

    return "\n$rendered_field" if ! $field->do_wrapper;

    my $output = "\n";

    my $wrapper_tag = $field->get_tag('wrapper_tag');
    $wrapper_tag ||= $field->has_flag('is_repeatable') ? 'fieldset' : 'div';
    my $attrs = process_attrs($field->wrapper_attributes);

    $output .= qq{<$wrapper_tag$attrs>};
    if( $wrapper_tag eq 'fieldset' ) {
        $output .= '<legend>' . $field->loc_label . '</legend>';
    }
    elsif ( ! $field->get_tag('label_none') && $field->do_label && length( $field->label ) > 0 ) {
        $output .= "\n" . $self->render_label($field);
    }

    $output .= "\n$rendered_field";
    $output .= qq{\n<span class="error_message">$_</span>}
        for $field->all_errors;

    $output .= "\n</$wrapper_tag>";

lib/HTML/FormHandler/Render/Table.pm  view on Meta::CPAN

    my $output .= "</table>\n";
    $output .= "</form>\n";
    return $output;
}

sub wrap_field {
    my ( $self, $field, $rendered_field ) = @_;

    my $attrs = process_attrs($field->wrapper_attributes);
    my $output = qq{\n<tr$attrs>};
    my $l_type = $field->widget eq 'Compound' ? 'legend' : 'label';
    if ( $l_type eq 'label' ) {
        $output .= '<td>' . $self->render_label($field) . '</td>';
    }
    elsif ( $l_type eq 'legend' ) {
        $output .= '<td>' . $self->render_label($field) . '</td></tr>';
    }
    if ( $l_type ne 'legend' ) {
        $output .= '<td>';
    }
    $output .= $rendered_field;
    $output .= qq{\n<span class="error_message">$_</span>} for $field->all_errors;
    if ( $l_type ne 'legend' ) {
        $output .= "</td></tr>\n";
    }
    return $output;
}

use namespace::autoclean;
1;

__END__

lib/HTML/FormHandler/Widget/Block.pm  view on Meta::CPAN

    $attr->{class} = $self->class if $self->has_class;
    my $attr_str = process_attrs($attr);
    return $attr_str;
}

sub render_label {
    my $self = shift;
    my $label = '';
    if ( $self->has_label ) {
        my $label_tag = $self->label_tag || 'span';
        $label_tag = 'legend' if lc $self->tag eq 'fieldset';
        my $label_str = $self->form->_localize( $self->label );
        my $attr_str  = '';
        $attr_str = process_attrs( { class => $self->label_class } ) if $self->has_label_class;
        $label = qq{<$label_tag$attr_str>$label_str</$label_tag>};
    }
    return $label;
}

sub render_from_list {
    my ( $self, $result ) = @_;

lib/HTML/FormHandler/Widget/Block.pm  view on Meta::CPAN

=item class

Arrayref of classes for the HTML element.

=item attr

Other attributes for the HTML element.

=item label_tag

Tag to use for the label. Default: 'span'; default for 'fieldset' is 'legend'.

=item label_class

Classes for the label.

=item label

Label string. Will be localized.

=back

lib/HTML/FormHandler/Widget/Wrapper/Base.pm  view on Meta::CPAN

    my $attr = $self->label_attributes( $result );
    push @{ $attr->{class} }, @$class if $class;
    my $attrs = process_attrs($attr);
    my $label;
    if( $self->does_wrap_label ) {
        $label = $self->wrap_label( $self->label );
    }
    else {
        $label = $self->get_tag('label_no_filter') ? $self->loc_label : $self->html_filter($self->loc_label);
    }
    $label .= $self->get_tag('label_after') if $label_tag ne 'legend';
    my $id = $self->id;
    my $for = $label_tag eq 'label' ? qq{ for="$id"} : '';
    return qq{<$label_tag$attrs$for>$label</$label_tag>};
}

sub wrap_checkbox {
    my ( $self, $result, $rendered_widget, $default_wrapper ) = @_;

    my $option_wrapper = $self->option_wrapper || $default_wrapper;
    if ( $option_wrapper && $option_wrapper ne 'standard' &&

lib/HTML/FormHandler/Widget/Wrapper/Fieldset.pm  view on Meta::CPAN


with 'HTML::FormHandler::Widget::Wrapper::Base';
use HTML::FormHandler::Render::Util ('process_attrs');


sub wrap_field {
    my ( $self, $result, $rendered_widget ) = @_;

    my $wattrs = process_attrs($self->wrapper_attributes);
    my $output .= qq{\n<fieldset$wattrs>};
    $output .= qq{\n<legend>} . $self->loc_label . '</legend>';

    $output .= "\n$rendered_widget";

    $output .= qq{\n<span class="error_message">$_</span>}
        for $result->all_errors;
    $output .= "\n</fieldset>";

    return $output;
}

lib/HTML/FormHandler/Widget/Wrapper/Simple.pm  view on Meta::CPAN

    my $wrapper_tag;
    if( $self->do_wrapper ) {
        $output .= $self->get_tag('before_wrapper');
        $wrapper_tag = $self->get_tag('wrapper_tag');
        # default wrapper tags
        $wrapper_tag ||= $self->has_flag('is_repeatable') ? 'fieldset' : 'div';
        # get attribute string
        my $attrs = process_attrs( $self->wrapper_attributes($result) );
        # write wrapper tag
        $output .= qq{\n<$wrapper_tag$attrs>};
        $label_tag = 'legend' if $wrapper_tag eq 'fieldset';
    }
    # write label; special processing for checkboxes
    $rendered_widget = $self->wrap_checkbox($result, $rendered_widget)
        if ( lc $self->widget eq 'checkbox' );
    $output .= "\n" . $self->do_render_label($result, $label_tag)
        if $self->do_label;
    # append 'before_element'
    $output .= $self->get_tag('before_element');

    # start controls div

share/templates/form/form_in_one.tt  view on Meta::CPAN


[% BLOCK wrapper_wrap_label -%]
<div[% process_attrs(f.wrapper_attributes) %]><label[% process_attrs(f.label_attributes) %] for="[% f.html_name %]">[%~ content ~%][%~ f.label %]</label></div>
[% END -%]

[% BLOCK wrapper_none -%]
[% content %]
[% END -%]

[% BLOCK wrapper_fieldset -%]
<fieldset[% process_attrs(f.wrapper_attributes)%]><legend>[% f.label %]</legend>
[% content -%]
</fieldset>
[% END -%]

share/templates/wrapper/fieldset.tt  view on Meta::CPAN

<fieldset[% process_attrs(f.wrapper_attributes)%]><legend>[% f.label %]</legend>
[% content -%]
</fieldset>

t/blocks/basic.t  view on Meta::CPAN

$form->process;
my $rendered = $form->render;
my $expected =
'<form id="test_form" method="post">
  <div class="form_messages"></div>
  <h2>You got to the Block! Congratulations.</h2>
  <div>
    <label for="foo">Foo</label>
    <input type="text" name="foo" id="foo" value="" />
 </div>
 <fieldset><legend>My Special Bar</legend>
   <div>
     <label for="bar">Bar</label>
     <input type="text" name="bar" id="bar" value="" />
   </div>
 </fieldset>
</form>';
is_html( $rendered, $expected, 'block rendered ok' );

$form->process( params => { foo => 'abc', bar => 'def' } );
ok( $form->has_errors, 'form has errors' );

t/blocks/build_render_list_method.t  view on Meta::CPAN

$form->process;
my $rendered = $form->render;
my $expected =
'<form id="test_form" method="post">
  <div class="form_messages"></div>
  <h2>You got to the Block! Congratulations.</h2>
  <div>
    <label for="foo">Foo</label>
    <input type="text" name="foo" id="foo" value="" />
 </div>
 <fieldset><legend>My Special Bar</legend>
   <div>
     <label for="bar">Bar</label>
     <input type="text" name="bar" id="bar" value="" />
   </div>
 </fieldset>
</form>';
is_html( $rendered, $expected, 'block rendered ok' );

$form->process( params => { foo => 'abc', bar => 'def' } );
ok( $form->has_errors, 'form has errors' );

t/blocks/nested.t  view on Meta::CPAN


}

my $form = MyApp::Form::Nested->new;
ok( $form, 'form built' );
$form->process;
my $rendered = $form->render;
my $expected =
'<form id="nested_form" method="post">
  <div class="form_messages"></div>
  <fieldset><legend>First Fieldset</legend>
    <div>
      <label for="foo">Foo</label>
      <input type="text" id="foo" name="foo" value="">
    </div>
    <div>
      <label for="bar">Bar</label>
      <input type="text" id="bar" name="bar" value="">
    </div>
    <div>
      <label for="pax">Pax</label>

t/bootstrap/control_states.t  view on Meta::CPAN

use Test::More;
use HTML::FormHandler::Test;
$ENV{LANGUAGE_HANDLE} = 'en_en';

{
    package MyApp::Form::CtrlStates::Theme;
    use Moose::Role;
    with 'HTML::FormHandler::Widget::Theme::Bootstrap';

    sub build_form_tags {{
        after_start => '<fieldset><legend>Form control states</legend>',
        before_end => '</fieldset>',
    }}

    sub build_update_subfields {{
        focusedInput => { element_class => ['input-xlarge', 'focused'] },
        uneditableInput => { element_class => ['input-xlarge', 'uneditable-input'] },
        disabledInput => { element_class => ['input-xlarge'],
            element_attr => { placeholder => 'Disabled input here…' } },
        optionsCheckbox2 => { element_class => ['checkbox'],
            option_label => 'This is a disabled checkbox' },

t/bootstrap/control_states.t  view on Meta::CPAN

  <button type="submit" class="btn btn-primary" name="form_actions.save" id="form_actions.save">Save changes</button>
  <button type="reset" class="btn" name="form_actions.cancel" id="form_actions.cancel">Cancel</button>
</div>';

$rendered = $form->field('form_actions')->render;
is_html( $rendered, $expected, 'form_actions rendered ok' );

$expected =
'<form id="test_form" class="form-horizontal" method="post">
<fieldset>
  <legend>Form control states</legend>
  <div class="alert alert-error"><span class="error_message">There were errors in your form</span></div>
  <div class="control-group">
    <label class="control-label" for="focusedInput">Focused input</label>
    <div class="controls">
      <input class="input-xlarge focused" id="focusedInput" name="focusedInput" type="text" value="This is focused…" />
    </div>
  </div>
  <div class="control-group">
    <label class="control-label" for="uneditableInput">Uneditable input</label>
    <div class="controls">

t/bootstrap/controls.t  view on Meta::CPAN

    # widget wrapper must be set before the fields are built in BUILD
    sub before_build {
        my $self = shift;
        $self->set_widget_wrapper('Bootstrap');
    }
    sub build_do_form_wrapper {1}
    sub build_form_element_class {['form-horizontal']}
    sub build_form_wrapper_class {['span8']}
    sub build_form_tags {{
        wrapper_tag => 'div',
        after_start => '<fieldset><legend>Controls Bootstrap supports</legend>',
        before_end => '</fieldset>',
    }}

    sub build_update_subfields {{
        input01 => { tags => { after_element => '<p class="help-block">In addition to freeform text, any HTML5 text-based input appears like so.</p>' },
                     element_attr => { class => 'input-xlarge' },
                   },
        optionsCheckbox => { option_label => 'Option one is this and that—be sure to include why it’s great' },
        fileInput => { element_attr => { class => 'input-file' } },
        textarea => { element_attr => { class => 'input-xlarge' } },

t/bootstrap/controls.t  view on Meta::CPAN

    }
    sub options_multiSelect {
        return ( 1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5 );
    }
}

my $form = MyApp::Form::Controls->new;
$form->process;

my $rendered = $form->render_start;
my $expected = '<div class="span8"><form class="form-horizontal" id="control_form" method="post"><fieldset><legend>Controls Bootstrap supports</legend>';
is($rendered, $expected, 'form start rendered correctly');

# text field
$expected =
'<div class="control-group">
  <label class="control-label" for="input01">Text input</label>
  <div class="controls">
    <input type="text" class="input-xlarge" id="input01" name="input01" value="" />
    <p class="help-block">In addition to freeform text, any HTML5 text-based input appears like so.</p>
  </div>

t/bootstrap/controls.t  view on Meta::CPAN

  <button id="actions.save" name="actions.save" type="submit" class="btn btn-primary">Save changes</button>
  <button id="actions.cancel" name="actions.cancel" type="reset" class="btn">Cancel</button>
</div>';
$rendered = $form->field('actions')->render;
is_html($rendered, $expected, 'actions renders ok' );

$expected = '
    <div class="span8">
      <form class="form-horizontal" id="control_form" method="post">
        <fieldset>
          <legend>Controls Bootstrap supports</legend>
          <div class="form_messages"></div>
          <div class="control-group">
            <label class="control-label" for="input01">Text input</label>
            <div class="controls">
              <input type="text" class="input-xlarge" id="input01" name="input01" value="" />
              <p class="help-block">In addition to freeform text, any HTML5 text-based input appears like so.</p>
            </div>
          </div>
          <div class="control-group">
            <label class="control-label" for="optionsCheckbox">Checkbox</label>

t/bootstrap/ext_controls.t  view on Meta::CPAN

use Test::More;
use HTML::FormHandler::Test;

{
    package MyApp::Form::ExtControls;
    use HTML::FormHandler::Moose;
    extends 'HTML::FormHandler';
    with 'HTML::FormHandler::Widget::Theme::Bootstrap';

    sub build_form_tags {{
        after_start => "<fieldset>\n<legend>Extending form controls</legend>",
    }}
    sub build_process_list { ['form_sizes', 'prependedInput', 'appendedInput', 'inlineCheckboxes',
        'checkboxList'] }
    has_block 'form_sizes' => ( type => 'Bootstrap', render_list => ['text1', 'text2', 'text3'],
        label => 'Form sizes',
        after_controls => '<p class="help-block">Use the same <code>.span*</code> classes from the grid system for input sizes.</p>',
    );
    # these three fields are in the 'form_sizes' block
    has_field 'text1' => ( widget_wrapper => 'None', element_class => ['span2'],
        element_attr => { placeholder => '.span2' } );

t/bootstrap/ext_controls.t  view on Meta::CPAN

  </div>
</div>';
$rendered = $form->field('optionsRadios')->render;
is_html( $rendered, $expected, 'radio rendered ok' );

$expected =
'<div class="row">
  <div class="span8">
    <form class="form-horizontal">
      <fieldset>
        <legend>Extending form controls</legend>
        <div class="control-group">
          <label class="control-label">Form sizes</label>
          <div class="controls">
            <input id="text1" name="text1" class="span2" type="text" placeholder=".span2" value="" />
            <input id="text2" name="text2" class="span3" type="text" placeholder=".span3" value="" />
            <input id="text3" name="text3" class="span4" type="text" placeholder=".span4" value="" />
            <p class="help-block">Use the same <code>.span*</code> classes from the grid system for input sizes.</p>
          </div>
        </div>
        <div class="control-group">

t/render/array.t  view on Meta::CPAN

    has_field 'my_rep' => ( type => 'Repeatable', 'num_when_empty' => 2 );
    #  we want a label but not a div wrapper
    has_field 'my_rep.foo' => ( do_wrapper => 0 );
    has_field 'bar';

}

my $form = Test::Repeatable::Array->new;

my $expected =
'<fieldset id="my_array"><legend>My array</legend>
  <input type="text" name="my_array.0" id="my_array.0" value="" />
  <input type="text" name="my_array.1" id="my_array.1" value="" />
</fieldset>';
my $rendered = $form->field('my_array')->render;
is_html($rendered, $expected, 'repeatable array field renders correctly');

$expected =
'<fieldset id="my_array2"><legend>My array2</legend>
  <input type="text" name="my_array2.0" id="my_array2.0" value="" />
  <input type="text" name="my_array2.1" id="my_array2.1" value="" />
</fieldset>';
$rendered = $form->field('my_array2')->render;
is_html($rendered, $expected, 'repeatable array field renders correctly');

$rendered = $form->field('my_rep')->render;
$expected =
'<div class="hfh-repinst" id="my_rep.0">
  <label for="my_rep.0.foo">Foo</label>

t/render/array.t  view on Meta::CPAN

  <label for="my_rep.1.foo">Foo</label>
  <input type="text" name="my_rep.1.foo" id="my_rep.1.foo" value="" />
</div>';
is_html($rendered, $expected, 'simple repeatable renders correctly');

$form->process( params => {} );
my $rendered_form = $form->render;

$rendered = $form->field('my_array')->render;
$expected =
'<fieldset id="my_array"><legend>My array</legend>
  <input type="text" name="my_array.0" id="my_array.0" value="" />
  <input type="text" name="my_array.1" id="my_array.1" value="" />
</fieldset>';
is_html($rendered, $expected, 'repeatable array renders after process' );

$rendered = $form->field('my_rep')->render;
$expected =
'<div class="hfh-repinst" id="my_rep.0">
  <label for="my_rep.0.foo">Foo</label>
  <input type="text" name="my_rep.0.foo" id="my_rep.0.foo" value="" />

t/render/array.t  view on Meta::CPAN

  <input type="text" name="my_rep.1.foo" id="my_rep.1.foo" value="" />
</div>';
is_html($rendered, $expected, 'simple repeatable renders correctly after process');

$form->process( params => { foo => 'xxx', bar => 'yyy',
   'my_array.0' => 'one', 'my_array.1' => 'two',
   'my_rep.0.foo' => 'fee', 'my_rep.1.foo' => 'fie' } );
$rendered = $form->render;
$rendered = $form->field('my_array')->render;
$expected =
'<fieldset id="my_array"><legend>My array</legend>
  <input type="text" name="my_array.0" id="my_array.0" value="one" />
  <input type="text" name="my_array.1" id="my_array.1" value="two" />
</fieldset>';
is_html($rendered, $expected, 'array renders ok after processing with params' );

$rendered = $form->field('my_rep')->render;
$expected =
'<div class="hfh-repinst" id="my_rep.0">
  <label for="my_rep.0.foo">Foo</label>
  <input type="text" name="my_rep.0.foo" id="my_rep.0.foo" value="fee" />

t/render/compound.t  view on Meta::CPAN

    has_field 'start_date.year' => ( type => 'Integer', range_start => 2000,
        range_end => 2020 );
}

$form = Test::DT->new;
my $params = { 'start_date.month' => 7, 'start_date.day' => 14, 'start_date.year' => '2006' };
$form->process( $params );

$rendered = $form->field('start_date')->render;
is_html( $rendered,
'<fieldset class="start_date" id="start_date"><legend>Start date</legend>
  <div>
    <label for="start_date.month">Month: </label>
    <input type="text" name="start_date.month" id="start_date.month" size="8" value="7" />
  </div>
  <div>
    <label for="start_date.day">Day: </label>
    <input type="text" name="start_date.day" id="start_date.day" size="8" value="14" />
  </div>
  <div>
    <label for="start_date.year">Year: </label>

t/render/rep_wrapper.t  view on Meta::CPAN

    }
}

my $form = Test::Form->new;
$form->process({});
ok( $form, 'form built' );
my $rendered = $form->render;
my $expected =
'<form id="test_form" method="post">
  <div class="form_messages"></div>
  <fieldset class="hfhrep" id="foo"><legend>Foo Records</legend>
    <div class="somewrapper"><span>0</span>
    <div class="hfh repinst" id="foo.0">
      <div><input type="hidden" name="foo.0.id" id="foo.0.id" value="" /></div>
      <div>
        <label for="foo.0.one">One</label>
        <input type="text" name="foo.0.one" id="foo.0.one" value="" />
      </div>
      <div>
        <label for="foo.0.two">Two</label>
        <input type="text" name="foo.0.two" id="foo.0.two" value="" />

t/render/repeatable.t  view on Meta::CPAN

    }
}

my $form = Test::Form->new;
$form->process({});
ok( $form, 'form built' );
my $rendered = $form->render;
my $expected =
'<form id="test_form" method="post">
  <div class="form_messages"></div>
  <fieldset class="hfhrep" id="foo"><legend>Foo Records</legend>
    <div class="hfh repinst" id="foo.0">
      <div><input type="hidden" name="foo.0.id" id="foo.0.id" value="" /></div>
      <div>
        <label for="foo.0.one">One</label>
        <input type="text" name="foo.0.one" id="foo.0.one" value="" />
      </div>
      <div>
        <label for="foo.0.two">Two</label>
        <input type="text" name="foo.0.two" id="foo.0.two" value="" />
      </div>

t/render/simple.t  view on Meta::CPAN

my $output7 = $form->render_field( $form->field('selected') );
is_html( $output7,
   '
<div><label class="label" for="selected">Selected</label><input type="checkbox" name="selected" id="selected" value="1" checked="checked" />
</div>',
   'output from boolean' );

my $output8 = $form->render_field( $form->field('start_date') );
is_html( $output8,
   '
<fieldset class="start_date" id="start_date"><legend>Start date</legend>
<div><label class="label" for="start_date.month">Month</label><input type="text" name="start_date.month" id="start_date.month" size="8" value="7" />
</div>
<div><label class="label" for="start_date.day">Day</label><input type="text" name="start_date.day" id="start_date.day" size="8" value="14" />
</div>
<div><label class="label" for="start_date.year">Year</label><input type="text" name="start_date.year" id="start_date.year" size="8" value="2006" />
</div>
</fieldset>',
   'output from DateTime' );

my $output9 = $form->render_field( $form->field('submit') );

t/render/tags.t  view on Meta::CPAN

        return $attr;
    }
}

my $form = Test::Form->new;
$form->process({});
my $rendered = $form->render;
unlike( $rendered, qr/fieldset/, 'no fieldset rendered' );
unlike( $rendered, qr/Foo: /, 'no colon in label' );
like( $rendered, qr/<p/, 'wrapper tag correct' );
unlike( $rendered, qr/<fieldset class="multi"><legend>Multi<\/legend>/, 'no fieldset around compound' );
like( $rendered, qr/<span class="label">Bar<\/span>/, 'label formatted with span and class' );

ok( ! exists $form->field('foo')->tags->{form_text}, 'no form widgets tags in fields' );
my $exp_tags = { wrapper_tag => 'p', label_tag => 'span' };
my $got_tags = $form->field('records.0')->tags;
is_deeply( $got_tags, $exp_tags, 'correct tags' );


{

t/render/widgets.t  view on Meta::CPAN

        my ( $self, $field, $type, $attr ) = @_;
        $attr->{class} = 'label' if $type eq 'label';
        return $attr;
    }
}

my $form = Test::Form->new;
ok( $form, 'create form' );

my $expected =
'<fieldset id="hobbies"><legend class="label">Hobbies</legend>
  <div>
    <label class="label" for="hobbies.0">0</label>
    <input type="text" name="hobbies.0" id="hobbies.0" value="" tabindex="2" />
  </div>
</fieldset>';
is_html( $form->field('hobbies')->render, $expected, 'output from repeatable with num_when_empty == 1'
);

my $params = {
    test_field         => 'something',

t/render/widgets.t  view on Meta::CPAN

  <label class="label" for="selected">Selected</label>
    <label class="checkbox" for="selected">
      <input checked="checked" id="selected" name="selected" type="checkbox" value="1" />
    </label>
</div>',
    'output from boolean'
);

$rendered = $form->field('start_date')->render;
is_html( $rendered,
'<fieldset id="start_date"><legend class="label">Start date</legend>
  <div>
    <label class="label" for="start_date.month">Month</label>
    <input type="text" name="start_date.month" id="start_date.month" size="8" value="7" />
  </div>
  <div>
    <label class="label" for="start_date.day">Day</label>
    <input type="text" name="start_date.day" id="start_date.day" size="8" value="14" />
  </div>
  <div>
    <label class="label" for="start_date.year">Year</label>

t/render/widgets.t  view on Meta::CPAN

);

$rendered = $form->render_start;
is_html( $rendered,
'<form id="testform" method="post"><fieldset class="form_wrapper">',
'Form start OK'
);

$rendered = $form->field('hobbies')->render;
is_html( $rendered, '
<fieldset id="hobbies"><legend class="label">Hobbies</legend>
  <div>
    <label class="label" for="hobbies.0">0</label>
    <input type="text" name="hobbies.0" id="hobbies.0" value="eating" tabindex="2" />
  </div>
  <div>
    <label class="label" for="hobbies.1">1</label>
    <input type="text" name="hobbies.1" id="hobbies.1" value="sleeping" tabindex="2" />
  </div>
  <div>
    <label class="label" for="hobbies.2">2</label>
    <input type="text" name="hobbies.2" id="hobbies.2" value="not chasing mice" tabindex="2" />
  </div>
</fieldset>', 'output from repeatable after processing result with 3 items' );

is( $form->field('no_render')->render, '', 'no_render' );

is_html( $form->field('plain')->render, '<input type="text" name="plain" id="plain" value="No divs!!" />', 'renders without wrapper');

is_html( $form->field('boxed')->render,
'<fieldset class="boxed"><legend>Boxed</legend>
  <input type="text" name="boxed" id="boxed" value="Testing single fieldset" />
</fieldset>', 'fieldset wrapper renders' );

is_html( $form->field('element_wrapper_field')->render,
'<div>
  <label class="label" for="element_wrapper_field">Element wrapper field</label>
  <div class="large">
    <input id="element_wrapper_field" name="element_wrapper_field" type="text" value="" />
  </div>
</div>',



( run in 1.592 second using v1.01-cache-2.11-cpan-49f99fa48dc )