Skip to content

Commit

Permalink
Add ability to confirm newly added recipients
Browse files Browse the repository at this point in the history
  • Loading branch information
piroor committed Feb 29, 2024
1 parent 06b8217 commit 02ecbaf
Show file tree
Hide file tree
Showing 5 changed files with 66 additions and 3 deletions.
9 changes: 9 additions & 0 deletions webextensions/_locales/en/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,14 @@
"confirmMultipleRecipientDomainsAccept": { "message": "Send" },
"confirmMultipleRecipientDomainsCancel": { "message": "Cancel" },

"confirmNewDomainRecipientsDialogTitle": { "message": "Recipients with domains not included in the recipients of the original message" },
"confirmNewDomainRecipientsDialogMessage": { "message": "There are recipients with domains not included in the recipients of the original message.\n\n$RECIPIENTS$\n\nDo you really want to send this message?",
"placeholders": {
"domains": { "content": "$1", "example": "[email protected]" }
}},
"confirmNewDomainRecipientsAccept": { "message": "Send" },
"confirmNewDomainRecipientsCancel": { "message": "Cancel" },


"confirmAttentionDomainsTitle": { "message": "Recipients with attention domains" },
"confirmAttentionDomainsMessage": { "message": "These recipients with attention domains are found:\n\n$RECIPIENTS$\n\nIf there is no problem, continue to send.",
Expand Down Expand Up @@ -106,6 +114,7 @@
"config_minConfirmMultipleRecipientDomainsCount_label_after": { "message": "or more domains in To/Cc recipients" },
"config_allowCheckAllInternals_label": { "message": "Allow to make all internal recipients to be checked with one checkbox" },
"config_allowCheckAllExternals_label": { "message": "Allow to make all external recipients to be checked with one checkbox" },
"config_confirmNewDomainRecipients_label": { "message": "Confirm when any recipients with domains different from any existing recipients are added" },
"config_emphasizeNewDomainRecipients_label": { "message": "Emphasize added recipients with domains different from any existing recipients" },


Expand Down
9 changes: 9 additions & 0 deletions webextensions/_locales/ja/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,14 @@
"confirmMultipleRecipientDomainsAccept": { "message": "送信" },
"confirmMultipleRecipientDomainsCancel": { "message": "キャンセル" },

"confirmNewDomainRecipientsDialogTitle": { "message": "返信元のメールの宛先に含まれていなかったドメインの宛先が追加されています" },
"confirmNewDomainRecipientsDialogMessage": { "message": "返信元のメールの宛先に含まれていなかったドメインの以下の宛先が追加されています。\n\n$RECIPIENTS$\n\n送信してよろしいですか?",
"placeholders": {
"recipients": { "content": "$1", "example": "[email protected]" }
}},
"confirmNewDomainRecipientsAccept": { "message": "送信" },
"confirmNewDomainRecipientsCancel": { "message": "キャンセル" },


"confirmAttentionDomainsTitle": { "message": "特別に注意が必要な宛先" },
"confirmAttentionDomainsMessage": { "message": "特別に注意が必要なドメインに属する以下の宛先があります。\n\n$RECIPIENTS$\n\n問題がない事を確認の上でメールを送信してください。",
Expand Down Expand Up @@ -106,6 +114,7 @@
"config_minConfirmMultipleRecipientDomainsCount_label_after": { "message": "個以上のドメインが含まれる場合に警告する" },
"config_allowCheckAllInternals_label": { "message": "組織内の宛先の一括チェックを許可" },
"config_allowCheckAllExternals_label": { "message": "外部の宛先の一括チェックを許可" },
"config_confirmNewDomainRecipients_label": { "message": "返信の宛先に今まで含まれていなかったドメインのアドレスが追加された場合に警告する" },
"config_emphasizeNewDomainRecipients_label": { "message": "返信の宛先に今まで含まれていなかったドメインのアドレスを強調表示する" },


Expand Down
3 changes: 3 additions & 0 deletions webextensions/common/common.js
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,9 @@ export const configs = new Configs({
minConfirmationRecipientsCount: 0,
confirmMultipleRecipientDomainsDialogTitle: '',
confirmMultipleRecipientDomainsDialogMessage: '',
confirmNewDomainRecipients: false,
confirmNewDomainRecipientsDialogTitle: '',
confirmNewDomainRecipientsDialogMessage: '',

allowCheckAllInternals: true,
allowCheckAllExternals: false,
Expand Down
47 changes: 44 additions & 3 deletions webextensions/dialog/confirm/confirm.js
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,7 @@ configs.$loaded.then(async () => {
Dialog.initButton(mAcceptButton, async _event => {
if (!isAllChecked() ||
!(await confirmedMultipleRecipientDomains()) ||
!(await confirmedNewDomainRecipients()) ||
!(await confirmedWithRules()))
return;

Expand Down Expand Up @@ -230,7 +231,7 @@ function initExternals() {
const row = event.target.closest('.row');
const domainRow = mExternalsList.querySelector(`.row.domain[data-domain="${row.dataset.domain}"]`);
const recipientCheckboxes = mExternalsList.querySelectorAll(`.row.recipient[data-domain="${row.dataset.domain}"] input[type="checkbox"]`);
domainRow.classList.toggle('checked', Array.from(recipientCheckboxes).every(checkbox => checkbox.checked));
domainRow.classList.toggle('checked', [...recipientCheckboxes].every(checkbox => checkbox.checked));
mExternalsAllCheck.checked = isAllChecked(mExternalsList);
});

Expand Down Expand Up @@ -447,8 +448,8 @@ async function confirmedMultipleRecipientDomains() {
return true;

const message = (
configs.confirmMultipleRecipientDomainsDialogMessage.replace(/[\%\$]s/i, Array.from(domains).join('\n')) ||
browser.i18n.getMessage('confirmMultipleRecipientDomainsMessage', [Array.from(domains).join('\n')])
configs.confirmMultipleRecipientDomainsDialogMessage.replace(/[\%\$]s/i, [...domains].join('\n')) ||
browser.i18n.getMessage('confirmMultipleRecipientDomainsMessage', [[...domains].join('\n')])
);
let result;
try {
Expand Down Expand Up @@ -476,6 +477,46 @@ async function confirmedMultipleRecipientDomains() {
}
}

async function confirmedNewDomainRecipients() {
log('confirmedNewDomainRecipients shouldConfirm = ', configs.confirmNewDomainRecipients);
if (!configs.confirmNewDomainRecipients)
return true;

const newDomainRecipients = [...new Set(mParams.externals.filter(recipient => mNewRecipientDomains.has(recipient.domain)))].map(recipient => recipient.address);
log('newDomainRecipients domains = ', newDomainRecipients);
if (newDomainRecipients.length == 0)
return true;

const message = (
configs.confirmNewDomainRecipientsDialogMessage.replace(/[\%\$]s/i, newDomainRecipients.join('\n')) ||
browser.i18n.getMessage('confirmNewDomainRecipientsDialogMessage', [newDomainRecipients.join('\n')])
);
let result;
try {
result = await RichConfirm.show({
modal: true,
type: 'common-dialog',
url: '/resources/blank.html',
title: configs.confirmNewDomainRecipientsDialogTitle || browser.i18n.getMessage('confirmNewDomainRecipientsDialogTitle'),
message,
buttons: [
browser.i18n.getMessage('confirmNewDomainRecipientsAccept'),
browser.i18n.getMessage('confirmNewDomainRecipientsCancel')
]
});
}
catch(_error) {
result = { buttonIndex: -1 };
}
log('confirmedNewDomainRecipients result.buttonIndex = ', result.buttonIndex);
switch (result.buttonIndex) {
case 0:
return true;
default:
return false;
}
}

async function confirmedWithRules() {
log('confirmedWithRules');
const confirmed = await mMatchingRules.tryReconfirm({
Expand Down
1 change: 1 addition & 0 deletions webextensions/options/options.html
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ <h1>__MSG_config_recipients_caption__</h1>
>__MSG_config_minConfirmMultipleRecipientDomainsCount_label_before__</label>
<label><input id="minConfirmMultipleRecipientDomainsCount" type="number" size="4"
>__MSG_config_minConfirmMultipleRecipientDomainsCount_label_after__</label></p>
<p><label><input id="confirmNewDomainRecipients" type="checkbox">__MSG_config_confirmNewDomainRecipients_label__</label></p>

<hr class="spacer">

Expand Down

0 comments on commit 02ecbaf

Please sign in to comment.