UNPKG

drugflow-molstar

Version:
80 lines (79 loc) 3.64 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DomainAnnotationsColorThemeProvider = exports.DomainAnnotationsColorThemeParams = void 0; exports.DomainAnnotationsColorTheme = DomainAnnotationsColorTheme; var prop_1 = require("./prop"); var structure_1 = require("Molstar/mol-model/structure"); var color_1 = require("Molstar/mol-theme/color"); var color_2 = require("Molstar/mol-util/color"); var param_definition_1 = require("Molstar/mol-util/param-definition"); var DomainColors = [ color_2.Color.fromRgb(170, 170, 170), // not applicable color_2.Color.fromRgb(255, 112, 3) ]; exports.DomainAnnotationsColorThemeParams = { type: param_definition_1.ParamDefinition.MappedStatic('', { '': param_definition_1.ParamDefinition.EmptyGroup() }) }; function DomainAnnotationsColorTheme(ctx, props) { var color; if (ctx.structure && !ctx.structure.isEmpty && ctx.structure.models[0].customProperties.has(prop_1.DomainAnnotationsProvider.descriptor)) { var getDomains_1 = prop_1.DomainAnnotations.getDomains; var issue_1 = props.type.params.kind; color = function (location) { if (structure_1.StructureElement.Location.is(location) && getDomains_1(location).indexOf(issue_1) >= 0) { return DomainColors[1]; } return DomainColors[0]; }; } else { color = function () { return DomainColors[0]; }; } return { factory: DomainAnnotationsColorTheme, granularity: 'group', color: color, props: props, description: 'Highlights Sequnece and Structure Domain Annotations. Data obtained via PDBe.', }; } exports.DomainAnnotationsColorThemeProvider = { name: 'pdbe-domain-annotations', label: 'Domain annotations', category: color_1.ColorTheme.Category.Misc, factory: DomainAnnotationsColorTheme, getParams: function (ctx) { var domainNames = prop_1.DomainAnnotations.getDomainNames(ctx.structure); var domainTypes = prop_1.DomainAnnotations.getDomainTypes(ctx.structure); var optionObj = {}; domainTypes.forEach(function (tp, index) { if (domainNames[index].length > 0) { optionObj[tp] = param_definition_1.ParamDefinition.Group({ kind: param_definition_1.ParamDefinition.Select(domainNames[index][0], param_definition_1.ParamDefinition.arrayToOptions(domainNames[index])) }, { isFlat: true }); } }); if (Object.keys(optionObj).length > 0) { return { type: param_definition_1.ParamDefinition.MappedStatic(optionObj[0], optionObj) }; } else { return { type: param_definition_1.ParamDefinition.MappedStatic('', { '': param_definition_1.ParamDefinition.EmptyGroup() }) }; } }, defaultValues: param_definition_1.ParamDefinition.getDefaultValues(exports.DomainAnnotationsColorThemeParams), isApplicable: function (ctx) { var _a; return prop_1.DomainAnnotations.isApplicable((_a = ctx.structure) === null || _a === void 0 ? void 0 : _a.models[0]); }, ensureCustomProperties: { attach: function (ctx, data) { return data.structure ? prop_1.DomainAnnotationsProvider.attach(ctx, data.structure.models[0], void 0, true) : Promise.resolve(); }, detach: function (data) { return data.structure && data.structure.models[0].customProperties.reference(prop_1.DomainAnnotationsProvider.descriptor, false); } } };