vue-analytics
Version:
Google Analytics plugin for Vue
6 lines • 4.22 kB
JavaScript
/*!
* vue-analytics v4.0.0
* (c) 2017 Matteo Gabriele
* Released under the ISC License.
*/
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("load-script")):"function"==typeof define&&define.amd?define(["load-script"],t):e.VueAnalytics=t(e.loadScript)}(this,function(e){"use strict";function t(e){return e.replace(/-/gi,"")}function n(){return[].concat(x.id)}function o(e){return k(x,e)}function a(e){for(var o=arguments.length,a=Array(o>1?o-1:0),r=1;r<o;r++)a[r-1]=arguments[r];if("undefined"!=typeof window.ga){var i=n();i.forEach(function(n){var o,r=t(n),u=i.length>1?r+"."+e:e;(o=window).ga.apply(o,[u].concat(a))})}}function r(e,t){if(!e)return void w("Is not possible to track the current route without VueRouter installed");var n={page:e.currentRoute.path,title:e.currentRoute.name,location:window.location.href};return"function"==typeof t[1]&&(n.hitCallback=t[1]),n}function i(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];var o=t[0];return"VueRouter"===o.constructor.name?void a("send","pageview",r(o,t)):void a.apply(void 0,["send","pageview"].concat(t))}function u(){if("undefined"!=typeof window.ga){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];if(t.length)return"object"===b(t[0])&&t[0].constructor===Object?void a("set",t[0]):t.length<2||"string"!=typeof t[0]&&"string"!=typeof t[1]?void w("$ga.set needs a field name and a field value, or you can pass an object literal"):void a("set",t[0],t[1])}}function c(e){if(!e&&x.autoTracking.page){var t="https://github.com/MatteoGabriele/vue-analytics#auto-tracking";return void w("page auto-tracking doesn't work without a router instance.",t)}if(x.autoTracking.page&&e){var n=e.currentRoute;m(n.name)||(u("page",n.path),i(e)),e.afterEach(function(t){var n=t.path,o=t.name;m(o)||(u("page",n),i(e))})}}function l(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];a("send","exception",{exDescription:e,exFatal:t})}function f(){x.autoTracking.exception&&(window.onerror=function(e){return l(e.message||e)})}function d(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];a.apply(void 0,["send","event"].concat(t))}function s(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];a.apply(void 0,["send","timing"].concat(t))}function g(){a.apply(void 0,arguments)}function p(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];a.apply(void 0,["send","social"].concat(t))}function v(e){a("require",e)}function y(o,r){if(!x.manual){if(!x.id||!x.id.length){var i="https://github.com/MatteoGabriele/vue-analytics#usage";return void w("Please enter a Google Analaytics tracking ID",i)}var u=x.userId||{},c=x.debug.enabled?"_debug":"",l="https://www.google-analytics.com/analytics"+c+".js";e(l,function(e,i){if(e)return void w("Ops! Could't load the Google Analytics script");var c=setInterval(function(){if(window.ga){clearInterval(c),x.debug.enabled&&(window.ga_debug={trace:x.debug.trace});var e=n();e.forEach(function(n){e.length>1&&(u.name=t(n)),window.ga("create",n,"auto",u)}),r&&"function"==typeof r&&r(),x.debug.sendHitTask||A.set("sendHitTask",null),a("send","pageview"),A.autoTrackException(),A.autoTrackPage(o)}},10)})}}function h(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.router;delete t.router,o(t),y(n,t.onReady),e.prototype.$ga=e.$ga=A}e="default"in e?e.default:e;var b="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},w=function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];console.warn("[VueAnalytics] "+t.join(" "))},m=function(e){return!(!x.ignoreRoutes.length||x.ignoreRoutes.indexOf(e)===-1)},k=function e(t,n){return Object.keys(n).forEach(function(o){return t[o]&&"object"===b(t[o])?void e(t[o],n[o]):void(t[o]=n[o])}),t},x={debug:{enabled:!1,trace:!1,sendHitTask:!0},autoTracking:{exception:!1,page:!0},id:null,userId:null,ignoreRoutes:[]},A={autoTrackPage:c,autoTrackException:f,social:p,page:i,event:d,time:s,exception:l,set:u,query:g,require:v},T={install:h,getName:t};return T});