version 1.168, 2002/05/01 21:40:25
|
version 1.181, 2002/07/15 19:45:18
|
Line 60
|
Line 60
|
|
|
package Apache::lonxml; |
package Apache::lonxml; |
use vars |
use vars |
qw(@pwd @outputstack $redirection $import @extlinks $metamode $evaluate %insertlist @namespace); |
qw(@pwd @outputstack $redirection $import @extlinks $metamode $evaluate %insertlist @namespace $prevent_entity_encode); |
use strict; |
use strict; |
use HTML::LCParser(); |
use HTML::LCParser(); |
use HTML::TreeBuilder(); |
use HTML::TreeBuilder(); |
Line 129 $evaluate = 1;
|
Line 129 $evaluate = 1;
|
# stores the list of active tag namespaces |
# stores the list of active tag namespaces |
@namespace=(); |
@namespace=(); |
|
|
|
# if 0 all high ASCII characters will be encoded into HTML Entities |
|
$prevent_entity_encode=0; |
|
|
# has the dynamic menu been updated to know about this resource |
# has the dynamic menu been updated to know about this resource |
$Apache::lonxml::registered=0; |
$Apache::lonxml::registered=0; |
|
|
|
# a pointer the the Apache request object |
|
$Apache::lonxml::request=''; |
|
|
sub xmlbegin { |
sub xmlbegin { |
my $output=''; |
my $output=''; |
if ($ENV{'browser.mathml'}) { |
if ($ENV{'browser.mathml'}) { |
Line 325 sub registerurl {
|
Line 331 sub registerurl {
|
my $forcereg=shift; |
my $forcereg=shift; |
my $target = shift; |
my $target = shift; |
my $result = ''; |
my $result = ''; |
if (($ENV{'request.publicaccess'}) || |
if ($target eq 'edit') { |
($ENV{'REQUEST_URI'} eq '/res/adm/pages/menu.html')) { |
$result .="<script>\n menu.currentURL=null;\n". |
return |
&Apache::loncommon::browser_and_searcher_javascript(). |
|
"\n</script>\n"; |
|
} |
|
if ((($ENV{'request.publicaccess'}) || |
|
(!&Apache::lonnet::is_on_map($ENV{'REQUEST_URI'}))) && |
|
(!$forcereg)) { |
|
return $result. |
'<script>function LONCAPAreg(){} function LONCAPAstale(){}</script>'; |
'<script>function LONCAPAreg(){} function LONCAPAstale(){}</script>'; |
} |
} |
if ($Apache::lonxml::registered && !$forcereg) { return ''; } |
if ($Apache::lonxml::registered && !$forcereg) { return ''; } |
$Apache::lonxml::registered=1; |
$Apache::lonxml::registered=1; |
my $nothing=''; |
my $nothing=''; |
if ($ENV{'browser.type'} eq 'explorer') { $nothing='javascript:void(0);'; } |
if ($ENV{'browser.type'} eq 'explorer') { $nothing='javascript:void(0);'; } |
|
my $timesync='menu.syncclock(1000*'.time.');'; |
if (($ENV{'REQUEST_URI'}!~/^\/(res\/)*adm\//) || ($forcereg)) { |
if (($ENV{'REQUEST_URI'}!~/^\/(res\/)*adm\//) || ($forcereg)) { |
my $hwkadd=''; |
my $hwkadd=''; |
if ($ENV{'request.filename'}=~/\.(problem|exam|quiz|assess|survey|form)$/) { |
if ($ENV{'request.filename'}=~/\.(problem|exam|quiz|assess|survey|form)$/) { |
Line 344 ENDSUBM
|
Line 357 ENDSUBM
|
} |
} |
if (&Apache::lonnet::allowed('mgr',$ENV{'request.course.id'})) { |
if (&Apache::lonnet::allowed('mgr',$ENV{'request.course.id'})) { |
$hwkadd.=(<<ENDGRDS); |
$hwkadd.=(<<ENDGRDS); |
menu.switchbutton(7,2,'pgrd.gif','problem','grades','gocmd("/adm/grades","viewgrades")'); |
menu.switchbutton(7,2,'pgrd.gif','problem','grades','gocmd("/adm/grades","gradingmenu")'); |
ENDGRDS |
ENDGRDS |
} |
} |
if (&Apache::lonnet::allowed('opa',$ENV{'request.course.id'})) { |
if (&Apache::lonnet::allowed('opa',$ENV{'request.course.id'})) { |
Line 361 ENDPARM
|
Line 374 ENDPARM
|
function LONCAPAreg() { |
function LONCAPAreg() { |
menu=window.open("$nothing","LONCAPAmenu","",false); |
menu=window.open("$nothing","LONCAPAmenu","",false); |
menu.clearTimeout(menu.menucltim); |
menu.clearTimeout(menu.menucltim); |
|
$timesync |
menu.currentURL=window.location.pathname; |
menu.currentURL=window.location.pathname; |
|
menu.reloadURL=window.location.pathname; |
menu.currentStale=0; |
menu.currentStale=0; |
menu.clearbut(3,1); |
menu.clearbut(3,1); |
menu.switchbutton |
menu.switchbutton |
Line 388 ENDPARM
|
Line 403 ENDPARM
|
function LONCAPAstale() { |
function LONCAPAstale() { |
menu=window.open("$nothing","LONCAPAmenu","",false); |
menu=window.open("$nothing","LONCAPAmenu","",false); |
menu.currentStale=1; |
menu.currentStale=1; |
menu.switchbutton |
if (menu.reloadURL!='' && menu.reloadURL!= null) { |
(3,1,'reload.gif','return','location','go(currentURL)'); |
menu.switchbutton |
|
(3,1,'reload.gif','return','location','go(reloadURL)'); |
|
} |
menu.clearbut(7,1); |
menu.clearbut(7,1); |
menu.clearbut(7,2); |
menu.clearbut(7,2); |
menu.clearbut(7,3); |
menu.clearbut(7,3); |
Line 412 ENDREGTHIS
|
Line 429 ENDREGTHIS
|
|
|
function LONCAPAreg() { |
function LONCAPAreg() { |
menu=window.open("$nothing","LONCAPAmenu","",false); |
menu=window.open("$nothing","LONCAPAmenu","",false); |
|
$timesync |
menu.currentStale=1; |
menu.currentStale=1; |
menu.clearbut(2,1); |
menu.clearbut(2,1); |
menu.clearbut(2,3); |
menu.clearbut(2,3); |
Line 433 ENDREGTHIS
|
Line 451 ENDREGTHIS
|
</script> |
</script> |
ENDDONOTREGTHIS |
ENDDONOTREGTHIS |
} |
} |
if ($target eq 'edit') { |
|
# Javascript routines for construction space: |
|
# openbrowser and opensearcher will start the file browser |
|
# (lonindexer) and searcher (lonsearchcat) respectively. |
|
# Inputs are the name of the html form being used |
|
# and the name of the element the selected URL should |
|
# be placed in. |
|
# openbrowser also takes arguments only and omit, which are |
|
# comma deliminated lists of file extensions to (only) show |
|
# or omit. |
|
# Here we also set currentURL=null. |
|
$result .=<<"ENDBROWSERSCRIPT"; |
|
<script> |
|
menu.currentURL=null; |
|
var editbrowser; |
|
function openbrowser(formname,elementname,only,omit) { |
|
var url = '/res/?'; |
|
if (editbrowser == null) { |
|
url += 'launch=1&'; |
|
} |
|
url += 'catalogmode=interactive&'; |
|
url += 'mode=edit&'; |
|
url += 'form=' + formname + '&'; |
|
if (only != null) { |
|
url += 'only=' + only + '&'; |
|
} |
|
if (omit != null) { |
|
url += 'omit=' + omit + '&'; |
|
} |
|
url += 'element=' + elementname + ''; |
|
var title = 'Browser'; |
|
var options = 'scrollbars=1,resizable=1,menubar=0'; |
|
options += ',width=700,height=600'; |
|
editbrowser = open(url,title,options,'1'); |
|
editbrowser.focus(); |
|
} |
|
var editsearcher; |
|
function opensearcher(formname,elementname) { |
|
var url = '/adm/searchcat?'; |
|
if (editsearcher == null) { |
|
url += 'launch=1&'; |
|
} |
|
url += 'catalogmode=interactive&'; |
|
url += 'mode=edit&'; |
|
url += 'form=' + formname + '&'; |
|
url += 'element=' + elementname + ''; |
|
var title = 'Search'; |
|
var options = 'scrollbars=1,resizable=1,menubar=0'; |
|
options += ',width=700,height=600'; |
|
editsearcher = open(url,title,options,'1'); |
|
editsearcher.focus(); |
|
} |
|
</script> |
|
ENDBROWSERSCRIPT |
|
} |
|
return $result; |
return $result; |
} |
} |
|
|
Line 508 sub printalltags {
|
Line 471 sub printalltags {
|
} |
} |
|
|
sub xmlparse { |
sub xmlparse { |
my ($target,$content_file_string,$safeinit,%style_for_target) = @_; |
my ($request,$target,$content_file_string,$safeinit,%style_for_target) = @_; |
|
|
|
&setup_globals($request,$target); |
|
# |
|
# do we have a course style file? |
|
# |
|
|
|
if ($ENV{'request.course.id'}) { |
|
my $bodytext= |
|
$ENV{'course.'.$ENV{'request.course.id'}.'.default_xml_style'}; |
|
if ($bodytext) { |
|
my $location=&Apache::lonnet::filelocation('',$bodytext); |
|
my $styletext=&Apache::lonnet::getfile($location); |
|
if ($styletext ne '-1') { |
|
%style_for_target = (%style_for_target, |
|
&Apache::style::styleparser($target,$styletext)); |
|
} |
|
} |
|
} |
|
|
&setup_globals($target); |
|
#&printalltags(); |
#&printalltags(); |
my @pars = (); |
my @pars = (); |
my $pwd=$ENV{'request.filename'}; |
my $pwd=$ENV{'request.filename'}; |
Line 624 sub inner_xmlparse {
|
Line 604 sub inner_xmlparse {
|
#evaluate variable refs in result |
#evaluate variable refs in result |
if ($result ne "") { |
if ($result ne "") { |
if ( $#$parstack > -1 ) { |
if ( $#$parstack > -1 ) { |
if ($Apache::lonxml::redirection) { |
$result=&Apache::run::evaluate($result,$safeeval,$$parstack[-1]); |
$Apache::lonxml::outputstack['-1'] .= |
|
&Apache::run::evaluate($result,$safeeval,$$parstack['-1']); |
|
} else { |
|
$finaloutput .= &Apache::run::evaluate($result,$safeeval, |
|
$$parstack['-1']); |
|
} |
|
} else { |
} else { |
$finaloutput .= &Apache::run::evaluate($result,$safeeval,''); |
$result= &Apache::run::evaluate($result,$safeeval,''); |
} |
} |
$result = ''; |
|
} |
} |
|
# Encode any high ASCII characters |
|
if (!$Apache::lonxml::prevent_entity_encode) { |
|
$result=&HTML::Entities::encode($result,"\200-\377"); |
|
} |
|
if ($Apache::lonxml::redirection) { |
|
$Apache::lonxml::outputstack['-1'] .= $result; |
|
} else { |
|
$finaloutput.=$result; |
|
} |
|
$result = ''; |
|
|
if ($token->[0] eq 'E') { |
if ($token->[0] eq 'E') { |
&end_tag($stack,$parstack,$token); |
&end_tag($stack,$parstack,$token); |
} |
} |
Line 648 sub inner_xmlparse {
|
Line 632 sub inner_xmlparse {
|
# $finaloutput.=&endredirection; |
# $finaloutput.=&endredirection; |
# } |
# } |
|
|
# Encode any high ASCII characters |
|
$finaloutput=&HTML::Entities::encode($finaloutput,"\200-\377"); |
|
if (($ENV{'QUERY_STRING'}) && ($target eq 'web')) { |
if (($ENV{'QUERY_STRING'}) && ($target eq 'web')) { |
$finaloutput=&afterburn($finaloutput); |
$finaloutput=&afterburn($finaloutput); |
} |
} |
Line 792 sub callsub {
|
Line 775 sub callsub {
|
} |
} |
|
|
sub setup_globals { |
sub setup_globals { |
my ($target)=@_; |
my ($request,$target)=@_; |
|
$Apache::lonxml::request=$request; |
$Apache::lonxml::registered = 0; |
$Apache::lonxml::registered = 0; |
@Apache::lonxml::pwd=(); |
@Apache::lonxml::pwd=(); |
@Apache::lonxml::extlinks=(); |
@Apache::lonxml::extlinks=(); |
Line 949 sub decreasedepth {
|
Line 933 sub decreasedepth {
|
#print "<br />e $Apache::lonxml::depth : $Apache::lonxml::olddepth : $token->[1] : $curdepth\n"; |
#print "<br />e $Apache::lonxml::depth : $Apache::lonxml::olddepth : $token->[1] : $curdepth\n"; |
} |
} |
|
|
sub get_all_text { |
sub get_all_text_unbalanced { |
|
my($tag,$pars)= @_; |
|
my $token; |
|
my $result=''; |
|
$tag='<'.$tag.'>'; |
|
while ($token = $$pars[-1]->get_token) { |
|
if (($token->[0] eq 'T')||($token->[0] eq 'C')||($token->[0] eq 'D')) { |
|
$result.=$token->[1]; |
|
} elsif ($token->[0] eq 'PI') { |
|
$result.=$token->[2]; |
|
} elsif ($token->[0] eq 'S') { |
|
$result.=$token->[4]; |
|
} elsif ($token->[0] eq 'E') { |
|
$result.=$token->[2]; |
|
} |
|
if ($result =~ /(.*)$tag(.*)/) { |
|
&Apache::lonxml::debug('Got a winner with leftovers ::'.$2); |
|
&Apache::lonxml::debug('Result is :'.$1); |
|
$result=$1; |
|
my $redo=$tag.$2; |
|
&Apache::lonxml::newparser($pars,\$redo); |
|
last; |
|
} |
|
} |
|
return $result |
|
} |
|
|
|
sub get_all_text { |
my($tag,$pars)= @_; |
my($tag,$pars)= @_; |
my $depth=0; |
my $depth=0; |
my $token; |
my $token; |
Line 1122 BUTTONS
|
Line 1132 BUTTONS
|
<a name="editsection" /> |
<a name="editsection" /> |
<form method="post"> |
<form method="post"> |
<input type="hidden" name="editmode" value="Edit" /> |
<input type="hidden" name="editmode" value="Edit" /> |
$buttons |
$buttons<br /> |
<textarea cols="80" rows="40" name="filecont">$filecontents</textarea> |
<textarea cols="80" rows="40" name="filecont">$filecontents</textarea> |
$buttons |
<br />$buttons |
<br /> |
<br /> |
</form> |
</form> |
ENDFOOTER |
ENDFOOTER |
Line 1213 ENDNOTFOUND
|
Line 1223 ENDNOTFOUND
|
} |
} |
} |
} |
if (!$ENV{'form.editmode'} || $ENV{'form.viewmode'}) { |
if (!$ENV{'form.editmode'} || $ENV{'form.viewmode'}) { |
$result = &Apache::lonxml::xmlparse($target,$filecontents,'',%mystyle); |
$result = &Apache::lonxml::xmlparse($request,$target,$filecontents, |
|
'',%mystyle); |
} |
} |
} |
} |
|
|
Line 1222 ENDNOTFOUND
|
Line 1233 ENDNOTFOUND
|
# |
# |
unless ($ENV{'request.state'} eq 'published') { |
unless ($ENV{'request.state'} eq 'published') { |
if ($ENV{'form.editmode'} && (!($ENV{'form.viewmode'}))) { |
if ($ENV{'form.editmode'} && (!($ENV{'form.viewmode'}))) { |
$result='<html><body bgcolor="#FFFFFF"></body></html>'; |
my $displayfile=$request->uri; |
|
$displayfile=~s/^\/[^\/]*//; |
|
$result='<html><body bgcolor="#FFFFFF"><h3>'.$displayfile. |
|
'</h3></body></html>'; |
$result=&inserteditinfo($result,$filecontents); |
$result=&inserteditinfo($result,$filecontents); |
} |
} |
} |
} |
Line 1237 ENDNOTFOUND
|
Line 1251 ENDNOTFOUND
|
sub debug { |
sub debug { |
if ($Apache::lonxml::debug eq 1) { |
if ($Apache::lonxml::debug eq 1) { |
$|=1; |
$|=1; |
print("DEBUG:".join('<br />',@_)."<br />\n"); |
print("DEBUG:".&HTML::Entities::encode($_[0])."<br />\n"); |
} |
} |
} |
} |
|
|