Diff for /loncom/homework/chemresponse.pm between versions 1.7 and 1.9

version 1.7, 2003/06/30 20:41:12 version 1.9, 2003/06/30 21:59:03
Line 227  sub end_organicstructure { Line 227  sub end_organicstructure {
     return $result;      return $result;
 }  }
   
 sub reaction_javascript {  sub edit_reaction_button {
     my $rightarrow;      my ($id,$field,$molecule)=@_;
     if ($ENV{'browser.unicode'}) {      my $result=<<EDITREACTION;
  $rightarrow=" &#8594; "  <input type='button' value='Edit Reaction' onClick="javascript:editor=window.open('/res/adm/reactionresponse/reaction_window.html','','width=500,height=270,scrollbars=no,resizable=yes'); document.cookie='problem=$id; field=$field; molecule=$molecule';" />
     } else {  EDITREACTION
  $rightarrow=" <font face=symbol>&reg;</font> ";  
     }  
     my $result=<<REACTIONJAVASCRIPT;  
     <script language="JavaScript">  
   
 var level;  
 var reactants;  
 var products;  
   
   
 function parse_reaction(string) {  
   var reaction_array = string.split('->');  
   var i;  
   reactants = new Array(0);  
   products = new Array(0);  
   
   if (reaction_array.length > 0)  
     reactants = reaction_array[0].split(' +');  
   if (reaction_array.length > 1)  
     products = reaction_array[1].split(' +');  
 }  
   
 function to_capa(string) {  
   var reaction = "";  
   var i;  
   
   parse_reaction(string);  
   
   for (i = 0; i < reactants.length; i++)  
     reactants[i] = capa_component(reactants[i]);  
   for (i = 0; i < products.length; i++)  
     products[i] = capa_component(products[i]);  
   
   reactants.sort();  
   products.sort();  
   
   for (i = 0; i < reactants.length-1; i++) {  
     reaction += reactants[i];  
     reaction += " + ";  
   }  
   if (i < reactants.length)  
     reaction += reactants[i];  
   if (products.length > 0) {  
     reaction += " -> ";  
     for (i = 0; i < products.length-1; i++) {  
       reaction += products[i];  
       reaction += " + ";  
     }  
     if (i < products.length)  
       reaction += products[i];  
   }  
   
   return reaction;  
 }  
   
 function capa_component(string) {  
   var reactant = "";  
   var i = 0;  
   level = 0;  
   
   for (;string.substring(i,i+1) == ' ';i++)  
     ;  
   for (;isDigit(string.substring(i,i+1));i++)  
     reactant += string.substring(i,i+1);  
   for (;i < string.length;i++)  
     reactant +=  capa_char(string.substring(i,i+1));  
   
   return reactant;  
 }  
   
 function capa_char(chr) {  
   if (level == 0) { // baseline  
     if (chr == '^')  
       level = 1;  
     if (chr == ' ')  
       return "";  
     return chr;  
   }  
   if (level == 1) { // superscript  
     if (isDigit(chr))  
       return chr;  
     level = 0;  
     return chr;  
   }  
 }  
   
 function to_html(string) {  
   var reaction = "";  
   var i;  
   
   parse_reaction(string);  
   for (i = 0; i < reactants.length-1; i++) {  
     reaction += html_component(reactants[i]);  
     reaction += " + ";  
   }  
   if (i < reactants.length)  
     reaction += html_component(reactants[i]);  
   
   if (products.length > 0) {  
     reaction += " $rightarrow ";  
     for (i = 0; i < products.length-1; i++) {  
       reaction += html_component(products[i]);  
       reaction += " + ";  
     }  
     if (i < products.length)  
       reaction += html_component(products[i]);  
   }  
   
   return reaction;  
 }  
   
 function html_component(string) {  
   var reactant = "";  
   var i = 0;  
   level = 0;  
   
   for (;string.substring(i,i+1) == ' ';i++)  
     ;  
   for (;isDigit(string.substring(i,i+1));i++)  
     reactant += string.substring(i,i+1);  
   for (;i < string.length;i++)  
     reactant +=  html_char(string.substring(i,i+1));  
   
   return reactant;  
 }  
   
 function html_char(chr) {  
   if (level == 0) { // baseline  
     if (isDigit(chr))  
       return chr.sub();  
     if (chr == '^') {  
       level = 1;  
       return "";  
     }  
     if (chr == '+') // baseline or superscript  
       return "?";  
     if (chr == ' ')  
       return "";  
     return chr;  
   }  
   if (level == 1) { // superscript  
     if (isDigit(chr))  
       return chr.sup();  
     if (chr == '+' || chr == '-') {  
       level = 0;  
       return chr.sup();  
     }  
     if (chr == ' ') {  
       level = 0;  
       return "";  
     }  
     level = 0;  
     return chr;  
   }  
 }  
   
 function isDigit(string) {  
   if (string >= '0' && string <='9')  
     return 1;  
   else  
     return 0;  
 }  
   
 function openHelpWindow() {  
   window.open("reaction_help.html","","scrollbars=yes,resizable=yes,width=550,height=600")  
 }  
   
 function submitReaction() {  
   reaction = to_capa(document.form.text.value);  
   if (reaction == "") {  
     alert("Nothing to submit");  
   }  
   else {  
     name = "INPUT" + ((problem < 10) ? "0" : "") + problem;  
     i = 0;  
     while (parent.opener.document.CAPA.elements[i].name != name)  
       i++;  
     parent.opener.document.CAPA.elements[i].value = reaction;  
     parent.opener.document.CAPA.submit();  
   }  
 }  
 </script>  
 REACTIONJAVASCRIPT  
     return $result;      return $result;
 }  }
   
Line 423  sub start_reactionresponse { Line 240  sub start_reactionresponse {
     my $result;      my $result;
     my $id = &Apache::response::start_response($parstack,$safeeval);      my $id = &Apache::response::start_response($parstack,$safeeval);
     if ($target eq 'web') {      if ($target eq 'web') {
  $result.=<<EDITREACTION;   $result.=&edit_reaction_button($id,"HWVAL_$id");
 <input type='button' value='Edit Reaction' onClick="javascript:editor=window.open('/res/adm/reactionresponse/reaction_window.html','','width=500,height=270,scrollbars=no,resizable=yes'); document.cookie='problem=$id';" />  
 EDITREACTION  
   
 # $result.=&reaction_javascript();  
 # $result.='<iframe name="REACTION_'.$id.'" width="200" height="100" src="/adm/jme/reaction_viewer.html"></iframe>';  
 # $result.='<input type="button" value="Check" onClick = "javascript:newWindow=open(\'\',\'new_W\',\'width=500,height=200,scrollbars=1\');newWindow.document.open(\'text/html\',\'replace\');newWindow.document.writeln(\'<center><br />\'+to_html(document.lonhomework.HWVAL_'.$id.'.value)+\'</center><input type=&quot;button&quot; value=&quot;  Close  &quot; onClick = &quot;parent.window.close()&quot; />\');newWindow.document.close()" />'  
     } elsif ($target eq "edit") {      } elsif ($target eq "edit") {
    $result .=&Apache::edit::tag_start($target,$token);
    $result .=&Apache::edit::text_arg('Answer:','answer',$token,40);
    my $answer=&Apache::lonxml::get_param('answer',$parstack,
    $safeeval);
    $result .=&edit_reaction_button($id,&Apache::edit::html_element_name('answer'),$answer);
    $result .=&Apache::edit::end_row().&Apache::edit::start_spanning_row();
     }      }
     return $result;      return $result;
 }  }

Removed from v.1.7  
changed lines
  Added in v.1.9


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>