Jmol JavaScript Object/JME
Contents
Integration of JSME into JSmol
JSME, the JavaScript Molecule Editor by Peter Ertl, evolved from the former JME applet. It provides tools for the user to draw a molecular structure in 2D. The JSmol object library includes the capability to pass information back and forth between JSME and JSmol in a seamless manner. The "information panel" that JSmol library implements can be set up to also hold the JSME object, allowing tight integration. Alternatively, JSME and JSmol objects can be set side-by-side on a web page, and communication between both objects can be handled by the page developer.
Creating and inserting JSME
(Note that although the syntax is reminiscent of the former Java applets, no Java is currently involved here)
In preparation, your web page must call 3 files (usually in the head
section):
- JSmol.min.js
- JSmolJME.js in the js folder of the JSmol package
- jsme.nocache.js in the jsme folder of the JSmol package (this is a copy of the original JSME package)
The name of the unique Jmol
object is literal, cannot be changed.
On the contrary, the myJME
, myJmol
, JmeInfo
, JmolInfo
names used in these examples are user-declared variables and may be different.
There are two ways of inserting JSME using the JSmol library: independent and embedded; you can see a demonstration of both at the main Jmol website.
Independent JSME
The JSME panel takes a space of its own in the page.
To create and insert the JSME object, use:
Jmol.getJMEApplet("myJME", JmeInfo);
Where the JmeInfo
variable must include at least:
- height:
350
- width:
300
And the JSME panel will be inserted at the point of execution of this JavaScript code. If you need to include this code elsewhere, you can specify a target div where the JSME panel will be inserted, by adding this parameter:
- divid: "my_target_div"
JSME embedded in JSmol
In this mode, the JSME panel shares the space in the page with a JSmol panel; only one is displayed at a time and their contents (2D vs. 3D) are automatically interconverted to match.
To create and insert the JSmol and JSME objects, use:
Jmol.getApplet("myJmol", JmolInfo); Jmol.getJMEApplet("myJME", JmeInfo, myJmol);
The 3rd argument is a pointer to the associated JSmol object, that will contain this JSME panel as a 2D input option inside its Info panel. User interface controls (like buttons or links) may be implemented in the page for switching between 2D (JSME) and 3D (JSmol) displays.
In this case, the JmeInfo
variable must include at least:
- height:
350
- width:
300
- visible:
true
for the JSME panel to be displayed initially (JSmol panel hidden)
JSME options
Other parameters that may be included in the JmeInfo
variable are:
- options: "comma-delimited list"
depict
- the canvas will appear without editing buttons, i.e. used for structure display onlyzoom
- allow zooming of the molecular drawingrbutton
- display the R buttonhydrogens
- display hydrogensquery
- allow query featuresautoez
- automatic generation of SMILES with E,Z stereochemistrycanonize
- SMILES canonicalization and detection of aromaticitystereo
- stereochemistry not considered when creating SMILESuseopenchemlib
- use the OpenChemLib library for SMILES conversion, 2D coordinates computation and SVG exportexportSVG
- enable the menu item for SVG export- ...and more, all documented at Peter Ertl's site
Most options are negated by prepending with "no", e.g. nozoom
; a few have specific keywords for the opposite choice.
JSME-specific methods
All the following functions must be applied to the unique Jmol
object (this name is literal, cannot be changed).
The myJME
name used in these examples is, in contrast, a user-declared variable and may be different.
For retrieving data from JSME:
Jmol.jmeGetFile(myJME, true) // molecular data in the JME format Jmol.jmeGetFile(myJME, false) // molecular data in the MOL format Jmol.jmeSmiles(myJME, withStereoChemistry) // molecular data in the SMILES format (with or without stereo information)
For loading structures into JSME:
Jmol.jmeReadMolecule(myJME, jmeOrMolData)
sends data as a string that will be interpreted either in JME or MOL formats, depending on the presence of newline characters in that string.
Note: Feeding SMILES data into JSME is possible, but a dedicated method is not currently implemented in the JSmol library. You can achieve it using a call to an internal function:
myJME._applet.readGenericMolecularInput( smilesData );
For other tasks:
Jmol.jmeOptions(myJME, options) // to set options after the object has been created Jmol.jmeReset(myJME)