diff --git a/www/common/common-interface.js b/www/common/common-interface.js index fca655360..612e03fef 100644 --- a/www/common/common-interface.js +++ b/www/common/common-interface.js @@ -602,13 +602,12 @@ define([ UI.confirmButton = function (originalBtn, config, _cb) { config = config || {}; var cb = Util.once(Util.mkAsync(_cb)); - var classes = 'btn ' + (config.classes || 'btn-primary'); var button = h('button', { "class": classes, title: config.title || '' - }, Messages.areYouSure || "Are you sure?"); // XXX + }, Messages.areYouSure); var $button = $(button); var div = h('div', { diff --git a/www/common/common-ui-elements.js b/www/common/common-ui-elements.js index fca273e4f..fdc29938f 100644 --- a/www/common/common-ui-elements.js +++ b/www/common/common-ui-elements.js @@ -797,8 +797,6 @@ define([ return void cb(void 0, $d); } - Messages.historyTrim_historySize = 'History: {0}'; // XXX - Messages.historyTrim_contentsSize = 'Contents: {0}'; // XXX var p = Math.round((historyBytes / bytes) * 100); var historyPrettySize = UIElements.prettySize(historyBytes); @@ -821,7 +819,7 @@ define([ h('span.cp-app-prop-content', Messages._getKey('historyTrim_contentsSize', [contentsPrettySize])) ]), ]), - button = h('button.btn.btn-danger-alt.no-margin', Messages.trimHistory_button || 'test'), // XXX + button = h('button.btn.btn-danger-alt.no-margin', Messages.trimHistory_button), spinner.spinner ]); $d.append(size); @@ -842,7 +840,7 @@ define([ }, function (obj) { spinner.hide(); if (obj && obj.error) { - $(size).append(h('div.alert.alert-danger', Messages.trimHistory_error || 'error')); // XXX + $(size).append(h('div.alert.alert-danger', Messages.trimHistory_error)); return; } $(size).remove(); diff --git a/www/common/outer/async-store.js b/www/common/outer/async-store.js index 56415dab6..ad7a40f33 100644 --- a/www/common/outer/async-store.js +++ b/www/common/outer/async-store.js @@ -2335,7 +2335,6 @@ define([ initAnonRpc(null, null, waitFor()); initRpc(null, null, waitFor()); }).nThen(function (waitFor) { - loadMailbox(waitFor); Migrate(proxy, waitFor(), function (version, progress) { postMessage(clientId, 'LOADING_DRIVE', { state: (2 + (version / 10)), @@ -2355,6 +2354,7 @@ define([ loadUniversal(Profile, 'profile', waitFor); loadUniversal(Team, 'team', waitFor); loadUniversal(History, 'history', waitFor); + loadMailbox(waitFor); // XXX make sure we don't have new issues with mailboxes being loaded later cleanFriendRequests(); }).nThen(function () { var requestLogin = function () { diff --git a/www/common/outer/mailbox-handlers.js b/www/common/outer/mailbox-handlers.js index d66ff516e..fec467fc5 100644 --- a/www/common/outer/mailbox-handlers.js +++ b/www/common/outer/mailbox-handlers.js @@ -494,10 +494,11 @@ define([ try { var module = ctx.store.modules['team']; // changeMyRights returns true if we can't change our rights - module.changeMyRights(teamId, content.state, content.teamData); + module.changeMyRights(teamId, content.state, content.teamData, function (done) { + if (!done) { console.error("Can't update team rights"); } + cb(true); + }); } catch (e) { console.error(e); } - - cb(true); }; handlers['OWNED_PAD_REMOVED'] = function (ctx, box, data, cb) { diff --git a/www/common/outer/team.js b/www/common/outer/team.js index 24952f5c9..a2dbf7c05 100644 --- a/www/common/outer/team.js +++ b/www/common/outer/team.js @@ -1067,14 +1067,25 @@ define([ ctx.emit('ROSTER_CHANGE_RIGHTS', teamId, team.clients); }; - var changeMyRights = function (ctx, teamId, state, data) { - if (!teamId) { return true; } + var changeMyRights = function (ctx, teamId, state, data, cb) { + if (!teamId) { return void cb(false); } var teamData = Util.find(ctx, ['store', 'proxy', 'teams', teamId]); - if (!teamData) { return true; } + if (!teamData) { return void cb(false); } + var onReady = ctx.onReadyHandlers[teamId]; var team = ctx.teams[teamId]; - if (!team) { return true; } - if (teamData.channel !== data.channel || teamData.password !== data.password) { return true; } + if (!team && Array.isArray(onReady)) { + onReady.push({ + cb: function () { + changeMyRights(ctx, teamId, state, data, cb); + } + }); + return; + } + + if (!team) { return void cb(false); } + + if (teamData.channel !== data.channel || teamData.password !== data.password) { return void cb(false); } if (state) { teamData.hash = data.hash; @@ -1091,6 +1102,7 @@ define([ } updateMyRights(ctx, teamId, data.hash); + cb(true); }; var changeEditRights = function (ctx, teamId, user, state, cb) { if (!teamId) { return void cb({error: 'EINVAL'}); } @@ -1632,8 +1644,8 @@ define([ }); }; - team.changeMyRights = function (id, edit, teamData) { - changeMyRights(ctx, id, edit, teamData); + team.changeMyRights = function (id, edit, teamData, cb) { + changeMyRights(ctx, id, edit, teamData, cb); }; team.updateMyData = function (data) { Object.keys(ctx.teams).forEach(function (id) { diff --git a/www/common/translations/messages.fr.json b/www/common/translations/messages.fr.json index 5756527c0..7f09b4971 100644 --- a/www/common/translations/messages.fr.json +++ b/www/common/translations/messages.fr.json @@ -1297,5 +1297,17 @@ "safeLinks_error": "Le lien utilisé ne permet pas d'ouvrir ce document", "settings_safeLinksCheckbox": "Activer les liens sécurisés", "settings_safeLinksTitle": "Liens Sécurisés", - "settings_cat_security": "Confidentialité" + "settings_cat_security": "Confidentialité", + "settings_trimHistoryHint": "Économisez de l'espace de stockage en supprimant l'historique de votre disque et de vos notifications. Cela n'affectera pas l'historique de vos documents. Vous pouvez supprimer l'historique des pads dans leur dialogue de propriétés.", + "settings_trimHistoryTitle": "Effacer l'Historique", + "trimHistory_noHistory": "Il n'y a pas d'historique à supprimer", + "trimHistory_currentSize": "Taille de l'historique : {0}", + "trimHistory_needMigration": "Merci de mettre votre CryptDrive à jour pour activer cette fonctionalité.", + "trimHistory_success": "L'historique a été effacé", + "trimHistory_error": "Erreur lors de la suppression de l'historique", + "trimHistory_getSizeError": "Erreur lors du calcul de la taille de l'historique de votre drive", + "trimHistory_button": "Effacer l'historique", + "historyTrim_contentsSize": "Contenu : {0}", + "historyTrim_historySize": "Historique : {0}", + "areYouSure": "Êtes-vous sûr ?" } diff --git a/www/common/translations/messages.it.json b/www/common/translations/messages.it.json index 89b596fcc..39c71ef37 100644 --- a/www/common/translations/messages.it.json +++ b/www/common/translations/messages.it.json @@ -179,7 +179,7 @@ "notifyLeft": "{0} ha abbandonato la sessione collaborativa", "ok": "OK", "okButton": "OK (Enter)", - "cancel": "Cancella", + "cancel": "Annulla", "cancelButton": "Cancella (Esc)", "show_help_button": "Mostra l'aiuto", "hide_help_button": "Nascondi l'aiuto", @@ -298,7 +298,7 @@ "contacts_confirmRemoveHistory": "Sei sicuro di voler rimuovere permanentemente la cronologia della chat? I dati non possono essere recuperati", "contacts_removeHistoryServerError": "C'è stato un errore nella cancellazione della cronologia della chat. Prova di nuovo più tardi", "contacts_fetchHistory": "Recupera messaggi precedenti", - "contacts_friends": "Amici", + "contacts_friends": "Contatti", "contacts_rooms": "Stanze", "contacts_leaveRoom": "Esci da questa stanza", "contacts_online": "Un altro utente di questa stanza è online", @@ -423,7 +423,7 @@ "register_whyRegister": "Perché registrarsi?", "register_header": "Benvenuto su CryptPad", "fm_alert_anonymous": "", - "register_writtenPassword": "Ho annotato il mio username e la mia password, procedi", + "register_writtenPassword": "Ho annotato il mio nome utente e la mia password, procedi", "register_cancel": "Torna indietro", "register_warning": "Zero Knowledge significa che non possiamo recuperare i tuoi dati se perdi la tua password.", "register_alreadyRegistered": "Questo utente esiste già, vuoi effettuare il log in?", @@ -461,7 +461,7 @@ "settings_resetButton": "Rimuovi", "settings_reset": "Rimuovi tutti i file e le cartelle dal tuo CryptDrive", "settings_resetPrompt": "", - "settings_resetDone": "", + "settings_resetDone": "Il tuo drive è vuoto adesso!", "settings_resetError": "", "settings_resetTipsAction": "", "settings_resetTips": "", @@ -516,5 +516,26 @@ "register_emailWarning1": "Puoi farlo se vuoi, ma non verrà inviato ai nostri server.", "register_emailWarning2": "Non sarai in grado di resettare la tua password usando la tua email, a differenza di come puoi fare con molti altri servizi.", "register_emailWarning3": "Se hai capito, ma intendi comunque usare la tua email come nome utente, clicca OK.", - "oo_sheetMigration_anonymousEditor": "Le modifiche da parte di utenti anonimi a questo foglio di calcolo sono disabilitate finchè un utente registrato non lo aggiorna all'ultima versione." + "oo_sheetMigration_anonymousEditor": "Le modifiche da parte di utenti anonimi a questo foglio di calcolo sono disabilitate finchè un utente registrato non lo aggiorna all'ultima versione.", + "faq": { + "usability": { + "devices": { + "a": "nome utente" + }, + "forget": { + "a": "nome utente" + } + }, + "security": { + "crypto": { + "a": "nome utente" + } + }, + "privacy": { + "register": { + "a": "nome utente" + } + } + }, + "whatis_zeroknowledge_p2": "Quando ti registri e accedi, il tuo nome utente e la tua password vengono computati in una chiave segreta utilizzando la funzione di derivazione scrypt. Ne questa chiave, ne il tuo nome utente o la tua password vengono inviati al server. Infatti sono usati soltanto dal lato client per decriptare il contenuto del tuo CryptDrive, che contiene le chiavi per tutti i pad a cui hai accesso." } diff --git a/www/common/translations/messages.json b/www/common/translations/messages.json index c3ac1e275..fbf973d5c 100644 --- a/www/common/translations/messages.json +++ b/www/common/translations/messages.json @@ -1297,5 +1297,17 @@ "safeLinks_error": "This link does not give you access to the document", "dontShowAgain": "Don't show again", "profile_login": "You need to log in to add this user to your contacts", - "settings_safeLinksHint": "CryptPad includes the keys to decrypt your pads in their links. Anyone with access to your browsing history can potentially read your data. This includes intrusive browser extensions and browsers that sync your history across devices. Enabling \"safe links\" prevents the keys from entering your browsing history or being displayed in your address bar whenever possible. We strongly recommend that you enable this feature and use the {0} Share menu." + "settings_safeLinksHint": "CryptPad includes the keys to decrypt your pads in their links. Anyone with access to your browsing history can potentially read your data. This includes intrusive browser extensions and browsers that sync your history across devices. Enabling \"safe links\" prevents the keys from entering your browsing history or being displayed in your address bar whenever possible. We strongly recommend that you enable this feature and use the {0} Share menu.", + "areYouSure": "Are you sure?", + "historyTrim_historySize": "History: {0}", + "historyTrim_contentsSize": "Contents: {0}", + "trimHistory_button": "Delete History", + "trimHistory_getSizeError": "Error while calculating the size of your drive's history", + "trimHistory_error": "Error while deleting history", + "trimHistory_success": "History has been deleted", + "trimHistory_needMigration": "Please update your CryptDrive to enable this feature.", + "trimHistory_currentSize": "Current history size: {0}", + "trimHistory_noHistory": "No history can be deleted", + "settings_trimHistoryTitle": "Delete History", + "settings_trimHistoryHint": "Save storage space by deleting the history of your drive and notifications. This will not affect the history of your pads. You can delete the history of pads in their properties dialog." } diff --git a/www/settings/inner.js b/www/settings/inner.js index bf47aefcb..a5b50fa2e 100644 --- a/www/settings/inner.js +++ b/www/settings/inner.js @@ -1215,7 +1215,7 @@ define([ var spinner = UI.makeSpinner(); var button = h('button.btn.btn-danger-alt', { disabled: 'disabled' - }, Messages.trimHistory_button || 'delete history... xxx'); // XXX + }, Messages.trimHistory_button); var currentSize = h('p', $(spinner.spinner).clone()[0]); var content = h('div#cp-settings-trim-container', [ currentSize, @@ -1226,7 +1226,7 @@ define([ if (!privateData.isDriveOwned) { var href = privateData.origin + privateData.pathname + '#' + 'account'; - $(currentSize).html(Messages.trimHistory_needMigration || 'Need migration Click'); // XXX + $(currentSize).html(Messages.trimHistory_needMigration); $(currentSize).find('a').prop('href', href).click(function (e) { e.preventDefault(); $('.cp-sidebarlayout-category[data-category="account"]').click(); @@ -1234,7 +1234,6 @@ define([ return void cb(content); } - Messages.trimHistory_currentSize = 'Size XXX: {0}'; // XXX var $button = $(button); var size; @@ -1246,7 +1245,7 @@ define([ }, waitFor(function (obj) { if (obj && obj.error) { waitFor.abort(); - var error = h('div.alert.alert-danger', Messages.trimHistory_error || 'error'); // XXX + var error = h('div.alert.alert-danger', Messages.trimHistory_getSizeError); $(content).empty().append(error); return; } @@ -1255,12 +1254,11 @@ define([ })); }).nThen(function () { if (!size || size < 1024) { - $(currentSize).html(Messages.trimHistory_noHistory || 'no history...'); // XXX + $(currentSize).html(Messages.trimHistory_noHistory); return; } $(currentSize).html(Messages._getKey('trimHistory_currentSize', [UIElements.prettySize(size)])); $button.click(function () { - //UI.confirm(Messages.trimHistory_confirm, function (yes) { UI.confirmButton(button, { classes: 'btn-danger' }, function (yes) { @@ -1272,7 +1270,7 @@ define([ channels: channels }, function (obj) { if (obj && obj.error) { - var error = h('div.alert.alert-danger', Messages.trimHistory_error || 'error'); // XXX + var error = h('div.alert.alert-danger', Messages.trimHistory_error); $(content).empty().append(error); return; } @@ -1288,9 +1286,6 @@ define([ }; makeBlock('trim-history', function (cb, $div) { if (!common.isLoggedIn()) { return; } - // XXX settings_trimHistoryTitle, settings_trimHistoryHint, trimHistory_button, trimHistory_error - // XXX trimHistory_success, trimHistory_confirm, trimHistory_noHistory - // XXX trimHistory_needMigration (clickable tag (no attribute) to go to the "account" part of settings) redrawTrimHistory(cb, $div); }, true);