@antv/x6
Version:
JavaScript diagramming library that uses SVG and HTML for rendering
74 lines • 2.25 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Events = void 0;
const function_1 = require("../function");
const util_1 = require("./util");
class Events {
constructor() {
this.listeners = {};
}
on(name, handler, context) {
if (handler == null) {
return this;
}
if (!this.listeners[name]) {
this.listeners[name] = [];
}
const cache = this.listeners[name];
cache.push(handler, context);
return this;
}
once(name, handler, context) {
const cb = (...args) => {
this.off(name, cb);
return (0, util_1.call)([handler, context], args);
};
return this.on(name, cb, this);
}
off(name, handler, context) {
// remove all events.
if (!(name || handler || context)) {
this.listeners = {};
return this;
}
const listeners = this.listeners;
const names = name ? [name] : Object.keys(listeners);
names.forEach((n) => {
const cache = listeners[n];
if (!cache) {
return;
}
// remove all events with specified name.
if (!(handler || context)) {
delete listeners[n];
return;
}
for (let i = cache.length - 2; i >= 0; i -= 2) {
if (!((handler && cache[i] !== handler) ||
(context && cache[i + 1] !== context))) {
cache.splice(i, 2);
}
}
});
return this;
}
trigger(name, ...args) {
let returned = true;
if (name !== '*') {
const list = this.listeners[name];
if (list != null) {
returned = (0, util_1.call)([...list], args);
}
}
const list = this.listeners['*'];
if (list != null) {
return (0, function_1.toAsyncBoolean)([returned, (0, util_1.call)([...list], [name, ...args])]);
}
return returned;
}
emit(name, ...args) {
return this.trigger(name, ...args);
}
}
exports.Events = Events;
//# sourceMappingURL=events.js.map