Commit a52bf818 by Carlos Andrés Rocha Committed by Victor Shnayder

WIP Support multiple edit-a-molecule applets

parent 11db1190
(function () { (function () {
var timeout = 100; var timeout = 100;
var applets = $('.editamoleculeinput object');
var input_field = $('.editamoleculeinput input');
var reset_button = $('.editamoleculeinput button.reset');
console.log('EDIT A MOLECULE');
waitForJSMolCalc(); waitForJSMolCalc();
// FIXME: [rocha] jsmolcalc and jsmol.API should be initialized // FIXME: [rocha] jsmolcalc and jsmol.API should be initialized
...@@ -22,64 +16,80 @@ ...@@ -22,64 +16,80 @@
} }
if (typeof(jsmol) != "undefined") { if (typeof(jsmol) != "undefined") {
// ready, initialize applets, // ready, initialize applets
applets.each(function(i, el) { initializeApplet(el); }); initializeApplets();
} else if (timeout > 30 * 1000) {
console.error("JSMolCalc did not load on time.");
} else { } else {
console.log("Waiting for JSMolCalc..."); setTimeout(function() { waitForJSMolCalc(); }, timeout);
setTimeout(function() {
waitForJSMolCalc(); }, timeout);
} }
} }
function initializeApplet(applet) { function initializeApplets() {
console.log("Initializing applet..." ); var applets = $('.editamoleculeinput object');
waitForApplet(applet, configureApplet); applets.each(function(i, element) {
var applet = $(element);
if (!applet.hasClass('initialized')) {
applet.addClass("initialized");
waitForApplet(applet, configureApplet);
}
});
} }
function waitForApplet(applet, callback) { function waitForApplet(applet, callback) {
if (applet.isActive && applet.isActive()) { if (applet[0].isActive && applet[0].isActive()) {
console.log("Applet is ready.");
callback(applet); callback(applet);
} else if (timeout > 30 * 1000) {
console.error("Applet did not load on time.");
} else { } else {
console.log("Waiting for applet...");
setTimeout(function() { setTimeout(function() {
waitForApplet(applet, callback); }, timeout); waitForApplet(applet, callback); }, timeout);
} }
} }
function configureApplet(applet) { function configureApplet(applet) {
// Traverse up the DOM tree and get the other relevant elements
var parent = applet.parent();
var input_field = parent.find('input[type=hidden]');
var reset_button = parent.find('button.reset');
console.log(input_field.toArray());
console.log(input_field.toArray().length);
// Load initial data
var value = input_field.val(); var value = input_field.val();
value = false;
if (value) { if (value) {
console.log('Loading previous mol data...'); console.log('loading old');
var data = JSON.parse(value)["mol"]; var data = JSON.parse(value)["mol"];
loadAppletData(applet, data); console.log(data);
loadAppletData(applet, data, input_field);
} else { } else {
requestAppletData(applet); console.log('loading preset');
requestAppletData(applet, input_field);
} }
reset_button.on('click', function() { requestAppletData(applet); }); reset_button.on('click', function() {
console.log('reseting');
requestAppletData(applet, input_field);
});
// FIXME: [rocha] This is a hack to capture the click on the check // FIXME: [rocha] This is a hack to capture the click on the check
// button and update the hidden field with the applet values // button and update the hidden field with the applet values
var check_button = $(applet).parents('.problem').find('input.check'); var problem = applet.parents('.problem');
check_button.on('click', function() { updateInput(applet); }); var check_button = problem.find('input.check');
check_button.on('click', function() {
console.log('check');
updateInput(applet, input_field);
});
} }
function requestAppletData(applet) { function requestAppletData(applet, input_field) {
var molFile = $(applet).find('param[name=molfile]').attr('value'); var molFile = applet.find('param[name=molfile]').attr('value');
console.log("Loading mol data from " + molFile + " ...");
jQuery.ajax({ jQuery.ajax({
url: molFile, url: molFile,
dataType: "text", dataType: "text",
success: function(data) { success: function(data) {
console.log("Done."); console.log("Done.");
loadAppletData(applet, data); loadAppletData(applet, data, input_field);
}, },
error: function() { error: function() {
console.error("Cannot load mol data."); console.error("Cannot load mol data.");
...@@ -87,23 +97,15 @@ ...@@ -87,23 +97,15 @@
}); });
} }
function loadAppletData(applet, data) { function loadAppletData(applet, data, input_field) {
applet.readMolFile(data); applet[0].readMolFile(data);
updateInput(applet); updateInput(applet, input_field);
}
function getAppletInfo(applet) {
var mol = applet.molFile();
var smiles = applet.smiles();
var jme = applet.jmeFile();
return jsmol.API.getInfo(mol, smiles, jme);
} }
function updateInput(applet) { function updateInput(applet, input_field) {
var mol = applet.molFile(); var mol = applet[0].molFile();
var smiles = applet.smiles(); var smiles = applet[0].smiles();
var jme = applet.jmeFile(); var jme = applet[0].jmeFile();
var info = formatInfo(jsmol.API.getInfo(mol, smiles, jme).toString()); var info = formatInfo(jsmol.API.getInfo(mol, smiles, jme).toString());
var value = { mol: mol, info: info }; var value = { mol: mol, info: info };
...@@ -118,7 +120,7 @@ ...@@ -118,7 +120,7 @@
function formatInfo(info) { function formatInfo(info) {
var results = []; var results = [];
// create a te
var fragment = $('<div>').append(info); var fragment = $('<div>').append(info);
fragment.find('font').each(function () { fragment.find('font').each(function () {
results.push($(this).html()); results.push($(this).html());
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment