(function(window, angular, undefined) {'use strict';

/**
 * @ngdoc overview
 * @name angulartics.google.analytics
 * Enables analytics support for Google Analytics (http://google.com/analytics)
 */
angular.module('angulartics.google.analytics', ['angulartics'])
.config(['$analyticsProvider', function ($analyticsProvider) {

  // GA already supports buffered invocations so we don't need
  // to wrap these inside angulartics.waitForVendorApi

  $analyticsProvider.settings.pageTracking.trackRelativePath = true;

  // Set the default settings for this module
  $analyticsProvider.settings.ga = {
    // array of additional account names (only works for analyticsjs)
    additionalAccountNames: undefined,
    userId: null
  };

  $analyticsProvider.registerPageTrack(function (path) {
    if (window._gaq) {
      _gaq.push(['_trackPageview', path]);
      angular.forEach($analyticsProvider.settings.ga.additionalAccountNames, function (accountName){
        _gaq.push([accountName + '._trackPageview', path]);
      });
    }
    if (window.ga) {
      if ($analyticsProvider.settings.ga.userId) {
        ga('set', '&uid', $analyticsProvider.settings.ga.userId);
      }
      ga('send', 'pageview', path);
      angular.forEach($analyticsProvider.settings.ga.additionalAccountNames, function (accountName){
        ga(accountName +'.send', 'pageview', path);
      });
    }
  });

  /**
   * Track Event in GA
   * @name eventTrack
   *
   * @param {string} action Required 'action' (string) associated with the event
   * @param {object} properties Comprised of the mandatory field 'category' (string) and optional  fields 'label' (string), 'value' (integer) and 'noninteraction' (boolean)
   *
   * @link https://developers.google.com/analytics/devguides/collection/gajs/eventTrackerGuide#SettingUpEventTracking
   *
   * @link https://developers.google.com/analytics/devguides/collection/analyticsjs/events
   */
  $analyticsProvider.registerEventTrack(function (action, properties) {

    // Google Analytics requires an Event Category
    if (!properties || !properties.category) {
      properties = properties || {};
      properties.category = 'Event';
    }
    // GA requires that eventValue be an integer, see:
    // https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#eventValue
    // https://github.com/luisfarzati/angulartics/issues/81
    if (properties.value) {
      var parsed = parseInt(properties.value, 10);
      properties.value = isNaN(parsed) ? 0 : parsed;
    }

    if (window.ga) {

      var eventOptions = {
        eventCategory: properties.category,
        eventAction: action,
        eventLabel: properties.label,
        eventValue: properties.value,
        nonInteraction: properties.noninteraction,
        page: properties.page || window.location.hash.substring(1) || window.location.pathname,
        userId: $analyticsProvider.settings.ga.userId
      };

      // add custom dimensions and metrics
      for(var idx = 1; idx<=20;idx++) {
      if (properties['dimension' +idx.toString()]) {
        eventOptions['dimension' +idx.toString()] = properties['dimension' +idx.toString()];
      }
      if (properties['metric' +idx.toString()]) {
        eventOptions['metric' +idx.toString()] = properties['metric' +idx.toString()];
        }
      }
      ga('send', 'event', eventOptions);
      angular.forEach($analyticsProvider.settings.ga.additionalAccountNames, function (accountName){
        ga(accountName +'.send', 'event', eventOptions);
      });
    }

    else if (window._gaq) {
      _gaq.push(['_trackEvent', properties.category, action, properties.label, properties.value, properties.noninteraction]);
    }

  });

  $analyticsProvider.registerSetUsername(function (userId) {
    $analyticsProvider.settings.ga.userId = userId;
  });

}]);
})(window, window.angular);

@@ -3714,16 +3714,996 @@
 %0A  %7D);%0A%0A
+  /**%0A   * Exception Track Event in GA%0A   * @name exceptionTrack%0A   *%0A   * @param %7Bobject%7D properties Comprised of the mandatory fields 'appId' (string), 'appName' (string) and 'appVersion' (string) and %0A   * optional  fields 'fatal' (boolean) and 'description' (string)%0A   *%0A   * @https://developers.google.com/analytics/devguides/collection/analyticsjs/exceptions%0A   *%0A   * @link https://developers.google.com/analytics/devguides/collection/analyticsjs/events%0A   */%0A  $analyticsProvider.registerExceptionTrack(function (properties) %7B%0A    if (!properties %7C%7C !properties.appId %7C%7C !properties.appName %7C%7C !properties.appVersion) %7B%0A        console.error('Must be setted appId, appName and appVersion.');%0A        return;%0A    %7D%0A%0A    if(properties.fatal === undefined) %7B%0A        console.log('No %22fatal%22 provided, sending with fatal=true');%0A        properties.exFatal = true;%0A    %7D%0A%0A    properties.exDescription = properties.description;%0A%0A    ga('send', 'exception', properties);%0A  %7D);%0A%0A
   $analy

Add exceptionTrack implementation.