From: Bob H. <ha...@st...> - 2005-09-20 06:18:24
|
Right, I think there are lots of ways of doing this server-side business. My points were simply these: a) No server configuration is necessary. Go ahead and try this on your machine. Just copy http://www.stolaf.edu/people/hansonr/jmol/docs/loaddata.htm into a directory on your hard drive that contains the jar files and Jmol.js and run it. No additional .js files. No server configuration. It is a completely general way of loading any model from any web-based source whatsoever. From the HTML (on your own machine, if you like) you can set defaults and such if you want to make it easier to load files from a particular server. Kind of like a code validator. b) It's totally portable. The script command <script type="text/javascript" src="http://fusion.stolaf.edu/chemistry/jmol/loaddata.cfm"> can be added to any Jmol web application anywhere. Ah, you say, but this is BOB's machine, not mine. True, but script objects can call other servers, so that's not an issue. All my machine is doing is delivering the file. You get to do anything you want with it, in any application you choose. My machine provides a "gateway" for any application using Jmol.js to access any web-based model file anywhere. Think about it. This is different from any other server configuration I've seen, where your server can only serve your particular application, because anything else would violate permissions. But, see, the script object isn't bound to the "sandbox" of the delivering server the way any other mechanism is. I'm pretty sure that it is only JavaScript that is allowed to cross browsers in this way. This turns out to be the way Google ads work -- sending messages and getting replies from a DIFFERENT server using script objects and JavaScript replies instead of form objects and HTML replies. c) The file is automatically loaded into an already present applet object. Because the result is JavaScript instead of HTML, the DOM "script" object that this is employing automatically loads the model data into the applet. As soon as the "child is born" it fires off the request to the server, returning the data, which, because it is JavaScript, also contains the command to load itself into the applet. As a bonus, you have the text of the file at your disposal. There's certainly a place for the PHP-type configuration that you referred to earlier. And your point about caching is a good one. My point was simply that anyone can have access to any web-based model now without having any server at all. And, as a bonus, you don't even need need to maintain Jmol.js. But you do need the applet jar files on whatever server you are running the page from. It's just that now there is no restriction on where on the web the data files come from for anyone's application anywhere, not just mine. The funny thing is, it's almost TOO simple: a) add these two lines to any web application, exactly as they are here: <script type="text/javascript" src="http://fusion.stolaf.edu/chemistry/jmol/Jmol.js"></script> <script type="text/javascript" src="http://fusion.stolaf.edu/chemistry/jmol/loaddata.cfm"></script> b) create an applet on the page however you like, with jmolInitialize and jmolApplet. In loaddata.htm I use the newly available .innerHTML function as part of the body onload event: <body onload="jmolInitialize('.');jmolSetDocument(0); document.getElementById('applet_here').innerHTML=jmolApplet()"> with the applet insertion point shown lower on the page: <h3>loaddata.cfm example</h3> <span id="applet_here"></span> c) Make sure you have the .jar files in the initialization directory. That's it. To load any file from anywhere on the web into that applet, just run retrieveModel(url) No server necessary. The key function is the one that attaches a new script tag to the document head: function retrieveModel(url,targetSuffix){ if(!targetSuffix)targetSuffix="0" var d=document.getElementsByTagName("HEAD")[0] var o=document.createElement("script") o.setAttribute("type","text/javascript") o.setAttribute("src",serverURL+escape(url)+"&app="+targetSuffix) d.appendChild(o) } and starts the automated process rolling. Bob -- Robert M. Hanson, ha...@st..., 507-646-3107 Professor of Chemistry, St. Olaf College 1520 St. Olaf Ave., Northfield, MN 55057 mailto:ha...@st... http://www.stolaf.edu/people/hansonr |