Summary Table

Categories Total Count
PII 0
URL 0
DNS 0
EKL 0
IP 0
PORT 0
VsID 0
CF 0
AI 0
VPD 0
PL 0
Other 0

File Content

define(['angular', 'app'], function (angular, app) {
'use strict';
app.service('EventBusService', function ($rootScope) {


// This is a placeholder for all event types and their own set of event listeners.
// e.g. { eventType1: { eventName1: f1, // {allowMultiple: fase} options by default
// eventName2: [f2, f3, f4], // {allowMultiple: true} options
// },
// eventType2: { ... }
// }
$rootScope.eventTypesMap = {};

var eventBusService = {};

function getEventListeners(eventType) {
if (!$rootScope.eventTypesMap.hasOwnProperty(eventType)) {
$rootScope.eventTypesMap[eventType] = {};
}

return $rootScope.eventTypesMap[eventType];
}

eventBusService.registerEventListener = function(eventType, eventName, listener, options) {
options = _.defaults({}, options, {allowMultiple: false});

var listeners = getEventListeners(eventType);

if (options.allowMultiple && !listeners.hasOwnProperty(eventName)) {
listeners[eventName] = [];
}

if (Array.isArray(listeners[eventName])) {
listeners[eventName].push(listener);
} else {
listeners[eventName] = listener;
}
};

eventBusService.unregisterEventListener = function(eventType, eventName, listener) {
var listeners = getEventListeners(eventType);

if (!Array.isArray(listeners[eventName])) {
delete listeners[eventName];
} else if (!_.isFunction(listener)) {
delete listeners[eventName];
} else {
// Array type & listener is a function
listeners[eventName] = _.without(listeners[eventName], listener);
}
};

eventBusService.emit = function(eventType, data) {
$rootScope.$emit(eventType, data);
};

eventBusService.broadcast = function(eventType, data) {
$rootScope.$broadcast(eventType, data);
};

eventBusService.on = function(eventType, listener, options) {
options = _.defaults({}, options, {destroy: false});

var cleanUpFunc = $rootScope.$on(eventType, listener);

if (options.destroy) {
$rootScope.$on(eventType + '.destroy', function () {
cleanUpFunc();
});
}
};

eventBusService.trigger = function(eventType, eventName, data, options) {
var listeners = getEventListeners(eventType);

if(_.isEmpty(listeners)) {
return;
}

if (!Array.isArray(listeners[eventName])) {
listeners[eventName](data);
return;
}

_.each(listeners[eventName], function(listener) {
listener(data);
});
};

return eventBusService;
});
});