File: form.psgi

package info (click to toggle)
libtext-xslate-perl 3.5.9-2
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 2,108 kB
  • sloc: perl: 19,756; ansic: 214; pascal: 182; makefile: 9; cs: 8
file content (83 lines) | stat: -rw-r--r-- 1,522 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#!perl -w
use strict;
use Text::Xslate qw(mark_raw);
use HTML::Shakan 0.05;
use Plack::Request;

my %vpath = (
    'form.tx' => <<'T',
<!doctype html>
<html>
<head><title>Using Form Builder</title></head>
<body>
<form>
<p>
Form:<br />
<: $form :>
<input type="submit" />
</p>
: if $errors.size() > 0 {
<p class="error">
Errors (<: $errors.size() :>):<br />
: for $errors -> $e {
    <: $e :><br />
: }
</p>
: }
</form>
</body>
</html>
T
);

my $tx  = Text::Xslate->new(
    path         => \%vpath,
    verbose      => 2,
    warn_handler => \&Carp::croak,
    cache        => 0,
);

{
    package My::Form;
    use HTML::Shakan::Declare;

    form 'add' => (
        TextField(
            name     => 'name',
            label    => 'name: ',
            required => 1,
        ),
        EmailField(
            name     => 'email',
            label    => 'email: ',
            required => 1,
        ),
    );
}

return sub {
    my($env) = @_;
    my $req  = Plack::Request->new($env);

    my $shakan = My::Form->get( add => ( request => $req) );

    my @errors;
    if($shakan->has_error) {
        $shakan->load_function_message('en');
        @errors = $shakan->get_error_messages();
    }

    my $res = $req->new_response(
        200,
        [ content_type => 'text/html; charset=utf8' ],
    );

    my $form = mark_raw( $shakan->render() );
    my $body = $tx->render('form.tx', { form => $form, errors => \@errors });
    utf8::encode($body);
    $res->body( $body );
    return $res->finalize();

};