/[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 69 by dpavlin, Wed Jul 9 15:45:59 2008 UTC revision 79 by dpavlin, Thu Jul 10 10:33:04 2008 UTC
# Line 16  Don't quite know what this will be yet. Line 16  Don't quite know what this will be yet.
16    
17  =cut  =cut
18    
19    use Data::Dump qw/dump/;
20    
21  use Data::UUID;  use Data::UUID;
22  use Moose;  use Moose;
23  with 'Continuity::Coro::Moose';  with 'Continuity::Coro::Moose';
# Line 31  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) = @_;
66    my $out = '<div class="editform">';    my $out = '<div class="editform">';
67    my %attrmap = %{ $self->meta->get_attribute_map };    my %attrmap = %{ $self->meta->get_attribute_map };
68    while( my ($name, $attr) = each %attrmap ) {    while( my ($name, $attr) = each %attrmap ) {
69            next if $name =~ /^_/;
70      my $reader = $attr->get_read_method;      my $reader = $attr->get_read_method;
71      my $val = $self->$reader || '';      my $val = $self->$reader || '';
72      my $field_name = $self->field_name($name);      my $field_name = $self->field_name($name);
# Line 65  sub render_view { Line 89  sub render_view {
89    my $out = '<div class="view">';    my $out = '<div class="view">';
90    my %attrmap = %{ $self->meta->get_attribute_map };    my %attrmap = %{ $self->meta->get_attribute_map };
91    while( my ($name, $attr) = each %attrmap ) {    while( my ($name, $attr) = each %attrmap ) {
92            #next if $name =~ /^_/;
93      my $reader = $attr->get_read_method;      my $reader = $attr->get_read_method;
94      my $val = $self->$reader || '';      my $val = $self->$reader || '';
95      my $field_name = $self->field_name($name);      my $field_name = $self->field_name($name);
# Line 83  sub render_view { Line 108  sub render_view {
108  }  }
109    
110  sub set_from_hash {  sub set_from_hash {
111    my ($self, $f) = @_;          my ($self, $f, $callback) = @_;
112    my %attrmap = %{ $self->meta->get_attribute_map };          my %attrmap = %{ $self->meta->get_attribute_map };
113    while( my ($name, $attr) = each %attrmap ) {          my $hash;
114      my $field_name = $self->field_name($name);          while( my ($name, $attr) = each %attrmap ) {
115      if(defined $f->{$field_name}) {                  my $field_name = $self->field_name($name);
116        my $writer = $attr->get_write_method;                  if(defined $f->{$field_name}) {
117        $self->$writer($f->{$field_name});                          my $writer = $attr->get_write_method;
118      }                          $self->$writer($f->{$field_name});
119    }                          $hash->{ $name } = $f->{$field_name};
120                    }
121            }
122            warn "# hash = ",dump( $hash );
123            $callback->( $hash ) if defined $hash && defined $callback;
124  }  }
125    
126  sub add_button {  sub add_button {
# Line 127  sub main { Line 156  sub main {
156    $self->renderer->{view} = \&render_view;    $self->renderer->{view} = \&render_view;
157    $self->renderer->{edit} = \&render_edit;    $self->renderer->{edit} = \&render_edit;
158    while(1) {    while(1) {
159      my $out = $self->renderer->{view}->($self);      my $out = $self->renderer->{ $self->render_as }->($self);
160      my $f = $self->next($out);      my $f = $self->next($out);
161      $self->set_from_hash($f);      $self->set_from_hash($f);
162      $self->exec_buttons($f);      $self->exec_buttons($f);

Legend:
Removed from v.69  
changed lines
  Added in v.79

  ViewVC Help
Powered by ViewVC 1.1.26