# NAME
HTML::Shakan - Form HTML generator/validator
# SYNOPSIS
    use HTML::Shakan;
    sub form {
        my $req = shift;
        HTML::Shakan->new(
            fields => [ @_ ],
            request => $req,
            model => 'DataModel',
        );
    }
    sub edit {
        my $req = shift;
        my $row = $model->get('user' => $req->param('id'));
        my $form = form(
            $req => (
                TextField(name => 'name', label => 'Your name', filter => [qw/WhiteSpace/]),
                EmailField(name => 'email', label => 'Your email'),
            ),
        );
        if ($req->submitted_and_valid) {
            $form->model->update($row);
            redirect('edit_thanks');
        } else {
            $form->model->fill($row);
            render(form => $form);
        }
    }
    sub add {
        my $req = shift;
        my $form = form(
            $req => (
                TextField(name => 'name', label => 'Your name'),
                EmailField(name => 'email', label => 'Your email'),
            )
        );
        if ($req->submitted_and_valid) {
            $form->model->insert($model => 'user');
            redirect('edit_thanks');
        }
        render(form => $form);
    }
    # in your template
     if ($form->has_error) { ?>
= $form->error_message() ?>
 } ?>
    
# DESCRIPTION
HTML::Shakan is yet another form generator.
THIS IS BETA.API WILL CHANGE.
# ATTRIBUTES
- custom\_validation
        form 'login' => (
            fields => [
                TextField(name => 'login_id'),
                PasswordField(name => 'login_pw'),
            ],
            custom_validation => sub {
                my $form = shift;
                if ($form->is_valid && !MyDB->retrieve($form->param('login_id'), $form->param('login_pw'))) {
                    $form->set_error('login' => 'failed');
                }
            }
        );
    You can set custom validation callback, validates the field set in the form. For example, this is useful for login form.
- submitted
    Returns true if the form has been submitted.
    This attribute will return true if a value for any known field name was submitted.
- has\_error
    Return true if request has an error.
- submitted\_and\_valid
    Shorthand for `$form->submitted && !$form->has_error`
# benchmarking
form generation
                     Rate         formfu         shakan shakan_declare
    formfu         1057/s             --           -77%           -84%
    shakan         4695/s           344%             --           -31%
    shakan_declare 6757/s           539%            44%             --
# What's shakan
Shakan is 左官 in Japanese.
If you want to know about shakan, please see [http://www.konuma-sakan.com/index2.html](http://www.konuma-sakan.com/index2.html)
左官 should pronounce 'sakan', formally. but, edokko pronounce 左官 as shakan.
# METHODS
- `my $html = $shakan->render(); :Str`
    Render form.
- `$shakan->render_field($name); :Str`
    Render partial form named `<$name`\>.
# AUTHOR
Tokuhiro Matsuno 
# SEE ALSO
[HTML::FormFu](http://search.cpan.org/perldoc?HTML::FormFu)
ToscaWidgets
# LICENSE
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.