dissemination
Version:
Lightweight event/command library created to replace Backbone.Radio
85 lines (71 loc) • 2.22 kB
JavaScript
;
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;