forked from enviPath/enviPy
129 lines
3.5 KiB
JavaScript
129 lines
3.5 KiB
JavaScript
/****************************************************************************
|
|
* Copyright 2017 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.
|
|
***************************************************************************/
|
|
var safda = 0;
|
|
import 'babel-polyfill';
|
|
import 'whatwg-fetch';
|
|
import queryString from 'query-string';
|
|
|
|
import api from './api.js';
|
|
import * as molfile from './chem/molfile';
|
|
import * as smiles from './chem/smiles';
|
|
import * as structformat from './ui/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', ketcher.server);
|
|
}
|
|
|
|
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 () {
|
|
var params = queryString.parse(document.location.search);
|
|
if (params.api_path)
|
|
ketcher.apiPath = params.api_path;
|
|
// Url is something similar http://localhost:8080/js/ketcher2/...
|
|
// To access server split on "/js/"
|
|
var requestUrl = document.location.href.split("/static")[0]
|
|
fetch(requestUrl,{
|
|
method: "GET",
|
|
//async: false,
|
|
body: {
|
|
getMLServerPath: true
|
|
}
|
|
}).then(function (response) {
|
|
ketcher.api = response.mlServerPath;
|
|
|
|
}).catch(function (err) {
|
|
throw 'Cannot parse result\n' + err;
|
|
});
|
|
|
|
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(function () {
|
|
if (params.mol)
|
|
ketcher.ui.load(params.mol);
|
|
}, function () {
|
|
document.title += ' (standalone)';
|
|
});
|
|
};
|
|
|
|
const buildInfo = {
|
|
version: '__VERSION__',
|
|
apiPath: '__API_PATH__',
|
|
buildDate: '__BUILD_DATE__',
|
|
buildNumber: '__BUILD_NUMBER__' || null,
|
|
buildOptions: '__BUILD_OPTIONS__',
|
|
miewPath: '__MIEW_PATH__' || null
|
|
};
|
|
|
|
const ketcher = module.exports = Object.assign({
|
|
getSmiles,
|
|
saveSmiles,
|
|
getMolfile,
|
|
setMolecule,
|
|
addFragment,
|
|
showMolfile
|
|
}, buildInfo);
|