The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w
use lib qw(lib);
use HTML::Menu::TreeView qw(Tree css jscript Style documentRoot size clasic preload);
use CGI qw(-compile :all  -private_tempfiles);
use strict;
my $htpath = documentRoot();
my $size = defined param('size') ? param('size') : 16;
$size = ($size == 22 or $size == 32 or $size == 48 or $size == 64 or $size == 128) ? $size : 16;
my @tree;
opendir(DIR, "$htpath/style/Crystal/$size/mimetypes") or die ":$htpath/style/Crystal/$size/mimetypes $/ $! $/";
my @lines = readdir(DIR);
closedir(DIR);
open(IN, "$htpath/style/Crystal/$size/html-menu-treeview/Crystal.css") or die ": $!";

while (my $line = <IN>) {
    if ($line =~ /td\.(folder.+)Closed/) {
        my $classname = $1;
        my $img       = shift @lines;
        $img = shift @lines while ($img =~ /^\..*/);
        push @tree,
          {
            text        => $classname,
            folderclass => $classname,
            subtree     => [
                        {
                         text  => $img,
                         image => $img
                        },
            ],
          };
        next;
    }
}
close(IN);
for (my $i = 0; $i < $#lines; ++$i) {
    my $img = shift @lines;
    unless ($img =~ /^\..*$/) {
        push @tree,
          {
            text  => $img,
            image => $img,
          };
    }
}
documentRoot($htpath);
Style('Crystal');
size($size);
clasic(1) if (defined param('clasic'));
my $zoom = div(
               {style => "font-size:$size" . "px;"},
               a(
                  {
                   -href  => './crystal.pl?style=Crystal&size=16',
                   -class => "treeviewLink$size"
                  },
                  '16'
                 )
                 . '&#160;|&#160;'
                 . a(
                     {
                      -href  => './crystal.pl?style=Crystal&size=22',
                      -class => "treeviewLink$size"
                     },
                     '22'
                 )
                 . '&#160;|&#160;'
                 . a(
                     {
                      -href  => './crystal.pl?style=Crystal&size=32',
                      -class => "treeviewLink$size"
                     },
                     '32'
                 )
                 . '&#160;|&#160;'
                 . a(
                     {
                      -href  => './crystal.pl?style=Crystal&size=48',
                      -class => "treeviewLink$size"
                     },
                     '48'
                 )
                 . '&#160;|&#160;'
                 . a(
                     {
                      -href  => './crystal.pl?style=Crystal&size=64',
                      -class => "treeviewLink$size"
                     },
                     '64'
                 )
                 . '&#160;|&#160;'
                 . a(
                     {
                      -href  => './crystal.pl?style=Crystal&size=128',
                      -class => "treeviewLink$size"
                     },
                     '128'
                 )
);
print(
      header(),
      start_html(
                 -title  => 'Crystal',
                 -script => jscript() . preload(),
                 -style  => {-code => css()}
      ),
      div({align => 'center'}, $zoom . br() . Tree(\@tree)),
      end_html
);