/[Frey]/trunk/lib/Frey/Action.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /trunk/lib/Frey/Action.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 480 by dpavlin, Thu Nov 20 14:39:43 2008 UTC revision 595 by dpavlin, Fri Nov 28 17:18:56 2008 UTC
# Line 103  sub params_form { Line 103  sub params_form {
103    
104          my $form;          my $form;
105    
106            sub select_values {
107                    my ( $name, $attr_type, $values ) = @_;
108                    my $options = join("\n",
109                            map {
110                                    my $v = ref($_) eq 'HASH' ? $_->{$name} : $_;
111                                    qq|<option value="$v">$v</option>| if $v;
112                            } @$values
113                    );
114                    qq|<select title="$attr_type" name="$name">$options</select>| if $options;
115            }
116    
117          foreach my $name ( grep { ! $class->meta->get_attribute($_)->is_lazy } $self->attributes ) {          foreach my $name ( grep { ! $class->meta->get_attribute($_)->is_lazy } $self->attributes ) {
118                  my $attr_type = '';                  my $attr_type = '';
119                  my $type = $name =~ m/^pass/ ? 'password' : 'text';                  my $type = $name =~ m/^pass/ ? 'password' : 'text';
# Line 110  sub params_form { Line 121  sub params_form {
121                  my $value = '';                  my $value = '';
122                  my $label_title = '';                  my $label_title = '';
123                  my $value_html = '';                  my $value_html = '';
124    
125                    my $attr = $class->meta->get_attribute( $name );
126                    $attr_type = $attr->type_constraint->name if $attr->has_type_constraint;
127    
128                    $value = $attr->default( $name ) if ! $value && $attr->has_default;
129    
130                  if ( ref($config_params) eq 'HASH' ) {                  if ( ref($config_params) eq 'HASH' ) {
131                          $value = $config_params->{$name};                          $value = $config_params->{$name};
132                  } elsif ( ref($config_params) eq 'ARRAY' ) {                  } elsif ( ref($config_params) eq 'ARRAY' ) {
133                          $value_html = qq|<select name="$name">| . join("\n",                          $value_html = select_values( $name, $attr_type, $config_params );
                                 map {  
                                         my $v = $_->{$name};  
                                         qq|<option value="$v">$v</option>|  
                                 } @$config_params  
                         ) . qq|</select>|;  
134                          $default->{$name} = $config_params->[0]->{$name};                          $default->{$name} = $config_params->[0]->{$name};
135                  } elsif ( my $attr = $class->meta->get_attribute( $name ) ) {                  } elsif ( $attr->has_type_constraint && $attr->type_constraint->can('values') ) {
136                          if ( $attr->has_type_constraint ) {                                  $value_html = select_values( $name, $attr_type, $attr->type_constraint->values );
137                                  $attr_type = $attr->type_constraint->name;                  } elsif ( $attr_type !~ m{^(Str|Int)$} ) {
138                                  if ( $attr->type_constraint->can('values') ) {                                  $value_html = qq|<textarea name="$name" title="$attr_type">$value</textarea>|;
                                         $value_html = qq|<select name="$name">| . join("\n",  
                                                 map { qq|<option value="$_">$_</option>| } @{ $attr->type_constraint->values }  
                                         ) . qq|</select>|;  
                                 } elsif ( $attr_type !~ m{^(Str|Int)$} ) {  
                                         $value_html = qq|<textarea name="$name" title="$attr_type">$value</textarea>|;  
                                 }  
                         }  
                         $value = $attr->default( $name ) if ! $value && $attr->has_default;  
                         $label_title = qq| title="| . $attr->documentation . qq|"| if $attr->has_documentation;  
                 } else {  
                         warn "wired attribute $name";  
139                  }                  }
140                    
141                    $label_title = qq| title="| . $attr->documentation . qq|"| if $attr->has_documentation;
142    
143                  $default->{$name} = $value unless defined $default->{$name};                  $default->{$name} = $value unless defined $default->{$name};
144    
145                  $value_html = qq|<input type="$type" name="$name" title="$attr_type" value="$value">| unless $value_html;                  if ( ! $value_html ) {
146                            my $suffix = '';
147                            if ( $attr_type =~ m{^Bool$} ) {
148                                    $type = 'checkbox';
149                                    $suffix = ' checked' if $value;
150                            }
151                            $value_html = qq|<input type="$type" name="$name" title="$attr_type" value="$value"$suffix>|;
152                    }
153    
154  #               warn "# required $name ", $class->meta->get_attribute( $name )->dump( 2 );  #               warn "# required $name ", $class->meta->get_attribute( $name )->dump( 2 );
155                  $form .= qq|<label for="$name"$label_title>$label</label>| . $value_html;                  $form .= qq|<label for="$name"$label_title>$label</label>| . $value_html;
156          }          }
157          my $html = qq|<h1>$class params</h1><form method="post">$form<input type="submit" value="Run $class"></form>|;          my $html = qq|<h1>$class params</h1><form method="post">$form<input type="submit" value="Run $class"></form>|;
158          push @{ $self->status }, {          $self->add_status({
159                  $self->editor( $self->class ) => {                  $self->class => {
160                          params  => $self->params,                          params  => $self->params,
161                          config_params  => $config_params,                          config_params  => $config_params,
162                          default => $default                          default => $default
163                  },                  },
164          };          });
165    
166          return ($html,$default) if wantarray;          return ($html,$default) if wantarray;
167          return $html;          return $html;

Legend:
Removed from v.480  
changed lines
  Added in v.595

  ViewVC Help
Powered by ViewVC 1.1.26