/[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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 991 - (hide annotations)
Sat Jan 10 23:29:38 2009 UTC (15 years, 5 months ago) by dpavlin
File size: 2904 byte(s)
Frey::Class::Refactor::Modify Frey::Collection -> Frey::ORM::Collection
1 dpavlin 969 package Frey::ORM::Pager;
2 dpavlin 991 use Moose::Role;
3 dpavlin 143 use MooseX::AttributeHelpers;
4    
5     use Data::Page;
6     use Data::Dump qw/dump/;
7    
8     has 'pager' => (
9     is => 'rw',
10     isa => 'Data::Page',
11     default => sub { Data::Page->new },
12     );
13    
14     has 'fey_class' => (
15     is => 'rw',
16     isa => 'Str',
17     required => 1,
18     );
19    
20     has 'items' => (
21     metaclass => 'Collection::Array',
22     is => 'rw',
23 dpavlin 969 isa => 'ArrayRef[Frey::ORM::Item]',
24 dpavlin 143 default => sub { [] },
25     provides => {
26     'push' => 'add_item',
27     },
28     );
29    
30 dpavlin 207 has 'range_around' => (
31     is => 'rw',
32     isa => 'Int',
33     default => 10,
34     );
35    
36 dpavlin 969 has 'page' => (
37     is => 'rw',
38     isa => 'Int',
39     default => 1,
40     );
41    
42     has 'per_page' => (
43     is => 'rw',
44     isa => 'Int',
45     default => 20,
46     );
47    
48     =head1 METHODS
49    
50     =cut
51    
52 dpavlin 149 sub first_item {
53     my $self = shift;
54     $self->items->[0];
55     }
56    
57 dpavlin 143 sub last_item {
58     my $self = shift;
59     my $last = $#{ $self->items };
60     $self->update_collection if $last < 0;
61     $self->items->[ $#{ $self->items } ];
62     }
63    
64     =head2 update_collection
65    
66     $o->update_collection;
67    
68     =cut
69    
70     sub update_collection {
71     my ( $self ) = @_;
72    
73     return if $#{ $self->items } >= 0;
74    
75     warn "## update_collection from iterator";
76    
77 dpavlin 149 if ( ! $self->fey_class->can('collection') ) {
78     warn "ERROR: ", $self->fey_class, " can't do collection";
79     return;
80     }
81    
82 dpavlin 143 my $i = $self->fey_class->collection( $self->pager );
83     while ( my $u = $i->next ) {
84     $self->add_item(
85     $self->item_constructor->(
86     fey => $u,
87     )
88     );
89     }
90     }
91    
92     =head2 items_in_layout
93    
94 dpavlin 969 my $html = $o->items_in_layout;
95 dpavlin 143
96     =cut
97    
98     sub items_in_layout {
99 dpavlin 969 my ( $self ) = @_;
100 dpavlin 143
101     # FIXME somehow, this seem cludgy
102 dpavlin 969 $self->pager->current_page( $self->page );
103     $self->items( [] );
104     $self->update_collection;
105 dpavlin 143
106     my $html = join('', map {
107 dpavlin 969 $_->process
108 dpavlin 143 } @{ $self->items } );
109    
110     return $html;
111     }
112    
113     =head2 render_pager
114    
115     my $html = $o->render_pager;
116    
117     =cut
118    
119     sub render_pager {
120     my $self = shift;
121    
122     my $pager = $self->pager;
123    
124 dpavlin 207 my @show_pages;
125     my $after_current = 0;
126    
127     if ( $pager->current_page <= $self->range_around + 2 ) {
128     @show_pages = ( $pager->first_page .. $pager->current_page );
129     $after_current = $self->range_around - $pager->current_page;
130     } else {
131     @show_pages = ( $pager->first_page, '', $pager->current_page - $self->range_around .. $pager->current_page );
132     }
133    
134     if ( $pager->current_page + $self->range_around + 1 >= $pager->last_page ) {
135     push @show_pages, ( $pager->current_page + 1 .. $pager->last_page );
136     } else {
137     push @show_pages, ( $pager->current_page + 1 .. $pager->current_page + $after_current + $self->range_around, '', $pager->last_page );
138     }
139    
140     warn "## show_pages = ",dump( @show_pages );
141    
142 dpavlin 143 return join( ' ',
143     qq|<div class="notice">|,
144     'Showing',
145     $pager->first, '-', $pager->last,
146     'of',
147     $pager->total_entries,
148     'results<br>',
149     # 'page', $pager->current_page, '/', $pager->last_page,
150 dpavlin 969 Frey::ORM::Links->new(
151 dpavlin 143 name => 'page',
152     current => $pager->current_page,
153 dpavlin 207 values => \@show_pages,
154     empty => '...',
155     current_tag => 'b',
156 dpavlin 143 )->links,
157     qq|</div>|
158     );
159     }
160    
161     1;

  ViewVC Help
Powered by ViewVC 1.1.26