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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 148 - (hide annotations)
Wed Jul 16 21:21:49 2008 UTC (15 years, 9 months ago) by dpavlin
File size: 3687 byte(s)
check if we can call render_callbacks
1 dpavlin 143 package Frey::Web::Layout;
2     use Moose::Role;
3    
4     =head1 NAME
5    
6     Frey::Web::Layout - display collection items in div/table/columns layout
7    
8     =cut
9    
10     use Data::Dump qw/dump/;
11    
12     use Moose::Util::TypeConstraints;
13    
14     our @LayoutsAvailable = qw( div table columns );
15     enum 'LayoutsAvailable' => @LayoutsAvailable;
16     has layout => (
17     is => 'rw',
18     isa => 'LayoutsAvailable',
19     default => 'div',
20     required => 1,
21     );
22    
23     =head2 render_edit
24    
25     my $html = $o->render_edit;
26    
27     =cut
28    
29 dpavlin 148 sub _render_callbacks {
30     my $self = shift;
31     return $self->render_callbacks if $self->can('render_callbacks');
32     ''
33     }
34    
35 dpavlin 143 sub render_edit {
36     my $self = shift;
37     warn "# render_edit ",$self->uuid, "\n";
38     my $out;
39     foreach my $name ( @{ $self->display_columns } ) {
40     next if $name =~ /^_/;
41    
42     my $field_name = $self->field_name( $name );
43     my $label = $self->field_label( $name );
44     my $val = $self->field_value( $name );
45    
46     if ( $self->layout eq 'table' ) {
47     $out .= qq|
48     <tr class="editform">
49     <td class="label">$label</td>
50     <td class="field">
51     <input type=text id="$field_name" name="$field_name" value="$val">
52     </td>
53     </tr>
54     |;
55     } elsif ( $self->layout eq 'columns' ) {
56     $out .= qq|
57     <td class="field">
58     <input type=text id="$field_name" name="$field_name" value="$val">
59     </td>
60     |;
61     } else {
62     $out .= qq|
63     <div class=fieldholder>
64     <label for="$field_name">$label</label>
65     <div class=field>
66     <input type=text id="$field_name" name="$field_name" value="$val">
67     </div>
68     </div>
69     |;
70     }
71     };
72    
73 dpavlin 148 return qq|<tr class="editform">$out<td>| . $self->_render_callbacks . qq|</td></tr>| if $self->layout eq 'columns';
74 dpavlin 143
75     $self->render_item_wrapper_class( $out, 'editform' );
76     }
77    
78     =head2 render_view
79    
80     my $html = $o->render_view;
81    
82     =cut
83    
84     sub render_view {
85     my $self = shift;
86     warn "# render_view ",$self->uuid," ", $self->layout,"\n";
87     my $out;
88     foreach my $name ( @{ $self->display_columns } ) {
89     next if $name =~ /^_/;
90    
91     my $field_name = $self->field_name( $name );
92     my $label = $self->field_label( $name );
93     my $val = $self->field_value( $name );
94    
95     $val ||= '<tt style="color: #ccc">NULL</tt>';
96    
97     if ( $self->layout eq 'table' ) {
98     $out .= qq|<tr><td>$label</td><td>$val</td></tr>|;
99     } elsif ( $self->layout eq 'columns' ) {
100     $out .= qq|<td>$val</td>|;
101     } else {
102     $out .= qq|
103     <div class=fieldholder>
104     <div class=label>$label</div>
105     <div class=field>$val</div>
106     </div>
107     |;
108     }
109     };
110 dpavlin 148 return qq|<tr>$out<td>| . $self->_render_callbacks . qq|</td></tr>| if $self->layout eq 'columns';
111 dpavlin 143 $self->render_item_wrapper_class( $out, 'view' );
112     }
113    
114     use Carp qw/carp/;
115    
116     sub render_item_wrapper_class {
117     my ( $self, $out, $class ) = @_;
118     if ( length($out) == 0 ) {
119     carp "no output, skipping";
120     return '<!-- no output -->';
121     }
122     $out =~ s/^\t+//mg; # XXX compress output
123 dpavlin 148 return $out . qq|<tr><td colspan=2>| . $self->_render_callbacks . qq|</td></tr>| if $self->layout eq 'table';
124     return qq|<div class="$class">| . $out . $self->_render_callbacks . qq|</div>|;
125 dpavlin 143 }
126    
127     sub render_table_wrapper {
128     my ( $self, $form ) = @_;
129    
130     my $layout = $self->layout;
131    
132     $form = qq|<table>$form</table>| if $layout eq 'table';
133    
134     if ( $layout eq 'columns' ) {
135     # add header to table
136     my $header;
137     foreach my $name ( @{ $self->display_columns } ) {
138     return if $name =~ /^_/;
139     my $label = $self->field_label( $name );
140     $header .= qq|<th>$label</th>|;
141     };
142     $form = qq|<table><tr>$header</tr>$form</table>|;
143     }
144    
145     return $form;
146     }
147    
148     =head2 layout_picker
149    
150     my $html = $o->layout_picker;
151    
152     =cut
153    
154     sub layout_picker {
155     my $self = shift;
156    
157     qq|<div class="layout">layout: | .
158     Frey::Web::Links->new(
159     name => 'layout',
160     current => $self->layout,
161     values => [ @LayoutsAvailable ],
162     )->links .
163     qq|</div>|
164     ;
165     }
166    
167     1;

  ViewVC Help
Powered by ViewVC 1.1.26