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 )