aboutsummaryrefslogtreecommitdiff
path: root/atom/packages/ex-mode/node_modules/event-kit/lib/emitter.js
diff options
context:
space:
mode:
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.js80
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);