UNPKG

event-handler-manager

Version:

A typescript (also javascript) simple Event Handler Manager

101 lines 3.55 kB
"use strict"; 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