--- trunk/lib/Frey/Action.pm 2008/12/09 20:31:43 783 +++ trunk/lib/Frey/Action.pm 2009/01/06 23:42:59 950 @@ -12,6 +12,11 @@ Invoke any L object creating html for with various default parameters if not supplied at invocation. +You can force rendering of fields if you define C sub with +desired rendering as in: + + sub render_pipe { 'radio' } + =cut has 'class' => ( @@ -111,10 +116,14 @@ warn "# $class config = ",dump( $params_config ) if $self->debug; my $form; + my $form_id = $class; + $form_id =~ s{\W+}{_}g; sub select_values { my ( $name, $attr_type, $values ) = @_; + $attr_type ||= '?' and warn "$name doesn't have attr_type"; + my $max_value_len = 0; my @values; my $html = ''; @@ -127,8 +136,10 @@ } warn "# max_value_len: $max_value_len"; + my $render = eval $class . '->render_' . $name; + warn "## render $@"; - if ( $#values > 3 ) { + if ( $#values > 3 && $render !~ m{radio} ) { my $options = join("\n", map { qq||; @@ -153,6 +164,18 @@ $delimiter |) } @values ); + if ( $radio ) { + + my $size = int( $max_value_len / $self->input_step_size ) + 1; + $size = 5 if $size > 5; + $size *= $self->input_step_size; + $radio .= qq| + + + + + |; + } $html = qq|
$radio
|; } @@ -161,6 +184,7 @@ $html } + foreach my $checkbox ( split(/\s+/, $default->{'frey-checkboxes'} ) ) { next if defined $default->{ $checkbox }; @@ -175,6 +199,7 @@ foreach my $name ( grep { + die "$_ doesn't have meta" unless $class->can('meta'); ! $class->meta->get_attribute($_)->is_lazy && ! defined $default->{$_} && ! m{^_} # skip _private @@ -208,7 +233,7 @@ 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 ) { + } elsif ( $attr_type !~ m{^(Str|Int)$} || $value =~ $Frey::Web::re_html || $name =~ m{text} ) { $value_html = qq||; } @@ -226,6 +251,8 @@ } $form .= qq|| if @checkboxes; + $self->add_js('static/Frey/Action.js'); + $self->add_css(qq| label,input { display: block; @@ -233,6 +260,10 @@ margin-bottom: 10px; } + input:focus { + border-color: #cc0; + } + label { text-align: right; width: ${label_width}ex; @@ -251,7 +282,7 @@ $html = qq|

$class params

-
+ $form