--- loncom/xml/lonxml.pm 2007/09/05 01:03:21 1.449.2.1 +++ loncom/xml/lonxml.pm 2007/08/29 21:49:38 1.454 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # XML Parser Module # -# $Id: lonxml.pm,v 1.449.2.1 2007/09/05 01:03:21 albertel Exp $ +# $Id: lonxml.pm,v 1.454 2007/08/29 21:49:38 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -1350,16 +1350,19 @@ SIMPLECONTENT sub inserteditinfo { - my ($result,$filecontents,$filetype)=@_; + my ($filecontents,$filetype)=@_; $filecontents = &HTML::Entities::encode($filecontents,'<>&"'); # my $editheader='<a href="#editsection">Edit below</a><hr />'; my $xml_help = ''; my $initialize=''; + my $textarea_id = 'filecont'; + my ($add_to_onload, $add_to_onresize); if ($filetype eq 'html') { my $addbuttons=&Apache::lonhtmlcommon::htmlareaaddbuttons(); $initialize=&Apache::lonhtmlcommon::spellheader(); if (!&Apache::lonhtmlcommon::htmlareablocked() && &Apache::lonhtmlcommon::htmlareabrowser()) { + $textarea_id .= '_htmlarea'; $initialize.=(<<FULLPAGE); <script type="text/javascript"> $addbuttons @@ -1370,6 +1373,13 @@ $addbuttons var editor=new HTMLArea("filecont",config); editor.registerPlugin(FullPage); editor.generate(); + setTimeout( + function () { + HTMLArea._addEvents(editor._doc, + ["keypress","mousedown"], unClean); + editor._iframe.id = '$textarea_id'; + resize_textarea('$textarea_id','LC_aftertextarea'); + },300); } </script> FULLPAGE @@ -1378,13 +1388,16 @@ FULLPAGE <script type="text/javascript"> $addbuttons function initDocument() { + resize_textarea('$textarea_id','LC_aftertextarea'); } </script> FULLPAGE } - $result=~s/\<body([^\>]*)\>/\<body onload="initDocument()" $1\>/i; + $add_to_onload = 'initDocument();'; + $add_to_onresize = "resize_textarea('$textarea_id','LC_aftertextarea');"; $xml_help=&Apache::loncommon::helpLatexCheatsheet(); } + my $cleanbut = ''; my $titledisplay=&display_title(); @@ -1401,24 +1414,26 @@ $cleanbut <input type="submit" name="viewmode" accesskey="v" value="$lt{'vi'}" /> BUTTONS $buttons.=&Apache::lonhtmlcommon::spelllink('xmledit','filecont'); + my $textarea_events = &Apache::edit::element_change_detection(); + my $form_events = &Apache::edit::form_change_detection(); my $editfooter=(<<ENDFOOTER); $initialize <hr /> <a name="editsection" /> -<form method="post" name="xmledit"> +<form $form_events method="post" name="xmledit"> $xml_help <input type="hidden" name="editmode" value="$lt{'ed'}" /> $buttons<br /> -<textarea style="width:100%" cols="80" rows="44" name="filecont" id="filecont">$filecontents</textarea> +<textarea $textarea_events style="width:100%" cols="80" rows="44" name="filecont" id="filecont">$filecontents</textarea> +<div id="LC_aftertextarea"> <br />$buttons <br /> -</form> $titledisplay +</div> +</form> </body> ENDFOOTER -# $result=~s/(\<body[^\>]*\>)/$1$editheader/is; - $result=~s/(\<\/body\>)/$editfooter/is; - return $result; + return ($editfooter,$add_to_onload,$add_to_onresize);; } sub get_target { @@ -1514,13 +1529,9 @@ ENDNOTFOUND ['editmode']); } if (!$env{'form.editmode'} || $env{'form.viewmode'} || $env{'form.discardview'}) { - &Apache::structuretags::reset_problem_globals(); $result = &Apache::lonxml::xmlparse($request,$target,$filecontents, '',%mystyle); - # .html files may contain <problem> or <Task> need to clean - # up if it did - &Apache::structuretags::reset_problem_globals(); - &Apache::lonhomework::finished_parsing(); + undef($Apache::lonhomework::parsing_a_task); &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, ['rawmode']); if ($env{'form.rawmode'}) { $result = $filecontents; } @@ -1532,24 +1543,35 @@ ENDNOTFOUND # unless ($env{'request.state'} eq 'published') { if ($env{'form.editmode'} && (!($env{'form.viewmode'})) && (!($env{'form.discardview'}))) - { + { + my ($edit_info, $add_to_onload, $add_to_onresize)= + &inserteditinfo($filecontents,$filetype); + my $displayfile=$request->uri; $displayfile=~s/^\/[^\/]*//; - my %options = (); + my %options = + ('add_entries' => + {'onresize' => $add_to_onresize, + 'onload' => $add_to_onload, }); + if ($env{'environment.remote'} ne 'off') { $options{'bgcolor'} = '#FFFFFF'; + $options{'only_body'} = 1; } - my $start_page = &Apache::loncommon::start_page(undef,undef, + my $js = + &Apache::edit::js_change_detection(). + &Apache::loncommon::resize_textarea_js(); + my $start_page = &Apache::loncommon::start_page(undef,$js, \%options); $result=$start_page. &Apache::lonxml::message_location().'<h3>'. $displayfile. - '</h3>'.&Apache::loncommon::end_page(); - $result=&inserteditinfo($result,$filecontents,$filetype); + '</h3>'. + $edit_info. + &Apache::loncommon::end_page(); } } if ($filetype eq 'html') { &writeallows($request->uri); } - &Apache::lonxml::add_messages(\$result); $request->print($result); @@ -1598,12 +1620,28 @@ sub show_error_warn_msg { } sub error { + my @errors = @_; + $errorcount++; + + if (defined($Apache::inputtags::part)) { + if ( @Apache::inputtags::response ) { + push(@errors, + &mt("This error occurred while processing response [_1] in part [_2]", + $Apache::inputtags::response[-1], + $Apache::inputtags::part)); + } else { + push(@errors, + &mt("This error occurred while processing part [_1]", + $Apache::inputtags::part)); + } + } + if ( &show_error_warn_msg() ) { # If printing in construction space, put the error inside <pre></pre> push(@Apache::lonxml::error_messages, $Apache::lonxml::warnings_error_header. - "<b>ERROR:</b>".join("<br />\n",@_)."<br />\n"); + "<b>ERROR:</b>".join("<br />\n",@errors)."<br />\n"); $Apache::lonxml::warnings_error_header=''; } else { my $errormsg; @@ -1613,7 +1651,10 @@ sub error { $errormsg=&mt("An error occured while processing this resource. The author has been notified."); } my $host=$Apache::lonnet::perlvar{'lonHostID'}; - my $msg = join('<br />',(@_,"The error occurred on host <tt>$host</tt>")); + push(@errors, "The error occurred on host <tt>$host</tt>"); + + my $msg = join('<br />', @errors); + #notify author &Apache::lonmsg::author_res_msg($env{'request.filename'},$msg); #notify course