Data-PaginatedTable
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
lib/Data/PaginatedTable.pm view on Meta::CPAN
use 5.18.2;
use Modern::Perl;
use Moops;
class Data::PaginatedTable 1.0.0 {
use Types::XSD::Lite qw( PositiveInteger );
use Text::Table;
use XML::Simple;
use XML::Simple::Sugar;
use POSIX qw(ceil);
use overload '""' => 'as_string';
use overload '@{}' => 'pages';
use constant VERTICAL => 'vertical';
use constant HORIZONTAL => 'horizontal';
use constant HTML => 'html';
use constant PREFORMATTED => 'preformatted';
use constant RAW => 'raw';
has rows => ( is => 'rw', isa => PositiveInteger, default => 4 );
has columns => ( is => 'rw', isa => PositiveInteger, default => 3 );
has data => ( is => 'rw', isa => ArrayRef, required => true );
has fill_direction => (
is => 'rw',
isa => Enum [ VERTICAL, HORIZONTAL ],
default => HORIZONTAL
);
has string_mode =>
( is => 'rw', isa => Enum [ HTML, PREFORMATTED, RAW ], default => RAW );
has current => ( is => 'rw', isa => PositiveInteger, default => 1 );
method page ( $page? ) {
$self->current($page) if defined $page;
my $data = $self->data;
my $min = $self->rows * $self->columns * ( $self->current - 1 );
my $max = $self->rows * $self->columns * $self->current - 1;
my $i = 0;
my $k = 0;
my $next_ik = $self->fill_direction eq VERTICAL
? sub {
$i++;
if ( $i == $self->rows ) { $i = 0; $k++; }
}
: sub {
$k++;
if ( $k == $self->columns ) { $k = 0; $i++; }
};
my @table;
foreach my $row ( @{$data}[ $min .. $max ] ) {
$table[$i][$k] = $row;
$next_ik->();
}
\@table;
}
method pages {
[ map { $self->page($_) } 1 .. $self->page_count ];
}
view all matches for this distributionview release on metacpan - search on metacpan
( run in 1.269 second using v1.00-cache-2.02-grep-82fe00e-cpan-f5108d614456 )