| 'use strict'; | 
|   | 
| var inherits = require('inherits') | 
|   , EventTarget = require('./eventtarget') | 
|   ; | 
|   | 
| function EventEmitter() { | 
|   EventTarget.call(this); | 
| } | 
|   | 
| inherits(EventEmitter, EventTarget); | 
|   | 
| EventEmitter.prototype.removeAllListeners = function(type) { | 
|   if (type) { | 
|     delete this._listeners[type]; | 
|   } else { | 
|     this._listeners = {}; | 
|   } | 
| }; | 
|   | 
| EventEmitter.prototype.once = function(type, listener) { | 
|   var self = this | 
|     , fired = false; | 
|   | 
|   function g() { | 
|     self.removeListener(type, g); | 
|   | 
|     if (!fired) { | 
|       fired = true; | 
|       listener.apply(this, arguments); | 
|     } | 
|   } | 
|   | 
|   this.on(type, g); | 
| }; | 
|   | 
| EventEmitter.prototype.emit = function() { | 
|   var type = arguments[0]; | 
|   var listeners = this._listeners[type]; | 
|   if (!listeners) { | 
|     return; | 
|   } | 
|   // equivalent of Array.prototype.slice.call(arguments, 1); | 
|   var l = arguments.length; | 
|   var args = new Array(l - 1); | 
|   for (var ai = 1; ai < l; ai++) { | 
|     args[ai - 1] = arguments[ai]; | 
|   } | 
|   for (var i = 0; i < listeners.length; i++) { | 
|     listeners[i].apply(this, args); | 
|   } | 
| }; | 
|   | 
| EventEmitter.prototype.on = EventEmitter.prototype.addListener = EventTarget.prototype.addEventListener; | 
| EventEmitter.prototype.removeListener = EventTarget.prototype.removeEventListener; | 
|   | 
| module.exports.EventEmitter = EventEmitter; |