├── t
├── bugs
│ ├── yaml_utf8.txt
│ ├── yaml_utf8.yml
│ ├── error_multiple_fields_same_name.yml
│ ├── multiple_checkbox_same_name.yml
│ ├── empty_block_with_nested_name.yml
│ ├── not_nested.t
│ ├── render_processed_value_retain_default.yml
│ ├── repeatable_increase_rep.yml
│ ├── name_regex_chars.t
│ ├── date_element_empty_input.t
│ ├── filter_run_once.t
│ ├── value_empty_string.t
│ ├── empty_block_with_nested_name.t
│ ├── yaml_utf8.t
│ ├── element_parent.t
│ ├── disabled_select_default_value.yml
│ ├── result_params_multiple.t
│ ├── multiple_checkbox_same_name.t
│ ├── pre_1_00_compat.yml
│ ├── field_no_name.t
│ ├── date_element_deflator.t
│ ├── select_empty_options.t
│ ├── error_multiple_fields_same_name.t
│ ├── render_processed_value_retain_default.t
│ ├── populate_element_coderef.t
│ ├── error_msg.t
│ └── constructor_arg_overwrites_default.t
├── templates
│ └── field_layout
├── roles
│ ├── form.yml
│ ├── field.yml
│ ├── block.yml
│ ├── form.t
│ ├── block.t
│ └── field.t
├── form
│ ├── config_callback.yml
│ ├── object
│ │ └── form
│ ├── languages.yml
│ ├── end.t
│ ├── start.t
│ ├── default_args_alt.yml
│ ├── stash.t
│ ├── default_args_isa.yml
│ ├── add_render_class_args.t
│ ├── model.t
│ ├── multiple_same_named_fields.t
│ ├── title_xml.t
│ ├── config_callback.t
│ ├── submitted_and_valid.t
│ ├── add_valid_unknown.t
│ ├── render_processed_value.yml
│ ├── hidden_fields.t
│ ├── get_parent.yml
│ ├── languages.t
│ ├── init_arg.t
│ ├── javascript.t
│ ├── form_error_message_class.t
│ ├── param_array.t
│ ├── param_list.t
│ ├── constraints_from_dbic.yml
│ ├── auto_label.t
│ ├── default_values.t
│ ├── param_value.t
│ ├── auto_error_message.t
│ ├── params_ignore_underscore.t
│ ├── auto_error_field_class.t
│ ├── auto_error_class.t
│ ├── auto_constraint_class.t
│ ├── force_error_message.t
│ └── has_errors.t
├── load_config
│ ├── config_file_path
│ │ └── form.yml
│ ├── config_file_path2
│ │ └── form.yml
│ ├── load_config_file_multiple1.yml
│ ├── load_config_file_multiple2.yml
│ ├── load_config_file_constraint_regex.yml
│ ├── load_config_file_multiple.yml
│ ├── load_config_file_form.yml
│ ├── load_config_file_multi_stream.yml
│ ├── load_config_file_fieldset.yml
│ ├── load_config_file_multi_stream.t
│ ├── load_config_file_constraint_regex.t
│ └── load_config_file_multiple.t
├── elements
│ ├── no_container_tag.yml
│ ├── file_post.txt
│ ├── number.yml
│ ├── no_block_tag.yml
│ ├── url.yml
│ ├── object
│ │ └── field_layout_field_custom
│ ├── text_layout.yml
│ ├── block_auto_block_id.yml
│ ├── combobox.yml
│ ├── date_year_reverse.yml
│ ├── text_auto_container_class.yml
│ ├── text_auto_label_class.yml
│ ├── select_empty_first.yml
│ ├── fieldset_legend_attrs.yml
│ ├── text_auto_container_label_class.yml
│ ├── block_repeatable.yml
│ ├── text_auto_comment_class.yml
│ ├── block_repeatable_date.yml
│ ├── checkbox_reverse.yml
│ ├── block_repeatable_tag.yml
│ ├── text_auto_container_comment_class.yml
│ ├── text_datalist_values.yml
│ ├── block_repeatable_attrs.yml
│ ├── error_attributes_failing_test.select.yml
│ ├── label.yml
│ ├── label_value_submission.yml
│ ├── block_repeatable_auto_block_id.yml
│ ├── block_repeatable_auto_id.yml
│ ├── combobox_required.yml
│ ├── select_same_name.yml
│ ├── repeatable_counter_name.yml
│ ├── block_repeatable_inc.yml
│ ├── datetime_seconds.yml
│ ├── error_attributes_failing_test.text.yml
│ ├── text_auto_container_error_class.yml
│ ├── datetime_interval.yml
│ ├── error_attributes_failing_test.text-with-attrs.yml
│ ├── combobox_repeatable.yml
│ ├── error_attributes_failing_test.select-with-attrs.yml
│ ├── text_datalist_options.yml
│ ├── select_attributes_escaped.yml
│ ├── simple_table_class.yml
│ ├── date_default_datetime_args.yml
│ ├── simple_table.yml
│ ├── element_setup.t
│ ├── button_no_name.t
│ ├── radiogroup_unknown_opt.t
│ ├── repeatable_repeatable.yml
│ ├── hr.t
│ ├── date_rename.t
│ ├── simple_table_multiple.yml
│ ├── block_auto_block_id.t
│ ├── date_natural.t
│ ├── no_container_tag.t
│ ├── radiogroup_dup_opt.t
│ ├── no_block_tag.t
│ ├── field_default_empty_value.yml
│ ├── radiogroup_attributes_escaped.yml
│ ├── checkboxgroup_attributes_escaped.yml
│ ├── hidden.t
│ ├── fieldset_legend_attrs.t
│ ├── datetime.yml
│ ├── select_empty_first.t
│ ├── file.t
│ ├── reset.t
│ ├── button.t
│ ├── submit.t
│ ├── checkbox_reverse.t
│ ├── select_attributes_escaped.t
│ ├── text_auto_container_class.t
│ ├── select_multi_default_values.t
│ ├── date_undef.t
│ ├── src.t
│ ├── text_auto_label_class.t
│ ├── text_auto_container_label_class.t
│ ├── text_auto_comment_class.t
│ ├── password_render_value.t
│ ├── date_order_error.t
│ ├── email.t
│ ├── text_auto_container_comment_class.t
│ ├── text_datalist_values.t
│ ├── label.t
│ ├── select_label_loc.t
│ ├── select_same_name.t
│ ├── text_title.t
│ ├── radiogroup_attrs_xml.t
│ ├── password.t
│ ├── radiogroup_id.t
│ ├── text_errors.t
│ ├── field_non_param.t
│ └── radiogroup_attributes_escaped.t
├── elements-file_post.txt
├── lib
│ ├── HTMLFormFu
│ │ ├── MyModel.pm
│ │ ├── RegressLocalization.pm
│ │ ├── RegressLocalization
│ │ │ └── en.pm
│ │ ├── MyFormRole.pm
│ │ ├── ElementSetup.pm
│ │ ├── I18N.pm
│ │ ├── MyDeflator.pm
│ │ ├── MyValidator.pm
│ │ ├── DBICUniqueFake.pm
│ │ ├── MyObject.pm
│ │ └── I18N
│ │ │ └── en.pm
│ └── MyApp
│ │ ├── Schema.pm
│ │ └── Schema
│ │ └── Dongle.pm
├── plugins
│ ├── stashvalid_on_field.yml
│ ├── stashvalid.yml
│ ├── stashvalid.t
│ └── stashvalid_on_field.t
├── filters
│ ├── formatnumber.yml
│ ├── regex.yml
│ ├── regex_eval.yml
│ ├── split.yml
│ ├── compoundjoin_join.yml
│ ├── compoundsprintf.yml
│ ├── compoundjoin_field_order.yml
│ ├── compoundjoin.yml
│ ├── compoundsprintf_field_order.yml
│ ├── compoundjoin_join.t
│ ├── compoundjoin_field_order.t
│ ├── lowercase.t
│ ├── uppercase.t
│ ├── whitespace.t
│ ├── nonnumeric.t
│ ├── split.t
│ ├── compoundsprintf.t
│ ├── htmlescape.t
│ ├── compoundsprintf_field_order.t
│ ├── trimedges.t
│ ├── compoundjoin.t
│ ├── encode.t
│ └── regex_eval.t
├── field_accessor_loc_arrayref.yml
├── nested
│ ├── elements
│ │ ├── block_without_name.yml
│ │ ├── block_without_name.t
│ │ ├── select_same_name.yml
│ │ ├── block_repeatable_multi_named.yml
│ │ ├── repeatable_repeatable.yml
│ │ ├── block_repeatable_multi_named_filter.yml
│ │ ├── multi.t
│ │ ├── radio.t
│ │ └── select_same_name.t
│ ├── element_name.yml
│ ├── illegal_name.t
│ ├── form_input.t
│ ├── internals
│ │ └── form_processed_params.t
│ ├── constraints
│ │ ├── required.t
│ │ ├── equal.t
│ │ └── callbackonce.t
│ ├── form
│ │ └── render_processed_value.yml
│ ├── filters
│ │ └── regex.t
│ ├── params.t
│ └── pre_expanded.t
├── deflators
│ ├── formatnumber.yml
│ ├── compoundsplit.yml
│ ├── compounddatetime.yml
│ ├── compoundsplit_split.yml
│ ├── compoundsplit_after_submit.yml
│ ├── compounddatetime_field_order.yml
│ ├── compoundsplit_field_order.yml
│ ├── compoundsplit.t
│ ├── compoundsplit_field_order.t
│ └── compoundsplit_split.t
├── 01use.t
├── constraints
│ ├── constraint_when_any_true_value.yml
│ ├── file_maxsize.yml
│ ├── file_minsize.yml
│ ├── dependon_attach_errors_to_base.yml
│ ├── file.yml
│ ├── allornone_attach_errors_to_base.yml
│ ├── constraint_other_siblings_not.yml
│ ├── constraint_other_siblings.yml
│ ├── repeatable_any.yml
│ ├── required_file.yml
│ ├── dependon_attach_errors_to_others.yml
│ ├── allornone_attach_errors_to_others.yml
│ ├── constraint_when_fields.yml
│ ├── repeatable_any_not_increment_field_n.yml
│ ├── constraint_when_default_empty_value.yml
│ ├── file_mime.yml
│ ├── file_size.yml
│ ├── minmaxfields_with_filter_split.yml
│ ├── constraint_when_any_field.yml
│ ├── equal_internals.t
│ ├── xml.t
│ ├── singlevalue.t
│ ├── required_only_on_reps.yml
│ ├── datetime_parser.t
│ ├── json.t
│ ├── localize.t
│ ├── allornone_attach_errors_to_base.t
│ ├── dependon_attach_errors_to_base.t
│ ├── allornone_attach_errors_to_others.t
│ ├── dependon_attach_errors_to_others.t
│ ├── bool.t
│ ├── ascii.t
│ ├── not_word.t
│ ├── maxrange.t
│ ├── minrange.t
│ ├── not_equal.t
│ ├── range.t
│ ├── printable.t
│ └── length.t
├── i18n
│ ├── add_localize_object_from_class.yml
│ └── add_localize_object_from_class.t
├── inflators
│ ├── compounddatetime.yml
│ ├── datetime_with_constraint.yml
│ ├── compounddatetime_field_order.yml
│ ├── datetime_optional.t
│ ├── datetime_parser.t
│ ├── datetime_timezone.t
│ ├── datetime_regex.t
│ ├── datetime_regex_string.t
│ ├── datetime_with_constraint.t
│ ├── datetime_strptime.t
│ ├── array.t
│ ├── compounddatetime.t
│ └── compounddatetime_field_order.t
├── model
│ └── hashref_create_repeatable_without_nn.yml
├── repeatable
│ ├── constraints
│ │ ├── required_not_nested.yml
│ │ ├── required.yml
│ │ ├── required_not_increment_field_names.yml
│ │ ├── when.yml
│ │ ├── equal.yml
│ │ └── attach_errors_to.yml
│ ├── clone.yml
│ └── repeatable
│ │ └── constraints
│ │ └── repeatable_any.yml
├── internals
│ ├── default_args-types.yml
│ └── default_args-types.t
├── field_change_name.t
├── field_accessor_loc_arrayref.t
├── 04basic.yml
├── 05_repeated_render.t
├── multiple_text_fields.t
└── field_accessor_loc.t
├── share
└── templates
│ └── tt
│ └── xhtml
│ ├── end_form
│ ├── end_block
│ ├── non_block
│ ├── field_layout_label_text
│ ├── field_layout
│ ├── recaptcha
│ ├── repeatable
│ ├── field_layout_comment
│ ├── field_layout_javascript
│ ├── field_layout_label_field
│ ├── field_layout_textarea_field
│ ├── form
│ ├── field
│ ├── field_layout_multi_field
│ ├── field_layout_contentbutton_field
│ ├── block
│ ├── field_layout_block
│ ├── start_block
│ ├── field_layout_field
│ ├── start_form
│ ├── field_layout_label
│ ├── field_layout_select_field
│ └── field_layout_errors
├── examples
├── unicode
│ ├── root
│ │ ├── formfu
│ │ │ ├── end_form
│ │ │ ├── end_block
│ │ │ ├── non_block
│ │ │ ├── input
│ │ │ ├── checkboxgroup
│ │ │ ├── label
│ │ │ ├── recaptcha
│ │ │ ├── repeatable
│ │ │ ├── textarea_tag
│ │ │ ├── form
│ │ │ ├── start_block
│ │ │ ├── input_tag
│ │ │ ├── block
│ │ │ ├── content_button
│ │ │ ├── start_form
│ │ │ ├── multi
│ │ │ ├── select_tag
│ │ │ └── checkboxgroup_tag
│ │ ├── favicon.ico
│ │ ├── static
│ │ │ └── images
│ │ │ │ ├── catalyst_logo.png
│ │ │ │ ├── btn_120x50_built.png
│ │ │ │ ├── btn_88x31_built.png
│ │ │ │ ├── btn_88x31_powered.png
│ │ │ │ ├── btn_120x50_powered.png
│ │ │ │ ├── btn_88x31_built_shadow.png
│ │ │ │ ├── btn_120x50_built_shadow.png
│ │ │ │ ├── btn_88x31_powered_shadow.png
│ │ │ │ └── btn_120x50_powered_shadow.png
│ │ ├── index.tt
│ │ ├── forms
│ │ │ ├── view.yml
│ │ │ └── view.conf
│ │ └── view.tt
│ ├── unicode.db
│ ├── t
│ │ ├── model_DB.t
│ │ ├── view_TT.t
│ │ ├── view_TT-Alloy.t
│ │ ├── 01app.t
│ │ ├── 02pod.t
│ │ └── 03podcoverage.t
│ ├── lib
│ │ └── unicode
│ │ │ ├── View
│ │ │ ├── TT
│ │ │ │ └── Alloy.pm
│ │ │ └── TT.pm
│ │ │ ├── Schema.pm
│ │ │ ├── Schema
│ │ │ └── Unicode.pm
│ │ │ └── Model
│ │ │ └── DB.pm
│ ├── Changes
│ ├── database.sql
│ ├── README
│ ├── unicode.yml
│ ├── script
│ │ └── unicode_cgi.pl
│ └── Makefile.PL
└── vertically-aligned-css
│ ├── test.jpg
│ ├── vertically-aligned-ie.css
│ ├── vertically-aligned.pl
│ └── vertically-aligned.tt
├── benchmarks
├── login-formbuilder.conf
└── login-formfu.yml
├── .gitignore
├── MANIFEST.SKIP
├── xt
└── circular_reference.t
├── .mailmap
├── lib
└── HTML
│ └── FormFu
│ ├── Constants.pm
│ ├── I18N.pm
│ ├── Role
│ └── HasParent.pm
│ ├── Literal.pm
│ ├── Filter
│ ├── NonNumeric.pm
│ └── Whitespace.pm
│ ├── Preload.pm
│ ├── Exception
│ ├── Inflator.pm
│ ├── Validator.pm
│ ├── Constraint.pm
│ └── Transformer.pm
│ ├── Exception.pm
│ └── Constraint
│ └── Bool.pm
└── .perltidyrc
/t/bugs/yaml_utf8.txt:
--------------------------------------------------------------------------------
1 | fü
--------------------------------------------------------------------------------
/share/templates/tt/xhtml/end_form:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/examples/unicode/root/formfu/end_form:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/t/templates/field_layout:
--------------------------------------------------------------------------------
1 |
UTF8 in the template file -> ü
16 |UTF8 from the database -> [% c.model('DB').resultset('Unicode').find(1).string %]
17 | [% demo_form %] 18 | 19 | 20 | -------------------------------------------------------------------------------- /t/05_repeated_render.t: -------------------------------------------------------------------------------- 1 | use strict; 2 | use warnings; 3 | use Test::More tests => 2; 4 | 5 | use HTML::FormFu; 6 | 7 | my $form = HTML::FormFu->new( 8 | { tt_args => { INCLUDE_PATH => 'share/templates/tt/xhtml' } } ); 9 | 10 | $form->load_config_file('t/04basic.yml'); 11 | 12 | # check output is still exactly the same after rendering again 13 | 14 | { 15 | my $html = "$form"; 16 | 17 | is( $html, "$form" ); 18 | } 19 | 20 | # and after submitted form 21 | 22 | { 23 | $form->process( { age => 'abc', } ); 24 | 25 | my $html = "$form"; 26 | 27 | is( $html, "$form" ); 28 | } 29 | -------------------------------------------------------------------------------- /t/elements/reset.t: -------------------------------------------------------------------------------- 1 | use strict; 2 | use warnings; 3 | 4 | use Test::More tests => 2; 5 | 6 | use HTML::FormFu; 7 | 8 | my $form = HTML::FormFu->new( 9 | { tt_args => { INCLUDE_PATH => 'share/templates/tt/xhtml' } } ); 10 | 11 | my $field = $form->element('Reset')->name('foo'); 12 | 13 | my $field_xhtml = qq{