modules/web/javascript/pymol.js (1,067 lines of code) (raw):
// This file contains source code for the PyMOL computer program
// Copyright (c) Schrodinger, LLC.
var pymol_fn_counter = 0;
function PyMOL(host, port, bufferMode, prefix) {
this.Path = "/apply?_json="; // URL path to pass json args to pymol
// now using _underscore_names for internal attributes & methods
this._cmd_buffer = [];
// do we throw up visible alerts when exceptions occur?
this._alerts = true;
this._host = host;
this._port = port;
this._parseBufferMode = function (bufferMode) {
if ((bufferMode != undefined) && (bufferMode == 'on')) {
return 'on';
} else {
return 'off';
}
}
this._bufferMode = this._parseBufferMode(bufferMode);
if(prefix == undefined) {
this._prefix = 'pymol'; // default remote object name
} else {
this._prefix = prefix;
}
try {
xmlhttp = new XMLHttpRequest();
} catch(e) {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
this.setBufferMode = function(bufferMode) {
this._bufferMode = this._parseBufferMode(bufferMode);
if (this._bufferMode == 'off') {
this.flush();
}
}
this.flush = function(callback) {
if (this._cmd_buffer.length > 0) {
var result = this._json('[' + this._cmd_buffer.join(',') + ']', callback);
this._cmd_buffer.length = 0;
return result;
}
}
this.getBufferJSON = function() {
return ('[' + this._cmd_buffer.join(',') + ']');
}
this.getBufferURL = function() {
return (this.Path + '[' + this._cmd_buffer.join(',') + ']');
}
this._send_ajax = function(pypath, callback) {
if (host == null) {
myurl = pypath;
} else {
myurl = "http://" + host + ":" + port + pypath;
}
if(myurl.length>2000) { /* some broswers can't handle long URLs */
var part = myurl.split("?",2);
short_url = part[0];
long_param = part[1];
if (callback) {
xmlhttp.open("POST", short_url, true);
xmlhttp.onreadystatechange = callback;
} else {
xmlhttp.open("POST", short_url, false);
}
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.setRequestHeader("Content-length", long_param.length);
xmlhttp.setRequestHeader('Accept', 'text/json');
xmlhttp.send(long_param);
} else {
if (callback) {
xmlhttp.open("GET", myurl, true);
xmlhttp.onreadystatechange = callback;
} else {
xmlhttp.open("GET", myurl, false);
}
xmlhttp.setRequestHeader('Accept', 'text/json');
xmlhttp.send(null);
}
if (callback) {
} else {
if (xmlhttp.status == 500) {
alert("PyMOL Exception:\n" + eval('(' + xmlhttp.responseText + ')').join("\n"));
return null;
}
return eval('(' + xmlhttp.responseText + ')');
}
return false;
}
this._send_cross_script = function(pypath, callback) {
if (host == null) {
myurl = pypath;
} else {
myurl = "http://" + host + ":" + port + pypath;
}
if (callback == undefined) {
//myurl += "&_callback=alert"
myurl += "&_callback=void"
} else {
// IE does not have callback.name, so we invent a unique one
// and store it in the "global" namespace, window. In this way,
// the javascript callback from our cross-domain script hack
// contains a javascript function name known to this page/window.
if (callback.name == undefined) {
callback.name = '_fn' + pymol_fn_counter++;
window[ callback.name ] = callback;
}
myurl += "&_callback=" + callback.name;
}
var head = document.getElementsByTagName("head")[0];
var script = document.createElement("script");
script.src = myurl;
head.appendChild(script);
return true;
}
this._send = function(pypath, callback) {
if ( (host == null) ||
((host == document.domain) && (port == document.location.port)) ) {
return this._send_ajax(pypath, callback);
} else {
return this._send_cross_script(pypath, callback);
}
}
this._handle_response = function(status, text) {
response = JSON.parse(text);
if(status == 200) { // normal result
return response;
} else { // some kind of error condition
if(this._alerts) {
alert(response.join("\n"));
}
return;
}
}
this._result = function(e) {
if ((host == document.domain) || (host == null)) {
if (typeof e == "object") {
// asynchronous ajax was used
if (xmlhttp.readyState == 4) {
return this._handle_response(xmlhttp.status, xmlhttp.responseText);
return;
}
}
// "synchronous" (no-callback) ajax was used
if(xmlhttp.responseText) {
return this._handle_response(xmlhttp.status, xmlhttp.responseText);
} else {
return;
}
}
// e was provided by cross-script callback, so just return it
return e;
}
// for private use
this._json = function(jcmd,callback) {
return this._send(this.Path+jcmd,callback);
}
// for public use; args switched to match style of pymol.cmd calls
this.sendJSON = function(anyargs) {
if (typeof arguments[0] == 'function') {
//this.sendJSON = function(callback, jcmd) {
callback = arguments[0];
jcmd = arguments[1];
} else {
//this.sendJSON = function(jcmd) {
callback = null;
jcmd = arguments[0];
}
return this._send(this.Path+jcmd,callback);
}
this._apply = function(name, args, kwds, callback) {
// note: javascript's 'this' can refer to either pymol or cmd
if (name.substring(0,1) == '.') { // .cmd.method -> pymol.cmd.method
name = this._prefix + name;
}
var mypath = this.Path;
var myargs = '["' + name + '"';
if (args != null) {
myargs = myargs + "," + JSON.stringify(args);
if(kwds != null) {
myargs = myargs + "," + JSON.stringify(kwds);
}
} else if(kwds != null) {
myargs = myargs + ",[]," + JSON.stringify(kwds)
}
myargs = myargs + "]";
// document.getElementById('debug').innerHTML = mypath;
if (this._bufferMode == 'on') {
this._cmd_buffer.push(myargs);
if ( callback ) {
this.flush(callback);
} else {
return;
}
} else {
return this._send(mypath+myargs,callback);
}
}
this.apply_cmd = function(name, args, kwds, callback) {
this._apply(".cmd." + name, args, kwds, callback);
}
this.cmd = { // cmd is a public attribute of PyMOL instances
_dispatch: function(anyargs) {
// name is always first argument
var name = ".cmd." + arguments[0];
// callback function is optional second argument
var callback = undefined;
var argstart = 1;
if (typeof arguments[1] == 'function') {
callback = arguments[1];
argstart = 2;
}
return this._outer._apply(name,Array.prototype.slice.apply(arguments).slice(argstart),null,callback);
},
// BEGIN MACHINE-GENERATED CODE
// python webapi.py
load: function() {
return this._dispatch.apply(this,
["load"].concat(Array.prototype.slice.apply(arguments)));
},
load_traj: function() {
return this._dispatch.apply(this,
["load_traj"].concat(Array.prototype.slice.apply(arguments)));
},
load_png: function() {
return this._dispatch.apply(this,
["load_png"].concat(Array.prototype.slice.apply(arguments)));
},
fragment: function() {
return this._dispatch.apply(this,
["fragment"].concat(Array.prototype.slice.apply(arguments)));
},
fetch: function() {
return this._dispatch.apply(this,
["fetch"].concat(Array.prototype.slice.apply(arguments)));
},
read_mmodstr: function() {
return this._dispatch.apply(this,
["read_mmodstr"].concat(Array.prototype.slice.apply(arguments)));
},
read_molstr: function() {
return this._dispatch.apply(this,
["read_molstr"].concat(Array.prototype.slice.apply(arguments)));
},
read_sdfstr: function() {
return this._dispatch.apply(this,
["read_sdfstr"].concat(Array.prototype.slice.apply(arguments)));
},
read_pdbstr: function() {
return this._dispatch.apply(this,
["read_pdbstr"].concat(Array.prototype.slice.apply(arguments)));
},
read_xplorstr: function() {
return this._dispatch.apply(this,
["read_xplorstr"].concat(Array.prototype.slice.apply(arguments)));
},
get_pdbstr: function() {
return this._dispatch.apply(this,
["get_pdbstr"].concat(Array.prototype.slice.apply(arguments)));
},
get_fastastr: function() {
return this._dispatch.apply(this,
["get_fastastr"].concat(Array.prototype.slice.apply(arguments)));
},
copy: function() {
return this._dispatch.apply(this,
["copy"].concat(Array.prototype.slice.apply(arguments)));
},
create: function() {
return this._dispatch.apply(this,
["create"].concat(Array.prototype.slice.apply(arguments)));
},
extract: function() {
return this._dispatch.apply(this,
["extract"].concat(Array.prototype.slice.apply(arguments)));
},
split_states: function() {
return this._dispatch.apply(this,
["split_states"].concat(Array.prototype.slice.apply(arguments)));
},
symexp: function() {
return this._dispatch.apply(this,
["symexp"].concat(Array.prototype.slice.apply(arguments)));
},
ramp_new: function() {
return this._dispatch.apply(this,
["ramp_new"].concat(Array.prototype.slice.apply(arguments)));
},
set_name: function() {
return this._dispatch.apply(this,
["set_name"].concat(Array.prototype.slice.apply(arguments)));
},
map_new: function() {
return this._dispatch.apply(this,
["map_new"].concat(Array.prototype.slice.apply(arguments)));
},
map_set: function() {
return this._dispatch.apply(this,
["map_set"].concat(Array.prototype.slice.apply(arguments)));
},
map_set_border: function() {
return this._dispatch.apply(this,
["map_set_border"].concat(Array.prototype.slice.apply(arguments)));
},
map_double: function() {
return this._dispatch.apply(this,
["map_double"].concat(Array.prototype.slice.apply(arguments)));
},
map_halve: function() {
return this._dispatch.apply(this,
["map_halve"].concat(Array.prototype.slice.apply(arguments)));
},
map_trim: function() {
return this._dispatch.apply(this,
["map_trim"].concat(Array.prototype.slice.apply(arguments)));
},
isodot: function() {
return this._dispatch.apply(this,
["isodot"].concat(Array.prototype.slice.apply(arguments)));
},
isolevel: function() {
return this._dispatch.apply(this,
["isolevel"].concat(Array.prototype.slice.apply(arguments)));
},
isomesh: function() {
return this._dispatch.apply(this,
["isomesh"].concat(Array.prototype.slice.apply(arguments)));
},
isosurface: function() {
return this._dispatch.apply(this,
["isosurface"].concat(Array.prototype.slice.apply(arguments)));
},
slice_new: function() {
return this._dispatch.apply(this,
["slice_new"].concat(Array.prototype.slice.apply(arguments)));
},
gradient: function() {
return this._dispatch.apply(this,
["gradient"].concat(Array.prototype.slice.apply(arguments)));
},
ungroup: function() {
return this._dispatch.apply(this,
["ungroup"].concat(Array.prototype.slice.apply(arguments)));
},
group: function() {
return this._dispatch.apply(this,
["group"].concat(Array.prototype.slice.apply(arguments)));
},
pseudoatom: function() {
return this._dispatch.apply(this,
["pseudoatom"].concat(Array.prototype.slice.apply(arguments)));
},
fab: function() {
return this._dispatch.apply(this,
["fab"].concat(Array.prototype.slice.apply(arguments)));
},
enable: function() {
return this._dispatch.apply(this,
["enable"].concat(Array.prototype.slice.apply(arguments)));
},
disable: function() {
return this._dispatch.apply(this,
["disable"].concat(Array.prototype.slice.apply(arguments)));
},
delete_: function() {
return this._dispatch.apply(this,
["delete_"].concat(Array.prototype.slice.apply(arguments)));
},
reinitialize: function() {
return this._dispatch.apply(this,
["reinitialize"].concat(Array.prototype.slice.apply(arguments)));
},
deselect: function() {
return this._dispatch.apply(this,
["deselect"].concat(Array.prototype.slice.apply(arguments)));
},
select: function() {
return this._dispatch.apply(this,
["select"].concat(Array.prototype.slice.apply(arguments)));
},
indicate: function() {
return this._dispatch.apply(this,
["indicate"].concat(Array.prototype.slice.apply(arguments)));
},
select_list: function() {
return this._dispatch.apply(this,
["select_list"].concat(Array.prototype.slice.apply(arguments)));
},
pop: function() {
return this._dispatch.apply(this,
["pop"].concat(Array.prototype.slice.apply(arguments)));
},
angle: function() {
return this._dispatch.apply(this,
["angle"].concat(Array.prototype.slice.apply(arguments)));
},
dihedral: function() {
return this._dispatch.apply(this,
["dihedral"].concat(Array.prototype.slice.apply(arguments)));
},
dist: function() {
return this._dispatch.apply(this,
["dist"].concat(Array.prototype.slice.apply(arguments)));
},
distance: function() {
return this._dispatch.apply(this,
["distance"].concat(Array.prototype.slice.apply(arguments)));
},
get_angle: function() {
return this._dispatch.apply(this,
["get_angle"].concat(Array.prototype.slice.apply(arguments)));
},
get_dihedral: function() {
return this._dispatch.apply(this,
["get_dihedral"].concat(Array.prototype.slice.apply(arguments)));
},
get_distance: function() {
return this._dispatch.apply(this,
["get_distance"].concat(Array.prototype.slice.apply(arguments)));
},
get_area: function() {
return this._dispatch.apply(this,
["get_area"].concat(Array.prototype.slice.apply(arguments)));
},
color: function() {
return this._dispatch.apply(this,
["color"].concat(Array.prototype.slice.apply(arguments)));
},
bg_color: function() {
return this._dispatch.apply(this,
["bg_color"].concat(Array.prototype.slice.apply(arguments)));
},
rebuild: function() {
return this._dispatch.apply(this,
["rebuild"].concat(Array.prototype.slice.apply(arguments)));
},
refresh: function() {
return this._dispatch.apply(this,
["refresh"].concat(Array.prototype.slice.apply(arguments)));
},
recolor: function() {
return this._dispatch.apply(this,
["recolor"].concat(Array.prototype.slice.apply(arguments)));
},
set_color: function() {
return this._dispatch.apply(this,
["set_color"].concat(Array.prototype.slice.apply(arguments)));
},
set_object_color: function() {
return this._dispatch.apply(this,
["set_object_color"].concat(Array.prototype.slice.apply(arguments)));
},
show: function() {
return this._dispatch.apply(this,
["show"].concat(Array.prototype.slice.apply(arguments)));
},
show_as: function() {
return this._dispatch.apply(this,
["show_as"].concat(Array.prototype.slice.apply(arguments)));
},
hide: function() {
return this._dispatch.apply(this,
["hide"].concat(Array.prototype.slice.apply(arguments)));
},
cartoon: function() {
return this._dispatch.apply(this,
["cartoon"].concat(Array.prototype.slice.apply(arguments)));
},
spectrum: function() {
return this._dispatch.apply(this,
["spectrum"].concat(Array.prototype.slice.apply(arguments)));
},
center: function() {
return this._dispatch.apply(this,
["center"].concat(Array.prototype.slice.apply(arguments)));
},
zoom: function() {
return this._dispatch.apply(this,
["zoom"].concat(Array.prototype.slice.apply(arguments)));
},
reset: function() {
return this._dispatch.apply(this,
["reset"].concat(Array.prototype.slice.apply(arguments)));
},
clip: function() {
return this._dispatch.apply(this,
["clip"].concat(Array.prototype.slice.apply(arguments)));
},
orient: function() {
return this._dispatch.apply(this,
["orient"].concat(Array.prototype.slice.apply(arguments)));
},
origin: function() {
return this._dispatch.apply(this,
["origin"].concat(Array.prototype.slice.apply(arguments)));
},
set_view: function() {
return this._dispatch.apply(this,
["set_view"].concat(Array.prototype.slice.apply(arguments)));
},
get_view: function() {
return this._dispatch.apply(this,
["get_view"].concat(Array.prototype.slice.apply(arguments)));
},
move: function() {
return this._dispatch.apply(this,
["move"].concat(Array.prototype.slice.apply(arguments)));
},
turn: function() {
return this._dispatch.apply(this,
["turn"].concat(Array.prototype.slice.apply(arguments)));
},
rock: function() {
return this._dispatch.apply(this,
["rock"].concat(Array.prototype.slice.apply(arguments)));
},
stereo: function() {
return this._dispatch.apply(this,
["stereo"].concat(Array.prototype.slice.apply(arguments)));
},
get: function() {
return this._dispatch.apply(this,
["get"].concat(Array.prototype.slice.apply(arguments)));
},
set: function() {
return this._dispatch.apply(this,
["set"].concat(Array.prototype.slice.apply(arguments)));
},
set_bond: function() {
return this._dispatch.apply(this,
["set_bond"].concat(Array.prototype.slice.apply(arguments)));
},
unset: function() {
return this._dispatch.apply(this,
["unset"].concat(Array.prototype.slice.apply(arguments)));
},
unset_bond: function() {
return this._dispatch.apply(this,
["unset_bond"].concat(Array.prototype.slice.apply(arguments)));
},
get_setting_boolean: function() {
return this._dispatch.apply(this,
["get_setting_boolean"].concat(Array.prototype.slice.apply(arguments)));
},
get_setting_int: function() {
return this._dispatch.apply(this,
["get_setting_int"].concat(Array.prototype.slice.apply(arguments)));
},
get_setting_float: function() {
return this._dispatch.apply(this,
["get_setting_float"].concat(Array.prototype.slice.apply(arguments)));
},
get_setting_tuple: function() {
return this._dispatch.apply(this,
["get_setting_tuple"].concat(Array.prototype.slice.apply(arguments)));
},
get_setting_text: function() {
return this._dispatch.apply(this,
["get_setting_text"].concat(Array.prototype.slice.apply(arguments)));
},
window: function() {
return this._dispatch.apply(this,
["window"].concat(Array.prototype.slice.apply(arguments)));
},
viewport: function() {
return this._dispatch.apply(this,
["viewport"].concat(Array.prototype.slice.apply(arguments)));
},
full_screen: function() {
return this._dispatch.apply(this,
["full_screen"].concat(Array.prototype.slice.apply(arguments)));
},
quit: function() {
return this._dispatch.apply(this,
["quit"].concat(Array.prototype.slice.apply(arguments)));
},
draw: function() {
return this._dispatch.apply(this,
["draw"].concat(Array.prototype.slice.apply(arguments)));
},
ray: function() {
return this._dispatch.apply(this,
["ray"].concat(Array.prototype.slice.apply(arguments)));
},
align: function() {
return this._dispatch.apply(this,
["align"].concat(Array.prototype.slice.apply(arguments)));
},
super_: function() {
return this._dispatch.apply(this,
["super_"].concat(Array.prototype.slice.apply(arguments)));
},
fit: function() {
return this._dispatch.apply(this,
["fit"].concat(Array.prototype.slice.apply(arguments)));
},
rms: function() {
return this._dispatch.apply(this,
["rms"].concat(Array.prototype.slice.apply(arguments)));
},
rms_cur: function() {
return this._dispatch.apply(this,
["rms_cur"].concat(Array.prototype.slice.apply(arguments)));
},
intra_fit: function() {
return this._dispatch.apply(this,
["intra_fit"].concat(Array.prototype.slice.apply(arguments)));
},
intra_rms: function() {
return this._dispatch.apply(this,
["intra_rms"].concat(Array.prototype.slice.apply(arguments)));
},
intra_rms_cur: function() {
return this._dispatch.apply(this,
["intra_rms_cur"].concat(Array.prototype.slice.apply(arguments)));
},
pair_fit: function() {
return this._dispatch.apply(this,
["pair_fit"].concat(Array.prototype.slice.apply(arguments)));
},
space: function() {
return this._dispatch.apply(this,
["space"].concat(Array.prototype.slice.apply(arguments)));
},
order: function() {
return this._dispatch.apply(this,
["order"].concat(Array.prototype.slice.apply(arguments)));
},
edit_mode: function() {
return this._dispatch.apply(this,
["edit_mode"].concat(Array.prototype.slice.apply(arguments)));
},
button: function() {
return this._dispatch.apply(this,
["button"].concat(Array.prototype.slice.apply(arguments)));
},
config_mouse: function() {
return this._dispatch.apply(this,
["config_mouse"].concat(Array.prototype.slice.apply(arguments)));
},
mouse: function() {
return this._dispatch.apply(this,
["mouse"].concat(Array.prototype.slice.apply(arguments)));
},
mask: function() {
return this._dispatch.apply(this,
["mask"].concat(Array.prototype.slice.apply(arguments)));
},
unmask: function() {
return this._dispatch.apply(this,
["unmask"].concat(Array.prototype.slice.apply(arguments)));
},
count_atoms: function() {
return this._dispatch.apply(this,
["count_atoms"].concat(Array.prototype.slice.apply(arguments)));
},
get_chains: function() {
return this._dispatch.apply(this,
["get_chains"].concat(Array.prototype.slice.apply(arguments)));
},
get_color_index: function() {
return this._dispatch.apply(this,
["get_color_index"].concat(Array.prototype.slice.apply(arguments)));
},
get_color_indices: function() {
return this._dispatch.apply(this,
["get_color_indices"].concat(Array.prototype.slice.apply(arguments)));
},
get_object_color_index: function() {
return this._dispatch.apply(this,
["get_object_color_index"].concat(Array.prototype.slice.apply(arguments)));
},
get_object_list: function() {
return this._dispatch.apply(this,
["get_object_list"].concat(Array.prototype.slice.apply(arguments)));
},
get_color_tuple: function() {
return this._dispatch.apply(this,
["get_color_tuple"].concat(Array.prototype.slice.apply(arguments)));
},
get_atom_coords: function() {
return this._dispatch.apply(this,
["get_atom_coords"].concat(Array.prototype.slice.apply(arguments)));
},
get_extent: function() {
return this._dispatch.apply(this,
["get_extent"].concat(Array.prototype.slice.apply(arguments)));
},
get_names: function() {
return this._dispatch.apply(this,
["get_names"].concat(Array.prototype.slice.apply(arguments)));
},
get_names_of_type: function() {
return this._dispatch.apply(this,
["get_names_of_type"].concat(Array.prototype.slice.apply(arguments)));
},
get_legal_name: function() {
return this._dispatch.apply(this,
["get_legal_name"].concat(Array.prototype.slice.apply(arguments)));
},
get_unused_name: function() {
return this._dispatch.apply(this,
["get_unused_name"].concat(Array.prototype.slice.apply(arguments)));
},
get_object_matrix: function() {
return this._dispatch.apply(this,
["get_object_matrix"].concat(Array.prototype.slice.apply(arguments)));
},
get_phipsi: function() {
return this._dispatch.apply(this,
["get_phipsi"].concat(Array.prototype.slice.apply(arguments)));
},
get_position: function() {
return this._dispatch.apply(this,
["get_position"].concat(Array.prototype.slice.apply(arguments)));
},
get_raw_alignment: function() {
return this._dispatch.apply(this,
["get_raw_alignment"].concat(Array.prototype.slice.apply(arguments)));
},
get_renderer: function() {
return this._dispatch.apply(this,
["get_renderer"].concat(Array.prototype.slice.apply(arguments)));
},
get_symmetry: function() {
return this._dispatch.apply(this,
["get_symmetry"].concat(Array.prototype.slice.apply(arguments)));
},
get_title: function() {
return this._dispatch.apply(this,
["get_title"].concat(Array.prototype.slice.apply(arguments)));
},
get_type: function() {
return this._dispatch.apply(this,
["get_type"].concat(Array.prototype.slice.apply(arguments)));
},
get_version: function() {
return this._dispatch.apply(this,
["get_version"].concat(Array.prototype.slice.apply(arguments)));
},
id_atom: function() {
return this._dispatch.apply(this,
["id_atom"].concat(Array.prototype.slice.apply(arguments)));
},
identify: function() {
return this._dispatch.apply(this,
["identify"].concat(Array.prototype.slice.apply(arguments)));
},
index: function() {
return this._dispatch.apply(this,
["index"].concat(Array.prototype.slice.apply(arguments)));
},
phi_psi: function() {
return this._dispatch.apply(this,
["phi_psi"].concat(Array.prototype.slice.apply(arguments)));
},
matrix_copy: function() {
return this._dispatch.apply(this,
["matrix_copy"].concat(Array.prototype.slice.apply(arguments)));
},
matrix_reset: function() {
return this._dispatch.apply(this,
["matrix_reset"].concat(Array.prototype.slice.apply(arguments)));
},
rotate: function() {
return this._dispatch.apply(this,
["rotate"].concat(Array.prototype.slice.apply(arguments)));
},
translate: function() {
return this._dispatch.apply(this,
["translate"].concat(Array.prototype.slice.apply(arguments)));
},
set_object_ttt: function() {
return this._dispatch.apply(this,
["set_object_ttt"].concat(Array.prototype.slice.apply(arguments)));
},
set_dihedral: function() {
return this._dispatch.apply(this,
["set_dihedral"].concat(Array.prototype.slice.apply(arguments)));
},
transform_object: function() {
return this._dispatch.apply(this,
["transform_object"].concat(Array.prototype.slice.apply(arguments)));
},
transform_selection: function() {
return this._dispatch.apply(this,
["transform_selection"].concat(Array.prototype.slice.apply(arguments)));
},
translate_atom: function() {
return this._dispatch.apply(this,
["translate_atom"].concat(Array.prototype.slice.apply(arguments)));
},
update: function() {
return this._dispatch.apply(this,
["update"].concat(Array.prototype.slice.apply(arguments)));
},
attach: function() {
return this._dispatch.apply(this,
["attach"].concat(Array.prototype.slice.apply(arguments)));
},
bond: function() {
return this._dispatch.apply(this,
["bond"].concat(Array.prototype.slice.apply(arguments)));
},
unbond: function() {
return this._dispatch.apply(this,
["unbond"].concat(Array.prototype.slice.apply(arguments)));
},
cycle_valence: function() {
return this._dispatch.apply(this,
["cycle_valence"].concat(Array.prototype.slice.apply(arguments)));
},
drag: function() {
return this._dispatch.apply(this,
["drag"].concat(Array.prototype.slice.apply(arguments)));
},
dss: function() {
return this._dispatch.apply(this,
["dss"].concat(Array.prototype.slice.apply(arguments)));
},
edit: function() {
return this._dispatch.apply(this,
["edit"].concat(Array.prototype.slice.apply(arguments)));
},
unpick: function() {
return this._dispatch.apply(this,
["unpick"].concat(Array.prototype.slice.apply(arguments)));
},
fix_chemistry: function() {
return this._dispatch.apply(this,
["fix_chemistry"].concat(Array.prototype.slice.apply(arguments)));
},
flag: function() {
return this._dispatch.apply(this,
["flag"].concat(Array.prototype.slice.apply(arguments)));
},
fuse: function() {
return this._dispatch.apply(this,
["fuse"].concat(Array.prototype.slice.apply(arguments)));
},
get_editor_scheme: function() {
return this._dispatch.apply(this,
["get_editor_scheme"].concat(Array.prototype.slice.apply(arguments)));
},
h_add: function() {
return this._dispatch.apply(this,
["h_add"].concat(Array.prototype.slice.apply(arguments)));
},
h_fill: function() {
return this._dispatch.apply(this,
["h_fill"].concat(Array.prototype.slice.apply(arguments)));
},
h_fix: function() {
return this._dispatch.apply(this,
["h_fix"].concat(Array.prototype.slice.apply(arguments)));
},
invert: function() {
return this._dispatch.apply(this,
["invert"].concat(Array.prototype.slice.apply(arguments)));
},
torsion: function() {
return this._dispatch.apply(this,
["torsion"].concat(Array.prototype.slice.apply(arguments)));
},
valence: function() {
return this._dispatch.apply(this,
["valence"].concat(Array.prototype.slice.apply(arguments)));
},
clean: function() {
return this._dispatch.apply(this,
["clean"].concat(Array.prototype.slice.apply(arguments)));
},
deprotect: function() {
return this._dispatch.apply(this,
["deprotect"].concat(Array.prototype.slice.apply(arguments)));
},
protect: function() {
return this._dispatch.apply(this,
["protect"].concat(Array.prototype.slice.apply(arguments)));
},
reference: function() {
return this._dispatch.apply(this,
["reference"].concat(Array.prototype.slice.apply(arguments)));
},
remove: function() {
return this._dispatch.apply(this,
["remove"].concat(Array.prototype.slice.apply(arguments)));
},
remove_picked: function() {
return this._dispatch.apply(this,
["remove_picked"].concat(Array.prototype.slice.apply(arguments)));
},
rename: function() {
return this._dispatch.apply(this,
["rename"].concat(Array.prototype.slice.apply(arguments)));
},
replace: function() {
return this._dispatch.apply(this,
["replace"].concat(Array.prototype.slice.apply(arguments)));
},
sculpt_purge: function() {
return this._dispatch.apply(this,
["sculpt_purge"].concat(Array.prototype.slice.apply(arguments)));
},
sculpt_deactivate: function() {
return this._dispatch.apply(this,
["sculpt_deactivate"].concat(Array.prototype.slice.apply(arguments)));
},
sculpt_activate: function() {
return this._dispatch.apply(this,
["sculpt_activate"].concat(Array.prototype.slice.apply(arguments)));
},
sculpt_iterate: function() {
return this._dispatch.apply(this,
["sculpt_iterate"].concat(Array.prototype.slice.apply(arguments)));
},
set_geometry: function() {
return this._dispatch.apply(this,
["set_geometry"].concat(Array.prototype.slice.apply(arguments)));
},
set_symmetry: function() {
return this._dispatch.apply(this,
["set_symmetry"].concat(Array.prototype.slice.apply(arguments)));
},
set_title: function() {
return this._dispatch.apply(this,
["set_title"].concat(Array.prototype.slice.apply(arguments)));
},
smooth: function() {
return this._dispatch.apply(this,
["smooth"].concat(Array.prototype.slice.apply(arguments)));
},
sort: function() {
return this._dispatch.apply(this,
["sort"].concat(Array.prototype.slice.apply(arguments)));
},
undo: function() {
return this._dispatch.apply(this,
["undo"].concat(Array.prototype.slice.apply(arguments)));
},
push_undo: function() {
return this._dispatch.apply(this,
["push_undo"].concat(Array.prototype.slice.apply(arguments)));
},
redo: function() {
return this._dispatch.apply(this,
["redo"].concat(Array.prototype.slice.apply(arguments)));
},
wizard: function() {
return this._dispatch.apply(this,
["wizard"].concat(Array.prototype.slice.apply(arguments)));
},
replace_wizard: function() {
return this._dispatch.apply(this,
["replace_wizard"].concat(Array.prototype.slice.apply(arguments)));
},
count_frames: function() {
return this._dispatch.apply(this,
["count_frames"].concat(Array.prototype.slice.apply(arguments)));
},
count_states: function() {
return this._dispatch.apply(this,
["count_states"].concat(Array.prototype.slice.apply(arguments)));
},
mset: function() {
return this._dispatch.apply(this,
["mset"].concat(Array.prototype.slice.apply(arguments)));
},
madd: function() {
return this._dispatch.apply(this,
["madd"].concat(Array.prototype.slice.apply(arguments)));
},
mclear: function() {
return this._dispatch.apply(this,
["mclear"].concat(Array.prototype.slice.apply(arguments)));
},
mmatrix: function() {
return this._dispatch.apply(this,
["mmatrix"].concat(Array.prototype.slice.apply(arguments)));
},
mdump: function() {
return this._dispatch.apply(this,
["mdump"].concat(Array.prototype.slice.apply(arguments)));
},
mview: function() {
return this._dispatch.apply(this,
["mview"].concat(Array.prototype.slice.apply(arguments)));
},
forward: function() {
return this._dispatch.apply(this,
["forward"].concat(Array.prototype.slice.apply(arguments)));
},
backward: function() {
return this._dispatch.apply(this,
["backward"].concat(Array.prototype.slice.apply(arguments)));
},
rewind: function() {
return this._dispatch.apply(this,
["rewind"].concat(Array.prototype.slice.apply(arguments)));
},
middle: function() {
return this._dispatch.apply(this,
["middle"].concat(Array.prototype.slice.apply(arguments)));
},
ending: function() {
return this._dispatch.apply(this,
["ending"].concat(Array.prototype.slice.apply(arguments)));
},
mplay: function() {
return this._dispatch.apply(this,
["mplay"].concat(Array.prototype.slice.apply(arguments)));
},
mtoggle: function() {
return this._dispatch.apply(this,
["mtoggle"].concat(Array.prototype.slice.apply(arguments)));
},
mstop: function() {
return this._dispatch.apply(this,
["mstop"].concat(Array.prototype.slice.apply(arguments)));
},
frame: function() {
return this._dispatch.apply(this,
["frame"].concat(Array.prototype.slice.apply(arguments)));
},
get_movie_playing: function() {
return this._dispatch.apply(this,
["get_movie_playing"].concat(Array.prototype.slice.apply(arguments)));
},
get_state: function() {
return this._dispatch.apply(this,
["get_state"].concat(Array.prototype.slice.apply(arguments)));
},
get_frame: function() {
return this._dispatch.apply(this,
["get_frame"].concat(Array.prototype.slice.apply(arguments)));
},
view: function() {
return this._dispatch.apply(this,
["view"].concat(Array.prototype.slice.apply(arguments)));
},
get_scene_list: function() {
return this._dispatch.apply(this,
["get_scene_list"].concat(Array.prototype.slice.apply(arguments)));
},
scene: function() {
return this._dispatch.apply(this,
["scene"].concat(Array.prototype.slice.apply(arguments)));
},
scene_order: function() {
return this._dispatch.apply(this,
["scene_order"].concat(Array.prototype.slice.apply(arguments)));
}
// END MACHINE-GENERATED CODE
}
this.getattr = {
dispatch: function(attrname) {
if (attrname) {
mypath = "/getattr/pymol." + attrname;
this._outer._send(mypath);
}
}
// viewing: function() {
// this._dispatch("viewing");
// }
}
// enable inner pseudo-inner-instance to find the outer instance
this.cmd._outer = this
this.getattr._outer = this
}
// utility functions not used above, but of use to some users, one hopes
function parse_file(f) {
var re = /[\\\/]/;
fields = f.split(re);
filename = fields[fields.length-1];
dot = filename.lastIndexOf('.');
if (dot > -1) {
name = filename.slice(0,dot);
ext = filename.slice(dot);
} else {
name = filename;
ext = "";
}
// Javascript 1.7+ only in Mozilla?
// return [name, ext];
return new Array(name, ext);
}
function validate_file(n,f) {
if (f.value) {
// Javascript 1.7+ only in Mozilla?
// [name, ext] = parse_file(f.value);
parsed = parse_file(f.value);
name = parsed[0];
ext = parsed[1];
if (name) {
n.value = name;
//add_checkbox(name, "objects");
return true;
} else {
alert('cannot extract name from file');
return false;
}
} else {
alert('no file selected');
return false;
}
}