/[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 82 by dpavlin, Thu Jul 10 15:29:01 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  use Data::UUID;  use Data::UUID;
21  use Moose;  use Moose;
22  with 'Continuity::Coro::Moose';  with 'Continuity::Coro::Moose';
# Line 31  has 'uuid'   => ( Line 32  has 'uuid'   => (
32    default => sub { Data::UUID->new->create_str }    default => sub { Data::UUID->new->create_str }
33  );  );
34    
35    has render_as => ( is => 'rw', isa => 'Str', required => 1, default => 'view' );
36    
37  # Given a name generate a unique field ID  # Given a name generate a unique field ID
38  sub field_name {  sub field_name {
39    my ($self, $name) = @_;    my ($self, $name) = @_;
40    return $self->uuid . '-' . $name;    return $self->uuid . '-' . $name;
41  }  }
42    
43    sub render_iterator {
44            my ($self, $before, $iterator, $after) = @_;
45            my %attrmap = %{ $self->meta->get_attribute_map };
46            my $middle;
47            while( my ($name, $attr) = each %attrmap ) {
48                    my $reader = $attr->get_read_method;
49                    my $val = $self->$reader || '';
50                    my $field_name = $self->field_name($name);
51                    $middle .= $iterator->( $name, $field_name, $attr->label, $val ) || '';
52            }
53            if ( $middle ) {
54                    return $before . $middle . $self->render_buttons . $after;
55            } else {
56                    warn "iterator didn't produce output, skipping";
57                    return "<!-- empty -->";
58            }
59    }
60            
61    
62  # This renders an input form. Need to make the renderer selection dynamic  # This renders an input form. Need to make the renderer selection dynamic
63  sub render_edit {  sub render_edit {
64    my ($self) = @_;    my ($self) = @_;
65    my $out = '<div class="editform">';    my $out = '<div class="editform">';
66    my %attrmap = %{ $self->meta->get_attribute_map };    my %attrmap = %{ $self->meta->get_attribute_map };
67    while( my ($name, $attr) = each %attrmap ) {    while( my ($name, $attr) = each %attrmap ) {
68            next if $name =~ /^_/;
69      my $reader = $attr->get_read_method;      my $reader = $attr->get_read_method;
70      my $val = $self->$reader || '';      my $val = $self->$reader || '';
71      my $field_name = $self->field_name($name);      my $field_name = $self->field_name($name);
# Line 65  sub render_view { Line 88  sub render_view {
88    my $out = '<div class="view">';    my $out = '<div class="view">';
89    my %attrmap = %{ $self->meta->get_attribute_map };    my %attrmap = %{ $self->meta->get_attribute_map };
90    while( my ($name, $attr) = each %attrmap ) {    while( my ($name, $attr) = each %attrmap ) {
91            #next if $name =~ /^_/;
92      my $reader = $attr->get_read_method;      my $reader = $attr->get_read_method;
93      my $val = $self->$reader || '';      my $val = $self->$reader || '';
94      my $field_name = $self->field_name($name);      my $field_name = $self->field_name($name);
# Line 83  sub render_view { Line 107  sub render_view {
107  }  }
108    
109  sub set_from_hash {  sub set_from_hash {
110    my ($self, $f) = @_;          my ($self, $f) = @_;
111    my %attrmap = %{ $self->meta->get_attribute_map };          my %attrmap = %{ $self->meta->get_attribute_map };
112    while( my ($name, $attr) = each %attrmap ) {          my $hash;
113      my $field_name = $self->field_name($name);          while( my ($name, $attr) = each %attrmap ) {
114      if(defined $f->{$field_name}) {                  my $field_name = $self->field_name($name);
115        my $writer = $attr->get_write_method;                  if(defined $f->{$field_name}) {
116        $self->$writer($f->{$field_name});                          my $writer = $attr->get_write_method;
117      }                          $self->$writer($f->{$field_name});
118    }                          $hash->{ $name } = $f->{$field_name};
119                    }
120            }
121            warn "# set_from_hash ", $self->uuid," produced hash = ",dump( $hash ) if $hash;
122            return $hash;
123  }  }
124    
125  sub add_button {  sub add_button {
# Line 99  sub add_button { Line 127  sub add_button {
127    $self->callback->{$name} = $callback;    $self->callback->{$name} = $callback;
128  }  }
129    
130    sub remove_button {
131            my ( $self, $name ) = @_;
132            delete( $self->callback->{$name} );
133    }
134    
135  sub render_buttons {  sub render_buttons {
136    my ($self) = @_;    my ($self) = @_;
137    my $out = '';    my $out = '';
138    foreach my $name (keys %{$self->callback}) {    foreach my $name (keys %{$self->callback}) {
139      my $btn_name = $self->field_name($name);      my $btn_name = $self->field_name($name);
140      $out .= qq{      $out .= qq{
       <br>  
141        <input type="submit" name="@{[$btn_name]}" value="$name">        <input type="submit" name="@{[$btn_name]}" value="$name">
142      };      };
143    }    }
# Line 127  sub main { Line 159  sub main {
159    $self->renderer->{view} = \&render_view;    $self->renderer->{view} = \&render_view;
160    $self->renderer->{edit} = \&render_edit;    $self->renderer->{edit} = \&render_edit;
161    while(1) {    while(1) {
162      my $out = $self->renderer->{view}->($self);      my $out = $self->renderer->{ $self->render_as }->($self);
163      my $f = $self->next($out);      my $f = $self->next($out);
164      $self->set_from_hash($f);      $self->set_from_hash($f);
165      $self->exec_buttons($f);      $self->exec_buttons($f);

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

  ViewVC Help
Powered by ViewVC 1.1.26