utila
Version:
notareplacementforunderscore
123 lines (107 loc) • 3.1 kB
JavaScript
// Generated by CoffeeScript 1.6.3
var Emitter;
module.exports = Emitter = (function() {
function Emitter() {
this._listeners = {};
this._listenersForAnyEvent = [];
this._emittersToPipeTo = [];
this._emittersSubscribedTo = [];
}
Emitter.prototype.on = function(eventName, listener) {
if (this._listeners[eventName] == null) {
this._listeners[eventName] = [];
}
this._listeners[eventName].push(listener);
return this;
};
Emitter.prototype.once = function(eventName, listener) {
var cb, ran,
_this = this;
ran = false;
cb = function() {
if (ran) {
return;
}
ran = true;
listener();
return setTimeout(function() {
return _this.off(eventName, cb);
}, 0);
};
this.on(eventName, cb);
return this;
};
Emitter.prototype.onAnyEvent = function(listener) {
this._listenersForAnyEvent.push(listener);
return this;
};
Emitter.prototype.off = function(eventName, listener) {
var events, index;
if (this._listeners[eventName] == null) {
return this;
}
events = this._listeners[eventName];
index = events.indexOf(listener);
events.splice(index, 1);
return this;
};
Emitter.prototype.removeListeners = function(eventName) {
if (this._listeners[eventName] == null) {
return this;
}
this._listeners[eventName].length = 0;
return this;
};
Emitter.prototype.removeAllListeners = function() {
var listeners, name, _ref;
_ref = this._listeners;
for (name in _ref) {
listeners = _ref[name];
listeners.length = 0;
}
return this;
};
Emitter.prototype._emit = function(eventName, data) {
var emitter, listener, _i, _j, _k, _len, _len1, _len2, _ref, _ref1, _ref2;
_ref = this._emittersToPipeTo;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
emitter = _ref[_i];
emitter._emit(eventName, data);
}
_ref1 = this._listenersForAnyEvent;
for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
listener = _ref1[_j];
listener.call(this, data, eventName);
}
if (this._listeners[eventName] == null) {
return;
}
_ref2 = this._listeners[eventName];
for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {
listener = _ref2[_k];
listener.call(this, data);
}
};
Emitter.prototype.pipe = function(emitter) {
this._emittersToPipeTo.push(emitter);
emitter._emittersSubscribedTo.push(this);
return this;
};
Emitter.prototype.createPipedEmitter = function() {
return (new Emitter).subscribe(this);
};
Emitter.prototype.unpipe = function(emitter) {
this._emittersToPipeTo.splice(this._emittersToPipeTo.indexOf(emitter), 1);
emitter._emittersSubscribedTo.splice(emitter._emittersSubscribedTo.indexOf(this), 1);
return this;
};
Emitter.prototype.subscribe = function(emitter) {
emitter.pipe(this);
return this;
};
Emitter.prototype.unsubscribe = function(emitter) {
emitter.unpipe(this);
return this;
};
return Emitter;
})();