diff --git a/dist/angular-google-analytics.js b/dist/angular-google-analytics.js index f625357..360fbec 100644 --- a/dist/angular-google-analytics.js +++ b/dist/angular-google-analytics.js @@ -1,6 +1,6 @@ /** * Angular Google Analytics - Easy tracking for your AngularJS application - * @version v1.1.6 - 2016-01-27 + * @version v1.1.7 - 2016-03-25 * @link http://github.com/revolunet/angular-google-analytics * @author Julien Bouquillon (https://github.com/revolunet) * @contributors Julien Bouquillon (https://github.com/revolunet),Justin Saunders (https://github.com/justinsa),Chris Esplin (https://github.com/deltaepsilon),Adam Misiorny (https://github.com/adam187) @@ -41,6 +41,7 @@ hybridMobileSupport = false, offlineMode = false, pageEvent = '$routeChangeSuccess', + readFromRoute = false, removeRegExp, testMode = false, traceDebuggingMode = false, @@ -192,11 +193,23 @@ traceDebuggingMode = !!enableTraceDebugging; return this; }; + + // Enable reading page url from route object + this.readFromRoute = function(val) { + readFromRoute = !!val; + return this; + }; /** * Public Service */ - this.$get = ['$document', '$location', '$log', '$rootScope', '$window', function ($document, $location, $log, $rootScope, $window) { + this.$get = ['$document', // To read title + '$location', // + '$log', // + '$rootScope',// + '$window', // + '$injector', // To access ngRoute module without declaring a fixed dependency + function ($document, $location, $log, $rootScope, $window, $injector) { var that = this; /** @@ -217,9 +230,26 @@ } return isPropertyDefined('name', config) ? (config.name + '.' + commandName) : commandName; }; + + // Try to read route configuration and log warning if not possible + var $route = {}; + if (readFromRoute) { + if (!$injector.has('$route')) { + $log.warn('$route service is not available. Make sure you have included ng-route in your application dependencies.'); + } else { + $route = $injector.get('$route'); + } + } + // Get url for current page var getUrl = function () { - var url = trackUrlParams ? $location.url() : $location.path(); + // Using ngRoute provided tracking urls + if (readFromRoute && $route.current && ('pageTrack' in $route.current)) { + return $route.current.pageTrack; + } + + // Otherwise go the old way + var url = trackUrlParams ? $location.url() : $location.path(); return removeRegExp ? url.replace(removeRegExp, '') : url; }; @@ -1062,6 +1092,15 @@ // activates page tracking if (trackRoutes) { $rootScope.$on(pageEvent, function () { + // Apply $route based filtering if configured + if (readFromRoute) { + // Avoid tracking undefined routes, routes without template (e.g. redirect routes) + // and those explicitly marked as 'do not track' + if (!$route.current || !$route.current.templateUrl || $route.current.doNotTrack) { + return; + } + } + that._trackPage(); }); } @@ -1088,6 +1127,7 @@ ignoreFirstPageLoad: ignoreFirstPageLoad, logAllCalls: logAllCalls, pageEvent: pageEvent, + readFromRoute: readFromRoute, removeRegExp: removeRegExp, testMode: testMode, traceDebuggingMode: traceDebuggingMode, diff --git a/dist/angular-google-analytics.min.js b/dist/angular-google-analytics.min.js index 3ae86b4..00c27dd 100644 --- a/dist/angular-google-analytics.min.js +++ b/dist/angular-google-analytics.min.js @@ -1,9 +1,9 @@ /** * Angular Google Analytics - Easy tracking for your AngularJS application - * @version v1.1.6 - 2016-01-27 + * @version v1.1.7 - 2016-03-25 * @link http://github.com/revolunet/angular-google-analytics * @author Julien Bouquillon (https://github.com/revolunet) * @contributors Julien Bouquillon (https://github.com/revolunet),Justin Saunders (https://github.com/justinsa),Chris Esplin (https://github.com/deltaepsilon),Adam Misiorny (https://github.com/adam187) * @license MIT License, http://www.opensource.org/licenses/MIT */ -!function(a,b){"use strict";"function"==typeof define&&define.amd?define(["angular"],b):"object"==typeof module&&module.exports?module.exports=b(require("angular")):b(a.angular)}(this,function(a,b){"use strict";return a.module("angular-google-analytics",[]).provider("Analytics",function(){var c,d,e,f,g,h=!0,i="auto",j=!1,k=!1,l="USD",m=!1,n=!1,o=!1,p=!1,q=!1,r=!1,s=!1,t=!1,u=!1,v=!1,w=!1,x="$routeChangeSuccess",y=!1,z=!1,A="",B=!0,C=!1;this.log=[],this.offlineQueue=[],this.setAccount=function(d){return c=a.isUndefined(d)||d===!1?b:a.isArray(d)?d:a.isObject(d)?[d]:[{tracker:d,trackEvent:!0}],this},this.trackPages=function(a){return B=!!a,this},this.trackPrefix=function(a){return A=a,this},this.setDomainName=function(a){return e=a,this},this.useDisplayFeatures=function(a){return o=!!a,this},this.useAnalytics=function(a){return h=!!a,this},this.useEnhancedLinkAttribution=function(a){return s=!!a,this},this.useCrossDomainLinker=function(a){return k=!!a,this},this.setCrossLinkDomains=function(a){return d=a,this},this.setPageEvent=function(a){return x=a,this},this.setCookieConfig=function(a){return i=a,this},this.useECommerce=function(a,b){return q=!!a,r=!!b,this},this.setCurrency=function(a){return l=a,this},this.setRemoveRegExp=function(a){return a instanceof RegExp&&(g=a),this},this.setExperimentId=function(a){return f=a,this},this.ignoreFirstPageLoad=function(a){return t=!!a,this},this.trackUrlParams=function(a){return C=!!a,this},this.disableAnalytics=function(a){return p=!!a,this},this.setHybridMobileSupport=function(a){return v=!!a,this},this.startOffline=function(a){return w=!!a,w===!0&&this.delayScriptTag(!0),this},this.delayScriptTag=function(a){return n=!!a,this},this.logAllCalls=function(a){return u=!!a,this},this.enterTestMode=function(){return y=!0,this},this.enterDebugMode=function(a){return m=!0,z=!!a,this},this.$get=["$document","$location","$log","$rootScope","$window",function(D,E,F,G,H){var I=this,J=function(b,c){return a.isObject(c)&&a.isDefined(c[b])},K=function(a,b,c){return J(a,b)&&b[a]===c},L=function(b,c){return a.isString(c)?c+"."+b:J("name",c)?c.name+"."+b:b},M=function(){var a=C?E.url():E.path();return g?a.replace(g,""):a},N=function(){var b={utm_source:"campaignSource",utm_medium:"campaignMedium",utm_term:"campaignTerm",utm_content:"campaignContent",utm_campaign:"campaignName"},c={};return a.forEach(E.search(),function(d,e){var f=b[e];a.isDefined(f)&&(c[f]=d)}),c},O=function(a,b,c,d,e,f,g,h,i){var j={};return a&&(j.id=a),b&&(j.affiliation=b),c&&(j.revenue=c),d&&(j.tax=d),e&&(j.shipping=e),f&&(j.coupon=f),g&&(j.list=g),h&&(j.step=h),i&&(j.option=i),j},P=function(a){!h&&H._gaq&&"function"==typeof a&&a()},Q=function(){var a=Array.prototype.slice.call(arguments);return w===!0?void I.offlineQueue.push([Q,a]):(H._gaq||(H._gaq=[]),u===!0&&I._log.apply(I,a),void H._gaq.push(a))},R=function(a){h&&H.ga&&"function"==typeof a&&a()},S=function(){var a=Array.prototype.slice.call(arguments);return w===!0?void I.offlineQueue.push([S,a]):"function"!=typeof H.ga?void I._log("warn","ga function not set on window"):(u===!0&&I._log.apply(I,a),void H.ga.apply(null,a))},T=function(a){var b=Array.prototype.slice.call(arguments,1),d=b[0],e=[];return"function"==typeof a?c.forEach(function(b){a(b)&&e.push(b)}):e=c,0===e.length?void S.apply(I,b):void e.forEach(function(a){(!J("select",a)||"function"!=typeof a.select||a.select(b))&&(b[0]=L(d,a),S.apply(I,b))})};return this._log=function(){var a=Array.prototype.slice.call(arguments);if(a.length>0){if(a.length>1)switch(a[0]){case"debug":case"error":case"info":case"log":case"warn":F[a[0]](a.slice(1))}I.log.push(a)}},this._createScriptTag=function(){if(!c||c.length<1)return void I._log("warn","No account id set to create script tag");if(c.length>1&&(I._log("warn","Multiple trackers are not supported with ga.js. Using first tracker only"),c=c.slice(0,1)),j===!0)return void I._log("warn","ga.js or analytics.js script tag already created");p===!0&&(I._log("info","Analytics disabled: "+c[0].tracker),H["ga-disable-"+c[0].tracker]=!0),Q("_setAccount",c[0].tracker),e&&Q("_setDomainName",e),s&&Q("_require","inpage_linkid","//www.google-analytics.com/plugins/ga/inpage_linkid.js"),B&&!t&&(g?Q("_trackPageview",M()):Q("_trackPageview"));var a,b=D[0];return a=o===!0?("https:"===b.location.protocol?"https://":"http://")+"stats.g.doubleclick.net/dc.js":("https:"===b.location.protocol?"https://ssl":"http://www")+".google-analytics.com/ga.js",y!==!0?!function(){var c=b.createElement("script");c.type="text/javascript",c.async=!0,c.src=a;var d=b.getElementsByTagName("script")[0];d.parentNode.insertBefore(c,d)}():I._log("inject",a),j=!0,!0},this._createAnalyticsScriptTag=function(){if(!c)return void I._log("warn","No account id set to create analytics script tag");if(j===!0)return void I._log("warn","ga.js or analytics.js script tag already created");p===!0&&c.forEach(function(a){I._log("info","Analytics disabled: "+a.tracker),H["ga-disable-"+a.tracker]=!0});var b=D[0],e=v===!0?"https:":"",g=e+"//www.google-analytics.com/"+(m?"analytics_debug.js":"analytics.js");if(y!==!0?!function(a,b,c,d,e,f,g){a.GoogleAnalyticsObject=e,a[e]=a[e]||function(){(a[e].q=a[e].q||[]).push(arguments)},a[e].l=1*new Date,f=b.createElement(c),g=b.getElementsByTagName(c)[0],f.async=1,f.src=d,g.parentNode.insertBefore(f,g)}(window,b,"script",g,"ga"):("function"!=typeof H.ga&&(H.ga=function(){}),I._log("inject",g)),z&&(H.ga_debug={trace:!0}),c.forEach(function(b){b.crossDomainLinker=J("crossDomainLinker",b)?b.crossDomainLinker:k,b.crossLinkDomains=J("crossLinkDomains",b)?b.crossLinkDomains:d,b.displayFeatures=J("displayFeatures",b)?b.displayFeatures:o,b.enhancedLinkAttribution=J("enhancedLinkAttribution",b)?b.enhancedLinkAttribution:s,b.set=J("set",b)?b.set:{},b.trackEcommerce=J("trackEcommerce",b)?b.trackEcommerce:q,b.trackEvent=J("trackEvent",b)?b.trackEvent:!1;var c={};J("fields",b)?c=b.fields:J("cookieConfig",b)?a.isString(b.cookieConfig)?c.cookieDomain=b.cookieConfig:c=b.cookieConfig:a.isString(i)?c.cookieDomain=i:i&&(c=i),b.crossDomainLinker===!0&&(c.allowLinker=!0),J("name",b)&&(c.name=b.name),b.fields=c,S("create",b.tracker,b.fields),v===!0&&S(L("set",b),"checkProtocolTask",null);for(var e in b.set)b.set.hasOwnProperty(e)&&S(L("set",b),e,b.set[e]);b.crossDomainLinker===!0&&(S(L("require",b),"linker"),a.isDefined(b.crossLinkDomains)&&S(L("linker:autoLink",b),b.crossLinkDomains)),b.displayFeatures&&S(L("require",b),"displayfeatures"),b.trackEcommerce&&(r?(S(L("require",b),"ec"),S(L("set",b),"&cu",l)):S(L("require",b),"ecommerce")),b.enhancedLinkAttribution&&S(L("require",b),"linkid"),B&&!t&&S(L("send",b),"pageview",A+M())}),f){var h=b.createElement("script"),n=b.getElementsByTagName("script")[0];h.src=e+"//www.google-analytics.com/cx/api.js?experiment="+f,n.parentNode.insertBefore(h,n)}return j=!0,!0},this._ecommerceEnabled=function(a,b){var c=q&&!r;return a===!0&&c===!1&&(q&&r?I._log("warn",b+" is not available when Enhanced Ecommerce is enabled with analytics.js"):I._log("warn","Ecommerce must be enabled to use "+b+" with analytics.js")),c},this._enhancedEcommerceEnabled=function(a,b){var c=q&&r;return a===!0&&c===!1&&I._log("warn","Enhanced Ecommerce must be enabled to use "+b+" with analytics.js"),c},this._trackPage=function(c,d,e){c=c?c:M(),d=d?d:D[0].title,P(function(){Q("_set","title",d),Q("_trackPageview",A+c)}),R(function(){var f={page:A+c,title:d};a.extend(f,N()),a.isObject(e)&&a.extend(f,e),T(b,"send","pageview",f)})},this._trackEvent=function(b,c,d,e,f,g){P(function(){Q("_trackEvent",b,c,d,e,!!f)}),R(function(){var h={},i=function(a){return K("trackEvent",a,!0)};a.isDefined(f)&&(h.nonInteraction=!!f),a.isObject(g)&&a.extend(h,g),a.isDefined(h.page)||(h.page=M()),T(i,"send","event",b,c,d,e,h)})},this._addTrans=function(a,b,c,d,e,f,g,h,i){P(function(){Q("_addTrans",a,b,c,d,e,f,g,h)}),R(function(){if(I._ecommerceEnabled(!0,"addTrans")){var f=function(a){return K("trackEcommerce",a,!0)};T(f,"ecommerce:addTransaction",{id:a,affiliation:b,revenue:c,tax:d,shipping:e,currency:i||"USD"})}})},this._addItem=function(a,b,c,d,e,f){P(function(){Q("_addItem",a,b,c,d,e,f)}),R(function(){if(I._ecommerceEnabled(!0,"addItem")){var g=function(a){return K("trackEcommerce",a,!0)};T(g,"ecommerce:addItem",{id:a,name:c,sku:b,category:d,price:e,quantity:f})}})},this._trackTrans=function(){P(function(){Q("_trackTrans")}),R(function(){if(I._ecommerceEnabled(!0,"trackTrans")){var a=function(a){return K("trackEcommerce",a,!0)};T(a,"ecommerce:send")}})},this._clearTrans=function(){R(function(){if(I._ecommerceEnabled(!0,"clearTrans")){var a=function(a){return K("trackEcommerce",a,!0)};T(a,"ecommerce:clear")}})},this._addProduct=function(b,c,d,e,f,g,h,i,j,k){P(function(){Q("_addProduct",b,c,d,e,f,g,h,i,j)}),R(function(){if(I._enhancedEcommerceEnabled(!0,"addProduct")){var l=function(a){return K("trackEcommerce",a,!0)},m={id:b,name:c,category:d,brand:e,variant:f,price:g,quantity:h,coupon:i,position:j};a.isObject(k)&&a.extend(m,k),T(l,"ec:addProduct",m)}})},this._addImpression=function(a,b,c,d,e,f,g,h){P(function(){Q("_addImpression",a,b,c,d,e,f,g,h)}),R(function(){if(I._enhancedEcommerceEnabled(!0,"addImpression")){var i=function(a){return K("trackEcommerce",a,!0)};T(i,"ec:addImpression",{id:a,name:b,category:e,brand:d,variant:f,list:c,position:g,price:h})}})},this._addPromo=function(a,b,c,d){P(function(){Q("_addPromo",a,b,c,d)}),R(function(){if(I._enhancedEcommerceEnabled(!0,"addPromo")){var e=function(a){return K("trackEcommerce",a,!0)};T(e,"ec:addPromo",{id:a,name:b,creative:c,position:d})}})},this._setAction=function(a,b){P(function(){Q("_setAction",a,b)}),R(function(){if(I._enhancedEcommerceEnabled(!0,"setAction")){var c=function(a){return K("trackEcommerce",a,!0)};T(c,"ec:setAction",a,b)}})},this._trackTransaction=function(a,b,c,d,e,f,g,h,i){this._setAction("purchase",O(a,b,c,d,e,f,g,h,i))},this._trackRefund=function(a){this._setAction("refund",O(a))},this._trackCheckOut=function(a,b){this._setAction("checkout",O(null,null,null,null,null,null,null,a,b))},this._trackDetail=function(){this._setAction("detail"),this._pageView()},this._trackCart=function(a,b){-1!==["add","remove"].indexOf(a)&&(this._setAction(a,{list:b}),this._trackEvent("UX","click",a+("add"===a?" to cart":" from cart")))},this._promoClick=function(a){this._setAction("promo_click"),this._trackEvent("Internal Promotions","click",a)},this._productClick=function(a){this._setAction("click",O(null,null,null,null,null,null,a,null,null)),this._trackEvent("UX","click",a)},this._pageView=function(a){R(function(){S(L("send",a),"pageview")})},this._send=function(){var a=Array.prototype.slice.call(arguments);a.unshift("send"),R(function(){S.apply(I,a)})},this._set=function(a,b,c){R(function(){S(L("set",c),a,b)})},this._trackTimings=function(a,c,d,e){R(function(){T(b,"send","timing",a,c,d,e)})},this._trackException=function(a,c){R(function(){T(b,"send","exception",{exDescription:a,exFatal:!!c})})},n||(h?this._createAnalyticsScriptTag():this._createScriptTag()),B&&G.$on(x,function(){I._trackPage()}),{log:I.log,offlineQueue:I.offlineQueue,configuration:{accounts:c,universalAnalytics:h,crossDomainLinker:k,crossLinkDomains:d,currency:l,debugMode:m,delayScriptTag:n,disableAnalytics:p,displayFeatures:o,domainName:e,ecommerce:I._ecommerceEnabled(),enhancedEcommerce:I._enhancedEcommerceEnabled(),enhancedLinkAttribution:s,experimentId:f,hybridMobileSupport:v,ignoreFirstPageLoad:t,logAllCalls:u,pageEvent:x,removeRegExp:g,testMode:y,traceDebuggingMode:z,trackPrefix:A,trackRoutes:B,trackUrlParams:C},getUrl:M,setCookieConfig:I._setCookieConfig,getCookieConfig:function(){return i},createAnalyticsScriptTag:function(a){return a&&(i=a),I._createAnalyticsScriptTag()},createScriptTag:function(){return I._createScriptTag()},offline:function(a){if(a===!0&&w===!1&&(w=!0),a===!1&&w===!0)for(w=!1;I.offlineQueue.length>0;){var b=I.offlineQueue.shift();b[0].apply(I,b[1])}return w},trackPage:function(a,b,c){I._trackPage.apply(I,arguments)},trackEvent:function(a,b,c,d,e,f){I._trackEvent.apply(I,arguments)},addTrans:function(a,b,c,d,e,f,g,h,i){I._addTrans.apply(I,arguments)},addItem:function(a,b,c,d,e,f){I._addItem.apply(I,arguments)},trackTrans:function(){I._trackTrans.apply(I,arguments)},clearTrans:function(){I._clearTrans.apply(I,arguments)},addProduct:function(a,b,c,d,e,f,g,h,i,j){I._addProduct.apply(I,arguments)},addPromo:function(a,b,c,d){I._addPromo.apply(I,arguments)},addImpression:function(a,b,c,d,e,f,g,h){I._addImpression.apply(I,arguments)},productClick:function(a){I._productClick.apply(I,arguments)},promoClick:function(a){I._promoClick.apply(I,arguments)},trackDetail:function(){I._trackDetail.apply(I,arguments)},trackCart:function(a,b){I._trackCart.apply(I,arguments)},trackCheckout:function(a,b){I._trackCheckOut.apply(I,arguments)},trackTimings:function(a,b,c,d){I._trackTimings.apply(I,arguments)},trackTransaction:function(a,b,c,d,e,f,g,h,i){I._trackTransaction.apply(I,arguments)},trackException:function(a,b){I._trackException.apply(I,arguments)},setAction:function(a,b){I._setAction.apply(I,arguments)},pageView:function(){I._pageView.apply(I,arguments)},send:function(a){I._send.apply(I,arguments)},set:function(a,b,c){I._set.apply(I,arguments)}}}]}).directive("gaTrackEvent",["Analytics","$parse",function(a,b){return{restrict:"A",link:function(c,d,e){var f=b(e.gaTrackEvent);d.bind("click",function(){(!e.gaTrackEventIf||c.$eval(e.gaTrackEventIf))&&f.length>1&&a.trackEvent.apply(a,f(c))})}}}]),a.module("angular-google-analytics")}); \ No newline at end of file +!function(a,b){"use strict";"function"==typeof define&&define.amd?define(["angular"],b):"object"==typeof module&&module.exports?module.exports=b(require("angular")):b(a.angular)}(this,function(a,b){"use strict";return a.module("angular-google-analytics",[]).provider("Analytics",function(){var c,d,e,f,g,h=!0,i="auto",j=!1,k=!1,l="USD",m=!1,n=!1,o=!1,p=!1,q=!1,r=!1,s=!1,t=!1,u=!1,v=!1,w=!1,x="$routeChangeSuccess",y=!1,z=!1,A=!1,B="",C=!0,D=!1;this.log=[],this.offlineQueue=[],this.setAccount=function(d){return c=a.isUndefined(d)||d===!1?b:a.isArray(d)?d:a.isObject(d)?[d]:[{tracker:d,trackEvent:!0}],this},this.trackPages=function(a){return C=!!a,this},this.trackPrefix=function(a){return B=a,this},this.setDomainName=function(a){return e=a,this},this.useDisplayFeatures=function(a){return o=!!a,this},this.useAnalytics=function(a){return h=!!a,this},this.useEnhancedLinkAttribution=function(a){return s=!!a,this},this.useCrossDomainLinker=function(a){return k=!!a,this},this.setCrossLinkDomains=function(a){return d=a,this},this.setPageEvent=function(a){return x=a,this},this.setCookieConfig=function(a){return i=a,this},this.useECommerce=function(a,b){return q=!!a,r=!!b,this},this.setCurrency=function(a){return l=a,this},this.setRemoveRegExp=function(a){return a instanceof RegExp&&(g=a),this},this.setExperimentId=function(a){return f=a,this},this.ignoreFirstPageLoad=function(a){return t=!!a,this},this.trackUrlParams=function(a){return D=!!a,this},this.disableAnalytics=function(a){return p=!!a,this},this.setHybridMobileSupport=function(a){return v=!!a,this},this.startOffline=function(a){return w=!!a,w===!0&&this.delayScriptTag(!0),this},this.delayScriptTag=function(a){return n=!!a,this},this.logAllCalls=function(a){return u=!!a,this},this.enterTestMode=function(){return z=!0,this},this.enterDebugMode=function(a){return m=!0,A=!!a,this},this.readFromRoute=function(a){return y=!!a,this},this.$get=["$document","$location","$log","$rootScope","$window","$injector",function(E,F,G,H,I,J){var K=this,L=function(b,c){return a.isObject(c)&&a.isDefined(c[b])},M=function(a,b,c){return L(a,b)&&b[a]===c},N=function(b,c){return a.isString(c)?c+"."+b:L("name",c)?c.name+"."+b:b},O={};y&&(J.has("$route")?O=J.get("$route"):G.warn("$route service is not available. Make sure you have included ng-route in your application dependencies."));var P=function(){if(y&&O.current&&"pageTrack"in O.current)return O.current.pageTrack;var a=D?F.url():F.path();return g?a.replace(g,""):a},Q=function(){var b={utm_source:"campaignSource",utm_medium:"campaignMedium",utm_term:"campaignTerm",utm_content:"campaignContent",utm_campaign:"campaignName"},c={};return a.forEach(F.search(),function(d,e){var f=b[e];a.isDefined(f)&&(c[f]=d)}),c},R=function(a,b,c,d,e,f,g,h,i){var j={};return a&&(j.id=a),b&&(j.affiliation=b),c&&(j.revenue=c),d&&(j.tax=d),e&&(j.shipping=e),f&&(j.coupon=f),g&&(j.list=g),h&&(j.step=h),i&&(j.option=i),j},S=function(a){!h&&I._gaq&&"function"==typeof a&&a()},T=function(){var a=Array.prototype.slice.call(arguments);return w===!0?void K.offlineQueue.push([T,a]):(I._gaq||(I._gaq=[]),u===!0&&K._log.apply(K,a),void I._gaq.push(a))},U=function(a){h&&I.ga&&"function"==typeof a&&a()},V=function(){var a=Array.prototype.slice.call(arguments);return w===!0?void K.offlineQueue.push([V,a]):"function"!=typeof I.ga?void K._log("warn","ga function not set on window"):(u===!0&&K._log.apply(K,a),void I.ga.apply(null,a))},W=function(a){var b=Array.prototype.slice.call(arguments,1),d=b[0],e=[];return"function"==typeof a?c.forEach(function(b){a(b)&&e.push(b)}):e=c,0===e.length?void V.apply(K,b):void e.forEach(function(a){L("select",a)&&"function"==typeof a.select&&!a.select(b)||(b[0]=N(d,a),V.apply(K,b))})};return this._log=function(){var a=Array.prototype.slice.call(arguments);if(a.length>0){if(a.length>1)switch(a[0]){case"debug":case"error":case"info":case"log":case"warn":G[a[0]](a.slice(1))}K.log.push(a)}},this._createScriptTag=function(){if(!c||c.length<1)return void K._log("warn","No account id set to create script tag");if(c.length>1&&(K._log("warn","Multiple trackers are not supported with ga.js. Using first tracker only"),c=c.slice(0,1)),j===!0)return void K._log("warn","ga.js or analytics.js script tag already created");p===!0&&(K._log("info","Analytics disabled: "+c[0].tracker),I["ga-disable-"+c[0].tracker]=!0),T("_setAccount",c[0].tracker),e&&T("_setDomainName",e),s&&T("_require","inpage_linkid","//www.google-analytics.com/plugins/ga/inpage_linkid.js"),C&&!t&&(g?T("_trackPageview",P()):T("_trackPageview"));var a,b=E[0];return a=o===!0?("https:"===b.location.protocol?"https://":"http://")+"stats.g.doubleclick.net/dc.js":("https:"===b.location.protocol?"https://ssl":"http://www")+".google-analytics.com/ga.js",z!==!0?!function(){var c=b.createElement("script");c.type="text/javascript",c.async=!0,c.src=a;var d=b.getElementsByTagName("script")[0];d.parentNode.insertBefore(c,d)}():K._log("inject",a),j=!0,!0},this._createAnalyticsScriptTag=function(){if(!c)return void K._log("warn","No account id set to create analytics script tag");if(j===!0)return void K._log("warn","ga.js or analytics.js script tag already created");p===!0&&c.forEach(function(a){K._log("info","Analytics disabled: "+a.tracker),I["ga-disable-"+a.tracker]=!0});var b=E[0],e=v===!0?"https:":"",g=e+"//www.google-analytics.com/"+(m?"analytics_debug.js":"analytics.js");if(z!==!0?!function(a,b,c,d,e,f,g){a.GoogleAnalyticsObject=e,a[e]=a[e]||function(){(a[e].q=a[e].q||[]).push(arguments)},a[e].l=1*new Date,f=b.createElement(c),g=b.getElementsByTagName(c)[0],f.async=1,f.src=d,g.parentNode.insertBefore(f,g)}(window,b,"script",g,"ga"):("function"!=typeof I.ga&&(I.ga=function(){}),K._log("inject",g)),A&&(I.ga_debug={trace:!0}),c.forEach(function(b){b.crossDomainLinker=L("crossDomainLinker",b)?b.crossDomainLinker:k,b.crossLinkDomains=L("crossLinkDomains",b)?b.crossLinkDomains:d,b.displayFeatures=L("displayFeatures",b)?b.displayFeatures:o,b.enhancedLinkAttribution=L("enhancedLinkAttribution",b)?b.enhancedLinkAttribution:s,b.set=L("set",b)?b.set:{},b.trackEcommerce=L("trackEcommerce",b)?b.trackEcommerce:q,b.trackEvent=L("trackEvent",b)?b.trackEvent:!1;var c={};L("fields",b)?c=b.fields:L("cookieConfig",b)?a.isString(b.cookieConfig)?c.cookieDomain=b.cookieConfig:c=b.cookieConfig:a.isString(i)?c.cookieDomain=i:i&&(c=i),b.crossDomainLinker===!0&&(c.allowLinker=!0),L("name",b)&&(c.name=b.name),b.fields=c,V("create",b.tracker,b.fields),v===!0&&V(N("set",b),"checkProtocolTask",null);for(var e in b.set)b.set.hasOwnProperty(e)&&V(N("set",b),e,b.set[e]);b.crossDomainLinker===!0&&(V(N("require",b),"linker"),a.isDefined(b.crossLinkDomains)&&V(N("linker:autoLink",b),b.crossLinkDomains)),b.displayFeatures&&V(N("require",b),"displayfeatures"),b.trackEcommerce&&(r?(V(N("require",b),"ec"),V(N("set",b),"&cu",l)):V(N("require",b),"ecommerce")),b.enhancedLinkAttribution&&V(N("require",b),"linkid"),C&&!t&&V(N("send",b),"pageview",B+P())}),f){var h=b.createElement("script"),n=b.getElementsByTagName("script")[0];h.src=e+"//www.google-analytics.com/cx/api.js?experiment="+f,n.parentNode.insertBefore(h,n)}return j=!0,!0},this._ecommerceEnabled=function(a,b){var c=q&&!r;return a===!0&&c===!1&&(q&&r?K._log("warn",b+" is not available when Enhanced Ecommerce is enabled with analytics.js"):K._log("warn","Ecommerce must be enabled to use "+b+" with analytics.js")),c},this._enhancedEcommerceEnabled=function(a,b){var c=q&&r;return a===!0&&c===!1&&K._log("warn","Enhanced Ecommerce must be enabled to use "+b+" with analytics.js"),c},this._trackPage=function(c,d,e){c=c?c:P(),d=d?d:E[0].title,S(function(){T("_set","title",d),T("_trackPageview",B+c)}),U(function(){var f={page:B+c,title:d};a.extend(f,Q()),a.isObject(e)&&a.extend(f,e),W(b,"send","pageview",f)})},this._trackEvent=function(b,c,d,e,f,g){S(function(){T("_trackEvent",b,c,d,e,!!f)}),U(function(){var h={},i=function(a){return M("trackEvent",a,!0)};a.isDefined(f)&&(h.nonInteraction=!!f),a.isObject(g)&&a.extend(h,g),a.isDefined(h.page)||(h.page=P()),W(i,"send","event",b,c,d,e,h)})},this._addTrans=function(a,b,c,d,e,f,g,h,i){S(function(){T("_addTrans",a,b,c,d,e,f,g,h)}),U(function(){if(K._ecommerceEnabled(!0,"addTrans")){var f=function(a){return M("trackEcommerce",a,!0)};W(f,"ecommerce:addTransaction",{id:a,affiliation:b,revenue:c,tax:d,shipping:e,currency:i||"USD"})}})},this._addItem=function(a,b,c,d,e,f){S(function(){T("_addItem",a,b,c,d,e,f)}),U(function(){if(K._ecommerceEnabled(!0,"addItem")){var g=function(a){return M("trackEcommerce",a,!0)};W(g,"ecommerce:addItem",{id:a,name:c,sku:b,category:d,price:e,quantity:f})}})},this._trackTrans=function(){S(function(){T("_trackTrans")}),U(function(){if(K._ecommerceEnabled(!0,"trackTrans")){var a=function(a){return M("trackEcommerce",a,!0)};W(a,"ecommerce:send")}})},this._clearTrans=function(){U(function(){if(K._ecommerceEnabled(!0,"clearTrans")){var a=function(a){return M("trackEcommerce",a,!0)};W(a,"ecommerce:clear")}})},this._addProduct=function(b,c,d,e,f,g,h,i,j,k){S(function(){T("_addProduct",b,c,d,e,f,g,h,i,j)}),U(function(){if(K._enhancedEcommerceEnabled(!0,"addProduct")){var l=function(a){return M("trackEcommerce",a,!0)},m={id:b,name:c,category:d,brand:e,variant:f,price:g,quantity:h,coupon:i,position:j};a.isObject(k)&&a.extend(m,k),W(l,"ec:addProduct",m)}})},this._addImpression=function(a,b,c,d,e,f,g,h){S(function(){T("_addImpression",a,b,c,d,e,f,g,h)}),U(function(){if(K._enhancedEcommerceEnabled(!0,"addImpression")){var i=function(a){return M("trackEcommerce",a,!0)};W(i,"ec:addImpression",{id:a,name:b,category:e,brand:d,variant:f,list:c,position:g,price:h})}})},this._addPromo=function(a,b,c,d){S(function(){T("_addPromo",a,b,c,d)}),U(function(){if(K._enhancedEcommerceEnabled(!0,"addPromo")){var e=function(a){return M("trackEcommerce",a,!0)};W(e,"ec:addPromo",{id:a,name:b,creative:c,position:d})}})},this._setAction=function(a,b){S(function(){T("_setAction",a,b)}),U(function(){if(K._enhancedEcommerceEnabled(!0,"setAction")){var c=function(a){return M("trackEcommerce",a,!0)};W(c,"ec:setAction",a,b)}})},this._trackTransaction=function(a,b,c,d,e,f,g,h,i){this._setAction("purchase",R(a,b,c,d,e,f,g,h,i))},this._trackRefund=function(a){this._setAction("refund",R(a))},this._trackCheckOut=function(a,b){this._setAction("checkout",R(null,null,null,null,null,null,null,a,b))},this._trackDetail=function(){this._setAction("detail"),this._pageView()},this._trackCart=function(a,b){-1!==["add","remove"].indexOf(a)&&(this._setAction(a,{list:b}),this._trackEvent("UX","click",a+("add"===a?" to cart":" from cart")))},this._promoClick=function(a){this._setAction("promo_click"),this._trackEvent("Internal Promotions","click",a)},this._productClick=function(a){this._setAction("click",R(null,null,null,null,null,null,a,null,null)),this._trackEvent("UX","click",a)},this._pageView=function(a){U(function(){V(N("send",a),"pageview")})},this._send=function(){var a=Array.prototype.slice.call(arguments);a.unshift("send"),U(function(){V.apply(K,a)})},this._set=function(a,b,c){U(function(){V(N("set",c),a,b)})},this._trackTimings=function(a,c,d,e){U(function(){W(b,"send","timing",a,c,d,e)})},this._trackException=function(a,c){U(function(){W(b,"send","exception",{exDescription:a,exFatal:!!c})})},n||(h?this._createAnalyticsScriptTag():this._createScriptTag()),C&&H.$on(x,function(){(!y||O.current&&O.current.templateUrl&&!O.current.doNotTrack)&&K._trackPage()}),{log:K.log,offlineQueue:K.offlineQueue,configuration:{accounts:c,universalAnalytics:h,crossDomainLinker:k,crossLinkDomains:d,currency:l,debugMode:m,delayScriptTag:n,disableAnalytics:p,displayFeatures:o,domainName:e,ecommerce:K._ecommerceEnabled(),enhancedEcommerce:K._enhancedEcommerceEnabled(),enhancedLinkAttribution:s,experimentId:f,hybridMobileSupport:v,ignoreFirstPageLoad:t,logAllCalls:u,pageEvent:x,readFromRoute:y,removeRegExp:g,testMode:z,traceDebuggingMode:A,trackPrefix:B,trackRoutes:C,trackUrlParams:D},getUrl:P,setCookieConfig:K._setCookieConfig,getCookieConfig:function(){return i},createAnalyticsScriptTag:function(a){return a&&(i=a),K._createAnalyticsScriptTag()},createScriptTag:function(){return K._createScriptTag()},offline:function(a){if(a===!0&&w===!1&&(w=!0),a===!1&&w===!0)for(w=!1;K.offlineQueue.length>0;){var b=K.offlineQueue.shift();b[0].apply(K,b[1])}return w},trackPage:function(a,b,c){K._trackPage.apply(K,arguments)},trackEvent:function(a,b,c,d,e,f){K._trackEvent.apply(K,arguments)},addTrans:function(a,b,c,d,e,f,g,h,i){K._addTrans.apply(K,arguments)},addItem:function(a,b,c,d,e,f){K._addItem.apply(K,arguments)},trackTrans:function(){K._trackTrans.apply(K,arguments)},clearTrans:function(){K._clearTrans.apply(K,arguments)},addProduct:function(a,b,c,d,e,f,g,h,i,j){K._addProduct.apply(K,arguments)},addPromo:function(a,b,c,d){K._addPromo.apply(K,arguments)},addImpression:function(a,b,c,d,e,f,g,h){K._addImpression.apply(K,arguments)},productClick:function(a){K._productClick.apply(K,arguments)},promoClick:function(a){K._promoClick.apply(K,arguments)},trackDetail:function(){K._trackDetail.apply(K,arguments)},trackCart:function(a,b){K._trackCart.apply(K,arguments)},trackCheckout:function(a,b){K._trackCheckOut.apply(K,arguments)},trackTimings:function(a,b,c,d){K._trackTimings.apply(K,arguments)},trackTransaction:function(a,b,c,d,e,f,g,h,i){K._trackTransaction.apply(K,arguments)},trackException:function(a,b){K._trackException.apply(K,arguments)},setAction:function(a,b){K._setAction.apply(K,arguments)},pageView:function(){K._pageView.apply(K,arguments)},send:function(a){K._send.apply(K,arguments)},set:function(a,b,c){K._set.apply(K,arguments)}}}]}).directive("gaTrackEvent",["Analytics","$parse",function(a,b){return{restrict:"A",link:function(c,d,e){var f=b(e.gaTrackEvent);d.bind("click",function(){e.gaTrackEventIf&&!c.$eval(e.gaTrackEventIf)||f.length>1&&a.trackEvent.apply(a,f(c))})}}}]),a.module("angular-google-analytics")}); \ No newline at end of file diff --git a/package.json b/package.json index bdf7acb..0deef4a 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "angular-google-analytics", "description": "Angular Google Analytics - Easy tracking for your AngularJS application", - "version": "1.1.6", + "version": "1.1.7", "homepage": "http://github.com/revolunet/angular-google-analytics", "author": "Julien Bouquillon (https://github.com/revolunet)", "contributors": [