X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FReaction%2FUI%2FWidget%2FListView.pm;h=cfd802854c6e335318e4c81c232c1d4e28b4ad0d;hb=664d660c64b882714d87f3a8dc7491723042ae0c;hp=9c525ee0fd7725a53a08acb3f82ab5db57ff54b2;hpb=e22de1011c40b639cc4b6e5586a9e0defe855285;p=catagits%2FReaction.git diff --git a/lib/Reaction/UI/Widget/ListView.pm b/lib/Reaction/UI/Widget/ListView.pm index 9c525ee..cfd8028 100644 --- a/lib/Reaction/UI/Widget/ListView.pm +++ b/lib/Reaction/UI/Widget/ListView.pm @@ -3,11 +3,84 @@ package Reaction::UI::Widget::ListView; use Reaction::UI::WidgetClass; class ListView is 'Reaction::UI::Widget::GridView', which { -# widget renders [ qw/pager header rows footer/ -# => { viewport => func('self', 'viewport') } -# ]; -# header_cell renders [ string { $_ } ]; + after fragment widget { + arg pager_obj => $_{viewport}->pager; + }; + + implements fragment actions { + render action => over $_{viewport}->actions; + }; + + implements fragment action { + render 'viewport'; + }; + + around fragment header_cell { + arg order_uri => event_uri { + order_by => $_, + order_by_desc => ((($_{viewport}->order_by||'') ne $_ + || $_{viewport}->order_by_desc) ? 0 : 1) + }; + call_next; + }; + + after fragment header_cells { + if ($_{viewport}->object_action_count) { + render 'header_action_cell'; + } + }; + + implements fragment header_action_cell { + arg col_count => $_{viewport}->object_action_count; + }; + + implements fragment page_list { + render numbered_page_fragment + => over [ $_{pager_obj}->first_page .. $_{pager_obj}->last_page ]; + }; + + implements fragment numbered_page_fragment { + arg page_uri => event_uri { page => $_ }; + arg page_number => $_; + if ($_{pager_obj}->current_page == $_) { + render 'numbered_page_this_page'; + } else { + render 'numbered_page'; + } + }; + + implements fragment first_page { + arg page_uri => event_uri { page => $_{pager_obj}->first_page }; + arg page_name => 'First'; + render 'named_page'; + }; + + implements fragment last_page { + arg page_uri => event_uri { page => $_{pager_obj}->last_page }; + arg page_name => 'Last'; + render 'named_page'; + }; + + implements fragment next_page { + arg page_name => 'Next'; + if (my $page = $_{pager_obj}->next_page) { + arg page_uri => event_uri { page => $page }; + render 'named_page'; + } else { + render 'named_page_no_page'; + } + }; + + implements fragment previous_page { + arg page_name => 'Previous'; + if (my $page = $_{pager_obj}->previous_page) { + arg page_uri => event_uri { page => $page }; + render 'named_page'; + } else { + render 'named_page_no_page'; + } + }; };