Apache-CVS
view release on metacpan or search on metacpan
CVS/HTML.pm view on Meta::CPAN
use Apache::CVS();
if ($Apache::CVS::Graph) {
use Graph::Directed();
}
@Apache::CVS::HTML::ISA = ('Apache::CVS');
$Apache::CVS::HTML::VERSION = $Apache::CVS::VERSION;;
my @time_units = ('days', 'hours', 'minutes', 'seconds');
my @directory_headers = ('filename', 'author', 'number of revisions',
'latest revision', 'most recent revision date',
'revision age');
my %directory_sorting = (
'filename' => 'f',
'author' => 'a',
'number of revisions' => 'n',
'most recent revision date' => 'm'
);
my @file_headers = ('revision number', 'author', 'state', 'symbol', 'date',
'age', 'comment', 'action');
my %file_sorting = (
'revision number' => 'r',
'author' => 'a',
'state' => 's',
'date' => 'd',
);
my %css_class = (
# anchors
'root_link' => 'root_link',
'path_link' => 'path_link',
'directory_link' => 'directory_link',
'file_link' => 'file_link',
'graph_link' => 'graph_link',
'revision_link' => 'revision_link',
'diff_link' => 'diff_link',
'file_sort_link' => 'file_sort_link',
'directory_sort_link' => 'directory_sort_link',
# directory table
'directory_table' => 'directory_table',
'directory_header_row' => 'directory_header_row',
'directory_header' => 'directory_header',
'directory_odd_row' => 'directory_odd_row',
'directory_even_row' => 'directory_even_row',
'directory_data' => 'directory_data',
# file table
'file_table' => 'file_table',
'file_header_row' => 'file_header_row',
'file_header' => 'file_header',
'file_odd_row' => 'file_odd_row',
'file_even_row' => 'file_even_row',
'file_data' => 'file_data',
);
sub new {
my $proto = shift;
my $class = ref($proto) || $proto;
my $self = $class->SUPER::new(shift);
$self->file_sorting_available(1);
$self->revision_sorting_available(1);
$self->{css_file} = $self->request()->dir_config('CSSFile');
bless ($self, $class);
return $self;
}
sub sort_files {
my $self = shift;
my ($files, $sort_criterion, $ascending) = @_;
# skip if there are no files
return unless scalar @{ $files };
my @sorted_files;
SWITCH: for ($sort_criterion) {
/$directory_sorting{'filename'}/ && do {
@sorted_files = sort { $a->name() cmp $b->name() } @{ $files };
last;
};
/$directory_sorting{'author'}/ && do {
@sorted_files = sort { $a->revision('last')->author() cmp
$b->revision('last')->author() } @{ $files };
last;
};
/$directory_sorting{'number of revisions'}/ && do {
@sorted_files =
sort { $a->revision_count() <=> $b->revision_count() }
@{ $files };
last;
};
/$directory_sorting{'most recent revision date'}/ && do {
@sorted_files = sort { $a->revision('last')->date() <=>
$b->revision('last')->date() } @{ $files };
last;
};
@sorted_files = @{ $files };
}
@sorted_files = reverse @sorted_files if $ascending;
return \@sorted_files;
}
sub _split_revision {
my $revision = shift;
my @revision_parts;
while ($revision =~ s#^(\d+)##) {
push @revision_parts, $1;
$revision =~ s#^\.##;
}
return \@revision_parts;
}
sub _by_revision {
my $a_number = _split_revision($a->number());
my $b_number = _split_revision($b->number());
my $a_max_index = scalar @{ $a_number };
my $max_index = $a_max_index;
( run in 0.817 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )