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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 95 - (hide annotations)
Fri Jul 11 10:29:31 2008 UTC (15 years, 10 months ago) by dpavlin
Original Path: trunk/lib/Frey/ObjectBrowser.pm
File size: 2720 byte(s)
added another layout, columns as third way to display tabular data
1 dpavlin 60 package Frey::ObjectBrowser;
2     use Moose;
3     use MooseX::Method;
4    
5     extends 'Frey';
6    
7     my @callbacks;
8    
9     sub gen_link {
10     my ($text, $code) = @_;
11     push @callbacks, $code;
12     return qq{<a href="?cb=$#callbacks">$text</a>};
13     }
14    
15     sub process_links {
16     my $request = shift;
17     my $cb = $request->param('cb');
18     if (exists $callbacks[$cb]) {
19     $callbacks[$cb]->($request);
20     delete $callbacks[$cb];
21     }
22     }
23    
24 dpavlin 68 #use Data::Dumper;
25     #$Data::Dumper::Deparse = 1;
26     use Data::Dump qw/dump/;
27     use Data::Structure::Util qw(unbless);
28 dpavlin 60
29 dpavlin 72
30 dpavlin 60 #method 'html' => positional(
31     # isa => 'Continuity::RequestHolder',
32     # required => 1,
33     #) => sub {
34     sub html {
35     my ( $self, $req ) = @_;
36    
37 dpavlin 89 my $f = { $req->params };
38     my $layout = delete( $f->{layout} ) || 'div';
39    
40 dpavlin 68 use Strix::User;
41     use Strix::View::User;
42 dpavlin 60
43 dpavlin 68 my $s = Strix::User->rows();
44 dpavlin 83 #warn "# s = ",dump( $s );
45 dpavlin 68
46     my @w;
47    
48     while ( my $u = $s->next ) {
49 dpavlin 82 my $w = Strix::View::User->new( %{ $u } );
50 dpavlin 72 $w->_fey( $u );
51 dpavlin 89 $w->_layout( $layout );
52 dpavlin 82 warn "# w = ",dump( $w ) if $self->debug;
53 dpavlin 68 push @w, $w;
54     }
55    
56     while ( 1 ) {
57 dpavlin 75
58 dpavlin 82 warn "# got $#w elements: ",dump( map { $_->id } @w );
59     warn "<<< GOT REQUEST ",dump( $f );
60 dpavlin 75
61 dpavlin 89 # re-apply (changed?) layout to elements
62     if ( defined $f->{layout} ) {
63     $layout = delete( $f->{layout} );
64     warn "# new layout = $layout\n";
65     }
66 dpavlin 82
67 dpavlin 95 my $rows_delimiter = '';
68     $rows_delimiter = '<hr/>' if $layout eq 'div';
69 dpavlin 89
70     my $form = join($rows_delimiter, map {
71     $_->_layout( $layout );
72     $_->process($f) || ''
73     } @w );
74    
75 dpavlin 82 if ( $w[ $#w ]->_fey ) {
76 dpavlin 89 warn "+++ added new item widget\n";
77     my $w = Strix::View::User->new( render_as => 'edit' );
78     $w->_layout( $layout );
79     $form .= $rows_delimiter . $w->process;
80     push @w, $w;
81 dpavlin 82 }
82    
83 dpavlin 89 $form = qq|<table>$form</table>| if $layout eq 'table';
84    
85 dpavlin 95 if ( $layout eq 'columns' ) {
86     # add header to table
87     my $header = $w[0]->render_iterator( sub {
88     my ( $name, $field_name, $label, $val ) = @_;
89     return if $name =~ /^_/;
90     return qq|<th>$label</th>|;
91     });
92     $form = qq|<table><tr>$header</tr>$form</table>|;
93     }
94    
95 dpavlin 94 my $layout_picker = join(' ',
96     qq|<div class="layout">layout:|,
97     map {
98     if ( $layout eq $_ ) {
99     qq|<em>$_</em>|;
100     } else {
101     qq|<a href="?layout=$_">$_</a>|;
102     }
103 dpavlin 95 } ( 'div', 'table', 'columns' ),
104 dpavlin 94 qq|</div>|,
105     );
106 dpavlin 89
107 dpavlin 72 my $doc = Continuity::Widget::DomNode->create(
108     html => [
109     head => [
110 dpavlin 78 link => { rel=>"stylesheet", href=>"/static/form.css", type=>"text/css" }
111 dpavlin 72 ],
112     body => [
113     h1 => [ 'Strix::User' ],
114 dpavlin 94 $layout_picker,
115 dpavlin 72 form => { method=>'post' } => [
116 dpavlin 75 $form,
117 dpavlin 72 ],
118     ],
119     ]
120 dpavlin 93 )->to_string;
121 dpavlin 72
122 dpavlin 93 warn ">>> $layout ",length( $doc ),"\n";
123    
124     $req->print( $doc );
125 dpavlin 68 $req->next;
126 dpavlin 72
127     $f = { $req->params };
128 dpavlin 93
129     process_links( $req );
130 dpavlin 68 }
131    
132     warn "NO WAY OUT!";
133 dpavlin 60 };
134    
135     1;

  ViewVC Help
Powered by ViewVC 1.1.26