diff options
| author | Ben Beltran <ben@nsovocal.com> | 2015-07-10 11:12:25 -0500 |
|---|---|---|
| committer | Ben Beltran <ben@nsovocal.com> | 2015-07-10 11:12:25 -0500 |
| commit | 24c7594d62d8d7fbbcdb64b11ce4adc5d8e6991a (patch) | |
| tree | ded312222bb108923da1820ba40b04d710d20e5b /atom/packages/ex-mode/node_modules/event-kit/lib/emitter.js | |
| parent | eb786e82d170e2abc351a432ade616d6ecdeeb6b (diff) | |
Adds atom
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); |