/[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 143 - (show annotations)
Wed Jul 16 14:17:46 2008 UTC (15 years, 9 months ago) by dpavlin
File size: 3566 byte(s)
huge refactor of code into more distinct classes

- Frey::Collection is now generally reusable from browser and designer
- Frey::Web::Item is now (bare) class instead of role
- Frey::Web::Layout now encapsulates different layouts for items
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_edit {
30 my $self = shift;
31 warn "# render_edit ",$self->uuid, "\n";
32 my $out;
33 foreach my $name ( @{ $self->display_columns } ) {
34 next if $name =~ /^_/;
35
36 my $field_name = $self->field_name( $name );
37 my $label = $self->field_label( $name );
38 my $val = $self->field_value( $name );
39
40 if ( $self->layout eq 'table' ) {
41 $out .= qq|
42 <tr class="editform">
43 <td class="label">$label</td>
44 <td class="field">
45 <input type=text id="$field_name" name="$field_name" value="$val">
46 </td>
47 </tr>
48 |;
49 } elsif ( $self->layout eq 'columns' ) {
50 $out .= qq|
51 <td class="field">
52 <input type=text id="$field_name" name="$field_name" value="$val">
53 </td>
54 |;
55 } else {
56 $out .= qq|
57 <div class=fieldholder>
58 <label for="$field_name">$label</label>
59 <div class=field>
60 <input type=text id="$field_name" name="$field_name" value="$val">
61 </div>
62 </div>
63 |;
64 }
65 };
66
67 return qq|<tr class="editform">$out<td>| . $self->render_callbacks . qq|</td></tr>| if $self->layout eq 'columns';
68
69 $self->render_item_wrapper_class( $out, 'editform' );
70 }
71
72 =head2 render_view
73
74 my $html = $o->render_view;
75
76 =cut
77
78 sub render_view {
79 my $self = shift;
80 warn "# render_view ",$self->uuid," ", $self->layout,"\n";
81 my $out;
82 foreach my $name ( @{ $self->display_columns } ) {
83 next if $name =~ /^_/;
84
85 my $field_name = $self->field_name( $name );
86 my $label = $self->field_label( $name );
87 my $val = $self->field_value( $name );
88
89 $val ||= '<tt style="color: #ccc">NULL</tt>';
90
91 if ( $self->layout eq 'table' ) {
92 $out .= qq|<tr><td>$label</td><td>$val</td></tr>|;
93 } elsif ( $self->layout eq 'columns' ) {
94 $out .= qq|<td>$val</td>|;
95 } else {
96 $out .= qq|
97 <div class=fieldholder>
98 <div class=label>$label</div>
99 <div class=field>$val</div>
100 </div>
101 |;
102 }
103 };
104 return qq|<tr>$out<td>| . $self->render_callbacks . qq|</td></tr>| if $self->layout eq 'columns';
105 $self->render_item_wrapper_class( $out, 'view' );
106 }
107
108 use Carp qw/carp/;
109
110 sub render_item_wrapper_class {
111 my ( $self, $out, $class ) = @_;
112 if ( length($out) == 0 ) {
113 carp "no output, skipping";
114 return '<!-- no output -->';
115 }
116 $out =~ s/^\t+//mg; # XXX compress output
117 return $out . qq|<tr><td colspan=2>| . $self->render_callbacks . qq|</td></tr>| if $self->layout eq 'table';
118 return qq|<div class="$class">| . $out . $self->render_callbacks . qq|</div>|;
119 }
120
121 sub render_table_wrapper {
122 my ( $self, $form ) = @_;
123
124 my $layout = $self->layout;
125
126 $form = qq|<table>$form</table>| if $layout eq 'table';
127
128 if ( $layout eq 'columns' ) {
129 # add header to table
130 my $header;
131 foreach my $name ( @{ $self->display_columns } ) {
132 return if $name =~ /^_/;
133 my $label = $self->field_label( $name );
134 $header .= qq|<th>$label</th>|;
135 };
136 $form = qq|<table><tr>$header</tr>$form</table>|;
137 }
138
139 return $form;
140 }
141
142 =head2 layout_picker
143
144 my $html = $o->layout_picker;
145
146 =cut
147
148 sub layout_picker {
149 my $self = shift;
150
151 qq|<div class="layout">layout: | .
152 Frey::Web::Links->new(
153 name => 'layout',
154 current => $self->layout,
155 values => [ @LayoutsAvailable ],
156 )->links .
157 qq|</div>|
158 ;
159 }
160
161 1;

  ViewVC Help
Powered by ViewVC 1.1.26