diff --git a/dev/DAV/VCardProperty.js b/dev/DAV/VCardProperty.js index 81c251422..59c290e67 100644 --- a/dev/DAV/VCardProperty.js +++ b/dev/DAV/VCardProperty.js @@ -2,12 +2,6 @@ * Inspired by https://github.com/mcpar-land/vcfer */ -const - camelCase = str => - str.replace(/(?:^\w|[A-Z]|\b\w)/g, (word, index) => - index === 0 ? word.toLowerCase() : word.toUpperCase() - ).replace(/\s+/g, ''); - export class VCardProperty { /** @@ -68,7 +62,7 @@ export class VCardProperty { parseFromJCardProperty(jCardProp) { jCardProp = JSON.parse(JSON.stringify(jCardProp)); - this.field = camelCase(jCardProp[0]); + this.field = jCardProp[0].toLowerCase(); this.params = jCardProp[1]; this.type = jCardProp[2]; this.value = jCardProp[3]; diff --git a/dev/Model/Contact.js b/dev/Model/Contact.js index caedcc9f9..b77f3b402 100644 --- a/dev/Model/Contact.js +++ b/dev/Model/Contact.js @@ -93,7 +93,7 @@ export class ContactModel extends AbstractModel { constructor() { super(); - this.jCard = new JCard(); + this.jCard = ['vcard',[]]; this.addObservables({ focused: false, @@ -122,14 +122,13 @@ export class ContactModel extends AbstractModel { this.addComputables({ hasValidName: () => !!(this.givenName() || this.surName()), - fullName: () => (this.givenName() + ' ' + this.surName()).trim(), + fullName: () => [this.namePrefix(), this.givenName(), this.middleName(), this.surName()].join(' ').trim(), display: () => { - let a = this.jCard.getOne('fn')?.value, - b = this.fullName(), - c = this.jCard.getOne('email')?.value, - d = this.nickname(); - return a || b || c || d; + let a = this.fullName(), + b = this.email()?.[0]?.value, + c = this.nickname(); + return a || b || c; } /* fullName: { @@ -200,12 +199,12 @@ export class ContactModel extends AbstractModel { }); }); - props = jCard.getOne('x-Crypto'); + props = jCard.getOne('x-crypto'); contact.signpref(props?.params.signpref || 'Ask'); contact.encryptpref(props?.params.encryptpref || 'Ask'); // contact.encryptpref(props?.params.allowed || 'PGP/INLINE,PGP/MIME,S/MIME,S/MIMEOpaque'); - contact.jCard = jCard; + contact.jCard = json.jCard; } return contact; } @@ -246,9 +245,14 @@ export class ContactModel extends AbstractModel { this.nickname() || this.nickname(''); } + hasChanges() + { + return this.toJSON().jCard != JSON.stringify(this.jCard); + } + toJSON() { - let jCard = this.jCard; + let jCard = new JCard(this.jCard); jCard.set('n', [ this.surName(), this.givenName(), @@ -273,7 +277,7 @@ export class ContactModel extends AbstractModel { values.forEach(value => value && jCard.add(field, value)); }); - jCard.set('x-Crypto', '', { + jCard.set('x-crypto', '', { allowed: 'PGP/INLINE,PGP/MIME,S/MIME,S/MIMEOpaque', signpref: this.signpref(), encryptpref: this.encryptpref() diff --git a/dev/Styles/User/Contacts.less b/dev/Styles/User/Contacts.less index 1b979d2cb..4f46470f9 100644 --- a/dev/Styles/User/Contacts.less +++ b/dev/Styles/User/Contacts.less @@ -142,13 +142,6 @@ text-align: right; border-top: 1px solid rgba(128,128,128,0.4); - .button-save-contact { - &.dirty:enabled { - color: #51a351; - font-weight: bold; - } - } - .dropdown-menu.right-edge { top: auto; bottom: 100%; diff --git a/dev/View/Popup/Contacts.js b/dev/View/Popup/Contacts.js index 428ed3df4..11a17370e 100644 --- a/dev/View/Popup/Contacts.js +++ b/dev/View/Popup/Contacts.js @@ -15,7 +15,7 @@ import Remote from 'Remote/User/Fetch'; import { EmailModel } from 'Model/Email'; import { ContactModel } from 'Model/Contact'; -import { decorateKoCommands, showScreenPopup } from 'Knoin/Knoin'; +import { decorateKoCommands } from 'Knoin/Knoin'; import { AbstractViewPopup } from 'Knoin/AbstractViews'; import { AskPopupView } from 'View/Popup/Ask'; @@ -43,8 +43,6 @@ export class ContactsPopupView extends AbstractViewPopup { isSaving: false, - hasChanges: false, - contact: null }); @@ -61,9 +59,7 @@ export class ContactsPopupView extends AbstractViewPopup { '.e-contact-item.focused' ); - this.selector.on('ItemSelect', contact => { - this.populateViewContact(contact); - }); + this.selector.on('ItemSelect', contact => this.populateViewContact(contact)); this.selector.on('ItemGetUid', contact => contact ? contact.generateUid() : ''); @@ -95,13 +91,10 @@ export class ContactsPopupView extends AbstractViewPopup { this.saveCommand = this.saveCommand.bind(this); -// this.hasChanges(!!contact()?.toJSON().jCard); - decorateKoCommands(this, { -// close: self => !self.hasChanges(), deleteCommand: self => 0 < self.contactsCheckedOrSelected().length, newMessageCommand: self => 0 < self.contactsCheckedOrSelected().length, - saveCommand: self => !self.isSaving() && !self.hasChanges(), + saveCommand: self => !self.isSaving(), syncCommand: self => !self.contacts.syncing() && !self.contacts.importing() }); } @@ -171,22 +164,29 @@ export class ContactsPopupView extends AbstractViewPopup { } saveCommand() { - this.isSaving(true); - const contact = this.contact(); - Remote.request('ContactSave', - (iError, oData) => { - this.isSaving(false); - if (!iError && oData.Result.ResultID) { - contact.id(oData.Result.ResultID); - this.reloadContactList(); // TODO: remove when e-contact-foreach is dynamic - this.hasChanges(false); - } - }, { - Contact: contact -// Uid: contact.id(), -// jCard: contact.jCard - } - ); + this.saveContact(this.contact()); + } + + saveContact(contact) { + const data = contact.toJSON(); + if (data.jCard != JSON.stringify(contact.jCard)) { + this.isSaving(true); + Remote.request('ContactSave', + (iError, oData) => { + this.isSaving(false); + if (iError) { + alert(oData?.ErrorMessage || getNotification(iError)); + } else if (oData.Result.ResultID) { + if (contact.id()) { + contact.id(oData.Result.ResultID); + contact.jCard = JSON.parse(data.jCard); + } else { + this.reloadContactList(); // TODO: remove when e-contact-foreach is dynamic + } + } + }, data + ); + } } syncCommand() { @@ -252,8 +252,14 @@ export class ContactsPopupView extends AbstractViewPopup { * @param {?ContactModel} contact */ populateViewContact(contact) { + const oldContact = this.contact(); + if (oldContact?.hasChanges()) { + AskPopupView.showModal([ + i18n('GLOBAL/SAVE_CHANGES'), + () => this.saveContact(oldContact) + ]); + } this.contact(contact || new ContactModel); - this.hasChanges(false); } /** @@ -349,10 +355,16 @@ export class ContactsPopupView extends AbstractViewPopup { } } + tryToClose() { + (false === this.onClose()) || this.close(); + } + onClose() { - if (this.hasChanges() && AskPopupView.hidden()) { - showScreenPopup(AskPopupView, [ - i18n('POPUPS_ASK/DESC_WANT_CLOSE_THIS_WINDOW'), + const contact = this.contact(); + if (AskPopupView.hidden() && contact?.hasChanges()) { + AskPopupView.showModal([ + i18n('GLOBAL/SAVE_CHANGES'), + () => this.close() | this.saveContact(contact), () => this.close() ]); return false; diff --git a/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/Contacts.php b/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/Contacts.php index e1511fdef..992433a44 100644 --- a/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/Contacts.php +++ b/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/Contacts.php @@ -97,15 +97,14 @@ trait Contacts $bResult = false; - $oAddressBookProvider = $this->AddressBookProvider($oAccount); - if ($oAddressBookProvider && $oAddressBookProvider->IsActive()) { - $aContact = $this->GetActionParam('Contact'); - if (\is_array($aContact) && isset($aContact['Uid'], $aContact['jCard'])) { - $vCard = \Sabre\VObject\Reader::readJson($aContact['jCard']); + if ($this->HasActionParam('Uid') && $this->HasActionParam('jCard')) { + $oAddressBookProvider = $this->AddressBookProvider($oAccount); + if ($oAddressBookProvider && $oAddressBookProvider->IsActive()) { + $vCard = \Sabre\VObject\Reader::readJson($this->GetActionParam('jCard')); if ($vCard && $vCard instanceof \Sabre\VObject\Component\VCard) { $vCard->REV = \gmdate('Ymd\\THis\\Z'); $vCard->PRODID = 'SnappyMail-'.APP_VERSION; - $sUid = \trim($aContact['Uid']); + $sUid = \trim($this->GetActionParam('Uid')); $oContact = $sUid ? $oAddressBookProvider->GetContactByID($sUid) : null; if (!$oContact) { $oContact = new \RainLoop\Providers\AddressBook\Classes\Contact(); diff --git a/snappymail/v/0.0.0/app/localization/ar-SA/user.json b/snappymail/v/0.0.0/app/localization/ar-SA/user.json index a39f3c6e3..a9cd2083f 100644 --- a/snappymail/v/0.0.0/app/localization/ar-SA/user.json +++ b/snappymail/v/0.0.0/app/localization/ar-SA/user.json @@ -24,6 +24,7 @@ "PASSWORD": "كلمة السر", "REPLY_TO": "الرد-الى", "SAVE": "حفظ", + "SAVE_CHANGES": "Save changes?", "SEARCH": "لم يتم ايجاد جهة الإتصال", "SPAM": "الإبلاغ عن الرسائل غير المرغوب فيها", "SUBJECT": "الموضوع", diff --git a/snappymail/v/0.0.0/app/localization/bg-BG/user.json b/snappymail/v/0.0.0/app/localization/bg-BG/user.json index dce95e5cb..cdc08f5f8 100644 --- a/snappymail/v/0.0.0/app/localization/bg-BG/user.json +++ b/snappymail/v/0.0.0/app/localization/bg-BG/user.json @@ -24,6 +24,7 @@ "PASSWORD": "Парола", "REPLY_TO": "Отговори на", "SAVE": "Запази", + "SAVE_CHANGES": "Save changes?", "SEARCH": "Не са намерени контакти", "SPAM": "Спам", "SUBJECT": "Заглавие", diff --git a/snappymail/v/0.0.0/app/localization/cs-CZ/user.json b/snappymail/v/0.0.0/app/localization/cs-CZ/user.json index c437a20ce..ea28a07b2 100644 --- a/snappymail/v/0.0.0/app/localization/cs-CZ/user.json +++ b/snappymail/v/0.0.0/app/localization/cs-CZ/user.json @@ -24,6 +24,7 @@ "PASSWORD": "Heslo", "REPLY_TO": "Adresa odpovědi", "SAVE": "Uložit", + "SAVE_CHANGES": "Save changes?", "SEARCH": "Nebyly nalezeny žádné kontakty", "SPAM": "Je to spam", "SUBJECT": "Předmět", diff --git a/snappymail/v/0.0.0/app/localization/da-DK/user.json b/snappymail/v/0.0.0/app/localization/da-DK/user.json index 2c2e78450..81e064bf1 100644 --- a/snappymail/v/0.0.0/app/localization/da-DK/user.json +++ b/snappymail/v/0.0.0/app/localization/da-DK/user.json @@ -24,6 +24,7 @@ "PASSWORD": "Adgangskode", "REPLY_TO": "Svar til", "SAVE": "Gem", + "SAVE_CHANGES": "Save changes?", "SEARCH": "Ingen kontakter fundet", "SPAM": "Uønsket", "SUBJECT": "Emne", diff --git a/snappymail/v/0.0.0/app/localization/de-DE/user.json b/snappymail/v/0.0.0/app/localization/de-DE/user.json index 29215bcf4..e8c48abd9 100644 --- a/snappymail/v/0.0.0/app/localization/de-DE/user.json +++ b/snappymail/v/0.0.0/app/localization/de-DE/user.json @@ -24,6 +24,7 @@ "PASSWORD": "Passwort", "REPLY_TO": "Antwort an", "SAVE": "Speichern", + "SAVE_CHANGES": "Save changes?", "SEARCH": "Suchen", "SPAM": "Spam", "SUBJECT": "Betreff", diff --git a/snappymail/v/0.0.0/app/localization/el-GR/user.json b/snappymail/v/0.0.0/app/localization/el-GR/user.json index ab8b77397..8fba80255 100644 --- a/snappymail/v/0.0.0/app/localization/el-GR/user.json +++ b/snappymail/v/0.0.0/app/localization/el-GR/user.json @@ -24,6 +24,7 @@ "PASSWORD": "Κωδικός πρόσβασης", "REPLY_TO": "Απάντηση στον", "SAVE": "Αποθήκευση", + "SAVE_CHANGES": "Save changes?", "SEARCH": "Δεν βρέθηκαν επαφές", "SPAM": "Ανεπιθύμητο", "SUBJECT": "Θέμα", diff --git a/snappymail/v/0.0.0/app/localization/en-GB/user.json b/snappymail/v/0.0.0/app/localization/en-GB/user.json index f7a606e65..30ba773d0 100644 --- a/snappymail/v/0.0.0/app/localization/en-GB/user.json +++ b/snappymail/v/0.0.0/app/localization/en-GB/user.json @@ -24,6 +24,7 @@ "PASSWORD": "Password", "REPLY_TO": "Reply-To", "SAVE": "Save", + "SAVE_CHANGES": "Save changes?", "SEARCH": "Search", "SPAM": "Spam", "SUBJECT": "Subject", diff --git a/snappymail/v/0.0.0/app/localization/en/user.json b/snappymail/v/0.0.0/app/localization/en/user.json index e76c46f1d..9d41cc2de 100644 --- a/snappymail/v/0.0.0/app/localization/en/user.json +++ b/snappymail/v/0.0.0/app/localization/en/user.json @@ -24,6 +24,7 @@ "PASSWORD": "Password", "REPLY_TO": "Reply-To", "SAVE": "Save", + "SAVE_CHANGES": "Save changes?", "SEARCH": "Search", "SPAM": "Spam", "SUBJECT": "Subject", diff --git a/snappymail/v/0.0.0/app/localization/es-ES/user.json b/snappymail/v/0.0.0/app/localization/es-ES/user.json index 1a5a6ef01..1ae0ef08b 100644 --- a/snappymail/v/0.0.0/app/localization/es-ES/user.json +++ b/snappymail/v/0.0.0/app/localization/es-ES/user.json @@ -24,6 +24,7 @@ "PASSWORD": "Contraseña", "REPLY_TO": "Responder", "SAVE": "Guardar", + "SAVE_CHANGES": "Save changes?", "SEARCH": "Buscar", "SPAM": "Es correo deseado", "SUBJECT": "Asunto", diff --git a/snappymail/v/0.0.0/app/localization/et-EE/user.json b/snappymail/v/0.0.0/app/localization/et-EE/user.json index 57139a81e..6bfb68a82 100644 --- a/snappymail/v/0.0.0/app/localization/et-EE/user.json +++ b/snappymail/v/0.0.0/app/localization/et-EE/user.json @@ -24,6 +24,7 @@ "PASSWORD": "Salasõna", "REPLY_TO": "Vastuse saaja", "SAVE": "Salvesta", + "SAVE_CHANGES": "Save changes?", "SEARCH": "Kontakte ei leitud", "SPAM": "Märgi rämpspostiks", "SUBJECT": "Pealkiri", diff --git a/snappymail/v/0.0.0/app/localization/fa-IR/user.json b/snappymail/v/0.0.0/app/localization/fa-IR/user.json index d33dc91c9..55c92b44d 100644 --- a/snappymail/v/0.0.0/app/localization/fa-IR/user.json +++ b/snappymail/v/0.0.0/app/localization/fa-IR/user.json @@ -24,6 +24,7 @@ "PASSWORD": "گذرواژه", "REPLY_TO": "پاسخ به", "SAVE": "ذخیره کن", + "SAVE_CHANGES": "Save changes?", "SEARCH": "هیچ تماسی پیدا نشد", "SPAM": "هرزنامه", "SUBJECT": "موضوع", diff --git a/snappymail/v/0.0.0/app/localization/fi-FI/user.json b/snappymail/v/0.0.0/app/localization/fi-FI/user.json index 5c700d3ed..ea33e2187 100644 --- a/snappymail/v/0.0.0/app/localization/fi-FI/user.json +++ b/snappymail/v/0.0.0/app/localization/fi-FI/user.json @@ -24,6 +24,7 @@ "PASSWORD": "Salasana", "REPLY_TO": "Vastaa", "SAVE": "Tallenna", + "SAVE_CHANGES": "Save changes?", "SEARCH": "Yhtään yhteystietoa ei löytynyt", "SPAM": "Merkitse roskapostiksi", "SUBJECT": "Aihe", diff --git a/snappymail/v/0.0.0/app/localization/fr-FR/user.json b/snappymail/v/0.0.0/app/localization/fr-FR/user.json index 008467854..4f34db5de 100644 --- a/snappymail/v/0.0.0/app/localization/fr-FR/user.json +++ b/snappymail/v/0.0.0/app/localization/fr-FR/user.json @@ -24,6 +24,7 @@ "PASSWORD": "Mot de passe", "REPLY_TO": "Répondre à", "SAVE": "Enregistrer", + "SAVE_CHANGES": "Save changes?", "SEARCH": "Rechercher", "SPAM": "Indésirable", "SUBJECT": "Sujet", diff --git a/snappymail/v/0.0.0/app/localization/hu-HU/user.json b/snappymail/v/0.0.0/app/localization/hu-HU/user.json index c55bf17a4..a90483f13 100644 --- a/snappymail/v/0.0.0/app/localization/hu-HU/user.json +++ b/snappymail/v/0.0.0/app/localization/hu-HU/user.json @@ -24,6 +24,7 @@ "PASSWORD": "Jelszó", "REPLY_TO": "Válaszcím", "SAVE": "Mentés", + "SAVE_CHANGES": "Save changes?", "SEARCH": "Nem találtam névjegyeket", "SPAM": "Levélszemét", "SUBJECT": "Tárgy", diff --git a/snappymail/v/0.0.0/app/localization/id-ID/user.json b/snappymail/v/0.0.0/app/localization/id-ID/user.json index 7868d3a28..534fdbef3 100644 --- a/snappymail/v/0.0.0/app/localization/id-ID/user.json +++ b/snappymail/v/0.0.0/app/localization/id-ID/user.json @@ -24,6 +24,7 @@ "PASSWORD": "Sandi", "REPLY_TO": "Balas-Ke", "SAVE": "Simpan", + "SAVE_CHANGES": "Save changes?", "SEARCH": "Tidak ditemukan kontak", "SPAM": "Spam", "SUBJECT": "Judul", diff --git a/snappymail/v/0.0.0/app/localization/is-IS/user.json b/snappymail/v/0.0.0/app/localization/is-IS/user.json index ec2dcab17..ed5256abc 100644 --- a/snappymail/v/0.0.0/app/localization/is-IS/user.json +++ b/snappymail/v/0.0.0/app/localization/is-IS/user.json @@ -24,6 +24,7 @@ "PASSWORD": "Lykilorð", "REPLY_TO": "Svara-til", "SAVE": "Vista", + "SAVE_CHANGES": "Save changes?", "SEARCH": "Engir tengiliðir fundust", "SPAM": "Ruslpóstur", "SUBJECT": "Viðfangsefni", diff --git a/snappymail/v/0.0.0/app/localization/it-IT/user.json b/snappymail/v/0.0.0/app/localization/it-IT/user.json index 8152804ee..5d3816cb4 100644 --- a/snappymail/v/0.0.0/app/localization/it-IT/user.json +++ b/snappymail/v/0.0.0/app/localization/it-IT/user.json @@ -24,6 +24,7 @@ "PASSWORD": "Parola d'ordine", "REPLY_TO": "Rispondi a", "SAVE": "Salva", + "SAVE_CHANGES": "Save changes?", "SEARCH": "Cerca", "SPAM": "Segnala come spam", "SUBJECT": "Oggetto", diff --git a/snappymail/v/0.0.0/app/localization/ja-JP/user.json b/snappymail/v/0.0.0/app/localization/ja-JP/user.json index 14c7aa1e3..782e5aa1c 100644 --- a/snappymail/v/0.0.0/app/localization/ja-JP/user.json +++ b/snappymail/v/0.0.0/app/localization/ja-JP/user.json @@ -24,6 +24,7 @@ "PASSWORD": "パスワード", "REPLY_TO": "Reply-To", "SAVE": "保存", + "SAVE_CHANGES": "Save changes?", "SEARCH": "検索", "SPAM": "迷惑メール", "SUBJECT": "件名", diff --git a/snappymail/v/0.0.0/app/localization/ko-KR/user.json b/snappymail/v/0.0.0/app/localization/ko-KR/user.json index e1ef33aca..03238171a 100644 --- a/snappymail/v/0.0.0/app/localization/ko-KR/user.json +++ b/snappymail/v/0.0.0/app/localization/ko-KR/user.json @@ -24,6 +24,7 @@ "PASSWORD": "비밀번호", "REPLY_TO": "회신 주소", "SAVE": "저장", + "SAVE_CHANGES": "Save changes?", "SEARCH": "연락처를 찾지 못했습니다.", "SPAM": "스팸", "SUBJECT": "제목", diff --git a/snappymail/v/0.0.0/app/localization/lt-LT/user.json b/snappymail/v/0.0.0/app/localization/lt-LT/user.json index ffc57d518..29848ae35 100644 --- a/snappymail/v/0.0.0/app/localization/lt-LT/user.json +++ b/snappymail/v/0.0.0/app/localization/lt-LT/user.json @@ -24,6 +24,7 @@ "PASSWORD": "Slaptažodis", "REPLY_TO": "Kam atsakyti", "SAVE": "Išsaugoti", + "SAVE_CHANGES": "Save changes?", "SEARCH": "Kontaktų nerasta", "SPAM": "Žymėti kaip šlamštas", "SUBJECT": "Tema", diff --git a/snappymail/v/0.0.0/app/localization/lv-LV/user.json b/snappymail/v/0.0.0/app/localization/lv-LV/user.json index a0dfb5247..5c4cdc759 100644 --- a/snappymail/v/0.0.0/app/localization/lv-LV/user.json +++ b/snappymail/v/0.0.0/app/localization/lv-LV/user.json @@ -24,6 +24,7 @@ "PASSWORD": "Parole", "REPLY_TO": "Reply-To", "SAVE": "Saglabāt", + "SAVE_CHANGES": "Save changes?", "SEARCH": "Kontakti nav atrasti", "SPAM": "Spams", "SUBJECT": "Tēma", diff --git a/snappymail/v/0.0.0/app/localization/nb-NO/user.json b/snappymail/v/0.0.0/app/localization/nb-NO/user.json index 75aa418ec..5efedd555 100644 --- a/snappymail/v/0.0.0/app/localization/nb-NO/user.json +++ b/snappymail/v/0.0.0/app/localization/nb-NO/user.json @@ -24,6 +24,7 @@ "PASSWORD": "Passord", "REPLY_TO": "Svar til", "SAVE": "Lagre", + "SAVE_CHANGES": "Save changes?", "SEARCH": "Fant ingen kontakter", "SPAM": "Søppelpost", "SUBJECT": "Emne", diff --git a/snappymail/v/0.0.0/app/localization/nl-NL/user.json b/snappymail/v/0.0.0/app/localization/nl-NL/user.json index 4af60c681..5e5decae3 100644 --- a/snappymail/v/0.0.0/app/localization/nl-NL/user.json +++ b/snappymail/v/0.0.0/app/localization/nl-NL/user.json @@ -24,6 +24,7 @@ "PASSWORD": "Wachtwoord", "REPLY_TO": "Antwoordadres", "SAVE": "Opslaan", + "SAVE_CHANGES": "Save changes?", "SEARCH": "Zoeken", "SPAM": "Ongewenste e-mail", "SUBJECT": "Onderwerp", diff --git a/snappymail/v/0.0.0/app/localization/pl-PL/user.json b/snappymail/v/0.0.0/app/localization/pl-PL/user.json index 36ddbc94e..6ca7cd129 100644 --- a/snappymail/v/0.0.0/app/localization/pl-PL/user.json +++ b/snappymail/v/0.0.0/app/localization/pl-PL/user.json @@ -24,6 +24,7 @@ "PASSWORD": "Hasło", "REPLY_TO": "Odpisz do", "SAVE": "Zapisz", + "SAVE_CHANGES": "Save changes?", "SEARCH": "Nie znaleziono żadnych kontaktów", "SPAM": "Oznacz jako SPAM", "SUBJECT": "Temat", diff --git a/snappymail/v/0.0.0/app/localization/pt-BR/user.json b/snappymail/v/0.0.0/app/localization/pt-BR/user.json index 1d306ae6e..a3c4a8b12 100644 --- a/snappymail/v/0.0.0/app/localization/pt-BR/user.json +++ b/snappymail/v/0.0.0/app/localization/pt-BR/user.json @@ -24,6 +24,7 @@ "PASSWORD": "Senha", "REPLY_TO": "Responder para", "SAVE": "Salvar", + "SAVE_CHANGES": "Save changes?", "SEARCH": "Nenhum contato encontrado", "SPAM": "Lixo Eletrônico", "SUBJECT": "Assunto", diff --git a/snappymail/v/0.0.0/app/localization/pt-PT/user.json b/snappymail/v/0.0.0/app/localization/pt-PT/user.json index aebf7987d..8d9f546da 100644 --- a/snappymail/v/0.0.0/app/localization/pt-PT/user.json +++ b/snappymail/v/0.0.0/app/localization/pt-PT/user.json @@ -24,6 +24,7 @@ "PASSWORD": "Palavra-passe", "REPLY_TO": "Resp.-Para", "SAVE": "Guardar", + "SAVE_CHANGES": "Save changes?", "SEARCH": "Pesquisar", "SPAM": "Spam", "SUBJECT": "Assunto", diff --git a/snappymail/v/0.0.0/app/localization/pt/user.json b/snappymail/v/0.0.0/app/localization/pt/user.json index aebf7987d..8d9f546da 100644 --- a/snappymail/v/0.0.0/app/localization/pt/user.json +++ b/snappymail/v/0.0.0/app/localization/pt/user.json @@ -24,6 +24,7 @@ "PASSWORD": "Palavra-passe", "REPLY_TO": "Resp.-Para", "SAVE": "Guardar", + "SAVE_CHANGES": "Save changes?", "SEARCH": "Pesquisar", "SPAM": "Spam", "SUBJECT": "Assunto", diff --git a/snappymail/v/0.0.0/app/localization/ro-RO/user.json b/snappymail/v/0.0.0/app/localization/ro-RO/user.json index 04d925620..3ebd45f43 100644 --- a/snappymail/v/0.0.0/app/localization/ro-RO/user.json +++ b/snappymail/v/0.0.0/app/localization/ro-RO/user.json @@ -24,6 +24,7 @@ "PASSWORD": "Parolă", "REPLY_TO": "Reply-To", "SAVE": "Salvează", + "SAVE_CHANGES": "Save changes?", "SEARCH": "Nu am găsit nimic.", "SPAM": "SPAM", "SUBJECT": "Subiect", diff --git a/snappymail/v/0.0.0/app/localization/ru-RU/user.json b/snappymail/v/0.0.0/app/localization/ru-RU/user.json index 721938d6a..8d0027436 100644 --- a/snappymail/v/0.0.0/app/localization/ru-RU/user.json +++ b/snappymail/v/0.0.0/app/localization/ru-RU/user.json @@ -24,6 +24,7 @@ "PASSWORD": "Пароль", "REPLY_TO": "Ответить-на", "SAVE": "Сохранить", + "SAVE_CHANGES": "Save changes?", "SEARCH": "Контакты не найдены", "SPAM": "В спам", "SUBJECT": "Тема", diff --git a/snappymail/v/0.0.0/app/localization/sk-SK/user.json b/snappymail/v/0.0.0/app/localization/sk-SK/user.json index 0afbbbc70..6db0d67cc 100644 --- a/snappymail/v/0.0.0/app/localization/sk-SK/user.json +++ b/snappymail/v/0.0.0/app/localization/sk-SK/user.json @@ -24,6 +24,7 @@ "PASSWORD": "Heslo", "REPLY_TO": "Adresa pre odpoveď", "SAVE": "Uložiť", + "SAVE_CHANGES": "Save changes?", "SEARCH": "Nenašli sa žiadne kontakty", "SPAM": "Spam", "SUBJECT": "Predmet", diff --git a/snappymail/v/0.0.0/app/localization/sl-SI/user.json b/snappymail/v/0.0.0/app/localization/sl-SI/user.json index 9e217b775..bef25a1b7 100644 --- a/snappymail/v/0.0.0/app/localization/sl-SI/user.json +++ b/snappymail/v/0.0.0/app/localization/sl-SI/user.json @@ -24,6 +24,7 @@ "PASSWORD": "Geslo", "REPLY_TO": "Odgovor na", "SAVE": "Shrani", + "SAVE_CHANGES": "Save changes?", "SEARCH": "Ni ujemajočih stikov", "SPAM": "Vsiljena pošta", "SUBJECT": "Zadeva", diff --git a/snappymail/v/0.0.0/app/localization/sv-SE/user.json b/snappymail/v/0.0.0/app/localization/sv-SE/user.json index f72d0de92..4859d28b1 100644 --- a/snappymail/v/0.0.0/app/localization/sv-SE/user.json +++ b/snappymail/v/0.0.0/app/localization/sv-SE/user.json @@ -24,6 +24,7 @@ "PASSWORD": "Lösenord", "REPLY_TO": "Svara till", "SAVE": "Spara", + "SAVE_CHANGES": "Save changes?", "SEARCH": "Inga kontakter funna", "SPAM": "Spam", "SUBJECT": "Ämne", diff --git a/snappymail/v/0.0.0/app/localization/tr-TR/user.json b/snappymail/v/0.0.0/app/localization/tr-TR/user.json index 8fd464baf..7a0efbef2 100644 --- a/snappymail/v/0.0.0/app/localization/tr-TR/user.json +++ b/snappymail/v/0.0.0/app/localization/tr-TR/user.json @@ -24,6 +24,7 @@ "PASSWORD": "Şifre", "REPLY_TO": "Reply-To", "SAVE": "Kaydet", + "SAVE_CHANGES": "Save changes?", "SEARCH": "Kişi bulunamadı", "SPAM": "Spam", "SUBJECT": "Konu", diff --git a/snappymail/v/0.0.0/app/localization/uk-UA/user.json b/snappymail/v/0.0.0/app/localization/uk-UA/user.json index 6206e23a0..439f493d8 100644 --- a/snappymail/v/0.0.0/app/localization/uk-UA/user.json +++ b/snappymail/v/0.0.0/app/localization/uk-UA/user.json @@ -24,6 +24,7 @@ "PASSWORD": "Пароль", "REPLY_TO": "Reply-To", "SAVE": "Зберегти", + "SAVE_CHANGES": "Save changes?", "SEARCH": "Контакти не знайдено", "SPAM": "В спам", "SUBJECT": "Тема", diff --git a/snappymail/v/0.0.0/app/localization/vi-VN/user.json b/snappymail/v/0.0.0/app/localization/vi-VN/user.json index 7b284e46f..13cd55b05 100644 --- a/snappymail/v/0.0.0/app/localization/vi-VN/user.json +++ b/snappymail/v/0.0.0/app/localization/vi-VN/user.json @@ -24,6 +24,7 @@ "PASSWORD": "Mật khẩu", "REPLY_TO": "Nhận thư phản hồi về", "SAVE": "Lưu", + "SAVE_CHANGES": "Save changes?", "SEARCH": "Tìm kiếm", "SPAM": "Thư rác", "SUBJECT": "Tiêu đề", diff --git a/snappymail/v/0.0.0/app/localization/zh-CN/user.json b/snappymail/v/0.0.0/app/localization/zh-CN/user.json index 8f0eaf08e..71a19fea1 100644 --- a/snappymail/v/0.0.0/app/localization/zh-CN/user.json +++ b/snappymail/v/0.0.0/app/localization/zh-CN/user.json @@ -24,6 +24,7 @@ "PASSWORD": "密码", "REPLY_TO": "回复", "SAVE": "保存", + "SAVE_CHANGES": "Save changes?", "SEARCH": "搜索", "SPAM": "这是垃圾邮件", "SUBJECT": "主题", diff --git a/snappymail/v/0.0.0/app/localization/zh-TW/user.json b/snappymail/v/0.0.0/app/localization/zh-TW/user.json index a4a01ecb7..ee3a515cb 100644 --- a/snappymail/v/0.0.0/app/localization/zh-TW/user.json +++ b/snappymail/v/0.0.0/app/localization/zh-TW/user.json @@ -24,6 +24,7 @@ "PASSWORD": "密碼", "REPLY_TO": "Reply-To", "SAVE": "保存", + "SAVE_CHANGES": "Save changes?", "SEARCH": "沒找到連絡人", "SPAM": "垃圾郵件", "SUBJECT": "主題", diff --git a/snappymail/v/0.0.0/app/templates/Views/User/PopupsContacts.html b/snappymail/v/0.0.0/app/templates/Views/User/PopupsContacts.html index 807c4d91d..adb89ebd5 100644 --- a/snappymail/v/0.0.0/app/templates/Views/User/PopupsContacts.html +++ b/snappymail/v/0.0.0/app/templates/Views/User/PopupsContacts.html @@ -1,6 +1,6 @@
- × + ×
@@ -228,7 +228,7 @@
-