/[Frey]/trunk/lib/Frey/ORM/Pager.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /trunk/lib/Frey/ORM/Pager.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

trunk/lib/Frey/Pager.pm revision 143 by dpavlin, Wed Jul 16 14:17:46 2008 UTC trunk/lib/Frey/ORM/Pager.pm revision 969 by dpavlin, Fri Jan 9 16:02:33 2009 UTC
# Line 1  Line 1 
1  package Frey::Pager;  package Frey::ORM::Pager;
2  use Moose;  use Moose;
3  use MooseX::AttributeHelpers;  use MooseX::AttributeHelpers;
4    
# Line 26  has 'item_constructor' => ( Line 26  has 'item_constructor' => (
26  has 'items' => (  has 'items' => (
27          metaclass => 'Collection::Array',          metaclass => 'Collection::Array',
28          is => 'rw',          is => 'rw',
29          isa => 'ArrayRef[Frey::Web::Item]',          isa => 'ArrayRef[Frey::ORM::Item]',
30          default => sub { [] },          default => sub { [] },
31          provides => {          provides => {
32                  'push' => 'add_item',                  'push' => 'add_item',
33          },          },
34  );  );
35    
36    has 'range_around' => (
37            is => 'rw',
38            isa => 'Int',
39            default => 10,
40    );
41    
42    has 'page' => (
43            is => 'rw',
44            isa => 'Int',
45            required => 1,
46            default => 1,
47    );
48    
49    has 'per_page' => (
50            is => 'rw',
51            isa => 'Int',
52            required => 1,
53            default => 20,
54    );
55    
56    =head1 METHODS
57    
58    =cut
59    
60    sub first_item {
61            my $self = shift;
62            $self->items->[0];
63    }
64    
65  sub last_item {  sub last_item {
66          my $self = shift;          my $self = shift;
         warn "## last_item = ",  
67          my $last = $#{ $self->items };          my $last = $#{ $self->items };
68          $self->update_collection if $last < 0;          $self->update_collection if $last < 0;
69          $self->items->[ $#{ $self->items } ];          $self->items->[ $#{ $self->items } ];
# Line 54  sub update_collection { Line 82  sub update_collection {
82    
83          warn "## update_collection from iterator";          warn "## update_collection from iterator";
84    
85            if ( ! $self->fey_class->can('collection') ) {
86                    warn "ERROR: ", $self->fey_class, " can't do collection";
87                    return;
88            }
89    
90          my $i = $self->fey_class->collection( $self->pager );          my $i = $self->fey_class->collection( $self->pager );
91          while ( my $u = $i->next ) {          while ( my $u = $i->next ) {
92                  $self->add_item(                  $self->add_item(
# Line 66  sub update_collection { Line 99  sub update_collection {
99    
100  =head2 items_in_layout  =head2 items_in_layout
101    
102    my $html = $o->items_in_layout( $f );    my $html = $o->items_in_layout;
103    
104  =cut  =cut
105    
106  sub items_in_layout {  sub items_in_layout {
107          my ( $self, $f ) = @_;          my ( $self ) = @_;
   
         my $layout = delete( $f->{layout} );  
108    
109          # FIXME somehow, this seem cludgy          # FIXME somehow, this seem cludgy
110          if ( $f->{page} ) {          $self->pager->current_page( $self->page );
111                  $self->pager->current_page( $f->{page} );          $self->items( [] );
112                  $self->items( [] );          $self->update_collection;
                 $self->update_collection;  
         }  
113    
114          my $html = join('', map {          my $html = join('', map {
115                  $_->layout( $layout ) if $layout;                  $_->process
                 $_->process($f) || ''  
116          } @{ $self->items } );          } @{ $self->items } );
117    
118          return $html;          return $html;
# Line 101  sub render_pager { Line 129  sub render_pager {
129    
130          my $pager = $self->pager;          my $pager = $self->pager;
131    
132            my @show_pages;
133            my $after_current = 0;
134    
135            if ( $pager->current_page <= $self->range_around + 2 ) {
136                    @show_pages = ( $pager->first_page .. $pager->current_page );
137                    $after_current = $self->range_around - $pager->current_page;
138            } else {
139                    @show_pages = ( $pager->first_page, '', $pager->current_page - $self->range_around .. $pager->current_page );
140            }
141    
142            if ( $pager->current_page + $self->range_around + 1 >= $pager->last_page ) {
143                    push @show_pages, ( $pager->current_page + 1 .. $pager->last_page );
144            } else {
145                    push @show_pages, ( $pager->current_page + 1 .. $pager->current_page + $after_current + $self->range_around, '', $pager->last_page );
146            }
147    
148            warn "## show_pages = ",dump( @show_pages );
149    
150          return join( ' ',          return join( ' ',
151                          qq|<div class="notice">|,                          qq|<div class="notice">|,
152                          'Showing',                          'Showing',
# Line 109  sub render_pager { Line 155  sub render_pager {
155                          $pager->total_entries,                          $pager->total_entries,
156                          'results<br>',                          'results<br>',
157  #                       'page', $pager->current_page, '/', $pager->last_page,  #                       'page', $pager->current_page, '/', $pager->last_page,
158                          Frey::Web::Links->new(                          Frey::ORM::Links->new(
159                                  name => 'page',                                  name => 'page',
160                                  current => $pager->current_page,                                  current => $pager->current_page,
161                                  values => [ $pager->first_page .. $pager->last_page ],                                  values => \@show_pages,
162                                    empty => '...',
163                                    current_tag => 'b',
164                          )->links,                          )->links,
165                          qq|</div>|                          qq|</div>|
166                  );                  );

Legend:
Removed from v.143  
changed lines
  Added in v.969

  ViewVC Help
Powered by ViewVC 1.1.26