30 lines
942 B
JavaScript
30 lines
942 B
JavaScript
function CatEmitter() { }
|
|
CatEmitter.prototype._listeners = {};
|
|
CatEmitter.prototype.on = function(name, cb) {
|
|
if (!this._listeners[name]) this._listeners[name] = [];
|
|
for (let i = 0; i < this._listeners[name].length; i++) {
|
|
if (this._listeners[name][i] === cb) return false; // already exists
|
|
}
|
|
this._listeners[name].push(cb);
|
|
return true;
|
|
}
|
|
CatEmitter.prototype.removeListener = function(name, cb) {
|
|
if (!this._listeners[name]) return;
|
|
for (let i = 0; i < this._listeners[name].length; i++) {
|
|
if (this._listeners[name][i] === cb) {
|
|
this._listeners[name].splice(i, 1);
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
CatEmitter.prototype.emit = function(name, data) {
|
|
if (!this._listeners[name]) return;
|
|
for (let i = 0; i < this._listeners[name].length; i++) {
|
|
if (this._listeners[name][i](data) === false) return false; // exit early if false is returned
|
|
}
|
|
return true;
|
|
}
|
|
|
|
module.exports = CatEmitter;
|