Bug:Fix file validation issue
[vnfsdk/refrepo.git] / vnfmarket / src / main / webapp / vnfmarket / node_modules / socket.io-client / components / component-emitter / index.js
1
2 /**
3  * Expose `Emitter`.
4  */
5
6 module.exports = Emitter;
7
8 /**
9  * Initialize a new `Emitter`.
10  * 
11  * @api public
12  */
13
14 function Emitter(obj) {
15   if (obj) return mixin(obj);
16 };
17
18 /**
19  * Mixin the emitter properties.
20  *
21  * @param {Object} obj
22  * @return {Object}
23  * @api private
24  */
25
26 function mixin(obj) {
27   for (var key in Emitter.prototype) {
28     obj[key] = Emitter.prototype[key];
29   }
30   return obj;
31 }
32
33 /**
34  * Listen on the given `event` with `fn`.
35  *
36  * @param {String} event
37  * @param {Function} fn
38  * @return {Emitter}
39  * @api public
40  */
41
42 Emitter.prototype.on = function(event, fn){
43   this._callbacks = this._callbacks || {};
44   (this._callbacks[event] = this._callbacks[event] || [])
45     .push(fn);
46   return this;
47 };
48
49 /**
50  * Adds an `event` listener that will be invoked a single
51  * time then automatically removed.
52  *
53  * @param {String} event
54  * @param {Function} fn
55  * @return {Emitter}
56  * @api public
57  */
58
59 Emitter.prototype.once = function(event, fn){
60   var self = this;
61   this._callbacks = this._callbacks || {};
62
63   function on() {
64     self.off(event, on);
65     fn.apply(this, arguments);
66   }
67
68   fn._off = on;
69   this.on(event, on);
70   return this;
71 };
72
73 /**
74  * Remove the given callback for `event` or all
75  * registered callbacks.
76  *
77  * @param {String} event
78  * @param {Function} fn
79  * @return {Emitter}
80  * @api public
81  */
82
83 Emitter.prototype.off = function(event, fn){
84   this._callbacks = this._callbacks || {};
85   var callbacks = this._callbacks[event];
86   if (!callbacks) return this;
87
88   // remove all handlers
89   if (1 == arguments.length) {
90     delete this._callbacks[event];
91     return this;
92   }
93
94   // remove specific handler
95   var i = callbacks.indexOf(fn._off || fn);
96   if (~i) callbacks.splice(i, 1);
97   return this;
98 };
99
100 /**
101  * Emit `event` with the given args.
102  *
103  * @param {String} event
104  * @param {Mixed} ...
105  * @return {Emitter} 
106  */
107
108 Emitter.prototype.emit = function(event){
109   this._callbacks = this._callbacks || {};
110   var args = [].slice.call(arguments, 1)
111     , callbacks = this._callbacks[event];
112
113   if (callbacks) {
114     callbacks = callbacks.slice(0);
115     for (var i = 0, len = callbacks.length; i < len; ++i) {
116       callbacks[i].apply(this, args);
117     }
118   }
119
120   return this;
121 };
122
123 /**
124  * Return array of callbacks for `event`.
125  *
126  * @param {String} event
127  * @return {Array}
128  * @api public
129  */
130
131 Emitter.prototype.listeners = function(event){
132   this._callbacks = this._callbacks || {};
133   return this._callbacks[event] || [];
134 };
135
136 /**
137  * Check if this emitter has `event` handlers.
138  *
139  * @param {String} event
140  * @return {Boolean}
141  * @api public
142  */
143
144 Emitter.prototype.hasListeners = function(event){
145   return !! this.listeners(event).length;
146 };
147