You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					68 lines
				
				1.6 KiB
			
		
		
			
		
	
	
					68 lines
				
				1.6 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								function E () {
							 | 
						||
| 
								 | 
							
								  // Keep this empty so it's easier to inherit from
							 | 
						||
| 
								 | 
							
								  // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								E.prototype = {
							 | 
						||
| 
								 | 
							
								  on: function (name, callback, ctx) {
							 | 
						||
| 
								 | 
							
								    var e = this.e || (this.e = {});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    (e[name] || (e[name] = [])).push({
							 | 
						||
| 
								 | 
							
								      fn: callback,
							 | 
						||
| 
								 | 
							
								      ctx: ctx
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return this;
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  once: function (name, callback, ctx) {
							 | 
						||
| 
								 | 
							
								    var self = this;
							 | 
						||
| 
								 | 
							
								    function listener () {
							 | 
						||
| 
								 | 
							
								      self.off(name, listener);
							 | 
						||
| 
								 | 
							
								      callback.apply(ctx, arguments);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    listener._ = callback
							 | 
						||
| 
								 | 
							
								    return this.on(name, listener, ctx);
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  emit: function (name) {
							 | 
						||
| 
								 | 
							
								    var data = [].slice.call(arguments, 1);
							 | 
						||
| 
								 | 
							
								    var evtArr = ((this.e || (this.e = {}))[name] || []).slice();
							 | 
						||
| 
								 | 
							
								    var i = 0;
							 | 
						||
| 
								 | 
							
								    var len = evtArr.length;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    for (i; i < len; i++) {
							 | 
						||
| 
								 | 
							
								      evtArr[i].fn.apply(evtArr[i].ctx, data);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return this;
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  off: function (name, callback) {
							 | 
						||
| 
								 | 
							
								    var e = this.e || (this.e = {});
							 | 
						||
| 
								 | 
							
								    var evts = e[name];
							 | 
						||
| 
								 | 
							
								    var liveEvents = [];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (evts && callback) {
							 | 
						||
| 
								 | 
							
								      for (var i = 0, len = evts.length; i < len; i++) {
							 | 
						||
| 
								 | 
							
								        if (evts[i].fn !== callback && evts[i].fn._ !== callback)
							 | 
						||
| 
								 | 
							
								          liveEvents.push(evts[i]);
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // Remove event from queue to prevent memory leak
							 | 
						||
| 
								 | 
							
								    // Suggested by https://github.com/lazd
							 | 
						||
| 
								 | 
							
								    // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    (liveEvents.length)
							 | 
						||
| 
								 | 
							
								      ? e[name] = liveEvents
							 | 
						||
| 
								 | 
							
								      : delete e[name];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return this;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								module.exports = E;
							 | 
						||
| 
								 | 
							
								module.exports.TinyEmitter = E;
							 |