UNPKG

aurelia-bootstrap

Version:
157 lines (122 loc) 3.63 kB
/* */ define(['exports', 'aurelia-logging'], function (exports, _aureliaLogging) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.EventAggregator = undefined; exports.includeEventsIn = includeEventsIn; exports.configure = configure; var LogManager = _interopRequireWildcard(_aureliaLogging); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } var logger = LogManager.getLogger('event-aggregator'); var Handler = function () { function Handler(messageType, callback) { this.messageType = messageType; this.callback = callback; } Handler.prototype.handle = function handle(message) { if (message instanceof this.messageType) { this.callback.call(null, message); } }; return Handler; }(); var EventAggregator = exports.EventAggregator = function () { function EventAggregator() { this.eventLookup = {}; this.messageHandlers = []; } EventAggregator.prototype.publish = function publish(event, data) { var subscribers = void 0; var i = void 0; if (!event) { throw new Error('Event was invalid.'); } if (typeof event === 'string') { subscribers = this.eventLookup[event]; if (subscribers) { subscribers = subscribers.slice(); i = subscribers.length; try { while (i--) { subscribers[i](data, event); } } catch (e) { logger.error(e); } } } else { subscribers = this.messageHandlers.slice(); i = subscribers.length; try { while (i--) { subscribers[i].handle(event); } } catch (e) { logger.error(e); } } }; EventAggregator.prototype.subscribe = function subscribe(event, callback) { var handler = void 0; var subscribers = void 0; if (!event) { throw new Error('Event channel/type was invalid.'); } if (typeof event === 'string') { handler = callback; subscribers = this.eventLookup[event] || (this.eventLookup[event] = []); } else { handler = new Handler(event, callback); subscribers = this.messageHandlers; } subscribers.push(handler); return { dispose: function dispose() { var idx = subscribers.indexOf(handler); if (idx !== -1) { subscribers.splice(idx, 1); } } }; }; EventAggregator.prototype.subscribeOnce = function subscribeOnce(event, callback) { var sub = this.subscribe(event, function (a, b) { sub.dispose(); return callback(a, b); }); return sub; }; return EventAggregator; }(); function includeEventsIn(obj) { var ea = new EventAggregator(); obj.subscribeOnce = function (event, callback) { return ea.subscribeOnce(event, callback); }; obj.subscribe = function (event, callback) { return ea.subscribe(event, callback); }; obj.publish = function (event, data) { ea.publish(event, data); }; return ea; } function configure(config) { config.instance(EventAggregator, includeEventsIn(config.aurelia)); } });