/Vector/Paginator.pm
use strict;
{
my ($class, $baseuri, $page, @items) = @_;
my $self = {
baseuri => $baseuri,
page => $page || 0,
items => \@items,
stride => 5,
};
return bless $self, $class;
}
{
my ($self) = @_;
return int((@{$self->{ }} - 1) / $self->{ });
}
{
my ($self) = @_;
my $len = @{$self->{ }};
my $start = $self->{ } * $self->{ };
if ($start >= $len) {
return ();
}
my $end = $start + $self->{ } - 1;
if ($end >= $len) {
$end = $len - 1;
}
return @{$self->{ }}[$start..$end];
}
{
my ($self) = @_;
my $count = $self->count;
my @r;
if ($self->{ } == 1) {
push @r, qq{<a href="$self->{baseuri}">prev</a>};
} elsif ($self->{ } > 0) {
my $ppage = $self->{ } - 1;
push @r, qq{<a href="$self->{baseuri}?page=$ppage">prev</a>};
} else {
push @r, 'prev';
}
for my $n (0..$count) {
my $uri;
if ($n == 0) {
$uri = $self->{ };
} else {
$uri = "$self->{baseuri}?page=$n";
}
if ($n == $self->{ }) {
push @r, $n;
} else {
push @r, qq{<a href="$uri">$n</a>};
}
}
if ($self->{ } < $count - 1) {
my $npage = $self->{ } + 1;
push @r, qq{<a href="$self->{baseuri}?page=$npage">next</a>};
} else {
push @r, 'next';
}
return join(' ', @r);
}
1;