angulartics
Advanced tools
Comparing version 0.7.4 to 0.8.4
{ | ||
"name": "angulartics", | ||
"version": "0.7.4", | ||
"version": "0.8.4", | ||
"main": "./src/angulartics.js", | ||
@@ -9,2 +9,2 @@ "dependencies": { | ||
} | ||
} | ||
} |
@@ -0,21 +1,32 @@ | ||
/** | ||
* @license Angulartics v0.8.4 | ||
* (c) 2013 Luis Farzati http://luisfarzati.github.io/angulartics | ||
* Universal Analytics update contributed by http://github.com/willmcclellan | ||
* License: MIT | ||
*/ | ||
(function(angular) { | ||
'use strict'; | ||
'use strict'; | ||
angular.module('angulartics.google.analytics', ['angulartics']) | ||
.config(['$analyticsProvider', | ||
function($analyticsProvider) { | ||
/** | ||
* @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) { | ||
$analyticsProvider.registerPageTrack(function(path) { | ||
if (window._gaq) window._gaq.push(['_trackPageview', path]); | ||
if (window.ga) ga('send', 'pageview', path); | ||
}); | ||
// GA already supports buffered invocations so we don't need | ||
// to wrap these inside angulartics.waitForVendorApi | ||
$analyticsProvider.registerEventTrack(function(action, properties) { | ||
if (window._gaq) window._gaq.push(['_trackEvent', properties.category, action, properties.label, properties.value]); | ||
if (window.ga) window.ga('send', 'event', properties.category, action, properties.label, properties.value); | ||
}); | ||
$analyticsProvider.registerPageTrack(function (path) { | ||
if (window._gaq) _gaq.push(['_trackPageview', path]); | ||
if (window.ga) ga('send', 'pageview', path); | ||
}); | ||
} | ||
]); | ||
$analyticsProvider.registerEventTrack(function (action, properties) { | ||
if (window._gaq) _gaq.push(['_trackEvent', properties.category, action, properties.label, properties.value]); | ||
if (window.ga) ga('send', 'event', properties.category, action, properties.label, properties.value); | ||
}); | ||
}]); | ||
})(angular); |
@@ -1,116 +0,187 @@ | ||
// Generated by CoffeeScript 1.6.2 | ||
/* | ||
jQuery Waypoints - v2.0.3 | ||
Copyright (c) 2011-2013 Caleb Troughton | ||
Dual licensed under the MIT license and GPL license. | ||
https://github.com/imakewebthings/jquery-waypoints/blob/master/licenses.txt | ||
*/ | ||
(function(){var t=[].indexOf||function(t){for(var e=0,n=this.length;e<n;e++){if(e in this&&this[e]===t)return e}return-1},e=[].slice;(function(t,e){if(typeof define==="function"&&define.amd){return define("waypoints",["jquery"],function(n){return e(n,t)})}else{return e(t.jQuery,t)}})(this,function(n,r){var i,o,l,s,f,u,a,c,h,d,p,y,v,w,g,m;i=n(r);c=t.call(r,"ontouchstart")>=0;s={horizontal:{},vertical:{}};f=1;a={};u="waypoints-context-id";p="resize.waypoints";y="scroll.waypoints";v=1;w="waypoints-waypoint-ids";g="waypoint";m="waypoints";o=function(){function t(t){var e=this;this.$element=t;this.element=t[0];this.didResize=false;this.didScroll=false;this.id="context"+f++;this.oldScroll={x:t.scrollLeft(),y:t.scrollTop()};this.waypoints={horizontal:{},vertical:{}};t.data(u,this.id);a[this.id]=this;t.bind(y,function(){var t;if(!(e.didScroll||c)){e.didScroll=true;t=function(){e.doScroll();return e.didScroll=false};return r.setTimeout(t,n[m].settings.scrollThrottle)}});t.bind(p,function(){var t;if(!e.didResize){e.didResize=true;t=function(){n[m]("refresh");return e.didResize=false};return r.setTimeout(t,n[m].settings.resizeThrottle)}})}t.prototype.doScroll=function(){var t,e=this;t={horizontal:{newScroll:this.$element.scrollLeft(),oldScroll:this.oldScroll.x,forward:"right",backward:"left"},vertical:{newScroll:this.$element.scrollTop(),oldScroll:this.oldScroll.y,forward:"down",backward:"up"}};if(c&&(!t.vertical.oldScroll||!t.vertical.newScroll)){n[m]("refresh")}n.each(t,function(t,r){var i,o,l;l=[];o=r.newScroll>r.oldScroll;i=o?r.forward:r.backward;n.each(e.waypoints[t],function(t,e){var n,i;if(r.oldScroll<(n=e.offset)&&n<=r.newScroll){return l.push(e)}else if(r.newScroll<(i=e.offset)&&i<=r.oldScroll){return l.push(e)}});l.sort(function(t,e){return t.offset-e.offset});if(!o){l.reverse()}return n.each(l,function(t,e){if(e.options.continuous||t===l.length-1){return e.trigger([i])}})});return this.oldScroll={x:t.horizontal.newScroll,y:t.vertical.newScroll}};t.prototype.refresh=function(){var t,e,r,i=this;r=n.isWindow(this.element);e=this.$element.offset();this.doScroll();t={horizontal:{contextOffset:r?0:e.left,contextScroll:r?0:this.oldScroll.x,contextDimension:this.$element.width(),oldScroll:this.oldScroll.x,forward:"right",backward:"left",offsetProp:"left"},vertical:{contextOffset:r?0:e.top,contextScroll:r?0:this.oldScroll.y,contextDimension:r?n[m]("viewportHeight"):this.$element.height(),oldScroll:this.oldScroll.y,forward:"down",backward:"up",offsetProp:"top"}};return n.each(t,function(t,e){return n.each(i.waypoints[t],function(t,r){var i,o,l,s,f;i=r.options.offset;l=r.offset;o=n.isWindow(r.element)?0:r.$element.offset()[e.offsetProp];if(n.isFunction(i)){i=i.apply(r.element)}else if(typeof i==="string"){i=parseFloat(i);if(r.options.offset.indexOf("%")>-1){i=Math.ceil(e.contextDimension*i/100)}}r.offset=o-e.contextOffset+e.contextScroll-i;if(r.options.onlyOnScroll&&l!=null||!r.enabled){return}if(l!==null&&l<(s=e.oldScroll)&&s<=r.offset){return r.trigger([e.backward])}else if(l!==null&&l>(f=e.oldScroll)&&f>=r.offset){return r.trigger([e.forward])}else if(l===null&&e.oldScroll>=r.offset){return r.trigger([e.forward])}})})};t.prototype.checkEmpty=function(){if(n.isEmptyObject(this.waypoints.horizontal)&&n.isEmptyObject(this.waypoints.vertical)){this.$element.unbind([p,y].join(" "));return delete a[this.id]}};return t}();l=function(){function t(t,e,r){var i,o;r=n.extend({},n.fn[g].defaults,r);if(r.offset==="bottom-in-view"){r.offset=function(){var t;t=n[m]("viewportHeight");if(!n.isWindow(e.element)){t=e.$element.height()}return t-n(this).outerHeight()}}this.$element=t;this.element=t[0];this.axis=r.horizontal?"horizontal":"vertical";this.callback=r.handler;this.context=e;this.enabled=r.enabled;this.id="waypoints"+v++;this.offset=null;this.options=r;e.waypoints[this.axis][this.id]=this;s[this.axis][this.id]=this;i=(o=t.data(w))!=null?o:[];i.push(this.id);t.data(w,i)}t.prototype.trigger=function(t){if(!this.enabled){return}if(this.callback!=null){this.callback.apply(this.element,t)}if(this.options.triggerOnce){return this.destroy()}};t.prototype.disable=function(){return this.enabled=false};t.prototype.enable=function(){this.context.refresh();return this.enabled=true};t.prototype.destroy=function(){delete s[this.axis][this.id];delete this.context.waypoints[this.axis][this.id];return this.context.checkEmpty()};t.getWaypointsByElement=function(t){var e,r;r=n(t).data(w);if(!r){return[]}e=n.extend({},s.horizontal,s.vertical);return n.map(r,function(t){return e[t]})};return t}();d={init:function(t,e){var r;if(e==null){e={}}if((r=e.handler)==null){e.handler=t}this.each(function(){var t,r,i,s;t=n(this);i=(s=e.context)!=null?s:n.fn[g].defaults.context;if(!n.isWindow(i)){i=t.closest(i)}i=n(i);r=a[i.data(u)];if(!r){r=new o(i)}return new l(t,r,e)});n[m]("refresh");return this},disable:function(){return d._invoke(this,"disable")},enable:function(){return d._invoke(this,"enable")},destroy:function(){return d._invoke(this,"destroy")},prev:function(t,e){return d._traverse.call(this,t,e,function(t,e,n){if(e>0){return t.push(n[e-1])}})},next:function(t,e){return d._traverse.call(this,t,e,function(t,e,n){if(e<n.length-1){return t.push(n[e+1])}})},_traverse:function(t,e,i){var o,l;if(t==null){t="vertical"}if(e==null){e=r}l=h.aggregate(e);o=[];this.each(function(){var e;e=n.inArray(this,l[t]);return i(o,e,l[t])});return this.pushStack(o)},_invoke:function(t,e){t.each(function(){var t;t=l.getWaypointsByElement(this);return n.each(t,function(t,n){n[e]();return true})});return this}};n.fn[g]=function(){var t,r;r=arguments[0],t=2<=arguments.length?e.call(arguments,1):[];if(d[r]){return d[r].apply(this,t)}else if(n.isFunction(r)){return d.init.apply(this,arguments)}else if(n.isPlainObject(r)){return d.init.apply(this,[null,r])}else if(!r){return n.error("jQuery Waypoints needs a callback function or handler option.")}else{return n.error("The "+r+" method does not exist in jQuery Waypoints.")}};n.fn[g].defaults={context:r,continuous:true,enabled:true,horizontal:false,offset:0,triggerOnce:false};h={refresh:function(){return n.each(a,function(t,e){return e.refresh()})},viewportHeight:function(){var t;return(t=r.innerHeight)!=null?t:i.height()},aggregate:function(t){var e,r,i;e=s;if(t){e=(i=a[n(t).data(u)])!=null?i.waypoints:void 0}if(!e){return[]}r={horizontal:[],vertical:[]};n.each(r,function(t,i){n.each(e[t],function(t,e){return i.push(e)});i.sort(function(t,e){return t.offset-e.offset});r[t]=n.map(i,function(t){return t.element});return r[t]=n.unique(r[t])});return r},above:function(t){if(t==null){t=r}return h._filter(t,"vertical",function(t,e){return e.offset<=t.oldScroll.y})},below:function(t){if(t==null){t=r}return h._filter(t,"vertical",function(t,e){return e.offset>t.oldScroll.y})},left:function(t){if(t==null){t=r}return h._filter(t,"horizontal",function(t,e){return e.offset<=t.oldScroll.x})},right:function(t){if(t==null){t=r}return h._filter(t,"horizontal",function(t,e){return e.offset>t.oldScroll.x})},enable:function(){return h._invoke("enable")},disable:function(){return h._invoke("disable")},destroy:function(){return h._invoke("destroy")},extendFn:function(t,e){return d[t]=e},_invoke:function(t){var e;e=n.extend({},s.vertical,s.horizontal);return n.each(e,function(e,n){n[t]();return true})},_filter:function(t,e,r){var i,o;i=a[n(t).data(u)];if(!i){return[]}o=[];n.each(i.waypoints[e],function(t,e){if(r(i,e)){return o.push(e)}});o.sort(function(t,e){return t.offset-e.offset});return n.map(o,function(t){return t.element})}};n[m]=function(){var t,n;n=arguments[0],t=2<=arguments.length?e.call(arguments,1):[];if(h[n]){return h[n].apply(null,t)}else{return h.aggregate.call(null,n)}};n[m].settings={resizeThrottle:100,scrollThrottle:30};return i.load(function(){return n[m]("refresh")})})}).call(this); | ||
(function(angular) { | ||
/** | ||
* @license Angulartics v0.8.4 | ||
* (c) 2013 Luis Farzati http://luisfarzati.github.io/angulartics | ||
* License: MIT | ||
*/ | ||
(function(angular, analytics) { | ||
'use strict'; | ||
var angulartics = window.angulartics || (window.angulartics = {}); | ||
angulartics.waitForVendorApi = function (objectName, delay, registerFn) { | ||
if (!window.hasOwnProperty(objectName)) { | ||
setTimeout(function () { angulartics.waitForVendorApi(objectName, delay, registerFn); }, delay); | ||
} | ||
else { | ||
registerFn(window[objectName]); | ||
} | ||
}; | ||
/** | ||
* @ngdoc overview | ||
* @name angulartics | ||
*/ | ||
angular.module('angulartics', []) | ||
.provider('$analytics', function() { | ||
var settings = { tracking: { auto: true } }; | ||
.provider('$analytics', function () { | ||
var settings = { | ||
pageTracking: { | ||
autoTrackFirstPage: true, | ||
autoTrackVirtualPages: true, | ||
bufferFlushDelay: 1000 | ||
}, | ||
eventTracking: { | ||
bufferFlushDelay: 1000 | ||
} | ||
}; | ||
var api = { | ||
settings: settings, | ||
pageTrack: angular.noop, | ||
eventTrack: angular.noop | ||
}; | ||
var cache = { | ||
pageviews: [], | ||
events: [] | ||
}; | ||
var registerPageTrack = function(fn) { | ||
api.pageTrack = fn; | ||
}; | ||
var registerEventTrack = function(fn) { | ||
api.eventTrack = fn; | ||
}; | ||
var bufferedPageTrack = function (path) { | ||
cache.pageviews.push(path); | ||
}; | ||
var bufferedEventTrack = function (event, properties) { | ||
cache.events.push({name: event, properties: properties}); | ||
}; | ||
return { | ||
$get: function() { return api; }, | ||
virtualPageviews: function(value) { this.settings.tracking.auto = value; }, | ||
settings: settings, | ||
registerPageTrack: registerPageTrack, | ||
registerEventTrack: registerEventTrack | ||
}; | ||
}) | ||
var api = { | ||
settings: settings, | ||
pageTrack: bufferedPageTrack, | ||
eventTrack: bufferedEventTrack | ||
}; | ||
.run(['$rootScope', '$location', '$analytics', '$log', function($rootScope, $location, $analytics, $log) { | ||
if ($analytics.settings.tracking.auto) { | ||
$rootScope.$on('$routeChangeStart', function() { | ||
$analytics.pageTrack($location.url()); | ||
}); | ||
} | ||
}]) | ||
var registerPageTrack = function (fn) { | ||
api.pageTrack = fn; | ||
angular.forEach(cache.pageviews, function (path, index) { | ||
setTimeout(function () { api.pageTrack(path); }, index * settings.pageTracking.bufferFlushDelay); | ||
}); | ||
}; | ||
var registerEventTrack = function (fn) { | ||
api.eventTrack = fn; | ||
angular.forEach(cache.events, function (event, index) { | ||
setTimeout(function () { api.eventTrack(event.name, event.properties); }, index * settings.eventTracking.bufferFlushDelay); | ||
}); | ||
}; | ||
.directive('analyticsOn', ['$analytics', function($analytics) { | ||
return { | ||
$get: function() { return api; }, | ||
settings: settings, | ||
virtualPageviews: function (value) { this.settings.pageTracking.autoTrackVirtualPages = value; }, | ||
firstPageview: function (value) { this.settings.pageTracking.autoTrackFirstPage = value; }, | ||
registerPageTrack: registerPageTrack, | ||
registerEventTrack: registerEventTrack | ||
}; | ||
}) | ||
function isCommand(element) { | ||
return ['a:','button:','button:button','button:submit','input:button','input:submit'].indexOf( | ||
element.tagName.toLowerCase()+':'+(element.type||'')) >= 0; | ||
} | ||
.run(['$rootScope', '$location', '$analytics', function ($rootScope, $location, $analytics) { | ||
if ($analytics.settings.pageTracking.autoTrackFirstPage) { | ||
$analytics.pageTrack($location.absUrl()); | ||
} | ||
if ($analytics.settings.pageTracking.autoTrackVirtualPages) { | ||
$rootScope.$on('$routeChangeSuccess', function (event, current) { | ||
if (current && (current.$$route||current).redirectTo) return; | ||
$analytics.pageTrack($location.url()); | ||
}); | ||
} | ||
}]) | ||
function inferEventType(element) { | ||
if (isCommand(element)) return 'click'; | ||
return 'click'; | ||
} | ||
.directive('analyticsOn', ['$analytics', function ($analytics) { | ||
function isCommand(element) { | ||
return ['a:','button:','button:button','button:submit','input:button','input:submit'].indexOf( | ||
element.tagName.toLowerCase()+':'+(element.type||'')) >= 0; | ||
} | ||
function inferEventName(element) { | ||
if (isCommand(element)) return element.innerText || element.value; | ||
return element.id || element.name || element.tagName; | ||
} | ||
function inferEventType(element) { | ||
if (isCommand(element)) return 'click'; | ||
return 'click'; | ||
} | ||
function isProperty(name) { | ||
return name.substr(0, 9) === 'analytics' && ['on', 'event'].indexOf(name.substr(10)) === -1; | ||
} | ||
function inferEventName(element) { | ||
if (isCommand(element)) return element.innerText || element.value; | ||
return element.id || element.name || element.tagName; | ||
} | ||
return { | ||
restrict: 'A', | ||
scope: false, | ||
link: function($scope, $element, $attrs) { | ||
var eventType = $attrs.analyticsOn || inferEventType($element[0]), | ||
eventName = $attrs.analyticsEvent || inferEventName($element[0]); | ||
function isProperty(name) { | ||
return name.substr(0, 9) === 'analytics' && ['on', 'event'].indexOf(name.substr(10)) === -1; | ||
} | ||
var properties = {}; | ||
angular.forEach($attrs.$attr, function(attr, name) { | ||
if (isProperty(attr)) { | ||
properties[name.slice(9).toLowerCase()] = $attrs[name]; | ||
} | ||
}); | ||
return { | ||
restrict: 'A', | ||
scope: false, | ||
link: function ($scope, $element, $attrs) { | ||
var eventType = $attrs.analyticsOn || inferEventType($element[0]), | ||
eventName = $attrs.analyticsEvent || inferEventName($element[0]); | ||
angular.element($element[0]).bind(eventType, function() { | ||
$analytics.eventTrack(eventName, properties); | ||
}); | ||
} | ||
}; | ||
}]); | ||
var properties = {}; | ||
angular.forEach($attrs.$attr, function(attr, name) { | ||
if (isProperty(attr)) { | ||
properties[name.slice(9).toLowerCase()] = $attrs[name]; | ||
} | ||
}); | ||
angular.element($element[0]).bind(eventType, function () { | ||
$analytics.eventTrack(eventName, properties); | ||
}); | ||
} | ||
}; | ||
}]); | ||
})(angular); | ||
/** | ||
* @license Angulartics v0.8.4 | ||
* (c) 2013 Luis Farzati http://luisfarzati.github.io/angulartics | ||
* Universal Analytics update contributed by http://github.com/willmcclellan | ||
* License: MIT | ||
*/ | ||
(function(angular) { | ||
angular.module('angulartics.google.analytics', ['angulartics']) | ||
.config(['$analyticsProvider', | ||
function($analyticsProvider) { | ||
'use strict'; | ||
$analyticsProvider.registerPageTrack(function(path) { | ||
if (window._gaq) window._gaq.push(['_trackPageview', path]); | ||
if (window.ga) ga('send', 'pageview', path); | ||
}); | ||
/** | ||
* @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) { | ||
$analyticsProvider.registerEventTrack(function(action, properties) { | ||
if (window._gaq) window._gaq.push(['_trackEvent', properties.category, action, properties.label, properties.value]); | ||
if (window.ga) window.ga('send', 'event', properties.category, action, properties.label, properties.value); | ||
}); | ||
// GA already supports buffered invocations so we don't need | ||
// to wrap these inside angulartics.waitForVendorApi | ||
} | ||
]); | ||
$analyticsProvider.registerPageTrack(function (path) { | ||
if (window._gaq) _gaq.push(['_trackPageview', path]); | ||
if (window.ga) ga('send', 'pageview', path); | ||
}); | ||
$analyticsProvider.registerEventTrack(function (action, properties) { | ||
if (window._gaq) _gaq.push(['_trackEvent', properties.category, action, properties.label, properties.value]); | ||
if (window.ga) ga('send', 'event', properties.category, action, properties.label, properties.value); | ||
}); | ||
}]); | ||
})(angular); | ||
/** | ||
* Hey! You are not supposed to know about this feature yet! :) | ||
* @license Angulartics v0.8.4 | ||
* (c) 2013 Luis Farzati http://luisfarzati.github.io/angulartics | ||
* License: MIT | ||
*/ | ||
(function(angular) { | ||
(function (angular) { | ||
'use strict'; | ||
/** | ||
* @ngdoc overview | ||
* @name angulartics.scroll | ||
* Provides an implementation of jQuery Waypoints (http://imakewebthings.com/jquery-waypoints/) | ||
* for use as a valid DOM event in analytics-on. | ||
*/ | ||
angular.module('angulartics.scroll', ['angulartics']) | ||
.directive('analyticsOn', ['$analytics', function ($analytics) { | ||
function inferEventName(element) { | ||
return element.id; | ||
} | ||
function isProperty(name) { | ||
return name.substr(0, 9) === 'analytics' && ['on', 'event'].indexOf(name.substr(10)) === -1; | ||
return name.substr(0, 8) === 'scrollby'; | ||
} | ||
function cast(value) { | ||
if (['', 'true', 'false'].indexOf(value) > -1) { | ||
return value.replace('', 'true') === 'true'; | ||
} | ||
return value; | ||
} | ||
@@ -122,19 +193,29 @@ return { | ||
link: function ($scope, $element, $attrs) { | ||
if ($attrs.analyticsOn !== 'scroll') return; | ||
var eventName = $attrs.analyticsEvent || inferEventName($element[0]); | ||
if ($attrs.analyticsOn !== 'scrollby') return; | ||
console.log('registering analytics scroll for', $element[0] ); | ||
var properties = {}; | ||
properties.category = 'Scrolling'; | ||
var properties = { continuous: false, triggerOnce: true }; | ||
angular.forEach($attrs.$attr, function(attr, name) { | ||
if (isProperty(attr)) { | ||
properties[name.slice(9).toLowerCase()] = $attrs[name]; | ||
properties[name.slice(8,9).toLowerCase()+name.slice(9)] = cast($attrs[name]); | ||
} | ||
}); | ||
console.log(properties); | ||
$($element[0]).waypoint(function () { | ||
$analytics.eventTrack(eventName, properties); | ||
}, { triggerOnce: true, offset: '50%', continuous: false }); | ||
this.dispatchEvent(new Event('scrollby')); | ||
}, properties); | ||
// { triggerOnce: true, offset: '10%', continuous: false } | ||
} | ||
} | ||
}]) | ||
})(angular); | ||
})(angular); | ||
/* | ||
jQuery Waypoints - v2.0.3 | ||
Copyright (c) 2011-2013 Caleb Troughton | ||
Dual licensed under the MIT license and GPL license. | ||
https://github.com/imakewebthings/jquery-waypoints/blob/master/licenses.txt | ||
*/ | ||
(function(){var t=[].indexOf||function(t){for(var e=0,n=this.length;e<n;e++){if(e in this&&this[e]===t)return e}return-1},e=[].slice;(function(t,e){if(typeof define==="function"&&define.amd){return define("waypoints",["jquery"],function(n){return e(n,t)})}else{return e(t.jQuery,t)}})(this,function(n,r){var i,o,l,s,f,u,a,c,h,d,p,y,v,w,g,m;i=n(r);c=t.call(r,"ontouchstart")>=0;s={horizontal:{},vertical:{}};f=1;a={};u="waypoints-context-id";p="resize.waypoints";y="scroll.waypoints";v=1;w="waypoints-waypoint-ids";g="waypoint";m="waypoints";o=function(){function t(t){var e=this;this.$element=t;this.element=t[0];this.didResize=false;this.didScroll=false;this.id="context"+f++;this.oldScroll={x:t.scrollLeft(),y:t.scrollTop()};this.waypoints={horizontal:{},vertical:{}};t.data(u,this.id);a[this.id]=this;t.bind(y,function(){var t;if(!(e.didScroll||c)){e.didScroll=true;t=function(){e.doScroll();return e.didScroll=false};return r.setTimeout(t,n[m].settings.scrollThrottle)}});t.bind(p,function(){var t;if(!e.didResize){e.didResize=true;t=function(){n[m]("refresh");return e.didResize=false};return r.setTimeout(t,n[m].settings.resizeThrottle)}})}t.prototype.doScroll=function(){var t,e=this;t={horizontal:{newScroll:this.$element.scrollLeft(),oldScroll:this.oldScroll.x,forward:"right",backward:"left"},vertical:{newScroll:this.$element.scrollTop(),oldScroll:this.oldScroll.y,forward:"down",backward:"up"}};if(c&&(!t.vertical.oldScroll||!t.vertical.newScroll)){n[m]("refresh")}n.each(t,function(t,r){var i,o,l;l=[];o=r.newScroll>r.oldScroll;i=o?r.forward:r.backward;n.each(e.waypoints[t],function(t,e){var n,i;if(r.oldScroll<(n=e.offset)&&n<=r.newScroll){return l.push(e)}else if(r.newScroll<(i=e.offset)&&i<=r.oldScroll){return l.push(e)}});l.sort(function(t,e){return t.offset-e.offset});if(!o){l.reverse()}return n.each(l,function(t,e){if(e.options.continuous||t===l.length-1){return e.trigger([i])}})});return this.oldScroll={x:t.horizontal.newScroll,y:t.vertical.newScroll}};t.prototype.refresh=function(){var t,e,r,i=this;r=n.isWindow(this.element);e=this.$element.offset();this.doScroll();t={horizontal:{contextOffset:r?0:e.left,contextScroll:r?0:this.oldScroll.x,contextDimension:this.$element.width(),oldScroll:this.oldScroll.x,forward:"right",backward:"left",offsetProp:"left"},vertical:{contextOffset:r?0:e.top,contextScroll:r?0:this.oldScroll.y,contextDimension:r?n[m]("viewportHeight"):this.$element.height(),oldScroll:this.oldScroll.y,forward:"down",backward:"up",offsetProp:"top"}};return n.each(t,function(t,e){return n.each(i.waypoints[t],function(t,r){var i,o,l,s,f;i=r.options.offset;l=r.offset;o=n.isWindow(r.element)?0:r.$element.offset()[e.offsetProp];if(n.isFunction(i)){i=i.apply(r.element)}else if(typeof i==="string"){i=parseFloat(i);if(r.options.offset.indexOf("%")>-1){i=Math.ceil(e.contextDimension*i/100)}}r.offset=o-e.contextOffset+e.contextScroll-i;if(r.options.onlyOnScroll&&l!=null||!r.enabled){return}if(l!==null&&l<(s=e.oldScroll)&&s<=r.offset){return r.trigger([e.backward])}else if(l!==null&&l>(f=e.oldScroll)&&f>=r.offset){return r.trigger([e.forward])}else if(l===null&&e.oldScroll>=r.offset){return r.trigger([e.forward])}})})};t.prototype.checkEmpty=function(){if(n.isEmptyObject(this.waypoints.horizontal)&&n.isEmptyObject(this.waypoints.vertical)){this.$element.unbind([p,y].join(" "));return delete a[this.id]}};return t}();l=function(){function t(t,e,r){var i,o;r=n.extend({},n.fn[g].defaults,r);if(r.offset==="bottom-in-view"){r.offset=function(){var t;t=n[m]("viewportHeight");if(!n.isWindow(e.element)){t=e.$element.height()}return t-n(this).outerHeight()}}this.$element=t;this.element=t[0];this.axis=r.horizontal?"horizontal":"vertical";this.callback=r.handler;this.context=e;this.enabled=r.enabled;this.id="waypoints"+v++;this.offset=null;this.options=r;e.waypoints[this.axis][this.id]=this;s[this.axis][this.id]=this;i=(o=t.data(w))!=null?o:[];i.push(this.id);t.data(w,i)}t.prototype.trigger=function(t){if(!this.enabled){return}if(this.callback!=null){this.callback.apply(this.element,t)}if(this.options.triggerOnce){return this.destroy()}};t.prototype.disable=function(){return this.enabled=false};t.prototype.enable=function(){this.context.refresh();return this.enabled=true};t.prototype.destroy=function(){delete s[this.axis][this.id];delete this.context.waypoints[this.axis][this.id];return this.context.checkEmpty()};t.getWaypointsByElement=function(t){var e,r;r=n(t).data(w);if(!r){return[]}e=n.extend({},s.horizontal,s.vertical);return n.map(r,function(t){return e[t]})};return t}();d={init:function(t,e){var r;if(e==null){e={}}if((r=e.handler)==null){e.handler=t}this.each(function(){var t,r,i,s;t=n(this);i=(s=e.context)!=null?s:n.fn[g].defaults.context;if(!n.isWindow(i)){i=t.closest(i)}i=n(i);r=a[i.data(u)];if(!r){r=new o(i)}return new l(t,r,e)});n[m]("refresh");return this},disable:function(){return d._invoke(this,"disable")},enable:function(){return d._invoke(this,"enable")},destroy:function(){return d._invoke(this,"destroy")},prev:function(t,e){return d._traverse.call(this,t,e,function(t,e,n){if(e>0){return t.push(n[e-1])}})},next:function(t,e){return d._traverse.call(this,t,e,function(t,e,n){if(e<n.length-1){return t.push(n[e+1])}})},_traverse:function(t,e,i){var o,l;if(t==null){t="vertical"}if(e==null){e=r}l=h.aggregate(e);o=[];this.each(function(){var e;e=n.inArray(this,l[t]);return i(o,e,l[t])});return this.pushStack(o)},_invoke:function(t,e){t.each(function(){var t;t=l.getWaypointsByElement(this);return n.each(t,function(t,n){n[e]();return true})});return this}};n.fn[g]=function(){var t,r;r=arguments[0],t=2<=arguments.length?e.call(arguments,1):[];if(d[r]){return d[r].apply(this,t)}else if(n.isFunction(r)){return d.init.apply(this,arguments)}else if(n.isPlainObject(r)){return d.init.apply(this,[null,r])}else if(!r){return n.error("jQuery Waypoints needs a callback function or handler option.")}else{return n.error("The "+r+" method does not exist in jQuery Waypoints.")}};n.fn[g].defaults={context:r,continuous:true,enabled:true,horizontal:false,offset:0,triggerOnce:false};h={refresh:function(){return n.each(a,function(t,e){return e.refresh()})},viewportHeight:function(){var t;return(t=r.innerHeight)!=null?t:i.height()},aggregate:function(t){var e,r,i;e=s;if(t){e=(i=a[n(t).data(u)])!=null?i.waypoints:void 0}if(!e){return[]}r={horizontal:[],vertical:[]};n.each(r,function(t,i){n.each(e[t],function(t,e){return i.push(e)});i.sort(function(t,e){return t.offset-e.offset});r[t]=n.map(i,function(t){return t.element});return r[t]=n.unique(r[t])});return r},above:function(t){if(t==null){t=r}return h._filter(t,"vertical",function(t,e){return e.offset<=t.oldScroll.y})},below:function(t){if(t==null){t=r}return h._filter(t,"vertical",function(t,e){return e.offset>t.oldScroll.y})},left:function(t){if(t==null){t=r}return h._filter(t,"horizontal",function(t,e){return e.offset<=t.oldScroll.x})},right:function(t){if(t==null){t=r}return h._filter(t,"horizontal",function(t,e){return e.offset>t.oldScroll.x})},enable:function(){return h._invoke("enable")},disable:function(){return h._invoke("disable")},destroy:function(){return h._invoke("destroy")},extendFn:function(t,e){return d[t]=e},_invoke:function(t){var e;e=n.extend({},s.vertical,s.horizontal);return n.each(e,function(e,n){n[t]();return true})},_filter:function(t,e,r){var i,o;i=a[n(t).data(u)];if(!i){return[]}o=[];n.each(i.waypoints[e],function(t,e){if(r(i,e)){return o.push(e)}});o.sort(function(t,e){return t.offset-e.offset});return n.map(o,function(t){return t.element})}};n[m]=function(){var t,n;n=arguments[0],t=2<=arguments.length?e.call(arguments,1):[];if(h[n]){return h[n].apply(null,t)}else{return h.aggregate.call(null,n)}};n[m].settings={resizeThrottle:100,scrollThrottle:30};return i.load(function(){return n[m]("refresh")})})}).call(this); |
{ | ||
"name": "angulartics", | ||
"description": "Vendor-agnostic web analytics for AngularJS applications", | ||
"version": "0.7.4", | ||
"version": "0.8.4", | ||
"filename": "./src/angulartics.min.js", | ||
@@ -6,0 +6,0 @@ "homepage": "http://luisfarzati.github.io/angulartics", |
/** | ||
* @license Angulartics v0.7.4 | ||
* @license Angulartics v0.8.4 | ||
* (c) 2013 Luis Farzati http://luisfarzati.github.io/angulartics | ||
@@ -4,0 +4,0 @@ * Contributed by http://github.com/chechoacosta |
/** | ||
* @license Angulartics v0.7.4 | ||
* @license Angulartics v0.8.4 | ||
* (c) 2013 Luis Farzati http://luisfarzati.github.io/angulartics | ||
@@ -4,0 +4,0 @@ * Universal Analytics update contributed by http://github.com/willmcclellan |
/** | ||
* @license Angulartics v0.7.4 | ||
* @license Angulartics v0.8.4 | ||
* (c) 2013 Luis Farzati http://luisfarzati.github.io/angulartics | ||
@@ -4,0 +4,0 @@ * License: MIT |
/** | ||
* @license Angulartics v0.7.4 | ||
* @license Angulartics v0.8.4 | ||
* (c) 2013 Luis Farzati http://luisfarzati.github.io/angulartics | ||
@@ -4,0 +4,0 @@ * Contributed by http://github.com/L42y |
/** | ||
* Hey! You are not supposed to know about this feature yet! :) | ||
* | ||
* @license Angulartics v0.8.4 | ||
* (c) 2013 Luis Farzati http://luisfarzati.github.io/angulartics | ||
* License: MIT | ||
*/ | ||
@@ -8,10 +9,19 @@ (function (angular) { | ||
/** | ||
* @ngdoc overview | ||
* @name angulartics.scroll | ||
* Provides an implementation of jQuery Waypoints (http://imakewebthings.com/jquery-waypoints/) | ||
* for use as a valid DOM event in analytics-on. | ||
*/ | ||
angular.module('angulartics.scroll', ['angulartics']) | ||
.directive('analyticsOn', ['$analytics', function ($analytics) { | ||
function inferEventName(element) { | ||
return element.id; | ||
} | ||
function isProperty(name) { | ||
return name.substr(0, 9) === 'analytics' && ['on', 'event'].indexOf(name.substr(10)) === -1; | ||
return name.substr(0, 8) === 'scrollby'; | ||
} | ||
function cast(value) { | ||
if (['', 'true', 'false'].indexOf(value) > -1) { | ||
return value.replace('', 'true') === 'true'; | ||
} | ||
return value; | ||
} | ||
@@ -23,21 +33,29 @@ return { | ||
link: function ($scope, $element, $attrs) { | ||
if ($attrs.analyticsOn !== 'scroll') return; | ||
if ($attrs.analyticsOn !== 'scrollby') return; | ||
console.log('registering analytics scroll for', $element[0] ); | ||
var eventName = $attrs.analyticsEvent || inferEventName($element[0]); | ||
var properties = {}; | ||
properties.category = 'Scrolling'; | ||
var properties = { continuous: false, triggerOnce: true }; | ||
angular.forEach($attrs.$attr, function(attr, name) { | ||
if (isProperty(attr)) { | ||
properties[name.slice(9).toLowerCase()] = $attrs[name]; | ||
properties[name.slice(8,9).toLowerCase()+name.slice(9)] = cast($attrs[name]); | ||
} | ||
}); | ||
console.log(properties); | ||
$($element[0]).waypoint(function () { | ||
$analytics.eventTrack(eventName, properties); | ||
}, { triggerOnce: true, offset: '50%', continuous: false }); | ||
this.dispatchEvent(new Event('scrollby')); | ||
}, properties); | ||
// { triggerOnce: true, offset: '10%', continuous: false } | ||
} | ||
} | ||
}]) | ||
})(angular); | ||
})(angular); | ||
/* | ||
jQuery Waypoints - v2.0.3 | ||
Copyright (c) 2011-2013 Caleb Troughton | ||
Dual licensed under the MIT license and GPL license. | ||
https://github.com/imakewebthings/jquery-waypoints/blob/master/licenses.txt | ||
*/ | ||
(function(){var t=[].indexOf||function(t){for(var e=0,n=this.length;e<n;e++){if(e in this&&this[e]===t)return e}return-1},e=[].slice;(function(t,e){if(typeof define==="function"&&define.amd){return define("waypoints",["jquery"],function(n){return e(n,t)})}else{return e(t.jQuery,t)}})(this,function(n,r){var i,o,l,s,f,u,a,c,h,d,p,y,v,w,g,m;i=n(r);c=t.call(r,"ontouchstart")>=0;s={horizontal:{},vertical:{}};f=1;a={};u="waypoints-context-id";p="resize.waypoints";y="scroll.waypoints";v=1;w="waypoints-waypoint-ids";g="waypoint";m="waypoints";o=function(){function t(t){var e=this;this.$element=t;this.element=t[0];this.didResize=false;this.didScroll=false;this.id="context"+f++;this.oldScroll={x:t.scrollLeft(),y:t.scrollTop()};this.waypoints={horizontal:{},vertical:{}};t.data(u,this.id);a[this.id]=this;t.bind(y,function(){var t;if(!(e.didScroll||c)){e.didScroll=true;t=function(){e.doScroll();return e.didScroll=false};return r.setTimeout(t,n[m].settings.scrollThrottle)}});t.bind(p,function(){var t;if(!e.didResize){e.didResize=true;t=function(){n[m]("refresh");return e.didResize=false};return r.setTimeout(t,n[m].settings.resizeThrottle)}})}t.prototype.doScroll=function(){var t,e=this;t={horizontal:{newScroll:this.$element.scrollLeft(),oldScroll:this.oldScroll.x,forward:"right",backward:"left"},vertical:{newScroll:this.$element.scrollTop(),oldScroll:this.oldScroll.y,forward:"down",backward:"up"}};if(c&&(!t.vertical.oldScroll||!t.vertical.newScroll)){n[m]("refresh")}n.each(t,function(t,r){var i,o,l;l=[];o=r.newScroll>r.oldScroll;i=o?r.forward:r.backward;n.each(e.waypoints[t],function(t,e){var n,i;if(r.oldScroll<(n=e.offset)&&n<=r.newScroll){return l.push(e)}else if(r.newScroll<(i=e.offset)&&i<=r.oldScroll){return l.push(e)}});l.sort(function(t,e){return t.offset-e.offset});if(!o){l.reverse()}return n.each(l,function(t,e){if(e.options.continuous||t===l.length-1){return e.trigger([i])}})});return this.oldScroll={x:t.horizontal.newScroll,y:t.vertical.newScroll}};t.prototype.refresh=function(){var t,e,r,i=this;r=n.isWindow(this.element);e=this.$element.offset();this.doScroll();t={horizontal:{contextOffset:r?0:e.left,contextScroll:r?0:this.oldScroll.x,contextDimension:this.$element.width(),oldScroll:this.oldScroll.x,forward:"right",backward:"left",offsetProp:"left"},vertical:{contextOffset:r?0:e.top,contextScroll:r?0:this.oldScroll.y,contextDimension:r?n[m]("viewportHeight"):this.$element.height(),oldScroll:this.oldScroll.y,forward:"down",backward:"up",offsetProp:"top"}};return n.each(t,function(t,e){return n.each(i.waypoints[t],function(t,r){var i,o,l,s,f;i=r.options.offset;l=r.offset;o=n.isWindow(r.element)?0:r.$element.offset()[e.offsetProp];if(n.isFunction(i)){i=i.apply(r.element)}else if(typeof i==="string"){i=parseFloat(i);if(r.options.offset.indexOf("%")>-1){i=Math.ceil(e.contextDimension*i/100)}}r.offset=o-e.contextOffset+e.contextScroll-i;if(r.options.onlyOnScroll&&l!=null||!r.enabled){return}if(l!==null&&l<(s=e.oldScroll)&&s<=r.offset){return r.trigger([e.backward])}else if(l!==null&&l>(f=e.oldScroll)&&f>=r.offset){return r.trigger([e.forward])}else if(l===null&&e.oldScroll>=r.offset){return r.trigger([e.forward])}})})};t.prototype.checkEmpty=function(){if(n.isEmptyObject(this.waypoints.horizontal)&&n.isEmptyObject(this.waypoints.vertical)){this.$element.unbind([p,y].join(" "));return delete a[this.id]}};return t}();l=function(){function t(t,e,r){var i,o;r=n.extend({},n.fn[g].defaults,r);if(r.offset==="bottom-in-view"){r.offset=function(){var t;t=n[m]("viewportHeight");if(!n.isWindow(e.element)){t=e.$element.height()}return t-n(this).outerHeight()}}this.$element=t;this.element=t[0];this.axis=r.horizontal?"horizontal":"vertical";this.callback=r.handler;this.context=e;this.enabled=r.enabled;this.id="waypoints"+v++;this.offset=null;this.options=r;e.waypoints[this.axis][this.id]=this;s[this.axis][this.id]=this;i=(o=t.data(w))!=null?o:[];i.push(this.id);t.data(w,i)}t.prototype.trigger=function(t){if(!this.enabled){return}if(this.callback!=null){this.callback.apply(this.element,t)}if(this.options.triggerOnce){return this.destroy()}};t.prototype.disable=function(){return this.enabled=false};t.prototype.enable=function(){this.context.refresh();return this.enabled=true};t.prototype.destroy=function(){delete s[this.axis][this.id];delete this.context.waypoints[this.axis][this.id];return this.context.checkEmpty()};t.getWaypointsByElement=function(t){var e,r;r=n(t).data(w);if(!r){return[]}e=n.extend({},s.horizontal,s.vertical);return n.map(r,function(t){return e[t]})};return t}();d={init:function(t,e){var r;if(e==null){e={}}if((r=e.handler)==null){e.handler=t}this.each(function(){var t,r,i,s;t=n(this);i=(s=e.context)!=null?s:n.fn[g].defaults.context;if(!n.isWindow(i)){i=t.closest(i)}i=n(i);r=a[i.data(u)];if(!r){r=new o(i)}return new l(t,r,e)});n[m]("refresh");return this},disable:function(){return d._invoke(this,"disable")},enable:function(){return d._invoke(this,"enable")},destroy:function(){return d._invoke(this,"destroy")},prev:function(t,e){return d._traverse.call(this,t,e,function(t,e,n){if(e>0){return t.push(n[e-1])}})},next:function(t,e){return d._traverse.call(this,t,e,function(t,e,n){if(e<n.length-1){return t.push(n[e+1])}})},_traverse:function(t,e,i){var o,l;if(t==null){t="vertical"}if(e==null){e=r}l=h.aggregate(e);o=[];this.each(function(){var e;e=n.inArray(this,l[t]);return i(o,e,l[t])});return this.pushStack(o)},_invoke:function(t,e){t.each(function(){var t;t=l.getWaypointsByElement(this);return n.each(t,function(t,n){n[e]();return true})});return this}};n.fn[g]=function(){var t,r;r=arguments[0],t=2<=arguments.length?e.call(arguments,1):[];if(d[r]){return d[r].apply(this,t)}else if(n.isFunction(r)){return d.init.apply(this,arguments)}else if(n.isPlainObject(r)){return d.init.apply(this,[null,r])}else if(!r){return n.error("jQuery Waypoints needs a callback function or handler option.")}else{return n.error("The "+r+" method does not exist in jQuery Waypoints.")}};n.fn[g].defaults={context:r,continuous:true,enabled:true,horizontal:false,offset:0,triggerOnce:false};h={refresh:function(){return n.each(a,function(t,e){return e.refresh()})},viewportHeight:function(){var t;return(t=r.innerHeight)!=null?t:i.height()},aggregate:function(t){var e,r,i;e=s;if(t){e=(i=a[n(t).data(u)])!=null?i.waypoints:void 0}if(!e){return[]}r={horizontal:[],vertical:[]};n.each(r,function(t,i){n.each(e[t],function(t,e){return i.push(e)});i.sort(function(t,e){return t.offset-e.offset});r[t]=n.map(i,function(t){return t.element});return r[t]=n.unique(r[t])});return r},above:function(t){if(t==null){t=r}return h._filter(t,"vertical",function(t,e){return e.offset<=t.oldScroll.y})},below:function(t){if(t==null){t=r}return h._filter(t,"vertical",function(t,e){return e.offset>t.oldScroll.y})},left:function(t){if(t==null){t=r}return h._filter(t,"horizontal",function(t,e){return e.offset<=t.oldScroll.x})},right:function(t){if(t==null){t=r}return h._filter(t,"horizontal",function(t,e){return e.offset>t.oldScroll.x})},enable:function(){return h._invoke("enable")},disable:function(){return h._invoke("disable")},destroy:function(){return h._invoke("destroy")},extendFn:function(t,e){return d[t]=e},_invoke:function(t){var e;e=n.extend({},s.vertical,s.horizontal);return n.each(e,function(e,n){n[t]();return true})},_filter:function(t,e,r){var i,o;i=a[n(t).data(u)];if(!i){return[]}o=[];n.each(i.waypoints[e],function(t,e){if(r(i,e)){return o.push(e)}});o.sort(function(t,e){return t.offset-e.offset});return n.map(o,function(t){return t.element})}};n[m]=function(){var t,n;n=arguments[0],t=2<=arguments.length?e.call(arguments,1):[];if(h[n]){return h[n].apply(null,t)}else{return h.aggregate.call(null,n)}};n[m].settings={resizeThrottle:100,scrollThrottle:30};return i.load(function(){return n[m]("refresh")})})}).call(this); |
/** | ||
* @license Angulartics v0.7.4 | ||
* @license Angulartics v0.8.4 | ||
* (c) 2013 Luis Farzati http://luisfarzati.github.io/angulartics | ||
@@ -4,0 +4,0 @@ * License: MIT |
/** | ||
* @license Angulartics v0.7.4 | ||
* @license Angulartics v0.8.4 | ||
* (c) 2013 Luis Farzati http://luisfarzati.github.io/angulartics | ||
@@ -4,0 +4,0 @@ * License: MIT |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
77268
623
0