molstar
Version:
A comprehensive macromolecular library.
176 lines • 7.31 kB
JavaScript
/**
* Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author David Sehnal <david.sehnal@gmail.com>
*/
import { __awaiter, __extends, __generator } from "tslib";
import { PluginStateTransform, PluginStateObject } from '../../mol-plugin-state/objects';
import { StateTransformer } from '../../mol-state';
import { Task } from '../../mol-task';
import { ParamDefinition } from '../../mol-util/param-definition';
import { shallowEqualObjects } from '../../mol-util';
export { PluginBehavior };
var PluginBehavior;
(function (PluginBehavior) {
var Root = /** @class */ (function (_super) {
__extends(Root, _super);
function Root() {
return _super !== null && _super.apply(this, arguments) || this;
}
return Root;
}(PluginStateObject.Create({ name: 'Root', typeClass: 'Root' })));
PluginBehavior.Root = Root;
var Category = /** @class */ (function (_super) {
__extends(Category, _super);
function Category() {
return _super !== null && _super.apply(this, arguments) || this;
}
return Category;
}(PluginStateObject.Create({ name: 'Category', typeClass: 'Object' })));
PluginBehavior.Category = Category;
var Behavior = /** @class */ (function (_super) {
__extends(Behavior, _super);
function Behavior() {
return _super !== null && _super.apply(this, arguments) || this;
}
return Behavior;
}(PluginStateObject.CreateBehavior({ name: 'Behavior' })));
PluginBehavior.Behavior = Behavior;
PluginBehavior.Categories = {
'common': 'Common',
'representation': 'Representation',
'interaction': 'Interaction',
'custom-props': 'Custom Properties',
'misc': 'Miscellaneous'
};
PluginBehavior.CreateCategory = PluginStateTransform.BuiltIn({
name: 'create-behavior-category',
display: { name: 'Behavior Category' },
from: Root,
to: Category,
params: {
label: ParamDefinition.Text('', { isHidden: true }),
}
})({
apply: function (_a) {
var params = _a.params;
return new Category({}, { label: params.label });
}
});
var categoryMap = new Map();
function getCategoryId(t) {
return categoryMap.get(t.id);
}
PluginBehavior.getCategoryId = getCategoryId;
function create(params) {
var t = PluginStateTransform.CreateBuiltIn({
name: params.name,
display: params.display,
from: [Root],
to: [Behavior],
params: params.params,
apply: function (_a, ctx) {
var p = _a.params;
var label = params.label ? params.label(p) : { label: params.display.name, description: params.display.description };
return new Behavior(new params.ctor(ctx, p), label);
},
update: function (_a) {
var _this = this;
var b = _a.b, newParams = _a.newParams;
return Task.create('Update Behavior', function () { return __awaiter(_this, void 0, void 0, function () {
var updated;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!b.data.update)
return [2 /*return*/, StateTransformer.UpdateResult.Unchanged];
return [4 /*yield*/, b.data.update(newParams)];
case 1:
updated = _a.sent();
return [2 /*return*/, updated ? StateTransformer.UpdateResult.Updated : StateTransformer.UpdateResult.Unchanged];
}
});
}); });
},
canAutoUpdate: params.canAutoUpdate
});
categoryMap.set(t.id, params.category);
return t;
}
PluginBehavior.create = create;
function simpleCommandHandler(cmd, action) {
return /** @class */ (function () {
// TODO can't be private due to bug with generating declerations, see https://github.com/Microsoft/TypeScript/issues/17293
function class_1(/** private */ ctx) {
this.ctx = ctx;
// TODO can't be private due to bug with generating declerations, see https://github.com/Microsoft/TypeScript/issues/17293
/** private */ this.sub = void 0;
}
class_1.prototype.register = function () {
var _this = this;
this.sub = cmd.subscribe(this.ctx, function (data) { return action(data, _this.ctx); });
};
class_1.prototype.unregister = function () {
if (this.sub)
this.sub.unsubscribe();
this.sub = void 0;
};
return class_1;
}());
}
PluginBehavior.simpleCommandHandler = simpleCommandHandler;
var Handler = /** @class */ (function () {
function Handler(ctx, params) {
this.ctx = ctx;
this.params = params;
this.subs = [];
}
Handler.prototype.subscribeCommand = function (cmd, action) {
this.subs.push(cmd.subscribe(this.ctx, action));
};
Handler.prototype.subscribeObservable = function (o, action) {
this.subs.push(o.subscribe(action));
};
Handler.prototype.track = function (sub) {
this.subs.push(sub);
};
Handler.prototype.unregister = function () {
for (var _i = 0, _a = this.subs; _i < _a.length; _i++) {
var s = _a[_i];
s.unsubscribe();
}
this.subs = [];
};
Handler.prototype.update = function (params) {
if (shallowEqualObjects(params, this.params))
return false;
this.params = params;
return true;
};
return Handler;
}());
PluginBehavior.Handler = Handler;
var WithSubscribers = /** @class */ (function () {
function WithSubscribers(plugin, params) {
this.plugin = plugin;
this.params = params;
this.subs = [];
}
WithSubscribers.prototype.subscribeCommand = function (cmd, action) {
this.subs.push(cmd.subscribe(this.plugin, action));
};
WithSubscribers.prototype.subscribeObservable = function (o, action) {
this.subs.push(o.subscribe(action));
};
WithSubscribers.prototype.unregister = function () {
for (var _i = 0, _a = this.subs; _i < _a.length; _i++) {
var s = _a[_i];
s.unsubscribe();
}
this.subs = [];
};
return WithSubscribers;
}());
PluginBehavior.WithSubscribers = WithSubscribers;
})(PluginBehavior || (PluginBehavior = {}));
//# sourceMappingURL=behavior.js.map