[BACK]Return to cvsweb.cgi CVS log [TXT][DIR] Up to [cvsweb.bsd.lv] / cvsweb

Diff for /cvsweb/cvsweb.cgi between version 3.34 and 3.35

version 3.34, 2000/10/10 18:48:59 version 3.35, 2000/10/10 21:14:05
Line 74  use vars qw (
Line 74  use vars qw (
     $difffontsize $inputTextSize $mime_types $allow_annotate      $difffontsize $inputTextSize $mime_types $allow_annotate
     $allow_markup $use_java_script $open_extern_window      $allow_markup $use_java_script $open_extern_window
     $extern_window_width $extern_window_height $edit_option_form      $extern_window_width $extern_window_height $edit_option_form
     $checkout_magic $show_subdir_lastmod $show_log_in_markup $v      $show_subdir_lastmod $show_log_in_markup $v
     $navigationHeaderColor $tableBorderColor $markupLogColor      $navigationHeaderColor $tableBorderColor $markupLogColor
     $tabstop $state $annTable $sel $curbranch @HideModules      $tabstop $state $annTable $sel $curbranch @HideModules
     $module $use_descriptions %descriptions @mytz $dwhere $moddate      $module $use_descriptions %descriptions @mytz $dwhere $moddate
Line 116  sub download_url($$;$);
Line 116  sub download_url($$;$);
 sub download_link($$$;$);  sub download_link($$$;$);
 sub toggleQuery($$);  sub toggleQuery($$);
 sub urlencode($);  sub urlencode($);
   sub htmlquote($);
 sub http_header(;$);  sub http_header(;$);
 sub html_header($);  sub html_header($);
 sub html_footer();  sub html_footer();
Line 156  $diffcolorChange = $diffcolorAdd = $diffcolorDarkChang
Line 157  $diffcolorChange = $diffcolorAdd = $diffcolorDarkChang
 $difffontsize = $inputTextSize = $mime_types = $allow_annotate =  $difffontsize = $inputTextSize = $mime_types = $allow_annotate =
 $allow_markup = $use_java_script = $open_extern_window =  $allow_markup = $use_java_script = $open_extern_window =
 $extern_window_width = $extern_window_height = $edit_option_form =  $extern_window_width = $extern_window_height = $edit_option_form =
 $checkout_magic = $show_subdir_lastmod = $show_log_in_markup = $v =  $show_subdir_lastmod = $show_log_in_markup = $v =
 $navigationHeaderColor = $tableBorderColor = $markupLogColor =  $navigationHeaderColor = $tableBorderColor = $markupLogColor =
 $tabstop = $use_moddate = $moddate = $gzip_open = undef;  $tabstop = $use_moddate = $moddate = $gzip_open = undef;
   
Line 294  foreach (@stickyvars) {
Line 295  foreach (@stickyvars) {
 }  }
 # is there any query ?  # is there any query ?
 if (@barequery) {  if (@barequery) {
     $barequery = join('&', @barequery);      $barequery = join('&', @barequery);
     $query = "?$barequery";      $query = "?$barequery";
     $barequery = "&$barequery";      $barequery = "&$barequery";
 }  }
 else {  else {
     $query = "";      $query = "";
Line 354  foreach $k (keys %ICONS) {
Line 355  foreach $k (keys %ICONS) {
     no strict 'refs';      no strict 'refs';
     my ($itxt,$ipath,$iwidth,$iheight) = @{$ICONS{$k}};      my ($itxt,$ipath,$iwidth,$iheight) = @{$ICONS{$k}};
     if ($ipath) {      if ($ipath) {
         ${"${k}icon"} = "<IMG SRC=\"$ipath\" ALT=\"$itxt\" BORDER=\"0\" WIDTH=\"$iwidth\" HEIGHT=\"$iheight\">";          ${"${k}icon"} = sprintf('<IMG SRC="%s" ALT="%s" BORDER="0" WIDTH="%d" HEIGHT="%d">',
                                   htmlquote($ipath), htmlquote($itxt), $iwidth, $iheight)
     }      }
     else {      else {
         ${"${k}icon"} = $itxt;          ${"${k}icon"} = $itxt;
Line 483  elsif (-d $fullname) {
Line 485  elsif (-d $fullname) {
             print "<tr><th align=left bgcolor=\"" . (($byfile) ?              print "<tr><th align=left bgcolor=\"" . (($byfile) ?
                                                    $columnHeaderColorSorted :                                                     $columnHeaderColorSorted :
                                                    $columnHeaderColorDefault) . "\">";                                                     $columnHeaderColorDefault) . "\">";
             print "<a href=\"./" . &toggleQuery("sortby","file") .              if ($byfile) {
                 "#dirlist\">" if (!$byfile);                  print 'File';
             print "File";              } else {
             print "</a>" if (!$byfile);                  print &link('File', sprintf('./%s#dirlist',
                                               &toggleQuery("sortby", "file")));
               }
             print "</th>";              print "</th>";
             # do not display the other column-headers, if we do not have any files              # do not display the other column-headers, if we do not have any files
             # with revision information:              # with revision information:
Line 495  elsif (-d $fullname) {
Line 499  elsif (-d $fullname) {
                 print "<th align=left bgcolor=\"" . (($byrev) ?                  print "<th align=left bgcolor=\"" . (($byrev) ?
                                                    $columnHeaderColorSorted :                                                     $columnHeaderColorSorted :
                                                    $columnHeaderColorDefault) . "\">";                                                     $columnHeaderColorDefault) . "\">";
                 print "<a href=\"./" . &toggleQuery ("sortby","rev") .                  if ($byrev) {
                     "#dirlist\">" if (!$byrev);                      print 'Rev.';
                 print "Rev.";                  } else {
                 print "</a>" if (!$byrev);                      print &link('Rev.', sprintf('./%s#dirlist',
                                                   &toggleQuery("sortby", "rev")));
                   }
                 print "</th>";                  print "</th>";
                 $infocols++;                  $infocols++;
                 print "<th align=left bgcolor=\"" . (($bydate) ?                  print "<th align=left bgcolor=\"" . (($bydate) ?
                                                    $columnHeaderColorSorted :                                                     $columnHeaderColorSorted :
                                                    $columnHeaderColorDefault) . "\">";                                                     $columnHeaderColorDefault) . "\">";
                 print "<a href=\"./" . &toggleQuery ("sortby","date") .                  if ($bydate) {
                     "#dirlist\">" if (!$bydate);                      print 'Age';
                 print "Age";                  } else {
                 print "</a>" if (!$bydate);                      print &link('Age', sprintf('./%s#dirlist',
                                                   &toggleQuery("sortby", "date")));
                   }
                 print "</th>";                  print "</th>";
                 if ($show_author) {                  if ($show_author) {
                     $infocols++;                      $infocols++;
                     print "<th align=left bgcolor=\"" . (($byauthor) ?                      print "<th align=left bgcolor=\"" . (($byauthor) ?
                                                    $columnHeaderColorSorted :                                                     $columnHeaderColorSorted :
                                                    $columnHeaderColorDefault) . "\">";                                                     $columnHeaderColorDefault) . "\">";
                     print "<a href=\"./" . &toggleQuery ("sortby","author") .                      if ($byauthor) {
                             "#dirlist\">" if (!$byauthor);                          print 'Author';
                     print "Author";                      } else {
                     print "</a>" if (!$byauthor);                          print &link('Author', sprintf('./%s#dirlist',
                                                         &toggleQuery("sortby", "author")));
                       }
                     print "</th>";                      print "</th>";
                 }                  }
                 $infocols++;                  $infocols++;
                 print "<th align=left bgcolor=\"" . (($bylog) ?                  print "<th align=left bgcolor=\"" . (($bylog) ?
                                                $columnHeaderColorSorted :                                                 $columnHeaderColorSorted :
                                                $columnHeaderColorDefault) . "\">";                                                 $columnHeaderColorDefault) . "\">";
                 print "<a href=\"./", toggleQuery("sortby","log"), "#dirlist\">" if (!$bylog);                  if ($bylog) {
                 print "Last log entry";                      print 'Last log entry';
                 print "</a>" if (!$bylog);                  } else {
                       print &link('Last log entry', sprintf('./%s#dirlist',
                                                     &toggleQuery("sortby", "log")));
                   }
                 print "</th>";                  print "</th>";
             }              }
             elsif ($use_descriptions) {              elsif ($use_descriptions) {
Line 555  elsif (-d $fullname) {
Line 568  elsif (-d $fullname) {
             closedir($dh);              closedir($dh);
         }          }
   
         my $hideAtticToggleLink = "<a href=\"./" .          my $hideAtticToggleLink = $input{'hideattic'} ? '' :
                 &toggleQuery ("hideattic") .            &link('[Hide]', sprintf('./%s#dirlist',
                 "#dirlist\">[Hide]</a>" if (!$input{'hideattic'});                                    &toggleQuery ("hideattic")));
   
         # Sort without the Attic/ pathname.          # Sort without the Attic/ pathname.
         # place directories first          # place directories first
Line 602  elsif (-d $fullname) {
Line 615  elsif (-d $fullname) {
                         print $backicon;                          print $backicon;
                     }                      }
                     else {                      else {
                         print &link($backicon,$url);                          print &link($backicon, $url);
                     }                      }
                     print " ", &link("Previous Directory",$url);                      print " ", &link("Previous Directory", $url);
                 }                  }
                 else {                  else {
                     $url = urlencode($_) . '/' . $query;                      $url = urlencode($_) . '/' . $query;
Line 613  elsif (-d $fullname) {
Line 626  elsif (-d $fullname) {
                         print $diricon;                          print $diricon;
                     }                      }
                     else {                      else {
                         print &link($diricon,$url);                          print &link($diricon, $url);
                     }                      }
                     print " ", &link($_ . "/", $url), $attic;                      print " ", &link("$_/", $url), $attic;
                     if ($_ eq "Attic") {                      if ($_ eq "Attic") {
                         print "&nbsp; <a href=\"./" .                          print "&nbsp; ";
                             &toggleQuery ("hideattic") .                          print &link("[Don't hide]", sprintf('./%s#dirlist',
                                 "#dirlist\">[Don't hide]</a>";                                                              &toggleQuery ("hideattic")));
                     }                      }
                 }                  }
                 # Show last change in dir                  # Show last change in dir
Line 690  elsif (-d $fullname) {
Line 703  elsif (-d $fullname) {
                 print " ", &link($_, $url), $attic;                  print " ", &link($_, $url), $attic;
                 print "</td><td>&nbsp;" if ($dirtable);                  print "</td><td>&nbsp;" if ($dirtable);
                 download_link($fileurl,                  download_link($fileurl,
                         $rev, $rev,                                $rev, $rev,
                         $defaultViewable ? "text/x-cvsweb-markup" : undef);                                $defaultViewable ? "text/x-cvsweb-markup" : undef);
                 print "</td><td>&nbsp;" if ($dirtable);                  print "</td><td>&nbsp;" if ($dirtable);
                 if ($date) {                  if ($date) {
                     print " <i>" . readableTime(time() - $date,0) . "</i>";                      print " <i>" . readableTime(time() - $date,0) . "</i>";
Line 921  sub findLastModifiedSubdirs(@) {
Line 934  sub findLastModifiedSubdirs(@) {
 }  }
   
 sub htmlify($;$) {  sub htmlify($;$) {
         my($string, $extra) = @_;          (local $_, my $extra) = @_;
   
         # Special Characters; RFC 1866          $_ = htmlquote($_);
         $string =~ s/&/&amp;/g;  
         $string =~ s/\"/&quot;/g;  
         $string =~ s/</&lt;/g;  
         $string =~ s/>/&gt;/g;  
   
         # get URL's as link ..          # get URL's as link
         $string =~ s`(http|ftp|https)(://[-a-zA-Z0-9%.~:_/]+)([?&]([-a-zA-Z0-9%.~:_]+)=([-a-zA-Z0-9%.~:_])+)*`<A HREF="$1$2$3">$1$2$3</A>`g;    # `          s`(http|ftp|https)(://[-a-zA-Z0-9%.~:_/]+)([?&]([-a-zA-Z0-9%.~:_]+)=([-a-zA-Z0-9%.~:_])+)*`&link("$1$2$3", "$1$2$3")`ge;        # `
         # get e-mails as link          # get e-mails as link
         $string =~ s`([-a-zA-Z0-9_.]+@([-a-zA-Z0-9]+\.)+[A-Za-z]{2,4})`<A HREF="mailto:$1">$1</A>`g;    # `          s`[-a-zA-Z0-9_.]+@([-a-zA-Z0-9]+\.)+[A-Za-z]{2,4}`&link($&, "mailto:$&")`ge;    # `
   
         if ($extra) {          if ($extra) {
             # get PR #'s as link ..              # get PR #'s as link: "PR#nnnn" "PR: nnnn, ..." "PR nnnn, ..." "bin/nnnn"
             if (defined($prcgi)) {              if (defined($prcgi)) {
                 1 while $string =~ s`\b(pr[:#]?\s*(?:#?\d+[,\s]\s*)*#?)(\d+)\b`$1 . &link($2, sprintf($prcgi, $2))`ie; # `;                  1 while s`\b(pr[:#]?\s*(?:#?\d+[,\s]\s*)*#?)(\d+)\b`$1 . &link($2, sprintf($prcgi, $2))`ie; # `;
                 $string =~ s`\b${prcategories}/(\d+)\b`&link($&, sprintf($prcgi, $1))`igeo;     # `;                  s`\b${prcategories}/(\d+)\b`&link($&, sprintf($prcgi, $1))`igeo;        # `;
             }              }
   
             # get manpage specs as link ..              # get manpage specs as link: "foo.1" "foo(1)"
             if (defined($mancgi)) {              if (defined($mancgi)) {
                 $string =~ s`\b([a-zA-Z]\w+)(?:\(([0-9n])\)\B|\.([0-9n])\b)`&link($&, sprintf($mancgi, $2 ne '' ? $2 : $3, $1))`ge; # `x;                  s`\b([a-zA-Z]\w+)(?:\(([0-9n])\)\B|\.([0-9n])\b)`&link($&, sprintf($mancgi, $2 ne '' ? $2 : $3, $1))`ge; # `x;
             }              }
         }          }
   
         return $string;          $_;
 }  }
   
 sub spacedHtmlText($;$) {  sub spacedHtmlText($;$) {
Line 983  sub spacedHtmlText($;$) {
Line 992  sub spacedHtmlText($;$) {
 sub link($$) {  sub link($$) {
         my($name, $where) = @_;          my($name, $where) = @_;
   
         return "<A HREF=\"$where\">$name</A>";          sprintf '<A HREF="%s">%s</A>', htmlquote($where), $name;
 }  }
   
 sub revcmp($$) {  sub revcmp($$) {
Line 1031  sub redirect($) {
Line 1040  sub redirect($) {
                 print "Location: $url\r\n";                  print "Location: $url\r\n";
         }          }
         html_header("Moved");          html_header("Moved");
         print "This document is located <A HREF=$url>here</A>.\n";          print "This document is located ", &link('here', $url), "\n";
         print &html_footer;          print &html_footer;
         exit(1);          exit(1);
 }  }
Line 1256  sub doAnnotate($$) {
Line 1265  sub doAnnotate($$) {
             }              }
             else {              else {
                 $revprint = sprintf('%-8s', $lrev);                  $revprint = sprintf('%-8s', $lrev);
                 $revprint =~ s`\S+`<a href="${scriptwhere}${barequery}#rev$&">$&</A>`;  # `                  $revprint =~ s`\S+`&link($&, "$scriptwhere$barequery#rev$&")`e; # `
                 $oldLusr = '';                  $oldLusr = '';
             }              }
             if ($lusr eq $oldLusr) {              if ($lusr eq $oldLusr) {
Line 1404  sub cvswebMarkup($$$) {
Line 1413  sub cvswebMarkup($$$) {
     print "<HR noshade>";      print "<HR noshade>";
     print "<table width=\"100%\"><tr><td bgcolor=\"$markupLogColor\">";      print "<table width=\"100%\"><tr><td bgcolor=\"$markupLogColor\">";
     print "File: ", &clickablePath($where, 1);      print "File: ", &clickablePath($where, 1);
     print "&nbsp;";      print "&nbsp;(";
     &download_link(urlencode($fileurl), $revision, "(download)");      &download_link($fileurl, $revision, "download");
       print ")";
     if (!$defaultTextPlain) {      if (!$defaultTextPlain) {
         print "&nbsp;";          print "&nbsp;(";
         &download_link(urlencode($fileurl), $revision, "(as text)",          &download_link($fileurl, $revision, "as text",
                "text/plain");                 "text/plain");
           print ")";
     }      }
     print "<BR>\n";      print "<BR>\n";
     if ($show_log_in_markup) {      if ($show_log_in_markup) {
Line 1425  sub cvswebMarkup($$$) {
Line 1436  sub cvswebMarkup($$$) {
     my $url = download_url($fileurl, $revision, $mimetype);      my $url = download_url($fileurl, $revision, $mimetype);
     print "<HR noshade>";      print "<HR noshade>";
     if ($mimetype =~ /^image/) {      if ($mimetype =~ /^image/) {
         print "<IMG SRC=\"$url$barequery\"><BR>";          printf '<IMG SRC="%s"><BR>', htmlquote("$url$barequery");
     }      }
     elsif ($mimetype =~ m%^application/pdf%) {      elsif ($mimetype =~ m%^application/pdf%) {
         print "<EMBED SRC=\"$url$barequery\" WIDTH=\"100%\"><BR>";          printf '<EMBED SRC="%s" WIDTH="100%"><BR>', htmlquote("$url$barequery");
     }      }
     else {      else {
         print "<PRE>";          print "<PRE>";
Line 2024  sub printLog($;$) {
Line 2035  sub printLog($;$) {
             }              }
             print "\n Revision ";              print "\n Revision ";
             &download_link($fileurl, $_, $_,              &download_link($fileurl, $_, $_,
                 $defaultViewable ? "text/x-cvsweb-markup" : undef);                             $defaultViewable ? "text/x-cvsweb-markup" : undef);
             if ($defaultViewable) {              if ($defaultViewable) {
                 print " / ";                  print " / (";
                 &download_link($fileurl, $_, "(download)", $mimetype);                  &download_link($fileurl, $_, "download", $mimetype);
                   print ")";
             }              }
             if (not $defaultTextPlain) {              if (not $defaultTextPlain) {
                 print " / ";                  print " / (";
                 &download_link($fileurl, $_, "(as text)",                  &download_link($fileurl, $_, "as text", "text/plain");
                            "text/plain");                  print ")";
             }              }
             if (!$defaultViewable) {              if (!$defaultViewable) {
                 print " / ";                  print " / (";
                 &download_link($fileurl, $_, "(view)", "text/x-cvsweb-markup");                  &download_link($fileurl, $_, "view", "text/x-cvsweb-markup");
                   print ")";
             }              }
             if ($allow_annotate) {              if ($allow_annotate) {
                 print " - <a href=\"" . $scriptname . "/" . urlencode($where) . "?annotate=$_$barequery\">";                  print " - ";
                 print "annotate</a>";                  print &link('annotate',
                               sprintf('%s/%s?annotate=%s%s',
                                       $scriptname,
                                       urlencode($where),
                                       $_,
                                       $barequery));
             }              }
             # Plus a select link if enabled, and this version isn't selected              # Plus a select link if enabled, and this version isn't selected
             if ($allow_version_select) {              if ($allow_version_select) {
                 if ((!defined($input{"r1"}) || $input{"r1"} ne $_)) {                  if ((!defined($input{"r1"}) || $input{"r1"} ne $_)) {
                     print " - <A HREF=\"${scriptwhere}?r1=$_$barequery" .                      print " - ";
                         "\">[select for diffs]</A>\n";                      print &link('[select for diffs]',
                                   sprintf('%s?r1=%s%s',
                                           $scriptwhere,
                                           $_,
                                           $barequery));
                 }                  }
                 else {                  else {
                     print " - <b>[selected]</b>";                      print " - <b>[selected]</b>";
Line 2101  sub printLog($;$) {
Line 2123  sub printLog($;$) {
             # Offer diff to previous revision              # Offer diff to previous revision
             if ($prev) {              if ($prev) {
                 $diffrev{$prev} = 1;                  $diffrev{$prev} = 1;
                 print " to previous <A HREF=\"${scriptwhere}.diff?r1=$prev";  
                 print "&amp;r2=$_" . $barequery . "\">$prev</A>\n";                  my $url = sprintf('%s.diff?r1=%s&r2=%s%s',
                                     $scriptwhere,
                                     $prev,
                                     $_,
                                     $barequery);
   
                   print " to previous ";
                   print &link($prev, $url);
                 if (!$hr_default) { # offer a human readable version if not default                  if (!$hr_default) { # offer a human readable version if not default
                     print "(<A HREF=\"${scriptwhere}.diff?r1=$prev";                      print &link('colored', "$url&f=h");
                     print "&amp;r2=$_" . $barequery . "&amp;f=h\">colored</A>)\n";  
                 }                  }
             }              }
             #              #
             # Plus, if it's on a branch, and it's not a vendor branch,              # Plus, if it's on a branch, and it's not a vendor branch,
             # offer a diff with the branch point.              # offer a diff with the branch point.
             if ($revsym{$brp} && !/^1\.1\.1\.\d+$/ && !defined($diffrev{$brp})) {              if ($revsym{$brp} && !/^1\.1\.1\.\d+$/ && !defined($diffrev{$brp})) {
                 print " to branchpoint <A HREF=\"${scriptwhere}.diff?r1=$brp";                  my $url = sprintf('%s.diff?r1=%s&r2=%s%s',
                 print "&amp;r2=$_" . $barequery . "\">$brp</A>\n";                                    $scriptwhere,
                                     $brp,
                                     $_,
                                     $barequery);
   
                   print " to branchpoint ";
                   print &link($brp, $url);
                 if (!$hr_default) { # offer a human readable version if not default                  if (!$hr_default) { # offer a human readable version if not default
                 print "(<A HREF=\"${scriptwhere}.diff?r1=$brp";                      print &link('colored', "$url&f=h");
                 print "&amp;r2=$_" . $barequery . "&amp;f=h\">colored</A>)\n";  
                 }                  }
             }              }
             #              #
Line 2142  sub printLog($;$) {
Line 2175  sub printLog($;$) {
                 }                  }
                 if (!defined($diffrev{$nextmain})) {                  if (!defined($diffrev{$nextmain})) {
                     $diffrev{$nextmain} = 1;                      $diffrev{$nextmain} = 1;
                     print " next main <A HREF=\"${scriptwhere}.diff?r1=$nextmain";  
                     print "&amp;r2=$_" . $barequery .                      my $url = sprintf('%s.diff?r1=%s&r2=%s%s',
                         "\">$nextmain</A>\n";                                        $scriptwhere,
                                         $nextmain,
                                         $_,
                                         $barequery);
   
                       print " next main ";
                       print &link($nextmain, $url);
                     if (!$hr_default) { # offer a human readable version if not default                      if (!$hr_default) { # offer a human readable version if not default
                         print "(<A HREF=\"${scriptwhere}.diff?r1=$nextmain";                          print &link('colored', "$url&f=h");
                         print "&amp;r2=$_" . $barequery .  
                             "&amp;f=h\">colored</A>)\n";  
                     }                      }
                 }                  }
             }              }
Line 2156  sub printLog($;$) {
Line 2193  sub printLog($;$) {
             # to make a diff to that revision              # to make a diff to that revision
             if (defined($input{"r1"}) && !defined($diffrev{$input{"r1"}})) {              if (defined($input{"r1"}) && !defined($diffrev{$input{"r1"}})) {
                 $diffrev{$input{"r1"}} = 1;                  $diffrev{$input{"r1"}} = 1;
                 print " to selected <A HREF=\"${scriptwhere}.diff?"  
                         . "r1=$input{'r1'}&amp;r2=$_" . $barequery  
                         . "\">$input{'r1'}</A>\n";  
                 if (!$hr_default) { # offer a human readable version if not default  
                     print "(<A HREF=\"${scriptwhere}.diff?r1=$input{'r1'}";  
                     print "&amp;r2=$_" . $barequery .  
                         "&amp;f=h\">colored</A>)\n";  
   
                   my $url = sprintf('%s.diff?r1=%s&r2=%s%s',
                                     $scriptwhere,
                                     $input{'r1'},
                                     $_,
                                     $barequery);
   
                   print " to selected ";
                   print &link($input{'r1'}, $url);
                   if (!$hr_default) { # offer a human readable version if not default
                       print &link('colored', "$url&f=h");
                 }                  }
             }              }
         }          }
Line 2183  sub doLog($) {
Line 2223  sub doLog($) {
         ($filename = $where) =~ s|^.*/||;          ($filename = $where) =~ s|^.*/||;
         $backurl = $scriptname . "/" . urlencode($upwhere) . $query;          $backurl = $scriptname . "/" . urlencode($upwhere) . $query;
         print &link($backicon, "$backurl#$filename"),          print &link($backicon, "$backurl#$filename"),
               " <b>Up to ", &clickablePath($upwhere, 1), "</b><p>\n";            " <b>Up to ", &clickablePath($upwhere, 1), "</b><p>\n";
         print <<EOF;          print &link('Request diff between arbitrary revisions', '#diff');
 <A HREF="#diff">Request diff between arbitrary revisions</A>          print '<HR NOSHADE>';
 <HR NOSHADE>  
 EOF  
         if ($curbranch) {          if ($curbranch) {
             print "Default branch: ", ($revsym{$curbranch} || $curbranch);              print "Default branch: ", ($revsym{$curbranch} || $curbranch);
         }          }
Line 2215  EOF
Line 2254  EOF
         print "</A><P>\n";          print "</A><P>\n";
         print "<FORM METHOD=\"GET\" ACTION=\"${scriptwhere}.diff\" NAME=\"diff_select\">\n";          print "<FORM METHOD=\"GET\" ACTION=\"${scriptwhere}.diff\" NAME=\"diff_select\">\n";
         foreach (@stickyvars) {          foreach (@stickyvars) {
             print "<INPUT TYPE=HIDDEN NAME=\"$_\" VALUE=\"$input{$_}\">\n"              printf('<INPUT TYPE=HIDDEN NAME="%s" VALUE="%s">',  $_, $input{$_})
                 if (defined($input{$_})                  if (defined($input{$_})
                     && ((!defined($DEFAULTVALUE{$_})                      && ((!defined($DEFAULTVALUE{$_})
                          || $input{$_} ne $DEFAULTVALUE{$_})                           || $input{$_} ne $DEFAULTVALUE{$_})
Line 2497  sub navigateHeader($$$$$) {
Line 2536  sub navigateHeader($$$$$) {
     print  "$body_tag_for_src\n";      print  "$body_tag_for_src\n";
     print "<table width=\"100%\" border=0 cellspacing=0 cellpadding=1 bgcolor=\"$navigationHeaderColor\">";      print "<table width=\"100%\" border=0 cellspacing=0 cellpadding=1 bgcolor=\"$navigationHeaderColor\">";
     print "<tr valign=bottom><td>";      print "<tr valign=bottom><td>";
     print  "<a href=\"$swhere$query#rev$rev\">$backicon";      print &link($backicon, "$swhere$query#rev$rev");
     print "</a> <b>Return to ", &link("$filename","$swhere$query#rev$rev")," CVS log";      print "</a> <b>Return to ", &link("$filename","$swhere$query#rev$rev")," CVS log";
     print "</b> $fileicon</td>";      print "</b> $fileicon</td>";
   
Line 2579  sub clickablePath($$) {
Line 2618  sub clickablePath($$) {
         $retval = "[$cvstree]";          $retval = "[$cvstree]";
     }      }
     else {      else {
         $retval = $retval . " <a href=\"${scriptname}/${query}#dirlist\">[$cvstree]</a>";          $retval .= ' ' . &link("[$cvstree]", sprintf('%s/%s#dirlist',
                                                        $scriptname,
                                                        $query));
         my $wherepath = '';          my $wherepath = '';
         my ($lastslash) = $pathname =~ m|/$|;          my ($lastslash) = $pathname =~ m|/$|;
         foreach (split(/\//, $pathname)) {          foreach (split(/\//, $pathname)) {
Line 2588  sub clickablePath($$) {
Line 2629  sub clickablePath($$) {
             my ($last) = "$wherepath/" eq "/$pathname"              my ($last) = "$wherepath/" eq "/$pathname"
                 || $wherepath eq "/$pathname";                  || $wherepath eq "/$pathname";
             if ($clickLast || !$last) {              if ($clickLast || !$last) {
                 $retval = $retval . "<a href=\"${scriptname}"                  $retval .= &link($_, join('',
                     . urlencode($wherepath)                                            $scriptname,
                     . (!$last || $lastslash ? '/' : '')                                            urlencode($wherepath),
                     . ${query}                                            (!$last || $lastslash ? '/' : ''),
                     . (!$last || $lastslash ? "#dirlist" : "")                                            $query,
                     . "\">$_</a>";                                            (!$last || $lastslash ? "#dirlist" : "")));
             }              }
             else { # do not make a link to the current dir              else { # do not make a link to the current dir
                 $retval = $retval .  $_;                  $retval .= $_;
             }              }
         }          }
     }      }
Line 2653  sub chooseMirror() {
Line 2694  sub chooseMirror() {
         print "\nThis cvsweb is mirrored in:\n";          print "\nThis cvsweb is mirrored in:\n";
         foreach $mirror (keys %MIRRORS) {          foreach $mirror (keys %MIRRORS) {
             print ", " if ($moremirrors);              print ", " if ($moremirrors);
             print qq(<a href="$MIRRORS{$mirror}">$mirror</A>\n);              print &link(htmlquote($mirror),$MIRRORS{$mirror});
             $moremirrors = 1;              $moremirrors = 1;
         }          }
         print "<p>\n";          print "<p>\n";
Line 2696  sub download_url($$;$) {
Line 2737  sub download_url($$;$) {
   
     $revision =~ s/\b0\.//;      $revision =~ s/\b0\.//;
   
     if (defined($checkout_magic)      if (defined($checkoutMagic)
         && (!defined($mimetype) || $mimetype ne "text/x-cvsweb-markup")) {          && (!defined($mimetype) || $mimetype ne "text/x-cvsweb-markup")) {
         my ($path);          my $path = $where;
         ($path = $where) =~ s|/[^/]*$|/|;          $path =~ s|/[^/]*$|/|;
         $url = "$scriptname/$checkoutMagic/${path}$url";          $url = "$scriptname/$checkoutMagic/${path}$url";
     }      }
     $url .= "?rev=$revision";      $url .= "?rev=$revision";
     $url .= "&amp;content-type=$mimetype" if (defined($mimetype));      $url .= '&content-type=' . urlencode($mimetype) if (defined($mimetype));
   
     return $url;      $url;
 }  }
   
 # Presents a link to download the  # Presents a link to download the
 # selected revision  # selected revision
 sub download_link($$$;$) {  sub download_link($$$;$) {
     my ($url,$revision,$textlink,$mimetype) = @_;      my ($url, $revision, $textlink, $mimetype) = @_;
     my ($fullurl) = download_url($url,$revision,$mimetype);      my ($fullurl) = download_url($url, $revision, $mimetype);
     my ($paren) = $textlink =~ /^\(/;  
     $textlink =~ s/^\(// if ($paren);      printf '<A HREF="%s"', htmlquote("$fullurl$barequery");
     $textlink =~ s/\)$// if ($paren);  
     print "(" if ($paren);  
     print "<A HREF=\"$fullurl";  
     print $barequery;  
     print "\"";  
     if ($open_extern_window && (!defined($mimetype) || $mimetype ne "text/x-cvsweb-markup")) {      if ($open_extern_window && (!defined($mimetype) || $mimetype ne "text/x-cvsweb-markup")) {
         print " target=\"cvs_checkout\"";          print ' target="cvs_checkout"';
         # we should have          # we should have
         #   'if (document.cvswin==null) document.cvswin=window.open(...'          #   'if (document.cvswin==null) document.cvswin=window.open(...'
         # in order to allow the user to resize the window; otherwise          # in order to allow the user to resize the window; otherwise
Line 2740  sub download_link($$$;$) {
Line 2777  sub download_link($$$;$) {
         # currently, the best way is to comment out the size parameters          # currently, the best way is to comment out the size parameters
         # ($extern_window...) in cvsweb.conf.          # ($extern_window...) in cvsweb.conf.
         if ($use_java_script) {          if ($use_java_script) {
             print " onClick=\"window.open('$fullurl','cvs_checkout',";              my @attr = qw(resizeable scrollbars);
             print "'resizeable,scrollbars";  
             print ",status,toolbar" if (defined($mimetype)              push @attr, qw(status toolbar)
                 && $mimetype eq "text/html");                if (defined($mimetype) && $mimetype eq "text/html");
             print ",width=$extern_window_width" if (defined($extern_window_width));  
             print ",height=$extern_window_height" if (defined($extern_window_height));              push @attr, "width=$extern_window_width"
             print"');\"";                if (defined($extern_window_width));
   
               push @attr, "height=$extern_window_height"
                 if (defined($extern_window_height));
   
               printf q` onClick="window.open('%s','cvs_checkout','%s');"`,
                 htmlquote($fullurl), join(',', @attr);
         }          }
     }      }
     print "><b>$textlink</b></A>";      print "><b>$textlink</b></A>";
     print ")" if ($paren);  
 }  }
   
 # Returns a Query string with the  # Returns a Query string with the
Line 2772  sub toggleQuery($$) {
Line 2814  sub toggleQuery($$) {
         my ($value) = defined($vars{$var}) ? $vars{$var} : "";          my ($value) = defined($vars{$var}) ? $vars{$var} : "";
         my ($default) = defined($DEFAULTVALUE{$var}) ? $DEFAULTVALUE{$var} : "";          my ($default) = defined($DEFAULTVALUE{$var}) ? $DEFAULTVALUE{$var} : "";
         if ($value ne $default) {          if ($value ne $default) {
             $newquery .= "&amp;" if ($newquery ne "");              $newquery .= "&" if ($newquery ne "");
             $newquery .= urlencode($var) . "=" . urlencode($value);              $newquery .= urlencode($var) . "=" . urlencode($value);
         }          }
     }      }
Line 2783  sub toggleQuery($$) {
Line 2825  sub toggleQuery($$) {
 }  }
   
 sub urlencode($) {  sub urlencode($) {
     my ($in) = @_;      local($_) = @_;
     my ($out);  
     ($out = $in) =~ s/([\000-+{-\377])/sprintf("%%%02x", ord($1))/ge;      s/[\000-+{-\377]/sprintf("%%%02x", ord($&))/ge;
     return $out;  
   
          $_;
 }  }
   
   sub htmlquote($) {
       local($_) = @_;
   
       # Special Characters; RFC 1866
       s/&/&amp;/g;
       s/\"/&quot;/g;
       s/</&lt;/g;
       s/>/&gt;/g;
   
       $_;
   }
   
 sub http_header(;$) {  sub http_header(;$) {
     my $content_type = shift || "text/html";      my $content_type = shift || "text/html";
     if (defined($moddate)) {      if (defined($moddate)) {
Line 2875  sub link_tags($) {
Line 2931  sub link_tags($) {
   
     foreach my $sym (split(", ", $tags)) {      foreach my $sym (split(", ", $tags)) {
         $ret .= ",\n" if ($ret ne "");          $ret .= ",\n" if ($ret ne "");
         $ret .= "<A HREF=\"$fileurl"          $ret .= &link($sym, $fileurl . toggleQuery('only_with_tag',$sym));
                 . toggleQuery('only_with_tag',$sym) . "\">$sym</A>";  
     }      }
     return $ret."\n";      return "$ret\n";
 }  }
   
 #  #

Legend:
Removed from v.3.34  
changed lines
  Added in v.3.35

CVSweb