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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 79 - (hide annotations)
Thu Jul 10 10:33:04 2008 UTC (15 years, 8 months ago) by dpavlin
Original Path: trunk/lib/Strix/View/User.pm
File size: 2998 byte(s)
try to factor out rendering into render_iterator, but it doesn't
sit well with me
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 74 sub main {
15     my ( $self ) = @_;
16    
17     if ( ! $self->_fey ) {
18     $self->add_button( 'Add' => sub {
19     warn "## Add button callback ",dump( @_ );
20     my $f = shift;
21     # my $out = $self->render_edit;
22     # my $f = $self->next($out);
23     warn "## my uuid ",$self->uuid;
24     $self->set_from_hash($f, sub {
25     warn "## inside set_from_hash ",dump( @_ );
26     my $hash = shift || die "no hash?";
27     delete( $hash->{id} ); # FIXME clear primary key
28     # $hash->{id} = undef;
29     my $u = Strix::User->insert( %$hash );
30     warn "Inserted ",$u->id;
31     $self->_fey( $u );
32 dpavlin 79 $self->render_as( 'view' );
33 dpavlin 74 });
34     });
35 dpavlin 79 }
36 dpavlin 74
37 dpavlin 79 warn "# _fey = ",dump( $self->_fey );
38    
39     if ( $self->_fey ) {
40    
41 dpavlin 74 $self->add_button( 'Edit' => sub {
42     my $out = $self->render_edit;
43     my $f = $self->next($out);
44     $self->set_from_hash($f, sub {
45     warn "## inside set_from_hash ",dump( @_ );
46     my $hash = shift || die "no hash?";
47     $self->_fey->update( %$hash );
48     });
49     });
50    
51     $self->add_button('Delete' => sub {
52     print STDERR "delete ID @{[$self->id]}!\n";
53     $self->_fey->delete;
54     $self->next("Deleted id @{[$self->id]}!");
55     $self->render_as( 'deleted' );
56     Strix::Schema->ClearObjectCaches(); # XXX important!
57     });
58    
59     }
60    
61     while(1) {
62 dpavlin 79 my $out;
63     if ( $self->render_as eq 'edit' ) {
64     $out = $self->render_iterator(
65     qq|<div class="editform">|,
66     sub {
67     #warn "# edit render_iterator ",dump( @_ );
68     my ( $name, $field_name, $label, $val ) = @_;
69     return if $name =~ /^_/;
70     return qq|
71     <div class=fieldholder>
72     <div class=label>$label</div>
73     <div class=field>
74     <input type=text id="$field_name" name="$field_name" value="$val">
75     </div>
76     </div>
77     |;
78     },
79     qq|</div>|
80     );
81     } elsif ( $self->render_as eq 'view' ) {
82     $out = $self->render_iterator(
83     qq|<div class="view">|,
84     sub {
85     #warn "# view render_iterator ",dump( @_ );
86     my ( $name, $field_name, $label, $val ) = @_;
87     return if $name =~ /^_/;
88     return qq|
89     <div class=fieldholder>
90     <div class=label>$label</div>
91     <div class=field>$val</div>
92     </div>
93     </div>
94     |;
95     },
96     qq|</div>|
97     );
98     } else {
99     warn "no renderer ",dump( $self->render_as ), " skipping...";
100     }
101    
102 dpavlin 74 warn $@ if $@;
103 dpavlin 71 my $f = $self->next($out);
104 dpavlin 74 $self->set_from_hash($f);
105     $self->exec_buttons($f);
106     }
107 dpavlin 71 };
108    
109 dpavlin 63 use Data::Dump qw/dump/;
110    
111     use Strix::User;
112     my $m = Strix::User->meta;
113    
114     foreach ( $m->get_attribute_list ) {
115 dpavlin 74 my $attr = $m->get_attribute( $_ );
116 dpavlin 63 warn ">> $_\n";
117    
118 dpavlin 74 # FIXME primary key would have to be read-only!
119    
120 dpavlin 63 has $_ => (
121     is => $attr->_is_metadata,
122     label => ucfirst($_),
123     required => $attr->is_required,
124     );
125    
126     }
127    
128 dpavlin 71 has _foo => (
129 dpavlin 63 is => 'rw',
130     label => 'Foo',
131     );
132    
133 dpavlin 71 has _fey => (
134     is => 'rw',
135     label => 'Fey object',
136     isa => 'Strix::User',
137     );
138    
139 dpavlin 63 1;

  ViewVC Help
Powered by ViewVC 1.1.26