work in progress, listview still broken
[catagits/Reaction.git] / lib / Reaction / UI / Widget / ListView.pm
1 package Reaction::UI::Widget::ListView;
2
3 use Reaction::UI::WidgetClass;
4
5 class ListView is 'Reaction::UI::Widget::Collection::Grid', which {
6
7   after fragment widget {
8     arg pager_obj => $_{viewport}->pager;
9   };
10
11   implements fragment actions {
12     render action => over $_{viewport}->actions;
13   };
14
15   implements fragment action {
16     render 'viewport';
17   };
18
19   around fragment header_cell {
20     arg order_uri => event_uri {
21       order_by => $_,
22       order_by_desc => ((($_{viewport}->order_by||'') ne $_
23                         || $_{viewport}->order_by_desc) ? 0 : 1)
24     };
25     call_next;
26   };
27
28   after fragment header_cells {
29     if ($_{viewport}->object_action_count) {
30       render 'header_action_cell';
31     }
32   };
33
34   implements fragment header_action_cell {
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     }
83   };
84
85 };
86
87 1;