/[Frey]/trunk/lib/Strix/View/User.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

Contents of /trunk/lib/Strix/View/User.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 79 - (show annotations)
Thu Jul 10 10:33:04 2008 UTC (15 years, 9 months ago) by dpavlin
File size: 2998 byte(s)
try to factor out rendering into render_iterator, but it doesn't
sit well with me
1 package Strix::View::User;
2
3 use Data::Dump qw/dump/;
4
5 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 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 $self->render_as( 'view' );
33 });
34 });
35 }
36
37 warn "# _fey = ",dump( $self->_fey );
38
39 if ( $self->_fey ) {
40
41 $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 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 warn $@ if $@;
103 my $f = $self->next($out);
104 $self->set_from_hash($f);
105 $self->exec_buttons($f);
106 }
107 };
108
109 use Data::Dump qw/dump/;
110
111 use Strix::User;
112 my $m = Strix::User->meta;
113
114 foreach ( $m->get_attribute_list ) {
115 my $attr = $m->get_attribute( $_ );
116 warn ">> $_\n";
117
118 # FIXME primary key would have to be read-only!
119
120 has $_ => (
121 is => $attr->_is_metadata,
122 label => ucfirst($_),
123 required => $attr->is_required,
124 );
125
126 }
127
128 has _foo => (
129 is => 'rw',
130 label => 'Foo',
131 );
132
133 has _fey => (
134 is => 'rw',
135 label => 'Fey object',
136 isa => 'Strix::User',
137 );
138
139 1;

  ViewVC Help
Powered by ViewVC 1.1.26