diff options
Diffstat (limited to 'node_modules/utila/lib/Emitter.js')
| -rw-r--r-- | node_modules/utila/lib/Emitter.js | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/node_modules/utila/lib/Emitter.js b/node_modules/utila/lib/Emitter.js new file mode 100644 index 00000000..3a67ed19 --- /dev/null +++ b/node_modules/utila/lib/Emitter.js @@ -0,0 +1,137 @@ +// Generated by CoffeeScript 1.6.3 +var Emitter, array; + +array = require('./array'); + +module.exports = Emitter = (function() { + function Emitter() { + this._listeners = {}; + this._listenersForAnyEvent = []; + this._disabledEmitters = {}; + } + + 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.removeEvent(eventName, cb); + }, 0); + }; + this.on(eventName, cb); + return this; + }; + + Emitter.prototype.onAnyEvent = function(listener) { + this._listenersForAnyEvent.push(listener); + return this; + }; + + Emitter.prototype.removeEvent = function(eventName, listener) { + if (this._listeners[eventName] == null) { + return this; + } + array.pluckOneItem(this._listeners[eventName], listener); + 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 listener, _i, _j, _len, _len1, _ref, _ref1; + _ref = this._listenersForAnyEvent; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + listener = _ref[_i]; + listener.call(this, data, eventName); + } + if (this._listeners[eventName] == null) { + return; + } + _ref1 = this._listeners[eventName]; + for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) { + listener = _ref1[_j]; + listener.call(this, data); + } + }; + + Emitter.prototype._throttleEmitterMethod = function(fnName, time) { + var lastCallArgs, originalFn, pend, pending, runIt, timer, + _this = this; + if (time == null) { + time = 1000; + } + originalFn = this[fnName]; + if (typeof originalFn !== 'function') { + throw Error("this class does not have a method called '" + fnName + "'"); + } + lastCallArgs = null; + pending = false; + timer = null; + this[fnName] = function() { + lastCallArgs = arguments; + return pend(); + }; + pend = function() { + if (pending) { + clearTimeout(timer); + } + timer = setTimeout(runIt, time); + return pending = true; + }; + return runIt = function() { + pending = false; + return originalFn.apply(_this, lastCallArgs); + }; + }; + + Emitter.prototype._disableEmitter = function(fnName) { + if (this._disabledEmitters[fnName] != null) { + throw Error("" + fnName + " is already a disabled emitter"); + } + this._disabledEmitters[fnName] = this[fnName]; + return this[fnName] = function() {}; + }; + + Emitter.prototype._enableEmitter = function(fnName) { + var fn; + fn = this._disabledEmitters[fnName]; + if (fn == null) { + throw Error("" + fnName + " is not a disabled emitter"); + } + this[fnName] = fn; + return delete this._disabledEmitters[fnName]; + }; + + return Emitter; + +})(); |
