UNPKG

dissemination

Version:

Lightweight event/command library created to replace Backbone.Radio

85 lines (71 loc) 2.22 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var EventMixin = { on: function on(name, listener) { var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var once = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; if (!this._listeners) { this._listeners = {}; } if (!this._listeners[name]) { this._listeners[name] = []; } this._listeners[name].push({ listener: listener, options: options, once: !!once }); }, once: function once(name, listener, options) { this.on(name, listener, options, true); }, off: function off(name, listener) { if (!this.listenersRegistered(name)) { throw new TypeError("Listeners for event \"".concat(name, "\" are not registered.")); } if (listener === undefined) { // Removing all listeners for a given event delete this._listeners[name]; return; } var index = this._listeners[name].findIndex(function (item) { return item.listener === listener; }); if (index === -1) { throw new TypeError("Specified listener for event \"".concat(name, "\" is not registered.")); } this._listeners[name].splice(index, 1); if (this._listeners[name].length === 0) { delete this._listeners[name]; } }, fire: function fire(name) { var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; if (!this._listeners || !this._listeners[name]) { return; } var listeners = this._listeners[name]; for (var i = 0; i < listeners.length; i++) { var item = listeners[i]; var listener = item.listener, options = item.options, _item$once = item.once, once = _item$once === void 0 ? false : _item$once; if (once) { listeners.splice(i, 1); i--; } if (listener(params, options) === false) { break; } } }, listenersRegistered: function listenersRegistered(name) { return this._listeners && !!this._listeners[name]; } }; var _default = EventMixin; exports["default"] = _default;