#!/usr/bin/perl -w use lib qw(lib); use CGI; use strict; use HTML::Menu::TreeView; my $q = new CGI; my $TreeView = new HTML::Menu::TreeView(); my $subfolder = defined $q->param('subfolder') ? $q->param('subfolder') : $TreeView->documentRoot() . "/"; my $style = $q->param('style') ? $q->param('style') : 'Crystal'; my $size = defined $q->param('size') ? $q->param('size') : 16; my @tree = recursiveReadDir($subfolder); $TreeView->Style($style); $TreeView->columns( $q->a( { href => "./columns.pl?style=$style&size=$size&sort=1", class => "treeviewLink$size" }, 'Name' ) . ' ', $q->a( { href => "./columns.pl?style=$style&size=$size&byColumn=0", class => "treeviewLink$size" }, 'Size' ) . ' ', $q->a( { href => "./columns.pl?style=$style&size=$size&byColumn=1", class => "treeviewLink$size" }, 'Permission' ) . ' ', $q->a( { href => "./columns.pl?style=$style&size=$size&byColumn=2", class => "treeviewLink$size" }, 'Last Modified' ) . ' ' ); if (defined $q->param('byColumn')) { $TreeView->orderByColumn($q->param('byColumn')); } elsif ($q->param('sort')) { $TreeView->sortTree(1); } $TreeView->size($size); $TreeView->border(1); $TreeView->clasic(1) if (defined $q->param('clasic')); my $zoom = $q->div( {style => "font-size:$size px;"}, $q->a( { href => './columns.pl?style=Crystal&size=16', class => "treeviewLink$size" }, '16' ) . ' | ' . $q->a( { href => './columns.pl?style=Crystal&size=22', class => "treeviewLink$size" }, '22' ) . ' | ' . $q->a( { href => './columns.pl?style=Crystal&size=32', class => "treeviewLink$size" }, '32' ) . ' | ' . $q->a( { href => './columns.pl?style=Crystal&size=48', class => "treeviewLink$size" }, '48' ) . ' | ' . $q->a( { href => './columns.pl?style=Crystal&size=64', class => "treeviewLink$size" }, '64' ) . ' | ' . $q->a( { href => './columns.pl?style=Crystal&size=64', class => "treeviewLink$size" }, '128' ) . ' | ' . $q->a( { -href => './columns.pl?style=simple&size=16', -class => "treeviewLink$size" }, 'simple' ) ); print($q->header, $q->start_html( -title => 'Columns', -script => $TreeView->jscript() . $TreeView->preload(), -style => {-code => $TreeView->css()}, ), $q->div({align => 'center'}, $zoom . $q->br() . $TreeView->Tree(\@tree)), $q->end_html ); sub recursiveReadDir { my $dir = shift; chomp($dir); opendir(DIR, "$dir") or die ":$dir $!"; my @files = readdir(DIR); closedir(DIR); my @t; for (my $i = 0; $i <= $#files; $i++) { unless ($files[$i] =~ /^\./) { use File::stat; my $sb = stat($dir . $files[$i]); unless (-d $dir . $files[$i]) { push @t, { text => $files[$i], columns => [sprintf("%s", $sb->size), sprintf("%04o", $sb->mode & 07777), sprintf("%s", scalar localtime $sb->mtime)], }; } else { my @st = recursiveReadDir("$dir$files[$i]/"); push @t, { text => "$files[$i]", subtree => [@st], href => "./columns.pl?style=$style&size=$size&subfolder=$dir$files[$i]/", columns => [sprintf("%s", $sb->size), sprintf("%04o", $sb->mode & 07777), sprintf("%s", scalar localtime $sb->mtime)] }; } } } return @t; } 1; |