[Catalyst] HTML Widgets!

Will Hawes info at whawes.co.uk
Fri Dec 2 18:29:56 CET 2005


> Some more HTML::Widget goodness, fresh from trunk... :)
>
>      http://dev.catalyst.perl.org/repos/Catalyst/trunk/HTML-Widget
>
>
>
>      use HTML::Widget;
>
>      # You can naturally use the validator without form generation!
>      my $w1 = HTML::Widget->new;
>      $w1->constraint( 'Integer', 'age' );
>      $w1->constraint( 'Alternative', 'age', 'name' );
>      my $form = $w1->process($query);
>      my @errors = $form->errors;
>
>
>      # Or only generate forms
>      my $w2 = HTML::Widget->new( { name => 'w2', action => '/foo' } );
>      $w2->element( 'Textfield', 'age' )->label('Age')->size(3);
>      $w2->element( 'Textfield', 'name' )->label('Name')->size(60);
>      my $form = $w2->process;
>      print "$form";
>
>
>      # Why not merge our widgets for both?
>      $w1->merge($w2);
>
>
>      # Now this is really cool, multiple embedded widgets (using
> <fieldset>)
>      my $w3 = HTML::Widget->new( { name   => 'w3' } );
>      $w3->element( 'Textarea', 'story' )->label('Story');
>      $w3->constraint( 'ASCII', 'story' );
>      my $container = HTML::Widget->new( { action => '/baz' } );
>      $w1->name('w1');
>      $container->embed( $w1, $w3 );
>      $form = $container->process($query);
>
>
> The generated XML will look like this example: (easy to style with css)
>
>      <form action="/baz" id="widget" method="post">
>          <fieldset id="widget_w1">
>              <label for="widget_w1_age" id="widget_w1_age_label">Age</
> label>
>              <input id="widget_widget_age" name="age" size="3"
> type="textfield" />
>              <label for="widget_widget_name"
> id="widget_widget_name_label">Name</label>
>              <input id="widget_widget_name" name="name" size="60"
> type="textfield" />
>          </fieldset>
>          <fieldset id="widget_w3"><label for="widget_w3_story"
> id="widget_w3_story_label">Story</label>
>              <textarea id="widget_w3_story" name="story"></textarea>
>              <span class="errors" id="widget_story_errors">
>                  <span class="ASCII_errors"
> id="widget_story_error_ASCII">Some useful Error message.</span>
>              </span>
>          </fieldset>
>      </form>
>
>
> These are just very basic examples, you could also create element
> classes with built-in constraints, js-validators or ajax... :)
>
>
> --
> sebastian

It all looks good. Do you now prefer this approach over DBIx::Class::WebForm?




More information about the Catalyst mailing list