Diff for /loncom/xml/scripttag.pm between versions 1.101 and 1.154

version 1.101, 2003/10/03 17:15:01 version 1.154, 2010/05/26 02:04:20
Line 25 Line 25
 #  #
 # http://www.lon-capa.org/  # http://www.lon-capa.org/
 #  #
 # 2/21 Guy  
 # 8/20 Gerd Kortemeyer  
   
 package Apache::scripttag;  package Apache::scripttag;
   
 use strict;  use strict;
 use Apache::lonnet;  use Apache::lonnet;
 use Apache::style;  use Apache::lonlocal;
   use Apache::style();
   
 #Globals  #Globals
 # this used to pass around the standard callsub arguments to a tag func  # this used to pass around the standard callsub arguments to a tag func
Line 43  BEGIN { Line 42  BEGIN {
   &Apache::lonxml::register('Apache::scripttag',    &Apache::lonxml::register('Apache::scripttag',
     ('script','scriptlib','parserlib','import',      ('script','scriptlib','parserlib','import',
      'window','display','storetc','physnet',       'window','display','storetc','physnet',
      'standalone','comment',       'standalone','comment','num','parse','algebra',
      'LONCAPA_INTERNAL_TURN_STYLE_ON',       'LONCAPA_INTERNAL_TURN_STYLE_ON',
      'LONCAPA_INTERNAL_TURN_STYLE_OFF',       'LONCAPA_INTERNAL_TURN_STYLE_OFF'));
      'LONCAPA_INTERNAL_LONHTTPD_PORT'));  
 }  }
   
 sub start_LONCAPA_INTERNAL_TURN_STYLE_ON {  sub start_LONCAPA_INTERNAL_TURN_STYLE_ON {
Line 82  sub end_LONCAPA_INTERNAL_TURN_STYLE_OFF Line 80  sub end_LONCAPA_INTERNAL_TURN_STYLE_OFF
     return ('','no');      return ('','no');
 }  }
   
 sub start_LONCAPA_INTERNAL_LONHTTPD_PORT {  
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;  
     if ($target eq 'web') {  
  my $lonhttpdPort=$Apache::lonnet::perlvar{'lonhttpdPort'};  
  if (!defined($lonhttpdPort)) { $lonhttpdPort='8080'; }  
  return '<script type="text/javascript">var lonhttpdport=\''.  
     $lonhttpdPort.'\';</script>';  
     }  
     return ('','no');  
 }  
   
 sub end_LONCAPA_INTERNAL_LONHTTPD_PORT {  
     return ('','no');  
 }  
   
 sub start_script {  sub start_script {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
   @Apache::scripttag::parser_env = @_;    @Apache::scripttag::parser_env = @_;
Line 104  sub start_script { Line 87  sub start_script {
   my $type= &Apache::lonxml::get_param('type',$parstack,$safeeval);    my $type= &Apache::lonxml::get_param('type',$parstack,$safeeval);
   &Apache::lonxml::debug("found type of $type");    &Apache::lonxml::debug("found type of $type");
   if ($type eq "loncapa/perl") {    if ($type eq "loncapa/perl") {
     my $bodytext=&Apache::lonxml::get_all_text("/script",$parser);  
     if ( $target eq "modified" ) {      if ( $target eq "modified" ) {
       $result=$token->[4].&Apache::edit::modifiedfield();   $result=$token->[4].&Apache::edit::modifiedfield('/script',$parser);
     } elsif ( $target eq 'web' || $target eq 'tex' ||      } elsif ( $target eq 'web' || $target eq 'tex' ||
       $target eq 'grade' || $target eq 'answer' ||        $target eq 'grade' || $target eq 'webgrade' ||
       $target eq 'analyze' ) {        $target eq 'answer' || $target eq 'analyze' ) {
    my $bodytext=&Apache::lonxml::get_all_text_unbalanced("/script",$parser);
  if (!$Apache::lonxml::default_homework_loaded) {   if (!$Apache::lonxml::default_homework_loaded) {
     &Apache::lonxml::default_homework_load($safeeval);      &Apache::lonxml::default_homework_load($safeeval);
  }   }
  &Apache::run::run($bodytext,$safeeval);   &Apache::run::run($bodytext,$safeeval);
  if (($target eq 'answer') &&   if (($target eq 'answer') &&
     ($ENV{'form.answer_output_mode'} ne 'tex') &&      ($env{'form.answer_output_mode'} ne 'tex') &&
     ($Apache::lonhomework::viewgrades == 'F')) {      ($Apache::lonhomework::viewgrades == 'F')) {
     $Apache::lonxml::evaluate--;      $Apache::lonxml::evaluate--;
     $result.="<script type=\"text/javascript\"> function LONCAPA_scriptvars_$Apache::lonxml::curdepth() {newWindow=open('','new_W','width=500,height=200,scrollbars=1');newWindow.document.open('text/html','replace');newWindow.document.writeln('<html><head><title>Script Vars</title></head><body bgcolor=\"#FFFFFF\"><pre>";      my (undef,undef,$udom,$uname)=&Apache::lonnet::whichuser();
       my $windowopen=&Apache::lonhtmlcommon::javascript_docopen();
       my $start_page =
    &Apache::loncommon::start_page('Script Vars', undef,
          {'only_body' => 1,
    'bgcolor'   => '#FFFFFF',
    'js_ready'  => 1,});
       my $end_page =
    &Apache::loncommon::end_page({'js_ready' => 1,});
   
       $uname =~s/\W//g;
       $udom  =~s/\W//g;
       my $function_name = 
    join('_','LONCAPA_scriptvars',$uname,$udom,
        $env{'form.counter'},$Apache::lonxml::curdepth);
       my $script_var ="<script type=\"text/javascript\">
   // <![CDATA[
       function $function_name() {newWindow=open('','new_W','width=500,height=500,scrollbars=1,resizable=yes');newWindow.$windowopen;newWindow.document.writeln('$start_page<pre>";
     my $listing=&Apache::run::dump($target,$safeeval);      my $listing=&Apache::run::dump($target,$safeeval);
       $listing=~s/\\/\\\\/g;
     $listing=~s/\'/\\\'/g;      $listing=~s/\'/\\\'/g;
     $listing=~s/\n/\\n/g;      $script_var.=$listing;
     $listing=~s/\r/\\r/g;      $script_var.= "<\\/pre>$end_page');newWindow.document.close();newWindow.focus()}
     $result.=$listing;  // ]]>
     $result.= "</pre></body></html>');newWindow.document.close();}</script><a href=\"javascript:LONCAPA_scriptvars_$Apache::lonxml::curdepth();void(0);\">Script Vars</a><br />";  </script><a href=\"javascript:$function_name();void(0);\">".&mt('Script Vars')."</a><br />";
       &Apache::lonxml::add_script_result($script_var);
  }   }
     } elsif ($target eq "edit" ) {      } elsif ($target eq "edit" ) {
       #&Apache::run::run($bodytext,$safeeval);        #&Apache::run::run($bodytext,$safeeval);
       #$result="<br /> &lt;$token->[1]&gt; output: <br />$bodytext<br />Source:<br />";        #$result="<br /> &lt;$token->[1]&gt; output: <br />$bodytext<br />Source:<br />";
       $result=&Apache::edit::tag_start($target,$token,'Script');   my $bodytext=&Apache::lonxml::get_all_text_unbalanced("/script",$parser);
       $result.=&Apache::edit::editfield($token->[1],$bodytext,'',80,4);   $result=&Apache::edit::tag_start($target,$token,'Script');
    $result.=&Apache::edit::editfield($token->[1],$bodytext,'',80,4);
       } elsif ($target eq 'meta') {
    my $bodytext=&Apache::lonxml::get_all_text_unbalanced("/script",$parser);
     }      }
   } else {    } else {
     if ($target ne "meta") {        my $bodytext=&Apache::lonxml::get_all_text_unbalanced("/script",$parser);
       $result = $token->[4];        if ($target ne "meta" && $target ne 'tex' && $target ne 'answer') {
       my $bodytext=&Apache::lonxml::get_all_text("/script",$parser);    $result = $token->[4];
       $result.=$bodytext;    $result.=$bodytext;
     }        }
   }    }
   return $result;    return $result;
 }  }
Line 148  sub end_script { Line 153  sub end_script {
   my $type = &Apache::lonxml::get_param('type',$parstack,$safeeval);    my $type = &Apache::lonxml::get_param('type',$parstack,$safeeval);
   my $result='';    my $result='';
   #other script blocks need to survive    #other script blocks need to survive
   if ($type ne "loncapa/perl") {    if ($type ne "loncapa/perl" && $target ne 'tex') {
     return $token->[2];      return $token->[2];
   } elsif ($target eq 'edit' ) {    } elsif ($target eq 'edit' ) {
     return &Apache::edit::end_table();      return &Apache::edit::end_table();
Line 160  sub end_script { Line 165  sub end_script {
   
 sub start_display {  sub start_display {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
     @Apache::scripttag::parser_env = @_;
   my $result;    my $result;
   my $bodytext=&Apache::lonxml::get_all_text("/display",$parser);  
   
   if ( $target eq "modified" ) {    if ( $target eq "modified" ) {
     $result=$token->[4].&Apache::edit::modifiedfield();        $result=$token->[4].&Apache::edit::modifiedfield("/display",$parser);
   } elsif ( $target eq 'web' || $target eq 'tex' ||    } elsif ( $target eq 'web' || $target eq 'tex' ||
     $target eq 'grade' || $target eq 'answer' ||      $target eq 'grade' || $target eq 'webgrade' ||
       $target eq 'analyze') {      $target eq 'answer' || $target eq 'analyze') {
         my $bodytext=&Apache::lonxml::get_all_text_unbalanced("/display",$parser);
       if (!$Apache::lonxml::default_homework_loaded) {        if (!$Apache::lonxml::default_homework_loaded) {
   &Apache::lonxml::default_homework_load($safeeval);    &Apache::lonxml::default_homework_load($safeeval);
       }        }
       $result=&Apache::run::run($bodytext,$safeeval);        $result=&Apache::run::run($bodytext,$safeeval);
       if ($target eq 'grade' || $target eq 'answer' ||        if ($target eq 'grade' || $target eq 'answer' ||
   $target eq 'analyze') {    $target eq 'analyze') {
   $result=''; # grade should produce no output    # grade/answer/analyxe should produce no output but if we
     # are redirecting, the redirecter should know what to do
     # with the output
     if (!$Apache::lonxml::redirection) { $result=''; }
       }        }
       $Apache::lonxml::post_evaluate=0;        $Apache::lonxml::post_evaluate=0;
   } elsif ($target eq "edit" ) {    } elsif ($target eq "edit" ) {
       my $bodytext=&Apache::lonxml::get_all_text_unbalanced("/display",$parser);
     #$result =       #$result = 
     #  "<br /> &lt;$token->[1]&gt; output: <br />$bodytext<br />Source:<br />";      #  "<br /> &lt;$token->[1]&gt; output: <br />$bodytext<br />Source:<br />";
     #$result.=&Apache::edit::editfield($token->[1],$bodytext,'',40,1);      #$result.=&Apache::edit::editfield($token->[1],$bodytext,'',40,1);
     $result=&Apache::edit::tag_start($target,$token,'Script With Display');      $result=&Apache::edit::tag_start($target,$token,'Script With Display');
     $result.=&Apache::edit::editfield($token->[1],$bodytext,'',80,1)      $result.=&Apache::edit::editfield($token->[1],$bodytext,'',80,1)
     } elsif ($target eq 'meta') {
         my $bodytext=&Apache::lonxml::get_all_text_unbalanced("/display",$parser);
   }    }
   return $result;    return $result;
 }  }
Line 200  sub start_scriptlib { Line 211  sub start_scriptlib {
   my $result ='';    my $result ='';
   my $error='';    my $error='';
   
   if ($target eq 'web' || $target eq 'grade' || $target eq 'meta' ||     if ($target eq 'web' || $target eq 'tex' || $target eq 'grade' ||
       $target eq 'edit' || $target eq 'answer' || $target eq 'analyze') {        $target eq 'meta' || $target eq 'edit' || $target eq 'answer' ||
         $target eq 'analyze' || $target eq 'webgrade') {
     $bodytext=$$parser[$#$parser]->get_text("/scriptlib");      $bodytext=$$parser[$#$parser]->get_text("/scriptlib");
     $bodytext=&Apache::run::evaluate($bodytext,$safeeval,      $bodytext=&Apache::run::evaluate($bodytext,$safeeval,
      $$parstack[$#$parstack]);       $$parstack[$#$parstack]);
Line 210  sub start_scriptlib { Line 222  sub start_scriptlib {
     my $script=&Apache::lonnet::getfile($location);      my $script=&Apache::lonnet::getfile($location);
     if ($script == -1) {      if ($script == -1) {
       if ($target eq 'edit') {        if ($target eq 'edit') {
         $error='</tr><tr><td>Errors</td><td colspan="2"><b> Unable to find <i>'.$location.'</i></b></td>'."\n";          $error='</tr><tr><td>'.&mt('Errors').'</td><td colspan="2"><b>'.&mt(' Unable to find [_1]','<span class="LC_filename">'.$location.'</span>').'</b></td>'."\n";
       } else {        } else {
  &Apache::lonxml::error("<b> Unable to find <i>$location</i> for scriptlib</b>");   &Apache::lonxml::error("<b> Unable to find <i>$location</i> for scriptlib</b>");
  return "";   return "";
Line 228  sub start_scriptlib { Line 240  sub start_scriptlib {
     &Apache::edit::end_table();      &Apache::edit::end_table();
   }    }
   if ($target eq "modified" ) {    if ($target eq "modified" ) {
     $bodytext=$$parser[$#$parser]->get_text("/scriptlib");        $result=$token->[4].&Apache::edit::modifiedfield("/scriptlib",$parser);
     $result=$token->[4].&Apache::edit::modifiedfield($token);  
     &Apache::lonxml::debug($result);  
   }    }
   return $result;    return $result;
 }  }
Line 247  sub start_parserlib { Line 257  sub start_parserlib {
   my $bodytext;    my $bodytext;
   my $result ="";    my $result ="";
   my $error='';    my $error='';
   if ($target eq 'web' || $target eq 'grade' || $target eq 'meta' ||    if ($target eq 'web' || $target eq 'tex' || $target eq 'grade' ||
       $target eq 'edit' || $target eq 'answer' || $target eq 'analyze') {        $target eq 'meta' || $target eq 'edit' || $target eq 'answer' ||
         $target eq 'analyze' || $target eq 'webgrade') {
     $bodytext=$$parser[$#$parser]->get_text("/parserlib");      $bodytext=$$parser[$#$parser]->get_text("/parserlib");
     $bodytext=&Apache::run::evaluate($bodytext,$safeeval,      $bodytext=&Apache::run::evaluate($bodytext,$safeeval,
      $$parstack[$#$parstack]);       $$parstack[$#$parstack]);
Line 274  sub start_parserlib { Line 285  sub start_parserlib {
     &Apache::edit::end_table();      &Apache::edit::end_table();
   }    }
   if ($target eq "modified" ) {    if ($target eq "modified" ) {
     $bodytext=$$parser[$#$parser]->get_text("/parserlib");        $result=$token->[4].&Apache::edit::modifiedfield("/parserlib",$parser);
     $result=$token->[4].&Apache::edit::modifiedfield($token);  
     &Apache::lonxml::debug($result);  
   }    }
   return $result;    return $result;
 }  }
Line 289  sub end_parserlib { Line 298  sub end_parserlib {
 }  }
   
 sub start_window {  sub start_window {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
   my $result = '';      my $result = '';
   if ($target eq 'web') {      if ($target eq 'web' || $target eq 'webgrade') {
     &Apache::lonxml::startredirection;   &Apache::lonxml::startredirection;
   }  elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
        $result = '\unskip\footnote{';   $result = '\unskip\footnote{';
    }      } elsif ($target eq 'edit') {
   return $result;     $result.=&Apache::edit::tag_start($target,$token);
    $result.=&Apache::edit::text_arg('Text of Link:','linktext',$token,70);
    $result.=&Apache::edit::text_arg('Height:','height',$token,5);
    $result.=&Apache::edit::text_arg('Width:','width',$token,5);
    $result.=&Apache::edit::text_arg('Mime Type:','mimetype',$token,5);
    $result .=&Apache::edit::end_row().&Apache::edit::start_spanning_row();
       } elsif ($target eq 'modified') {
    my $constructtag=&Apache::edit::get_new_args($token,$parstack,
        $safeeval,'linktext',
        'width','height',
        'mimetype');
    if ($constructtag) { $result=&Apache::edit::rebuild_tag($token); }
       }
       return $result;  
 }  }
   
 sub end_window {  sub end_window {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
   my $result;    my $result;
   if ($target eq 'web') {    if ($target eq 'web' || $target eq 'webgrade') {
     my $output=&Apache::lonxml::endredirection;      my $output=&Apache::lonxml::endredirection;
     $output =~ s/[\n\r]/ /g;      $output =~ s/[\n\r]/ /g;
 #    $output = &HTML::Entities::encode($output,'<>&"\'');  #    $output = &HTML::Entities::encode($output,'<>&"\'');
Line 313  sub end_window { Line 335  sub end_window {
     if (!$width) { $width='500'; }      if (!$width) { $width='500'; }
     my $height= &Apache::lonxml::get_param('height',$parstack,$safeeval);      my $height= &Apache::lonxml::get_param('height',$parstack,$safeeval);
     if (!$height) { $height='200'; }      if (!$height) { $height='200'; }
     $result = "<script type=\"text/javascript\"> function LONCAPA_newwindow_$Apache::lonxml::curdepth() {newWindow=open('','new_W','width=$width,height=$height,scrollbars=1');newWindow.document.open('text/html','replace');newWindow.document.writeln('<html><head><title>newwindow</title></head><body bgcolor=\"#FFFFFF\"> $output </body></html>');newWindow.document.close();}</script><a href=\"javascript:LONCAPA_newwindow_$Apache::lonxml::curdepth();void(0);\">$linktext</a>";      my $mimetype= &Apache::lonxml::get_param('mimetype',$parstack,$safeeval)
             || 'text/html';
   
       my ($start_page,$end_page);
       if ($mimetype eq 'text/html') {
    $start_page =
       &Apache::loncommon::start_page($linktext, undef,
      {'only_body' => 1,
       'bgcolor'   => '#FFFFFF',
       'js_ready'  => 1,});
    $end_page =
       &Apache::loncommon::end_page({'js_ready' => 1,});
       }
       $result = "<script type=\"text/javascript\">
   //<!--
    function LONCAPA_newwindow_$Apache::lonxml::curdepth() {
   newWindow=open(".&Apache::lonhtmlcommon::javascript_nothing().",'new_W');
   newWindow.close();
   newWindow=open(".&Apache::lonhtmlcommon::javascript_nothing().",'new_W','width=$width,height=$height,scrollbars=1');
   newWindow.".&Apache::lonhtmlcommon::javascript_docopen($mimetype).";
   newWindow.document.writeln('$start_page $output $end_page');
   newWindow.document.close();}
   //-->
   </script><a href=\"javascript:LONCAPA_newwindow_$Apache::lonxml::curdepth();void(0);\">$linktext</a>";
   } elsif ($target eq 'tex') {    } elsif ($target eq 'tex') {
       $result = '}';        $result = '}';
   } else {    } else {
Line 327  sub start_import { Line 372  sub start_import {
   my $bodytext=$$parser[$#$parser]->get_text("/import");    my $bodytext=$$parser[$#$parser]->get_text("/import");
   my $result ="";    my $result ="";
   
   $bodytext=Apache::run::evaluate($bodytext,$safeeval,$$parstack[$#$parstack]);    $bodytext=&Apache::run::evaluate($bodytext,$safeeval,$$parstack[$#$parstack]);
   
   if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' ||    if ($target eq 'web' ||  $target eq 'webgrade' || $target eq 'grade' 
       $target eq 'tex' || $target eq 'analyze' ) {        || $target eq 'answer' || $target eq 'tex' || $target eq 'analyze' ) {
     # FIXME this probably needs to be smart about construction vs.      # FIXME this probably needs to be smart about construction vs.
     # non construction space.      # non construction space.
     my $location=&Apache::lonnet::filelocation($Apache::lonxml::pwd['-1'],$bodytext);      my $location=&Apache::lonnet::filelocation($Apache::lonxml::pwd['-1'],$bodytext);
Line 339  sub start_import { Line 384  sub start_import {
       &Apache::lonxml::error("<b> Unable to find <i>$bodytext as $location</i> for import</b>");        &Apache::lonxml::error("<b> Unable to find <i>$bodytext as $location</i> for import</b>");
       return "";        return "";
     }      }
       my $importmode=&Apache::lonxml::get_param('importmode',$parstack,$safeeval);
       if (($importmode eq 'problem') || ($importmode eq 'part')) {
   # We are using import to import published problems
   # This will require some on-the-fly rewriting
          my $importid=&Apache::lonxml::get_param('id',$parstack,$safeeval);
          if ($importid) {
   # Rewrite all internal IDs of the problem to avoid duplicates
             $file=~s/id\s*=\s*([\"\'])(\w+)([\"\'])/id=$1$2DynPart$importid$3/gs;
          }
          if (($importmode eq 'problem') || ($file=~/<part[^<]*>/s)) {
   # We explicitly don't want this to be a separate part or the problem already has parts
             $file=~s/^\s*<problem>/<library>/s;
     $file=~s/<\/problem>\s*$/<\/library>/s;
          } else {
   # We want this to be a separate part, but it currently is not
             if ($importid) {
                $file=~s/^\s*<problem>/<library><part id="DynPart$importid">/s;
             } else {
                $file=~s/^\s*<problem>/<library><part>/s;
             }
     $file=~s/<\/problem>\s*$/<\/part><\/library>/s;
          }
       }
     my $dir=$location;      my $dir=$location;
     $dir=~s:/[^/]*$::;      $dir=~s:/[^/]*$::;
     #  &Apache::lonxml::debug("directory $dir $location file $file \n<b>END</b>\n");      #  &Apache::lonxml::debug("directory $dir $location file $file \n<b>END</b>\n");
     my $id= &Apache::lonxml::get_param('id',$parstack,$safeeval);      my $id= &Apache::lonxml::get_id($parstack,$safeeval);
     if (!$id) { $id=$Apache::lonxml::curdepth; }      if (!$id) { $id=$Apache::lonxml::curdepth; }
     push(@Apache::inputtags::import,$id);      push(@Apache::inputtags::import,$id);
     push(@Apache::inputtags::importlist,$id);      push(@Apache::inputtags::importlist,$id);
   
  &Apache::lonxml::newparser($parser,\$file,$dir);      &Apache::lonxml::newparser($parser,\$file,$dir);
   
   } elsif ($target eq "edit" ) {    } elsif ($target eq "edit" ) {
     $result.=&Apache::edit::tag_start($target,$token);      $result.=&Apache::edit::tag_start($target,$token);
     $result.=&Apache::edit::editline($token->[1],$bodytext,'',40);      my $location=$token->[1];
       $location=~s/^\s*//s;
       $location=~s/\s*$//s;
       $result.=&Apache::edit::editline($location,$bodytext,'',40);
     $result.=&Apache::edit::browse(undef,'textnode');      $result.=&Apache::edit::browse(undef,'textnode');
       $result.= '&nbsp;<label>'.&mt('Import as:').
                 '<select name="importmode_'.$Apache::lonxml::curdepth.'">';
       my %options=&Apache::lonlocal::texthash(''        => 'as standard library',
                                               'problem' => 'as problem',
                                               'part'    => 'as problem part(s)');
       foreach my $option (sort(keys(%options))) {
          $result.='<option value="'.$option.'"';
          if ($option eq &Apache::lonxml::get_param('importmode',$parstack,$safeeval)) {
             $result.=' selected="selected"';
          }
          $result.='>'.$options{$option}.'</option>';
       }
       $result.='</select></label>';
     #FIXME this need to convert $bodytext to be a contruction space reference      #FIXME this need to convert $bodytext to be a contruction space reference
     #my $location=&Apache::lonnet::filelocation($Apache::lonxml::pwd['-1'],$bodytext);      #my $location=&Apache::lonnet::filelocation($Apache::lonxml::pwd['-1'],$bodytext);
     #$result.="Click<a href=\"$location\">here</a> to edit<br />"      #$result.="Click<a href=\"$location\">here</a> to edit<br />"
   } elsif ($target eq 'modified') {    } elsif ($target eq 'modified') {
     $bodytext=$$parser[$#$parser]->get_text("/import");        &Apache::edit::get_new_args($token,$parstack,$safeeval,'importmode');
     $result=$token->[4].&Apache::edit::modifiedfield($token);        $result='<import id="'.$token->[2]{'id'}.'" importmode="'.$token->[2]{'importmode'}.'">';
     &Apache::lonxml::debug($result);        $result.=&Apache::edit::modifiedfield("/import",$parser);
   } elsif ($target eq 'meta') {    } elsif ($target eq 'meta') {
     my $id= &Apache::lonxml::get_param('id',$parstack,$safeeval);      my $id= &Apache::lonxml::get_id($parstack,$safeeval);
     $result.='<import part="'.$Apache::inputtags::part;      $result.='<import part="'.$Apache::inputtags::part;
     if ($id) {      if ($id) {
       $result.='" id="'.$id;        $result.='" id="'.$id;
Line 378  sub end_import { Line 461  sub end_import {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
   pop(@Apache::inputtags::import);    pop(@Apache::inputtags::import);
   my $result;    my $result;
   if ($target eq 'edit' ) { $result=&Apache::edit::end_table(); }    if ($target eq 'edit' ) { $result=&Apache::edit::end_row.
    &Apache::edit::end_table(); }
   return $result;    return $result;
 }  }
   
Line 420  sub end_physnet { Line 504  sub end_physnet {
 sub start_standalone {  sub start_standalone {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
   my $result='';    my $result='';
   if ($target eq 'web' ) {    if ($target eq 'web' || $target eq 'webgrade') {
     if ( $ENV{'request.course.id'} ) {      if ( $env{'request.course.id'} ) {
       my $inside = &Apache::lonxml::get_all_text("/standalone",$parser);        my $inside = &Apache::lonxml::get_all_text("/standalone",$parser,$style);
     } else {      } else {
       $result='<table bgcolor="#E1E1E1" border="2"><tr><td>';        $result='<table bgcolor="#E1E1E1" border="2"><tr><td>';
     }      }
Line 433  sub start_standalone { Line 517  sub start_standalone {
 sub end_standalone {  sub end_standalone {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
   my $result='';    my $result='';
   if ($target eq 'web' ) {    if ($target eq 'web' || $target eq 'webgrade' ) {
     if ( $ENV{'request.course.id'} ) {      if ( $env{'request.course.id'} ) {
     } else {      } else {
       $result='</td></tr></table>';        $result='</td></tr></table>';
     }      }
Line 447  sub start_comment { Line 531  sub start_comment {
   my $result='';    my $result='';
   if ($target eq 'edit') {    if ($target eq 'edit') {
     $result=&Apache::edit::tag_start($target,$token);      $result=&Apache::edit::tag_start($target,$token);
     my $bodytext=&Apache::lonxml::get_all_text("/comment",$parser);      my $bodytext=&Apache::lonxml::get_all_text("/comment",$parser,$style);
     $result.=&Apache::edit::editfield($token->[1],$bodytext,'',80,4)      $result.=&Apache::edit::editfield($token->[1],$bodytext,'',80,4)
   } elsif ( $target eq 'modified') {    } elsif ( $target eq 'modified') {
     $result=$token->[4].&Apache::edit::modifiedfield($token);      $result=$token->[4].&Apache::edit::modifiedfield("/comment",$parser);
   } elsif ( $target eq 'web' || $target eq 'tex' || $target eq 'grade' ||    } elsif ( $target eq 'web'    || $target eq 'tex'  || $target eq 'grade'   ||
     $target eq 'answer' || $target eq 'meta' || $target eq 'analyze') {      $target eq 'answer' || $target eq 'meta' || $target eq 'analyze' ||
       $target eq 'webgrade') {
     #normally throw away comments      #normally throw away comments
     my $bodytext=&Apache::lonxml::get_all_text("/comment",$parser);      my $bodytext=&Apache::lonxml::get_all_text("/comment",$parser,$style);
   }    }
   return $result;    return $result;
 }  }
Line 468  sub end_comment { Line 553  sub end_comment {
   
 sub xmlparse {  sub xmlparse {
   my ($string) = @_;    my ($string) = @_;
 #  &Apache::lonxml::debug("Got $string");    &Apache::lonxml::debug("xmlparse recursion starting with $string");
     # Apache::run::evaluate does an 'eval' on the name of the subroutine
     # if it detects something that looks like a subroutine, this ends up calling
     # things without any arguments and since perl is nice enough to pass
     # along the default arguments when you don't explicitly say no arguments
     # if you call &xmlparse, it gets &xmlparse passed as it argument.
     # Same thing soccurs with &chemparse.
     if ($string eq '&xmlparse') { return '&xmlparse'; }
     if ($string eq '&chemparse') { return '&chemparse'; }
   my ($target,$token,$tagstack,$parstack,$oldparser,$safeeval,$style)=    my ($target,$token,$tagstack,$parstack,$oldparser,$safeeval,$style)=
     @Apache::scripttag::parser_env;      @Apache::scripttag::parser_env;
   my @parser;    my @parser;
   &Apache::lonxml::newparser(\@parser,\$string);    &Apache::lonxml::newparser(\@parser,\$string);
     &Apache::lonxml::startredirection();
   my $result=&Apache::lonxml::inner_xmlparse($target,$tagstack,    my $result=&Apache::lonxml::inner_xmlparse($target,$tagstack,
      $parstack,\@parser,       $parstack,\@parser,
      $safeeval,$style);       $safeeval,$style);
     $result.=&Apache::lonxml::endredirection();
     &Apache::lonxml::debug("target is $target xmlparse recursion ending with $result");
   return $result;    return $result;
 }  }
   
   sub start_num {
       my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style) = @_;
       my $result = '';
       my $inside = &Apache::lonxml::get_all_text_unbalanced("/num",$parser);
       if ($target eq 'tex' || $target eq 'web' || $target eq 'webgrade') {
    $inside=&Apache::run::evaluate($inside,$safeeval,$$parstack[-1]);
    if (!$Apache::lonxml::default_homework_loaded) {
       &Apache::lonxml::default_homework_load($safeeval);
    }
    @Apache::scripttag::parser_env = @_;
    my $format=&Apache::lonxml::get_param('format',$parstack,$safeeval);
    $result=&Apache::run::run("return &prettyprint(q\0$inside\0,q\0$format\0);",$safeeval);
       }    
       return $result;
   }
   
   sub end_num {
       my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style) = @_;
       my $result = '';
       return $result;
   }
   
   sub start_parse {
       my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style) = @_;
       my $result = '';
       if ( $target eq 'web'    || $target eq 'tex'    ||
    $target eq 'grade'  || $target eq 'answer' ||
    $target eq 'analyze'|| $target eq 'webgrade') {
    my $inside = &Apache::lonxml::get_all_text_unbalanced("/parse",$parser);
    $inside=&Apache::run::evaluate($inside,$safeeval,$$parstack[-1]);
    if (!$Apache::lonxml::default_homework_loaded) {
       &Apache::lonxml::default_homework_load($safeeval);
    }
    @Apache::scripttag::parser_env = @_;
    $result=&Apache::run::run("return &xmlparse(q\0$inside\0);",$safeeval);
    if ($target eq 'grade' || $target eq 'answer' ||
       $target eq 'analyze') {
       # grade/answer/analyxe should produce no output but if we
       # are redirecting, the redirecter should know what to do
       # with the output
       if (!$Apache::lonxml::redirection) { $result=''; }
    }
       }
       return $result;
   }
   
   sub end_parse {
       my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style) = @_;
       my $result = '';
       return $result;
   }
   
   sub start_algebra {
       my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style) = @_;
       my $result = '';
       if ( $target eq 'web'     || $target eq 'tex'    ||
    $target eq 'grade'   || $target eq 'answer' ||
    $target eq 'analyze' || $target eq 'webgrade') {
    my $inside = &Apache::lonxml::get_all_text_unbalanced("/algebra",$parser);
    $inside = &Apache::run::evaluate($inside,$safeeval,$$parstack[-1]);
    if ($target eq 'web' || $target eq 'tex' || $target eq 'analyze') {
       my $style=&Apache::lonxml::get_param('style',$parstack,$safeeval);
       $result=&Apache::lontexconvert::algebra($inside,undef,$target,$style,$parstack,$safeeval);
    }
    $Apache::lonxml::post_evaluate=0;
       }
       return $result;
   }
   
   sub end_algebra {
       my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style) = @_;
       my $result = '';
       return $result;
   }
   
 1;  1;
 __END__  __END__
   
   =pod
   
   =head1 NAME
   
   Apache::scripttag.pm
   
   =head1 SYNOPSIS
   
   implements <script>, <scriptlib>, <parserlib>,
   and <import>
   
   This is part of the LearningOnline Network with CAPA project
   described at http://www.lon-capa.org.
   
   =cut
   

Removed from v.1.101  
changed lines
  Added in v.1.154


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.