Slightly modified patch code of #1657

This commit is contained in:
the-djmaze 2024-07-11 01:31:58 +02:00
parent 95436347e5
commit 50e30dbb6e
47 changed files with 135 additions and 8 deletions

View file

@ -112,7 +112,7 @@ export class AppUser extends AbstractApp {
case FolderType.Trash: case FolderType.Trash:
oMoveFolder = getFolderFromCacheList(FolderUserStore.trashFolder()); oMoveFolder = getFolderFromCacheList(FolderUserStore.trashFolder());
nSetSystemFoldersNotification = iFolderType; nSetSystemFoldersNotification = iFolderType;
bDelete = bDelete || UNUSED_OPTION_VALUE === FolderUserStore.trashFolder() bDelete = bDelete/* || UNUSED_OPTION_VALUE === FolderUserStore.trashFolder()*/
|| sFromFolderFullName === FolderUserStore.spamFolder() || sFromFolderFullName === FolderUserStore.spamFolder()
|| sFromFolderFullName === FolderUserStore.trashFolder(); || sFromFolderFullName === FolderUserStore.trashFolder();
break; break;

View file

@ -71,7 +71,9 @@ MessageSetAction = {
SetSeen: 0, SetSeen: 0,
UnsetSeen: 1, UnsetSeen: 1,
SetFlag: 2, SetFlag: 2,
UnsetFlag: 3 UnsetFlag: 3,
SetDeleted: 4,
UnsetDeleted: 5
}, },
/** /**

View file

@ -206,6 +206,7 @@ export class MessageModel extends AbstractModel {
isUnseen: () => !this.flags().includes('\\seen'), isUnseen: () => !this.flags().includes('\\seen'),
isFlagged: () => this.flags().includes('\\flagged'), isFlagged: () => this.flags().includes('\\flagged'),
isDeleted: () => this.flags().includes('\\deleted'),
// isJunk: () => this.flags().includes('$junk') && !this.flags().includes('$nonjunk'), // isJunk: () => this.flags().includes('$junk') && !this.flags().includes('$nonjunk'),
// isPhishing: () => this.flags().includes('$phishing'), // isPhishing: () => this.flags().includes('$phishing'),
@ -363,7 +364,7 @@ export class MessageModel extends AbstractModel {
lineAsCss(flags=1) { lineAsCss(flags=1) {
let classes = []; let classes = [];
forEachObjectEntry({ forEachObjectEntry({
deleted: this.deleted(), deleted: this.deleted() || this.isDeleted(),
selected: this.selected(), selected: this.selected(),
checked: this.checked(), checked: this.checked(),
unseen: this.isUnseen(), unseen: this.isUnseen(),

View file

@ -36,6 +36,7 @@ import { baseCollator } from 'Common/Translator';
const const
isChecked = item => item.checked(), isChecked = item => item.checked(),
isDeleted = item => item.isDeleted(),
replaceHash = hash => { replaceHash = hash => {
rl.route.off(); rl.route.off();
hasher.replaceHash(hash); hasher.replaceHash(hash);
@ -142,6 +143,14 @@ MessagelistUserStore.hasCheckedOrSelected = koComputable(() =>
| !!MessagelistUserStore.find(isChecked) | !!MessagelistUserStore.find(isChecked)
).extend({ rateLimit: 50 }); ).extend({ rateLimit: 50 });
MessagelistUserStore.hasCheckedOrSelectedAndDeleted = koComputable(
() => !!MessagelistUserStore.listCheckedOrSelected().find(isDeleted)
).extend({ rateLimit: 50 });
MessagelistUserStore.hasCheckedOrSelectedAndUndeleted = koComputable(
() => !!MessagelistUserStore.listCheckedOrSelected().find(item => !item?.isDeleted())
).extend({ rateLimit: 50 });
MessagelistUserStore.notifyNewMessages = (folder, newMessages) => { MessagelistUserStore.notifyNewMessages = (folder, newMessages) => {
if (getFolderInboxName() === folder && arrayLength(newMessages)) { if (getFolderInboxName() === folder && arrayLength(newMessages)) {
@ -370,6 +379,14 @@ MessagelistUserStore.setAction = (sFolderFullName, iSetAction, messages) => {
messages.forEach(oMessage => messages.forEach(oMessage =>
oMessage.isFlagged() && rootUids.push(oMessage.uid) && oMessage.flags.remove('\\flagged') oMessage.isFlagged() && rootUids.push(oMessage.uid) && oMessage.flags.remove('\\flagged')
); );
} else if (iSetAction == MessageSetAction.SetDeleted) {
messages.forEach(oMessage =>
!oMessage.isDeleted() && rootUids.push(oMessage.uid) && oMessage.flags.push('\\deleted')
);
} else if (iSetAction == MessageSetAction.UnsetDeleted) {
messages.forEach(oMessage =>
oMessage.isDeleted() && rootUids.push(oMessage.uid) && oMessage.flags.remove('\\deleted')
);
} }
rootUids = rootUids.validUnique(); rootUids = rootUids.validUnique();
length = rootUids.length; length = rootUids.length;
@ -399,6 +416,15 @@ MessagelistUserStore.setAction = (sFolderFullName, iSetAction, messages) => {
setAction: iSetAction == MessageSetAction.SetFlag ? 1 : 0 setAction: iSetAction == MessageSetAction.SetFlag ? 1 : 0
}); });
break; break;
case MessageSetAction.SetDeleted:
case MessageSetAction.UnsetDeleted:
Remote.request('MessageSetDeleted', null, {
folder: sFolderFullName,
uids: rootUids.join(','),
setAction: iSetAction == MessageSetAction.SetDeleted ? 1 : 0
});
break;
// no default // no default
} }
} }

View file

@ -33,6 +33,10 @@ input:-webkit-autofill:active {
transition: color 9999s ease-out, background-color 9999s ease-out; transition: color 9999s ease-out, background-color 9999s ease-out;
} }
[data-icon].rotate::before {
transform: rotate(-180deg);
}
/* /*
@media (pointer: coarse), (hover: none) { @media (pointer: coarse), (hover: none) {
[title] { [title] {

View file

@ -1,6 +1,7 @@
import ko from 'ko'; import ko from 'ko';
import { addObservablesTo, addComputablesTo } from 'External/ko'; import { addObservablesTo, addComputablesTo } from 'External/ko';
import { UNUSED_OPTION_VALUE } from 'Common/Consts';
import { ScopeFolderList, ScopeMessageList, ScopeMessageView } from 'Common/Enums'; import { ScopeFolderList, ScopeMessageList, ScopeMessageView } from 'Common/Enums';
import { ComposeType, FolderType, MessageSetAction } from 'Common/EnumsUser'; import { ComposeType, FolderType, MessageSetAction } from 'Common/EnumsUser';
import { doc, import { doc,
@ -326,7 +327,8 @@ export class MailMessageList extends AbstractViewRight {
downloadZipCommand: canBeMovedHelper, downloadZipCommand: canBeMovedHelper,
forwardCommand: canBeMovedHelper, forwardCommand: canBeMovedHelper,
deleteWithoutMoveCommand: canBeMovedHelper, deleteWithoutMoveCommand: canBeMovedHelper,
deleteCommand: canBeMovedHelper, deleteCommand: () => MessagelistUserStore.hasCheckedOrSelectedAndUndeleted(),
undeleteCommand: () => MessagelistUserStore.hasCheckedOrSelectedAndDeleted(),
archiveCommand: canBeMovedHelper, archiveCommand: canBeMovedHelper,
spamCommand: canBeMovedHelper, spamCommand: canBeMovedHelper,
notSpamCommand: canBeMovedHelper, notSpamCommand: canBeMovedHelper,
@ -400,9 +402,28 @@ export class MailMessageList extends AbstractViewRight {
&& moveMessagesToFolderType(FolderType.Trash, true); && moveMessagesToFolderType(FolderType.Trash, true);
} }
// User setting hideDeleted || immediatelyMoveToTrash ??
deleteCommand() { deleteCommand() {
// moveMessagesToFolderType(FolderType.Trash);
if (UNUSED_OPTION_VALUE === FolderUserStore.trashFolder() || '' === FolderUserStore.trashFolder()) {
listAction(
FolderUserStore.currentFolderFullName(),
MessageSetAction.SetDeleted,
MessagelistUserStore.listCheckedOrSelected()
);
} else {
moveMessagesToFolderType(FolderType.Trash); moveMessagesToFolderType(FolderType.Trash);
} }
}
// User setting !hideDeleted && !immediatelyMoveToTrash ??
undeleteCommand() {
listAction(
FolderUserStore.currentFolderFullName(),
MessageSetAction.UnsetDeleted,
MessagelistUserStore.listCheckedOrSelected()
);
}
archiveCommand() { archiveCommand() {
moveMessagesToFolderType(FolderType.Archive); moveMessagesToFolderType(FolderType.Archive);

View file

@ -1,6 +1,7 @@
import ko from 'ko'; import ko from 'ko';
import { addObservablesTo, addComputablesTo, addSubscribablesTo } from 'External/ko'; import { addObservablesTo, addComputablesTo, addSubscribablesTo } from 'External/ko';
import { UNUSED_OPTION_VALUE } from 'Common/Consts';
import { ScopeFolderList, ScopeMessageList, ScopeMessageView } from 'Common/Enums'; import { ScopeFolderList, ScopeMessageList, ScopeMessageView } from 'Common/Enums';
import { import {
@ -99,6 +100,20 @@ export class MailMessageView extends AbstractViewRight {
currentMessage(null); currentMessage(null);
rl.app.moveMessagesToFolderType(folderType, message.folder, new Set([message.uid]), bDelete); rl.app.moveMessagesToFolderType(folderType, message.folder, new Set([message.uid]), bDelete);
} }
}, this.messageVisible),
createCommandSetHelper = action =>
createCommand(() => setAction(action), this.messageVisible),
createCommandDeleteHelper = () =>
createCommand(() => {
if (UNUSED_OPTION_VALUE === FolderUserStore.trashFolder() || '' === FolderUserStore.trashFolder()) {
setAction(MessageSetAction.SetDeleted);
} else {
const message = currentMessage();
if (message) {
currentMessage(null);
rl.app.moveMessagesToFolderType(FolderType.Trash, message.folder, new Set([message.uid]));
}
}
}, this.messageVisible); }, this.messageVisible);
this.msgDefaultAction = SettingsUserStore.msgDefaultAction; this.msgDefaultAction = SettingsUserStore.msgDefaultAction;
@ -197,6 +212,8 @@ export class MailMessageView extends AbstractViewRight {
pgpSupported: () => currentMessage() && PgpUserStore.isSupported(), pgpSupported: () => currentMessage() && PgpUserStore.isSupported(),
canBeUndeleted: () => currentMessage()?.isDeleted(),
messageListOrViewLoading: messageListOrViewLoading:
() => MessagelistUserStore.isLoading() | MessageUserStore.loading() () => MessagelistUserStore.isLoading() | MessageUserStore.loading()
}); });
@ -231,7 +248,11 @@ export class MailMessageView extends AbstractViewRight {
this.forwardAsAttachmentCommand = createCommandReplyHelper(ComposeType.ForwardAsAttachment); this.forwardAsAttachmentCommand = createCommandReplyHelper(ComposeType.ForwardAsAttachment);
this.editAsNewCommand = createCommandReplyHelper(ComposeType.EditAsNew); this.editAsNewCommand = createCommandReplyHelper(ComposeType.EditAsNew);
this.deleteCommand = createCommandActionHelper(FolderType.Trash); // this.deleteCommand = createCommandActionHelper(FolderType.Trash);
// User setting hideDeleted || immediatelyMoveToTrash ??
this.deleteCommand = createCommandDeleteHelper();
// User setting !hideDeleted && !immediatelyMoveToTrash ??
this.undeleteCommand = createCommandSetHelper(MessageSetAction.UnsetDeleted);
this.deleteWithoutMoveCommand = createCommandActionHelper(FolderType.Trash, true); this.deleteWithoutMoveCommand = createCommandActionHelper(FolderType.Trash, true);
this.archiveCommand = createCommandActionHelper(FolderType.Archive); this.archiveCommand = createCommandActionHelper(FolderType.Archive);
this.spamCommand = createCommandActionHelper(FolderType.Junk); this.spamCommand = createCommandActionHelper(FolderType.Junk);

View file

@ -449,6 +449,11 @@ trait Messages
return $this->messageSetFlag(MessageFlag::FLAGGED, true); return $this->messageSetFlag(MessageFlag::FLAGGED, true);
} }
public function DoMessageSetDeleted() : array
{
return $this->messageSetFlag(MessageFlag::DELETED, true);
}
public function DoMessageSetKeyword() : array public function DoMessageSetKeyword() : array
{ {
return $this->messageSetFlag($this->GetActionParam('keyword', ''), true); return $this->messageSetFlag($this->GetActionParam('keyword', ''), true);

View file

@ -11,6 +11,7 @@
"CLOSE": "أغلق (Esc)", "CLOSE": "أغلق (Esc)",
"CONTACTS": "جهات الإتصال", "CONTACTS": "جهات الإتصال",
"DELETE": "حذف", "DELETE": "حذف",
"UNDELETE": "Undelete",
"DONE": "إنتهاء", "DONE": "إنتهاء",
"EMAIL": "إيميل", "EMAIL": "إيميل",
"FROM": "من", "FROM": "من",

View file

@ -11,6 +11,7 @@
"CLOSE": "Закрыць (Esc)", "CLOSE": "Закрыць (Esc)",
"CONTACTS": "Кантакты", "CONTACTS": "Кантакты",
"DELETE": "Выдаліць", "DELETE": "Выдаліць",
"UNDELETE": "Undelete",
"DONE": "Завяршыць", "DONE": "Завяршыць",
"EMAIL": "Пошта", "EMAIL": "Пошта",
"FROM": "Ад", "FROM": "Ад",

View file

@ -11,6 +11,7 @@
"CLOSE": "Затваряне (Esc)", "CLOSE": "Затваряне (Esc)",
"CONTACTS": "Контакти", "CONTACTS": "Контакти",
"DELETE": "Изтрий", "DELETE": "Изтрий",
"UNDELETE": "Undelete",
"DONE": "Готово", "DONE": "Готово",
"EMAIL": "Акаунт", "EMAIL": "Акаунт",
"FROM": "От", "FROM": "От",

View file

@ -11,6 +11,7 @@
"CLOSE": "Zavřít (Esc)", "CLOSE": "Zavřít (Esc)",
"CONTACTS": "Adresář", "CONTACTS": "Adresář",
"DELETE": "Odstranit", "DELETE": "Odstranit",
"UNDELETE": "Undelete",
"DONE": "Dokončit", "DONE": "Dokončit",
"EMAIL": "Email", "EMAIL": "Email",
"FROM": "Odesílatel", "FROM": "Odesílatel",

View file

@ -11,6 +11,7 @@
"CLOSE": "Luk (Esc)", "CLOSE": "Luk (Esc)",
"CONTACTS": "Kontakter", "CONTACTS": "Kontakter",
"DELETE": "Slet", "DELETE": "Slet",
"UNDELETE": "Undelete",
"DONE": "Færdig", "DONE": "Færdig",
"EMAIL": "E-mail", "EMAIL": "E-mail",
"FROM": "Fra", "FROM": "Fra",

View file

@ -11,6 +11,7 @@
"CLOSE": "Schließen", "CLOSE": "Schließen",
"CONTACTS": "Kontakte", "CONTACTS": "Kontakte",
"DELETE": "Löschen", "DELETE": "Löschen",
"UNDELETE": "Undelete",
"DONE": "Erledigt", "DONE": "Erledigt",
"EMAIL": "E-Mail", "EMAIL": "E-Mail",
"FROM": "Von", "FROM": "Von",

View file

@ -11,6 +11,7 @@
"CLOSE": "Κλείσιμο (Esc)", "CLOSE": "Κλείσιμο (Esc)",
"CONTACTS": "Επαφές", "CONTACTS": "Επαφές",
"DELETE": "Διαγραφή", "DELETE": "Διαγραφή",
"UNDELETE": "Undelete",
"DONE": "Έγινε", "DONE": "Έγινε",
"EMAIL": "Διεύθυνση ηλεκτρονικού ταχυδρομείου", "EMAIL": "Διεύθυνση ηλεκτρονικού ταχυδρομείου",
"FROM": "Από", "FROM": "Από",

View file

@ -11,6 +11,7 @@
"CLOSE": "Close", "CLOSE": "Close",
"CONTACTS": "Contacts", "CONTACTS": "Contacts",
"DELETE": "Delete", "DELETE": "Delete",
"UNDELETE": "Undelete",
"DONE": "Done", "DONE": "Done",
"EMAIL": "Email", "EMAIL": "Email",
"FROM": "From", "FROM": "From",

View file

@ -11,6 +11,7 @@
"CLOSE": "Cerrar", "CLOSE": "Cerrar",
"CONTACTS": "Contactos", "CONTACTS": "Contactos",
"DELETE": "Eliminar", "DELETE": "Eliminar",
"UNDELETE": "Undelete",
"DONE": "Hecho", "DONE": "Hecho",
"EMAIL": "Email", "EMAIL": "Email",
"FROM": "De", "FROM": "De",

View file

@ -11,6 +11,7 @@
"CLOSE": "Sulge (Esc)", "CLOSE": "Sulge (Esc)",
"CONTACTS": "Kontaktid", "CONTACTS": "Kontaktid",
"DELETE": "Kustuta", "DELETE": "Kustuta",
"UNDELETE": "Undelete",
"DONE": "Valmis", "DONE": "Valmis",
"EMAIL": "E-post", "EMAIL": "E-post",
"FROM": "Saatja", "FROM": "Saatja",

View file

@ -11,6 +11,7 @@
"CLOSE": "Itxi", "CLOSE": "Itxi",
"CONTACTS": "Kontaktuak", "CONTACTS": "Kontaktuak",
"DELETE": "Ezabatu", "DELETE": "Ezabatu",
"UNDELETE": "Undelete",
"DONE": "Eginda", "DONE": "Eginda",
"EMAIL": "Email", "EMAIL": "Email",
"FROM": "Nork", "FROM": "Nork",

View file

@ -11,6 +11,7 @@
"CLOSE": "بستن (Esc)", "CLOSE": "بستن (Esc)",
"CONTACTS": "تماس‌ها", "CONTACTS": "تماس‌ها",
"DELETE": "حذف", "DELETE": "حذف",
"UNDELETE": "Undelete",
"DONE": "انجام شد", "DONE": "انجام شد",
"EMAIL": "پست الکترونیک", "EMAIL": "پست الکترونیک",
"FROM": "از", "FROM": "از",

View file

@ -11,6 +11,7 @@
"CLOSE": "Sulje (Esc)", "CLOSE": "Sulje (Esc)",
"CONTACTS": "Yhteystiedot", "CONTACTS": "Yhteystiedot",
"DELETE": "Poista", "DELETE": "Poista",
"UNDELETE": "Undelete",
"DONE": "Valmis", "DONE": "Valmis",
"EMAIL": "Sähköpostisi", "EMAIL": "Sähköpostisi",
"FROM": "Lähettäjä", "FROM": "Lähettäjä",

View file

@ -11,6 +11,7 @@
"CLOSE": "Fermer", "CLOSE": "Fermer",
"CONTACTS": "Contacts", "CONTACTS": "Contacts",
"DELETE": "Supprimer", "DELETE": "Supprimer",
"UNDELETE": "Undelete",
"DONE": "Fait", "DONE": "Fait",
"EMAIL": "Courriel", "EMAIL": "Courriel",
"FROM": "De", "FROM": "De",

View file

@ -11,6 +11,7 @@
"CLOSE": "Bezárás (Esc)", "CLOSE": "Bezárás (Esc)",
"CONTACTS": "Névjegyek", "CONTACTS": "Névjegyek",
"DELETE": "Törlés", "DELETE": "Törlés",
"UNDELETE": "Undelete",
"DONE": "Kész", "DONE": "Kész",
"EMAIL": "E-mail", "EMAIL": "E-mail",
"FROM": "Feladó", "FROM": "Feladó",

View file

@ -11,6 +11,7 @@
"CLOSE": "Tutup (esc)", "CLOSE": "Tutup (esc)",
"CONTACTS": "Kontak", "CONTACTS": "Kontak",
"DELETE": "Hapus", "DELETE": "Hapus",
"UNDELETE": "Undelete",
"DONE": "Selesai", "DONE": "Selesai",
"EMAIL": "Email", "EMAIL": "Email",
"FROM": "Dari", "FROM": "Dari",

View file

@ -11,6 +11,7 @@
"CLOSE": "Loka (Esc)", "CLOSE": "Loka (Esc)",
"CONTACTS": "Tengiliðir", "CONTACTS": "Tengiliðir",
"DELETE": "Eyða", "DELETE": "Eyða",
"UNDELETE": "Undelete",
"DONE": "Lokið", "DONE": "Lokið",
"EMAIL": "Tölvupóstfang", "EMAIL": "Tölvupóstfang",
"FROM": "Frá", "FROM": "Frá",

View file

@ -11,6 +11,7 @@
"CLOSE": "Chiudi (Esc)", "CLOSE": "Chiudi (Esc)",
"CONTACTS": "Contatti", "CONTACTS": "Contatti",
"DELETE": "Elimina", "DELETE": "Elimina",
"UNDELETE": "Undelete",
"DONE": "Fatto", "DONE": "Fatto",
"EMAIL": "Email", "EMAIL": "Email",
"FROM": "Da", "FROM": "Da",

View file

@ -11,6 +11,7 @@
"CLOSE": "閉じる(Esc)", "CLOSE": "閉じる(Esc)",
"CONTACTS": "連絡先", "CONTACTS": "連絡先",
"DELETE": "削除", "DELETE": "削除",
"UNDELETE": "Undelete",
"DONE": "完了", "DONE": "完了",
"EMAIL": "メールアドレス", "EMAIL": "メールアドレス",
"FROM": "差出人", "FROM": "差出人",

View file

@ -11,6 +11,7 @@
"CLOSE": "닫기 (Esc)", "CLOSE": "닫기 (Esc)",
"CONTACTS": "연락처", "CONTACTS": "연락처",
"DELETE": "삭제", "DELETE": "삭제",
"UNDELETE": "Undelete",
"DONE": "완료", "DONE": "완료",
"EMAIL": "이메일", "EMAIL": "이메일",
"FROM": "보내는 사람", "FROM": "보내는 사람",

View file

@ -11,6 +11,7 @@
"CLOSE": "Uždaryti (Esc)", "CLOSE": "Uždaryti (Esc)",
"CONTACTS": "Kontaktai", "CONTACTS": "Kontaktai",
"DELETE": "Naikinti", "DELETE": "Naikinti",
"UNDELETE": "Undelete",
"DONE": "Atlikta", "DONE": "Atlikta",
"EMAIL": "E-paštas", "EMAIL": "E-paštas",
"FROM": "Nuo", "FROM": "Nuo",

View file

@ -11,6 +11,7 @@
"CLOSE": "Aizvērt (Esc)", "CLOSE": "Aizvērt (Esc)",
"CONTACTS": "Kontakti", "CONTACTS": "Kontakti",
"DELETE": "Dzēst", "DELETE": "Dzēst",
"UNDELETE": "Undelete",
"DONE": "Done", "DONE": "Done",
"EMAIL": "E-pasts", "EMAIL": "E-pasts",
"FROM": "No", "FROM": "No",

View file

@ -11,6 +11,7 @@
"CLOSE": "Lukk (Esc)", "CLOSE": "Lukk (Esc)",
"CONTACTS": "Kontakter", "CONTACTS": "Kontakter",
"DELETE": "Slett", "DELETE": "Slett",
"UNDELETE": "Undelete",
"DONE": "Ferdig", "DONE": "Ferdig",
"EMAIL": "E-postadresse", "EMAIL": "E-postadresse",
"FROM": "Fra", "FROM": "Fra",

View file

@ -11,6 +11,7 @@
"CLOSE": "Sluiten", "CLOSE": "Sluiten",
"CONTACTS": "Contactpersonen", "CONTACTS": "Contactpersonen",
"DELETE": "Verwijder", "DELETE": "Verwijder",
"UNDELETE": "Undelete",
"DONE": "Klaar", "DONE": "Klaar",
"EMAIL": "E-mailadres", "EMAIL": "E-mailadres",
"FROM": "Van", "FROM": "Van",

View file

@ -11,6 +11,7 @@
"CLOSE": "Zamknij (Esc)", "CLOSE": "Zamknij (Esc)",
"CONTACTS": "Kontakty", "CONTACTS": "Kontakty",
"DELETE": "Usuń", "DELETE": "Usuń",
"UNDELETE": "Undelete",
"DONE": "Gotowe", "DONE": "Gotowe",
"EMAIL": "Adres e-mail", "EMAIL": "Adres e-mail",
"FROM": "Od", "FROM": "Od",

View file

@ -11,6 +11,7 @@
"CLOSE": "Fechar (Esc)", "CLOSE": "Fechar (Esc)",
"CONTACTS": "Contatos", "CONTACTS": "Contatos",
"DELETE": "Excluir", "DELETE": "Excluir",
"UNDELETE": "Undelete",
"DONE": "Concluir", "DONE": "Concluir",
"EMAIL": "E-mail", "EMAIL": "E-mail",
"FROM": "De", "FROM": "De",

View file

@ -11,6 +11,7 @@
"CLOSE": "Fechar", "CLOSE": "Fechar",
"CONTACTS": "Contactos", "CONTACTS": "Contactos",
"DELETE": "Eliminar", "DELETE": "Eliminar",
"UNDELETE": "Undelete",
"DONE": "Terminado", "DONE": "Terminado",
"EMAIL": "Email", "EMAIL": "Email",
"FROM": "De", "FROM": "De",

View file

@ -11,6 +11,7 @@
"CLOSE": "Închide (Esc)", "CLOSE": "Închide (Esc)",
"CONTACTS": "Contacte", "CONTACTS": "Contacte",
"DELETE": "Șterge", "DELETE": "Șterge",
"UNDELETE": "Undelete",
"DONE": "Done", "DONE": "Done",
"EMAIL": "Email", "EMAIL": "Email",
"FROM": "De la", "FROM": "De la",

View file

@ -11,6 +11,7 @@
"CLOSE": "Закрыть (Esc)", "CLOSE": "Закрыть (Esc)",
"CONTACTS": "Контакты", "CONTACTS": "Контакты",
"DELETE": "Удалить", "DELETE": "Удалить",
"UNDELETE": "Восстановить",
"DONE": "Завершить", "DONE": "Завершить",
"EMAIL": "Почта", "EMAIL": "Почта",
"FROM": "От", "FROM": "От",

View file

@ -11,6 +11,7 @@
"CLOSE": "Zatvoriť (Esc)", "CLOSE": "Zatvoriť (Esc)",
"CONTACTS": "Adresár", "CONTACTS": "Adresár",
"DELETE": "Odstrániť", "DELETE": "Odstrániť",
"UNDELETE": "Undelete",
"DONE": "Done", "DONE": "Done",
"EMAIL": "Email", "EMAIL": "Email",
"FROM": "Odosielateľ", "FROM": "Odosielateľ",

View file

@ -11,6 +11,7 @@
"CLOSE": "Zapri (Esc)", "CLOSE": "Zapri (Esc)",
"CONTACTS": "Stiki", "CONTACTS": "Stiki",
"DELETE": "Izbriši", "DELETE": "Izbriši",
"UNDELETE": "Undelete",
"DONE": "Končaj", "DONE": "Končaj",
"EMAIL": "E-pošta", "EMAIL": "E-pošta",
"FROM": "Od", "FROM": "Od",

View file

@ -11,6 +11,7 @@
"CLOSE": "Stäng (Esc)", "CLOSE": "Stäng (Esc)",
"CONTACTS": "Kontakter", "CONTACTS": "Kontakter",
"DELETE": "Ta bort", "DELETE": "Ta bort",
"UNDELETE": "Undelete",
"DONE": "Klar", "DONE": "Klar",
"EMAIL": "E-post", "EMAIL": "E-post",
"FROM": "Från", "FROM": "Från",

View file

@ -11,6 +11,7 @@
"CLOSE": "Kapat (Esc)", "CLOSE": "Kapat (Esc)",
"CONTACTS": "Kişi Listesi", "CONTACTS": "Kişi Listesi",
"DELETE": "Sil", "DELETE": "Sil",
"UNDELETE": "Undelete",
"DONE": "Done", "DONE": "Done",
"EMAIL": "E-Posta", "EMAIL": "E-Posta",
"FROM": "Kimden", "FROM": "Kimden",

View file

@ -11,6 +11,7 @@
"CLOSE": "Закрити (Esc)", "CLOSE": "Закрити (Esc)",
"CONTACTS": "Контакти", "CONTACTS": "Контакти",
"DELETE": "Видалити", "DELETE": "Видалити",
"UNDELETE": "Undelete",
"DONE": "Зроблено", "DONE": "Зроблено",
"EMAIL": "Пошта", "EMAIL": "Пошта",
"FROM": "Від", "FROM": "Від",

View file

@ -11,6 +11,7 @@
"CLOSE": "Đóng", "CLOSE": "Đóng",
"CONTACTS": "Danh bạ", "CONTACTS": "Danh bạ",
"DELETE": "Xóa", "DELETE": "Xóa",
"UNDELETE": "Undelete",
"DONE": "Đã xong", "DONE": "Đã xong",
"EMAIL": "Email", "EMAIL": "Email",
"FROM": "Đến từ", "FROM": "Đến từ",

View file

@ -11,6 +11,7 @@
"CLOSE": "關閉", "CLOSE": "關閉",
"CONTACTS": "連絡人", "CONTACTS": "連絡人",
"DELETE": "刪除", "DELETE": "刪除",
"UNDELETE": "Undelete",
"DONE": "完成", "DONE": "完成",
"EMAIL": "電子郵件", "EMAIL": "電子郵件",
"FROM": "寄件者", "FROM": "寄件者",

View file

@ -11,6 +11,7 @@
"CLOSE": "关闭", "CLOSE": "关闭",
"CONTACTS": "联系人", "CONTACTS": "联系人",
"DELETE": "删除", "DELETE": "删除",
"UNDELETE": "Undelete",
"DONE": "完成", "DONE": "完成",
"EMAIL": "邮箱", "EMAIL": "邮箱",
"FROM": "发件人", "FROM": "发件人",

View file

@ -17,6 +17,9 @@
<i class="icon-check-mark-circle-two"></i> <i class="icon-check-mark-circle-two"></i>
</a> </a>
<a class="btn fontastic" data-bind="command: deleteCommand" data-i18n="[title]GLOBAL/DELETE">🗑</a> <a class="btn fontastic" data-bind="command: deleteCommand" data-i18n="[title]GLOBAL/DELETE">🗑</a>
<!--
<a class="btn fontastic" data-bind="command: undeleteCommand" data-i18n="[title]GLOBAL/UNDELETE" style="transform:rotate(-180deg)">🗑</a>
-->
</div> </div>
<div class="btn-group dropdown" data-bind="registerBootstrapDropdown: true"> <div class="btn-group dropdown" data-bind="registerBootstrapDropdown: true">
<a id="more-list-dropdown-id" class="btn dropdown-toggle fontastic" href="#" tabindex="-1" data-i18n="[title]GLOBAL/MORE"></a> <a id="more-list-dropdown-id" class="btn dropdown-toggle fontastic" href="#" tabindex="-1" data-i18n="[title]GLOBAL/MORE"></a>
@ -63,6 +66,9 @@
<li role="presentation" data-bind="command: deleteCommand"> <li role="presentation" data-bind="command: deleteCommand">
<a href="#" tabindex="-1" data-icon="🗑" data-i18n="GLOBAL/DELETE"></a> <a href="#" tabindex="-1" data-icon="🗑" data-i18n="GLOBAL/DELETE"></a>
</li> </li>
<li role="presentation" data-bind="command: undeleteCommand">
<a href="#" tabindex="-1" data-icon="🗑" data-i18n="GLOBAL/UNDELETE" class="rotate"></a>
</li>
<li role="presentation" data-bind="visible: allowDangerousActions, command: deleteWithoutMoveCommand"> <li role="presentation" data-bind="visible: allowDangerousActions, command: deleteWithoutMoveCommand">
<a href="#" tabindex="-1" data-icon="🗑" data-i18n="MESSAGE_LIST/BUTTON_DELETE_WITHOUT_MOVE"></a> <a href="#" tabindex="-1" data-icon="🗑" data-i18n="MESSAGE_LIST/BUTTON_DELETE_WITHOUT_MOVE"></a>
</li> </li>

View file

@ -11,7 +11,8 @@
<a class="btn" data-bind="visible: isSpamFolder, command: notSpamCommand" data-i18n="[title]GLOBAL/NOT_SPAM"> <a class="btn" data-bind="visible: isSpamFolder, command: notSpamCommand" data-i18n="[title]GLOBAL/NOT_SPAM">
<i class="icon-check-mark-circle-two"></i> <i class="icon-check-mark-circle-two"></i>
</a> </a>
<a class="btn fontastic" data-bind="command: deleteCommand" data-i18n="[title]GLOBAL/DELETE">🗑</a> <a class="btn fontastic" data-bind="visible: !canBeUndeleted(), command: deleteCommand" data-i18n="[title]GLOBAL/DELETE">🗑</a>
<a class="btn fontastic" data-bind="visible: canBeUndeleted, command: undeleteCommand" data-i18n="[title]GLOBAL/UNDELETE" style="transform:rotate(-180deg)">🗑</a>
</div> </div>
<div class="btn-group"> <div class="btn-group">
<a class="btn btn-thin buttonUp fontastic" data-bind="command: goUpCommand"></a> <a class="btn btn-thin buttonUp fontastic" data-bind="command: goUpCommand"></a>
@ -82,9 +83,12 @@
<li role="presentation"> <li role="presentation">
<a href="#" tabindex="-1" data-bind="command: copyCommand" data-icon="&#xE068;" data-i18n="GLOBAL/COPY_TO"></a> <a href="#" tabindex="-1" data-bind="command: copyCommand" data-icon="&#xE068;" data-i18n="GLOBAL/COPY_TO"></a>
</li> </li>
<li role="presentation"> <li role="presentation" data-bind="visible: !canBeUndeleted()">
<a href="#" tabindex="-1" data-bind="command: deleteCommand" data-icon="🗑" data-i18n="GLOBAL/DELETE"></a> <a href="#" tabindex="-1" data-bind="command: deleteCommand" data-icon="🗑" data-i18n="GLOBAL/DELETE"></a>
</li> </li>
<li role="presentation" data-bind="visible: canBeUndeleted">
<a href="#" tabindex="-1" data-bind="command: undeleteCommand" data-icon="🗑" data-i18n="GLOBAL/UNDELETE" class="rotate"></a>
</li>
<li role="presentation"> <li role="presentation">
<a href="#" tabindex="-1" data-bind="command: deleteWithoutMoveCommand" data-icon="🗑" data-i18n="MESSAGE_LIST/BUTTON_DELETE_WITHOUT_MOVE"></a> <a href="#" tabindex="-1" data-bind="command: deleteWithoutMoveCommand" data-icon="🗑" data-i18n="MESSAGE_LIST/BUTTON_DELETE_WITHOUT_MOVE"></a>
</li> </li>