--- trunk/lib/Frey/Action.pm 2009/06/29 18:14:35 1112
+++ trunk/lib/Frey/Action.pm 2009/06/29 18:25:33 1113
@@ -102,6 +102,86 @@
=cut
+sub form_id {
+ my ($self) = @_;
+ my $form_id = $self->class;
+ $form_id =~ s{\W+}{_}g;
+ return $form_id;
+}
+
+sub select_values {
+ my ( $self, $name, $attr_type, $values ) = @_;
+
+ $attr_type ||= '?' and warn "$name doesn't have attr_type";
+
+ my $form_id = $self->form_id;
+ my $max_value_len = 0;
+ my @values;
+ my $display;
+ my $html = '';
+
+ foreach ( @$values ) {
+ my $v = ref($_) eq 'HASH' ? $_->{$name} : $_;
+ if ( $v =~ s/\t+(.+)$// ) {
+ $display->{$v} = $1;
+ }
+ warn "## value '$v'";
+ push @values, $v;
+ $max_value_len = length($v) if length($v) > $max_value_len;
+ }
+
+ warn "# max_value_len: $max_value_len";
+ #my $render = eval $class . '->render_' . $name;
+ my $call = 'render_' . $name;
+ my $render = $self->class->$call;
+ warn "## render $@";
+
+ if ( $#values > 3 && $render !~ m{radio} ) {
+ my $options = join("\n",
+ map {
+ my $d = $display->{$_} || $_;
+ qq||;
+ } @values
+ );
+ # onchange="alert(this.options[this.selectedIndex].value);"
+ $html = qq|
+
+ | if $options;
+ } else {
+ my $delimiter = $max_value_len > $self->input_step_size ? qq|
| : '';
+ my $radio =
+# $delimiter .
+ join("\n",
+ map { strip(qq|
+
+
+ $_
+
+ $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
|;
+ }
+
+ return
+# qq|| .
+ $html
+}
+
sub params_form {
my ( $self ) = @_;
@@ -132,79 +212,7 @@
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 $display;
- my $html = '';
-
- foreach ( @$values ) {
- my $v = ref($_) eq 'HASH' ? $_->{$name} : $_;
- if ( $v =~ s/\t+(.+)$// ) {
- $display->{$v} = $1;
- }
- warn "## value '$v'";
- push @values, $v;
- $max_value_len = length($v) if length($v) > $max_value_len;
- }
-
- warn "# max_value_len: $max_value_len";
- my $render = eval $class . '->render_' . $name;
- warn "## render $@";
-
- if ( $#values > 3 && $render !~ m{radio} ) {
- my $options = join("\n",
- map {
- my $d = $display->{$_} || $_;
- qq||;
- } @values
- );
- # onchange="alert(this.options[this.selectedIndex].value);"
- $html = qq|
-
- | if $options;
- } else {
- my $delimiter = $max_value_len > $self->input_step_size ? qq|
| : '';
- my $radio =
-# $delimiter .
- join("\n",
- map { strip(qq|
-
-
- $_
-
- $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
|;
- }
-
- return
-# qq|| .
- $html
- }
-
+ my $form_id = $self->form_id;
my @checkboxes;
@@ -250,16 +258,16 @@
if ( ref($params_config) eq 'HASH' && defined $params_config->{$name} ) {
$value = $params_config->{$name};
} elsif ( ref($params_config) eq 'ARRAY' ) {
- $value_html = select_values( $name, $attr_type, $params_config );
+ $value_html = $self->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 = $self->select_values( $name, $attr_type, $attr->type_constraint->values );
} elsif ( $class->can( $name . '_available' ) ) {
- my $available = eval $class . '->' . $name . '_available';
+ my $available = $class->$name . '_available';
confess $@ if $@;
$available =~ s/^\s+//gs;
$available =~ s/\s+$//gs;
- $value_html = select_values( $name, $attr_type, [ split(/\n/,$available) ]);
+ $value_html = $self->select_values( $name, $attr_type, [ split(/\n/,$available) ]);
} elsif ( $attr_type =~ m{^Bool} ) {
my $suffix = '';
$suffix = ' checked=1' if $value;