--- loncom/xml/scripttag.pm 2000/10/30 20:34:25 1.22 +++ loncom/xml/scripttag.pm 2001/02/19 20:43:00 1.33 @@ -10,41 +10,69 @@ use Apache::lonnet; sub BEGIN { &Apache::lonxml::register('Apache::scripttag',('script','scriptlib', 'parserlib','import', - 'footnote')); + 'window','display')); } -$Apache::scripttag::SCRIPT_RESULT=''; sub start_script { my ($target,$token,$parstack,$parser,$safeeval)=@_; my $args =''; - if ( $#$parstack > -1 ) { - $args=$$parstack[$#$parstack]; - } + if ( $#$parstack > -1 ) { $args=$$parstack[$#$parstack]; } my $type = &Apache::run::run("{$args;".'return $type}',$safeeval); + my $result=''; #&Apache::lonxml::debug("found type of $type"); - $Apache::scripttag::SCRIPT_RESULT=''; if ($type eq "loncapa/perl") { - $safeeval->share('$SCRIPT_RESULT'); my $bodytext=&Apache::lonxml::get_all_text("/script",$$parser[$#$parser]); if ( $target eq "modified" ) { - } - &Apache::run::run($bodytext,$safeeval); - - if ($target eq "edit" ) { - $Apache::scripttag::SCRIPT_RESULT = - "
<$token->[1]> output:
$bodytext
Source:
"; - $Apache::scripttag::SCRIPT_RESULT.=&editfield($token->[1],$bodytext); + } elsif ( $target eq "web" || $target eq "grade" ) { + &Apache::run::run($bodytext,$safeeval); + } elsif ($target eq "edit" ) { + &Apache::run::run($bodytext,$safeeval); + $result="
<$token->[1]> output:
$bodytext
Source:
"; + $result.=&editfield($token->[1],$bodytext); } } else { - $Apache::scripttag::SCRIPT_RESULT = $token->[4]; + if ($target ne "meta") { $result = $token->[4]; } } - return $Apache::scripttag::SCRIPT_RESULT; + return $result; } sub end_script { my ($target,$token,$parstack,$parser,$safeeval)=@_; - return $token->[2]; + if ( $target eq "meta" ) { return ''; } + my $args =''; + if ( $#$parstack > -1 ) { $args=$$parstack[$#$parstack]; } + my $type = &Apache::run::run("{$args;".'return $type}',$safeeval); + my $result=''; + #other script blocks need to survive + if ($type ne "loncapa/perl") { return $token->[2]; } + return ''; +} + +sub start_display { + my ($target,$token,$parstack,$parser,$safeeval)=@_; + my $args =''; + if ( $#$parstack > -1 ) { + $args=$$parstack[$#$parstack]; + } + my $bodytext=&Apache::lonxml::get_all_text("/display",$$parser[$#$parser]); + + if ( $target eq "modified" ) { + } + my $result=&Apache::run::run($bodytext,$safeeval); + if ($target eq 'grade' ) { + # grade should produce no output + $result=''; + } + if ($target eq "edit" ) { + $result = + "
<$token->[1]> output:
$bodytext
Source:
"; + $result.=&editfield($token->[1],$bodytext); + } + return $result; +} + +sub end_display { } sub start_scriptlib { @@ -62,7 +90,7 @@ sub start_scriptlib { return ""; } &Apache::run::run($script,$safeeval); - #&Apache::lonxml::debug("ran $bodytext:
".&Apache::lonnet::getfile($bodytext)."
"); + #&Apache::lonxml::debug("ran $bodytext:
".&Apache::lonnet::getfile($bodytext)."
"); if ($target eq "edit" ) { $result.=&editfield($token->[1],$bodytext); @@ -82,6 +110,7 @@ sub start_parserlib { my $location=&Apache::lonnet::filelocation($Apache::lonxml::pwd['-1'], $bodytext); my $styletext=&Apache::lonnet::getfile($location); + #&Apache::lonxml::debug("found :$bodytext: in :$location: with :$styletext:"); if ($styletext == -1) { &Apache::lonxml::error(" Unable to find $location for parserlib"); return ""; @@ -97,20 +126,26 @@ sub start_parserlib { sub end_parserlib { } -sub start_footnote { +sub start_window { my ($target,$token,$parstack,$parser,$safeeval,$style)=@_; my $result = ''; - $Apache::lonxml::redirection = 0; + if ($target eq 'web') { + $Apache::lonxml::redirection = 0; + } return $result; } -sub end_footnote { +sub end_window { my ($target,$token,$parstack,$parser,$safeeval,$style)=@_; - $Apache::lonxml::outputstack =~ s/\"/\"\;/g; - my $result = "newwindow $Apache::lonxml::outputstack \');newWindow.document.close();void(0);\">*"; - if ($target eq 'meta') {$result = '';} - $Apache::lonxml::outputstack = ""; - $Apache::lonxml::redirection = 1; + my $result; + if ($target eq 'web') { + $Apache::lonxml::outputstack =~ s/\"/\"\;/g; + $result = "newwindow $Apache::lonxml::outputstack \');newWindow.document.close();void(0);\">*"; + $Apache::lonxml::outputstack = ""; + $Apache::lonxml::redirection = 1; + } else { + $result = ''; + } return $result; } @@ -128,18 +163,35 @@ sub start_import { } my $dir=$location; - $dir=~s:/[^/]*$::; + $dir=~s:/[^/]*$::; +# &Apache::lonxml::debug("directory $dir $location file $file \nEND\n"); &Apache::lonxml::newparser($parser,\$file,$dir); if ($target eq "edit" ) { $result.=&editfield($token->[1],$bodytext); - $result.="Clickhere to edit

" + $result.="Clickhere to edit
" } + return ''; } sub end_import { } +sub start_meta { + my ($target,$token,$parstack,$parser,$safeeval,$style)=@_; + my $result = ''; + if ($target ne 'meta') { + $result = &Apache::lonxml::get_all_text("/meta",$$parser[$#$parser]); + $result = ''; + return $result; + } else { + return $result; + } +} + +sub end_meta { +} + sub editfield { my ($tag,$data)=@_; @@ -149,7 +201,7 @@ sub editfield { if (length($_) > $maxlength) { $maxlength = length ($_); } } split ("\n", $data); - return "

\n<$tag>

\n   

\n</$tag>

\n"; + return "
\n<$tag>
\n   
\n</$tag>
\n"; } sub getfilenothere {