--- loncom/html/adm/jmol/Jmol.js 2007/10/11 00:42:00 1.3
+++ loncom/html/adm/jmol/Jmol.js 2014/08/22 17:57:54 1.4
@@ -1,7 +1,15 @@
+/* Jmol 12.0 script library Jmol.js 5/20/2013 7:34:08 AM Bob Hanson
-/* Jmol 11.0 script library Jmol.js (aka Jmol-11.js) 1:34 AM 3/19/2007
- checkbox heirarchy -- see http://www.stolaf.edu/academics/jmol/docs/examples-11/check.htm
+NOTE: THIS LIBRARY IS DEPRECATED STARTING WITH Jmol 13.0.
+ IT STILL WORKS (AND ALWAYS WILL, PROBABLY).
+ PLEASE USE the set JmolCore.js/JmolApplet.js/JmolControls.js/JmolApi.js
+ WITH OPTIONAL JmolCD.js (ChemDoodle Canvas and Canvas2D options) and JmolJSV.js (JSpecView)
+
+ SEE http://chemapps.stolaf.edu/jmol/files/JmolCore.js for details
+ SEE http://chemapps.stolaf.edu/jmol/examples-12/simple2.htm for an example
+
+ checkbox heirarchy -- see http://chemapps.stolaf.edu/jmol/docs/examples-11/check.htm
based on:
*
@@ -30,8 +38,10 @@
try{if(typeof(_jmol)!="undefined")exit()
// place "?NOAPPLET" on your command line to check applet control action with a textarea
+// place "?JMOLJAR=xxxxx" to use a specific jar file
// bob hanson -- jmolResize(w,h) -- resizes absolutely or by percent (w or h 0.5 means 50%)
+// angel herraez -- update of jmolResize(w,h,targetSuffix) so it is not tied to first applet
// bob hanson -- jmolEvaluate -- evaluates molecular math 8:37 AM 2/23/2007
// bob hanson -- jmolScriptMessage -- returns all "scriptStatus" messages 8:37 AM 2/23/2007
// bob hanson -- jmolScriptEcho -- returns all "scriptEcho" messages 8:37 AM 2/23/2007
@@ -45,21 +55,65 @@ try{if(typeof(_jmol)!="undefined")exit()
// bob hanson -- fix for iframes not available for finding applet
// bob hanson -- added applet fake ?NOAPPLET URL flag
// bob hanson -- added jmolSetCallback(calbackName, funcName) 3:32 PM 6/13/2006
-// used PRIOR to jmolApplet() or jmolAppletInline()
+// used PRIOR to jmolApplet() or jmolAppletInline()
// added 4th array element in jmolRadioGroup -- title
// added and id around link, checkbox, radio, menu
// fixing AJAX loads for MSIE/Opera-Mozilla incompatibility
// -- renamed Jmol-11.js from Jmol-new.js; JmolApplet.jar from JmolAppletProto.jar
-// renamed Jmol.js for Jmol 11 distribution
+// renamed Jmol.js for Jmol 11 distribution
// -- modified jmolRestoreOrientation() to be immediate, no 1-second delay
// bob hanson -- jmolScriptWait always returns a string -- 11:23 AM 9/16/2006
// bh -- jmolCommandInput()
// bh -- jmolSetTranslation(TF) -- forces translation even if there might be message callback issues
// bh -- minor fixes suggested by Angel
-
+// bh -- adds jmolSetSyncId() and jmolGetSyncId()
+// bh 3/2008 -- adds jmolAppendInlineScript() and jmolAppendInlineArray()
+// bh 3/2008 -- fixes IE7 bug in relation to jmolLoadInlineArray()
+// bh 6/2008 -- adds jmolSetAppletWindow()
+// Angel H. 6/2008 -- added html ";
if (_jmol.debugAlert)
alert(t);
return _jmolDocumentWrite(t);
@@ -151,8 +210,7 @@ function jmolButton(script, label, id, t
function jmolCheckbox(scriptWhenChecked, scriptWhenUnchecked,
labelHtml, isChecked, id, title) {
_jmolInitCheck();
- if (id == undefined || id == null)
- id = "jmolCheckbox" + _jmol.checkboxCount;
+ id != undefined && id != null || (id = "jmolCheckbox" + _jmol.checkboxCount);
++_jmol.checkboxCount;
if (scriptWhenChecked == undefined || scriptWhenChecked == null ||
scriptWhenUnchecked == undefined || scriptWhenUnchecked == null) {
@@ -166,18 +224,18 @@ function jmolCheckbox(scriptWhenChecked,
var indexChecked = _jmolAddScript(scriptWhenChecked);
var indexUnchecked = _jmolAddScript(scriptWhenUnchecked);
var eospan = ""
- var t = ""
+ ");return true' onmouseout='_jmolMouseOut()' " +
+ (isChecked ? "checked='true' " : "")+ _jmol.checkboxCssText + " />"
if (labelHtml.toLowerCase().indexOf("
")>=0) {
- t += eospan
- eospan = "";
+ t += eospan
+ eospan = "";
}
- t += labelHtml +eospan;
+ t += "" +eospan;
if (_jmol.debugAlert)
alert(t);
return _jmolDocumentWrite(t);
@@ -201,12 +259,10 @@ function jmolRadioGroup(arrayOfRadioButt
alert("invalid arrayOfRadioButtons");
return;
}
- if (separatorHtml == undefined || separatorHtml == null)
- separatorHtml = " ";
+ separatorHtml != undefined && separatorHtml != null || (separatorHtml = " ");
var len = arrayOfRadioButtons.length;
jmolStartNewRadioGroup();
- if (!groupName)
- groupName = "jmolRadioGroup" + (_jmol.radioGroupCount - 1);
+ groupName || (groupName = "jmolRadioGroup" + (_jmol.radioGroupCount - 1));
var t = "";
for (var i = 0; i < len; ++i) {
if (i == len - 1)
@@ -238,15 +294,13 @@ function jmolRadio(script, labelHtml, is
function jmolLink(script, label, id, title) {
_jmolInitCheck();
- if (id == undefined || id == null)
- id = "jmolLink" + _jmol.linkCount;
- if (label == undefined || label == null)
- label = script.substring(0, 32);
+ id != undefined && id != null || (id = "jmolLink" + _jmol.linkCount);
+ label != undefined && label != null || (label = script.substring(0, 32));
++_jmol.linkCount;
var scriptIndex = _jmolAddScript(script);
- var t = "" + label + "";
if (_jmol.debugAlert)
alert(t);
@@ -255,24 +309,37 @@ function jmolLink(script, label, id, tit
function jmolCommandInput(label, size, id, title) {
_jmolInitCheck();
- if (id == undefined || id == null)
- id = "jmolCmd" + _jmol.cmdCount;
- if (label == undefined || label == null)
- label = "Execute";
- if (size == undefined || isNaN(size))
- size = 60;
+ id != undefined && id != null || (id = "jmolCmd" + _jmol.cmdCount);
+ label != undefined && label != null || (label = "Execute");
+ size != undefined && !isNaN(size) || (size = 60);
++_jmol.cmdCount;
- var t = "";
+ var t = "";
if (_jmol.debugAlert)
alert(t);
return _jmolDocumentWrite(t);
}
+function _jmolCommandKeyPress(e, id, target) {
+ var keycode = (window.event ? window.event.keyCode : e ? e.which : 0);
+ if (keycode == 13) {
+ var inputBox = document.getElementById(id)
+ _jmolScriptExecute(inputBox, inputBox.value, target)
+ }
+}
+
+function _jmolScriptExecute(element,script,target) {
+ if (typeof(script) == "object")
+ script[0](element, script, target)
+ else if (typeof(script) == "function")
+ script(target);
+ else
+ jmolScript(script, target)
+}
+
function jmolMenu(arrayOfMenuItems, size, id, title) {
_jmolInitCheck();
- if (id == undefined || id == null)
- id = "jmolMenu" + _jmol.menuCount;
+ id != undefined && id != null || (id = "jmolMenu" + _jmol.menuCount);
++_jmol.menuCount;
var type = typeof arrayOfMenuItems;
if (type != null && type == "object" && arrayOfMenuItems.length) {
@@ -282,7 +349,7 @@ function jmolMenu(arrayOfMenuItems, size
else if (size < 0)
size = len;
var sizeText = size ? " size='" + size + "' " : "";
- var t = ""
- var t = ""
+ var t = ""
if (labelHtml.toLowerCase().indexOf("
"
+ return _jmolDocumentWrite(s)
+ }
+
+ _jmolFindApplet = function(){return jmolApplet0}
+
+ jmolApplet0 = {
+ script: function(script){document.getElementById("fakeApplet").value="\njmolScript:\n"+script}
+ ,scriptWait: function(script){document.getElementById("fakeApplet").value="\njmolScriptWait:\n"+script}
+ ,loadInline: function(data,script){document.getElementById("fakeApplet").value="\njmolLoadInline data:\n"+data+"\n\nscript:\n"+script}
+ }
}
///////////////////////////////////////////
-//new 9:49 AM 3/6/2007:
-
-//both w and h are optional.
-//if either is between 0 and 1, then it is taken as percent/100.
-//if either is greater than 1, then it is taken as a size.
-function jmolResize(w,h) {
+ // This should no longer be needed, jmolResizeApplet() is better; kept for backwards compatibility
+ /*
+ Resizes absolutely (pixels) or by percent of window (w or h 0.5 means 50%).
+ targetSuffix is optional and defaults to zero (first applet in page).
+ Both w and h are optional, but needed if you want to use targetSuffix.
+ h defaults to w
+ w defaults to 100% of window
+ If either w or h is between 0 and 1, then it is taken as percent/100.
+ If either w or h is greater than 1, then it is taken as a size (pixels).
+ */
+function jmolResize(w,h,targetSuffix) {
_jmol.alerted = true;
- var percentW = (!w ? 100 : w <= 1 && w > 0 ? w * 100 : 0)
- var percentH = (!h ? percentW : h <= 1 && h > 0 ? h * 100 : 0)
+ var percentW = (!w ? 100 : w <= 1 && w > 0 ? w * 100 : 0);
+ var percentH = (!h ? percentW : h <= 1 && h > 0 ? h * 100 : 0);
if (_jmol.browser=="msie") {
var width=document.body.clientWidth;
var height=document.body.clientHeight;
@@ -1422,10 +1625,50 @@ function jmolResize(w,h) {
var width=window.innerWidth - netscapeScrollWidth;
var height=window.innerHeight-netscapeScrollWidth;
}
- var applet = _jmolGetApplet(0);
+ var applet = _jmolGetApplet(targetSuffix);
+ if(!applet)return;
+ applet.style.width = (percentW ? width * percentW/100 : w)+"px";
+ applet.style.height = (percentH ? height * percentH/100 : (h ? h : w))+"px";
+ //title=width + " " + height + " " + (new Date());
+}
+
+// 13 Jun 09 -- makes jmolResize() obsolete (kept for backwards compatibility)
+function jmolResizeApplet(size,targetSuffix) {
+ // 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.
+ _jmol.alerted = true;
+ var applet = _jmolGetApplet(targetSuffix);
if(!applet)return;
- applet.style.width = (percentW ? width * percentW/100 : w)+"px"
- applet.style.height = (percentH ? height * percentH/100 : h)+"px"
- title=width + " " + height + " " + (new Date())
+ var sz = _jmolGetAppletSize(size, "px");
+ sz[0] && (applet.style.width = sz[0]);
+ sz[1] && (applet.style.height = sz[1]);
+}
+
+function _jmolGetAppletSize(size, units) {
+ /* Accepts single number or 2-value array, 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]; height = size[1];
+ } else {
+ width = height = size;
+ }
+ return [_jmolFixDim(width, units), _jmolFixDim(height, units)];
+}
+
+function _jmolFixDim(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 : ""));
}
+
+