/**************************************************************************** * 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 // 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);