Plack-App-Directory-Apaxy
view release on metacpan or search on metacpan
lib/Plack/App/Directory/Apaxy.pm view on Meta::CPAN
} @children;
}
elsif ( $category eq 'S' ) {
@children = sort {
$b->{is_dir} <=> $a->{is_dir}
or $a->{stat}->size <=> $b->{stat}->size
} @children;
}
}
elsif ( $order eq 'D' ) {
if ( $category eq 'M' ) {
@children = sort {
$b->{is_dir} <=> $a->{is_dir}
or $b->{stat}->mtime <=> $a->{stat}->mtime
} @children;
}
elsif ( $category eq 'N' ) {
@children = sort {
$b->{is_dir} <=> $a->{is_dir}
or $b->{path} cmp $a->{path}
} @children;
}
elsif ( $category eq 'S' ) {
@children = sort {
$b->{is_dir} <=> $a->{is_dir}
or $b->{stat}->size <=> $a->{stat}->size
} @children;
}
}
}
else {
if ( $order eq 'A' ) {
if ( $category eq 'M' ) {
@children = sort { $a->{stat}->mtime <=> $b->{stat}->mtime } @children;
}
elsif ( $category eq 'N' ) {
@children = sort { $a->{path} cmp $b->{path} } @children;
}
elsif ( $category eq 'S' ) {
@children = sort { $a->{stat}->size <=> $b->{stat}->size } @children;
}
}
elsif ( $order eq 'D' ) {
if ( $category eq 'M' ) {
@children = reverse sort { $a->{stat}->mtime <=> $b->{stat}->mtime } @children;
}
elsif ( $category eq 'N' ) {
@children = reverse sort { $a->{path} cmp $b->{path} } @children;
}
elsif ( $category eq 'S' ) {
@children = reverse sort { $a->{stat}->size <=> $b->{stat}->size } @children;
}
}
}
for my $child (@children) {
my $file = $child->{path};
my $stat = $child->{stat};
my $basename = $file->basename;
my $url = join '/', map { uri_escape($_) } split m{/}, $dir_url . $basename;
my $mime_type;
my $alt;
my $icon;
my $size;
if ( $file->is_dir ) {
$basename .= "/";
$url .= "/";
$mime_type = q{directory};
$alt = q{DIR};
$icon = q{folder};
$size = q{-};
}
else {
$mime_type = Plack::MIME->mime_type($file) || 'text/plain';
$alt = uc $MIME_TYPE_TO_ALT{$mime_type} || q{ };
$icon = $MIME_TYPE_TO_ALT{$mime_type} || 'default';
$size = Number::Bytes::Human::format_bytes( $stat->size );
}
my $dt = localtime $stat->mtime;
push @files, [
$icon,
$alt,
$url,
$basename,
sprintf( '%s %02d:%02d', $dt->ymd, $dt->hour, $dt->minute ),
$size,
];
}
my $path = Plack::Util::encode_html("Index of $env->{PATH_INFO}");
my $files = join "\n", map {
my $f = $_;
sprintf q{ } x 8 . $dir_file, map Plack::Util::encode_html($_), @$f;
} @files;
my $page = sprintf $self->_get_dir_page_fmt, $path, $path, $files;
return [ 200, [ 'Content-Type' => 'text/html; charset=utf-8' ], [$page] ];
}
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Plack::App::Directory::Apaxy - Serve static files from document root with directory index using Apaxy
=head1 VERSION
version 0.004
=head1 SYNOPSIS
( run in 1.497 second using v1.01-cache-2.11-cpan-71847e10f99 )