Built motion from commit 6a09e18b.|2.6.11
[motion2.git] / legacy-libs / @protobufjs / eventemitter / index.js
diff --git a/legacy-libs/@protobufjs/eventemitter/index.js b/legacy-libs/@protobufjs/eventemitter/index.js
new file mode 100644 (file)
index 0000000..76ce938
--- /dev/null
@@ -0,0 +1,76 @@
+"use strict";\r
+module.exports = EventEmitter;\r
+\r
+/**\r
+ * Constructs a new event emitter instance.\r
+ * @classdesc A minimal event emitter.\r
+ * @memberof util\r
+ * @constructor\r
+ */\r
+function EventEmitter() {\r
+\r
+    /**\r
+     * Registered listeners.\r
+     * @type {Object.<string,*>}\r
+     * @private\r
+     */\r
+    this._listeners = {};\r
+}\r
+\r
+/**\r
+ * Registers an event listener.\r
+ * @param {string} evt Event name\r
+ * @param {function} fn Listener\r
+ * @param {*} [ctx] Listener context\r
+ * @returns {util.EventEmitter} `this`\r
+ */\r
+EventEmitter.prototype.on = function on(evt, fn, ctx) {\r
+    (this._listeners[evt] || (this._listeners[evt] = [])).push({\r
+        fn  : fn,\r
+        ctx : ctx || this\r
+    });\r
+    return this;\r
+};\r
+\r
+/**\r
+ * Removes an event listener or any matching listeners if arguments are omitted.\r
+ * @param {string} [evt] Event name. Removes all listeners if omitted.\r
+ * @param {function} [fn] Listener to remove. Removes all listeners of `evt` if omitted.\r
+ * @returns {util.EventEmitter} `this`\r
+ */\r
+EventEmitter.prototype.off = function off(evt, fn) {\r
+    if (evt === undefined)\r
+        this._listeners = {};\r
+    else {\r
+        if (fn === undefined)\r
+            this._listeners[evt] = [];\r
+        else {\r
+            var listeners = this._listeners[evt];\r
+            for (var i = 0; i < listeners.length;)\r
+                if (listeners[i].fn === fn)\r
+                    listeners.splice(i, 1);\r
+                else\r
+                    ++i;\r
+        }\r
+    }\r
+    return this;\r
+};\r
+\r
+/**\r
+ * Emits an event by calling its listeners with the specified arguments.\r
+ * @param {string} evt Event name\r
+ * @param {...*} args Arguments\r
+ * @returns {util.EventEmitter} `this`\r
+ */\r
+EventEmitter.prototype.emit = function emit(evt) {\r
+    var listeners = this._listeners[evt];\r
+    if (listeners) {\r
+        var args = [],\r
+            i = 1;\r
+        for (; i < arguments.length;)\r
+            args.push(arguments[i++]);\r
+        for (i = 0; i < listeners.length;)\r
+            listeners[i].fn.apply(listeners[i++].ctx, args);\r
+    }\r
+    return this;\r
+};\r