listview ported bar pager
[catagits/Reaction.git] / lib / Reaction / UI / Widget / ListView.pm
index 81b652e..9562900 100644 (file)
@@ -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;
   };
 
 };