[LON-CAPA-cvs] cvs: loncom /homework chemresponse.pm
albertel
lon-capa-cvs@mail.lon-capa.org
Sun, 04 May 2003 08:45:22 -0000
albertel Sun May 4 04:45:22 2003 EDT
Added files:
/loncom/homework chemresponse.pm
Log:
- adding <chemresponse> thi version work for student input on Mozilla,
needs:
- edit mode
- to be installed
- <chemstructure>
- check to work with IE and Netscape 4.X DOM models
- add JME files
- inorganic mode
Index: loncom/homework/chemresponse.pm
+++ loncom/homework/chemresponse.pm
# The LearningOnline Network with CAPA
# chemical equation style response
#
# $Id: chemresponse.pm,v 1.1 2003/05/04 08:45:22 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',('chemresponse','chemstructure'));
}
sub seperate_jme_window {
my ($id,$molecule)=@_;
my $body=<<CHEMPAGE;
<html>
<head>
<title>Molecule Editor</title>
<script language="JavaScript">
function submitSmiles() {
smiles = document.applets.JME.smiles();
if (smiles == "") {
alert("Nothing to submit");
} else {
jmeFile = document.applets.JME.jmeFile();
opener.document.lonhomework.HWVAL_$id.value = smiles;
opener.document.lonhomework.MOLECULE_$id.value = jmeFile;
window.close();
}
}
function openHelpWindow() {
window.open("/adm/jme/jme_help.html","","scrollbars=yes,resizable=yes,width=500,height=600")
}
</script>
</head>
<body bgcolor="#ffffff">
<center>
<applet code="JME.class" name="JME" archive="/adm/jme/JME.jar" width="97%" height="78%">
You have to enable Java and JavaScript on your machine.
<param name="jme" value="$molecule" />
</applet><br />
<font face="arial,helvetica,sans-serif" size=-1><a href="http://www.molinspiration.com/jme/index.html">JME Editor</a> courtesy of Peter Ertl, Novartis</font>
<form>
<input type="button" name="submit" value="Insert Answer" onClick = "submitSmiles();" />
<br />
<input type="button" value=" Close " onClick = "window.close()" />
<input type="button" value=" Help " onClick = "openHelpWindow()" />
</form>
</center>
</body>
</html>
CHEMPAGE
$body=&HTML::Entities::encode($body);
$body=~s/\n/ /g;
my $result=<<CHEMINPUT;
<input type="button" value="Draw Molecule" onClick="javascript:editor=window.open('','','width=500,height=500,scrollbars=no,resizable=yes');editor.document.open('text/html','replace');editor.document.writeln('$body')" />
CHEMINPUT
return $result;
}
sub start_chemresponse {
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);
}
$result=&seperate_jme_window($id,$molecule);
$result.= '<input type="hidden" name="MOLECULE_'.$id.'" value="" />';
}
return $result;
}
sub end_chemresponse {
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<br \>\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"};
}
}
&Apache::response::end_response;
return $result;
}
sub start_chemstructure {
}
sub end_chemstructure {
}
1;
__END__