event-handler-manager
Version:
A typescript (also javascript) simple Event Handler Manager
101 lines • 3.55 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var Q = require("q");
var EventHandlerManager = (function () {
function EventHandlerManager() {
this.events = {};
this.eventsRefs = {};
this.idCounter = 0;
}
EventHandlerManager.prototype.attach = function (events) {
var _this = this;
if (events instanceof Array) {
events.forEach(function (event) {
_this.events[event] = [];
});
}
else {
this.events[events] = [];
}
};
EventHandlerManager.prototype.on = function (events, action) {
var _this = this;
var eventsList = [];
if (!(events instanceof Array)) {
eventsList.push(events);
}
else {
eventsList = events;
}
var eventIdList = [];
eventsList.forEach(function (event) {
var currentEvent = {
eventId: ++_this.idCounter,
action: function (event, sender) {
return Q.spread([event, sender], function (event, sender) { return action(event, sender); });
}
};
_this.events[event].push(currentEvent);
eventIdList.push(currentEvent.eventId);
_this.eventsRefs[currentEvent.eventId] = currentEvent;
});
if (eventIdList.length === 1) {
return eventIdList[0];
}
return eventIdList;
};
EventHandlerManager.prototype.off = function (eventRef) {
var _this = this;
if (typeof eventRef === "number") {
this.eventsRefs[eventRef] = null;
var currentEvent = this.events.find(function (event) {
return event.eventId === eventRef;
});
if (currentEvent !== undefined && currentEvent !== null) {
currentEvent = null;
}
}
else if (typeof eventRef === "string") {
this.events[eventRef].forEach(function (event) {
_this.eventsRefs[event.eventId] = null;
});
this.events[eventRef] = null;
}
else if (eventRef === undefined || eventRef === null) {
this.events = {};
this.eventsRefs = {};
}
};
EventHandlerManager.prototype.trigger = function (events, sequential, order) {
var _this = this;
var eventsList = [];
if (!(events instanceof Array)) {
eventsList.push(events);
}
else {
eventsList = events;
}
var executionQueue = [];
eventsList.forEach(function (eventParam) {
_this.events[eventParam].forEach(function (event) {
executionQueue.push(function () {
return event.action(eventParam, _this);
});
});
});
if (sequential) {
if (order === 'reverse') {
return executionQueue.slice().reverse().reduce(Q.when, Q());
}
return executionQueue.reduce(Q.when, Q());
}
var asyncQueue = [];
executionQueue.forEach(function (callback) {
asyncQueue.push(callback());
});
return Q.all(asyncQueue);
};
return EventHandlerManager;
}());
exports.EventHandlerManager = EventHandlerManager;
//# sourceMappingURL=EventHandlerManager.js.map