--- trunk/lib/Frey/Action.pm 2009/06/29 18:25:33 1113
+++ trunk/lib/Frey/Action.pm 2009/07/05 21:25:25 1171
@@ -1,8 +1,7 @@
package Frey::Action;
use Moose;
extends 'Frey::PPI';
-with 'Frey::Web';
-with 'Frey::Config';
+with 'Frey::Web', 'Frey::Config';
use Clone qw/clone/;
use Data::Dump qw/dump/;
@@ -54,7 +53,6 @@
my @required =
grep {
defined $_ && $_->can('name') &&
- ! defined( $self->params->{ $_->name } ) &&
! $_->is_lazy
}
map {
@@ -67,7 +65,10 @@
if ( $param eq 'as_hash' ) {
my $hash;
- map { $hash->{$_}++ } @required;
+ map {
+ $hash->{$_} = 1;
+ $hash->{$_} = 0 if defined $self->params->{$_};
+ } @required;
return $hash;
}
return @required if wantarray;
@@ -133,7 +134,7 @@
warn "# max_value_len: $max_value_len";
#my $render = eval $class . '->render_' . $name;
my $call = 'render_' . $name;
- my $render = $self->class->$call;
+ my $render = $self->class->$call if $self->class->can($call);
warn "## render $@";
if ( $#values > 3 && $render !~ m{radio} ) {
@@ -177,9 +178,7 @@
$html = qq|
$radio
|;
}
- return
-# qq|| .
- $html
+ return $html;
}
sub params_form {
@@ -193,7 +192,7 @@
}
my $required = $self->required('as_hash');
- if ( $required ) {
+ if ( grep { $required->{$_} } keys %$required ) {
warn $self->class, " required params ", dump( keys %$required ) if $self->debug;
} else {
warn "all params available ", dump( $self->params ), " not creating form" if $self->debug;
@@ -263,7 +262,8 @@
} elsif ( $attr->has_type_constraint && $attr->type_constraint->can('values') ) {
$value_html = $self->select_values( $name, $attr_type, $attr->type_constraint->values );
} elsif ( $class->can( $name . '_available' ) ) {
- my $available = $class->$name . '_available';
+ my $available = $name . '_available';
+ $available = $class->$available;
confess $@ if $@;
$available =~ s/^\s+//gs;
$available =~ s/\s+$//gs;
@@ -275,7 +275,7 @@
push @checkboxes, $name;
} elsif ( ! defined $value && ! $required->{$name} ) {
$value_html = qq|undef|; # FIXME if $self->debug
- } elsif ( $attr_type !~ m{^(Str|Int)$} || $value =~ $Frey::Web::re_html || $name =~ m{text} ) {
+ } elsif ( $attr_type !~ m{^(Str|Int|Email)$} || $value =~ $Frey::Web::re_html || $name =~ m{text} ) {
$value_html = qq||;
}
@@ -288,11 +288,12 @@
# warn "# required $name ", $class->meta->get_attribute( $name )->dump( 2 );
- if ( $required->{$name} ) {
+ if ( defined $required->{$name} ) {
$label_title .= qq| class="required"|;
- $value_html =~ s{(<\S+)\s}{$1 class=required };
+ my $class = 'required';
+ $class = 'required-filled' if ! $required->{$name};
+ $value_html =~ s{(<\S+)\s}{$1 class=$class };
}
- $label =~ s/_/ /g;
my $set = $name;
$set =~ s{_[^_]+$}{};
@@ -310,9 +311,10 @@
|;
}
- $label =~ s{^\Q$set\E\s+}{};
+ $label =~ s{^\Q$set\E_+}{};
}
+ $label = $self->_label( $label );
$form .= qq|$before$value_html $after|;
my $ll = length($label);
$label_width = $ll if $ll > $label_width;
@@ -349,6 +351,10 @@
select.required {
border-color: #c00;
}
+ input.required-filled,
+ select.required-filled {
+ border-color: #0c0;
+ }
br {
clear: left;
@@ -366,13 +372,27 @@
# http://www.quirksmode.org/oddsandends/forms.html
# $form =~ s{<([^>]+)(name=")([^"]+)(")([^>]*)>}{<$1$2$3$4 id="$3" $5}gs;
- $html = qq|
- $class params
-
- | if $form;
+ if ( $form ) {
+
+ if ( $self->class->can('form_header') ) {
+ $html = $self->class->form_header;
+ } else {
+ $html = qq|
+ $class params
+ |;
+ }
+
+ my $submit = $self->_label( 'submit' );
+ $submit =~ s{^submit$}{Run $class};
+
+ $html .= qq|
+
+ |;
+ $html .= $self->class->form_footer if $self->class->can('form_footer');
+ }
$self->add_status({
$self->class => {
@@ -382,14 +402,30 @@
},
});
+ $self->title( $self->class->title ) if $self->class->title;
+
return ($html,$default) if wantarray;
return $html;
}
+sub _label {
+ my ($self,$name) = @_;
+ my $labels = $self->class->form_labels if $self->class->can('form_labels');
+ my $label = $labels->{$name};
+ if ( ! defined $label ) {
+ $label = $name;
+ $label =~ s{_}{ }g;
+ }
+ return $label;
+}
+
=head1 SEE ALSO
L for info on CSS2 forms
=cut
+__PACKAGE__->meta->make_immutable;
+no Moose;
+
1;