diff options
Diffstat (limited to 'atom/packages/ex-mode/node_modules/event-kit/lib/emitter.js')
| -rw-r--r-- | atom/packages/ex-mode/node_modules/event-kit/lib/emitter.js | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/atom/packages/ex-mode/node_modules/event-kit/lib/emitter.js b/atom/packages/ex-mode/node_modules/event-kit/lib/emitter.js new file mode 100644 index 0000000..1c8336a --- /dev/null +++ b/atom/packages/ex-mode/node_modules/event-kit/lib/emitter.js @@ -0,0 +1,80 @@ +(function() { + var Disposable, Emitter; + + Disposable = require('./disposable'); + + module.exports = Emitter = (function() { + Emitter.prototype.isDisposed = false; + + + /* + Section: Construction and Destruction + */ + + function Emitter() { + this.handlersByEventName = {}; + } + + Emitter.prototype.dispose = function() { + this.handlersByEventName = null; + return this.isDisposed = true; + }; + + + /* + Section: Event Subscription + */ + + Emitter.prototype.on = function(eventName, handler) { + var currentHandlers; + if (this.isDisposed) { + throw new Error("Emitter has been disposed"); + } + if (typeof handler !== 'function') { + throw new Error("Handler must be a function"); + } + if (currentHandlers = this.handlersByEventName[eventName]) { + this.handlersByEventName[eventName] = currentHandlers.concat(handler); + } else { + this.handlersByEventName[eventName] = [handler]; + } + return new Disposable(this.off.bind(this, eventName, handler)); + }; + + Emitter.prototype.off = function(eventName, handlerToRemove) { + var handler, newHandlers, oldHandlers, _i, _len; + if (this.isDisposed) { + return; + } + if (oldHandlers = this.handlersByEventName[eventName]) { + newHandlers = []; + for (_i = 0, _len = oldHandlers.length; _i < _len; _i++) { + handler = oldHandlers[_i]; + if (handler !== handlerToRemove) { + newHandlers.push(handler); + } + } + return this.handlersByEventName[eventName] = newHandlers; + } + }; + + + /* + Section: Event Emission + */ + + Emitter.prototype.emit = function(eventName, value) { + var handler, handlers, _i, _len, _ref; + if (handlers = (_ref = this.handlersByEventName) != null ? _ref[eventName] : void 0) { + for (_i = 0, _len = handlers.length; _i < _len; _i++) { + handler = handlers[_i]; + handler(value); + } + } + }; + + return Emitter; + + })(); + +}).call(this); |