Modify editamolecule to load GWT scripts dynamically
This commit is contained in:
@@ -1,6 +1,4 @@
|
||||
<section id="editamoleculeinput_${id}" class="editamoleculeinput">
|
||||
<div class="script_placeholder" data-src="/static/js/capa/jsmolcalc/jsmolcalc.nocache.js"/>
|
||||
<div class="script_placeholder" data-src="/static/js/capa/jsme/jsme_export.nocache.js"/>
|
||||
<div class="script_placeholder" data-src="${applet_loader}"/>
|
||||
|
||||
% if status == 'unsubmitted':
|
||||
|
||||
@@ -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
|
||||
|
||||
$('<br/> <br/> <div class="errormsgs" style="padding: 5px 5px 5px 5px;\
|
||||
visibility:hidden; background-color:#FA6666; height:60px;\
|
||||
width:400px;"> </div>').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';
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user