Skip to content

Commit

Permalink
Add form, template
Browse files Browse the repository at this point in the history
  • Loading branch information
gshank committed Feb 11, 2013
1 parent 2c36f48 commit b0aa941
Show file tree
Hide file tree
Showing 4 changed files with 120 additions and 1 deletion.
80 changes: 80 additions & 0 deletions lib/MyApp/Form/User.pm
@@ -0,0 +1,80 @@
package MyApp::Form::User;
use HTML::FormHandler::Moose;
extends 'HTML::FormHandler::Model::DBIC';
with 'HTML::FormHandler::Widget::Theme::BootstrapFormMessages';
with 'HTML::FormHandler::Render::RepeatableJs';

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


has_field 'user_name' => (
type => 'Text',
);

has_field 'occupation' => (
type => 'Text',
);

has_field 'country' => (
type => 'Select',
empty_select => '-- Choose a Country --',
);

has_field 'birthdate' => (
type => 'Date',
);

has_field 'opt_in' => (
type => 'Checkbox',
);

# this uses the Simple wrapper in order to use a fieldset
has_field 'addresses' => (
type => 'Repeatable',
widget_wrapper => 'Simple',
tags => { controls_div => 1 },
do_wrapper => 1,
do_label => 1,
setup_for_js => 1,
init_contains => {
widget_wrapper => 'Simple',
tags => { wrapper_tag => 'fieldset', controls_div => 1 },
wrapper_class => ['well'],
},
);

has_field 'addresses.remove' => (
type => 'RmElement',
element_class => ['btn-mini'],
html => '<i class="icon-remove"></i>',
tags => { after_wrapper => '<br />' },
);

has_field 'addresses.street' => (
type => 'Text',
);

has_field 'addresses.city' => (
type => 'Text',
);

has_field 'addresses.country' => (
type => 'Select',
empty_select => '-- Choose a Country --',
);

has_field 'add_address' => (
type => 'AddElement',
value => 'Add Address',
repeatable => 'addresses',
);

has_field 'save' => (
type => 'Submit',
value => 'Save',
element_class => ['btn', 'btn-primary']
);



1;
4 changes: 3 additions & 1 deletion root/user/edit.tt
@@ -1,4 +1,6 @@
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js" ></script>
<script src="/static/js/jquery-1.7.1.min.js" type="text/javascript"></script>
[% form.render_repeatable_js %]

<div class="span4">
[% form.render %]
</div>
15 changes: 15 additions & 0 deletions t/book.t
@@ -0,0 +1,15 @@
use strict;
use warnings;
use Test::More;

use_ok('MyApp::Schema');

my $schema = MyApp::Schema->connect('dbi:SQLite:db/book.db');
is( ref( $schema ), 'MyApp::Schema', 'correct schema' );
my $book_rs = $schema->resultset('Book');
is( ref( $book_rs ), 'DBIx::Class::ResultSet', 'correct resultset' );
my $book = $book_rs->find(1);
is( ref( $book ), 'MyApp::Schema::Result::Book', 'correct book' );


done_testing;
22 changes: 22 additions & 0 deletions t/form_user.t
@@ -0,0 +1,22 @@
use strict;
use warnings;
use Test::More;

use_ok( 'MyApp::Form::User' );

use MyApp::Schema;

my $schema = MyApp::Schema->connect('dbi:SQLite:db/book.db');

my $user = $schema->resultset('User')->find(1);

my $form = MyApp::Form::User->new;
$form->process( item => $user, params => {} );

my $rendered = $form->render_repeatable_js;
ok( $rendered, 'rendered repeatable js' );

$rendered = $form->render;
diag( $rendered );

done_testing;

0 comments on commit b0aa941

Please sign in to comment.