aurelia-bootstrap
Version:
Bootstrap components written in Aurelia.
157 lines (122 loc) • 3.63 kB
JavaScript
/* */
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));
}
});