UNPKG

@parlour/parlour-client

Version:

The parlour websocket client

60 lines (58 loc) 1.16 kB
class EventModel { constructor(data) { Object.assign(this, data); this._events = {}; } _on(name, fn) { const eventModel = this; if(!(name in eventModel._events)) { eventModel._events[name] = []; } eventModel._events[name].push(fn); return () => { eventModel.off(name, fn); }; } on() { const args = arguments; const typeOfArgs = typeof args[0]; switch(typeOfArgs) { case 'object': const eventHandlers = args[0]; const unbindFns = []; for(let key in eventHandlers) { unbindFns.push(this._on(key, eventHandlers[key])); } return () => { for(let i = 0; i < unbindFns.length; i++) { unbindFns[i](); } }; break; case 'string': return this._on(args[0], args[1]); break; default: break; } } off(name, fn) { const fns = this._events[name]; if(Array.isArray(fns)) { const index = fns.indexOf(fn); if(index >= 0) { fns.splice(index, 1); } } } trigger(name, args) { const fns = this._events[name]; if(Array.isArray(fns)) { for(let i = 0; i < fns.length; i++) { let fn = fns[i]; fn.apply(this, args); } } } } export default EventModel;