Diff for /loncom/xml/scripttag.pm between versions 1.64 and 1.167

version 1.64, 2002/01/17 16:51:07 version 1.167, 2013/09/26 22:03:36
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::lonxml();
   use Apache::londefdef();
   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 42  use Apache::style; Line 43  use Apache::style;
 BEGIN {  BEGIN {
   &Apache::lonxml::register('Apache::scripttag',    &Apache::lonxml::register('Apache::scripttag',
     ('script','scriptlib','parserlib','import',      ('script','scriptlib','parserlib','import',
      'window','display','storetc','physnet',       'window','windowlink','togglebox','display','storetc','physnet',
      'standalone'));       'standalone','comment','num','parse','algebra',
        'LONCAPA_INTERNAL_TURN_STYLE_ON',
        'LONCAPA_INTERNAL_TURN_STYLE_OFF'));
   }
   
   sub start_LONCAPA_INTERNAL_TURN_STYLE_ON {
       $Apache::lonxml::usestyle=1;
       $Apache::lonxml::style_values='';
       return ('','no');
   }
   
   sub end_LONCAPA_INTERNAL_TURN_STYLE_ON {
       my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
       my $end=&Apache::lonxml::get_param('end',$parstack,$safeeval);
       if (defined($end)) {
    &Apache::lonxml::end_tag($tagstack,$parstack,$token);
       }
       return ('','no');
   }
   
   sub start_LONCAPA_INTERNAL_TURN_STYLE_OFF {
       my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
       $Apache::lonxml::usestyle=0;
       my $end=&Apache::lonxml::get_param('end',$parstack,$safeeval);
       if (!$end) {
    $Apache::lonxml::style_values=$$parstack[-1];
    $Apache::lonxml::style_end_values=$$parstack[-1];
       } else {
    $Apache::lonxml::style_values=$Apache::lonxml::style_end_values;
    $Apache::lonxml::style_end_values='';
       }
       return ('','no');
   }
   
   sub end_LONCAPA_INTERNAL_TURN_STYLE_OFF {
       return ('','no');
 }  }
   
 sub start_script {  sub start_script {
Line 53  sub start_script { Line 89  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[$#$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' ||
       &Apache::run::run($bodytext,$safeeval);        $target eq 'answer' || $target eq 'analyze' ) {
       if (($target eq 'answer') && ($Apache::lonhomework::viewgrades == 'F')) {   my $bodytext=&Apache::lonxml::get_all_text_unbalanced("/script",$parser);
  $Apache::lonxml::evaluate--;   if (!$Apache::lonxml::default_homework_loaded) {
  $result.="<a href=\"javascript:newWindow=open(\'\',\'new_W\',\'width=500,height=200,scrollbars=1\');newWindow.document.open(\'text/html\',\'replace\');newWindow.document.writeln(\'<html><head><title>newwindow</title></head><body bgcolor=&quot;#FFFFFF&quot;><pre>";      &Apache::lonxml::default_homework_load($safeeval);
  my $listing= &Apache::run::dump($target,$safeeval);   }
  $listing =~ s/\n/\\n/g;   &Apache::run::run($bodytext,$safeeval);
  $listing =~ s/\"/&quot;/g;   if (($target eq 'answer') &&
  $listing =~ s/\'/&rsquo;/g;      ($env{'form.answer_output_mode'} ne 'tex') &&
  $listing =~ s/</&lt;/g;      ($Apache::lonhomework::viewgrades == 'F')) {
  $listing =~ s/>/&gt;/g;      $Apache::lonxml::evaluate--;
  $listing =~ s/&/&amp;/g;      my (undef,undef,$udom,$uname)=&Apache::lonnet::whichuser();
  $result.=$listing;      $uname =~s/\W//g;
  $result.= "</pre></body></html>\');newWindow.document.close();void(0);\">Script Vars</a><br />";      $udom  =~s/\W//g;
       }      my $function_name = 
    join('_','LONCAPA_scriptvars',$uname,$udom,
        $env{'form.counter'},$Apache::lonxml::curdepth);
               &Apache::lonxml::add_script_result(
                &Apache::loncommon::modal_adhoc_window($function_name,500,500,
                               '<pre style="background-color:#ffffff;">'.
                               &Apache::run::dump($target,$safeeval).'</pre>',
                               &mt('Script Vars'))."<br />");
    }
     } 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,'',50,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") { $result = $token->[4]; }        my $bodytext=&Apache::lonxml::get_all_text_unbalanced("/script",$parser);
         if ($target ne "meta" && $target ne 'tex' && $target ne 'answer') {
     $result = $token->[4];
     $result.=$bodytext;
             if ($type eq "text/javascript") {
                 my $src=&Apache::lonxml::get_param('src',$parstack,$safeeval,undef,1);
                 my $url=&Apache::lonnet::hreflocation('',$env{'request.filename'});
                 my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
                 my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
                 if ($src =~ /\.js$/) {
                     if ($src !~ m{^(/|https?://)}) {
                         my $cleanhref = &Apache::londefdef::clean_docs_httpref($src,$url,$cdom,$cnum);
                         if ($cleanhref) {
                             &Apache::lonxml::extlink($cleanhref);
                         }
                     }
                 } elsif (($src eq '') && ($bodytext ne '')) {
                     if ($url =~ m{^\Q/uploaded/$cdom/$cnum/docs/\E}) {
                         if ($bodytext =~ m{\.set\w+(Src|Swf)\(["']}i) {
                             my @srcs = split(/\.set/,$bodytext);
                             if (@srcs > 1) {
                                 foreach my $item (@srcs) {
                                     if ($item =~ m{^(?:FlashPlayerSwf|MediaSrc|XMPSrc|ConfigurationSrc|PosterImageSrc)\(['"])([^$1]+)$1\)}is) {
                                         my $cleanhref = &Apache::londefdef::clean_docs_httpref($2,$url,$cdom,$cnum);
                                         if ($cleanhref) {
                                             &Apache::lonxml::extlink($cleanhref);
                                         }
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         }
   }    }
   return $result;    return $result;
 }  }
Line 90  sub end_script { Line 170  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();
   } elsif (($ENV{'request.state'} eq 'construct') && ($target eq 'answer')) {    } elsif ($target eq 'answer') {
     $Apache::lonxml::evaluate++;      $Apache::lonxml::evaluate++;
   }    }
   return '';    return '';
Line 102  sub end_script { Line 182  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[$#$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' ||
     $result=&Apache::run::run($bodytext,$safeeval);      $target eq 'answer' || $target eq 'analyze') {
     if ($target eq 'grade' || $target eq 'answer' ) {        my $bodytext=&Apache::lonxml::get_all_text_unbalanced("/display",$parser);
       $result=''; # grade should produce no output        if (!$Apache::lonxml::default_homework_loaded) {
     }    &Apache::lonxml::default_homework_load($safeeval);
         }
         $result=&Apache::run::run($bodytext,$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=''; }
         }
         $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,'',40,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 136  sub start_scriptlib { Line 228  sub start_scriptlib {
   my $result ='';    my $result ='';
   my $error='';    my $error='';
   
   if ($target eq 'web' || $target eq 'grade' || $target eq 'meta' || $target eq 'edit' || $target eq 'answer') {    if ($target eq 'web' || $target eq 'tex' || $target eq 'grade' ||
         $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 145  sub start_scriptlib { Line 239  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 157  sub start_scriptlib { Line 251  sub start_scriptlib {
   if ($target eq "edit" ) {    if ($target eq "edit" ) {
     $result=      $result=
       &Apache::edit::tag_start($target,$token,'New Script Functions').        &Apache::edit::tag_start($target,$token,'New Script Functions').
  &Apache::edit::editfield($token->[1],$bodytext,'',40,1).   &Apache::edit::editline($token->[1],$bodytext,'scriptlib',40).
               &Apache::edit::browse(undef,'textnode').
   $error.'</td></tr>'.    $error.'</td></tr>'.
     &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=&Apache::edit::modifiedfield($token);  
     &Apache::lonxml::debug($result);  
   }    }
   return $result;    return $result;
 }  }
Line 181  sub start_parserlib { Line 274  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' || $target eq 'edit' || $target eq 'answer') {    if ($target eq 'web' || $target eq 'tex' || $target eq 'grade' ||
         $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 202  sub start_parserlib { Line 297  sub start_parserlib {
   if ($target eq "edit" ) {    if ($target eq "edit" ) {
     $result=      $result=
       &Apache::edit::tag_start($target,$token,'New Tag Definitions').        &Apache::edit::tag_start($target,$token,'New Tag Definitions').
  &Apache::edit::editfield($token->[1],$bodytext,'',40,1).   &Apache::edit::editline($token->[1],$bodytext,'',40).
   $error.'</td></tr>'.    $error.'</td></tr>'.
     &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=&Apache::edit::modifiedfield($token);  
     &Apache::lonxml::debug($result);  
   }    }
   return $result;    return $result;
 }  }
Line 222  sub end_parserlib { Line 315  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{';          my $printtext=&Apache::lonxml::get_param('printtext',$parstack,$safeeval);
    }          if ($printtext=~/\w/) {
   return $result;    # If printtext is given, do not output any intervening information
              &Apache::lonxml::startredirection;
           } else {
              $result = '\unskip\footnote{';
           }
       } elsif ($target eq 'edit') {
    $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('Printed text (optional):','printtext',$token,20);
    $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');
    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/\"/\&quot\;/g;      my $linktext= &Apache::lonxml::get_param('linktext',$parstack,$safeeval);
     $result = "<a href=\"javascript:newWindow=open(\'\',\'new_W\',\'width=500,height=200,scrollbars=1\');newWindow.document.open(\'text/html\',\'replace\');newWindow.document.writeln(\'<html><head><title>newwindow</title></head><body bgcolor=&quot;#FFFFFF&quot;> $output </body></html>\');newWindow.document.close();void(0);\"><sup>*</sup></a>";      if (!$linktext) { $linktext='<sup>*</sup>'; }
       my $width= &Apache::lonxml::get_param('width',$parstack,$safeeval);
       if (!$width) { $width='500'; }
       my $height= &Apache::lonxml::get_param('height',$parstack,$safeeval);
       if (!$height) { $height='200'; }
       $result=&Apache::loncommon::modal_adhoc_window
              ("LONCAPA_newwindow_$Apache::lonxml::curdepth",$width,$height,$output,$linktext);
   } elsif ($target eq 'tex') {    } elsif ($target eq 'tex') {
       $result = '}';        my $printtext=&Apache::lonxml::get_param('printtext',$parstack,$safeeval);
         if ($printtext=~/\w/) {
   # If a "printtext" is given, proceed to retrieve all intervening information and trash it
            my $output=&Apache::lonxml::endredirection;
   # Use printtext instead
            $result=$printtext;
         } else {
            $result='}';
         }
   } else {    } else {
       $result = '';        $result = '';
   }    }
   return $result;     return $result; 
 }  }
   
   
   sub start_windowlink {
       my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
       my $result = '';
       if ($target eq 'web' || $target eq 'webgrade') {
           &Apache::lonxml::startredirection;
       } elsif ($target eq 'edit') {
           $result.=&Apache::edit::tag_start($target,$token);
           $result.=&Apache::edit::text_arg('Link:','href',$token,70);
           $result.=&Apache::edit::text_arg('Height:','height',$token,5);
           $result.=&Apache::edit::text_arg('Width:','width',$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,'href',
                                                        'width','height');
           if ($constructtag) { $result=&Apache::edit::rebuild_tag($token); }
       }
       return $result;
   }
   
   sub end_windowlink {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
     my $result;
     if ($target eq 'web' || $target eq 'webgrade') {
       my $output=&Apache::lonxml::endredirection;
       my $href= &Apache::lonxml::get_param('href',$parstack,$safeeval);
       if (!$href) { $href='/adm/rat/empty.html'; }
       my $width= &Apache::lonxml::get_param('width',$parstack,$safeeval);
       if (!$width) { $width='500'; }
       my $height= &Apache::lonxml::get_param('height',$parstack,$safeeval);
       if (!$height) { $height='200'; }
       $result=&Apache::loncommon::modal_link($href,$output,$width,$height);
     } else {
         $result = '';
     }
     return $result;
   }
   
   
   sub start_togglebox {
       my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
       my $result = '';
       if ($target eq 'web' || $target eq 'webgrade') {
           my $id="LONCAPA_togglebox_$Apache::lonxml::curdepth";
           my $heading=&Apache::lonxml::get_param('heading',$parstack,$safeeval);
           unless ($heading) { $heading=''; } else { $heading.=' '; }
           my $showtext=&Apache::lonxml::get_param('showtext',$parstack,$safeeval);
           my $hidetext=&Apache::lonxml::get_param('hidetext',$parstack,$safeeval);
           my $headerbg=&Apache::lonxml::get_param('headerbg',$parstack,$safeeval);
           $result=&Apache::loncommon::start_togglebox($id,$heading,$headerbg,$hidetext,$showtext);
       } elsif ($target eq 'tex') {
           my $heading=&Apache::lonxml::get_param('heading',$parstack,$safeeval);
           unless ($heading) { $heading=''; } else { $heading.=' '; }
           $result = "\n\n".'\fbox{{\bf '.$heading.'} \qquad '."\n";
       } elsif ($target eq 'edit') {
           $result.=&Apache::edit::tag_start($target,$token);
           $result.=&Apache::edit::text_arg('Heading:','heading',$token,70);
           $result.=&Apache::edit::text_arg('Header Background:','headerbg',$token,7);
           $result.=&Apache::edit::text_arg('Show text:','showtext',$token,10);
           $result.=&Apache::edit::text_arg('Hide text:','hidetext',$token,10);
           $result .=&Apache::edit::end_row().&Apache::edit::start_spanning_row();
       } elsif ($target eq 'modified') {
           my $constructtag=&Apache::edit::get_new_args($token,$parstack,
                                                        $safeeval,'heading',
                                                        'showtext','hidetext',
                                                        'headerbg','textbg');
           if ($constructtag) { $result=&Apache::edit::rebuild_tag($token); }
       }
       return $result;
   }
   
   sub end_togglebox {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
     my $result;
     if ($target eq 'web' || $target eq 'webgrade') {
       $result=&Apache::loncommon::end_togglebox();
     } elsif ($target eq 'tex') {
         $result = "}\n\n";
     } else {
         $result = '';
     }
     return $result;
   }
   
   
   
 sub start_import {  sub start_import {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
   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 '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 263  sub start_import { Line 476  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
          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
             $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);
   
     &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::editfield($token->[1],$bodytext,'',40,1);      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.= '&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=&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;
     }      }
     $result.='">';      $result.='" importmode="'.$token->[2]{'importmode'}.'">';
     $result.=$bodytext;      $result.=$bodytext;
     $result.='</import>';      $result.='</import>';
   }    }
Line 295  sub start_import { Line 540  sub start_import {
 }  }
   
 sub end_import {  sub end_import {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
   pop(@Apache::inputtags::import);    pop(@Apache::inputtags::import);
   return '';    my $result;
     if ($target eq 'edit' ) { $result=&Apache::edit::end_row.
    &Apache::edit::end_table(); }
     return $result;
 }  }
   
 sub start_storetc {  sub start_storetc {
Line 336  sub end_physnet { Line 585  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)=@_;
   if ($target eq 'web'  && $ENV{'request.course.id'} ) {    my $result='';
     my $inside = &Apache::lonxml::get_all_text("/standalone",$$parser[-1]);    if ($target eq 'web' || $target eq 'webgrade') {
       if ( $env{'request.course.id'} ) {
         my $inside = &Apache::lonxml::get_all_text("/standalone",$parser,$style);
       } else {
         $result='<table bgcolor="#E1E1E1" border="2"><tr><td>';
       }
   }    }
   return '';    return $result;
 }  }
   
 sub end_standalone {  sub end_standalone {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
     my $result='';
     if ($target eq 'web' || $target eq 'webgrade' ) {
       if ( $env{'request.course.id'} ) {
       } else {
         $result='</td></tr></table>';
       }
     }
     return $result;
   }
   
   sub start_comment {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
     my $result='';
     if ($target eq 'edit') {
       $result=&Apache::edit::tag_start($target,$token);
       my $bodytext=&Apache::lonxml::get_all_text("/comment",$parser,$style);
       $result.=&Apache::edit::editfield($token->[1],$bodytext,'',80,4)
     } elsif ( $target eq 'modified') {
       $result=$token->[4].&Apache::edit::modifiedfield("/comment",$parser);
     } elsif ( $target eq 'web'    || $target eq 'tex'  || $target eq 'grade'   ||
       $target eq 'answer' || $target eq 'meta' || $target eq 'analyze' ||
       $target eq 'webgrade') {
       #normally throw away comments
       my $bodytext=&Apache::lonxml::get_all_text("/comment",$parser,$style);
     }
     return $result;
   }
   
   sub end_comment {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
     if ($target eq 'edit' ) { return &Apache::edit::end_table(); }
   return '';    return '';
 }  }
   
   
 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,$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.64  
changed lines
  Added in v.1.167


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.