From 4a3ce9acba7d0919d8151e06ac6565988788cba4 Mon Sep 17 00:00:00 2001 From: joshinat0r Date: Fri, 21 Aug 2020 10:19:47 +0200 Subject: [PATCH 1/3] respect DNT --- public/umami.js | 2 +- tracker/index.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/public/umami.js b/public/umami.js index 64a68198..003d97bd 100644 --- a/public/umami.js +++ b/public/umami.js @@ -1 +1 @@ -!function(){"use strict";function e(e){var t=this.constructor;return this.then((function(n){return t.resolve(e()).then((function(){return n}))}),(function(n){return t.resolve(e()).then((function(){return t.reject(n)}))}))}var t=setTimeout;function n(e){return Boolean(e&&void 0!==e.length)}function r(){}function o(e){if(!(this instanceof o))throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=void 0,this._deferreds=[],f(e,this)}function i(e,t){for(;3===e._state;)e=e._value;0!==e._state?(e._handled=!0,o._immediateFn((function(){var n=1===e._state?t.onFulfilled:t.onRejected;if(null!==n){var r;try{r=n(e._value)}catch(e){return void a(t.promise,e)}u(t.promise,r)}else(1===e._state?u:a)(t.promise,e._value)}))):e._deferreds.push(t)}function u(e,t){try{if(t===e)throw new TypeError("A promise cannot be resolved with itself.");if(t&&("object"==typeof t||"function"==typeof t)){var n=t.then;if(t instanceof o)return e._state=3,e._value=t,void c(e);if("function"==typeof n)return void f((r=n,i=t,function(){r.apply(i,arguments)}),e)}e._state=1,e._value=t,c(e)}catch(t){a(e,t)}var r,i}function a(e,t){e._state=2,e._value=t,c(e)}function c(e){2===e._state&&0===e._deferreds.length&&o._immediateFn((function(){e._handled||o._unhandledRejectionFn(e._value)}));for(var t=0,n=e._deferreds.length;t Date: Fri, 21 Aug 2020 11:51:42 +0200 Subject: [PATCH 2/3] proper cross browser dnt support --- lib/web.js | 12 ++++++++++++ tracker/index.js | 4 ++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/lib/web.js b/lib/web.js index b75a6ba7..4b703894 100644 --- a/lib/web.js +++ b/lib/web.js @@ -46,3 +46,15 @@ export const hook = (_this, method, callback) => { return orig.apply(_this, args); }; }; + +export const doNotTrack = () => { + if (window.doNotTrack || navigator.doNotTrack || navigator.msDoNotTrack || 'msTrackingProtectionEnabled' in window.external) { + if (window.doNotTrack == "1" || navigator.doNotTrack == "yes" || navigator.doNotTrack == "1" || navigator.msDoNotTrack == "1" || window.external.msTrackingProtectionEnabled()) { + return true + } else { + return false + } + } else { + return false + } +} diff --git a/tracker/index.js b/tracker/index.js index 48dcc487..708a9b37 100644 --- a/tracker/index.js +++ b/tracker/index.js @@ -1,6 +1,6 @@ import 'promise-polyfill/src/polyfill'; import 'unfetch/polyfill'; -import { post, hook } from '../lib/web'; +import { post, hook, doNotTrack } from '../lib/web'; (window => { const { @@ -13,7 +13,7 @@ import { post, hook } from '../lib/web'; const script = document.querySelector('script[data-website-id]'); - if (!script || navigator.doNotTrack === "1") return; + if (!script || doNotTrack()) return; const website = script.getAttribute('data-website-id'); const hostUrl = new URL(script.src).origin; From 6445702610e3d6fbfdeca41a908203303491a1f5 Mon Sep 17 00:00:00 2001 From: joshinat0r Date: Fri, 21 Aug 2020 11:53:07 +0200 Subject: [PATCH 3/3] rebuild tracking script --- public/umami.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/umami.js b/public/umami.js index 003d97bd..3bf2dec5 100644 --- a/public/umami.js +++ b/public/umami.js @@ -1 +1 @@ -!function(){"use strict";function e(e){var t=this.constructor;return this.then((function(n){return t.resolve(e()).then((function(){return n}))}),(function(n){return t.resolve(e()).then((function(){return t.reject(n)}))}))}var t=setTimeout;function n(e){return Boolean(e&&void 0!==e.length)}function r(){}function o(e){if(!(this instanceof o))throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=void 0,this._deferreds=[],f(e,this)}function i(e,t){for(;3===e._state;)e=e._value;0!==e._state?(e._handled=!0,o._immediateFn((function(){var n=1===e._state?t.onFulfilled:t.onRejected;if(null!==n){var r;try{r=n(e._value)}catch(e){return void a(t.promise,e)}u(t.promise,r)}else(1===e._state?u:a)(t.promise,e._value)}))):e._deferreds.push(t)}function u(e,t){try{if(t===e)throw new TypeError("A promise cannot be resolved with itself.");if(t&&("object"==typeof t||"function"==typeof t)){var n=t.then;if(t instanceof o)return e._state=3,e._value=t,void c(e);if("function"==typeof n)return void f((r=n,i=t,function(){r.apply(i,arguments)}),e)}e._state=1,e._value=t,c(e)}catch(t){a(e,t)}var r,i}function a(e,t){e._state=2,e._value=t,c(e)}function c(e){2===e._state&&0===e._deferreds.length&&o._immediateFn((function(){e._handled||o._unhandledRejectionFn(e._value)}));for(var t=0,n=e._deferreds.length;t