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