/*
Jmol2.js (JSmol version)
author: Bob Hanson hansonr@stolaf.edu 5/24/2013 12:06:25 PM
Script replacement for legacy Jmol.js that uses JSmol instead.
Can be used to turn most legacy Jmol.js-based sites to JSmol.
BH 1/16/2014 10:33:46 PM adding serverURL indication, more notes
BH 1/13/2014 11:14:12 AM incorrect default for missing jmolInitialize() (should be ".")
BH 1/8/2014 5:56:15 AM simplified instructions; removed option for self.Info
BH 11/12/2013 6:34:22 AM adds jmolAppletInline()
BH 9/23/2013 10:07:16 PM adds set of loadInline functions
BH 9/19/2013 7:09:41 AM fixed jmolSetTarget() to accept "0" as a suffix; use of undefined --> null
Summary:
You should not have to change any of your HTML pages.
You are going to replace Jmol.js, wherever that is, with this file.
You are going to replace all your JAR file with the ones in this distribution.
You are going to add about 1000 files in the jsmol/j2s directory to your website.
Don't worry; only a few will be called. But you won't know which ones.
You will be able to switch from HTML5 to JAVA using ?_USE=SIGNED in the URL
Procedure:
1a) If you want to use HTML5, copy all jsmol/j2s/* files into a j2s subdirectory
in the directory that contains Jmol.js and your old Jmol jar files.
1b) If you are not using HTML5, change the "use" parameter below from "HTML5" to "JAVA" and save this file.
Copy all the jsmol/java/* files into the directory containing your current JAR files. This adds
four JNLP files as well and will replace all your JAR files.
2) Rename your current Jmol.js file Jmol_old.js in case you want to undo this.
3) Concatenate Jmol.min.js if you are not using jQuery (or Jmol.min.nojq.js if you are)
with this file to form a new file (Jmol.min.js first, then Jmol2.js) and replace your
current Jmol.js with it. Note that if you are using your own version of jQuery, it
must be version 1.9 or higher, and note that 2.0 or higher will not work with MSIE
used locally but accessing remote resources. See http://bugs.jquery.com/ticket/14876
4) Try your page and see how it goes. You may still have some problems, because not all of the
methods in the original Jmol.js are included here. Let me know if that's the case.
If you wish to change the directories your j2s or JAR files and override the default settings
(old JAR file location; j2s directory in the directory of those JAR files) and thus override
your current settings in your HTML files, then you can to that three ways:
a) You can change the parameters below to override what your pages already use by uncommenting
one or the other of the jarPath and j2sPath definitions. This will override jmolInitialize
in ALL your HTML files.
b) You can change your jmolInitialization call in an individual HTML file. This sets both
the JAR path and the j2s path (as [jarPath]/j2s) together.
c) You can add lines to an individual HTML file along the lines of:
Jmol.Info.jarPath = "../../Jmol"
Jmol.Info.j2sPath = "../../JSmol"
or whatever. This will override jmolInitialize in that specific HTML file only.
Note that:
-- FireFox works great. You will be able to read binary files from your local machine
-- Chrome can only read local files if started with the --allow-file-access-from-files flag
and even then the files must be ASCII, not binary.
-- MSIE and Safari cannot work with local pages
*/
/* $RCSfile: Jmol.js,v $
* $Author: migueljmol $
* $Date: 2004/12/11 22:22:10 $
* $Revision: 1.28 $
*
* Copyright (C) 2004 The Jmol Development Team
*
* Contact: jmol-developers@lists.sf.net
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
* 02111-1307 USA.
*/
// for documentation see www.jmol.org/jslibrary
var undefined; // for IE 5 ... wherein undefined is undefined
////////////////////////////////////////////////////////////////
// Basic Scripting infrastruture
////////////////////////////////////////////////////////////////
function jmolInitialize(codebaseDirectory) {
if (_jmol.initialized) {
alert("jmolInitialize() should only be called *ONCE* within a page");
return;
}
if (! codebaseDirectory) {
alert("codebaseDirectory is a required parameter to jmolInitialize");
codebaseDirectory = ".";
}
if (codebaseDirectory.indexOf("http://") == 0 ||
codebaseDirectory.indexOf("https://") == 0)
alert("codebaseDirectory should be directory relative,\n" +
"not be an absolute URL : " + codebaseDirectory);
else if (codebaseDirectory.charAt(0) == '/')
alert("codebaseDirectory should be directory relative,\n" +
"not relative to the root of the web server : " + codebaseDirectory);
_jmolSetCodebase(codebaseDirectory);
_jmolOnloadResetForms();
_jmol.initialized = true;
}
function jmolSetAppletColor(boxbgcolor, boxfgcolor, progresscolor) {
_jmolInitCheck();
_jmol.boxbgcolor = boxbgcolor;
if (boxfgcolor)
_jmol.boxfgcolor = boxfgcolor
else if (boxbgcolor == "white" || boxbgcolor == "#FFFFFF")
_jmol.boxfgcolor = "black";
else
_jmol.boxfgcolor = "white";
if (progresscolor)
_jmol.progresscolor = progresscolor;
if (_jmol.debugAlert)
alert(" boxbgcolor=" + _jmol.boxbgcolor +
" boxfgcolor=" + _jmol.boxfgcolor +
" progresscolor=" + _jmol.progresscolor);
}
function jmolApplet(size, script, nameSuffix) {
_jmolInitCheck();
_jmolApplet(size, null, script, nameSuffix);
}
////////////////////////////////////////////////////////////////
// Basic controls
////////////////////////////////////////////////////////////////
function jmolButton(script, label, id) {
_jmolInitCheck();
var scriptIndex = _jmolAddScript(script);
if (label == undefined || label == null)
label = script.substring(0, 32);
if (id == undefined || id == null)
id = "jmolButton" + _jmol.buttonCount;
++_jmol.buttonCount;
var t = "";
if (_jmol.debugAlert)
alert(t);
document.write(t);
}
function jmolCheckbox(scriptWhenChecked, scriptWhenUnchecked,
labelHtml, isChecked, id) {
_jmolInitCheck();
if (id == undefined || id == null)
id = "jmolCheckbox" + _jmol.checkboxCount;
++_jmol.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 = _jmolAddScript(scriptWhenChecked);
var indexUnchecked = _jmolAddScript(scriptWhenUnchecked);
var t = "" +
labelHtml;
if (_jmol.debugAlert)
alert(t);
document.write(t);
}
function jmolRadioGroup(arrayOfRadioButtons, separatorHtml, groupName) {
_jmolInitCheck();
var type = typeof arrayOfRadioButtons;
if (type != "object" || type == null || ! arrayOfRadioButtons.length) {
alert("invalid arrayOfRadioButtons");
return;
}
if (separatorHtml == undefined || separatorHtml == null)
separatorHtml = " ";
var length = arrayOfRadioButtons.length;
var t = "";
jmolStartNewRadioGroup();
for (var i = 0; i < length; ++i) {
var radio = arrayOfRadioButtons[i];
type = typeof radio;
if (type == "object") {
t += _jmolRadio(radio[0], radio[1], radio[2], separatorHtml, groupName);
} else {
t += _jmolRadio(radio, null, null, separatorHtml, groupName);
}
}
if (_jmol.debugAlert)
alert(t);
document.write(t);
}
function jmolLink(script, text, id) {
_jmolInitCheck();
if (id == undefined || id == null)
id = "jmolLink" + _jmol.linkCount;
++_jmol.linkCount;
var scriptIndex = _jmolAddScript(script);
var t = "" + text + "";
if (_jmol.debugAlert)
alert(t);
document.write(t);
}
function jmolMenu(arrayOfMenuItems, size, id) {
_jmolInitCheck();
if (id == undefined || id == null)
id = "jmolMenu" + _jmol.menuCount;
++_jmol.menuCount;
var type = typeof arrayOfMenuItems;
if (type != null && type == "object" && arrayOfMenuItems.length) {
var length = arrayOfMenuItems.length;
if (typeof size != "number" || size == 1)
size = null;
else if (size < 0)
size = length;
var sizeText = size ? " size='" + size + "' " : "";
var t = "