-
Notifications
You must be signed in to change notification settings - Fork 159
/
index.js
111 lines (99 loc) · 3 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
/****************************************************************************
* Copyright 2018 EPAM Systems
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
***************************************************************************/
import 'babel-polyfill';
import 'whatwg-fetch';
import queryString from 'query-string';
import api from './api';
import molfile from './chem/molfile';
import smiles from './chem/smiles';
import * as structformat from './ui/data/convert/structformat';
import ui from './ui';
import Render from './render';
function getSmiles() {
return smiles.stringify(ketcher.editor.struct(),
{ ignoreErrors: true });
}
function saveSmiles() {
const struct = ketcher.editor.struct();
return structformat.toString(struct, 'smiles-ext', ketcher.server)
.catch(() => smiles.stringify(struct));
}
function getMolfile() {
return molfile.stringify(ketcher.editor.struct(),
{ ignoreErrors: true });
}
function setMolecule(molString) {
if (!(typeof molString === 'string'))
return;
ketcher.ui.load(molString, {
rescale: true
});
}
function addFragment(molString) {
if (!(typeof molString === 'string'))
return;
ketcher.ui.load(molString, {
rescale: true,
fragment: true
});
}
function showMolfile(clientArea, molString, options) {
const render = new Render(clientArea, Object.assign({
scale: options.bondLength || 75
}, options));
if (molString) {
const mol = molfile.parse(molString);
render.setMolecule(mol);
}
render.update();
// not sure we need to expose guts
return render;
}
// TODO: replace window.onload with something like <https://github.com/ded/domready>
// to start early
window.onload = function () {
const params = queryString.parse(document.location.search);
if (params.api_path)
ketcher.apiPath = params.api_path;
ketcher.server = api(ketcher.apiPath, {
'smart-layout': true,
'ignore-stereochemistry-errors': true,
'mass-skip-error-on-pseudoatoms': false,
'gross-formula-add-rsites': true
});
ketcher.ui = ui(Object.assign({}, params, buildInfo), ketcher.server);
ketcher.editor = global._ui_editor;
ketcher.server.then(() => {
if (params.mol)
ketcher.ui.load(params.mol);
}, () => {
document.title += ' (standalone)';
});
};
const buildInfo = {
version: '__VERSION__',
apiPath: '__API_PATH__',
buildDate: '__BUILD_DATE__',
buildNumber: '__BUILD_NUMBER__' || null
};
const ketcher = module.exports = Object.assign({ // eslint-disable-line no-multi-assign
getSmiles,
saveSmiles,
getMolfile,
setMolecule,
addFragment,
showMolfile
}, buildInfo);