diff --git a/CHANGELOG.md b/CHANGELOG.md index c93d79324..924a970f6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,58 @@ +# Hedgehog release (v2.7.0) + +## Goals + +This release overlapped with the publication and presentation of a paper written about CryptPad's architecture. +As such, we didn't plan for any very ambitious new features, and instead focused on bug fixes and some new workflows. + +## Update notes + +This is a fairly simple release. Just download the latest commits and update your cache-busting string. + +### Features + +* In order to address some privacy concerns, we've changed CryptPad such that pads are not immediately stored in your CryptDrive as soon as you open them. Instead, users are presented with a prompt in the bottom-right corner which asks them whether they'd like to store it manually. Alternatively, you can use your settings page to revert to the old automatic behaviour, or choose not to store, and to never be asked. +* It was brought to our attention that it was possible to upload base64-encoded images in the rich text editor. These images had a negative performance impact on such pads. From now on, if these images are detected in a pad, users are prompted to run a migration to convert them to uploaded (and encrypted) files. +* We've added a progress bar which is displayed while you are loading a pad, as we found that it was not very clear whether large pads were loading, or if they had become unresponsive due to a bug. +* We've added an option to allow users to right-click uploaded files wherever they appear, and to store that file in their CryptDrive. +* We've improved the dialog which is used to modify the properties of encrypted media embedded within rich text pads. + +### Bug fixes + +* Due to a particularly disastrous bug in Chrome 68 which was unfortunately beyond our power to fix, we've added a warning for anyone affected by that bug to let them know the cause. +* We've increased the module loading timeout value used by requirejs in our sharedWorker implementation to match the value used by the rest of CryptPad. + +# Gibbon release (v2.6.0) + +## Goals + +For this release we focused on deploying two very large changes in CryptPad. +For one, we'd worked on a large refactoring of the system we use to compile CSS from LESS, so as to make it more efficient. +Secondly, we reworked the architecture we use for implementing the CryptDrive functionality, so as to integrate support for shared folders. + +## Update notes + +To test the _shared folders_ functionality, users can run the following command in their browser console: + +`localStorage.CryptPad_SF = "1";` + +Alternatively, if the instance administrator would like to enable shared folders for all users, they can do so via their `/customize/application_config.js` file, by adding the following line: + +`config.disableSharedFolders = true;` + +### Features + +* As mentioned in the _goals_ for this release, we've merged in the work done to drastically improve performance when compiling styles. The system features documentation for anyone interested in understanding how it works. +* We've refactored the APIs used to interact with your CryptDrive, implementing a single interface with which applications can interact, which then manages any number of sub-objects each representing a shared folder. Shared folders are still disabled by default. See the _Update notes_ section for more information. +* The home page now features the same footer which has been displayed on all other information pages until now. +* We've added a slightly nicer spinner icon on loading pages. +* We've created a custom font _cp-tools_ for our custom-designed icons + +### Bug fixes + +* We've accepted a pull request implementing serverside support for moving files across different drives, for system administrators hosting CryptPad on systems which segregate folders on different partitions. +* We've addressed a report of an edge case in CryptPad's user password change logic which could cause users to delete their accounts. + # Fossa release (v2.5.0) ## Goals diff --git a/customize.dist/pages.js b/customize.dist/pages.js index 22e33b01b..559d0e452 100644 --- a/customize.dist/pages.js +++ b/customize.dist/pages.js @@ -94,7 +94,7 @@ define([ ]) ]) ]), - h('div.cp-version-footer', "CryptPad v2.6.0 (Gibbon)") + h('div.cp-version-footer', "CryptPad v2.7.0 (Hedgehog)") ]); }; diff --git a/customize.dist/translations/messages.fr.js b/customize.dist/translations/messages.fr.js index 60744fc8e..f24cf04b0 100644 --- a/customize.dist/translations/messages.fr.js +++ b/customize.dist/translations/messages.fr.js @@ -220,6 +220,7 @@ define(function () { out.notifyRenamed = "{0} a changé son nom en {1}"; out.notifyLeft = "{0} a quitté la session collaborative"; + out.ok = 'OK'; out.okButton = 'OK (Entrée)'; out.cancel = "Annuler"; @@ -246,6 +247,11 @@ define(function () { out.pad_mediatagTitle = "Options du Media-Tag"; out.pad_mediatagWidth = "Largeur (px)"; out.pad_mediatagHeight = "Hauteur (px)"; + out.pad_mediatagRatio = "Préserver les proportions"; + out.pad_mediatagBorder = "Éaisseur de la bordure (px)"; + out.pad_mediatagPreview = "Aperçu"; + out.pad_mediatagImport = 'Sauver dans votre CryptDrive'; + out.pad_mediatagOptions = 'Propriétés de l\'image'; // Kanban out.kanban_newBoard = "Nouveau tableau"; @@ -561,6 +567,14 @@ define(function () { out.settings_importConfirm = "Êtes-vous sûr de vouloir importer les pads récents de ce navigateur dans le CryptDrive de votre compte utilisateur ?"; out.settings_importDone = "Importation terminée"; + out.settings_autostoreTitle = "Stockage des pads dans CryptDrive"; + out.settings_autostoreHint = "Le stockage Automatique des pads permet de sauver tous les pads que vous visitez dans votre CryptDrive, sans action de votre part.
" + + "Le stockage Manuel (toujours demander) permet de ne pas stocker automatiquement les pads, mais d'afficher un message vous demandant s'il faut le faire ou non.
" + + "Le stockage Manuel (ne pas demander) permet de ne pas stocker les pads ni d'afficher le message. Une option permettant de les stocker sera toujours disponible, mais cachée."; + out.settings_autostoreYes = "Automatique"; + out.settings_autostoreNo = "Manuel (ne pas demander)"; + out.settings_autostoreMaybe = "Manuel (toujours demander)"; + out.settings_userFeedbackTitle = "Retour d'expérience"; out.settings_userFeedbackHint1 = "CryptPad peut envoyer des retours d'expérience très limités vers le serveur, de manière à nous permettre d'améliorer l'expérience des utilisateurs. "; out.settings_userFeedbackHint2 = "Le contenu de vos pads et les clés de déchiffrement ne seront jamais partagés avec le serveur."; @@ -646,6 +660,7 @@ define(function () { // pad out.pad_showToolbar = "Afficher la barre d'outils"; out.pad_hideToolbar = "Cacher la barre d'outils"; + out.pad_base64 = "Ce pad contient des images stockées de manière inefficace. Ces images vont augmenter de manière significative la taille du pad dans votre CryptDrive, et le rendre plus lent à charger. Vous pouvez migrer ces fichiers afin de les stocker séparément dans votre CryptDrive. Voulez-vous commencer la migration maintenant?"; // markdown toolbar out.mdToolbar_button = "Afficher ou cacher la barre d'outils Markdown"; @@ -1177,5 +1192,17 @@ define(function () { out.sharedFolders_create_password = "Mot de passe du dossier"; out.sharedFolders_share = "Partager cette URL avec d'autres utilisateurs enregistrés leur donne accès au dossier partagé. Une fois l'URL ouverte, le dossier partagé sera ajouté au répertoire racine de leur CryptDrive."; + out.chrome68 = "Il semblerait que vous utilisiez le navigateur Chrome version 68. Ce navigateur contient un bug rendant certaines pages entièrement blanches après quelques secondes ou bloquant les clics. Pour corriger ce problème, vous pouvez vous déplacer vers un nouvel onglet et revenir ou vous pouvez essayer de faire défiler la page. Ce bug devrait être corrigé dans la prochaine version du navigateur."; + + // Manual pad storage popup + out.autostore_notstored = "Ce pad n'est pas dans votre CryptDrive. Souhaitez-vous le stocker ?"; + out.autostore_settings = "Vous pouvez activer le stockage automatique des pads dans vos Préférences !"; + out.autostore_store = "Stocker"; + out.autostore_hide = "Ne pas stocker"; + out.autostore_error = "Erreur : nous n'avons pas réussi à stocker ce pad, veuillez ré-essayer."; + out.autostore_saved = "Ce pad a été stocké avec succès dans votre CryptDrive !"; + out.autostore_forceSave = "Stocker le fichier dans votre CryptDrive"; // File upload modal + out.autostore_notAvailable = "Vous devez stocker ce pad dans votre CryptDrive avant de pouvoir utiliser cette fonctionnalité."; + return out; }); diff --git a/customize.dist/translations/messages.js b/customize.dist/translations/messages.js index 8510c06f3..f88f211e3 100644 --- a/customize.dist/translations/messages.js +++ b/customize.dist/translations/messages.js @@ -252,7 +252,7 @@ define(function () { out.pad_mediatagRatio = "Keep ratio"; out.pad_mediatagBorder = "Border width (px)"; out.pad_mediatagPreview = "Preview"; - out.pad_mediatagImport = 'Save in CryptDrive'; + out.pad_mediatagImport = 'Save in your CryptDrive'; out.pad_mediatagOptions = 'Image properties'; // Kanban @@ -669,7 +669,7 @@ define(function () { // pad out.pad_showToolbar = "Show toolbar"; out.pad_hideToolbar = "Hide toolbar"; - out.pad_base64 = "This pad contains images stored in an inefficient way. These images will increase significantly the size of the pad in your CryptDrive, and they will make it slower to load. Do you want to migrate these images to a better format (they will be stored separately in your drive)?"; // XXX + out.pad_base64 = "This pad contains images stored in an inefficient way. These images will significantly increase the size of the pad in your CryptDrive, and make it slower to load. You can migrate these files to a new format which will be stored separately in your CryptDrive. Do you want to migrate these images now?"; // markdown toolbar out.mdToolbar_button = "Show or hide the Markdown toolbar"; @@ -1244,13 +1244,13 @@ define(function () { out.chrome68 = "It seems that you're using the browser Chrome or Chromium version 68. It contains a bug resulting in the page turning completely white after a few seconds or the page being unresponsive to clicks. To fix this issue, you can switch to another tab and come back, or try to scroll in the page. This bug should be fixed in the next version of your browser."; // Manual pad storage popup - out.autostore_notstored = "This pad is not in your CryptDrive. Do you want to store it now?"; // XXX - out.autostore_settings = "You can enable automatic pad storage in your Settings page!"; // XXX + out.autostore_notstored = "This pad is not in your CryptDrive. Do you want to store it now?"; + out.autostore_settings = "You can enable automatic pad storage in your Settings page!"; out.autostore_store = "Store"; out.autostore_hide = "Don't store"; out.autostore_error = "Unexpected error: we were unable to store this pad, please try again."; out.autostore_saved = "The pad was successfully stored in your CryptDrive!"; - out.autostore_forceSave = "Store the file in CryptDrive"; // File upload modal + out.autostore_forceSave = "Store the file in your CryptDrive"; // File upload modal out.autostore_notAvailable = "You must store this pad in your CryptDrive before being able to use this feature."; // Properties/tags/move to trash return out; diff --git a/package.json b/package.json index 23e848602..2dca65ee5 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "cryptpad", "description": "realtime collaborative visual editor with zero knowlege server", - "version": "2.6.0", + "version": "2.7.0", "license": "AGPL-3.0+", "repository": { "type": "git", diff --git a/www/drive/main.js b/www/drive/main.js index d81f07f39..7395b163a 100644 --- a/www/drive/main.js +++ b/www/drive/main.js @@ -41,7 +41,7 @@ define([ var secret = Utils.Hash.getSecrets('drive', hash); if (hash) { // Add a shared folder! - // XXX password? + // TODO password? Cryptpad.addSharedFolder(secret, function (id) { window.CryptPad_newSharedFolder = id; // Update the hash in the address bar diff --git a/www/settings/inner.js b/www/settings/inner.js index ddb11f4d9..58fdb5524 100644 --- a/www/settings/inner.js +++ b/www/settings/inner.js @@ -236,9 +236,9 @@ define([ label: { class: 'noTitle' } }); var $div2 = $(h('div.cp-settings-autostore-radio', [ - opt1, + opt3, opt2, - opt3 + opt1 ])).appendTo($div); $div.find('input[type="radio"]').on('change', function () {