Merge branch 'staging' into hackathon-2021

pull/1/head
ansuz 3 years ago
commit add234a8f7

@ -1,4 +1,38 @@
# WIP # 4.10.0
## Goals
## Update notes
## Features
* screen real-estate
* kanban
* narrower 'add board' button
* 'Tools' menu to collapse the tag and view mode UI
* general
* main toolbar collapse
* remove unused files
* /common/noscriptfix.js
* more detailed inventory of dependencies
* see cryptpad/www/lib/changelog.md
* include vendor and appVersion in support ticket data
* log when trimming history
* rewrite some translation keys to use a single syntax for BR tags
* translations
* more linting
* standardized capitalization of "CryptPad"
* avoid raw injection of HTML strictly for adding line breaks
* remove some unnecessary cases of raw HTML injection
* checkup
* better styles
* improved formatting for returned values in failed tests
* display browser and OS for when people send us screenshots instead of URLs
* test for support of some features in the browser (inside the sandbox)
* mark password inputs as _new passwords_ so that browsers don't suggest you input and share your account password
## Bug fixes
* Sheet export * Sheet export
* most exports broken by Chrome 92, mostly fixed * most exports broken by Chrome 92, mostly fixed
@ -7,18 +41,14 @@
* some new browser-specific checkup tests to make it easier to detect future regressions in the APIs * some new browser-specific checkup tests to make it easier to detect future regressions in the APIs
* drive bug fixes * drive bug fixes
* guard against a few possible type errors * guard against a few possible type errors
* screen real-estate * "burn this drive" button works again in Firefox
* kanban
* narrower 'add board' button
* 'Tools' menu to collapse the tag and view mode UI
* general
* main toolbar collapse
* clear login token * clear login token
1. when you delete your account 1. when you delete your account
2. when logging in 2. when logging in
* remove unused files * use single version of less.js on the client
* /common/noscriptfix.js * abort subsequent actions when metadata fails to load during owned channel archival
* include vendor and appVersion in support ticket data * handle warnings when trimming history (not just errors)
* filter channel ids with invalid lengths when generating a list of all channels you use
# 4.9.0 # 4.9.0

