| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 | // Generated by CoffeeScript 1.6.3var 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;})();
 |