1 | // Generated by CoffeeScript 1.6.3
|
---|
2 | var Emitter, array;
|
---|
3 |
|
---|
4 | array = require('./array');
|
---|
5 |
|
---|
6 | module.exports = Emitter = (function() {
|
---|
7 | function Emitter() {
|
---|
8 | this._listeners = {};
|
---|
9 | this._listenersForAnyEvent = [];
|
---|
10 | this._disabledEmitters = {};
|
---|
11 | }
|
---|
12 |
|
---|
13 | Emitter.prototype.on = function(eventName, listener) {
|
---|
14 | if (this._listeners[eventName] == null) {
|
---|
15 | this._listeners[eventName] = [];
|
---|
16 | }
|
---|
17 | this._listeners[eventName].push(listener);
|
---|
18 | return this;
|
---|
19 | };
|
---|
20 |
|
---|
21 | Emitter.prototype.once = function(eventName, listener) {
|
---|
22 | var cb, ran,
|
---|
23 | _this = this;
|
---|
24 | ran = false;
|
---|
25 | cb = function() {
|
---|
26 | if (ran) {
|
---|
27 | return;
|
---|
28 | }
|
---|
29 | ran = true;
|
---|
30 | listener();
|
---|
31 | return setTimeout(function() {
|
---|
32 | return _this.removeEvent(eventName, cb);
|
---|
33 | }, 0);
|
---|
34 | };
|
---|
35 | this.on(eventName, cb);
|
---|
36 | return this;
|
---|
37 | };
|
---|
38 |
|
---|
39 | Emitter.prototype.onAnyEvent = function(listener) {
|
---|
40 | this._listenersForAnyEvent.push(listener);
|
---|
41 | return this;
|
---|
42 | };
|
---|
43 |
|
---|
44 | Emitter.prototype.removeEvent = function(eventName, listener) {
|
---|
45 | if (this._listeners[eventName] == null) {
|
---|
46 | return this;
|
---|
47 | }
|
---|
48 | array.pluckOneItem(this._listeners[eventName], listener);
|
---|
49 | return this;
|
---|
50 | };
|
---|
51 |
|
---|
52 | Emitter.prototype.removeListeners = function(eventName) {
|
---|
53 | if (this._listeners[eventName] == null) {
|
---|
54 | return this;
|
---|
55 | }
|
---|
56 | this._listeners[eventName].length = 0;
|
---|
57 | return this;
|
---|
58 | };
|
---|
59 |
|
---|
60 | Emitter.prototype.removeAllListeners = function() {
|
---|
61 | var listeners, name, _ref;
|
---|
62 | _ref = this._listeners;
|
---|
63 | for (name in _ref) {
|
---|
64 | listeners = _ref[name];
|
---|
65 | listeners.length = 0;
|
---|
66 | }
|
---|
67 | return this;
|
---|
68 | };
|
---|
69 |
|
---|
70 | Emitter.prototype._emit = function(eventName, data) {
|
---|
71 | var listener, _i, _j, _len, _len1, _ref, _ref1;
|
---|
72 | _ref = this._listenersForAnyEvent;
|
---|
73 | for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
---|
74 | listener = _ref[_i];
|
---|
75 | listener.call(this, data, eventName);
|
---|
76 | }
|
---|
77 | if (this._listeners[eventName] == null) {
|
---|
78 | return;
|
---|
79 | }
|
---|
80 | _ref1 = this._listeners[eventName];
|
---|
81 | for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
|
---|
82 | listener = _ref1[_j];
|
---|
83 | listener.call(this, data);
|
---|
84 | }
|
---|
85 | };
|
---|
86 |
|
---|
87 | Emitter.prototype._throttleEmitterMethod = function(fnName, time) {
|
---|
88 | var lastCallArgs, originalFn, pend, pending, runIt, timer,
|
---|
89 | _this = this;
|
---|
90 | if (time == null) {
|
---|
91 | time = 1000;
|
---|
92 | }
|
---|
93 | originalFn = this[fnName];
|
---|
94 | if (typeof originalFn !== 'function') {
|
---|
95 | throw Error("this class does not have a method called '" + fnName + "'");
|
---|
96 | }
|
---|
97 | lastCallArgs = null;
|
---|
98 | pending = false;
|
---|
99 | timer = null;
|
---|
100 | this[fnName] = function() {
|
---|
101 | lastCallArgs = arguments;
|
---|
102 | return pend();
|
---|
103 | };
|
---|
104 | pend = function() {
|
---|
105 | if (pending) {
|
---|
106 | clearTimeout(timer);
|
---|
107 | }
|
---|
108 | timer = setTimeout(runIt, time);
|
---|
109 | return pending = true;
|
---|
110 | };
|
---|
111 | return runIt = function() {
|
---|
112 | pending = false;
|
---|
113 | return originalFn.apply(_this, lastCallArgs);
|
---|
114 | };
|
---|
115 | };
|
---|
116 |
|
---|
117 | Emitter.prototype._disableEmitter = function(fnName) {
|
---|
118 | if (this._disabledEmitters[fnName] != null) {
|
---|
119 | throw Error("" + fnName + " is already a disabled emitter");
|
---|
120 | }
|
---|
121 | this._disabledEmitters[fnName] = this[fnName];
|
---|
122 | return this[fnName] = function() {};
|
---|
123 | };
|
---|
124 |
|
---|
125 | Emitter.prototype._enableEmitter = function(fnName) {
|
---|
126 | var fn;
|
---|
127 | fn = this._disabledEmitters[fnName];
|
---|
128 | if (fn == null) {
|
---|
129 | throw Error("" + fnName + " is not a disabled emitter");
|
---|
130 | }
|
---|
131 | this[fnName] = fn;
|
---|
132 | return delete this._disabledEmitters[fnName];
|
---|
133 | };
|
---|
134 |
|
---|
135 | return Emitter;
|
---|
136 |
|
---|
137 | })();
|
---|