@ -105,7 +105,7 @@ define([
var imprintUrl = AppConfig.imprint && (typeof(AppConfig.imprint) === "boolean" ? var imprintUrl = AppConfig.imprint && (typeof(AppConfig.imprint) === "boolean" ?
'/imprint.html' : AppConfig.imprint); '/imprint.html' : AppConfig.imprint);
Pages.versionString = "v4.9.0"; Pages.versionString = "v4.10.0";
// used for the about menu // used for the about menu

@ -2,7 +2,7 @@ So you want to write a realtime collaborative application?
This guide will focus on applications which require **multiple clients** to **collaboratively construct a single authoratative document**. This guide will focus on applications which require **multiple clients** to **collaboratively construct a single authoratative document**.
[XWiki-Labs](https://labs.xwiki.com/) has published an open source suite (called [Cryptpad](https://github.com/xwiki-labs/cryptpad)) of collaborative editors which employ end to end encryption. [XWiki-Labs](https://labs.xwiki.com/) has published an open source suite (called [CryptPad](https://github.com/xwiki-labs/cryptpad)) of collaborative editors which employ end to end encryption.
This guide will refer to the techniques used in the prototypes developed therein. This guide will refer to the techniques used in the prototypes developed therein.
Let's start with an overview of the components involved. Let's start with an overview of the components involved.
@ -75,7 +75,7 @@ Chainpad can handle out of order messages, but it performs best when its message
By architecting your system such that all clients send to a server which then relays to other clients, you guarantee that a particular chain of patches is consistent between the participants of your session. By architecting your system such that all clients send to a server which then relays to other clients, you guarantee that a particular chain of patches is consistent between the participants of your session.
Cryptpad is capable of using a variety of data stores. CryptPad is capable of using a variety of data stores.
Which data store your instance employs can be [easily configured](https://github.com/xwiki-labs/cryptpad/blob/master/config.example.js). Which data store your instance employs can be [easily configured](https://github.com/xwiki-labs/cryptpad/blob/master/config.example.js).
You simply need to write an adaptor which conforms to a simple API. You simply need to write an adaptor which conforms to a simple API.
@ -85,7 +85,7 @@ Whether you decide to use a single server, or distribute messages across a netwo
## Transport ## Transport
Cryptpad was initially written to use [websockets](https://en.wikipedia.org/wiki/WebSocket) for transportation of messages. CryptPad was initially written to use [websockets](https://en.wikipedia.org/wiki/WebSocket) for transportation of messages.
Since a relay server is indispensable in this model, that server doubles as the **History Keeper**, and implements a datastore. Since a relay server is indispensable in this model, that server doubles as the **History Keeper**, and implements a datastore.
@ -202,7 +202,7 @@ That isn't to say that there are no tradeoffs when keeping that information from
### Our Encryption Scheme ### Our Encryption Scheme
The encryption scheme employed by Cryptpad is a [symmetric encryption](https://en.wikipedia.org/wiki/Symmetric-key_algorithm) which utilizes a single [pre-shared-key](https://en.wikipedia.org/wiki/Pre-shared_key) known by all participants. The encryption scheme employed by CryptPad is a [symmetric encryption](https://en.wikipedia.org/wiki/Symmetric-key_algorithm) which utilizes a single [pre-shared-key](https://en.wikipedia.org/wiki/Pre-shared_key) known by all participants.
Encryption is complex, and poorly understood by the majority of those who use it on a daily basis. Encryption is complex, and poorly understood by the majority of those who use it on a daily basis.
Pre-shared-keys are among the weakest possible cryptographic tools available today, however, few if any other encryption schemes scale to any number of users. Pre-shared-keys are among the weakest possible cryptographic tools available today, however, few if any other encryption schemes scale to any number of users.

2
package-lock.json generated

@ -1,6 +1,6 @@
{ {
"name": "cryptpad", "name": "cryptpad",
"version": "4.9.0", "version": "4.10.0",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {

@ -1,7 +1,7 @@
{ {
"name": "cryptpad", "name": "cryptpad",
"description": "realtime collaborative visual editor with zero knowlege server", "description": "realtime collaborative visual editor with zero knowlege server",
"version": "4.9.0", "version": "4.10.0",
"license": "AGPL-3.0+", "license": "AGPL-3.0+",
"repository": { "repository": {
"type": "git", "type": "git",
@ -45,7 +45,8 @@
"lint:js": "jshint --config .jshintrc --exclude-path .jshintignore .", "lint:js": "jshint --config .jshintrc --exclude-path .jshintignore .",
"lint:server": "jshint --config .jshintrc lib", "lint:server": "jshint --config .jshintrc lib",
"lint:less": "./node_modules/lesshint/bin/lesshint -c ./.lesshintrc ./customize.dist/src/less2/", "lint:less": "./node_modules/lesshint/bin/lesshint -c ./.lesshintrc ./customize.dist/src/less2/",
"lint:translations": "node ./scripts/unused-translations.js", "lint:translations": "node ./scripts/lint-translations.js",
"unused-translations": "node ./scripts/unused-translations.js",
"test": "node scripts/TestSelenium.js", "test": "node scripts/TestSelenium.js",
"test-rpc": "cd scripts/tests && node test-rpc", "test-rpc": "cd scripts/tests && node test-rpc",
"template": "cd customize.dist/src && for page in ../index.html ../privacy.html ../terms.html ../contact.html ../what-is-cryptpad.html ../features.html ../../www/login/index.html ../../www/register/index.html ../../www/user/index.html;do echo $page; cp template.html $page; done;", "template": "cd customize.dist/src && for page in ../index.html ../privacy.html ../terms.html ../contact.html ../what-is-cryptpad.html ../features.html ../../www/login/index.html ../../www/register/index.html ../../www/user/index.html;do echo $page; cp template.html $page; done;",

@ -20,7 +20,7 @@ The most recent version and all past release notes can be found [here](https://g
## Setup using Docker ## Setup using Docker
See [Cryptpad-Docker](https://github.com/xwiki-labs/cryptpad-docker) repository for details on how to get up-and-running with Cryptpad in Docker. This repository is maintained by the community and not officially supported. See [CryptPad-Docker](https://github.com/xwiki-labs/cryptpad-docker) repository for details on how to get up-and-running with CryptPad in Docker. This repository is maintained by the community and not officially supported.
# Security # Security
@ -72,7 +72,7 @@ CryptPad is actively developed by a team at [XWiki SAS](https://www.xwiki.com),
We love Open Source and we love contribution. Learn more about [contributing](https://docs.cryptpad.fr/en/how_to_contribute.html). We love Open Source and we love contribution. Learn more about [contributing](https://docs.cryptpad.fr/en/how_to_contribute.html).
If you have any questions or comments, or if you're interested in contributing to Cryptpad, come say hi in our [Matrix channel](https://app.element.io/#/room/#cryptpad:matrix.xwiki.com). If you have any questions or comments, or if you're interested in contributing to CryptPad, come say hi in our [Matrix channel](https://app.element.io/#/room/#cryptpad:matrix.xwiki.com).
# License # License

@ -1,99 +0,0 @@
var EN = require("../www/common/translations/messages.json");
var simpleTags = [
'<br>',
'<a href="/login/">',
'<a href="/register/">',
// FIXME
"<a href='#'>",
'<a href="#docs">',
'<h3>',
'</h3>',
// FIXME register_notes
'<ul class="cp-notes-list">',
'</ul>',
'<li>',
'</li>',
'<span class="red">',
'</span>',
];
['a', 'b', 'em', 'p', 'i'].forEach(function (tag) {
simpleTags.push('<' + tag + '>');
simpleTags.push('</' + tag + '>');
});
// these keys are known to be problematic
var KNOWN_ISSUES = [ // FIXME
//'newVersion',
//'fm_info_anonymous',
//'register_notes',
];
var processLang = function (map, lang, primary) {
var announced = false;
var announce = function () {
if (announced) { return; }
announced = true;
console.log("NEXT LANGUAGE: ", lang);
};
Object.keys(map).forEach(function (k) {
if (!EN[k]) { return; }
if (KNOWN_ISSUES.indexOf(k) !== -1) { return; }
var s = map[k];
if (typeof(s) !== 'string') { return; }
var usesHTML;
s.replace(/<.*?>/g, function (html) {
if (simpleTags.indexOf(html) !== -1) { return; }
announce();
usesHTML = true;
if (!primary) {
console.log("{%s}", html);
}
});
if (usesHTML) {
announce();
console.log("%s", s);
console.log("[%s]\n", k);
}
});
};
processLang(EN, 'en', true);
[
'ar',
//'bn_BD',
'ca',
'de',
'es',
'fi',
'fr',
'hi',
'it',
'ja',
'nb',
'nl',
'pl',
'pt-br',
'ro',
'ru',
'sv',
//'te',
'tr',
'zh',
].forEach(function (lang) {
try {
var map = require("../www/common/translations/messages." + lang + ".json");
if (!Object.keys(map).length) { return; }
processLang(map, lang);
} catch (err) {
console.error(err);
}
});

@ -1,8 +1,127 @@
// TODO unify the following scripts var EN = require("../www/common/translations/messages.json");
// unused-translations.js
// find-html-translations
// more linting var simpleTags = [
// Search for 'Cryptpad' string (should be 'CryptPad') '<br>',
// Search English for -ise\s '<a href="/login/">',
'<a href="/register/">',
// FIXME
"<a href='#'>",
'<a href="#docs">',
'<h3>',
'</h3>',
// FIXME register_notes
'<ul class="cp-notes-list">',
'</ul>',
'<li>',
'</li>',
'<span class="red">',
'</span>',
];
['a', 'b', 'em', 'p', 'i'].forEach(function (tag) {
simpleTags.push('<' + tag + '>');
simpleTags.push('</' + tag + '>');
});
// these keys are known to be problematic
var KNOWN_ISSUES = [ // FIXME
//'newVersion',
//'fm_info_anonymous',
//'register_notes',
];
var special_rules = {};
special_rules.en = function (s) {
// Prefer the american -ize suffix for verbs rather than -ise
return /[^w]ise/.test(s);
};
special_rules.fr = function (s) {
/*
hacky regexp to check whether there are any instances of ':'
which do not have the preceding space as is expected.
ignore instances where the following character is a '/'
because this is probably a URL (http(s)://)
*/
return /\S[:;\?\!][^\/]{1,}/.test(s);
};
var noop = function () {};
var processLang = function (map, lang, primary) {
var announced = false;
var announce = function () {
if (announced) { return; }
announced = true;
console.log("NEXT LANGUAGE: ", lang);
};
var special = special_rules[lang] || noop;
Object.keys(map).forEach(function (k) {
if (!EN[k]) { return; }
if (KNOWN_ISSUES.indexOf(k) !== -1) { return; }
var s = map[k];
if (typeof(s) !== 'string') { return; }
var usesHTML;
s.replace(/<.*?>/g, function (html) {
if (simpleTags.indexOf(html) !== -1) { return; }
announce();
usesHTML = true;
if (!primary) {
console.log("{%s}", html);
}
});
var weirdCapitalization;
s.replace(/cryptpad(\.fr)*/gi, function (brand) {
if (['CryptPad', 'cryptpad.fr'].includes(brand)) { return; }
weirdCapitalization = true;
});
var specialViolation = special(s);
if (usesHTML || weirdCapitalization || specialViolation) {
announce();
console.log("%s", s);
console.log("[%s]\n", k);
}
});
};
processLang(EN, 'en', true);
[
'ar',
//'bn_BD',
'ca',
'de',
'es',
'fi',
'fr',
'hi',
'it',
'ja',
'nb',
'nl',
'pl',
'pt-br',
'ro',
'ru',
'sv',
//'te',
'tr',
'zh',
].forEach(function (lang) {
try {
var map = require("../www/common/translations/messages." + lang + ".json");
if (!Object.keys(map).length) { return; }
processLang(map, lang);
} catch (err) {
console.error(err);
}
});

@ -915,7 +915,7 @@ define([
var $progress = $('#cp-progress'); var $progress = $('#cp-progress');
var versionStatement = function () { var versionStatement = function () {
return h('p.cp--notice-version', [ return h('p.cp-notice-version', [
"This instance is running ", "This instance is running ",
h('span.cp-app-checkup-version',[ h('span.cp-app-checkup-version',[
"CryptPad", "CryptPad",

@ -526,6 +526,7 @@ define([
var button; var button;
var sframeChan = common.getSframeChannel(); var sframeChan = common.getSframeChannel();
var appType = (common.getMetadataMgr().getMetadata().type || 'pad').toUpperCase(); var appType = (common.getMetadataMgr().getMetadata().type || 'pad').toUpperCase();
data = data || {};
switch (type) { switch (type) {
case 'export': case 'export':
button = $('<button>', { button = $('<button>', {
@ -835,8 +836,8 @@ define([
button = $(h('button.cp-toolbar-tools', { button = $(h('button.cp-toolbar-tools', {
//title: data.title || '', // TODO display if the label text is collapsed //title: data.title || '', // TODO display if the label text is collapsed
}, [ }, [
h('i.fa.fa-wrench'), h('i.fa.' + (data.icon || 'fa-wrench')),
h('span.cp-toolbar-name', Messages.toolbar_tools) h('span.cp-toolbar-name', data.text || Messages.toolbar_tools)
])).click(common.prepareFeedback(type)); ])).click(common.prepareFeedback(type));
/* /*
window.setTimeout(function () { window.setTimeout(function () {
@ -902,7 +903,6 @@ define([
button button
.click(common.prepareFeedback(type)) .click(common.prepareFeedback(type))
.click(function () { .click(function () {
data = data || {};
if (typeof(data.load) !== "function" || typeof(data.make) !== "function") { if (typeof(data.load) !== "function" || typeof(data.make) !== "function") {
return; return;
} }
@ -910,7 +910,6 @@ define([
}); });
break; break;
default: default:
data = data || {};
var drawerCls = data.drawer === false ? '' : '.cp-toolbar-drawer-element'; var drawerCls = data.drawer === false ? '' : '.cp-toolbar-drawer-element';
var icon = data.icon || "fa-question"; var icon = data.icon || "fa-question";
button = $(h('button', { button = $(h('button', {

@ -1,5 +1,5 @@
{ {
"main_title": "Cryptpad: Zero Knowledge, Editor Colaborativo en Tiempo Real", "main_title": "CryptPad: Zero Knowledge, Editor Colaborativo en Tiempo Real",
"type": { "type": {
"pad": "Texto enriquecido", "pad": "Texto enriquecido",
"code": "Código", "code": "Código",
@ -52,10 +52,10 @@
"button_newcode": "Crear nuevo pad de código", "button_newcode": "Crear nuevo pad de código",
"button_newpoll": "Crear nueva encuesta", "button_newpoll": "Crear nueva encuesta",
"button_newslide": "Crear nueva presentación", "button_newslide": "Crear nueva presentación",
"tos_title": "Condiciones de servicio Cryptpad", "tos_title": "Condiciones de servicio CryptPad",
"tos_legal": "Por favor, no seas malicioso, abusivo o hagas algo ilegal.", "tos_legal": "Por favor, no seas malicioso, abusivo o hagas algo ilegal.",
"tos_availability": "Esperamos que este servicio te parezca útil, pero nuestra disponibilidad o rendimiento no pueden ser garantizados. Por favor, exporta tus datos regularmente.", "tos_availability": "Esperamos que este servicio te parezca útil, pero nuestra disponibilidad o rendimiento no pueden ser garantizados. Por favor, exporta tus datos regularmente.",
"tos_e2ee": "Los documentos Cryptpad pueden ser leídos o modificados por cualquiera que pueda adivinar o que pueda tener el enlace. Recomendamos que utilices mensajes cifrados de punto a punto (e2ee) para compartir URLs, no asumimos ninguna responsabilidad en el evento de alguna fuga.", "tos_e2ee": "Los documentos CryptPad pueden ser leídos o modificados por cualquiera que pueda adivinar o que pueda tener el enlace. Recomendamos que utilices mensajes cifrados de punto a punto (e2ee) para compartir URLs, no asumimos ninguna responsabilidad en el evento de alguna fuga.",
"tos_logs": "Los metadatos entregados por el navegador al servidor pueden ser almacenados para la mantenencia del servicio.", "tos_logs": "Los metadatos entregados por el navegador al servidor pueden ser almacenados para la mantenencia del servicio.",
"tos_3rdparties": "No proveemos datos individualizados a terceros a menos de ser obligados por la ley.", "tos_3rdparties": "No proveemos datos individualizados a terceros a menos de ser obligados por la ley.",
"header_logoTitle": "Volver a tu CryptDrive", "header_logoTitle": "Volver a tu CryptDrive",
@ -468,7 +468,7 @@
"register_emailWarning1": "Puedes hacerlo si usted quiere, pero no se enviara a nuestros servidores.", "register_emailWarning1": "Puedes hacerlo si usted quiere, pero no se enviara a nuestros servidores.",
"register_emailWarning2": "No podrá restablecer su contraseña utilizando su correo electrónico como puede hacerlo con muchos otros servicios.", "register_emailWarning2": "No podrá restablecer su contraseña utilizando su correo electrónico como puede hacerlo con muchos otros servicios.",
"register_emailWarning3": "Si de todos modos entiende y desea utilizar su correo electrónico para su nombre de usuario, haga clic en Aceptar.", "register_emailWarning3": "Si de todos modos entiende y desea utilizar su correo electrónico para su nombre de usuario, haga clic en Aceptar.",
"settings_autostoreHint": "<b> Automático </b> Todos los pads que visita se almacenan en su CryptDrive. <br> <b> Manual (siempre pregunte) </b> Si aún no ha guardado un pad, se le preguntará si desea para almacenarlos en su CryptDrive. <br> <b> Manual (nunca preguntar) </b> Los Pads no se almacenan automáticamente en su Cryptpad. La opción para almacenarlos estará oculta.", "settings_autostoreHint": "<b> Automático </b> Todos los pads que visita se almacenan en su CryptDrive. <br> <b> Manual (siempre pregunte) </b> Si aún no ha guardado un pad, se le preguntará si desea para almacenarlos en su CryptDrive. <br> <b> Manual (nunca preguntar) </b> Los Pads no se almacenan automáticamente en su CryptDrive. La opción para almacenarlos estará oculta.",
"settings_driveDuplicateTitle": "Pads de propiedad duplicadas", "settings_driveDuplicateTitle": "Pads de propiedad duplicadas",
"settings_driveDuplicateHint": "Cuando mueve sus propias Pads a una carpeta compartida, se guarda una copia en su CryptDrive para asegurarse de que conserva su control sobre ella. Puedes ocultar archivos duplicados. Solo la versión compartida será visible, a menos que se elimine, en cuyo caso el original se mostrará en su ubicación anterior.", "settings_driveDuplicateHint": "Cuando mueve sus propias Pads a una carpeta compartida, se guarda una copia en su CryptDrive para asegurarse de que conserva su control sobre ella. Puedes ocultar archivos duplicados. Solo la versión compartida será visible, a menos que se elimine, en cuyo caso el original se mostrará en su ubicación anterior.",
"settings_padWidthHint": "Cambia entre el modo de página (por defecto) que limita el ancho del editor de texto, y el uso del ancho total de la pantalla.", "settings_padWidthHint": "Cambia entre el modo de página (por defecto) que limita el ancho del editor de texto, y el uso del ancho total de la pantalla.",

@ -503,7 +503,7 @@
"mdToolbar_check": "Tehtävälista", "mdToolbar_check": "Tehtävälista",
"mdToolbar_code": "Koodi", "mdToolbar_code": "Koodi",
"mdToolbar_toc": "Sisällysluettelo", "mdToolbar_toc": "Sisällysluettelo",
"home_host": "Tämä on itsenäinen yhteisön ylläpitämä Cryptpad-instanssi.", "home_host": "Tämä on itsenäinen yhteisön ylläpitämä CryptPad-instanssi.",
"main_catch_phrase": "Kollaboraatioalusta<br>päästä päähän -salattu ja avoin lähdekoodi", "main_catch_phrase": "Kollaboraatioalusta<br>päästä päähän -salattu ja avoin lähdekoodi",
"footer_aboutUs": "Tietoa meistä", "footer_aboutUs": "Tietoa meistä",
"about": "Tietoa meistä", "about": "Tietoa meistä",

@ -121,7 +121,7 @@
"printTransition": "Activer les animations de transition", "printTransition": "Activer les animations de transition",
"printBackground": "Utiliser une image d'arrière-plan", "printBackground": "Utiliser une image d'arrière-plan",
"printBackgroundButton": "Choisir une image", "printBackgroundButton": "Choisir une image",
"printBackgroundValue": "<b>Arrière-plan actuel:</b> <em>{0}</em>", "printBackgroundValue": "<b>Arrière-plan actuel :</b> <em>{0}</em>",
"printBackgroundNoValue": "<em>Aucun arrière-plan affiché</em>", "printBackgroundNoValue": "<em>Aucun arrière-plan affiché</em>",
"printBackgroundRemove": "Supprimer cet arrière-plan", "printBackgroundRemove": "Supprimer cet arrière-plan",
"filePickerButton": "Intégrer un fichier stocké dans CryptDrive", "filePickerButton": "Intégrer un fichier stocké dans CryptDrive",
@ -289,14 +289,14 @@
"fm_error_cantPin": "Erreur interne du serveur. Veuillez recharger la page et essayer de nouveau.", "fm_error_cantPin": "Erreur interne du serveur. Veuillez recharger la page et essayer de nouveau.",
"fm_viewListButton": "Liste", "fm_viewListButton": "Liste",
"fm_viewGridButton": "Grille", "fm_viewGridButton": "Grille",
"fm_renamedPad": "Vous avez renommé ce pad dans votre Drive. Son titre est:<br><b>{0}</b>", "fm_renamedPad": "Vous avez renommé ce pad dans votre Drive. Son titre est :<br><b>{0}</b>",
"fm_canBeShared": "Ce dossier peut être partagé", "fm_canBeShared": "Ce dossier peut être partagé",
"fm_prop_tagsList": "Mots-clés", "fm_prop_tagsList": "Mots-clés",
"fm_burnThisDriveButton": "Effacer toutes les informations stockées par CryptPad dans votre navigateur", "fm_burnThisDriveButton": "Effacer toutes les informations stockées par CryptPad dans votre navigateur",
"fm_burnThisDrive": "Êtes-vous sûr de vouloir supprimer tout ce qui est stocké par CryptPad dans votre navigateur ?<br>Cette action supprimera votre CryptDrive et son historique de votre navigateur, mais les pads existeront toujours (de manière chiffrée) sur notre serveur.", "fm_burnThisDrive": "Êtes-vous sûr de vouloir supprimer tout ce qui est stocké par CryptPad dans votre navigateur ?<br>Cette action supprimera votre CryptDrive et son historique de votre navigateur, mais les pads existeront toujours (de manière chiffrée) sur notre serveur.",
"fm_padIsOwned": "Vous êtes le propriétaire de ce pad", "fm_padIsOwned": "Vous êtes le propriétaire de ce pad",
"fm_padIsOwnedOther": "Ce pad est la propriété d'un autre utilisateur", "fm_padIsOwnedOther": "Ce pad est la propriété d'un autre utilisateur",
"fm_deletedPads": "Ces pads n'existent plus sur le serveur, ils ont été supprimés de votre CryptDrive: {0}", "fm_deletedPads": "Ces pads n'existent plus sur le serveur, ils ont été supprimés de votre CryptDrive : {0}",
"fm_tags_name": "Mot-clé", "fm_tags_name": "Mot-clé",
"fm_tags_used": "Nombre d'utilisations", "fm_tags_used": "Nombre d'utilisations",
"fm_restoreDrive": "Restauration de votre CryptDrive à une version antérieure. Pour de meilleurs résultats, veuillez éviter de modifier votre CryptDrive avant que cette restauration ne soit terminée.", "fm_restoreDrive": "Restauration de votre CryptDrive à une version antérieure. Pour de meilleurs résultats, veuillez éviter de modifier votre CryptDrive avant que cette restauration ne soit terminée.",
@ -1258,7 +1258,7 @@
"admin_consentToContactTitle": "Consentement à la prise de contact", "admin_consentToContactTitle": "Consentement à la prise de contact",
"admin_checkupButton": "Exécuter le diagnostic", "admin_checkupButton": "Exécuter le diagnostic",
"admin_updateAvailableTitle": "Nouvelles versions", "admin_updateAvailableTitle": "Nouvelles versions",
"admin_updateAvailableHint": "Une nouvelle version de Cryptpad est disponible", "admin_updateAvailableHint": "Une nouvelle version de CryptPad est disponible",
"admin_checkupHint": "CryptPad est doté d'une page qui diagnostique automatiquement les problèmes de configuration courants et suggère comment les corriger si nécessaire.", "admin_checkupHint": "CryptPad est doté d'une page qui diagnostique automatiquement les problèmes de configuration courants et suggère comment les corriger si nécessaire.",
"admin_checkupTitle": "Valider la configuration de l'instance", "admin_checkupTitle": "Valider la configuration de l'instance",
"admin_updateAvailableButton": "Lire les notes de mise à jour", "admin_updateAvailableButton": "Lire les notes de mise à jour",

@ -550,7 +550,7 @@
"settings_anonymous": "Non sei connesso. Queste impostazioni sono specifiche per questo browser.", "settings_anonymous": "Non sei connesso. Queste impostazioni sono specifiche per questo browser.",
"settings_deleted": "Il tuo account utente è stato cancellato. Premi OK per tornare alla home page.", "settings_deleted": "Il tuo account utente è stato cancellato. Premi OK per tornare alla home page.",
"settings_deleteModal": "Condividi le seguenti informazioni con il tuo amministratore CryptPad per far rimuovere i tuoi dati dal server.", "settings_deleteModal": "Condividi le seguenti informazioni con il tuo amministratore CryptPad per far rimuovere i tuoi dati dal server.",
"settings_autostoreHint": "<b>Automatico</b> Tutti i pad che visiti sono conservati nel tuo CryptDrive.<br><b>Manuale (chiedi sempre)</b> Se non hai ancora conservato alcun pad ti verrà chiesto se vuoi conservarli nel tuo CryptDrive.<br><b>Manuale (non chiedere mai)</b> I pads non sono conservati automaticamente nel tuo Cryptpad. L'opzione di conservarli sarà nascosta.", "settings_autostoreHint": "<b>Automatico</b> Tutti i pad che visiti sono conservati nel tuo CryptDrive.<br><b>Manuale (chiedi sempre)</b> Se non hai ancora conservato alcun pad ti verrà chiesto se vuoi conservarli nel tuo CryptDrive.<br><b>Manuale (non chiedere mai)</b> I pads non sono conservati automaticamente nel tuo CryptDrive. L'opzione di conservarli sarà nascosta.",
"settings_autostoreNo": "Manuale (non chiedere mai)", "settings_autostoreNo": "Manuale (non chiedere mai)",
"settings_autostoreYes": "Automatico", "settings_autostoreYes": "Automatico",
"settings_autostoreTitle": "Conservazione pad nel CryptDrive", "settings_autostoreTitle": "Conservazione pad nel CryptDrive",
@ -669,9 +669,9 @@
"adminPage": "Amministrazione", "adminPage": "Amministrazione",
"admin_cat_stats": "Statistiche", "admin_cat_stats": "Statistiche",
"admin_cat_general": "Generale", "admin_cat_general": "Generale",
"survey": "Sondaggio Cryptpad", "survey": "Sondaggio CryptPad",
"crowdfunding_popup_no": "Non ora", "crowdfunding_popup_no": "Non ora",
"crowdfunding_button": "Supporta Cryptpad", "crowdfunding_button": "Supporta CryptPad",
"autostore_pad": "pad", "autostore_pad": "pad",
"autostore_sf": "cartella", "autostore_sf": "cartella",
"autostore_file": "file", "autostore_file": "file",

@ -404,7 +404,7 @@
"settings_importConfirm": "Are you sure you want to import recent pads from this browser to your user account's CryptDrive?", "settings_importConfirm": "Are you sure you want to import recent pads from this browser to your user account's CryptDrive?",
"settings_importDone": "Import completed", "settings_importDone": "Import completed",
"settings_autostoreTitle": "Pad storage in CryptDrive", "settings_autostoreTitle": "Pad storage in CryptDrive",
"settings_autostoreHint": "<b>Automatic</b> All the pads you visit are stored in your CryptDrive.<br><b>Manual (always ask)</b> If you have not stored a pad yet, you will be asked if you want to store them in your CryptDrive.<br><b>Manual (never ask)</b> Pads are not stored automatically in your Cryptpad. The option to store them will be hidden.", "settings_autostoreHint": "<b>Automatic</b> All the pads you visit are stored in your CryptDrive.<br><b>Manual (always ask)</b> If you have not stored a pad yet, you will be asked if you want to store them in your CryptDrive.<br><b>Manual (never ask)</b> Pads are not stored automatically in your CryptDrive. The option to store them will be hidden.",
"settings_autostoreYes": "Automatic", "settings_autostoreYes": "Automatic",
"settings_autostoreNo": "Manual (never ask)", "settings_autostoreNo": "Manual (never ask)",
"settings_autostoreMaybe": "Manual (always ask)", "settings_autostoreMaybe": "Manual (always ask)",

@ -324,7 +324,7 @@
"settings_autostoreMaybe": "Handmatig (altijd vragen)", "settings_autostoreMaybe": "Handmatig (altijd vragen)",
"settings_autostoreNo": "Handmatig (nooit vragen)", "settings_autostoreNo": "Handmatig (nooit vragen)",
"settings_autostoreYes": "Automatisch", "settings_autostoreYes": "Automatisch",
"settings_autostoreHint": "<b>Automatisch</b> Alle geopende werkomgevingen worden automatisch opgeslagen in uw CryptDrive.<br><b>Handmatig (altijd vragen)</b> Als u een werkomgeving nog niet hebt opgeslagen, zult u gevraagd worden of u het in uw CryptDrive wilt opslaan.<br><b>Handmatig (nooit vragen)</b> Werkomgevingen worden niet automatisch opgeslagen in uw Cryptpad. The optie om op te slaan wordt verborgen.", "settings_autostoreHint": "<b>Automatisch</b> Alle geopende werkomgevingen worden automatisch opgeslagen in uw CryptDrive.<br><b>Handmatig (altijd vragen)</b> Als u een werkomgeving nog niet hebt opgeslagen, zult u gevraagd worden of u het in uw CryptDrive wilt opslaan.<br><b>Handmatig (nooit vragen)</b> Werkomgevingen worden niet automatisch opgeslagen in uw CryptDrive. The optie om op te slaan wordt verborgen.",
"settings_autostoreTitle": "Opslag van werkomgevingen in CryptDrive", "settings_autostoreTitle": "Opslag van werkomgevingen in CryptDrive",
"settings_importDone": "Importeren voltooid", "settings_importDone": "Importeren voltooid",
"settings_importConfirm": "Weet u zeker dat u de recente pads van uw browser in uw geregistreerde CryptDrive wilt importeren?", "settings_importConfirm": "Weet u zeker dat u de recente pads van uw browser in uw geregistreerde CryptDrive wilt importeren?",

@ -1,5 +1,5 @@
{ {
"main_title": "Cryptpad: Wspólne edytowanie w czasie rzeczywistym, bez wiedzy specjalistycznej", "main_title": "CryptPad: Wspólne edytowanie w czasie rzeczywistym, bez wiedzy specjalistycznej",
"type": { "type": {
"pad": "Pad", "pad": "Pad",
"code": "Kod", "code": "Kod",
@ -46,10 +46,10 @@
"button_newcode": "STWÓRZ PAD DO KODU", "button_newcode": "STWÓRZ PAD DO KODU",
"button_newpoll": "STWÓRZ GŁOSOWANIE", "button_newpoll": "STWÓRZ GŁOSOWANIE",
"button_newslide": "STWÓRZ PREZENTACJĘ", "button_newslide": "STWÓRZ PREZENTACJĘ",
"tos_title": "Warunki korzystania z usług Cryptpad", "tos_title": "Warunki korzystania z usług CryptPad",
"tos_legal": "Prosimy abyś nie był złośliwy, obelżywy i nie wykorzystywał tego oprogramowania do celow niezgodnych z prawem.", "tos_legal": "Prosimy abyś nie był złośliwy, obelżywy i nie wykorzystywał tego oprogramowania do celow niezgodnych z prawem.",
"tos_availability": "Mamy nadzieję iż uznasz tę usługę za przydatną, lecz dostępność i wydajność nie mogą być przez nas gwarantowane. Prosimy, abyś eksportował swoje dane regularnie.", "tos_availability": "Mamy nadzieję iż uznasz tę usługę za przydatną, lecz dostępność i wydajność nie mogą być przez nas gwarantowane. Prosimy, abyś eksportował swoje dane regularnie.",
"tos_e2ee": "Dokumenty Cryptpad mogą być odczytywane i modyfikowane przez każdego kto może zgadnąć lub w inny sposób uzyskać identyfikator dokumentu. Polecamy korzystania z oprogramowania szyfrującego end-to-end (e2ee) do udostępniania linków URL. Nie będziesz rościł sobie żadnych wierzytelności w wypadku gdy taki URL dostanie się w niepowołane ręce.", "tos_e2ee": "Dokumenty CryptPad mogą być odczytywane i modyfikowane przez każdego kto może zgadnąć lub w inny sposób uzyskać identyfikator dokumentu. Polecamy korzystania z oprogramowania szyfrującego end-to-end (e2ee) do udostępniania linków URL. Nie będziesz rościł sobie żadnych wierzytelności w wypadku gdy taki URL dostanie się w niepowołane ręce.",
"tos_logs": "Metadane dostarczane przez twoją przeglądarkę do serwera mogą być zapisywane i przechowywane w celu utrzymywania serwisu.", "tos_logs": "Metadane dostarczane przez twoją przeglądarkę do serwera mogą być zapisywane i przechowywane w celu utrzymywania serwisu.",
"tos_3rdparties": "Nie dostarczamy indywidualizowanych danych do osób trzecich, poza sytuacjami dyktowanymi prawnie.", "tos_3rdparties": "Nie dostarczamy indywidualizowanych danych do osób trzecich, poza sytuacjami dyktowanymi prawnie.",
"header_logoTitle": "Przejdź na stronę główną" "header_logoTitle": "Przejdź na stronę główną"

@ -1,5 +1,5 @@
{ {
"main_title": "Cryptpad: Zero Knowledge, Edição Colaborativa em Tempo Real", "main_title": "CryptPad: Zero Knowledge, Edição Colaborativa em Tempo Real",
"type": { "type": {
"pad": "Notas", "pad": "Notas",
"code": "Código", "code": "Código",
@ -212,7 +212,7 @@
"contact": "Contact", "contact": "Contact",
"terms": "ToS", "terms": "ToS",
"blog": "Blog", "blog": "Blog",
"tos_title": "Termos de serviço doCryptpad", "tos_title": "Termos de serviço do CryptPad",
"tos_legal": "Pedimos encarecidamente que, como usuário desta plataforma, você evite a prática de quaisquer atos ilegais e que evite a utilização maliciosa e/ou abusiva desta plataforma.", "tos_legal": "Pedimos encarecidamente que, como usuário desta plataforma, você evite a prática de quaisquer atos ilegais e que evite a utilização maliciosa e/ou abusiva desta plataforma.",
"tos_availability": "Nós esperamos que você ache este serviço útil, porém nós não podemos garantir a disponibilidade constante ou a alta performance do mesmo. Por favor, mantenha um backup dos seus dados como forma de segurança adicional.", "tos_availability": "Nós esperamos que você ache este serviço útil, porém nós não podemos garantir a disponibilidade constante ou a alta performance do mesmo. Por favor, mantenha um backup dos seus dados como forma de segurança adicional.",
"tos_e2ee": "Os documentos do CryptPad podem ser modificados por qualquer um que conseguir adivinhar ou obter de qualquer forma o seu identificador único. Nós recomendamos que você utilize criptografia ponto a ponto de mensagens (e2ee) sempre que possível para compartilhar suas URL's. Nós não assumimos qualquer responsabilidade sobre chaves e/ou URLs e seus respectivos conteúdos vazadas para o público.", "tos_e2ee": "Os documentos do CryptPad podem ser modificados por qualquer um que conseguir adivinhar ou obter de qualquer forma o seu identificador único. Nós recomendamos que você utilize criptografia ponto a ponto de mensagens (e2ee) sempre que possível para compartilhar suas URL's. Nós não assumimos qualquer responsabilidade sobre chaves e/ou URLs e seus respectivos conteúdos vazadas para o público.",
@ -363,7 +363,7 @@
"settings_autostoreNo": "Manual (nunca perguntar)", "settings_autostoreNo": "Manual (nunca perguntar)",
"settings_autostoreMaybe": "Manual (sempre perguntar)", "settings_autostoreMaybe": "Manual (sempre perguntar)",
"settings_autostoreYes": "Automático", "settings_autostoreYes": "Automático",
"settings_autostoreHint": "<b>Automatico</b> Todos os blocos que visitou estão armazenados no seu CryptDrive.<br><b>Manual (sempre pergunta)<b> Se você não armazenou um bloco ainda, você será questionado se quer armazenar no seu CryptDrive.<br><b>Manual (nunca pergunta)</b> Blocos não são armazenados automaticamente no seu CryptPad. A opção para armazena-los estará escondida.", "settings_autostoreHint": "<b>Automatico</b> Todos os blocos que visitou estão armazenados no seu CryptDrive.<br><b>Manual (sempre pergunta)<b> Se você não armazenou um bloco ainda, você será questionado se quer armazenar no seu CryptDrive.<br><b>Manual (nunca pergunta)</b> Blocos não são armazenados automaticamente no seu CryptDrive. A opção para armazena-los estará escondida.",
"settings_autostoreTitle": "Bloco armazenado no CryptDrive", "settings_autostoreTitle": "Bloco armazenado no CryptDrive",
"settings_resetThumbnailsDone": "Todas as miniaturas foram apagadas.", "settings_resetThumbnailsDone": "Todas as miniaturas foram apagadas.",
"settings_resetThumbnailsDescription": "Limpar todos as miniaturas de blocos armazenadas no seu navegador.", "settings_resetThumbnailsDescription": "Limpar todos as miniaturas de blocos armazenadas no seu navegador.",

@ -433,7 +433,7 @@
"settings_autostoreMaybe": "Manual (întreabă întotdeauna)", "settings_autostoreMaybe": "Manual (întreabă întotdeauna)",
"settings_autostoreNo": "Manual (nu mai întreba)", "settings_autostoreNo": "Manual (nu mai întreba)",
"settings_autostoreYes": "Automat", "settings_autostoreYes": "Automat",
"settings_autostoreHint": "<b>Automat</b> Toate documentele accesate sunt stocate în CryptDrive-ul dumneavoastră.<br><b>Manual (întreabă întotdeauna)</b> Dacă nu ai stocat încă un document, vei fi întrebat dacă dorești să îl stochezi în Cryptdrive-ul tău.<br><b>Manual (nu mai întreba)</b> Documentele nu sunt stocate automat în Cryptpad-ul tău. Opțiunea de a le stoca ulterior va fi ascunsă.", "settings_autostoreHint": "<b>Automat</b> Toate documentele accesate sunt stocate în CryptDrive-ul dumneavoastră.<br><b>Manual (întreabă întotdeauna)</b> Dacă nu ai stocat încă un document, vei fi întrebat dacă dorești să îl stochezi în Cryptdrive-ul tău.<br><b>Manual (nu mai întreba)</b> Documentele nu sunt stocate automat în CryptDrive-ul tău. Opțiunea de a le stoca ulterior va fi ascunsă.",
"settings_autostoreTitle": "Capacitatea de stocare a documentelor în CryptDrive", "settings_autostoreTitle": "Capacitatea de stocare a documentelor în CryptDrive",
"register_emailWarning2": "Nu veți putea să vă resetați parola folosind adresa de e-mail, așa cum puteți cu multe alte servicii.", "register_emailWarning2": "Nu veți putea să vă resetați parola folosind adresa de e-mail, așa cum puteți cu multe alte servicii.",
"register_emailWarning1": "Poți proceda astfel dacă doreşti, însă nici o notificare nu va fi transmisă server-ului nostru.", "register_emailWarning1": "Poți proceda astfel dacă doreşti, însă nici o notificare nu va fi transmisă server-ului nostru.",

@ -208,7 +208,7 @@
"upload_pending": "待處理", "upload_pending": "待處理",
"upload_cancelled": "已取消的", "upload_cancelled": "已取消的",
"upload_size": "大小", "upload_size": "大小",
"footer_aboutUs": "關於 Cryptpad", "footer_aboutUs": "關於 CryptPad",
"about": "關於", "about": "關於",
"privacy": "隱私", "privacy": "隱私",
"contact": "聯繫", "contact": "聯繫",

@ -353,6 +353,8 @@
} }
#cp-kanban-controls { #cp-kanban-controls {
//background-color: fade(@toolbar-bg-color-active, 50%); // FIXME ?
//color: @cp_toolbar-fg;
padding: 10px; padding: 10px;
display: flex; display: flex;
position: relative; position: relative;

@ -1009,9 +1009,13 @@ define([
var common = framework._.sfCommon; var common = framework._.sfCommon;
var $button = common.createButton('toggle', true, { var $button = common.createButton('toggle', true, {
element: $(container), element: $(container),
//icon: 'fa-tags', // FIXME
//text: Messages.fm_tagsName, // FIXME
}, function () { }, function () {
$button.toggleClass('cp-toolbar-button-active');
}); });
$button.addClass('cp-toolbar-button-active');
framework._.toolbar.$bottomL.append($button); framework._.toolbar.$bottomL.append($button);
onRedraw.reg(function () { onRedraw.reg(function () {

Loading…
Cancel
Save