Built motion from commit 6a09e18b.|2.6.11
[motion2.git] / legacy-libs / @protobufjs / eventemitter / index.js
1 "use strict";\r
2 module.exports = EventEmitter;\r
3 \r
4 /**\r
5  * Constructs a new event emitter instance.\r
6  * @classdesc A minimal event emitter.\r
7  * @memberof util\r
8  * @constructor\r
9  */\r
10 function EventEmitter() {\r
11 \r
12     /**\r
13      * Registered listeners.\r
14      * @type {Object.<string,*>}\r
15      * @private\r
16      */\r
17     this._listeners = {};\r
18 }\r
19 \r
20 /**\r
21  * Registers an event listener.\r
22  * @param {string} evt Event name\r
23  * @param {function} fn Listener\r
24  * @param {*} [ctx] Listener context\r
25  * @returns {util.EventEmitter} `this`\r
26  */\r
27 EventEmitter.prototype.on = function on(evt, fn, ctx) {\r
28     (this._listeners[evt] || (this._listeners[evt] = [])).push({\r
29         fn  : fn,\r
30         ctx : ctx || this\r
31     });\r
32     return this;\r
33 };\r
34 \r
35 /**\r
36  * Removes an event listener or any matching listeners if arguments are omitted.\r
37  * @param {string} [evt] Event name. Removes all listeners if omitted.\r
38  * @param {function} [fn] Listener to remove. Removes all listeners of `evt` if omitted.\r
39  * @returns {util.EventEmitter} `this`\r
40  */\r
41 EventEmitter.prototype.off = function off(evt, fn) {\r
42     if (evt === undefined)\r
43         this._listeners = {};\r
44     else {\r
45         if (fn === undefined)\r
46             this._listeners[evt] = [];\r
47         else {\r
48             var listeners = this._listeners[evt];\r
49             for (var i = 0; i < listeners.length;)\r
50                 if (listeners[i].fn === fn)\r
51                     listeners.splice(i, 1);\r
52                 else\r
53                     ++i;\r
54         }\r
55     }\r
56     return this;\r
57 };\r
58 \r
59 /**\r
60  * Emits an event by calling its listeners with the specified arguments.\r
61  * @param {string} evt Event name\r
62  * @param {...*} args Arguments\r
63  * @returns {util.EventEmitter} `this`\r
64  */\r
65 EventEmitter.prototype.emit = function emit(evt) {\r
66     var listeners = this._listeners[evt];\r
67     if (listeners) {\r
68         var args = [],\r
69             i = 1;\r
70         for (; i < arguments.length;)\r
71             args.push(arguments[i++]);\r
72         for (i = 0; i < listeners.length;)\r
73             listeners[i].fn.apply(listeners[i++].ctx, args);\r
74     }\r
75     return this;\r
76 };\r