aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Reaction/UI/Widget/ListView.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Reaction/UI/Widget/ListView.pm')
-rw-r--r--lib/Reaction/UI/Widget/ListView.pm76
1 files changed, 20 insertions, 56 deletions
diff --git a/lib/Reaction/UI/Widget/ListView.pm b/lib/Reaction/UI/Widget/ListView.pm
index 81b652e..9562900 100644
--- a/lib/Reaction/UI/Widget/ListView.pm
+++ b/lib/Reaction/UI/Widget/ListView.pm
@@ -3,68 +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} }, $_{viewport} ) } };
-
- fragment previous_page [ string{ "Previous" } ],
- { uri => sub{ $_{self}->connect_uri( {page => $_{previous_page} }, $_{viewport} ) } };
-
- fragment current_page [ string{ "Current" } ],
- { uri => sub{ $_{self}->connect_uri( {page => $_{current_page} }, $_{viewport} ) } };
-
- fragment next_page [ string{ "Next" } ],
- { uri => sub{ $_{self}->connect_uri( {page => $_{next_page} }, $_{viewport} ) } };
-
- fragment last_page [ string{ "Last" } ],
- { uri => sub{ $_{self}->connect_uri( {page => $_{last_page} }, $_{viewport} ) } };
-
- fragment page_list [ page => over $_{page_list} ];
- fragment page [ string{ $_ } ],
- { uri => sub{ $_{self}->connect_uri( {page => $_ }, $_{viewport} ) } };
+ 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, $_{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;
+ };
- 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, $_{viewport});
- }
- };
+ 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, $vp) = @_;
- my $ctx = $vp->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;
};
};