From: Charles H. S. <cshubert@MIT.EDU> - 2014-02-09 19:48:53
|
Hi Bob, Your debugging email was very helpful, but I thought that I’d respond to this thread as there are two issues from below that I want to address: 1. XHTML 2. Info.messageCallback I’ve got things working so that I can move forward, but my current fixes seem more like workarounds than solutions (see below). Many thanks, —Chuck =================== 1. XHTML =================== from my code: Jmol.setXHTML(model.ids.id_jsmol); from your response: there is no need for the XHTML business. Really that's there just because it was in Jmol 11, and actually it was almost never used. XHTML was just too too difficult all around. HTML5 is way better. The HTML structure for my app looks like: <div> app <div> menubar </div> <div> <div> tabs </div> <div\> jmol </div> </div </dib> With no setXHTML Jmol puts the image over the top of the app <div> (i.e. the menubar and the tabs are hidden). With setXHTML Jmol puts the image in the jmol <div> (i.e. the menubar and the tabs are visible). I need whatever setXHTML is doing to put the Jmol image where I want it to go. I’m not sure how to do that without calling setXHTML. =================== 2. Info.messageCallback =================== The debugging technique of setting messageCallback to “alert” broke the ice for me. Info.messageCallback = “alert”; // worked My problem was that Jmol couldn’t see my function name. Info.messagerCallback = “myMessageCallback”; // didn’t work There is a lot of namespace closure going on with my stuff and the stuff that calls my stuff. I needed a function/variable that Jmol could see. So, I created a window variable. window.myvariable = myMessageCallback; Info.messageCallback = “window.myvariable”; // worked - Yeah! This explains why Jmol could see: Info.readyFunction = myReadyFunction; but could not see: Info.messageCallback = “myMessageCallback”; Jmol gets an address to myReadyFunction, but only the name of myMessageCallback. So, Jmol can call readyFunction, but doesn’t have enough information about where myMessageCallbac function is to find it and call it. It would be nice if Jmol treated Info.messageCallback the same way that it treats Info.readyFunction. Maybe there is already a way to do that, and I just missed it. There also must be a jQuery way to give Jmol the name of myMessageCallback, but I haven’t yet asked Google the right question. =================== On Feb 8, 2014, at 7:02 PM, Robert Hanson <ha...@st...<mailto:ha...@st...>> wrote: Great, so if that is all you are doing, there is no need for the XHTML business. Really that's there just because it was in Jmol 11, and actually it was almost never used. XHTML was just too too difficult all around. HTML5 is way better. So what you would do to populate a div in the jQuery way is simply this, as used in supersimple.htm: $(document).ready(function() { Info = { width: 400, height: 400, debug: false, color: "0xC0C0C0", disableJ2SLoadMonitor: true, disableInitialConsole: true, addSelectionOptions: true, serverURL: "your server...../jsmol/php/jsmol.php", use: "HTML5", readyFunction: null, script: "load $caffeine" } $("#mydiv").html(Jmol.getAppletHtml("jmolApplet0",Info)) }); That's it. It's really that simple. jQuery and JSmol take care of everything else for you. Info.serverURL will only be necessary if you are delivering binary files or if you are allowing users to save images and states. I think perhaps you were still using the old Jmol2.js, and unless you have hundreds of pages that were extant back before JSmol arrived, you should get rid of that dependency. Life will be easier. ... more in another more general thread... Bob On Sat, Feb 8, 2014 at 4:11 PM, Charles Harrison Shubert <csh...@mi...<mailto:csh...@mi...>> wrote: Thanks, Bob! I’ll download the latest build this weekend. My app calls several initialization functions and init_jsmol is one of them. I initialize my UI (view), the state of my app (controller and model), then I initialize jsmol. I want to use the callbacks to populate the model. The model.is.is<http://model.is.is/>_jsmol is the id of the div where I want Jmol to render the image. It certainly seems reasonable in hindsight to look at an example called images.htm. Wish I’d thought of that. —Chuck On Feb 8, 2014, at 1:40 PM, Robert Hanson <ha...@st...<mailto:ha...@st...>> wrote: Jmol.setXHTML = function(id) is almost never used and hasn't been tested much. This is an HTML5 app, not XHTML. What is calling init_jsmol(state), and when? With jQuery now, it's much easier. Check some of the examples in jsmol.zip. http://chemapps.stolaf.edu/jmol/jsmol/images.htm is a good example that uses jQuery for the applet construction and also uses callbacks. On Fri, Feb 7, 2014 at 1:38 PM, Charles Harrison Shubert <csh...@mi...<mailto:csh...@mi...>> wrote: Hi, I'm clearly not reading the documentation correctly and I'm missing something. I want to use the JSmol callback functionality. What am I doing wrong? Thanks, --Chuck My javascript: function init_jsmol(state) { // … other initialization Jmol.setXHTML(model.ids.id_jsmol); var Info = {}; Info.script = session.modelControl.getActiveScript(state); Info.j2sPath = model.jsmol.j2sPath; Info.disableInitialConsole = true; Info.disableJ2SLoadMonitor = true; jmolObject = Jmol.getApplet(model.ids.id_jsmol, Info); // … other initialization } function myMessageCallback(one, two) { console.info<http://console.info/>("I'm in myMessageCallback: " + one); console.info<http://console.info/>("I'm in myMessageCallback: " + two); } function getJSmolInfo(state) { // called from another part of my code. try { console.info<http://console.info/>("getJSmolInfo entry"); script(";set messageCallback 'myMessageCallback';"); script(";define chucksel '[ALA]1:A.O or [ALA]1:A.C'; select chucksel; color atoms pink;"); script("message 'hi ho';"); console.info<http://console.info/>("getJSmolInfo exit"); return Jmol.getPropertyAsArray(jmolObject, "orientationInfo"); } catch (err) { console.info<http://console.info/>("ERR getJSmolOrientationInfo xxx"); console.info<http://console.info/>(err); } return null; } function script(script) { try { jmolObject._script(script); } catch (err) { console.info<http://console.info/>("ERR scriptWait"); console.info<http://console.info/>(err); } } What I see: the Alanine that I loaded has the A.O and A.C colored pink. I also see the "orientationInfo" when I look at the return from getJSmolInfo. The "state" argument to getJSmolInfo is for later use. What I didn't see: "hi ho" in the console or any evidence that myMessageCallback is called. Chrome Console: getJSmolInfo entry jsmolControl.js:89<http://localhost:8002/StarBiochem/sb_controller/jsmolControl.js> getJSmolInfo exit jsmolControl.js:93<http://localhost:8002/StarBiochem/sb_controller/jsmolControl.js> exec _jsmol loadClazz null -- OK VM592:250 exec _jsmol start applet null -- OK VM592:250 event.returnValue is deprecated. Please use the standard event.preventDefault() instead. VM592:110 ------------------------------------------------------------------------------ Managing the Performance of Cloud-Based Applications Take advantage of what the Cloud has to offer - Avoid Common Pitfalls. Read the Whitepaper. http://pubads.g.doubleclick.net/gampad/clk?id=121051231&iu=/4140/ostg.clktrk _______________________________________________ Jmol-users mailing list Jmo...@li...<mailto:Jmo...@li...> https://lists.sourceforge.net/lists/listinfo/jmol-users -- Robert M. Hanson Larson-Anderson Professor of Chemistry St. Olaf College Northfield, MN http://www.stolaf.edu/people/hansonr If nature does not answer first what we want, it is better to take what answer we get. -- Josiah Willard Gibbs, Lecture XXX, Monday, February 5, 1900 ------------------------------------------------------------------------------ Managing the Performance of Cloud-Based Applications Take advantage of what the Cloud has to offer - Avoid Common Pitfalls. Read the Whitepaper. http://pubads.g.doubleclick.net/gampad/clk?id=121051231&iu=/4140/ostg.clktrk_______________________________________________ Jmol-users mailing list Jmo...@li...<mailto:Jmo...@li...> https://lists.sourceforge.net/lists/listinfo/jmol-users ------------------------------------------------------------------------------ Managing the Performance of Cloud-Based Applications Take advantage of what the Cloud has to offer - Avoid Common Pitfalls. Read the Whitepaper. http://pubads.g.doubleclick.net/gampad/clk?id=121051231&iu=/4140/ostg.clktrk _______________________________________________ Jmol-users mailing list Jmo...@li...<mailto:Jmo...@li...> https://lists.sourceforge.net/lists/listinfo/jmol-users -- Robert M. Hanson Larson-Anderson Professor of Chemistry St. Olaf College Northfield, MN http://www.stolaf.edu/people/hansonr If nature does not answer first what we want, it is better to take what answer we get. -- Josiah Willard Gibbs, Lecture XXX, Monday, February 5, 1900 ------------------------------------------------------------------------------ Managing the Performance of Cloud-Based Applications Take advantage of what the Cloud has to offer - Avoid Common Pitfalls. Read the Whitepaper. http://pubads.g.doubleclick.net/gampad/clk?id=121051231&iu=/4140/ostg.clktrk_______________________________________________ Jmol-users mailing list Jmo...@li... https://lists.sourceforge.net/lists/listinfo/jmol-users |