# The LearningOnline Network with CAPA # chemical equation style response # # $Id: chemresponse.pm,v 1.8 2003/06/30 20:58:52 albertel Exp $ # # Copyright Michigan State University Board of Trustees # # This file is part of the LearningOnline Network with CAPA (LON-CAPA). # # LON-CAPA is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # LON-CAPA is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with LON-CAPA; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # /home/httpd/html/adm/gpl.txt # # http://www.lon-capa.org/ # # package Apache::chemresponse; use strict; use Apache::lonxml; use Apache::lonnet; BEGIN { &Apache::lonxml::register('Apache::chemresponse',('organicresponse','organicstructure','reactionresponse')); } sub seperate_jme_window { my ($smile_input,$jme_input,$molecule,$options)=@_; my $smilesection; if (defined($smile_input)) { $smilesection=< Molecule Editor
You have to enable Java and JavaScript on your machine.
JME Editor courtesy of Peter Ertl, Novartis

  
CHEMPAGE $body=&HTML::Entities::encode($body); $body=~s/\n/ /g; my $result=< CHEMINPUT return $result; } sub start_organicresponse { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result; my $partid = $Apache::inputtags::part; my $id = &Apache::response::start_response($parstack,$safeeval); if ($target eq 'meta') { } elsif ($target eq 'web') { 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 $multipart=&Apache::lonxml::get_param('multipart',$parstack, $safeeval); if ($multipart eq 'yes') { $multipart = 'multipart'; } else { $multipart =''; } $result=&seperate_jme_window("HWVAL_$id","MOLECULE_$id",$molecule,$multipart); $result.= ''; } elsif ($target eq 'edit') { $result .=&Apache::edit::tag_start($target,$token); $result .=''. &Apache::edit::text_arg('Starting Molecule:','molecule', $token,40); my $molecule=&Apache::lonxml::get_param('molecule',$parstack, $safeeval); $result .=&seperate_jme_window(undef, &Apache::edit::html_element_name('molecule'), $molecule,'multipart'); $result .='
'; $result .=&Apache::edit::text_arg('Correct Answer:','answer', $token,40); $result .=&Apache::edit::hidden_arg('jmeanswer',$token); my $jmeanswer=&Apache::lonxml::get_param('jmeanswer',$parstack, $safeeval); $result .=&seperate_jme_window( &Apache::edit::html_element_name('answer'), &Apache::edit::html_element_name('jmeanswer'), $jmeanswer,'multipart'); $result .=''. &Apache::edit::select_arg('Multipart:','multipart', ['no','yes'],$token); $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', 'multipart'); if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); } } return $result; } sub end_organicresponse { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result; if ($target eq 'grade' && defined($ENV{'form.submitted'})) { &Apache::response::setup_params($$tagstack[-1]); my $response = &Apache::response::getresponse(); if ( $response =~ /[^\s]/) { my $partid = $Apache::inputtags::part; my $id = $Apache::inputtags::response['-1']; my $answer=&Apache::lonxml::get_param('answer',$parstack,$safeeval); my %previous = &Apache::response::check_for_previous($response,$partid,$id); $Apache::lonhomework::results{"resource.$partid.$id.submission"}=$response; &Apache::lonxml::debug("submitted a $response for $answer
\n"); my $ad; if ($response eq $answer) { $ad='EXACT_ANS'; } else { $ad='INCORRECT'; } &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"}; } } elsif ($target eq "edit") { $result.= &Apache::edit::tag_end($target,$token,''); } &Apache::response::end_response; return $result; } sub start_organicstructure { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result; if ($target eq 'web') { my $width=&Apache::lonxml::get_param('width',$parstack,$safeeval); my $height=&Apache::lonxml::get_param('height',$parstack,$safeeval); my $molecule=&Apache::lonxml::get_param('molecule',$parstack,$safeeval); $result=< CHEMOUTPUT } elsif ($target eq 'edit') { $result .=&Apache::edit::tag_start($target,$token); $result .=&Apache::edit::text_arg('Width:','width',$token,5); $result .=&Apache::edit::text_arg('Height:','height',$token,5); $result .=&Apache::edit::text_arg('Molecule:','molecule',$token,40); my $molecule=&Apache::lonxml::get_param('molecule',$parstack, $safeeval); $result .=&seperate_jme_window(undef, &Apache::edit::html_element_name('molecule'), $molecule,'multipart'); $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', 'width','height'); if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); } } return $result; } sub end_organicstructure { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result; if ($target eq "edit") { $result.= &Apache::edit::tag_end($target,$token,''); } return $result; } sub start_reactionresponse { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result; my $id = &Apache::response::start_response($parstack,$safeeval); if ($target eq 'web') { $result.=< EDITREACTION # $result.=&reaction_javascript(); # $result.=''; # $result.='' } elsif ($target eq "edit") { } return $result; } sub end_reactionresponse { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result; if ($target eq "edit") { $result.= &Apache::edit::tag_end($target,$token,''); } &Apache::response::end_response; return $result; } 1; __END__