/[Frey]/trunk/lib/Continuity/Widget.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/Continuity/Widget.pm

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

revision 70 by dpavlin, Wed Jul 9 16:36:21 2008 UTC revision 84 by dpavlin, Thu Jul 10 17:19:40 2008 UTC
# Line 17  Don't quite know what this will be yet. Line 17  Don't quite know what this will be yet.
17  =cut  =cut
18    
19  use Data::Dump qw/dump/;  use Data::Dump qw/dump/;
   
20  use Data::UUID;  use Data::UUID;
21  use Moose;  use Moose;
22  with 'Continuity::Coro::Moose';  with 'Continuity::Coro::Moose';
23    
24  # List of callbacks, buttons for now  # List of callbacks, buttons for now
25  has callback => ( is => 'rw', default => sub {{}} );  has callback => ( is => 'rw', default => sub {{}} );
26    has callback_order => ( is => 'rw', isa => 'ArrayRef', default => sub { [] });
27    
28  has renderer => ( is => 'rw', isa => 'HashRef', default => sub {{}});  has renderer => ( is => 'rw', isa => 'HashRef', default => sub {{}});
29    
# Line 33  has 'uuid'   => ( Line 33  has 'uuid'   => (
33    default => sub { Data::UUID->new->create_str }    default => sub { Data::UUID->new->create_str }
34  );  );
35    
36    has render_as => ( is => 'rw', isa => 'Str', required => 1, default => 'view' );
37    
38  # Given a name generate a unique field ID  # Given a name generate a unique field ID
39  sub field_name {  sub field_name {
40    my ($self, $name) = @_;    my ($self, $name) = @_;
41    return $self->uuid . '-' . $name;    return $self->uuid . '-' . $name;
42  }  }
43    
44    sub render_iterator {
45            my ($self, $before, $iterator, $after) = @_;
46            my %attrmap = %{ $self->meta->get_attribute_map };
47            my $middle;
48            while( my ($name, $attr) = each %attrmap ) {
49                    my $reader = $attr->get_read_method;
50                    my $val = $self->$reader || '';
51                    my $field_name = $self->field_name($name);
52                    $middle .= $iterator->( $name, $field_name, $attr->label, $val ) || '';
53            }
54            if ( $middle ) {
55                    return $before . $middle . $self->render_buttons . $after;
56            } else {
57                    warn "iterator didn't produce output, skipping";
58                    return "<!-- empty -->";
59            }
60    }
61            
62    
63  # This renders an input form. Need to make the renderer selection dynamic  # This renders an input form. Need to make the renderer selection dynamic
64  sub render_edit {  sub render_edit {
65    my ($self) = @_;    my ($self) = @_;
# Line 87  sub render_view { Line 108  sub render_view {
108  }  }
109    
110  sub set_from_hash {  sub set_from_hash {
111          my ($self, $f, $callback) = @_;          my ($self, $f) = @_;
112          my %attrmap = %{ $self->meta->get_attribute_map };          my %attrmap = %{ $self->meta->get_attribute_map };
113          my $hash;          my $hash;
114          while( my ($name, $attr) = each %attrmap ) {          while( my ($name, $attr) = each %attrmap ) {
# Line 98  sub set_from_hash { Line 119  sub set_from_hash {
119                          $hash->{ $name } = $f->{$field_name};                          $hash->{ $name } = $f->{$field_name};
120                  }                  }
121          }          }
122          warn "# hash = ",dump( $hash );          warn "# set_from_hash ", $self->uuid," produced hash = ",dump( $hash ) if $hash;
123          $callback->( $hash ) if defined $hash && defined $callback;          return $hash;
124  }  }
125    
126  sub add_button {  sub add_button {
127    my ($self, $name, $callback) = @_;    my ($self, $name, $callback) = @_;
128    $self->callback->{$name} = $callback;    $self->callback->{$name} = $callback;
129      push @{ $self->callback_order }, $name;
130      warn "## callback_order = ",dump( $self->callback_order );
131    }
132    
133    sub remove_button {
134            my ( $self, $name ) = @_;
135            delete( $self->callback->{$name} );
136  }  }
137    
138  sub render_buttons {  sub render_buttons {
139    my ($self) = @_;    my ($self) = @_;
140    my $out = '';    my $out = '';
141    foreach my $name (keys %{$self->callback}) {    foreach my $name ( @{ $self->callback_order } ) {
142      my $btn_name = $self->field_name($name);      my $btn_name = $self->field_name($name);
143      $out .= qq{      $out .= qq{
       <br>  
144        <input type="submit" name="@{[$btn_name]}" value="$name">        <input type="submit" name="@{[$btn_name]}" value="$name">
145      };      };
146    }    }
# Line 135  sub main { Line 162  sub main {
162    $self->renderer->{view} = \&render_view;    $self->renderer->{view} = \&render_view;
163    $self->renderer->{edit} = \&render_edit;    $self->renderer->{edit} = \&render_edit;
164    while(1) {    while(1) {
165      my $out = $self->renderer->{view}->($self);      my $out = $self->renderer->{ $self->render_as }->($self);
166      my $f = $self->next($out);      my $f = $self->next($out);
167      $self->set_from_hash($f);      $self->set_from_hash($f);
168      $self->exec_buttons($f);      $self->exec_buttons($f);

Legend:
Removed from v.70  
changed lines
  Added in v.84

  ViewVC Help
Powered by ViewVC 1.1.26