HTML::FormFu::Element::Repeatable.3pm

Langue: en

Version: 2008-10-27 (fedora - 06/07/09)

Section: 3 (Bibliothèques de fonctions)

NAME

HTML::FormFu::Element::Repeatable - repeatable block element

SYNOPSIS

     ---
     elements:
       - type: Repeatable
         elements:
           - name: foo
           - name: bar
 
 

Calling "$element->repeat(2)" would result in the following markup:

     <div>
         <input name="foo" type="text" />
         <input name="bar" type="text" />
     </div>
     <div>
         <input name="foo" type="text" />
         <input name="bar" type="text" />
     </div>
 
 

DESCRIPTION

Provides a way to extend a form at run-time, by copying and repeating its child elements.

The elements intended for copying must be added before ``repeat'' is called.

Although the Repeatable element inherits from Block, it doesn't generate a block tag around all the repeated elements - instead it places each repeat of the elements in a new Block element, which inherits the Repeatable's display settings, such as ``attributes'' and ``tag''.

METHODS


repeat

Arguments: [$count]

Return Value: $arrayref_of_new_child_blocks

This method creates $count number of copies of the child elements. If no argument $count is provided, it defaults to 1.

Note that "$form->process" will call ``repeat'' automatically to ensure the initial child elements are correctly set up - unless you call ``repeat'' manually first, in which case the child elements you created will be left untouched (otherwise ``process'' would overwrite your changes).

Any subsequent call to ``repeat'' will delete the previously copied elements before creating new copies - this means you cannot make repeated calls to ``repeat'' within a loop to create more copies.

Each copy of the elements returned are contained in a new Block element. For example, calling "$element->repeat(2)" on a Repeatable element containing 2 Text fields would return 2 Block elements, each containing a copy of the 2 Text fields.

counter_name

Arguments: $name

If true, the ``query'' in HTML::FormFu will be searched during ``process'' in HTML::FormFu for a parameter with the given name. The value for that parameter will be passed to ``repeat'', to automatically create the new copies.

If ``increment_field_names'' is true (the default), this is essential: if the elements corresponding to the new fieldnames (foo_1, bar_2, etc.) are not present on the form during ``process'' in HTML::FormFu, no Processors (Constraints, etc.) will be run on the fields, and their values will not be returned by ``params'' in HTML::FormFu or ``param'' in HTML::FormFu.

increment_field_names

Arguments: $bool

Default Value: 1

If true, then any copies of fields whose name contains a 0, will have the 0 replaced by it's ``repeatable_count'' value.

     ---
     elements:
       - type: Repeatable
         increment_field_names: 1
         elements:
           - name: foo_0
           - name: bar_0
 
 

Calling "$element->repeat(2)" would result in the following markup:

     <div>
         <input name="foo_1" type="text" />
         <input name="bar_1" type="text" />
     </div>
     <div>
         <input name="foo_2" type="text" />
         <input name="bar_2" type="text" />
     </div>
 
 

See also ``counter_name''.

repeatable_count

This is set on each new Block element returned by ``repeat'', starting at number 1.

Because this is an 'inherited accessor' available on all elements, it can be used to determine whether any element is a child of a Repeatable element.

attributes


attrs

Any attributes set will be passed to every repeated Block of elements.

     ---
     elements:
       - type: Repeatable
         attributes: 
           class: rep
         elements:
           - name: foo
 
 

Calling "$element->repeat(2)" would result in the following markup:

     <div class="rep">
         <input name="foo" type="text" />
     </div>
     <div class="rep">
         <input name="foo" type="text" />
     </div>
 
 

See ``attributes'' in HTML::FormFu for details.

tag

The ``tag'' value will be passed to every repeated Block of elements.

     ---
     elements:
       - type: Repeatable
         tag: span
         elements:
           - name: foo
 
 

Calling "$element->repeat(2)" would result in the following markup:

     <span>
         <input name="foo" type="text" />
     </span>
     <span>
         <input name="foo" type="text" />
     </span>
 
 

See ``tag'' in HTML::FormFu::Element::block for details.

auto_id

As well as the usual subtitutions, any instances of %r will be replaced with the value of ``repeatable_count''.

See ``auto_id'' in HTML::FormFu::Element::block for further details.

     ---
     elements:
       - type: Repeatable
         auto_id: "%n_%r"
         elements:
           - name: foo
 
 

Calling "$element->repeat(2)" would result in the following markup:

     <div>
         <input name="foo" id="foo_1" type="text" />
     </div>
     <div>
         <input name="foo" id="foo_2" type="text" />
     </div>
 
 

content

Not supported for Repeatable elements - will throw a fatal error if called as a setter.

SEE ALSO

Is a sub-class of, and inherits methods from HTML::FormFu::Element::Block, HTML::FormFu::Element

HTML::FormFu

AUTHOR

Carl Franks, "cfranks@cpan.org"

LICENSE

This library is free software, you can redistribute it and/or modify it under the same terms as Perl itself.