X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FReaction%2FUI%2FWidget%2FListView.pm;h=95629008737b3900269beac7d5388fc2fadb5c23;hb=aa8c0c904641fa20c5f50882d09c1502aae19b3a;hp=41041e78dfae75db8bcf6b505c5ed80f121912db;hpb=6bc27bd310ba396fb925212fe78298ab859275cd;p=catagits%2FReaction.git diff --git a/lib/Reaction/UI/Widget/ListView.pm b/lib/Reaction/UI/Widget/ListView.pm index 41041e7..9562900 100644 --- a/lib/Reaction/UI/Widget/ListView.pm +++ b/lib/Reaction/UI/Widget/ListView.pm @@ -3,69 +3,32 @@ package Reaction::UI::Widget::ListView; use Reaction::UI::WidgetClass; class ListView is 'Reaction::UI::Widget::GridView', which { - fragment widget [ qw/pager header body footer actions/, - { - pager => sub{ $_{viewport}->pager }, - object_action_count => sub{ $_{viewport}->object_action_count }, - #^^ it's ugly, i know, but i gotsto - } - ]; - fragment pager - [ qw/first_page previous_page current_page next_page last_page page_list/, - { - first_page => sub{ $_{pager}->first_page }, - previous_page => sub{ $_{pager}->previous_page || $_{pager}->last_page }, - current_page => sub{ $_{pager}->current_page }, - next_page => sub{ $_{pager}->next_page || $_{pager}->first_page }, - last_page => sub{ $_{pager}->last_page }, - page_list => sub{ [$_{pager}->first_page .. $_{pager}->last_page] }, - } - ]; - - fragment first_page [ string{ "First" } ], - { uri => sub{ $_{self}->connect_uri( {page => $_{first_page} } ) } }; - - fragment previous_page [ string{ "Previous" } ], - { uri => sub{ $_{self}->connect_uri( {page => $_{previous_page} } ) } }; - - fragment current_page [ string{ "Current" } ], - { uri => sub{ $_{self}->connect_uri( {page => $_{current_page} } ) } }; - - fragment next_page [ string{ "Next" } ], - { uri => sub{ $_{self}->connect_uri( {page => $_{next_page} } ) } }; - - fragment last_page [ string{ "Last" } ], - { uri => sub{ $_{self}->connect_uri( {page => $_{last_page} } ) } }; - - fragment page_list [ page over $_{page_list} ]; - fragment page [ string{ $_ } ], - { uri => sub{ $_{self}->connect_uri( {page => $_ } ) } }; + implements fragment actions { + render action => over $_{viewport}->actions; + }; - fragment actions [ action over func(viewport => 'actions') ]; - fragment action [ 'viewport' ]; + implements fragment action { + render 'viewport'; + }; - fragment header_cell [ string { $_{labels}->{$_} } ], - { uri => sub{ - my $ev = {order_by => $_, order_by_desc => $_{viewport}->order_by_desc ? 0 : 1 }; - return $_{self}->connect_uri($ev); - } + 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; + }; - fragment footer_cell [ string { $_{labels}->{$_} } ], - { uri => sub{ - my $ev = {order_by => $_, order_by_desc => $_{viewport}->order_by_desc ? 0 : 1 }; - return $_{self}->connect_uri($ev); - } - }; + after fragment header_cells { + if ($_{viewport}->object_action_count) { + render 'header_action_cell'; + } + }; - #this needs to be cleaned up and moved out - implements connect_uri => as{ - my ($self, $events) = @_; - my $vp = $self->viewport; - my $ctx = $self->viewport->ctx; - my %args = map{ $vp->event_id_for($_) => $events->{$_} } keys %$events; - return $ctx->req->uri_with(\%args); + implements fragment header_action_cell { + arg 'col_count' => $_{viewport}->object_action_count; }; };