/[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 143 - (hide annotations)
Wed Jul 16 14:17:46 2008 UTC (15 years, 10 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 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     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