--- loncom/homework/chemresponse.pm 2004/06/07 21:56:24 1.34 +++ loncom/homework/chemresponse.pm 2005/02/18 23:12:29 1.48 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # chemical equation style response # -# $Id: chemresponse.pm,v 1.34 2004/06/07 21:56:24 albertel Exp $ +# $Id: chemresponse.pm,v 1.48 2005/02/18 23:12:29 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -32,7 +32,7 @@ use Apache::lonxml; use Apache::lonnet; BEGIN { - &Apache::lonxml::register('Apache::chemresponse',('organicresponse','organicstructure','reactionresponse')); + &Apache::lonxml::register('Apache::chemresponse',('organicresponse','organicstructure','reactionresponse','chem')); } sub chem_standard_order { @@ -84,7 +84,8 @@ JMESECTION Molecule Editor - @@ -109,11 +111,11 @@ $molecule
JME Editor courtesy of Peter Ertl, Novartis
- +
- +    - +
@@ -121,8 +123,9 @@ $molecule CHEMPAGE $body=&HTML::Entities::encode($body,'<>&"'); $body=~s/\n/ /g; + my $docopen=&Apache::lonhtmlcommon::javascript_docopen(); my $result=< + CHEMINPUT return $result; } @@ -135,17 +138,34 @@ sub start_organicresponse { if ($target eq 'meta') { $result=&Apache::response::meta_package_write('organicresponse'); } elsif ($target eq 'web') { - my $molecule; - if (defined($Apache::lonhomework::history{"resource.$partid.$id.molecule"})) { - $molecule=$Apache::lonhomework::history{"resource.$partid.$id.molecule"}; + if ( &Apache::response::show_answer() ) { + my $jmeanswer=&Apache::lonxml::get_param('jmeanswer',$parstack, + $safeeval); + my $options=&Apache::lonxml::get_param('options',$parstack, + $safeeval); + my $width=&Apache::lonxml::get_param('width',$parstack, + $safeeval); + my $id=&Apache::loncommon::get_cgi_id(); + $result=" + &Apache::lonnet::escape($jmeanswer), + 'cgi.'.$id.'.PNG' => 1, + 'cgi.'.$id.'.WIDTH' => $width); } else { - $molecule=&Apache::lonxml::get_param('molecule',$parstack, - $safeeval); + my $molecule; + if (defined($Apache::lonhomework::history{"resource.$partid.$id.molecule"})) { + $molecule=$Apache::lonhomework::history{"resource.$partid.$id.molecule"}; + } else { + $molecule=&Apache::lonxml::get_param('molecule',$parstack, + $safeeval); + } + my $options=&Apache::lonxml::get_param('options',$parstack, + $safeeval); + $result=&separate_jme_window("HWVAL_$id","MOLECULE_$id",$molecule,$options); + $result.= ''; } - my $options=&Apache::lonxml::get_param('options',$parstack, - $safeeval); - $result=&separate_jme_window("HWVAL_$id","MOLECULE_$id",$molecule,$options); - $result.= ''; } elsif ($target eq 'edit') { $result .=&Apache::edit::tag_start($target,$token); my $options=&Apache::lonxml::get_param('options',$parstack, @@ -177,12 +197,14 @@ sub start_organicresponse { ['reaction','Is a reaction'], ['number','Able to number atoms'] ], ,$token); + $result .=&Apache::edit::text_arg('Width of correct answer image:', + 'width',$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,'molecule', 'answer','jmeanswer', - 'options'); + 'options','width'); if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); } } return $result; @@ -191,7 +213,7 @@ sub start_organicresponse { sub end_organicresponse { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result; - if ($target eq 'grade' && defined($ENV{'form.submitted'})) { + if ($target eq 'grade' && &Apache::response::submitted()) { &Apache::response::setup_params($$tagstack[-1],$safeeval); my $response = &Apache::response::getresponse(); if ( $response =~ /[^\s]/) { @@ -210,6 +232,9 @@ sub end_organicresponse { $ad='INCORRECT'; } } + if ($ad && $Apache::lonhomework::type eq 'survey') { + $ad='SUBMITTED'; + } &Apache::response::handle_previous(\%previous,$ad); $Apache::lonhomework::results{"resource.$partid.$id.awarddetail"}=$ad; $Apache::lonhomework::results{"resource.$partid.$id.molecule"}=$ENV{"form.MOLECULE_$id"}; @@ -245,7 +270,7 @@ sub start_organicstructure { 'cgi.'.$id.'.PNG' => 1, 'cgi.'.$id.'.WIDTH' => $width ); } elsif ($target eq 'tex') { - my $texwidth=&Apache::lonxml::get_param('texwidth',$parstack,$safeeval,1); + my $texwidth=&Apache::lonxml::get_param('texwidth',$parstack,$safeeval,undef,1); if (!$texwidth) { $texwidth='90'; } my $molecule=&Apache::lonxml::get_param('molecule',$parstack,$safeeval); my $options=&Apache::lonxml::get_param('options',$parstack,$safeeval); @@ -308,15 +333,18 @@ sub edit_reaction_button { my $id_es=&Apache::lonnet::escape($id); my $field_es=&Apache::lonnet::escape($field); my $reaction_es=&Apache::lonnet::escape($reaction); + my $docopen=&Apache::lonhtmlcommon::javascript_docopen(); my $result=< +// - + EDITREACTION return $result; } @@ -331,6 +359,7 @@ sub start_reactionresponse { my $partid = $Apache::inputtags::part; my $id = $Apache::inputtags::response['-1']; my $reaction=$Apache::lonhomework::history{"resource.$partid.$id.submission"}; + if ($reaction eq '') { $reaction=&Apache::lonxml::get_param('initial',$parstack,$safeeval); } my $status=$Apache::inputtags::status['-1']; if ($status eq 'CAN_ANSWER') { $result.=&edit_reaction_button($id,"HWVAL_$id",$reaction); @@ -347,11 +376,16 @@ sub start_reactionresponse { $result .=''. &Apache::edit::text_arg('Answer:','answer',$token,40); $result .=&edit_reaction_button($id,&Apache::edit::html_element_name('answer'),$answer).''; + my $initial=&Apache::lonxml::get_param('initial',$parstack,$safeeval); + $result.=''. + &Apache::edit::text_arg('Initial Reaction:','initial',$token,40); + $result .=&edit_reaction_button($id,&Apache::edit::html_element_name('initial'),$initial).''; $result .=&Apache::edit::end_row().&Apache::edit::start_spanning_row(); } elsif ($target eq 'modified') { my $constructtag=&Apache::edit::get_new_args($token,$parstack, - $safeeval,'answer'); + $safeeval,'answer', + 'initial'); if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); } } return $result; @@ -360,7 +394,7 @@ sub start_reactionresponse { sub end_reactionresponse { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result; - if ($target eq 'grade' && defined($ENV{'form.submitted'})) { + if ($target eq 'grade' && &Apache::response::submitted()) { &Apache::response::setup_params($$tagstack[-1],$safeeval); my $response = &Apache::response::getresponse(); if ( $response =~ /[^\s]/) { @@ -379,6 +413,9 @@ sub end_reactionresponse { $ad='INCORRECT'; } } + if ($ad && $Apache::lonhomework::type eq 'survey') { + $ad='SUBMITTED'; + } &Apache::response::handle_previous(\%previous,$ad); $Apache::lonhomework::results{"resource.$partid.$id.awarddetail"}=$ad; } @@ -398,5 +435,26 @@ sub end_reactionresponse { return $result; } +sub start_chem { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style) = @_; + my $result = ''; + my $inside = &Apache::lonxml::get_all_text_unbalanced("/chem",$parser); + if ($target eq 'tex' || $target eq 'web') { + $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 &chemparse(q\0$inside\0);",$safeeval); + } + return $result; +} + +sub end_chem { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style) = @_; + my $result = ''; + return $result; +} + 1; __END__