Diff for /loncom/homework/inputtags.pm between versions 1.45 and 1.75

version 1.45, 2001/10/03 12:48:47 version 1.75, 2002/11/27 19:25:56
Line 1 Line 1
 # The LearningOnline Network with CAPA  # The LearningOnline Network with CAPA
 # input  definitons  # input  definitons
   #
   # $Id$
   #
   # Copyright Michigan State University Board of Trustees
   #
   # This file is part of the LearningOnline Network with CAPA (LON-CAPA).
   #
   # LON-CAPA is free software; you can redistribute it and/or modify
   # it under the terms of the GNU General Public License as published by
   # the Free Software Foundation; either version 2 of the License, or
   # (at your option) any later version.
   #
   # LON-CAPA is distributed in the hope that it will be useful,
   # but WITHOUT ANY WARRANTY; without even the implied warranty of
   # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   # GNU General Public License for more details.
   #
   # You should have received a copy of the GNU General Public License
   # along with LON-CAPA; if not, write to the Free Software
   # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
   #
   # /home/httpd/html/adm/gpl.txt
   #
   # http://www.lon-capa.org/
   #
 # 2/19 Guy   # 2/19 Guy 
   
 package Apache::inputtags;  package Apache::inputtags;
   use HTML::Entities();
 use strict;  use strict;
   
 sub BEGIN {  BEGIN {
   &Apache::lonxml::register('Apache::inputtags',('textarea','textline','datasubmission'));    &Apache::lonxml::register('Apache::inputtags',('textfield','textline'));
 }  }
   
   
