[LON-CAPA-cvs] cvs: loncom /html/res/adm/pages/reactionresponse reaction_editor.html
raeburn
raeburn at source.lon-capa.org
Fri Dec 24 10:28:10 EST 2021
raeburn Fri Dec 24 15:28:10 2021 EDT
Modified files:
/loncom/html/res/adm/pages/reactionresponse reaction_editor.html
Log:
- Reverse rev. 1.17
Index: loncom/html/res/adm/pages/reactionresponse/reaction_editor.html
diff -u /dev/null loncom/html/res/adm/pages/reactionresponse/reaction_editor.html:1.18
--- /dev/null Fri Dec 24 15:28:10 2021
+++ loncom/html/res/adm/pages/reactionresponse/reaction_editor.html Fri Dec 24 15:28:10 2021
@@ -0,0 +1,270 @@
+<!-- Chemical reaction editor developed by Guy Ashkenazi, guy at fh.huji.ac.il-->
+
+<!--
+ $Id: reaction_editor.html,v 1.18 2021/12/24 15:28:10 raeburn 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/
+-->
+
+<html>
+<head>
+<script type="text/javascript" language="Javascript">
+var rightarrow = '→';
+var id;
+var reaction;
+var field
+</script>
+<!-- parsed by LON-CAPA to get the correct symbol for the arrow -->
+<script type="text/javascript" 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 += " + ";
+ }
+ 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 += " + ";
+ }
+ reaction += html_component(products[i]);
+ }
+
+ return reaction;
+}
+
+function html_component(string) {
+ var reactant = "";
+ var i = 0;
+ level = -1;
+
+ var hydrate = string.split('.');
+ if (hydrate.length > 1)
+ return html_component(hydrate[0]) + "·" + html_component(hydrate[1]);
+
+ for (;i < string.length;i++)
+ reactant += html_char(string.substring(i,i+1));
+
+ return reactant;
+}
+
+function html_char(chr) {
+ if (level == -1) { // stoichiometric coefficient
+ if (isDigit(chr) || chr == '/')
+ return chr;
+ if (chr == ' ')
+ return "";
+ else
+ level = 0;
+ }
+ if (level == 0) { // baseline
+ if (isDigit(chr))
+ return chr.sub();
+ if (chr == '^') {
+ level = 1;
+ return "";
+ }
+ if (chr == '+') // baseline or superscript?
+ return "?";
+ if (chr == ' ')
+ return "";
+ if (chr == '(' || chr == '|') // coefficient
+ level = -1;
+ return chr;
+ }
+ if (level == 1) { // superscript
+ if (isDigit(chr))
+ return chr.sup();
+ if (chr == '+') {
+ level = 0;
+ return chr.sup();
+ }
+ if (chr == '-') {
+ level = 0;
+ return "<sup>−</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 = field;
+ i = 0;
+ while (parent.opener.document.lonhomework.elements[i].name != name)
+ i++;
+ parent.opener.document.lonhomework.elements[i].value = reaction;
+// parent.opener.document.lonhomework.submit();
+ parent.window.close();
+ }
+}
+
+function setup() {
+ var query = window.location.search.substring(1);
+ var vars = query.split("&");
+ for (var i=0;i<vars.length;i++) {
+ var pair = vars[i].split("=");
+ if (pair[0] == 'reaction' ) {
+ reaction = decodeURIComponent(pair[1]);
+ }
+ if (pair[0] == 'field') {
+ field = decodeURIComponent(pair[1]);
+ }
+ if (pair[0] == 'id') {
+ id = decodeURIComponent(pair[1]);
+ }
+ }
+ document.form.text.value=reaction;
+ parent.viewer.document.writeln('<center><br />'+to_html(document.form.text.value)+'</center>');
+ parent.viewer.document.close();
+ document.form.submit.value='Insert Answer';
+ parent.document.title='LON-CAPA - Reaction Editor';
+}
+
+</script>
+</head>
+
+<body bgcolor="#ffffff" onLoad = "javascript:setup();">
+<center>
+<hr />
+<form name="form">
+<input type="text" size="50" name="text" />
+<input type="button" value="Check" onclick = "parent.viewer.document.writeln('<center><br />'+to_html(document.form.text.value)+'</center>');parent.viewer.document.close()" /><br />
+<br />
+<input type="button" name="submit" value="Insert reaction for part #?" onclick = "submitReaction();" />
+<br />
+<input type="button" value=" Close " onclick = "parent.window.close()" />
+
+<input type="button" value=" Help " onclick = "openHelpWindow()" />
+</form>
+</center>
+</body>
+</html>
More information about the LON-CAPA-cvs
mailing list