/[Frey]/trunk/lib/Frey/Web/Row.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

Annotation of /trunk/lib/Frey/Web/Row.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 86 - (hide annotations)
Thu Jul 10 17:27:58 2008 UTC (15 years, 9 months ago) by dpavlin
Original Path: trunk/lib/Strix/View/User.pm
File size: 3113 byte(s)
move render_view and render_edit into own subs
1 dpavlin 63 package Strix::View::User;
2    
3 dpavlin 71 use Data::Dump qw/dump/;
4    
5 dpavlin 63 use metaclass 'Moose::Meta::Class' => (
6     attribute_metaclass => 'Continuity::Meta::Attribute::FormField'
7     );
8    
9     use Moose;
10    
11     extends 'Continuity::Widget';
12     #with 'BonusTypes';
13    
14 dpavlin 82 sub edit_delete_buttons {
15     my $self = shift;
16    
17     return unless $self->_fey;
18    
19     $self->add_button( 'Edit' => sub {
20     my $out = $self->render_edit;
21     my $f = $self->next($out);
22     my $hash = $self->set_from_hash($f);
23     $self->_fey->update( %$hash );
24     });
25    
26     $self->add_button('Delete' => sub {
27     print STDERR "delete ID @{[$self->id]}!\n";
28     $self->_fey->delete;
29     $self->next("Deleted id @{[$self->id]}!");
30     $self->render_as( 'deleted' );
31     Strix::Schema->ClearObjectCaches(); # XXX important!
32     });
33    
34     }
35    
36 dpavlin 74 sub main {
37     my ( $self ) = @_;
38    
39     if ( ! $self->_fey ) {
40     $self->add_button( 'Add' => sub {
41     my $f = shift;
42 dpavlin 82 my $hash = $self->set_from_hash($f);
43     delete( $hash->{id} ); # FIXME clear primary key
44     my $u = Strix::User->insert( %$hash );
45     warn "Inserted ",$u->id;
46     # XXX store object for later
47     $self->_fey( $u );
48     # put ID in widget, so that it know it's not new
49     $self->id( $u->id );
50     $self->render_as( 'view' );
51     $self->edit_delete_buttons;
52     $self->remove_button( 'Add' );
53 dpavlin 74 });
54 dpavlin 79 }
55 dpavlin 74
56 dpavlin 82 $self->edit_delete_buttons;
57 dpavlin 79
58 dpavlin 82 warn "# ",$self->uuid, " [", $self->id ,"] _fey = ",dump( $self->_fey );
59 dpavlin 79
60 dpavlin 74 while(1) {
61 dpavlin 79 my $out;
62     if ( $self->render_as eq 'edit' ) {
63 dpavlin 86 $out .= $self->render_edit;
64 dpavlin 79 } elsif ( $self->render_as eq 'view' ) {
65 dpavlin 86 $out .= $self->render_view;
66 dpavlin 79 } else {
67     warn "no renderer ",dump( $self->render_as ), " skipping...";
68     }
69    
70 dpavlin 74 warn $@ if $@;
71 dpavlin 82 warn ">>> ",length($out),"\n";
72 dpavlin 71 my $f = $self->next($out);
73 dpavlin 74 $self->set_from_hash($f);
74     $self->exec_buttons($f);
75     }
76 dpavlin 71 };
77    
78 dpavlin 86 sub render_edit {
79     my $self = shift;
80     warn "# render_edit ",$self->id," ",$self->uuid;
81     $self->render_iterator(
82     qq|<div class="editform">|,
83     sub {
84     #warn "# edit render_iterator ",dump( @_ );
85     my ( $name, $field_name, $label, $val ) = @_;
86     return if $name =~ /^_/;
87     return qq|
88     <div class=fieldholder>
89     <div class=label>$label</div>
90     <div class=field>
91     <input type=text id="$field_name" name="$field_name" value="$val">
92     </div>
93     </div>
94     |;
95     },
96     qq|</div>|
97     );
98     }
99    
100     sub render_view {
101     my $self = shift;
102     warn "# render_view ",$self->id," ",$self->uuid;
103     $self->render_iterator(
104     qq|<div class="view">|,
105     sub {
106     #warn "# view render_iterator ",dump( @_ );
107     my ( $name, $field_name, $label, $val ) = @_;
108     return if $name =~ /^_/;
109     return qq|
110     <div class=fieldholder>
111     <div class=label>$label</div>
112     <div class=field>$val</div>
113     </div>
114     </div>
115     |;
116     },
117     qq|</div>|
118     );
119     }
120    
121 dpavlin 63 use Data::Dump qw/dump/;
122    
123     use Strix::User;
124     my $m = Strix::User->meta;
125    
126     foreach ( $m->get_attribute_list ) {
127 dpavlin 74 my $attr = $m->get_attribute( $_ );
128 dpavlin 63 warn ">> $_\n";
129    
130 dpavlin 74 # FIXME primary key would have to be read-only!
131    
132 dpavlin 63 has $_ => (
133     is => $attr->_is_metadata,
134     label => ucfirst($_),
135     required => $attr->is_required,
136     );
137    
138     }
139    
140 dpavlin 71 has _foo => (
141 dpavlin 63 is => 'rw',
142     label => 'Foo',
143     );
144    
145 dpavlin 71 has _fey => (
146     is => 'rw',
147     label => 'Fey object',
148     isa => 'Strix::User',
149     );
150    
151 dpavlin 63 1;

  ViewVC Help
Powered by ViewVC 1.1.26