--- trunk/lib/Frey/Pager.pm 2008/07/16 21:23:27 149 +++ trunk/lib/Frey/Pager.pm 2008/10/31 15:33:15 207 @@ -33,6 +33,12 @@ }, ); +has 'range_around' => ( + is => 'rw', + isa => 'Int', + default => 10, +); + sub first_item { my $self = shift; $self->items->[0]; @@ -110,6 +116,24 @@ my $pager = $self->pager; + my @show_pages; + my $after_current = 0; + + if ( $pager->current_page <= $self->range_around + 2 ) { + @show_pages = ( $pager->first_page .. $pager->current_page ); + $after_current = $self->range_around - $pager->current_page; + } else { + @show_pages = ( $pager->first_page, '', $pager->current_page - $self->range_around .. $pager->current_page ); + } + + if ( $pager->current_page + $self->range_around + 1 >= $pager->last_page ) { + push @show_pages, ( $pager->current_page + 1 .. $pager->last_page ); + } else { + push @show_pages, ( $pager->current_page + 1 .. $pager->current_page + $after_current + $self->range_around, '', $pager->last_page ); + } + + warn "## show_pages = ",dump( @show_pages ); + return join( ' ', qq|
|, 'Showing', @@ -121,7 +145,9 @@ Frey::Web::Links->new( name => 'page', current => $pager->current_page, - values => [ $pager->first_page .. $pager->last_page ], + values => \@show_pages, + empty => '...', + current_tag => 'b', )->links, qq|
| );