UNPKG

utila

Version:
123 lines (107 loc) 3.1 kB
// 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; })();