]> wagnertech.de Git - mfinanz.git/blobdiff - SL/DB/Helper/Paginated.pm
Aufrufe von focus() entfernt.
[mfinanz.git] / SL / DB / Helper / Paginated.pm
index a5a07d0679a1d5cff2fc07f0fd187265305c484d..a0ad02cb8b0098be092e7f165ef3afdba7c999fa 100644 (file)
@@ -4,21 +4,23 @@ use strict;
 
 require Exporter;
 our @ISA    = qw(Exporter);
 
 require Exporter;
 our @ISA    = qw(Exporter);
-our @EXPORT = qw(paginate);
+our @EXPORT = qw(paginate disable_paginating);
+
+use List::MoreUtils qw(any);
 
 sub paginate {
 
 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};
 
   $params{args}{page}     = $ret->{cur};
   $params{args}{per_page} = $ret->{per_page};
@@ -47,12 +49,28 @@ sub make_common_pages {
   my ($cur, $max) = @_;
   return [
     map {
   my ($cur, $max) = @_;
   return [
     map {
-      active => $_ != $cur,
-      page   => $_,
+      active  => $_ != $cur,
+      page    => $_,
+      visible => calc_visibility($cur, $max, $_),
     }, 1 .. $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__
 1;
 
 __END__