angulartics
Advanced tools
Comparing version 0.16.3 to 0.16.4
{ | ||
"name": "angulartics", | ||
"version": "0.16.3", | ||
"version": "0.16.4", | ||
"main": [ | ||
@@ -5,0 +5,0 @@ "src/angulartics.js", |
@@ -0,1 +1,10 @@ | ||
<a name="0.16.4"></a> | ||
### 0.16.4 (2014-08-21) | ||
#### Bug Fixes | ||
Fixed #182 double pageview tracking with ui-router | ||
#### Features | ||
Added basic debugging provider angulartics.debug.js that uses console.log to dump page and event tracking | ||
<a name="0.16.3"></a> | ||
@@ -2,0 +11,0 @@ ### 0.16.3 (2014-08-20) |
@@ -6,2 +6,2 @@ /** | ||
*/ | ||
!function(a){"use strict";var b=window.angulartics||(window.angulartics={});b.waitForVendorCount=0,b.waitForVendorApi=function(a,c,d,e,f){f||b.waitForVendorCount++,e||(e=d,d=void 0),!Object.prototype.hasOwnProperty.call(window,a)||void 0!==d&&void 0===window[a][d]?setTimeout(function(){b.waitForVendorApi(a,c,d,e,!0)},c):(b.waitForVendorCount--,e(window[a]))},a.module("angulartics",[]).provider("$analytics",function(){var c={pageTracking:{autoTrackFirstPage:!0,autoTrackVirtualPages:!0,trackRelativePath:!1,autoBasePath:!1,basePath:""},eventTracking:{},bufferFlushDelay:1e3},d=["pageTrack","eventTrack","setUsername","setUserProperties","setUserPropertiesOnce","setSuperProperties","setSuperPropertiesOnce"],e={},f={},g=function(a){return function(){b.waitForVendorCount&&(e[a]||(e[a]=[]),e[a].push(arguments))}},h=function(b,c){return f[b]||(f[b]=[]),f[b].push(c),function(){var c=arguments;a.forEach(f[b],function(a){a.apply(this,c)},this)}},i={settings:c},j=function(a,b){b?setTimeout(a,b):a()},k={$get:function(){return i},api:i,settings:c,virtualPageviews:function(a){this.settings.pageTracking.autoTrackVirtualPages=a},firstPageview:function(a){this.settings.pageTracking.autoTrackFirstPage=a},withBase:function(b){this.settings.pageTracking.basePath=b?a.element("base").attr("href").slice(0,-1):""},withAutoBase:function(a){this.settings.pageTracking.autoBasePath=a}},l=function(b,d){i[b]=h(b,d);var f=c[b],g=f?f.bufferFlushDelay:null,k=null!==g?g:c.bufferFlushDelay;a.forEach(e[b],function(a,b){j(function(){d.apply(this,a)},b*k)})},m=function(a){return a.replace(/^./,function(a){return a.toUpperCase()})},n=function(a){var b="register"+m(a);k[b]=function(b){l(a,b)},i[a]=h(a,g(a))};return a.forEach(d,n),k}).run(["$rootScope","$location","$window","$analytics","$injector",function(a,b,c,d,e){if(d.settings.pageTracking.autoTrackFirstPage){var f=!0;if(e.has("$route")){var g=e.get("$route");for(var h in g.routes){f=!1;break}}else if(e.has("$state")){var i=e.get("$state");for(var j in i.states){f=!1;break}}else f=!1;if(f)if(d.settings.pageTracking.autoBasePath&&(d.settings.pageTracking.basePath=c.location.pathname),d.settings.trackRelativePath){var k=d.settings.pageTracking.basePath+b.url();d.pageTrack(k)}else d.pageTrack(b.absUrl())}d.settings.pageTracking.autoTrackVirtualPages&&(d.settings.pageTracking.autoBasePath&&(d.settings.pageTracking.basePath=c.location.pathname+"#"),e.has("$route")&&a.$on("$routeChangeSuccess",function(a,c){if(!c||!(c.$$route||c).redirectTo){var e=d.settings.pageTracking.basePath+b.url();d.pageTrack(e)}}),e.has("$state")&&a.$on("$stateChangeSuccess",function(){var a=d.settings.pageTracking.basePath+b.url();d.pageTrack(a)}))}]).directive("analyticsOn",["$analytics","$timeout",function(b){function c(a){return["a:","button:","button:button","button:submit","input:button","input:submit"].indexOf(a.tagName.toLowerCase()+":"+(a.type||""))>=0}function d(a){return c(a)?"click":"click"}function e(a){return c(a)?a.innerText||a.value:a.id||a.name||a.tagName}function f(a){return"analytics"===a.substr(0,9)&&-1===["On","Event","If","Properties","EventType"].indexOf(a.substr(9))}function g(a){var b=a.slice(9);return"undefined"!=typeof b&&null!==b&&b.length>0?b.substring(0,1).toLowerCase()+b.substring(1):b}return{restrict:"A",scope:!0,link:function(c,h,i){var j=i.analyticsOn||d(h[0]);c.$analytics={},a.forEach(i.$attr,function(a,b){f(b)&&i.$observe(b,function(a){c.$analytics[g(b)]=a})}),a.element(h[0]).bind(j,function(d){var f=i.analyticsEvent||e(h[0]);c.$analytics.eventType=d.type,(!i.analyticsIf||c.$eval(i.analyticsIf))&&(i.analyticsProperties&&a.extend(c.$analytics,c.$eval(i.analyticsProperties)),b.eventTrack(f,c.$analytics))})}}}])}(angular); | ||
!function(a){"use strict";var b=window.angulartics||(window.angulartics={});b.waitForVendorCount=0,b.waitForVendorApi=function(a,c,d,e,f){f||b.waitForVendorCount++,e||(e=d,d=void 0),!Object.prototype.hasOwnProperty.call(window,a)||void 0!==d&&void 0===window[a][d]?setTimeout(function(){b.waitForVendorApi(a,c,d,e,!0)},c):(b.waitForVendorCount--,e(window[a]))},a.module("angulartics",[]).provider("$analytics",function(){var c={pageTracking:{autoTrackFirstPage:!0,autoTrackVirtualPages:!0,trackRelativePath:!1,autoBasePath:!1,basePath:""},eventTracking:{},bufferFlushDelay:1e3},d=["pageTrack","eventTrack","setUsername","setUserProperties","setUserPropertiesOnce","setSuperProperties","setSuperPropertiesOnce"],e={},f={},g=function(a){return function(){b.waitForVendorCount&&(e[a]||(e[a]=[]),e[a].push(arguments))}},h=function(b,c){return f[b]||(f[b]=[]),f[b].push(c),function(){var c=arguments;a.forEach(f[b],function(a){a.apply(this,c)},this)}},i={settings:c},j=function(a,b){b?setTimeout(a,b):a()},k={$get:function(){return i},api:i,settings:c,virtualPageviews:function(a){this.settings.pageTracking.autoTrackVirtualPages=a},firstPageview:function(a){this.settings.pageTracking.autoTrackFirstPage=a},withBase:function(b){this.settings.pageTracking.basePath=b?a.element("base").attr("href").slice(0,-1):""},withAutoBase:function(a){this.settings.pageTracking.autoBasePath=a}},l=function(b,d){i[b]=h(b,d);var f=c[b],g=f?f.bufferFlushDelay:null,k=null!==g?g:c.bufferFlushDelay;a.forEach(e[b],function(a,b){j(function(){d.apply(this,a)},b*k)})},m=function(a){return a.replace(/^./,function(a){return a.toUpperCase()})},n=function(a){var b="register"+m(a);k[b]=function(b){l(a,b)},i[a]=h(a,g(a))};return a.forEach(d,n),k}).run(["$rootScope","$location","$window","$analytics","$injector",function(a,b,c,d,e){if(d.settings.pageTracking.autoTrackFirstPage){var f=!0;if(e.has("$route")){var g=e.get("$route");for(var h in g.routes){f=!1;break}}else if(e.has("$state")){var i=e.get("$state");for(var j in i.get()){f=!1;break}}else f=!1;if(f)if(d.settings.pageTracking.autoBasePath&&(d.settings.pageTracking.basePath=c.location.pathname),d.settings.trackRelativePath){var k=d.settings.pageTracking.basePath+b.url();d.pageTrack(k)}else d.pageTrack(b.absUrl())}d.settings.pageTracking.autoTrackVirtualPages&&(d.settings.pageTracking.autoBasePath&&(d.settings.pageTracking.basePath=c.location.pathname+"#"),e.has("$route")&&a.$on("$routeChangeSuccess",function(a,c){if(!c||!(c.$$route||c).redirectTo){var e=d.settings.pageTracking.basePath+b.url();d.pageTrack(e)}}),e.has("$state")&&a.$on("$stateChangeSuccess",function(){var a=d.settings.pageTracking.basePath+b.url();d.pageTrack(a)}))}]).directive("analyticsOn",["$analytics","$timeout",function(b){function c(a){return["a:","button:","button:button","button:submit","input:button","input:submit"].indexOf(a.tagName.toLowerCase()+":"+(a.type||""))>=0}function d(a){return c(a)?"click":"click"}function e(a){return c(a)?a.innerText||a.value:a.id||a.name||a.tagName}function f(a){return"analytics"===a.substr(0,9)&&-1===["On","Event","If","Properties","EventType"].indexOf(a.substr(9))}function g(a){var b=a.slice(9);return"undefined"!=typeof b&&null!==b&&b.length>0?b.substring(0,1).toLowerCase()+b.substring(1):b}return{restrict:"A",scope:!0,link:function(c,h,i){var j=i.analyticsOn||d(h[0]);c.$analytics={},a.forEach(i.$attr,function(a,b){f(b)&&i.$observe(b,function(a){c.$analytics[g(b)]=a})}),a.element(h[0]).bind(j,function(d){var f=i.analyticsEvent||e(h[0]);c.$analytics.eventType=d.type,(!i.analyticsIf||c.$eval(i.analyticsIf))&&(i.analyticsProperties&&a.extend(c.$analytics,c.$eval(i.analyticsProperties)),b.eventTrack(f,c.$analytics))})}}}])}(angular); |
@@ -62,18 +62,9 @@ module.exports = function(grunt) { | ||
dist: { | ||
files: { | ||
'dist/angulartics.min.js': ['src/angulartics.js'], | ||
'dist/angulartics-adobe.min.js': ['src/angulartics-adobe.js'], | ||
'dist/angulartics-chartbeat.min.js': ['src/angulartics-chartbeat.js'], | ||
'dist/angulartics-piwik.min.js': ['src/angulartics-piwik.js'], | ||
'dist/angulartics-ga.min.js': ['src/angulartics-ga.js'], | ||
'dist/angulartics-ga-cordova.min.js': ['src/angulartics-ga-cordova.js'], | ||
'dist/angulartics-kissmetrics.min.js': ['src/angulartics-kissmetrics.js'], | ||
'dist/angulartics-mixpanel.min.js': ['src/angulartics-mixpanel.js'], | ||
'dist/angulartics-segmentio.min.js': ['src/angulartics-segmentio.js'], | ||
'dist/angulartics-gtm.min.js': ['src/angulartics-gtm.js'], | ||
'dist/angulartics-woopra.min.js': ['src/angulartics-woopra.js'], | ||
'dist/angulartics-splunk.min.js': ['src/angulartics-splunk.js'], | ||
'dist/angulartics-flurry.min.js': ['src/angulartics-flurry.js'], | ||
'dist/angulartics-marketo.min.js': ['src/angulartics-marketo.js'] | ||
} | ||
files: [{ | ||
expand: true, | ||
cwd: 'src/', | ||
src: ['*.js', '!angulartics-scroll.js'], | ||
dest: 'dist/', | ||
ext: '.min.js' | ||
}] | ||
} | ||
@@ -80,0 +71,0 @@ }, |
{ | ||
"name": "angulartics", | ||
"description": "Vendor-agnostic web analytics for AngularJS applications", | ||
"version": "0.16.3", | ||
"version": "0.16.4", | ||
"filename": "./src/angulartics.min.js", | ||
@@ -6,0 +6,0 @@ "homepage": "http://luisfarzati.github.io/angulartics", |
@@ -27,3 +27,3 @@ angulartics | ||
# Full path tracking | ||
# Full path tracking (for pages without a router) | ||
Introduced in 0.15.19 - support websites that do not use Angular `routes` or `states` on every page and still want to track full paths. The modifications lead to the following behavior: | ||
@@ -117,8 +117,15 @@ | ||
* Adobe Analytics | ||
* Chartbeat | ||
* Flurry | ||
* Google Analytics | ||
* Google Tag Manager | ||
* Kissmetrics | ||
* Marketo | ||
* Mixpanel | ||
* Chartbeat | ||
* Piwik | ||
* Scroll tracking | ||
* Segment.io | ||
* Splunk | ||
* Woopra | ||
@@ -134,3 +141,3 @@ If there's no Angulartics plugin for your analytics vendor of choice, please feel free to write yours and PR' it! Here's how to do it. | ||
The module name can be anything of course, but it would be convenient to follow the style `angulartics.{vendorname}`. | ||
Please follow the style `angulartics.{vendorname}`. | ||
@@ -143,3 +150,3 @@ Next, you register either the page track function, event track function, or both. You do it by calling the `registerPageTrack` and `registerEventTrack` methods. Let's take a look at page tracking first: | ||
By calling `registerPageTrack`, you tell Angulartics to invoke your function on `$routeChangeSuccess`. Angulartics will send the new path as an argument. | ||
By calling `registerPageTrack`, you tell Angulartics to invoke your function on `$routeChangeSuccess` or `$stateChangeSuccess`. Angulartics will send the new path as an argument. | ||
@@ -183,7 +190,10 @@ $analyticsProvider.registerEventTrack(function (action, properties) { | ||
<a href="file.pdf" | ||
analytics-on="click" | ||
analytics-on="click" | ||
analytics-if="myScope.shouldTrack" | ||
analytics-event="Download">Download</a> | ||
`analytics-on` lets you specify the DOM event that triggers the event tracking; `analytics-event` is the event name to be sent. | ||
`analytics-on` lets you specify the DOM event that triggers the event tracking; `analytics-event` is the event name to be sent. | ||
`analytics-if` is a conditional check. If the attribute value evaluates to a falsey, the event will NOT be fired. Useful for user tracking opt-out, etc. | ||
Additional properties (for example, category as required by GA) may be specified by adding `analytics-*` attributes: | ||
@@ -190,0 +200,0 @@ |
@@ -150,3 +150,3 @@ /** | ||
var $state = $injector.get('$state'); | ||
for (var state in $state.states) { | ||
for (var state in $state.get()) { | ||
noRoutesOrStates = false; | ||
@@ -166,3 +166,3 @@ break; | ||
} else { | ||
$analytics.pageTrack($location.absUrl()); | ||
$analytics.pageTrack($location.absUrl()); | ||
} | ||
@@ -169,0 +169,0 @@ } |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
137079
73
1256
219