Line 21  sub initialize_inputtags { Line 47  sub initialize_inputtags {
   @Apache::inputtags::responselist=();    @Apache::inputtags::responselist=();
   # list of whether or not a specific response was previously used    # list of whether or not a specific response was previously used
   @Apache::inputtags::previous=();    @Apache::inputtags::previous=();
     # submission it was used in
     @Apache::inputtags::previous_version=();
   # id of current part, 0 means that no part is current (inside <problem> only    # id of current part, 0 means that no part is current (inside <problem> only
   $Apache::inputtags::part='';    $Apache::inputtags::part='';
   # list of problem date statuses, the first element is for <problem>     # list of problem date statuses, the first element is for <problem>
   #if there is a second element it is for the current <part>    # if there is a second element it is for the current <part>
   @Apache::inputtags::status=();    @Apache::inputtags::status=();
   #hash of defined params for the current response    # hash of defined params for the current response
   %Apache::inputtags::params=();    %Apache::inputtags::params=();
     # list of all ids, for <import>, these get join()ed and prepended
     @Apache::inputtags::import=();
 }  }
   
 sub start_input {  sub start_input {
Line 44  sub end_input { Line 74  sub end_input {
   return '';    return '';
 }  }
   
 sub start_textarea {  sub start_textfield {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
   my $result = "";    my $result = "";
   my $id = &start_input($parstack,$safeeval);    my $id = &start_input($parstack,$safeeval);
     my $resid=$Apache::inputtags::response[-1];
   if ($target eq 'web') {    if ($target eq 'web') {
     my $oldresponse = $Apache::lonhomework::history{"resource.$Apache::inputtags::part.$Apache::inputtags::response['-1'].submission"};      $Apache::lonxml::evaluate--;
     my $cols = &Apache::lonxml::get_param('cols',$parstack,$safeeval);  
     if ( $cols eq '') { $cols = 80; }  
     my $rows = &Apache::lonxml::get_param('rows',$parstack,$safeeval);  
     if ( $rows eq '') { $rows = 10; }  
     if ($Apache::inputtags::status[-1] eq 'CAN_ANSWER') {      if ($Apache::inputtags::status[-1] eq 'CAN_ANSWER') {
       $result= '<textarea name="HWVAL'.$Apache::inputtags::response['-1'].'" '.   my $partid=$Apache::inputtags::part;
  "rows=\"$rows\" cols=\"$cols\">".$oldresponse;   my $oldresponse = &HTML::Entities::encode($Apache::lonhomework::history{"resource.$partid.$resid.submission"});
    my $cols = &Apache::lonxml::get_param('cols',$parstack,$safeeval);
    if ( $cols eq '') { $cols = 80; }
    my $rows = &Apache::lonxml::get_param('rows',$parstack,$safeeval);
    if ( $rows eq '') { $rows = 10; }
    $result= '<textarea name="HWVAL'.$resid.'" '.
       "rows=\"$rows\" cols=\"$cols\">".$oldresponse;
    if ($oldresponse ne '') {
       #get rid of any startup text if the user has already responded
       &Apache::lonxml::get_all_text("/textfield",$$parser[-1]);
    }
     } else {      } else {
       $result='<table border="1"><tr><td><i>'.$oldresponse.'</i></td></tr></table>';   #right or wrong don't show it
    #$result='<table border="1"><tr><td><i>'.$oldresponse.'</i></td></tr></table>';
    $result='';
    #get rid of any startup text
    &Apache::lonxml::get_all_text("/textfield",$$parser[-1]);
       }
     } elsif ($target eq 'grade') {
       my $seedtext=&Apache::lonxml::get_all_text("/textfield",$$parser[-1]);
       if ($seedtext eq $ENV{'form.HWVAL'.$resid}) {
         # if the seed text is still there it wasn't a real submission
         $ENV{'form.HWVAL'.$resid}='';
     }      }
     if ($oldresponse ne '') {    } elsif ($target eq 'edit') {
       #get rid of any startup text if the user has already responded      $result.=&Apache::edit::tag_start($target,$token);
       &Apache::lonxml::get_all_text("/textarea",$$parser[$#$parser]);      $result.=&Apache::edit::text_arg('Rows:','rows',$token,4);
       $result.=&Apache::edit::text_arg('Columns:','cols',$token,4);
       my $bodytext=&Apache::lonxml::get_all_text("/textfield",$$parser[-1]);
       $result.=&Apache::edit::editfield($token->[1],$bodytext,'Text you want to appear by default:',80,2);
     } elsif ($target eq 'modified') {
       my $constructtag=&Apache::edit::get_new_args($token,$parstack,
    $safeeval,'rows','cols');
       if ($constructtag) {
         $result = &Apache::edit::rebuild_tag($token);
       } else {
         $result=$token->[4];
     }      }
       $result.=&Apache::edit::modifiedfield();
   }    }
   return $result;    return $result;
 }  }
   
 sub end_textarea {  sub end_textfield {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
     my $result;
   if ($target eq 'web') {    if ($target eq 'web') {
       $Apache::lonxml::evaluate++;
     if ($Apache::inputtags::status[-1] eq 'CAN_ANSWER') {      if ($Apache::inputtags::status[-1] eq 'CAN_ANSWER') {
       return "</textarea>";        return "</textarea>";
     }      }
     } elsif ($target eq 'edit') {
       $result=&Apache::edit::end_table();
   }    }
   &end_input;    &end_input;
   return '';    return $result;
 }  }
   
 sub start_textline {  sub start_textline {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
   my $result = "";    my $result = "";
   if ($target eq 'web') {    if ($target eq 'web') {
     my $size = &Apache::lonxml::get_param('size',$parstack,$safeeval);      $Apache::lonxml::evaluate--;
     if ($size eq '') { $size=20; }  
     my $partid=$Apache::inputtags::part;  
     my $id=$Apache::inputtags::response['-1'];  
     my $oldresponse =   
       $Apache::lonhomework::history{"resource.$partid.$id.submission"};  
     if ($Apache::inputtags::status[-1] eq 'CAN_ANSWER') {      if ($Apache::inputtags::status[-1] eq 'CAN_ANSWER') {
       $result= '<input type="text" name="HWVAL'.$id.'" value="'.        my $size = &Apache::lonxml::get_param('size',$parstack,$safeeval);
  $oldresponse.'" size="'.$size.'" />';        my $maxlength;
         if ($size eq '') { $size=20; } else {
    if ($size < 20) { $maxlength=$size; }
         }
         my $partid=$Apache::inputtags::part;
         my $id=$Apache::inputtags::response[-1];
         my $oldresponse = &HTML::Entities::encode($Apache::lonhomework::history{"resource.$partid.$id.submission"});
         if ($Apache::lonhomework::type ne 'exam') {
           $result= '<input type="text" name="HWVAL'.$id.'" value="'.
       $oldresponse.'" size="'.$size.'" maxlength="'.$maxlength.'" />';
         }
     } else {      } else {
       $result='<i>'.$oldresponse.'</i>';        #right or wrong don't show what was last typed in.
         #$result='<i>'.$oldresponse.'</i>';
         $result='';
     }      }
   } elsif ($target eq 'edit') {    } elsif ($target eq 'edit') {
     $result=&Apache::edit::tag_start($target,$token,      $result=&Apache::edit::tag_start($target,$token);
      &Apache::lonxml::description($token));  
     $result.=&Apache::edit::text_arg('Size:','size',$token,'5')."</td></tr>";      $result.=&Apache::edit::text_arg('Size:','size',$token,'5')."</td></tr>";
     $result.=&Apache::edit::end_table;      $result.=&Apache::edit::end_table;
   } elsif ($target eq 'modified') {    } elsif ($target eq 'modified') {
     my $constructtag=&Apache::edit::get_new_args($token,$parstack,$safeeval,'size');      my $constructtag=&Apache::edit::get_new_args($token,$parstack,$safeeval,'size');
     if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); }      if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); }
     } elsif ($target eq 'tex') {
         $result='\framebox[1cm][s]{\hfill}';
   }    }
   return $result;    return $result;
 }  }
   
 sub end_textline {  sub end_textline {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
   if ($target eq 'edit') { return ('','no'); }    if    ($target eq 'web') { $Apache::lonxml::evaluate++; }
     elsif ($target eq 'edit') { return ('','no'); }
   return "";    return "";
 }  }
   
 sub start_datasubmission {  
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;  
   my $id = &Apache::response::start_response($parstack,$safeeval);  
   my $result;  
   if ($target eq 'meta') {  
     $result = &Apache::response::meta_stores_write($token->[2]->{'name'},  
    $token->[2]->{'type'},  
    $token->[2]->{'display'});  
     $result .= &Apache::response::meta_package_write('datasubmission');  
   }  
   return $result;  
 }  
   
 sub end_datasubmission {  
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;  
   my $result;  
   if ( $target eq 'web' ) {  
   } elsif ($target eq 'grade' ) {  
     if ( defined $ENV{'form.submitted'}) {  
       &Apache::response::setup_params('datasubmission');  
       my $partid = $Apache::inputtags::part;  
       my $id = $Apache::inputtags::response['-1'];  
       my $response = $ENV{'form.HWVAL'.$id};  
       my $name = &Apache::lonxml::get_param('name',$parstack,$safeeval);  
       if ( $response =~ /[^\s]/) {  
  $Apache::lonhomework::results{"resource.$partid.$id.$name"}=  
   $response;  
       }  
     }  
   }  
   &Apache::response::end_response;  
   return $result;  
 }  
   
 sub finalizeawards {  sub finalizeawards {
   my $result='';    my $result='';
   my $award;    my $award;
   if ($#_ == '-1') { $result = "NO_RESPONSE"; }    if ($#_ == '-1') { $result = "NO_RESPONSE"; }
   if ($result eq '' ) {    if ($result eq '' ) {
     foreach $award (@_) { if ($award eq '') {$result='MISSING_ANSWER'; last;}}      my $blankcount;
       foreach $award (@_) {
         if ($award eq '') {
    $result='MISSING_ANSWER';
    $blankcount++;
         }
       }
       if ($blankcount == ($#_ + 1)) { $result = 'NO_RESPONSE'; }
     }
     if ($result eq '' ) {
       foreach $award (@_) { if ($award eq 'MISSING_ANSWER') {$result='MISSING_ANSWER'; last;}}
   }    }
   if ($result eq '' ) {    if ($result eq '' ) {
     foreach $award (@_) { if ($award eq 'ERROR') {$result='ERROR'; last;}}      foreach $award (@_) { if ($award eq 'ERROR') {$result='ERROR'; last;}}
Line 183  sub finalizeawards { Line 230  sub finalizeawards {
     foreach $award (@_) { if ($award eq 'INCORRECT') {$result=$award; last;} }      foreach $award (@_) { if ($award eq 'INCORRECT') {$result=$award; last;} }
   }    }
   if ($result eq '' ) {    if ($result eq '' ) {
       foreach $award (@_) { if ($award eq 'DRAFT') {$result=$award; last;} }
     }
     if ($result eq '' ) {
     foreach $award (@_) { if ($award eq 'SUBMITTED') {$result=$award; last;} }      foreach $award (@_) { if ($award eq 'SUBMITTED') {$result=$award; last;} }
   }    }
   if ($result eq '' ) {    if ($result eq '' ) {
Line 193  sub finalizeawards { Line 243  sub finalizeawards {
 }  }
   
 sub decideoutput {  sub decideoutput {
   my ($award,$solved,$previous)=@_;    my ($award,$solved,$previous,$target)=@_;
   my $message='';    my $message='';
   my $button=0;    my $button=0;
   my $previousmsg;    my $previousmsg;
Line 201  sub decideoutput { Line 251  sub decideoutput {
   if ($previous) { $previousmsg='You have entered that answer before'; }    if ($previous) { $previousmsg='You have entered that answer before'; }
   
   if      ($solved =~ /^correct/) {    if      ($solved =~ /^correct/) {
     $message = "<b>You are correct.</b> Your receipt is ".      if ($target eq 'tex') {
         $message = '\textbf{You are correct}. Your receipt is '.
         &Apache::lonnet::receipt;
       } else {
         $message = "<b>You are correct.</b> Your receipt is ".
       &Apache::lonnet::receipt;        &Apache::lonnet::receipt;
       }
     $button=0;      $button=0;
     $previousmsg='';      $previousmsg='';
   } elsif ($solved =~ /^excused/) {    } elsif ($solved =~ /^excused/) {
Line 249  sub decideoutput { Line 304  sub decideoutput {
   } elsif ($award eq 'SUBMITTED') {    } elsif ($award eq 'SUBMITTED') {
     $message = "Your submission has been recorded.";      $message = "Your submission has been recorded.";
     $button=1;      $button=1;
     } elsif ($award eq 'DRAFT') {
       $message = "A draft copy has been saved.";
       $button=1;
   } else {    } else {
     $message = "Unknown message: $award";      $message = "Unknown message: $award";
     $button=1;      $button=1;
Line 259  sub decideoutput { Line 317  sub decideoutput {
 sub setgradedata {  sub setgradedata {
   my ($award,$id,$previously_used) = @_;    my ($award,$id,$previously_used) = @_;
   # if the student already has it correct, don't modify the status    # if the student already has it correct, don't modify the status
   if ( $Apache::lonhomework::history{"resource.$id.solved"} !~    if ($Apache::inputtags::status['-1'] ne 'CAN_ANSWER' &&
         $Apache::inputtags::status['-1'] ne 'CANNOT_ANSWER') {
       $Apache::lonhomework::results{"resource.$id.afterduedate"}=$award;
       return '';
     } elsif ( $Apache::lonhomework::history{"resource.$id.solved"} !~
        /^correct/ ) {         /^correct/ ) {
     #handle assignment of tries and solved status      #handle assignment of tries and solved status
       if ($Apache::lonhomework::history{"resource.$id.afterduedate"}) {
         $Apache::lonhomework::results{"resource.$id.afterduedate"}='';
       }
     if ( $award eq 'APPROX_ANS' || $award eq 'EXACT_ANS' ) {      if ( $award eq 'APPROX_ANS' || $award eq 'EXACT_ANS' ) {
       $Apache::lonhomework::results{"resource.$id.tries"} =        $Apache::lonhomework::results{"resource.$id.tries"} =
  $Apache::lonhomework::history{"resource.$id.tries"} + 1;   $Apache::lonhomework::history{"resource.$id.tries"} + 1;
Line 272  sub setgradedata { Line 337  sub setgradedata {
       $Apache::lonhomework::results{"resource.$id.tries"} =        $Apache::lonhomework::results{"resource.$id.tries"} =
  $Apache::lonhomework::history{"resource.$id.tries"} + 1;   $Apache::lonhomework::history{"resource.$id.tries"} + 1;
       $Apache::lonhomework::results{"resource.$id.solved"} =        $Apache::lonhomework::results{"resource.$id.solved"} =
  'incorrect_attempted';   'incorrect_attempted'
     } elsif ( $award eq 'SUBMITTED' ) {      } elsif ( $award eq 'SUBMITTED' ) {
       $Apache::lonhomework::results{"resource.$id.tries"} =        $Apache::lonhomework::results{"resource.$id.tries"} =
  $Apache::lonhomework::history{"resource.$id.tries"} + 1;   $Apache::lonhomework::history{"resource.$id.tries"} + 1;
       $Apache::lonhomework::results{"resource.$id.solved"} =        $Apache::lonhomework::results{"resource.$id.solved"} =
  'ungraded_attempted';   'ungraded_attempted';
       } elsif ( $award eq 'DRAFT' ) {
         $Apache::lonhomework::results{"resource.$id.solved"} = '';
     } elsif ( $award eq 'NO_RESPONSE' ) {      } elsif ( $award eq 'NO_RESPONSE' ) {
       return '';        return '';
     } else {      } else {
Line 291  sub setgradedata { Line 358  sub setgradedata {
       delete($Apache::lonhomework::results{"resource.$id.tries"});        delete($Apache::lonhomework::results{"resource.$id.tries"});
       $Apache::lonhomework::results{"resource.$id.previous"} = '1';        $Apache::lonhomework::results{"resource.$id.previous"} = '1';
     } elsif ( $previously_used eq 'PREVIOUSLY_LAST') {      } elsif ( $previously_used eq 'PREVIOUSLY_LAST') {
       #delete all data as they student didn't do anything        #delete all data as they student didn't do anything, but save
         #the list of collaborators.
       foreach my $key (keys(%Apache::lonhomework::results)) {        foreach my $key (keys(%Apache::lonhomework::results)) {
  if ($key =~ /^resource\.$id\./) {   if (($key =~ /^resource\.$id\./) && ($key !~ /\.collaborators$/)) {
   &Apache::lonxml::debug("Removing $key");    &Apache::lonxml::debug("Removing $key");
   delete($Apache::lonhomework::results{$key});    delete($Apache::lonhomework::results{$key});
  }   }
       }        }
       #and since they didn't do anything we were never here        #and since they didn't do anything we were never here
Line 316  sub grade { Line 384  sub grade {
     foreach $response (@Apache::inputtags::responselist) {      foreach $response (@Apache::inputtags::responselist) {
       &Apache::lonxml::debug("looking for response.$id.$response.awarddetail");        &Apache::lonxml::debug("looking for response.$id.$response.awarddetail");
       my $value=$Apache::lonhomework::results{"resource.$id.$response.awarddetail"};        my $value=$Apache::lonhomework::results{"resource.$id.$response.awarddetail"};
       if ( $value ne '' ) {        &Apache::lonxml::debug("keeping $value from $response for $id");
  &Apache::lonxml::debug("keeping $value from $response for $id");        push (@awards,$value);
  push (@awards,$value);  
       } else {  
  &Apache::lonxml::debug("skipping $value from $response for $id");  
       }  
     }      }
     my $finalaward = &finalizeawards(@awards);      my $finalaward = &finalizeawards(@awards);
     my $previously_used;      my $previously_used;
     if ( $#Apache::inputtags::previous eq $#awards ) {      if ( $#Apache::inputtags::previous eq $#awards ) {
       $previously_used = 'PREVIOUSLY_LAST';   my $match=0;
       foreach my $value (@Apache::inputtags::previous) {   my @matches;
  if ($value eq 'PREVIOUSLY_USED' ) {   foreach my $versionar (@Apache::inputtags::previous_version) {
   $previously_used = $value;      foreach my $version (@$versionar) {
   last;   $matches[$version]++;
       }
    }
    foreach my $elem (@matches) {if ($elem eq ($#awards+1)) {$match=1;}}
    if ($match) {
       $previously_used = 'PREVIOUSLY_LAST';
       foreach my $value (@Apache::inputtags::previous) {
    if ($value eq 'PREVIOUSLY_USED' ) {
       $previously_used = $value;
       last;
    }
       }
  }   }
       }  
     }      }
     &Apache::lonxml::debug("final award $finalaward, $previously_used");      &Apache::lonxml::debug("final award $finalaward, $previously_used");
     &setgradedata($finalaward,$id,$previously_used);      &setgradedata($finalaward,$id,$previously_used);
Line 341  sub grade { Line 415  sub grade {
 }  }
   
 sub gradestatus {  sub gradestatus {
   my ($id) = @_;    my ($id,$target) = @_;
   my $showbutton = 1;    my $showbutton = 1;
   my $message = '';    my $message = '';
     my $latemessage = '';
   my $trystr='';    my $trystr='';
   my $button='';    my $button='';
   my $previousmsg='';    my $previousmsg='';
Line 358  sub gradestatus { Line 433  sub gradestatus {
     if ( $award ne '' ) {      if ( $award ne '' ) {
       &Apache::lonxml::debug('Getting message');        &Apache::lonxml::debug('Getting message');
       ($showbutton,$message,$previousmsg) =        ($showbutton,$message,$previousmsg) =
  &decideoutput($award,$solved,$previous);   &decideoutput($award,$solved,$previous,$target);
       $message="<td bgcolor=\"#aaffaa\">$message</td>";        if ($target eq 'tex') {
       if ($previousmsg) {   $message=' '.$message.' ';
  $previousmsg="<td bgcolor=\"#ffaaaa\">$previousmsg</td>";        } else {
    $message="<td bgcolor=\"#aaffaa\">$message</td>";
    if ($previousmsg) {
     $previousmsg="<td bgcolor=\"#ffaaaa\">$previousmsg</td>";
    }
       }        }
     }      }
     my $tries = $Apache::lonhomework::history{"resource.$id.tries"};      my $tries = $Apache::lonhomework::history{"resource.$id.tries"};
Line 371  sub gradestatus { Line 450  sub gradestatus {
     if ( $maxtries eq '' ) { $maxtries = '2'; }       if ( $maxtries eq '' ) { $maxtries = '2'; } 
     if ( $maxtries eq 'con_lost' ) { $maxtries = '0'; }       if ( $maxtries eq 'con_lost' ) { $maxtries = '0'; } 
     if ( $showbutton ) {      if ( $showbutton ) {
       $trystr = "<td>Tries $tries/$maxtries</td>";        if ($target eq 'tex') {
     if ($ENV{'request.state'} ne "construct") {
         $trystr = ' {\small \textit{Tries} '.$tries.'/'.$maxtries.'} \vskip 0 mm ';
     }
         } else {
            $trystr = "<td>Tries $tries/$maxtries</td>";
         }
     }      }
     if ( $status eq 'SHOW_ANSWER' || $status eq 'CANNOT_ANSWER') {$showbutton = 0;}      if ( $status eq 'SHOW_ANSWER' || $status eq 'CANNOT_ANSWER') {$showbutton = 0;}
     if ( $showbutton ) {       if ( $showbutton ) { 
       $button = '<br /><input type="submit" name="submit" value="Submit All Answers" />';        if ($target ne 'tex') {
           $button = '<br /><input type="submit" name="submit" value="Submit Answer" />';
         }
       }
       if ($Apache::lonhomework::history{"resource.$id.afterduedate"}) {
         #last submissions was after due date
         if ($target eq 'tex') {
     $latemessage=' The last submission was after the Due Date ';
         } else {
           $latemessage="<td bgcolor=\"#ffaaaa\">The last submission was after the Due Date</td>";
         }
     }      }
   }    }
   my $output= $previousmsg.$message.$trystr;    my $output= $previousmsg.$latemessage.$message.$trystr;
   if ($output =~ /^\s*$/) {    if ($output =~ /^\s*$/) {
     return $button;      return $button;
   } else {    } else {
     return $button.'<table><tr>'.$previousmsg.$message.$trystr.'</tr></table>';      if ($target eq 'tex') {
         return $button.' \vskip 0 mm '.$output.' ';
       } else {
         return $button.'<table><tr>'.$output.'</tr></table>';
       }
   }    }
 }  }
 1;  1;

Removed from v.1.45  
changed lines
  Added in v.1.75


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.