mirror of
https://github.com/Poniverse/Pony.fm.git
synced 2024-11-27 07:17:59 +01:00
121 lines
3.7 KiB
JavaScript
121 lines
3.7 KiB
JavaScript
|
(function () {
|
||
|
angular.module('angularytics', []).provider('Angularytics', function () {
|
||
|
var eventHandlersNames = ['Google'];
|
||
|
this.setEventHandlers = function (handlers) {
|
||
|
if (angular.isString(handlers)) {
|
||
|
handlers = [handlers];
|
||
|
}
|
||
|
eventHandlersNames = [];
|
||
|
angular.forEach(handlers, function (handler) {
|
||
|
eventHandlersNames.push(capitalizeHandler(handler));
|
||
|
});
|
||
|
};
|
||
|
var capitalizeHandler = function (handler) {
|
||
|
return handler.charAt(0).toUpperCase() + handler.substring(1);
|
||
|
};
|
||
|
var pageChangeEvent = '$locationChangeSuccess';
|
||
|
this.setPageChangeEvent = function (newPageChangeEvent) {
|
||
|
pageChangeEvent = newPageChangeEvent;
|
||
|
};
|
||
|
this.$get = [
|
||
|
'$injector',
|
||
|
'$rootScope',
|
||
|
'$location',
|
||
|
function ($injector, $rootScope, $location) {
|
||
|
var eventHandlers = [];
|
||
|
angular.forEach(eventHandlersNames, function (handler) {
|
||
|
eventHandlers.push($injector.get('Angularytics' + handler + 'Handler'));
|
||
|
});
|
||
|
var forEachHandlerDo = function (action) {
|
||
|
angular.forEach(eventHandlers, function (handler) {
|
||
|
action(handler);
|
||
|
});
|
||
|
};
|
||
|
$rootScope.$on(pageChangeEvent, function () {
|
||
|
forEachHandlerDo(function (handler) {
|
||
|
var url = $location.path();
|
||
|
if (url) {
|
||
|
handler.trackPageView(url);
|
||
|
}
|
||
|
});
|
||
|
});
|
||
|
var service = {};
|
||
|
service.init = function () {
|
||
|
};
|
||
|
service.trackEvent = function (category, action, opt_label, opt_value, opt_noninteraction) {
|
||
|
forEachHandlerDo(function (handler) {
|
||
|
if (category && action) {
|
||
|
handler.trackEvent(category, action, opt_label, opt_value, opt_noninteraction);
|
||
|
}
|
||
|
});
|
||
|
};
|
||
|
return service;
|
||
|
}
|
||
|
];
|
||
|
});
|
||
|
}());
|
||
|
(function () {
|
||
|
angular.module('angularytics').factory('AngularyticsConsoleHandler', [
|
||
|
'$log',
|
||
|
function ($log) {
|
||
|
var service = {};
|
||
|
service.trackPageView = function (url) {
|
||
|
$log.log('URL visited', url);
|
||
|
};
|
||
|
service.trackEvent = function (category, action, opt_label, opt_value, opt_noninteraction) {
|
||
|
$log.log('Event tracked', category, action, opt_label, opt_value, opt_noninteraction);
|
||
|
};
|
||
|
return service;
|
||
|
}
|
||
|
]);
|
||
|
}());
|
||
|
(function () {
|
||
|
angular.module('angularytics').factory('AngularyticsGoogleHandler', [
|
||
|
'$log',
|
||
|
function ($log) {
|
||
|
var service = {};
|
||
|
service.trackPageView = function (url) {
|
||
|
_gaq.push([
|
||
|
'_set',
|
||
|
'page',
|
||
|
url
|
||
|
]);
|
||
|
_gaq.push([
|
||
|
'_trackPageview',
|
||
|
url
|
||
|
]);
|
||
|
};
|
||
|
service.trackEvent = function (category, action, opt_label, opt_value, opt_noninteraction) {
|
||
|
_gaq.push([
|
||
|
'_trackEvent',
|
||
|
category,
|
||
|
action,
|
||
|
opt_label,
|
||
|
opt_value,
|
||
|
opt_noninteraction
|
||
|
]);
|
||
|
};
|
||
|
return service;
|
||
|
}
|
||
|
]).factory('AngularyticsGoogleUniversalHandler', function () {
|
||
|
var service = {};
|
||
|
service.trackPageView = function (url) {
|
||
|
window._gaq.push(['_trackPageview', url]);
|
||
|
};
|
||
|
service.trackEvent = function (category, action, opt_label, opt_value, opt_noninteraction) {
|
||
|
window.ga('send', 'event', category, action, opt_label, opt_value, { 'nonInteraction': opt_noninteraction });
|
||
|
};
|
||
|
return service;
|
||
|
});
|
||
|
}());
|
||
|
(function () {
|
||
|
angular.module('angularytics').filter('trackEvent', [
|
||
|
'Angularytics',
|
||
|
function (Angularytics) {
|
||
|
return function (entry, category, action, opt_label, opt_value, opt_noninteraction) {
|
||
|
Angularytics.trackEvent(category, action, opt_label, opt_value, opt_noninteraction);
|
||
|
return entry;
|
||
|
};
|
||
|
}
|
||
|
]);
|
||
|
}());
|