molstar
Version:
A comprehensive macromolecular library.
111 lines • 5.65 kB
JavaScript
/**
* Copyright (c) 2019-2020 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author Alexander Rose <alexander.rose@weirdbyte.de>
*/
import { __assign, __awaiter, __generator } from "tslib";
import { ParamDefinition as PD } from '../../mol-util/param-definition';
import { ValueBox } from '../../mol-util';
import { CustomPropertyDescriptor } from '../../mol-model/custom-property';
import { stringToWords } from '../../mol-util/string';
export { CustomStructureProperty };
var CustomStructureProperty;
(function (CustomStructureProperty) {
function createProvider(builder) {
var _this = this;
var descriptorName = builder.descriptor.name;
var propertyDataName = builder.type === 'root' ? 'inheritedPropertyData' : 'currentPropertyData';
var get = function (data) {
if (!(descriptorName in data[propertyDataName])) {
data[propertyDataName][descriptorName] = {
props: __assign({}, PD.getDefaultValues(builder.getParams(data))),
data: ValueBox.create(undefined)
};
}
return data[propertyDataName][descriptorName];
};
var set = function (data, props, value) {
var property = get(data);
data[propertyDataName][descriptorName] = {
props: props,
data: ValueBox.withValue(property.data, value)
};
};
return {
label: builder.label,
descriptor: builder.descriptor,
isHidden: builder.isHidden,
getParams: function (data) {
var params = PD.clone(builder.getParams(data));
PD.setDefaultValues(params, get(data).props);
return params;
},
defaultParams: builder.defaultParams,
isApplicable: builder.isApplicable,
attach: function (ctx, data, props, addRef) {
if (props === void 0) { props = {}; }
return __awaiter(_this, void 0, void 0, function () {
var rootProps, property, p, _a, value, assets;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
if (addRef)
data.customPropertyDescriptors.reference(builder.descriptor, true);
if (builder.type === 'root')
data = data.root;
rootProps = get(data.root).props;
property = get(data);
p = PD.merge(builder.defaultParams, rootProps, props);
if (property.data.value && PD.areEqual(builder.defaultParams, property.props, p))
return [2 /*return*/];
return [4 /*yield*/, builder.obtain(ctx, data, p)];
case 1:
_a = _b.sent(), value = _a.value, assets = _a.assets;
data.customPropertyDescriptors.add(builder.descriptor);
data.customPropertyDescriptors.assets(builder.descriptor, assets);
set(data, p, value);
return [2 /*return*/];
}
});
});
},
ref: function (data, add) { return data.customPropertyDescriptors.reference(builder.descriptor, add); },
get: function (data) { return get(data).data; },
set: function (data, props, value) {
if (props === void 0) { props = {}; }
if (builder.type === 'root')
data = data.root;
var property = get(data);
var p = PD.merge(builder.defaultParams, property.props, props);
if (!PD.areEqual(builder.defaultParams, property.props, p)) {
// this invalidates property.value
set(data, p, value);
// dispose of assets
data.customPropertyDescriptors.assets(builder.descriptor);
}
},
props: function (data) { return get(data).props; },
};
}
CustomStructureProperty.createProvider = createProvider;
function createSimple(name, type, defaultValue) {
var _this = this;
var defaultParams = { value: PD.Value(defaultValue, { isHidden: true }) };
return createProvider({
label: stringToWords(name),
descriptor: CustomPropertyDescriptor({ name: name }),
isHidden: true,
type: type,
defaultParams: defaultParams,
getParams: function () { return ({ value: PD.Value(defaultValue, { isHidden: true }) }); },
isApplicable: function () { return true; },
obtain: function (ctx, data, props) { return __awaiter(_this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, __assign(__assign({}, PD.getDefaultValues(defaultParams)), props)];
});
}); }
});
}
CustomStructureProperty.createSimple = createSimple;
})(CustomStructureProperty || (CustomStructureProperty = {}));
//# sourceMappingURL=custom-structure-property.js.map