theatre-events
Version:
A full implementation of a standard event dispatcher for javascript
80 lines • 2.71 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var event_listener_1 = require("./../event-listener");
/**
* Dispatch events synchronously through your application.
*/
var SynchronousEventDispatcher = (function () {
function SynchronousEventDispatcher() {
this.eventListeners = new Map();
}
/**
* {@inheritdoc}
*/
SynchronousEventDispatcher.prototype.dispatch = function (name, payload) {
var _this = this;
if (!this.eventListeners.has(name)) {
return payload;
}
var priorities = [];
this.eventListeners.get(name).forEach(function (l, priority) {
priorities.push(priority);
});
priorities.sort().map(function (priority) {
_this.eventListeners.get(name).get(priority).map(function (l) { return l(payload); });
});
return payload;
};
/**
* {@inheritdoc}
*/
SynchronousEventDispatcher.prototype.addEventListener = function (name, listener) {
listener.priority = listener.priority || event_listener_1.NORMAL_PRIORITY;
if (!this.eventListeners.has(name)) {
this.eventListeners.set(name, new Map());
}
if (!this.eventListeners.get(name).has(listener.priority)) {
this.eventListeners.get(name).set(listener.priority, []);
}
this.eventListeners.get(name).get(listener.priority).push(listener);
};
/**
* {@inheritdoc}
*/
SynchronousEventDispatcher.prototype.removeEventListener = function (name, listener) {
var _this = this;
if (!this.eventListeners.has(name)) {
return;
}
this.eventListeners.get(name).forEach(function (listeners, index) {
listeners.map(function (registeredListener, i) {
if (registeredListener !== listener) {
return;
}
listeners.splice(i, 1);
});
if (!listeners.length) {
_this.eventListeners.get(name).delete(index);
}
});
if (!this.eventListeners.get(name).size) {
this.eventListeners.delete(name);
}
};
/**
* {@inheritdoc}
*/
SynchronousEventDispatcher.prototype.clearEventListeners = function (name) {
if (!name) {
this.eventListeners.clear();
return;
}
if (!this.eventListeners.has(name)) {
return;
}
this.eventListeners.get(name).clear();
};
return SynchronousEventDispatcher;
}());
exports.default = SynchronousEventDispatcher;
//# sourceMappingURL=synchronous-event-dispatcher.js.map