Files
enviPy-bayer/static/js/ketcher2/script/chem/generics.js
2025-06-23 20:13:54 +02:00

111 lines
2.4 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 generics = {
atom: {
'any': {
labels: ['A', 'AH']
},
'no-carbon': {
labels: ['Q', 'QH']
},
'metal': {
labels: ['M', 'MH']
},
'halogen': {
labels: ['X', 'XH']
}
},
group: {
labels: ['G', 'GH', 'G*', 'GH*'],
acyclic: {
labels: ['ACY', 'ACH'],
carbo: {
labels: ['ABC', 'ABH'],
alkynyl: {
labels: ['AYL', 'AYH']
},
alkyl: {
labels: ['ALK', 'ALH']
},
alkenyl: {
labels: ['AEL', 'AEH']
}
},
hetero: {
labels: ['AHC', 'AHH'],
alkoxy: {
labels: ['AOX', 'AOH']
}
}
},
cyclic: {
'labels': ['CYC', 'CYH'],
'no-carbon': {
labels: ['CXX', 'CXH']
},
'carbo': {
labels: ['CBC', 'CBH'],
aryl: {
labels: ['ARY', 'ARH']
},
cycloalkyl: {
labels: ['CAL', 'CAH']
},
cycloalkenyl: {
labels: ['CEL', 'CEH']
}
},
'hetero': {
labels: ['CHC', 'CHH'],
aryl: {
labels: ['HAR', 'HAH']
}
}
}
},
special: {
labels: ['H+', 'D', 'T', 'R', 'Pol']
}
};
function mapify(tree, path, res) {
return Object.keys(tree).reduce(function (res, key) {
if (key === 'labels') {
return tree.labels.reduce(function (res, label) {
res[label] = path || true;
return res;
}, res);
}
return mapify(tree[key],
path ? path.concat(key) : [key], res);
}, res || {});
}
function traverse(tree, path) {
return path.reduce(function (res, cur) {
return (res && res[cur]) || null;
}, tree);
}
generics.map = mapify(generics);
generics.map['*'] = generics.map['A']; // alias
generics.get = function (path) {
return mapify(traverse(path));
};
module.exports = generics;