diff --git a/common/lib/capa/capa/templates/editamolecule.html b/common/lib/capa/capa/templates/editamolecule.html index 57fb86874b..ea824e7946 100644 --- a/common/lib/capa/capa/templates/editamolecule.html +++ b/common/lib/capa/capa/templates/editamolecule.html @@ -1,6 +1,4 @@
-
-
% if status == 'unsubmitted': diff --git a/common/static/js/capa/editamolecule.js b/common/static/js/capa/editamolecule.js index d83a7633cd..124aaa03fd 100644 --- a/common/static/js/capa/editamolecule.js +++ b/common/static/js/capa/editamolecule.js @@ -2,23 +2,53 @@ var timeout = 100; // Simple "lock" to prevent applets from being initialized more than once - if (typeof(_editamolecule_lock) == 'undefined' || _editamolecule_lock == false) { - _editamolecule_lock = true; + if (typeof(_editamolecule_loaded) == 'undefined') { + _editamolecule_loaded = true; + loadGWTScripts(); waitForGWT(); } else { return; } - // FIXME: [rocha] jsme and jsmolcalc are not initialized automatically by - // the GWT script loader. To fix this, wait for the scripts to load, initialize - // them manually and wait until they are ready + function loadScript(src) { + var script = document.createElement('script'); + script.setAttribute('type', 'text/javascript'); + script.setAttribute('src', src); + $('head')[0].appendChild(script); + } + + function loadGWTScripts() { + // The names of the script are split to prevent them from + // being rewritten by LMS. GWT uses the filename of the script + // to find the URL path in which the script lives. If the name + // of the file is changed, GWT won't load correctly + var jsmolcalc_src = '/sta' + 'tic/js/capa/jsmolcalc/jsmolcalc.nocache.js'; + var jsme_src = '/sta' + 'tic/js/capa/jsme/jsme_export.nocache.js'; + + // Make sure we don't request the scripts twice + + if (typeof (_jsmolcalc) == 'undefined') { + _jsmolcalc = true; + loadScript(jsmolcalc_src); + } + + if (typeof (_jsme) == 'undefined') { + _jsme = true; + loadScript(jsme_src); + } + } + function waitForGWT() { - if (typeof(jsmolcalc) != "undefined" && jsmolcalc) + // jsme and jsmolcalc are not initialized automatically by the GWT + // script loader. To fix this, wait for the scripts to load, + // initialize them manually and wait until they are ready + + if (typeof(jsmolcalc) != 'undefined' && jsmolcalc) { jsmolcalc.onInjectionDone('jsmolcalc'); } - if (typeof(jsme_export) != "undefined" && jsme_export) + if (typeof(jsme_export) != 'undefined' && jsme_export) { // dummy function called by jsme_export window.jsmeOnLoad = function() {}; @@ -29,7 +59,7 @@ if (typeof(jsmol) != 'undefined' && typeof(JavaScriptApplet) != 'undefined') { // ready, initialize applets initializeApplets(); - _editamolecule_lock = false; // release lock, for reloading + _editamolecule_loaded = false; } else { setTimeout(waitForGWT, timeout); } @@ -59,7 +89,6 @@ var reset_button = parent.find('button.reset'); // Add div for error messages - $('

').appendTo(parent); @@ -93,16 +122,14 @@ function requestAppletData(element, applet, input_field) { var molFile = $(element).data('molfile-src'); - jQuery.ajax({ url: molFile, dataType: "text", success: function(data) { - //console.log("Done."); loadAppletData(applet, data, input_field); }, error: function() { - console.error("Cannot load mol data."); + console.error("Cannot load mol data from: " + molFile); } }); } @@ -118,12 +145,9 @@ var jme = applet.jmeFile(); var info = formatInfo(jsmol.API.getInfo(mol, smiles, jme).toString(), - input_field, element); + input_field, element); var value = { mol: mol, info: info }; - //console.log("Molecule info:"); - //console.log(info); - input_field.val(JSON.stringify(value)); return value; @@ -131,10 +155,8 @@ function formatInfo(info, input_field, element) { var results = []; - //console.log("element parent is"+$(element).parent()) var errordiv = $(element).parent().find('.errormsgs')[0]; - //console.log(errordiv); - + if (!errordiv) { // This is a bit hackish, but works. // There are situations where formatInfo is called but no div yet exists @@ -143,7 +165,7 @@ //console.log("There is no errordiv loaded yet. trying again soon"); return [] } - + if (info.search("It is not possible") == -1) { errordiv.innerHTML = ''; errordiv.style.visibility = 'hidden'; @@ -153,12 +175,10 @@ }); } else { - //console.log("err"); - // remove Brian's html tags var tags = /<((\/)?\w{1,7})>/g; var errmsg = info.replace(tags, ' '); - //console.log(errmsg); + errordiv.innerHTML = errmsg; errordiv.style.visibility = 'visible'; }