Diff for /rat/lonpage.pm between versions 1.5 and 1.6

version 1.5, 2000/09/15 20:03:48 version 1.6, 2000/09/16 17:42:01
Line 4 Line 4
 # (TeX Content Handler  # (TeX Content Handler
 #  #
 # 05/29/00,05/30 Gerd Kortemeyer)  # 05/29/00,05/30 Gerd Kortemeyer)
 # 08/30,08/31,09/06,09/14,09/15 Gerd Kortemeyer  # 08/30,08/31,09/06,09/14,09/15,09/16 Gerd Kortemeyer
   
 package Apache::lonpage;  package Apache::lonpage;
   
 use strict;  use strict;
 use Apache::Constants qw(:common :http);  use Apache::Constants qw(:common :http);
 use Apache::lonnet();  use Apache::lonnet();
   use HTML::TokeParser;
 use GDBM_File;  use GDBM_File;
   
 # -------------------------------------------------------------- Module Globals  # -------------------------------------------------------------- Module Globals
 my %hash;  my %hash;
 my @rows;  my @rows;
                     
 my %ssibody=();  # ------------------------------------------------------------------ Euclid gcd
 my %ssibgcolor=();  
 my %ssitext=();  sub euclid {
 my %ssilink=();      my ($e,$f)=@_;
 my %ssivlink=();      my $a; my $b; my $r;
 my %ssialink=();      if ($e>$f) { $b=$e; $r=$f; } else { $r=$e; $b=$f; }
 my %cellemb=();      while ($r!=0) {
    $a=$b; $b=$r;
           $r=$a%$b;
       }
       return $b;
   }
   
 # ------------------------------------------------------------ Build page table  # ------------------------------------------------------------ Build page table
   
Line 76  sub tracetable { Line 82  sub tracetable {
     return $further;      return $further;
 }  }
   
 sub cell {  
     my ($r,$colspan,$rid)=@_;  
     $r->print('<td colspan="'.$colspan.'"');  
     if ($cellemb{$rid} eq 'ssi') {  
        $r->print('>'.$ssibody{$rid});  
     } elsif ($cellemb{$rid} eq 'img') {  
        $r->print('><img src="'.$hash{'src_'.$rid}.'">');  
     }  
     $r->print('</td>');  
 }  
   
 # ================================================================ Main Handler  # ================================================================ Main Handler
   
 sub handler {  sub handler {
Line 129  sub handler { Line 124  sub handler {
   
                   my $i;                    my $i;
                   my $j;                    my $j;
                   my $maxcols=-1;                    my $lcm=1;
                     my $contents=0;
                     
                     my %ssibody=();
                     my %ssibgcolor=();
                     my %ssitext=();
                     my %ssilink=();
                     my %ssivlink=();
                     my %ssialink=();
                     my %cellemb=();
   
 # --------------------------------------------- Get SSI output, post parameters  # --------------------------------------------- Get SSI output, post parameters
   
                   for ($i=0;$i<=$#rows;$i++) {                    for ($i=0;$i<=$#rows;$i++) {
      if ($rows[$i]) {       if ($rows[$i]) {
         $contents++;
                       my @colcont=split(/\&/,$rows[$i]);                        my @colcont=split(/\&/,$rows[$i]);
                       $maxcols=$#colcont>$maxcols?$#colcont:$maxcols;                        $lcm*=($#colcont+1)/euclid($lcm,($#colcont+1));
                       map {                        map {
                           my $src=$hash{'src_'.$_};                            my $src=$hash{'src_'.$_};
                           $src=~/\.(\w+)$/;                            $src=~/\.(\w+)$/;
Line 153  sub handler { Line 158  sub handler {
                                   }                                    }
                               } keys %ENV;                                } keys %ENV;
                               my $output=Apache::lonnet::ssi($src,%posthash);                                my $output=Apache::lonnet::ssi($src,%posthash);
                                 my $parser=HTML::TokeParser->new(\$output);
                                 my $token;
                                 my $bodydef=0;
                                 while (($bodydef==0) &&
                                        ($token=$parser->get_token)) {
     if ($token->[1] eq 'body') {
                                        $bodydef=1
                                     }
                                     if ($token->[1] eq 'meta') {
                                     }
                                     if ($token->[1] eq 'script') {
                                     }
                                     if ($token->[1] eq 'basefont') {
                                     }
                                 }
                                 if ($output=~/\<body[^\>]*\>(.*)/si) {
                                    $output=$1; 
                                 }
                                 $output=~s/\<\/body\>.*//si;
       $ssibody{$_}=$output;        $ssibody{$_}=$output;
   
 # ---------------------------------------------------------------- End SSI cell  # ---------------------------------------------------------------- End SSI cell
Line 161  sub handler { Line 184  sub handler {
                       } @colcont;                        } @colcont;
                      }                        } 
                   }                    }
                   if ($maxcols<0) {                    unless ($contents) {
                       $r->content_type('text/html');                        $r->content_type('text/html');
                       $r->send_http_header;                        $r->send_http_header;
                       $r->print('<html><body>Empty page.</body></html>');                        $r->print('<html><body>Empty page.</body></html>');
                   } else {                    } else {
 # ------------------------------------------------------------------ Build page  # ------------------------------------------------------------------ Build page
                       $maxcols++;  
                       $r->content_type('text/html');                        $r->content_type('text/html');
                       $r->send_http_header;                        $r->send_http_header;
                       $r->print('<html><body>');                        $r->print('<html><body>');
     
                       $r->print('<table cols="'.$maxcols.'" rows="'.                        $r->print('<table cols="'.$lcm.'" border="1">');
                                  $#rows.'" border="0">');  
                       for ($i=0;$i<=$#rows;$i++) {                        for ($i=0;$i<=$#rows;$i++) {
  if ($rows[$i]) {   if ($rows[$i]) {
                           $r->print("\n<tr>");                            $r->print("\n<tr>");
                           my @colcont=split(/\&/,$rows[$i]);                            my @colcont=split(/\&/,$rows[$i]);
                           my $avespan=int($maxcols/($#colcont+1));                            my $avespan=$lcm/($#colcont+1);
                           my $lastspan=$maxcols-$avespan*$#colcont;                            for ($j=0;$j<=$#colcont;$j++) {
                           for ($j=0;$j<$#colcont;$j++) {                                my $rid=$colcont[$j];
                               &cell($r,$avespan,$colcont[$j]);                                $r->print('<td colspan="'.$avespan.'"');
                                 if ($cellemb{$rid} eq 'ssi') {
                                    $r->print('>'.$ssibody{$rid});
                                 } elsif ($cellemb{$rid} eq 'img') {
                                    $r->print('><img src="'.
                                       $hash{'src_'.$rid}.'">');
         }
                                 $r->print('</td>');
                           }                            }
                           &cell($r,$lastspan,$colcont[$#colcont]);  
                           $r->print('</tr>');                            $r->print('</tr>');
         }          }
                       }                        }

Removed from v.1.5  
changed lines
  Added in v.1.6


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>