UNPKG

3.1 kBJavaScriptView Raw
1// Generated by CoffeeScript 1.6.3
2var Emitter;
3
4module.exports = Emitter = (function() {
5 function Emitter() {
6 this._listeners = {};
7 this._listenersForAnyEvent = [];
8 this._emittersToPipeTo = [];
9 this._emittersSubscribedTo = [];
10 }
11
12 Emitter.prototype.on = function(eventName, listener) {
13 if (this._listeners[eventName] == null) {
14 this._listeners[eventName] = [];
15 }
16 this._listeners[eventName].push(listener);
17 return this;
18 };
19
20 Emitter.prototype.once = function(eventName, listener) {
21 var cb, ran,
22 _this = this;
23 ran = false;
24 cb = function() {
25 if (ran) {
26 return;
27 }
28 ran = true;
29 listener();
30 return setTimeout(function() {
31 return _this.off(eventName, cb);
32 }, 0);
33 };
34 this.on(eventName, cb);
35 return this;
36 };
37
38 Emitter.prototype.onAnyEvent = function(listener) {
39 this._listenersForAnyEvent.push(listener);
40 return this;
41 };
42
43 Emitter.prototype.off = function(eventName, listener) {
44 var events, index;
45 if (this._listeners[eventName] == null) {
46 return this;
47 }
48 events = this._listeners[eventName];
49 index = events.indexOf(listener);
50 events.splice(index, 1);
51 return this;
52 };
53
54 Emitter.prototype.removeListeners = function(eventName) {
55 if (this._listeners[eventName] == null) {
56 return this;
57 }
58 this._listeners[eventName].length = 0;
59 return this;
60 };
61
62 Emitter.prototype.removeAllListeners = function() {
63 var listeners, name, _ref;
64 _ref = this._listeners;
65 for (name in _ref) {
66 listeners = _ref[name];
67 listeners.length = 0;
68 }
69 return this;
70 };
71
72 Emitter.prototype._emit = function(eventName, data) {
73 var emitter, listener, _i, _j, _k, _len, _len1, _len2, _ref, _ref1, _ref2;
74 _ref = this._emittersToPipeTo;
75 for (_i = 0, _len = _ref.length; _i < _len; _i++) {
76 emitter = _ref[_i];
77 emitter._emit(eventName, data);
78 }
79 _ref1 = this._listenersForAnyEvent;
80 for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
81 listener = _ref1[_j];
82 listener.call(this, data, eventName);
83 }
84 if (this._listeners[eventName] == null) {
85 return;
86 }
87 _ref2 = this._listeners[eventName];
88 for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {
89 listener = _ref2[_k];
90 listener.call(this, data);
91 }
92 };
93
94 Emitter.prototype.pipe = function(emitter) {
95 this._emittersToPipeTo.push(emitter);
96 emitter._emittersSubscribedTo.push(this);
97 return this;
98 };
99
100 Emitter.prototype.createPipedEmitter = function() {
101 return (new Emitter).subscribe(this);
102 };
103
104 Emitter.prototype.unpipe = function(emitter) {
105 this._emittersToPipeTo.splice(this._emittersToPipeTo.indexOf(emitter), 1);
106 emitter._emittersSubscribedTo.splice(emitter._emittersSubscribedTo.indexOf(this), 1);
107 return this;
108 };
109
110 Emitter.prototype.subscribe = function(emitter) {
111 emitter.pipe(this);
112 return this;
113 };
114
115 Emitter.prototype.unsubscribe = function(emitter) {
116 emitter.unpipe(this);
117 return this;
118 };
119
120 return Emitter;
121
122})();