|  |  |  | /* global window, Event, textsecure */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* | 
					
						
							|  |  |  |  * Implements EventTarget | 
					
						
							|  |  |  |  * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget
 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | // eslint-disable-next-line func-names
 | 
					
						
							|  |  |  | (function() { | 
					
						
							|  |  |  |   window.textsecure = window.textsecure || {}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   function EventTarget() {} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   EventTarget.prototype = { | 
					
						
							|  |  |  |     constructor: EventTarget, | 
					
						
							|  |  |  |     dispatchEvent(ev) { | 
					
						
							|  |  |  |       if (!(ev instanceof Event)) { | 
					
						
							|  |  |  |         throw new Error('Expects an event'); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       if (this.listeners === null || typeof this.listeners !== 'object') { | 
					
						
							|  |  |  |         this.listeners = {}; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       const listeners = this.listeners[ev.type]; | 
					
						
							|  |  |  |       const results = []; | 
					
						
							|  |  |  |       if (typeof listeners === 'object') { | 
					
						
							|  |  |  |         for (let i = 0, max = listeners.length; i < max; i += 1) { | 
					
						
							|  |  |  |           const listener = listeners[i]; | 
					
						
							|  |  |  |           if (typeof listener === 'function') { | 
					
						
							|  |  |  |             results.push(listener.call(null, ev)); | 
					
						
							|  |  |  |           } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       return results; | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     addEventListener(eventName, callback) { | 
					
						
							|  |  |  |       if (typeof eventName !== 'string') { | 
					
						
							|  |  |  |         throw new Error('First argument expects a string'); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       if (typeof callback !== 'function') { | 
					
						
							|  |  |  |         throw new Error('Second argument expects a function'); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       if (this.listeners === null || typeof this.listeners !== 'object') { | 
					
						
							|  |  |  |         this.listeners = {}; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       let listeners = this.listeners[eventName]; | 
					
						
							|  |  |  |       if (typeof listeners !== 'object') { | 
					
						
							|  |  |  |         listeners = []; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       listeners.push(callback); | 
					
						
							|  |  |  |       this.listeners[eventName] = listeners; | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     removeEventListener(eventName, callback) { | 
					
						
							|  |  |  |       if (typeof eventName !== 'string') { | 
					
						
							|  |  |  |         throw new Error('First argument expects a string'); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       if (typeof callback !== 'function') { | 
					
						
							|  |  |  |         throw new Error('Second argument expects a function'); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       if (this.listeners === null || typeof this.listeners !== 'object') { | 
					
						
							|  |  |  |         this.listeners = {}; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       const listeners = this.listeners[eventName]; | 
					
						
							|  |  |  |       if (typeof listeners === 'object') { | 
					
						
							|  |  |  |         for (let i = 0; i < listeners.length; i += 1) { | 
					
						
							|  |  |  |           if (listeners[i] === callback) { | 
					
						
							|  |  |  |             listeners.splice(i, 1); | 
					
						
							|  |  |  |             return; | 
					
						
							|  |  |  |           } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       this.listeners[eventName] = listeners; | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     extend(obj) { | 
					
						
							|  |  |  |       // eslint-disable-next-line no-restricted-syntax, guard-for-in
 | 
					
						
							|  |  |  |       for (const prop in obj) { | 
					
						
							|  |  |  |         this[prop] = obj[prop]; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       return this; | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   textsecure.EventTarget = EventTarget; | 
					
						
							|  |  |  | })(); |