angular-analizer
Version:
A slightly differnet take on angular analytics
1 lines • 4.64 kB
JavaScript
!function(){"use strict";angular.module("analizer",[])}(),function(){"use strict";function e(e){var n=t();e.on("url",function(t){e.trackPageViews!==!1&&(n({command:"set",page:t.relative}),n({hitType:"pageview",page:t.relative}))}),e.on("click",function(e){n({hitType:"event",eventCategory:e.type,eventAction:e.action,eventLabel:e.label})}),e.on("onComplete",function(e){n({hitType:"event",eventCategory:e.type,eventAction:e.action,eventLabel:e.label})}),e.on("onCompleteError",function(e){n({hitType:"event",eventCategory:e.type,eventAction:e.action,eventLabel:e.label})}),e.on("setCustomData",function(e){var t={};t[e.name]=e.value.toString(),n(angular.extend({command:"set"},t))}),e.on("setUser",function(e){n(angular.extend({command:"set"},{userId:e.toString()}))}),e.on("timing",function(e){n({hitType:"timing",timingCategory:e.category,timingVar:e.label,timingValue:e.milliseconds})})}function t(){return"function"!=typeof ga?angular.noop:function(e){var t=e.command||"send";delete e.command,ga(t,e)}}e.$inject=["$analizerProvider"],angular.module("analizer.ga",["analizer"]).config(e)}(),function(){"use strict";function e(){function e(e,t){n.indexOf(e)!==-1&&(l[e].indexOf(t)>-1||l[e].push(t))}function t(e,t){if(t){var n=l[e].indexOf(t)||-1;n>-1&&l[e].splice(n)}else l[e]=[]}function o(e,t){(l[e]||[]).forEach(function(e){e(t)})}function i(e,t){o("setCustomData",{name:e,value:t})}function a(e){o("setUser",e)}function r(e,t,n){o("timing",{category:e,label:t,milliseconds:n})}function c(){var e={on:u.on,off:u.off,emit:u.emit,trackPageViews:u.trackPageViews,setCustomData:u.setCustomData,setUser:u.setUser,sendTiming:u.sendTiming};return e}var l={};n.forEach(function(e){l[e]=[]});var u={trackPageViews:!0,on:e,off:t,emit:o,setUser:a,setCustomData:i,sendTiming:r,$get:c};return u}function t(e,t){e.trackPageViews!==!1&&t.$on("$locationChangeSuccess",function(t,n){var o=n.replace(window.location.origin,"");e.emit("url",{origin:window.location.origin,relative:o,absolute:n})})}t.$inject=["$analizer","$rootScope"],angular.module("analizer").provider("$analizer",e).run(t);var n=["click","url","onComplete","onCompleteError","setCustomData","setUser","timing"]}(),function(){"use strict";function e(){function e(e){return void 0!==o[e]}function i(e){var i;e.attr("role");if(i=o[i],!i&&(i=n[i],!i&&(i=t[i],!i))){var a=e[0].nodeName.toLowerCase();return i=t[a],i?i:"input"===a?(i=n[e.attr("type")],i?i:(i=e.attr("type"),i?"input:"+e.attr("type"):"input")):void 0}}function a(e){var t,n;if("input"===e[0].nodeName.toLowerCase()){var o=e.attr("type");if("button"===o||"submit"===o)return r(e.attr("value"));var i=e.attr("name");if(i&&(n=e.parent()[0].querySelector("[for="+i+"]"),n&&"label"===n.nodeName.toLowerCase()))return r(n.textContent);if(!n){if(n=c(e[0]),n&&"label"===n.nodeName.toLowerCase())return r(n.textContent);if(n=l(e[0]),n&&"label"===n.nodeName.toLowerCase())return r(n.textContent);if(n=e.parent(),"label"===n[0].nodeName.toLowerCase())return r(n.text())}}if(Array.prototype.slice.call(e[0].children).forEach(function(e){3===e.nodeType&&(t=r(e.textContent))}),!t){var a=e[0].querySelector("span");a&&a.textContent&&(t=r(a.textContent))}return t}function r(e){return e=e.replace(/^\s+|\s+$/g,""),""===e?void 0:e}function c(e){do e=e.previousSibling;while(e&&1!==e.nodeType);return e}function l(e){do e=e.nextSibling;while(e&&1!==e.nodeType);return e}var u={getElementType:i,isClickType:e,getLabel:a};return u}angular.module("analizer").factory("$analizerUtil",e);var t={a:"anchor",button:"button"},n={checkbox:"checkbox",button:"button",submit:"submit-button"},o={anchor:"anchor",button:"button",checkbox:"checkbox","submit-button":"submit-button"}}(),function(){"use strict";function e(e,t,n,o,i){function a(a,r){var c,l=void 0!==r.analizerOnComplete,u=void 0!==r.analizerOnResolve,s=void 0!==r.analizerOnReject;return(l||u||s)&&void 0!==r.ngClick&&(c=n(r.ngClick),r.$set("ngClick",void 0)),function(n,a,f){function m(){a.on("click",function(e){var o=function(){p(c(n,{$event:e}),d,g)};i.$$phase?n.$evalAsync(o):n.$apply(o),t.emit("click",{clickEvent:e,type:d,label:g,category:d,action:v})})}function p(e,n,i){o.when(e).then(function(){(l||u)&&t.emit("onComplete",{type:n,label:i,category:n,action:"onComplete"})})["catch"](function(){(l||s)&&t.emit("onCompleteError",{type:n,label:i,category:n,action:"onCompleteError"})})}var g=r.analizerLabel||e.getLabel(a),v=r.analizerAction||"click",d=r.analizerCategory||e.getElementType(a);e.isClickType(d)&&m()}}var r={restrict:"A",compile:a};return r}e.$inject=["$analizerUtil","$analizer","$parse","$q","$rootScope"],angular.module("analizer").directive("analizer",e)}();