diff --git a/dev/Common/Html.js b/dev/Common/Html.js
index 12a8169ba..8eeccdf81 100644
--- a/dev/Common/Html.js
+++ b/dev/Common/Html.js
@@ -23,28 +23,31 @@ const
tel = /(^|\s|\n|\/?>)(tel:(\+[0-9().-]+|[0-9*#().-]+(;phone-context=\+[0-9+().-]+)?))/g,
// Strip tracking
+ stripParams = /^(utm_|ec_|fbclid|mc_eid|mkt_tok|_hsenc|vero_id|oly_enc_id|oly_anon_id|__s)/i,
urlGetParam = (url, name) => new URL(url).searchParams.get(name) || url,
base64Url = data => atob(data.replace(/_/g,'/').replace(/-/g,'+')),
- stripTracking = text => text
- .replace(/tracking\.(printabout\.nl[^?]+)\?.*/i, (...m) => m[1])
- .replace(/^.+awstrack\.me\/.+(https:%2F%2F[^/]+)/i, (...m) => decodeURIComponent(m[1]))
- .replace(/^.+(www\.google|safelinks\.protection\.outlook\.com).+$/i, () => urlGetParam(text, 'url'))
- .replace(/^.+go\.dhlparcel\.nl.+\/([^/]+)$/i, (...m) => base64Url(m[1]))
- // Mandrill
- .replace(/^.+\/track\/click\/.+\?p=.+$/i, () => {
- let d = urlGetParam(text, 'p');
- try {
- d = JSON.parse(base64Url(d));
- if (d?.p) {
- d = JSON.parse(d.p);
+ stripTracking = url => {
+ url = url
+ .replace(/tracking\.(printabout\.nl[^?]+)\?.*/i, (...m) => m[1])
+ .replace(/^.+awstrack\.me\/.+(https:%2F%2F[^/]+)/i, (...m) => decodeURIComponent(m[1]))
+ .replace(/^.+(www\.google|safelinks\.protection\.outlook\.com).+$/i, () => urlGetParam(url, 'url'))
+ .replace(/^.+go\.dhlparcel\.nl.+\/([^/]+)$/i, (...m) => base64Url(m[1]))
+ // Mandrill
+ .replace(/^.+\/track\/click\/.+\?p=.+$/i, () => {
+ let d = urlGetParam(url, 'p');
+ try {
+ d = JSON.parse(base64Url(d));
+ if (d?.p) {
+ d = JSON.parse(d.p);
+ }
+ } catch (e) {
+ console.error(e);
}
- } catch (e) {
- console.error(e);
- }
- return d?.url || text;
- })
- .replace(/(\?|&(amp;)?)utm_[a-z]+=[^&?#]*/gi, '$1') // Urchin Tracking Module
- .replace(/(\?|&(amp;)?)ec_[a-z]+=[^&?#]*/gi, '$1') // Sitecore
+ return d?.url || url;
+ });
+ url = new URL(url);
+ let s = url.searchParams;
+ [...s.keys()].forEach(key => stripParams.test(key) && s.delete(key));
/** TODO: implement other url strippers like from
* https://www.bleepingcomputer.com/news/security/new-firefox-privacy-feature-strips-urls-of-tracking-parameters/
* https://github.com/newhouse/url-tracking-stripper
@@ -52,7 +55,8 @@ const
* https://maxchadwick.xyz/tracking-query-params-registry/
* https://github.com/M66B/FairEmail/blob/master/app/src/main/java/eu/faircode/email/UriHelper.java
*/
- ;
+ return url.toString();
+ };
export const
@@ -168,11 +172,6 @@ export const
oElement.remove();
return;
}
-// if (['CENTER','FORM'].includes(name)) {
- if ('FORM' === name || 'O:P' === name || (nonEmptyTags.includes(name) && ('' == oElement.textContent.trim()))) {
- ('A' !== name || !oElement.querySelector('IMG')) && replaceWithChildren(oElement);
- return;
- }
/*
// Idea to allow CSS
if ('STYLE' === name) {
@@ -249,6 +248,12 @@ export const
setAttribute('tabindex', '-1');
}
+// if (['CENTER','FORM'].includes(name)) {
+ if ('FORM' === name || 'O:P' === name || (nonEmptyTags.includes(name) && ('' == oElement.textContent.trim()))) {
+ ('A' !== name || !oElement.querySelector('IMG')) && replaceWithChildren(oElement);
+ return;
+ }
+
// SVG xlink:href
/*
if (hasAttribute('xlink:href')) {