Resolve #1225 by using optional link tracking

This commit is contained in:
the-djmaze 2024-02-06 16:05:17 +01:00
parent d2c59d2e1c
commit d55ce60cc5
42 changed files with 153 additions and 46 deletions

View file

@ -208,6 +208,7 @@ export const
result = { result = {
hasExternals: false, hasExternals: false,
tracking: false,
linkedData: [] linkedData: []
}, },
@ -398,10 +399,14 @@ export const
if ('A' === name) { if ('A' === name) {
value = oElement.href; value = oElement.href;
if (!/^([a-z]+):/i.test(value)) { if (!/^([a-z]+):/i.test(value)) {
setAttribute('data-x-broken-href', value); setAttribute('data-x-href-broken', value);
delAttribute('href'); delAttribute('href');
} else { } else {
oElement.href = stripTracking(value); oElement.href = stripTracking(value);
if (oElement.href != value) {
result.tracking = true;
setAttribute('data-x-href-tracking', value);
}
setAttribute('target', '_blank'); setAttribute('target', '_blank');
// setAttribute('rel', 'external nofollow noopener noreferrer'); // setAttribute('rel', 'external nofollow noopener noreferrer');
} }
@ -423,9 +428,8 @@ export const
*/ */
let skipStyle = false; let skipStyle = false;
if (hasAttribute('src')) { value = delAttribute('src');
value = stripTracking(delAttribute('src')); if (value) {
if ('IMG' === name) { if ('IMG' === name) {
oElement.loading = 'lazy'; oElement.loading = 'lazy';
let attachment; let attachment;
@ -462,12 +466,18 @@ export const
oStyle.display = 'none'; oStyle.display = 'none';
// setAttribute('style', 'display:none'); // setAttribute('style', 'display:none');
setAttribute('data-x-src-hidden', value); setAttribute('data-x-src-hidden', value);
// result.tracking = true;
} }
else if (httpre.test(value)) else if (httpre.test(value))
{ {
setAttribute('data-x-src', value); let src = stripTracking(value);
if (src != value) {
result.tracking = true;
setAttribute('data-x-src-tracking', value);
}
setAttribute('data-x-src', src);
result.hasExternals = true; result.hasExternals = true;
oElement.alt || (oElement.alt = value.replace(/^.+\/([^/?]+).*$/, '$1').slice(-20)); oElement.alt || (oElement.alt = src.replace(/^.+\/([^/?]+).*$/, '$1').slice(-20));
} }
else if (value.startsWith('data:image/')) else if (value.startsWith('data:image/'))
{ {

View file

@ -118,6 +118,7 @@ export class MessageModel extends AbstractModel {
isHtml: false, isHtml: false,
hasImages: false, hasImages: false,
hasExternals: false, hasExternals: false,
hasTracking: false,
pgpSigned: null, pgpSigned: null,
pgpVerified: null, pgpVerified: null,
@ -373,6 +374,7 @@ export class MessageModel extends AbstractModel {
let result = msgHtml(this); let result = msgHtml(this);
this.hasExternals(result.hasExternals); this.hasExternals(result.hasExternals);
this.hasImages(!!result.hasExternals); this.hasImages(!!result.hasExternals);
this.hasTracking(!!result.tracking);
this.linkedData = result.linkedData; this.linkedData = result.linkedData;
body.innerHTML = result.html; body.innerHTML = result.html;
if (!this.isSpam && FolderUserStore.spamFolder() != this.folder) { if (!this.isSpam && FolderUserStore.spamFolder() != this.folder) {

View file

@ -109,7 +109,8 @@ export class MailMessageView extends AbstractViewRight {
actionsMenu: null, actionsMenu: null,
// viewer // viewer
viewFromShort: '', viewFromShort: '',
dkimData: ['none', '', ''] dkimData: ['none', '', ''],
nowTracking: false
}); });
this.moveAction = moveAction; this.moveAction = moveAction;
@ -208,6 +209,7 @@ export class MailMessageView extends AbstractViewRight {
// TODO: make first param a user setting #683 // TODO: make first param a user setting #683
this.viewFromShort(message.from.toString(false, true)); this.viewFromShort(message.from.toString(false, true));
this.dkimData(message.dkim[0] || ['none', '', '']); this.dkimData(message.dkim[0] || ['none', '', '']);
this.nowTracking(false);
} else { } else {
MessagelistUserStore.selectedMessage(null); MessagelistUserStore.selectedMessage(null);
@ -500,6 +502,17 @@ export class MailMessageView extends AbstractViewRight {
currentMessage().showExternalImages(); currentMessage().showExternalImages();
} }
showTracking() {
const msg = currentMessage(), body = msg?.body;
if (body && msg.hasTracking()) {
let attr = 'data-x-href-tracking';
body.querySelectorAll('a['+attr+']').forEach(node => node.href = node.getAttribute(attr));
// attr = 'data-x-src-tracking';
// body.querySelectorAll('img['+attr+']').forEach(node => node.src = node.getAttribute(attr));
this.nowTracking(true);
}
}
whitelistText(txt) { whitelistText(txt) {
let value = (SettingsUserStore.viewImagesWhitelist().trim() + '\n' + txt).trim(); let value = (SettingsUserStore.viewImagesWhitelist().trim() + '\n' + txt).trim();
/* /*

View file

@ -153,7 +153,9 @@
"SPAM_SCORE": "Spam Score", "SPAM_SCORE": "Spam Score",
"HAS_VIRUS_WARNING": "WARNING: virus detected", "HAS_VIRUS_WARNING": "WARNING: virus detected",
"TAGS": "Tags", "TAGS": "Tags",
"NEW_TAG": "New tag" "NEW_TAG": "New tag",
"ENABLE_TRACKING_LINKS": "Enable tracking links",
"TRACKING_ENABLED": "Links are now tracked when clicked!"
}, },
"MESSAGE_TAGS": { "MESSAGE_TAGS": {
"$important": "Important", "$important": "Important",

View file

@ -153,7 +153,9 @@
"SPAM_SCORE": "Spam Score", "SPAM_SCORE": "Spam Score",
"HAS_VIRUS_WARNING": "WARNING: virus detected", "HAS_VIRUS_WARNING": "WARNING: virus detected",
"TAGS": "Tags", "TAGS": "Tags",
"NEW_TAG": "New tag" "NEW_TAG": "New tag",
"ENABLE_TRACKING_LINKS": "Enable tracking links",
"TRACKING_ENABLED": "Links are now tracked when clicked!"
}, },
"MESSAGE_TAGS": { "MESSAGE_TAGS": {
"$important": "Important", "$important": "Important",

View file

@ -153,7 +153,9 @@
"SPAM_SCORE": "Spam Score", "SPAM_SCORE": "Spam Score",
"HAS_VIRUS_WARNING": "WARNING: virus detected", "HAS_VIRUS_WARNING": "WARNING: virus detected",
"TAGS": "Tags", "TAGS": "Tags",
"NEW_TAG": "New tag" "NEW_TAG": "New tag",
"ENABLE_TRACKING_LINKS": "Enable tracking links",
"TRACKING_ENABLED": "Links are now tracked when clicked!"
}, },
"MESSAGE_TAGS": { "MESSAGE_TAGS": {
"$important": "Important", "$important": "Important",

View file

@ -153,7 +153,9 @@
"SPAM_SCORE": "Spam Score", "SPAM_SCORE": "Spam Score",
"HAS_VIRUS_WARNING": "WARNING: virus detected", "HAS_VIRUS_WARNING": "WARNING: virus detected",
"TAGS": "Tags", "TAGS": "Tags",
"NEW_TAG": "New tag" "NEW_TAG": "New tag",
"ENABLE_TRACKING_LINKS": "Enable tracking links",
"TRACKING_ENABLED": "Links are now tracked when clicked!"
}, },
"MESSAGE_TAGS": { "MESSAGE_TAGS": {
"$important": "Important", "$important": "Important",

View file

@ -153,7 +153,9 @@
"SPAM_SCORE": "Spam-Score", "SPAM_SCORE": "Spam-Score",
"HAS_VIRUS_WARNING": "WARNUNG: Virus erkannt", "HAS_VIRUS_WARNING": "WARNUNG: Virus erkannt",
"TAGS": "Stichworte", "TAGS": "Stichworte",
"NEW_TAG": "Neues Schlagwort" "NEW_TAG": "Neues Schlagwort",
"ENABLE_TRACKING_LINKS": "Enable tracking links",
"TRACKING_ENABLED": "Links are now tracked when clicked!"
}, },
"MESSAGE_TAGS": { "MESSAGE_TAGS": {
"$important": "Wichtig", "$important": "Wichtig",

View file

@ -153,7 +153,9 @@
"SPAM_SCORE": "Spam Score", "SPAM_SCORE": "Spam Score",
"HAS_VIRUS_WARNING": "WARNING: virus detected", "HAS_VIRUS_WARNING": "WARNING: virus detected",
"TAGS": "Tags", "TAGS": "Tags",
"NEW_TAG": "New tag" "NEW_TAG": "New tag",
"ENABLE_TRACKING_LINKS": "Enable tracking links",
"TRACKING_ENABLED": "Links are now tracked when clicked!"
}, },
"MESSAGE_TAGS": { "MESSAGE_TAGS": {
"$important": "Important", "$important": "Important",

View file

@ -153,7 +153,9 @@
"SPAM_SCORE": "Spam Score", "SPAM_SCORE": "Spam Score",
"HAS_VIRUS_WARNING": "WARNING: virus detected", "HAS_VIRUS_WARNING": "WARNING: virus detected",
"TAGS": "Tags", "TAGS": "Tags",
"NEW_TAG": "New tag" "NEW_TAG": "New tag",
"ENABLE_TRACKING_LINKS": "Enable tracking links",
"TRACKING_ENABLED": "Links are now tracked when clicked!"
}, },
"MESSAGE_TAGS": { "MESSAGE_TAGS": {
"$important": "Important", "$important": "Important",

View file

@ -153,7 +153,9 @@
"SPAM_SCORE": "Spam Score", "SPAM_SCORE": "Spam Score",
"HAS_VIRUS_WARNING": "WARNING: virus detected", "HAS_VIRUS_WARNING": "WARNING: virus detected",
"TAGS": "Tags", "TAGS": "Tags",
"NEW_TAG": "New tag" "NEW_TAG": "New tag",
"ENABLE_TRACKING_LINKS": "Enable tracking links",
"TRACKING_ENABLED": "Links are now tracked when clicked!"
}, },
"MESSAGE_TAGS": { "MESSAGE_TAGS": {
"$important": "Important", "$important": "Important",

View file

@ -153,7 +153,9 @@
"SPAM_SCORE": "Puntuación de spam", "SPAM_SCORE": "Puntuación de spam",
"HAS_VIRUS_WARNING": "ADVERTENCIA: virus detectado", "HAS_VIRUS_WARNING": "ADVERTENCIA: virus detectado",
"TAGS": "Tags", "TAGS": "Tags",
"NEW_TAG": "New tag" "NEW_TAG": "New tag",
"ENABLE_TRACKING_LINKS": "Enable tracking links",
"TRACKING_ENABLED": "Links are now tracked when clicked!"
}, },
"MESSAGE_TAGS": { "MESSAGE_TAGS": {
"$important": "Important", "$important": "Important",

View file

@ -153,7 +153,9 @@
"SPAM_SCORE": "Spam Score", "SPAM_SCORE": "Spam Score",
"HAS_VIRUS_WARNING": "WARNING: virus detected", "HAS_VIRUS_WARNING": "WARNING: virus detected",
"TAGS": "Tags", "TAGS": "Tags",
"NEW_TAG": "New tag" "NEW_TAG": "New tag",
"ENABLE_TRACKING_LINKS": "Enable tracking links",
"TRACKING_ENABLED": "Links are now tracked when clicked!"
}, },
"MESSAGE_TAGS": { "MESSAGE_TAGS": {
"$important": "Important", "$important": "Important",

View file

@ -153,7 +153,9 @@
"SPAM_SCORE": "Spam Puntuzioa", "SPAM_SCORE": "Spam Puntuzioa",
"HAS_VIRUS_WARNING": "KONTUZ: virusa detektatu da", "HAS_VIRUS_WARNING": "KONTUZ: virusa detektatu da",
"TAGS": "Etiketak", "TAGS": "Etiketak",
"NEW_TAG": "Etiketa berria" "NEW_TAG": "Etiketa berria",
"ENABLE_TRACKING_LINKS": "Enable tracking links",
"TRACKING_ENABLED": "Links are now tracked when clicked!"
}, },
"MESSAGE_TAGS": { "MESSAGE_TAGS": {
"$important": "Garrantzitsua", "$important": "Garrantzitsua",

View file

@ -153,7 +153,9 @@
"SPAM_SCORE": "Spam Score", "SPAM_SCORE": "Spam Score",
"HAS_VIRUS_WARNING": "WARNING: virus detected", "HAS_VIRUS_WARNING": "WARNING: virus detected",
"TAGS": "Tags", "TAGS": "Tags",
"NEW_TAG": "New tag" "NEW_TAG": "New tag",
"ENABLE_TRACKING_LINKS": "Enable tracking links",
"TRACKING_ENABLED": "Links are now tracked when clicked!"
}, },
"MESSAGE_TAGS": { "MESSAGE_TAGS": {
"$important": "Important", "$important": "Important",

View file

@ -153,7 +153,9 @@
"SPAM_SCORE": "Spam Score", "SPAM_SCORE": "Spam Score",
"HAS_VIRUS_WARNING": "WARNING: virus detected", "HAS_VIRUS_WARNING": "WARNING: virus detected",
"TAGS": "Tags", "TAGS": "Tags",
"NEW_TAG": "New tag" "NEW_TAG": "New tag",
"ENABLE_TRACKING_LINKS": "Enable tracking links",
"TRACKING_ENABLED": "Links are now tracked when clicked!"
}, },
"MESSAGE_TAGS": { "MESSAGE_TAGS": {
"$important": "Important", "$important": "Important",

View file

@ -153,7 +153,9 @@
"SPAM_SCORE": "Score de spam", "SPAM_SCORE": "Score de spam",
"HAS_VIRUS_WARNING": "ATTENTION : virus détecté", "HAS_VIRUS_WARNING": "ATTENTION : virus détecté",
"TAGS": "Étiquettes", "TAGS": "Étiquettes",
"NEW_TAG": "Nouvelle étiquette" "NEW_TAG": "Nouvelle étiquette",
"ENABLE_TRACKING_LINKS": "Enable tracking links",
"TRACKING_ENABLED": "Links are now tracked when clicked!"
}, },
"MESSAGE_TAGS": { "MESSAGE_TAGS": {
"$important": "Important", "$important": "Important",

View file

@ -153,7 +153,9 @@
"SPAM_SCORE": "Spam Score", "SPAM_SCORE": "Spam Score",
"HAS_VIRUS_WARNING": "FIGYELEM: vírust észleltünk", "HAS_VIRUS_WARNING": "FIGYELEM: vírust észleltünk",
"TAGS": "Tags", "TAGS": "Tags",
"NEW_TAG": "New tag" "NEW_TAG": "New tag",
"ENABLE_TRACKING_LINKS": "Enable tracking links",
"TRACKING_ENABLED": "Links are now tracked when clicked!"
}, },
"MESSAGE_TAGS": { "MESSAGE_TAGS": {
"$important": "Important", "$important": "Important",

View file

@ -153,7 +153,9 @@
"SPAM_SCORE": "Spam Score", "SPAM_SCORE": "Spam Score",
"HAS_VIRUS_WARNING": "WARNING: virus detected", "HAS_VIRUS_WARNING": "WARNING: virus detected",
"TAGS": "Tags", "TAGS": "Tags",
"NEW_TAG": "New tag" "NEW_TAG": "New tag",
"ENABLE_TRACKING_LINKS": "Enable tracking links",
"TRACKING_ENABLED": "Links are now tracked when clicked!"
}, },
"MESSAGE_TAGS": { "MESSAGE_TAGS": {
"$important": "Important", "$important": "Important",

View file

@ -153,7 +153,9 @@
"SPAM_SCORE": "Spam Score", "SPAM_SCORE": "Spam Score",
"HAS_VIRUS_WARNING": "WARNING: virus detected", "HAS_VIRUS_WARNING": "WARNING: virus detected",
"TAGS": "Tags", "TAGS": "Tags",
"NEW_TAG": "New tag" "NEW_TAG": "New tag",
"ENABLE_TRACKING_LINKS": "Enable tracking links",
"TRACKING_ENABLED": "Links are now tracked when clicked!"
}, },
"MESSAGE_TAGS": { "MESSAGE_TAGS": {
"$important": "Important", "$important": "Important",

View file

@ -153,7 +153,9 @@
"SPAM_SCORE": "Punteggio Spam", "SPAM_SCORE": "Punteggio Spam",
"HAS_VIRUS_WARNING": "AVVISO: rilevato virus", "HAS_VIRUS_WARNING": "AVVISO: rilevato virus",
"TAGS": "Tag", "TAGS": "Tag",
"NEW_TAG": "Nuovo tag" "NEW_TAG": "Nuovo tag",
"ENABLE_TRACKING_LINKS": "Enable tracking links",
"TRACKING_ENABLED": "Links are now tracked when clicked!"
}, },
"MESSAGE_TAGS": { "MESSAGE_TAGS": {
"$important": "Importante", "$important": "Importante",

View file

@ -153,7 +153,9 @@
"SPAM_SCORE": "Spam Score", "SPAM_SCORE": "Spam Score",
"HAS_VIRUS_WARNING": "警告: ウィルスが検出されました", "HAS_VIRUS_WARNING": "警告: ウィルスが検出されました",
"TAGS": "タグ", "TAGS": "タグ",
"NEW_TAG": "New tag" "NEW_TAG": "New tag",
"ENABLE_TRACKING_LINKS": "Enable tracking links",
"TRACKING_ENABLED": "Links are now tracked when clicked!"
}, },
"MESSAGE_TAGS": { "MESSAGE_TAGS": {
"$important": "重要", "$important": "重要",

View file

@ -153,7 +153,9 @@
"SPAM_SCORE": "Spam Score", "SPAM_SCORE": "Spam Score",
"HAS_VIRUS_WARNING": "WARNING: virus detected", "HAS_VIRUS_WARNING": "WARNING: virus detected",
"TAGS": "Tags", "TAGS": "Tags",
"NEW_TAG": "New tag" "NEW_TAG": "New tag",
"ENABLE_TRACKING_LINKS": "Enable tracking links",
"TRACKING_ENABLED": "Links are now tracked when clicked!"
}, },
"MESSAGE_TAGS": { "MESSAGE_TAGS": {
"$important": "Important", "$important": "Important",

View file

@ -153,7 +153,9 @@
"SPAM_SCORE": "Spam Score", "SPAM_SCORE": "Spam Score",
"HAS_VIRUS_WARNING": "WARNING: virus detected", "HAS_VIRUS_WARNING": "WARNING: virus detected",
"TAGS": "Tags", "TAGS": "Tags",
"NEW_TAG": "New tag" "NEW_TAG": "New tag",
"ENABLE_TRACKING_LINKS": "Enable tracking links",
"TRACKING_ENABLED": "Links are now tracked when clicked!"
}, },
"MESSAGE_TAGS": { "MESSAGE_TAGS": {
"$important": "Important", "$important": "Important",

View file

@ -153,7 +153,9 @@
"SPAM_SCORE": "Spam Score", "SPAM_SCORE": "Spam Score",
"HAS_VIRUS_WARNING": "WARNING: virus detected", "HAS_VIRUS_WARNING": "WARNING: virus detected",
"TAGS": "Tags", "TAGS": "Tags",
"NEW_TAG": "New tag" "NEW_TAG": "New tag",
"ENABLE_TRACKING_LINKS": "Enable tracking links",
"TRACKING_ENABLED": "Links are now tracked when clicked!"
}, },
"MESSAGE_TAGS": { "MESSAGE_TAGS": {
"$important": "Important", "$important": "Important",

View file

@ -153,7 +153,9 @@
"SPAM_SCORE": "Søppelvurdering", "SPAM_SCORE": "Søppelvurdering",
"HAS_VIRUS_WARNING": "ADVARSEL: virus oppdaget", "HAS_VIRUS_WARNING": "ADVARSEL: virus oppdaget",
"TAGS": "Tags", "TAGS": "Tags",
"NEW_TAG": "New tag" "NEW_TAG": "New tag",
"ENABLE_TRACKING_LINKS": "Enable tracking links",
"TRACKING_ENABLED": "Links are now tracked when clicked!"
}, },
"MESSAGE_TAGS": { "MESSAGE_TAGS": {
"$important": "Important", "$important": "Important",

View file

@ -153,7 +153,9 @@
"SPAM_SCORE": "Spamscore", "SPAM_SCORE": "Spamscore",
"HAS_VIRUS_WARNING": "WAARSCHUWING: virus gedetecteerd", "HAS_VIRUS_WARNING": "WAARSCHUWING: virus gedetecteerd",
"TAGS": "Labels", "TAGS": "Labels",
"NEW_TAG": "Nieuwe label" "NEW_TAG": "Nieuwe label",
"ENABLE_TRACKING_LINKS": "Enable tracking links",
"TRACKING_ENABLED": "Links are now tracked when clicked!"
}, },
"MESSAGE_TAGS": { "MESSAGE_TAGS": {
"$important": "Belangrijk", "$important": "Belangrijk",

View file

@ -153,7 +153,9 @@
"SPAM_SCORE": "Punktacja\/Reputacja spamu", "SPAM_SCORE": "Punktacja\/Reputacja spamu",
"HAS_VIRUS_WARNING": "Uwaga: wykryto wirusa!", "HAS_VIRUS_WARNING": "Uwaga: wykryto wirusa!",
"TAGS": "Tagi", "TAGS": "Tagi",
"NEW_TAG": "Nowy tag" "NEW_TAG": "Nowy tag",
"ENABLE_TRACKING_LINKS": "Enable tracking links",
"TRACKING_ENABLED": "Links are now tracked when clicked!"
}, },
"MESSAGE_TAGS": { "MESSAGE_TAGS": {
"$important": "Ważne", "$important": "Ważne",
@ -386,7 +388,8 @@
"IMAGEURL": "Odnośnik obrazu", "IMAGEURL": "Odnośnik obrazu",
"IMAGEUPLOAD": "Wybierz obraz", "IMAGEUPLOAD": "Wybierz obraz",
"UNDO": "Cofnij", "UNDO": "Cofnij",
"REDO": "Ponów" "REDO": "Ponów",
"REMOVESTYLE": "Remove style"
}, },
"SETTINGS_LABELS": { "SETTINGS_LABELS": {
"GENERAL": "Ogólne", "GENERAL": "Ogólne",

View file

@ -153,7 +153,9 @@
"SPAM_SCORE": "Spam Score", "SPAM_SCORE": "Spam Score",
"HAS_VIRUS_WARNING": "WARNING: virus detected", "HAS_VIRUS_WARNING": "WARNING: virus detected",
"TAGS": "Tags", "TAGS": "Tags",
"NEW_TAG": "New tag" "NEW_TAG": "New tag",
"ENABLE_TRACKING_LINKS": "Enable tracking links",
"TRACKING_ENABLED": "Links are now tracked when clicked!"
}, },
"MESSAGE_TAGS": { "MESSAGE_TAGS": {
"$important": "Important", "$important": "Important",

View file

@ -153,7 +153,9 @@
"SPAM_SCORE": "Pontuação de Spam", "SPAM_SCORE": "Pontuação de Spam",
"HAS_VIRUS_WARNING": "AVISO: vírus detetado", "HAS_VIRUS_WARNING": "AVISO: vírus detetado",
"TAGS": "Etiquetas", "TAGS": "Etiquetas",
"NEW_TAG": "Nova etiqueta" "NEW_TAG": "Nova etiqueta",
"ENABLE_TRACKING_LINKS": "Enable tracking links",
"TRACKING_ENABLED": "Links are now tracked when clicked!"
}, },
"MESSAGE_TAGS": { "MESSAGE_TAGS": {
"$important": "Importante", "$important": "Importante",

View file

@ -153,7 +153,9 @@
"SPAM_SCORE": "Pontuação de Spam", "SPAM_SCORE": "Pontuação de Spam",
"HAS_VIRUS_WARNING": "AVISO: vírus detetado", "HAS_VIRUS_WARNING": "AVISO: vírus detetado",
"TAGS": "Etiquetas", "TAGS": "Etiquetas",
"NEW_TAG": "Nova etiqueta" "NEW_TAG": "Nova etiqueta",
"ENABLE_TRACKING_LINKS": "Enable tracking links",
"TRACKING_ENABLED": "Links are now tracked when clicked!"
}, },
"MESSAGE_TAGS": { "MESSAGE_TAGS": {
"$important": "Importante", "$important": "Importante",

View file

@ -153,7 +153,9 @@
"SPAM_SCORE": "Spam Score", "SPAM_SCORE": "Spam Score",
"HAS_VIRUS_WARNING": "WARNING: virus detected", "HAS_VIRUS_WARNING": "WARNING: virus detected",
"TAGS": "Tags", "TAGS": "Tags",
"NEW_TAG": "New tag" "NEW_TAG": "New tag",
"ENABLE_TRACKING_LINKS": "Enable tracking links",
"TRACKING_ENABLED": "Links are now tracked when clicked!"
}, },
"MESSAGE_TAGS": { "MESSAGE_TAGS": {
"$important": "Important", "$important": "Important",

View file

@ -153,7 +153,9 @@
"SPAM_SCORE": "Оценка спама", "SPAM_SCORE": "Оценка спама",
"HAS_VIRUS_WARNING": "ВНИМАНИЕ: Обнаружен вирус!", "HAS_VIRUS_WARNING": "ВНИМАНИЕ: Обнаружен вирус!",
"TAGS": "Метки", "TAGS": "Метки",
"NEW_TAG": "Новая метка" "NEW_TAG": "Новая метка",
"ENABLE_TRACKING_LINKS": "Enable tracking links",
"TRACKING_ENABLED": "Links are now tracked when clicked!"
}, },
"MESSAGE_TAGS": { "MESSAGE_TAGS": {
"$important": "Важное", "$important": "Важное",

View file

@ -153,7 +153,9 @@
"SPAM_SCORE": "Spam Score", "SPAM_SCORE": "Spam Score",
"HAS_VIRUS_WARNING": "WARNING: virus detected", "HAS_VIRUS_WARNING": "WARNING: virus detected",
"TAGS": "Tags", "TAGS": "Tags",
"NEW_TAG": "New tag" "NEW_TAG": "New tag",
"ENABLE_TRACKING_LINKS": "Enable tracking links",
"TRACKING_ENABLED": "Links are now tracked when clicked!"
}, },
"MESSAGE_TAGS": { "MESSAGE_TAGS": {
"$important": "Important", "$important": "Important",

View file

@ -153,7 +153,9 @@
"SPAM_SCORE": "Spam Score", "SPAM_SCORE": "Spam Score",
"HAS_VIRUS_WARNING": "WARNING: virus detected", "HAS_VIRUS_WARNING": "WARNING: virus detected",
"TAGS": "Tags", "TAGS": "Tags",
"NEW_TAG": "New tag" "NEW_TAG": "New tag",
"ENABLE_TRACKING_LINKS": "Enable tracking links",
"TRACKING_ENABLED": "Links are now tracked when clicked!"
}, },
"MESSAGE_TAGS": { "MESSAGE_TAGS": {
"$important": "Important", "$important": "Important",

View file

@ -153,7 +153,9 @@
"SPAM_SCORE": "Spam Score", "SPAM_SCORE": "Spam Score",
"HAS_VIRUS_WARNING": "VARNING: virus upptäckt", "HAS_VIRUS_WARNING": "VARNING: virus upptäckt",
"TAGS": "Tags", "TAGS": "Tags",
"NEW_TAG": "New tag" "NEW_TAG": "New tag",
"ENABLE_TRACKING_LINKS": "Enable tracking links",
"TRACKING_ENABLED": "Links are now tracked when clicked!"
}, },
"MESSAGE_TAGS": { "MESSAGE_TAGS": {
"$important": "Important", "$important": "Important",

View file

@ -153,7 +153,9 @@
"SPAM_SCORE": "Spam Score", "SPAM_SCORE": "Spam Score",
"HAS_VIRUS_WARNING": "WARNING: virus detected", "HAS_VIRUS_WARNING": "WARNING: virus detected",
"TAGS": "Tags", "TAGS": "Tags",
"NEW_TAG": "New tag" "NEW_TAG": "New tag",
"ENABLE_TRACKING_LINKS": "Enable tracking links",
"TRACKING_ENABLED": "Links are now tracked when clicked!"
}, },
"MESSAGE_TAGS": { "MESSAGE_TAGS": {
"$important": "Important", "$important": "Important",

View file

@ -153,7 +153,9 @@
"SPAM_SCORE": "Spam Score", "SPAM_SCORE": "Spam Score",
"HAS_VIRUS_WARNING": "WARNING: virus detected", "HAS_VIRUS_WARNING": "WARNING: virus detected",
"TAGS": "Tags", "TAGS": "Tags",
"NEW_TAG": "New tag" "NEW_TAG": "New tag",
"ENABLE_TRACKING_LINKS": "Enable tracking links",
"TRACKING_ENABLED": "Links are now tracked when clicked!"
}, },
"MESSAGE_TAGS": { "MESSAGE_TAGS": {
"$important": "Important", "$important": "Important",

View file

@ -153,7 +153,9 @@
"SPAM_SCORE": "Điểm số thư rác", "SPAM_SCORE": "Điểm số thư rác",
"HAS_VIRUS_WARNING": "BÁO ĐỘNG ĐỎ: phát hiện có virut trong thư", "HAS_VIRUS_WARNING": "BÁO ĐỘNG ĐỎ: phát hiện có virut trong thư",
"TAGS": "Thẻ", "TAGS": "Thẻ",
"NEW_TAG": "New tag" "NEW_TAG": "New tag",
"ENABLE_TRACKING_LINKS": "Enable tracking links",
"TRACKING_ENABLED": "Links are now tracked when clicked!"
}, },
"MESSAGE_TAGS": { "MESSAGE_TAGS": {
"$important": "Quan trọng", "$important": "Quan trọng",

View file

@ -153,7 +153,9 @@
"SPAM_SCORE": "垃圾邮件分数", "SPAM_SCORE": "垃圾邮件分数",
"HAS_VIRUS_WARNING": "警告:检测到病毒", "HAS_VIRUS_WARNING": "警告:检测到病毒",
"TAGS": "标签", "TAGS": "标签",
"NEW_TAG": "新标签" "NEW_TAG": "新标签",
"ENABLE_TRACKING_LINKS": "Enable tracking links",
"TRACKING_ENABLED": "Links are now tracked when clicked!"
}, },
"MESSAGE_TAGS": { "MESSAGE_TAGS": {
"$important": "重要", "$important": "重要",

View file

@ -153,7 +153,9 @@
"SPAM_SCORE": "垃圾郵件計分", "SPAM_SCORE": "垃圾郵件計分",
"HAS_VIRUS_WARNING": "警告: 已偵測到病毒", "HAS_VIRUS_WARNING": "警告: 已偵測到病毒",
"TAGS": "標籤", "TAGS": "標籤",
"NEW_TAG": "新增標籤" "NEW_TAG": "新增標籤",
"ENABLE_TRACKING_LINKS": "Enable tracking links",
"TRACKING_ENABLED": "Links are now tracked when clicked!"
}, },
"MESSAGE_TAGS": { "MESSAGE_TAGS": {
"$important": "重要", "$important": "重要",

View file

@ -287,6 +287,11 @@
</div> </div>
</div> </div>
<div class="btn-toolbar" data-bind="visible: message().hasTracking()">
<div class="btn" data-bind="visible: !nowTracking(), click: showTracking" data-icon="🔗" data-i18n="MESSAGE/ENABLE_TRACKING_LINKS"></div>
<div class="alert" data-bind="visible: nowTracking" data-i18n="MESSAGE/TRACKING_ENABLED" style="margin:0"></div>
</div>
<div data-bind="visible: message().pgpEncrypted()"> <div data-bind="visible: message().pgpEncrypted()">
<div class="openpgp-control encrypted" data-bind="css: {success: message().pgpDecrypted()}"> <div class="openpgp-control encrypted" data-bind="css: {success: message().pgpDecrypted()}">
<span data-icon="🔒" data-i18n="OPENPGP/ENCRYPTED_MESSAGE"></span> <span data-icon="🔒" data-i18n="OPENPGP/ENCRYPTED_MESSAGE"></span>