3 # Display known perl modules and categories
5 $trust_unknown_referers = 1;
6 require './cpan-lib.pl';
9 # re-fetch modules list if non-existant or it timeout has expired
12 if (!-r $packages_file ||
13 $st[9]+$config{'refresh_days'}*24*60*60 < $now) {
14 &download_packages_file();
17 # Read the modules list
18 open(LIST, "gunzip -c $packages_file |");
21 if ($_ eq '') { $found_blank++; }
22 elsif ($found_blank && /^(\S+)\s+(\S+)\s+(.*)/) {
23 #next if ($donefile{$3}++);
25 next if ($mod eq 'about');
26 local @mod = split(/::/, $mod);
28 local @cat = @mod[0 .. $#mod-1];
29 if (!$donecat{join("::", @cat)}++) {
30 push(@mods, { 'name' => \@cat,
34 push(@mods, { 'name' => \@mod,
36 'ver' => $ver eq 'undef' ? '' : $ver } );
41 # Show page header and selection javascript
42 @sel = grep { /^[a-z0-9\-\_\:\.]+$/i } split(/\0/, $in{'sel'});
43 &popup_header($text{'cpan_title'});
49 window.opener.ifield.value = m;
54 </head><body bgcolor=#$bgcolor link=#$link vlink=#$link text=#$text>
58 # Search for modules matching some name
59 print "<b>",&text('cpan_match',
60 "<tt>".&html_escape($in{'search'})."</tt>"),"</b><p>\n";
61 print &ui_columns_start(undef, 100, 1);
63 if (!$m->{'cat'} && $m->{'full'} =~ /\Q$in{'search'}\E/i) {
64 $name = join("::",@{$m->{'name'}});
65 print &ui_columns_row([
66 "<a href='' onClick='sel(\"$name\")'>".
67 "<img src=images/mod.gif border=0></a>",
68 "<a href='' onClick='sel(\"$name\")'>".
69 &html_escape($name)."</a>",
70 &html_escape($m->{'ver'}),
75 print &ui_columns_end();
76 print "$text{'cpan_none'}<br>\n" if (!$matches);
81 print "<b>",&text('cpan_sel', join("::",@sel)),"</b><p>\n";
85 print &ui_form_start("cpan.cgi");
86 print &ui_submit($text{'cpan_search'});
87 print &ui_textbox("search", undef, 20),&ui_form_end();
89 print &ui_columns_start(undef, 100, 1);
91 # Link to up one level
92 local @up = @sel[0..$#sel-1];
93 print &ui_columns_row([
95 join("&",map { "sel=$_" } @up),"#",join("::",@sel).
96 "'><img src=images/cat.gif border=0></a>",
98 join("&",map { "sel=$_" } @up)."#".
99 join("::",@sel)."'>..</a>",
103 MOD: foreach $m (@mods) {
104 for($i=0; $i<@sel; $i++) {
105 next MOD if ($sel[$i] ne $m->{'name'}->[$i]);
107 next if (scalar(@sel) != scalar(@{$m->{'name'}}-1));
108 $name = join("::",@{$m->{'name'}});
109 $pars = join("&",map { "sel=$_" } @{$m->{'name'}});
112 # A category which can be opened
113 print &ui_columns_row([
114 "<a name=$name><a href='cpan.cgi?$pars'>".
115 "<img src=images/cat.gif border=0></a>",
116 "<a href='cpan.cgi?$pars'>".
117 &html_escape($name)."</a>",
123 print &ui_columns_row([
124 "<a href='' onClick='sel(\"$name\")'>".
125 "<img src=images/mod.gif border=0></a>",
126 "<a href='' onClick='sel(\"$name\")'>".
127 &html_escape($name)."</a>",
128 &html_escape($m->{'ver'}),
129 ], [ undef, undef, "align=right" ]);
132 print &ui_columns_end();