From 9194547cfe1135c0e439f662a5fbd02b69d320f8 Mon Sep 17 00:00:00 2001 From: Robert Date: Tue, 16 Aug 2022 15:32:35 +0300 Subject: [PATCH 1/5] refactored outbound links and file downloads --- ...mensions.exclusions.file-downloads.hash.js | 2 +- ...ns.exclusions.file-downloads.hash.local.js | 2 +- ...usions.file-downloads.hash.local.manual.js | 2 +- ...nloads.hash.local.manual.outbound-links.js | 2 +- ...ile-downloads.hash.local.outbound-links.js | 2 +- ...s.exclusions.file-downloads.hash.manual.js | 2 +- ...le-downloads.hash.manual.outbound-links.js | 2 +- ...ions.file-downloads.hash.outbound-links.js | 2 +- ...at.dimensions.exclusions.file-downloads.js | 2 +- ...ensions.exclusions.file-downloads.local.js | 2 +- ....exclusions.file-downloads.local.manual.js | 2 +- ...e-downloads.local.manual.outbound-links.js | 2 +- ...ons.file-downloads.local.outbound-links.js | 2 +- ...nsions.exclusions.file-downloads.manual.js | 2 +- ...ns.file-downloads.manual.outbound-links.js | 2 +- ...xclusions.file-downloads.outbound-links.js | 2 +- ...usions.hash.local.manual.outbound-links.js | 2 +- ...ns.exclusions.hash.local.outbound-links.js | 2 +- ...s.exclusions.hash.manual.outbound-links.js | 2 +- ...mensions.exclusions.hash.outbound-links.js | 2 +- ....exclusions.local.manual.outbound-links.js | 2 +- ...ensions.exclusions.local.outbound-links.js | 2 +- ...nsions.exclusions.manual.outbound-links.js | 2 +- ...at.dimensions.exclusions.outbound-links.js | 2 +- ...e.compat.dimensions.file-downloads.hash.js | 2 +- ...at.dimensions.file-downloads.hash.local.js | 2 +- ...nsions.file-downloads.hash.local.manual.js | 2 +- ...nloads.hash.local.manual.outbound-links.js | 2 +- ...ile-downloads.hash.local.outbound-links.js | 2 +- ...t.dimensions.file-downloads.hash.manual.js | 2 +- ...le-downloads.hash.manual.outbound-links.js | 2 +- ...ions.file-downloads.hash.outbound-links.js | 2 +- ...usible.compat.dimensions.file-downloads.js | 2 +- ....compat.dimensions.file-downloads.local.js | 2 +- ....dimensions.file-downloads.local.manual.js | 2 +- ...e-downloads.local.manual.outbound-links.js | 2 +- ...ons.file-downloads.local.outbound-links.js | 2 +- ...compat.dimensions.file-downloads.manual.js | 2 +- ...ns.file-downloads.manual.outbound-links.js | 2 +- ...imensions.file-downloads.outbound-links.js | 2 +- ...nsions.hash.local.manual.outbound-links.js | 2 +- ...at.dimensions.hash.local.outbound-links.js | 2 +- ...t.dimensions.hash.manual.outbound-links.js | 2 +- ...e.compat.dimensions.hash.outbound-links.js | 2 +- ....dimensions.local.manual.outbound-links.js | 2 +- ....compat.dimensions.local.outbound-links.js | 2 +- ...compat.dimensions.manual.outbound-links.js | 2 +- ...usible.compat.dimensions.outbound-links.js | 2 +- ...e.compat.exclusions.file-downloads.hash.js | 2 +- ...at.exclusions.file-downloads.hash.local.js | 2 +- ...usions.file-downloads.hash.local.manual.js | 2 +- ...nloads.hash.local.manual.outbound-links.js | 2 +- ...ile-downloads.hash.local.outbound-links.js | 2 +- ...t.exclusions.file-downloads.hash.manual.js | 2 +- ...le-downloads.hash.manual.outbound-links.js | 2 +- ...ions.file-downloads.hash.outbound-links.js | 2 +- ...usible.compat.exclusions.file-downloads.js | 2 +- ....compat.exclusions.file-downloads.local.js | 2 +- ....exclusions.file-downloads.local.manual.js | 2 +- ...e-downloads.local.manual.outbound-links.js | 2 +- ...ons.file-downloads.local.outbound-links.js | 2 +- ...compat.exclusions.file-downloads.manual.js | 2 +- ...ns.file-downloads.manual.outbound-links.js | 2 +- ...xclusions.file-downloads.outbound-links.js | 2 +- ...usions.hash.local.manual.outbound-links.js | 2 +- ...at.exclusions.hash.local.outbound-links.js | 2 +- ...t.exclusions.hash.manual.outbound-links.js | 2 +- ...e.compat.exclusions.hash.outbound-links.js | 2 +- ....exclusions.local.manual.outbound-links.js | 2 +- ....compat.exclusions.local.outbound-links.js | 2 +- ...compat.exclusions.manual.outbound-links.js | 2 +- ...usible.compat.exclusions.outbound-links.js | 2 +- .../plausible.compat.file-downloads.hash.js | 2 +- ...usible.compat.file-downloads.hash.local.js | 2 +- ...compat.file-downloads.hash.local.manual.js | 2 +- ...nloads.hash.local.manual.outbound-links.js | 2 +- ...ile-downloads.hash.local.outbound-links.js | 2 +- ...sible.compat.file-downloads.hash.manual.js | 2 +- ...le-downloads.hash.manual.outbound-links.js | 2 +- ...mpat.file-downloads.hash.outbound-links.js | 2 +- .../js/plausible.compat.file-downloads.js | 2 +- .../plausible.compat.file-downloads.local.js | 2 +- ...ible.compat.file-downloads.local.manual.js | 2 +- ...e-downloads.local.manual.outbound-links.js | 2 +- ...pat.file-downloads.local.outbound-links.js | 2 +- .../plausible.compat.file-downloads.manual.js | 2 +- ...at.file-downloads.manual.outbound-links.js | 2 +- ...le.compat.file-downloads.outbound-links.js | 2 +- ...compat.hash.local.manual.outbound-links.js | 2 +- ...usible.compat.hash.local.outbound-links.js | 2 +- ...sible.compat.hash.manual.outbound-links.js | 2 +- .../plausible.compat.hash.outbound-links.js | 2 +- ...ible.compat.local.manual.outbound-links.js | 2 +- .../plausible.compat.local.outbound-links.js | 2 +- .../plausible.compat.manual.outbound-links.js | 2 +- .../js/plausible.compat.outbound-links.js | 2 +- ...mensions.exclusions.file-downloads.hash.js | 2 +- ...ns.exclusions.file-downloads.hash.local.js | 2 +- ...usions.file-downloads.hash.local.manual.js | 2 +- ...nloads.hash.local.manual.outbound-links.js | 2 +- ...ile-downloads.hash.local.outbound-links.js | 2 +- ...s.exclusions.file-downloads.hash.manual.js | 2 +- ...le-downloads.hash.manual.outbound-links.js | 2 +- ...ions.file-downloads.hash.outbound-links.js | 2 +- ...le.dimensions.exclusions.file-downloads.js | 2 +- ...ensions.exclusions.file-downloads.local.js | 2 +- ....exclusions.file-downloads.local.manual.js | 2 +- ...e-downloads.local.manual.outbound-links.js | 2 +- ...ons.file-downloads.local.outbound-links.js | 2 +- ...nsions.exclusions.file-downloads.manual.js | 2 +- ...ns.file-downloads.manual.outbound-links.js | 2 +- ...xclusions.file-downloads.outbound-links.js | 2 +- ...usions.hash.local.manual.outbound-links.js | 2 +- ...ns.exclusions.hash.local.outbound-links.js | 2 +- ...s.exclusions.hash.manual.outbound-links.js | 2 +- ...mensions.exclusions.hash.outbound-links.js | 2 +- ....exclusions.local.manual.outbound-links.js | 2 +- ...ensions.exclusions.local.outbound-links.js | 2 +- ...nsions.exclusions.manual.outbound-links.js | 2 +- ...le.dimensions.exclusions.outbound-links.js | 2 +- ...lausible.dimensions.file-downloads.hash.js | 2 +- ...le.dimensions.file-downloads.hash.local.js | 2 +- ...nsions.file-downloads.hash.local.manual.js | 2 +- ...nloads.hash.local.manual.outbound-links.js | 2 +- ...ile-downloads.hash.local.outbound-links.js | 2 +- ...e.dimensions.file-downloads.hash.manual.js | 2 +- ...le-downloads.hash.manual.outbound-links.js | 2 +- ...ions.file-downloads.hash.outbound-links.js | 2 +- .../js/plausible.dimensions.file-downloads.js | 2 +- ...ausible.dimensions.file-downloads.local.js | 2 +- ....dimensions.file-downloads.local.manual.js | 2 +- ...e-downloads.local.manual.outbound-links.js | 2 +- ...ons.file-downloads.local.outbound-links.js | 2 +- ...usible.dimensions.file-downloads.manual.js | 2 +- ...ns.file-downloads.manual.outbound-links.js | 2 +- ...imensions.file-downloads.outbound-links.js | 2 +- ...nsions.hash.local.manual.outbound-links.js | 2 +- ...le.dimensions.hash.local.outbound-links.js | 2 +- ...e.dimensions.hash.manual.outbound-links.js | 2 +- ...lausible.dimensions.hash.outbound-links.js | 2 +- ....dimensions.local.manual.outbound-links.js | 2 +- ...ausible.dimensions.local.outbound-links.js | 2 +- ...usible.dimensions.manual.outbound-links.js | 2 +- .../js/plausible.dimensions.outbound-links.js | 2 +- ...lausible.exclusions.file-downloads.hash.js | 2 +- ...le.exclusions.file-downloads.hash.local.js | 2 +- ...usions.file-downloads.hash.local.manual.js | 2 +- ...nloads.hash.local.manual.outbound-links.js | 2 +- ...ile-downloads.hash.local.outbound-links.js | 2 +- ...e.exclusions.file-downloads.hash.manual.js | 2 +- ...le-downloads.hash.manual.outbound-links.js | 2 +- ...ions.file-downloads.hash.outbound-links.js | 2 +- .../js/plausible.exclusions.file-downloads.js | 2 +- ...ausible.exclusions.file-downloads.local.js | 2 +- ....exclusions.file-downloads.local.manual.js | 2 +- ...e-downloads.local.manual.outbound-links.js | 2 +- ...ons.file-downloads.local.outbound-links.js | 2 +- ...usible.exclusions.file-downloads.manual.js | 2 +- ...ns.file-downloads.manual.outbound-links.js | 2 +- ...xclusions.file-downloads.outbound-links.js | 2 +- ...usions.hash.local.manual.outbound-links.js | 2 +- ...le.exclusions.hash.local.outbound-links.js | 2 +- ...e.exclusions.hash.manual.outbound-links.js | 2 +- ...lausible.exclusions.hash.outbound-links.js | 2 +- ....exclusions.local.manual.outbound-links.js | 2 +- ...ausible.exclusions.local.outbound-links.js | 2 +- ...usible.exclusions.manual.outbound-links.js | 2 +- .../js/plausible.exclusions.outbound-links.js | 2 +- .../js/plausible.file-downloads.hash.js | 2 +- .../js/plausible.file-downloads.hash.local.js | 2 +- ...usible.file-downloads.hash.local.manual.js | 2 +- ...nloads.hash.local.manual.outbound-links.js | 2 +- ...ile-downloads.hash.local.outbound-links.js | 2 +- .../plausible.file-downloads.hash.manual.js | 2 +- ...le-downloads.hash.manual.outbound-links.js | 2 +- ...ible.file-downloads.hash.outbound-links.js | 2 +- priv/tracker/js/plausible.file-downloads.js | 2 +- .../js/plausible.file-downloads.local.js | 2 +- .../plausible.file-downloads.local.manual.js | 2 +- ...e-downloads.local.manual.outbound-links.js | 2 +- ...ble.file-downloads.local.outbound-links.js | 2 +- .../js/plausible.file-downloads.manual.js | 2 +- ...le.file-downloads.manual.outbound-links.js | 2 +- ...plausible.file-downloads.outbound-links.js | 2 +- ...usible.hash.local.manual.outbound-links.js | 2 +- .../js/plausible.hash.local.outbound-links.js | 2 +- .../plausible.hash.manual.outbound-links.js | 2 +- .../js/plausible.hash.outbound-links.js | 2 +- .../plausible.local.manual.outbound-links.js | 2 +- .../js/plausible.local.outbound-links.js | 2 +- .../js/plausible.manual.outbound-links.js | 2 +- priv/tracker/js/plausible.outbound-links.js | 2 +- tracker/compile.js | 4 + tracker/src/plausible.js | 174 +++++++++--------- 194 files changed, 288 insertions(+), 274 deletions(-) diff --git a/priv/tracker/js/plausible.compat.dimensions.exclusions.file-downloads.hash.js b/priv/tracker/js/plausible.compat.dimensions.exclusions.file-downloads.hash.js index 2096bbcd4850..020ba845a11e 100644 --- a/priv/tracker/js/plausible.compat.dimensions.exclusions.file-downloads.hash.js +++ b/priv/tracker/js/plausible.compat.dimensions.exclusions.file-downloads.hash.js @@ -1 +1 @@ -!function(){"use strict";var e,t,i,u=window.location,d=window.document,f=d.getElementById("plausible"),g=f.getAttribute("data-api")||(e=f.src.split("/"),t=e[0],i=e[2],t+"//"+i+"/api/event");function w(e){console.warn("Ignoring Event: "+e)}function a(e,t){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(u.hostname)||"file:"===u.protocol)return w("localhost");if(!(window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){try{if("true"===window.localStorage.plausible_ignore)return w("localStorage flag")}catch(e){}var i=f&&f.getAttribute("data-include"),a=f&&f.getAttribute("data-exclude");if("pageview"===e){var n=!i||i&&i.split(",").some(c),r=a&&a.split(",").some(c);if(!n||r)return w("exclusion rule")}var o={};o.n=e,o.u=u.href,o.d=f.getAttribute("data-domain"),o.r=d.referrer||null,o.w=window.innerWidth,t&&t.meta&&(o.m=JSON.stringify(t.meta)),t&&t.props&&(o.p=t.props);var l=f.getAttributeNames().filter(function(e){return"event-"===e.substring(0,6)}),p=o.p||{};l.forEach(function(e){var t=e.replace("event-",""),i=f.getAttribute(e);p[t]=p[t]||i}),o.p=p,o.h=1;var s=new XMLHttpRequest;s.open("POST",g,!0),s.setRequestHeader("Content-Type","text/plain"),s.send(JSON.stringify(o)),s.onreadystatechange=function(){4===s.readyState&&t&&t.callback&&t.callback()}}function c(e){return u.pathname.match(new RegExp("^"+e.trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$"))}}var n=["pdf","xlsx","docx","txt","rtf","csv","exe","key","pps","ppt","pptx","7z","pkg","rar","gz","zip","avi","mov","mp4","mpeg","wmv","midi","mp3","wav","wma"],r=f.getAttribute("file-types"),o=f.getAttribute("add-file-types"),l=r&&r.split(",")||o&&o.split(",").concat(n)||n;function p(e){for(var t=e.target,i="auxclick"===e.type&&2===e.which,a="click"===e.type;t&&(void 0===t.tagName||"a"!==t.tagName.toLowerCase()||!t.href);)t=t.parentNode;var n,r=t&&t.href&&t.href.split("?")[0];r&&(n=r.split(".").pop(),l.some(function(e){return e===n}))&&((i||a)&&plausible("File Download",{props:{url:r}}),t.target&&!t.target.match(/^_(self|parent|top)$/i)||e.ctrlKey||e.metaKey||e.shiftKey||!a||(setTimeout(function(){u.href=t.href},150),e.preventDefault()))}d.addEventListener("click",p),d.addEventListener("auxclick",p);var s=window.plausible&&window.plausible.q||[];window.plausible=a;for(var c,v=0;v Date: Thu, 25 Aug 2022 13:29:01 +0300 Subject: [PATCH 2/5] added a test and documentation for default externally prevented --- ...pat.dimensions.exclusions.file-downloads.hash.js | 2 +- ...mensions.exclusions.file-downloads.hash.local.js | 2 +- ...s.exclusions.file-downloads.hash.local.manual.js | 2 +- ...le-downloads.hash.local.manual.outbound-links.js | 2 +- ...ions.file-downloads.hash.local.outbound-links.js | 2 +- ...ensions.exclusions.file-downloads.hash.manual.js | 2 +- ...ons.file-downloads.hash.manual.outbound-links.js | 2 +- ...exclusions.file-downloads.hash.outbound-links.js | 2 +- ...e.compat.dimensions.exclusions.file-downloads.js | 2 +- ...at.dimensions.exclusions.file-downloads.local.js | 2 +- ...nsions.exclusions.file-downloads.local.manual.js | 2 +- ...ns.file-downloads.local.manual.outbound-links.js | 2 +- ...xclusions.file-downloads.local.outbound-links.js | 2 +- ...t.dimensions.exclusions.file-downloads.manual.js | 2 +- ...clusions.file-downloads.manual.outbound-links.js | 2 +- ...ions.exclusions.file-downloads.outbound-links.js | 2 +- ...s.exclusions.hash.local.manual.outbound-links.js | 2 +- ...mensions.exclusions.hash.local.outbound-links.js | 2 +- ...ensions.exclusions.hash.manual.outbound-links.js | 2 +- ...pat.dimensions.exclusions.hash.outbound-links.js | 2 +- ...nsions.exclusions.local.manual.outbound-links.js | 2 +- ...at.dimensions.exclusions.local.outbound-links.js | 2 +- ...t.dimensions.exclusions.manual.outbound-links.js | 2 +- ...e.compat.dimensions.exclusions.outbound-links.js | 2 +- ...ausible.compat.dimensions.file-downloads.hash.js | 2 +- ...e.compat.dimensions.file-downloads.hash.local.js | 2 +- ...t.dimensions.file-downloads.hash.local.manual.js | 2 +- ...le-downloads.hash.local.manual.outbound-links.js | 2 +- ...ions.file-downloads.hash.local.outbound-links.js | 2 +- ....compat.dimensions.file-downloads.hash.manual.js | 2 +- ...ons.file-downloads.hash.manual.outbound-links.js | 2 +- ...dimensions.file-downloads.hash.outbound-links.js | 2 +- .../plausible.compat.dimensions.file-downloads.js | 2 +- ...usible.compat.dimensions.file-downloads.local.js | 2 +- ...compat.dimensions.file-downloads.local.manual.js | 2 +- ...ns.file-downloads.local.manual.outbound-links.js | 2 +- ...imensions.file-downloads.local.outbound-links.js | 2 +- ...sible.compat.dimensions.file-downloads.manual.js | 2 +- ...mensions.file-downloads.manual.outbound-links.js | 2 +- ...mpat.dimensions.file-downloads.outbound-links.js | 2 +- ...t.dimensions.hash.local.manual.outbound-links.js | 2 +- ...e.compat.dimensions.hash.local.outbound-links.js | 2 +- ....compat.dimensions.hash.manual.outbound-links.js | 2 +- ...ausible.compat.dimensions.hash.outbound-links.js | 2 +- ...compat.dimensions.local.manual.outbound-links.js | 2 +- ...usible.compat.dimensions.local.outbound-links.js | 2 +- ...sible.compat.dimensions.manual.outbound-links.js | 2 +- .../plausible.compat.dimensions.outbound-links.js | 2 +- ...ausible.compat.exclusions.file-downloads.hash.js | 2 +- ...e.compat.exclusions.file-downloads.hash.local.js | 2 +- ...t.exclusions.file-downloads.hash.local.manual.js | 2 +- ...le-downloads.hash.local.manual.outbound-links.js | 2 +- ...ions.file-downloads.hash.local.outbound-links.js | 2 +- ....compat.exclusions.file-downloads.hash.manual.js | 2 +- ...ons.file-downloads.hash.manual.outbound-links.js | 2 +- ...exclusions.file-downloads.hash.outbound-links.js | 2 +- .../plausible.compat.exclusions.file-downloads.js | 2 +- ...usible.compat.exclusions.file-downloads.local.js | 2 +- ...compat.exclusions.file-downloads.local.manual.js | 2 +- ...ns.file-downloads.local.manual.outbound-links.js | 2 +- ...xclusions.file-downloads.local.outbound-links.js | 2 +- ...sible.compat.exclusions.file-downloads.manual.js | 2 +- ...clusions.file-downloads.manual.outbound-links.js | 2 +- ...mpat.exclusions.file-downloads.outbound-links.js | 2 +- ...t.exclusions.hash.local.manual.outbound-links.js | 2 +- ...e.compat.exclusions.hash.local.outbound-links.js | 2 +- ....compat.exclusions.hash.manual.outbound-links.js | 2 +- ...ausible.compat.exclusions.hash.outbound-links.js | 2 +- ...compat.exclusions.local.manual.outbound-links.js | 2 +- ...usible.compat.exclusions.local.outbound-links.js | 2 +- ...sible.compat.exclusions.manual.outbound-links.js | 2 +- .../plausible.compat.exclusions.outbound-links.js | 2 +- .../js/plausible.compat.file-downloads.hash.js | 2 +- .../plausible.compat.file-downloads.hash.local.js | 2 +- ...sible.compat.file-downloads.hash.local.manual.js | 2 +- ...le-downloads.hash.local.manual.outbound-links.js | 2 +- ...mpat.file-downloads.hash.local.outbound-links.js | 2 +- .../plausible.compat.file-downloads.hash.manual.js | 2 +- ...pat.file-downloads.hash.manual.outbound-links.js | 2 +- ...ble.compat.file-downloads.hash.outbound-links.js | 2 +- priv/tracker/js/plausible.compat.file-downloads.js | 2 +- .../js/plausible.compat.file-downloads.local.js | 2 +- .../plausible.compat.file-downloads.local.manual.js | 2 +- ...at.file-downloads.local.manual.outbound-links.js | 2 +- ...le.compat.file-downloads.local.outbound-links.js | 2 +- .../js/plausible.compat.file-downloads.manual.js | 2 +- ...e.compat.file-downloads.manual.outbound-links.js | 2 +- ...lausible.compat.file-downloads.outbound-links.js | 2 +- ...sible.compat.hash.local.manual.outbound-links.js | 2 +- .../plausible.compat.hash.local.outbound-links.js | 2 +- .../plausible.compat.hash.manual.outbound-links.js | 2 +- .../js/plausible.compat.hash.outbound-links.js | 2 +- .../plausible.compat.local.manual.outbound-links.js | 2 +- .../js/plausible.compat.local.outbound-links.js | 2 +- .../js/plausible.compat.manual.outbound-links.js | 2 +- priv/tracker/js/plausible.compat.outbound-links.js | 2 +- ...ble.dimensions.exclusions.file-downloads.hash.js | 2 +- ...mensions.exclusions.file-downloads.hash.local.js | 2 +- ...s.exclusions.file-downloads.hash.local.manual.js | 2 +- ...le-downloads.hash.local.manual.outbound-links.js | 2 +- ...ions.file-downloads.hash.local.outbound-links.js | 2 +- ...ensions.exclusions.file-downloads.hash.manual.js | 2 +- ...ons.file-downloads.hash.manual.outbound-links.js | 2 +- ...exclusions.file-downloads.hash.outbound-links.js | 2 +- ...lausible.dimensions.exclusions.file-downloads.js | 2 +- ...le.dimensions.exclusions.file-downloads.local.js | 2 +- ...nsions.exclusions.file-downloads.local.manual.js | 2 +- ...ns.file-downloads.local.manual.outbound-links.js | 2 +- ...xclusions.file-downloads.local.outbound-links.js | 2 +- ...e.dimensions.exclusions.file-downloads.manual.js | 2 +- ...clusions.file-downloads.manual.outbound-links.js | 2 +- ...ions.exclusions.file-downloads.outbound-links.js | 2 +- ...s.exclusions.hash.local.manual.outbound-links.js | 2 +- ...mensions.exclusions.hash.local.outbound-links.js | 2 +- ...ensions.exclusions.hash.manual.outbound-links.js | 2 +- ...ble.dimensions.exclusions.hash.outbound-links.js | 2 +- ...nsions.exclusions.local.manual.outbound-links.js | 2 +- ...le.dimensions.exclusions.local.outbound-links.js | 2 +- ...e.dimensions.exclusions.manual.outbound-links.js | 2 +- ...lausible.dimensions.exclusions.outbound-links.js | 2 +- .../js/plausible.dimensions.file-downloads.hash.js | 2 +- ...lausible.dimensions.file-downloads.hash.local.js | 2 +- ...e.dimensions.file-downloads.hash.local.manual.js | 2 +- ...le-downloads.hash.local.manual.outbound-links.js | 2 +- ...ions.file-downloads.hash.local.outbound-links.js | 2 +- ...ausible.dimensions.file-downloads.hash.manual.js | 2 +- ...ons.file-downloads.hash.manual.outbound-links.js | 2 +- ...dimensions.file-downloads.hash.outbound-links.js | 2 +- .../js/plausible.dimensions.file-downloads.js | 2 +- .../js/plausible.dimensions.file-downloads.local.js | 2 +- ...usible.dimensions.file-downloads.local.manual.js | 2 +- ...ns.file-downloads.local.manual.outbound-links.js | 2 +- ...imensions.file-downloads.local.outbound-links.js | 2 +- .../plausible.dimensions.file-downloads.manual.js | 2 +- ...mensions.file-downloads.manual.outbound-links.js | 2 +- ...ible.dimensions.file-downloads.outbound-links.js | 2 +- ...e.dimensions.hash.local.manual.outbound-links.js | 2 +- ...lausible.dimensions.hash.local.outbound-links.js | 2 +- ...ausible.dimensions.hash.manual.outbound-links.js | 2 +- .../js/plausible.dimensions.hash.outbound-links.js | 2 +- ...usible.dimensions.local.manual.outbound-links.js | 2 +- .../js/plausible.dimensions.local.outbound-links.js | 2 +- .../plausible.dimensions.manual.outbound-links.js | 2 +- .../js/plausible.dimensions.outbound-links.js | 2 +- .../js/plausible.exclusions.file-downloads.hash.js | 2 +- ...lausible.exclusions.file-downloads.hash.local.js | 2 +- ...e.exclusions.file-downloads.hash.local.manual.js | 2 +- ...le-downloads.hash.local.manual.outbound-links.js | 2 +- ...ions.file-downloads.hash.local.outbound-links.js | 2 +- ...ausible.exclusions.file-downloads.hash.manual.js | 2 +- ...ons.file-downloads.hash.manual.outbound-links.js | 2 +- ...exclusions.file-downloads.hash.outbound-links.js | 2 +- .../js/plausible.exclusions.file-downloads.js | 2 +- .../js/plausible.exclusions.file-downloads.local.js | 2 +- ...usible.exclusions.file-downloads.local.manual.js | 2 +- ...ns.file-downloads.local.manual.outbound-links.js | 2 +- ...xclusions.file-downloads.local.outbound-links.js | 2 +- .../plausible.exclusions.file-downloads.manual.js | 2 +- ...clusions.file-downloads.manual.outbound-links.js | 2 +- ...ible.exclusions.file-downloads.outbound-links.js | 2 +- ...e.exclusions.hash.local.manual.outbound-links.js | 2 +- ...lausible.exclusions.hash.local.outbound-links.js | 2 +- ...ausible.exclusions.hash.manual.outbound-links.js | 2 +- .../js/plausible.exclusions.hash.outbound-links.js | 2 +- ...usible.exclusions.local.manual.outbound-links.js | 2 +- .../js/plausible.exclusions.local.outbound-links.js | 2 +- .../plausible.exclusions.manual.outbound-links.js | 2 +- .../js/plausible.exclusions.outbound-links.js | 2 +- priv/tracker/js/plausible.file-downloads.hash.js | 2 +- .../js/plausible.file-downloads.hash.local.js | 2 +- .../plausible.file-downloads.hash.local.manual.js | 2 +- ...le-downloads.hash.local.manual.outbound-links.js | 2 +- ...ible.file-downloads.hash.local.outbound-links.js | 2 +- .../js/plausible.file-downloads.hash.manual.js | 2 +- ...ble.file-downloads.hash.manual.outbound-links.js | 2 +- .../plausible.file-downloads.hash.outbound-links.js | 2 +- priv/tracker/js/plausible.file-downloads.js | 2 +- priv/tracker/js/plausible.file-downloads.local.js | 2 +- .../js/plausible.file-downloads.local.manual.js | 2 +- ...le.file-downloads.local.manual.outbound-links.js | 2 +- ...plausible.file-downloads.local.outbound-links.js | 2 +- priv/tracker/js/plausible.file-downloads.manual.js | 2 +- ...lausible.file-downloads.manual.outbound-links.js | 2 +- .../js/plausible.file-downloads.outbound-links.js | 2 +- .../plausible.hash.local.manual.outbound-links.js | 2 +- .../js/plausible.hash.local.outbound-links.js | 2 +- .../js/plausible.hash.manual.outbound-links.js | 2 +- priv/tracker/js/plausible.hash.outbound-links.js | 2 +- .../js/plausible.local.manual.outbound-links.js | 2 +- priv/tracker/js/plausible.local.outbound-links.js | 2 +- priv/tracker/js/plausible.manual.outbound-links.js | 2 +- priv/tracker/js/plausible.outbound-links.js | 2 +- tracker/src/plausible.js | 12 +++++++++--- tracker/test/fixtures/outbound-link.html | 10 +++++++++- tracker/test/outbound-links.spec.js | 13 +++++++++++++ 195 files changed, 223 insertions(+), 196 deletions(-) diff --git a/priv/tracker/js/plausible.compat.dimensions.exclusions.file-downloads.hash.js b/priv/tracker/js/plausible.compat.dimensions.exclusions.file-downloads.hash.js index 020ba845a11e..22a5f202c450 100644 --- a/priv/tracker/js/plausible.compat.dimensions.exclusions.file-downloads.hash.js +++ b/priv/tracker/js/plausible.compat.dimensions.exclusions.file-downloads.hash.js @@ -1 +1 @@ -!function(){"use strict";var e,t,i,u=window.location,d=window.document,f=d.getElementById("plausible"),g=f.getAttribute("data-api")||(e=f.src.split("/"),t=e[0],i=e[2],t+"//"+i+"/api/event");function w(e){console.warn("Ignoring Event: "+e)}function n(e,t){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(u.hostname)||"file:"===u.protocol)return w("localhost");if(!(window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){try{if("true"===window.localStorage.plausible_ignore)return w("localStorage flag")}catch(e){}var i=f&&f.getAttribute("data-include"),n=f&&f.getAttribute("data-exclude");if("pageview"===e){var a=!i||i&&i.split(",").some(c),r=n&&n.split(",").some(c);if(!a||r)return w("exclusion rule")}var o={};o.n=e,o.u=u.href,o.d=f.getAttribute("data-domain"),o.r=d.referrer||null,o.w=window.innerWidth,t&&t.meta&&(o.m=JSON.stringify(t.meta)),t&&t.props&&(o.p=t.props);var l=f.getAttributeNames().filter(function(e){return"event-"===e.substring(0,6)}),p=o.p||{};l.forEach(function(e){var t=e.replace("event-",""),i=f.getAttribute(e);p[t]=p[t]||i}),o.p=p,o.h=1;var s=new XMLHttpRequest;s.open("POST",g,!0),s.setRequestHeader("Content-Type","text/plain"),s.send(JSON.stringify(o)),s.onreadystatechange=function(){4===s.readyState&&t&&t.callback&&t.callback()}}function c(e){return u.pathname.match(new RegExp("^"+e.trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$"))}}var a=window.plausible&&window.plausible.q||[];window.plausible=n;for(var r,o=0;o Plausible Playwright tests - @@ -15,6 +14,15 @@ Outbound + Link with default prevented + + diff --git a/tracker/test/outbound-links.spec.js b/tracker/test/outbound-links.spec.js index c012698bfe49..6be85a0193bc 100644 --- a/tracker/test/outbound-links.spec.js +++ b/tracker/test/outbound-links.spec.js @@ -30,4 +30,17 @@ test.describe('outbound-links extension', () => { expectCustomEvent(await plausibleRequestMock, 'Outbound Link: Click', { url: outboundURL }) expect(navigationRequest.url()).toContain(outboundURL) }); + + test('sends event and does not navigate if default externally prevented', async ({ page }) => { + await page.goto('/outbound-link.html') + const outboundURL = await page.locator('#link').getAttribute('href') + + const plausibleRequestMock = mockRequest(page, '/api/event') + const navigationRequestMock = mockRequest(page, outboundURL) + + await page.click('#link-default-prevented') + + expectCustomEvent(await plausibleRequestMock, 'Outbound Link: Click', { url: outboundURL }) + expect(await navigationRequestMock, "should not have made navigation request").toBeNull() + }); }); From 2d75fff5e062a666954eac69934f75aa36e47165 Mon Sep 17 00:00:00 2001 From: Robert Date: Mon, 29 Aug 2022 10:35:09 +0300 Subject: [PATCH 3/5] add tests for the in-flight requests queue --- tracker/test/custom-event-edge-cases.spec.js | 33 +++++++++++++++++++ .../test/fixtures/custom-event-edge-case.html | 26 +++++++++++++++ tracker/test/support/test-utils.js | 18 ++++++++++ 3 files changed, 77 insertions(+) create mode 100644 tracker/test/custom-event-edge-cases.spec.js create mode 100644 tracker/test/fixtures/custom-event-edge-case.html diff --git a/tracker/test/custom-event-edge-cases.spec.js b/tracker/test/custom-event-edge-cases.spec.js new file mode 100644 index 000000000000..932187d5b77e --- /dev/null +++ b/tracker/test/custom-event-edge-cases.spec.js @@ -0,0 +1,33 @@ +const { expect } = require('@playwright/test'); +const { test } = require('./support/harness') +const { mockRequest, mockManyPlausibleRequests } = require('./support/test-utils') + +test('sends file download and outbound link event at the same time and navigates', async ({ page }) => { + await page.goto('/custom-event-edge-case.html') + const linkURL = await page.locator('#link').getAttribute('href') + + const plausibleRequestMockList = mockManyPlausibleRequests(page, '/api/event', 2) + const navigationRequestMock = mockRequest(page, linkURL) + + await page.click('#link') + + const sentEventNames = await plausibleRequestMockList + expect(sentEventNames).toEqual(expect.arrayContaining(['Outbound Link: Click', 'File Download'])) + + expect((await navigationRequestMock).url()).toContain(linkURL) +}); + +test('sends file download and outbound link event at the same time and does not navigate if default externally prevented', async ({ page }) => { + await page.goto('/custom-event-edge-case.html') + const linkURL = await page.locator('#link-default-prevented').getAttribute('href') + + const plausibleRequestMockList = mockManyPlausibleRequests(page, '/api/event', 2) + const navigationRequestMock = mockRequest(page, linkURL) + + await page.click('#link-default-prevented') + + const sentEventNames = await plausibleRequestMockList + expect(sentEventNames).toEqual(expect.arrayContaining(['Outbound Link: Click', 'File Download'])) + + expect(await navigationRequestMock, "should not have made navigation request").toBeNull() +}); diff --git a/tracker/test/fixtures/custom-event-edge-case.html b/tracker/test/fixtures/custom-event-edge-case.html new file mode 100644 index 000000000000..9321f0cc621e --- /dev/null +++ b/tracker/test/fixtures/custom-event-edge-case.html @@ -0,0 +1,26 @@ + + + + + + + + Plausible Playwright tests + + + + + + Outbound File Download Link + + Outbound File Download Link + + + + diff --git a/tracker/test/support/test-utils.js b/tracker/test/support/test-utils.js index 20ad5c8de5de..bc94ac604564 100644 --- a/tracker/test/support/test-utils.js +++ b/tracker/test/support/test-utils.js @@ -14,6 +14,24 @@ exports.mockRequest = function (page, path) { }) } +// Mocks a specified number of Plausible event requests. Returns a promise that resolves to a list +// of event names as soon as the specified number of requests is made, or 10 seconds has passed. +exports.mockManyPlausibleRequests = function(page, path, numberOfRequests) { + return new Promise((resolve, _reject) => { + let requestList = [] + const requestTimeoutTimer = setTimeout(() => resolve(requestList), 10000) + + page.route(path, (route, request) => { + requestList.push(request.postDataJSON().n) + if (requestList.length === numberOfRequests) { + clearTimeout(requestTimeoutTimer) + resolve(requestList) + } + return route.fulfill({ status: 202, contentType: 'text/plain', body: 'ok' }) + }) + }) +} + exports.isMac = function (workerInfo) { return workerInfo.project.name.includes('OSX') } From 93238f1037ce9ac4e7d06bb4f3482e57bdc75341 Mon Sep 17 00:00:00 2001 From: Robert Date: Tue, 30 Aug 2022 18:28:04 +0300 Subject: [PATCH 4/5] ignore event if already in queue + use callback timeout when not following link --- ...mensions.exclusions.file-downloads.hash.js | 2 +- ...ns.exclusions.file-downloads.hash.local.js | 2 +- ...usions.file-downloads.hash.local.manual.js | 2 +- ...nloads.hash.local.manual.outbound-links.js | 2 +- ...ile-downloads.hash.local.outbound-links.js | 2 +- ...s.exclusions.file-downloads.hash.manual.js | 2 +- ...le-downloads.hash.manual.outbound-links.js | 2 +- ...ions.file-downloads.hash.outbound-links.js | 2 +- ...at.dimensions.exclusions.file-downloads.js | 2 +- ...ensions.exclusions.file-downloads.local.js | 2 +- ....exclusions.file-downloads.local.manual.js | 2 +- ...e-downloads.local.manual.outbound-links.js | 2 +- ...ons.file-downloads.local.outbound-links.js | 2 +- ...nsions.exclusions.file-downloads.manual.js | 2 +- ...ns.file-downloads.manual.outbound-links.js | 2 +- ...xclusions.file-downloads.outbound-links.js | 2 +- ...usions.hash.local.manual.outbound-links.js | 2 +- ...ns.exclusions.hash.local.outbound-links.js | 2 +- ...s.exclusions.hash.manual.outbound-links.js | 2 +- ...mensions.exclusions.hash.outbound-links.js | 2 +- ....exclusions.local.manual.outbound-links.js | 2 +- ...ensions.exclusions.local.outbound-links.js | 2 +- ...nsions.exclusions.manual.outbound-links.js | 2 +- ...at.dimensions.exclusions.outbound-links.js | 2 +- ...e.compat.dimensions.file-downloads.hash.js | 2 +- ...at.dimensions.file-downloads.hash.local.js | 2 +- ...nsions.file-downloads.hash.local.manual.js | 2 +- ...nloads.hash.local.manual.outbound-links.js | 2 +- ...ile-downloads.hash.local.outbound-links.js | 2 +- ...t.dimensions.file-downloads.hash.manual.js | 2 +- ...le-downloads.hash.manual.outbound-links.js | 2 +- ...ions.file-downloads.hash.outbound-links.js | 2 +- ...usible.compat.dimensions.file-downloads.js | 2 +- ....compat.dimensions.file-downloads.local.js | 2 +- ....dimensions.file-downloads.local.manual.js | 2 +- ...e-downloads.local.manual.outbound-links.js | 2 +- ...ons.file-downloads.local.outbound-links.js | 2 +- ...compat.dimensions.file-downloads.manual.js | 2 +- ...ns.file-downloads.manual.outbound-links.js | 2 +- ...imensions.file-downloads.outbound-links.js | 2 +- ...nsions.hash.local.manual.outbound-links.js | 2 +- ...at.dimensions.hash.local.outbound-links.js | 2 +- ...t.dimensions.hash.manual.outbound-links.js | 2 +- ...e.compat.dimensions.hash.outbound-links.js | 2 +- ....dimensions.local.manual.outbound-links.js | 2 +- ....compat.dimensions.local.outbound-links.js | 2 +- ...compat.dimensions.manual.outbound-links.js | 2 +- ...usible.compat.dimensions.outbound-links.js | 2 +- ...e.compat.exclusions.file-downloads.hash.js | 2 +- ...at.exclusions.file-downloads.hash.local.js | 2 +- ...usions.file-downloads.hash.local.manual.js | 2 +- ...nloads.hash.local.manual.outbound-links.js | 2 +- ...ile-downloads.hash.local.outbound-links.js | 2 +- ...t.exclusions.file-downloads.hash.manual.js | 2 +- ...le-downloads.hash.manual.outbound-links.js | 2 +- ...ions.file-downloads.hash.outbound-links.js | 2 +- ...usible.compat.exclusions.file-downloads.js | 2 +- ....compat.exclusions.file-downloads.local.js | 2 +- ....exclusions.file-downloads.local.manual.js | 2 +- ...e-downloads.local.manual.outbound-links.js | 2 +- ...ons.file-downloads.local.outbound-links.js | 2 +- ...compat.exclusions.file-downloads.manual.js | 2 +- ...ns.file-downloads.manual.outbound-links.js | 2 +- ...xclusions.file-downloads.outbound-links.js | 2 +- ...usions.hash.local.manual.outbound-links.js | 2 +- ...at.exclusions.hash.local.outbound-links.js | 2 +- ...t.exclusions.hash.manual.outbound-links.js | 2 +- ...e.compat.exclusions.hash.outbound-links.js | 2 +- ....exclusions.local.manual.outbound-links.js | 2 +- ....compat.exclusions.local.outbound-links.js | 2 +- ...compat.exclusions.manual.outbound-links.js | 2 +- ...usible.compat.exclusions.outbound-links.js | 2 +- .../plausible.compat.file-downloads.hash.js | 2 +- ...usible.compat.file-downloads.hash.local.js | 2 +- ...compat.file-downloads.hash.local.manual.js | 2 +- ...nloads.hash.local.manual.outbound-links.js | 2 +- ...ile-downloads.hash.local.outbound-links.js | 2 +- ...sible.compat.file-downloads.hash.manual.js | 2 +- ...le-downloads.hash.manual.outbound-links.js | 2 +- ...mpat.file-downloads.hash.outbound-links.js | 2 +- .../js/plausible.compat.file-downloads.js | 2 +- .../plausible.compat.file-downloads.local.js | 2 +- ...ible.compat.file-downloads.local.manual.js | 2 +- ...e-downloads.local.manual.outbound-links.js | 2 +- ...pat.file-downloads.local.outbound-links.js | 2 +- .../plausible.compat.file-downloads.manual.js | 2 +- ...at.file-downloads.manual.outbound-links.js | 2 +- ...le.compat.file-downloads.outbound-links.js | 2 +- ...compat.hash.local.manual.outbound-links.js | 2 +- ...usible.compat.hash.local.outbound-links.js | 2 +- ...sible.compat.hash.manual.outbound-links.js | 2 +- .../plausible.compat.hash.outbound-links.js | 2 +- ...ible.compat.local.manual.outbound-links.js | 2 +- .../plausible.compat.local.outbound-links.js | 2 +- .../plausible.compat.manual.outbound-links.js | 2 +- .../js/plausible.compat.outbound-links.js | 2 +- ...mensions.exclusions.file-downloads.hash.js | 2 +- ...ns.exclusions.file-downloads.hash.local.js | 2 +- ...usions.file-downloads.hash.local.manual.js | 2 +- ...nloads.hash.local.manual.outbound-links.js | 2 +- ...ile-downloads.hash.local.outbound-links.js | 2 +- ...s.exclusions.file-downloads.hash.manual.js | 2 +- ...le-downloads.hash.manual.outbound-links.js | 2 +- ...ions.file-downloads.hash.outbound-links.js | 2 +- ...le.dimensions.exclusions.file-downloads.js | 2 +- ...ensions.exclusions.file-downloads.local.js | 2 +- ....exclusions.file-downloads.local.manual.js | 2 +- ...e-downloads.local.manual.outbound-links.js | 2 +- ...ons.file-downloads.local.outbound-links.js | 2 +- ...nsions.exclusions.file-downloads.manual.js | 2 +- ...ns.file-downloads.manual.outbound-links.js | 2 +- ...xclusions.file-downloads.outbound-links.js | 2 +- ...usions.hash.local.manual.outbound-links.js | 2 +- ...ns.exclusions.hash.local.outbound-links.js | 2 +- ...s.exclusions.hash.manual.outbound-links.js | 2 +- ...mensions.exclusions.hash.outbound-links.js | 2 +- ....exclusions.local.manual.outbound-links.js | 2 +- ...ensions.exclusions.local.outbound-links.js | 2 +- ...nsions.exclusions.manual.outbound-links.js | 2 +- ...le.dimensions.exclusions.outbound-links.js | 2 +- ...lausible.dimensions.file-downloads.hash.js | 2 +- ...le.dimensions.file-downloads.hash.local.js | 2 +- ...nsions.file-downloads.hash.local.manual.js | 2 +- ...nloads.hash.local.manual.outbound-links.js | 2 +- ...ile-downloads.hash.local.outbound-links.js | 2 +- ...e.dimensions.file-downloads.hash.manual.js | 2 +- ...le-downloads.hash.manual.outbound-links.js | 2 +- ...ions.file-downloads.hash.outbound-links.js | 2 +- .../js/plausible.dimensions.file-downloads.js | 2 +- ...ausible.dimensions.file-downloads.local.js | 2 +- ....dimensions.file-downloads.local.manual.js | 2 +- ...e-downloads.local.manual.outbound-links.js | 2 +- ...ons.file-downloads.local.outbound-links.js | 2 +- ...usible.dimensions.file-downloads.manual.js | 2 +- ...ns.file-downloads.manual.outbound-links.js | 2 +- ...imensions.file-downloads.outbound-links.js | 2 +- ...nsions.hash.local.manual.outbound-links.js | 2 +- ...le.dimensions.hash.local.outbound-links.js | 2 +- ...e.dimensions.hash.manual.outbound-links.js | 2 +- ...lausible.dimensions.hash.outbound-links.js | 2 +- ....dimensions.local.manual.outbound-links.js | 2 +- ...ausible.dimensions.local.outbound-links.js | 2 +- ...usible.dimensions.manual.outbound-links.js | 2 +- .../js/plausible.dimensions.outbound-links.js | 2 +- ...lausible.exclusions.file-downloads.hash.js | 2 +- ...le.exclusions.file-downloads.hash.local.js | 2 +- ...usions.file-downloads.hash.local.manual.js | 2 +- ...nloads.hash.local.manual.outbound-links.js | 2 +- ...ile-downloads.hash.local.outbound-links.js | 2 +- ...e.exclusions.file-downloads.hash.manual.js | 2 +- ...le-downloads.hash.manual.outbound-links.js | 2 +- ...ions.file-downloads.hash.outbound-links.js | 2 +- .../js/plausible.exclusions.file-downloads.js | 2 +- ...ausible.exclusions.file-downloads.local.js | 2 +- ....exclusions.file-downloads.local.manual.js | 2 +- ...e-downloads.local.manual.outbound-links.js | 2 +- ...ons.file-downloads.local.outbound-links.js | 2 +- ...usible.exclusions.file-downloads.manual.js | 2 +- ...ns.file-downloads.manual.outbound-links.js | 2 +- ...xclusions.file-downloads.outbound-links.js | 2 +- ...usions.hash.local.manual.outbound-links.js | 2 +- ...le.exclusions.hash.local.outbound-links.js | 2 +- ...e.exclusions.hash.manual.outbound-links.js | 2 +- ...lausible.exclusions.hash.outbound-links.js | 2 +- ....exclusions.local.manual.outbound-links.js | 2 +- ...ausible.exclusions.local.outbound-links.js | 2 +- ...usible.exclusions.manual.outbound-links.js | 2 +- .../js/plausible.exclusions.outbound-links.js | 2 +- .../js/plausible.file-downloads.hash.js | 2 +- .../js/plausible.file-downloads.hash.local.js | 2 +- ...usible.file-downloads.hash.local.manual.js | 2 +- ...nloads.hash.local.manual.outbound-links.js | 2 +- ...ile-downloads.hash.local.outbound-links.js | 2 +- .../plausible.file-downloads.hash.manual.js | 2 +- ...le-downloads.hash.manual.outbound-links.js | 2 +- ...ible.file-downloads.hash.outbound-links.js | 2 +- priv/tracker/js/plausible.file-downloads.js | 2 +- .../js/plausible.file-downloads.local.js | 2 +- .../plausible.file-downloads.local.manual.js | 2 +- ...e-downloads.local.manual.outbound-links.js | 2 +- ...ble.file-downloads.local.outbound-links.js | 2 +- .../js/plausible.file-downloads.manual.js | 2 +- ...le.file-downloads.manual.outbound-links.js | 2 +- ...plausible.file-downloads.outbound-links.js | 2 +- ...usible.hash.local.manual.outbound-links.js | 2 +- .../js/plausible.hash.local.outbound-links.js | 2 +- .../plausible.hash.manual.outbound-links.js | 2 +- .../js/plausible.hash.outbound-links.js | 2 +- .../plausible.local.manual.outbound-links.js | 2 +- .../js/plausible.local.outbound-links.js | 2 +- .../js/plausible.manual.outbound-links.js | 2 +- priv/tracker/js/plausible.outbound-links.js | 2 +- tracker/src/plausible.js | 20 ++++++++++--------- 193 files changed, 203 insertions(+), 201 deletions(-) diff --git a/priv/tracker/js/plausible.compat.dimensions.exclusions.file-downloads.hash.js b/priv/tracker/js/plausible.compat.dimensions.exclusions.file-downloads.hash.js index 22a5f202c450..4b1cceb692c7 100644 --- a/priv/tracker/js/plausible.compat.dimensions.exclusions.file-downloads.hash.js +++ b/priv/tracker/js/plausible.compat.dimensions.exclusions.file-downloads.hash.js @@ -1 +1 @@ -!function(){"use strict";var e,t,i,u=window.location,d=window.document,f=d.getElementById("plausible"),g=f.getAttribute("data-api")||(e=f.src.split("/"),t=e[0],i=e[2],t+"//"+i+"/api/event");function w(e){console.warn("Ignoring Event: "+e)}function n(e,t){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(u.hostname)||"file:"===u.protocol)return w("localhost");if(!(window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){try{if("true"===window.localStorage.plausible_ignore)return w("localStorage flag")}catch(e){}var i=f&&f.getAttribute("data-include"),n=f&&f.getAttribute("data-exclude");if("pageview"===e){var a=!i||i&&i.split(",").some(c),r=n&&n.split(",").some(c);if(!a||r)return w("exclusion rule")}var o={};o.n=e,o.u=u.href,o.d=f.getAttribute("data-domain"),o.r=d.referrer||null,o.w=window.innerWidth,t&&t.meta&&(o.m=JSON.stringify(t.meta)),t&&t.props&&(o.p=t.props);var l=f.getAttributeNames().filter(function(e){return"event-"===e.substring(0,6)}),p=o.p||{};l.forEach(function(e){var t=e.replace("event-",""),i=f.getAttribute(e);p[t]=p[t]||i}),o.p=p,o.h=1;var s=new XMLHttpRequest;s.open("POST",g,!0),s.setRequestHeader("Content-Type","text/plain"),s.send(JSON.stringify(o)),s.onreadystatechange=function(){4===s.readyState&&t&&t.callback&&t.callback()}}function c(e){return u.pathname.match(new RegExp("^"+e.trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$"))}}var a=window.plausible&&window.plausible.q||[];window.plausible=n;for(var r,o=0;o Date: Wed, 31 Aug 2022 12:03:18 +0300 Subject: [PATCH 5/5] removed the path argument from plausible requests mock function --- tracker/test/custom-event-edge-cases.spec.js | 4 ++-- tracker/test/support/test-utils.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tracker/test/custom-event-edge-cases.spec.js b/tracker/test/custom-event-edge-cases.spec.js index 932187d5b77e..d6c9825af5f3 100644 --- a/tracker/test/custom-event-edge-cases.spec.js +++ b/tracker/test/custom-event-edge-cases.spec.js @@ -6,7 +6,7 @@ test('sends file download and outbound link event at the same time and navigates await page.goto('/custom-event-edge-case.html') const linkURL = await page.locator('#link').getAttribute('href') - const plausibleRequestMockList = mockManyPlausibleRequests(page, '/api/event', 2) + const plausibleRequestMockList = mockManyPlausibleRequests(page, 2) const navigationRequestMock = mockRequest(page, linkURL) await page.click('#link') @@ -21,7 +21,7 @@ test('sends file download and outbound link event at the same time and does not await page.goto('/custom-event-edge-case.html') const linkURL = await page.locator('#link-default-prevented').getAttribute('href') - const plausibleRequestMockList = mockManyPlausibleRequests(page, '/api/event', 2) + const plausibleRequestMockList = mockManyPlausibleRequests(page, 2) const navigationRequestMock = mockRequest(page, linkURL) await page.click('#link-default-prevented') diff --git a/tracker/test/support/test-utils.js b/tracker/test/support/test-utils.js index bc94ac604564..7e9957915050 100644 --- a/tracker/test/support/test-utils.js +++ b/tracker/test/support/test-utils.js @@ -16,12 +16,12 @@ exports.mockRequest = function (page, path) { // Mocks a specified number of Plausible event requests. Returns a promise that resolves to a list // of event names as soon as the specified number of requests is made, or 10 seconds has passed. -exports.mockManyPlausibleRequests = function(page, path, numberOfRequests) { +exports.mockManyPlausibleRequests = function(page, numberOfRequests) { return new Promise((resolve, _reject) => { let requestList = [] const requestTimeoutTimer = setTimeout(() => resolve(requestList), 10000) - page.route(path, (route, request) => { + page.route('/api/event', (route, request) => { requestList.push(request.postDataJSON().n) if (requestList.length === numberOfRequests) { clearTimeout(requestTimeoutTimer)