UNPKG

tiny-events

Version:

A very tiny EventEmitter implementation for client- and server-side code.

76 lines (57 loc) 1.73 kB
function EventEmitter() { this._listeners = {}; } EventEmitter.prototype.on = function _on(type, listener) { if (!Array.isArray(this._listeners[type])) { this._listeners[type] = []; } if (this._listeners[type].indexOf(listener) === -1) { this._listeners[type].push(listener); } return this; }; EventEmitter.prototype.once = function _once(type, listener) { var self = this; function __once() { for (var args = [], i = 0; i < arguments.length; i += 1) { args[i] = arguments[i]; } self.off(type, __once); listener.apply(self, args); } __once.listener = listener; return this.on(type, __once); }; EventEmitter.prototype.off = function _off(type, listener) { if (!Array.isArray(this._listeners[type])) { return this; } if (typeof listener === 'undefined') { this._listeners[type] = []; return this; } var index = this._listeners[type].indexOf(listener); if (index === -1) { for (var i = 0; i < this._listeners[type].length; i += 1) { if (this._listeners[type][i].listener === listener) { index = i; break; } } } this._listeners[type].splice(index, 1); return this; }; EventEmitter.prototype.emit = function _emit(type) { if (!Array.isArray(this._listeners[type])) { return this; } for (var args = [], i = 1; i < arguments.length; i += 1) { args[i - 1] = arguments[i]; } this._listeners[type].forEach(function __emit(listener) { listener.apply(this, args); }, this); return this; }; module.exports.EventEmitter = EventEmitter;