/[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

Contents of /trunk/lib/Frey/Web/Layout.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 148 - (show 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 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 sub _render_callbacks {
30 my $self = shift;
31 return $self->render_callbacks if $self->can('render_callbacks');
32 ''
33 }
34
35 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 return qq|<tr class="editform">$out<td>| . $self->_render_callbacks . qq|</td></tr>| if $self->layout eq 'columns';
74
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 return qq|<tr>$out<td>| . $self->_render_callbacks . qq|</td></tr>| if $self->layout eq 'columns';
111 $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 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 }
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