molstar
Version:
A comprehensive macromolecular library.
99 lines • 3.67 kB
JavaScript
"use strict";
/**
* Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author David Sehnal <david.sehnal@gmail.com>
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.StateActionManager = void 0;
var transformer_1 = require("../transformer");
var mol_util_1 = require("../../mol-util");
var array_1 = require("../../mol-util/array");
var rx_event_helper_1 = require("../../mol-util/rx-event-helper");
var StateActionManager = /** @class */ (function () {
function StateActionManager() {
this.ev = rx_event_helper_1.RxEventHelper.create();
this.actions = new Map();
this.fromTypeIndex = new Map();
this.events = {
added: this.ev(),
removed: this.ev(),
};
}
StateActionManager.prototype.add = function (actionOrTransformer) {
var action = transformer_1.StateTransformer.is(actionOrTransformer) ? actionOrTransformer.toAction() : actionOrTransformer;
if (this.actions.has(action.id))
return this;
this.actions.set(action.id, action);
for (var _i = 0, _a = action.definition.from; _i < _a.length; _i++) {
var t = _a[_i];
if (this.fromTypeIndex.has(t.type)) {
this.fromTypeIndex.get(t.type).push(action);
}
else {
this.fromTypeIndex.set(t.type, [action]);
}
}
this.events.added.next(void 0);
return this;
};
StateActionManager.prototype.remove = function (actionOrTransformer) {
var id = transformer_1.StateTransformer.is(actionOrTransformer)
? actionOrTransformer.toAction().id
: mol_util_1.UUID.is(actionOrTransformer)
? actionOrTransformer
: actionOrTransformer.id;
var action = this.actions.get(id);
if (!action)
return this;
this.actions.delete(id);
for (var _i = 0, _a = action.definition.from; _i < _a.length; _i++) {
var t = _a[_i];
var xs = this.fromTypeIndex.get(t.type);
if (!xs)
continue;
(0, array_1.arraySetRemove)(xs, action);
if (xs.length === 0)
this.fromTypeIndex.delete(t.type);
}
this.events.removed.next(void 0);
return this;
};
StateActionManager.prototype.fromCell = function (cell, ctx) {
var obj = cell.obj;
if (!obj)
return [];
var actions = this.fromTypeIndex.get(obj.type);
if (!actions)
return [];
var hasTest = false;
for (var _i = 0, actions_1 = actions; _i < actions_1.length; _i++) {
var a = actions_1[_i];
if (a.definition.isApplicable) {
hasTest = true;
break;
}
}
if (!hasTest)
return actions;
var ret = [];
for (var _a = 0, actions_2 = actions; _a < actions_2.length; _a++) {
var a = actions_2[_a];
if (a.definition.isApplicable) {
if (a.definition.isApplicable(obj, cell.transform, ctx)) {
ret.push(a);
}
}
else {
ret.push(a);
}
}
return ret;
};
StateActionManager.prototype.dispose = function () {
this.ev.dispose();
};
return StateActionManager;
}());
exports.StateActionManager = StateActionManager;
//# sourceMappingURL=manager.js.map