From fd3e3d9f29fd486d64d7030fd6877afea5dd4ce1 Mon Sep 17 00:00:00 2001 From: Thomas Steur Date: Fri, 7 Feb 2020 08:05:57 +1300 Subject: No longer redirect when interacted with content (#15406) --- js/piwik.js | 162 +++++++------------------------------------------------- js/piwik.min.js | 69 ++++++++++++------------ 2 files changed, 53 insertions(+), 178 deletions(-) (limited to 'js') diff --git a/js/piwik.js b/js/piwik.js index b11743e7c3..bee045d487 100644 --- a/js/piwik.js +++ b/js/piwik.js @@ -92,7 +92,7 @@ CONTENT_ATTR, CONTENT_CLASS, CONTENT_NAME_ATTR, CONTENT_PIECE_ATTR, CONTENT_PIECE_CLASS, CONTENT_TARGET_ATTR, CONTENT_TARGET_CLASS, CONTENT_IGNOREINTERACTION_ATTR, CONTENT_IGNOREINTERACTION_CLASS, trackCallbackOnLoad, trackCallbackOnReady, buildContentImpressionsRequests, wasContentImpressionAlreadyTracked, - getQuery, getContent, setVisitorId, getContentImpressionsRequestsFromNodes, buildContentInteractionTrackingRedirectUrl, + getQuery, getContent, setVisitorId, getContentImpressionsRequestsFromNodes, buildContentInteractionRequestNode, buildContentInteractionRequest, buildContentImpressionRequest, appendContentInteractionToRequestIfPossible, setupInteractionsTracking, trackContentImpressionClickInteraction, internalIsNodeVisible, clearTrackedContentImpressions, getTrackerUrl, trackAllContentImpressions, @@ -101,8 +101,8 @@ trackContentInteractionNode, trackContentImpressionsWithinNode, trackContentImpression, enableTrackOnlyVisibleContent, trackContentInteraction, clearEnableTrackOnlyVisibleContent, logAllContentBlocksOnPage, trackVisibleContentImpressions, isTrackOnlyVisibleContentEnabled, port, isUrlToCurrentDomain, piwikTrackers, - isNodeAuthorizedToTriggerInteraction, replaceHrefIfInternalLink, getConfigDownloadExtensions, disableLinkTracking, - substr, setAnyAttribute, wasContentTargetAttrReplaced, max, abs, childNodes, compareDocumentPosition, body, + isNodeAuthorizedToTriggerInteraction, getConfigDownloadExtensions, disableLinkTracking, + substr, setAnyAttribute, max, abs, childNodes, compareDocumentPosition, body, getConfigVisitorCookieTimeout, getRemainingVisitorCookieTimeout, getDomains, getConfigCookiePath, getConfigIdPageView, newVisitor, uuid, createTs, visitCount, currentVisitTs, lastVisitTs, lastEcommerceOrderTs, "", "\b", "\t", "\n", "\f", "\r", "\"", "\\", apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours, @@ -3923,10 +3923,6 @@ if (typeof window.Piwik !== 'object') { var href = query.getAttributeValueFromNode(sourceElement, 'href'); - if (startsUrlWithTrackerUrl(href)) { - return; - } - var originalSourcePath = sourceElement.pathname || getPathName(sourceElement.href); // browsers, such as Safari, don't downcase hostname and href @@ -3961,28 +3957,6 @@ if (typeof window.Piwik !== 'object') { return getRequest(params, null, 'contentInteraction'); } - function buildContentInteractionTrackingRedirectUrl(url, contentInteraction, contentName, contentPiece, contentTarget) - { - if (!isDefined(url)) { - return; - } - - if (startsUrlWithTrackerUrl(url)) { - return url; - } - - var redirectUrl = content.toAbsoluteUrl(url); - var request = 'redirecturl=' + encodeWrapper(redirectUrl) + '&'; - request += buildContentInteractionRequest(contentInteraction, contentName, contentPiece, (contentTarget || url)); - - var separator = '&'; - if (configTrackerUrl.indexOf('?') < 0) { - separator = '?'; - } - - return configTrackerUrl + separator + request; - } - function isNodeAuthorizedToTriggerInteraction(contentNode, interactedNode) { if (!contentNode || !interactedNode) { @@ -4062,81 +4036,6 @@ if (typeof window.Piwik !== 'object') { return false; } - function replaceHrefIfInternalLink(contentBlock) - { - if (!contentBlock) { - return false; - } - - var targetNode = content.findTargetNode(contentBlock); - - if (!targetNode || content.shouldIgnoreInteraction(targetNode)) { - return false; - } - - var link = getLinkIfShouldBeProcessed(targetNode); - - if (linkTrackingEnabled && link && link.type) { - - return false; // will be handled via outlink or download. - } - - if (query.isLinkElement(targetNode) && - query.hasNodeAttributeWithValue(targetNode, 'href')) { - var url = String(query.getAttributeValueFromNode(targetNode, 'href')); - - if (0 === url.indexOf('#')) { - return false; - } - - if (startsUrlWithTrackerUrl(url)) { - return true; - } - - if (!content.isUrlToCurrentDomain(url)) { - return false; - } - - var block = content.buildContentBlock(contentBlock); - - if (!block) { - return; - } - - var contentName = block.name; - var contentPiece = block.piece; - var contentTarget = block.target; - - if (!query.hasNodeAttributeWithValue(targetNode, content.CONTENT_TARGET_ATTR) || targetNode.wasContentTargetAttrReplaced) { - // make sure we still track the correct content target when an interaction is happening - targetNode.wasContentTargetAttrReplaced = true; - contentTarget = content.toAbsoluteUrl(url); - query.setAnyAttribute(targetNode, content.CONTENT_TARGET_ATTR, contentTarget); - } - - var targetUrl = buildContentInteractionTrackingRedirectUrl(url, 'click', contentName, contentPiece, contentTarget); - - // location.href does not respect target=_blank so we prefer to use this - content.setHrefAttribute(targetNode, targetUrl); - - return true; - } - - return false; - } - - function replaceHrefsIfInternalLink(contentNodes) - { - if (!contentNodes || !contentNodes.length) { - return; - } - - var index; - for (index = 0; index < contentNodes.length; index++) { - replaceHrefIfInternalLink(contentNodes[index]); - } - } - function trackContentImpressionClickInteraction (targetNode) { return function (event) { @@ -4159,47 +4058,23 @@ if (typeof window.Piwik !== 'object') { return; } - setExpireDateTime(configTrackerPause); - - if (query.isLinkElement(targetNode) && - query.hasNodeAttributeWithValue(targetNode, 'href') && - query.hasNodeAttributeWithValue(targetNode, content.CONTENT_TARGET_ATTR)) { - // there is a href attribute, the link was replaced with piwik.php but later the href was changed again by the application. - var href = query.getAttributeValueFromNode(targetNode, 'href'); - if (!startsUrlWithTrackerUrl(href) && targetNode.wasContentTargetAttrReplaced) { - query.setAnyAttribute(targetNode, content.CONTENT_TARGET_ATTR, ''); - } - } - - var link = getLinkIfShouldBeProcessed(targetNode); - - if (linkTrackingInstalled && link && link.type) { - // click ignore, will be tracked via processClick, we do not want to track it twice - - return link.type; - } - - if (replaceHrefIfInternalLink(contentBlock)) { - return 'href'; + if (!contentBlock) { + return false; } - var block = content.buildContentBlock(contentBlock); + var theTargetNode = content.findTargetNode(contentBlock); - if (!block) { - return; + if (!theTargetNode || content.shouldIgnoreInteraction(theTargetNode)) { + return false; } - var contentName = block.name; - var contentPiece = block.piece; - var contentTarget = block.target; + var link = getLinkIfShouldBeProcessed(theTargetNode); - // click on any non link element, or on a link element that has not an href attribute or on an anchor - var request = buildContentInteractionRequest('click', contentName, contentPiece, contentTarget); - if (request) { - sendRequest(request, configTrackerPause); + if (linkTrackingEnabled && link && link.type) { + return link.type; // will be handled via outlink or download. } - return request; + return trackerInstance.trackContentInteractionNode(interactedElement, 'click'); }; } @@ -4246,7 +4121,6 @@ if (typeof window.Piwik !== 'object') { return []; } - replaceHrefsIfInternalLink(contentNodes); setupInteractionsTracking(contentNodes); var requests = []; @@ -4897,7 +4771,6 @@ if (typeof window.Piwik !== 'object') { this.buildContentImpressionRequest = buildContentImpressionRequest; this.buildContentInteractionRequest = buildContentInteractionRequest; this.buildContentInteractionRequestNode = buildContentInteractionRequestNode; - this.buildContentInteractionTrackingRedirectUrl = buildContentInteractionTrackingRedirectUrl; this.getContentImpressionsRequestsFromNodes = getContentImpressionsRequestsFromNodes; this.getCurrentlyVisibleContentImpressionsRequestsIfNotTrackedYet = getCurrentlyVisibleContentImpressionsRequestsIfNotTrackedYet; this.trackCallbackOnLoad = trackCallbackOnLoad; @@ -4909,7 +4782,6 @@ if (typeof window.Piwik !== 'object') { this.trackContentImpressionClickInteraction = trackContentImpressionClickInteraction; this.internalIsNodeVisible = isVisible; this.isNodeAuthorizedToTriggerInteraction = isNodeAuthorizedToTriggerInteraction; - this.replaceHrefIfInternalLink = replaceHrefIfInternalLink; this.getDomains = function () { return configHostsAlias; }; @@ -6314,12 +6186,16 @@ if (typeof window.Piwik !== 'object') { return; } + var theRequest = null; + trackCallback(function () { - var request = buildContentInteractionRequestNode(domNode, contentInteraction); - if (request) { - sendRequest(request, configTrackerPause); + theRequest = buildContentInteractionRequestNode(domNode, contentInteraction); + if (theRequest) { + sendRequest(theRequest, configTrackerPause); } }); + //note: return value is only for tests... will only work if dom is already ready... + return theRequest; }; /** diff --git a/js/piwik.min.js b/js/piwik.min.js index 33ccc5884e..353c215066 100644 --- a/js/piwik.min.js +++ b/js/piwik.min.js @@ -28,41 +28,40 @@ if(-1!==M(aq,ao)&&ae.findFirstNodeHavingAttributeWithValue(at,"src")){var ar=ae. if(T.innerHeight&&ao>T.innerHeight){ao=T.innerHeight}return((at.bottom>0||aq)&&at.right>0&&at.left=0){dk=dk.slice(0,dj)}dj=dk.lastIndexOf("/");if(dj!==dk.length-1){dk=dk.slice(0,dj+1)}return dk+di}function cE(dk,di){var dj;dk=String(dk).toLowerCase();di=String(di).toLowerCase();if(dk===di){return true}if(di.slice(0,1)==="."){if(dk===di.slice(1)){return true}dj=dk.length-di.length;if((dj>0)&&(dk.slice(dj)===di)){return true}}return false}function ck(di){var dj=document.createElement("a"); -if(di.indexOf("//")!==0&&di.indexOf("http")!==0){if(di.indexOf("*")===0){di=di.substr(1)}if(di.indexOf(".")===0){di=di.substr(1)}di="http://"+di}dj.href=v.toAbsoluteUrl(di);if(dj.pathname){return dj.pathname}return""}function a3(dj,di){if(!aj(di,"/")){di="/"+di}if(!aj(dj,"/")){dj="/"+dj}var dk=(di==="/"||di==="/*");if(dk){return true}if(dj===di){return true}di=String(di).toLowerCase();dj=String(dj).toLowerCase();if(R(di,"*")){di=di.slice(0,-1);dk=(!di||di==="/");if(dk){return true}if(dj===di){return true}return dj.indexOf(di)===0}if(!R(dj,"/")){dj+="/"}if(!R(di,"/")){di+="/"}return dj.indexOf(di)===0}function ar(dm,dp){var dj,di,dk,dl,dn;for(dj=0;dj0)&&(dl.slice(dk)===di)){return true}}}return false}function cp(di,dk){di=di.replace("send_image=0","send_image=1"); -var dj=new Image(1,1);dj.onload=function(){E=0;if(typeof dk==="function"){dk({request:di,trackerUrl:aD,success:true})}};dj.onerror=function(){if(typeof dk==="function"){dk({request:di,trackerUrl:aD,success:false})}};dj.src=aD+(aD.indexOf("?")<0?"?":"&")+di}function aJ(){return"object"===typeof h&&"function"===typeof h.sendBeacon&&"function"===typeof Blob}function a6(dl,dq){var dk=aJ();if(!dk){return false}var dp={type:"application/x-www-form-urlencoded; charset=UTF-8"};var dn=false;var dj=aD;try{var di=new Blob([dl],dp);if(dl.length<=2000){di=new Blob([],dp);dj=dj+(dj.indexOf("?")<0?"?":"&")+dl}dn=h.sendBeacon(dj,di)}catch(dm){return false}if(dn&&typeof dq==="function"){dq({request:dl,trackerUrl:aD,success:true,isSendBeacon:true})}return dn}function c3(dj,dk,di){if(!J(di)||null===di){di=true}if(m&&a6(dj,dk)){return}setTimeout(function(){if(m&&a6(dj,dk)){return}var dn;try{var dm=T.XMLHttpRequest?new T.XMLHttpRequest():T.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):null;dm.open("POST",aD,true); -dm.onreadystatechange=function(){if(this.readyState===4&&!(this.status>=200&&this.status<300)){var dp=m&&a6(dj,dk);if(!dp&&di){cp(dj,dk)}else{if(typeof dk==="function"){dk({request:dj,trackerUrl:aD,success:false,xhr:this})}}}else{if(this.readyState===4&&(typeof dk==="function")){dk({request:dj,trackerUrl:aD,success:true,xhr:this})}}};dm.setRequestHeader("Content-Type",cw);dm.withCredentials=true;dm.send(dj)}catch(dl){dn=m&&a6(dj,dk);if(!dn&&di){cp(dj,dk)}else{if(typeof dk==="function"){dk({request:dj,trackerUrl:aD,success:false})}}}},50)}function cf(dj){var di=new Date();var dk=di.getTime()+dj;if(!r||dk>r){r=dk}}function cn(di){if(cb||!a5||!bA){return}cb=setTimeout(function dj(){cb=null;if(!bc){bc=(!G.hasFocus||G.hasFocus())}if(!bc){cn(a5);return}if(bQ()){return}var dk=new Date(),dl=a5-(dk.getTime()-cX);dl=Math.min(a5,dl);cn(dl)},di||a5)}function bJ(){if(!cb){return}clearTimeout(cb);cb=null}function ba(){bc=true;cQ=new Date().getTime()}function dc(){var di=new Date().getTime();return !cQ||(di-cQ)>a5 -}function ay(){if(dc()){bQ()}bJ()}function df(){if(aN||!a5){return}aN=true;an(T,"focus",ba);an(T,"blur",ay);ab++;e.addPlugin("HeartBeat"+ab,{unload:function(){if(aN&&dc()){bQ()}}})}function cB(dm){var dj=new Date();var di=dj.getTime();cX=di;if(cA&&di2000){c3(dj,dk)}else{cp(dj,dk)}cf(di)})}if(!aN){df()}}function cj(di){if(cO){return false}return(di&&di.length)}function c2(di,dm){if(!dm||dm>=di.length){return[di]}var dj=0;var dk=di.length;var dl=[];for(dj;dj=dj&&di<=(dj+aZ)){return true}}return false}function dg(di){if(!cL){return""}var dm=f(di,av);if(!dm){return""}dm=String(dm);var dk=new RegExp("^[a-zA-Z0-9]+$"); -if(dm.length===32&&dk.test(dm)){var dj=dm.substr(16,32);if(c1(dj)){var dl=dm.substr(0,16);return dl}}return""}function cM(){if(!bN){bN=dg(bM)}var dk=new Date(),di=Math.round(dk.getTime()/1000),dj=aT("id"),dn=aC(dj),dm,dl;if(dn){dm=dn.split(".");dm.unshift("0");if(bN.length){dm[1]=bN}return dm}if(bN.length){dl=bN}else{if("0"===b4()){dl=""}else{dl=cP()}}dm=["1",dl,di,0,di,"",""];return dm}function aY(){var dq=cM(),dl=dq[0],dm=dq[1],dj=dq[2],di=dq[3],dn=dq[4],dk=dq[5];if(!J(dq[6])){dq[6]=""}var dp=dq[6];return{newVisitor:dl,uuid:dm,createTs:dj,visitCount:di,currentVisitTs:dn,lastVisitTs:dk,lastEcommerceOrderTs:dp}}function aG(){var dl=new Date(),dj=dl.getTime(),dm=aY().createTs;var di=parseInt(dm,10);var dk=(di*1000)+cH-dj;return dk}function aL(di){if(!b5){return}var dk=new Date(),dj=Math.round(dk.getTime()/1000);if(!J(di)){di=aY()}var dl=di.uuid+"."+di.createTs+"."+di.visitCount+"."+dj+"."+di.lastVisitTs+"."+di.lastEcommerceOrderTs;dd(aT("id"),dl,aG(),bo,cW,bR)}function bL(){var di=aC(aT("ref")); -if(di.length){try{di=T.JSON.parse(di);if(W(di)){return di}}catch(dj){}}return["","",0,""]}function bv(dj){var di="testvalue";dd("test",di,10000,null,dj);if(aC("test")===di){bX("test",null,dj);return true}return false}function aE(){var dj=bk;bk=false;var di,dk;for(di=0;didI){dz.visitCount++;dz.lastVisitTs=dz.currentVisitTs}if(!bu||!dr.length){for(dF in cq){if(Object.prototype.hasOwnProperty.call(cq,dF)){dr=f(dJ,cq[dF]);if(dr.length){break}}}for(dF in bF){if(Object.prototype.hasOwnProperty.call(bF,dF)){di=f(dJ,bF[dF]);if(di.length){break}}}}dN=d(bm);du=dE.length?d(dE):"";if(dN.length&&!aV(dN)&&(!bu||!du.length||aV(du))){dE=bm}if(dE.length||dr.length){dq=dt;dD=[dr,di,dq,b1(dE.slice(0,dm))];dd(dA,T.JSON.stringify(dD),c4,bo,cW)}}dk+="&idsite="+b5+"&rec=1&r="+String(Math.random()).slice(2,8)+"&h="+dj.getHours()+"&m="+dj.getMinutes()+"&s="+dj.getSeconds()+"&url="+t(b1(dJ))+(bm.length?"&urlref="+t(b1(bm)):"")+((bx&&bx.length)?"&uid="+t(bx):"")+"&_id="+dz.uuid+"&_idts="+dz.createTs+"&_idvc="+dz.visitCount+"&_idn="+dz.newVisitor+(dr.length?"&_rcn="+t(dr):"")+(di.length?"&_rck="+t(di):"")+"&_refts="+dq+"&_viewts="+dz.lastVisitTs+(String(dz.lastEcommerceOrderTs).length?"&_ects="+dz.lastEcommerceOrderTs:"")+(String(dE).length?"&_ref="+t(b1(dE.slice(0,dm))):"")+(dw?"&cs="+t(dw):"")+"&send_image=0"; -var dM=cF();for(dF in dM){if(Object.prototype.hasOwnProperty.call(dM,dF)){dk+="&"+dF+"="+dM[dF]}}var dL=[];if(dG){for(dF in dG){if(Object.prototype.hasOwnProperty.call(dG,dF)&&/^dimension\d+$/.test(dF)){var dp=dF.replace("dimension","");dL.push(parseInt(dp,10));dL.push(String(dp));dk+="&"+dF+"="+t(dG[dF]);delete dG[dF]}}}if(dG&&B(dG)){dG=null}for(dF in bl){if(Object.prototype.hasOwnProperty.call(bl,dF)){var dv=(-1===M(dL,dF));if(dv){dk+="&dimension"+dF+"="+t(bl[dF])}}}if(dG){dk+="&data="+t(T.JSON.stringify(dG))}else{if(ao){dk+="&data="+t(T.JSON.stringify(ao))}}function ds(dO,dP){var dQ=T.JSON.stringify(dO);if(dQ.length>2){return"&"+dP+"="+t(dQ)}return""}var dK=dh(bV);var dB=dh(cl);dk+=ds(dK,"cvar");dk+=ds(dB,"e_cvar");if(aQ){dk+=ds(aQ,"_cvar");for(dF in dC){if(Object.prototype.hasOwnProperty.call(dC,dF)){if(aQ[dF][0]===""||aQ[dF][1]===""){delete aQ[dF]}}}if(bP){dd(dx,T.JSON.stringify(aQ),co,bo,cW)}}if(a2){if(cm){dk+=">_ms="+cm}else{if(i&&i.timing&&i.timing.requestStart&&i.timing.responseEnd){dk+=">_ms="+(i.timing.responseEnd-i.timing.requestStart) -}}}if(aK){dk+="&pv_id="+aK}dz.lastEcommerceOrderTs=J(dl)&&String(dl).length?dl:dz.lastEcommerceOrderTs;aL(dz);cc();dk+=ac(dH,{tracker:bH,request:dk});if(cY.length){dk+="&"+cY}if(A(ca)){dk=ca(dk)}return dk}bQ=function a7(){var di=new Date();di=di.getTime();if(!cX){return false}if((cX+(1000*c6))<=di){return false}if(cX+a5<=di){bH.ping();return true}return false};function bp(dl,dk,dr,dm,di,du){var dp="idgoal=0",dq,dj=new Date(),ds=[],dt,dn=String(dl).length;if(dn){dp+="&ec_id="+t(dl);dq=Math.round(dj.getTime()/1000)}dp+="&revenue="+dk;if(String(dr).length){dp+="&ec_st="+dr}if(String(dm).length){dp+="&ec_tx="+dm}if(String(di).length){dp+="&ec_sh="+di}if(String(du).length){dp+="&ec_dt="+du}if(cZ){for(dt in cZ){if(Object.prototype.hasOwnProperty.call(cZ,dt)){if(!J(cZ[dt][1])){cZ[dt][1]=""}if(!J(cZ[dt][2])){cZ[dt][2]=""}if(!J(cZ[dt][3])||String(cZ[dt][3]).length===0){cZ[dt][3]=0}if(!J(cZ[dt][4])||String(cZ[dt][4]).length===0){cZ[dt][4]=1}ds.push(cZ[dt])}}dp+="&ec_items="+t(T.JSON.stringify(ds)) -}dp=cs(dp,ao,"ecommerce",dq);bE(dp,bI);if(dn){cZ={}}}function bY(di,dm,dl,dk,dj,dn){if(String(di).length&&J(dm)){bp(di,dm,dl,dk,dj,dn)}}function br(di){if(J(di)){bp("",di,"","","","")}}function bZ(dj,dl,dk){aK=bg();var di=cs("action_name="+t(al(dj||bi)),dl,"log");bE(di,bI,dk)}function a0(dk,dj){var dl,di="(^| )(piwik[_-]"+dj;if(dk){for(dl=0;dl0){dm=parseInt(dm,10);dq(dm)}})}var bB={enabled:true,requests:[],timeout:null,interval:2500,sendRequests:function(){var di=this.requests;this.requests=[];if(di.length===1){bE(di[0],bI)}else{de(di,bI)}},push:function(di){if(!di){return}if(m||!this.enabled){bE(di,bI);return}bB.requests.push(di);if(this.timeout){clearTimeout(this.timeout);this.timeout=null}this.timeout=setTimeout(function(){bB.timeout=null;bB.sendRequests()},bB.interval);var dj="RequestQueue"+aw;if(!Object.prototype.hasOwnProperty.call(b,dj)){b[dj]={unload:function(){if(bB.timeout){clearTimeout(bB.timeout)}bB.sendRequests()}}}}};bh();aL();this.hasConsent=function(){return bA};this.getVisitorId=function(){return aY().uuid -};this.getVisitorInfo=function(){return cM()};this.getAttributionInfo=function(){return bL()};this.getAttributionCampaignName=function(){return bL()[0]};this.getAttributionCampaignKeyword=function(){return bL()[1]};this.getAttributionReferrerTimestamp=function(){return bL()[2]};this.getAttributionReferrerUrl=function(){return bL()[3]};this.setTrackerUrl=function(di){aD=di};this.getTrackerUrl=function(){return aD};this.getPiwikUrl=function(){return O(this.getTrackerUrl(),bG)};this.addTracker=function(di,dk){if(!J(di)||null===di){di=this.getTrackerUrl()}var dj=new Q(di,dk);I.push(dj);e.trigger("TrackerAdded",[this]);return dj};this.getSiteId=function(){return b5};this.setSiteId=function(di){b2(di)};this.resetUserId=function(){bx=""};this.setUserId=function(di){if(Y(di)){bx=di}};this.getUserId=function(){return bx};this.setCustomData=function(di,dj){if(W(di)){ao=di}else{if(!ao){ao={}}ao[di]=dj}};this.getCustomData=function(){return ao};this.setCustomRequestProcessing=function(di){ca=di};this.appendToTrackingUrl=function(di){cY=di -};this.getRequest=function(di){return cs(di)};this.addPlugin=function(di,dj){b[di]=dj};this.setCustomDimension=function(di,dj){di=parseInt(di,10);if(di>0){if(!J(dj)){dj=""}if(!w(dj)){dj=String(dj)}bl[di]=dj}};this.getCustomDimension=function(di){di=parseInt(di,10);if(di>0&&Object.prototype.hasOwnProperty.call(bl,di)){return bl[di]}};this.deleteCustomDimension=function(di){di=parseInt(di,10);if(di>0){delete bl[di]}};this.setCustomVariable=function(dj,di,dm,dk){var dl;if(!J(dk)){dk="visit"}if(!J(di)){return}if(!J(dm)){dm=""}if(dj>0){di=!w(di)?String(di):di;dm=!w(dm)?String(dm):dm;dl=[di.slice(0,bs),dm.slice(0,bs)];if(dk==="visit"||dk===2){cC();aQ[dj]=dl}else{if(dk==="page"||dk===3){bV[dj]=dl}else{if(dk==="event"){cl[dj]=dl}}}}};this.getCustomVariable=function(dj,dk){var di;if(!J(dk)){dk="visit"}if(dk==="page"||dk===3){di=bV[dj]}else{if(dk==="event"){di=cl[dj]}else{if(dk==="visit"||dk===2){cC();di=aQ[dj]}}}if(!J(di)||(di&&di[0]==="")){return false}return di};this.deleteCustomVariable=function(di,dj){if(this.getCustomVariable(di,dj)){this.setCustomVariable(di,"","",dj) -}};this.deleteCustomVariables=function(di){if(di==="page"||di===3){bV={}}else{if(di==="event"){cl={}}else{if(di==="visit"||di===2){aQ={}}}}};this.storeCustomVariablesInCookie=function(){bP=true};this.setLinkTrackingTimer=function(di){bI=di};this.getLinkTrackingTimer=function(){return bI};this.setDownloadExtensions=function(di){if(w(di)){di=di.split("|")}c5=di};this.addDownloadExtensions=function(dj){var di;if(w(dj)){dj=dj.split("|")}for(di=0;di1&&ap!=="addTracker"){ak("The method "+ap+' is registered more than once in "_paq" variable. Only the last call has an effect. Please have a look at the multiple Piwik trackers documentation: https://developer.piwik.org/guides/tracking-javascript-guide#multiple-piwik-trackers')}av[ap]++}}}}return au}var C=["addTracker","disableCookies","setTrackerUrl","setAPIUrl","enableCrossDomainLinking","setCrossDomainLinkingTimeout","setSessionCookieTimeout","setVisitorCookieTimeout","setSecureCookie","setCookiePath","setCookieDomain","setDomains","setUserId","setSiteId","alwaysUseSendBeacon","enableLinkTracking","requireConsent","setConsentGiven"];function ad(ao,aq){var ap=new Q(ao,aq);I.push(ap);_paq=c(_paq,C);for(E=0;E<_paq.length;E++){if(_paq[E]){af(_paq[E])}}_paq=new H();e.trigger("TrackerAdded",[ap]);return ap}an(T,"beforeunload",ai,false);window.addEventListener("message",function(au){if(!au||!au.origin){return -}var aw,ar,ap;var ax=d(au.origin);var at=e.getAsyncTrackers();for(ar=0;ar=0){dh=dh.slice(0,dg)}dg=dh.lastIndexOf("/");if(dg!==dh.length-1){dh=dh.slice(0,dg+1)}return dh+df}function cC(dh,df){var dg;dh=String(dh).toLowerCase();df=String(df).toLowerCase();if(dh===df){return true}if(df.slice(0,1)==="."){if(dh===df.slice(1)){return true}dg=dh.length-df.length;if((dg>0)&&(dh.slice(dg)===df)){return true}}return false}function ci(df){var dg=document.createElement("a"); +if(df.indexOf("//")!==0&&df.indexOf("http")!==0){if(df.indexOf("*")===0){df=df.substr(1)}if(df.indexOf(".")===0){df=df.substr(1)}df="http://"+df}dg.href=v.toAbsoluteUrl(df);if(dg.pathname){return dg.pathname}return""}function a2(dg,df){if(!aj(df,"/")){df="/"+df}if(!aj(dg,"/")){dg="/"+dg}var dh=(df==="/"||df==="/*");if(dh){return true}if(dg===df){return true}df=String(df).toLowerCase();dg=String(dg).toLowerCase();if(R(df,"*")){df=df.slice(0,-1);dh=(!df||df==="/");if(dh){return true}if(dg===df){return true}return dg.indexOf(df)===0}if(!R(dg,"/")){dg+="/"}if(!R(df,"/")){df+="/"}return dg.indexOf(df)===0}function ar(dj,dl){var dg,df,dh,di,dk;for(dg=0;dg0)&&(di.slice(dh)===df)){return true}}}return false}function cn(df,dh){df=df.replace("send_image=0","send_image=1"); +var dg=new Image(1,1);dg.onload=function(){E=0;if(typeof dh==="function"){dh({request:df,trackerUrl:aD,success:true})}};dg.onerror=function(){if(typeof dh==="function"){dh({request:df,trackerUrl:aD,success:false})}};dg.src=aD+(aD.indexOf("?")<0?"?":"&")+df}function aJ(){return"object"===typeof h&&"function"===typeof h.sendBeacon&&"function"===typeof Blob}function a5(di,dm){var dh=aJ();if(!dh){return false}var dl={type:"application/x-www-form-urlencoded; charset=UTF-8"};var dk=false;var dg=aD;try{var df=new Blob([di],dl);if(di.length<=2000){df=new Blob([],dl);dg=dg+(dg.indexOf("?")<0?"?":"&")+di}dk=h.sendBeacon(dg,df)}catch(dj){return false}if(dk&&typeof dm==="function"){dm({request:di,trackerUrl:aD,success:true,isSendBeacon:true})}return dk}function c0(dg,dh,df){if(!J(df)||null===df){df=true}if(m&&a5(dg,dh)){return}setTimeout(function(){if(m&&a5(dg,dh)){return}var dk;try{var dj=T.XMLHttpRequest?new T.XMLHttpRequest():T.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):null;dj.open("POST",aD,true); +dj.onreadystatechange=function(){if(this.readyState===4&&!(this.status>=200&&this.status<300)){var dl=m&&a5(dg,dh);if(!dl&&df){cn(dg,dh)}else{if(typeof dh==="function"){dh({request:dg,trackerUrl:aD,success:false,xhr:this})}}}else{if(this.readyState===4&&(typeof dh==="function")){dh({request:dg,trackerUrl:aD,success:true,xhr:this})}}};dj.setRequestHeader("Content-Type",cu);dj.withCredentials=true;dj.send(dg)}catch(di){dk=m&&a5(dg,dh);if(!dk&&df){cn(dg,dh)}else{if(typeof dh==="function"){dh({request:dg,trackerUrl:aD,success:false})}}}},50)}function cd(dg){var df=new Date();var dh=df.getTime()+dg;if(!r||dh>r){r=dh}}function cl(df){if(b9||!a4||!bz){return}b9=setTimeout(function dg(){b9=null;if(!bb){bb=(!G.hasFocus||G.hasFocus())}if(!bb){cl(a4);return}if(bO()){return}var dh=new Date(),di=a4-(dh.getTime()-cU);di=Math.min(a4,di);cl(di)},df||a4)}function bH(){if(!b9){return}clearTimeout(b9);b9=null}function a9(){bb=true;cN=new Date().getTime()}function c9(){var df=new Date().getTime();return !cN||(df-cN)>a4 +}function ay(){if(c9()){bO()}bH()}function dc(){if(aM||!a4){return}aM=true;an(T,"focus",a9);an(T,"blur",ay);ab++;e.addPlugin("HeartBeat"+ab,{unload:function(){if(aM&&c9()){bO()}}})}function cz(dj){var dg=new Date();var df=dg.getTime();cU=df;if(cy&&df2000){c0(dg,dh)}else{cn(dg,dh)}cd(df)})}if(!aM){dc()}}function ch(df){if(cL){return false}return(df&&df.length)}function cZ(df,dj){if(!dj||dj>=df.length){return[df]}var dg=0;var dh=df.length;var di=[];for(dg;dg=dg&&df<=(dg+aY)){return true}}return false}function dd(df){if(!cI){return""}var dj=f(df,av);if(!dj){return""}dj=String(dj);var dh=new RegExp("^[a-zA-Z0-9]+$"); +if(dj.length===32&&dh.test(dj)){var dg=dj.substr(16,32);if(cY(dg)){var di=dj.substr(0,16);return di}}return""}function cJ(){if(!bL){bL=dd(bK)}var dh=new Date(),df=Math.round(dh.getTime()/1000),dg=aS("id"),dk=aC(dg),dj,di;if(dk){dj=dk.split(".");dj.unshift("0");if(bL.length){dj[1]=bL}return dj}if(bL.length){di=bL}else{if("0"===b2()){di=""}else{di=cM()}}dj=["1",di,df,0,df,"",""];return dj}function aX(){var dm=cJ(),di=dm[0],dj=dm[1],dg=dm[2],df=dm[3],dk=dm[4],dh=dm[5];if(!J(dm[6])){dm[6]=""}var dl=dm[6];return{newVisitor:di,uuid:dj,createTs:dg,visitCount:df,currentVisitTs:dk,lastVisitTs:dh,lastEcommerceOrderTs:dl}}function aG(){var di=new Date(),dg=di.getTime(),dj=aX().createTs;var df=parseInt(dj,10);var dh=(df*1000)+cF-dg;return dh}function aL(df){if(!b3){return}var dh=new Date(),dg=Math.round(dh.getTime()/1000);if(!J(df)){df=aX()}var di=df.uuid+"."+df.createTs+"."+df.visitCount+"."+dg+"."+df.lastVisitTs+"."+df.lastEcommerceOrderTs;da(aS("id"),di,aG(),bn,cT,bP)}function bJ(){var df=aC(aS("ref")); +if(df.length){try{df=T.JSON.parse(df);if(W(df)){return df}}catch(dg){}}return["","",0,""]}function bu(dg){var df="testvalue";da("test",df,10000,null,dg);if(aC("test")===df){bV("test",null,dg);return true}return false}function aE(){var dg=bj;bj=false;var df,dh;for(df=0;dfdF){dw.visitCount++;dw.lastVisitTs=dw.currentVisitTs}if(!bt||!dn.length){for(dC in co){if(Object.prototype.hasOwnProperty.call(co,dC)){dn=f(dG,co[dC]);if(dn.length){break}}}for(dC in bD){if(Object.prototype.hasOwnProperty.call(bD,dC)){df=f(dG,bD[dC]);if(df.length){break}}}}dK=d(bl);dr=dB.length?d(dB):"";if(dK.length&&!aU(dK)&&(!bt||!dr.length||aU(dr))){dB=bl}if(dB.length||dn.length){dm=dq;dA=[dn,df,dm,bZ(dB.slice(0,dj))];da(dx,T.JSON.stringify(dA),c1,bn,cT)}}dh+="&idsite="+b3+"&rec=1&r="+String(Math.random()).slice(2,8)+"&h="+dg.getHours()+"&m="+dg.getMinutes()+"&s="+dg.getSeconds()+"&url="+t(bZ(dG))+(bl.length?"&urlref="+t(bZ(bl)):"")+((bw&&bw.length)?"&uid="+t(bw):"")+"&_id="+dw.uuid+"&_idts="+dw.createTs+"&_idvc="+dw.visitCount+"&_idn="+dw.newVisitor+(dn.length?"&_rcn="+t(dn):"")+(df.length?"&_rck="+t(df):"")+"&_refts="+dm+"&_viewts="+dw.lastVisitTs+(String(dw.lastEcommerceOrderTs).length?"&_ects="+dw.lastEcommerceOrderTs:"")+(String(dB).length?"&_ref="+t(bZ(dB.slice(0,dj))):"")+(dt?"&cs="+t(dt):"")+"&send_image=0"; +var dJ=cD();for(dC in dJ){if(Object.prototype.hasOwnProperty.call(dJ,dC)){dh+="&"+dC+"="+dJ[dC]}}var dI=[];if(dD){for(dC in dD){if(Object.prototype.hasOwnProperty.call(dD,dC)&&/^dimension\d+$/.test(dC)){var dl=dC.replace("dimension","");dI.push(parseInt(dl,10));dI.push(String(dl));dh+="&"+dC+"="+t(dD[dC]);delete dD[dC]}}}if(dD&&B(dD)){dD=null}for(dC in bk){if(Object.prototype.hasOwnProperty.call(bk,dC)){var ds=(-1===M(dI,dC));if(ds){dh+="&dimension"+dC+"="+t(bk[dC])}}}if(dD){dh+="&data="+t(T.JSON.stringify(dD))}else{if(ao){dh+="&data="+t(T.JSON.stringify(ao))}}function dp(dL,dM){var dN=T.JSON.stringify(dL);if(dN.length>2){return"&"+dM+"="+t(dN)}return""}var dH=de(bT);var dy=de(cj);dh+=dp(dH,"cvar");dh+=dp(dy,"e_cvar");if(aP){dh+=dp(aP,"_cvar");for(dC in dz){if(Object.prototype.hasOwnProperty.call(dz,dC)){if(aP[dC][0]===""||aP[dC][1]===""){delete aP[dC]}}}if(bN){da(du,T.JSON.stringify(aP),cm,bn,cT)}}if(a1){if(ck){dh+=">_ms="+ck}else{if(i&&i.timing&&i.timing.requestStart&&i.timing.responseEnd){dh+=">_ms="+(i.timing.responseEnd-i.timing.requestStart) +}}}if(aK){dh+="&pv_id="+aK}dw.lastEcommerceOrderTs=J(di)&&String(di).length?di:dw.lastEcommerceOrderTs;aL(dw);ca();dh+=ac(dE,{tracker:bF,request:dh});if(cV.length){dh+="&"+cV}if(A(b8)){dh=b8(dh)}return dh}bO=function a6(){var df=new Date();df=df.getTime();if(!cU){return false}if((cU+(1000*c3))<=df){return false}if(cU+a4<=df){bF.ping();return true}return false};function bo(di,dh,dn,dj,df,dr){var dl="idgoal=0",dm,dg=new Date(),dp=[],dq,dk=String(di).length;if(dk){dl+="&ec_id="+t(di);dm=Math.round(dg.getTime()/1000)}dl+="&revenue="+dh;if(String(dn).length){dl+="&ec_st="+dn}if(String(dj).length){dl+="&ec_tx="+dj}if(String(df).length){dl+="&ec_sh="+df}if(String(dr).length){dl+="&ec_dt="+dr}if(cW){for(dq in cW){if(Object.prototype.hasOwnProperty.call(cW,dq)){if(!J(cW[dq][1])){cW[dq][1]=""}if(!J(cW[dq][2])){cW[dq][2]=""}if(!J(cW[dq][3])||String(cW[dq][3]).length===0){cW[dq][3]=0}if(!J(cW[dq][4])||String(cW[dq][4]).length===0){cW[dq][4]=1}dp.push(cW[dq])}}dl+="&ec_items="+t(T.JSON.stringify(dp)) +}dl=cq(dl,ao,"ecommerce",dm);bC(dl,bG);if(dk){cW={}}}function bW(df,dj,di,dh,dg,dk){if(String(df).length&&J(dj)){bo(df,dj,di,dh,dg,dk)}}function bq(df){if(J(df)){bo("",df,"","","","")}}function bX(dg,di,dh){aK=bf();var df=cq("action_name="+t(al(dg||bh)),di,"log");bC(df,bG,dh)}function aZ(dh,dg){var di,df="(^| )(piwik[_-]"+dg;if(dh){for(di=0;di0){dj=parseInt(dj,10);dm(dj)}})}var bA={enabled:true,requests:[],timeout:null,interval:2500,sendRequests:function(){var df=this.requests;this.requests=[];if(df.length===1){bC(df[0],bG)}else{db(df,bG)}},push:function(df){if(!df){return}if(m||!this.enabled){bC(df,bG);return}bA.requests.push(df);if(this.timeout){clearTimeout(this.timeout);this.timeout=null}this.timeout=setTimeout(function(){bA.timeout=null;bA.sendRequests()},bA.interval);var dg="RequestQueue"+aw;if(!Object.prototype.hasOwnProperty.call(b,dg)){b[dg]={unload:function(){if(bA.timeout){clearTimeout(bA.timeout)}bA.sendRequests()}}}}};bg();aL();this.hasConsent=function(){return bz};this.getVisitorId=function(){return aX().uuid};this.getVisitorInfo=function(){return cJ()};this.getAttributionInfo=function(){return bJ()};this.getAttributionCampaignName=function(){return bJ()[0]};this.getAttributionCampaignKeyword=function(){return bJ()[1] +};this.getAttributionReferrerTimestamp=function(){return bJ()[2]};this.getAttributionReferrerUrl=function(){return bJ()[3]};this.setTrackerUrl=function(df){aD=df};this.getTrackerUrl=function(){return aD};this.getPiwikUrl=function(){return O(this.getTrackerUrl(),bE)};this.addTracker=function(df,dh){if(!J(df)||null===df){df=this.getTrackerUrl()}var dg=new Q(df,dh);I.push(dg);e.trigger("TrackerAdded",[this]);return dg};this.getSiteId=function(){return b3};this.setSiteId=function(df){b0(df)};this.resetUserId=function(){bw=""};this.setUserId=function(df){if(Y(df)){bw=df}};this.getUserId=function(){return bw};this.setCustomData=function(df,dg){if(W(df)){ao=df}else{if(!ao){ao={}}ao[df]=dg}};this.getCustomData=function(){return ao};this.setCustomRequestProcessing=function(df){b8=df};this.appendToTrackingUrl=function(df){cV=df};this.getRequest=function(df){return cq(df)};this.addPlugin=function(df,dg){b[df]=dg};this.setCustomDimension=function(df,dg){df=parseInt(df,10);if(df>0){if(!J(dg)){dg=""}if(!w(dg)){dg=String(dg) +}bk[df]=dg}};this.getCustomDimension=function(df){df=parseInt(df,10);if(df>0&&Object.prototype.hasOwnProperty.call(bk,df)){return bk[df]}};this.deleteCustomDimension=function(df){df=parseInt(df,10);if(df>0){delete bk[df]}};this.setCustomVariable=function(dg,df,dj,dh){var di;if(!J(dh)){dh="visit"}if(!J(df)){return}if(!J(dj)){dj=""}if(dg>0){df=!w(df)?String(df):df;dj=!w(dj)?String(dj):dj;di=[df.slice(0,br),dj.slice(0,br)];if(dh==="visit"||dh===2){cA();aP[dg]=di}else{if(dh==="page"||dh===3){bT[dg]=di}else{if(dh==="event"){cj[dg]=di}}}}};this.getCustomVariable=function(dg,dh){var df;if(!J(dh)){dh="visit"}if(dh==="page"||dh===3){df=bT[dg]}else{if(dh==="event"){df=cj[dg]}else{if(dh==="visit"||dh===2){cA();df=aP[dg]}}}if(!J(df)||(df&&df[0]==="")){return false}return df};this.deleteCustomVariable=function(df,dg){if(this.getCustomVariable(df,dg)){this.setCustomVariable(df,"","",dg)}};this.deleteCustomVariables=function(df){if(df==="page"||df===3){bT={}}else{if(df==="event"){cj={}}else{if(df==="visit"||df===2){aP={} +}}}};this.storeCustomVariablesInCookie=function(){bN=true};this.setLinkTrackingTimer=function(df){bG=df};this.getLinkTrackingTimer=function(){return bG};this.setDownloadExtensions=function(df){if(w(df)){df=df.split("|")}c2=df};this.addDownloadExtensions=function(dg){var df;if(w(dg)){dg=dg.split("|")}for(df=0;df1&&ap!=="addTracker"){ak("The method "+ap+' is registered more than once in "_paq" variable. Only the last call has an effect. Please have a look at the multiple Piwik trackers documentation: https://developer.piwik.org/guides/tracking-javascript-guide#multiple-piwik-trackers')}av[ap]++}}}}return au}var C=["addTracker","disableCookies","setTrackerUrl","setAPIUrl","enableCrossDomainLinking","setCrossDomainLinkingTimeout","setSessionCookieTimeout","setVisitorCookieTimeout","setSecureCookie","setCookiePath","setCookieDomain","setDomains","setUserId","setSiteId","alwaysUseSendBeacon","enableLinkTracking","requireConsent","setConsentGiven"];function ad(ao,aq){var ap=new Q(ao,aq);I.push(ap);_paq=c(_paq,C);for(E=0;E<_paq.length;E++){if(_paq[E]){af(_paq[E])}}_paq=new H();e.trigger("TrackerAdded",[ap]);return ap}an(T,"beforeunload",ai,false);window.addEventListener("message",function(au){if(!au||!au.origin){return}var aw,ar,ap;var ax=d(au.origin);var at=e.getAsyncTrackers();for(ar=0;ar