UNPKG

motion

Version:

motion - moving development forward

64 lines (61 loc) 1.7 kB
'use babel' import {Disposable} from './disposable' export class Emitter { constructor() { this.disposed = false this.handlers = {} } dispose(){ this.disposed = true this.handlers = null } on(eventName, handler){ if (this.disposed) { throw new Error('Emitter has been disposed') } if (typeof handler !== 'function') { throw new Error('Event handler must be a function') } if (typeof this.handlers[eventName] === 'undefined') { this.handlers[eventName] = [handler] } else { this.handlers[eventName].push(handler) } return new Disposable(() => { this.off(eventName, handler) }) } off(eventName, handler){ if (this.disposed || typeof this.handlers[eventName] === 'undefined') { return } const index = this.handlers[eventName].indexOf(handler) if (index !== -1) { this.handlers[eventName].splice(index, 1) } } clear() { this.handlers = [] } emit(eventName, ...params){ if (this.disposed || typeof this.handlers[eventName] === 'undefined') { return } const paramsLength = params.length this.handlers[eventName].forEach(function(callback) { if (paramsLength === 1) { callback(params[0]) } else if (paramsLength === 2) { callback(params[0], params[1]) } else if (paramsLength === 3) { callback(params[0], params[1], params[2]) } else if (paramsLength === 4) { callback(params[0], params[1], params[2], params[3]) } else if (paramsLength === 5) { callback(params[0], params[1], params[2], params[3], params[4]) } else { callback(...params) } }) } }