From: <ha...@us...> - 2011-08-01 05:37:17
|
Revision: 15897 http://jmol.svn.sourceforge.net/jmol/?rev=15897&view=rev Author: hansonr Date: 2011-08-01 05:37:09 +0000 (Mon, 01 Aug 2011) Log Message: ----------- Added Paths: ----------- trunk/Jmol/appletweb/ChimeToJmol_old.js trunk/Jmol/appletweb/chime2jmol_documentation_old.txt trunk/Jmol/appletweb/chime2jmol_old.pl Removed Paths: ------------- trunk/Jmol/appletweb/ChimeToJmol.js trunk/Jmol/appletweb/chime2jmol.pl trunk/Jmol/appletweb/chime2jmol_documentation.txt Deleted: trunk/Jmol/appletweb/ChimeToJmol.js =================================================================== --- trunk/Jmol/appletweb/ChimeToJmol.js 2011-08-01 05:29:12 UTC (rev 15896) +++ trunk/Jmol/appletweb/ChimeToJmol.js 2011-08-01 05:37:09 UTC (rev 15897) @@ -1,281 +0,0 @@ -/* - -ChimeToJmol.js -ha...@st... 8:07 AM 4/21/2010 - Changes by A.Herraez 26 April 2010 - -A set of functions that will (when fully developed) -allow the following on just about any Chime page to -convert the Chime EMBED tags to Jmol applets and buttons. - -Also changes older Jmol "applet" code to use Jmol.js - -1) add these lines to your page's <HEAD> section: - - <script type="text/javascript" src="Jmol/Jmol.js"> </script> - <script type="text/javascript" src="Jmol/ChimeToJmol.js"> </script> - -2) Set jmolDirectory (below) to the desired directory and load it with -the standard Jmol files (Jmol.js, JmolApplet*.jar) and ChimeToJmol.js - -3) If you are using a BODY onload="funcName()" attribute already, -then add - - checkJmol() - -to it. - -4) If you want to test your page, add NOJMOL to the page URL - -TODO: more script conversions needed for Chime. - -done # default Jmol Ball&Stick vs. defalt Chime wireframe -# default orientation / axes - are different, but also depend on file format (Chime PDB, Chime MOL, Jmol both) -done # embed tag options: display3d, color3d, bgcolor, hbonds, ssbonds, frank, hide popup menu, ... -done # zoom (partially done, not foolproof; needs testing in different situations) -done # Hbonds on , Hbonds N need previous calculate -# external script files cannot be parsed and fixed: manual edit seems necessary - -*/ - -// set this as desired -var jmolDirectory = "./Jmol" - - -/////////Jmol section ////////// - -function checkJmol() { - if (document.location.search.indexOf("NOJMOL") >= 0)return - var body = document.body.innerHTML - if (body.indexOf("JmolApplet") >= 0) { - if(body.indexOf("JmolAppletControl") >= 0)__fixJmol() - return - } - if (body.indexOf("<EMBED") >= 0 || body.indexOf("<embed") >= 0) __fixChime() -} - -window.onload = checkJmol - -function __fixJmol() { - var body = document.body.innerHTML - var ptAPPLET = -1 - var Text = body.split("<applet") - if (Text.length == 1)return - for (var i = 1; i < Text.length; i++) { - var text = Text[i] - var pt = text.indexOf("</applet>") - if (text.indexOf("JmolAppletControl") >= 0) { - Text[i] = __jmolFixJmolAppletControl(text.substring(0, pt)) + text.substring(pt + 9) - } else if (text.indexOf("JmolApplet") >= 0) { - Text[i] = __jmolFixJmolApplet(text.substring(0, pt)) + text.substring(pt + 9) - } else { - Text[i] = "<applet" + text - continue - } - } - document.body.innerHTML = Text.join("") -} - -function __jmolFixJmolApplet(tag) { - var A = __jmolGetAttributes(tag) - if (!A.width)A.width = 300 - if (!A.height)A.height = 300 - if (!A.script)A.script = "" - if (!A.codebase)A.codebase = jmolDirectory - if (A.archive == "JmolApplet.jar") A.archive = "JmolApplet0.jar" - if (document.location.protocol == "file:" && A.archive.indexOf("Signed") < 0) A.archive = "JmolAppletSigned0.jar" - if (A.load)A.script = "load \"" + A.load + "\";" + A.script - jmolInitialize(A.codebase, A.archive) - jmolSetDocument(0) - return jmolApplet([A.width,A.height],A.script, A.name) -} - -function __jmolFixJmolAppletControl(tag) { - var A = __jmolGetAttributes(tag) - if (!A.width)A.width = 12 - if (!A.height)A.height = 12 - _jmol.buttonCssText = "style=\"width:" + A.width + "\"" - if (A.altscript) - return jmolCheckbox(A.script, A.altscript, "", false, A.target) - return "<span width=\"" + A.width + "\" height=\"" + A.height + "\">" + jmolButton(A.script,"X",A.target) + "</span>" -} - -///////// Chime section ////////// - -function __fixChime() { - jmolInitialize(jmolDirectory, - (document.location.protocol=="file:" ? "JmolAppletSigned0.jar" : "JmolApplet0.jar")) - jmolSetDocument(0) - jmolSetButtonCssClass("JmolChimeButton") - - var body = document.body.innerHTML - var Text = body.split("<EMBED") - if (Text.length == 1)Text = body.split("<embed") - if (Text.length == 1)return - for (var i = 1; i < Text.length; i++) { - var text = Text[i] - var pt = text.indexOf(">") - if (text.substring(0,pt).indexOf("src=") >= 0) { - Text[i] = __jmolFixChimeApplet(text.substring(0, pt)) + text.substring(pt + 1) - } else if (text.substring(0,pt).indexOf("button=") >= 0) { - Text[i] = __jmolFixChimeButton(text.substring(0, pt)) + text.substring(pt + 1) - } - } - document.body.innerHTML = Text.join("") -} - -function __jmolFixChimeApplet(tag) { - var A = __jmolGetAttributes(tag) - var zoomSet = null - var s = "spacefill off;wireframe on;" - if (__jmolIsChimeFalse(A.frank)) s += "frank off;" - if (__jmolIsChimeTrue(A.nomenus)) s += "set disablePopupMenu on;" - if (A.display3d) s += __jmolFixChimeDisplay3d(A.display3d) - if (A.color3d) s += __jmolFixChimeColor3d(A.color3d) - if (A.bgcolor) s += __jmolFixChimeBgcolor(A.bgcolor) - if (A.spinx || A.spiny || A.spinz) s += "set spinX 0; set spinY 0; set spinZ 0;" // in Chime, setting any spin cancels the default 0 10 0; in Jmol, it does not - if (A.spinx) s += "set spinX " + A.spinx + ";" - if (A.spiny) s += "set spinY " + A.spiny + ";" - if (A.spinz) s += "set spinZ " + A.spinz + ";" - if (A.spinfps) s += "set spinFps " + A.spinfps + ";" - if (__jmolIsChimeTrue(A.startspin)) s += "spin on;" - if (A.hbonds && A.hbonds!="off") s += "hbonds calculate; hbonds " + A.hbonds + ";" - if (A.ssbonds) s += "ssbonds " + A.ssbonds + ";" - if (A.animmode) s += "animation mode " + A.animmode + ";" - if (A.animfps) s += "animation fps " + A.animfps + ";" - if (__jmolIsChimeTrue(A.startanim)) s += "animation on;" - - // if Chime size was set in pixels, let's do an approximated zoom conversion: store width and pass it to the script parser - if (A.width.indexOf("%")==-1) { A.width = parseInt(A.width); zoomSet = A.width } - if (A.height.indexOf("%")==-1) { A.height = parseInt(A.height) } - if (!A.script || A.script.indexOf("zoom ")==-1) { zoomSet=null } - - A.script = (A.script ? __jmolFixChimeScript(A.script,zoomSet) : "") - - return jmolApplet([A.width,A.height],"load \"" + A.src + "\";" + s + A.script, A.name) -} - -function __jmolFixChimeButton(tag) { - var A = __jmolGetAttributes(tag) - A.script = (A.script ? __jmolFixChimeScript(A.script) : "") - if(A.target) jmolSetTarget(A.target) - A.button = A.button.toLowerCase() // 'button' may be push|pushed|radio#|toggle|followed - if (A.button=="followed" || A.button=="push" || A.button=="pushed") { - if (!A.height)A.height = 12 - return '<span style="font-size:' + (A.height-4) + 'px;">' + jmolButton(A.script,"X") + '</span>' - } - if (A.button=="toggle") { - A.altscript = (A.altscript ? __jmolFixChimeScript(A.altscript) : "") - return jmolCheckbox(A.script,A.altscript,"") - } - if (A.button.indexOf("radio")!=-1) { - return jmolRadio(A.script, "", false, "", "Chime"+A.button) - } - return jmolLink(A.script,"[x]") //this shouldn't be reached -} - -function __jmolFixChimeScript(script,isZoomSet) { - script = script//.replace(/\*\./g,"_") - .replace(/hbonds /,"hbonds calculate;hbonds ") - .replace(/\>/g, ">").replace(/\</g, "<") // angle brackets are read as & entities and may be used in scripts as less than / more than - // if Chime size was set in pixels, we'll do an approximated zoom conversion: - // Chime zoom value divided by Chime width gives an idea of the needed zoom value (percent) - var j1 = script.indexOf("zoom ") - if (j1!=-1 && isZoomSet) { - var j2 = script.substring(j1).indexOf(";") - if (j2==-1) { j2=script.length-j1 } - var z = parseInt(script.substring(j1+5,j1+j2)) // this is the Chime zoom value - script = script.substring(0,j1) + "zoom " + parseInt(z/isZoomSet*100) + script.substring(j1+j2) - } - return script -} - -function __jmolFixChimeDisplay3d(v) { - if (v=="spacefill") return "spacefill on;wireframe off;" - if (v=="sticks") return "spacefill off;wireframe 0.15;" - if (v=="wireframe") return "spacefill on;wireframe on;" - if (v=="ball&stick") return "spacefill 30%;wireframe 0.15;" - if (v=="cartoons") return "spacefill off;wireframe off;cartoons on;" - if (v=="ribbons") return "spacefill off;wireframe off;ribbons on;" - if (v=="strands") return "spacefill off;wireframe off;strands on;" -} -function __jmolFixChimeBgcolor(v) { - if (v.charAt(0)=="#") v = "[x" + v.substring(1) + "]" - return "color background " + v + ";" -} -function __jmolFixChimeColor3d(v) { - if (v=="monochrome" || v=="user") v="white" - return "color " + v + ";" - //color3d = {chain|cpk|group|monochrome|shapely|structure|temperature|user} -} - -function __jmolGetAttributes(tag) { - var S = {} - var name = "" - var value = "" - var inName = false - var inValue = false - if (tag.indexOf("<param") >= 0) - tag = tag.replace(/\<param name\=/g," ") - .replace(/value\=/g,"=") - .replace(/\/\>/g, " ") - .replace(/\>/g, " ") - .replace(/[\r|\n|\t]/g, " ") - if (tag.substring(tag.length-1, tag.length) == "/") - tag = tag.substring(0, tag.length-1) - tag = tag.replace(/\<br\>/g, " ") - tag = tag.replace(/\<br \/\>/g, " ") - tag = tag.replace(/\s+\=/g, "=") - tag = tag.replace(/\=\s+/g, "=") - tag += " =" - for (var i = 0; i < tag.length - 2; i++) { - switch(tag.charAt(i)) { - case " ": - case "\t": - case "\n": - case "\r": - continue - } - var pts = tag.indexOf(" ", i) - var pte = tag.indexOf("=", i) - var ptq = tag.indexOf("'", pte + 1) - var ptqq = tag.indexOf("\"", pte + 1) - if (ptqq == pte + 1)ptq = ptqq - var ptq2 = tag.indexOf((ptq == ptqq ? "\"" : "'"), ptq + 1) - - // <EMBED xxxx ... - if (pts < pte) { - S[tag.substring(i, pts).toLowerCase().replace(/[\'\"]/g,"")] = "" - i = pts - continue - } - - // <EMBED xxxx=yyy ... - if (pts < ptq) { - S[tag.substring(i, pte).toLowerCase().replace(/[\'\"]/g,"")] = tag.substring(pte + 1, pts) - i = pts - continue - } - - // <EMBED xxxx="yyy" ... - - S[tag.substring(i, pte).toLowerCase().replace(/[\'\"]/g,"")] = tag.substring(ptq + 1, ptq2) - i = ptq2 - } - return S -} - -function __jmolIsChimeTrue(v) { - if (!v) { return false; } - v = v.toLowerCase(); - if (v=="yes"||v=="true"||v=="on"||v=="1") { return true; } - return false; -} -function __jmolIsChimeFalse(v) { - if (!v) { return false; } - v = v.toLowerCase(); - if (v=="no"||v=="false"||v=="off"||v=="0") { return true; } - return false; -} - -document.writeln('<style type="text/css"> .JmolChimeButton { background-color:#C0C0C0; border:1px outset #C0C0C0; padding:0; font:inherit; } <' + '/style>') Copied: trunk/Jmol/appletweb/ChimeToJmol_old.js (from rev 15078, trunk/Jmol/appletweb/ChimeToJmol.js) =================================================================== --- trunk/Jmol/appletweb/ChimeToJmol_old.js (rev 0) +++ trunk/Jmol/appletweb/ChimeToJmol_old.js 2011-08-01 05:37:09 UTC (rev 15897) @@ -0,0 +1,281 @@ +/* + +ChimeToJmol.js +ha...@st... 8:07 AM 4/21/2010 + Changes by A.Herraez 26 April 2010 + +A set of functions that will (when fully developed) +allow the following on just about any Chime page to +convert the Chime EMBED tags to Jmol applets and buttons. + +Also changes older Jmol "applet" code to use Jmol.js + +1) add these lines to your page's <HEAD> section: + + <script type="text/javascript" src="Jmol/Jmol.js"> </script> + <script type="text/javascript" src="Jmol/ChimeToJmol.js"> </script> + +2) Set jmolDirectory (below) to the desired directory and load it with +the standard Jmol files (Jmol.js, JmolApplet*.jar) and ChimeToJmol.js + +3) If you are using a BODY onload="funcName()" attribute already, +then add + + checkJmol() + +to it. + +4) If you want to test your page, add NOJMOL to the page URL + +TODO: more script conversions needed for Chime. + +done # default Jmol Ball&Stick vs. defalt Chime wireframe +# default orientation / axes - are different, but also depend on file format (Chime PDB, Chime MOL, Jmol both) +done # embed tag options: display3d, color3d, bgcolor, hbonds, ssbonds, frank, hide popup menu, ... +done # zoom (partially done, not foolproof; needs testing in different situations) +done # Hbonds on , Hbonds N need previous calculate +# external script files cannot be parsed and fixed: manual edit seems necessary + +*/ + +// set this as desired +var jmolDirectory = "./Jmol" + + +/////////Jmol section ////////// + +function checkJmol() { + if (document.location.search.indexOf("NOJMOL") >= 0)return + var body = document.body.innerHTML + if (body.indexOf("JmolApplet") >= 0) { + if(body.indexOf("JmolAppletControl") >= 0)__fixJmol() + return + } + if (body.indexOf("<EMBED") >= 0 || body.indexOf("<embed") >= 0) __fixChime() +} + +window.onload = checkJmol + +function __fixJmol() { + var body = document.body.innerHTML + var ptAPPLET = -1 + var Text = body.split("<applet") + if (Text.length == 1)return + for (var i = 1; i < Text.length; i++) { + var text = Text[i] + var pt = text.indexOf("</applet>") + if (text.indexOf("JmolAppletControl") >= 0) { + Text[i] = __jmolFixJmolAppletControl(text.substring(0, pt)) + text.substring(pt + 9) + } else if (text.indexOf("JmolApplet") >= 0) { + Text[i] = __jmolFixJmolApplet(text.substring(0, pt)) + text.substring(pt + 9) + } else { + Text[i] = "<applet" + text + continue + } + } + document.body.innerHTML = Text.join("") +} + +function __jmolFixJmolApplet(tag) { + var A = __jmolGetAttributes(tag) + if (!A.width)A.width = 300 + if (!A.height)A.height = 300 + if (!A.script)A.script = "" + if (!A.codebase)A.codebase = jmolDirectory + if (A.archive == "JmolApplet.jar") A.archive = "JmolApplet0.jar" + if (document.location.protocol == "file:" && A.archive.indexOf("Signed") < 0) A.archive = "JmolAppletSigned0.jar" + if (A.load)A.script = "load \"" + A.load + "\";" + A.script + jmolInitialize(A.codebase, A.archive) + jmolSetDocument(0) + return jmolApplet([A.width,A.height],A.script, A.name) +} + +function __jmolFixJmolAppletControl(tag) { + var A = __jmolGetAttributes(tag) + if (!A.width)A.width = 12 + if (!A.height)A.height = 12 + _jmol.buttonCssText = "style=\"width:" + A.width + "\"" + if (A.altscript) + return jmolCheckbox(A.script, A.altscript, "", false, A.target) + return "<span width=\"" + A.width + "\" height=\"" + A.height + "\">" + jmolButton(A.script,"X",A.target) + "</span>" +} + +///////// Chime section ////////// + +function __fixChime() { + jmolInitialize(jmolDirectory, + (document.location.protocol=="file:" ? "JmolAppletSigned0.jar" : "JmolApplet0.jar")) + jmolSetDocument(0) + jmolSetButtonCssClass("JmolChimeButton") + + var body = document.body.innerHTML + var Text = body.split("<EMBED") + if (Text.length == 1)Text = body.split("<embed") + if (Text.length == 1)return + for (var i = 1; i < Text.length; i++) { + var text = Text[i] + var pt = text.indexOf(">") + if (text.substring(0,pt).indexOf("src=") >= 0) { + Text[i] = __jmolFixChimeApplet(text.substring(0, pt)) + text.substring(pt + 1) + } else if (text.substring(0,pt).indexOf("button=") >= 0) { + Text[i] = __jmolFixChimeButton(text.substring(0, pt)) + text.substring(pt + 1) + } + } + document.body.innerHTML = Text.join("") +} + +function __jmolFixChimeApplet(tag) { + var A = __jmolGetAttributes(tag) + var zoomSet = null + var s = "spacefill off;wireframe on;" + if (__jmolIsChimeFalse(A.frank)) s += "frank off;" + if (__jmolIsChimeTrue(A.nomenus)) s += "set disablePopupMenu on;" + if (A.display3d) s += __jmolFixChimeDisplay3d(A.display3d) + if (A.color3d) s += __jmolFixChimeColor3d(A.color3d) + if (A.bgcolor) s += __jmolFixChimeBgcolor(A.bgcolor) + if (A.spinx || A.spiny || A.spinz) s += "set spinX 0; set spinY 0; set spinZ 0;" // in Chime, setting any spin cancels the default 0 10 0; in Jmol, it does not + if (A.spinx) s += "set spinX " + A.spinx + ";" + if (A.spiny) s += "set spinY " + A.spiny + ";" + if (A.spinz) s += "set spinZ " + A.spinz + ";" + if (A.spinfps) s += "set spinFps " + A.spinfps + ";" + if (__jmolIsChimeTrue(A.startspin)) s += "spin on;" + if (A.hbonds && A.hbonds!="off") s += "hbonds calculate; hbonds " + A.hbonds + ";" + if (A.ssbonds) s += "ssbonds " + A.ssbonds + ";" + if (A.animmode) s += "animation mode " + A.animmode + ";" + if (A.animfps) s += "animation fps " + A.animfps + ";" + if (__jmolIsChimeTrue(A.startanim)) s += "animation on;" + + // if Chime size was set in pixels, let's do an approximated zoom conversion: store width and pass it to the script parser + if (A.width.indexOf("%")==-1) { A.width = parseInt(A.width); zoomSet = A.width } + if (A.height.indexOf("%")==-1) { A.height = parseInt(A.height) } + if (!A.script || A.script.indexOf("zoom ")==-1) { zoomSet=null } + + A.script = (A.script ? __jmolFixChimeScript(A.script,zoomSet) : "") + + return jmolApplet([A.width,A.height],"load \"" + A.src + "\";" + s + A.script, A.name) +} + +function __jmolFixChimeButton(tag) { + var A = __jmolGetAttributes(tag) + A.script = (A.script ? __jmolFixChimeScript(A.script) : "") + if(A.target) jmolSetTarget(A.target) + A.button = A.button.toLowerCase() // 'button' may be push|pushed|radio#|toggle|followed + if (A.button=="followed" || A.button=="push" || A.button=="pushed") { + if (!A.height)A.height = 12 + return '<span style="font-size:' + (A.height-4) + 'px;">' + jmolButton(A.script,"X") + '</span>' + } + if (A.button=="toggle") { + A.altscript = (A.altscript ? __jmolFixChimeScript(A.altscript) : "") + return jmolCheckbox(A.script,A.altscript,"") + } + if (A.button.indexOf("radio")!=-1) { + return jmolRadio(A.script, "", false, "", "Chime"+A.button) + } + return jmolLink(A.script,"[x]") //this shouldn't be reached +} + +function __jmolFixChimeScript(script,isZoomSet) { + script = script//.replace(/\*\./g,"_") + .replace(/hbonds /,"hbonds calculate;hbonds ") + .replace(/\>/g, ">").replace(/\</g, "<") // angle brackets are read as & entities and may be used in scripts as less than / more than + // if Chime size was set in pixels, we'll do an approximated zoom conversion: + // Chime zoom value divided by Chime width gives an idea of the needed zoom value (percent) + var j1 = script.indexOf("zoom ") + if (j1!=-1 && isZoomSet) { + var j2 = script.substring(j1).indexOf(";") + if (j2==-1) { j2=script.length-j1 } + var z = parseInt(script.substring(j1+5,j1+j2)) // this is the Chime zoom value + script = script.substring(0,j1) + "zoom " + parseInt(z/isZoomSet*100) + script.substring(j1+j2) + } + return script +} + +function __jmolFixChimeDisplay3d(v) { + if (v=="spacefill") return "spacefill on;wireframe off;" + if (v=="sticks") return "spacefill off;wireframe 0.15;" + if (v=="wireframe") return "spacefill on;wireframe on;" + if (v=="ball&stick") return "spacefill 30%;wireframe 0.15;" + if (v=="cartoons") return "spacefill off;wireframe off;cartoons on;" + if (v=="ribbons") return "spacefill off;wireframe off;ribbons on;" + if (v=="strands") return "spacefill off;wireframe off;strands on;" +} +function __jmolFixChimeBgcolor(v) { + if (v.charAt(0)=="#") v = "[x" + v.substring(1) + "]" + return "color background " + v + ";" +} +function __jmolFixChimeColor3d(v) { + if (v=="monochrome" || v=="user") v="white" + return "color " + v + ";" + //color3d = {chain|cpk|group|monochrome|shapely|structure|temperature|user} +} + +function __jmolGetAttributes(tag) { + var S = {} + var name = "" + var value = "" + var inName = false + var inValue = false + if (tag.indexOf("<param") >= 0) + tag = tag.replace(/\<param name\=/g," ") + .replace(/value\=/g,"=") + .replace(/\/\>/g, " ") + .replace(/\>/g, " ") + .replace(/[\r|\n|\t]/g, " ") + if (tag.substring(tag.length-1, tag.length) == "/") + tag = tag.substring(0, tag.length-1) + tag = tag.replace(/\<br\>/g, " ") + tag = tag.replace(/\<br \/\>/g, " ") + tag = tag.replace(/\s+\=/g, "=") + tag = tag.replace(/\=\s+/g, "=") + tag += " =" + for (var i = 0; i < tag.length - 2; i++) { + switch(tag.charAt(i)) { + case " ": + case "\t": + case "\n": + case "\r": + continue + } + var pts = tag.indexOf(" ", i) + var pte = tag.indexOf("=", i) + var ptq = tag.indexOf("'", pte + 1) + var ptqq = tag.indexOf("\"", pte + 1) + if (ptqq == pte + 1)ptq = ptqq + var ptq2 = tag.indexOf((ptq == ptqq ? "\"" : "'"), ptq + 1) + + // <EMBED xxxx ... + if (pts < pte) { + S[tag.substring(i, pts).toLowerCase().replace(/[\'\"]/g,"")] = "" + i = pts + continue + } + + // <EMBED xxxx=yyy ... + if (pts < ptq) { + S[tag.substring(i, pte).toLowerCase().replace(/[\'\"]/g,"")] = tag.substring(pte + 1, pts) + i = pts + continue + } + + // <EMBED xxxx="yyy" ... + + S[tag.substring(i, pte).toLowerCase().replace(/[\'\"]/g,"")] = tag.substring(ptq + 1, ptq2) + i = ptq2 + } + return S +} + +function __jmolIsChimeTrue(v) { + if (!v) { return false; } + v = v.toLowerCase(); + if (v=="yes"||v=="true"||v=="on"||v=="1") { return true; } + return false; +} +function __jmolIsChimeFalse(v) { + if (!v) { return false; } + v = v.toLowerCase(); + if (v=="no"||v=="false"||v=="off"||v=="0") { return true; } + return false; +} + +document.writeln('<style type="text/css"> .JmolChimeButton { background-color:#C0C0C0; border:1px outset #C0C0C0; padding:0; font:inherit; } <' + '/style>') Deleted: trunk/Jmol/appletweb/chime2jmol.pl =================================================================== --- trunk/Jmol/appletweb/chime2jmol.pl 2011-08-01 05:29:12 UTC (rev 15896) +++ trunk/Jmol/appletweb/chime2jmol.pl 2011-08-01 05:37:09 UTC (rev 15897) @@ -1,330 +0,0 @@ -use strict; -use HTML::Parser; -use Getopt::Std; -use File::Find; -use File::Copy; -use File::Path; -use Cwd; - -sub handleEmbed; -sub handleEnd; -sub usage; - -use vars qw/$opt_v $opt_a $opt_s $opt_c $opt_d $opt_b/; -getopts('va:s:cd:b:') or usage(); - -($opt_s && $opt_d) or usage(); - -my $pwd = cwd(); -print "pwd is $pwd\n" if $opt_v; - -my $fullsrcpath = $opt_s; -$fullsrcpath =~ s|(\./)+||; -$fullsrcpath = $pwd . "/" . $fullsrcpath unless $fullsrcpath =~ m|^/|; -$fullsrcpath = $fullsrcpath . "/" unless $fullsrcpath =~ m|/$|; - -my $fulldstpath = $opt_d; -$fulldstpath =~ s|(\./)+||; -$fulldstpath = $pwd . "/" . $fulldstpath unless $fulldstpath =~ m|^/|; -$fulldstpath = $fulldstpath . "/" unless $fulldstpath =~ m|/$|; - - -print "source directory $fullsrcpath\n" if $opt_v; -(-d $fullsrcpath) or die "$fullsrcpath is not a directory"; - -if ($opt_c) { - print "deleting directory tree $fulldstpath\n" if $opt_v; - rmtree $fulldstpath; -} - -if (-e $fulldstpath) { - print "destination directory $fulldstpath exists\n" if $opt_v; - -d $fulldstpath or die "$fulldstpath is not a directory"; -} else { - print "creating destination directory $fulldstpath\n" if $opt_v; - mkdir($fulldstpath) or die "could not make directory $fulldstpath"; -} - -my $archive = "JmolApplet.jar"; -$archive = $opt_a if $opt_a; -print "archive is $archive\n" if $opt_v; - -my $codebase = $opt_b; -print "codebase is $codebase\n" if $codebase && $opt_v; - -my $baseDirectory; -my @files; -my @directories; -sub accumulateFilename { - if ($baseDirectory) { - my $pathname = $File::Find::name; - my $name = substr $pathname, length($baseDirectory); - if (-f $pathname) { - print "$pathname is a file\n"; - push @files, $name if -f $pathname; - } elsif (-d $pathname) { - print "$pathname is a directory\n"; - push @directories, $name if -d $pathname; - } else { - print "$pathname is neither fish nor fowl?\n"; - print "but it exists!\n" if -e $pathname; - } - - } else { - $baseDirectory = $File::Find::name . "/"; - print "baseDirectory=$baseDirectory\n" if $opt_v; - } -} -find(\&accumulateFilename, $fullsrcpath); - -for my $directory (@directories) { - print "mkdir $fulldstpath$directory\n" if $opt_v; - mkdir "$fulldstpath$directory"; -} - -for my $file (@files) { - next if $file =~ /\~$/; # ignore emacs files - print "processing $file\n" if $opt_v; - processFile("$baseDirectory$file", "$fulldstpath$file"); -} - -exit(); - -sub processFile { - my ($src, $dst) = @_; - if ($src =~ /html?$/i) { - processHtmlFile($src, $dst); - } else { - copyFile($src, $dst); - } -} - -sub copyFile { - my ($src, $dst) = @_; -# print "copyFile $src -> $dst\n"; - copy $src, $dst; -} - -sub processHtmlFile { - my ($src, $dst) = @_; - open OUTPUT, ">$dst" or die "could not open $dst"; - - my $p = HTML::Parser->new(start_h => - [\&handleEmbed, 'skipped_text,text,tokens'], - end_document_h => [\&writePrevious, - 'skipped_text']); - $p->report_tags('embed'); - $p->parse_file($src) || die $!; - close OUTPUT; -} - -my ($previous, $embed, $tokens); -my $tokenCount; - -# common to both plugins and buttons -my ($name, $width, $height, $bgcolor, $src, $script); -# plug-in specific -my ($preloadscript, $loadStructCallback, $messageCallback, - $pauseCallback, $pickCallback); -# button-specific -my ($type, $button, $buttonCallback, $target, $altscript); - -sub handleEmbed { - ($previous, $embed, $tokens) = @_; - $tokenCount = scalar @$tokens; - - $name = getUnquotedParameter('name'); - $width = getUnquotedParameter('width'); - $height = getUnquotedParameter('height'); - $bgcolor = getUnquotedParameter('bgcolor'); - $src = getUnquotedParameter('src'); - - $loadStructCallback = getUnquotedParameter('LoadStructCallback'); - $messageCallback = getUnquotedParameter('MessageCallback'); - $pauseCallback = getUnquotedParameter('pauseCallback'); - $pickCallback = getUnquotedParameter('pickCallback'); - - $type = getUnquotedParameter('type'); - $button = getUnquotedParameter('button'); - $buttonCallback = getUnquotedParameter('ButtonCallBack'); - $target = getUnquotedParameter('target'); - $preloadscript = checkPreloadScript(); - $script = getRawParameter('script'); - $script = convertSemicolonNewline($script); - $altscript = convertSemicolonNewline(getRawParameter('altscript')); - - writePrevious($previous); - writeCommentedEmbed(); -# dumpVars(); - writeJmolApplet() unless $button; - writeButtonControl() if $button; -} - -sub checkPreloadScript { - my $spinX = getUnquotedParameter('spinx'); - my $spinY = getUnquotedParameter('spiny'); - my $spinZ = getUnquotedParameter('spinz'); - my $startspin = getUnquotedParameter('startspin'); - my $frank = getUnquotedParameter('frank'); - my $debugscript = getUnquotedParameter('debugscript'); - - my $preloadscript = getUnquotedParameter('preloadscript'); - $preloadscript = convertSemicolonNewline($preloadscript); - - $preloadscript .= "set spin x $spinX;" if $spinX; - $preloadscript .= "set spin y $spinY;" if $spinY; - $preloadscript .= "set spin z $spinZ;" if $spinZ; - $preloadscript .= "set spin on;" if $startspin =~ /true|yes|on/i; - $preloadscript .= "set frank $frank;" if $frank; - $preloadscript .= "set debugscript $debugscript;" if $debugscript; - return $preloadscript; -} - -sub dumpVars { - print <<END; - name=$name - width=$width - height=$height - bgcolor=$bgcolor - src=$src - type=$type - button=$button - buttonCallback=$buttonCallback - target=$target - script=$script - altscript=$altscript - -END -} - -sub writePrevious { - print OUTPUT convertNewline(@_[0]); -} - -sub writeCommentedEmbed { - $embed = convertNewline($embed); - print OUTPUT "<!-- $embed -->\n"; -} - -sub writeJmolApplet { - print OUTPUT - " <applet name='$name' code='JmolApplet' archive='$archive'\n" - if $name; - print OUTPUT - " <applet code='JmolApplet' archive='$archive'\n" - unless $name; - print OUTPUT - " codebase='$codebase'\n" if $codebase; - print OUTPUT - " width='$width' height='$height' mayscript='true' >\n"; - print OUTPUT - " <param name='emulate' value='chime' />\n"; - print OUTPUT - " <param name='bgcolor' value='$bgcolor' />\n" if $bgcolor; - print OUTPUT - " <param name='load' value='$src' />\n" if $src; - print OUTPUT - " <param name='preloadscript'\n", - " value='$preloadscript' />\n" if $preloadscript; - print OUTPUT - " <param name='script' value=$script />\n" if $script; - print OUTPUT - " <param name='LoadStructCallback' value='$loadStructCallback' />\n" - if $loadStructCallback; - print OUTPUT - " <param name='MessageCallback' value='$messageCallback' />\n" - if $messageCallback; - print OUTPUT - " <param name='PauseCallback' value='$pauseCallback' />\n" - if $pauseCallback; - print OUTPUT - " <param name='PickCallback' value='$pickCallback' />\n" - if $pickCallback; - print OUTPUT - " </applet>\n"; -} - -sub writeButtonControl { - my ($controlType, $group); - if ($button =~ /push/i) { - $controlType = "chimePush"; - } elsif ($button =~ /toggle/i) { - $controlType = "chimeToggle"; - } elsif ($button =~ /radio(\d+)/i) { - $controlType = "chimeRadio"; - $group = $1; - } - my $buttonScript = $script || $src; - print OUTPUT - " <applet name=$name code='JmolAppletControl' archive='$archive'\n" - if $name; - print OUTPUT - " <applet code='JmolAppletControl' archive='$archive'\n" - unless $name; - print OUTPUT - " codebase='$codebase'\n" if $codebase; - print OUTPUT - " width='$width' height='$height' mayscript='true' >\n"; - print OUTPUT - " <param name='target' value='$target' />\n". - " <param name='type' value='$controlType' />\n"; - print OUTPUT - " <param name='group' value='$group' />\n" - if $group; - print OUTPUT - " <param name='script' value=$buttonScript />\n" - if $buttonScript; - print OUTPUT - " <param name='altscript' value=$altscript />\n" - if $altscript; - print OUTPUT - " <param name='ButtonCallback' value=$buttonCallback />\n" - if $buttonCallback; - print OUTPUT - " </applet>\n"; -} - -sub getRawParameter { - my ($tag) = @_; - for (my $i = 0; $i < $tokenCount; ++$i) { - my $token = $tokens->[$i]; - return $tokens->[$i + 1] if ($token =~ /$tag/i); - } - return undef; -} - -sub getUnquotedParameter { - my $value = getRawParameter(@_); - return undef unless $value; - $value =~ s/^[\'\"]//; - $value =~ s/[\'\"]$//; - return $value; -} - -sub convertNewline { - my ($text) = @_; - $text =~ s/\r\n/\n/g; - $text =~ s/\r/\n/g; - return $text; -} - -sub convertSemicolonNewline { - my ($text) = @_; - $text = convertNewline($text); - $text =~ s/\n/;\n/g; - return $text; -} - -sub usage { - print <<END; - perl chime2jmol.pl -s <src> -d <dst> {-c} {-a <archive>} - - -s <source directory> - -d <destination directory> - -c Clear destination directory - -a <archive> specify alternate archive name - -b <path> specify codebase - -v Verbose -END - exit; -} Deleted: trunk/Jmol/appletweb/chime2jmol_documentation.txt =================================================================== --- trunk/Jmol/appletweb/chime2jmol_documentation.txt 2011-08-01 05:29:12 UTC (rev 15896) +++ trunk/Jmol/appletweb/chime2jmol_documentation.txt 2011-08-01 05:37:09 UTC (rev 15897) @@ -1,121 +0,0 @@ -************************ -* A brief documentation for the use of the chime2jmol.pl Perl script -* that allows to convert Chime pages into Jmol pages. -* Author: Miguel Howard -************************ - -Copied from the jmol-users archive: - -Re: [Jmol-users] chime2jmol -Miguel -Wed, 19 Nov 2003 02:46:48 -0800 - -[...] using the chime2jmol.pl script in Jmol v10. - -The perl script chime2jmol.pl can be used to automatically convert a -subdirectory of web pages from chime plug-in format into jmol applet -format. - -The entire source directory tree is walked and copied to the destination. -Files in the original directory are not modified. File names are preserved -as they are copied (perhaps with modifications) to the destination -directory. - -Any files which are not .htm* are copied directly. .htm* files are parsed -in order to find chime plug-in <embed> tags. When an <embed> tag is found, -the contents are broken-down and reconstructed to generate the -corresponding Jmol <applet> tag. - -The original <embed> tag is embedded in <!-- comment --> brackets in the -destination for reference/debugging purposes. - -Chime plug-in <embed> tags for molecule display are converted into -JmolApplet applets. - -Chime plug-in <embed> tags for buttons are converted into -JmolAppletControl applets. - -*Note* If pages contain additional plug-ins which are not related to Chime -then the chime2jmol.pl script will almost certainly fail. - -It is a command-line script written in perl. You will need to be -comfortable with the command line, perl, and CPAN. - -The script uses several standard perl modules (libraries) to do the html -page parsing. If they are not installed then the script will die when you -try to run it. Use CPAN to install these modules. - -Parameters are as follows: - - -v Verbose output - This will show you what is going on during processing. - Always use this until you are comfortable - -s Source directory - This is the pathname to the directory where your source - (original chime .htm*) files are located - -d Destination directory - This is where you want to send the converted output to. - Don't use the same directory as the source ... use a - sibling directory - -c Clear destination - Delete the destination directory tree before beginning. - You may want to use this all the time too - -a Archive name - Allows you to specify an archive name other than JmolApplet.jar - In general, don't use this - -b codeBase - Allows you to specify a codebase subdirectory where - JmolApplet.jar will be located. - -The -b parameter needs more explanation. It prevents you from having to -copy the JmolApplet.jar to every subdirectory. This substantially improves -performance because the one copy of JmolApplet.jar is shared by all the -pages ... it stays in the browser cache and does not get reloaded each -time the user goes to a new subdirectory. - -However, the -b parameter needs more work. Currently, it does not -automatically manage relative directory paths as the directory tree is -descended (by prepending ../ each time the directory level goes down). -Therefore, it only works with absolute directory references. - -Let's go through a simple example. I have a subdirectory called -chime-pages. I am going to convert them into a subdirectory called -jmol-pages. - - perl chime2jmol.pl -v -s {somePath}/chime-pages -d {somePath}/jmol-pages - -Now, I copy JmolApplet.jar to the jmol-pages directory - cp JmolApplet.jar {somePath}/jmol-pages - -Now on my web server I create a virtual path called jmolTest to -{somePath}/jmol-pages. So, to get to my converted pages from a web -browser, one will go to: - http://www.mywebserver.com/jmolTest - -I set this up ... and everything works perfectly the first time ... yeah -right :-) - -A little more complicated example. This time I have an entire directory -tree of chime pages. I want them all to share the same copy of Jmol, so I -will use the -b parameter to set the codeBase. But since I have to use -absolute paths I must plan ahead a little. I am going to put one -JmolApplet.jar in my jmol-pages directory and everyone is going to share -that. But, from the perspective of my web server, this directory is called -jmolTest. Therefore, I need to set my codeBase to be /jmolTest - - perl -v -s chime-pages -d jmol-pages -b /jmolTest - - -This will add the attribute - codebase="/jmolTest" -to every applet tag, thereby forcing all applet instances (regardless of -directory level) to share the same instance of JmolApplet.jar - - - - -This code has not had significant testing. So if you have trouble with -*anything* don't waste time ... let me know. - -Miguel - Copied: trunk/Jmol/appletweb/chime2jmol_documentation_old.txt (from rev 15078, trunk/Jmol/appletweb/chime2jmol_documentation.txt) =================================================================== --- trunk/Jmol/appletweb/chime2jmol_documentation_old.txt (rev 0) +++ trunk/Jmol/appletweb/chime2jmol_documentation_old.txt 2011-08-01 05:37:09 UTC (rev 15897) @@ -0,0 +1,121 @@ +************************ +* A brief documentation for the use of the chime2jmol.pl Perl script +* that allows to convert Chime pages into Jmol pages. +* Author: Miguel Howard +************************ + +Copied from the jmol-users archive: + +Re: [Jmol-users] chime2jmol +Miguel +Wed, 19 Nov 2003 02:46:48 -0800 + +[...] using the chime2jmol.pl script in Jmol v10. + +The perl script chime2jmol.pl can be used to automatically convert a +subdirectory of web pages from chime plug-in format into jmol applet +format. + +The entire source directory tree is walked and copied to the destination. +Files in the original directory are not modified. File names are preserved +as they are copied (perhaps with modifications) to the destination +directory. + +Any files which are not .htm* are copied directly. .htm* files are parsed +in order to find chime plug-in <embed> tags. When an <embed> tag is found, +the contents are broken-down and reconstructed to generate the +corresponding Jmol <applet> tag. + +The original <embed> tag is embedded in <!-- comment --> brackets in the +destination for reference/debugging purposes. + +Chime plug-in <embed> tags for molecule display are converted into +JmolApplet applets. + +Chime plug-in <embed> tags for buttons are converted into +JmolAppletControl applets. + +*Note* If pages contain additional plug-ins which are not related to Chime +then the chime2jmol.pl script will almost certainly fail. + +It is a command-line script written in perl. You will need to be +comfortable with the command line, perl, and CPAN. + +The script uses several standard perl modules (libraries) to do the html +page parsing. If they are not installed then the script will die when you +try to run it. Use CPAN to install these modules. + +Parameters are as follows: + + -v Verbose output + This will show you what is going on during processing. + Always use this until you are comfortable + -s Source directory + This is the pathname to the directory where your source + (original chime .htm*) files are located + -d Destination directory + This is where you want to send the converted output to. + Don't use the same directory as the source ... use a + sibling directory + -c Clear destination + Delete the destination directory tree before beginning. + You may want to use this all the time too + -a Archive name + Allows you to specify an archive name other than JmolApplet.jar + In general, don't use this + -b codeBase + Allows you to specify a codebase subdirectory where + JmolApplet.jar will be located. + +The -b parameter needs more explanation. It prevents you from having to +copy the JmolApplet.jar to every subdirectory. This substantially improves +performance because the one copy of JmolApplet.jar is shared by all the +pages ... it stays in the browser cache and does not get reloaded each +time the user goes to a new subdirectory. + +However, the -b parameter needs more work. Currently, it does not +automatically manage relative directory paths as the directory tree is +descended (by prepending ../ each time the directory level goes down). +Therefore, it only works with absolute directory references. + +Let's go through a simple example. I have a subdirectory called +chime-pages. I am going to convert them into a subdirectory called +jmol-pages. + + perl chime2jmol.pl -v -s {somePath}/chime-pages -d {somePath}/jmol-pages + +Now, I copy JmolApplet.jar to the jmol-pages directory + cp JmolApplet.jar {somePath}/jmol-pages + +Now on my web server I create a virtual path called jmolTest to +{somePath}/jmol-pages. So, to get to my converted pages from a web +browser, one will go to: + http://www.mywebserver.com/jmolTest + +I set this up ... and everything works perfectly the first time ... yeah +right :-) + +A little more complicated example. This time I have an entire directory +tree of chime pages. I want them all to share the same copy of Jmol, so I +will use the -b parameter to set the codeBase. But since I have to use +absolute paths I must plan ahead a little. I am going to put one +JmolApplet.jar in my jmol-pages directory and everyone is going to share +that. But, from the perspective of my web server, this directory is called +jmolTest. Therefore, I need to set my codeBase to be /jmolTest + + perl -v -s chime-pages -d jmol-pages -b /jmolTest + + +This will add the attribute + codebase="/jmolTest" +to every applet tag, thereby forcing all applet instances (regardless of +directory level) to share the same instance of JmolApplet.jar + + + + +This code has not had significant testing. So if you have trouble with +*anything* don't waste time ... let me know. + +Miguel + Copied: trunk/Jmol/appletweb/chime2jmol_old.pl (from rev 15078, trunk/Jmol/appletweb/chime2jmol.pl) =================================================================== --- trunk/Jmol/appletweb/chime2jmol_old.pl (rev 0) +++ trunk/Jmol/appletweb/chime2jmol_old.pl 2011-08-01 05:37:09 UTC (rev 15897) @@ -0,0 +1,330 @@ +use strict; +use HTML::Parser; +use Getopt::Std; +use File::Find; +use File::Copy; +use File::Path; +use Cwd; + +sub handleEmbed; +sub handleEnd; +sub usage; + +use vars qw/$opt_v $opt_a $opt_s $opt_c $opt_d $opt_b/; +getopts('va:s:cd:b:') or usage(); + +($opt_s && $opt_d) or usage(); + +my $pwd = cwd(); +print "pwd is $pwd\n" if $opt_v; + +my $fullsrcpath = $opt_s; +$fullsrcpath =~ s|(\./)+||; +$fullsrcpath = $pwd . "/" . $fullsrcpath unless $fullsrcpath =~ m|^/|; +$fullsrcpath = $fullsrcpath . "/" unless $fullsrcpath =~ m|/$|; + +my $fulldstpath = $opt_d; +$fulldstpath =~ s|(\./)+||; +$fulldstpath = $pwd . "/" . $fulldstpath unless $fulldstpath =~ m|^/|; +$fulldstpath = $fulldstpath . "/" unless $fulldstpath =~ m|/$|; + + +print "source directory $fullsrcpath\n" if $opt_v; +(-d $fullsrcpath) or die "$fullsrcpath is not a directory"; + +if ($opt_c) { + print "deleting directory tree $fulldstpath\n" if $opt_v; + rmtree $fulldstpath; +} + +if (-e $fulldstpath) { + print "destination directory $fulldstpath exists\n" if $opt_v; + -d $fulldstpath or die "$fulldstpath is not a directory"; +} else { + print "creating destination directory $fulldstpath\n" if $opt_v; + mkdir($fulldstpath) or die "could not make directory $fulldstpath"; +} + +my $archive = "JmolApplet.jar"; +$archive = $opt_a if $opt_a; +print "archive is $archive\n" if $opt_v; + +my $codebase = $opt_b; +print "codebase is $codebase\n" if $codebase && $opt_v; + +my $baseDirectory; +my @files; +my @directories; +sub accumulateFilename { + if ($baseDirectory) { + my $pathname = $File::Find::name; + my $name = substr $pathname, length($baseDirectory); + if (-f $pathname) { + print "$pathname is a file\n"; + push @files, $name if -f $pathname; + } elsif (-d $pathname) { + print "$pathname is a directory\n"; + push @directories, $name if -d $pathname; + } else { + print "$pathname is neither fish nor fowl?\n"; + print "but it exists!\n" if -e $pathname; + } + + } else { + $baseDirectory = $File::Find::name . "/"; + print "baseDirectory=$baseDirectory\n" if $opt_v; + } +} +find(\&accumulateFilename, $fullsrcpath); + +for my $directory (@directories) { + print "mkdir $fulldstpath$directory\n" if $opt_v; + mkdir "$fulldstpath$directory"; +} + +for my $file (@files) { + next if $file =~ /\~$/; # ignore emacs files + print "processing $file\n" if $opt_v; + processFile("$baseDirectory$file", "$fulldstpath$file"); +} + +exit(); + +sub processFile { + my ($src, $dst) = @_; + if ($src =~ /html?$/i) { + processHtmlFile($src, $dst); + } else { + copyFile($src, $dst); + } +} + +sub copyFile { + my ($src, $dst) = @_; +# print "copyFile $src -> $dst\n"; + copy $src, $dst; +} + +sub processHtmlFile { + my ($src, $dst) = @_; + open OUTPUT, ">$dst" or die "could not open $dst"; + + my $p = HTML::Parser->new(start_h => + [\&handleEmbed, 'skipped_text,text,tokens'], + end_document_h => [\&writePrevious, + 'skipped_text']); + $p->report_tags('embed'); + $p->parse_file($src) || die $!; + close OUTPUT; +} + +my ($previous, $embed, $tokens); +my $tokenCount; + +# common to both plugins and buttons +my ($name, $width, $height, $bgcolor, $src, $script); +# plug-in specific +my ($preloadscript, $loadStructCallback, $messageCallback, + $pauseCallback, $pickCallback); +# button-specific +my ($type, $button, $buttonCallback, $target, $altscript); + +sub handleEmbed { + ($previous, $embed, $tokens) = @_; + $tokenCount = scalar @$tokens; + + $name = getUnquotedParameter('name'); + $width = getUnquotedParameter('width'); + $height = getUnquotedParameter('height'); + $bgcolor = getUnquotedParameter('bgcolor'); + $src = getUnquotedParameter('src'); + + $loadStructCallback = getUnquotedParameter('LoadStructCallback'); + $messageCallback = getUnquotedParameter('MessageCallback'); + $pauseCallback = getUnquotedParameter('pauseCallback'); + $pickCallback = getUnquotedParameter('pickCallback'); + + $type = getUnquotedParameter('type'); + $button = getUnquotedParameter('button'); + $buttonCallback = getUnquotedParameter('ButtonCallBack'); + $target = getUnquotedParameter('target'); + $preloadscript = checkPreloadScript(); + $script = getRawParameter('script'); + $script = convertSemicolonNewline($script); + $altscript = convertSemicolonNewline(getRawParameter('altscript')); + + writePrevious($previous); + writeCommentedEmbed(); +# dumpVars(); + writeJmolApplet() unless $button; + writeButtonControl() if $button; +} + +sub checkPreloadScript { + my $spinX = getUnquotedParameter('spinx'); + my $spinY = getUnquotedParameter('spiny'); + my $spinZ = getUnquotedParameter('spinz'); + my $startspin = getUnquotedParameter('startspin'); + my $frank = getUnquotedParameter('frank'); + my $debugscript = getUnquotedParameter('debugscript'); + + my $preloadscript = getUnquotedParameter('preloadscript'); + $preloadscript = convertSemicolonNewline($preloadscript); + + $preloadscript .= "set spin x $spinX;" if $spinX; + $preloadscript .= "set spin y $spinY;" if $spinY; + $preloadscript .= "set spin z $spinZ;" if $spinZ; + $preloadscript .= "set spin on;" if $startspin =~ /true|yes|on/i; + $preloadscript .= "set frank $frank;" if $frank; + $preloadscript .= "set debugscript $debugscript;" if $debugscript; + return $preloadscript; +} + +sub dumpVars { + print <<END; + name=$name + width=$width + height=$height + bgcolor=$bgcolor + src=$src + type=$type + button=$button + buttonCallback=$buttonCallback + target=$target + script=$script + altscript=$altscript + +END +} + +sub writePrevious { + print OUTPUT convertNewline(@_[0]); +} + +sub writeCommentedEmbed { + $embed = convertNewline($embed); + print OUTPUT "<!-- $embed -->\n"; +} + +sub writeJmolApplet { + print OUTPUT + " <applet name='$name' code='JmolApplet' archive='$archive'\n" + if $name; + print OUTPUT + " <applet code='JmolApplet' archive='$archive'\n" + unless $name; + print OUTPUT + " codebase='$codebase'\n" if $codebase; + print OUTPUT + " width='$width' height='$height' mayscript='true' >\n"; + print OUTPUT + " <param name='emulate' value='chime' />\n"; + print OUTPUT + " <param name='bgcolor' value='$bgcolor' />\n" if $bgcolor; + print OUTPUT + " <param name='load' value='$src' />\n" if $src; + print OUTPUT + " <param name='preloadscript'\n", + " value='$preloadscript' />\n" if $preloadscript; + print OUTPUT + " <param name='script' value=$script />\n" if $script; + print OUTPUT + " <param name='LoadStructCallback' value='$loadStructCallback' />\n" + if $loadStructCallback; + print OUTPUT + " <param name='MessageCallback' value='$messageCallback' />\n" + if $messageCallback; + print OUTPUT + " <param name='PauseCallback' value='$pauseCallback' />\n" + if $pauseCallback; + print OUTPUT + " <param name='PickCallback' value='$pickCallback' />\n" + if $pickCallback; + print OUTPUT + " </applet>\n"; +} + +sub writeButtonControl { + my ($controlType, $group); + if ($button =~ /push/i) { + $controlType = "chimePush"; + } elsif ($button =~ /toggle/i) { + $controlType = "chimeToggle"; + } elsif ($button =~ /radio(\d+)/i) { + $controlType = "chimeRadio"; + $group = $1; + } + my $buttonScript = $script || $src; + print OUTPUT + " <applet name=$name code='JmolAppletControl' archive='$archive'\n" + if $name; + print OUTPUT + " <applet code='JmolAppletControl' archive='$archive'\n" + unless $name; + print OUTPUT + " codebase='$codebase'\n" if $codebase; + print OUTPUT + " width='$width' height='$height' mayscript='true' >\n"; + print OUTPUT + " <param name='target' value='$target' />\n". + " <param name='type' value='$controlType' />\n"; + print OUTPUT + " <param name='group' value='$group' />\n" + if $group; + print OUTPUT + " <param name='script' value=$buttonScript />\n" + if $buttonScript; + print OUTPUT + " <param name='altscript' value=$altscript />\n" + if $altscript; + print OUTPUT + " <param name='ButtonCallback' value=$buttonCallback />\n" + if $buttonCallback; + print OUTPUT + " </applet>\n"; +} + +sub getRawParameter { + my ($tag) = @_; + for (my $i = 0; $i < $tokenCount; ++$i) { + my $token = $tokens->[$i]; + return $tokens->[$i + 1] if ($token =~ /$tag/i); + } + return undef; +} + +sub getUnquotedParameter { + my $value = getRawParameter(@_); + return undef unless $value; + $value =~ s/^[\'\"]//; + $value =~ s/[\'\"]$//; + return $value; +} + +sub convertNewline { + my ($text) = @_; + $text =~ s/\r\n/\n/g; + $text =~ s/\r/\n/g; + return $text; +} + +sub convertSemicolonNewline { + my ($text) = @_; + $text = convertNewline($text); + $text =~ s/\n/;\n/g; + return $text; +} + +sub usage { + print <<END; + perl chime2jmol.pl -s <src> -d <dst> {-c} {-a <archive>} + + -s <source directory> + -d <destination directory> + -c Clear destination directory + -a <archive> specify alternate archive name + -b <path> specify codebase + -v Verbose +END + exit; +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2012-03-08 15:35:04
|
Revision: 16871 http://jmol.svn.sourceforge.net/jmol/?rev=16871&view=rev Author: hansonr Date: 2012-03-08 15:34:53 +0000 (Thu, 08 Mar 2012) Log Message: ----------- JSpecViewAppletPro Modified Paths: -------------- trunk/Jmol/appletweb/JSpecViewApplet.jar trunk/Jmol/appletweb/JSpecViewAppletPro.jar trunk/Jmol/appletweb/JSpecViewAppletSigned.jar Removed Paths: ------------- trunk/Jmol/appletweb/jspecview.jar Modified: trunk/Jmol/appletweb/JSpecViewApplet.jar =================================================================== (Binary files differ) Modified: trunk/Jmol/appletweb/JSpecViewAppletPro.jar =================================================================== (Binary files differ) Modified: trunk/Jmol/appletweb/JSpecViewAppletSigned.jar =================================================================== (Binary files differ) Deleted: trunk/Jmol/appletweb/jspecview.jar =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2012-04-17 14:45:32
|
Revision: 17011 http://jmol.svn.sourceforge.net/jmol/?rev=17011&view=rev Author: hansonr Date: 2012-04-17 14:45:20 +0000 (Tue, 17 Apr 2012) Log Message: ----------- new JmolCD.js and test2.htm for appletweb Modified Paths: -------------- trunk/Jmol/appletweb/JmolCD.js trunk/Jmol/appletweb/test2.htm Modified: trunk/Jmol/appletweb/JmolCD.js =================================================================== --- trunk/Jmol/appletweb/JmolCD.js 2012-04-17 06:05:00 UTC (rev 17010) +++ trunk/Jmol/appletweb/JmolCD.js 2012-04-17 14:45:20 UTC (rev 17011) @@ -1,497 +1,481 @@ // JmolCD.js -- Jmol ChemDoodle extension author: Bob Hanson, ha...@st... 4/16/2012 -// requires ChemDoodleWeb.js and ChemDoodleWeb-libs.js -// prior to JmolCD.js - // allows Jmol applets to be created on a page with more flexibility and extendability -// using much of the infrastructure of ChemDoodle. +// possibly using infrastructure of ChemDoodle. +// this package may be used with or without ChemDoodle +// if not using ChemDoodle, this package requires jQuery.js (or ChemDoodleWeb-libs.js, which conains jQuery) +// if using ChemDoodle, this package requires ChemDoodleWeb-libs.js and ChemDoodleWeb.js prior to JmolCD.js + // allows Jmol-like objects to be displayed on Java-challenged (iPad/iPhone) // or applet-challenged (Android/iPhone) platforms, with automatic switching to // whatever is appropriate. You can specify "ChemDoodle-only", "Jmol-only", "Image-only" // or some combination of those -- and of course, you are free to rewrite the logic below! -// allows ChemDoodle-like 2D and 3D canvases that can load files via a privately hosted +// allows ChemDoodle-like 3D and 3D-faked 2D canvases that can load files via a privately hosted // server that delivers raw data files rather than specialized JSON mol data. // access to iChemLabs server is not required for simple file-reading operations and // database access. Database and image services are provided by a server-side PHP program // running JmolData.jar with flags -iR. - // In this case, the NCI and RCSB databases are accessed via a St. Olaf College server, // but for your installation, you should consider putting JmolData.jar and jmolcd.php // on your own server. Nothing more than these two files is needed on the server. +if(typeof(ChemDoodle)=="undefined") ChemDoodle = null; + Jmol = (function() { + var version = 'Jmol 12.3.22' + (ChemDoodle ? "; ChemDoodle " + ChemDoodle.getVersion(): ""); return { - INFO: ChemDoodle.iChemLabs.INFO, + INFO: {userAgent:navigator.userAgent, version: version}, SERVER_URL: "http://chemapps.stolaf.edu/jmol/jmolcd.php", - nciPostLoadScript: ";n = ({molecule=1}.length < {molecule=2}.length ? 2 : 1); select molecule=n;display selected;center selected;", + nciLoadScript: ";n = ({molecule=1}.length < {molecule=2}.length ? 2 : 1); select molecule=n;display selected;center selected;", + fileLoadScript: ";if (_loadScript = '' && defaultLoadScript == '' && _filetype == 'Pdb') { select protein or nucleic;cartoons Only;color structure; select * };", asynchronous: !0, - VERSION: 'Jmol 12.3.22/ChemDoodle 4.6.2', - getVersion: function(){return this.VERSION}, + getVersion: function(){return version}, }; })(); -Jmol.getMolGrabber = function(Info) { +(function (Jmol) { - var molgrabber; // return value - - /* a general function that will switch to the desired rendering option - involving Jmol or ChemDoodle. + Jmol.getApplet = function(Info) { - for example: + var applet; // return value - jmol_isReady = function(app,isReady) { - if (!isReady) return; - molgrabber.setSearchTerm(Info.defaultModel); - } - - var Info = { - id: "molgrabber1", - width: 300, - height: 300, - debug: true - addSelectionOptions: true, - serverURL: "http://chemapps.stolaf.edu/jmol/jmolcd.php", - defaultModel: "morphine", - useChemDoodleOnly: false, - useJmolOnly: false, - useWebGlIfAvailable: true, - useImageOnly: true, - jmolIsSigned: useSigned, - jmolJarPath: ".", - jmolJarFile: (useSigned ? "JmolAppletSigned.jar" : "JmolApplet.jar"), - jmolReadyFunctionName: "jmol_isReady", + /* a general function that will switch to the desired rendering option + involving Jmol or ChemDoodle. + + for example: + + jmol_isReady = function(app,isReady) { + if (!isReady) return; + applet.setSearchTerm(Info.defaultModel); + } + + var Info = { + id: "applet1", + width: 300, + height: 300, + debug: true + addSelectionOptions: true, + serverURL: "http://chemapps.stolaf.edu/jmol/jmolcd.php", + defaultModel: "morphine", + useChemDoodleOnly: false, + useJmolOnly: false, + useWebGlIfAvailable: true, + useImageOnly: true, + jmolIsSigned: useSigned, + jmolJarPath: ".", + jmolJarFile: (useSigned ? "JmolAppletSigned.jar" : "JmolApplet.jar"), + jmolReadyFunctionName: "jmol_isReady", + } + + ... + + [in body script tag] + + applet = Jmol.getApplet(Info) + + */ + + Info.serverURL && (Jmol.SERVER_URL = Info.serverURL); + + if (_jmol && !Info.useChemDoodleOnly && !Info.useImageOnly && navigator.javaEnabled()) { + + Info.jmolJarFile || (Info.jmolJarFile = (Info.jmolIsSigned ? "JmolAppletSigned0.jar" : "JmolApplet0.jar")); + Info.jmolJarPath || (Info.jmolJarPath = "."); + + // Jmol applet, signed or unsigned + + applet = new Jmol.Applet(Info.id, Info.width, Info.height, Info.jmolJarPath, + Info.jmolJarFile, Info.jmolIsSigned, Info.jmolReadyFunctionName, + (Info.debug ? "<br />(Java found: using Jmol " + (Info.jmolIsSigned ? "signed, no server)" : "unsigned+server)") : null), + Info.addSelectionOptions); + + } else if (!Info.useJmolOnly && !Info.useImageOnly && ChemDoodle) { + + // ChemDoodle: first try with WebGL unless that doesn't work or we have indicated NOWEBGL + if (Info.useWebGlIfAvailable && ChemDoodle.featureDetection.supports_webgl()) { + applet = new Jmol.Canvas3D(Info.id, Info.width, Info.height, + (Info.debug ? "<br />(WebGL found: Jmol.Canvas3D)" : null), Info.addSelectionOptions); + } else { + applet = {} + } + if (applet.gl) { + //applet.specs.set3DRepresentation('Stick'); + applet.specs.set3DRepresentation('Ball and Stick'); + applet.specs.backgroundColor = 'black'; + } else { + applet = new Jmol.Canvas(Info.id+"_2D", Info.width, Info.height, + (Info.debug ? "<br />(No WebGL: Jmol.Canvas)" : null), + Info.addSelectionOptions); + applet.specs.bonds_useJMOLColors = true; + applet.specs.bonds_width_2D = 3; + applet.specs.atoms_display = false; + applet.specs.backgroundColor = 'black'; + applet.specs.bonds_clearOverlaps_2D = true; + } + Info.defaultModel && applet.setSearchTerm(Info.defaultModel); + + } else { + + // just load the image + + applet = new Jmol.Image(Info.id, Info.width, Info.height, + (Info.debug ? "<br />(Just creating an image)" : null), + Info.addSelectionOptions); + Info.defaultModel && applet.setSearchTerm(Info.defaultModel); + } + return applet; } -... - - [in body script tag] + Jmol.getScript = function(database, model) { + return (database == "$" ? Jmol.nciLoadScript : Jmol.fileLoadScript); + } - molgrabber = Jmol.getMolGrabber(Info) + Jmol.getRawDataFromDatabase = function(database,query,fSuccess,fError){ + var c=this; + this.contactServer( + "getRawDataFromDatabase", + {database:database,dimension:3,query:query,script:Jmol.getScript(database)}, + fSuccess, fError + ) + } + + Jmol.loadSuccess = function(a, fSuccess) { + Jmol.inRelay=!1; + fSuccess(a); + } - */ - - Info.serverURL && (Jmol.SERVER_URL = Info.serverURL); + Jmol.loadError = function(fError){ + Jmol.inRelay=!1; + alert("Could not connect to server. (Note that some browsers cannot read local files this way.)"); + null!=fError&&fError() + } - if (_jmol && !Info.useChemDoodleOnly && !Info.useImageOnly && navigator.javaEnabled()) { + Jmol.loadFileData = function(fileName, fSuccess, fError){ + this.inRelay?alert("Already connecting to the server - please wait for the first request to finish."): + (Jmol.inRelay=!0, + jQuery.ajax({ + dataType: "text", + type: "POST", + url: fileName, + success: function(a) {Jmol.loadSuccess(a, fSuccess)}, + error: function() {Jmol.loadError(fError)}, + async: Jmol.asynchronous + }) + ) + } - Info.jmolJarFile || (Info.jmolJarFile = (Info.jmolIsSigned ? "JmolAppletSigned0.jar" : "JmolApplet0.jar")); - Info.jmolJarPath || (Info.jmolJarPath = "."); - - // Jmol applet, signed or unsigned + Jmol.contactServer = function(cmd,content,fSuccess,fError){ + this.inRelay?alert("Already connecting to the server - please wait for the previous request to finish."): + (Jmol.inRelay=!0, + jQuery.ajax({ + dataType: "text", + type: "POST", + data: JSON.stringify({ + call: cmd, + content: content, + info: Jmol.INFO + }), + url: this.SERVER_URL, + success: function(a) {Jmol.loadSuccess(a, fSuccess)}, + error:function() { Jmol.loadError(fError) }, + async:Jmol.asynchronous + }) + ) + } - molgrabber = new Jmol.MolGrabberJmol(Info.id, Info.width, Info.height, Info.jmolJarPath, - Info.jmolJarFile, Info.jmolIsSigned, Info.jmolReadyFunctionName, - (Info.debug ? "<br />(Java found: using Jmol " + (Info.jmolIsSigned ? "signed, no server)" : "unsigned+server)") : null), - Info.addSelectionOptions); - - } else if (!Info.useJmolOnly && !Info.useImageOnly) { + // Applet -- an alternative to _Canvas3D + // -- loads the Jmol applet instead of ChemDoodle - // ChemDoodle: first try with WebGL unless that doesn't work or we have indicated NOWEBGL - if (Info.useWebGlIfAvailable && ChemDoodle.featureDetection.supports_webgl()) { - molgrabber = new Jmol.MolGrabberCanvas3D(Info.id, Info.width, Info.height, - (Info.debug ? "<br />(WebGL found: Jmol.MolGrabberCanvas3D)" : null), Info.addSelectionOptions); - } else { - molgrabber = {} + Jmol.Applet = function(id,c,h, jmolDirectory, appJar, jmolIsSigned, readyFunctionName, caption, addOptions){ + this.id = id; + this.jmolIsSigned = jmolIsSigned; + this.dataMultiplier=1; + jmolInitialize(jmolDirectory, appJar); + readyFunctionName && jmolSetParameter("appletReadyCallback", readyFunctionName); + var script = ""; + jmolApplet([c,h],script, id); + if (addOptions) + Jmol.getGrabberOptions(this, id, caption); + return this; + } + + Jmol.Applet.prototype.setSearchTerm = function(b){ + Jmol.searchQuery(this, b); + } + + Jmol.Applet.prototype.loadMolecule = function(mol) { + _jmolFindApplet("jmolApplet" + this.id).script('load DATA "model"\n' + mol + '\nEND "model" ' + this.loadParams + + Jmol.fileLoadScript); + } + + Jmol.Applet.prototype.script = function(script) { + _jmolFindApplet("jmolApplet" + this.id).script(script); + } + + Jmol.Applet.prototype.loadFile = function(fileName, params){ + this.loadParams = (params ? params : ""); + this.thisJmolModel = "" + Math.random(); + var c = this; + Jmol.loadFileData(fileName, function(data){c.loadMolecule(data)}); + } + + Jmol.Applet.prototype.search = function(model){ + model || (model = jQuery("#"+this.id+"_query").val().replace(/\"/g, "")); + database = jQuery("#"+this.id+"_select").val(); + if (model.indexOf("=") == 0 || model.indexOf("$") == 0) { + database = model.substring(0, 1); + model = model.substring(1); } - if (molgrabber.gl) { - //molgrabber.specs.set3DRepresentation('Stick'); - molgrabber.specs.set3DRepresentation('Ball and Stick'); - molgrabber.specs.backgroundColor = 'black'; + var dm = database + model; + if (!model || model && dm == this.thisJmolModel) + return; + this.thisJmolModel = dm; + if (database == "$") + this.jmolFileType = "MOL"; + else if (database == "=") + this.jmolFileType = "PDB"; + this.searchDatabase(model, database); + }; + + Jmol.Applet.prototype.searchDatabase = function(model, database){ + if (this.jmolIsSigned) { + var postLoad = (database == "$" ? Jmol.nciPostLoadScript : ""); + this.script("load \"" + dm + "\"" + postLoad); } else { - molgrabber = new Jmol.MolGrabberCanvas(Info.id+"_2D", Info.width, Info.height, - (Info.debug ? "<br />(No WebGL: Jmol.MolGrabberCanvas)" : null), - Info.addSelectionOptions); - molgrabber.specs.bonds_useJMOLColors = true; - molgrabber.specs.bonds_width_2D = 3; - molgrabber.specs.atoms_display = false; - molgrabber.specs.backgroundColor = 'black'; - molgrabber.specs.bonds_clearOverlaps_2D = true; + // need to do the postLoad here as well + var c=this; + Jmol.getRawDataFromDatabase( + database, + model, + function(data){c.loadMolecule(data)} + ); } - Info.defaultModel && molgrabber.setSearchTerm(Info.defaultModel); - - } else { + } - // just load the image - - molgrabber = new Jmol.MolGrabberImage(Info.id, Info.width, Info.height, - (Info.debug ? "<br />(Just creating an image)" : null), - Info.addSelectionOptions); - Info.defaultModel && molgrabber.setSearchTerm(Info.defaultModel); + // Image -- another alternative to _Canvas + Jmol.Image = function(id,width,height, caption, addOptions){ + this.id = id; + this.imgWidth = width; + this.imgHeight = height; + var img = '<img id="'+id+'_image" width="' + width + '" height="' + height + '" src=""/>'; + document.write(img); + if (addOptions) + Jmol.getGrabberOptions(this, id, caption); + return this; } - return molgrabber; -} - -Jmol.getRawDataFromDatabase = function(database,query,fsuccess,ferror){ - var script = (database == "$" ? Jmol.nciPostLoadScript : ""); - this.contactServer( - "getRawDataFromDatabase", - {database:database,dimension:3,query:query,postLoadScript:script}, - function(data){ - fsuccess(data) - }, - ferror, - !0 - ) -} - -Jmol.loadFileData = function(fileName, fReturn){ - this.inRelay?alert("Already connecting to the server, please wait for the first request to finish."): - (Jmol.inRelay=!0, - jQuery.ajax({ - dataType:"text", - type:"POST", - url:fileName, - success:function(a){ - Jmol.inRelay=!1; - fReturn(a); - }, - error:function(){Jmol.inRelay=!1;alert("Server connectivity failed. Please try again or update this browser to the latest version. (XHR2 not supported)"); null!=c&&c()}, - async:Jmol.asynchronous - }) - ) -} - -Jmol.contactServer = function(cmd,content,fSuccess,fError,isRaw){ - // allows for reading of raw data rather than JSON + Jmol.Image.prototype.search = Jmol.Applet.prototype.search; + Jmol.Image.prototype.setSearchTerm = Jmol.Applet.prototype.setSearchTerm; - this.inRelay?alert("Already connecting to the server, please wait for the first request to finish."): - (Jmol.inRelay=!0, - jQuery.ajax({ - dataType:"text", - type:"POST", - data:JSON.stringify({ - call:cmd, - content:content, - info:Jmol.INFO - }), - url:this.SERVER_URL, - success:function(a){ - Jmol.inRelay=!1; - if(isRaw) { - fSuccess(a); - return; - } - o=JSON.parse(a); - o.message&&alert(o.message); -//o.content = '{"mol":{"scale":[20,-20,20],"a":[{"x":78.474,"y":18.444,"z":3.67},{"x":64.958,"y":64.212006,"z":7.6419997},{"x":103.462,"y":26.569998,"z":-4.9280005},{"x":89.946,"y":72.338,"z":-0.956},{"x":109.19601,"y":53.517998,"z":-7.2460003},{"x":31.98,"y":28.406,"z":19.326},{"x":-84.273994,"y":-16.376001,"z":51.858},{"x":-115.051994,"y":-3.2080002,"z":14.070001},{"l":"H","x":-18.426,"y":13.716001,"z":17.006},{"x":59.22,"y":37.264,"z":9.952001},{"l":"O","x":-99.78,"y":-50.052002,"z":-24.666002},{"l":"O","x":-25.512001,"y":-33.281998,"z":-38.72},{"l":"O","x":22.08,"y":29.476002,"z":-26.811998},{"l":"O","x":-92.08,"y":-69.404,"z":14.316},{"x":-88.61001,"y":-49.4,"z":-3.246},{"x":13.762001,"y":25.081999,"z":-4.454},{"x":-70.782,"y":-26.126001,"z":3.75},{"x":-29.484001,"y":14.0,"z":-23.994},{"x":-37.694,"y":-14.437999,"z":-29.506},{"l":"H","x":-103.7,"y":-83.898,"z":8.932},{"l":"N","x":-11.774,"y":17.23,"z":-0.8759999},{"x":-59.156,"y":16.960001,"z":-17.647999},{"x":-85.96,"y":-6.886,"z":22.816},{"l":"S","x":-66.38,"y":23.898,"z":17.618},{"l":"N","x":-63.18,"y":-11.977999,"z":-20.772},{"l":"H","x":-52.845997,"y":-33.494,"z":13.710001},{"l":"H","x":-70.414,"y":29.387997,"z":-31.578003},{"l":"H","x":-93.138,"y":-36.222,"z":53.544},{"l":"H","x":-95.102005,"y":-2.47,"z":64.688},{"l":"H","x":-63.384,"y":-17.2,"z":58.034},{"l":"H","x":-115.588,"y":5.1380005,"z":-6.062},{"l":"H","x":-125.116005,"y":10.374001,"z":27.836},{"l":"H","x":-125.17799,"y":-22.512,"z":14.205999},{"l":"H","x":-22.886,"y":25.046001,"z":-41.592003},{"l":"H","x":23.692,"y":43.415993,"z":32.788},{"l":"H","x":33.742,"y":9.392,"z":29.842},{"l":"H","x":74.024,"y":-2.606,"z":5.568},{"l":"H","x":49.914,"y":78.914,"z":12.550001},{"l":"H","x":118.50201,"y":11.865999,"z":-9.842},{"l":"H","x":94.43,"y":93.39,"z":-2.7519999},{"l":"H","x":128.714,"y":59.865997,"z":-13.978}],"b":[{"b":10,"e":14,"o":2},{"b":13,"e":14},{"b":14,"e":16},{"b":16,"e":24},{"b":16,"e":22},{"b":21,"e":24},{"b":18,"e":24},{"b":6,"e":22},{"b":7,"e":22},{"b":22,"e":23},{"b":21,"e":23},{"b":17,"e":21},{"b":17,"e":18},{"b":11,"e":18,"o":2},{"b":17,"e":20},{"b":15,"e":20},{"b":5,"e":15},{"b":12,"e":15,"o":2},{"b":5,"e":9},{"b":0,"e":9,"o":2},{"b":1,"e":9},{"b":0,"e":2},{"b":1,"e":3,"o":2},{"b":2,"e":4,"o":2},{"b":3,"e":4},{"b":13,"e":19},{"b":16,"e":25},{"b":21,"e":26},{"b":6,"e":27},{"b":6,"e":28},{"b":6,"e":29},{"b":7,"e":30},{"b":7,"e":31},{"b":7,"e":32},{"b":17,"e":33},{"b":8,"e":20},{"b":5,"e":34},{"b":5,"e":35},{"b":0,"e":36},{"b":1,"e":37},{"b":2,"e":38},{"b":3,"e":39},{"b":4,"e":40}]}}'; -//alert("testing contactServer with mol=" + JSON.stringify(o.content.mol)); -//o.content = JSON.parse(o.content); - null!=d&&o.content&&!o.stop&&d(o.content); - o.stop&&null!=c&&c() - }, - error:function(){Jmol.inRelay=!1;alert("Server connectivity failed. Please try again or update this browser to the latest version. (XHR2 not supported)"); null!=fError&&fError()}, - beforeSend:function(a){a.withCredentials=!0}, - async:Jmol.asynchronous - }) - ) -} + Jmol.Image.prototype.loadFile = function(fileName, params){ + params = (params ? params : ""); + if (fileName.indexOf("://") < 0 && fileName.indexOf("=") != 0 && fileName.indexOf("$") != 0) { + var ref = document.location.href + var pt = ref.lastIndexOf("/"); + fileName = ref.substring(0, pt + 1) + fileName; + } + var src = Jmol.Jmol.SERVER_URL + + "?call=getImageForFileLoad" + + "&file=" + fileName + + "&width=" + this.imgWidth + + "&height=" + this.imgHeight + + "¶ms=" + escape(params); + + "&script=" + Jmol.getScriptForModel(database, model); + document.getElementById(this.id + "_image").src = src; + } -// changes: MolGrabberCanvas, MolGrabberCanvas3D -// -- properly scales data using dataMultiplier 1 (3D canvas) or 20 (2d canvas) -// -- generalized selection/input options -// -- adds caption -// new: MolGrabberJmol, MolGrabberImage + Jmol.Image.prototype.searchDatabase = function(model, database){ + var src = Jmol.SERVER_URL + + "?call=getImageFromDatabase" + + "&query=" + model; + + "&width=" + this.imgWidth + + "&height=" + this.imgHeight + + "&database=" + database + + "&script=" + Jmol.getScriptForModel(database, model); + document.getElementById(this.id + "_image").src = src; + } - -Jmol.MolGrabberCanvas3D = function(b,c,h,caption,addOptions){ - b&&this.create(b,c,h); - this.dataMultiplier=1; - if (addOptions) - Jmol.getGrabberOptions(this, b,caption); // just for this test page - return this -} - -Jmol.MolGrabberCanvas3D.prototype = new ChemDoodle._Canvas3D; - -Jmol.MolGrabberCanvas3D.prototype.setSearchTerm = function(b){ - Jmol.searchQuery(this, b); -} - -Jmol.MolGrabberCanvas3D.prototype.search = function(model){ - model || (model = jQuery("#"+this.id+"_query").val().replace(/\"/g, "")); - database = jQuery("#"+this.id+"_select").val(); - if (model.indexOf("=") == 0 || model.indexOf("$") == 0) { - database = model.substring(0, 1); - model = model.substring(1); + // user-adjustable + + Jmol.getGrabberOptions = function(canvas, label, note) { + + // for now, only NCI + // Bob Hanson, ha...@st... 4/14/2012 + // feel free to adjust this look to anything you want + + c=[]; + c.push('<br><input type="text" id="'); + c.push(label); + c.push('_query" size="32" value="" />'); + c.push("<br><nobr>"); + c.push('<select id="'); + c.push(label); + c.push('_select">'); + c.push('<option value="$" selected>NCI(small molecules)</option>'); + c.push('<option value="=">RCSB(macromolecules)</option>'); + c.push("</select>"); + c.push('<button id="'); + c.push(label); + c.push('_submit">Search</button>'); + c.push("</nobr>"); + note && c.push(note); + document.writeln(c.join("")); + jQuery("#"+label+"_submit").click( + function(){ + canvas.search() + } + ); + jQuery("#"+label+"_query").keypress( + function(a){ + 13==a.which&&canvas.search() + } + ); + canvas.repaint && ( + canvas.emptyMessage="Enter search term below", + canvas.repaint() + ); } - var dm = database + model; - if (!model || model && dm == this.thisJmolModel) + + // Jmol core functionality + + Jmol.searchQuery = function(applet, query) { + jQuery("#"+applet.id+"_query").val(query); + applet.search(query.replace(/\"/g, "")); + } + + if (!ChemDoodle) return; - this.thisJmolModel = dm; - if (database == "$") - this.jmolFileType = "MOL"; - else if (database == "=") - this.jmolFileType = "PDB"; - this.searchDatabase(model, database); -} -Jmol.MolGrabberCanvas3D.prototype.searchDatabase = function(model, database){ - this.emptyMessage="Searching..."; - this.molecule=null; - this.repaint(); - var c = this; - Jmol.getRawDataFromDatabase( - database, - model, - function(data){Jmol.processFileData(c, data)} - ); -} - -Jmol.MolGrabberCanvas3D.prototype.loadFile = function(fileName, params){ - Jmol.loadFile(this, fileName, params); -} - -// MolGrabberCanvas changes add a dataMultiplier, subclasses TransformCanvas, modifies display options - -Jmol.MolGrabberCanvas = function(b,c,h,caption, addOptions){ - b&&this.create(b,c,h); - this.lastPoint=null; - this.rotate3D=true; - this.rotationMultMod=1.3; - this.lastPinchScale=1; - this.lastGestureRotate=0; - this.dataMultiplier=20; - if (addOptions) - Jmol.getGrabberOptions(this,b,caption); - return this; -} - -Jmol.MolGrabberCanvas.prototype = new ChemDoodle.TransformCanvas; - -Jmol.MolGrabberCanvas.prototype.setSearchTerm = function(b){ - Jmol.searchQuery(this, b); -} - -Jmol.MolGrabberCanvas.prototype.search = Jmol.MolGrabberCanvas3D.prototype.search; - -Jmol.MolGrabberCanvas.prototype.searchDatabase = function(model, database){ - this.emptyMessage="Searching..."; - this.molecule=null; - this.repaint(); - var c=this; - Jmol.getRawDataFromDatabase( - database, - model, - function(data){Jmol.processFileData(c, data)} - ); -} - -Jmol.MolGrabberCanvas.prototype.loadFile = function(fileName, params){ - Jmol.loadFile(this, fileName, params); -} - -// MolGrabberJmol -- an alternative to _Canvas3D -// -- loads the Jmol applet instead of ChemDoodle - -Jmol.MolGrabberJmol = function(id,c,h, jmolDirectory, appJar, jmolIsSigned, readyFunctionName, caption, addOptions){ - this.id = id; - this.jmolIsSigned = jmolIsSigned; - this.dataMultiplier=1; - jmolInitialize(jmolDirectory, appJar); - readyFunctionName && jmolSetParameter("appletReadyCallback", readyFunctionName); - var script = ""; - jmolApplet([c,h],script, id); - if (addOptions) - Jmol.getGrabberOptions(this, id, caption); + // Note: all of the rest of this can be removed if you have no interest in using ChemDoodle + + // changes: MolGrabberCanvas, MolGrabberCanvas3D + // -- properly scales data using dataMultiplier 1 (3D canvas) or 20 (2d canvas) + // -- generalized selection/input options + // -- adds caption + // new: Applet, Image + + + Jmol.Canvas3D = function(b,c,h,caption,addOptions){ + b&&this.create(b,c,h); + this.dataMultiplier=1; + if (addOptions) + Jmol.getGrabberOptions(this, b,caption); // just for this test page + return this + } + + // MolGrabberCanvas changes add a dataMultiplier, subclasses TransformCanvas, modifies display options + + Jmol.Canvas = function(b,c,h,caption, addOptions){ + b&&this.create(b,c,h); + this.lastPoint=null; + this.rotate3D=true; + this.rotationMultMod=1.3; + this.lastPinchScale=1; + this.lastGestureRotate=0; + this.dataMultiplier=20; + if (addOptions) + Jmol.getGrabberOptions(this,b,caption); return this; -} + } -Jmol.MolGrabberJmol.prototype.setSearchTerm = function(b){ - Jmol.searchQuery(this, b); -} + var cdSetPrototype = function(proto) { + + proto.setSearchTerm = function(b){ + Jmol.searchQuery(this, b); + }; -Jmol.MolGrabberJmol.prototype.loadMolecule = function(mol) { - _jmolFindApplet("jmolApplet" + this.id).script('load DATA "model"\n' + mol + '\nEND "model" ' + this.loadParams); -} + proto.search = Jmol.Applet.prototype.search; + + proto.searchDatabase = function(model, database){ + this.emptyMessage="Searching..."; + this.molecule=null; + this.repaint(); + var c = this; + Jmol.getRawDataFromDatabase( + database, + model, + function(data){Jmol.cdProcessFileData(c, data)} + ); + }; + + proto.loadFile = function(fileName, params){ + Jmol.cdLoadFile(this, fileName, params); + }; -Jmol.MolGrabberJmol.prototype.script = function(script) { - _jmolFindApplet("jmolApplet" + this.id).script(script); -} + return proto; + } -Jmol.MolGrabberJmol.prototype.loadFile = function(fileName, params){ - this.loadParams = (params ? params : ""); - this.thisJmolModel = "" + Math.random(); - var c=this; - Jmol.loadFileData( - fileName, - function(data){c.loadMolecule(data)} - ); -} - -Jmol.MolGrabberJmol.prototype.search = Jmol.MolGrabberCanvas3D.prototype.search; - -Jmol.MolGrabberJmol.prototype.searchDatabase = function(model, database){ - if (this.jmolIsSigned) { - var postLoad = (database == "$" ? Jmol.nciPostLoadScript : ""); - this.script("load \"" + dm + "\"" + postLoad); - } else { - // need to do the postLoad here as well - var c=this; - Jmol.getRawDataFromDatabase( - database, - model, - function(data){c.loadMolecule(data)} + Jmol.Canvas3D.prototype = cdSetPrototype(new ChemDoodle._Canvas3D); + Jmol.Canvas.prototype = cdSetPrototype(new ChemDoodle.TransformCanvas); + + Jmol.cdLoadFile = function(cdcanvas, fileName){ + cdcanvas.emptyMessage="Searching..."; + cdcanvas.molecule=null; + cdcanvas.repaint(); + cdcanvas.jmolFileType = Jmol.cdGetFileType(fileName); + Jmol.loadFileData( + fileName, + function(data){Jmol.cdProcessFileData(cdcanvas, data)} ); } -} - -// MolGrabberImage -- another alternative to _Canvas - -Jmol.MolGrabberImage = function(id,width,height, caption, addOptions){ - this.id = id; - this.imgWidth = width; - this.imgHeight = height; - var img = '<img id="'+id+'_image" width="' + width + '" height="' + height + '" src=""/>'; - document.write(img); - if (addOptions) - Jmol.getGrabberOptions(this, id, caption); - return this; -} - -Jmol.MolGrabberImage.prototype.setSearchTerm = function(b){ - Jmol.searchQuery(this, b); -} - -Jmol.MolGrabberImage.prototype.loadFile = function(fileName, params){ - params = (params ? params : ""); - if (fileName.indexOf("://") < 0 && fileName.indexOf("=") != 0 && fileName.indexOf("$") != 0) { - var ref = document.location.href - var pt = ref.lastIndexOf("/"); - fileName = ref.substring(0, pt + 1) + fileName; + + Jmol.cdGetFileType = function(name) { + // just the extension, which must be PDB, XYZ..., CIF, or MOL + name = name.split('.').pop().toUpperCase(); + return name.substring(0, Math.min(name.length, 3)); } - var src = Jmol.Jmol.SERVER_URL - + "?call=getImageForFileLoad" - + "&file=" + fileName - + "&width=" + this.imgWidth - + "&height=" + this.imgHeight - + "¶ms=" + escape(params); - document.getElementById(this.id + "_image").src = src; -} - -Jmol.MolGrabberImage.prototype.search = Jmol.MolGrabberCanvas3D.prototype.search; - -Jmol.MolGrabberImage.prototype.searchDatabase = function(model, database){ - var src = Jmol.SERVER_URL - + "?call=getImageFromDatabase" - + "&query=" + model; - + "&width=" + this.imgWidth - + "&height=" + this.imgHeight - + "&database=" + database; - document.getElementById(this.id + "_image").src = src; -} - -// Jmol core functionality -Jmol.getGrabberOptions = function(canvas, label, note) { - - // for now, only NCI - // Bob Hanson, ha...@st... 4/14/2012 + Jmol.cdProcessFileData = function(cdcanvas, data) { + var factor = cdcanvas.dataMultiplier; + data = Jmol.cdCleanFileData(data); + var molecule; + switch(canvas.jmolFileType) { + case "PDB": + case "PQR": + molecule = ChemDoodle.readPDB(data, 1); + // note: default factor for readPDB is 1 + break; + case "XYZ": + molecule = ChemDoodle.readXYZ(data, 1); + // 1 here is just in case + break; + case "CIF": + molecule = ChemDoodle.readCIF(data, 1, 1, 1, 1); + // last 1 here is just in case + break; + case "MOL": + molecule = ChemDoodle.readMOL(data, 1); + // note: default factor for readMOL is 20 + break; + default: + return; + } + cdcanvas.loadMolecule(Jmol.cdScaleMolecule(molecule, factor)); + } - c=[]; - c.push('<br><input type="text" id="'); - c.push(label); - c.push('_query" size="32" value="" />'); - c.push("<br><nobr>"); - c.push('<select id="'); - c.push(label); - c.push('_select">'); - c.push('<option value="$" selected>NCI(small molecules)</option>'); - c.push('<option value="=">RCSB(macromolecules)</option>'); - c.push("</select>"); - c.push('<button id="'); - c.push(label); - c.push('_submit">Search</button>'); - c.push("</nobr>"); - note && c.push(note); - document.writeln(c.join("")); - jQuery("#"+label+"_submit").click( - function(){ - canvas.search() + Jmol.cdCleanFileData = function(data) { + if (data.indexOf("\r") >= 0 && data.indexOf("\n") >= 0) { + return data.replace(/\r\n/g,"\n"); } - ); - jQuery("#"+label+"_query").keypress( - function(a){ - 13==a.which&&canvas.search() + if (data.indexOf("\r") >= 0) { + return data.replace(/\r/g,"\n"); } - ); - canvas.repaint && ( - canvas.emptyMessage="Enter search term below", - canvas.repaint() - ); -} - -Jmol.loadFile = function(molGrabber, fileName){ - molGrabber.emptyMessage="Searching..."; - molGrabber.molecule=null; - molGrabber.repaint(); - molGrabber.jmolFileType = Jmol.getFileType(fileName); - Jmol.loadFileData( - fileName, - function(data){Jmol.processFileData(molGrabber, data)} - ); -} - -Jmol.getFileType = function(name) { - // just the extension, which must be PDB, XYZ..., CIF, or MOL - name = name.split('.').pop().toUpperCase(); - return name.substring(0, Math.min(name.length, 3)); -} - -Jmol.searchQuery = function(molgrabber, query) { - jQuery("#"+molgrabber.id+"_query").val(query); - molgrabber.search(query.replace(/\"/g, "")); -} - -Jmol.processFileData = function(molGrabber, data) { - var factor = molGrabber.dataMultiplier; - data = Jmol.cleanFileData(data); - var molecule; - switch(molGrabber.jmolFileType) { - case "PDB": - case "PQR": - molecule = ChemDoodle.readPDB(data, 1); - // note: default factor for readPDB is 1 - break; - case "XYZ": - molecule = ChemDoodle.readXYZ(data, 1); - // 1 here is just in case - break; - case "CIF": - molecule = ChemDoodle.readCIF(data, 1, 1, 1, 1); - // last 1 here is just in case - break; - case "MOL": - molecule = ChemDoodle.readMOL(data, 1); - // note: default factor for readMOL is 20 - break; - default: - return; - } - molGrabber.loadMolecule(Jmol.scaleMolecule(molecule, factor)); -} - -Jmol.cleanFileData = function(data) { - if (data.indexOf("\r") >= 0 && data.indexOf("\n") >= 0) { - return data.replace(/\r\n/g,"\n"); + return data; } - if (data.indexOf("\r") >= 0) { - return data.replace(/\r/g,"\n"); - } - return data; -} - -Jmol.scaleMolecule = function(molecule, multiplier) { - if (multiplier != 0 && multiplier != 1) { - var atoms = molecule.atoms; - for(var i = atoms.length; --i >= 0;){ - var a = atoms[i]; - a.x*=multiplier; - a.y*=-multiplier; - a.z*=multiplier; + + Jmol.cdScaleMolecule = function(molecule, multiplier) { + if (multiplier != 0 && multiplier != 1) { + var atoms = molecule.atoms; + for(var i = atoms.length; --i >= 0;){ + var a = atoms[i]; + a.x*=multiplier; + a.y*=-multiplier; + a.z*=multiplier; + } } + return molecule; } - return molecule; -} + +})(Jmol); Modified: trunk/Jmol/appletweb/test2.htm =================================================================== --- trunk/Jmol/appletweb/test2.htm 2012-04-17 06:05:00 UTC (rev 17010) +++ trunk/Jmol/appletweb/test2.htm 2012-04-17 14:45:20 UTC (rev 17011) @@ -1,5 +1,101 @@ -<script src=http://chemapps.stolaf.edu/jmol/docs/examples-12/Jmol.js></script> -<script> - jmolInitialize("..", true) - jmolApplet([780,500], "script test2.spt") -</script> \ No newline at end of file +<html> +<title>Jmol/ChemDoodle Demo -- Using JmolData.jar for serving ChemDoodle models</title> +<head> +<script type="text/javascript" src="json2.js"></script> +<script type="text/javascript" src="ChemDoodleWeb-libs.js"></script> +<script type="text/javascript" src="ChemDoodleWeb-unpacked.js"></script> +<script type="text/javascript" src="Jmol.js"></script> +<script type="text/javascript" src="JmolCD.js"></script> + +<script type="text/javascript"> + +// note; json2 is necessary for MSIE compatibility + +var applet; // set up in HTML table, below + +// logic is set as follows: +// -- if Java is present and have Jmol.js, use Jmol +// -- otherwise, if WebGL is present and have ChemDoodleWeb.js, use ChemDoodle/WebGL +// -- otherwise, if ChemDoodleWeb.js is present, use ChemDoodle/2D +// -- otherwise, just display the image + +// ?USECD or ?USEIMAGE in the URL can force one or the other of these. + +// and, of course, a little tweaking of the logic would let you do anything + + var useJmolOnly = (document.location.href.indexOf("NOCD") >= 0); + var useChemDoodleOnly = (!useJmolOnly && document.location.href.indexOf("CD") >= 0); + var useWebGlIfAvailable = (document.location.href.indexOf("NOWEBGL") < 0); + var useImageOnly = (document.location.href.indexOf("IMAGE") >= 0); + var useSignedApplet = (document.location.href.indexOf("SIGNED") >= 0); + + jmol_isReady = function(app,isReady) { + if (!isReady) return; + applet.setSearchTerm(Info.defaultModel); + } + + var Info = { + id: "molgrabber1", + width: 300, + height: 300, + debug: true, + addSelectionOptions: true, + serverURL: "http://chemapps.stolaf.edu/jmol/jmolcd2.php", + defaultModel: "morphine", + useChemDoodleOnly: useChemDoodleOnly, + useJmolOnly: useJmolOnly, + useWebGlIfAvailable: useWebGlIfAvailable, + useImageOnly: useImageOnly, + jmolJarPath: ".", + jmolJarFile: (useSignedApplet ? "JmolAppletSigned.jar" : "JmolApplet.jar"), + jmolIsSigned: useSignedApplet, + jmolReadyFunctionName: "jmol_isReady" + } + +</script> +</head> +<body> +<table width=900 cellpadding=10><tr><td> +<script>applet = Jmol.getApplet(Info)</script> +</td><td valign=top> +If we're lucky, this is the first Jmol page that automatically switches to different modes +depending upon browser capabilities. It can use the signed Jmol applet, the unsigned Jmol applet +with server-side help, and ChemDoodle with or without WebGL. +On the server side, it uses JmolData.jar +for delivering models into ChemDoodle or the unsigned applet. +<br /><br /> +Just enter a molecule name, a CAS registry number, an IUPAC name, or some other sort of identifier in the box +and press [ENTER]. +<br /><br /> +Options include: +<table cellpadding=5><tr><td> + <a href=test2.htm>unsigned Jmol applet</a> + <br /> +<a href=test2.htm?SIGNED>signed Jmol applet</a> + <br /> + <a href=test2.htm?CD>ChemDoodle only</a> + <br /> +<a href=test2.htm?CD-NOWEBGL>not ChemDoodle(no WebGL)</a> + <br /> +<a href=test2.htm?NOCD>not ChemDoodle</a> + <br /> + <a href=test2.htm?IMAGE>image only</a> +</td><td> + <a href="javascript:applet.loadFile('caffeine.mol')">load caffeine.mol</a> + <br /> + <a href="javascript:applet.loadFile('1crn.pdb')">load 1crn.pdb</a> + <br /> + <a href="javascript:applet.loadFile('t-butene.xyz')">load t-butene.xyz</a> + <br /> + <a href="javascript:applet.loadFile('sebi0105c.ccdc.cif')">load sebi0105c.ccdc.cif</a> + <br /> + <a href="javascript:applet.loadFile('sucrose.cif')">load sucrose.cif</a> + <br /> + <a href="javascript:applet.loadFile('y1237.cif', '{1 1 1}')">load y1237.cif</a> + <br /> + <a href="javascript:applet.loadFile('quartz.cif', '{1 1 1}')">load quartz.cif</a> + </td></tr></table> +</td> +</tr></table> +</body> +</html> \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2012-04-17 15:47:14
|
Revision: 17012 http://jmol.svn.sourceforge.net/jmol/?rev=17012&view=rev Author: hansonr Date: 2012-04-17 15:47:04 +0000 (Tue, 17 Apr 2012) Log Message: ----------- JmolCD.js, jmolcd2.php, test2.htm Modified Paths: -------------- trunk/Jmol/appletweb/JmolCD.js Added Paths: ----------- trunk/Jmol/appletweb/jmolcd2.php Removed Paths: ------------- trunk/Jmol/appletweb/jmolcd.php Modified: trunk/Jmol/appletweb/JmolCD.js =================================================================== --- trunk/Jmol/appletweb/JmolCD.js 2012-04-17 14:45:20 UTC (rev 17011) +++ trunk/Jmol/appletweb/JmolCD.js 2012-04-17 15:47:04 UTC (rev 17012) @@ -1,5 +1,7 @@ // JmolCD.js -- Jmol ChemDoodle extension author: Bob Hanson, ha...@st... 4/16/2012 +// last revision: 4/17/2012 + // allows Jmol applets to be created on a page with more flexibility and extendability // possibly using infrastructure of ChemDoodle. @@ -153,7 +155,7 @@ } Jmol.loadFileData = function(fileName, fSuccess, fError){ - this.inRelay?alert("Already connecting to the server - please wait for the first request to finish."): + Jmol.inRelay?alert("Already connecting to the server - please wait for the first request to finish."): (Jmol.inRelay=!0, jQuery.ajax({ dataType: "text", @@ -167,7 +169,7 @@ } Jmol.contactServer = function(cmd,content,fSuccess,fError){ - this.inRelay?alert("Already connecting to the server - please wait for the previous request to finish."): + Jmol.inRelay?alert("Already connecting to the server - please wait for the previous request to finish."): (Jmol.inRelay=!0, jQuery.ajax({ dataType: "text", @@ -431,7 +433,7 @@ var factor = cdcanvas.dataMultiplier; data = Jmol.cdCleanFileData(data); var molecule; - switch(canvas.jmolFileType) { + switch(cdcanvas.jmolFileType) { case "PDB": case "PQR": molecule = ChemDoodle.readPDB(data, 1); Deleted: trunk/Jmol/appletweb/jmolcd.php =================================================================== --- trunk/Jmol/appletweb/jmolcd.php 2012-04-17 14:45:20 UTC (rev 17011) +++ trunk/Jmol/appletweb/jmolcd.php 2012-04-17 15:47:04 UTC (rev 17012) @@ -1,65 +0,0 @@ -<?php - -// ChemDoodle server using JmolData.jar in silent restricted mode -// requires JmolData.jar version 12.3.22 -// Bob Hanson ha...@st... 4/8/2012 - -function getValueSimple($json, $key, $default) { - $key = '"'.$key.'"'; - list($junk,$info) = explode($key, $json, 2); - list($junk,$val) = explode('"', $info, 3); - if ($val == "") { - $val = $default; - } -//echo(" json=$json"); -//echo(" key=$key"); -//echo(" info=$info"); -//echo(" val=$val"); -return $val; -} - -$values= file_get_contents("php://input"); -//$values = '{"call":"getMoleculeFromDatabase","query":"morphine"}'; - -$uri = $_SERVER["REQUEST_URI"]; - -$call = getValueSimple($values, "call", "getMoleculeFromDatabase"); - -if ($call == "getRawDataFromDatabase") { - $query = getValueSimple($values, "query", "morphine"); - $format = getValueSimple($values, "format", "MOL"); - // note: ChemDoodle coordinates in JSON are factored by [20, -20, 20] - // we use select molecule=1 because some salts are retrieved by NCI, and we want to ignore them - // it's not perfect. - $cmd = '/home/mscs/common/bin32/java -Djava.awt.headless=true -jar JmolData.jar -iRJ "load \\"\\$'.$query.'\\"; n = ({molecule=1}.length < {molecule=2}.length ? 2 : 1); select molecule=n;write '.$format.'"'; - - exec($cmd, $result); - $output = implode("\n",$result); -} else if ($call == "getMoleculeFromDatabase") { - $query = getValueSimple($values, "query", "morphine"); - $format = getValueSimple($values, "format", "CD"); - // note: ChemDoodle coordinates in JSON are factored by [20, -20, 20] - // we use select molecule=1 because some salts are retrieved by NCI, and we want to ignore them - // it's not perfect. - $cmd = '/home/mscs/common/bin32/java -Djava.awt.headless=true -jar JmolData.jar -iRJ "load \\"\\$'.$query.'\\"; n = ({molecule=1}.length < {molecule=2}.length ? 2 : 1); select molecule=n;write '.$format.'"'; - - exec($cmd, $result); - $result = implode($result); - $output = "{\"jmolcd_message\":\"$call - $query\",\"values\":$values,\"content\":$result}"; -} else { - // just the test result -- penicillin - $result = '{"mol":{"a":[{"x":78.474,"y":18.444,"z":3.67},{"x":64.958,"y":64.212006,"z":7.6419997},{"x":103.462,"y":26.569998,"z":-4.9280005},{"x":89.946,"y":72.338,"z":-0.956},{"x":109.19601,"y":53.517998,"z":-7.2460003},{"x":31.98,"y":28.406,"z":19.326},{"x":-84.273994,"y":-16.376001,"z":51.858},{"x":-115.051994,"y":-3.2080002,"z":14.070001},{"l":"H","x":-18.426,"y":13.716001,"z":17.006},{"x":59.22,"y":37.264,"z":9.952001},{"l":"O","x":-99.78,"y":-50.052002,"z":-24.666002},{"l":"O","x":-25.512001,"y":-33.281998,"z":-38.72},{"l":"O","x":22.08,"y":29.476002,"z":-26.811998},{"l":"O","x":-92.08,"y":-69.404,"z":14.316},{"x":-88.61001,"y":-49.4,"z":-3.246},{"x":13.762001,"y":25.081999,"z":-4.454},{"x":-70.782,"y":-26.126001,"z":3.75},{"x":-29.484001,"y":14.0,"z":-23.994},{"x":-37.694,"y":-14.437999,"z":-29.506},{"l":"H","x":-103.7,"y":-83.898,"z":8.932},{"l":"N","x":-11.774,"y":17.23,"z":-0.8759999},{"x":-59.156,"y":16.960001,"z":-17.647999},{"x":-85.96,"y":-6.886,"z":22.816},{"l":"S","x":-66.38,"y":23.898,"z":17.618},{"l":"N","x":-63.18,"y":-11.977999,"z":-20.772},{"l":"H","x":-52.845997,"y":-33.494,"z":13.710001},{"l":"H","x":-70.414,"y":29.387997,"z":-31.578003},{"l":"H","x":-93.138,"y":-36.222,"z":53.544},{"l":"H","x":-95.102005,"y":-2.47,"z":64.688},{"l":"H","x":-63.384,"y":-17.2,"z":58.034},{"l":"H","x":-115.588,"y":5.1380005,"z":-6.062},{"l":"H","x":-125.116005,"y":10.374001,"z":27.836},{"l":"H","x":-125.17799,"y":-22.512,"z":14.205999},{"l":"H","x":-22.886,"y":25.046001,"z":-41.592003},{"l":"H","x":23.692,"y":43.415993,"z":32.788},{"l":"H","x":33.742,"y":9.392,"z":29.842},{"l":"H","x":74.024,"y":-2.606,"z":5.568},{"l":"H","x":49.914,"y":78.914,"z":12.550001},{"l":"H","x":118.50201,"y":11.865999,"z":-9.842},{"l":"H","x":94.43,"y":93.39,"z":-2.7519999},{"l":"H","x":128.714,"y":59.865997,"z":-13.978}],"b":[{"b":10,"e":14,"o":2},{"b":13,"e":14},{"b":14,"e":16},{"b":16,"e":24},{"b":16,"e":22},{"b":21,"e":24},{"b":18,"e":24},{"b":6,"e":22},{"b":7,"e":22},{"b":22,"e":23},{"b":21,"e":23},{"b":17,"e":21},{"b":17,"e":18},{"b":11,"e":18,"o":2},{"b":17,"e":20},{"b":15,"e":20},{"b":5,"e":15},{"b":12,"e":15,"o":2},{"b":5,"e":9},{"b":0,"e":9,"o":2},{"b":1,"e":9},{"b":0,"e":2},{"b":1,"e":3,"o":2},{"b":2,"e":4,"o":2},{"b":3,"e":4},{"b":13,"e":19},{"b":16,"e":25},{"b":21,"e":26},{"b":6,"e":27},{"b":6,"e":28},{"b":6,"e":29},{"b":7,"e":30},{"b":7,"e":31},{"b":7,"e":32},{"b":17,"e":33},{"b":8,"e":20},{"b":5,"e":34},{"b":5,"e":35},{"b":0,"e":36},{"b":1,"e":37},{"b":2,"e":38},{"b":3,"e":39},{"b":4,"e":40}]}}'; - $result = implode($result); - $output = "{\"jmolcd_message\":\"$call - $query\",\"values\":$values,\"content\":$result}"; -} -ob_start(); -header('Access-Control-Allow-Origin: *'); -header('Last-Modified: '.date('r')); -header('Accept-Ranges: bytes'); -header('Content-Length: '.strlen($output)); -header('Content-Type: application/json'); -print($output); -ob_end_flush(); - -?> - Added: trunk/Jmol/appletweb/jmolcd2.php =================================================================== --- trunk/Jmol/appletweb/jmolcd2.php (rev 0) +++ trunk/Jmol/appletweb/jmolcd2.php 2012-04-17 15:47:04 UTC (rev 17012) @@ -0,0 +1,116 @@ +<?php + +// ChemDoodle server using JmolData.jar in silent restricted mode +// requires JmolData.jar version 12.3.22 +// Bob Hanson ha...@st... 4/8/2012-4/13/2012 + +$cmd = '/home/mscs/common/bin32/java -Djava.awt.headless=true -jar JmolData.jar -iRJ '; + + +function getValueSimple($json, $key, $default) { + + // just do a crude check for "key"..."value" -- nothing more than that; + // only for very simple key/value pairs; mostly because we don't have the JSON + // module set up for our server. + + list($junk,$info) = explode('"'.$key.'"', $json, 2); + list($junk,$val) = explode('"', $info, 3); + if ($val == "") { + $val = str_replace('"','_',$_REQUEST[$key]); + } + if ($val == "") { + $val = $default; + } + return $val; +} + +function getDatabase($values) { + $database = getValueSimple($values, "database", "$"); + if ($database == "$") { + $database = '\\$'; + } + return $database; +} + + +$values= file_get_contents("php://input"); +$call = getValueSimple($values, "call", "getMoleculeFromDatabase"); +$query = getValueSimple($values, "query", "morphine"); +$database = getDatabase($values); +$postLoad = getValueSimple($values, "script",""); + +$imagedata = ""; +$output = ""; + +if ($call == "getImageForFileLoad" || $call == "getImageFromDatabase") { + + // max size for image is 1000x1000 + + $imagefile = "/tmp/img".rand().".png"; + $width = $_REQUEST[width]; + $height = $_REQUEST[height]; + + if (!$width || $width > 1000) { + $width = 300; + } + if (!$height || $height > 1000) { + $height = 300; + } + if ($call == "getImageFromDatabase") { + $cmd = $cmd.'"load \\"'.$database.$query.'\\"'.$postLoad.'" -g'.$width.'x'.$height.' -wPNG:'.$imagefile; + } else { + $file = $_REQUEST[file]; + $params = $_REQUEST[params]; + $cmd = $cmd.'"load \\"'.$file.'\\" '.$params.'" -g'.$width.'x'.$height.' -wPNG:'.$imagefile; + } + exec($cmd, $v); + $imagedata = file_get_contents($imagefile); + +} else if ($call == "getRawDataFromDatabase") { + + if ($database == '\\$') { + $cmd = $cmd.'"load \\"'.$database.$query.'\\"'.$postLoad.';write MOL"'; + } else { + $cmd = $cmd.'"print load(\\"'.$database.$query.'\\")"'; + } + exec($cmd, $result); + $output = implode("\n",$result); + +} else if ($call == "getMoleculeFromDatabase") { + + // note: ChemDoodle coordinates in JSON are factored by [20, -20, 20] + // we use select molecule=1 because some salts are retrieved by NCI, and we want to ignore them + // it's not perfect. + + $query = getValueSimple($values, "query", "morphine"); + $cmd = $cmd.'"load \\"'.$database.$query.'\\"'.$postLoad.';write CD"'; + exec($cmd, $result); + $result = implode($result); + $output = "{\"jmolcd_message\":\"$call - $query\",\"values\":$values,\"content\":$result}"; + +} else { + + + // just the test result -- penicillin + $result = '{"mol":{"a":[{"x":78.474,"y":18.444,"z":3.67},{"x":64.958,"y":64.212006,"z":7.6419997},{"x":103.462,"y":26.569998,"z":-4.9280005},{"x":89.946,"y":72.338,"z":-0.956},{"x":109.19601,"y":53.517998,"z":-7.2460003},{"x":31.98,"y":28.406,"z":19.326},{"x":-84.273994,"y":-16.376001,"z":51.858},{"x":-115.051994,"y":-3.2080002,"z":14.070001},{"l":"H","x":-18.426,"y":13.716001,"z":17.006},{"x":59.22,"y":37.264,"z":9.952001},{"l":"O","x":-99.78,"y":-50.052002,"z":-24.666002},{"l":"O","x":-25.512001,"y":-33.281998,"z":-38.72},{"l":"O","x":22.08,"y":29.476002,"z":-26.811998},{"l":"O","x":-92.08,"y":-69.404,"z":14.316},{"x":-88.61001,"y":-49.4,"z":-3.246},{"x":13.762001,"y":25.081999,"z":-4.454},{"x":-70.782,"y":-26.126001,"z":3.75},{"x":-29.484001,"y":14.0,"z":-23.994},{"x":-37.694,"y":-14.437999,"z":-29.506},{"l":"H","x":-103.7,"y":-83.898,"z":8.932},{"l":"N","x":-11.774,"y":17.23,"z":-0.8759999},{"x":-59.156,"y":16.960001,"z":-17.647999},{"x":-85.96,"y":-6.886,"z":22.816},{"l":"S","x":-66.38,"y":23.898,"z":17.618},{"l":"N","x":-63.18,"y":-11.977999,"z":-20.772},{"l":"H","x":-52.845997,"y":-33.494,"z":13.710001},{"l":"H","x":-70.414,"y":29.387997,"z":-31.578003},{"l":"H","x":-93.138,"y":-36.222,"z":53.544},{"l":"H","x":-95.102005,"y":-2.47,"z":64.688},{"l":"H","x":-63.384,"y":-17.2,"z":58.034},{"l":"H","x":-115.588,"y":5.1380005,"z":-6.062},{"l":"H","x":-125.116005,"y":10.374001,"z":27.836},{"l":"H","x":-125.17799,"y":-22.512,"z":14.205999},{"l":"H","x":-22.886,"y":25.046001,"z":-41.592003},{"l":"H","x":23.692,"y":43.415993,"z":32.788},{"l":"H","x":33.742,"y":9.392,"z":29.842},{"l":"H","x":74.024,"y":-2.606,"z":5.568},{"l":"H","x":49.914,"y":78.914,"z":12.550001},{"l":"H","x":118.50201,"y":11.865999,"z":-9.842},{"l":"H","x":94.43,"y":93.39,"z":-2.7519999},{"l":"H","x":128.714,"y":59.865997,"z":-13.978}],"b":[{"b":10,"e":14,"o":2},{"b":13,"e":14},{"b":14,"e":16},{"b":16,"e":24},{"b":16,"e":22},{"b":21,"e":24},{"b":18,"e":24},{"b":6,"e":22},{"b":7,"e":22},{"b":22,"e":23},{"b":21,"e":23},{"b":17,"e":21},{"b":17,"e":18},{"b":11,"e":18,"o":2},{"b":17,"e":20},{"b":15,"e":20},{"b":5,"e":15},{"b":12,"e":15,"o":2},{"b":5,"e":9},{"b":0,"e":9,"o":2},{"b":1,"e":9},{"b":0,"e":2},{"b":1,"e":3,"o":2},{"b":2,"e":4,"o":2},{"b":3,"e":4},{"b":13,"e":19},{"b":16,"e":25},{"b":21,"e":26},{"b":6,"e":27},{"b":6,"e":28},{"b":6,"e":29},{"b":7,"e":30},{"b":7,"e":31},{"b":7,"e":32},{"b":17,"e":33},{"b":8,"e":20},{"b":5,"e":34},{"b":5,"e":35},{"b":0,"e":36},{"b":1,"e":37},{"b":2,"e":38},{"b":3,"e":39},{"b":4,"e":40}]}}'; + $result = implode($result); + $output = "{\"message\":\"$call - $query - $cmd\",\"values\":$values,\"content\":$result}"; + +} + +ob_start(); + if ($imagedata != "") { + $output = $imagedata; + header('Content-Type: image/png'); + } else { + header('Access-Control-Allow-Origin: *'); + header('Content-Type: application/json'); + } + header('Last-Modified: '.date('r')); + header('Accept-Ranges: bytes'); + header('Content-Length: '.strlen($output)); + print($output); +ob_end_flush(); + +?> + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2012-04-18 14:43:49
|
Revision: 17013 http://jmol.svn.sourceforge.net/jmol/?rev=17013&view=rev Author: hansonr Date: 2012-04-18 14:43:37 +0000 (Wed, 18 Apr 2012) Log Message: ----------- Jmol/ChemDoodle option to show/hide applet information -- involves a wrapper; probably breaks applet resizing Modified Paths: -------------- trunk/Jmol/appletweb/JmolCD.js trunk/Jmol/appletweb/test2.htm Modified: trunk/Jmol/appletweb/JmolCD.js =================================================================== --- trunk/Jmol/appletweb/JmolCD.js 2012-04-17 15:47:04 UTC (rev 17012) +++ trunk/Jmol/appletweb/JmolCD.js 2012-04-18 14:43:37 UTC (rev 17013) @@ -34,7 +34,7 @@ fileLoadScript: ";if (_loadScript = '' && defaultLoadScript == '' && _filetype == 'Pdb') { select protein or nucleic;cartoons Only;color structure; select * };", asynchronous: !0, getVersion: function(){return version}, - }; + } })(); (function (Jmol) { @@ -107,7 +107,7 @@ applet.specs.set3DRepresentation('Ball and Stick'); applet.specs.backgroundColor = 'black'; } else { - applet = new Jmol.Canvas(Info.id+"_2D", Info.width, Info.height, + applet = new Jmol.Canvas(Info.id, Info.width, Info.height, (Info.debug ? "<br />(No WebGL: Jmol.Canvas)" : null), Info.addSelectionOptions); applet.specs.bonds_useJMOLColors = true; @@ -130,6 +130,35 @@ return applet; } + // Jmol core functionality + + Jmol.getWrapper = function(applet, isHeader) { + var s = (isHeader ? + "<div id=ID_appletinfotablediv style=width:Wpx;height:Hpx>\ + <table><tr><td></td><td><div id=ID_infotablediv style=width:Wpx;height:Hpx;display:none>\ + <table><tr height=20><td style=background:yellow><span id=ID_infoheaderdiv></span></td>\ + <td width=10><a href=javascript:Jmol.showInfo(ID,false)>[x]</a></td></tr><tr><td colspan=2>\ + <div id=ID_infodiv style=overflow:scroll;width:Wpx;height:Hpx></div></td></tr></table></div></td></tr>\ + <tr><td><div id=ID_appletdiv style=width:Wpx;height:Hpx>" + :"</div></td><td></td></tr></table></div>" + ).replace(/H/g, applet.height).replace(/W/g, applet.width).replace(/ID/g, applet.id); + document.write(s); + } + + Jmol.showInfo = function(applet, tf) { + document.getElementById(applet.id + "_infotablediv").style.display = (tf ? "block" : "none"); + document.getElementById(applet.id + "_appletdiv").style.height = (tf ? 1 : applet.height); + document.getElementById(applet.id + "_appletdiv").style.width = (tf ? 1 : applet.width); + applet.show(!tf); + document.getElementById(applet.id + "_infoheaderdiv").innerHTML = applet.getInfoHeader(); + document.getElementById(applet.id + "_infodiv").innerHTML = applet.getInfo(); + } + + Jmol.searchQuery = function(applet, query) { + jQuery("#"+applet.id+"_query").val(query); + applet.search(query.replace(/\"/g, "")); + } + Jmol.getScript = function(database, model) { return (database == "$" ? Jmol.nciLoadScript : Jmol.fileLoadScript); } @@ -190,17 +219,23 @@ // Applet -- an alternative to _Canvas3D // -- loads the Jmol applet instead of ChemDoodle - Jmol.Applet = function(id,c,h, jmolDirectory, appJar, jmolIsSigned, readyFunctionName, caption, addOptions){ + Jmol.Applet = function(id, width, height, jmolDirectory, appJar, jmolIsSigned, readyFunctionName, caption, addOptions){ + this.jmolType = "Jmol.Applet" + (jmolIsSigned ? " (signed)" : ""); this.id = id; + this.width = width; + this.height = height; this.jmolIsSigned = jmolIsSigned; this.dataMultiplier=1; jmolInitialize(jmolDirectory, appJar); readyFunctionName && jmolSetParameter("appletReadyCallback", readyFunctionName); var script = ""; - jmolApplet([c,h],script, id); + + Jmol.getWrapper(this, true); + jmolApplet(["100%","100%"],script, id); + Jmol.getWrapper(this, false); if (addOptions) Jmol.getGrabberOptions(this, id, caption); - return this; + return this; } Jmol.Applet.prototype.setSearchTerm = function(b){ @@ -212,6 +247,18 @@ + Jmol.fileLoadScript); } + Jmol.Applet.prototype.show = function(tf) { + _jmolFindApplet("jmolApplet" + this.id).resize(tf ? this.width : 1, tf ? this.height : 1); + } + + Jmol.Applet.prototype.getInfo = function(tf) { + return _jmolFindApplet("jmolApplet" + this.id).getPropertyAsString("modelInfo"); + } + + Jmol.Applet.prototype.getInfoHeader = function(tf) { + return this.jmolType + ' "' + this.id + '"'; + } + Jmol.Applet.prototype.script = function(script) { _jmolFindApplet("jmolApplet" + this.id).script(script); } @@ -239,7 +286,7 @@ else if (database == "=") this.jmolFileType = "PDB"; this.searchDatabase(model, database); - }; + } Jmol.Applet.prototype.searchDatabase = function(model, database){ if (this.jmolIsSigned) { @@ -258,20 +305,36 @@ // Image -- another alternative to _Canvas Jmol.Image = function(id,width,height, caption, addOptions){ + this.jmolType = "image"; this.id = id; - this.imgWidth = width; - this.imgHeight = height; + this.width = width; + this.height = height; var img = '<img id="'+id+'_image" width="' + width + '" height="' + height + '" src=""/>'; + Jmol.getWrapper(this, true); document.write(img); + Jmol.getWrapper(this, false); if (addOptions) Jmol.getGrabberOptions(this, id, caption); return this; } + Jmol.Image.prototype.show = function(tf) { + document.getElementById(this.id + "_appletdiv").style.display = (tf ? "block" : "none"); + } + + Jmol.Image.prototype.getInfo = function(tf) { + return JSON.stringify(this); + } + + Jmol.Image.prototype.getInfoHeader = function(tf) { + return this.jmolType + ' "' + this.id + '"'; + } + Jmol.Image.prototype.search = Jmol.Applet.prototype.search; Jmol.Image.prototype.setSearchTerm = Jmol.Applet.prototype.setSearchTerm; Jmol.Image.prototype.loadFile = function(fileName, params){ + this.thisJmolModel = "" + Math.random(); params = (params ? params : ""); if (fileName.indexOf("://") < 0 && fileName.indexOf("=") != 0 && fileName.indexOf("$") != 0) { var ref = document.location.href @@ -281,19 +344,21 @@ var src = Jmol.Jmol.SERVER_URL + "?call=getImageForFileLoad" + "&file=" + fileName - + "&width=" + this.imgWidth - + "&height=" + this.imgHeight + + "&width=" + this.width + + "&height=" + this.height + "¶ms=" + escape(params); + "&script=" + Jmol.getScriptForModel(database, model); + Jmol.getWrapper(this, true); document.getElementById(this.id + "_image").src = src; + Jmol.getWrapper(this, false); } Jmol.Image.prototype.searchDatabase = function(model, database){ var src = Jmol.SERVER_URL + "?call=getImageFromDatabase" + "&query=" + model; - + "&width=" + this.imgWidth - + "&height=" + this.imgHeight + + "&width=" + this.width + + "&height=" + this.height + "&database=" + database + "&script=" + Jmol.getScriptForModel(database, model); document.getElementById(this.id + "_image").src = src; @@ -340,13 +405,6 @@ ); } - // Jmol core functionality - - Jmol.searchQuery = function(applet, query) { - jQuery("#"+applet.id+"_query").val(query); - applet.search(query.replace(/\"/g, "")); - } - if (!ChemDoodle) return; @@ -359,18 +417,30 @@ // new: Applet, Image - Jmol.Canvas3D = function(b,c,h,caption,addOptions){ - b&&this.create(b,c,h); + Jmol.Canvas3D = function(id,width,height,caption,addOptions){ + this.jmolType = "Jmol.Canvas3D"; + this.id = id; + this.width = width; + this.height = height; + Jmol.getWrapper(this, true); + this.create(id,width,height); + Jmol.getWrapper(this, false); this.dataMultiplier=1; if (addOptions) - Jmol.getGrabberOptions(this, b,caption); // just for this test page + Jmol.getGrabberOptions(this, id, caption); // just for this test page return this } // MolGrabberCanvas changes add a dataMultiplier, subclasses TransformCanvas, modifies display options - Jmol.Canvas = function(b,c,h,caption, addOptions){ - b&&this.create(b,c,h); + Jmol.Canvas = function(id,width,height,caption, addOptions){ + this.jmolType = "Jmol.Canvas"; + this.id = id; + this.width = width; + this.height = height; + Jmol.getWrapper(this, true); + this.create(id,width,height); + Jmol.getWrapper(this, false); this.lastPoint=null; this.rotate3D=true; this.rotationMultMod=1.3; @@ -378,15 +448,27 @@ this.lastGestureRotate=0; this.dataMultiplier=20; if (addOptions) - Jmol.getGrabberOptions(this,b,caption); + Jmol.getGrabberOptions(this,id,caption); return this; } var cdSetPrototype = function(proto) { + proto.show = function(tf) { + document.getElementById(this.id + "_appletdiv").style.display = (tf ? "block" : "none"); + } + + proto.getInfo = function() { + return JSON.stringify(Jmol).replace(/\,/g,",<br>"); + } + + proto.getInfoHeader = function() { + return this.jmolType + ' "' + this.id + '"'; + } + proto.setSearchTerm = function(b){ Jmol.searchQuery(this, b); - }; + } proto.search = Jmol.Applet.prototype.search; @@ -400,29 +482,27 @@ model, function(data){Jmol.cdProcessFileData(c, data)} ); - }; + } proto.loadFile = function(fileName, params){ - Jmol.cdLoadFile(this, fileName, params); - }; + this.thisJmolModel = "" + Math.random(); + this.emptyMessage="Searching..."; + this.molecule=null; + this.repaint(); + this.jmolFileType = Jmol.cdGetFileType(fileName); + var cdcanvas = this; + Jmol.loadFileData( + fileName, + function(data){Jmol.cdProcessFileData(cdcanvas, data)} + ); + } return proto; } Jmol.Canvas3D.prototype = cdSetPrototype(new ChemDoodle._Canvas3D); Jmol.Canvas.prototype = cdSetPrototype(new ChemDoodle.TransformCanvas); - - Jmol.cdLoadFile = function(cdcanvas, fileName){ - cdcanvas.emptyMessage="Searching..."; - cdcanvas.molecule=null; - cdcanvas.repaint(); - cdcanvas.jmolFileType = Jmol.cdGetFileType(fileName); - Jmol.loadFileData( - fileName, - function(data){Jmol.cdProcessFileData(cdcanvas, data)} - ); - } - + Jmol.cdGetFileType = function(name) { // just the extension, which must be PDB, XYZ..., CIF, or MOL name = name.split('.').pop().toUpperCase(); Modified: trunk/Jmol/appletweb/test2.htm =================================================================== --- trunk/Jmol/appletweb/test2.htm 2012-04-17 15:47:04 UTC (rev 17012) +++ trunk/Jmol/appletweb/test2.htm 2012-04-18 14:43:37 UTC (rev 17013) @@ -29,13 +29,13 @@ var useImageOnly = (document.location.href.indexOf("IMAGE") >= 0); var useSignedApplet = (document.location.href.indexOf("SIGNED") >= 0); - jmol_isReady = function(app,isReady) { + jmol_isReady = function(app,appFull,isReady) { if (!isReady) return; applet.setSearchTerm(Info.defaultModel); } var Info = { - id: "molgrabber1", + id: "applet", // must be the same as the variable name width: 300, height: 300, debug: true, @@ -57,6 +57,8 @@ <body> <table width=900 cellpadding=10><tr><td> <script>applet = Jmol.getApplet(Info)</script> + <br><a href="javascript:Jmol.showInfo(applet, true)">show info</a> + <a href="javascript:Jmol.showInfo(applet, false)">hide info</a> </td><td valign=top> If we're lucky, this is the first Jmol page that automatically switches to different modes depending upon browser capabilities. It can use the signed Jmol applet, the unsigned Jmol applet This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2012-04-19 06:52:53
|
Revision: 17018 http://jmol.svn.sourceforge.net/jmol/?rev=17018&view=rev Author: hansonr Date: 2012-04-19 06:52:41 +0000 (Thu, 19 Apr 2012) Log Message: ----------- Jmol/ChemDoodle =xxxx? query does a keyword search at RCSB (applet only) Modified Paths: -------------- trunk/Jmol/appletweb/JmolCD.js trunk/Jmol/appletweb/test2.htm Modified: trunk/Jmol/appletweb/JmolCD.js =================================================================== --- trunk/Jmol/appletweb/JmolCD.js 2012-04-19 03:17:59 UTC (rev 17017) +++ trunk/Jmol/appletweb/JmolCD.js 2012-04-19 06:52:41 UTC (rev 17018) @@ -138,7 +138,7 @@ <table><tr><td></td><td><div id=ID_infotablediv style=width:Wpx;height:Hpx;display:none>\ <table><tr height=20><td style=background:yellow><span id=ID_infoheaderdiv></span></td>\ <td width=10><a href=javascript:Jmol.showInfo(ID,false)>[x]</a></td></tr><tr><td colspan=2>\ - <div id=ID_infodiv style=overflow:scroll;width:Wpx;height:Hpx></div></td></tr></table></div></td></tr>\ + <div id=ID_infodiv style=overflow:scroll;width:Wpx;height:" + (applet.height - 15) + "px></div></td></tr></table></div></td></tr>\ <tr><td><div id=ID_appletdiv style=width:Wpx;height:Hpx>" :"</div></td><td></td></tr></table></div>" ).replace(/H/g, applet.height).replace(/W/g, applet.width).replace(/ID/g, applet.id); @@ -150,16 +150,17 @@ document.getElementById(applet.id + "_appletdiv").style.height = (tf ? 1 : applet.height); document.getElementById(applet.id + "_appletdiv").style.width = (tf ? 1 : applet.width); applet.show(!tf); - document.getElementById(applet.id + "_infoheaderdiv").innerHTML = applet.getInfoHeader(); - document.getElementById(applet.id + "_infodiv").innerHTML = applet.getInfo(); + document.getElementById(applet.id + "_infoheaderdiv").innerHTML = applet.infoHeader; + document.getElementById(applet.id + "_infodiv").innerHTML = applet.info; } Jmol.searchQuery = function(applet, query) { - jQuery("#"+applet.id+"_query").val(query); + if (applet.hasOptions) + jQuery("#"+applet.id+"_query").val(query); applet.search(query.replace(/\"/g, "")); } - Jmol.getScript = function(database, model) { + Jmol.getScriptForModel = function(database, model) { return (database == "$" ? Jmol.nciLoadScript : Jmol.fileLoadScript); } @@ -167,11 +168,54 @@ var c=this; this.contactServer( "getRawDataFromDatabase", - {database:database,dimension:3,query:query,script:Jmol.getScript(database)}, + {database:database,dimension:3,query:query,script:Jmol.getScriptForModel(database)}, fSuccess, fError ) } + Jmol.getInfoFromDatabase = function(applet, query, database){ + var c=this; + this.contactServer( + "getInfoFromDatabase", + {database:database,query:query}, + function(data) { Jmol.setInfo(database, applet, data) } + ) + } + + /* + This XML file does not appear to have any style information associated with it. The document tree is shown below. + <dataset><record><structureId>1BLU</structureId><structureTitle>STRUCTURE OF THE 2[4FE-4S] FERREDOXIN FROM CHROMATIUM VINOSUM</structureTitle></record><record><structureId>3EUN</structureId><structureTitle>Crystal structure of the 2[4Fe-4S] C57A ferredoxin variant from allochromatium vinosum</structureTitle></record></dataset> + + */ + Jmol.setInfo = function(database, applet, data) { + var info = []; + var header = ""; + if (data.indexOf("ERROR") == 0) + header = data; + else + switch (database) { + case "=": + var S = data.split("<structureId>"); + var info = ["<table>"]; + for (var i = 1; i < S.length; i++) { + info.push("<tr><td valign=top><a href=\"javascript:Jmol.showInfo(" + applet.id + ",false);" + applet.id + ".setSearchTerm('=" + S[i].substring(0, 4) + "')\">" + S[i].substring(0, 4) + "</a></td>"); + info.push("<td>" + S[i].split("Title>")[1].split("</")[0] + "</td></tr>"); + } + info.push("</table>"); + header = (S.length - 1) + " matches"; + break; + case "$": + break; + case "#": // pubChem + break; + default: + return; + } + applet.infoHeader = header; + applet.info = info.join(""); + Jmol.showInfo(applet, true); + } + Jmol.loadSuccess = function(a, fSuccess) { Jmol.inRelay=!1; fSuccess(a); @@ -226,6 +270,9 @@ this.height = height; this.jmolIsSigned = jmolIsSigned; this.dataMultiplier=1; + this.haveOptions = addOptions; + this.info = JSON.stringify(this); + this.infoHeader = this.jmolType + ' "' + this.id + '"' jmolInitialize(jmolDirectory, appJar); readyFunctionName && jmolSetParameter("appletReadyCallback", readyFunctionName); var script = ""; @@ -239,6 +286,7 @@ } Jmol.Applet.prototype.setSearchTerm = function(b){ + this.script("zap;set echo middle center;echo Retrieving data..."); Jmol.searchQuery(this, b); } @@ -251,14 +299,6 @@ _jmolFindApplet("jmolApplet" + this.id).resize(tf ? this.width : 1, tf ? this.height : 1); } - Jmol.Applet.prototype.getInfo = function(tf) { - return _jmolFindApplet("jmolApplet" + this.id).getPropertyAsString("modelInfo"); - } - - Jmol.Applet.prototype.getInfoHeader = function(tf) { - return this.jmolType + ' "' + this.id + '"'; - } - Jmol.Applet.prototype.script = function(script) { _jmolFindApplet("jmolApplet" + this.id).script(script); } @@ -272,13 +312,13 @@ Jmol.Applet.prototype.search = function(model){ model || (model = jQuery("#"+this.id+"_query").val().replace(/\"/g, "")); - database = jQuery("#"+this.id+"_select").val(); + database = (this.hasOptions ? jQuery("#"+this.id+"_select").val() : "$"); if (model.indexOf("=") == 0 || model.indexOf("$") == 0) { database = model.substring(0, 1); model = model.substring(1); } var dm = database + model; - if (!model || model && dm == this.thisJmolModel) + if (!model || dm.indexOf("?") < 0 && dm == this.thisJmolModel) return; this.thisJmolModel = dm; if (database == "$") @@ -289,6 +329,10 @@ } Jmol.Applet.prototype.searchDatabase = function(model, database){ + if (model.indexOf("?") >= 0) { + Jmol.getInfoFromDatabase(this, model.split("?")[0], database); + return; + } if (this.jmolIsSigned) { var postLoad = (database == "$" ? Jmol.nciPostLoadScript : ""); this.script("load \"" + dm + "\"" + postLoad); @@ -309,6 +353,9 @@ this.id = id; this.width = width; this.height = height; + this.haveOptions = addOptions; + this.info = JSON.stringify(this); + this.infoHeader = this.jmolType + ' "' + this.id + '"' var img = '<img id="'+id+'_image" width="' + width + '" height="' + height + '" src=""/>'; Jmol.getWrapper(this, true); document.write(img); @@ -322,14 +369,6 @@ document.getElementById(this.id + "_appletdiv").style.display = (tf ? "block" : "none"); } - Jmol.Image.prototype.getInfo = function(tf) { - return JSON.stringify(this); - } - - Jmol.Image.prototype.getInfoHeader = function(tf) { - return this.jmolType + ' "' + this.id + '"'; - } - Jmol.Image.prototype.search = Jmol.Applet.prototype.search; Jmol.Image.prototype.setSearchTerm = Jmol.Applet.prototype.setSearchTerm; @@ -347,7 +386,7 @@ + "&width=" + this.width + "&height=" + this.height + "¶ms=" + escape(params); - + "&script=" + Jmol.getScriptForModel(database, model); + + "&script=frank off;" + Jmol.getScriptForModel(database, model); Jmol.getWrapper(this, true); document.getElementById(this.id + "_image").src = src; Jmol.getWrapper(this, false); @@ -360,7 +399,7 @@ + "&width=" + this.width + "&height=" + this.height + "&database=" + database - + "&script=" + Jmol.getScriptForModel(database, model); + + "&script=frank off;" + Jmol.getScriptForModel(database, model); document.getElementById(this.id + "_image").src = src; } @@ -422,10 +461,13 @@ this.id = id; this.width = width; this.height = height; + this.haveOptions = addOptions; + this.dataMultiplier=1; + this.info = JSON.stringify(this); + this.infoHeader = this.jmolType + ' "' + this.id + '"' Jmol.getWrapper(this, true); this.create(id,width,height); Jmol.getWrapper(this, false); - this.dataMultiplier=1; if (addOptions) Jmol.getGrabberOptions(this, id, caption); // just for this test page return this @@ -433,11 +475,14 @@ // MolGrabberCanvas changes add a dataMultiplier, subclasses TransformCanvas, modifies display options - Jmol.Canvas = function(id,width,height,caption, addOptions){ + Jmol.Canvas = function(id, width, height, caption, addOptions){ this.jmolType = "Jmol.Canvas"; this.id = id; this.width = width; this.height = height; + this.haveOptions = addOptions; + this.info = JSON.stringify(this); + this.infoHeader = this.jmolType + ' "' + this.id + '"' Jmol.getWrapper(this, true); this.create(id,width,height); Jmol.getWrapper(this, false); @@ -448,7 +493,7 @@ this.lastGestureRotate=0; this.dataMultiplier=20; if (addOptions) - Jmol.getGrabberOptions(this,id,caption); + Jmol.getGrabberOptions(this, id, caption); return this; } @@ -458,14 +503,6 @@ document.getElementById(this.id + "_appletdiv").style.display = (tf ? "block" : "none"); } - proto.getInfo = function() { - return JSON.stringify(Jmol).replace(/\,/g,",<br>"); - } - - proto.getInfoHeader = function() { - return this.jmolType + ' "' + this.id + '"'; - } - proto.setSearchTerm = function(b){ Jmol.searchQuery(this, b); } Modified: trunk/Jmol/appletweb/test2.htm =================================================================== --- trunk/Jmol/appletweb/test2.htm 2012-04-19 03:17:59 UTC (rev 17017) +++ trunk/Jmol/appletweb/test2.htm 2012-04-19 06:52:41 UTC (rev 17018) @@ -96,7 +96,13 @@ <a href="javascript:applet.loadFile('y1237.cif', '{1 1 1}')">load y1237.cif</a> <br /> <a href="javascript:applet.loadFile('quartz.cif', '{1 1 1}')">load quartz.cif</a> - </td></tr></table> + </td><td> + <a href="javascript:applet.setSearchTerm('=caffeine?')">load caffeine? (RCSB)</a> + <br /> + <a href="javascript:applet.setSearchTerm('=1blu?')">load 1blu? (RCSB)</a> + <br /> + +</td></tr></table> </td> </tr></table> </body> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2012-04-19 14:12:05
|
Revision: 17020 http://jmol.svn.sourceforge.net/jmol/?rev=17020&view=rev Author: hansonr Date: 2012-04-19 14:11:54 +0000 (Thu, 19 Apr 2012) Log Message: ----------- Jmol/ChemDoodle adds info panel for =hemoglobin? ReST search as well as PubChem search Modified Paths: -------------- trunk/Jmol/appletweb/JmolCD.js trunk/Jmol/appletweb/test2.htm Added Paths: ----------- trunk/Jmol/appletweb/jmolcd.php Modified: trunk/Jmol/appletweb/JmolCD.js =================================================================== --- trunk/Jmol/appletweb/JmolCD.js 2012-04-19 14:08:24 UTC (rev 17019) +++ trunk/Jmol/appletweb/JmolCD.js 2012-04-19 14:11:54 UTC (rev 17020) @@ -26,7 +26,7 @@ if(typeof(ChemDoodle)=="undefined") ChemDoodle = null; Jmol = (function() { - var version = 'Jmol 12.3.22' + (ChemDoodle ? "; ChemDoodle " + ChemDoodle.getVersion(): ""); + var version = 'Jmol 12.3.23' + (ChemDoodle ? "; ChemDoodle " + ChemDoodle.getVersion(): ""); return { INFO: {userAgent:navigator.userAgent, version: version}, SERVER_URL: "http://chemapps.stolaf.edu/jmol/jmolcd.php", @@ -183,7 +183,6 @@ } /* - This XML file does not appear to have any style information associated with it. The document tree is shown below. <dataset><record><structureId>1BLU</structureId><structureTitle>STRUCTURE OF THE 2[4FE-4S] FERREDOXIN FROM CHROMATIUM VINOSUM</structureTitle></record><record><structureId>3EUN</structureId><structureTitle>Crystal structure of the 2[4Fe-4S] C57A ferredoxin variant from allochromatium vinosum</structureTitle></record></dataset> */ @@ -204,10 +203,9 @@ info.push("</table>"); header = (S.length - 1) + " matches"; break; - case "$": + case "$": // NCI + case ":": // pubChem break; - case "#": // pubChem - break; default: return; } @@ -270,7 +268,7 @@ this.height = height; this.jmolIsSigned = jmolIsSigned; this.dataMultiplier=1; - this.haveOptions = addOptions; + this.hasOptions = addOptions; this.info = JSON.stringify(this); this.infoHeader = this.jmolType + ' "' + this.id + '"' jmolInitialize(jmolDirectory, appJar); @@ -313,7 +311,7 @@ Jmol.Applet.prototype.search = function(model){ model || (model = jQuery("#"+this.id+"_query").val().replace(/\"/g, "")); database = (this.hasOptions ? jQuery("#"+this.id+"_select").val() : "$"); - if (model.indexOf("=") == 0 || model.indexOf("$") == 0) { + if (model.indexOf("=") == 0 || model.indexOf("$") == 0 || model.indexOf(":") == 0) { database = model.substring(0, 1); model = model.substring(1); } @@ -321,7 +319,7 @@ if (!model || dm.indexOf("?") < 0 && dm == this.thisJmolModel) return; this.thisJmolModel = dm; - if (database == "$") + if (database == "$" || database == ":") this.jmolFileType = "MOL"; else if (database == "=") this.jmolFileType = "PDB"; @@ -353,7 +351,7 @@ this.id = id; this.width = width; this.height = height; - this.haveOptions = addOptions; + this.hasOptions = addOptions; this.info = JSON.stringify(this); this.infoHeader = this.jmolType + ' "' + this.id + '"' var img = '<img id="'+id+'_image" width="' + width + '" height="' + height + '" src=""/>'; @@ -375,7 +373,7 @@ Jmol.Image.prototype.loadFile = function(fileName, params){ this.thisJmolModel = "" + Math.random(); params = (params ? params : ""); - if (fileName.indexOf("://") < 0 && fileName.indexOf("=") != 0 && fileName.indexOf("$") != 0) { + if (fileName.indexOf("://") < 0 && fileName.indexOf("=") != 0 && fileName.indexOf("$") != 0 && fileName.indexOf(":") != 0) { var ref = document.location.href var pt = ref.lastIndexOf("/"); fileName = ref.substring(0, pt + 1) + fileName; @@ -420,6 +418,7 @@ c.push(label); c.push('_select">'); c.push('<option value="$" selected>NCI(small molecules)</option>'); + c.push('<option value=":">PubChem(small molecules)</option>'); c.push('<option value="=">RCSB(macromolecules)</option>'); c.push("</select>"); c.push('<button id="'); @@ -461,7 +460,7 @@ this.id = id; this.width = width; this.height = height; - this.haveOptions = addOptions; + this.hasOptions = addOptions; this.dataMultiplier=1; this.info = JSON.stringify(this); this.infoHeader = this.jmolType + ' "' + this.id + '"' @@ -480,7 +479,7 @@ this.id = id; this.width = width; this.height = height; - this.haveOptions = addOptions; + this.hasOptions = addOptions; this.info = JSON.stringify(this); this.infoHeader = this.jmolType + ' "' + this.id + '"' Jmol.getWrapper(this, true); Added: trunk/Jmol/appletweb/jmolcd.php =================================================================== --- trunk/Jmol/appletweb/jmolcd.php (rev 0) +++ trunk/Jmol/appletweb/jmolcd.php 2012-04-19 14:11:54 UTC (rev 17020) @@ -0,0 +1,65 @@ +<?php + +// ChemDoodle server using JmolData.jar in silent restricted mode +// requires JmolData.jar version 12.3.22 +// Bob Hanson ha...@st... 4/8/2012 + +function getValueSimple($json, $key, $default) { + $key = '"'.$key.'"'; + list($junk,$info) = explode($key, $json, 2); + list($junk,$val) = explode('"', $info, 3); + if ($val == "") { + $val = $default; + } +//echo(" json=$json"); +//echo(" key=$key"); +//echo(" info=$info"); +//echo(" val=$val"); +return $val; +} + +$values= file_get_contents("php://input"); +//$values = '{"call":"getMoleculeFromDatabase","query":"morphine"}'; + +$uri = $_SERVER["REQUEST_URI"]; + +$call = getValueSimple($values, "call", "getMoleculeFromDatabase"); + +if ($call == "getRawDataFromDatabase") { + $query = getValueSimple($values, "query", "morphine"); + $format = getValueSimple($values, "format", "MOL"); + // note: ChemDoodle coordinates in JSON are factored by [20, -20, 20] + // we use select molecule=1 because some salts are retrieved by NCI, and we want to ignore them + // it's not perfect. + $cmd = '/home/mscs/common/bin32/java -Djava.awt.headless=true -jar JmolData.jar -iRJ "load \\"\\$'.$query.'\\"; n = ({molecule=1}.length < {molecule=2}.length ? 2 : 1); select molecule=n;write '.$format.'"'; + + exec($cmd, $result); + $output = implode("\n",$result); +} else if ($call == "getMoleculeFromDatabase") { + $query = getValueSimple($values, "query", "morphine"); + $format = getValueSimple($values, "format", "CD"); + // note: ChemDoodle coordinates in JSON are factored by [20, -20, 20] + // we use select molecule=1 because some salts are retrieved by NCI, and we want to ignore them + // it's not perfect. + $cmd = '/home/mscs/common/bin32/java -Djava.awt.headless=true -jar JmolData.jar -iRJ "load \\"\\$'.$query.'\\"; n = ({molecule=1}.length < {molecule=2}.length ? 2 : 1); select molecule=n;write '.$format.'"'; + + exec($cmd, $result); + $result = implode($result); + $output = "{\"jmolcd_message\":\"$call - $query\",\"values\":$values,\"content\":$result}"; +} else { + // just the test result -- penicillin + $result = '{"mol":{"a":[{"x":78.474,"y":18.444,"z":3.67},{"x":64.958,"y":64.212006,"z":7.6419997},{"x":103.462,"y":26.569998,"z":-4.9280005},{"x":89.946,"y":72.338,"z":-0.956},{"x":109.19601,"y":53.517998,"z":-7.2460003},{"x":31.98,"y":28.406,"z":19.326},{"x":-84.273994,"y":-16.376001,"z":51.858},{"x":-115.051994,"y":-3.2080002,"z":14.070001},{"l":"H","x":-18.426,"y":13.716001,"z":17.006},{"x":59.22,"y":37.264,"z":9.952001},{"l":"O","x":-99.78,"y":-50.052002,"z":-24.666002},{"l":"O","x":-25.512001,"y":-33.281998,"z":-38.72},{"l":"O","x":22.08,"y":29.476002,"z":-26.811998},{"l":"O","x":-92.08,"y":-69.404,"z":14.316},{"x":-88.61001,"y":-49.4,"z":-3.246},{"x":13.762001,"y":25.081999,"z":-4.454},{"x":-70.782,"y":-26.126001,"z":3.75},{"x":-29.484001,"y":14.0,"z":-23.994},{"x":-37.694,"y":-14.437999,"z":-29.506},{"l":"H","x":-103.7,"y":-83.898,"z":8.932},{"l":"N","x":-11.774,"y":17.23,"z":-0.8759999},{"x":-59.156,"y":16.960001,"z":-17.647999},{"x":-85.96,"y":-6.886,"z":22.816},{"l":"S","x":-66.38,"y":23.898,"z":17.618},{"l":"N","x":-63.18,"y":-11.977999,"z":-20.772},{"l":"H","x":-52.845997,"y":-33.494,"z":13.710001},{"l":"H","x":-70.414,"y":29.387997,"z":-31.578003},{"l":"H","x":-93.138,"y":-36.222,"z":53.544},{"l":"H","x":-95.102005,"y":-2.47,"z":64.688},{"l":"H","x":-63.384,"y":-17.2,"z":58.034},{"l":"H","x":-115.588,"y":5.1380005,"z":-6.062},{"l":"H","x":-125.116005,"y":10.374001,"z":27.836},{"l":"H","x":-125.17799,"y":-22.512,"z":14.205999},{"l":"H","x":-22.886,"y":25.046001,"z":-41.592003},{"l":"H","x":23.692,"y":43.415993,"z":32.788},{"l":"H","x":33.742,"y":9.392,"z":29.842},{"l":"H","x":74.024,"y":-2.606,"z":5.568},{"l":"H","x":49.914,"y":78.914,"z":12.550001},{"l":"H","x":118.50201,"y":11.865999,"z":-9.842},{"l":"H","x":94.43,"y":93.39,"z":-2.7519999},{"l":"H","x":128.714,"y":59.865997,"z":-13.978}],"b":[{"b":10,"e":14,"o":2},{"b":13,"e":14},{"b":14,"e":16},{"b":16,"e":24},{"b":16,"e":22},{"b":21,"e":24},{"b":18,"e":24},{"b":6,"e":22},{"b":7,"e":22},{"b":22,"e":23},{"b":21,"e":23},{"b":17,"e":21},{"b":17,"e":18},{"b":11,"e":18,"o":2},{"b":17,"e":20},{"b":15,"e":20},{"b":5,"e":15},{"b":12,"e":15,"o":2},{"b":5,"e":9},{"b":0,"e":9,"o":2},{"b":1,"e":9},{"b":0,"e":2},{"b":1,"e":3,"o":2},{"b":2,"e":4,"o":2},{"b":3,"e":4},{"b":13,"e":19},{"b":16,"e":25},{"b":21,"e":26},{"b":6,"e":27},{"b":6,"e":28},{"b":6,"e":29},{"b":7,"e":30},{"b":7,"e":31},{"b":7,"e":32},{"b":17,"e":33},{"b":8,"e":20},{"b":5,"e":34},{"b":5,"e":35},{"b":0,"e":36},{"b":1,"e":37},{"b":2,"e":38},{"b":3,"e":39},{"b":4,"e":40}]}}'; + $result = implode($result); + $output = "{\"jmolcd_message\":\"$call - $query\",\"values\":$values,\"content\":$result}"; +} +ob_start(); +header('Access-Control-Allow-Origin: *'); +header('Last-Modified: '.date('r')); +header('Accept-Ranges: bytes'); +header('Content-Length: '.strlen($output)); +header('Content-Type: application/json'); +print($output); +ob_end_flush(); + +?> + Modified: trunk/Jmol/appletweb/test2.htm =================================================================== --- trunk/Jmol/appletweb/test2.htm 2012-04-19 14:08:24 UTC (rev 17019) +++ trunk/Jmol/appletweb/test2.htm 2012-04-19 14:11:54 UTC (rev 17020) @@ -67,7 +67,7 @@ for delivering models into ChemDoodle or the unsigned applet. <br /><br /> Just enter a molecule name, a CAS registry number, an IUPAC name, or some other sort of identifier in the box -and press [ENTER]. +and press [ENTER]. <br /><br /> Options include: <table cellpadding=5><tr><td> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2012-04-22 05:23:04
|
Revision: 17025 http://jmol.svn.sourceforge.net/jmol/?rev=17025&view=rev Author: hansonr Date: 2012-04-22 05:22:56 +0000 (Sun, 22 Apr 2012) Log Message: ----------- first refactoring of Jmol object JavaScript Modified Paths: -------------- trunk/Jmol/appletweb/JmolCD.js trunk/Jmol/appletweb/test2.htm Modified: trunk/Jmol/appletweb/JmolCD.js =================================================================== --- trunk/Jmol/appletweb/JmolCD.js 2012-04-20 16:33:05 UTC (rev 17024) +++ trunk/Jmol/appletweb/JmolCD.js 2012-04-22 05:22:56 UTC (rev 17025) @@ -1,46 +1,94 @@ // JmolCD.js -- Jmol ChemDoodle extension author: Bob Hanson, ha...@st... 4/16/2012 -// last revision: 4/17/2012 +// last revision: 4/20/2012 // allows Jmol applets to be created on a page with more flexibility and extendability // possibly using infrastructure of ChemDoodle. -// this package may be used with or without ChemDoodle -// if not using ChemDoodle, this package requires jQuery.js (or ChemDoodleWeb-libs.js, which conains jQuery) -// if using ChemDoodle, this package requires ChemDoodleWeb-libs.js and ChemDoodleWeb.js prior to JmolCD.js +// This package may be used with or without ChemDoodle. +// If using ChemDoodle, this package requires ChemDoodleWeb-libs.js and ChemDoodleWeb.js prior to JmolCD.js +// If not using ChemDoodle, this package requires jQuery.js (or ChemDoodleWeb-libs.js, which conains jQuery) -// allows Jmol-like objects to be displayed on Java-challenged (iPad/iPhone) +// Allows Jmol-like objects to be displayed on Java-challenged (iPad/iPhone) // or applet-challenged (Android/iPhone) platforms, with automatic switching to // whatever is appropriate. You can specify "ChemDoodle-only", "Jmol-only", "Image-only" // or some combination of those -- and of course, you are free to rewrite the logic below! -// allows ChemDoodle-like 3D and 3D-faked 2D canvases that can load files via a privately hosted +// Allows ChemDoodle-like 3D and 3D-faked 2D canvases that can load files via a privately hosted // server that delivers raw data files rather than specialized JSON mol data. -// access to iChemLabs server is not required for simple file-reading operations and -// database access. Database and image services are provided by a server-side PHP program -// running JmolData.jar with flags -iR. -// In this case, the NCI and RCSB databases are accessed via a St. Olaf College server, -// but for your installation, you should consider putting JmolData.jar and jmolcd.php +// Access to iChemLabs server is not required for simple file-reading operations and +// database access. PubChem and image services are provided by a server-side PHP program +// running JmolData.jar with flags -iR (at St. Olaf College). +// For your installation, you should consider putting JmolData.jar and jmolcd.php // on your own server. Nothing more than these two files is needed on the server. +// The NCI and RCSB databases are accessed via direct AJAX. + if(typeof(ChemDoodle)=="undefined") ChemDoodle = null; Jmol = (function() { - var version = 'Jmol 12.3.23' + (ChemDoodle ? "; ChemDoodle " + ChemDoodle.getVersion(): ""); return { - INFO: {userAgent:navigator.userAgent, version: version}, - SERVER_URL: "http://chemapps.stolaf.edu/jmol/jmolcd.php", - nciLoadScript: ";n = ({molecule=1}.length < {molecule=2}.length ? 2 : 1); select molecule=n;display selected;center selected;", - fileLoadScript: ";if (_loadScript = '' && defaultLoadScript == '' && _filetype == 'Pdb') { select protein or nucleic;cartoons Only;color structure; select * };", - asynchronous: !0, - getVersion: function(){return version}, + features: { + supports_xhr2: function() {return jQuery.support.cors} + }, + _jmolInfo: { + userAgent:navigator.userAgent, + version: version = 'Jmol 12.3.23' + (ChemDoodle ? "; ChemDoodle " + ChemDoodle.getVersion(): "") + }, + _serverUrl: "http://chemapps.stolaf.edu/jmol/jmolcd.php", + _asynchronous: !0, + db: { + _databasePrefixes: "$=:", + _nciLoadScript: ";n = ({molecule=1}.length < {molecule=2}.length ? 2 : 1); select molecule=n;display selected;center selected;", + _fileLoadScript: ";if (_loadScript = '' && defaultLoadScript == '' && _filetype == 'Pdb') { select protein or nucleic;cartoons Only;color structure; select * };", + _DirectDatabaseCalls:{ + "$": "http://cactus.nci.nih.gov/chemical/structure/%FILE/file?format=sdf&get3d=True", + "=": "http://www.rcsb.org/pdb/files/%FILE.pdb", + "==": "http://www.rcsb.org/pdb/files/ligand/%FILE.cif", + //":": "http://pubchem.ncbi.nlm.nih.gov/summary/summary.cgi?cid=1983&disopt=3DDisplaySDF", + "::": "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pccompound&term=%22%FILE%22[completesynonym]" + }, + _restQueryUrl: "http://www.rcsb.org/pdb/rest/search", + _restQueryXml: "<orgPdbQuery><queryType>org.pdb.query.simple.AdvancedKeywordQuery</queryType><description>Text Search</description><keywords>QUERY</keywords></orgPdbQuery>", + _restReportUrl: "http://www.pdb.org/pdb/rest/customReport?pdbids=IDLIST&customReportColumns=structureId,structureTitle" + } } })(); (function (Jmol) { - Jmol.getApplet = function(Info) { + // Intended user interface functions are here. Expectation is that these will not + // be broken by new versions of this package. + // Functions that are intended to be internal to Jmol and should generally not be + // used by the user start with an underscore. These might change with new versions. + + Jmol.getVersion = function(){return _version}; + + Jmol.getApplet = function(id, Info) { + + // note that the variable name the return is assigned to MUST match the first parameter in quotes + // applet = Jmol.getApplet("applet", Info) + + + id || (id = "jmolApplet0"); + Info || (Info = { + width: 300, + height: 300, + debug: false, + addSelectionOptions: true, + serverURL: "http://chemapps.stolaf.edu/jmol/jmolcd.php", + defaultModel: "", + useChemDoodleOnly: false, + useJmolOnly: true, + useWebGlIfAvailable: true, + useImageOnly: false, + jmolIsSigned: false, + jmolJarPath: ".", + jmolJarFile: "JmolApplet0.jar", + jmolReadyFunctionName: "" + }); + var applet; // return value /* a general function that will switch to the desired rendering option @@ -48,29 +96,11 @@ for example: - jmol_isReady = function(app,isReady) { + jmol_isReady = function(app,apptag,isReady) { if (!isReady) return; applet.setSearchTerm(Info.defaultModel); } - var Info = { - id: "applet1", - width: 300, - height: 300, - debug: true - addSelectionOptions: true, - serverURL: "http://chemapps.stolaf.edu/jmol/jmolcd.php", - defaultModel: "morphine", - useChemDoodleOnly: false, - useJmolOnly: false, - useWebGlIfAvailable: true, - useImageOnly: true, - jmolIsSigned: useSigned, - jmolJarPath: ".", - jmolJarFile: (useSigned ? "JmolAppletSigned.jar" : "JmolApplet.jar"), - jmolReadyFunctionName: "jmol_isReady", - } - ... [in body script tag] @@ -79,7 +109,8 @@ */ - Info.serverURL && (Jmol.SERVER_URL = Info.serverURL); + Info.serverURL && (Jmol._serverUrl = Info.serverURL); + var model = Info.defaultModel; if (_jmol && !Info.useChemDoodleOnly && !Info.useImageOnly && navigator.javaEnabled()) { @@ -88,17 +119,14 @@ // Jmol applet, signed or unsigned - applet = new Jmol.Applet(Info.id, Info.width, Info.height, Info.jmolJarPath, - Info.jmolJarFile, Info.jmolIsSigned, Info.jmolReadyFunctionName, - (Info.debug ? "<br />(Java found: using Jmol " + (Info.jmolIsSigned ? "signed, no server)" : "unsigned+server)") : null), - Info.addSelectionOptions); - + applet = new Jmol._Applet(id, Info, null); + model = null; + } else if (!Info.useJmolOnly && !Info.useImageOnly && ChemDoodle) { // ChemDoodle: first try with WebGL unless that doesn't work or we have indicated NOWEBGL if (Info.useWebGlIfAvailable && ChemDoodle.featureDetection.supports_webgl()) { - applet = new Jmol.Canvas3D(Info.id, Info.width, Info.height, - (Info.debug ? "<br />(WebGL found: Jmol.Canvas3D)" : null), Info.addSelectionOptions); + applet = new Jmol._Canvas3D(id, Info, null); } else { applet = {} } @@ -107,86 +135,103 @@ applet.specs.set3DRepresentation('Ball and Stick'); applet.specs.backgroundColor = 'black'; } else { - applet = new Jmol.Canvas(Info.id, Info.width, Info.height, - (Info.debug ? "<br />(No WebGL: Jmol.Canvas)" : null), - Info.addSelectionOptions); - applet.specs.bonds_useJMOLColors = true; + applet = new Jmol._Canvas(id, Info); + applet.specs.bonds_useJMOLColors = true; applet.specs.bonds_width_2D = 3; applet.specs.atoms_display = false; applet.specs.backgroundColor = 'black'; applet.specs.bonds_clearOverlaps_2D = true; } - Info.defaultModel && applet.setSearchTerm(Info.defaultModel); - + } else { - // just load the image + applet = new Jmol._Image(id, Info, null); - applet = new Jmol.Image(Info.id, Info.width, Info.height, - (Info.debug ? "<br />(Just creating an image)" : null), - Info.addSelectionOptions); - Info.defaultModel && applet.setSearchTerm(Info.defaultModel); } + model && applet._search(model); return applet; } + Jmol.script = function(applet, script) { + return applet._script(script); + } + + Jmol.search = function(applet, query, script) { + return applet._search(query, script); + } + + Jmol.showInfo = function(applet, tf) { + return applet._showInfo(tf); + } + + Jmol.loadFile = function(applet, fileName, params){ + return applet._loadFile(fileName, params); + } + + Jmol.say = function(msg) { + alert(msg); + } + // Jmol core functionality + + Jmol._getGrabberOptions = function(applet, label, note) { + + // feel free to adjust this look to anything you want - Jmol.getWrapper = function(applet, isHeader) { + var c=[]; + c.push('<br><input type="text" id="'); + c.push(label); + c.push('_query" size="32" value="" />'); + c.push("<br><nobr>"); + c.push('<select id="'); + c.push(label); + c.push('_select">'); + c.push('<option value="$" selected>NCI(small molecules)</option>'); + c.push('<option value=":">PubChem(small molecules)</option>'); + c.push('<option value="=">RCSB(macromolecules)</option>'); + c.push("</select>"); + c.push('<button id="'); + c.push(label); + c.push('_submit">Search</button>'); + c.push("</nobr>"); + note && c.push(note); + document.writeln(c.join("")); + jQuery("#"+label+"_submit").click( + function(){ + applet._search() + } + ); + jQuery("#"+label+"_query").keypress( + function(a){ + 13==a.which&&applet._search() + } + ); + if (applet.repaint) { + applet.emptyMessage="Enter search term below", + applet.repaint() + }; + } + + Jmol._getWrapper = function(applet, isHeader) { var s = (isHeader ? "<div id=ID_appletinfotablediv style=width:Wpx;height:Hpx>\ <table><tr><td></td><td><div id=ID_infotablediv style=width:Wpx;height:Hpx;display:none>\ <table><tr height=20><td style=background:yellow><span id=ID_infoheaderdiv></span></td>\ <td width=10><a href=javascript:Jmol.showInfo(ID,false)>[x]</a></td></tr><tr><td colspan=2>\ - <div id=ID_infodiv style=overflow:scroll;width:Wpx;height:" + (applet.height - 15) + "px></div></td></tr></table></div></td></tr>\ + <div id=ID_infodiv style=overflow:scroll;width:Wpx;height:" + (applet._height - 15) + "px></div></td></tr></table></div></td></tr>\ <tr><td><div id=ID_appletdiv style=width:Wpx;height:Hpx>" :"</div></td><td></td></tr></table></div>" - ).replace(/H/g, applet.height).replace(/W/g, applet.width).replace(/ID/g, applet.id); + ).replace(/H/g, applet._height).replace(/W/g, applet._width).replace(/ID/g, applet._id); document.write(s); } - Jmol.showInfo = function(applet, tf) { - document.getElementById(applet.id + "_infotablediv").style.display = (tf ? "block" : "none"); - document.getElementById(applet.id + "_appletdiv").style.height = (tf ? 1 : applet.height); - document.getElementById(applet.id + "_appletdiv").style.width = (tf ? 1 : applet.width); - applet.show(!tf); - document.getElementById(applet.id + "_infoheaderdiv").innerHTML = applet.infoHeader; - document.getElementById(applet.id + "_infodiv").innerHTML = applet.info; + Jmol._getScriptForDatabase = function(database) { + return (database == "$" ? Jmol.db._nciLoadScript : Jmol.db._fileLoadScript); } - - Jmol.searchQuery = function(applet, query) { - if (applet.hasOptions) - jQuery("#"+applet.id+"_query").val(query); - applet.search(query.replace(/\"/g, "")); - } - Jmol.getScriptForModel = function(database, model) { - return (database == "$" ? Jmol.nciLoadScript : Jmol.fileLoadScript); - } - - Jmol.getRawDataFromDatabase = function(database,query,fSuccess,fError){ - var c=this; - this.contactServer( - "getRawDataFromDatabase", - {database:database,dimension:3,query:query,script:Jmol.getScriptForModel(database)}, - fSuccess, fError - ) - } - - Jmol.getInfoFromDatabase = function(applet, query, database){ - var c=this; - this.contactServer( - "getInfoFromDatabase", - {database:database,query:query}, - function(data) { Jmol.setInfo(database, applet, data) } - ) - } - - /* - <dataset><record><structureId>1BLU</structureId><structureTitle>STRUCTURE OF THE 2[4FE-4S] FERREDOXIN FROM CHROMATIUM VINOSUM</structureTitle></record><record><structureId>3EUN</structureId><structureTitle>Crystal structure of the 2[4Fe-4S] C57A ferredoxin variant from allochromatium vinosum</structureTitle></record></dataset> + // <dataset><record><structureId>1BLU</structureId><structureTitle>STRUCTURE OF THE 2[4FE-4S] FERREDOXIN FROM CHROMATIUM VINOSUM</structureTitle></record><record><structureId>3EUN</structureId><structureTitle>Crystal structure of the 2[4Fe-4S] C57A ferredoxin variant from allochromatium vinosum</structureTitle></record></dataset> - */ - Jmol.setInfo = function(database, applet, data) { + Jmol._setInfo = function(applet, database, data) { var info = []; var header = ""; if (data.indexOf("ERROR") == 0) @@ -197,7 +242,7 @@ var S = data.split("<structureId>"); var info = ["<table>"]; for (var i = 1; i < S.length; i++) { - info.push("<tr><td valign=top><a href=\"javascript:Jmol.showInfo(" + applet.id + ",false);" + applet.id + ".setSearchTerm('=" + S[i].substring(0, 4) + "')\">" + S[i].substring(0, 4) + "</a></td>"); + info.push("<tr><td valign=top><a href=\"javascript:Jmol.search(" + applet._id + ",'=" + S[i].substring(0, 4) + "')\">" + S[i].substring(0, 4) + "</a></td>"); info.push("<td>" + S[i].split("Title>")[1].split("</")[0] + "</td></tr>"); } info.push("</table>"); @@ -209,240 +254,328 @@ default: return; } - applet.infoHeader = header; - applet.info = info.join(""); - Jmol.showInfo(applet, true); + applet._infoHeader = header; + applet._info = info.join(""); + applet._showInfo(true); } - Jmol.loadSuccess = function(a, fSuccess) { - Jmol.inRelay=!1; + Jmol._loadSuccess = function(a, fSuccess) { + Jmol._ajaxActive=!1; fSuccess(a); } - Jmol.loadError = function(fError){ - Jmol.inRelay=!1; - alert("Could not connect to server. (Note that some browsers cannot read local files this way.)"); + Jmol._loadError = function(fError){ + Jmol._ajaxActive=!1; + Jmol.say("Error connecting to server."); null!=fError&&fError() } - Jmol.loadFileData = function(fileName, fSuccess, fError){ - Jmol.inRelay?alert("Already connecting to the server - please wait for the first request to finish."): - (Jmol.inRelay=!0, + Jmol._isDatabaseCall = function(query) { + return (Jmol.db._databasePrefixes.indexOf(query.substring(0, 1)) >= 0); + } + + Jmol._getDirectDatabaseCall = function(query, checkXhr2) { + if (checkXhr2 && !Jmol.features.supports_xhr2()) + return query; + var pt = 2; + var call = Jmol.db._DirectDatabaseCalls[query.substring(0,pt)]; + if (!call) + call = Jmol.db._DirectDatabaseCalls[query.substring(0,--pt)]; + query = (call ? call.replace(/\%FILE/, query.substring(pt)) : query); + return query; + } + + Jmol._getRawDataFromServer = function(database,query,fSuccess,fError){ + Jmol._contactServer( + "getRawDataFromDatabase", + {database:database,query:query,script:Jmol._getScriptForDatabase(database)}, + fSuccess, fError + ); + } + + Jmol._getInfoFromDatabase = function(applet, database, query){ + if (database == "====") { + if (Jmol._checkActive()) + return; + var data = Jmol.db._restQueryXml.replace(/QUERY/,query); + var info = { + dataType: "text", + type: "POST", + contentType:"application/x-www-form-urlencoded", + url: Jmol.db._restQueryUrl, + data: encodeURIComponent(data) + "&req=browser", + success: function(data) {Jmol._ajaxActive=!1;Jmol._extractInfoFromRCSB(applet, database, query, data)}, + error: function() {Jmol._loadError(null)}, + async: Jmol._asynchronous + } + jQuery.ajax(info); + return; + } + Jmol._contactServer( + "getInfoFromDatabase", + {database:database,query:query}, + function(data) {Jmol._setInfo(applet, database, data) } + ); + } + + Jmol._extractInfoFromRCSB = function(applet, database, query, output) { + var n = output.length/5; + if (n == 0) + return; + if (query.length == 4 && n != 1) { + var QQQQ = query.toUpperCase(); + var pt = output.indexOf(QQQQ); + if (pt > 0 && "123456789".indexOf(QQQQ.substring(0, 1)) >= 0) + output = QQQQ + "," + output.substring(0, pt) + output.substring(pt + 5); + if (n > 50) + output = output.substring(0, 250); + output = output.replace(/\n/g,","); + var url = Jmol._restReportUrl.replace(/IDLIST/,output); + Jmol._loadFileData(applet, url, function(data) {Jmol._setInfo(applet, database, data) }); + } + } + + Jmol._checkActive = function() { + if (Jmol._ajaxActive) { + Jmol.say("Already connecting to the server - please wait for the first request to finish."); + return true; + } + Jmol._ajaxActive=!0; + return false; + } + + Jmol._loadFileData = function(applet, fileName, fSuccess, fError){ + if (Jmol._isDatabaseCall(fileName)) { + Jmol._setQueryTerm(applet, fileName); + //fileName = Jmol._getDirectDatabaseCall(fileName, true); + if (Jmol._isDatabaseCall(fileName)) { + // xhr2 not supported (MSIE) + fileName = Jmol._getDirectDatabaseCall(fileName, false); + Jmol._getRawDataFromServer("_",fileName,fSuccess,fError); + return; + } + } + if (!Jmol._checkActive()) jQuery.ajax({ dataType: "text", - type: "POST", url: fileName, - success: function(a) {Jmol.loadSuccess(a, fSuccess)}, - error: function() {Jmol.loadError(fError)}, - async: Jmol.asynchronous - }) - ) + success: function(a) {Jmol._loadSuccess(a, fSuccess)}, + error: function() {Jmol._loadError(fError)}, + async: Jmol._asynchronous + }); } - Jmol.contactServer = function(cmd,content,fSuccess,fError){ - Jmol.inRelay?alert("Already connecting to the server - please wait for the previous request to finish."): - (Jmol.inRelay=!0, + Jmol._contactServer = function(cmd,content,fSuccess,fError){ + if (!Jmol._checkActive()) jQuery.ajax({ dataType: "text", type: "POST", data: JSON.stringify({ call: cmd, content: content, - info: Jmol.INFO + info: Jmol._jmolInfo }), - url: this.SERVER_URL, - success: function(a) {Jmol.loadSuccess(a, fSuccess)}, - error:function() { Jmol.loadError(fError) }, - async:Jmol.asynchronous - }) - ) + url: Jmol._serverUrl, + success: function(a) {Jmol._loadSuccess(a, fSuccess)}, + error:function() { Jmol._loadError(fError) }, + async:Jmol._asynchronous + }); } + + Jmol._setQueryTerm = function(applet, query) { + if (!query || !applet._hasOptions) + return; + if (Jmol._isDatabaseCall(query)) { + var database = query.substring(0, 1); + query = query.substring(1); + if (database == "=" && query.length == 4 && query.substring(0, 1) == "=") + query = query.substring(1); + var d = document.getElementById(applet._id + "_select"); + for (var i = 0; i < d.options.length; i++) + if (d[i].value == database) + d[i].selected = true; + } + jQuery("#"+applet._id+"_query").val(query); + } // Applet -- an alternative to _Canvas3D // -- loads the Jmol applet instead of ChemDoodle - - Jmol.Applet = function(id, width, height, jmolDirectory, appJar, jmolIsSigned, readyFunctionName, caption, addOptions){ - this.jmolType = "Jmol.Applet" + (jmolIsSigned ? " (signed)" : ""); - this.id = id; - this.width = width; - this.height = height; - this.jmolIsSigned = jmolIsSigned; - this.dataMultiplier=1; - this.hasOptions = addOptions; - this.info = JSON.stringify(this); - this.infoHeader = this.jmolType + ' "' + this.id + '"' - jmolInitialize(jmolDirectory, appJar); - readyFunctionName && jmolSetParameter("appletReadyCallback", readyFunctionName); + + Jmol._Applet = function(id, Info, caption){ + this._jmolType = "Jmol._Applet" + (Info.jmolIsSigned ? " (signed)" : ""); + this._id = id; + var suffix = id.replace(/^jmolApplet/,""); + this._jmolId = "jmolApplet" + suffix; + this._width = Info.width; + this._height = Info.height; + this._jmolIsSigned = Info.jmolIsSigned; + this._dataMultiplier=1; + this._hasOptions = Info.addSelectionOptions; + this._info = JSON.stringify(this); + this._infoHeader = this._jmolType + ' "' + this._id + '"' + jmolInitialize(Info.jmolJarPath, Info.jmolJarFile); + Info.jmolReadyFunctionName && jmolSetParameter("appletReadyCallback", Info.jmolReadyFunctionName); var script = ""; - - Jmol.getWrapper(this, true); - jmolApplet(["100%","100%"],script, id); - Jmol.getWrapper(this, false); - if (addOptions) - Jmol.getGrabberOptions(this, id, caption); + Jmol._getWrapper(this, true); + jmolApplet(["100%","100%"], script, suffix); + Jmol._getWrapper(this, false); + if (Info.addSelectionOptions) + Jmol._getGrabberOptions(this, id, caption); return this; } - - Jmol.Applet.prototype.setSearchTerm = function(b){ - this.script("zap;set echo middle center;echo Retrieving data..."); - Jmol.searchQuery(this, b); + + Jmol._Applet.prototype._showInfo = function(tf) { + if ((!this._isInfoVisible) == (!tf)) + return; + this._isInfoVisible = tf; + document.getElementById(this._id + "_infotablediv").style.display = (tf ? "block" : "none"); + document.getElementById(this._id + "_appletdiv").style.height = (tf ? 1 : this._height); + document.getElementById(this._id + "_appletdiv").style.width = (tf ? 1 : this._width); + this._show(!tf); + document.getElementById(this._id + "_infoheaderdiv").innerHTML = this._infoHeader; + document.getElementById(this._id + "_infodiv").innerHTML = this._info; } + + Jmol._Applet.prototype._search = function(query, script){ + this._showInfo(false); + Jmol._setQueryTerm(this, query); + query || (query = jQuery("#"+this._id+"_query").val()); + query && (query = query.replace(/\"/g, "")); + var database; + if (Jmol._isDatabaseCall(query)) { + database = query.substring(0, 1); + query = query.substring(1); + } else { + database = (this._hasOptions ? jQuery("#"+this._id+"_select").val() : "$"); + } + if (database == "=" && query.length == 3) + query = "=" + query; // this is a ligand + var dm = database + query; + if (!query || dm.indexOf("?") < 0 && dm == this._thisJmolModel) + return; + this._thisJmolModel = dm; + if (database == "$" || database == ":") + this._jmolFileType = "MOL"; + else if (database == "=") + this._jmolFileType = "PDB"; + this._searchDatabase(query, database, script); + } - Jmol.Applet.prototype.loadMolecule = function(mol) { - _jmolFindApplet("jmolApplet" + this.id).script('load DATA "model"\n' + mol + '\nEND "model" ' + this.loadParams - + Jmol.fileLoadScript); + Jmol._Applet.prototype._loadModel = function(mol, params) { + var script = 'load DATA "model"\n' + mol + '\nEND "model" ' + params; + _jmolFindApplet(this._jmolId).script(script); } - Jmol.Applet.prototype.show = function(tf) { - _jmolFindApplet("jmolApplet" + this.id).resize(tf ? this.width : 1, tf ? this.height : 1); + Jmol._Applet.prototype._show = function(tf) { + _jmolFindApplet(this._jmolId).resize(tf ? this._width : 1, tf ? this._height : 1); } - Jmol.Applet.prototype.script = function(script) { - _jmolFindApplet("jmolApplet" + this.id).script(script); + Jmol._Applet.prototype._script = function(script) { + _jmolFindApplet(this._jmolId).script(script); } - Jmol.Applet.prototype.loadFile = function(fileName, params){ - this.loadParams = (params ? params : ""); - this.thisJmolModel = "" + Math.random(); + Jmol._Applet.prototype._loadFile = function(fileName, params){ + this._showInfo(false); + params || (params = ""); + this._thisJmolModel = "" + Math.random(); var c = this; - Jmol.loadFileData(fileName, function(data){c.loadMolecule(data)}); + Jmol._loadFileData(this, fileName, function(data){c._loadModel(data, params)}); } - Jmol.Applet.prototype.search = function(model){ - model || (model = jQuery("#"+this.id+"_query").val().replace(/\"/g, "")); - database = (this.hasOptions ? jQuery("#"+this.id+"_select").val() : "$"); - if (model.indexOf("=") == 0 || model.indexOf("$") == 0 || model.indexOf(":") == 0) { - database = model.substring(0, 1); - model = model.substring(1); + Jmol._Applet.prototype._searchDatabase = function(query, database, script){ + this._showInfo(false); + if (query.indexOf("?") >= 0) { + Jmol._getInfoFromDatabase(this, database, query.split("?")[0]); + return; } - var dm = database + model; - if (!model || dm.indexOf("?") < 0 && dm == this.thisJmolModel) + script || (script = Jmol._getScriptForDatabase(database)); + if (Jmol.db._DirectDatabaseCalls[database]) { + this._loadFile(database + query, script); return; - this.thisJmolModel = dm; - if (database == "$" || database == ":") - this.jmolFileType = "MOL"; - else if (database == "=") - this.jmolFileType = "PDB"; - this.searchDatabase(model, database); - } - - Jmol.Applet.prototype.searchDatabase = function(model, database){ - if (model.indexOf("?") >= 0) { - Jmol.getInfoFromDatabase(this, model.split("?")[0], database); - return; } - if (this.jmolIsSigned) { - var postLoad = (database == "$" ? Jmol.nciPostLoadScript : ""); - this.script("load \"" + dm + "\"" + postLoad); + if (this._jmolIsSigned) { + this._script("zap;set echo middle center;echo Retrieving data...;refresh;load \"" + dm + "\";" + script); } else { // need to do the postLoad here as well var c=this; - Jmol.getRawDataFromDatabase( + Jmol._getRawDataFromServer( database, - model, - function(data){c.loadMolecule(data)} + query, + function(data){c._loadModel(data, ";" + script)} ); } } + Jmol._setCommonMethods = function(proto) { + proto._showInfo = Jmol._Applet.prototype._showInfo; + proto._search = Jmol._Applet.prototype._search; + } + // Image -- another alternative to _Canvas - Jmol.Image = function(id,width,height, caption, addOptions){ - this.jmolType = "image"; - this.id = id; - this.width = width; - this.height = height; - this.hasOptions = addOptions; - this.info = JSON.stringify(this); - this.infoHeader = this.jmolType + ' "' + this.id + '"' - var img = '<img id="'+id+'_image" width="' + width + '" height="' + height + '" src=""/>'; - Jmol.getWrapper(this, true); - document.write(img); - Jmol.getWrapper(this, false); - if (addOptions) - Jmol.getGrabberOptions(this, id, caption); + Jmol._Image = function(id, Info, caption){ + this._jmolType = "image"; + this._id = id; + this._width = Info.width; + this._height = Info.height; + this._hasOptions = Info.addSelectionOptions; + this._info = JSON.stringify(this); + this._infoHeader = this._jmolType + ' "' + this._id + '"' + Jmol._getWrapper(this, true); + var s = '<img id="'+id+'_image" width="' + Info.width + '" height="' + Info.height + '" src=""/>'; + document.write(s); + Jmol._getWrapper(this, false); + if (Info.addSelectionOptions) + Jmol._getGrabberOptions(this, id, caption); return this; } + + Jmol._setCommonMethods(Jmol._Image.prototype); + + Jmol._Image.prototype._script = function(script) {} // not implemented - Jmol.Image.prototype.show = function(tf) { - document.getElementById(this.id + "_appletdiv").style.display = (tf ? "block" : "none"); + Jmol._Image.prototype._show = function(tf) { + document.getElementById(this._id + "_appletdiv").style.display = (tf ? "block" : "none"); } - - Jmol.Image.prototype.search = Jmol.Applet.prototype.search; - Jmol.Image.prototype.setSearchTerm = Jmol.Applet.prototype.setSearchTerm; - - Jmol.Image.prototype.loadFile = function(fileName, params){ - this.thisJmolModel = "" + Math.random(); + + Jmol._Image.prototype._loadFile = function(fileName, params){ + this._showInfo(false); + this._thisJmolModel = "" + Math.random(); params = (params ? params : ""); - if (fileName.indexOf("://") < 0 && fileName.indexOf("=") != 0 && fileName.indexOf("$") != 0 && fileName.indexOf(":") != 0) { + var database = ""; + if (Jmol._isDatabaseCall(fileName)) { + database = fileName.substring(0, 1); + fileName = Jmol._getDirectDatabaseCall(fileName, false); + } else if (fileName.indexOf("://") < 0) { var ref = document.location.href var pt = ref.lastIndexOf("/"); fileName = ref.substring(0, pt + 1) + fileName; } - var src = Jmol.Jmol.SERVER_URL + + var src = Jmol._serverUrl + "?call=getImageForFileLoad" - + "&file=" + fileName - + "&width=" + this.width - + "&height=" + this.height - + "¶ms=" + escape(params); - + "&script=frank off;" + Jmol.getScriptForModel(database, model); - Jmol.getWrapper(this, true); - document.getElementById(this.id + "_image").src = src; - Jmol.getWrapper(this, false); + + "&file=" + escape(fileName) + + "&width=" + this._width + + "&height=" + this._height + + "¶ms=" + escape(params) + ";frank off;"; + alert(src) + document.getElementById(this._id + "_image").src = src; } - Jmol.Image.prototype.searchDatabase = function(model, database){ - var src = Jmol.SERVER_URL + Jmol._Image.prototype._searchDatabase = function(query, database, script){ + if (query.indexOf("?") == query.length - 1) + return; + this._showInfo(false); + script || (script = Jmol._getScriptForDatabase(database)); + var src = Jmol._serverUrl + "?call=getImageFromDatabase" - + "&query=" + model; - + "&width=" + this.width - + "&height=" + this.height + "&database=" + database - + "&script=frank off;" + Jmol.getScriptForModel(database, model); - document.getElementById(this.id + "_image").src = src; + + "&query=" + query + + "&width=" + this._width + + "&height=" + this._height + + "&script=;frank off;" + script; + document.getElementById(this._id + "_image").src = src; } - // user-adjustable - - Jmol.getGrabberOptions = function(canvas, label, note) { - - // for now, only NCI - // Bob Hanson, ha...@st... 4/14/2012 - // feel free to adjust this look to anything you want - - c=[]; - c.push('<br><input type="text" id="'); - c.push(label); - c.push('_query" size="32" value="" />'); - c.push("<br><nobr>"); - c.push('<select id="'); - c.push(label); - c.push('_select">'); - c.push('<option value="$" selected>NCI(small molecules)</option>'); - c.push('<option value=":">PubChem(small molecules)</option>'); - c.push('<option value="=">RCSB(macromolecules)</option>'); - c.push("</select>"); - c.push('<button id="'); - c.push(label); - c.push('_submit">Search</button>'); - c.push("</nobr>"); - note && c.push(note); - document.writeln(c.join("")); - jQuery("#"+label+"_submit").click( - function(){ - canvas.search() - } - ); - jQuery("#"+label+"_query").keypress( - function(a){ - 13==a.which&&canvas.search() - } - ); - canvas.repaint && ( - canvas.emptyMessage="Enter search term below", - canvas.repaint() - ); - } - if (!ChemDoodle) return; @@ -455,101 +588,111 @@ // new: Applet, Image - Jmol.Canvas3D = function(id,width,height,caption,addOptions){ - this.jmolType = "Jmol.Canvas3D"; - this.id = id; - this.width = width; - this.height = height; - this.hasOptions = addOptions; - this.dataMultiplier=1; - this.info = JSON.stringify(this); - this.infoHeader = this.jmolType + ' "' + this.id + '"' - Jmol.getWrapper(this, true); - this.create(id,width,height); - Jmol.getWrapper(this, false); - if (addOptions) - Jmol.getGrabberOptions(this, id, caption); // just for this test page - return this + Jmol._Canvas3D = function(id, Info, caption){ + this._jmolType = "Jmol._Canvas3D"; + this._id = id; + this._width = Info.width; + this._height = Info.height; + this._hasOptions = Info.addSelectionOptions; + this._dataMultiplier=1; + this._info = JSON.stringify(this); + this._infoHeader = this._jmolType + ' "' + this._id + '"' + Jmol._getWrapper(this, true); + this.create(id,Info.width,Info.height); + Jmol._getWrapper(this, false); + if (Info.addSelectionOptions) + Jmol._getGrabberOptions(this, id, caption); // just for this test page + return this; } // MolGrabberCanvas changes add a dataMultiplier, subclasses TransformCanvas, modifies display options - Jmol.Canvas = function(id, width, height, caption, addOptions){ - this.jmolType = "Jmol.Canvas"; - this.id = id; - this.width = width; - this.height = height; - this.hasOptions = addOptions; - this.info = JSON.stringify(this); - this.infoHeader = this.jmolType + ' "' + this.id + '"' - Jmol.getWrapper(this, true); - this.create(id,width,height); - Jmol.getWrapper(this, false); + Jmol._Canvas = function(id, Info, caption){ + this._jmolType = "Jmol._Canvas"; + this._id = id; + this._width = Info.width; + this._height = Info.height; + this._hasOptions = Info.addSelectionOptions; + this._info = JSON.stringify(this); + this._infoHeader = this._jmolType + ' "' + this._id + '"' + Jmol._getWrapper(this, true); + this.create(id, Info.width, Info.height); + Jmol._getWrapper(this, false); + this._dataMultiplier=20; this.lastPoint=null; this.rotate3D=true; this.rotationMultMod=1.3; this.lastPinchScale=1; this.lastGestureRotate=0; - this.dataMultiplier=20; - if (addOptions) - Jmol.getGrabberOptions(this, id, caption); + if (Info.addSelectionOptions) + Jmol._getGrabberOptions(this, id, caption); return this; } - var cdSetPrototype = function(proto) { + var _cdSetPrototype = function(proto) { - proto.show = function(tf) { - document.getElementById(this.id + "_appletdiv").style.display = (tf ? "block" : "none"); - } - - proto.setSearchTerm = function(b){ - Jmol.searchQuery(this, b); - } + Jmol._setCommonMethods(proto); - proto.search = Jmol.Applet.prototype.search; + proto._script = function(script) {} // not implemented - proto.searchDatabase = function(model, database){ + proto._searchDatabase = function(query, database, script){ + this._showInfo(false); + if (query.indexOf("?") >= 0) { + Jmol._getInfoFromDatabase(this, database, query.split("?")[0]); + return; + } + if (Jmol.db._DirectDatabaseCalls[database]) { + this._loadFile(database + query); + return; + } this.emptyMessage="Searching..."; this.molecule=null; this.repaint(); var c = this; - Jmol.getRawDataFromDatabase( + Jmol._getRawDataFromServer( database, - model, - function(data){Jmol.cdProcessFileData(c, data)} + query, + function(data){Jmol._cdProcessFileData(c, data)} ); } - proto.loadFile = function(fileName, params){ - this.thisJmolModel = "" + Math.random(); - this.emptyMessage="Searching..."; + proto._show = function(tf) { + document.getElementById(this._id + "_appletdiv").style.display = (tf ? "block" : "none"); + } + + proto._loadFile = function(fileName){ + this._showInfo(false); + this._thisJmolModel = "" + Math.random(); + this.emptyMessage="Retrieving data..."; this.molecule=null; this.repaint(); - this.jmolFileType = Jmol.cdGetFileType(fileName); + this._jmolFileType = Jmol._cdGetFileType(fileName); var cdcanvas = this; - Jmol.loadFileData( - fileName, - function(data){Jmol.cdProcessFileData(cdcanvas, data)} - ); + Jmol._loadFileData(this, fileName, function(data){Jmol._cdProcessFileData(cdcanvas, data)}); } return proto; } - Jmol.Canvas3D.prototype = cdSetPrototype(new ChemDoodle._Canvas3D); - Jmol.Canvas.prototype = cdSetPrototype(new ChemDoodle.TransformCanvas); - - Jmol.cdGetFileType = function(name) { + Jmol._Canvas3D.prototype = _cdSetPrototype(new ChemDoodle._Canvas3D); + Jmol._Canvas.prototype = _cdSetPrototype(new ChemDoodle.TransformCanvas); + + Jmol._cdGetFileType = function(name) { + var database = name.substring(0, 1); + if (database == "$" || database == ":") + return "MOL"; + if (database == "=") + return (name.substring(1,2) == "=" ? "CIF_noUnitCell" : "PDB"); // just the extension, which must be PDB, XYZ..., CIF, or MOL name = name.split('.').pop().toUpperCase(); return name.substring(0, Math.min(name.length, 3)); } - Jmol.cdProcessFileData = function(cdcanvas, data) { - var factor = cdcanvas.dataMultiplier; - data = Jmol.cdCleanFileData(data); + Jmol._cdProcessFileData = function(cdcanvas, data) { + var factor = cdcanvas._dataMultiplier; + data = Jmol._cdCleanFileData(data); var molecule; - switch(cdcanvas.jmolFileType) { + switch(cdcanvas._jmolFileType) { case "PDB": case "PQR": molecule = ChemDoodle.readPDB(data, 1); @@ -559,6 +702,9 @@ molecule = ChemDoodle.readXYZ(data, 1); // 1 here is just in case break; + case "CIF_noUnitCell": + molecule = ChemDoodle.readCIF(data, 0, 0, 0, 1); + break; case "CIF": molecule = ChemDoodle.readCIF(data, 1, 1, 1, 1); // last 1 here is just in case @@ -570,10 +716,10 @@ default: return; } - cdcanvas.loadMolecule(Jmol.cdScaleMolecule(molecule, factor)); + cdcanvas.loadMolecule(Jmol._cdScaleMolecule(molecule, factor)); } - Jmol.cdCleanFileData = function(data) { + Jmol._cdCleanFileData = function(data) { if (data.indexOf("\r") >= 0 && data.indexOf("\n") >= 0) { return data.replace(/\r\n/g,"\n"); } @@ -583,7 +729,7 @@ return data; } - Jmol.cdScaleMolecule = function(molecule, multiplier) { + Jmol._cdScaleMolecule = function(molecule, multiplier) { if (multiplier != 0 && multiplier != 1) { var atoms = molecule.atoms; for(var i = atoms.length; --i >= 0;){ Modified: trunk/Jmol/appletweb/test2.htm =================================================================== --- trunk/Jmol/appletweb/test2.htm 2012-04-20 16:33:05 UTC (rev 17024) +++ trunk/Jmol/appletweb/test2.htm 2012-04-22 05:22:56 UTC (rev 17025) @@ -11,7 +11,7 @@ // note; json2 is necessary for MSIE compatibility -var applet; // set up in HTML table, below +var jmolApplet0; // set up in HTML table, below // logic is set as follows: // -- if Java is present and have Jmol.js, use Jmol @@ -23,56 +23,74 @@ // and, of course, a little tweaking of the logic would let you do anything - var useJmolOnly = (document.location.href.indexOf("NOCD") >= 0); - var useChemDoodleOnly = (!useJmolOnly && document.location.href.indexOf("CD") >= 0); - var useWebGlIfAvailable = (document.location.href.indexOf("NOWEBGL") < 0); - var useImageOnly = (document.location.href.indexOf("IMAGE") >= 0); - var useSignedApplet = (document.location.href.indexOf("SIGNED") >= 0); +var useJmolOnly = (document.location.href.indexOf("NOCD") >= 0); +var useChemDoodleOnly = (!useJmolOnly && document.location.href.indexOf("CD") >= 0); +var useWebGlIfAvailable = (document.location.href.indexOf("NOWEBGL") < 0); +var useImageOnly = (document.location.href.indexOf("IMAGE") >= 0); +var useSignedApplet = (document.location.href.indexOf("SIGNED") >= 0); - jmol_isReady = function(app,appFull,isReady) { - if (!isReady) return; - applet.setSearchTerm(Info.defaultModel); - } +jmol_isReady = function(app,appFull,isReady) { + if (!isReady) return; + Jmol.search(jmolApplet0,Info.defaultModel); +} - var Info = { - id: "applet", // must be the same as the variable name - width: 300, - height: 300, - debug: true, - addSelectionOptions: true, - serverURL: "http://chemapps.stolaf.edu/jmol/jmolcd2.php", - defaultModel: "morphine", - useChemDoodleOnly: useChemDoodleOnly, - useJmolOnly: useJmolOnly, - useWebGlIfAvailable: useWebGlIfAvailable, - useImageOnly: useImageOnly, - jmolJarPath: ".", - jmolJarFile: (useSignedApplet ? "JmolAppletSigned.jar" : "JmolApplet.jar"), - jmolIsSigned: useSignedApplet, - jmolReadyFunctionName: "jmol_isReady" - } +var Info = { + width: 300, + height: 300, + debug: true, + defaultModel: "morphine", + addSelectionOptions: true, + serverURL: "http://chemapps.stolaf.edu/jmol/jmolcd2.php", + useChemDoodleOnly: useChemDoodleOnly, + useJmolOnly: useJmolOnly, + useWebGlIfAvailable: useWebGlIfAvailable, + useImageOnly: useImageOnly, + jmolJarPath: ".", + jmolJarFile: (useSignedApplet ? "JmolAppletSigned.jar" : "JmolApplet.jar"), + jmolIsSigned: useSignedApplet, + jmolReadyFunctionName: "jmol_isReady" +} </script> </head> <body> -<table width=900 cellpadding=10><tr><td> -<script>applet = Jmol.getApplet(Info)</script> - <br><a href="javascript:Jmol.showInfo(applet, true)">show info</a> - <a href="javascript:Jmol.showInfo(applet, false)">hide info</a> -</td><td valign=top> -If we're lucky, this is the first Jmol page that automatically switches to different modes +<table width=1000 cellpadding=10> +<tr><td colspan=2> +This Jmol page should automatically switch to different modes depending upon browser capabilities. It can use the signed Jmol applet, the unsigned Jmol applet with server-side help, and ChemDoodle with or without WebGL. On the server side, it uses JmolData.jar -for delivering models into ChemDoodle or the unsigned applet. -<br /><br /> +for delivering cross-domain models into ChemDoodle or the unsigned applet. It is the first page of its kind. + +</td></tr> +<tr><td> + +<script> + +// note that the variable name MUST match the first parameter in quotes + +jmolApplet0 = Jmol.getApplet("jmolApplet0", Info) + +</script> + +<br><a href="javascript:Jmol.showInfo(jmolApplet0, true)">show info</a> +<a href="javascript:Jmol.showInfo(jmolApplet0, false)">hide info</a> + +</td><td valign=top> Just enter a molecule name, a CAS registry number, an IUPAC name, or some other sort of identifier in the box -and press [ENTER]. +and press [ENTER]. Note that these input controls can be easily hidden for a more standard Jmol look. <br /><br /> -Options include: -<table cellpadding=5><tr><td> + +Current status: (4/20/12) Small molecules loading from PubChem not working with xhr2 without server relay; +ChemDoodle not loading ligand CIF files <a href="javascript:Jmol.loadFile(jmolApplet0,'==HEM')">(==HEM)</a>; +ChemDoodle without WebGL very slow at loading PDB files. + +<br /><br /> +<table cellpadding=5><tr><td valign=top> +<b>rendering options:</b> + <br /> <a href=test2.htm>unsigned Jmol applet</a> - <br /> + <br /> <a href=test2.htm?SIGNED>signed Jmol applet</a> <br /> <a href=test2.htm?CD>ChemDoodle only</a> @@ -82,25 +100,46 @@ <a href=test2.htm?NOCD>not ChemDoodle</a> <br /> <a href=test2.htm?IMAGE>image only</a> -</td><td> - <a href="javascript:applet.loadFile('caffeine.mol')">load caffeine.mol</a> +</td><td valign=top> + <b>this-domain calls - no server</b> <br /> - <a href="javascript:applet.loadFile('1crn.pdb')">load 1crn.pdb</a> + <a href="javascript:Jmol.loadFile(jmolApplet0,'caffeine.mol')">load caffeine.mol</a> <br /> - <a href="javascript:applet.loadFile('t-butene.xyz')">load t-butene.xyz</a> + <a href="javascript:Jmol.loadFile(jmolApplet0,'1crn.pdb',';cartoons only;color structure;spin on')">load 1crn.pdb</a> <br /> - <a href="javascript:applet.loadFile('sebi0105c.ccdc.cif')">load sebi0105c.ccdc.cif</a> + <a href="javascript:Jmol.loadFile(jmolApplet0,'t-butene.xyz')">load t-butene.xyz</a> <br /> - <a href="javascript:applet.loadFile('sucrose.cif')">load sucrose.cif</a> + <a href="javascript:Jmol.loadFile(jmolApplet0,'sebi0105c.ccdc.cif')">load sebi0105c.ccdc.cif</a> <br /> - <a href="javascript:applet.loadFile('y1237.cif', '{1 1 1}')">load y1237.cif</a> + <a href="javascript:Jmol.loadFile(jmolApplet0,'sucrose.cif')">load sucrose.cif</a> <br /> - <a href="javascript:applet.loadFile('quartz.cif', '{1 1 1}')">load quartz.cif</a> - </td><td> - <a href="javascript:applet.setSearchTerm('=caffeine?')">load caffeine? (RCSB)</a> + <a href="javascript:Jmol.loadFile(jmolApplet0,'y1237.cif', '{1 1 1}')">load y1237.cif</a> <br /> - <a href="javascript:applet.setSearchTerm('=1blu?')">load 1blu? (RCSB)</a> + <a href="javascript:Jmol.loadFile(jmolApplet0,'quartz.cif', '{1 1 1}')">load quartz.cif</a> + </td><td valign=top> + <b>keyword searches</b> <br /> + <a href="javascript:Jmol.search(jmolApplet0,'=caffeine?')">=caffeine? (RCSB)</a> + <br /> + <a href="javascript:Jmol.search(jmolApplet0,'=1blu?')">=1blu? (RCSB)</a> + <br /> + <a href="javascript:Jmol.search(jmolApplet0,'=1crn?')">=1crn? (RCSB)</a> + <br /> + <br /> + <b>direct database calls - no server</b> + <br /> + <a href="javascript:Jmol.loadFile(jmolApplet0,'$caffeine')">load $caffeine (from NCI)</a> + <br /> + <a href="javascript:Jmol.loadFile(jmolApplet0,'=1blu',';cartoons only;color structure')">load =1blu (cartoon, from RCSB)</a> + <br /> + <br /> + <b>problems</b> + <br /> + <a href="javascript:Jmol.loadFile(jmolApplet0,'==HEM')">load ==HEM (fails in ChemDoodle)</a> + <br /> + <a href="javascript:Jmol.loadFile(jmolApplet0,'http://pubchem.ncbi.nlm.nih.gov/summary/summary.cgi?cid=1983&disopt=3DDisplaySDF')">load :tylenol (not working)</a> + <br /> + <a href="javascript:Jmol.search(jmolApplet0,':caffeine',';isosurface vdw map mep translucent')">:caffeine (indirect PubChem, with mep)</a> </td></tr></table> </td> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2012-04-22 05:38:05
|
Revision: 17026 http://jmol.svn.sourceforge.net/jmol/?rev=17026&view=rev Author: hansonr Date: 2012-04-22 05:37:57 +0000 (Sun, 22 Apr 2012) Log Message: ----------- Jmol object JavaScript separated into Core, Api, and CD Modified Paths: -------------- trunk/Jmol/appletweb/JmolCD.js trunk/Jmol/appletweb/test2.htm Added Paths: ----------- trunk/Jmol/appletweb/JmolApi.js trunk/Jmol/appletweb/JmolCore.js Added: trunk/Jmol/appletweb/JmolApi.js =================================================================== --- trunk/Jmol/appletweb/JmolApi.js (rev 0) +++ trunk/Jmol/appletweb/JmolApi.js 2012-04-22 05:37:57 UTC (rev 17026) @@ -0,0 +1,116 @@ +// JmolApi.js -- Jmol user functions + +if(typeof(ChemDoodle)=="undefined") ChemDoodle = null; + +(function (Jmol) { + + Jmol.getVersion = function(){return _version}; + + Jmol.getApplet = function(id, Info) { + + // note that the variable name the return is assigned to MUST match the first parameter in quotes + // applet = Jmol.getApplet("applet", Info) + + id || (id = "jmolApplet0"); + Info || (Info = { + width: 300, + height: 300, + debug: false, + addSelectionOptions: true, + serverURL: "http://chemapps.stolaf.edu/jmol/jmolcd.php", + defaultModel: "", + useChemDoodleOnly: false, + useJmolOnly: true, + useWebGlIfAvailable: true, + useImageOnly: false, + jmolIsSigned: false, + jmolJarPath: ".", + jmolJarFile: "JmolApplet0.jar", + jmolReadyFunctionName: "" + }); + + var applet; // return value + + /* a general function that will switch to the desired rendering option + involving Jmol or ChemDoodle. + + for example: + + jmol_isReady = function(app,apptag,isReady) { + if (!isReady) return; + applet.setSearchTerm(Info.defaultModel); + } + + ... + + [in body script tag] + + applet = Jmol.getApplet(Info) + + */ + + Info.serverURL && (Jmol._serverUrl = Info.serverURL); + var model = Info.defaultModel; + + if (_jmol && !Info.useChemDoodleOnly && !Info.useImageOnly && navigator.javaEnabled()) { + + Info.jmolJarFile || (Info.jmolJarFile = (Info.jmolIsSigned ? "JmolAppletSigned0.jar" : "JmolApplet0.jar")); + Info.jmolJarPath || (Info.jmolJarPath = "."); + + // Jmol applet, signed or unsigned + + applet = new Jmol._Applet(id, Info, null); + model = null; + + } else if (!Info.useJmolOnly && !Info.useImageOnly && ChemDoodle) { + + // ChemDoodle: first try with WebGL unless that doesn't work or we have indicated NOWEBGL + if (Info.useWebGlIfAvailable && ChemDoodle.featureDetection.supports_webgl()) { + applet = new Jmol._Canvas3D(id, Info, null); + } else { + applet = {} + } + if (applet.gl) { + //applet.specs.set3DRepresentation('Stick'); + applet.specs.set3DRepresentation('Ball and Stick'); + applet.specs.backgroundColor = 'black'; + } else { + applet = new Jmol._Canvas(id, Info); + applet.specs.bonds_useJMOLColors = true; + applet.specs.bonds_width_2D = 3; + applet.specs.atoms_display = false; + applet.specs.backgroundColor = 'black'; + applet.specs.bonds_clearOverlaps_2D = true; + } + + } else { + + applet = new Jmol._Image(id, Info, null); + + } + model && applet._search(model); + return applet; + } + + Jmol.script = function(applet, script) { + return applet._script(script); + } + + Jmol.search = function(applet, query, script) { + return applet._search(query, script); + } + + Jmol.showInfo = function(applet, tf) { + return applet._showInfo(tf); + } + + Jmol.loadFile = function(applet, fileName, params){ + return applet._loadFile(fileName, params); + } + + Jmol.say = function(msg) { + alert(msg); + } + + +})(Jmol); Modified: trunk/Jmol/appletweb/JmolCD.js =================================================================== --- trunk/Jmol/appletweb/JmolCD.js 2012-04-22 05:22:56 UTC (rev 17025) +++ trunk/Jmol/appletweb/JmolCD.js 2012-04-22 05:37:57 UTC (rev 17026) @@ -1,581 +1,12 @@ // JmolCD.js -- Jmol ChemDoodle extension author: Bob Hanson, ha...@st... 4/16/2012 -// last revision: 4/20/2012 - -// allows Jmol applets to be created on a page with more flexibility and extendability -// possibly using infrastructure of ChemDoodle. - -// This package may be used with or without ChemDoodle. // If using ChemDoodle, this package requires ChemDoodleWeb-libs.js and ChemDoodleWeb.js prior to JmolCD.js -// If not using ChemDoodle, this package requires jQuery.js (or ChemDoodleWeb-libs.js, which conains jQuery) -// Allows Jmol-like objects to be displayed on Java-challenged (iPad/iPhone) -// or applet-challenged (Android/iPhone) platforms, with automatic switching to -// whatever is appropriate. You can specify "ChemDoodle-only", "Jmol-only", "Image-only" -// or some combination of those -- and of course, you are free to rewrite the logic below! - -// Allows ChemDoodle-like 3D and 3D-faked 2D canvases that can load files via a privately hosted -// server that delivers raw data files rather than specialized JSON mol data. -// Access to iChemLabs server is not required for simple file-reading operations and -// database access. PubChem and image services are provided by a server-side PHP program -// running JmolData.jar with flags -iR (at St. Olaf College). -// For your installation, you should consider putting JmolData.jar and jmolcd.php -// on your own server. Nothing more than these two files is needed on the server. - -// The NCI and RCSB databases are accessed via direct AJAX. - if(typeof(ChemDoodle)=="undefined") ChemDoodle = null; -Jmol = (function() { - return { - features: { - supports_xhr2: function() {return jQuery.support.cors} - }, - _jmolInfo: { - userAgent:navigator.userAgent, - version: version = 'Jmol 12.3.23' + (ChemDoodle ? "; ChemDoodle " + ChemDoodle.getVersion(): "") - }, - _serverUrl: "http://chemapps.stolaf.edu/jmol/jmolcd.php", - _asynchronous: !0, - db: { - _databasePrefixes: "$=:", - _nciLoadScript: ";n = ({molecule=1}.length < {molecule=2}.length ? 2 : 1); select molecule=n;display selected;center selected;", - _fileLoadScript: ";if (_loadScript = '' && defaultLoadScript == '' && _filetype == 'Pdb') { select protein or nucleic;cartoons Only;color structure; select * };", - _DirectDatabaseCalls:{ - "$": "http://cactus.nci.nih.gov/chemical/structure/%FILE/file?format=sdf&get3d=True", - "=": "http://www.rcsb.org/pdb/files/%FILE.pdb", - "==": "http://www.rcsb.org/pdb/files/ligand/%FILE.cif", - //":": "http://pubchem.ncbi.nlm.nih.gov/summary/summary.cgi?cid=1983&disopt=3DDisplaySDF", - "::": "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pccompound&term=%22%FILE%22[completesynonym]" - }, - _restQueryUrl: "http://www.rcsb.org/pdb/rest/search", - _restQueryXml: "<orgPdbQuery><queryType>org.pdb.query.simple.AdvancedKeywordQuery</queryType><description>Text Search</description><keywords>QUERY</keywords></orgPdbQuery>", - _restReportUrl: "http://www.pdb.org/pdb/rest/customReport?pdbids=IDLIST&customReportColumns=structureId,structureTitle" - } - } -})(); (function (Jmol) { - // Intended user interface functions are here. Expectation is that these will not - // be broken by new versions of this package. - - // Functions that are intended to be internal to Jmol and should generally not be - // used by the user start with an underscore. These might change with new versions. - - Jmol.getVersion = function(){return _version}; - - Jmol.getApplet = function(id, Info) { - - // note that the variable name the return is assigned to MUST match the first parameter in quotes - // applet = Jmol.getApplet("applet", Info) - - - id || (id = "jmolApplet0"); - Info || (Info = { - width: 300, - height: 300, - debug: false, - addSelectionOptions: true, - serverURL: "http://chemapps.stolaf.edu/jmol/jmolcd.php", - defaultModel: "", - useChemDoodleOnly: false, - useJmolOnly: true, - useWebGlIfAvailable: true, - useImageOnly: false, - jmolIsSigned: false, - jmolJarPath: ".", - jmolJarFile: "JmolApplet0.jar", - jmolReadyFunctionName: "" - }); - - var applet; // return value - - /* a general function that will switch to the desired rendering option - involving Jmol or ChemDoodle. - - for example: - - jmol_isReady = function(app,apptag,isReady) { - if (!isReady) return; - applet.setSearchTerm(Info.defaultModel); - } - - ... - - [in body script tag] - - applet = Jmol.getApplet(Info) - - */ - - Info.serverURL && (Jmol._serverUrl = Info.serverURL); - var model = Info.defaultModel; - - if (_jmol && !Info.useChemDoodleOnly && !Info.useImageOnly && navigator.javaEnabled()) { - - Info.jmolJarFile || (Info.jmolJarFile = (Info.jmolIsSigned ? "JmolAppletSigned0.jar" : "JmolApplet0.jar")); - Info.jmolJarPath || (Info.jmolJarPath = "."); - - // Jmol applet, signed or unsigned - - applet = new Jmol._Applet(id, Info, null); - model = null; - - } else if (!Info.useJmolOnly && !Info.useImageOnly && ChemDoodle) { - - // ChemDoodle: first try with WebGL unless that doesn't work or we have indicated NOWEBGL - if (Info.useWebGlIfAvailable && ChemDoodle.featureDetection.supports_webgl()) { - applet = new Jmol._Canvas3D(id, Info, null); - } else { - applet = {} - } - if (applet.gl) { - //applet.specs.set3DRepresentation('Stick'); - applet.specs.set3DRepresentation('Ball and Stick'); - applet.specs.backgroundColor = 'black'; - } else { - applet = new Jmol._Canvas(id, Info); - applet.specs.bonds_useJMOLColors = true; - applet.specs.bonds_width_2D = 3; - applet.specs.atoms_display = false; - applet.specs.backgroundColor = 'black'; - applet.specs.bonds_clearOverlaps_2D = true; - } - - } else { - - applet = new Jmol._Image(id, Info, null); - - } - model && applet._search(model); - return applet; - } - - Jmol.script = function(applet, script) { - return applet._script(script); - } - - Jmol.search = function(applet, query, script) { - return applet._search(query, script); - } - - Jmol.showInfo = function(applet, tf) { - return applet._showInfo(tf); - } - - Jmol.loadFile = function(applet, fileName, params){ - return applet._loadFile(fileName, params); - } - - Jmol.say = function(msg) { - alert(msg); - } - - // Jmol core functionality - - Jmol._getGrabberOptions = function(applet, label, note) { - - // feel free to adjust this look to anything you want - - var c=[]; - c.push('<br><input type="text" id="'); - c.push(label); - c.push('_query" size="32" value="" />'); - c.push("<br><nobr>"); - c.push('<select id="'); - c.push(label); - c.push('_select">'); - c.push('<option value="$" selected>NCI(small molecules)</option>'); - c.push('<option value=":">PubChem(small molecules)</option>'); - c.push('<option value="=">RCSB(macromolecules)</option>'); - c.push("</select>"); - c.push('<button id="'); - c.push(label); - c.push('_submit">Search</button>'); - c.push("</nobr>"); - note && c.push(note); - document.writeln(c.join("")); - jQuery("#"+label+"_submit").click( - function(){ - applet._search() - } - ); - jQuery("#"+label+"_query").keypress( - function(a){ - 13==a.which&&applet._search() - } - ); - if (applet.repaint) { - applet.emptyMessage="Enter search term below", - applet.repaint() - }; - } - - Jmol._getWrapper = function(applet, isHeader) { - var s = (isHeader ? - "<div id=ID_appletinfotablediv style=width:Wpx;height:Hpx>\ - <table><tr><td></td><td><div id=ID_infotablediv style=width:Wpx;height:Hpx;display:none>\ - <table><tr height=20><td style=background:yellow><span id=ID_infoheaderdiv></span></td>\ - <td width=10><a href=javascript:Jmol.showInfo(ID,false)>[x]</a></td></tr><tr><td colspan=2>\ - <div id=ID_infodiv style=overflow:scroll;width:Wpx;height:" + (applet._height - 15) + "px></div></td></tr></table></div></td></tr>\ - <tr><td><div id=ID_appletdiv style=width:Wpx;height:Hpx>" - :"</div></td><td></td></tr></table></div>" - ).replace(/H/g, applet._height).replace(/W/g, applet._width).replace(/ID/g, applet._id); - document.write(s); - } - - Jmol._getScriptForDatabase = function(database) { - return (database == "$" ? Jmol.db._nciLoadScript : Jmol.db._fileLoadScript); - } - - // <dataset><record><structureId>1BLU</structureId><structureTitle>STRUCTURE OF THE 2[4FE-4S] FERREDOXIN FROM CHROMATIUM VINOSUM</structureTitle></record><record><structureId>3EUN</structureId><structureTitle>Crystal structure of the 2[4Fe-4S] C57A ferredoxin variant from allochromatium vinosum</structureTitle></record></dataset> - - Jmol._setInfo = function(applet, database, data) { - var info = []; - var header = ""; - if (data.indexOf("ERROR") == 0) - header = data; - else - switch (database) { - case "=": - var S = data.split("<structureId>"); - var info = ["<table>"]; - for (var i = 1; i < S.length; i++) { - info.push("<tr><td valign=top><a href=\"javascript:Jmol.search(" + applet._id + ",'=" + S[i].substring(0, 4) + "')\">" + S[i].substring(0, 4) + "</a></td>"); - info.push("<td>" + S[i].split("Title>")[1].split("</")[0] + "</td></tr>"); - } - info.push("</table>"); - header = (S.length - 1) + " matches"; - break; - case "$": // NCI - case ":": // pubChem - break; - default: - return; - } - applet._infoHeader = header; - applet._info = info.join(""); - applet._showInfo(true); - } - - Jmol._loadSuccess = function(a, fSuccess) { - Jmol._ajaxActive=!1; - fSuccess(a); - } - - Jmol._loadError = function(fError){ - Jmol._ajaxActive=!1; - Jmol.say("Error connecting to server."); - null!=fError&&fError() - } - - Jmol._isDatabaseCall = function(query) { - return (Jmol.db._databasePrefixes.indexOf(query.substring(0, 1)) >= 0); - } - - Jmol._getDirectDatabaseCall = function(query, checkXhr2) { - if (checkXhr2 && !Jmol.features.supports_xhr2()) - return query; - var pt = 2; - var call = Jmol.db._DirectDatabaseCalls[query.substring(0,pt)]; - if (!call) - call = Jmol.db._DirectDatabaseCalls[query.substring(0,--pt)]; - query = (call ? call.replace(/\%FILE/, query.substring(pt)) : query); - return query; - } - - Jmol._getRawDataFromServer = function(database,query,fSuccess,fError){ - Jmol._contactServer( - "getRawDataFromDatabase", - {database:database,query:query,script:Jmol._getScriptForDatabase(database)}, - fSuccess, fError - ); - } - - Jmol._getInfoFromDatabase = function(applet, database, query){ - if (database == "====") { - if (Jmol._checkActive()) - return; - var data = Jmol.db._restQueryXml.replace(/QUERY/,query); - var info = { - dataType: "text", - type: "POST", - contentType:"application/x-www-form-urlencoded", - url: Jmol.db._restQueryUrl, - data: encodeURIComponent(data) + "&req=browser", - success: function(data) {Jmol._ajaxActive=!1;Jmol._extractInfoFromRCSB(applet, database, query, data)}, - error: function() {Jmol._loadError(null)}, - async: Jmol._asynchronous - } - jQuery.ajax(info); - return; - } - Jmol._contactServer( - "getInfoFromDatabase", - {database:database,query:query}, - function(data) {Jmol._setInfo(applet, database, data) } - ); - } - - Jmol._extractInfoFromRCSB = function(applet, database, query, output) { - var n = output.length/5; - if (n == 0) - return; - if (query.length == 4 && n != 1) { - var QQQQ = query.toUpperCase(); - var pt = output.indexOf(QQQQ); - if (pt > 0 && "123456789".indexOf(QQQQ.substring(0, 1)) >= 0) - output = QQQQ + "," + output.substring(0, pt) + output.substring(pt + 5); - if (n > 50) - output = output.substring(0, 250); - output = output.replace(/\n/g,","); - var url = Jmol._restReportUrl.replace(/IDLIST/,output); - Jmol._loadFileData(applet, url, function(data) {Jmol._setInfo(applet, database, data) }); - } - } - - Jmol._checkActive = function() { - if (Jmol._ajaxActive) { - Jmol.say("Already connecting to the server - please wait for the first request to finish."); - return true; - } - Jmol._ajaxActive=!0; - return false; - } - - Jmol._loadFileData = function(applet, fileName, fSuccess, fError){ - if (Jmol._isDatabaseCall(fileName)) { - Jmol._setQueryTerm(applet, fileName); - //fileName = Jmol._getDirectDatabaseCall(fileName, true); - if (Jmol._isDatabaseCall(fileName)) { - // xhr2 not supported (MSIE) - fileName = Jmol._getDirectDatabaseCall(fileName, false); - Jmol._getRawDataFromServer("_",fileName,fSuccess,fError); - return; - } - } - if (!Jmol._checkActive()) - jQuery.ajax({ - dataType: "text", - url: fileName, - success: function(a) {Jmol._loadSuccess(a, fSuccess)}, - error: function() {Jmol._loadError(fError)}, - async: Jmol._asynchronous - }); - } - - Jmol._contactServer = function(cmd,content,fSuccess,fError){ - if (!Jmol._checkActive()) - jQuery.ajax({ - dataType: "text", - type: "POST", - data: JSON.stringify({ - call: cmd, - content: content, - info: Jmol._jmolInfo - }), - url: Jmol._serverUrl, - success: function(a) {Jmol._loadSuccess(a, fSuccess)}, - error:function() { Jmol._loadError(fError) }, - async:Jmol._asynchronous - }); - } - - Jmol._setQueryTerm = function(applet, query) { - if (!query || !applet._hasOptions) - return; - if (Jmol._isDatabaseCall(query)) { - var database = query.substring(0, 1); - query = query.substring(1); - if (database == "=" && query.length == 4 && query.substring(0, 1) == "=") - query = query.substring(1); - var d = document.getElementById(applet._id + "_select"); - for (var i = 0; i < d.options.length; i++) - if (d[i].value == database) - d[i].selected = true; - } - jQuery("#"+applet._id+"_query").val(query); - } - - // Applet -- an alternative to _Canvas3D - // -- loads the Jmol applet instead of ChemDoodle - - Jmol._Applet = function(id, Info, caption){ - this._jmolType = "Jmol._Applet" + (Info.jmolIsSigned ? " (signed)" : ""); - this._id = id; - var suffix = id.replace(/^jmolApplet/,""); - this._jmolId = "jmolApplet" + suffix; - this._width = Info.width; - this._height = Info.height; - this._jmolIsSigned = Info.jmolIsSigned; - this._dataMultiplier=1; - this._hasOptions = Info.addSelectionOptions; - this._info = JSON.stringify(this); - this._infoHeader = this._jmolType + ' "' + this._id + '"' - jmolInitialize(Info.jmolJarPath, Info.jmolJarFile); - Info.jmolReadyFunctionName && jmolSetParameter("appletReadyCallback", Info.jmolReadyFunctionName); - var script = ""; - Jmol._getWrapper(this, true); - jmolApplet(["100%","100%"], script, suffix); - Jmol._getWrapper(this, false); - if (Info.addSelectionOptions) - Jmol._getGrabberOptions(this, id, caption); - return this; - } - - Jmol._Applet.prototype._showInfo = function(tf) { - if ((!this._isInfoVisible) == (!tf)) - return; - this._isInfoVisible = tf; - document.getElementById(this._id + "_infotablediv").style.display = (tf ? "block" : "none"); - document.getElementById(this._id + "_appletdiv").style.height = (tf ? 1 : this._height); - document.getElementById(this._id + "_appletdiv").style.width = (tf ? 1 : this._width); - this._show(!tf); - document.getElementById(this._id + "_infoheaderdiv").innerHTML = this._infoHeader; - document.getElementById(this._id + "_infodiv").innerHTML = this._info; - } - - Jmol._Applet.prototype._search = function(query, script){ - this._showInfo(false); - Jmol._setQueryTerm(this, query); - query || (query = jQuery("#"+this._id+"_query").val()); - query && (query = query.replace(/\"/g, "")); - var database; - if (Jmol._isDatabaseCall(query)) { - database = query.substring(0, 1); - query = query.substring(1); - } else { - database = (this._hasOptions ? jQuery("#"+this._id+"_select").val() : "$"); - } - if (database == "=" && query.length == 3) - query = "=" + query; // this is a ligand - var dm = database + query; - if (!query || dm.indexOf("?") < 0 && dm == this._thisJmolModel) - return; - this._thisJmolModel = dm; - if (database == "$" || database == ":") - this._jmolFileType = "MOL"; - else if (database == "=") - this._jmolFileType = "PDB"; - this._searchDatabase(query, database, script); - } - - Jmol._Applet.prototype._loadModel = function(mol, params) { - var script = 'load DATA "model"\n' + mol + '\nEND "model" ' + params; - _jmolFindApplet(this._jmolId).script(script); - } - - Jmol._Applet.prototype._show = function(tf) { - _jmolFindApplet(this._jmolId).resize(tf ? this._width : 1, tf ? this._height : 1); - } - - Jmol._Applet.prototype._script = function(script) { - _jmolFindApplet(this._jmolId).script(script); - } - - Jmol._Applet.prototype._loadFile = function(fileName, params){ - this._showInfo(false); - params || (params = ""); - this._thisJmolModel = "" + Math.random(); - var c = this; - Jmol._loadFileData(this, fileName, function(data){c._loadModel(data, params)}); - } - - Jmol._Applet.prototype._searchDatabase = function(query, database, script){ - this._showInfo(false); - if (query.indexOf("?") >= 0) { - Jmol._getInfoFromDatabase(this, database, query.split("?")[0]); - return; - } - script || (script = Jmol._getScriptForDatabase(database)); - if (Jmol.db._DirectDatabaseCalls[database]) { - this._loadFile(database + query, script); - return; - } - if (this._jmolIsSigned) { - this._script("zap;set echo middle center;echo Retrieving data...;refresh;load \"" + dm + "\";" + script); - } else { - // need to do the postLoad here as well - var c=this; - Jmol._getRawDataFromServer( - database, - query, - function(data){c._loadModel(data, ";" + script)} - ); - } - } - - Jmol._setCommonMethods = function(proto) { - proto._showInfo = Jmol._Applet.prototype._showInfo; - proto._search = Jmol._Applet.prototype._search; - } - - // Image -- another alternative to _Canvas - Jmol._Image = function(id, Info, caption){ - this._jmolType = "image"; - this._id = id; - this._width = Info.width; - this._height = Info.height; - this._hasOptions = Info.addSelectionOptions; - this._info = JSON.stringify(this); - this._infoHeader = this._jmolType + ' "' + this._id + '"' - Jmol._getWrapper(this, true); - var s = '<img id="'+id+'_image" width="' + Info.width + '" height="' + Info.height + '" src=""/>'; - document.write(s); - Jmol._getWrapper(this, false); - if (Info.addSelectionOptions) - Jmol._getGrabberOptions(this, id, caption); - return this; - } - - Jmol._setCommonMethods(Jmol._Image.prototype); - - Jmol._Image.prototype._script = function(script) {} // not implemented - - Jmol._Image.prototype._show = function(tf) { - document.getElementById(this._id + "_appletdiv").style.display = (tf ? "block" : "none"); - } - - Jmol._Image.prototype._loadFile = function(fileName, params){ - this._showInfo(false); - this._thisJmolModel = "" + Math.random(); - params = (params ? params : ""); - var database = ""; - if (Jmol._isDatabaseCall(fileName)) { - database = fileName.substring(0, 1); - fileName = Jmol._getDirectDatabaseCall(fileName, false); - } else if (fileName.indexOf("://") < 0) { - var ref = document.location.href - var pt = ref.lastIndexOf("/"); - fileName = ref.substring(0, pt + 1) + fileName; - } - - var src = Jmol._serverUrl - + "?call=getImageForFileLoad" - + "&file=" + escape(fileName) - + "&width=" + this._width - + "&height=" + this._height - + "¶ms=" + escape(params) + ";frank off;"; - alert(src) - document.getElementById(this._id + "_image").src = src; - } - - Jmol._Image.prototype._searchDatabase = function(query, database, script){ - if (query.indexOf("?") == query.length - 1) - return; - this._showInfo(false); - script || (script = Jmol._getScriptForDatabase(database)); - var src = Jmol._serverUrl - + "?call=getImageFromDatabase" - + "&database=" + database - + "&query=" + query - + "&width=" + this._width - + "&height=" + this._height - + "&script=;frank off;" + script; - document.getElementById(this._id + "_image").src = src; - } - if (!ChemDoodle) return; Added: trunk/Jmol/appletweb/JmolCore.js =================================================================== --- trunk/Jmol/appletweb/JmolCore.js (rev 0) +++ trunk/Jmol/appletweb/JmolCore.js 2012-04-22 05:37:57 UTC (rev 17026) @@ -0,0 +1,466 @@ +// JmolCore.js -- Jmol core capability + +// see JmolApi.js for public user-interface. All these are private functions + +// last revision: 4/20/2012 + +// allows Jmol applets to be created on a page with more flexibility and extendability +// possibly using infrastructure of ChemDoodle. + +// This package may be used with or without ChemDoodle. +// If using ChemDoodle, this package requires ChemDoodleWeb-libs.js and ChemDoodleWeb.js prior to JmolCore.js +// If not using ChemDoodle, this package requires jQuery.js (or ChemDoodleWeb-libs.js, which conains jQuery) + +// Allows Jmol-like objects to be displayed on Java-challenged (iPad/iPhone) +// or applet-challenged (Android/iPhone) platforms, with automatic switching to +// whatever is appropriate. You can specify "ChemDoodle-only", "Jmol-only", "Image-only" +// or some combination of those -- and of course, you are free to rewrite the logic below! + +// Allows ChemDoodle-like 3D and 3D-faked 2D canvases that can load files via a privately hosted +// server that delivers raw data files rather than specialized JSON mol data. +// Access to iChemLabs server is not required for simple file-reading operations and +// database access. PubChem and image services are provided by a server-side PHP program +// running JmolData.jar with flags -iR (at St. Olaf College). +// For your installation, you should consider putting JmolData.jar and jmolcd.php +// on your own server. Nothing more than these two files is needed on the server. + +// The NCI and RCSB databases are accessed via direct AJAX. + +if(typeof(ChemDoodle)=="undefined") ChemDoodle = null; + +Jmol = (function() { + return { + features: { + supports_xhr2: function() {return jQuery.support.cors} + }, + _jmolInfo: { + userAgent:navigator.userAgent, + version: version = 'Jmol 12.3.23' + (ChemDoodle ? "; ChemDoodle " + ChemDoodle.getVersion(): "") + }, + _serverUrl: "http://chemapps.stolaf.edu/jmol/jmolcd.php", + _asynchronous: !0, + db: { + _databasePrefixes: "$=:", + _nciLoadScript: ";n = ({molecule=1}.length < {molecule=2}.length ? 2 : 1); select molecule=n;display selected;center selected;", + _fileLoadScript: ";if (_loadScript = '' && defaultLoadScript == '' && _filetype == 'Pdb') { select protein or nucleic;cartoons Only;color structure; select * };", + _DirectDatabaseCalls:{ + "$": "http://cactus.nci.nih.gov/chemical/structure/%FILE/file?format=sdf&get3d=True", + "=": "http://www.rcsb.org/pdb/files/%FILE.pdb", + "==": "http://www.rcsb.org/pdb/files/ligand/%FILE.cif", + //":": "http://pubchem.ncbi.nlm.nih.gov/summary/summary.cgi?cid=1983&disopt=3DDisplaySDF", + "::": "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pccompound&term=%22%FILE%22[completesynonym]" + }, + _restQueryUrl: "http://www.rcsb.org/pdb/rest/search", + _restQueryXml: "<orgPdbQuery><queryType>org.pdb.query.simple.AdvancedKeywordQuery</queryType><description>Text Search</description><keywords>QUERY</keywords></orgPdbQuery>", + _restReportUrl: "http://www.pdb.org/pdb/rest/customReport?pdbids=IDLIST&customReportColumns=structureId,structureTitle" + } + } +})(); + +(function (Jmol) { + + // Jmol core functionality + + Jmol._getGrabberOptions = function(applet, label, note) { + + // feel free to adjust this look to anything you want + + var c=[]; + c.push('<br><input type="text" id="'); + c.push(label); + c.push('_query" size="32" value="" />'); + c.push("<br><nobr>"); + c.push('<select id="'); + c.push(label); + c.push('_select">'); + c.push('<option value="$" selected>NCI(small molecules)</option>'); + c.push('<option value=":">PubChem(small molecules)</option>'); + c.push('<option value="=">RCSB(macromolecules)</option>'); + c.push("</select>"); + c.push('<button id="'); + c.push(label); + c.push('_submit">Search</button>'); + c.push("</nobr>"); + note && c.push(note); + document.writeln(c.join("")); + jQuery("#"+label+"_submit").click( + function(){ + applet._search() + } + ); + jQuery("#"+label+"_query").keypress( + function(a){ + 13==a.which&&applet._search() + } + ); + if (applet.repaint) { + applet.emptyMessage="Enter search term below", + applet.repaint() + }; + } + + Jmol._getWrapper = function(applet, isHeader) { + var s = (isHeader ? + "<div id=ID_appletinfotablediv style=width:Wpx;height:Hpx>\ + <table><tr><td></td><td><div id=ID_infotablediv style=width:Wpx;height:Hpx;display:none>\ + <table><tr height=20><td style=background:yellow><span id=ID_infoheaderdiv></span></td>\ + <td width=10><a href=javascript:Jmol.showInfo(ID,false)>[x]</a></td></tr><tr><td colspan=2>\ + <div id=ID_infodiv style=overflow:scroll;width:Wpx;height:" + (applet._height - 15) + "px></div></td></tr></table></div></td></tr>\ + <tr><td><div id=ID_appletdiv style=width:Wpx;height:Hpx>" + :"</div></td><td></td></tr></table></div>" + ).replace(/H/g, applet._height).replace(/W/g, applet._width).replace(/ID/g, applet._id); + document.write(s); + } + + Jmol._getScriptForDatabase = function(database) { + return (database == "$" ? Jmol.db._nciLoadScript : Jmol.db._fileLoadScript); + } + + // <dataset><record><structureId>1BLU</structureId><structureTitle>STRUCTURE OF THE 2[4FE-4S] FERREDOXIN FROM CHROMATIUM VINOSUM</structureTitle></record><record><structureId>3EUN</structureId><structureTitle>Crystal structure of the 2[4Fe-4S] C57A ferredoxin variant from allochromatium vinosum</structureTitle></record></dataset> + + Jmol._setInfo = function(applet, database, data) { + var info = []; + var header = ""; + if (data.indexOf("ERROR") == 0) + header = data; + else + switch (database) { + case "=": + var S = data.split("<structureId>"); + var info = ["<table>"]; + for (var i = 1; i < S.length; i++) { + info.push("<tr><td valign=top><a href=\"javascript:Jmol.search(" + applet._id + ",'=" + S[i].substring(0, 4) + "')\">" + S[i].substring(0, 4) + "</a></td>"); + info.push("<td>" + S[i].split("Title>")[1].split("</")[0] + "</td></tr>"); + } + info.push("</table>"); + header = (S.length - 1) + " matches"; + break; + case "$": // NCI + case ":": // pubChem + break; + default: + return; + } + applet._infoHeader = header; + applet._info = info.join(""); + applet._showInfo(true); + } + + Jmol._loadSuccess = function(a, fSuccess) { + Jmol._ajaxActive=!1; + fSuccess(a); + } + + Jmol._loadError = function(fError){ + Jmol._ajaxActive=!1; + Jmol.say("Error connecting to server."); + null!=fError&&fError() + } + + Jmol._isDatabaseCall = function(query) { + return (Jmol.db._databasePrefixes.indexOf(query.substring(0, 1)) >= 0); + } + + Jmol._getDirectDatabaseCall = function(query, checkXhr2) { + if (checkXhr2 && !Jmol.features.supports_xhr2()) + return query; + var pt = 2; + var call = Jmol.db._DirectDatabaseCalls[query.substring(0,pt)]; + if (!call) + call = Jmol.db._DirectDatabaseCalls[query.substring(0,--pt)]; + query = (call ? call.replace(/\%FILE/, query.substring(pt)) : query); + return query; + } + + Jmol._getRawDataFromServer = function(database,query,fSuccess,fError){ + Jmol._contactServer( + "getRawDataFromDatabase", + {database:database,query:query,script:Jmol._getScriptForDatabase(database)}, + fSuccess, fError + ); + } + + Jmol._getInfoFromDatabase = function(applet, database, query){ + if (database == "====") { + if (Jmol._checkActive()) + return; + var data = Jmol.db._restQueryXml.replace(/QUERY/,query); + var info = { + dataType: "text", + type: "POST", + contentType:"application/x-www-form-urlencoded", + url: Jmol.db._restQueryUrl, + data: encodeURIComponent(data) + "&req=browser", + success: function(data) {Jmol._ajaxActive=!1;Jmol._extractInfoFromRCSB(applet, database, query, data)}, + error: function() {Jmol._loadError(null)}, + async: Jmol._asynchronous + } + jQuery.ajax(info); + return; + } + Jmol._contactServer( + "getInfoFromDatabase", + {database:database,query:query}, + function(data) {Jmol._setInfo(applet, database, data) } + ); + } + + Jmol._extractInfoFromRCSB = function(applet, database, query, output) { + var n = output.length/5; + if (n == 0) + return; + if (query.length == 4 && n != 1) { + var QQQQ = query.toUpperCase(); + var pt = output.indexOf(QQQQ); + if (pt > 0 && "123456789".indexOf(QQQQ.substring(0, 1)) >= 0) + output = QQQQ + "," + output.substring(0, pt) + output.substring(pt + 5); + if (n > 50) + output = output.substring(0, 250); + output = output.replace(/\n/g,","); + var url = Jmol._restReportUrl.replace(/IDLIST/,output); + Jmol._loadFileData(applet, url, function(data) {Jmol._setInfo(applet, database, data) }); + } + } + + Jmol._checkActive = function() { + if (Jmol._ajaxActive) { + Jmol.say("Already connecting to the server - please wait for the first request to finish."); + return true; + } + Jmol._ajaxActive=!0; + return false; + } + + Jmol._loadFileData = function(applet, fileName, fSuccess, fError){ + if (Jmol._isDatabaseCall(fileName)) { + Jmol._setQueryTerm(applet, fileName); + //fileName = Jmol._getDirectDatabaseCall(fileName, true); + if (Jmol._isDatabaseCall(fileName)) { + // xhr2 not supported (MSIE) + fileName = Jmol._getDirectDatabaseCall(fileName, false); + Jmol._getRawDataFromServer("_",fileName,fSuccess,fError); + return; + } + } + if (!Jmol._checkActive()) + jQuery.ajax({ + dataType: "text", + url: fileName, + success: function(a) {Jmol._loadSuccess(a, fSuccess)}, + error: function() {Jmol._loadError(fError)}, + async: Jmol._asynchronous + }); + } + + Jmol._contactServer = function(cmd,content,fSuccess,fError){ + if (!Jmol._checkActive()) + jQuery.ajax({ + dataType: "text", + type: "POST", + data: JSON.stringify({ + call: cmd, + content: content, + info: Jmol._jmolInfo + }), + url: Jmol._serverUrl, + success: function(a) {Jmol._loadSuccess(a, fSuccess)}, + error:function() { Jmol._loadError(fError) }, + async:Jmol._asynchronous + }); + } + + Jmol._setQueryTerm = function(applet, query) { + if (!query || !applet._hasOptions) + return; + if (Jmol._isDatabaseCall(query)) { + var database = query.substring(0, 1); + query = query.substring(1); + if (database == "=" && query.length == 4 && query.substring(0, 1) == "=") + query = query.substring(1); + var d = document.getElementById(applet._id + "_select"); + for (var i = 0; i < d.options.length; i++) + if (d[i].value == database) + d[i].selected = true; + } + jQuery("#"+applet._id+"_query").val(query); + } + + // _Applet -- the main, full-featured, object + + Jmol._Applet = function(id, Info, caption){ + this._jmolType = "Jmol._Applet" + (Info.jmolIsSigned ? " (signed)" : ""); + this._id = id; + var suffix = id.replace(/^jmolApplet/,""); + this._jmolId = "jmolApplet" + suffix; + this._width = Info.width; + this._height = Info.height; + this._jmolIsSigned = Info.jmolIsSigned; + this._dataMultiplier=1; + this._hasOptions = Info.addSelectionOptions; + this._info = JSON.stringify(this); + this._infoHeader = this._jmolType + ' "' + this._id + '"' + jmolInitialize(Info.jmolJarPath, Info.jmolJarFile); + Info.jmolReadyFunctionName && jmolSetParameter("appletReadyCallback", Info.jmolReadyFunctionName); + var script = ""; + Jmol._getWrapper(this, true); + jmolApplet(["100%","100%"], script, suffix); + Jmol._getWrapper(this, false); + if (Info.addSelectionOptions) + Jmol._getGrabberOptions(this, id, caption); + return this; + } + + Jmol._Applet.prototype._showInfo = function(tf) { + if ((!this._isInfoVisible) == (!tf)) + return; + this._isInfoVisible = tf; + document.getElementById(this._id + "_infotablediv").style.display = (tf ? "block" : "none"); + document.getElementById(this._id + "_appletdiv").style.height = (tf ? 1 : this._height); + document.getElementById(this._id + "_appletdiv").style.width = (tf ? 1 : this._width); + this._show(!tf); + document.getElementById(this._id + "_infoheaderdiv").innerHTML = this._infoHeader; + document.getElementById(this._id + "_infodiv").innerHTML = this._info; + } + + Jmol._Applet.prototype._search = function(query, script){ + this._showInfo(false); + Jmol._setQueryTerm(this, query); + query || (query = jQuery("#"+this._id+"_query").val()); + query && (query = query.replace(/\"/g, "")); + var database; + if (Jmol._isDatabaseCall(query)) { + database = query.substring(0, 1); + query = query.substring(1); + } else { + database = (this._hasOptions ? jQuery("#"+this._id+"_select").val() : "$"); + } + if (database == "=" && query.length == 3) + query = "=" + query; // this is a ligand + var dm = database + query; + if (!query || dm.indexOf("?") < 0 && dm == this._thisJmolModel) + return; + this._thisJmolModel = dm; + if (database == "$" || database == ":") + this._jmolFileType = "MOL"; + else if (database == "=") + this._jmolFileType = "PDB"; + this._searchDatabase(query, database, script); + } + + Jmol._Applet.prototype._loadModel = function(mol, params) { + var script = 'load DATA "model"\n' + mol + '\nEND "model" ' + params; + _jmolFindApplet(this._jmolId).script(script); + } + + Jmol._Applet.prototype._show = function(tf) { + _jmolFindApplet(this._jmolId).resize(tf ? this._width : 1, tf ? this._height : 1); + } + + Jmol._Applet.prototype._script = function(script) { + _jmolFindApplet(this._jmolId).script(script); + } + + Jmol._Applet.prototype._loadFile = function(fileName, params){ + this._showInfo(false); + params || (params = ""); + this._thisJmolModel = "" + Math.random(); + var c = this; + Jmol._loadFileData(this, fileName, function(data){c._loadModel(data, params)}); + } + + Jmol._Applet.prototype._searchDatabase = function(query, database, script){ + this._showInfo(false); + if (query.indexOf("?") >= 0) { + Jmol._getInfoFromDatabase(this, database, query.split("?")[0]); + return; + } + script || (script = Jmol._getScriptForDatabase(database)); + if (Jmol.db._DirectDatabaseCalls[database]) { + this._loadFile(database + query, script); + return; + } + if (this._jmolIsSigned) { + this._script("zap;set echo middle center;echo Retrieving data...;refresh;load \"" + dm + "\";" + script); + } else { + // need to do the postLoad here as well + var c=this; + Jmol._getRawDataFromServer( + database, + query, + function(data){c._loadModel(data, ";" + script)} + ); + } + } + + Jmol._setCommonMethods = function(proto) { + proto._showInfo = Jmol._Applet.prototype._showInfo; + proto._search = Jmol._Applet.prototype._search; + } + + // _Image -- an alternative to _Applet + + Jmol._Image = function(id, Info, caption){ + this._jmolType = "image"; + this._id = id; + this._width = Info.width; + this._height = Info.height; + this._hasOptions = Info.addSelectionOptions; + this._info = JSON.stringify(this); + this._infoHeader = this._jmolType + ' "' + this._id + '"' + Jmol._getWrapper(this, true); + var s = '<img id="'+id+'_image" width="' + Info.width + '" height="' + Info.height + '" src=""/>'; + document.write(s); + Jmol._getWrapper(this, false); + if (Info.addSelectionOptions) + Jmol._getGrabberOptions(this, id, caption); + return this; + } + + Jmol._setCommonMethods(Jmol._Image.prototype); + + Jmol._Image.prototype._script = function(script) {} // not implemented + + Jmol._Image.prototype._show = function(tf) { + document.getElementById(this._id + "_appletdiv").style.display = (tf ? "block" : "none"); + } + + Jmol._Image.prototype._loadFile = function(fileName, params){ + this._showInfo(false); + this._thisJmolModel = "" + Math.random(); + params = (params ? params : ""); + var database = ""; + if (Jmol._isDatabaseCall(fileName)) { + database = fileName.substring(0, 1); + fileName = Jmol._getDirectDatabaseCall(fileName, false); + } else if (fileName.indexOf("://") < 0) { + var ref = document.location.href + var pt = ref.lastIndexOf("/"); + fileName = ref.substring(0, pt + 1) + fileName; + } + + var src = Jmol._serverUrl + + "?call=getImageForFileLoad" + + "&file=" + escape(fileName) + + "&width=" + this._width + + "&height=" + this._height + + "¶ms=" + escape(params) + ";frank off;"; + alert(src) + document.getElementById(this._id + "_image").src = src; + } + + Jmol._Image.prototype._searchDatabase = function(query, database, script){ + if (query.indexOf("?") == query.length - 1) + return; + this._showInfo(false); + script || (script = Jmol._getScriptForDatabase(database)); + var src = Jmol._serverUrl + + "?call=getImageFromDatabase" + + "&database=" + database + + "&query=" + query + + "&width=" + this._width + + "&height=" + this._height + + "&script=;frank off;" + script; + document.getElementById(this._id + "_image").src = src; + } + +})(Jmol); Modified: trunk/Jmol/appletweb/test2.htm =================================================================== --- trunk/Jmol/appletweb/test2.htm 2012-04-22 05:22:56 UTC (rev 17025) +++ trunk/Jmol/appletweb/test2.htm 2012-04-22 05:37:57 UTC (rev 17026) @@ -5,6 +5,8 @@ <script type="text/javascript" src="ChemDoodleWeb-libs.js"></script> <script type="text/javascript" src="ChemDoodleWeb-unpacked.js"></script> <script type="text/javascript" src="Jmol.js"></script> +<script type="text/javascript" src="JmolCore.js"></script> +<script type="text/javascript" src="JmolApi.js"></script> <script type="text/javascript" src="JmolCD.js"></script> <script type="text/javascript"> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2012-04-22 06:00:27
|
Revision: 17027 http://jmol.svn.sourceforge.net/jmol/?rev=17027&view=rev Author: hansonr Date: 2012-04-22 06:00:20 +0000 (Sun, 22 Apr 2012) Log Message: ----------- Jmol object JavaScript separated into Core, Api, Applet, and CD Modified Paths: -------------- trunk/Jmol/appletweb/JmolCore.js trunk/Jmol/appletweb/test2.htm Added Paths: ----------- trunk/Jmol/appletweb/JmolApplet.js Added: trunk/Jmol/appletweb/JmolApplet.js =================================================================== --- trunk/Jmol/appletweb/JmolApplet.js (rev 0) +++ trunk/Jmol/appletweb/JmolApplet.js 2012-04-22 06:00:20 UTC (rev 17027) @@ -0,0 +1,184 @@ +// JmolApplet.js -- Jmol._Applet and Jmol._Image + +(function (Jmol) { + + Jmol._setCommonMethods = function(proto) { + proto._showInfo = Jmol._Applet.prototype._showInfo; + proto._search = Jmol._Applet.prototype._search; + } + + // _Applet -- the main, full-featured, object + + Jmol._Applet = function(id, Info, caption){ + this._jmolType = "Jmol._Applet" + (Info.jmolIsSigned ? " (signed)" : ""); + this._id = id; + var suffix = id.replace(/^jmolApplet/,""); + this._jmolId = "jmolApplet" + suffix; + this._width = Info.width; + this._height = Info.height; + this._jmolIsSigned = Info.jmolIsSigned; + this._dataMultiplier=1; + this._hasOptions = Info.addSelectionOptions; + this._info = JSON.stringify(this); + this._infoHeader = this._jmolType + ' "' + this._id + '"' + jmolInitialize(Info.jmolJarPath, Info.jmolJarFile); + Info.jmolReadyFunctionName && jmolSetParameter("appletReadyCallback", Info.jmolReadyFunctionName); + var script = ""; + Jmol._getWrapper(this, true); + jmolApplet(["100%","100%"], script, suffix); + Jmol._getWrapper(this, false); + if (Info.addSelectionOptions) + Jmol._getGrabberOptions(this, id, caption); + return this; + } + + Jmol._Applet.prototype._showInfo = function(tf) { + if ((!this._isInfoVisible) == (!tf)) + return; + this._isInfoVisible = tf; + document.getElementById(this._id + "_infotablediv").style.display = (tf ? "block" : "none"); + document.getElementById(this._id + "_appletdiv").style.height = (tf ? 1 : this._height); + document.getElementById(this._id + "_appletdiv").style.width = (tf ? 1 : this._width); + this._show(!tf); + document.getElementById(this._id + "_infoheaderdiv").innerHTML = this._infoHeader; + document.getElementById(this._id + "_infodiv").innerHTML = this._info; + } + + Jmol._Applet.prototype._search = function(query, script){ + this._showInfo(false); + Jmol._setQueryTerm(this, query); + query || (query = jQuery("#"+this._id+"_query").val()); + query && (query = query.replace(/\"/g, "")); + var database; + if (Jmol._isDatabaseCall(query)) { + database = query.substring(0, 1); + query = query.substring(1); + } else { + database = (this._hasOptions ? jQuery("#"+this._id+"_select").val() : "$"); + } + if (database == "=" && query.length == 3) + query = "=" + query; // this is a ligand + var dm = database + query; + if (!query || dm.indexOf("?") < 0 && dm == this._thisJmolModel) + return; + this._thisJmolModel = dm; + if (database == "$" || database == ":") + this._jmolFileType = "MOL"; + else if (database == "=") + this._jmolFileType = "PDB"; + this._searchDatabase(query, database, script); + } + + Jmol._Applet.prototype._loadModel = function(mol, params) { + var script = 'load DATA "model"\n' + mol + '\nEND "model" ' + params; + _jmolFindApplet(this._jmolId).script(script); + } + + Jmol._Applet.prototype._show = function(tf) { + _jmolFindApplet(this._jmolId).resize(tf ? this._width : 1, tf ? this._height : 1); + } + + Jmol._Applet.prototype._script = function(script) { + _jmolFindApplet(this._jmolId).script(script); + } + + Jmol._Applet.prototype._loadFile = function(fileName, params){ + this._showInfo(false); + params || (params = ""); + this._thisJmolModel = "" + Math.random(); + var c = this; + Jmol._loadFileData(this, fileName, function(data){c._loadModel(data, params)}); + } + + Jmol._Applet.prototype._searchDatabase = function(query, database, script){ + this._showInfo(false); + if (query.indexOf("?") >= 0) { + Jmol._getInfoFromDatabase(this, database, query.split("?")[0]); + return; + } + script || (script = Jmol._getScriptForDatabase(database)); + if (Jmol.db._DirectDatabaseCalls[database]) { + this._loadFile(database + query, script); + return; + } + if (this._jmolIsSigned) { + this._script("zap;set echo middle center;echo Retrieving data...;refresh;load \"" + dm + "\";" + script); + } else { + // need to do the postLoad here as well + var c=this; + Jmol._getRawDataFromServer( + database, + query, + function(data){c._loadModel(data, ";" + script)} + ); + } + } + + + // _Image -- an alternative to _Applet + + Jmol._Image = function(id, Info, caption){ + this._jmolType = "image"; + this._id = id; + this._width = Info.width; + this._height = Info.height; + this._hasOptions = Info.addSelectionOptions; + this._info = JSON.stringify(this); + this._infoHeader = this._jmolType + ' "' + this._id + '"' + Jmol._getWrapper(this, true); + var s = '<img id="'+id+'_image" width="' + Info.width + '" height="' + Info.height + '" src=""/>'; + document.write(s); + Jmol._getWrapper(this, false); + if (Info.addSelectionOptions) + Jmol._getGrabberOptions(this, id, caption); + return this; + } + + Jmol._setCommonMethods(Jmol._Image.prototype); + + Jmol._Image.prototype._script = function(script) {} // not implemented + + Jmol._Image.prototype._show = function(tf) { + document.getElementById(this._id + "_appletdiv").style.display = (tf ? "block" : "none"); + } + + Jmol._Image.prototype._loadFile = function(fileName, params){ + this._showInfo(false); + this._thisJmolModel = "" + Math.random(); + params = (params ? params : ""); + var database = ""; + if (Jmol._isDatabaseCall(fileName)) { + database = fileName.substring(0, 1); + fileName = Jmol._getDirectDatabaseCall(fileName, false); + } else if (fileName.indexOf("://") < 0) { + var ref = document.location.href + var pt = ref.lastIndexOf("/"); + fileName = ref.substring(0, pt + 1) + fileName; + } + + var src = Jmol._serverUrl + + "?call=getImageForFileLoad" + + "&file=" + escape(fileName) + + "&width=" + this._width + + "&height=" + this._height + + "¶ms=" + escape(params) + ";frank off;"; + alert(src) + document.getElementById(this._id + "_image").src = src; + } + + Jmol._Image.prototype._searchDatabase = function(query, database, script){ + if (query.indexOf("?") == query.length - 1) + return; + this._showInfo(false); + script || (script = Jmol._getScriptForDatabase(database)); + var src = Jmol._serverUrl + + "?call=getImageFromDatabase" + + "&database=" + database + + "&query=" + query + + "&width=" + this._width + + "&height=" + this._height + + "&script=;frank off;" + script; + document.getElementById(this._id + "_image").src = src; + } + +})(Jmol); Modified: trunk/Jmol/appletweb/JmolCore.js =================================================================== --- trunk/Jmol/appletweb/JmolCore.js 2012-04-22 05:37:57 UTC (rev 17026) +++ trunk/Jmol/appletweb/JmolCore.js 2012-04-22 06:00:20 UTC (rev 17027) @@ -285,182 +285,5 @@ jQuery("#"+applet._id+"_query").val(query); } - // _Applet -- the main, full-featured, object - - Jmol._Applet = function(id, Info, caption){ - this._jmolType = "Jmol._Applet" + (Info.jmolIsSigned ? " (signed)" : ""); - this._id = id; - var suffix = id.replace(/^jmolApplet/,""); - this._jmolId = "jmolApplet" + suffix; - this._width = Info.width; - this._height = Info.height; - this._jmolIsSigned = Info.jmolIsSigned; - this._dataMultiplier=1; - this._hasOptions = Info.addSelectionOptions; - this._info = JSON.stringify(this); - this._infoHeader = this._jmolType + ' "' + this._id + '"' - jmolInitialize(Info.jmolJarPath, Info.jmolJarFile); - Info.jmolReadyFunctionName && jmolSetParameter("appletReadyCallback", Info.jmolReadyFunctionName); - var script = ""; - Jmol._getWrapper(this, true); - jmolApplet(["100%","100%"], script, suffix); - Jmol._getWrapper(this, false); - if (Info.addSelectionOptions) - Jmol._getGrabberOptions(this, id, caption); - return this; - } - Jmol._Applet.prototype._showInfo = function(tf) { - if ((!this._isInfoVisible) == (!tf)) - return; - this._isInfoVisible = tf; - document.getElementById(this._id + "_infotablediv").style.display = (tf ? "block" : "none"); - document.getElementById(this._id + "_appletdiv").style.height = (tf ? 1 : this._height); - document.getElementById(this._id + "_appletdiv").style.width = (tf ? 1 : this._width); - this._show(!tf); - document.getElementById(this._id + "_infoheaderdiv").innerHTML = this._infoHeader; - document.getElementById(this._id + "_infodiv").innerHTML = this._info; - } - - Jmol._Applet.prototype._search = function(query, script){ - this._showInfo(false); - Jmol._setQueryTerm(this, query); - query || (query = jQuery("#"+this._id+"_query").val()); - query && (query = query.replace(/\"/g, "")); - var database; - if (Jmol._isDatabaseCall(query)) { - database = query.substring(0, 1); - query = query.substring(1); - } else { - database = (this._hasOptions ? jQuery("#"+this._id+"_select").val() : "$"); - } - if (database == "=" && query.length == 3) - query = "=" + query; // this is a ligand - var dm = database + query; - if (!query || dm.indexOf("?") < 0 && dm == this._thisJmolModel) - return; - this._thisJmolModel = dm; - if (database == "$" || database == ":") - this._jmolFileType = "MOL"; - else if (database == "=") - this._jmolFileType = "PDB"; - this._searchDatabase(query, database, script); - } - - Jmol._Applet.prototype._loadModel = function(mol, params) { - var script = 'load DATA "model"\n' + mol + '\nEND "model" ' + params; - _jmolFindApplet(this._jmolId).script(script); - } - - Jmol._Applet.prototype._show = function(tf) { - _jmolFindApplet(this._jmolId).resize(tf ? this._width : 1, tf ? this._height : 1); - } - - Jmol._Applet.prototype._script = function(script) { - _jmolFindApplet(this._jmolId).script(script); - } - - Jmol._Applet.prototype._loadFile = function(fileName, params){ - this._showInfo(false); - params || (params = ""); - this._thisJmolModel = "" + Math.random(); - var c = this; - Jmol._loadFileData(this, fileName, function(data){c._loadModel(data, params)}); - } - - Jmol._Applet.prototype._searchDatabase = function(query, database, script){ - this._showInfo(false); - if (query.indexOf("?") >= 0) { - Jmol._getInfoFromDatabase(this, database, query.split("?")[0]); - return; - } - script || (script = Jmol._getScriptForDatabase(database)); - if (Jmol.db._DirectDatabaseCalls[database]) { - this._loadFile(database + query, script); - return; - } - if (this._jmolIsSigned) { - this._script("zap;set echo middle center;echo Retrieving data...;refresh;load \"" + dm + "\";" + script); - } else { - // need to do the postLoad here as well - var c=this; - Jmol._getRawDataFromServer( - database, - query, - function(data){c._loadModel(data, ";" + script)} - ); - } - } - - Jmol._setCommonMethods = function(proto) { - proto._showInfo = Jmol._Applet.prototype._showInfo; - proto._search = Jmol._Applet.prototype._search; - } - - // _Image -- an alternative to _Applet - - Jmol._Image = function(id, Info, caption){ - this._jmolType = "image"; - this._id = id; - this._width = Info.width; - this._height = Info.height; - this._hasOptions = Info.addSelectionOptions; - this._info = JSON.stringify(this); - this._infoHeader = this._jmolType + ' "' + this._id + '"' - Jmol._getWrapper(this, true); - var s = '<img id="'+id+'_image" width="' + Info.width + '" height="' + Info.height + '" src=""/>'; - document.write(s); - Jmol._getWrapper(this, false); - if (Info.addSelectionOptions) - Jmol._getGrabberOptions(this, id, caption); - return this; - } - - Jmol._setCommonMethods(Jmol._Image.prototype); - - Jmol._Image.prototype._script = function(script) {} // not implemented - - Jmol._Image.prototype._show = function(tf) { - document.getElementById(this._id + "_appletdiv").style.display = (tf ? "block" : "none"); - } - - Jmol._Image.prototype._loadFile = function(fileName, params){ - this._showInfo(false); - this._thisJmolModel = "" + Math.random(); - params = (params ? params : ""); - var database = ""; - if (Jmol._isDatabaseCall(fileName)) { - database = fileName.substring(0, 1); - fileName = Jmol._getDirectDatabaseCall(fileName, false); - } else if (fileName.indexOf("://") < 0) { - var ref = document.location.href - var pt = ref.lastIndexOf("/"); - fileName = ref.substring(0, pt + 1) + fileName; - } - - var src = Jmol._serverUrl - + "?call=getImageForFileLoad" - + "&file=" + escape(fileName) - + "&width=" + this._width - + "&height=" + this._height - + "¶ms=" + escape(params) + ";frank off;"; - alert(src) - document.getElementById(this._id + "_image").src = src; - } - - Jmol._Image.prototype._searchDatabase = function(query, database, script){ - if (query.indexOf("?") == query.length - 1) - return; - this._showInfo(false); - script || (script = Jmol._getScriptForDatabase(database)); - var src = Jmol._serverUrl - + "?call=getImageFromDatabase" - + "&database=" + database - + "&query=" + query - + "&width=" + this._width - + "&height=" + this._height - + "&script=;frank off;" + script; - document.getElementById(this._id + "_image").src = src; - } - })(Jmol); Modified: trunk/Jmol/appletweb/test2.htm =================================================================== --- trunk/Jmol/appletweb/test2.htm 2012-04-22 05:37:57 UTC (rev 17026) +++ trunk/Jmol/appletweb/test2.htm 2012-04-22 06:00:20 UTC (rev 17027) @@ -6,8 +6,9 @@ <script type="text/javascript" src="ChemDoodleWeb-unpacked.js"></script> <script type="text/javascript" src="Jmol.js"></script> <script type="text/javascript" src="JmolCore.js"></script> +<script type="text/javascript" src="JmolApplet.js"></script> +<script type="text/javascript" src="JmolCD.js"></script> <script type="text/javascript" src="JmolApi.js"></script> -<script type="text/javascript" src="JmolCD.js"></script> <script type="text/javascript"> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2012-04-22 13:06:38
|
Revision: 17028 http://jmol.svn.sourceforge.net/jmol/?rev=17028&view=rev Author: hansonr Date: 2012-04-22 13:06:31 +0000 (Sun, 22 Apr 2012) Log Message: ----------- Full Java-side support on all browsers I have available, including MSIE, Opera, Chrome, Firefox (all via Windows 7) Replaces ChemDoodleWeb-lib.js with it's original scripts (particularly fixing a bug in jQuery 1.6.2 preventing use in MSIE and Opera), including jQuery.js, mousewheel.js (a jQuery plugin), and gl-matrix-min.js Modified Paths: -------------- trunk/Jmol/appletweb/JmolCore.js trunk/Jmol/appletweb/test2.htm Modified: trunk/Jmol/appletweb/JmolCore.js =================================================================== --- trunk/Jmol/appletweb/JmolCore.js 2012-04-22 06:00:20 UTC (rev 17027) +++ trunk/Jmol/appletweb/JmolCore.js 2012-04-22 13:06:31 UTC (rev 17028) @@ -234,7 +234,7 @@ Jmol._loadFileData = function(applet, fileName, fSuccess, fError){ if (Jmol._isDatabaseCall(fileName)) { Jmol._setQueryTerm(applet, fileName); - //fileName = Jmol._getDirectDatabaseCall(fileName, true); + fileName = Jmol._getDirectDatabaseCall(fileName, true); if (Jmol._isDatabaseCall(fileName)) { // xhr2 not supported (MSIE) fileName = Jmol._getDirectDatabaseCall(fileName, false); Modified: trunk/Jmol/appletweb/test2.htm =================================================================== --- trunk/Jmol/appletweb/test2.htm 2012-04-22 06:00:20 UTC (rev 17027) +++ trunk/Jmol/appletweb/test2.htm 2012-04-22 13:06:31 UTC (rev 17028) @@ -1,9 +1,11 @@ <html> <title>Jmol/ChemDoodle Demo -- Using JmolData.jar for serving ChemDoodle models</title> <head> -<script type="text/javascript" src="json2.js"></script> -<script type="text/javascript" src="ChemDoodleWeb-libs.js"></script> -<script type="text/javascript" src="ChemDoodleWeb-unpacked.js"></script> +<script type="text/javascript" src="json2.js" title="required for MSIE"></script> +<script type="text/javascript" src="jQuery.min.js" title="required; replaces ChemDoodleWeb-lib;fixed bug in that version"></script> +<script type="text/javascript" src="gl-matrix-min.js" title="optional; replaces ChemDoodleWeb-lib;required if using ChemDoodle option"></script> +<script type="text/javascript" src="mousewheel.js" title="optional; replaces ChemDoodleWeb-lib;required if using ChemDoodle option"></script> +<script type="text/javascript" src="ChemDoodleWeb-unpacked.js" title="optional; required only if using ChemDoodle option"></script> <script type="text/javascript" src="Jmol.js"></script> <script type="text/javascript" src="JmolCore.js"></script> <script type="text/javascript" src="JmolApplet.js"></script> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2012-04-23 02:30:43
|
Revision: 17033 http://jmol.svn.sourceforge.net/jmol/?rev=17033&view=rev Author: hansonr Date: 2012-04-23 02:30:35 +0000 (Mon, 23 Apr 2012) Log Message: ----------- isolation of ChemDoodle into JmolCD.js -- JmolApi.js changes in Jmol.getApplet() -- JmolApplet.js -- Jmol._Image.prototype... fix for image mode -- JmolCore.js -- Jmol new _getCanvas dummy function, revised version -- new Jmol._getGrabberOptions -- new Jmol._getWrapper Modified Paths: -------------- trunk/Jmol/appletweb/JmolApi.js trunk/Jmol/appletweb/JmolApplet.js trunk/Jmol/appletweb/JmolCD.js trunk/Jmol/appletweb/JmolCore.js trunk/Jmol/appletweb/jmolcd2.php Modified: trunk/Jmol/appletweb/JmolApi.js =================================================================== --- trunk/Jmol/appletweb/JmolApi.js 2012-04-23 02:25:05 UTC (rev 17032) +++ trunk/Jmol/appletweb/JmolApi.js 2012-04-23 02:30:35 UTC (rev 17033) @@ -1,7 +1,5 @@ // JmolApi.js -- Jmol user functions -if(typeof(ChemDoodle)=="undefined") ChemDoodle = null; - (function (Jmol) { Jmol.getVersion = function(){return _version}; @@ -29,7 +27,7 @@ jmolReadyFunctionName: "" }); - var applet; // return value + var applet = null; // return value /* a general function that will switch to the desired rendering option involving Jmol or ChemDoodle. @@ -59,35 +57,12 @@ // Jmol applet, signed or unsigned - applet = new Jmol._Applet(id, Info, null); - model = null; - - } else if (!Info.useJmolOnly && !Info.useImageOnly && ChemDoodle) { - - // ChemDoodle: first try with WebGL unless that doesn't work or we have indicated NOWEBGL - if (Info.useWebGlIfAvailable && ChemDoodle.featureDetection.supports_webgl()) { - applet = new Jmol._Canvas3D(id, Info, null); - } else { - applet = {} - } - if (applet.gl) { - //applet.specs.set3DRepresentation('Stick'); - applet.specs.set3DRepresentation('Ball and Stick'); - applet.specs.backgroundColor = 'black'; - } else { - applet = new Jmol._Canvas(id, Info); - applet.specs.bonds_useJMOLColors = true; - applet.specs.bonds_width_2D = 3; - applet.specs.atoms_display = false; - applet.specs.backgroundColor = 'black'; - applet.specs.bonds_clearOverlaps_2D = true; - } - - } else { - + return new Jmol._Applet(id, Info, null); + } + if (!Info.useJmolOnly && !Info.useImageOnly) + applet = Jmol._getCanvas(id, Info); + if (applet == null) applet = new Jmol._Image(id, Info, null); - - } model && applet._search(model); return applet; } Modified: trunk/Jmol/appletweb/JmolApplet.js =================================================================== --- trunk/Jmol/appletweb/JmolApplet.js 2012-04-23 02:25:05 UTC (rev 17032) +++ trunk/Jmol/appletweb/JmolApplet.js 2012-04-23 02:30:35 UTC (rev 17033) @@ -161,8 +161,7 @@ + "&file=" + escape(fileName) + "&width=" + this._width + "&height=" + this._height - + "¶ms=" + escape(params) + ";frank off;"; - alert(src) + + "¶ms=" + escape(params + ";frank off;"); document.getElementById(this._id + "_image").src = src; } @@ -177,7 +176,7 @@ + "&query=" + query + "&width=" + this._width + "&height=" + this._height - + "&script=;frank off;" + script; + + "&script=" + escape(script + ";frank off;"); document.getElementById(this._id + "_image").src = src; } Modified: trunk/Jmol/appletweb/JmolCD.js =================================================================== --- trunk/Jmol/appletweb/JmolCD.js 2012-04-23 02:25:05 UTC (rev 17032) +++ trunk/Jmol/appletweb/JmolCD.js 2012-04-23 02:30:35 UTC (rev 17033) @@ -1,6 +1,14 @@ // JmolCD.js -- Jmol ChemDoodle extension author: Bob Hanson, ha...@st... 4/16/2012 -// If using ChemDoodle, this package requires ChemDoodleWeb-libs.js and ChemDoodleWeb.js prior to JmolCD.js +// This library requires +// +// JmolCore.js +// gl-matrix-min.js +// jQuery.min.js +// mousewheel.js +// ChemDoodleWeb.js +// +// prior to JmolCD.js if(typeof(ChemDoodle)=="undefined") ChemDoodle = null; @@ -9,16 +17,27 @@ if (!ChemDoodle) return; + + Jmol._getCanvas = function(id, Info) { + // overrides the function in JmolCore.js + // ChemDoodle: first try with WebGL unless that doesn't work or we have indicated NOWEBGL + var applet = (Info.useWebGlIfAvailable && ChemDoodle.featureDetection.supports_webgl() + ? new Jmol._Canvas3D(id, Info, null) : null); + if (applet && applet.gl) { + //applet.specs.set3DRepresentation('Stick'); + applet.specs.set3DRepresentation('Ball and Stick'); + applet.specs.backgroundColor = 'black'; + } else { + applet = new Jmol._Canvas(id, Info); + applet.specs.bonds_useJMOLColors = true; + applet.specs.bonds_width_2D = 3; + applet.specs.atoms_display = false; + applet.specs.backgroundColor = 'black'; + applet.specs.bonds_clearOverlaps_2D = true; + } + return applet; + } - // Note: all of the rest of this can be removed if you have no interest in using ChemDoodle - - // changes: MolGrabberCanvas, MolGrabberCanvas3D - // -- properly scales data using dataMultiplier 1 (3D canvas) or 20 (2d canvas) - // -- generalized selection/input options - // -- adds caption - // new: Applet, Image - - Jmol._Canvas3D = function(id, Info, caption){ this._jmolType = "Jmol._Canvas3D"; this._id = id; @@ -32,12 +51,10 @@ this.create(id,Info.width,Info.height); Jmol._getWrapper(this, false); if (Info.addSelectionOptions) - Jmol._getGrabberOptions(this, id, caption); // just for this test page + Jmol._getGrabberOptions(this, id, caption); return this; } - // MolGrabberCanvas changes add a dataMultiplier, subclasses TransformCanvas, modifies display options - Jmol._Canvas = function(id, Info, caption){ this._jmolType = "Jmol._Canvas"; this._id = id; Modified: trunk/Jmol/appletweb/JmolCore.js =================================================================== --- trunk/Jmol/appletweb/JmolCore.js 2012-04-23 02:25:05 UTC (rev 17032) +++ trunk/Jmol/appletweb/JmolCore.js 2012-04-23 02:30:35 UTC (rev 17033) @@ -26,8 +26,6 @@ // The NCI and RCSB databases are accessed via direct AJAX. -if(typeof(ChemDoodle)=="undefined") ChemDoodle = null; - Jmol = (function() { return { features: { @@ -35,7 +33,7 @@ }, _jmolInfo: { userAgent:navigator.userAgent, - version: version = 'Jmol 12.3.23' + (ChemDoodle ? "; ChemDoodle " + ChemDoodle.getVersion(): "") + version: version = 'Jmol 12.3.23' }, _serverUrl: "http://chemapps.stolaf.edu/jmol/jmolcd.php", _asynchronous: !0, @@ -53,7 +51,8 @@ _restQueryUrl: "http://www.rcsb.org/pdb/rest/search", _restQueryXml: "<orgPdbQuery><queryType>org.pdb.query.simple.AdvancedKeywordQuery</queryType><description>Text Search</description><keywords>QUERY</keywords></orgPdbQuery>", _restReportUrl: "http://www.pdb.org/pdb/rest/customReport?pdbids=IDLIST&customReportColumns=structureId,structureTitle" - } + }, + _getCanvas: function(){ /* only in JmolCD.js */ return null } } })(); @@ -65,25 +64,14 @@ // feel free to adjust this look to anything you want - var c=[]; - c.push('<br><input type="text" id="'); - c.push(label); - c.push('_query" size="32" value="" />'); - c.push("<br><nobr>"); - c.push('<select id="'); - c.push(label); - c.push('_select">'); - c.push('<option value="$" selected>NCI(small molecules)</option>'); - c.push('<option value=":">PubChem(small molecules)</option>'); - c.push('<option value="=">RCSB(macromolecules)</option>'); - c.push("</select>"); - c.push('<button id="'); - c.push(label); - c.push('_submit">Search</button>'); - c.push("</nobr>"); - note && c.push(note); - document.writeln(c.join("")); - jQuery("#"+label+"_submit").click( + document.writeln('<br><input type="text" id="ID_query"\ + size="32" value="" /><br><nobr><select id="ID_select">\ + <option value="$" selected>NCI(small molecules)</option>\ + <option value=":">PubChem(small molecules)</option>\ + <option value="=">RCSB(macromolecules)</option>\ + </select>\<button id="ID_submit">Search</button></nobr>'.replace(/ID/g, label)); + note && document.writeln(note); + jQuery("#"+label+"_submit").click( function(){ applet._search() } @@ -100,15 +88,23 @@ } Jmol._getWrapper = function(applet, isHeader) { - var s = (isHeader ? - "<div id=ID_appletinfotablediv style=width:Wpx;height:Hpx>\ - <table><tr><td></td><td><div id=ID_infotablediv style=width:Wpx;height:Hpx;display:none>\ + if (!isHeader) { + document.write("</div></td></tr></table></div>"); + return; + } + var height = applet._height; + var width = applet._width; + if (typeof height !== "string") + height += "px"; + if (typeof width !== "string") + width += "px"; + var s = "<div id=ID_appletinfotablediv style=width:Wpx;height:Hpx>\ + <table><tr><td><div id=ID_infotablediv style=width:Wpx;height:Hpx;display:none>\ <table><tr height=20><td style=background:yellow><span id=ID_infoheaderdiv></span></td>\ <td width=10><a href=javascript:Jmol.showInfo(ID,false)>[x]</a></td></tr><tr><td colspan=2>\ <div id=ID_infodiv style=overflow:scroll;width:Wpx;height:" + (applet._height - 15) + "px></div></td></tr></table></div></td></tr>\ - <tr><td><div id=ID_appletdiv style=width:Wpx;height:Hpx>" - :"</div></td><td></td></tr></table></div>" - ).replace(/H/g, applet._height).replace(/W/g, applet._width).replace(/ID/g, applet._id); + <tr><td><div id=ID_appletdiv style=width:Wpx;height:Hpx>"; + s = s.replace(/Hpx/g, height).replace(/Wpx/g, width).replace(/ID/g, applet._id); document.write(s); } Modified: trunk/Jmol/appletweb/jmolcd2.php =================================================================== --- trunk/Jmol/appletweb/jmolcd2.php 2012-04-23 02:25:05 UTC (rev 17032) +++ trunk/Jmol/appletweb/jmolcd2.php 2012-04-23 02:30:35 UTC (rev 17033) @@ -42,8 +42,42 @@ $imagedata = ""; $output = ""; -if ($call == "getImageForFileLoad" || $call == "getImageFromDatabase") { +if ($call == "getInfoFromDatabase") { + if ($database == '=') { + $restQueryUrl = "http://www.pdb.org/pdb/rest/search"; + $restReportUrl = "http://www.pdb.org/pdb/rest/customReport"; + $xml = "<orgPdbQuery><queryType>org.pdb.query.simple.AdvancedKeywordQuery</queryType><description>Text Search</description><keywords>$query</keywords></orgPdbQuery>"; + $context = stream_context_create(array('http' => array( + 'method' => 'POST', + 'header' => 'Content-Type: application/x-www-form-urlencoded', + 'content' => $xml)) + ); + $output = file_get_contents($restQueryUrl, false, $context); + $n = strlen($output)/5; + if ($n == 0) { + $output = "ERROR: \"$query\" not found"; + } else { + if (strlen($query) == 4 && $n != 1) { + $QQQQ = strtoupper($query); + if (strpos("123456789", substr($QQQQ, 0, 1)) == 0 && strpos($output, $QQQQ) > 0) { + $output = "$QQQQ\n".$output.str_replace("$QQQQ\n", "",$output); + } + } + if ($n > 50) { + $output = substr($output, 0, 250); + } + $output = str_replace("\n",",",$output); + //http://www.rcsb.org/pdb/rest/customReport?pdbids=1crn,1d66,1blu,&customReportColumns=structureId,structureTitle + $output = $restReportUrl."?pdbids=".$output."&customReportColumns=structureId,structureTitle"; + $output = "<result query=\"$query\" count=\"$n\">".file_get_contents($output)."</result>"; + } + } +} +if ($call == "getInfoFromDatabase") { + // done +} else if ($call == "getImageForFileLoad" || $call == "getImageFromDatabase") { + // max size for image is 1000x1000 $imagefile = "/tmp/img".rand().".png"; @@ -57,7 +91,7 @@ $height = 300; } if ($call == "getImageFromDatabase") { - $cmd = $cmd.'"load \\"'.$database.$query.'\\"'.$postLoad.'" -g'.$width.'x'.$height.' -wPNG:'.$imagefile; + $cmd = $cmd.'"load \\"'.$database.$query.'\\"'.$postLoad.'" -g'.$width.'x'.$height.' -wPNG:'.$imagefile; } else { $file = $_REQUEST[file]; $params = $_REQUEST[params]; @@ -67,14 +101,16 @@ $imagedata = file_get_contents($imagefile); } else if ($call == "getRawDataFromDatabase") { - +//TODO: fix this so that if ($database == '\\$') { $cmd = $cmd.'"load \\"'.$database.$query.'\\"'.$postLoad.';write MOL"'; + exec($cmd, $result); + $output = implode("\n",$result); } else { - $cmd = $cmd.'"print load(\\"'.$database.$query.'\\")"'; + if ($database == "_") + $database = ""; + $output = file_get_contents($database.$query); } - exec($cmd, $result); - $output = implode("\n",$result); } else if ($call == "getMoleculeFromDatabase") { @@ -90,7 +126,6 @@ } else { - // just the test result -- penicillin $result = '{"mol":{"a":[{"x":78.474,"y":18.444,"z":3.67},{"x":64.958,"y":64.212006,"z":7.6419997},{"x":103.462,"y":26.569998,"z":-4.9280005},{"x":89.946,"y":72.338,"z":-0.956},{"x":109.19601,"y":53.517998,"z":-7.2460003},{"x":31.98,"y":28.406,"z":19.326},{"x":-84.273994,"y":-16.376001,"z":51.858},{"x":-115.051994,"y":-3.2080002,"z":14.070001},{"l":"H","x":-18.426,"y":13.716001,"z":17.006},{"x":59.22,"y":37.264,"z":9.952001},{"l":"O","x":-99.78,"y":-50.052002,"z":-24.666002},{"l":"O","x":-25.512001,"y":-33.281998,"z":-38.72},{"l":"O","x":22.08,"y":29.476002,"z":-26.811998},{"l":"O","x":-92.08,"y":-69.404,"z":14.316},{"x":-88.61001,"y":-49.4,"z":-3.246},{"x":13.762001,"y":25.081999,"z":-4.454},{"x":-70.782,"y":-26.126001,"z":3.75},{"x":-29.484001,"y":14.0,"z":-23.994},{"x":-37.694,"y":-14.437999,"z":-29.506},{"l":"H","x":-103.7,"y":-83.898,"z":8.932},{"l":"N","x":-11.774,"y":17.23,"z":-0.8759999},{"x":-59.156,"y":16.960001,"z":-17.647999},{"x":-85.96,"y":-6.886,"z":22.816},{"l":"S","x":-66.38,"y":23.898,"z":17.618},{"l":"N","x":-63.18,"y":-11.977999,"z":-20.772},{"l":"H","x":-52.845997,"y":-33.494,"z":13.710001},{"l":"H","x":-70.414,"y":29.387997,"z":-31.578003},{"l":"H","x":-93.138,"y":-36.222,"z":53.544},{"l":"H","x":-95.102005,"y":-2.47,"z":64.688},{"l":"H","x":-63.384,"y":-17.2,"z":58.034},{"l":"H","x":-115.588,"y":5.1380005,"z":-6.062},{"l":"H","x":-125.116005,"y":10.374001,"z":27.836},{"l":"H","x":-125.17799,"y":-22.512,"z":14.205999},{"l":"H","x":-22.886,"y":25.046001,"z":-41.592003},{"l":"H","x":23.692,"y":43.415993,"z":32.788},{"l":"H","x":33.742,"y":9.392,"z":29.842},{"l":"H","x":74.024,"y":-2.606,"z":5.568},{"l":"H","x":49.914,"y":78.914,"z":12.550001},{"l":"H","x":118.50201,"y":11.865999,"z":-9.842},{"l":"H","x":94.43,"y":93.39,"z":-2.7519999},{"l":"H","x":128.714,"y":59.865997,"z":-13.978}],"b":[{"b":10,"e":14,"o":2},{"b":13,"e":14},{"b":14,"e":16},{"b":16,"e":24},{"b":16,"e":22},{"b":21,"e":24},{"b":18,"e":24},{"b":6,"e":22},{"b":7,"e":22},{"b":22,"e":23},{"b":21,"e":23},{"b":17,"e":21},{"b":17,"e":18},{"b":11,"e":18,"o":2},{"b":17,"e":20},{"b":15,"e":20},{"b":5,"e":15},{"b":12,"e":15,"o":2},{"b":5,"e":9},{"b":0,"e":9,"o":2},{"b":1,"e":9},{"b":0,"e":2},{"b":1,"e":3,"o":2},{"b":2,"e":4,"o":2},{"b":3,"e":4},{"b":13,"e":19},{"b":16,"e":25},{"b":21,"e":26},{"b":6,"e":27},{"b":6,"e":28},{"b":6,"e":29},{"b":7,"e":30},{"b":7,"e":31},{"b":7,"e":32},{"b":17,"e":33},{"b":8,"e":20},{"b":5,"e":34},{"b":5,"e":35},{"b":0,"e":36},{"b":1,"e":37},{"b":2,"e":38},{"b":3,"e":39},{"b":4,"e":40}]}}'; $result = implode($result); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2012-04-23 02:53:00
|
Revision: 17034 http://jmol.svn.sourceforge.net/jmol/?rev=17034&view=rev Author: hansonr Date: 2012-04-23 02:52:54 +0000 (Mon, 23 Apr 2012) Log Message: ----------- more fixes -- signed applet should load files directly Modified Paths: -------------- trunk/Jmol/appletweb/JmolApplet.js trunk/Jmol/appletweb/JmolCore.js Modified: trunk/Jmol/appletweb/JmolApplet.js =================================================================== --- trunk/Jmol/appletweb/JmolApplet.js 2012-04-23 02:30:35 UTC (rev 17033) +++ trunk/Jmol/appletweb/JmolApplet.js 2012-04-23 02:52:54 UTC (rev 17034) @@ -86,6 +86,10 @@ this._showInfo(false); params || (params = ""); this._thisJmolModel = "" + Math.random(); + if (this._jmolIsSigned) { + this._script("load \"" + fileName + "\"" + params); + return; + } var c = this; Jmol._loadFileData(this, fileName, function(data){c._loadModel(data, params)}); } Modified: trunk/Jmol/appletweb/JmolCore.js =================================================================== --- trunk/Jmol/appletweb/JmolCore.js 2012-04-23 02:30:35 UTC (rev 17033) +++ trunk/Jmol/appletweb/JmolCore.js 2012-04-23 02:52:54 UTC (rev 17034) @@ -88,22 +88,16 @@ } Jmol._getWrapper = function(applet, isHeader) { - if (!isHeader) { - document.write("</div></td></tr></table></div>"); - return; - } var height = applet._height; var width = applet._width; if (typeof height !== "string") height += "px"; if (typeof width !== "string") width += "px"; - var s = "<div id=ID_appletinfotablediv style=width:Wpx;height:Hpx>\ - <table><tr><td><div id=ID_infotablediv style=width:Wpx;height:Hpx;display:none>\ - <table><tr height=20><td style=background:yellow><span id=ID_infoheaderdiv></span></td>\ - <td width=10><a href=javascript:Jmol.showInfo(ID,false)>[x]</a></td></tr><tr><td colspan=2>\ - <div id=ID_infodiv style=overflow:scroll;width:Wpx;height:" + (applet._height - 15) + "px></div></td></tr></table></div></td></tr>\ - <tr><td><div id=ID_appletdiv style=width:Wpx;height:Hpx>"; + var s = (isHeader ? "<div id=ID_appletinfotablediv style=width:Wpx;height:Hpx><table><tr><td><div id=ID_appletdiv style=width:Wpx;height:Hpx>" + : "</div></td></tr><tr><td><div id=ID_infotablediv style=width:Wpx;height:Hpx;display:none>\ + <table><tr height=20><td style=background:yellow><span id=ID_infoheaderdiv></span></td><td width=10><a href=javascript:Jmol.showInfo(ID,false)>[x]</a></td></tr><tr><td colspan=2>\ + <div id=ID_infodiv style=overflow:scroll;width:Wpx;height:" + (applet._height - 15) + "px></div></td></tr></table></div></td></tr></table></div>"); s = s.replace(/Hpx/g, height).replace(/Wpx/g, width).replace(/ID/g, applet._id); document.write(s); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2012-04-23 14:13:33
|
Revision: 17037 http://jmol.svn.sourceforge.net/jmol/?rev=17037&view=rev Author: hansonr Date: 2012-04-23 14:13:26 +0000 (Mon, 23 Apr 2012) Log Message: ----------- change in Jmol._getGrabber and removal of dependence on jQuery. Modified Paths: -------------- trunk/Jmol/appletweb/JmolCD.js trunk/Jmol/appletweb/JmolCore.js Modified: trunk/Jmol/appletweb/JmolCD.js =================================================================== --- trunk/Jmol/appletweb/JmolCD.js 2012-04-23 03:22:59 UTC (rev 17036) +++ trunk/Jmol/appletweb/JmolCD.js 2012-04-23 14:13:26 UTC (rev 17037) @@ -51,7 +51,7 @@ this.create(id,Info.width,Info.height); Jmol._getWrapper(this, false); if (Info.addSelectionOptions) - Jmol._getGrabberOptions(this, id, caption); + Jmol._getGrabberOptions(this, caption); return this; } @@ -73,7 +73,7 @@ this.lastPinchScale=1; this.lastGestureRotate=0; if (Info.addSelectionOptions) - Jmol._getGrabberOptions(this, id, caption); + Jmol._getGrabberOptions(this, caption); return this; } Modified: trunk/Jmol/appletweb/JmolCore.js =================================================================== --- trunk/Jmol/appletweb/JmolCore.js 2012-04-23 03:22:59 UTC (rev 17036) +++ trunk/Jmol/appletweb/JmolCore.js 2012-04-23 14:13:26 UTC (rev 17037) @@ -2,15 +2,23 @@ // see JmolApi.js for public user-interface. All these are private functions -// last revision: 4/20/2012 +// last revision: 4/23/2012 // allows Jmol applets to be created on a page with more flexibility and extendability -// possibly using infrastructure of ChemDoodle. +// possibly using infrastructure of ChemDoodle for multiplatform doodlable structures -// This package may be used with or without ChemDoodle. -// If using ChemDoodle, this package requires ChemDoodleWeb-libs.js and ChemDoodleWeb.js prior to JmolCore.js -// If not using ChemDoodle, this package requires jQuery.js (or ChemDoodleWeb-libs.js, which conains jQuery) +// required/optional libraries (preferably in the following order): +// jQuery.min.js -- required for ChemDoodle or any server-based options +// gl-matrix-min.js -- required for ChemDoodle option +// mousewheel.js -- required for ChemDoodle option +// ChemDoodleWeb.js -- required for ChemDoodle option +// JmolCore.js -- required +// JmolApplet.js -- required +// JmolCD.js -- required for ChemDoodle option +// JmolApi.js -- required +// Jmol.js -- required currently, but in the future only if using legacy jmolXxxx() calls + // Allows Jmol-like objects to be displayed on Java-challenged (iPad/iPhone) // or applet-challenged (Android/iPhone) platforms, with automatic switching to // whatever is appropriate. You can specify "ChemDoodle-only", "Jmol-only", "Image-only" @@ -24,12 +32,12 @@ // For your installation, you should consider putting JmolData.jar and jmolcd.php // on your own server. Nothing more than these two files is needed on the server. -// The NCI and RCSB databases are accessed via direct AJAX. +// The NCI and RCSB databases are accessed via direct AJAX if available (xhr2). Jmol = (function() { return { features: { - supports_xhr2: function() {return jQuery.support.cors} + supports_xhr2: function() {return jQuery && jQuery.support.cors} }, _jmolInfo: { userAgent:navigator.userAgent, @@ -60,18 +68,19 @@ // Jmol core functionality - Jmol._getGrabberOptions = function(applet, label, note) { + Jmol._getGrabberOptions = function(applet, note) { // feel free to adjust this look to anything you want - document.writeln('<br><input type="text" id="ID_query"\ - size="32" value="" /><br><nobr><select id="ID_select">\ - <option value="$" selected>NCI(small molecules)</option>\ - <option value=":">PubChem(small molecules)</option>\ - <option value="=">RCSB(macromolecules)</option>\ - </select>\<button id="ID_submit">Search</button></nobr>'.replace(/ID/g, label)); - note && document.writeln(note); - jQuery("#"+label+"_submit").click( + document.writeln('<br><input type="text" id="ID_query"\ + size="32" value="" /><br><nobr><select id="ID_select">\ + <option value="$" selected>NCI(small molecules)</option>\ + <option value=":">PubChem(small molecules)</option>\ + <option value="=">RCSB(macromolecules)</option>\ + </select>\<button id="ID_submit">Search</button></nobr>'.replace(/ID/g, applet._id)); + note && document.writeln(note); + /* + jQuery("#"+label+"_submit").click( function(){ applet._search() } @@ -81,6 +90,10 @@ 13==a.which&&applet._search() } ); + */ + Jmol._getElement(applet, "submit").onclick = function(){applet._search()}; + Jmol._getElement(applet, "query").onkeypress = function(a){13==a.which&&applet._search()}; + if (applet.repaint) { applet.emptyMessage="Enter search term below", applet.repaint() @@ -267,13 +280,18 @@ query = query.substring(1); if (database == "=" && query.length == 4 && query.substring(0, 1) == "=") query = query.substring(1); - var d = document.getElementById(applet._id + "_select"); - for (var i = 0; i < d.options.length; i++) - if (d[i].value == database) - d[i].selected = true; + var d = Jmol._getElement(applet, "select"); + if (d.options) + for (var i = 0; i < d.options.length; i++) + if (d[i].value == database) + d[i].selected = true; } - jQuery("#"+applet._id+"_query").val(query); + Jmol._getElement(applet, "query").value = query; } - + Jmol._getElement = function(applet, what) { + var d = document.getElementById(applet._id + "_" + what); + return (d || {}); + } + })(Jmol); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2012-04-24 17:23:39
|
Revision: 17048 http://jmol.svn.sourceforge.net/jmol/?rev=17048&view=rev Author: hansonr Date: 2012-04-24 17:23:33 +0000 (Tue, 24 Apr 2012) Log Message: ----------- Modified Paths: -------------- trunk/Jmol/appletweb/JmolApplet.js trunk/Jmol/appletweb/JmolCore.js trunk/Jmol/appletweb/test2.htm Modified: trunk/Jmol/appletweb/JmolApplet.js =================================================================== --- trunk/Jmol/appletweb/JmolApplet.js 2012-04-24 14:39:28 UTC (rev 17047) +++ trunk/Jmol/appletweb/JmolApplet.js 2012-04-24 17:23:33 UTC (rev 17048) @@ -57,8 +57,8 @@ Jmol._getElement(this, "infotablediv").style.display = (tf ? "block" : "none"); Jmol._getElement(this, "appletdiv").style.height = (tf ? 1 : this._height) + "px"; Jmol._getElement(this, "appletdiv").style.width = (tf ? 1 : this._width) + "px"; - if (!tf && Jmol._isMsieRenderBug) - alert("OK"); + if (!tf)//&& Jmol._isMsieRenderBug -- occurring also on Mac systems) + alert("returning to applet..."); this._show(!tf); if (tf) { Jmol._getElement(this, "infoheaderdiv").innerHTML = this._infoHeader; @@ -196,7 +196,7 @@ + "&file=" + escape(fileName) + "&width=" + this._width + "&height=" + this._height - + "¶ms=" + escape(params + ";frank off;"); + + "¶ms=" + encodeURIComponent(params + ";frank off;"); Jmol._getElement(this, "image").src = src; } @@ -211,7 +211,7 @@ + "&query=" + query + "&width=" + this._width + "&height=" + this._height - + "&script=" + escape(script + ";frank off;"); + + "&script=" + encodeURIComponent(script + ";frank off;"); Jmol._getElement(this, "image").src = src; } Modified: trunk/Jmol/appletweb/JmolCore.js =================================================================== --- trunk/Jmol/appletweb/JmolCore.js 2012-04-24 14:39:28 UTC (rev 17047) +++ trunk/Jmol/appletweb/JmolCore.js 2012-04-24 17:23:33 UTC (rev 17048) @@ -43,7 +43,7 @@ userAgent:navigator.userAgent, version: version = 'Jmol 12.3.23' }, - _serverUrl: "http://chemapps.stolaf.edu/jmol/jmolcd.php", + _serverUrl: "http://chemapps.stolaf.edu/jmol/jmolcd2.php", _asynchronous: !0, _isMsieRenderBug: (navigator.userAgent.toLowerCase().indexOf("msie") >= 0), db: { @@ -72,8 +72,8 @@ // feel free to adjust this look to anything you want - document.writeln('<br><input type="text" id="ID_query"\ - size="32" value="" /><br><nobr><select id="ID_select">\ + document.writeln('<br /><input type="text" id="ID_query"\ + size="32" value="" /><br /><nobr><select id="ID_select">\ <option value="$" selected>NCI(small molecules)</option>\ <option value=":">PubChem(small molecules)</option>\ <option value="=">RCSB(macromolecules)</option>\ @@ -107,10 +107,10 @@ height += "px"; if (typeof width !== "string") width += "px"; - var s = (isHeader ? "<div id=ID_appletinfotablediv style=width:Wpx;height:Hpx><table><tr><td><div id=ID_appletdiv style=width:Wpx;height:Hpx>" - : "</div></td></tr><tr><td><div id=ID_infotablediv style=width:Wpx;height:Hpx;display:none>\ - <table><tr height=20><td style=background:yellow><span id=ID_infoheaderdiv></span></td><td width=10><a href=javascript:Jmol.showInfo(ID,false)>[x]</a></td></tr><tr><td colspan=2>\ - <div id=ID_infodiv style=overflow:scroll;width:Wpx;height:" + (applet._height - 15) + "px></div></td></tr></table></div></td></tr></table></div>"); + var s = (isHeader ? "<div id=\"ID_appletinfotablediv\" style=\"width:Wpx;height:Hpx\"><table><tr><td><div id=\"ID_appletdiv\" style=\"width:Wpx;height:Hpx\">" + : "</div></td></tr><tr><td><div id=\"ID_infotablediv\" style=\"width:Wpx;height:Hpx;display:none\">\ + <table><tr height=\"20\"><td style=\"background:yellow\"><span id=\"ID_infoheaderdiv\"></span></td><td width=\"10\"><a href=\"javascript:Jmol.showInfo(ID,false)\">[x]</a></td></tr>\ + <tr><td colspan=\"2\"><div id=\"ID_infodiv\" style=\"overflow:scroll;width:Wpx;height:" + (applet._height - 15) + "px\"></div></td></tr></table></div></td></tr></table></div>"); s = s.replace(/Hpx/g, height).replace(/Wpx/g, width).replace(/ID/g, applet._id); document.write(s); } Modified: trunk/Jmol/appletweb/test2.htm =================================================================== --- trunk/Jmol/appletweb/test2.htm 2012-04-24 14:39:28 UTC (rev 17047) +++ trunk/Jmol/appletweb/test2.htm 2012-04-24 17:23:33 UTC (rev 17048) @@ -43,7 +43,7 @@ height: 300, debug: true, addSelectionOptions: true, - serverURL: "http://chemapps.stolaf.edu/jmol/jmolcd2.php", + serverURL: "http://chemapps.stolaf.edu/jmol/jmolcd3.php", useChemDoodleOnly: useChemDoodleOnly, useJmolOnly: useJmolOnly, useWebGlIfAvailable: useWebGlIfAvailable, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2012-04-25 06:06:45
|
Revision: 17054 http://jmol.svn.sourceforge.net/jmol/?rev=17054&view=rev Author: hansonr Date: 2012-04-25 06:06:38 +0000 (Wed, 25 Apr 2012) Log Message: ----------- controls added to Jmol Object JavaScript; also allows for page redesign based on capabilities. Modified Paths: -------------- trunk/Jmol/appletweb/JmolApi.js trunk/Jmol/appletweb/JmolApplet.js trunk/Jmol/appletweb/JmolCD.js trunk/Jmol/appletweb/JmolCore.js trunk/Jmol/appletweb/test2.htm Added Paths: ----------- trunk/Jmol/appletweb/simple2.htm Modified: trunk/Jmol/appletweb/JmolApi.js =================================================================== --- trunk/Jmol/appletweb/JmolApi.js 2012-04-24 20:26:33 UTC (rev 17053) +++ trunk/Jmol/appletweb/JmolApi.js 2012-04-25 06:06:38 UTC (rev 17054) @@ -4,11 +4,12 @@ Jmol.getVersion = function(){return _version}; - Jmol.getApplet = function(id, Info) { + Jmol.getApplet = function(id, Info, checkOnly) { // note that the variable name the return is assigned to MUST match the first parameter in quotes // applet = Jmol.getApplet("applet", Info) + checkOnly || (checkOnly = !1); id || (id = "jmolApplet0"); Info || (Info = { width: 300, @@ -24,15 +25,13 @@ jmolIsSigned: false, jmolJarPath: ".", jmolJarFile: "JmolApplet0.jar", - jmolReadyFunctionName: "" - }); - - var applet = null; // return value - + jmolReadyFunctionName: "", + script: null + }); Jmol._debugAlert = Info.debug; Info.serverURL && (Jmol._serverUrl = Info.serverURL); - var model = Info.defaultModel; - + var model = (checkOnly ? null : Info.defaultModel); + var applet = null; if (!Info.useChemDoodleOnly && !Info.useImageOnly && navigator.javaEnabled()) { Info.jmolJarFile || (Info.jmolJarFile = (Info.jmolIsSigned ? "JmolAppletSigned0.jar" : "JmolApplet0.jar")); @@ -40,17 +39,23 @@ // Jmol applet, signed or unsigned - return new Jmol._Applet(id, Info, null); + applet = new Jmol._Applet(id, Info, null, checkOnly); } - if (!Info.useJmolOnly && !Info.useImageOnly) - applet = Jmol._getCanvas(id, Info); - if (applet == null) - applet = new Jmol._Image(id, Info, null); - model && applet._search(model); + + if (applet == null) { + if (!Info.useJmolOnly && !Info.useImageOnly) + applet = Jmol._getCanvas(id, Info, checkOnly); + if (applet == null) + applet = new Jmol._Image(id, Info, null, checkOnly); + model && applet._search(model); + } + // keyed to both its string id and itself + if (!checkOnly) + Jmol._applets[id] = Jmol._applets[applet] = applet; return applet; } - Jmol.script = function(applet, script) { + Jmol.script = function(applet, script) { applet._script(script); } @@ -69,5 +74,280 @@ Jmol.showInfo = function(applet, tf) { applet._showInfo(tf); } + + + +//////////// controls and HTML ///////////// + + + Jmol.jmolBr = function() { + return Jmol._documentWrite("<br />"); + } + + Jmol.jmolButton = function(appletOrId, script, label, id, title) { + var appId = Jmol.setTarget(appletOrId, script); + if (appId == null) + return ""; + var c = Jmol.controls; + //_jmolInitCheck(); + id != undefined && id != null || (id = "jmolButton" + c._buttonCount); + label != undefined && label != null || (label = script.substring(0, 32)); + ++c._buttonCount; + var scriptIndex = c._addScript(appId, script); + var t = "<span id=\"span_"+id+"\""+(title ? " title=\"" + title + "\"":"")+"><input type='button' name='" + id + "' id='" + id + + "' value='" + label + + "' onclick='Jmol.controls._click(this," + scriptIndex + + ")' onmouseover='Jmol.controls._mouseOver(" + scriptIndex + + ");return true' onmouseout='Jmol.controls._mouseOut()' " + + c._buttonCssText + " /></span>"; + if (Jmol._debugAlert) + alert(t); + return Jmol._documentWrite(t); + } + Jmol.jmolCheckbox = function(appletOrId, scriptWhenChecked, scriptWhenUnchecked, + labelHtml, isChecked, id, title) { + var appId = Jmol.setTarget(appletOrId, "x"); + if (appId == null) + return ""; + var c = Jmol.controls; + //_jmolInitCheck(); + id != undefined && id != null || (id = "jmolCheckbox" + c._checkboxCount); + ++c._checkboxCount; + if (scriptWhenChecked == undefined || scriptWhenChecked == null || + scriptWhenUnchecked == undefined || scriptWhenUnchecked == null) { + alert("jmolCheckbox requires two scripts"); + return; + } + if (labelHtml == undefined || labelHtml == null) { + alert("jmolCheckbox requires a label"); + return; + } + var indexChecked = c._addScript(appId, scriptWhenChecked); + var indexUnchecked = c._addScript(appId, scriptWhenUnchecked); + var eospan = "</span>" + var t = "<span id=\"span_"+id+"\""+(title ? " title=\"" + title + "\"":"")+"><input type='checkbox' name='" + id + "' id='" + id + + "' onclick='Jmol.controls._cbClick(this," + + indexChecked + "," + indexUnchecked + + ")' onmouseover='Jmol.controls._cbOver(this," + indexChecked + "," + + indexUnchecked + + ");return true' onmouseout='Jmol.controls._mouseOut()' " + + (isChecked ? "checked='true' " : "")+ c._checkboxCssText + " />" + if (labelHtml.toLowerCase().indexOf("<td>")>=0) { + t += eospan + eospan = ""; + } + t += "<label for=\"" + id + "\">" + labelHtml + "</label>" +eospan; + if (Jmol._debugAlert) + alert(t); + return Jmol._documentWrite(t); + } + + Jmol.jmolCommandInput = function(appletOrId, label, size, id, title) { + var appId = Jmol.setTarget(appletOrId, "x"); + if (appId == null) + return ""; + var c = Jmol.controls; + //_jmolInitCheck(); + id != undefined && id != null || (id = "jmolCmd" + c._cmdCount); + label != undefined && label != null || (label = "Execute"); + size != undefined && !isNaN(size) || (size = 60); + ++c._cmdCount; + var t = "<span id=\"span_"+id+"\""+(title ? " title=\"" + title + "\"":"")+"><input name='" + id + "' id='" + id + + "' size='"+size+"' onkeypress='Jmol.controls._commandKeyPress(event,\""+id+"\",\"" + appId + "\")'><input type=button value = '"+label+"' onclick='Jmol.controls._commandKeyPress(13,\""+id+"\",\"" + appId + "\")' /></span>"; + if (Jmol._debugAlert) + alert(t); + return Jmol._documentWrite(t); + } + + Jmol.jmolHtml = function(html) { + return Jmol._documentWrite(html); + } + + Jmol.jmolLink = function(appletOrId, script, label, id, title) { + var appId = Jmol.setTarget(appletOrId, script); + if (appId == null) + return ""; + var c = Jmol.controls; + //_jmolInitCheck(); + id != undefined && id != null || (id = "jmolLink" + c._linkCount); + label != undefined && label != null || (label = script.substring(0, 32)); + ++c._linkCount; + var scriptIndex = c._addScript(appId, script); + var t = "<span id=\"span_"+id+"\""+(title ? " title=\"" + title + "\"":"")+"><a name='" + id + "' id='" + id + + "' href='javascript:Jmol.controls._click(this," + scriptIndex + ");' onmouseover='Jmol.controls._mouseOver(" + scriptIndex + + ");return true;' onmouseout='Jmol.controls._mouseOut()' " + + c._linkCssText + ">" + label + "</a></span>"; + if (Jmol._debugAlert) + alert(t); + return Jmol._documentWrite(t); + } + + Jmol.jmolMenu = function(appletorId, arrayOfMenuItems, size, id, title) { + var appId = Jmol.setTarget(appletOrId, null); + if (appId == null) + return ""; + var c = Jmol.controls; + //_jmolInitCheck(); + id != undefined && id != null || (id = "jmolMenu" + c._menuCount); + ++c._menuCount; + var type = typeof arrayOfMenuItems; + if (type != null && type == "object" && arrayOfMenuItems.length) { + var len = arrayOfMenuItems.length; + if (typeof size != "number" || size == 1) + size = null; + else if (size < 0) + size = len; + var sizeText = size ? " size='" + size + "' " : ""; + var t = "<span id=\"span_"+id+"\""+(title ? " title=\"" + title + "\"":"")+"><select name='" + id + "' id='" + id + + "' onChange='Jmol.controls._menuSelected(this,\"" + appId + "\")'" + + sizeText + c._menuCssText + ">"; + for (var i = 0; i < len; ++i) { + var menuItem = arrayOfMenuItems[i]; + type = typeof menuItem; + var script = null; + var text = null; + var isSelected = null; + if (type == "object" && menuItem != null) { + script = menuItem[0]; + text = menuItem[1]; + isSelected = menuItem[2]; + } else { + script = text = menuItem; + } + text == null && (text = script); + if (script=="#optgroup") { + t += "<optgroup label='" + text + "'>"; + } else if (script=="#optgroupEnd") { + t += "</optgroup>"; + } else { + if (Jmol.setTarget(appletOrId, script) == null) + return ""; + var scriptIndex = c._addScript(appId, script); + var selectedText = isSelected ? "' selected='true'>" : "'>"; + t += "<option value='" + scriptIndex + selectedText + text + "</option>"; + } + } + t += "</select></span>"; + if (Jmol._debugAlert) + alert(t); + return Jmol._documentWrite(t); + } + } + + Jmol.jmolRadio = function(appletOrId, script, labelHtml, isChecked, separatorHtml, groupName, id, title) { + var appId = Jmol.setTarget(appletOrId, script); + if (appId == null) + return ""; + //_jmolInitCheck(); + if (Jmol.controls._radioGroupCount == 0) + ++Jmol.controls._radioGroupCount; + var t = Jmol.controls._getRadio(appId, script, labelHtml, isChecked, separatorHtml, groupName, (id ? id : groupName + "_" + Jmol._radioCount), title ? title : 0); + if (Jmol._debugAlert) + alert(t); + return Jmol._documentWrite(t); + } + + Jmol.jmolRadioGroup = function (appletOrId, arrayOfRadioButtons, separatorHtml, groupName, id, title) { + var appId = Jmol.setTarget(appletOrId, null); + /* + + array: [radio1,radio2,radio3...] + where radioN = ["script","label",isSelected,"id","title"] + + */ + + //_jmolInitCheck(); + var type = typeof arrayOfRadioButtons; + if (type != "object" || type == null || ! arrayOfRadioButtons.length) { + alert("invalid arrayOfRadioButtons"); + return; + } + var c = Jmol.controls; + separatorHtml != undefined && separatorHtml != null || (separatorHtml = " "); + var len = arrayOfRadioButtons.length; + ++c._radioGroupCount; + groupName || (groupName = "jmolRadioGroup" + (c._radioGroupCount - 1)); + var t = "<span id='"+(id ? id : groupName)+"'>"; + for (var i = 0; i < len; ++i) { + if (i == len - 1) + separatorHtml = ""; + var radio = arrayOfRadioButtons[i]; + type = typeof radio; + if (type == "object") { + if (Jmol.setTarget(appletOrId, radio[0]) == null) + return ""; + t += c._getRadio(appId, radio[0], radio[1], radio[2], separatorHtml, groupName, (radio.length > 3 ? radio[3]: (id ? id : groupName)+"_"+i), (radio.length > 4 ? radio[4] : 0), title); + } else { + if (Jmol.setTarget(appletOrId, radio) == null) + return ""; + t += c._getRadio(appId, radio, null, null, separatorHtml, groupName, (id ? id : groupName)+"_"+i, title); + } + } + t+="</span>" + if (Jmol._debugAlert) + alert(t); + return Jmol._documentWrite(t); + } + + Jmol.setCheckboxGroup = function(chkMaster,chkBox) { + Jmol.controls._cbSetCheckboxGroup(chkMaster, chkBox); + } + + Jmol.setDocument = function(doc) { + Jmol._document = doc; + } + + Jmol.setTarget = function(appletOrId, script) { + if (appletOrId) { + Jmol._targetId = (typeof appletOrId == "string" ? appletOrId : (Jmol._target = appletOrId)._id); + } + return (script && Jmol._target && !Jmol._target._canScript(script) ? null : Jmol._targetId); + } + + Jmol.setXHTML = function(id) { + Jmol._isXHTML = true; + Jmol._XhtmlElement = null; + Jmol._XhtmlAppendChild = false; + if (id){ + Jmol._XhtmlElement = document.getElementById(id); + Jmol._XhtmlAppendChild = true; + } + } + + //////////////////////////////////////////////////////////////// + // Cascading Style Sheet Class support + //////////////////////////////////////////////////////////////// + + Jmol.setAppletCssClass = function(appletCssClass) { + Jmol.controls._appletCssClass = appletCssClass; + Jmol.controls._appletCssText = appletCssClass ? "class='" + appletCssClass + "' " : ""; + } + + function jmolSetButtonCssClass(buttonCssClass) { + Jmol.controls._buttonCssClass = buttonCssClass; + Jmol.controls._buttonCssText = buttonCssClass ? "class='" + buttonCssClass + "' " : ""; + } + + function jmolSetCheckboxCssClass(checkboxCssClass) { + Jmol.controls._checkboxCssClass = checkboxCssClass; + Jmol.controls._checkboxCssText = checkboxCssClass ? "class='" + checkboxCssClass + "' " : ""; + } + + function jmolSetRadioCssClass(radioCssClass) { + Jmol.controls._radioCssClass = radioCssClass; + Jmol.controls._radioCssText = radioCssClass ? "class='" + radioCssClass + "' " : ""; + } + + function jmolSetLinkCssClass(linkCssClass) { + Jmol.controls._linkCssClass = linkCssClass; + Jmol.controls._linkCssText = linkCssClass ? "class='" + linkCssClass + "' " : ""; + } + + function jmolSetMenuCssClass(menuCssClass) { + Jmol.controls._menuCssClass = menuCssClass; + Jmol.controls._menuCssText = menuCssClass ? "class='" + menuCssClass + "' " : ""; + } + + })(Jmol); Modified: trunk/Jmol/appletweb/JmolApplet.js =================================================================== --- trunk/Jmol/appletweb/JmolApplet.js 2012-04-24 20:26:33 UTC (rev 17053) +++ trunk/Jmol/appletweb/JmolApplet.js 2012-04-25 06:06:38 UTC (rev 17054) @@ -24,11 +24,11 @@ // _Applet -- the main, full-featured, object - Jmol._Applet = function(id, Info, caption){ + Jmol._Applet = function(id, Info, caption, checkOnly){ this._jmolType = "Jmol._Applet" + (Info.jmolIsSigned ? " (signed)" : ""); - this._id = id; - var suffix = id.replace(/^jmolApplet/,""); - this._jmolId = "jmolApplet" + suffix; + if (checkOnly) + return this; + Jmol._targetId = this._id = id; this._width = Info.width; this._height = Info.height; this._jmolIsSigned = Info.jmolIsSigned; @@ -44,6 +44,7 @@ this._jmolJarFile = Info.jmolJarFile || (Info.jmolIsSigned ? "JmolAppletSigned0.jar" : "JmolApplet0.jar"); this._jmolJarPath = Info.jmolJarPath || "."; this._memoryLimit = Info.memoryLimit || 512; + this._canScript = function(script) {return true;}; /* * private variables @@ -64,7 +65,7 @@ /* * privileged methods */ - this._initialize = function(codebaseDirectory, fileNameOrUseSignedApplet) { + this._initialize = function(codebaseDirectory, fileNameOrUseSignedApplet) { if(this._jmolJarFile) { var f = this._jmolJarFile; if(f.indexOf("/") >= 0) { @@ -83,7 +84,7 @@ } setCodebase(codebaseDirectory); getJarFilename(fileNameOrUseSignedApplet); - //_jmolOnloadResetForms(); + Jmol.controls == undefined || Jmol.controls._onloadResetForms(); } this._create(id,Info); @@ -92,11 +93,6 @@ Jmol._getGrabberOptions(this, caption); return this; - jmolSetParameter("appletReadyCallback", this._id + ".readyCallback"); - var script = ""; - Jmol._getWrapper(this, true); - jmolApplet([Info.width,Info.height], script, suffix); - Jmol._getWrapper(this, false); } Jmol._Applet.prototype._create = function(id, Info){ @@ -162,15 +158,14 @@ var tHeader, tFooter; getParameters(Info); - //this._name = "jmolApplet" + suffix if (Jmol.featureDetection.useIEObject || Jmol.featureDetection.useHtml4Object) { params.archive = this._jmolJarFile; params.mayscript = 'true'; params.codebase = this._jmolJarPath; params.code = 'JmolApplet.class'; tHeader = - "<object name='" + this._jmolId + - "' id='" + this._jmolId + "' " + "\n" + + "<object name='" + this._id + + "' id='" + this._id + "' " + "\n" + widthAndHeight + "\n"; tFooter = "</object>"; } @@ -189,8 +184,8 @@ */ } else { // use applet tag tHeader = - "<applet name='" + this._jmolId + - "' id='" + this._jmolId + "' \n" + + "<applet name='" + this._id + + "' id='" + this._id + "' \n" + widthAndHeight + "\n" + " code='JmolApplet'" + " archive='" + this._jmolJarFile + "' codebase='" + this._jmolJarPath + "'\n" + @@ -215,9 +210,8 @@ Jmol._noJavaMsg2 + "</font></td></tr></table>"; } params.loadInline = (Info.inlineModel ? sterilizeInline(Info.inlineModel) : ""); - params.script = (Info.script ? sterilizeScript(Info.script) : ""); + //params.script = (Info.script ? sterilizeScript(Info.script) : ""); var t = tHeader + writeParams() + visitJava + tFooter; - //jmolSetTarget(nameSuffix); if (Jmol._debugAlert) alert(t); Jmol._getWrapper(this, true); @@ -230,7 +224,7 @@ return; // ignore -- page is closing this._ready = true; var script = this._readyScript; - this._applet = applet; + this._applet = applet; if (this._defaultModel) this._search(this._defaultModel, (script ? ";" + script : "")); else if (script) @@ -287,8 +281,8 @@ Jmol._Applet.prototype._show = function(tf) { var w = (tf ? this._width : 1) + "px"; var h = (tf ? this._height : 1) + "px"; - document.getElementById(this._jmolId).style.width = w; - document.getElementById(this._jmolId).style.height = h; + document.getElementById(this._id).style.width = w; + document.getElementById(this._id).style.height = h; } Jmol._Applet.prototype._script = function(script) { @@ -340,9 +334,11 @@ // _Image -- an alternative to _Applet - Jmol._Image = function(id, Info, caption){ + Jmol._Image = function(id, Info, caption, checkOnly){ this._jmolType = "image"; - this._id = id; + if (checkOnly) + return this; + Jmol._targetId = this._id = id; this._width = Info.width; this._height = Info.height; this._hasOptions = Info.addSelectionOptions; @@ -354,12 +350,14 @@ Jmol._getWrapper(this, false); if (Info.addSelectionOptions) Jmol._getGrabberOptions(this, caption); + this._canScript = function(script) {return (script.indexOf("#alt:LOAD") >= 0);}; return this; } Jmol._setCommonMethods(Jmol._Image.prototype); - Jmol._Image.prototype._script = function(script) {} // not implemented + Jmol._Image.prototype._script = function(script) { + } // not implemented Jmol._Image.prototype._show = function(tf) { Jmol._getElement(this, "appletdiv").style.display = (tf ? "block" : "none"); Modified: trunk/Jmol/appletweb/JmolCD.js =================================================================== --- trunk/Jmol/appletweb/JmolCD.js 2012-04-24 20:26:33 UTC (rev 17053) +++ trunk/Jmol/appletweb/JmolCD.js 2012-04-25 06:06:38 UTC (rev 17054) @@ -17,35 +17,43 @@ if (!ChemDoodle) return; - Jmol._getCanvas = function(id, Info) { + Jmol._getCanvas = function(id, Info, checkOnly) { // overrides the function in JmolCore.js // ChemDoodle: first try with WebGL unless that doesn't work or we have indicated NOWEBGL - var applet = (Info.useWebGlIfAvailable && ChemDoodle.featureDetection.supports_webgl() - ? new Jmol._Canvas3D(id, Info, null) : null); - if (applet && applet.gl) { - //applet.specs.set3DRepresentation('Stick'); - applet.specs.set3DRepresentation('Ball and Stick'); - applet.specs.backgroundColor = 'black'; + var canvas = null; + if (Info.useWebGlIfAvailable && ChemDoodle.featureDetection.supports_webgl()) { + canvas = new Jmol._Canvas3D(id, Info, null, checkOnly); + if (canvas && checkOnly) + return canvas; + } + if (canvas) { + //canvas.specs.set3DRepresentation('Stick'); + canvas.specs.set3DRepresentation('Ball and Stick'); + canvas.specs.backgroundColor = 'black'; } else { - applet = new Jmol._Canvas(id, Info); - applet.specs.bonds_useJMOLColors = true; - applet.specs.bonds_width_2D = 3; - applet.specs.atoms_display = false; - applet.specs.backgroundColor = 'black'; - applet.specs.bonds_clearOverlaps_2D = true; + canvas = new Jmol._Canvas(id, Info, null, checkOnly); + if (checkOnly) + return canvas; + canvas.specs.bonds_useJMOLColors = true; + canvas.specs.bonds_width_2D = 3; + canvas.specs.atoms_display = false; + canvas.specs.backgroundColor = 'black'; + canvas.specs.bonds_clearOverlaps_2D = true; } - return applet; + return canvas; } - Jmol._Canvas3D = function(id, Info, caption){ + Jmol._Canvas3D = function(id, Info, caption, checkOnly){ this._jmolType = "Jmol._Canvas3D"; - this._id = id; + if (checkOnly) + return this; + Jmol._targetId = this._id = id; this._width = Info.width; this._height = Info.height; - this._hasOptions = Info.addSelectionOptions; - this._dataMultiplier=1; this._info = JSON.stringify(this); this._infoHeader = this._jmolType + ' "' + this._id + '"' + this._dataMultiplier=1; + this._hasOptions = Info.addSelectionOptions; Jmol._getWrapper(this, true); this.create(id,Info.width,Info.height); Jmol._getWrapper(this, false); @@ -54,11 +62,13 @@ return this; } - Jmol._Canvas = function(id, Info, caption){ + Jmol._Canvas = function(id, Info, caption, checkOnly){ this._jmolType = "Jmol._Canvas"; - this._id = id; + if (checkOnly) + return this; this._width = Info.width; this._height = Info.height; + Jmol._targetId = this._id = id; this._hasOptions = Info.addSelectionOptions; this._info = JSON.stringify(this); this._infoHeader = this._jmolType + ' "' + this._id + '"' @@ -80,8 +90,31 @@ Jmol._setCommonMethods(proto); - proto._script = function(script) {} // not implemented + proto._canScript = function(script) {return (script.indexOf("#alt") >= 0);}; + proto._script = function(script) { + if (!this._canScript(script)) + return; + var Cmd = jQuery.trim(script.split("#alt:")[1]); + var pt = Cmd.indexOf(" "); + var what = jQuery.trim(Cmd.substring(pt + 1)); + switch (Cmd.substring(0, pt)) { + case "SETTING": + this.specs.set3DRepresentation(what); + this.setupScene(); + this.repaint(); + return; + case "LOAD": + if (what.indexOf("??") >= 0) { + what = prompt(what.split("??")[1], what.split("??")[0]); + if (!what) + return; + } + Jmol.loadFile(this, what); + return; + } + } + proto._searchDatabase = function(query, database, script){ this._showInfo(false); if (query.indexOf("?") >= 0) { Modified: trunk/Jmol/appletweb/JmolCore.js =================================================================== --- trunk/Jmol/appletweb/JmolCore.js 2012-04-24 20:26:33 UTC (rev 17053) +++ trunk/Jmol/appletweb/JmolCore.js 2012-04-25 06:06:38 UTC (rev 17054) @@ -36,7 +36,7 @@ if(typeof(jQuery)=="undefined") jQuery = null; -Jmol = (function() { +Jmol = (function(document) { return { _jmolInfo: { userAgent:navigator.userAgent, @@ -44,8 +44,15 @@ }, _serverUrl: "http://chemapps.stolaf.edu/jmol/jmolcd2.php", _asynchronous: !0, + _document: document, _debugAlert: !1, + _targetId: "jmolApplet0", + _target: null, _isMsieRenderBug: (navigator.userAgent.toLowerCase().indexOf("msie") >= 0), + _isXHTML: false, + _XhtmlElement: null, + _XhtmlAppendChild: false, + _applets: {}, db: { _databasePrefixes: "$=:", _nciLoadScript: ";n = ({molecule=1}.length < {molecule=2}.length ? 2 : 1); select molecule=n;display selected;center selected;", @@ -62,7 +69,7 @@ }, _getCanvas: function(){ /* only in JmolCD.js */ return null } } -})(); +})(document); (function (Jmol) { @@ -72,13 +79,13 @@ // feel free to adjust this look to anything you want - document.writeln('<br /><input type="text" id="ID_query"\ + Jmol._documentWrite('<br /><input type="text" id="ID_query"\ size="32" value="" /><br /><nobr><select id="ID_select">\ <option value="$" selected>NCI(small molecules)</option>\ <option value=":">PubChem(small molecules)</option>\ <option value="=">RCSB(macromolecules)</option>\ </select>\<button id="ID_submit">Search</button></nobr>'.replace(/ID/g, applet._id)); - note && document.writeln(note); + note && Jmol.documentWrite(note); /* jQuery("#"+label+"_submit").click( function(){ @@ -99,7 +106,7 @@ applet.repaint() }; } - + Jmol._getWrapper = function(applet, isHeader) { var height = applet._height; var width = applet._width; @@ -112,7 +119,7 @@ <table><tr height=\"20\"><td style=\"background:yellow\"><span id=\"ID_infoheaderdiv\"></span></td><td width=\"10\"><a href=\"javascript:Jmol.showInfo(ID,false)\">[x]</a></td></tr>\ <tr><td colspan=\"2\"><div id=\"ID_infodiv\" style=\"overflow:scroll;width:Wpx;height:" + (applet._height - 15) + "px\"></div></td></tr></table></div></td></tr></table></div>"); s = s.replace(/Hpx/g, height).replace(/Wpx/g, width).replace(/ID/g, applet._id); - document.write(s); + Jmol._documentWrite(s); } Jmol._getScriptForDatabase = function(database) { @@ -380,4 +387,106 @@ })(document, window); + +/// Bob's ADDITIONS 24.4.2012: + + Jmol._documentWrite = function(text) { + if (Jmol._document) { + if (Jmol._isXHTML && !Jmol._XhtmlElement) { + var s = document.getElementsByTagName("script"); + Jmol._XhtmlElement = s.item(s.length - 1); + Jmol._XhtmlAppendChild = false; + } + if (Jmol._XhtmlElement) + Jmol._domWrite(text); + else + Jmol._document.write(text); + } + return text; + } + + Jmol._domWrite = function(data) { + var pt = 0 + var Ptr = [] + Ptr[0] = 0 + while (Ptr[0] < data.length) { + var child = Jmol._getDomElement(data, Ptr); + if (!child) + break; + if (Jmol._XhtmlAppendChild) + Jmol._XhtmlElement.appendChild(child); + else + Jmol._XhtmlElement.parentNode.insertBefore(child, _jmol.XhtmlElement); + } + } + + Jmol._getDomElement = function(data, Ptr, closetag, lvel) { + + // there is no "document.write" in XHTML + + var e = document.createElement("span"); + e.innerHTML = data; + Ptr[0] = data.length; + + return e; + + // unnecessary ? + + closetag || (closetag = ""); + lvel || (lvel = 0); + var pt0 = Ptr[0]; + var pt = pt0; + while (pt < data.length && data.charAt(pt) != "<") + pt++ + if (pt != pt0) { + var text = data.substring(pt0, pt); + Ptr[0] = pt; + return document.createTextNode(text); + } + pt0 = ++pt; + var ch; + while (pt < data.length && "\n\r\t >".indexOf(ch = data.charAt(pt)) < 0) + pt++; + var tagname = data.substring(pt0, pt); + var e = (tagname == closetag || tagname == "/" ? "" + : document.createElementNS ? document.createElementNS('http://www.w3.org/1999/xhtml', tagname) + : document.createElement(tagname)); + if (ch == ">") { + Ptr[0] = ++pt; + return e; + } + while (pt < data.length && (ch = data.charAt(pt)) != ">") { + while (pt < data.length && "\n\r\t ".indexOf(ch = data.charAt(pt)) >= 0) + pt++; + pt0 = pt; + while (pt < data.length && "\n\r\t =/>".indexOf(ch = data.charAt(pt)) < 0) + pt++; + var attrname = data.substring(pt0, pt).toLowerCase(); + if (attrname && ch != "=") + e.setAttribute(attrname, "true"); + while (pt < data.length && "\n\r\t ".indexOf(ch = data.charAt(pt)) >= 0) + pt++; + if (ch == "/") { + Ptr[0] = pt + 2; + return e; + } else if (ch == "=") { + var quote = data.charAt(++pt); + pt0 = ++pt; + while (pt < data.length && (ch = data.charAt(pt)) != quote) + pt++; + var attrvalue = data.substring(pt0, pt); + e.setAttribute(attrname, attrvalue); + pt++; + } + } + Ptr[0] = ++pt; + while (Ptr[0] < data.length) { + var child = _jmolGetDomElement(data, Ptr, "/" + tagname, lvel+1); + if (!child) + break; + e.appendChild(child); + } + return e; + } + })(Jmol); Added: trunk/Jmol/appletweb/simple2.htm =================================================================== --- trunk/Jmol/appletweb/simple2.htm (rev 0) +++ trunk/Jmol/appletweb/simple2.htm 2012-04-25 06:06:38 UTC (rev 17054) @@ -0,0 +1,158 @@ +<html> +<head> +<script type="text/javascript" src="json2.js" title="required for MSIE"></script> +<script type="text/javascript" src="jQuery.min.js" title="required; replaces ChemDoodleWeb-lib;fixed bug in that version"></script> +<script type="text/javascript" src="gl-matrix-min.js" title="optional; replaces ChemDoodleWeb-lib;required if using ChemDoodle option"></script> +<script type="text/javascript" src="mousewheel.js" title="optional; replaces ChemDoodleWeb-lib;required if using ChemDoodle option"></script> +<script type="text/javascript" src="ChemDoodleWeb-unpacked.js" title="optional; required only if using ChemDoodle option"></script> +<script type="text/javascript" src="JmolCore.js"></script> +<script type="text/javascript" src="JmolApplet.js"></script> +<script type="text/javascript" src="JmolCD.js"></script> +<script type="text/javascript" src="JmolControls.js"></script> +<script type="text/javascript" src="JmolApi.js"></script> + +<script type="text/javascript"> +var jmol = "jmol"; + +var xxxx = document.location.search +if (xxxx.length == 0) { + xxxx = "ethanol" + script = 'set errorCallback "myCallback";' + +'set zoomlarge false;set echo top left;echo loading XXXX...;refresh;' + +'load ":XXXX";set echo top center;echo XXXX;' + +'' + script = script.replace(/XXXX/g, xxxx) +} else { + script = unescape(xxxx.substring(1)) +} + +var useJmolOnly = (document.location.href.indexOf("NOCD") >= 0); +var useChemDoodleOnly = (!useJmolOnly && document.location.href.indexOf("CD") >= 0); +var useWebGlIfAvailable = (document.location.href.indexOf("NOWEBGL") < 0); +var useImageOnly = (document.location.href.indexOf("IMAGE") >= 0); +var useSignedApplet = (document.location.href.indexOf("SIGNED") >= 0); + +var Info = { + width: 450, + height: 450, + script: script, + useChemDoodleOnly: useChemDoodleOnly, + useJmolOnly: useJmolOnly, + useWebGlIfAvailable: useWebGlIfAvailable, + useImageOnly: useImageOnly, + jmolJarPath: ".", + jmolJarFile: (useSignedApplet ? "JmolAppletSigned.jar" : "JmolApplet.jar"), + jmolIsSigned: useSignedApplet, + addSelectionOptions: false, + serverURL: "http://chemapps.stolaf.edu/jmol/jmolcd2.php", + jmolReadyFunction: null, + defaultModel: null, + debug: false +} + +appletCheck = Jmol.getApplet(jmol, Info, true); +// by defining the variable as the string initially, we can +// define controls before or after the applet is created + +</script> +</head> +<body> + +<center> + + +<table><tr> +<td> + +<script type="text/javascript"> + + if (appletCheck._jmolType.indexOf("_Applet") >= 0) { + + // Jmol applet + + Jmol.jmolHtml('<a href=simple2.htm?cd%20data%3Bscript%20cyclflip2.spt>cyclohexane ring flip</a> <a href=chairflip.png>images</a>'); + Jmol.jmolBr(); + Jmol.jmolLink(jmol,"animation playrev"); + Jmol.jmolBr(); + Jmol.jmolLink(jmol,"animation off"); + Jmol.jmolBr(); + Jmol.jmolLink(jmol,"animation play"); + Jmol.jmolBr(); + Jmol.jmolBr(); + Jmol.jmolHtml("Drag-Minimize "); + Jmol.jmolLink(jmol,"set picking dragMinimize", "on"); + Jmol.jmolLink(jmol,"set picking dragMinimize off", "off") + Jmol.jmolBr(); + Jmol.jmolHtml("Model Kit Mode ") + Jmol.jmolLink(jmol,"set modelkitmode", "on") + Jmol.jmolLink(jmol,"set modelkitmode off", "off") + + } else { + + // ChemDoodle. + //Info.width = Info.height = 300; + Info.defaultModel = "$tylenol" + script = "#alt:LOAD :tylenol"; + } + +</script> +<td align=center> + +<script type="text/javascript"> + +jmol = Jmol.getApplet(jmol, Info); + + +</script> +</td><td> +<script type="text/javascript"> +Jmol.controls._buttonCssText="style='width:160'" +Jmol.jmolButton(jmol,"if (!molname) { molname = 'tylenol'};var x = prompt('Enter the name of a compound',molname);if (!x) { quit }; molname = x; load @{':' + molname} #alt:LOAD :??Enter a model name after ':'","Load MOL (PubChem)") +Jmol.jmolBr() +Jmol.jmolButton(jmol,"if (!molname) { molname = 'ethanol'};var x = prompt('Enter the name of a compound to see its electrostatic potential map',molname);if (!x) { quit }; molname = x; load @{':' + molname};isosurface vdw map MEP translucent","Load MOL + MEP") +Jmol.jmolBr() +Jmol.jmolButton(jmol,"if (!molname) { molname = 'tylenol'};var x = prompt('Enter the name or identifier (SMILES, InChI, CAS) of a molecule',molname);if (!x) { quit }; molname = x; load @{'$' + molname} #alt:LOAD $??Enter a model name after '$'","Load MOL (NCI)") +Jmol.jmolBr() +Jmol.jmolButton(jmol,"load ? #alt:LOAD http://??load a URL starting with http://","Load URL") +Jmol.jmolBr() +Jmol.jmolButton(jmol,"load ? ","Load FILE") +Jmol.jmolBr() +Jmol.jmolButton(jmol,"script ?.spt","Load SCRIPT") +Jmol.jmolBr() +Jmol.jmolBr() +Jmol.jmolButton(jmol,"show NMR","Predict NMR") +Jmol.jmolBr() +Jmol.jmolBr() +Jmol.jmolButton(jmol,"write FILE ?","Save FILE") +Jmol.jmolBr() +Jmol.jmolButton(jmol,"write STATE ?.spt","Save STATE") +Jmol.jmolBr() +Jmol.jmolButton(jmol,"write IMAGE ?.jpg","Save JPG") +Jmol.jmolBr() +Jmol.jmolButton(jmol,"write IMAGE ?.png","Save PNG") +Jmol.jmolBr() + + +</script> + +</td></tr> + +<tr><td></td><td align=center> + + +<script type="text/javascript"> +Jmol.jmolBr() +Jmol.controls._buttonCssText="style='width:120'" +Jmol.jmolButton(jmol,"wireframe -0.1 #alt:SETTING Line", "wireframe") +Jmol.jmolButton(jmol,"spacefill only;spacefill 23%;wireframe 0.15 #alt:SETTING Ball and Stick","ball&stick") +Jmol.jmolButton(jmol,"spacefill #alt:SETTING van der Waals Spheres", "spacefill") +Jmol.jmolBr() +Jmol.controls._buttonCssText="style='width:100'" +Jmol.jmolButton(jmol,"console") +Jmol.jmolCommandInput(jmol) +</script> + +</td></tr></table> + +</body> +</html> \ No newline at end of file Modified: trunk/Jmol/appletweb/test2.htm =================================================================== --- trunk/Jmol/appletweb/test2.htm 2012-04-24 20:26:33 UTC (rev 17053) +++ trunk/Jmol/appletweb/test2.htm 2012-04-25 06:06:38 UTC (rev 17054) @@ -42,7 +42,7 @@ height: 300, debug: false, addSelectionOptions: true, - serverURL: "http://chemapps.stolaf.edu/jmol/jmolcd3.php", + serverURL: "http://chemapps.stolaf.edu/jmol/jmolcd2.php", useChemDoodleOnly: useChemDoodleOnly, useJmolOnly: useJmolOnly, useWebGlIfAvailable: useWebGlIfAvailable, @@ -75,6 +75,10 @@ jmolApplet0 = Jmol.getApplet("jmolApplet0", Info) +// note that now scripts can be sent immediately after the _Applet object is created + +Jmol.script(jmolApplet0,"background gray;delay 0.5;background black") + </script> <br><a href="javascript:Jmol.showInfo(jmolApplet0, true)">show info</a> @@ -86,8 +90,8 @@ Note that these input controls can be easily hidden for a more standard Jmol look. <br /><br /> -Current status: (4/23/12) using PubChem rest/pub interface for direct xhr2 loading of models; -all files loading +Current status: (4/24/12) using PubChem rest/pub interface for direct xhr2 loading of models; +all files loading; basic functionality only; Jmol.js no longer necessary for creating applets or scripting <br /><br /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2012-04-25 17:53:46
|
Revision: 17058 http://jmol.svn.sourceforge.net/jmol/?rev=17058&view=rev Author: hansonr Date: 2012-04-25 17:53:39 +0000 (Wed, 25 Apr 2012) Log Message: ----------- adds back in jmolSetDocument(0) business, even for canvases. Modified Paths: -------------- trunk/Jmol/appletweb/JmolApi.js trunk/Jmol/appletweb/JmolApplet.js trunk/Jmol/appletweb/JmolCD.js trunk/Jmol/appletweb/JmolCore.js trunk/Jmol/appletweb/simple2.htm trunk/Jmol/appletweb/test2.htm Modified: trunk/Jmol/appletweb/JmolApi.js =================================================================== --- trunk/Jmol/appletweb/JmolApi.js 2012-04-25 12:17:44 UTC (rev 17057) +++ trunk/Jmol/appletweb/JmolApi.js 2012-04-25 17:53:39 UTC (rev 17058) @@ -41,13 +41,12 @@ applet = new Jmol._Applet(id, Info, null, checkOnly); } - - if (applet == null) { + if (applet == null) { if (!Info.useJmolOnly && !Info.useImageOnly) applet = Jmol._getCanvas(id, Info, checkOnly); if (applet == null) applet = new Jmol._Image(id, Info, null, checkOnly); - model && applet._search(model); + Jmol._document && model && applet._search(model); } // keyed to both its string id and itself if (!checkOnly) @@ -295,10 +294,33 @@ } Jmol.setDocument = function(doc) { + + // If doc is null or 0, Jmol.getApplet() will still return an Object, but the HTML will + // put in applet._code and not written to the page. This can be nice, because then you + // can still refer to the applet, but place it on the page after the controls are made. + // + // This really isn't necessary, though, because there is a simpler way: Just define the + // applet variable like this: + // + // jmolApplet0 = "jmolApplet0" + // + // and then, in the getApplet command, use + // + // jmolapplet0 = Jmol.getApplet(jmolApplet0,....) + // + // prior to this, "jmolApplet0" will suffice, and after it, the Object will work as well + // in any button creation + // + // Bob Hanson 25.04.2012 + Jmol._document = doc; } Jmol.setTarget = function(appletOrId, script) { + + // Specify a target for future control creation where the control is indicated as null. + // Really shouldn't be needing this. It is always best to be explicit. + if (appletOrId) { Jmol._targetId = (typeof appletOrId == "string" ? appletOrId : (Jmol._target = appletOrId)._id); } @@ -319,34 +341,37 @@ // Cascading Style Sheet Class support //////////////////////////////////////////////////////////////// - Jmol.setAppletCssClass = function(appletCssClass) { - Jmol.controls._appletCssClass = appletCssClass; - Jmol.controls._appletCssText = appletCssClass ? "class='" + appletCssClass + "' " : ""; + // BH 4/25 -- added text option. setAppletCss(null, "style=\"xxxx\"") + // note that since you must add the style keyword, this can be used to add any attribute to these tags, not just css. + + Jmol.setAppletCss = function(cssClass, text) { + cssClass != null && (Jmol.controls._appletCssClass = cssClass); + Jmol.controls._appletCssText = text ? text + " " : cssClass ? "class=\"" + cssClass + "\" " : ""; } - function jmolSetButtonCssClass(buttonCssClass) { - Jmol.controls._buttonCssClass = buttonCssClass; - Jmol.controls._buttonCssText = buttonCssClass ? "class='" + buttonCssClass + "' " : ""; + Jmol.setButtonCss = function(cssClass, text) { + cssClass != null && (Jmol.controls._buttonCssClass = cssClass); + Jmol.controls._buttonCssText = text ? text + " " : cssClass ? "class=\"" + cssClass + "\" " : ""; } - function jmolSetCheckboxCssClass(checkboxCssClass) { - Jmol.controls._checkboxCssClass = checkboxCssClass; - Jmol.controls._checkboxCssText = checkboxCssClass ? "class='" + checkboxCssClass + "' " : ""; + Jmol.setCheckboxCss = function(cssClass, text) { + cssClass != null && (Jmol.controls._checkboxCssClass = cssClass); + Jmol.controls._checkboxCssText = text ? text + " " : cssClass ? "class=\"" + cssClass + "\" " : ""; } - function jmolSetRadioCssClass(radioCssClass) { - Jmol.controls._radioCssClass = radioCssClass; - Jmol.controls._radioCssText = radioCssClass ? "class='" + radioCssClass + "' " : ""; + Jmol.setRadioCss = function(cssClass, text) { + cssClass != null && (Jmol.controls._radioCssClass = cssClass); + Jmol.controls._radioCssText = text ? text + " " : cssClass ? "class=\"" + cssClass + "\" " : ""; } - function jmolSetLinkCssClass(linkCssClass) { - Jmol.controls._linkCssClass = linkCssClass; - Jmol.controls._linkCssText = linkCssClass ? "class='" + linkCssClass + "' " : ""; + Jmol.setLinkCss = function(cssClass, text) { + cssClass != null && (Jmol.controls._linkCssClass = cssClass); + Jmol.controls._linkCssText = text ? text + " " : cssClass ? "class=\"" + cssClass + "\" " : ""; } - function jmolSetMenuCssClass(menuCssClass) { - Jmol.controls._menuCssClass = menuCssClass; - Jmol.controls._menuCssText = menuCssClass ? "class='" + menuCssClass + "' " : ""; + function jmolSetMenuCssClass(cssClass, text) { + cssClass != null && (Jmol.controls._menuCssClass = cssClass); + Jmol.controls._menuCssText = text ? text + " ": cssClass ? "class=\"" + cssClass + "\" " : ""; } Modified: trunk/Jmol/appletweb/JmolApplet.js =================================================================== --- trunk/Jmol/appletweb/JmolApplet.js 2012-04-25 12:17:44 UTC (rev 17057) +++ trunk/Jmol/appletweb/JmolApplet.js 2012-04-25 17:53:39 UTC (rev 17058) @@ -1,6 +1,6 @@ // JmolApplet.js -- Jmol._Applet and Jmol._Image -(function (Jmol) { +(function (Jmol, document) { /* AngelH, mar2007: @@ -87,15 +87,12 @@ Jmol.controls == undefined || Jmol.controls._onloadResetForms(); } - this._create(id,Info); - - if (Info.addSelectionOptions) - Jmol._getGrabberOptions(this, caption); + this._create(id,Info, caption); return this; } - Jmol._Applet.prototype._create = function(id, Info){ + Jmol._Applet.prototype._create = function(id, Info, caption){ /* * private variables */ @@ -211,12 +208,13 @@ } params.loadInline = (Info.inlineModel ? sterilizeInline(Info.inlineModel) : ""); //params.script = (Info.script ? sterilizeScript(Info.script) : ""); - var t = tHeader + writeParams() + visitJava + tFooter; + var t = Jmol._getWrapper(this, true) + + tHeader + writeParams() + visitJava + tFooter + + Jmol._getWrapper(this, false) + + (Info.addSelectionOptions ? Jmol._getGrabberOptions(this, caption) : ""); if (Jmol._debugAlert) alert(t); - Jmol._getWrapper(this, true); - document.write(t); - Jmol._getWrapper(this, false); + this._code = Jmol._documentWrite(t); } Jmol._Applet.prototype.readyCallback = function(id, fullid, isReady, applet) { @@ -298,6 +296,7 @@ this._showInfo(false); params || (params = ""); this._thisJmolModel = "" + Math.random(); + this._script("zap;set echo middle center;echo Retrieving data..."); if (this._jmolIsSigned) { this._script("load \"" + fileName + "\"" + params); return; @@ -318,8 +317,9 @@ this._loadFile(dm, script); return; } + this._script("zap;set echo middle center;echo Retrieving data..."); if (this._jmolIsSigned) { - this._script("zap;set echo middle center;echo Retrieving data...;refresh;load \"" + dm + "\";" + script); + this._script("load \"" + dm + "\";" + script); } else { // need to do the postLoad here as well var c=this; @@ -343,13 +343,14 @@ this._height = Info.height; this._hasOptions = Info.addSelectionOptions; this._info = ""; - this._infoHeader = this._jmolType + ' "' + this._id + '"' - Jmol._getWrapper(this, true); - var s = '<img id="'+id+'_image" width="' + Info.width + '" height="' + Info.height + '" src=""/>'; - document.write(s); - Jmol._getWrapper(this, false); - if (Info.addSelectionOptions) - Jmol._getGrabberOptions(this, caption); + this._infoHeader = this._jmolType + ' "' + this._id + '"'; + var t = Jmol._getWrapper(this, true) + + '<img id="'+id+'_image" width="' + Info.width + '" height="' + Info.height + '" src=""/>' + + Jmol._getWrapper(this, false) + + (Info.addSelectionOptions ? Jmol._getGrabberOptions(this, caption) : ""); + if (Jmol._debugAlert) + alert(t); + this._code = Jmol._documentWrite(t); this._canScript = function(script) {return (script.indexOf("#alt:LOAD") >= 0);}; return this; } @@ -401,4 +402,4 @@ Jmol._getElement(this, "image").src = src; } -})(Jmol); +})(Jmol, document); Modified: trunk/Jmol/appletweb/JmolCD.js =================================================================== --- trunk/Jmol/appletweb/JmolCD.js 2012-04-25 12:17:44 UTC (rev 17057) +++ trunk/Jmol/appletweb/JmolCD.js 2012-04-25 17:53:39 UTC (rev 17058) @@ -22,68 +22,33 @@ // overrides the function in JmolCore.js // ChemDoodle: first try with WebGL unless that doesn't work or we have indicated NOWEBGL var canvas = null; - if (Info.useWebGlIfAvailable && ChemDoodle.featureDetection.supports_webgl()) { + if (Info.useWebGlIfAvailable && ChemDoodle.featureDetection.supports_webgl()) canvas = new Jmol._Canvas3D(id, Info, null, checkOnly); - if (canvas && checkOnly) - return canvas; - } - if (canvas) { - //canvas.specs.set3DRepresentation('Stick'); - canvas.specs.set3DRepresentation('Ball and Stick'); - canvas.specs.backgroundColor = 'black'; - } else { - canvas = new Jmol._Canvas(id, Info, null, checkOnly); - if (checkOnly) - return canvas; - canvas.specs.bonds_useJMOLColors = true; - canvas.specs.bonds_width_2D = 3; - canvas.specs.atoms_display = false; - canvas.specs.backgroundColor = 'black'; - canvas.specs.bonds_clearOverlaps_2D = true; - } - return canvas; + return (canvas ? canvas : new Jmol._Canvas(id, Info, null, checkOnly)); } Jmol._Canvas3D = function(id, Info, caption, checkOnly){ + this._is2D = false; this._jmolType = "Jmol._Canvas3D"; if (checkOnly) return this; - Jmol._targetId = this._id = id; - this._width = Info.width; - this._height = Info.height; - this._info = ""; - this._infoHeader = this._jmolType + ' "' + this._id + '"' this._dataMultiplier=1; - this._hasOptions = Info.addSelectionOptions; - Jmol._getWrapper(this, true); - this.create(id,Info.width,Info.height); - Jmol._getWrapper(this, false); - if (Info.addSelectionOptions) - Jmol._getGrabberOptions(this, caption); + this._create(id, Info, caption); return this; } Jmol._Canvas = function(id, Info, caption, checkOnly){ + this._is2D = true; this._jmolType = "Jmol._Canvas"; if (checkOnly) - return this; - this._width = Info.width; - this._height = Info.height; - Jmol._targetId = this._id = id; - this._hasOptions = Info.addSelectionOptions; - this._info = ""; - this._infoHeader = this._jmolType + ' "' + this._id + '"' - Jmol._getWrapper(this, true); - this.create(id, Info.width, Info.height); - Jmol._getWrapper(this, false); + return this; this._dataMultiplier=20; + this._create(id, Info, caption); this.lastPoint=null; this.rotate3D=true; this.rotationMultMod=1.3; this.lastPinchScale=1; this.lastGestureRotate=0; - if (Info.addSelectionOptions) - Jmol._getGrabberOptions(this, caption); return this; } @@ -91,6 +56,36 @@ Jmol._setCommonMethods(proto); + proto._create = function(id, Info, caption) { + Jmol._targetId = this._id = id; + this._width = Info.width; + this._height = Info.height; + this._info = ""; + this._infoHeader = this._jmolType + ' "' + this._id + '"' + this._hasOptions = Info.addSelectionOptions; + this._defaultModel = Info.defaultModel; + var t = Jmol._getWrapper(this, true); + if (Jmol._document) { + Jmol._documentWrite(t); + this.create(id, Info.width, Info.height); + this._setDefaults(); + t = ""; + } else { + t += '<script type="text/javascript">' + + id + '.create("'+id+'",'+Info.width+','+Info.height+');' + + id + '._setDefaults();' + if (Info.defaultModel) + t += id + "._search(" + id + "._defaultModel)"; + t += '</script>'; + } + t += Jmol._getWrapper(this, false); + if (Info.addSelectionOptions) + t += Jmol._getGrabberOptions(this, caption); + if (Jmol._debugAlert && !Jmol._document) + alert(t); + this._code = Jmol._documentWrite(t); + } + proto._canScript = function(script) {return (script.indexOf("#alt") >= 0);}; proto._script = function(script) { @@ -101,15 +96,29 @@ var what = jQuery.trim(Cmd.substring(pt + 1)); switch (Cmd.substring(0, pt)) { case "SETTING": - this.specs.set3DRepresentation(what); - this.setupScene(); + if (!this._is2D) { + this.specs.set3DRepresentation(what); + this.setupScene(); + } else { + switch (what) { + case "Ball and Stick": + this.specs.atoms_circles_2D = this.specs.bonds_symmetrical_2D = true; + break; + case "Line": + this.specs.atoms_circles_2D = this.specs.bonds_symmetrical_2D = false; + break; + } + } this.repaint(); return; case "LOAD": if (what.indexOf("??") >= 0) { - what = prompt(what.split("??")[1], what.split("??")[0]); + var db = what.split("??")[0]; + what = prompt(what.split("??")[1], ""); if (!what) return; + if (!Jmol.db._DirectDatabaseCalls[what.substring(0,1)]) + what = db + what; } Jmol.loadFile(this, what); return; @@ -158,6 +167,19 @@ Jmol._Canvas3D.prototype = _cdSetPrototype(new ChemDoodle._Canvas3D); Jmol._Canvas.prototype = _cdSetPrototype(new ChemDoodle.TransformCanvas); + Jmol._Canvas3D.prototype._setDefaults = function() { + this.specs.set3DRepresentation('Ball and Stick'); + this.specs.backgroundColor = 'black'; + } + + Jmol._Canvas.prototype._setDefaults = function() { + this.specs.bonds_useJMOLColors = true; + this.specs.bonds_width_2D = 3; + this.specs.atoms_display = false; + this.specs.backgroundColor = 'black'; + this.specs.bonds_clearOverlaps_2D = true; + } + Jmol._cdGetFileType = function(name) { var database = name.substring(0, 1); if (database == "$" || database == ":") Modified: trunk/Jmol/appletweb/JmolCore.js =================================================================== --- trunk/Jmol/appletweb/JmolCore.js 2012-04-25 12:17:44 UTC (rev 17057) +++ trunk/Jmol/appletweb/JmolCore.js 2012-04-25 17:53:39 UTC (rev 17058) @@ -55,8 +55,9 @@ _applets: {}, db: { _databasePrefixes: "$=:", - _nciLoadScript: ";n = ({molecule=1}.length < {molecule=2}.length ? 2 : 1); select molecule=n;display selected;center selected;", _fileLoadScript: ";if (_loadScript = '' && defaultLoadScript == '' && _filetype == 'Pdb') { select protein or nucleic;cartoons Only;color structure; select * };", + _nciLoadScript: ";n = ({molecule=1}.length < {molecule=2}.length ? 2 : 1); select molecule=n;display selected;center selected;", + _pubChemLoadScript: "", _DirectDatabaseCalls:{ "$": "http://cactus.nci.nih.gov/chemical/structure/%FILE/file?format=sdf&get3d=True", "=": "http://www.rcsb.org/pdb/files/%FILE.pdb", @@ -79,32 +80,13 @@ // feel free to adjust this look to anything you want - Jmol._documentWrite('<br /><input type="text" id="ID_query"\ - size="32" value="" /><br /><nobr><select id="ID_select">\ - <option value="$" selected>NCI(small molecules)</option>\ - <option value=":">PubChem(small molecules)</option>\ - <option value="=">RCSB(macromolecules)</option>\ - </select>\<button id="ID_submit">Search</button></nobr>'.replace(/ID/g, applet._id)); - note && Jmol.documentWrite(note); - /* - jQuery("#"+label+"_submit").click( - function(){ - applet._search() - } - ); - jQuery("#"+label+"_query").keypress( - function(a){ - 13==a.which&&applet._search() - } - ); - */ - Jmol._getElement(applet, "submit").onclick = function(){applet._search()}; - Jmol._getElement(applet, "query").onkeypress = function(a){13==a.which&&applet._search()}; - - if (applet.repaint) { - applet.emptyMessage="Enter search term below", - applet.repaint() - }; + return '<br /><input type="text" id="ID_query" onkeypress="13==event.which&&Jmol._applets[\'ID\']._search()"\ + size="32" value="" /><br /><nobr><select id="ID_select">\ + <option value="$" selected>NCI(small molecules)</option>\ + <option value=":">PubChem(small molecules)</option>\ + <option value="=">RCSB(macromolecules)</option>\ + </select>\<button id="ID_submit" onclick="Jmol._applets[\'ID\']._search()">Search</button></nobr>' + .replace(/ID/g, applet._id) + (note ? note : ""); } Jmol._getWrapper = function(applet, isHeader) { @@ -118,12 +100,11 @@ : "</div></td></tr><tr><td><div id=\"ID_infotablediv\" style=\"width:Wpx;height:Hpx;display:none\">\ <table><tr height=\"20\"><td style=\"background:yellow\"><span id=\"ID_infoheaderdiv\"></span></td><td width=\"10\"><a href=\"javascript:Jmol.showInfo(ID,false)\">[x]</a></td></tr>\ <tr><td colspan=\"2\"><div id=\"ID_infodiv\" style=\"overflow:scroll;width:Wpx;height:" + (applet._height - 15) + "px\"></div></td></tr></table></div></td></tr></table></div>"); - s = s.replace(/Hpx/g, height).replace(/Wpx/g, width).replace(/ID/g, applet._id); - Jmol._documentWrite(s); + return s.replace(/Hpx/g, height).replace(/Wpx/g, width).replace(/ID/g, applet._id); } Jmol._getScriptForDatabase = function(database) { - return (database == "$" ? Jmol.db._nciLoadScript : Jmol.db._fileLoadScript); + return (database == "$" ? Jmol.db._nciLoadScript : database == ":" ? Jmol.db._pubChemLoadScript : Jmol.db._fileLoadScript); } // <dataset><record><structureId>1BLU</structureId><structureTitle>STRUCTURE OF THE 2[4FE-4S] FERREDOXIN FROM CHROMATIUM VINOSUM</structureTitle></record><record><structureId>3EUN</structureId><structureTitle>Crystal structure of the 2[4Fe-4S] C57A ferredoxin variant from allochromatium vinosum</structureTitle></record></dataset> @@ -397,6 +378,7 @@ Jmol._domWrite(text); else Jmol._document.write(text); + return null; } return text; } Modified: trunk/Jmol/appletweb/simple2.htm =================================================================== --- trunk/Jmol/appletweb/simple2.htm 2012-04-25 12:17:44 UTC (rev 17057) +++ trunk/Jmol/appletweb/simple2.htm 2012-04-25 17:53:39 UTC (rev 17058) @@ -1,6 +1,5 @@ <html> <head> -<script type="text/javascript" src="json2.js" title="required for MSIE"></script> <script type="text/javascript" src="jQuery.min.js" title="required; replaces ChemDoodleWeb-lib;fixed bug in that version"></script> <script type="text/javascript" src="gl-matrix-min.js" title="optional; replaces ChemDoodleWeb-lib;required if using ChemDoodle option"></script> <script type="text/javascript" src="mousewheel.js" title="optional; replaces ChemDoodleWeb-lib;required if using ChemDoodle option"></script> @@ -101,15 +100,15 @@ </script> </td><td> <script type="text/javascript"> -Jmol.controls._buttonCssText="style='width:160'" -Jmol.jmolButton(jmol,"if (!molname) { molname = 'tylenol'};var x = prompt('Enter the name of a compound',molname);if (!x) { quit }; molname = x; load @{':' + molname} #alt:LOAD :??Enter a model name after ':'","Load MOL (PubChem)") -Jmol.jmolBr() +Jmol.setButtonCss(null, "style='width:160'") Jmol.jmolButton(jmol,"if (!molname) { molname = 'ethanol'};var x = prompt('Enter the name of a compound to see its electrostatic potential map',molname);if (!x) { quit }; molname = x; load @{':' + molname};isosurface vdw map MEP translucent","Load MOL + MEP") Jmol.jmolBr() -Jmol.jmolButton(jmol,"if (!molname) { molname = 'tylenol'};var x = prompt('Enter the name or identifier (SMILES, InChI, CAS) of a molecule',molname);if (!x) { quit }; molname = x; load @{'$' + molname} #alt:LOAD $??Enter a model name after '$'","Load MOL (NCI)") +Jmol.jmolButton(jmol,"if (!molname) { molname = 'tylenol'};var x = prompt('Enter the name of a compound',molname);if (!x) { quit }; molname = x; load @{':' + molname} #alt:LOAD :??Enter a model name","Load MOL (PubChem)") Jmol.jmolBr() -Jmol.jmolButton(jmol,"load ? #alt:LOAD http://??load a URL starting with http://","Load URL") +Jmol.jmolButton(jmol,"if (!molname) { molname = 'tylenol'};var x = prompt('Enter the name or identifier (SMILES, InChI, CAS) of a molecule',molname);if (!x) { quit }; molname = x; load @{'$' + molname} #alt:LOAD $??Enter a model name","Load MOL (NCI)") Jmol.jmolBr() +Jmol.jmolButton(jmol,"load ? ","Load URL") +Jmol.jmolBr() Jmol.jmolButton(jmol,"load ? ","Load FILE") Jmol.jmolBr() Jmol.jmolButton(jmol,"script ?.spt","Load SCRIPT") @@ -136,15 +135,17 @@ <script type="text/javascript"> -Jmol.jmolBr() -Jmol.controls._buttonCssText="style='width:120'" -Jmol.jmolButton(jmol,"wireframe -0.1 #alt:SETTING Line", "wireframe") -Jmol.jmolButton(jmol,"spacefill only;spacefill 23%;wireframe 0.15 #alt:SETTING Ball and Stick","ball&stick") -Jmol.jmolButton(jmol,"spacefill #alt:SETTING van der Waals Spheres", "spacefill") -Jmol.jmolBr() -Jmol.controls._buttonCssText="style='width:100'" -Jmol.jmolButton(jmol,"console") -Jmol.jmolCommandInput(jmol) +if (!jmol._is2D) { + Jmol.jmolBr() + Jmol.setButtonCss(null,"style='width:120'") + Jmol.jmolButton(jmol,"wireframe -0.1 #alt:SETTING Line", "wireframe") + Jmol.jmolButton(jmol,"spacefill only;spacefill 23%;wireframe 0.15 #alt:SETTING Ball and Stick","ball&stick") + Jmol.jmolButton(jmol,"spacefill #alt:SETTING van der Waals Spheres", "spacefill") + Jmol.jmolBr() + Jmol.setButtonCss(null,"style='width:100'") + Jmol.jmolButton(jmol,"console") + Jmol.jmolCommandInput(jmol) +} </script> </td></tr></table> Modified: trunk/Jmol/appletweb/test2.htm =================================================================== --- trunk/Jmol/appletweb/test2.htm 2012-04-25 12:17:44 UTC (rev 17057) +++ trunk/Jmol/appletweb/test2.htm 2012-04-25 17:53:39 UTC (rev 17058) @@ -1,7 +1,6 @@ <html> <title>Jmol/ChemDoodle Demo -- Using JmolData.jar for serving ChemDoodle models</title> <head> -<script type="text/javascript" src="json2.js" title="required for MSIE"></script> <script type="text/javascript" src="jQuery.min.js" title="required; replaces ChemDoodleWeb-lib;fixed bug in that version"></script> <script type="text/javascript" src="gl-matrix-min.js" title="optional; replaces ChemDoodleWeb-lib;required if using ChemDoodle option"></script> <script type="text/javascript" src="mousewheel.js" title="optional; replaces ChemDoodleWeb-lib;required if using ChemDoodle option"></script> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2012-04-26 00:11:05
|
Revision: 17059 http://jmol.svn.sourceforge.net/jmol/?rev=17059&view=rev Author: hansonr Date: 2012-04-26 00:10:58 +0000 (Thu, 26 Apr 2012) Log Message: ----------- fixes for Jmol/ChemDoodle Modified Paths: -------------- trunk/Jmol/appletweb/JmolApi.js trunk/Jmol/appletweb/JmolCD.js trunk/Jmol/appletweb/simple2.htm Modified: trunk/Jmol/appletweb/JmolApi.js =================================================================== --- trunk/Jmol/appletweb/JmolApi.js 2012-04-25 17:53:39 UTC (rev 17058) +++ trunk/Jmol/appletweb/JmolApi.js 2012-04-26 00:10:58 UTC (rev 17059) @@ -369,7 +369,7 @@ Jmol.controls._linkCssText = text ? text + " " : cssClass ? "class=\"" + cssClass + "\" " : ""; } - function jmolSetMenuCssClass(cssClass, text) { + Jmol.setMenuCss = function(cssClass, text) { cssClass != null && (Jmol.controls._menuCssClass = cssClass); Jmol.controls._menuCssText = text ? text + " ": cssClass ? "class=\"" + cssClass + "\" " : ""; } Modified: trunk/Jmol/appletweb/JmolCD.js =================================================================== --- trunk/Jmol/appletweb/JmolCD.js 2012-04-25 17:53:39 UTC (rev 17058) +++ trunk/Jmol/appletweb/JmolCD.js 2012-04-26 00:10:58 UTC (rev 17059) @@ -100,12 +100,13 @@ this.specs.set3DRepresentation(what); this.setupScene(); } else { + this.specs.atoms_useJMOLColors = true; switch (what) { case "Ball and Stick": - this.specs.atoms_circles_2D = this.specs.bonds_symmetrical_2D = true; + this.specs.atoms_circles_2D = this.specs.bonds_symmetrical_2D = this.specs.atoms_display = true; break; case "Line": - this.specs.atoms_circles_2D = this.specs.bonds_symmetrical_2D = false; + this.specs.atoms_circles_2D = this.specs.bonds_symmetrical_2D = this.specs.atoms_display = false; break; } } @@ -168,15 +169,18 @@ Jmol._Canvas.prototype = _cdSetPrototype(new ChemDoodle.TransformCanvas); Jmol._Canvas3D.prototype._setDefaults = function() { + this.specs.backgroundColor = 'black'; + this.specs.atoms_useJMOLColors = true; + this.specs.bonds_useJMOLColors = true; this.specs.set3DRepresentation('Ball and Stick'); - this.specs.backgroundColor = 'black'; } Jmol._Canvas.prototype._setDefaults = function() { + this.specs.backgroundColor = 'black'; + this.specs.atoms_useJMOLColors = true; this.specs.bonds_useJMOLColors = true; this.specs.bonds_width_2D = 3; this.specs.atoms_display = false; - this.specs.backgroundColor = 'black'; this.specs.bonds_clearOverlaps_2D = true; } Modified: trunk/Jmol/appletweb/simple2.htm =================================================================== --- trunk/Jmol/appletweb/simple2.htm 2012-04-25 17:53:39 UTC (rev 17058) +++ trunk/Jmol/appletweb/simple2.htm 2012-04-26 00:10:58 UTC (rev 17059) @@ -135,11 +135,11 @@ <script type="text/javascript"> -if (!jmol._is2D) { Jmol.jmolBr() Jmol.setButtonCss(null,"style='width:120'") Jmol.jmolButton(jmol,"wireframe -0.1 #alt:SETTING Line", "wireframe") Jmol.jmolButton(jmol,"spacefill only;spacefill 23%;wireframe 0.15 #alt:SETTING Ball and Stick","ball&stick") +if (!jmol._is2D) { Jmol.jmolButton(jmol,"spacefill #alt:SETTING van der Waals Spheres", "spacefill") Jmol.jmolBr() Jmol.setButtonCss(null,"style='width:100'") This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2012-04-28 04:09:15
|
Revision: 17063 http://jmol.svn.sourceforge.net/jmol/?rev=17063&view=rev Author: hansonr Date: 2012-04-28 04:09:08 +0000 (Sat, 28 Apr 2012) Log Message: ----------- JmolControls Modified Paths: -------------- trunk/Jmol/appletweb/JmolCore.js Added Paths: ----------- trunk/Jmol/appletweb/JmolControls.js Added: trunk/Jmol/appletweb/JmolControls.js =================================================================== --- trunk/Jmol/appletweb/JmolControls.js (rev 0) +++ trunk/Jmol/appletweb/JmolControls.js 2012-04-28 04:09:08 UTC (rev 17063) @@ -0,0 +1,193 @@ +(function(Jmol) { + + var c = Jmol.controls = { + + _hasResetForms: false, + _scripts: [""], + _checkboxMasters: {}, + _checkboxItems: {}, + + _buttonCount: 0, + _checkboxCount: 0, + _radioGroupCount: 0, + _radioCount: 0, + _linkCount: 0, + _cmdCount: 0, + _menuCount: 0, + + _previousOnloadHandler: null, + _control: null, + _element: null, + + _appletCssClass: null, + _appletCssText: "", + _buttonCssClass: null, + _buttonCssText: "", + _checkboxCssClass: null, + _checkboxCssText: "", + _radioCssClass: null, + _radioCssText: "", + _linkCssClass: null, + _linkCssText: "", + _menuCssClass: null, + _menuCssText: "" + }; + + c._addScript = function(appId,script) { + if (!script) + return 0; + var index = c._scripts.length; + c._scripts[index] = [appId, script]; + return index; + } + + c._getRadio = function(appId, script, labelHtml, isChecked, separatorHtml, groupName, id, title) { + ++c._radioCount; + groupName != undefined && groupName != null || (groupName = "jmolRadioGroup" + (c._radioGroupCount - 1)); + if (!script) + return ""; + labelHtml != undefined && labelHtml != null || (labelHtml = script.substring(0, 32)); + separatorHtml || (separatorHtml = ""); + var scriptIndex = c._addScript(script); + var eospan = "</span>"; + var t = "<span id=\"span_"+id+"\""+(title ? " title=\"" + title + "\"":"")+"><input name='" + + groupName + "' id='"+id+"' type='radio' onclick='Jmol.controls._click(this," + + scriptIndex + "," + appId + ");return true;' onmouseover='Jmol.controls._mouseOver(" + + scriptIndex + ");return true;' onmouseout='Jmol.controls._mouseOut()' " + + (isChecked ? "checked='true' " : "") + c._radioCssText + " />"; + if (labelHtml.toLowerCase().indexOf("<td>")>=0) { + t += eospan; + eospan = ""; + } + t += "<label for=\"" + id + "\">" + labelHtml + "</label>" +eospan + separatorHtml; + return t; + } + +/////////// events ////////// + + c._scriptExecute = function(element, scriptInfo) { + var applet = Jmol._applets[scriptInfo[0]]; + var script = scriptInfo[1]; + if (typeof(script) == "object") + script[0](element, script, applet); + else + Jmol.script(applet, script); + } + + c._commandKeyPress = function(e, id, appId) { + var keycode = (e == 13 ? 13 : window.event ? window.event.keyCode : e ? e.which : 0); + if (keycode == 13) { + var inputBox = document.getElementById(id) + Jmol.controls._scriptExecute(inputBox, [appId, inputBox.value]); + } + } + + c._click = function(elementClicked, scriptIndex) { + Jmol.controls._element = elementClicked; + Jmol.controls._scriptExecute(elementClicked, Jmol.controls._scripts[scriptIndex]); + } + + c._menuSelected = function(menuObject, appId) { + var scriptIndex = menuObject.value; + if (scriptIndex != undefined) { + Jmol.controls._scriptExecute(menuObject, Jmol.controls._scripts[scriptIndex]); + return; + } + var len = menuObject.length; + if (typeof len == "number") + for (var i = 0; i < len; ++i) + if (menuObject[i].selected) { + Jmol.controls._click(menuObject[i], menuObject[i].value, appId); + return; + } + alert("?Que? menu selected bug #8734"); + } + + c._cbNotifyMaster = function(m){ + //called when a group item is checked + var allOn = true; + var allOff = true; + for (var chkBox in m.chkGroup){ + if(m.chkGroup[chkBox].checked) + allOff = false; + else + allOn = false; + } + if (allOn)m.chkMaster.checked = true; + if (allOff)m.chkMaster.checked = false; + if ((allOn || allOff) && Jmol.controls._checkboxItems[m.chkMaster.id]) + Jmol.controls._cbNotifyMaster(Jmol.controls._checkboxItems[m.chkMaster.id]) + } + + c._cbNotifyGroup = function(m, isOn){ + //called when a master item is checked + for (var chkBox in m.chkGroup){ + var item = m.chkGroup[chkBox] + item.checked = isOn; + if (Jmol.controls._checkboxMasters[item.id]) + Jmol.controls._cbNotifyGroup(Jmol.controls._checkboxMasters[item.id], isOn) + } + } + + c._cbSetCheckboxGroup = function(chkMaster, chkbox){ + var id = chkMaster; + if(typeof(id)=="number")id = "jmolCheckbox" + id; + chkMaster = document.getElementById(id); + if (!chkMaster)alert("jmolSetCheckboxGroup: master checkbox not found: " + id); + var m = Jmol.controls._checkboxMasters[id] = {}; + m.chkMaster = chkMaster; + m.chkGroup = {}; + for (var i = 1; i < arguments.length; i++){ + var id = arguments[i]; + if(typeof(id)=="number")id = "jmolCheckbox" + id; + checkboxItem = document.getElementById(id); + if (!checkboxItem)alert("jmolSetCheckboxGroup: group checkbox not found: " + id); + m.chkGroup[id] = checkboxItem; + Jmol.controls._checkboxItems[id] = m; + } + } + + c._cbClick = function(ckbox, whenChecked, whenUnchecked, applet) { + var c = Jmol.controls; + c._control = ckbox; + c._click(ckbox, ckbox.checked ? whenChecked : whenUnchecked, applet); + if(c._checkboxMasters[ckbox.id]) + c._notifyGroup(c._checkboxMasters[ckbox.id], ckbox.checked) + if(c._checkboxItems[ckbox.id]) + c._notifyMaster(c._checkboxItems[ckbox.id]) + } + + c._cbOver = function(ckbox, whenChecked, whenUnchecked) { + window.status = Jmol.controls._scripts[ckbox.checked ? whenUnchecked : whenChecked]; + } + + c._mouseOver = function(scriptIndex) { + window.status = c._scripts[scriptIndex]; + } + + c._mouseOut = function() { + window.status = " "; + return true; + } + + c._onloadResetForms = function() { + var c = Jmol.controls; + // must be evaluated ONLY once -- is this compatible with jQuery? + if (c._hasResetForms) + return; + c._hasResetForms = true; + c._previousOnloadHandler = window.onload; + window.onload = function() { + var c = Jmol.controls; + if (c._buttonCount+c._checkboxCount+c._menuCount+c._radioCount+c._radioGroupCount > 0) { + var forms = document.forms; + for (var i = forms.length; --i >= 0; ) + forms[i].reset(); + } + if (c._previousOnloadHandler) + c._previousOnloadHandler(); + } + } + + +})(Jmol); Modified: trunk/Jmol/appletweb/JmolCore.js =================================================================== --- trunk/Jmol/appletweb/JmolCore.js 2012-04-28 04:05:20 UTC (rev 17062) +++ trunk/Jmol/appletweb/JmolCore.js 2012-04-28 04:09:08 UTC (rev 17063) @@ -13,10 +13,11 @@ // gl-matrix-min.js -- required for ChemDoodle option // mousewheel.js -- required for ChemDoodle option // ChemDoodleWeb.js -- required for ChemDoodle option; must be after jQuery, gl-matrix-min, and mousewheel -// JmolCore.js -- required; must be after jQuery -// JmolApplet.js -- required; must be after JmolCore -// JmolCD.js -- required for ChemDoodle option; must be after JmolApplet -// JmolApi.js -- required; must be after JmolCore +// JmolCore.js -- required; +// JmolApplet.js -- required; internal functions for _Applet and _Image; must be after JmolCore +// JmolControls.js -- optional; internal functions for buttons, links, menus, etc.; must be after JmolCore +// JmolApi.js -- required; all user functions; must be after JmolCore +// JmolCD.js -- optional; for ChemDoodle option; must be after JmolApplet // Allows Jmol-like objects to be displayed on Java-challenged (iPad/iPhone) // or applet-challenged (Android/iPhone) platforms, with automatic switching to @@ -101,10 +102,10 @@ height += "px"; if (typeof width !== "string") width += "px"; - var s = (isHeader ? "<div id=\"ID_appletinfotablediv\" style=\"width:Wpx;height:Hpx\"><div id=\"ID_appletdiv\" style=\"width:100%;height:100%\">" - : "</div><div id=\"ID_infotablediv\" style=\"width:100%;height:100%;display:none\">\ - <table height=\"100%\" width=\"100%\"><tr height=\"20\"><td style=\"background:yellow\"><span id=\"ID_infoheaderdiv\"></span></td><td width=\"10\"><a href=\"javascript:Jmol.showInfo(ID,false)\">[x]</a></td></tr>\ - <tr height=\"*\"><td colspan=\"2\"><div id=\"ID_infodiv\" style=\"overflow:scroll;width:100%;height:100%\"></div></td></tr></table></div></div>"); + var s = (isHeader ? "<div id=\"ID_appletinfotablediv\" style=\"width:Wpx;height:Hpx\"><table><tr><td><div id=\"ID_appletdiv\" style=\"width:Wpx;height:Hpx\">" + : "</div></td></tr><tr><td><div id=\"ID_infotablediv\" style=\"width:Wpx;height:Hpx;display:none\">\ + <table><tr height=\"20\"><td style=\"background:yellow\"><span id=\"ID_infoheaderdiv\"></span></td><td width=\"10\"><a href=\"javascript:Jmol.showInfo(ID,false)\">[x]</a></td></tr>\ + <tr><td colspan=\"2\"><div id=\"ID_infodiv\" style=\"overflow:scroll;width:Wpx;height:" + (applet._height - 15) + "px\"></div></td></tr></table></div></td></tr></table></div>"); return s.replace(/Hpx/g, height).replace(/Wpx/g, width).replace(/ID/g, applet._id); } @@ -481,12 +482,8 @@ s = s.replace(/\ \|\ /g, "\n"); return s; } - var A = jQuery.parseJSON(s); - if(!A) - return; - if(key && A[key]) - A = A[key]; - return A; + var A = (new Function( "return " + data ) )(); + return (!A ? null : key && A[key] ? A : A); } Jmol._sortMessages = function(A){ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mo...@us...> - 2012-04-27 20:02:54
|
Revision: 17061 http://jmol.svn.sourceforge.net/jmol/?rev=17061&view=rev Author: molusc2 Date: 2012-04-27 20:02:46 +0000 (Fri, 27 Apr 2012) Log Message: ----------- added resizeApplet() method to jmolApplet. Not yet tested with MSIE for resize. Modified Paths: -------------- trunk/Jmol/appletweb/JmolApi.js trunk/Jmol/appletweb/JmolApplet.js trunk/Jmol/appletweb/JmolCore.js Modified: trunk/Jmol/appletweb/JmolApi.js =================================================================== --- trunk/Jmol/appletweb/JmolApi.js 2012-04-26 22:23:58 UTC (rev 17060) +++ trunk/Jmol/appletweb/JmolApi.js 2012-04-27 20:02:46 UTC (rev 17061) @@ -57,7 +57,67 @@ Jmol.script = function(applet, script) { applet._script(script); } + + Jmol.scriptWait = function(applet, script) { + return applet._scriptWait(script); + } + + Jmol.scriptEcho = function(applet, script) { + return applet._scriptEcho(script); + } + + Jmol.scriptMessage = function(applet, script) { + return applet._scriptMessage(script); + } + + Jmol.scriptWaitOutput = function(applet, script) { + return applet._scriptWait(script); + } + + Jmol.scriptWaitAsArray = function(applet, script) { + return applet._scriptWait(script); + } + + Jmol.getStatus = function(applet,strStatus) { + return applet._getStatus(strStatus); + } + + Jmol.getPropertyAsArray = function(applet,sKey,sValue) { + return applet._getPropertyAsArray(sKey,sValue); + } + Jmol.getPropertyAsString = function(applet,sKey,sValue) { + return applet._getPropertyAsString(sKey,sValue); + } + + Jmol.getPropertyAsJSON = function(applet,sKey,sValue) { + return applet._getPropertyAsJSON(sKey,sValue); + } + + Jmol.getPropertyAsJavaObject = function(applet,sKey,sValue) { + return applet._getPropertyAsJavaObject(sKey,sValue); + } + + Jmol.evaluate = function(applet,molecularMath) { + return applet._evaluate(molecularMath); + } + + Jmol.saveOrientation = function(applet,id) { + return applet._saveOrientation(id); + } + + Jmol.restoreOrientation = function(applet,id) { + return applet._restoreOrientation(id); + } + + Jmol.restoreOrientationDelayed = function(applet,id,delay) { + return applet._restoreOrientationDelayed(id,delay); + } + + Jmol.resizeApplet = function(applet,size) { + return applet._resizeApplet(size); + } + Jmol.search = function(applet, query, script) { applet._search(query, script); } Modified: trunk/Jmol/appletweb/JmolApplet.js =================================================================== --- trunk/Jmol/appletweb/JmolApplet.js 2012-04-26 22:23:58 UTC (rev 17060) +++ trunk/Jmol/appletweb/JmolApplet.js 2012-04-27 20:02:46 UTC (rev 17061) @@ -45,6 +45,9 @@ this._jmolJarPath = Info.jmolJarPath || "."; this._memoryLimit = Info.memoryLimit || 512; this._canScript = function(script) {return true;}; + this._savedOrientations = []; + this._containerWidth = this._width + ((this._width==parseFloat(this._width))? "px":""); + this._containerHeight = this._height + ((this._height==parseFloat(this._height))? "px":""); /* * private variables @@ -117,7 +120,6 @@ function writeParams() { var t = ""; - console.log(params); for (var i in params) if(params[i]!="") t+=" <param name='"+i+"' value='"+params[i]+"' />\n"; @@ -129,7 +131,7 @@ 'messagecallback','pickcallback','animframecallback','appletreadycallback','atommovedcallback', 'echocallback','evalcallback','hovercallback','language','loadstructcallback','measurecallback', 'minimizationcallback','resizecallback','scriptcallback','statusform','statustext','statustextarea', - 'synccallback']; + 'synccallback','usecommandthread']; for (var i in Info) if(availableValues[i.toLowerCase()]) params[i] = Info [i]; @@ -150,8 +152,8 @@ }; params.appletReadyCallback = this._id + ".readyCallback"; - //var sz = j._applet.getSize(); - var widthAndHeight = " width='" + this._width + "' height='" + this._height + "' "; + //size is set to 100% of containers' size + var widthAndHeight = " width='" + "100%" + "' height='" + "100%" + "' "; var tHeader, tFooter; getParameters(Info); @@ -235,8 +237,8 @@ return; this._isInfoVisible = tf; Jmol._getElement(this, "infotablediv").style.display = (tf ? "block" : "none"); - Jmol._getElement(this, "appletdiv").style.height = (tf ? 1 : this._height) + "px"; - Jmol._getElement(this, "appletdiv").style.width = (tf ? 1 : this._width) + "px"; + Jmol._getElement(this, "appletdiv").style.height = (tf ? "1px" : "100%"); + Jmol._getElement(this, "appletdiv").style.width = (tf ? "1px" : "100%"); if (!tf)//&& Jmol._isMsieRenderBug -- occurring also on Mac systems) alert("returning to applet..."); this._show(!tf); @@ -277,8 +279,8 @@ } Jmol._Applet.prototype._show = function(tf) { - var w = (tf ? this._width : 1) + "px"; - var h = (tf ? this._height : 1) + "px"; + var w = (tf ? "100%" : "1px"); + var h = (tf ? "100%" : "1px"); document.getElementById(this._id).style.width = w; document.getElementById(this._id).style.height = h; } @@ -290,8 +292,169 @@ return; } this._applet.script(script); - } + } + Jmol._Applet.prototype._scriptWait = function(script) { + var Ret = this._scriptWaitAsArray(script); + var s = ""; + for(var i = Ret.length; --i >= 0; ) + for(var j = 0, jj = Ret[i].length; j < jj; j++) + s += Ret[i][j] + "\n"; + return s; + } + + Jmol._Applet.prototype._scriptEcho = function(script) { + // returns a newline-separated list of all echos from a script + var Ret = this._scriptWaitAsArray(script); + var s = ""; + for(var i = Ret.length; --i >= 0; ) + for(var j = Ret[i].length; --j >= 0; ) + if(Ret[i][j][1] == "scriptEcho") + s += Ret[i][j][3] + "\n"; + return s.replace(/ \| /g, "\n"); + } + + Jmol._Applet.prototype._scriptMessage = function(script) { + // returns a newline-separated list of all messages from a script, ending with "script completed\n" + var Ret = this._scriptWaitAsArray(script); + var s = ""; + for(var i = Ret.length; --i >= 0; ) + for(var j = Ret[i].length; --j >= 0; ) + if(Ret[i][j][1] == "scriptStatus") + s += Ret[i][j][3] + "\n"; + return s.replace(/ \| /g, "\n"); + } + + Jmol._Applet.prototype._scriptWaitOutput = function(script) { + var ret = ""; + try { + if(script) { + ret += this._applet.scriptWaitOutput(script); + } + } catch(e) { + } + return ret; + } + + Jmol._Applet.prototype._scriptWaitAsArray = function(script) { + var ret = ""; + try { + this._getStatus("scriptEcho,scriptMessage,scriptStatus,scriptError"); + if(script) { + ret += this._applet.scriptWait(script); + ret = Jmol._evalJSON(ret, "jmolStatus"); + if( typeof ret == "object") + return ret; + } + } catch(e) { + } + return [[ret]]; + } + + Jmol._Applet.prototype._getStatus = function(strStatus) { + return Jmol._sortMessages(this._getPropertyAsArray("jmolStatus",strStatus)); + } + + Jmol._Applet.prototype._getPropertyAsArray = function(sKey,sValue) { + return Jmol._evalJSON(this._getPropertyAsJSON(sKey,sValue),sKey); + } + + Jmol._Applet.prototype._getPropertyAsString = function(sKey,sValue) { + sValue == undefined && ( sValue = ""); + return this._applet.getPropertyAsString(sKey, sValue) + ""; + } + + Jmol._Applet.prototype._getPropertyAsJSON = function(sKey,sValue) { + sValue == undefined && ( sValue = ""); + try { + return (this._applet.getPropertyAsJSON(sKey, sValue) + ""); + } catch(e) { + return ""; + } + } + + Jmol._Applet.prototype._getPropertyAsJavaObject = function(sKey,sValue) { + sValue == undefined && ( sValue = ""); + return this._applet.getProperty(sKey,sValue); + } + + + Jmol._Applet.prototype._evaluate = function(molecularMath) { + //carries out molecular math on a model + + var result = "" + this._getPropertyAsJavaObject("evaluate", molecularMath); + var s = result.replace(/\-*\d+/, ""); + if(s == "" && !isNaN(parseInt(result))) + return parseInt(result); + var s = result.replace(/\-*\d*\.\d*/, "") + if(s == "" && !isNaN(parseFloat(result))) + return parseFloat(result); + return result; + } + + + Jmol._Applet.prototype._saveOrientation = function(id) { + return this._savedOrientations[id] = this._getPropertyAsArray("orientationInfo","info").moveTo; + } + + + Jmol._Applet.prototype._restoreOrientation = function(id) { + var s = this._savedOrientations[id]; + if(!s || s == "") + return s = s.replace(/1\.0/, "0"); + return this._scriptWait(s); + } + + + Jmol._Applet.prototype._restoreOrientationDelayed = function(id,delay) { + arguments.length < 1 && ( delay = 1); + var s = this._savedOrientations[id]; + if(!s || s == "") + return s = s.replace(/1\.0/, delay); + return this._scriptWait(s); + } + + Jmol._Applet.prototype._resizeApplet = function(size) { + // See _jmolGetAppletSize() for the formats accepted as size [same used by jmolApplet()] + // Special case: an empty value for width or height is accepted, meaning no change in that dimension. + + /* + * private functions + */ + function _getAppletSize(size, units) { + /* Accepts single number, 2-value array, or object with width and height as mroperties, each one can be one of: + percent (text string ending %), decimal 0 to 1 (percent/100), number, or text string (interpreted as nr.) + [width, height] array of strings is returned, with units added if specified. + Percent is relative to container div or element (which should have explicitly set size). + */ + var width, height; + if(( typeof size) == "object" && size != null) { + width = size[0]||size.width; + height = size[1]||size.height; + } else { + width = height = size; + } + return [_fixDim(width, units), _fixDim(height, units)]; + } + + function _fixDim(x, units) { + var sx = "" + x; + return (sx.length == 0 ? ( units ? "" : Jmol._allowedJmolSize[2]) : sx.indexOf("%") == sx.length - 1 ? sx : ( x = parseFloat(x)) <= 1 && x > 0 ? x * 100 + "%" : (isNaN( x = Math.floor(x)) ? Jmol._allowedJmolSize[2] : x < Jmol._allowedJmolSize[0] ? Jmol._allowedJmolSize[0] : x > Jmol._allowedJmolSize[1] ? Jmol._allowedJmolSize[1] : x) + ( units ? units : "")); + } + + function _setDomNodeSize(id, sz){ + var domNode = Jmol._document.getElementById(id); + domNode.style.width = sz[0]; + domNode.style.height = sz[1]; + } + + var sz = _getAppletSize(size, "px"); + console.log(sz) + _setDomNodeSize(this._id+"_appletinfotablediv",sz); + this._containerWidth = sz[0]; + this._containerHeight = sz[1]; + } + Jmol._Applet.prototype._loadFile = function(fileName, params){ this._showInfo(false); params || (params = ""); Modified: trunk/Jmol/appletweb/JmolCore.js =================================================================== --- trunk/Jmol/appletweb/JmolCore.js 2012-04-26 22:23:58 UTC (rev 17060) +++ trunk/Jmol/appletweb/JmolCore.js 2012-04-27 20:02:46 UTC (rev 17061) @@ -68,7 +68,12 @@ _restQueryXml: "<orgPdbQuery><queryType>org.pdb.query.simple.AdvancedKeywordQuery</queryType><description>Text Search</description><keywords>QUERY</keywords></orgPdbQuery>", _restReportUrl: "http://www.pdb.org/pdb/rest/customReport?pdbids=IDLIST&customReportColumns=structureId,structureTitle" }, - _getCanvas: function(){ /* only in JmolCD.js */ return null } + _getCanvas: function(){ /* only in JmolCD.js */ return null }, + _allowedJmolSize: [25, 2048, 300] // min, max, default (pixels) + /* By setting the Jmol.allowedJmolSize[] variable in the webpage + before calling Jmol.getApplet(), limits for applet size can be overriden. + 2048 standard for GeoWall (http://geowall.geo.lsa.umich.edu/home.html) + */ } })(document); @@ -96,10 +101,10 @@ height += "px"; if (typeof width !== "string") width += "px"; - var s = (isHeader ? "<div id=\"ID_appletinfotablediv\" style=\"width:Wpx;height:Hpx\"><table><tr><td><div id=\"ID_appletdiv\" style=\"width:Wpx;height:Hpx\">" - : "</div></td></tr><tr><td><div id=\"ID_infotablediv\" style=\"width:Wpx;height:Hpx;display:none\">\ - <table><tr height=\"20\"><td style=\"background:yellow\"><span id=\"ID_infoheaderdiv\"></span></td><td width=\"10\"><a href=\"javascript:Jmol.showInfo(ID,false)\">[x]</a></td></tr>\ - <tr><td colspan=\"2\"><div id=\"ID_infodiv\" style=\"overflow:scroll;width:Wpx;height:" + (applet._height - 15) + "px\"></div></td></tr></table></div></td></tr></table></div>"); + var s = (isHeader ? "<div id=\"ID_appletinfotablediv\" style=\"width:Wpx;height:Hpx\"><div id=\"ID_appletdiv\" style=\"width:100%;height:100%\">" + : "</div><div id=\"ID_infotablediv\" style=\"width:100%;height:100%;display:none\">\ + <table height=\"100%\" width=\"100%\"><tr height=\"20\"><td style=\"background:yellow\"><span id=\"ID_infoheaderdiv\"></span></td><td width=\"10\"><a href=\"javascript:Jmol.showInfo(ID,false)\">[x]</a></td></tr>\ + <tr height=\"*\"><td colspan=\"2\"><div id=\"ID_infodiv\" style=\"overflow:scroll;width:100%;height:100%\"></div></td></tr></table></div></div>"); return s.replace(/Hpx/g, height).replace(/Wpx/g, width).replace(/ID/g, applet._id); } @@ -467,4 +472,42 @@ return e; } + Jmol._evalJSON = function(s,key){ + s = s + ""; + if(!s) + return []; + if(s.charAt(0) != "{") { + if(s.indexOf(" | ") >= 0) + s = s.replace(/\ \|\ /g, "\n"); + return s; + } + var A = jQuery.parseJSON(s); + if(!A) + return; + if(key && A[key]) + A = A[key]; + return A; + } + + Jmol._sortMessages = function(A){ + /* + * private function + */ + function _sortKey0(a,b){ + return (a[0]<b[0]?1:a[0]>b[0]?-1:0); + } + + if(!A || typeof (A) != "object") + return []; + var B = []; + for(var i = A.length - 1; i >= 0; i--) + for(var j = 0, jj= A[i].length; j < jj; j++) + B[B.length] = A[i][j]; + if(B.length == 0) + return; + B = B.sort(_sortKey0); + return B; + } + + })(Jmol); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2012-05-10 22:59:12
|
Revision: 17117 http://jmol.svn.sourceforge.net/jmol/?rev=17117&view=rev Author: hansonr Date: 2012-05-10 22:59:06 +0000 (Thu, 10 May 2012) Log Message: ----------- Modified Paths: -------------- trunk/Jmol/appletweb/JmolApi.js trunk/Jmol/appletweb/JmolApplet.js Modified: trunk/Jmol/appletweb/JmolApi.js =================================================================== --- trunk/Jmol/appletweb/JmolApi.js 2012-05-09 18:10:04 UTC (rev 17116) +++ trunk/Jmol/appletweb/JmolApi.js 2012-05-10 22:59:06 UTC (rev 17117) @@ -25,7 +25,7 @@ jmolIsSigned: false, jmolJarPath: ".", jmolJarFile: "JmolApplet0.jar", - jmolReadyFunctionName: "", + jmolReadyFunction: null, script: null }); Jmol._debugAlert = Info.debug; Modified: trunk/Jmol/appletweb/JmolApplet.js =================================================================== --- trunk/Jmol/appletweb/JmolApplet.js 2012-05-09 18:10:04 UTC (rev 17116) +++ trunk/Jmol/appletweb/JmolApplet.js 2012-05-10 22:59:06 UTC (rev 17117) @@ -209,7 +209,7 @@ Jmol._noJavaMsg2 + "</font></td></tr></table>"; } params.loadInline = (Info.inlineModel ? sterilizeInline(Info.inlineModel) : ""); - //params.script = (Info.script ? sterilizeScript(Info.script) : ""); + params.script = (Info.script ? sterilizeScript(Info.script) : ""); var t = Jmol._getWrapper(this, true) + tHeader + writeParams() + visitJava + tFooter + Jmol._getWrapper(this, false) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2012-05-14 22:45:25
|
Revision: 17131 http://jmol.svn.sourceforge.net/jmol/?rev=17131&view=rev Author: hansonr Date: 2012-05-14 22:45:19 +0000 (Mon, 14 May 2012) Log Message: ----------- AJAX queue Modified Paths: -------------- trunk/Jmol/appletweb/JmolCD.js trunk/Jmol/appletweb/JmolCore.js Modified: trunk/Jmol/appletweb/JmolCD.js =================================================================== --- trunk/Jmol/appletweb/JmolCD.js 2012-05-14 22:44:36 UTC (rev 17130) +++ trunk/Jmol/appletweb/JmolCD.js 2012-05-14 22:45:19 UTC (rev 17131) @@ -11,6 +11,8 @@ // // prior to JmolCD.js +// 5/14/2012 5:28:03 PM added script/default model loading for JmolCD version + if(typeof(ChemDoodle)=="undefined") ChemDoodle = null; (function (Jmol) { @@ -64,18 +66,25 @@ this._infoHeader = this._jmolType + ' "' + this._id + '"' this._hasOptions = Info.addSelectionOptions; this._defaultModel = Info.defaultModel; + this._readyScript = (Info.script ? Info.script : ""); var t = Jmol._getWrapper(this, true); if (Jmol._document) { Jmol._documentWrite(t); this.create(id, Info.width, Info.height); this._setDefaults(); + if (this.defaultModel) + this._search(this._defaultModel); + if (this._readyScript) + this._script(this._readyScript); t = ""; } else { t += '<script type="text/javascript">' + id + '.create("'+id+'",'+Info.width+','+Info.height+');' + id + '._setDefaults();' if (Info.defaultModel) - t += id + "._search(" + id + "._defaultModel)"; + t += id + "._search(" + id + "._defaultModel);"; + if (this._readyScript) + t += id + '._script(' + id + '._readyScript);' t += '</script>'; } t += Jmol._getWrapper(this, false); Modified: trunk/Jmol/appletweb/JmolCore.js =================================================================== --- trunk/Jmol/appletweb/JmolCore.js 2012-05-14 22:44:36 UTC (rev 17130) +++ trunk/Jmol/appletweb/JmolCore.js 2012-05-14 22:45:19 UTC (rev 17131) @@ -2,7 +2,7 @@ // see JmolApi.js for public user-interface. All these are private functions -// last revision: 4/24/2012 +// 5/14/2012 5:28:03 PM BH: added AJAX queue for ChemDoodle option with multiple canvases // allows Jmol applets to be created on a page with more flexibility and extendability // possibly using infrastructure of ChemDoodle for multiplatform doodlable structures @@ -54,6 +54,7 @@ _XhtmlElement: null, _XhtmlAppendChild: false, _applets: {}, + _ajaxQueue: [], db: { _databasePrefixes: "$=:", _fileLoadScript: ";if (_loadScript = '' && defaultLoadScript == '' && _filetype == 'Pdb') { select protein or nucleic;cartoons Only;color structure; select * };", @@ -82,6 +83,16 @@ // Jmol core functionality + Jmol._ajax = function(info) { +xxx=info + Jmol._ajaxQueue.push(info) + if (Jmol._ajaxQueue.length == 1) + Jmol._ajaxDone() + } + Jmol._ajaxDone = function() { + var info = Jmol._ajaxQueue.shift(); + info && jQuery.ajax(info); + } Jmol._getGrabberOptions = function(applet, note) { // feel free to adjust this look to anything you want @@ -144,12 +155,12 @@ } Jmol._loadSuccess = function(a, fSuccess) { - Jmol._ajaxActive=!1; + Jmol._ajaxDone(); fSuccess(a); } Jmol._loadError = function(fError){ - Jmol._ajaxActive=!1; + Jmol._ajaxDone(); Jmol.say("Error connecting to server."); null!=fError&&fError() } @@ -198,8 +209,6 @@ Jmol._getInfoFromDatabase = function(applet, database, query){ if (database == "====") { - if (Jmol._checkActive()) - return; var data = Jmol.db._restQueryXml.replace(/QUERY/,query); var info = { dataType: "text", @@ -207,11 +216,11 @@ contentType:"application/x-www-form-urlencoded", url: Jmol.db._restQueryUrl, data: encodeURIComponent(data) + "&req=browser", - success: function(data) {Jmol._ajaxActive=!1;Jmol._extractInfoFromRCSB(applet, database, query, data)}, + success: function(data) {Jmol._ajaxDone();Jmol._extractInfoFromRCSB(applet, database, query, data)}, error: function() {Jmol._loadError(null)}, async: Jmol._asynchronous } - jQuery.ajax(info); + Jmol._ajax(info); return; } Jmol._contactServer( @@ -238,15 +247,6 @@ } } - Jmol._checkActive = function() { - if (Jmol._ajaxActive) { - Jmol.say("Already connecting to the server - please wait for the first request to finish."); - return true; - } - Jmol._ajaxActive=!0; - return false; - } - Jmol._loadFileData = function(applet, fileName, fSuccess, fError){ if (Jmol._isDatabaseCall(fileName)) { Jmol._setQueryTerm(applet, fileName); @@ -258,38 +258,35 @@ return; } } - if (Jmol._checkActive()) - return; - info = { + var info = { dataType: "text", url: fileName, success: function(a) {Jmol._loadSuccess(a, fSuccess)}, error: function() {Jmol._loadError(fError)}, async: Jmol._asynchronous } - var pt = fileName.indexOf("?POST?"); + var pt = fileName.indexOf("?POST?"); if (pt > 0) { - info.url = fileName.substring(0, pt); - info.data = fileName.substring(pt + 6); - info.type = "POST"; + info.url = fileName.substring(0, pt); + info.data = fileName.substring(pt + 6); + info.type = "POST"; info.contentType = "application/x-www-form-urlencoded"; - } - jQuery.ajax(info); + } + Jmol._ajax(info); } Jmol._contactServer = function(data,fSuccess,fError){ - if (!Jmol._checkActive()) - jQuery.ajax({ - dataType: "text", - type: "GET", -// data: data, - url: Jmol._serverUrl + data, - success: function(a) {Jmol._loadSuccess(a, fSuccess)}, - error:function() { Jmol._loadError(fError) }, - async:Jmol._asynchronous - }); + var info = { + dataType: "text", + type: "GET", +// data: data, + url: Jmol._serverUrl + data, + success: function(a) {Jmol._loadSuccess(a, fSuccess)}, + error:function() { Jmol._loadError(fError) }, + async:Jmol._asynchronous + } + Jmol._ajax(info); } - Jmol._setQueryTerm = function(applet, query) { if (!query || !applet._hasOptions) return; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2012-05-31 18:20:41
|
Revision: 17241 http://jmol.svn.sourceforge.net/jmol/?rev=17241&view=rev Author: hansonr Date: 2012-05-31 18:20:34 +0000 (Thu, 31 May 2012) Log Message: ----------- Jmol/JSpecView object code Modified Paths: -------------- trunk/Jmol/appletweb/JmolApi.js trunk/Jmol/appletweb/JmolControls.js trunk/Jmol/appletweb/JmolCore.js trunk/Jmol/appletweb/examples/jsvtest.htm trunk/Jmol/appletweb/examples/simple2.htm Modified: trunk/Jmol/appletweb/JmolApi.js =================================================================== --- trunk/Jmol/appletweb/JmolApi.js 2012-05-31 17:21:35 UTC (rev 17240) +++ trunk/Jmol/appletweb/JmolApi.js 2012-05-31 18:20:34 UTC (rev 17241) @@ -144,7 +144,9 @@ } Jmol.jmolButton = function(appletOrId, script, label, id, title) { - var appId = Jmol._getId(appletOrId); + var appId = Jmol.controls._getIdForControl(appletOrId, script); + if (appId == null) + return ""; var c = Jmol.controls; //_jmolInitCheck(); id != undefined && id != null || (id = "jmolButton" + c._buttonCount); @@ -164,7 +166,12 @@ Jmol.jmolCheckbox = function(appletOrId, scriptWhenChecked, scriptWhenUnchecked, labelHtml, isChecked, id, title) { - var appId = Jmol._getId(appletOrId); + var appId = Jmol.controls.controls._getIdForControl(appletOrId, scriptWhenChecked); + if (appId != null) + appId = Jmol.controls._getIdForControl(appletOrId, scriptWhenUnchecked); + if (appId == null) + return ""; + var c = Jmol.controls; //_jmolInitCheck(); id != undefined && id != null || (id = "jmolCheckbox" + c._checkboxCount); @@ -199,7 +206,9 @@ } Jmol.jmolCommandInput = function(appletOrId, label, size, id, title) { - var appId = Jmol._getId(appletOrId); + var appId = Jmol.controls._getIdForControl(appletOrId, "x"); + if (appId == null) + return ""; var c = Jmol.controls; //_jmolInitCheck(); id != undefined && id != null || (id = "jmolCmd" + c._cmdCount); @@ -218,7 +227,9 @@ } Jmol.jmolLink = function(appletOrId, script, label, id, title) { - var appId = Jmol._getId(appletOrId); + var appId = Jmol.controls._getIdForControl(appletOrId, script); + if (appId == null) + return ""; var c = Jmol.controls; //_jmolInitCheck(); id != undefined && id != null || (id = "jmolLink" + c._linkCount); @@ -235,7 +246,7 @@ } Jmol.jmolMenu = function(appletorId, arrayOfMenuItems, size, id, title) { - var appId = Jmol._getId(appletOrId); + var appId = Jmol.controls._getIdForControl(appletOrId, null); var c = Jmol.controls; //_jmolInitCheck(); id != undefined && id != null || (id = "jmolMenu" + c._menuCount); @@ -264,12 +275,15 @@ } else { script = text = menuItem; } + appId = Jmol.controls._getIdForControl(appletOrId, script); + if (appId == null) + return ""; text == null && (text = script); if (script=="#optgroup") { t += "<optgroup label='" + text + "'>"; - } else if (script=="#optgroupEnd") { + } else if (script=="#optgroupEnd") { t += "</optgroup>"; - } else { + } else { var scriptIndex = c._addScript(appId, script); var selectedText = isSelected ? "' selected='true'>" : "'>"; t += "<option value='" + scriptIndex + selectedText + text + "</option>"; @@ -283,18 +297,18 @@ } Jmol.jmolRadio = function(appletOrId, script, labelHtml, isChecked, separatorHtml, groupName, id, title) { - var appId = Jmol._getId(appletOrId); //_jmolInitCheck(); if (Jmol.controls._radioGroupCount == 0) ++Jmol.controls._radioGroupCount; - var t = Jmol.controls._getRadio(appId, script, labelHtml, isChecked, separatorHtml, groupName, (id ? id : groupName + "_" + Jmol._radioCount), title ? title : 0); + var t = Jmol.controls._getRadio(appletOrId, script, labelHtml, isChecked, separatorHtml, groupName, (id ? id : groupName + "_" + Jmol._radioCount), title ? title : 0); + if (t == null) + return ""; if (Jmol._debugAlert) alert(t); return Jmol._documentWrite(t); } Jmol.jmolRadioGroup = function (appletOrId, arrayOfRadioButtons, separatorHtml, groupName, id, title) { - var appId = Jmol._getId(appletOrId); /* array: [radio1,radio2,radio3...] @@ -319,11 +333,14 @@ separatorHtml = ""; var radio = arrayOfRadioButtons[i]; type = typeof radio; + var s = null; if (type == "object") { - t += c._getRadio(appId, radio[0], radio[1], radio[2], separatorHtml, groupName, (radio.length > 3 ? radio[3]: (id ? id : groupName)+"_"+i), (radio.length > 4 ? radio[4] : 0), title); + t += (s = c._getRadio(appletOrId, radio[0], radio[1], radio[2], separatorHtml, groupName, (radio.length > 3 ? radio[3]: (id ? id : groupName)+"_"+i), (radio.length > 4 ? radio[4] : 0), title)); } else { - t += c._getRadio(appId, radio, null, null, separatorHtml, groupName, (id ? id : groupName)+"_"+i, title); + t += (s = c._getRadio(appletOrId, radio, null, null, separatorHtml, groupName, (id ? id : groupName)+"_"+i, title)); } + if (s == null) + return ""; } t+="</span>" if (Jmol._debugAlert) Modified: trunk/Jmol/appletweb/JmolControls.js =================================================================== --- trunk/Jmol/appletweb/JmolControls.js 2012-05-31 17:21:35 UTC (rev 17240) +++ trunk/Jmol/appletweb/JmolControls.js 2012-05-31 18:20:34 UTC (rev 17241) @@ -41,7 +41,16 @@ return index; } - c._getRadio = function(appId, script, labelHtml, isChecked, separatorHtml, groupName, id, title) { + c._getIdForControl = function(appletOrId, script) { + return (typeof appletOrId == "string" ? appletOrId + : !script || appletOrId._canScript(script) ? appletOrId._id + : null); + } + + c._getRadio = function(appletOrId, script, labelHtml, isChecked, separatorHtml, groupName, id, title) { + var appId = c._getIdForControl(appletOrId, script); + if (appId == null) + return null; ++c._radioCount; groupName != undefined && groupName != null || (groupName = "jmolRadioGroup" + (c._radioGroupCount - 1)); if (!script) Modified: trunk/Jmol/appletweb/JmolCore.js =================================================================== --- trunk/Jmol/appletweb/JmolCore.js 2012-05-31 17:21:35 UTC (rev 17240) +++ trunk/Jmol/appletweb/JmolCore.js 2012-05-31 18:20:34 UTC (rev 17241) @@ -317,10 +317,6 @@ return (d || {}); } - Jmol._getId = function(appletOrId) { - return (typeof appletOrId == "string" ? appletOrId : appletOrId._id); - } - Jmol.featureDetection = (function(document, window) { var features = {}; Modified: trunk/Jmol/appletweb/examples/jsvtest.htm =================================================================== --- trunk/Jmol/appletweb/examples/jsvtest.htm 2012-05-31 17:21:35 UTC (rev 17240) +++ trunk/Jmol/appletweb/examples/jsvtest.htm 2012-05-31 18:20:34 UTC (rev 17241) @@ -117,12 +117,12 @@ <a href='javascript:Jmol.script(jsvApplet,"load t6.jdx")'>t6.jdx</a> <a href='javascript:Jmol.script(jsvApplet,"load t.jdx")'>t.jdx</a> <a href='javascript:Jmol.script(jsvApplet,"load pimentoGCMS2.dx;overlay all")'>pimentoGCMS2</a> -<a href='javascript:Jmol.script(jsvApplet,"load sample78-1hnmr.jdx.gz")'>sample 78 1HNMR</a> -<a href='javascript:Jmol.script(jsvApplet,"load sample78-cosy.jdx")'>sample 78 COSY</a> +<a href='javascript:Jmol.script(jsvApplet,"load sample78-1hnmr.jdx")'>sample 78 1HNMR</a> +<a href='javascript:Jmol.script(jsvApplet,"load sample78-cosy.jdx.gz")'>sample 78 COSY</a> </td></tr> <tr> <td colspan=2> -Click on an H or C atom or select an <a href="javascript:jmolScript('frame next')">IR mode</a>. Once a spectrum is showing, you can click on selected regions as well, and there is a context menu (right-click) as well there. +Click on an H or C atom or select an <a href="javascript:jmolScript('frame next')">IR mode</a>. Once a spectrum is showing, you can click on selected regions as well, and there is a context menu (right-click) as well there. For 2D spectra, click on the spectrum, then use CTRL + to increase the contrast. </td> <td> Modified: trunk/Jmol/appletweb/examples/simple2.htm =================================================================== --- trunk/Jmol/appletweb/examples/simple2.htm 2012-05-31 17:21:35 UTC (rev 17240) +++ trunk/Jmol/appletweb/examples/simple2.htm 2012-05-31 18:20:34 UTC (rev 17241) @@ -1,6 +1,6 @@ <html> <head> -<script type="text/javascript" src="jQuery.min.js" title="required; replaces ChemDoodleWeb-lib;fixed bug in that version"></script> +<script type="text/javascript" src="../jQuery.min.js" title="required; replaces ChemDoodleWeb-lib;fixed bug in that version"></script> <script type="text/javascript" src="gl-matrix-min.js" title="optional; replaces ChemDoodleWeb-lib;required if using ChemDoodle option"></script> <script type="text/javascript" src="mousewheel.js" title="optional; replaces ChemDoodleWeb-lib;required if using ChemDoodle option"></script> <script type="text/javascript" src="ChemDoodleWeb-unpacked.js" title="optional; required only if using ChemDoodle option"></script> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2012-06-04 11:59:26
|
Revision: 17256 http://jmol.svn.sourceforge.net/jmol/?rev=17256&view=rev Author: hansonr Date: 2012-06-04 11:59:15 +0000 (Mon, 04 Jun 2012) Log Message: ----------- JmolCore fix for MSIE Modified Paths: -------------- trunk/Jmol/appletweb/JmolApi.js trunk/Jmol/appletweb/JmolApplet.jar trunk/Jmol/appletweb/JmolApplet.js trunk/Jmol/appletweb/JmolAppletSigned.jar trunk/Jmol/appletweb/JmolCore.js Modified: trunk/Jmol/appletweb/JmolApi.js =================================================================== --- trunk/Jmol/appletweb/JmolApi.js 2012-06-04 09:05:46 UTC (rev 17255) +++ trunk/Jmol/appletweb/JmolApi.js 2012-06-04 11:59:15 UTC (rev 17256) @@ -49,8 +49,10 @@ Jmol._document && model && applet._search(model); } // keyed to both its string id and itself - if (!checkOnly) - Jmol._applets[id] = Jmol._applets[applet] = applet; + if (!checkOnly) { + Jmol._lastAppletID = id; + Jmol._applets[id] = Jmol._applets[applet] = applet; + } return applet; } @@ -166,7 +168,7 @@ Jmol.jmolCheckbox = function(appletOrId, scriptWhenChecked, scriptWhenUnchecked, labelHtml, isChecked, id, title) { - var appId = Jmol.controls.controls._getIdForControl(appletOrId, scriptWhenChecked); + var appId = Jmol.controls._getIdForControl(appletOrId, scriptWhenChecked); if (appId != null) appId = Jmol.controls._getIdForControl(appletOrId, scriptWhenUnchecked); if (appId == null) Modified: trunk/Jmol/appletweb/JmolApplet.jar =================================================================== (Binary files differ) Modified: trunk/Jmol/appletweb/JmolApplet.js =================================================================== --- trunk/Jmol/appletweb/JmolApplet.js 2012-06-04 09:05:46 UTC (rev 17255) +++ trunk/Jmol/appletweb/JmolApplet.js 2012-06-04 11:59:15 UTC (rev 17256) @@ -139,10 +139,13 @@ applet._initialize(Info.jarPath, Info.jarFile); - //size is set to 100% of containers' size - var widthAndHeight = " width='" + "100%" + "' height='" + "100%" + "' "; + // size is set to 100% of containers' size, but only if resizable. + // Note that resizability in MSIE requires: + // <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> + var w = (applet._containerWidth.indexOf("px") >= 0 ? applet._containerWidth : "100%"); + var h = (applet._containerHeight.indexOf("px") >= 0 ? applet._containerHeight : "100%"); + var widthAndHeight = " style=\"width:" + w + ";height:" + h + "\" "; var tHeader, tFooter; - if (Jmol.featureDetection.useIEObject || Jmol.featureDetection.useHtml4Object) { params.archive = applet._jarFile; if (script) @@ -221,11 +224,14 @@ if ((!this._isInfoVisible) == (!tf)) return; this._isInfoVisible = tf; + // 1px does not work for MSIE Jmol._getElement(this, "infotablediv").style.display = (tf ? "block" : "none"); - Jmol._getElement(this, "appletdiv").style.height = (tf ? "1px" : "100%"); - Jmol._getElement(this, "appletdiv").style.width = (tf ? "1px" : "100%"); - if (!tf)//&& Jmol._isMsieRenderBug -- occurring also on Mac systems) - alert("returning to applet..."); + var w = (tf ? "2px" : this._containerWidth.indexOf("px") >= 0 ? this._containerWidth : "100%"); + var h = (tf ? "2px" : this._containerHeight.indexOf("px") >= 0 ? this._containerHeight : "100%"); + Jmol._getElement(this, "appletdiv").style.height = w; + Jmol._getElement(this, "appletdiv").style.width = h; + if (false && !tf)// -- occurring on Mac systems?) + alert("returning to applet..." + w + " " + h); this._show(!tf); if (tf) { Jmol._getElement(this, "infoheaderdiv").innerHTML = this._infoHeader; @@ -264,10 +270,10 @@ } Jmol._Applet.prototype._show = function(tf) { - var w = (tf ? "100%" : "1px"); - var h = (tf ? "100%" : "1px"); - document.getElementById(this._id).style.width = w; - document.getElementById(this._id).style.height = h; + var w = (!tf ? "2px" : this._containerWidth.indexOf("px") >= 0 ? this._containerWidth : "100%"); + var h = (!tf ? "2px" : this._containerHeight.indexOf("px") >= 0 ? this._containerHeight : "100%"); + document.getElementById(this._id).style.width = w; + document.getElementById(this._id).style.height = h; } Jmol._Applet.prototype._script = function(script) { Modified: trunk/Jmol/appletweb/JmolAppletSigned.jar =================================================================== (Binary files differ) Modified: trunk/Jmol/appletweb/JmolCore.js =================================================================== --- trunk/Jmol/appletweb/JmolCore.js 2012-06-04 09:05:46 UTC (rev 17255) +++ trunk/Jmol/appletweb/JmolCore.js 2012-06-04 11:59:15 UTC (rev 17256) @@ -2,6 +2,7 @@ // see JmolApi.js for public user-interface. All these are private functions +// 6/4/2012 BH: corrects problem with MSIE requiring mouse-hover to activate applet // 5/31/2012 BH: added JSpecView interface and api -- see JmolJSV.js // also changed "jmolJarPath" to just "jarPath" // jmolJarFile->jarFile, jmolIsSigned->isSigned, jmolReadyFunction->readyFunction @@ -62,6 +63,7 @@ _XhtmlElement: null, _XhtmlAppendChild: false, _applets: {}, + _lastAppletID: null, _ajaxQueue: [], db: { _databasePrefixes: "$=:", @@ -92,7 +94,6 @@ // Jmol core functionality Jmol._ajax = function(info) { -xxx=info Jmol._ajaxQueue.push(info) if (Jmol._ajaxQueue.length == 1) Jmol._ajaxDone() @@ -117,14 +118,19 @@ Jmol._getWrapper = function(applet, isHeader) { var height = applet._height; var width = applet._width; - if (typeof height !== "string") + if (typeof height !== "string" || height.indexOf("%") < 0) height += "px"; - if (typeof width !== "string") + if (typeof width !== "string" || width.indexOf("%") < 0) width += "px"; - var s = (isHeader ? "<div id=\"ID_appletinfotablediv\" style=\"width:Wpx;height:Hpx\"><div id=\"ID_appletdiv\" style=\"width:100%;height:100%\">" + // for whatever reason, this outer table tag is required for MSIE compatibility + var s = (isHeader ? "<table style=\"width:Wpx;height:Hpx\" cellpadding=\"0\" cellspacing=\"0\"><tr><td><div id=\"ID_appletinfotablediv\" style=\"width:100%;height:100%\"><div id=\"ID_appletdiv\" style=\"width:100%;height:100%\">" : "</div><div id=\"ID_infotablediv\" style=\"width:100%;height:100%;display:none;position:relative\">\ <div style=\"height:20px;width:100%;background:yellow\"><span id=\"ID_infoheaderdiv\"></span><span style=\"position:absolute;width:10px;right:10px\"><a href=\"javascript:Jmol.showInfo(ID,false)\">[x]</a></span></div>\ - <div id=\"ID_infodiv\" style=\"position:absolute;top:20px;bottom:0px;width:100%;overflow-y:scroll\"></div></div></div>"); + <div id=\"ID_infodiv\" style=\"position:absolute;top:20px;bottom:0px;width:100%;height:95%;overflow-y:scroll\"></div></div></div></td></tr></table>"); + if (width.indexOf("px") >= 0) + s = s.replace(/width:100%/g, "width:" + width); + if (height.indexOf("px") >= 0) + s = s.replace(/height:100%/g, "height:" + height); return s.replace(/Hpx/g, height).replace(/Wpx/g, width).replace(/ID/g, applet._id); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2012-06-10 21:06:22
|
Revision: 17277 http://jmol.svn.sourceforge.net/jmol/?rev=17277&view=rev Author: hansonr Date: 2012-06-10 21:06:16 +0000 (Sun, 10 Jun 2012) Log Message: ----------- image database search info working Modified Paths: -------------- trunk/Jmol/appletweb/JmolApplet.js trunk/Jmol/appletweb/JmolCD.js trunk/Jmol/appletweb/JmolCore.js trunk/Jmol/appletweb/JmolJSV.js Modified: trunk/Jmol/appletweb/JmolApplet.js =================================================================== --- trunk/Jmol/appletweb/JmolApplet.js 2012-06-10 19:59:57 UTC (rev 17276) +++ trunk/Jmol/appletweb/JmolApplet.js 2012-06-10 21:06:16 UTC (rev 17277) @@ -31,14 +31,16 @@ this._id = id; this._width = Info.width; this._height = Info.height; - this._isSigned = Info.isSigned; - this._dataMultiplier=1; - this._hasOptions = Info.addSelectionOptions; + this._containerWidth = this._width + ((this._width==parseFloat(this._width))? "px":""); + this._containerHeight = this._height + ((this._height==parseFloat(this._height))? "px":""); this._info = ""; this._infoHeader = this._jmolType + ' "' + this._id + '"' + this._hasOptions = Info.addSelectionOptions; this._defaultModel = Info.defaultModel; + this._readyScript = (Info.script ? Info.script : ""); + this._isSigned = Info.isSigned; + this._dataMultiplier=1; this._readyFunction = Info.readyFunction; - this._readyScript = (Info.script ? Info.script : ""); this._ready = false; this._applet = null; this._jarFile = Info.jarFile || (Info.isSigned ? "JmolAppletSigned0.jar" : "JmolApplet0.jar"); @@ -46,8 +48,6 @@ this._memoryLimit = Info.memoryLimit || 512; this._canScript = function(script) {return true;}; this._savedOrientations = []; - this._containerWidth = this._width + ((this._width==parseFloat(this._width))? "px":""); - this._containerHeight = this._height + ((this._height==parseFloat(this._height))? "px":""); this._syncKeyword = "Select:"; /* @@ -254,8 +254,9 @@ if (database == "=" && query.length == 3) query = "=" + query; // this is a ligand var dm = database + query; - if (!query || dm.indexOf("?") < 0 && dm == this._thisJmolModel) + if (!query || dm.indexOf("?") < 0 && dm == this._thisJmolModel) { return; + } this._thisJmolModel = dm; if (database == "$" || database == ":") this._jmolFileType = "MOL"; @@ -496,12 +497,16 @@ this._jmolType = "image"; if (checkOnly) return this; - Jmol._targetId = this._id = id; + this._id = id; this._width = Info.width; this._height = Info.height; + this._info = ""; + this._infoHeader = this._jmolType + ' "' + this._id + '"' this._hasOptions = Info.addSelectionOptions; - this._info = ""; - this._infoHeader = this._jmolType + ' "' + id + '"'; + this._defaultModel = Info.defaultModel; + this._readyScript = (Info.script ? Info.script : ""); + this._containerWidth = this._width + ((this._width==parseFloat(this._width))? "px":""); + this._containerHeight = this._height + ((this._height==parseFloat(this._height))? "px":""); var t = Jmol._getWrapper(this, true) + '<img id="'+id+'_image" width="' + Info.width + '" height="' + Info.height + '" src=""/>' + Jmol._getWrapper(this, false) @@ -577,8 +582,10 @@ } Jmol._Image.prototype._searchDatabase = function(query, database, script){ - if (query.indexOf("?") == query.length - 1) + if (query.indexOf("?") == query.length - 1) { + Jmol._getInfoFromDatabase(this, database, query.split("?")[0]); return; + } this._showInfo(false); script || (script = Jmol._getScriptForDatabase(database)); var src = Jmol._serverUrl Modified: trunk/Jmol/appletweb/JmolCD.js =================================================================== --- trunk/Jmol/appletweb/JmolCD.js 2012-06-10 19:59:57 UTC (rev 17276) +++ trunk/Jmol/appletweb/JmolCD.js 2012-06-10 21:06:16 UTC (rev 17277) @@ -59,7 +59,7 @@ Jmol._setCommonMethods(proto); proto._create = function(id, Info, caption) { - Jmol._targetId = this._id = id; + this._id = id; this._width = Info.width; this._height = Info.height; this._info = ""; @@ -67,6 +67,8 @@ this._hasOptions = Info.addSelectionOptions; this._defaultModel = Info.defaultModel; this._readyScript = (Info.script ? Info.script : ""); + this._containerWidth = this._width + ((this._width==parseFloat(this._width))? "px":""); + this._containerHeight = this._height + ((this._height==parseFloat(this._height))? "px":""); var t = Jmol._getWrapper(this, true); if (Jmol._document) { Jmol._documentWrite(t); Modified: trunk/Jmol/appletweb/JmolCore.js =================================================================== --- trunk/Jmol/appletweb/JmolCore.js 2012-06-10 19:59:57 UTC (rev 17276) +++ trunk/Jmol/appletweb/JmolCore.js 2012-06-10 21:06:16 UTC (rev 17277) @@ -58,8 +58,6 @@ _asynchronous: true, _document: document, _debugAlert: false, - _targetId: "jmolApplet0", - _target: null, _isMsieRenderBug: (navigator.userAgent.toLowerCase().indexOf("msie") >= 0), _isXHTML: false, _XhtmlElement: null, @@ -247,6 +245,7 @@ } Jmol._extractInfoFromRCSB = function(applet, database, query, output) { + alert(output) var n = output.length/5; if (n == 0) return; @@ -552,7 +551,7 @@ setTimeout(s, 50); } - Jmol._mySyncCallback = function (app,msg) { + Jmol._mySyncCallback = function(app,msg) { if (!Jmol._syncReady || !Jmol._isJmolJSVSync) return 1; // continue processing and ignore me for (var i = 0; i < Jmol._syncedApplets.length; i++) { @@ -563,5 +562,4 @@ return 0 // prevents further Jmol sync processing } - })(Jmol); \ No newline at end of file Modified: trunk/Jmol/appletweb/JmolJSV.js =================================================================== --- trunk/Jmol/appletweb/JmolJSV.js 2012-06-10 19:59:57 UTC (rev 17276) +++ trunk/Jmol/appletweb/JmolJSV.js 2012-06-10 21:06:16 UTC (rev 17277) @@ -50,7 +50,7 @@ Jmol._JSVApplet = function(id, Info, caption){ this._jmolType = "Jmol._JSVApplet" + (Info.isSigned ? " (signed)" : ""); - Jmol._targetId = this._id = id; + this._id = id; this._width = Info.width; this._height = Info.height; this._isSigned = Info.isSigned; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |