--- trunk/lib/Frey/Action.pm 2008/12/04 17:33:39 715
+++ trunk/lib/Frey/Action.pm 2008/12/06 00:25:19 731
@@ -36,6 +36,7 @@
sub required {
my ( $self ) = @_;
$self->load_class( $self->class );
+
my @required =
grep {
defined $_ && $_->can('name') &&
@@ -97,9 +98,9 @@
my $default = clone $self->params; # XXX we really don't want to modify params!
- my $config_params = {};
- $config_params = $self->config($class);
- warn "# $class config = ",dump( $config_params ) if $self->debug;
+ my $params_config = {};
+ $params_config = $self->config($class);
+ warn "# $class config = ",dump( $params_config ) if $self->debug;
my $form;
@@ -124,6 +125,15 @@
my @checkboxes;
+ my $skip_prefix;
+ if ( $self->class->can('action') ) {
+ my $action = eval $self->class . '->action';
+ $skip_prefix->{$_}++ foreach eval $self->class .'->action_order';
+ warn "# skip_prefix = ", $self->dump( $skip_prefix );
+ }
+
+ my $label_width = 1; # minimum
+
foreach my $name (
grep {
! $class->meta->get_attribute($_)->is_lazy
@@ -145,22 +155,24 @@
$attr->has_default ? $attr->default( $name ) :
'';
- if ( ref($config_params) eq 'HASH' ) {
- $value = $config_params->{$name};
- } elsif ( ref($config_params) eq 'ARRAY' ) {
- $value_html = select_values( $name, $attr_type, $config_params );
- $default->{$name} = $config_params->[0]->{$name};
+ if ( ref($params_config) eq 'HASH' ) {
+ $value = $params_config->{$name};
+ } elsif ( ref($params_config) eq 'ARRAY' ) {
+ $value_html = select_values( $name, $attr_type, $params_config );
+ $default->{$name} = $params_config->[0]->{$name};
} elsif ( $attr->has_type_constraint && $attr->type_constraint->can('values') ) {
- $value_html = select_values( $name, $attr_type, $attr->type_constraint->values );
+ $value_html = select_values( $name, $attr_type, $attr->type_constraint->values );
} elsif ( $attr_type =~ m{^Bool} ) {
- my $suffix = '';
- $suffix = ' checked' if $value;
- $value_html = qq||;
- push @checkboxes, $name;
+ my $suffix = '';
+ $suffix = ' checked' if $value;
+ $value_html = qq||;
+ push @checkboxes, $name;
+ } elsif ( ! defined $value ) {
+ $value_html = qq|undef|; # FIXME if $self->debug
} elsif ( $attr_type !~ m{^(Str|Int)$} || $value =~ $Frey::Web::re_html ) {
- $value_html = qq||;
+ $value_html = qq||;
}
-
+
$label_title = qq| title="| . $attr->documentation . qq|"| if $attr->has_documentation;
$default->{$name} = $value unless defined $default->{$name};
@@ -168,12 +180,35 @@
$value_html = qq|| unless $value_html;
# warn "# required $name ", $class->meta->get_attribute( $name )->dump( 2 );
- $form .= qq|| . $value_html;
+ $form .= qq|$value_html
|;
+ my $ll = length($label);
+ $label_width = $ll if $ll > $label_width;
}
$form .= qq|| if @checkboxes;
+ $self->add_css(qq|
+ label,input {
+ display: block;
+ float: left;
+ margin-bottom: 10px;
+ }
+
+ label {
+ text-align: right;
+ width: ${label_width}ex;
+ padding-right: 20px;
+ }
+
+ br {
+ clear: left;
+ }
+ |);
+
my $html;
+ $form =~ s{<([^>]+)(name=")([^"]+)(")([^>]*)>}
+ {<$1$2$3$4 id="$3" $5}gs; # http://www.quirksmode.org/oddsandends/forms.html
+
$html = qq|