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