@logicflow/core
Version:
LogicFlow, help you quickly create flowcharts
94 lines (93 loc) • 3.26 kB
JavaScript
var WILDCARD = '*';
/* event-emitter */
var EventEmitter = /** @class */ (function () {
function EventEmitter() {
this._events = {};
}
EventEmitter.prototype.on = function (evt, callback, once) {
var _this = this;
evt === null || evt === void 0 ? void 0 : evt.split(',').forEach(function (evKey) {
evKey = evKey.trim();
if (!_this._events[evKey]) {
_this._events[evKey] = [];
}
_this._events[evKey].push({
callback: callback,
once: !!once,
});
});
};
EventEmitter.prototype.once = function (evt, callback) {
var _this = this;
evt === null || evt === void 0 ? void 0 : evt.split(',').forEach(function (evKey) {
evKey = evKey.trim();
_this.on(evKey, callback, true);
});
};
EventEmitter.prototype.emit = function (evts, eventArgs) {
var _this = this;
evts === null || evts === void 0 ? void 0 : evts.split(',').forEach(function (evt) {
var events = _this._events[evt] || [];
var wildcardEvents = _this._events[WILDCARD] || [];
// 实际的处理 emit 方法
var doEmit = function (es) {
var length = es.length;
for (var i = 0; i < length; i++) {
if (!es[i]) {
continue;
}
var _a = es[i], callback = _a.callback, once = _a.once;
if (once) {
es.splice(i, 1);
if (es.length === 0) {
delete _this._events[evt];
}
length--;
i--;
}
callback.apply(_this, [eventArgs]);
}
};
doEmit(events);
doEmit(wildcardEvents);
});
};
EventEmitter.prototype.off = function (evts, callback) {
var _this = this;
if (!evts) {
// evt 为空全部清除
this._events = {};
}
evts.split(',').forEach(function (evt) {
if (!callback) {
// evt 存在,callback 为空,清除事件所有方法
delete _this._events[evt];
}
else {
// evt 存在,callback 存在,清除匹配的
var events = _this._events[evt] || [];
var length_1 = events.length;
for (var i = 0; i < length_1; i++) {
if (events[i].callback === callback) {
events.splice(i, 1);
length_1--;
i--;
}
}
if (events.length === 0) {
delete _this._events[evt];
}
}
});
};
/* 当前所有的事件 */
EventEmitter.prototype.getEvents = function () {
return this._events;
};
EventEmitter.prototype.destroy = function () {
this._events = {};
};
return EventEmitter;
}());
export default EventEmitter;
export { EventEmitter };