diff --git a/customize.dist/pages.js b/customize.dist/pages.js
index 9dd366da2..a08e40d3c 100644
--- a/customize.dist/pages.js
+++ b/customize.dist/pages.js
@@ -98,9 +98,11 @@ define([
]),
h('a.navbar-brand', { href: '/index.html'}),
h('div.collapse.navbar-collapse.justify-content-end#menuCollapse', [
- h('a.nav-item.nav-link', { href: '/what-is-cryptpad.html'}, Msg.topbar_whatIsCryptpad),
+ //h('a.nav-item.nav-link', { href: '/what-is-cryptpad.html'}, Msg.topbar_whatIsCryptpad), // Moved the FAQ
+ h('a.nav-item.nav-link', { href: '/faq.html'}, Msg.faq_link),
h('a.nav-item.nav-link', { href: 'https://blog.cryptpad.fr/'}, Msg.blog),
h('a.nav-item.nav-link', { href: '/features.html'}, Msg.features),
+ h('a.nav-item.nav-link', { href: '/privacy.html'}, Msg.privacy),
h('a.nav-item.nav-link', { href: '/contact.html'}, Msg.contact),
h('a.nav-item.nav-link', { href: '/about.html'}, Msg.about),
].concat(rightLinks))
@@ -350,7 +352,7 @@ define([
h('div.container.cp-container', [
h('center', h('h1', Msg.policy_title)),
h('h2', Msg.policy_whatweknow),
- h('p', Msg.policywhatweknow_p1),
+ setHTML(h('p'), Msg.policy_whatweknow_p1),
h('h2', Msg.policy_howweuse),
h('p', Msg.policy_howweuse_p1),
@@ -403,6 +405,9 @@ define([
infopageTopbar(),
h('div.container.cp-container', [
h('center', h('h1', Msg.faq_title)),
+ h('p.cp-faq-header', h('a.nav-item.nav-link', {
+ href: '/what-is-cryptpad.html'
+ }, Msg.faq_whatis)),
h('div.cp-faq-container', categories)
]),
infopageFooter()
diff --git a/customize.dist/src/less2/include/toolbar.less b/customize.dist/src/less2/include/toolbar.less
index a0c01e377..50c51f611 100644
--- a/customize.dist/src/less2/include/toolbar.less
+++ b/customize.dist/src/less2/include/toolbar.less
@@ -362,53 +362,146 @@
flex: 1;
}
}
- &:not(.cp-toolbar-notitle) {
- .cp-toolbar-top {
- @media screen and (max-width: @browser_media-medium-screen) {
- flex-wrap: wrap;
- height: auto;
- .cp-toolbar-top-filler {
- flex: 1;
- }
- .cp-toolbar-title {
- flex: auto;
+ .cp-toolbar-top {
+ @media screen and (max-width: @browser_media-medium-screen) {
+ flex-wrap: wrap;
+ height: @toolbar_line-height;
+ .cp-pad-not-pinned {
+ line-height: 32px;
+ flex: unset;
+ padding: 0;
+ align-self: auto;
+ margin: 0 5px;
+ }
+ .cp-toolbar-top-filler {
+ height: 32px;
+ }
+ .cp-toolbar-title {
+ height: @toolbar_line-height;
+ line-height: initial;
+ margin: 0;
+ .cp-toolbar-title-hoverable {
width: 100%;
- order: 10;
+ }
+ .cp-toolbar-title-value-page {
+ padding: 5px;
+ line-height: unset;
+ border: 0;
+ }
+ .cp-toolbar-title-editable, .cp-toolbar-title-value-page {
+ max-width: ~"calc(100vw - 26px)";
+ display: inline-block;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ font-size: @colortheme_app-font-size;
height: @toolbar_line-height;
- line-height: initial;
- margin: 0;
- .cp-toolbar-title-hoverable {
- width: 100%;
- }
- .cp-toolbar-title-editable {
- max-width: ~"calc(100vw - 26px)";
- display: inline-block;
- overflow: hidden;
- text-overflow: ellipsis;
+ box-sizing: border-box;
+ line-height: 20px;
+ }
+ .cp-toolbar-title-edit, .cp-toolbar-title-save {
+ box-sizing: border-box;
+ height: @toolbar_line-height;
+ line-height: @colortheme_app-font-size;
+ display: inline-block;
+
+ .fa {
font-size: @colortheme_app-font-size;
+ }
+ }
+ input {
+ height: @toolbar_line-height;
+ font-size: @colortheme_app-font-size;
+ flex: 1;
+ max-width: none;
+ line-height: calc(@toolbar_line-height - 12px); // padding + border
+ }
+ }
+ .cp-toolbar-link {
+ height: @toolbar_line-height;
+ width: @toolbar_line-height;
+ .cp-toolbar-link-logo {
+ padding: 5px;
+ }
+ }
+ .cp-toolbar-user {
+ height: @toolbar_line-height;
+ .cp-toolbar-new {
+ height: @toolbar_line-height;
+ width: @toolbar_line-height;
+ margin-left: 0;
+ button {
height: @toolbar_line-height;
- box-sizing: border-box;
- line-height: 20px;
+ width: @toolbar_line-height;
+ font-size: 20px;
+ margin-top: -1px;
}
- .cp-toolbar-title-edit, .cp-toolbar-title-save {
- box-sizing: border-box;
+ }
+ .cp-toolbar-user-dropdown {
+ height: @toolbar_line-height;
+ width: @toolbar_line-height;
+ &> button {
height: @toolbar_line-height;
- line-height: @colortheme_app-font-size;
- display: inline-block;
-
- .fa {
- font-size: @colortheme_app-font-size;
+ width: @toolbar_line-height;
+ span { font-size: unset; }
+ }
+ &> button.cp-avatar.cp-avatar {
+ media-tag {
+ margin: 4px;
+ max-width: 24px;
+ min-width: 24px;
+ max-height: 24px;
+ min-height: 24px;
}
}
- input {
- height: @toolbar_line-height;
+ }
+ .cp-toolbar-limit {
+ line-height: 32px;
+ margin: 0;
+ }
+ }
+ /*
+ .cp-toolbar-top-filler {
+ flex: 1;
+ }
+ .cp-toolbar-title {
+ flex: auto;
+ width: 100%;
+ order: 10;
+ height: @toolbar_line-height;
+ line-height: initial;
+ margin: 0;
+ .cp-toolbar-title-hoverable {
+ width: 100%;
+ }
+ .cp-toolbar-title-editable {
+ max-width: ~"calc(100vw - 26px)";
+ display: inline-block;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ font-size: @colortheme_app-font-size;
+ height: @toolbar_line-height;
+ box-sizing: border-box;
+ line-height: 20px;
+ }
+ .cp-toolbar-title-edit, .cp-toolbar-title-save {
+ box-sizing: border-box;
+ height: @toolbar_line-height;
+ line-height: @colortheme_app-font-size;
+ display: inline-block;
+
+ .fa {
font-size: @colortheme_app-font-size;
- flex: 1;
- max-width: none;
- line-height: calc(@toolbar_line-height - 12px); // padding + border
}
}
+ input {
+ height: @toolbar_line-height;
+ font-size: @colortheme_app-font-size;
+ flex: 1;
+ max-width: none;
+ line-height: calc(@toolbar_line-height - 12px); // padding + border
+ }
}
+ */
}
}
@@ -471,9 +564,9 @@
overflow: hidden;
white-space: nowrap;
- align-self: center;
- padding-left: 20px;
- padding-right: 5px;
+ line-height: @toolbar_top-height;
+ padding: 0;
+ margin: 0 5px;
font-size: @colortheme_app-font-size;
color: @warn-color;
.cp-pnp-msg {
diff --git a/customize.dist/src/less2/pages/page-faq.less b/customize.dist/src/less2/pages/page-faq.less
index e24dc767c..99df97f9f 100644
--- a/customize.dist/src/less2/pages/page-faq.less
+++ b/customize.dist/src/less2/pages/page-faq.less
@@ -4,6 +4,13 @@
.infopages_main();
.infopages_topbar();
+.cp-faq-header {
+ padding: 0;
+ font-size: 1.2em;
+ a {
+ padding: 0;
+ }
+}
.cp-faq-container {
.cp-faq-questions-q {
color: #3a84b6;
diff --git a/customize.dist/translations/messages.fr.js b/customize.dist/translations/messages.fr.js
index 145d50720..10d7e4e03 100644
--- a/customize.dist/translations/messages.fr.js
+++ b/customize.dist/translations/messages.fr.js
@@ -47,7 +47,7 @@ define(function () {
out.disconnected = 'Déconnecté';
out.synchronizing = 'Synchronisation';
- out.reconnecting = 'Reconnexion...';
+ out.reconnecting = 'Reconnexion';
out.typing = "Édition";
out.initializing = "Initialisation...";
out.forgotten = 'Déplacé vers la corbeille';
@@ -283,7 +283,7 @@ define(function () {
out.poll_unlocked = "Déverrouillé";
out.poll_bookmark_col = "Marquer cette colonne comme favorite pour qu'elle soit toujours déverouillée et affichée en première position.";
- out.poll_bookmarked_col = "Voici votre colonne favorite; elle sera toujours dévérouillée et affichée en première position.";
+ out.poll_bookmarked_col = "Voici votre colonne favorite ; elle sera toujours dévérouillée et affichée en première position.";
out.poll_total = 'TOTAL';
out.poll_comment_list = "Commentaires";
@@ -361,7 +361,7 @@ define(function () {
out.fm_templateName = "Modèles";
out.fm_searchName = "Recherche";
out.fm_recentPadsName = "Pads récents";
- out.fm_ownedPadsName = "Possédés";
+ out.fm_ownedPadsName = "Pads possédés";
out.fm_searchPlaceholder = "Rechercher...";
out.fm_newButton = "Nouveau";
out.fm_newButtonTitle = "Créer un nouveau pad ou un dossier, importer un fichier dans le dossier courant";
@@ -672,7 +672,7 @@ define(function () {
out.footer_aboutUs = "À propos";
out.about = "À propos";
- out.privacy = "Vie privée";
+ out.privacy = "Confidentialité";
out.contact = "Contact";
out.terms = "Conditions";
out.blog = "Blog";
@@ -755,6 +755,180 @@ define(function () {
out.features_f_storage_anon = "Pads supprimés après 3 mois";
out.features_f_storage_registered = "Gratuit: 50Mo
Premium: 5Go/20Go/50Go";
+ // faq.html
+
+ out.faq_link = "FAQ";
+ out.faq_title = "Foire Aux Questions";
+ out.faq_whatis = "Qu'est-ce que CryptPad ?";
+ out.faq = {};
+ out.faq.keywords = {
+ title: 'Termes spéciaux',
+ pad: {
+ q: "Qu'est-ce qu'un pad ?",
+ a: 'Pad est un terme popularisé par Etherpad un éditeur collaboratif en temps-réel. ' +
+ 'Il désigne un document que vous pouvez modifier dans votre navigateur et, en général, vous pouvez voir les modifications effectuées par les autres utilisateurs de manière quasiment instantanée.'
+ },
+ owned: {
+ q: "Qu'est-ce qu'un pad possédé ?",
+ a: "Un pad possédé est un pad créé avec un propriétaire explicite, identifié sur le serveur par sa clé de signature publique.
" +
+ "Le propriétaire d'un pad peut décider de supprimer ce pad du serveur de manière permanente, afin de le rendre inaccessible aux autres collaborateurs même s'ils possédent le lien dans leur CryptDrive."
+ },
+ expiring: {
+ q: "Qu'est-ce qu'un pad expirant ?",
+ a: "Un pad expirant est un pad créé avec une date définie à partir de laquelle il sera supprimé automatiquement du serveur. Les pads expirants peuvent être configurés pour avoir une durée de vie comprise entre une heure et cent mois. Le pad et tout son historique sera alors inaccessible, de manière permanente, même s'il est en cours d'édition à sa date d'expiration.
" +
+ "Si un pad possède une date d'expiration, vous pouvez la vérifier en regardant les propriétés du pad, soit avec un clic-droit sur le pad dans votre CryptDrive, ou soit en cliquant sur Propriétés dans le sous-menu de la barre d'outils de l'application."
+ },
+ tag: {
+ q: "Comment utiliser les mots-clés ?",
+ a: "Vous pouvez ajouter des mots-clés aux pads ou aux fichiers depuis votre CryptDrive et depuis le document en utilisant le bouton (Mots-clés) de la barre d'outils des éditeurs.
" +
+ "Il est ensuite possible de rechercher des pads et des fichiers dans votre CryptDrive en tapant un mot-clé, précédé de #, dans la barre de recherche (exemple: #crypto)."
+ },
+ template: {
+ q: "Qu'est-ce qu'un modèle ?",
+ a: "Un modèle est un pad qui peut être utilisé pour définir le contenu initial d'un nouveau pad du même type quand vous le créez.
" +
+ "Les pads existant dans votre CryptDrive peuvent être transformés en tant que modèle en les déplaçant dans la catégorie Modèles du CryptDrive.
" +
+ "Il est également possible de créer une copie d'un pad en tant que modèle en cliquant sur le bouton (Sauver en tant que modèle) dans la barre d'outils des éditeurs."
+ },
+ };
+ out.faq.privacy = {
+ title: 'Confidentialité',
+ different: {
+ q: "Comment Cryptpad est-il différent des autres services de pads ?",
+ a: "CryptPad chiffre les changements effectués dans vos pads avant de les envoyer au serveur pour qu'il soient stockés, nous ne pouvons donc pas lire le contenu que vous avez tapé."
+ },
+ me: {
+ q: "Quelles informations le serveur possède-t-il sur moi ?",
+ a: "Les administrateurs du serveur peuvent voir les adresses IP des utilisateurs de CryptPad.
" +
+ "Nous n'enregistrons pas les pads visités par chaque adresse IP mais nous le pouvons, bien que nous n'aurions pas accès au contenu déchiffré de ces pads.
" +
+ "Si vous avez des inquiétudes à ce sujet, il est préférable de considérer que nous collectons ces informations puisque nous n'avons aucun moyen de prouver que ce n'est pas le cas.
" +
+ "Nous collectons toutefois certaines données de télémétrie concernant la façon dont les gens utilisent CryptPad, par exemple la résolution de l'écran utilisé ou l'utilisation des boutons de la barre d'outils. Ces données nous aident à améliorer le produit, mais il est possible de désactiver l'envoi de telles informations au serveur en décochant la case Activer l'envoi de retours d'expérience dans vos Préférences.
" +
+ "Enfin, nous gardons une trace des pads stockés dans le CryptDrive des utilisateurs afin de pouvoir imposer les limites de stockage, mais nous n'avons, encore une fois, pas accès au contenu ou au type de ces pads. Ces limites sont toutefois associées à la clé publique des utilisateurs, nous ne pouvons donc pas les relier à un nom ou une adresse email.
" +
+ "Nous avons écrit un article de blog (en anglais) à ce sujet si vous souhaitez en apprendre davantage."
+ },
+ register: {
+ q: "Qu'est-ce que le serveur apprend à mon sujet si je m'inscrit ?",
+ a: "Nous ne demandons pas aux utilisateurs d'entrer une adresse email pour s'enregistrer, et le serveur ne connaît pas votre nom d'utilisateur ni votre mot de passe.
" +
+ "Les formulaires d'inscription et de connexion génèrent à la place un ensemble de clés uniques, créées à partir de vos identifiants, et le serveur ne connaît donc que votre signature cryptographique.
" +
+ "Nous utilisons cette information principalement pour mesurer combien de données vous avez stocké sur nos serveurs, afin de pouvoir limiter chaque utilisateur à son quota.
" +
+ "Nous utilisons également notre fonctionnalité de retour d'expérience pour indiquer au serveur que quelqu'un avec votre adresse IP a créé un compte utilisateur, bien que nous ne sachions pas lequel. Cela nous permet de mesurer le nombre d'inscriptions sur CryptPad mais aussi de voir dans quelles régions du monde se trouvent les utilisateurs, afin de déterminer les langues dans lesquelles traduire CryptPad.
" +
+ "Enfin, les clés générées à l'inscription permettent d'indiquer au serveur que les pads dans votre CryptDrive ne doivent pas être supprimés, même s'ils sont inactifs. Ce système a l'inconvénient de nous fournir davantage d'informations sur la façon dont vous utilisez CryptPad, mais il est nécessaire pour que nous puissions supprimer du serveur les pads inactifs dont personne n'a besoin."
+ },
+ other: {
+ q: "Que peuvent apprendre les autres collaborateurs à mon sujet ?",
+ a: "Quand vous éditez un pad avec quelqu'un d'autre, vous communiquez en passant par notre serveur, nous sommes donc les seuls à connaître votre adresse IP.
" +
+ "Les autres utilisateurs ont accès à votre pseudonyme, votre avatar, le lien vers votre profil (si vous en avez un) et votre clé publique (qui est utilisée pour le chiffrement des communications entre utilisateurs)."
+ },
+ anonymous: {
+ q: "CryptPad me rend-il anonyme ?",
+ a: "Bien que CryptPad soit conçu pour en savoir le moins possible à votre sujet, il ne fournit pas un anonymat complet.
" +
+ "Nos serveurs ont accès à votre adresse IP, mais vous pouvez la cacher en utilisant, par exemple, Tor pour accéder à CryptPad.
" +
+ "Utiliser Tor sans changer votre comportement ne garantira toutefois pas votre anonymat, puisque notre serveur est en mesure d'identifier des utilisateurs avec leur identifiant cryptoraphique unique. Si vous utilisez le même compte utilisateur avec et sans Tor, il serait donc possible de désanonymiser votre session.
" +
+ "Pour les utilisateurs qui n'ont pas besoin d'un niveau de confidentialité aussi élevé, Tor n'est pas nécessaire puisque CryptPad ne nécessite pas la saisie d'un nom réel, d'un numéro de téléphone ou même d'une adresse email comme de nombreux autres services."
+ },
+ policy: {
+ q: "Avez-vous une politique de confidentialité des données ?",
+ a: 'Oui ! Elle est disponible ici.'
+ },
+ };
+ out.faq.security = {
+ title: 'Sécurité',
+ proof: {
+ q: "Comment utilisez-vous les preuves à divulgation nulle de connaissance (Zero Knowledge proofs) ?",
+ a: "Quand nous utilisons le terme Zero Knowledge, ce n'est pas une référence aux Zero Knowledge proofs, mais aux Services Web Zero Knowledge.
" +
+ "Les Services Web Zero Knowledge chiffrent les données des utilisateurs dans le navigateur, de manière à ce que le serveur n'aie pas accès au contenu déchiffré ni aux clés de chiffrement.
" +
+ "Nous avons établi une courte liste de Services Zero Knowledge sur notre blog."
+ },
+ why: {
+ q: "Pourquoi devrais-je utiliser CryptPad ?",
+ a: "Notre position est que les services cloud ne devraient pas nécessiter l'accès à vos données afin que vous puissiez les partager avec vos amis ou vos collègues. Si vous utilisez un autre service pour le travail collaboratif et qu'il n'indique pas clairement que le serveur n'a pas accès aux informations, il est très probable que vos données soient utilisées pour faire du profit."
+ },
+ compromised: {
+ q: "CryptPad me protège-t-il si mon ordinateur est compromis ?",
+ a: "Dans le cas où votre ordinateur ou téléphone serait volé, CryptPad vous permet de déclencher une déconnexion à distance de votre compte CryptPad sur tous les appareils, excepté celui sur lequel vous vous trouvez. Pour ce faire, vous pouvez cliquer sur Se déconnecter partout dans votre page de Préférences.
" +
+ "Tous les appareils qui sont actuellement connectés sur CryptPad à votre compte seront déconnectés. Tous les appareils qui se sont connectés au compte et ne vous demandent plus vos identifiants vous forceront à vous identifier de nouveau lorsque vous visiterez CryptPad.
" +
+ "Actuellement, la déconnexion à distance est implémentée dans votre navigateur et non avec le serveur. Cela signifie que cette fonction devrait être suffisante pour protéger vos données si vous oubliez de vous déconnecter après l'utilisation sur un ordinateur partagé, mais elle ne vous protègera pas des agences gouvernementales."
+ },
+ crypto: {
+ q: "Quelle cryptographie utilisez-vous ?",
+ a: 'CryptPad est basé sur deux librairies open-source de cryptographie : tweetnacl.js et scrypt-async.js.
' +
+ 'Scrypt est une fonction de dérivation de clé basée sur un mot de passe. Nous l\'utilisons pour transformer votre nom d\'utilisateur et votre mot de passe en un unique ensemble de clés qui sécurise l\'accès à votre CryptDrive afin que vous seul puissiez accéder à votre liste de pads.
' +
+ 'Nous utilisons les outils de chiffrement xsalsa20-poly1305 et x25519-xsalsa20-poly1305 fournis par tweetnacl pour chiffrer vos pads et l\'historique du chat respectivement.'
+ }
+ };
+ out.faq.usability = {
+ title: 'Utilisation',
+ register: {
+ q: "Qu'est-ce que je gagne en créant un compte utilisateur ?",
+ a: 'Les utilisateurs enregistrés ont accès à un certain nombre de nouvelles fonctionnalités inaccessibles aux utilisateurs non connectés. Un tableau récapitulatif est disponible ici.'
+ },
+ share: {
+ q: "Comment partager des pads chiffrés avec mes amis ?",
+ a: "CryptPad stocke la clé secrète de chiffrement des pads après le symbole `#` dans l'URL. " +
+ "Tout ce qui se trouve après ce symbole n'est jamais envoyé au serveur, ainsi nous n'avons pas accès à vos clés de chiffrement. " +
+ "Partager le lien d'un pad revient donc à permettre la lecture ou la modification du contenu."
+ },
+ remove: {
+ q: "J'ai supprimé un pad ou un fichier de mon CryptDrive, mais le contenu est encore disponible. Comment le supprimer ?",
+ a: "Seuls les pads possédés (introduits en février 2018) peuvent être supprimés du serveur. Ils ne peuvent d'ailleurs être supprimés du serveur que par leur propriétaire (l'utilisateur ayant créé le pad).
" +
+ "Si vous n'êtes pas le créateur du pad, vous devrez demander au propriétaire de le supprimer pour vous.
" +
+ "Pour les pads que vous possédez, vous pouvez effectuer un clic-droit sur le pad dans votre CryptDrive, et sélectionner Supprimer du serveur."
+ },
+ forget: {
+ q: "Que faire si j'oublie mon mot de passe ?",
+ a: "Malheureusement, si nous avions la possibilité de retrouver ou de modifier votre mot de passe, cela signifierait que nous avons accès à vos pads, ce n'est donc pas le cas.
" +
+ "Si vous n'avez pas noté votre nom d'utilisateur et votre mot de passe, et que vous ne vous en souvenez pas, il est peut-être possible de retrouver l'accès à certains pads grâce à l'historique de votre navigateur."
+ },
+ change: {
+ q: "Que faire si je souhaite changer de mot de passe ?",
+ a: "Il n'est actuellement pas possible de changer votre mot de passe sur CryptPad, mais nous comptons développer cette fonctionnalité très bientôt."
+ },
+ devices: {
+ q: "Je suis connecté sur deux appareils mais avec deux CryptDrive différents, comment est-ce possible ?",
+ a: "Il est possible que vous ayez enregistré le même nom d'utilisateur 2 fois, mais avec des mots de passe différents.
" +
+ "Puisque le serveur de CryptPad vous identifie avec une clé cryptographique et non avec votre nom d'utilisateur, il ne peut pas empêcher la création d'autres comptes avec le même nom. Ainsi, chaque utilisateur possède une combinaison nom d'utilisateur / mot de passe unique.
" +
+ "Les utilisateurs enregistrés peuvent voir leur nom de compte en haut de la page de préférences."
+ },
+ folder: {
+ q: "Puis-je partager des dossiers complets de mon CryptDrive ?",
+ a: "Nous travaillons sur l'ajout d'une fonctionnalité workgroups (ou groupes de travail), qui permettrait aux collaborateurs de partager une structure de type dossier, avec tous les pads contenus dans cette structure."
+ },
+ feature: {
+ q: "Pouvez-vous ajouter une fonctionnalité particulière dont j'ai besoin ?",
+ a: 'Beaucoup de fonctionnalités de CryptPad existent parce que des utilisateurs les ont demandées.
' +
+ 'Notre page de contact liste les différentes manières de nous joindre.
' +
+ 'Malheureusement, nous ne pouvons pas garantir que nous allons implémenter toutes les fonctionnalités demandées.
' +
+ 'Si une fonctionnalité particulière est nécessaire pour votre organisation, vous pouvez sponsoriser son développement pour s\'assurer de sa réalisation. Veuillez contacter sales@cryptpad.fr pour plus d\'informations.
' +
+ "Si vous n'avez pas la possibilité de sponsoriser du développement, nous sommes toujours intéressés par de nouvelles idées et des retours d'expérience qui peuvent nous aider à améliorer CryptPad. N'hésitez pas à nous contacter, avec les méthodes données précédemment, à n'importe quel moment."
+ },
+ };
+ out.faq.other = {
+ title: "Autres questions",
+ pay: {
+ q: "Pourquoi payer alors que toutes les fonctionnalités sont gratuites ?",
+ a: "Un compte premium permet d'augmenter la limite de stockage dans le CryptDrive, ainsi que celle de ses amis (en savoir plus).
" +
+ "En plus des ces avantages directs, l'abonnement premium permet aussi de financer le développement actif et de manière continue de CryptPad. Cela comprend la correction de bugs, l'ajout de nouvelles fonctionnalités et rendre plus facile l'hébergement de CryptPad par d'autres personnes.
" +
+ "Avec un abonnement, vous aidez aussi à prouver aux autres fournisseurs de services que les gens sont prêts à supporter les technologies améliorant le respect de leur vie privée. Nous espérons qu'un jour, les entreprises ayant pour revenu principal la revente de données des utilisateurs soient de l'histoire ancienne.
" +
+ "Enfin, nous offrons la plupart des fonctionnalités gratuitement parce que nous croyons que tout le monde mérite le respect de la vie privée. En souscrivant à un compte premium, vous nous aider à maintenir ces fonctionnalités basiques accessibles aux populations défavorisées."
+ },
+ goal: {
+ q: "Quel est votre objectif ?",
+ a: "En développant une technologie de collaboration qui respecte la vie privée, nous espérons augmenter les attentes des utilisateurs en ce qui concerne les plateformes de services \"cloud\" et leur politique de confidentialité. Nous souhaitons que notre travail conduise les autres fournisseurs de services, quel que soit leur domaine, à égaler voire dépasser nos efforts.
" +
+ "Malgré notre optimisme, nous savons que la plupart du Web est financé par les publicités ciblées. Il y a encore beaucoup de travail à effectuer que l'on peut faire de nous-mêmes, et nous apprécions le support, la promotion et les contributions de notre communauté envers cet objectif."
+ },
+ jobs: {
+ q: "Est-ce que vous embauchez ?",
+ a: 'Oui ! Vous pouvez envoyer un email à jobs@xwiki.com.'
+ },
+ host: {
+ q: "Pouvez-vous m'aider à installer ma propre instance de CryptPad ?",
+ a: 'Nous serions heureux de fournir du support pour l\'installation de CryptPad au sein de votre organisation. Veuillez contacter sales@cryptpad.fr pour plus d\'informations.'
+ },
+ revenue: {
+ q: "Comment participer au système de partage des revenus ?",
+ a: "Si vous possédez votre propre instance de CryptPad et que vous souhaitez activer les comptes payant et partager les revenus avec les développeurs, votre serveur devra être configuré comme un service partenaire.
" +
+ 'Dans votre répertoire CryptPad, le fichier config.example.js
devrait contenir des explications concernant les étapes à suivre pour configurer votre serveur. Vous devrez aussi contacter sales@cryptpad.fr pour vérifier que votre serveur est configuré correctement et pour discuter des méthodes de paiement.'
+ },
+ };
// terms.html
out.tos_title = "Conditions d'utilisation de CryptPad";
@@ -777,6 +951,50 @@ define(function () {
// Initial states
+ out.help = {};
+
+ out.help.title = "Pour bien démarrer";
+ out.help.generic = {
+ more: 'Apprenez-en davantage sur le fonctionnement de CryptPad en lisant notre FAQ',
+ share: 'Utilisez le menu partage () pour générer un lien afin que les collaborateurs puissant voir ou modifier ce pad',
+ stored: 'Chaque pad que vous visitez est stocké automatiquement dans votre CryptDrive'
+ };
+
+ out.help.text = {
+ formatting: 'Vous pouvez afficher ou cacher la barre d\'outils de mise en forme du texte en cliquant sur les boutons ou ',
+ embed: 'Les utilisateurs enregistrés peuvent intégrer une image ou un fichier provenant de leur CryptDrive en utilisant le bouton ',
+ history: 'Vous pouvez utiliser l\'historique () pour voir ou restaurer les versions précédentes du pad'
+ };
+
+ out.help.pad = {
+ export: 'Vous pouvez exporter le contenu en tant que PDF avec le bouton de la barre d\'outils de mise en forme du texte'
+ };
+
+ out.help.code = {
+ modes: 'Utilisez le sous-menu pour changer le mode de coloration syntaxique ou le thème de couleur'
+ };
+
+ out.help.slide = {
+ markdown: 'Rédigez vos slides en Markdown et séparez les avec une ligne contenant ---
',
+ present: 'Démarrez la présentation en utilisant le bouton ',
+ settings: 'Modifiez les préférences de la présentation (image de fond, transitions, numéro de pages, ...) avec le bouton dans le sous-menu ',
+ colors: 'Modifiez la couleur du texte ou du fond en utilisant les boutons et '
+ };
+
+ out.help.poll = {
+ decisions: 'Prenez des décisions en privé avec des personnes de confiance',
+ options: 'Proposez des options et exprimez vos préférences',
+ choices: 'Cliquez sur les cellules de votre colonne pour modifier leur valeur entre oui (✔), non (✖) ou peut-être (~)',
+ submit: 'Cliquez sur Ajouter pour rendre vos choix visibles aux autres'
+ };
+
+ out.help.whiteboard = {
+ colors: 'Double-cliquez sur les couleurs pour changer la palette',
+ mode: 'Vous pouvez désactiver le mode dessin pour déplacer, redimensionner, ou supprimer des éléments du dessin',
+ embed: 'Intégrez des images de votre disque ou de votre CryptDrive et exporter le contenu en tant que PNG sur votre disque ou votre CryptDrive '
+ };
+
+
out.initialState = [
'
',
'Voici CryptPad, l\'éditeur collaboratif en temps-réel Zero Knowledge. Tout est sauvegardé dés que vous le tapez.',
diff --git a/customize.dist/translations/messages.js b/customize.dist/translations/messages.js
index 92702a339..f0eeda3bc 100644
--- a/customize.dist/translations/messages.js
+++ b/customize.dist/translations/messages.js
@@ -48,7 +48,7 @@ define(function () {
out.disconnected = 'Disconnected';
out.synchronizing = 'Synchronizing';
- out.reconnecting = 'Reconnecting...';
+ out.reconnecting = 'Reconnecting';
out.typing = "Editing";
out.initializing = "Initializing...";
out.forgotten = 'Moved to the trash';
@@ -765,25 +765,208 @@ define(function () {
out.faq_link = "FAQ";
out.faq_title = "Frequently Asked Questions";
+ out.faq_whatis = "What is CryptPad?";
out.faq = {};
- out.faq.cat1 = {
- title: 'Category 1',
- q1: {
- q: 'What is a pad?',
- a: 'A realtime collaborative document...'
+ out.faq.keywords = {
+ title: 'Keywords',
+ pad: {
+ q: "What is a pad?",
+ a: "Pad is a term popularized by Etherpad, a real-time collaborative editor.\n" +
+ "It refers to a document that you can edit in your browser, generally with other people's changes visible nearly instantly."
},
- q2: {
- q: 'Question 2?',
- a: '42'
+ owned: {
+ q: "What is an owned Pad?",
+ a: "An owned pad is a pad created with an explicit owner, identified to the server by their public signing key." +
+ " A pad's owner may choose to delete their pads from the server, making it unavailable to other collaborators in the future, whether they had it in their CryptDrive or not."
+ },
+ expiring: {
+ q: "What is an expiring Pad?",
+ a: "An expiring pad is a pad created with a set time at which it will be automatically removed from the server." +
+ " Expiring pads can be configured to last anywhere from one hour to one hundred months." +
+ " The pad and all of its history will become permanently unavailable even if it is being edited at the time that it expires.
" +
+ "If a pad is set to expire, you can check its expiration time by viewing its properties, either by right-clicking the pad in your CryptDrive, or by using the properties sub-menu from an application's toolbar."
+ },
+ tag: {
+ q: "How can I use tags?",
+ a: "You can tag pads and uploaded files via your CryptDrive, or using the tag button () in any editor's toolbar." +
+ " Search for pads and files in your CryptDrive using the search bar with a term beginning with hashtag, like #crypto."
+ },
+ template: {
+ q: "What is a template?",
+ a: "A template is a pad which can be used to define to initial content for another pad of the same type when you create it." +
+ " Any existing pad can be turned into a template by moving it into the Templates section in your CryptDrive." +
+ " You can also create a copy of a pad to be used as a template by clicking the template button () in the editor's toolbar."
+ },
+ };
+ out.faq.privacy = {
+ title: 'Privacy',
+ different: {
+ q: "How is CryptPad different from other Pad services?",
+ a: "CryptPad encrypts changes to your pads before sending that information to be stored on the server, so we can't read what you're typing."
+ },
+ me: {
+ q: "What information does the server know about me?",
+ a: "Server administrators are able to see the IP addresses of people who visit the CryptPad." +
+ " We don't record which addresses visit which pads, but we could, even though we don't have access to the decrypted content of those pads." +
+ " If you are worried about us analyzing that information, it's safest to assume that we do collect it, since we can't prove that we don't.
" +
+
+ "We collect some basic telemetry about how people use CryptPad, such as the size of the screen on their device, and which buttons they click the most." +
+ "This helps us improve the software, but if you'd prefer not to send such information to the server, you can opt out by unchecking the Enable user feedback checkbox.
" +
+
+ "We do keep track of which pads are in a user's CryptDrive so that we can impose storage limits, but we don't know the content or type of those pads." +
+ " Storage quotas are associated with a user's public key, but we don't associate names or emails with those public keys.
" +
+
+ " For more information, you can read this blog post which we wrote about the topic."
+ },
+ register: {
+ q: "Does the server know more about me if I register?",
+ a: "We don't require users to verify their email address, and the server does not even learn your username or password when you register." +
+ " Instead, the register and login forms generate a unique keyring from your input, and the server only learns your cryptographic signature." +
+ " We use this information to track details like how much data you are using, which allows us to restrict each user to a quota.
" +
+
+ "We use our feedback functionality to inform the server that someone with your IP has registered an account." +
+ " We use this to measure how many people register for CryptPad accounts, and to see what regions they are in so that we can guess which languages may need better support.
" +
+
+ "When you register, you generate a public key which is used to tell the server that the pads in your CryptDrive should not be deleted even if they are not actively being used." +
+ " This information does reveal more about how you are using CryptPad, but the system allows us to remove pads from the server once nobody cares enough to keep them."
+ },
+ other: {
+ q: "What can other collaborators learn about me?",
+ a: "When you edit a pad with someone else, you communicate through the server, so only we learn your IP address." +
+ " Other users can see your display name, avatar, the link to your profile (if you have one), and your public key (which is used for encrypting communications between each other)."
+ },
+ anonymous: {
+ q: "Does CryptPad make me anonymous?",
+ a: "Even though CryptPad is designed to know as little about you as possible, it does not provide strong anonymity." +
+ " Our servers have access to your IP address, however, you can hide this information by using Tor to access CryptPad." +
+ " Using Tor without changing your behaviour will not guarantee you anonymity, as the server is also able to identify users by their unique cryptographic identifier." +
+ " If you use the same account when you're not using Tor, it will be possible to deanonymize your session.
" +
+
+ "For users who require a lesser degree of privacy, CryptPad does not require users to identify themselves by name, phone number, or email address like many other services."
+ },
+ policy: {
+ q: "Do you have a data privacy policy?",
+ a: "Yes! It is available here."
}
};
- out.faq.cat2 = {
- title: 'Category 2',
- q1: {
- q: 'A new question?',
- a: 'The answer'
+ out.faq.security = {
+ title: 'Security',
+ proof: {
+ q: "How do you use Zero Knowledge Proofs?",
+ a: "When we use the term Zero Knowledge, we are not referring to Zero Knowledge proofs, but to Zero Knowledge Web Services." +
+ " Zero Knowledge Web Services encrypt user data in the user's browser, without the server ever having access to the unencrypted data, or the encryption keys.
" +
+ "We've compiled a short list of Zero Knowledge services here."
+ },
+ why: {
+ q: "Why should I use CryptPad?",
+ a: "Our position is that cloud services should not require access to your data in order for you to share it with your friends and colleagues." +
+ " If you are using another service to collaborate, and they do not explicitly say that they can't access your information, it is very likely that they are leveraging it for profit."
+ },
+ compromised: {
+ q: "Does CryptPad protect me if my device is compromised?",
+ a: "In the event that your device is stolen, CryptPad allows you to trigger a remote logout of all devices except the one you are currently using." +
+ " To do so, go to your settings page and click Log out everywhere." +
+ " All other devices which are currently connected to the account will log out." +
+ " Any previously connected devices which visit CryptPad will log out as soon as they load the page.
" +
+
+ "Currently, remote logout is implemented in the browser, not in conjunction with the server." +
+ " As such, it may not protect you from government agencies, but it should be sufficient if you forgot to log out after using CryptPad from a shared computer."
+ },
+ crypto: {
+ q: "What cryptography do you use?",
+ a: "CryptPad is based upon two open-source cryptography libraries: tweetnacl.js and scrypt-async.js.
" +
+
+ "Scrypt is a password-based key derivation algorithm. We use it to turn your username and password into a unique keyring which secures access to your CryptDrive such that only you can access your list of pads.
" +
+
+ "We use the xsalsa20-poly1305 and x25519-xsalsa20-poly1305 cyphers provided by tweetnacl to encrypt pads and chat history, respectively."
}
};
+ out.faq.usability = {
+ title: 'Usability',
+ register: {
+ q: "What do I get by registering?",
+ a: "Registered users have access to a number of features unavailable to unregistered users. There's a chart here."
+ },
+ share: {
+ q: "How can I share encrypted pads with my friends?",
+ a: "CryptPad puts the secret encryption key to your pad after the # character in the URL." +
+ " Anything after this character is not sent to the server, so we never have access to your encryption keys." +
+ " By sharing the link to a pad, you share the ability to read and access it."
+ },
+ remove: {
+ q: "I removed a pad or file from my CryptDrive, but the content is still available. How can I remove it?",
+ a: "Only owned pads (introduced in February 2018) can be deleted. Additionally, these pads can only be deleted by their owners (the person that originally created the pad)." +
+ " If you are not the creator of the pad, you will have to ask its owner to delete it for you." +
+ " For pads you do own, you can right-click the pad in your CryptDrive, and choose Delete from the server."
+ },
+ forget: {
+ q: "What if I forget my password?",
+ a: "Unfortunately, if we could recover access to your encrypted pads for you, we'd be able to access them ourselves." +
+ " If you did not record your username and password anywhere, and cannot remember either, you may be able to recover your pads by filtering your browser's history."
+ },
+ change: {
+ q: "What if I want to change my password?",
+ a: "It is not currently possible to change your CryptPad password, though we are planning to develop this functionality very soon."
+ },
+ devices: {
+ q: "I am logged in on two devices, and see two different CryptDrives, how is this possible?",
+ a: "It's probable that you registered the same name twice, using different passwords." +
+ " Because the CryptPad server identifies you by your cryptographic signature and not your name, it cannot prevent others from registering with the same name." +
+ " As such, each user account has a unique username and password combination." +
+ " Logged in users can see their username at the top of the settings page."
+ },
+ folder: {
+ q: "Can I share entire folders from my CryptDrive?",
+ a: "We're working on adding support for \"workgroups\", which would allow collaborators to share a folder structure, and all the pads contained within that structure."
+ },
+ feature: {
+ q: "Can you add a very special feature which I need?",
+ a: "Many of the features in CryptPad exist because users asked for them." +
+ " Our contacts page lists the ways that you can reach us.
" +
+
+ "Unfortunately, we cannot guarantee that we will implement everything that people ask for." +
+ " If a particular feature is critical for your organization, you can sponsor development time to ensure its completion." +
+ " Please contact sales@cryptpad.fr for more information.
" +
+
+ "Even if you cannot afford to sponsor development, we're interested in feedback that can help us improve CryptPad." +
+ " Feel free to contact us with via the above methods any time."
+ },
+ };
+ out.faq.other = {
+ title: "Other questions",
+ pay: {
+ q: "Why should I pay when so many features are free?",
+ a: "We give supporters additional storage and the ability to increase their friends' quotas (learn more).
" +
+
+ "Beyond these short term benefits, by subscribing with a premium account you help to fund continued, active development of CryptPad. That includes fixing bugs, adding new features, and making it easier for others to help host CryptPad themselves." +
+ " Additionally, you help to prove to other service providers that people are willing to support privacy enhancing technologies. It is our hope that eventually business models based on selling user data will become a thing of the past.
" +
+
+ "Finally, we offer most of CryptPad's functionality for free because we believe everyone deserves personal privacy, not just those with disposable income." +
+ " By supporting us, you help us continue to make it possible for underprivileged populations to access these basic features without a price tag attached."
+ },
+ goal: {
+ q: "What is your goal?",
+ a: "By developing privacy-respecting collaboration technology, we wish to raise users' expectations of privacy from cloud-computing platforms." +
+ " We hope that our work drives other service providers in all domains to match or exceed our efforts." +
+ " Despite our optimism, we know that much of the web is funded by revenue from targeted advertising." +
+ " There is much more work to be done than we can manage ourselves, and we appreciate the promotion, support, and contributions of our community towards this goal."
+ },
+ jobs: {
+ q: "Are you hiring?",
+ a: "Yes! Please introduce yourself with an email to jobs@xwiki.com."
+ },
+ host: {
+ q: "Can you help me set up my own instance of CryptPad?",
+ a: "We are happy to provide support for your organization's internal CryptPad installation. Please contact sales@cryptpad.fr for more information."
+ },
+ revenue: {
+ q: "How can I participate in the revenue sharing?",
+ a: " If you are running your own instance of CryptPad, and would like to enable paid accounts and split the revenue with the developers, your server will need to be configured as a partner service.
" +
+
+ "In your CryptPad directory, config.example.js should contain an explanation of what you need to configure on your server." +
+ " You will need to contact sales@cryptpad.fr to verify that your server is configured to use HTTPS correctly, and discuss payment methods."
+ },
+ };
// terms.html
@@ -813,6 +996,50 @@ define(function () {
// Initial states
+ out.help = {};
+
+ out.help.title = "Getting started";
+ out.help.generic = {
+ more: 'Learn more about how CryptPad can work for you by reading our FAQ',
+ share: 'Use the share menu () to generate a link so collaborators can view or edit this pad',
+ stored: 'Every pad you visit is automatically stored in your CryptDrive',
+ };
+
+ out.help.text = {
+ formatting: 'You can display or hide the text formatting toolbar by clicking the or buttons',
+ embed: 'Registered users can embed an image or a file stored in their CryptDrive using ',
+ history: 'You can use history to view or restore previous versions',
+ };
+
+ out.help.pad = {
+ export: 'You can export the content as PDF using the button in the text formatting toolbar',
+ };
+
+ out.help.code = {
+ modes: 'Use the dropdown menus in the submenu to change syntax highlighting modes or color themes',
+ };
+
+ out.help.slide = {
+ markdown: 'Write slides in Markdown and separate them with a line containing ---
',
+ present: 'Start the presentation using the button',
+ settings: 'Change the slide settings (background, transitions, page numbers, etc.) with the button in the submenu',
+ colors: 'Change the text and background colors using the and buttons',
+ };
+
+ out.help.poll = {
+ decisions: 'Make decisions in private among trusted friends',
+ options: 'Propose options, and express your preferences',
+ choices: 'Click cells in your column to cycle through yes (✔), maybe (~), or no (✖)',
+ submit: 'Click submit to make your choices visible to others',
+ };
+
+ out.help.whiteboard = {
+ colors: 'Double-click colors to modify your palette',
+ mode: 'Disable draw mode to drag and stretch strokes',
+ embed: 'Embed images from your disk or your CryptDrive and export them as PNG to your disk or your CryptDrive '
+ };
+
+
out.initialState = [
'
', 'This is CryptPad, the Zero Knowledge realtime collaborative editor. Everything is saved as you type.', diff --git a/www/code/inner.js b/www/code/inner.js index 66010a485..c2e5851bf 100644 --- a/www/code/inner.js +++ b/www/code/inner.js @@ -82,11 +82,9 @@ define([ }; var mkHelpMenu = function (framework) { var $codeMirrorContainer = $('#cp-app-code-container'); - var helpMenu = framework._.sfCommon.createHelpMenu(); + var helpMenu = framework._.sfCommon.createHelpMenu(['text', 'code']); $codeMirrorContainer.prepend(helpMenu.menu); - $(helpMenu.text).html(DiffMd.render(Messages.codeInitialState)); - framework._.toolbar.$drawer.append(helpMenu.button); }; var mkPreviewPane = function (editor, CodeMirror, framework, isPresentMode) { diff --git a/www/common/common-ui-elements.js b/www/common/common-ui-elements.js index de550dc0c..3d6b33964 100644 --- a/www/common/common-ui-elements.js +++ b/www/common/common-ui-elements.js @@ -464,6 +464,7 @@ define([ var AppConfig = common.getAppConfig(); var button; var sframeChan = common.getSframeChannel(); + var appType = (common.getMetadataMgr().getMetadata().type || 'pad').toUpperCase(); switch (type) { case 'export': button = $('