r21159@ares (orig r846): edenc | 2008-08-18 16:41:52 -0300
[catagits/Reaction.git] / lib / Reaction / UI / Widget / ListView.pm
CommitLineData
7adfd53f 1package Reaction::UI::Widget::ListView;
2
3use Reaction::UI::WidgetClass;
7adfd53f 4
bae75bee 5use namespace::clean -except => [ qw(meta) ];
6extends 'Reaction::UI::Widget::Collection::Grid';
7adfd53f 7
664d660c 8
8cc0103d 9
bae75bee 10after fragment widget {
11 arg pager_obj => $_{viewport}->pager;
12};
b8faba69 13
bae75bee 14implements fragment pager_fragment {
15 my $pager = $_{pager_obj};
16 if( $pager->last_page > $pager->first_page ) {
17 render 'pager';
18 }
19};
b8faba69 20
bae75bee 21implements fragment actions {
22 render action => over $_{viewport}->actions;
23};
49170400 24
bae75bee 25implements fragment action {
26 render 'viewport';
27};
b8faba69 28
bae75bee 29after fragment header_cells {
30 if ($_{viewport}->object_action_count) {
31 render 'header_action_cell';
32 }
33};
664d660c 34
bae75bee 35around fragment header_cell {
36 arg order_uri => event_uri {
37 order_by => $_,
38 order_by_desc => ((($_{viewport}->order_by||'') ne $_
39 || $_{viewport}->order_by_desc) ? 0 : 1)
664d660c 40 };
bae75bee 41 call_next;
42};
664d660c 43
bae75bee 44implements fragment header_action_cell {
45 arg col_count => $_{viewport}->object_action_count;
46};
664d660c 47
bae75bee 48implements fragment page_list {
49 render numbered_page_fragment
50 => over [ $_{pager_obj}->first_page .. $_{pager_obj}->last_page ];
51};
664d660c 52
bae75bee 53implements fragment numbered_page_fragment {
54 arg page_uri => event_uri { page => $_ };
55 arg page_number => $_;
56 if ($_{pager_obj}->current_page == $_) {
57 render 'numbered_page_this_page';
58 } else {
59 render 'numbered_page';
60 }
61};
664d660c 62
bae75bee 63implements fragment first_page {
64 arg page_uri => event_uri { page => $_{pager_obj}->first_page };
65 arg page_name => 'First';
66 render 'named_page';
67};
664d660c 68
bae75bee 69implements fragment last_page {
70 arg page_uri => event_uri { page => $_{pager_obj}->last_page };
71 arg page_name => 'Last';
72 render 'named_page';
73};
7adfd53f 74
bae75bee 75implements fragment next_page {
76 arg page_name => 'Next';
77 if (my $page = $_{pager_obj}->next_page) {
78 arg page_uri => event_uri { page => $page };
79 render 'named_page';
80 } else {
81 render 'named_page_no_page';
82 }
7adfd53f 83};
84
bae75bee 85implements fragment previous_page {
86 arg page_name => 'Previous';
87 if (my $page = $_{pager_obj}->previous_page) {
88 arg page_uri => event_uri { page => $page };
89 render 'named_page';
90 } else {
91 render 'named_page_no_page';
92 }
93};
94
95__PACKAGE__->meta->make_immutable;
96
97
7adfd53f 981;
49170400 99
100__END__;
101
102=head1 NAME
103
104Reaction::UI::Widget::ListView
105
106=head1 DESCRIPTION
107
108This class is a subclass of L<Reaction::UI::ViewPort::Collection::Grid>
109
110=head1 FRAGMENTS
111
112=head2 widget
113
114Additional arguments available:
115
116=over 4
117
118=item B<pager_obj> - The C<pager> object of the viewport
119
120=back
121
122=head2 actions
123
124Render the C<action> fragment for every action in the viewport.
125
126=head2 action
127
128Renders the C<action> viewport passed
129
130=head2 header_cells
131
132Adds a modifier to render the actions column after the data columns
133
134=head2 header_cell
135
136Modify the header_cell fragment to add support for ordering
137
138Additional arguments available:
139
140=over 4
141
142=item B<order_uri> - A URI to the collection view which will order the members
143using this field. Will toggle ascending / descending order.
144
145=back
146
147=head2 header_action_cell
148
149Additional arguments available:
150
151=over 4
152
153=item B<col_count> - Column width to span
154
155=back
156
157=head2 page_list
158
159Will sequentially render a C<numbered_page_fragment> for every page available in
160 the pager object
161
162=head2 numbered_page_fragment
163
164Renders a link pointing to the different pages in the pager object. If the current
165page number is equal to the page number for the page being rendered then the
166template block C<numbered_page_this_page> is called instead of C<numbered_page>
167
168Additional arguments available:
169
170=over 4
171
172=item B<page_uri> - The URI to the page
173
174=item B<page_number> - The number of the page
175
176=back
177
178=head2 first_page
179
180=head2 last_page
181
182=head2 next_page
183
184=head2 previous_page
185
186Render links to the first, last, next and previous pages, respectively. All four will
187render as the C<named_page> template fragment, unless the current page is the last
188and/or first page, in which case the first and last fragments will render as
189C<named_page_no_page>
190
191Additional arguments available:
192
193=over 4
194
195=item B<page_uri> - The URI to the page
196
197=item B<page_number> - The label of the page (First / Last / Next / Previous)
198
199=back
200
201
202=head1 AUTHORS
203
204See L<Reaction::Class> for authors.
205
206=head1 LICENSE
207
208See L<Reaction::Class> for the license.
209
210=cut