require Exporter;
our @ISA = qw(Exporter);
-our @EXPORT = qw(paginate);
+our @EXPORT = qw(paginate disable_paginating);
+
+use List::MoreUtils qw(any);
sub paginate {
- my ($self, %params) = @_;
- my $page = $params{page} || 1;
- my %args = %{ $params{args} || {} };
+ my ($self, %params) = @_;
+ my $page = $params{page} || 1;
+ my %args = %{ $params{args} || {} };
- my $ret = { };
+ my $ret = { };
- $ret->{per_page} = per_page($self, %params);
- $ret->{max} = ceil($self->get_all_count(%args), $ret->{per_page}) || 1;
- $ret->{cur} = $page < 1 ? 1
- : $page > $ret->{max} ? $ret->{max}
- : $page;
- $ret->{common} = make_common_pages($ret->{cur}, $ret->{max});
+ $ret->{per_page} = per_page($self, %params);
+ $ret->{max} = ceil($self->get_all_count(%args), $ret->{per_page}) || 1;
+ $ret->{cur} = $page < 1 ? 1
+ : $page > $ret->{max} ? $ret->{max}
+ : $page;
+ $ret->{common} = make_common_pages($ret->{cur}, $ret->{max});
$params{args}{page} = $ret->{cur};
$params{args}{per_page} = $ret->{per_page};
my ($cur, $max) = @_;
return [
map {
- active => $_ != $cur,
- page => $_,
+ active => $_ != $cur,
+ page => $_,
+ visible => calc_visibility($cur, $max, $_),
}, 1 .. $max
];
}
+sub calc_visibility {
+ my ($cur, $max, $this) = @_;
+ any { $_ } abs($cur - $this) < 5,
+ $this <= 3,
+ $this == $max,
+ any { abs ($cur - $this) == $_ } 10, 50, 100, 500, 1000, 5000;
+}
+
+sub disable_paginating {
+ my ($self, %params) = @_;
+
+ delete $params{args}{page};
+ delete $params{args}{per_page};
+}
+
1;
__END__