* comment config.js about supporting multiple domains in httpUnsafeOrigin
* add decreePath
* explicitly pass archivePath when initializing stores
* fix incorrect API in `scripts/migrations/migrate-tasks-v1.js`
* login/register
* delete login block when deleting account
* more careful checks when changing user password
* checkup page
* fixed typo
* progress bar
* test
* websockets
* sandbox CSP
* login block
* admin page
* support responses to closed tickets
* collapse very long messages
* open properties menu for pads that aren't stored in your drive
* help menu that only links to docs
* remove unused (nested) keys
* display survey URL
* support 'KB' in Util.magnitudeOfBytes
* degraded mode
* decide on a number
* sheets
* fix naming collisions between images in spreadsheets
* degraded mode not supported
* getPropChannels
* pinning?
* oo rebuild
* OnlyOffice v6.2
* some buttons that we were hiding have new ids and needed to be hidden again
* translations
* updated catch-phrase (Collaboration suite\nend-to-end-encrypted and open-source
* CKEditor
* cursor jump when clicking on a comment bubble
* keybindings for common styles
* test if this affects scroll position (it shouldn't)
* check that CTRL-space doesn't mess with anything and that it is what Google uses
* test on Mac
* nodrive
* load anonymous accounts without creating a drive
* faster load time, less junk on the server
# 4.3.0 (D)
## Goals
This release is a continuation of our recent efforts to stabilize the platform, fixing small bugs and inconsistencies that we missed when developing larger features. In the meantime we've received reports of the platform performing poorly under various unusual circumstances, so we've developed some targeted fixes to both improve user experience and decrease the load on our server.
## Update notes
## Features
* We're introducing a "degraded mode" for most of our editors (all except polls and sheets). This follows reports we received that CryptPad performed poorly in settings where a relatively large number of users with *edit* rights were connected simultaneously. To alleviate this, some non-essential features will be disabled when a number of concurrent editors is reached, in order to save computing power on client devices. The user-list will stop being updated as users join and leave, users cursors will stop being displayed, and the chat will not be disabled. Sessions will enter this mode when 8 or more editors are present. This threshold can be configured via `customize/application_config.js` by setting a `degradedLimit` attribute.
* CryptPad was recently used to distribute some high-profile documents. For the first time we were able to observe our server supporting more than 1000 concurrent viewers in a single pad and around 350000 unique visitors over the course of a few days. While the distributed document incurred very little load, CryptPad created a drive for each visitor the first time they visited. Most of these drives were presumably abandoned as these users did not return to create or edit their own documents. Such users that directly load an existing document without having previously visited the platform will no longer create a drive automatically, unless they explicitly visit a page which requires it. This behaviour is supported in most of our editors except sheets and polls. This should result in faster load times for new users, but just in case it causes any issues we've made it easy to disable. Instance admins can disable "no-drive mode" via `customize/application_config.js` by setting `allowDrivelessMode` to `false`.
* We've updated our sheet editor to use OnlyOffice 6.2, which includes support for pivot tables, among a range of other improvements.
* Our rich text editor now features some keyboard shortcuts to apply some commonly used styles:
* heading size 1-6: ctrl+alt+1-6
* "div": ctrl+alt+8
* "preformatted": ctrl+alt+9
* paragraph: ctrl+alt+0
* remove styles from selection: ctrl+space
* We've removed a large number of strings that were included in the "Getting started" box that was displayed to new users in each of our editors. Instead, this box simply contains a link to the relevant page in our documentation. Our intent is to both simplify the interface for newcomers and reduce the number of strings that require translation.
* We've continued to progress on our "checkup page" which performs some routine checks to see whether the host instance is correctly configured. While its hints are not especially helpful for admins without reading the code to understand what they are testing, they do detect a fairly wide range of issues and have already helped us to identify some inconsistencies in our recommended configuration. We plan to link directly from this page to the relevant sections of a configuration guide an in upcoming release.
* The admin support ticket interface has been updated to collapse very long messages in response to some ticket threads submitted in the last few weeks. We also found that sometimes we needed more information after a ticket had been closed, so we added the ability to re-open closed tickets.
* Some time ago we removed the "Survey link" option from the user admin dropdown menu (found in the top-right corner of the page). This release re-enables it for instances that explicitly provide a link to a survey, however, we no longer provide a link to a survey by default.
## Bug fixes
* We finally reviewed and merged a number of pull-requests that had been pending for some time. Collectively, they fixed some configuration issues and type errors in some of our older scripts.
* Sheets can now contain multiple images with the same name, whereas before they would conflict and one would be displayed multiple times.
* A recent change in our code to conditionally display size measurements in different magnitudes (GB, MB) removed support for Kilobytes (KB). This release restores the previous behaviour.
* We believe we've identified and corrected an issue that caused the rich text editor to scroll to the top of the document when the button to add a comment was clicked.
* We recently made it such that documents owned by a particular user would not be automatically re-added to that user's drive when they viewed them. This change revealed a number of odd cases where various commands (destroy, add password, get document size, etc.) did not work as expected unless the document was first added to their drive. We reviewed many of these features and corrected the underlying issues that caused these commands to fail.
* We performed a similar review of various commands related to user accounts and identified a number of issues that caused account deletion to fail.
"padNotPinned":"Dieses Pad wird nach 3 Monaten ohne Aktivität auslaufen, {0}logge dich ein{1} oder {2}registriere dich{3}, um das Auslaufen zu verhindern.",
"anonymousStoreDisabled":"Der Webmaster dieses CryptPad-Servers hat die anonyme Verwendung des Speichers deaktiviert. Du musst dich einloggen, um CryptDrive zu verwenden.",
"expiredError":"Dieses Pad ist abgelaufen und ist nicht mehr verfügbar.",
"deletedError":"Dieses Pad wurde von seinem Eigentümer gelöscht und ist nicht mehr verfügbar.",
"deletedError":"Dieses Dokument wurde gelöscht und ist nicht mehr verfügbar.",
"inactiveError":"Dieses Pad ist wegen Inaktivität gelöscht worden. Drücke Esc, um ein neues Pad zu erstellen.",
"chainpadError":"Ein kritischer Fehler ist beim Aktualisieren deines Inhalts aufgetreten. Diese Seite ist schreibgeschützt, damit du sicherstellen kannst, dass kein Inhalt verloren geht.<br>Drücke <em>Esc</em>, um das Pad schreibgeschützt zu lesen oder lade es neu, um die Bearbeitung fortzusetzen.",
"errorCopy":" Du kannst noch auf den Inhalt zugreifen, indem du <em>Esc</em> drückst.<br>Wenn du das Fenster schließt, kannst du darauf nicht mehr zugreifen.",
"errorCopy":" Du kannst die aktuelle Version weiterhin schreibgeschützt verwenden, indem du <em>Esc</em> drückst.",
"errorRedirectToHome":"Drücke <em>Esc</em>, um zu deinem CryptDrive zurückzukehren.",
"newVersionError":"Eine neue Version von CryptPad ist verfügbar.<br><a href='#'>Lade die Seite neu</a>, um die neue Version zu benutzen. Drücke Esc, um im <b>Offline-Modus</b> weiterzuarbeiten.",
"loading":"Laden...",
@ -597,8 +597,8 @@
"creation_expiration":"Ablaufdatum",
"creation_passwordValue":"Passwort",
"creation_newPadModalDescription":"Klicke auf einen Dokument-Typ, um das entsprechende Dokument zu erstellen. Du kannst auch die <b>Tab</b>-Taste für die Auswahl und die <b>Enter</b>-Taste zum Bestätigen benutzen.",
"password_info":"Das Pad, das du öffnen möchtest, existiert nicht mehr oder ist mit einem Passwort geschützt. Gib das richtige Passwort ein, um den Inhalt anzuzeigen.",
"password_error":"Pad nicht gefunden!<br>Dieser Fehler kann zwei Ursachen haben: Entweder ist das Passwort ungültig oder das Pad wurde vom Server gelöscht.",
"password_info":"Das Dokument, das du öffnen möchtest, existiert nicht mehr oder ist mit einem neuen Passwort geschützt. Gib das richtige Passwort ein, um den Inhalt anzuzeigen.",
"password_error":"Dokument nicht gefunden!<br>Dieser Fehler kann zwei Ursachen haben: Entweder ist das Passwort ungültig oder das Dokument wurde zerstört.",
"password_placeholder":"Gib das Passwort hier ein...",
"padNotPinned":"Ce pad va expirer après 3 mois d'inactivité, {0}connectez-vous{1} ou {2}enregistrez-vous{3} pour le préserver.",
"anonymousStoreDisabled":"L'administrateur de cette instance de CryptPad a désactivé le drive pour les utilisateurs non enregistrés. Vous devez vous connecter pour pouvoir utiliser CryptDrive.",
"expiredError":"Ce pad a atteint sa date d'expiration est n'est donc plus disponible.",
"deletedError":"Ce pad a été supprimé par son propriétaire et n'est donc plus disponible.",
"deletedError":"Ce document a été supprimé et n'est plus disponible.",
"inactiveError":"Ce pad a été supprimé en raison de son inactivité. Appuyez sur Échap pour créer un nouveau pad.",
"chainpadError":"Une erreur critique est survenue lors de la mise à jour du contenu. Le pad est désormais en mode lecture seule afin de s'assurer que vous ne perdiez pas davantage de données.<br>Appuyez sur <em>Échap</em> pour voir le pad ou rechargez la page pour pouvoir le modifier à nouveau.",
"invalidHashError":"L'URL du document demandé n'est pas valide.",
"errorCopy":" Vous pouvez accéder au contenu en appuyant sur <em>Échap</em>.<br>Quand vous fermerez cette page, il sera définitivement supprimé.",
"errorCopy":" Vous pouvez toujours utiliser la version actuelle en mode lecture seule en appuyant sur <em>Échap</em>.",
"errorRedirectToHome":"Appuyez sur <em>Échap</em> pour retourner vers votre CryptDrive.",
"newVersionError":"Une nouvelle version de CryptPad est disponible.<br><a href='#'>Rechargez la page</a> pour utiliser la nouvelle version, ou appuyez sur Échap pour accéder au contenu actuel en <b>mode hors-ligne</b>.",
"loading":"Chargement...",
@ -604,8 +604,8 @@
"creation_expiration":"Date d'expiration",
"creation_passwordValue":"Mot de passe",
"creation_newPadModalDescription":"Cliquer sur le type de document à créer. Vous pouvez aussi utiliser les touches <b>Tab</b> pour sélectionner un type et <b>Entrée</b> pour valider.",
"password_info":"Le pad auquel vous essayez d'accéder n'existe plus ou est protégé par un mot de passe. Entrez le bon mot de passe pour accéder à son contenu.",
"password_error":"Pad introuvable!<br>Cette erreur peut provenir de deux facteurs. Soit le mot de passe est faux, soit le pad a été supprimé du serveur.",
"password_info":"Le document auquel vous essayez d'accéder n'existe plus ou est protégé par un nouveau mot de passe. Entrez le bon mot de passe pour accéder au contenu.",
"password_error":"Document introuvable<br>Cette erreur peut provenir de deux facteurs : soit le mot de passe est faux, soit le document a été détruit.",
"password_placeholder":"Tapez le mot de passe ici...",
"password_submit":"Valider",
"properties_addPassword":"Ajouter un mot de passe",
"padNotPinnedVariable":"This pad will expire after {4} days of inactivity, {0}login{1} or {2}register{3} to preserve it.",
"anonymousStoreDisabled":"The webmaster of this CryptPad instance has disabled the store for anonymous users. You have to log in to be able to use CryptDrive.",
"expiredError":"This pad has reached its expiration time and is no longer available.",
"deletedError":"This pad has been deleted by its owner and is no longer available.",
"deletedError":"This document has been deleted and is no longer available.",
"inactiveError":"This pad has been deleted due to inactivity. Press Esc to create a new pad.",
"chainpadError":"A critical error occurred when updating your content. This page is in read-only mode to make sure you won't lose your work.<br>Hit <em>Esc</em> to continue to view this pad, or reload to try editing again.",
"invalidHashError":"The document you've requested has an invalid URL.",
"errorCopy":" You can still access the content by pressing <em>Esc</em>.<br>Once you close this window you will not be able to access it again.",
"errorCopy":" You can still use the current version in read-only mode by pressing <em>Esc</em>.",
"errorRedirectToHome":"Press <em>Esc</em> to be redirected to your CryptDrive.",
"newVersionError":"A new version of CryptPad is available.<br><a href='#'>Reload</a> to use the new version, or press escape to access your content in <b>offline mode</b>.",
"loading":"Loading...",
@ -619,8 +619,8 @@
"creation_expiration":"Expiration date",
"creation_passwordValue":"Password",
"creation_newPadModalDescription":"Click on a document type to create it. You can also press <b>Tab</b> to select the type and press <b>Enter</b> to confirm.",
"password_info":"The pad you're trying to open no longer exist or is protected with a password. Enter the correct password to access its content.",
"password_error":"Pad not found!<br>This error can be caused by two factors: either the password in invalid, or the pad has been deleted from the server.",
"password_info":"The document you are trying to open no longer exists or is protected with a new password. Enter the correct password to access the content.",
"password_error":"Document not found<br>This error can be caused by two factors: either the password is invalid, or the document has been destroyed.",
"password_placeholder":"Type the password here...",
"feedback_about":"If you're reading this, you were probably curious why CryptPad is requesting web pages when you perform certain actions",
"feedback_privacy":"We care about your privacy, and at the same time we want CryptPad to be very easy to use. We use this file to figure out which UI features matter to our users, by requesting it along with a parameter specifying which action was taken.",
"feedback_optout":"If you would like to opt out, visit <a href='/settings/'>your user settings page</a>, where you'll find a checkbox to enable or disable user feedback",
"button_newkanban":"",
"button_newkanban":"Novo Kanban",
"button_newsheet":"Nova Planilha",
"padNotPinned":"Esse pad vai expirar depois de 3 meses de inatividade. {0}login{1} ou {2}registrar-se{3} para preservá-lo.",
"anonymousStoreDisabled":"",
"expiredError":"",
"deletedError":"",
"inactiveError":"",
"chainpadError":"",
"invalidHashError":"",
"errorCopy":"",
"errorRedirectToHome":"",
"newVersionError":"",
"deletedFromServer":"",
"mustLogin":"",
"disabledApp":"",
"realtime_unrecoverableError":"",
"typing":"",
"initializing":"",
"forgotten":"",
"errorState":"",
"userlist_offline":"",
"pinLimitReachedAlertNoAccounts":"",
"importButton":"",
"exportButton":"",
"saveTitle":"",
"forgetButton":"",
"anonymousStoreDisabled":"O webmaster desta instância do CryptPad desabilitou o armazenamento para usuários anônimos. Você precisa fazer login para habilitar o uso do CryptDrive.",
"expiredError":"Este pad alcançou o tempo de expiração e não está mais disponível.",
"deletedError":"Este documento foi deletado e não está mais disponível.",
"inactiveError":"Este pad foi deletado por inatividade. Tecle Esc para criar um novo pad.",
"chainpadError":"Um erro crítico ocorreu enquanto atualizava seu conteúdo. Esta página está em modo somente leitura para ter certeza de que você não perderá seu trabalho. <br>Tecle <em>Esc</em> para continuar vendo este pad, ou recarregue para tentar edita-lo novamente.",
"invalidHashError":"O documento requerido tem uma URL inválida.",
"errorCopy":" Você pode continuar usando esta versão em modo somente leitura teclando <em>Esc</em>.",
"errorRedirectToHome":"Tecle <em>Esc</em> para ser redirecionado para seu CryptDrive.",
"newVersionError":"Uma nova versão do CryptPad está disponível. <br><a href='#'>Recarregued</a> para usar a nova versão, ou tecle Esc para acessar seu conteúdo em <b>modo offline</b>.",
"deletedFromServer":"Documento destruído",
"mustLogin":"Você precisa estar logado para acessar esta página",
"disabledApp":"Esta aplicação foi desabilitada. Contate o administrador deste CryptPad para mais informações.",
"realtime_unrecoverableError":"Um erro irrecuperável ocorreu. Click em OK para recarregar.",
"typing":"Editando",
"initializing":"Inicializando...",
"forgotten":"Movido para a lixeira",
"errorState":"Erro crítico: {0}",
"userlist_offline":"Você está desconectado, a lista do usuário não está disponível.",
"pinLimitReachedAlertNoAccounts":"Você alcançou o seu limite de armazenamento",
"importButton":"importar",
"exportButton":"Exportar",
"saveTitle":"Salve o título (enter)",
"forgetButton":"Deletar",
"userListButton":"",
"chatButton":"",
"userAccountButton":"",
@ -357,5 +357,8 @@
"oo_cantUpload":"",
"oo_uploaded":"",
"canvas_opacityLabel":"",
"canvas_widthLabel":""
"canvas_widthLabel":"",
"storageStatus":"Armazenamento:<br /><b>{0}</b> usados do total <b>{1}</b>",
"upgradeAccount":"Atualizar conta",
"padNotPinnedVariable":"Este pad vai expirar em {4} dias de inatividade, {0} faça login{1} ou {2}registre-se{3} para preserva-lo."