From 20c252e5c6f8181bf3e6f8aeced0cc7277030d54 Mon Sep 17 00:00:00 2001
From: Pierre Bondoerffer
Date: Fri, 14 Apr 2017 12:45:45 +0200
Subject: [PATCH 001/100] fix placeholder styling in safari
---
www/poll/poll.css | 3 +++
www/poll/poll.less | 9 +++++++++
2 files changed, 12 insertions(+)
diff --git a/www/poll/poll.css b/www/poll/poll.css
index 321121b59..030b8898e 100644
--- a/www/poll/poll.css
+++ b/www/poll/poll.css
@@ -32,6 +32,9 @@ textarea[disabled] {
font: white;
border: 0px;
}
+input[type="text"]::placeholder {
+ color: #333;
+}
table#table {
margin: 0px;
}
diff --git a/www/poll/poll.less b/www/poll/poll.less
index 7292b0e15..2ae85c25c 100644
--- a/www/poll/poll.less
+++ b/www/poll/poll.less
@@ -3,6 +3,7 @@
@poll-th-bg: #aaa;
@poll-td-bg: #aaa;
+@poll-placeholder: #333;
@poll-border-color: #555;
@poll-cover-color: #000;
@poll-fg: #000;
@@ -42,6 +43,14 @@ input[type="text"][disabled], textarea[disabled] {
font: white;
border: 0px;
}
+
+// The placeholder color only seems to effect Safari when not set, but
+// setting others just in case.
+
+input[type="text"]::placeholder {
+ color: @poll-placeholder;
+}
+
table#table {
margin: 0px;
}
From 05785e96ea112435bd5cc1648e79362eaa9abe25 Mon Sep 17 00:00:00 2001
From: Pierre Bondoerffer
Date: Fri, 14 Apr 2017 17:47:05 +0200
Subject: [PATCH 002/100] small color change
---
www/poll/poll.less | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/www/poll/poll.less b/www/poll/poll.less
index 2ae85c25c..369c44f0f 100644
--- a/www/poll/poll.less
+++ b/www/poll/poll.less
@@ -3,7 +3,7 @@
@poll-th-bg: #aaa;
@poll-td-bg: #aaa;
-@poll-placeholder: #333;
+@poll-placeholder: #666;
@poll-border-color: #555;
@poll-cover-color: #000;
@poll-fg: #000;
@@ -44,8 +44,7 @@ input[type="text"][disabled], textarea[disabled] {
border: 0px;
}
-// The placeholder color only seems to effect Safari when not set, but
-// setting others just in case.
+// The placeholder color only seems to effect Safari when not set
input[type="text"]::placeholder {
color: @poll-placeholder;
From 7a05462eb3ff312b57b1955478f9170c66c6c366 Mon Sep 17 00:00:00 2001
From: Pierre Bondoerffer
Date: Fri, 14 Apr 2017 19:34:58 +0200
Subject: [PATCH 003/100] Some more poll changes <3
---
customize.dist/translations/messages.es.js | 5 +++++
customize.dist/translations/messages.js | 5 +++++
www/poll/main.js | 6 +++---
www/poll/poll.css | 17 ++++++++++++-----
www/poll/poll.less | 13 +++++++++----
www/poll/render.js | 18 ++++++++----------
6 files changed, 42 insertions(+), 22 deletions(-)
diff --git a/customize.dist/translations/messages.es.js b/customize.dist/translations/messages.es.js
index cfe682c48..9e6c8ceb7 100644
--- a/customize.dist/translations/messages.es.js
+++ b/customize.dist/translations/messages.es.js
@@ -356,5 +356,10 @@ define(function () {
out.register_warning = "Zero Knowledge significa que no podemos recuperar tus datos si pierdes tu contraseña.";
out.register_alreadyRegistered = "Este usuario ya existe, ¿iniciar sesión?";
+ out.poll_remove = "Quitar";
+ out.poll_edit = "Editar";
+ out.poll_locked = "Cerrado";
+ out.poll_unlocked = "Abierto";
+
return out;
});
diff --git a/customize.dist/translations/messages.js b/customize.dist/translations/messages.js
index 66f771033..7055a2b86 100644
--- a/customize.dist/translations/messages.js
+++ b/customize.dist/translations/messages.js
@@ -151,6 +151,11 @@ define(function () {
out.poll_titleHint = "Title";
out.poll_descriptionHint = "Describe your poll, and use the 'publish' button when you're done. Anyone with the link can change the description, but this is discouraged.";
+ out.poll_remove = "Remove";
+ out.poll_edit = "Edit";
+ out.poll_locked = "Locked";
+ out.poll_unlocked = "Unlocked";
+
// Canvas
out.canvas_clear = "Clear";
out.canvas_delete = "Delete selection";
diff --git a/www/poll/main.js b/www/poll/main.js
index 8170f7e9d..d6522660f 100644
--- a/www/poll/main.js
+++ b/www/poll/main.js
@@ -114,7 +114,7 @@ define([
$('input[disabled="disabled"][data-rt-id^="' + id + '"]').removeAttr('disabled');
$('input[type="checkbox"][data-rt-id^="' + id + '"]').addClass('enabled');
$('[data-rt-id="' + id + '"] ~ .edit').css('visibility', 'hidden');
- $('.lock[data-rt-id="' + id + '"]').html(unlockHTML);
+ $('.lock[data-rt-id="' + id + '"]').html(unlockHTML).attr('title', Messages.poll_unlocked);
if (isOwnColumnCommitted()) { return; }
$('[data-rt-id^="' + id + '"]').closest('td').addClass("uncommitted");
@@ -132,7 +132,7 @@ define([
$('input[disabled="disabled"][data-rt-id^="' + id + '"]').removeAttr('disabled');
$('input[type="checkbox"][data-rt-id^="' + id + '"]').addClass('enabled');
$('span.edit[data-rt-id="' + id + '"]').css('visibility', 'hidden');
- $('.lock[data-rt-id="' + id + '"]').html(unlockHTML);
+ $('.lock[data-rt-id="' + id + '"]').html(unlockHTML).attr('title', Messages.poll_unlocked);
});
};
@@ -369,7 +369,7 @@ define([
if (!isKeyup && $(e.target).is('[type="text"]')) {
return;
}
- $('.lock[data-rt-id!="' + APP.userid + '"]').html(lockHTML);
+ $('.lock[data-rt-id!="' + APP.userid + '"]').html(lockHTML).attr('title', Messages.poll_lock);
var $cells = APP.$table.find('thead td:not(.uncommitted), tbody td');
$cells.find('[type="text"][data-rt-id!="' + APP.userid + '"]').attr('disabled', true);
$('.edit[data-rt-id!="' + APP.userid + '"]').css('visibility', 'visible');
diff --git a/www/poll/poll.css b/www/poll/poll.css
index 030b8898e..8016a10c4 100644
--- a/www/poll/poll.css
+++ b/www/poll/poll.css
@@ -33,7 +33,7 @@ textarea[disabled] {
border: 0px;
}
input[type="text"]::placeholder {
- color: #333;
+ color: #666;
}
table#table {
margin: 0px;
@@ -69,7 +69,7 @@ table#table {
#tableScroll {
overflow-y: hidden;
overflow-x: auto;
- margin-left: calc(30% - 50px + 29px);
+ margin-left: calc(30% - 50px + 31px);
max-width: 70%;
width: auto;
display: inline-block;
@@ -107,6 +107,9 @@ table {
tbody {
border: 1px solid #555;
}
+tbody * {
+ box-sizing: border-box;
+}
tbody tr {
text-align: center;
}
@@ -299,9 +302,13 @@ div.realtime table tbody .text-cell .remove {
float: left;
margin: 0 0 0 10px;
}
-form.realtime table tbody td label,
-div.realtime table tbody td label {
- border: 0.5px solid #555;
+form.realtime table tbody tr td:nth-child(2),
+div.realtime table tbody tr td:nth-child(2) {
+ border-left: 1px solid #555;
+}
+form.realtime table tbody tr:not(:first-child) td:not(:first-child) label,
+div.realtime table tbody tr:not(:first-child) td:not(:first-child) label {
+ border-top: 1px solid #555;
}
form.realtime table .edit,
div.realtime table .edit {
diff --git a/www/poll/poll.less b/www/poll/poll.less
index 369c44f0f..1ddcaa2f0 100644
--- a/www/poll/poll.less
+++ b/www/poll/poll.less
@@ -83,7 +83,7 @@ table#table {
#tableScroll {
overflow-y: hidden;
overflow-x: auto;
- margin-left: calc(~"30% - 50px + 29px");
+ margin-left: calc(~"30% - 50px + 31px");
max-width: 70%;
width: auto;
display: inline-block;
@@ -126,6 +126,9 @@ table {
}
tbody {
border: 1px solid @poll-border-color;
+ * {
+ box-sizing: border-box;
+ }
tr {
text-align: center;
&:first-of-type th{
@@ -326,9 +329,11 @@ form.realtime, div.realtime {
margin: 0 0 0 10px;
}
}
- td {
- label {
- border: .5px solid @poll-border-color;
+ tr:not(:first-child) {
+ td:not(:first-child) {
+ label {
+ border-top: 1px solid @poll-border-color;
+ }
}
}
}
diff --git a/www/poll/render.js b/www/poll/render.js
index dcf62079f..c0ca599a0 100644
--- a/www/poll/render.js
+++ b/www/poll/render.js
@@ -252,6 +252,7 @@ var Renderer = function (Cryptpad) {
var makeRemoveElement = Render.makeRemoveElement = function (id) {
return ['SPAN', {
'data-rt-id': id,
+ 'title': Cryptpad.Messages.poll_remove,
class: 'remove',
}, ['✖']];
};
@@ -259,6 +260,7 @@ var Renderer = function (Cryptpad) {
var makeEditElement = Render.makeEditElement = function (id) {
return ['SPAN', {
'data-rt-id': id,
+ 'title': Cryptpad.Messages.poll_edit,
class: 'edit',
}, ['✐']];
};
@@ -266,6 +268,7 @@ var Renderer = function (Cryptpad) {
var makeLockElement = Render.makeLockElement = function (id) {
return ['SPAN', {
'data-rt-id': id,
+ 'title': Cryptpad.Messages.poll_locked,
class: 'lock',
}, [['i', {
class: 'fa fa-lock',
@@ -277,14 +280,11 @@ var Renderer = function (Cryptpad) {
var makeHeadingCell = Render.makeHeadingCell = function (cell, readOnly) {
if (!cell) { return ['TD', {}, []]; }
if (cell.type === 'text') {
- var removeElement = makeRemoveElement(cell['data-rt-id']);
- var editElement = makeEditElement(cell['data-rt-id']);
- var lockElement = makeLockElement(cell['data-rt-id']);
var elements = [['INPUT', cell, []]];
if (!readOnly) {
- elements.unshift(removeElement);
- elements.unshift(lockElement);
- elements.unshift(editElement);
+ elements.unshift(makeRemoveElement(cell['data-rt-id']));
+ elements.unshift(makeLockElement(cell['data-rt-id']));
+ elements.unshift(makeEditElement(cell['data-rt-id']));
}
return ['TD', {}, elements];
}
@@ -321,12 +321,10 @@ var Renderer = function (Cryptpad) {
var makeBodyCell = Render.makeBodyCell = function (cell, readOnly) {
if (cell && cell.type === 'text') {
- var removeElement = makeRemoveElement(cell['data-rt-id']);
- var editElement = makeEditElement(cell['data-rt-id']);
var elements = [['INPUT', cell, []]];
if (!readOnly) {
- elements.push(removeElement);
- elements.push(editElement);
+ elements.push(makeRemoveElement(cell['data-rt-id']));
+ elements.push(makeEditElement(cell['data-rt-id']));
}
return ['TD', {}, [
['DIV', {class: 'text-cell'}, elements]
From c5bb8307573152c558756ebb78ec53ca3c435527 Mon Sep 17 00:00:00 2001
From: ansuz
Date: Wed, 24 May 2017 14:21:31 +0200
Subject: [PATCH 004/100] don't preview if hightlight mode is not markdown
---
www/code/main.js | 1 +
1 file changed, 1 insertion(+)
diff --git a/www/code/main.js b/www/code/main.js
index 660473ffd..9cb3cae10 100644
--- a/www/code/main.js
+++ b/www/code/main.js
@@ -111,6 +111,7 @@ define([
};
var drawPreview = Cryptpad.throttle(function () {
+ if (CodeMirror.highlightMode !== 'markdown') { return; }
DiffMd.apply(DiffMd.render(editor.getValue()), $preview);
}, 150);
From 83c0a6d37d348d80a4a3bfca781634c29e80c76a Mon Sep 17 00:00:00 2001
From: Caleb James DeLisle
Date: Wed, 24 May 2017 14:37:13 +0200
Subject: [PATCH 005/100] Romanian translation
---
customize.dist/translations/messages.ro.js | 706 +++++++++++----------
1 file changed, 357 insertions(+), 349 deletions(-)
diff --git a/customize.dist/translations/messages.ro.js b/customize.dist/translations/messages.ro.js
index 4e2134c7c..162603908 100644
--- a/customize.dist/translations/messages.ro.js
+++ b/customize.dist/translations/messages.ro.js
@@ -1,357 +1,365 @@
define(function () {
var out = {};
- /*
- *
- * ro
- *
- */
+ out.main_title = "CryptPad: Zero Knowledge, Colaborare n timp real";
+ out.main_slogan = "Puterea stă n cooperare - Colaborarea este cheia";
- out.main_title = ""; // "CryptPad: Zero Knowledge, Collaborative Real Time Editing"
- out.main_slogan = ""; // "Unity is Strength - Collaboration is Key"
- out.type = ""; // {"pad":"Rich text","code":"Code","poll":"Poll","slide":"Presentation","drive":"Drive","whiteboard":"Whiteboard","file":"File","media":"Media"}
- out.button_newpad = ""; // "New Rich Text pad"
- out.button_newcode = ""; // "New Code pad"
- out.button_newpoll = ""; // "New Poll"
- out.button_newslide = ""; // "New Presentation"
- out.button_newwhiteboard = ""; // "New Whiteboard"
- out.updated_0_common_connectionLost = ""; // "Server Connection Lost You're now in read-only mode until the connection is back."
- out.common_connectionLost = out.updated_0_common_connectionLost; // TODO: Key updated --> make sure the updated key "out.updated_0_common_connectionLost" exists and is translated before that one.
- out.websocketError = ""; // "Unable to connect to the websocket server..."
- out.typeError = ""; // "This pad is not compatible with the selected application"
- out.onLogout = ""; // "You are logged out, click here to log in or press Escape to access your pad in read-only mode."
- out.wrongApp = ""; // "Unable to display the content of that realtime session in your browser. Please try to reload that page."
- out.loading = ""; // "Loading..."
- out.error = ""; // "Error"
- out.saved = ""; // "Saved"
- out.synced = ""; // "Everything is saved"
- out.deleted = ""; // "Pad deleted from your CryptDrive"
- out.disconnected = ""; // "Disconnected"
- out.synchronizing = ""; // "Synchronizing"
- out.reconnecting = ""; // "Reconnecting..."
- out.lag = ""; // "Lag"
- out.readonly = ""; // "Read only"
- out.anonymous = ""; // "Anonymous"
- out.yourself = ""; // "Yourself"
- out.anonymousUsers = ""; // "anonymous editors"
- out.anonymousUser = ""; // "anonymous editor"
- out.users = ""; // "Users"
- out.and = ""; // "And"
- out.viewer = ""; // "viewer"
- out.viewers = ""; // "viewers"
- out.editor = ""; // "editor"
- out.editors = ""; // "editors"
- out.language = ""; // "Language"
- out.upgrade = ""; // "Upgrade"
- out.upgradeTitle = ""; // "Upgrade your account to increase the storage limit"
- out.MB = ""; // "MB"
- out.greenLight = ""; // "Everything is working fine"
- out.orangeLight = ""; // "Your slow connection may impact your experience"
- out.redLight = ""; // "You are disconnected from the session"
- out.pinLimitReached = ""; // "You've reached your storage limit"
- out.pinLimitReachedAlert = ""; // "You've reached your storage limit. New pads won't be stored in your CryptDrive. To fix this problem, you can either remove pads from your CryptDrive (including the trash) or subscribe to a premium offer to increase your limit."
- out.pinLimitNotPinned = ""; // "You've reached your storage limit. This pad is not stored in your CryptDrive."
- out.pinLimitDrive = ""; // "You've reached your storage limit. You can't create new pads."
- out.importButtonTitle = ""; // "Import a pad from a local file"
- out.exportButtonTitle = ""; // "Export this pad to a local file"
- out.exportPrompt = ""; // "What would you like to name your file?"
- out.changeNamePrompt = ""; // "Change your name (leave empty to be anonymous): "
- out.user_rename = ""; // "Change display name"
- out.user_displayName = ""; // "Display name"
- out.user_accountName = ""; // "Account name"
- out.clickToEdit = ""; // "Click to edit"
- out.forgetButtonTitle = ""; // "Move this pad to the trash"
- out.forgetPrompt = ""; // "Clicking OK will move this pad to your trash. Are you sure?"
- out.movedToTrash = ""; // "That pad has been moved to the trash. Access my Drive"
- out.shareButton = ""; // "Share"
- out.shareSuccess = ""; // "Copied link to clipboard"
- out.newButton = ""; // "New"
- out.newButtonTitle = ""; // "Create a new pad"
- out.saveTemplateButton = ""; // "Save as template"
- out.saveTemplatePrompt = ""; // "Choose a title for the template"
- out.templateSaved = ""; // "Template saved!"
- out.selectTemplate = ""; // "Select a template or press escape"
- out.presentButtonTitle = ""; // "Enter presentation mode"
- out.presentSuccess = ""; // "Hit ESC to exit presentation mode"
- out.backgroundButtonTitle = ""; // "Change the background color in the presentation"
- out.colorButtonTitle = ""; // "Change the text color in presentation mode"
- out.printButton = ""; // "Print (enter)"
- out.printButtonTitle = ""; // "Print your slides or export them as a PDF file"
- out.printOptions = ""; // "Layout options"
- out.printSlideNumber = ""; // "Display the slide number"
- out.printDate = ""; // "Display the date"
- out.printTitle = ""; // "Display the pad title"
- out.printCSS = ""; // "Custom style rules (CSS):"
- out.printTransition = ""; // "Enable transition animations"
- out.slideOptionsTitle = ""; // "Customize your slides"
- out.slideOptionsButton = ""; // "Save (enter)"
- out.editShare = ""; // "Editing link"
- out.editShareTitle = ""; // "Copy the editing link to clipboard"
- out.editOpen = ""; // "Open editing link in a new tab"
- out.editOpenTitle = ""; // "Open this pad in editing mode in a new tab"
- out.viewShare = ""; // "Read-only link"
- out.viewShareTitle = ""; // "Copy the read-only link to clipboard"
- out.viewOpen = ""; // "Open read-only link in a new tab"
- out.viewOpenTitle = ""; // "Open this pad in read-only mode in a new tab"
- out.notifyJoined = ""; // "{0} has joined the collaborative session"
- out.notifyRenamed = ""; // "{0} is now known as {1}"
- out.notifyLeft = ""; // "{0} has left the collaborative session"
- out.okButton = ""; // "OK (enter)"
- out.cancel = ""; // "Cancel"
- out.cancelButton = ""; // "Cancel (esc)"
- out.historyButton = ""; // "Display the document history"
- out.history_next = ""; // "Go to the next version"
- out.history_prev = ""; // "Go to the previous version"
- out.history_goTo = ""; // "Go to the selected version"
- out.history_close = ""; // "Back"
- out.history_closeTitle = ""; // "Close the history"
- out.history_restore = ""; // "Restore"
- out.history_restoreTitle = ""; // "Restore the selected version of the document"
- out.history_restorePrompt = ""; // "Are you sure you want to replace the current version of the document by the displayed one?"
- out.history_restoreDone = ""; // "Document restored"
- out.history_version = ""; // "Version:"
- out.poll_title = ""; // "Zero Knowledge Date Picker"
- out.poll_subtitle = ""; // "Zero Knowledge, realtime scheduling"
- out.poll_p_save = ""; // "Your settings are updated instantly, so you never need to save."
- out.poll_p_encryption = ""; // "All your input is encrypted so only people who have the link can access it. Even the server cannot see what you change."
- out.wizardLog = ""; // "Click the button in the top left to return to your poll"
- out.wizardTitle = ""; // "Use the wizard to create your poll"
- out.wizardConfirm = ""; // "Are you really ready to add these options to your poll?"
- out.poll_publish_button = ""; // "Publish"
- out.poll_admin_button = ""; // "Admin"
- out.poll_create_user = ""; // "Add a new user"
- out.poll_create_option = ""; // "Add a new option"
- out.poll_commit = ""; // "Commit"
- out.poll_closeWizardButton = ""; // "Close wizard"
- out.poll_closeWizardButtonTitle = ""; // "Close wizard"
- out.poll_wizardComputeButton = ""; // "Compute Options"
- out.poll_wizardClearButton = ""; // "Clear Table"
- out.poll_wizardDescription = ""; // "Automatically create a number of options by entering any number of dates and times segments"
- out.poll_wizardAddDateButton = ""; // "+ Dates"
- out.poll_wizardAddTimeButton = ""; // "+ Times"
- out.poll_optionPlaceholder = ""; // "Option"
- out.poll_userPlaceholder = ""; // "Your name"
- out.poll_removeOption = ""; // "Are you sure you'd like to remove this option?"
- out.poll_removeUser = ""; // "Are you sure you'd like to remove this user?"
- out.poll_titleHint = ""; // "Title"
- out.poll_descriptionHint = ""; // "Describe your poll, and use the 'publish' button when you're done. Anyone with the link can change the description, but this is discouraged."
- out.canvas_clear = ""; // "Clear"
- out.canvas_delete = ""; // "Delete selection"
- out.canvas_disable = ""; // "Disable draw"
- out.canvas_enable = ""; // "Enable draw"
- out.canvas_width = ""; // "Width"
- out.canvas_opacity = ""; // "Opacity"
- out.fm_rootName = ""; // "Documents"
- out.fm_trashName = ""; // "Trash"
- out.fm_unsortedName = ""; // "Unsorted files"
- out.fm_filesDataName = ""; // "All files"
- out.fm_templateName = ""; // "Templates"
- out.fm_searchName = ""; // "Search"
- out.fm_searchPlaceholder = ""; // "Search..."
- out.fm_newButton = ""; // "New"
- out.fm_newButtonTitle = ""; // "Create a new pad or folder"
- out.fm_newFolder = ""; // "New folder"
- out.fm_newFile = ""; // "New pad"
- out.fm_folder = ""; // "Folder"
- out.fm_folderName = ""; // "Folder name"
- out.fm_numberOfFolders = ""; // "# of folders"
- out.fm_numberOfFiles = ""; // "# of files"
- out.fm_fileName = ""; // "File name"
- out.fm_title = ""; // "Title"
- out.fm_type = ""; // "Type"
- out.fm_lastAccess = ""; // "Last access"
- out.fm_creation = ""; // "Creation"
- out.fm_forbidden = ""; // "Forbidden action"
- out.fm_originalPath = ""; // "Original path"
- out.fm_openParent = ""; // "Show in folder"
- out.fm_noname = ""; // "Untitled Document"
- out.fm_emptyTrashDialog = ""; // "Are you sure you want to empty the trash?"
- out.fm_removeSeveralPermanentlyDialog = ""; // "Are you sure you want to remove these {0} elements from the trash permanently?"
- out.fm_removePermanentlyDialog = ""; // "Are you sure you want to remove that element permanently?"
- out.fm_removeSeveralDialog = ""; // "Are you sure you want to move these {0} elements to the trash?"
- out.fm_removeDialog = ""; // "Are you sure you want to move {0} to the trash?"
- out.fm_restoreDialog = ""; // "Are you sure you want to restore {0} to its previous location?"
- out.fm_unknownFolderError = ""; // "The selected or last visited directory no longer exist. Opening the parent folder..."
- out.fm_contextMenuError = ""; // "Unable to open the context menu for that element. If the problem persist, try to reload the page."
- out.fm_selectError = ""; // "Unable to select the targetted element. If the problem persist, try to reload the page."
- out.fm_categoryError = ""; // "Unable to open the selected category, displaying root."
- out.fm_info_root = ""; // "Create as many nested folders here as you want to sort your files."
- out.fm_info_unsorted = ""; // "Contains all the files you've visited that are not yet sorted in \"Documents\" or moved to the \"Trash\"."
- out.fm_info_template = ""; // "Contains all the pads stored as templates and that you can re-use when you create a new pad."
- out.fm_info_trash = ""; // "Files deleted from the trash are also removed from \"All files\" and it is impossible to recover them from the file manager."
- out.fm_info_allFiles = ""; // "Contains all the files from \"Documents\", \"Unsorted\" and \"Trash\". You can't move or remove files from here."
- out.fm_info_login = ""; // "Log in"
- out.fm_info_register = ""; // "Sign up"
- out.fm_info_anonymous = ""; // "You are not logged in so these pads may be deleted (find out why). Sign up or Log in to keep them alive."
- out.fm_alert_backupUrl = ""; // "Backup link for this drive. It is highly recommended that you keep ip for yourself only. You can use it to retrieve all your files in case your browser memory got erased. Anybody with that link can edit or remove all the files in your file manager. "
- out.fm_alert_anonymous = ""; // "Hello there, you are currently using CryptPad anonymously, that's ok but your pads may be deleted after a period of inactivity. We have disabled advanced features of the drive for anonymous users because we want to be clear that it is not a safe place to store things. You can read more about why we are doing this and why you really should Sign up and Log in."
- out.fm_backup_title = ""; // "Backup link"
- out.fm_nameFile = ""; // "How would you like to name that file?"
- out.fc_newfolder = ""; // "New folder"
- out.fc_rename = ""; // "Rename"
- out.fc_open = ""; // "Open"
- out.fc_open_ro = ""; // "Open (read-only)"
- out.fc_delete = ""; // "Delete"
- out.fc_restore = ""; // "Restore"
- out.fc_remove = ""; // "Delete permanently"
- out.fc_empty = ""; // "Empty the trash"
- out.fc_prop = ""; // "Properties"
- out.fc_sizeInKilobytes = ""; // "Size in Kilobytes"
- out.fo_moveUnsortedError = ""; // "You can't move a folder to the list of unsorted pads"
- out.fo_existingNameError = ""; // "Name already used in that directory. Please choose another one."
- out.fo_moveFolderToChildError = ""; // "You can't move a folder into one of its descendants"
- out.fo_unableToRestore = ""; // "Unable to restore that file to its original location. You can try to move it to a new location."
- out.fo_unavailableName = ""; // "A file or a folder with the same name already exist at the new location. Rename the element and try again."
- out.login_login = ""; // "Log in"
- out.login_makeAPad = ""; // "Create a pad anonymously"
- out.login_nologin = ""; // "Browse local pads"
- out.login_register = ""; // "Sign up"
- out.logoutButton = ""; // "Log out"
- out.settingsButton = ""; // "Settings"
- out.login_username = ""; // "Username"
- out.login_password = ""; // "Password"
- out.login_confirm = ""; // "Confirm your password"
- out.login_remember = ""; // "Remember me"
- out.login_hashing = ""; // "Hashing your password, this might take some time."
- out.login_hello = ""; // "Hello {0},"
- out.login_helloNoName = ""; // "Hello,"
- out.login_accessDrive = ""; // "Access your drive"
- out.login_orNoLogin = ""; // "or"
- out.login_noSuchUser = ""; // "Invalid username or password. Try again, or sign up"
- out.login_invalUser = ""; // "Username required"
- out.login_invalPass = ""; // "Password required"
- out.login_unhandledError = ""; // "An unexpected error occurred :("
- out.register_importRecent = ""; // "Import pad history (Recommended)"
- out.register_acceptTerms = ""; // "I accept the terms of service"
- out.register_passwordsDontMatch = ""; // "Passwords do not match!"
- out.register_mustAcceptTerms = ""; // "You must accept the terms of service."
- out.register_mustRememberPass = ""; // "We cannot reset your password if you forget it. It's very important that you remember it! Please check the checkbox to confirm."
- out.register_header = ""; // "Welcome to CryptPad"
- out.register_explanation = ""; // "
Lets go over a couple things first
Your password is your secret key which encrypts all of your pads. If you lose it there is no way we can recover your data.
You can import pads which were recently viewed in your browser so you have them in your account.
If you are using a shared computer, you need to log out when you are done, closing the tab is not enough.
"
- out.register_writtenPassword = ""; // "I have written down my username and password, proceed"
- out.register_cancel = ""; // "Go back"
- out.register_warning = ""; // "Zero Knowledge means that we can't recover your data if you lose your password."
- out.register_alreadyRegistered = ""; // "This user already exists, do you want to log in?"
- out.settings_title = ""; // "Settings"
- out.settings_save = ""; // "Save"
- out.settings_backupTitle = ""; // "Backup or restore all your data"
- out.settings_backup = ""; // "Backup"
- out.settings_restore = ""; // "Restore"
- out.settings_resetTitle = ""; // "Clean your drive"
- out.settings_reset = ""; // "Remove all the files and folders from your CryptDrive"
- out.settings_resetPrompt = ""; // "This action will remove all the pads from your drive. Are you sure you want to continue? Type “I love CryptPad” to confirm."
- out.settings_resetDone = ""; // "Your drive is now empty!"
- out.settings_resetError = ""; // "Incorrect verification text. Your CryptDrive has not been changed."
- out.settings_resetTips = ""; // "Tips in CryptDrive"
- out.settings_resetTipsButton = ""; // "Reset the available tips in CryptDrive"
- out.settings_resetTipsDone = ""; // "All the tips are now visible again."
- out.settings_importTitle = ""; // "Import this browser's recent pads in my CryptDrive"
- out.settings_import = ""; // "Import"
- out.settings_importConfirm = ""; // "Are you sure you want to import recent pads from this browser to your user account's CryptDrive?"
- out.settings_importDone = ""; // "Import completed"
- out.settings_userFeedbackHint1 = ""; // "CryptPad provides some very basic feedback to the server, to let us know how to improve your experience."
- out.settings_userFeedbackHint2 = ""; // "Your pad's content will never be shared with the server."
- out.settings_userFeedback = ""; // "Enable user feedback"
- out.settings_anonymous = ""; // "You are not logged in. Settings here are specific to this browser."
- out.settings_publicSigningKey = ""; // "Public Signing Key"
- out.settings_usage = ""; // "Usage"
- out.settings_usageTitle = ""; // "See the total size of your pinned pads in MB"
- out.settings_pinningNotAvailable = ""; // "Pinned pads are only available to registered users."
- out.settings_pinningError = ""; // "Something went wrong"
- out.settings_usageAmount = ""; // "Your pinned pads occupy {0}MB"
- out.settings_logoutEverywhereTitle = ""; // "Log out everywhere"
- out.settings_logoutEverywhere = ""; // "Log out of all other web sessions"
- out.settings_logoutEverywhereConfirm = ""; // "Are you sure? You will need to log in with all your devices."
- out.upload_serverError = ""; // "Server Error: unable to upload your file at this time."
- out.upload_uploadPending = ""; // "You already have an upload in progress. Cancel it and upload your new file?"
- out.upload_success = ""; // "Your file ({0}) has been successfully uploaded and added to your drive"
- out.main_p2 = ""; // "This project uses the CKEditor Visual Editor, CodeMirror, and the ChainPad realtime engine."
- out.main_howitworks_p1 = ""; // "CryptPad uses a variant of the Operational transformation algorithm which is able to find distributed consensus using a Nakamoto Blockchain, a construct popularized by Bitcoin. This way the algorithm can avoid the need for a central server to resolve Operational Transform Edit Conflicts and without the need for resolving conflicts, the server can be kept unaware of the content which is being edited on the pad."
- out.main_about_p2 = ""; // "If you have any questions or comments, you can tweet us, open an issue on github, come say hi on irc (irc.freenode.net), or send us an email."
- out.main_info = ""; // "
Collaborate in Confidence
Grow your ideas together with shared documents while Zero Knowledge technology secures your privacy; even from us."
- out.main_howitworks = ""; // "How It Works"
- out.main_zeroKnowledge = ""; // "Zero Knowledge"
- out.main_zeroKnowledge_p = ""; // "You don't have to trust that we won't look at your pads, with CryptPad's revolutionary Zero Knowledge Technology we can't. Learn more about how we protect your Privacy and Security."
- out.main_writeItDown = ""; // "Write it down"
- out.main_writeItDown_p = ""; // "The greatest projects come from the smallest ideas. Take down the moments of inspiration and unexpected ideas because you never know which one might be a breakthrough."
- out.main_share = ""; // "Share the link, share the pad"
- out.main_share_p = ""; // "Grow your ideas together: conduct efficient meetings, collaborate on TODO lists and make quick presentations with all your friends and all your devices."
- out.main_organize = ""; // "Get organized"
- out.main_organize_p = ""; // "With CryptPad Drive, you can keep your sights on what's important. Folders allow you to keep track of your projects and have a global vision of where things are going."
- out.tryIt = ""; // "Try it out!"
- out.main_richText = ""; // "Rich Text editor"
- out.main_richText_p = ""; // "Edit rich text pads collaboratively with our realtime Zero Knowledge CkEditor application."
- out.main_code = ""; // "Code editor"
- out.main_code_p = ""; // "Edit code from your software collaboratively with our realtime Zero Knowledge CodeMirror application."
- out.main_slide = ""; // "Slide editor"
- out.main_slide_p = ""; // "Create your presentations using the Markdown syntax, and display them in your browser."
- out.main_poll = ""; // "Polls"
- out.main_poll_p = ""; // "Plan your meeting or your event, or vote for the best solution regarding your problem."
- out.main_drive = ""; // "CryptDrive"
- out.footer_applications = ""; // "Applications"
- out.footer_contact = ""; // "Contact"
- out.footer_aboutUs = ""; // "About us"
- out.about = ""; // "About"
- out.privacy = ""; // "Privacy"
- out.contact = ""; // "Contact"
- out.terms = ""; // "ToS"
- out.blog = ""; // "Blog"
- out.policy_title = ""; // "CryptPad Privacy Policy"
- out.policy_whatweknow = ""; // "What we know about you"
- out.policy_whatweknow_p1 = ""; // "As an application that is hosted on the web, CryptPad has access to metadata exposed by the HTTP protocol. This includes your IP address, and various other HTTP headers that can be used to identify your particular browser. You can see what information your browser is sharing by visiting WhatIsMyBrowser.com."
- out.policy_whatweknow_p2 = ""; // "We use Kibana, an open source analytics platform, to learn more about our users. Kibana tells us about how you found CryptPad, via direct entry, through a search engine, or via a referral from another web service like Reddit or Twitter."
- out.policy_howweuse = ""; // "How we use what we learn"
- out.policy_howweuse_p1 = ""; // "We use this information to make better decisions about promoting CryptPad, by evaluating which of our past efforts were successful. Information about your location lets us know whether we should consider providing better support for languages other than English."
- out.policy_howweuse_p2 = ""; // "Information about your browser (whether it's a desktop or mobile operating system) helps us make decisions when prioritizing feature improvements. Our development team is small, and we try to make choices that will improve as many users' experience as possible."
- out.policy_whatwetell = ""; // "What we tell others about you"
- out.policy_whatwetell_p1 = ""; // "We do not furnish to third parties the information that we gather or that you provide to us unless we are legally required to do so."
- out.policy_links = ""; // "Links to other sites"
- out.policy_links_p1 = ""; // "This site contains links to other sites, including those produced by other organizations. We are not responsible for the privacy practices or the contents of any outside sites. As a general rule, links to outside sites are launched in a new browser window, to make clear that you are leaving CryptPad.fr."
- out.policy_ads = ""; // "Advertisement"
- out.policy_ads_p1 = ""; // "We do not display any online advertising, though we may link to the bodies which are financing our research."
- out.policy_choices = ""; // "Choices you have"
- out.policy_choices_open = ""; // "Our code is open source, so you always have the option of hosting your own instance of CryptPad."
- out.policy_choices_vpn = ""; // "If you want to use our hosted instance, but don't want to expose your IP address, you can protect your IP using the Tor browser bundle, or a VPN."
- out.policy_choices_ads = ""; // "If you just want to block our analytics platform, you can use adblocking tools like Privacy Badger."
- out.tos_title = ""; // "CryptPad Terms of Service"
- out.tos_legal = ""; // "Please don't be malicious, abusive, or do anything illegal."
- out.tos_availability = ""; // "We hope you find this service useful, but availability or performance cannot be guaranteed. Please export your data regularly."
- out.tos_e2ee = ""; // "CryptPad contents can be read or modified by anyone who can guess or otherwise obtain the pad's fragment identifier. We recommend that you use end-to-end-encrypted (e2ee) messaging technology to share links, and assume no liability in the event that such a link is leaked."
- out.tos_logs = ""; // "Metadata provided by your browser to the server may be logged for the purpose of maintaining the service."
- out.tos_3rdparties = ""; // "We do not provide individualized data to third parties unless required to by law."
- out.bottom_france = ""; // "Made with in "
- out.bottom_support = ""; // "An Labs Project with the support of "
- out.header_france = ""; // "With from by "
- out.header_support = ""; // ""
- out.header_logoTitle = ""; // "Go to the main page"
- out.initialState = ""; // "
This is CryptPad, the Zero Knowledge realtime collaborative editor. Everything is saved as you type. Share the link to this pad to edit with friends or use the Share button to share a read-only link which allows viewing but not editing.
Go ahead, just start typing...
"
- out.codeInitialState = ""; // "/*\n This is the CryptPad Zero Knowledge collaborative code editor.\n What you type here is encrypted so only people who have the link can access it.\n You can choose the programming language to highlight and the UI color scheme in the upper right.\n*/"
- out.slideInitialState = ""; // "# CryptSlide\n* This is a zero knowledge realtime collaborative editor.\n* What you type here is encrypted so only people who have the link can access it.\n* Even the server cannot see what you type.\n* What you see here, what you hear here, when you leave here, let it stay here.\n\n---\n# How to use\n1. Write your slides content using markdown syntax\n - Learn more about markdown syntax [here](http://www.markdowntutorial.com/)\n2. Separate your slides with ---\n3. Click on the \"Play\" button to see the result - Your slides are updated in realtime"
- out.driveReadmeTitle = ""; // "What is CryptDrive?"
- out.readme_welcome = ""; // "Welcome to CryptPad !"
- out.readme_p1 = ""; // "Welcome to CryptPad, this is where you can take note of things alone and with friends."
- out.readme_p2 = ""; // "This pad will give you a quick walk through of how you can use CryptPad to take notes, keep them organized and work together on them."
- out.readme_cat1 = ""; // "Get to know your CryptDrive"
- out.readme_cat1_l1 = ""; // "Make a pad: In your CryptDrive, click {0} then {1} and you can make a pad."
- out.readme_cat1_l2 = ""; // "Open Pads from your CryptDrive: double-click on a pad icon to open it."
- out.readme_cat1_l3 = ""; // "Organize your pads: When you are logged in, every pad you access will be shown as in the {0} section of your drive."
- out.readme_cat1_l3_l1 = ""; // "You can click and drag files into folders in the {0} section of your drive and make new folders."
- out.readme_cat1_l3_l2 = ""; // "Remember to try right clicking on icons because there are often additional menus."
- out.readme_cat1_l4 = ""; // "Put old pads in the trash: You can click and drag your pads into the {0} the same way you drag them into folders."
- out.readme_cat2 = ""; // "Make pads like a pro"
- out.edit = ""; // "edit"
- out.view = ""; // "view"
- out.readme_cat2_l1 = ""; // "The {0} button in your pad allows you to give access to collaborators to either {1} or to {2} the pad."
- out.readme_cat2_l2 = ""; // "Change the title of the pad by clicking on the pencil"
- out.readme_cat3 = ""; // "Discover CryptPad apps"
- out.readme_cat3_l1 = ""; // "With CryptPad code editor, you can collaborate on code like Javascript and markdown like HTML and Markdown"
- out.readme_cat3_l2 = ""; // "With CryptPad slide editor, you can make quick presentations using Markdown"
- out.readme_cat3_l3 = ""; // "With CryptPoll you can take quick votes, especially for scheduling meetings which fit with everybody's calendar"
- out.tips = ""; // {"lag":"The green icon in the upper right shows the quality of your internet connection to the CryptPad server.","shortcuts":"`ctrl+b`, `ctrl+i` and `ctrl+u` are quick shortcuts for bold, italic and underline.","indent":"In numbered and bulleted lists, you can use tab or shift+tab to quickly increase or decrease indentation.","title":"You can set the title of your pad by clicking the top center.","store":"Every time you visit a pad, if you're logged in it will be saved to your CryptDrive.","marker":"You can highlight text in a pad using the \"marker\" item in the styles dropdown menu."}
- out.feedback_about = ""; // "If you're reading this, you were probably curious why CryptPad is requesting web pages when you perform certain actions"
- out.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."
- out.feedback_optout = ""; // "If you would like to opt out, visit your user settings page, where you'll find a checkbox to enable or disable user feedback"
+ out.type = {};
+ out.pad = "Rich text";
+ out.code = "Code";
+ out.poll = "Poll";
+ out.slide = "Presentation";
+ out.drive = "Drive";
+ out.whiteboard = "Whiteboard";
+ out.file = "File";
+ out.media = "Media";
+ out.button_newpad = "Filă Text Nouă";
+ out.button_newcode = "Filă Cod Nouă";
+ out.button_newpoll = "Sondaj Nou";
+ out.button_newslide = "Prezentare Noua";
+ out.button_newwhiteboard = "Fila Desen Noua";
+ out.updated_0_common_connectionLost = "Conexiunea la server este pierdută Până la revenirea conexiunii, vei fi n modul citire";
+ out.common_connectionLost = out.updated_0_common_connectionLost;
+ out.websocketError = "Conexiune inexistentă către serverul websocket...";
+ out.typeError = "Această filă nu este compatibilă cu aplicația aleasă";
+ out.onLogout = "Nu mai ești autentificat, apasă aici să te autentifici sau apasă Escapesă accesezi fila n modul citire.";
+ out.wrongApp = "Momentan nu putem arăta conținutul sesiunii n timp real n fereastra ta. Te rugăm rencarcă pagina.";
+ out.loading = "Încarcă..."
+ out.error = "Eroare";
+
+ out.saved = "Salvat";
+ out.synced = "Totul a fost salvat";
+ out.deleted = "Pad șters din CryptDrive-ul tău";
+ out.disconnected = "Deconectat";
+ out.synchronizing = "Se sincronizează";
+ out.reconnecting = "Reconectare...";
+ out.lag = "Decalaj";
+ out.readonly = "Mod citire";
+ out.anonymous = "Anonim";
+ out.yourself = "Tu";
+ out.anonymousUsers = "editori anonimi";
+ out.anonymousUser = "editor anonim";
+ out.users = "Utilizatori";
+ out.and = "Și";
+ out.viewer = "privitor";
+ out.viewers = "privitori";
+ out.editor = "editor";
+ out.editors = "editori";
+ out.language = "Limba";
+ out.upgrade = "Actualizare";
+ out.upgradeTitle = "Actualizează-ți contul pentru a mări limita de stocare";
+ out.MB = "MB";
+ out.greenLight = "Totul funcționează corespunzător";
+ out.orangeLight = "Conexiunea lentă la internet ți poate afecta experiența";
+ out.redLight = "Ai fost deconectat de la sesiune";
+ out.pinLimitReached = "Ai atins limita de stocare";
+ out.pinLimitReachedAlert = "Ai atins limita de stocare. Noile pad-uri nu vor mai fi stocate n CryptDrive. Pentru a rezolva această problemă, poți să nlături pad-uri din CryptDrive-ul tău (incluzând gunoiul) sau să subscrii la un pachet premium pentru a ți extinde spațiul de stocare.";
+ out.pinLimitNotPinned = "Ai atins limita de stocare. Acest pad nu va fi stocat n CryptDrive-ul tău.";
+ out.pinLimitDrive = "Ai atins limita de stocare. Nu poți să creezi alte pad-uri.";
+ out.importButtonTitle = "Importă un pad dintr-un fișier local";
+ out.exportButtonTitle = "Exportă pad-ul acesta către un fișier local";
+ out.exportPrompt = "Cum ai vrea să ți denumești fișierul?";
+ out.changeNamePrompt = "Schimbă-ți numele (lasă necompletat dacă vrei să fii anonim): ";
+ out.user_rename = "Schimbă numele afișat";
+ out.user_displayName = "Nume afișat";
+ out.user_accountName = "Nume cont";
+ out.clickToEdit = "Click pentru editare";
+ out.forgetButtonTitle = "Mută acest pad la gunoi";
+ out.forgetPrompt = "Click-ul pe OK va muta acest pad la gunoi. Ești sigur?";
+ out.movedToTrash = "Acest pad a fost mutat la gunoi. Acesează-mi Drive-ul";
+ out.shareButton = "Distribuie";
+ out.shareSuccess = "Link copiat n clipboard";
+ out.newButton = "Nou";
+ out.newButtonTitle = "Crează un nou pad";
+ out.saveTemplateButton = "Salvează ca șablon";
+ out.saveTemplatePrompt = "Alege un titlu pentru șablon";
+ out.templateSaved = "Șablon salvat!";
+ out.selectTemplate = "Selectează un șablon sau apasă escape";
+ out.presentButtonTitle = "Intră n modul de prezentare";
+ out.presentSuccess = "Apasă ESC pentru a ieși din modul de prezentare";
+ out.backgroundButtonTitle = "Schimbă culoarea de fundal din prezentare";
+ out.colorButtonTitle = "Schimbă culoarea textului n modul de prezentare";
+ out.printButton = "Printează (enter)";
+ out.printButtonTitle = "Printează-ți slide-urile sau exportă-le ca fișier PDF";
+ out.printOptions = "Opțiuni schemă";
+ out.printSlideNumber = "Afișează numărul slide-ului";
+ out.printDate = "Afișează data";
+ out.printTitle = "Afișează titlul pad-ului";
+ out.printCSS = "Reguli de stil personalizate (CSS):";
+ out.printTransition = "Permite tranziția animațiilor";
+ out.slideOptionsTitle = "Personalizează-ți slide-urile";
+ out.slideOptionsButton = "Salvează (enter)";
+ out.editShare = "Editează link-ul";
+ out.editShareTitle = "Copiază link-ul de editare n clipboard";
+ out.editOpen = "Deschide link-ul de editare ntr-o nouă filă";
+ out.editOpenTitle = "Deschide acest pad n modul de editare ntr-o nouă filă";
+ out.viewShare = "Link n modul citire";
+ out.viewShareTitle = "Copiază link-ul n modul de citire n clipboard";
+ out.viewOpen = "Deschide link-ul n modul de citire ntr-o filă nouă";
+ out.viewOpenTitle = "Deschide acest pad n modul de citire ntr-o nouă filă";
+ out.notifyJoined = "{0} s-au alăturat sesiunii colaborative";
+ out.notifyRenamed = "{0} e cunoscut ca {1}";
+ out.notifyLeft = "{0} au părăsit sesiunea colaborativă";
+ out.okButton = "OK (enter)";
+ out.cancel = "Anulează";
+ out.cancelButton = "Anulează (esc)";
+ out.historyButton = "Afișează istoricul documentului";
+ out.history_next = "Mergi la versiunea următoare";
+ out.history_prev = "Mergi la versiunea trecută";
+ out.history_goTo = "Mergi la sesiunea selectată";
+ out.history_close = "Înapoi";
+ out.history_closeTitle = "Închide istoricul";
+ out.history_restore = "Restabilește";
+ out.history_restoreTitle = "Restabilește versiunea selectată a documentului";
+ out.history_restorePrompt = "Ești sigur că vrei să nlocuiești versiunea curentă a documentului cu cea afișată?";
+ out.history_restoreDone = ""; "Document restabilit";
+ out.history_version = "Versiune:";
+ out.poll_title = "Zero Knowledge Selector Dată";
+ out.poll_subtitle = "Zero Knowledge, realtime programare";
+ out.poll_p_save = "Setările tale sunt actualizate instant, așa că tu nu trebuie să salvezi.";
+ out.poll_p_encryption = "Tot conținutul tău este criptat ca doar persoanele cărora tu le dai link-ul să aibă acces. Nici chiar serverul nu poate să vadă ce modifici.";
+ out.wizardLog = "Click pe butonul din dreapta sus pentru a te ntoarce la sondajul tău";
+ out.wizardTitle = "Folosește wizard-ul pentru a crea sondajul tău";
+ out.wizardConfirm = "Ești pregătit să adaugi aceste opțiuni la sondajul tău?";
+ out.poll_publish_button = "Publică";
+ out.poll_admin_button = "Admin";
+ out.poll_create_user = "Adaugă un nou utilizator";
+ out.poll_create_option = "Adaugă o nouă opțiune";
+ out.poll_commit = "Comite";
+ out.poll_closeWizardButton = "Închide wizard-ul";
+ out.poll_closeWizardButtonTitle = "Închide wizard-ul";
+ out.poll_wizardComputeButton = "Calculează Opțiunile";
+ out.poll_wizardClearButton = "Curăță Tabelul";
+ out.poll_wizardDescription = "Crează automat un număr de opțiuni introducând orice număr de zile sau intervale orare";
+
+ out.poll_wizardAddDateButton = "+ Zi";
+ out.poll_wizardAddTimeButton = "+ Ore";
+ out.poll_optionPlaceholder = "Opțiune";
+ out.poll_userPlaceholder = "Numele tău";
+ out.poll_removeOption = "Ești sigur că vrei să ndepărtezi această opțiune?";
+ out.poll_removeUser = "Ești sigur că vrei să ndepărtezi aceast utilizator?";
+ out.poll_titleHint = "Titlu";
+ out.poll_descriptionHint = "Descrie sondajul, și apoi folosește butonul 'publică' când ai terminat. Orice utilizator care are link-ul poate modifica descrierea, dar descurajăm această practică.";
+ out.canvas_clear = "Curăță";
+ out.canvas_delete = "Curăță selecția";
+ out.canvas_disable = "Dezactivează modul desen";
+ out.canvas_enable = "Activează modul desen";
+ out.canvas_width = "Lățime";
+ out.canvas_opacity = "Opacitate";
+ out.fm_rootName = "Documente";
+ out.fm_trashName = "Gunoi";
+ out.fm_unsortedName = "Fișiere nesortate";
+ out.fm_filesDataName = "Toate fișierele";
+ out.fm_templateName = "Șabloane";
+ out.fm_searchName = "Caută";
+ out.fm_searchPlaceholder = "Caută...";
+ out.fm_newButton = "Nou";
+ out.fm_newButtonTitle = "Crează un nou pad sau folder";
+ out.fm_newFolder = "Folder nou";
+ out.fm_newFile = "Pad nou";
+ out.fm_folder = "Folder";
+ out.fm_folderName = "Numele folderului";
+ out.fm_numberOfFolders = "# de foldere";
+ out.fm_numberOfFiles = "# of files";
+ out.fm_fileName = "File name";
+ out.fm_title = "Titlu";
+ out.fm_type = "Tip";
+ out.fm_lastAccess = "Ultima accesare";
+ out.fm_creation = "Creare";
+ out.fm_forbidden = "Acțiune interzisă";
+ out.fm_originalPath = "Ruta inițială";
+ out.fm_openParent = "Arată n folder";
+ out.fm_noname = "Document nedenumit";
+ out.fm_emptyTrashDialog = "Ești sigur că vrei să golești coșul de gunoi?";
+ out.fm_removeSeveralPermanentlyDialog = "Ești sigur că vrei să ștergi pentru totdeauna aceste {0} elements din coșul de gunoi?";
+ out.fm_removePermanentlyDialog = "Ești sigur că vrei să ștergi acest element pentru totdeauna?";
+ out.fm_removeSeveralDialog = "Ești sigur că vrei să muți aceste {0} elemente la coșul de gunoi?";
+ out.fm_removeDialog = "Ești sigur că vrei să muți {0} la gunoi?";
+ out.fm_restoreDialog = "Ești sigur că vrei să restabilești {0} n locația trecută?";
+ out.fm_unknownFolderError = "Ultima locație vizitată sau cea selectată nu mai există. Deschidem fișierul părinte...";
+ out.fm_contextMenuError = "Nu putem deschide meniul de context pentru acest element. Dacă problema persistă, rencarcă pagina.";
+ out.fm_selectError = "Nu putem selecta elementul vizat. Dacă Unable to select the targeted element. Dacă problema persistă, rencarcă pagina.";
+ out.fm_categoryError = "Nu putem deschide categoria selectată, afișează sursa.";
+ out.fm_info_root = "Crează câte foldere tip cuib ai nevoie pentru a ți sorta fișierele.";
+ out.fm_info_unsorted = "Conține toate fișierele pe care le-ai vizitat și nu sunt sortate n \"Documente\" sau mutate n \"Gunoi\".";
+ out.fm_info_template = "Conține toate pad-urile stocate ca șabloane și pe care le poți refolosi atunci când creezi un nou pad.";
+ out.fm_info_trash = "Fișierele șterse din gunoi vor fi șterse și din \"Toate fișierele\", făcând imposibilă recuperarea fișierelor din managerul de fișiere.";
+ out.fm_info_allFiles = "Conține toate fișierele din \"Documente\", \"Nesortate\" și \"Gunoi\". Poți să muți sau să ștergi fișierele aici.";
+ out.fm_info_login = ""; "Loghează-te";
+ out.fm_info_register = "Înscrie-te";
+ out.fm_info_anonymous = "Nu ești logat cu un cont valid așa că aceste pad-uri vor fi șterse (află de ce). Înscrie-te sau Loghează-te pentru a le salva.";
+ out.fm_alert_backupUrl = "Link copie de rezervă pentru acest drive. Este foarte recomandat să o păstrezi pentru tine. Poți să o folosești pentru a recupera toate fișierele n cazul n care memoria browserului tău este șterge.. Oricine are linkul poate să editeze sau să ndepărteze toate fișierele din managerul tău de documente. ";
+ out.fm_alert_anonymous = "Salut, momentan folosești CryptPad n mod anonim. Este ok, doar că fișierele tale vor fi șterse după o perioadă de inactivitate. Am dezactivat caracteristicile avansate ale drive-ului pentru utilizatorii anonimi pentru a face clar faptul că stocare documentelor acolo nu este o metodă sigură. Poți să citești mai multe despre motivarea noastră și despre ce de trebuie să te Înregistrezi and Loghezi.";
+ out.fm_backup_title = "Link de backup";
+ out.fm_nameFile = "Cum ai vrea să numești fișierul?";
+ out.fc_newfolder = "Folder nou";
+ out.fc_rename = "Redenumește";
+ out.fc_open = "Deschide";
+ out.fc_open_ro = "Deschide (modul citire)";
+ out.fc_delete = "Șterge";
+ out.fc_restore = "Restaurează";
+ out.fc_remove = "Șterge permanent";
+ out.fc_empty = "Curăță coșul";
+ out.fc_prop = "Proprietăți";
+ out.fc_sizeInKilobytes = "Dimensiune n Kilobytes";
+ out.fo_moveUnsortedError = "Nu poți să muți un folder la lista de pad-uri nesortate";
+ out.fo_existingNameError = "Numele ales este deja folosit n acest director. Te rugăm să alegi altul.";
+ out.fo_moveFolderToChildError = "Nu poți să muți un folder ntr-unul dintre descendenții săi";
+ out.fo_unableToRestore = "Nu am reușit să restaurăm fișierul n locația de origine. Poți să ncerci să l muți ntr-o nouă locație.";
+ out.fo_unavailableName = "Un fișier sau un folder cu același nume există deja n locația nouă. Redenumește elementul și ncearcă din nou.";
+ out.login_login = ""; "Loghează-te";
+ out.login_makeAPad = "Crează un pad n modul anonim";
+ out.login_nologin = "Răsfoiește pad-urile locale";
+ out.login_register = "Înscrie-te";
+ out.logoutButton = "Deloghează-te";
+ out.settingsButton = "Setări";
+ out.login_username = "Nume utilizator";
+ out.login_password = "Parolă";
+ out.login_confirm = "Confirmă parola";
+ out.login_remember = "Ține-mă minte";
+ out.login_hashing = "Încriptăm parola, o să mai dureze.";
+ out.login_hello = "Salut {0},";
+ out.login_helloNoName = "Salut,";
+ out.login_accessDrive = "Acesează-ți drive-ul";
+ out.login_orNoLogin = "sau";
+ out.login_noSuchUser = "Nume de utilizator sau parolă invalide. Încearcă din nou sau nscrie-te.";
+ out.login_invalUser = "Nume utilizator cerut";
+ out.login_invalPass = "Parolă cerută";
+ out.login_unhandledError = "O eroare neașteptată a avut loc emoticon_unhappy";
+ out.register_importRecent = "Importă istoricul pad-ului (Recomandat)";
+ out.register_acceptTerms = "Accept termenii serviciului";
+ out.register_passwordsDontMatch = "Parolele nu se potrivesc!";
+ out.register_mustAcceptTerms = "Trebuie să accepți termenii serviciului";
+ out.register_mustRememberPass = "Nu putem să ți resetăm parola dacă o uiți. Este foarte important să o ții minte! Bifează căsuța pentru a confirma.";
+ out.register_header = "Bine ai venit n CryptPad";
+ out.register_explanation = "
Hai să stabilim câteva lucruri, mai ntâi
Parola ta este cheia secretă care criptează toate pad-urile tale. Dacă pierzi/uiți parola nu există nici-o metodă prin care ți putem recupera datele.
Poți importa pad-uri care au fost vizionate recent n browser pentru a le avea n cont.
Dacă folosești un computer mpărțit, trebuie să te deloghezi, nchiderea taburilor nu este de ajuns.
";
+ out.register_writtenPassword = "Mi-am notat numele de utilizator și parola, naintează.";
+ out.register_cancel = "Întoarce-te";
+ out.register_warning = "Zero Knowledge nseamnă că noi nu ți putem recupera datele dacă ți pierzi parola.";
+ out.register_alreadyRegistered = "Acest user există deja, vrei să te loghezi?";
+ out.settings_title = "Setări";
+ out.settings_save = "Salvează";
+ out.settings_backupTitle = "Fă o copie de rezervă sau restaurează toate datele";
+ out.settings_backup = "Copie de rezervă";
+ out.settings_restore = "Restaurează";
+ out.settings_resetTitle = "Curăță-ți drive-ul";
+ out.settings_reset = "Îndepărtează toate fișierele și folderele din CryptPad-ul tău.";
+ out.settings_resetPrompt = "Această acțiune o să ndepărteze toate pad-urile din drive-ul tău. Ești sigur că vrei să continui? Type “Iubesc CryptPad” pentru a confirma.";
+ out.settings_resetDone = "Drive-ul tău este acum gol!";
+ out.settings_resetError = "Text de verificare incorrect. CryptPad-ul tău nu a fost schimbat.";
+ out.settings_resetTips = "Sfaturi n CryptDrive";
+ out.settings_resetTipsButton = "Resetează sfaturile disponibile n CryptDrive";
+ out.settings_resetTipsDone = "Toate sfaturile sunt vizibile din nou.";
+ out.settings_importTitle = "Importă pad-urile recente ale acestui browser n CryptDrive-ul meu";
+ out.settings_import = "Importă";
+ out.settings_importConfirm = "Ești sigur că vrei să imporți pad-urile recente ale acestui browser n contul tău de CryptDrive?";
+ out.settings_importDone = "Import complet";
+ out.settings_userFeedbackHint1 = "CryptPad oferă niște feedback foarte simplu serverului, pentru a ne informa cum putem să ți mbunătățim experiența voastră.";
+ out.settings_userFeedbackHint2 = "Conținutul pad-ului tău nu va fi mpărțit cu serverele.";
+ out.settings_userFeedback = "Activează feedback";
+ out.settings_anonymous = "Nu ești logat. Setările sunt specifice browser-ului.";
+ out.settings_publicSigningKey = "Cheia de semnătură publică";
+ out.settings_usage = "Uzaj";
+ out.settings_usageTitle = "Vezi dimensiunea totală a pad-urilor fixate n MB";
+ out.settings_pinningNotAvailable = "Pad-urile fixate sunt disponibile doar utilizatorilor nregistrați.";
+ out.settings_pinningError = "Ceva nu a funcționat";
+ out.settings_usageAmount = "Pad-urile tale fixate ocupă {0}MB";
+ out.settings_logoutEverywhereTitle = "Deloghează-te peste tot";
+ out.settings_logoutEverywhere = "Deloghează-te din toate sesiunile web";
+ out.settings_logoutEverywhereConfirm = "Ești sigur? Va trebui să te loghezi, din nou, pe toate device-urile tale.";
+ out.upload_serverError = "Eroare de server: fișierele tale nu pot fi ncărcate la momentul acesta.";
+ out.upload_uploadPending = "Ai deja o ncărcare n desfășurare. Anulezi si ncarci noul fișier?";
+ out.upload_success = "Fișierul tău ({0}) a fost ncărcat și adăugat la drive-ul tău cu succes.";
+ out.main_p2 = "Acest proiect folosește CKEditor Visual Editor, CodeMirror, și ChainPad un motor n timp real.";
+ out.main_howitworks_p1 = "CryptPad folosește o variantă a algoritmului de Operational transformation care este capabil să găsescă consens distribuit folosind Nakamoto Blockchain, o construcție popularizată de Bitcoin. Astfel algoritmul poate evita nevoia ca serverul central să rezove conflicte, iar serverul nu este interesat de conținutul care este editat n pad.";
+ out.main_about_p2 = "Dacă ai orice fel de ntrebare sau comentariu, poți să ne dai un tweet, semnalezi o problemă on github, spui salut pe IRC (irc.freenode.net), sau trimiți un email.";
+ out.main_info = "
Colaborează n siguranță
Dezvoltă-ți ideile mpreună cu documente partajate n timp ce tehnologia Zero Knowledge ți păstrează securitatea; chiar și de noi.";
+ out.main_howitworks = "Cum funcționează";
+ out.main_zeroKnowledge = "Zero Knowledge";
+ out.main_zeroKnowledge_p = "Nu trebuie să ne crezi că nu ne uităm la pad-urile tale, cu tehnologia revoluționară Zero Knowledge a CryptPad nu putem. Învață mai multe despre cum ți protejăm Learn more about how we protect your Intimitate și Securitate.";
+ out.main_writeItDown = "Notează";
+ out.main_writeItDown_p = "Cele mai importante proiecte vin din idei mici. Notează-ți momentele de inspirație și ideile neașteptate pentru că nu știi niciodată care ar putea fi noua mare descoperire.";
+ out.main_share = "Partajează link-ul, partajează pad-ul";
+ out.main_share_p = "Dezvoltă-ți ideile mpreună: organizează ntâlniri eficiente, colaborează pe liste TODO și fă prezentări scurte cu toți prietenii tăi și device-urile tale.";
+ out.main_organize = "Organizează-te";
+ out.main_organize_p = "Cu CryptPad Drive, poți să stai cu ochii pe ce este important. Folderele ți permit să ții evidența proiectelor tale și să ai o viziune globală asupra evoluției lucrurilor.";
+ out.tryIt = "Testează!";
+ out.main_richText = "Rich Text editor";
+ out.main_richText_p = "Editează texte complexe n mod colaborativ cu Zero Knowledge n timp real. CkEditor application.";
+ out.main_code = "Editor cod";
+ out.main_code_p = "Editează cod din softul tău, n mod colaborativ, cu Zero Knowledge n timp real.CodeMirror application.";
+ out.main_slide = "Editor slide-uri";
+ out.main_slide_p = "Crează-ți prezentări folosind sintaxa Markdown, și afișează-le n browser-ul tău.";
+ out.main_poll = "Sondaj";
+ out.main_poll_p = "Plănuiește ntâlniri sau evenimente, sau votează pentru cea mai bună soluție pentru problema ta.";
+ out.main_drive = "CryptDrive";
+ out.footer_applications = "Aplicații";
+ out.footer_contact = "Contact";
+ out.footer_aboutUs = "Despre noi";
+ out.about = "Despre";
+ out.privacy = "Privacy";
+ out.contact = "Contact";
+ out.terms = "ToS";
+ out.blog = "Blog";
+ out.policy_title = "Politica de confidențialitate CryptPad";
+ out.policy_whatweknow = "Ce știm despre tine";
+ out.policy_whatweknow_p1 = "Ca o aplicație care este găzduită online, CryptPad are acces la metadatele expuse de protocolul HTTP. Asta include adresa IP-ului tău, și alte titluri HTTP care pot fi folosite ca să identifice un browser. Poți să vezi ce informații mpărtășește browser-ul tău vizitând WhatIsMyBrowser.com.";
+ out.policy_whatweknow_p2 = "Folosim Kibana, o platformă open source, pentru a afla mai multe despre utilizatorii noștri. Kibana ne spune despre cum ai găsit CryptPad, căutare directă, printr-un motor de căutare, sau prin recomandare de la un alt serviciu online ca Reddit sau Twitter.";
+ out.policy_howweuse = "Cum folosim ce aflăm";
+ out.policy_howweuse_p1 = "Folosim aceste informații pentru a lua decizii mai bune n promovarea CryptPad, prin evaluarea eforturilor trecute care au fost de succes. Informațiile despre locația ta ne ajută să aflăm dacă ar trebui să oferim suport pentru alte limbi, pe lângă engleză.";
+ out.policy_howweuse_p2 = ""; "Informațiile despre browser-ul tău (dacă este bazat pe un sistem de operare desktop sau mobil) ne ajută să luăm decizii când prioritizăm viitoare mbunătățiri. Echipa noastră de development este mică, și ncercăm să facem alegeri care să mbunătățească experiența câtor mai mulți utilizatori.";
+
+ out.policy_whatwetell = "Ce le spunem altora despre tine";
+ out.policy_whatwetell_p1 = "Nu furnizăm informațiile obținute terților, decât dacă ne este cerut n mod legal.";
+ out.policy_links = "Link-uri către alte site-uri";
+ out.policy_links_p1 = "Acest site conține link-uri către alte site-uri, incluzându-le pe cele produse de alte organizații. Nu suntem responsabili pentru practicile de intimitate sau pentru conținutul site-urilor externe. Ca regulă generală, link-urile către site-uri externe sunt deschise ntr-o fereastră noup, pentru a face clar faptul că părăsiți CryptPad.fr.";
+ out.policy_ads = "Reclame";
+ out.policy_ads_p1 = "Nu afișăm nici o formă de publicitate online, dar s-ar putea să atașăm link-uri către instituțiile care ne finanțează cerecetarea.";
+ out.policy_choices = "Ce alegeri ai";
+ out.policy_choices_open = "Codul nostru este open source, așa că tu ai mereu posibilitatea de a-ți găzdui propria instanță de CryptPad.";
+ out.policy_choices_vpn = "Dacă vrei să folosești instanța găzduită de noi, dar nu vrei să ți expui IP-ul, poți să l protejezi folosind Tor browser bundle, sau VPN.";
+ out.policy_choices_ads = "Dacă vrei doar să blochezi platforma noastră de analiză, poți folosi soluții de adblocking ca Privacy Badger.";
+ out.tos_title = "CryptPad Termeni de Utilizare";
+ out.tos_legal = "Te rugăm să nu fii rău intenționat, abuziv, sau să faci orice ilegal.";
+ out.tos_availability = "Sperăm că o să găsești acest serviciu util, dar disponibilitatea sau performanța nu poate fi garantată. Te rugăm să ți exporți datele n mod regulat.";
+ out.tos_e2ee = "Conținutul CryptPad poate fi citit sau modificat de oricine care poate ghici sau obține fragmentul identificator al pad-ului. Recomandăm să folosești soluții de comunicare criptate end-to-end-encrypted (e2ee) pentru a partaja link-uri, evitând orice risc n cazul unei scurgeri de informații.";
+ out.tos_logs = "Metadatele oferite de browser-ul tău serverului ar putea fi nscrise n scopul de a menține serviciul.";
+ out.tos_3rdparties = "Nu oferim date personale terților, decât dacă ne sunt solicitate prin lege.";
+ out.bottom_france = "Realizat cu n ";
+ out.bottom_support = "Un proiect al Labs Project cu susținerea ";
+ out.header_france = "With from by ";
+ out.header_support = "";
+ out.header_logoTitle = "Mergi la pagina principală";
+ out.initialState = "
Acesta este CryptPad, editorul colaborativ bazat pe tehnologia Zero Knowledge n timp real. Totul este salvat pe măsură ce scrii. Partajează link-ul către acest pad pentru a edita cu prieteni sau folosește Share butonul pentru a partaja read-only link permițând vizualizarea dar nu și editarea.
Îndrăznește, ncepe să scrii...
";
+ out.codeInitialState = "/*\n Acesta este editorul colaborativ de cod bazat pe tehnologia Zero Knowledge CryptPad.\n Ce scrii aici este criptat, așa că doar oamenii care au link-ul pot să-l acceseze.\n Poți să alegi ce limbaj de programare pus n evidență și schema de culori UI n dreapta sus.\n*/";
+ out.slideInitialState = "# CryptSlide\n* Acesta este un editor colaborativ bazat pe tehnologia Zero Knowledge.\n* Ce scrii aici este criptat, așa că doar oamenii care au link-ul pot să-l acceseze.\n* Nici măcar serverele nu au acces la ce scrii tu.\n* Ce vezi aici, ce auzi aici, atunci când pleci, lasă aici.\n\n-\n# Cum se folosește\n1. Scrie-ți conținutul slide-urilor folosind sintaxa markdown\n - Află mai multe despre sintaxa markdown [aici](http://www.markdowntutorial.com/)\n2. Separă-ți slide-urile cu -\n3. Click pe butonul \"Play\" pentru a vedea rezultatele - Slide-urile tale sunt actualizate n timp real.";
+ out.driveReadmeTitle = "Ce este CryptDrive?";
+ out.readme_welcome = "Bine ai venit n CryptPad !";
+ out.readme_p1 = "Bine ai venit n CryptPad, acesta este locul unde ți poți lua notițe, singur sau cu prietenii.";
+ out.readme_p2 = "Acest pad o să ți ofere un scurt ghid n cum poți să folosești CryptPad pentru a lua notițe, a le ține organizate și a colabora pe ele.";
+ out.readme_cat1 = "Descoperă-ți CryptDrive-ul";
+ out.readme_cat1_l1 = "Crează un pad: În CryptDrive-ul tău, dă click {0} apoi {1} și poți să creezi un pad.";
+ out.readme_cat1_l2 = "Deschide pad-urile din CryptDrive-ul tău: doublu-click pe iconița unui pad pentru a-l deschide.";
+ out.readme_cat1_l3 = "Organizează-ți pad-urile: Când ești logat, orice pad accesezi va fi afișat ca n secțiunea {0} a drive-ului tău.";
+ out.readme_cat1_l3_l1 = "Poți să folosești funcția click and drag pentru a muta fișierele n folderele secțiunii {0} a drive-ului tău și pentru a crea noi foldere.";
+ out.readme_cat1_l3_l2 = ""; "Ține minte să ncerci click-dreapta pe iconițe pentru că există și meniuri adiționale.";
+ out.readme_cat1_l4 = "Pune pad-urile vechi n gunoi. Poți să folosești funcția click and drag pe pad-uri n categoria {0} la fel ca și n cazul folderelor.";
+ out.readme_cat2 = ""; "Crează pad-uri ca un profesionist";
+ out.edit = "editează";
+ out.view = "vezi";
+ out.readme_cat2_l1 = "Butonul {0} din pad-ul tău dă accesul colaboratorilor tăi să {1} sau să {2} pad-ul.";
+ out.readme_cat2_l2 = "Schimbă titlul pad-ului dând click pe creion";
+ out.readme_cat3 = "Descoperă aplicațiile CryptPad";
+ out.readme_cat3_l1 = "Cu editorul de cod CryptPad, poți colabora pe cod ca Javascript și markdown ca HTML și Markdown";
+ out.readme_cat3_l2 = "Cu editorul de slide-uri CryptPad, poți să faci prezentări scurte folosind Markdown";
+ out.readme_cat3_l3 = "Cu CryptPoll poți să organizezi votări rapide, mai ales pentru a programa ntâlniri care se potrivesc calendarelor tuturor";
+ out.tips = ""; {"lag":"Iconița verde din dreapta-sus arată calitatea conexiunii internetului tău la serverele CryptPad.","scurtături":"`ctrl+b`, `ctrl+i` and `ctrl+u` sunt scurtături pentru bold, italic și underline.","indentare":"În listele cu bulină sau cele numerotate, poți folosi tab sau shift+tab pentru a mări sau micșora indentarea.","titlu":"Poți seta titlul pad-urilor tale prin click pe centru sus.","stocare":"De fiecare dată când vizitezi un pad, dacă ești logat va fi salvat pe CryptDrive-ul tău.","marker":"Poți sublinia text ntr-un pad folosind itemul \"marker\" n meniul de stiluri."} out.feedback_about = "Dacă citești asta, probabil că ești curios de ce CryptPad cere pagini web atunci când ntreprinzi anumite acțiuni";
+ out.feedback_privacy = "Ne pasă de intimitatea ta, si n același timp vrem să păstrăm CryptPad ușor de folosit. Folosim acest fișier pentru a ne da seama care beneficii UI contează cel mai mult pentru utilizatori, cerându-l alături de un parametru specific atunci când acțiunea se desfășoară";
+ out.feedback_optout = "Dacă vrei să ieși, vizitează setările de pe pagina ta de user, unde vei găsi o căsuță pentru a activa sau dezactiva feedback-ul de la user";
+
+ return out;
+});
return out;
});
From 70c1061f4712825dc2b081e49c0b60f72b51e0b0 Mon Sep 17 00:00:00 2001
From: Caleb James DeLisle
Date: Wed, 24 May 2017 14:49:00 +0200
Subject: [PATCH 006/100] Fix romanian translation
---
customize.dist/translations/messages.ro.js | 30 +++++++++++++---------
1 file changed, 18 insertions(+), 12 deletions(-)
diff --git a/customize.dist/translations/messages.ro.js b/customize.dist/translations/messages.ro.js
index 162603908..4f8579ba0 100644
--- a/customize.dist/translations/messages.ro.js
+++ b/customize.dist/translations/messages.ro.js
@@ -25,7 +25,7 @@ define(function () {
out.typeError = "Această filă nu este compatibilă cu aplicația aleasă";
out.onLogout = "Nu mai ești autentificat, apasă aici să te autentifici sau apasă Escapesă accesezi fila n modul citire.";
out.wrongApp = "Momentan nu putem arăta conținutul sesiunii n timp real n fereastra ta. Te rugăm rencarcă pagina.";
- out.loading = "Încarcă..."
+ out.loading = "Încarcă...";
out.error = "Eroare";
out.saved = "Salvat";
@@ -113,7 +113,7 @@ define(function () {
out.history_restore = "Restabilește";
out.history_restoreTitle = "Restabilește versiunea selectată a documentului";
out.history_restorePrompt = "Ești sigur că vrei să nlocuiești versiunea curentă a documentului cu cea afișată?";
- out.history_restoreDone = ""; "Document restabilit";
+ out.history_restoreDone = "Document restabilit";
out.history_version = "Versiune:";
out.poll_title = "Zero Knowledge Selector Dată";
out.poll_subtitle = "Zero Knowledge, realtime programare";
@@ -186,7 +186,7 @@ define(function () {
out.fm_info_template = "Conține toate pad-urile stocate ca șabloane și pe care le poți refolosi atunci când creezi un nou pad.";
out.fm_info_trash = "Fișierele șterse din gunoi vor fi șterse și din \"Toate fișierele\", făcând imposibilă recuperarea fișierelor din managerul de fișiere.";
out.fm_info_allFiles = "Conține toate fișierele din \"Documente\", \"Nesortate\" și \"Gunoi\". Poți să muți sau să ștergi fișierele aici.";
- out.fm_info_login = ""; "Loghează-te";
+ out.fm_info_login = "Loghează-te";
out.fm_info_register = "Înscrie-te";
out.fm_info_anonymous = "Nu ești logat cu un cont valid așa că aceste pad-uri vor fi șterse (află de ce). Înscrie-te sau Loghează-te pentru a le salva.";
out.fm_alert_backupUrl = "Link copie de rezervă pentru acest drive. Este foarte recomandat să o păstrezi pentru tine. Poți să o folosești pentru a recupera toate fișierele n cazul n care memoria browserului tău este șterge.. Oricine are linkul poate să editeze sau să ndepărteze toate fișierele din managerul tău de documente. ";
@@ -208,7 +208,7 @@ define(function () {
out.fo_moveFolderToChildError = "Nu poți să muți un folder ntr-unul dintre descendenții săi";
out.fo_unableToRestore = "Nu am reușit să restaurăm fișierul n locația de origine. Poți să ncerci să l muți ntr-o nouă locație.";
out.fo_unavailableName = "Un fișier sau un folder cu același nume există deja n locația nouă. Redenumește elementul și ncearcă din nou.";
- out.login_login = ""; "Loghează-te";
+ out.login_login = "Loghează-te";
out.login_makeAPad = "Crează un pad n modul anonim";
out.login_nologin = "Răsfoiește pad-urile locale";
out.login_register = "Înscrie-te";
@@ -308,7 +308,7 @@ define(function () {
out.policy_whatweknow_p2 = "Folosim Kibana, o platformă open source, pentru a afla mai multe despre utilizatorii noștri. Kibana ne spune despre cum ai găsit CryptPad, căutare directă, printr-un motor de căutare, sau prin recomandare de la un alt serviciu online ca Reddit sau Twitter.";
out.policy_howweuse = "Cum folosim ce aflăm";
out.policy_howweuse_p1 = "Folosim aceste informații pentru a lua decizii mai bune n promovarea CryptPad, prin evaluarea eforturilor trecute care au fost de succes. Informațiile despre locația ta ne ajută să aflăm dacă ar trebui să oferim suport pentru alte limbi, pe lângă engleză.";
- out.policy_howweuse_p2 = ""; "Informațiile despre browser-ul tău (dacă este bazat pe un sistem de operare desktop sau mobil) ne ajută să luăm decizii când prioritizăm viitoare mbunătățiri. Echipa noastră de development este mică, și ncercăm să facem alegeri care să mbunătățească experiența câtor mai mulți utilizatori.";
+ out.policy_howweuse_p2 = "Informațiile despre browser-ul tău (dacă este bazat pe un sistem de operare desktop sau mobil) ne ajută să luăm decizii când prioritizăm viitoare mbunătățiri. Echipa noastră de development este mică, și ncercăm să facem alegeri care să mbunătățească experiența câtor mai mulți utilizatori.";
out.policy_whatwetell = "Ce le spunem altora despre tine";
out.policy_whatwetell_p1 = "Nu furnizăm informațiile obținute terților, decât dacă ne este cerut n mod legal.";
@@ -343,9 +343,9 @@ define(function () {
out.readme_cat1_l2 = "Deschide pad-urile din CryptDrive-ul tău: doublu-click pe iconița unui pad pentru a-l deschide.";
out.readme_cat1_l3 = "Organizează-ți pad-urile: Când ești logat, orice pad accesezi va fi afișat ca n secțiunea {0} a drive-ului tău.";
out.readme_cat1_l3_l1 = "Poți să folosești funcția click and drag pentru a muta fișierele n folderele secțiunii {0} a drive-ului tău și pentru a crea noi foldere.";
- out.readme_cat1_l3_l2 = ""; "Ține minte să ncerci click-dreapta pe iconițe pentru că există și meniuri adiționale.";
+ out.readme_cat1_l3_l2 = "Ține minte să ncerci click-dreapta pe iconițe pentru că există și meniuri adiționale.";
out.readme_cat1_l4 = "Pune pad-urile vechi n gunoi. Poți să folosești funcția click and drag pe pad-uri n categoria {0} la fel ca și n cazul folderelor.";
- out.readme_cat2 = ""; "Crează pad-uri ca un profesionist";
+ out.readme_cat2 = "Crează pad-uri ca un profesionist";
out.edit = "editează";
out.view = "vezi";
out.readme_cat2_l1 = "Butonul {0} din pad-ul tău dă accesul colaboratorilor tăi să {1} sau să {2} pad-ul.";
@@ -354,12 +354,18 @@ define(function () {
out.readme_cat3_l1 = "Cu editorul de cod CryptPad, poți colabora pe cod ca Javascript și markdown ca HTML și Markdown";
out.readme_cat3_l2 = "Cu editorul de slide-uri CryptPad, poți să faci prezentări scurte folosind Markdown";
out.readme_cat3_l3 = "Cu CryptPoll poți să organizezi votări rapide, mai ales pentru a programa ntâlniri care se potrivesc calendarelor tuturor";
- out.tips = ""; {"lag":"Iconița verde din dreapta-sus arată calitatea conexiunii internetului tău la serverele CryptPad.","scurtături":"`ctrl+b`, `ctrl+i` and `ctrl+u` sunt scurtături pentru bold, italic și underline.","indentare":"În listele cu bulină sau cele numerotate, poți folosi tab sau shift+tab pentru a mări sau micșora indentarea.","titlu":"Poți seta titlul pad-urilor tale prin click pe centru sus.","stocare":"De fiecare dată când vizitezi un pad, dacă ești logat va fi salvat pe CryptDrive-ul tău.","marker":"Poți sublinia text ntr-un pad folosind itemul \"marker\" n meniul de stiluri."} out.feedback_about = "Dacă citești asta, probabil că ești curios de ce CryptPad cere pagini web atunci când ntreprinzi anumite acțiuni";
+
+ out.tips = { };
+ out.tips.lag = "Iconița verde din dreapta-sus arată calitatea conexiunii internetului tău la serverele CryptPad.";
+ out.tips.shortcuts = "`ctrl+b`, `ctrl+i` and `ctrl+u` sunt scurtături pentru bold, italic și underline.";
+ out.tips.indentare = "În listele cu bulină sau cele numerotate, poți folosi tab sau shift+tab pentru a mări sau micșora indentarea.";
+ out.tips.titlu = "Poți seta titlul pad-urilor tale prin click pe centru sus.";
+ out.tips.stocare = "De fiecare dată când vizitezi un pad, dacă ești logat va fi salvat pe CryptDrive-ul tău.";
+ out.tips.marker = "Poți sublinia text ntr-un pad folosind itemul \"marker\" n meniul de stiluri.";
+
+ out.feedback_about = "Dacă citești asta, probabil că ești curios de ce CryptPad cere pagini web atunci când ntreprinzi anumite acțiuni";
out.feedback_privacy = "Ne pasă de intimitatea ta, si n același timp vrem să păstrăm CryptPad ușor de folosit. Folosim acest fișier pentru a ne da seama care beneficii UI contează cel mai mult pentru utilizatori, cerându-l alături de un parametru specific atunci când acțiunea se desfășoară";
out.feedback_optout = "Dacă vrei să ieși, vizitează setările de pe pagina ta de user, unde vei găsi o căsuță pentru a activa sau dezactiva feedback-ul de la user";
return out;
-});
-
- return out;
-});
+});
\ No newline at end of file
From 617e027f1273783f697331211aa6052baa5f6746 Mon Sep 17 00:00:00 2001
From: ansuz
Date: Wed, 24 May 2017 15:50:35 +0200
Subject: [PATCH 007/100] catch markdown preview errors
---
www/code/main.js | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/www/code/main.js b/www/code/main.js
index 9cb3cae10..788ddddcf 100644
--- a/www/code/main.js
+++ b/www/code/main.js
@@ -112,7 +112,9 @@ define([
var drawPreview = Cryptpad.throttle(function () {
if (CodeMirror.highlightMode !== 'markdown') { return; }
- DiffMd.apply(DiffMd.render(editor.getValue()), $preview);
+ try {
+ DiffMd.apply(DiffMd.render(editor.getValue()), $preview);
+ } catch (e) { console.error(e); }
}, 150);
var onLocal = config.onLocal = function () {
From 3803f6a20f789603c2707c48094f815ac0dc0eee Mon Sep 17 00:00:00 2001
From: ansuz
Date: Wed, 24 May 2017 17:25:33 +0200
Subject: [PATCH 008/100] only render preview if preview container is visible
---
www/code/main.js | 1 +
1 file changed, 1 insertion(+)
diff --git a/www/code/main.js b/www/code/main.js
index 788ddddcf..44ecec76b 100644
--- a/www/code/main.js
+++ b/www/code/main.js
@@ -112,6 +112,7 @@ define([
var drawPreview = Cryptpad.throttle(function () {
if (CodeMirror.highlightMode !== 'markdown') { return; }
+ if (!$previewContainer.is(':visible')) { return; }
try {
DiffMd.apply(DiffMd.render(editor.getValue()), $preview);
} catch (e) { console.error(e); }
From a5ffd278a770ac78a464960c187c1ee7980d2ed8 Mon Sep 17 00:00:00 2001
From: ansuz
Date: Wed, 24 May 2017 17:27:03 +0200
Subject: [PATCH 009/100] write styles for code in .less
---
package.json | 2 +-
www/code/code.css | 73 ++++++++++++++++++++++++++++++++++++++++
www/code/code.less | 81 +++++++++++++++++++++++++++++++++++++++++++++
www/code/inner.html | 65 +-----------------------------------
4 files changed, 156 insertions(+), 65 deletions(-)
create mode 100644 www/code/code.css
create mode 100644 www/code/code.less
diff --git a/package.json b/package.json
index e75ec7b32..3f8432ef5 100644
--- a/package.json
+++ b/package.json
@@ -18,7 +18,7 @@
"scripts": {
"lint": "jshint --config .jshintrc --exclude-path .jshintignore .",
"test": "node TestSelenium.js",
- "style": "lessc ./customize.dist/src/less/cryptpad.less > ./customize.dist/main.css && lessc ./customize.dist/src/less/toolbar.less > ./customize.dist/toolbar.css && lessc ./www/drive/file.less > ./www/drive/file.css && lessc ./www/settings/main.less > ./www/settings/main.css && lessc ./www/slide/slide.less > ./www/slide/slide.css && lessc ./www/whiteboard/whiteboard.less > ./www/whiteboard/whiteboard.css && lessc ./www/poll/poll.less > ./www/poll/poll.css && lessc ./www/file/file.less > ./www/file/file.css",
+ "style": "lessc ./customize.dist/src/less/cryptpad.less > ./customize.dist/main.css && lessc ./customize.dist/src/less/toolbar.less > ./customize.dist/toolbar.css && lessc ./www/drive/file.less > ./www/drive/file.css && lessc ./www/settings/main.less > ./www/settings/main.css && lessc ./www/slide/slide.less > ./www/slide/slide.css && lessc ./www/whiteboard/whiteboard.less > ./www/whiteboard/whiteboard.css && lessc ./www/poll/poll.less > ./www/poll/poll.css && lessc ./www/file/file.less > ./www/file/file.css && lessc ./www/code/code.less > ./www/code/code.css",
"template": "cd customize.dist/src && node build.js"
}
}
diff --git a/www/code/code.css b/www/code/code.css
new file mode 100644
index 000000000..337a75fd9
--- /dev/null
+++ b/www/code/code.css
@@ -0,0 +1,73 @@
+html,
+body {
+ height: 100%;
+ width: 100%;
+ padding: 0px;
+ margin: 0px;
+ overflow: hidden;
+ box-sizing: border-box;
+ position: relative;
+}
+body {
+ display: flex;
+ flex-flow: column;
+ max-height: 100%;
+ min-height: auto;
+}
+.CodeMirror {
+ display: inline-block;
+ height: 100%;
+ width: 50%;
+ min-width: 20%;
+ max-width: 80%;
+ resize: horizontal;
+}
+.CodeMirror.fullPage {
+ min-width: 100%;
+ max-width: 100%;
+ resize: none;
+}
+.CodeMirror-focused .cm-matchhighlight {
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAFklEQVQI12NgYGBgkKzc8x9CMDAwAAAmhwSbidEoSQAAAABJRU5ErkJggg==);
+ background-position: bottom;
+ background-repeat: repeat-x;
+}
+#editorContainer {
+ flex: 1;
+ display: flex;
+ flex-flow: row;
+ height: 100%;
+ overflow: hidden;
+}
+#previewContainer {
+ flex: 1;
+ padding: 5px 20px;
+ overflow: auto;
+ display: inline-block;
+ height: 100%;
+ border-left: 1px solid black;
+ box-sizing: border-box;
+ font-family: Calibri, Ubuntu, sans-serif;
+ word-wrap: break-word;
+}
+#preview {
+ max-width: 40vw;
+ margin: auto;
+}
+#preview table {
+ border-collapse: collapse;
+}
+#preview table tr th {
+ border: 3px solid black;
+ padding: 15px;
+}
+@media (max-width: 720px) {
+ .CodeMirror {
+ flex: 1;
+ max-width: 100%;
+ resize: none;
+ }
+ #previewContainer {
+ display: none !important;
+ }
+}
diff --git a/www/code/code.less b/www/code/code.less
new file mode 100644
index 000000000..420371c93
--- /dev/null
+++ b/www/code/code.less
@@ -0,0 +1,81 @@
+@import "../../customize.dist/src/less/variables.less";
+@import "../../customize.dist/src/less/mixins.less";
+
+html, body{
+ height: 100%;
+ width: 100%;
+ padding: 0px;
+ margin: 0px;
+ overflow: hidden;
+ box-sizing: border-box;
+ position: relative;
+}
+body {
+ display: flex;
+ flex-flow: column;
+ max-height: 100%;
+ min-height: auto;
+}
+.CodeMirror {
+ display: inline-block;
+ height: 100%;
+ width: 50%;
+ min-width: 20%;
+ max-width: 80%;
+ resize: horizontal;
+}
+.CodeMirror.fullPage {
+ min-width: 100%;
+ max-width: 100%;
+ resize: none;
+}
+.CodeMirror-focused .cm-matchhighlight {
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAFklEQVQI12NgYGBgkKzc8x9CMDAwAAAmhwSbidEoSQAAAABJRU5ErkJggg==);
+ background-position: bottom;
+ background-repeat: repeat-x;
+}
+#editorContainer {
+ flex: 1;
+ display: flex;
+ flex-flow: row;
+ height: 100%;
+ overflow: hidden;
+}
+#previewContainer {
+ flex: 1;
+ padding: 5px 20px;
+ overflow: auto;
+ display: inline-block;
+ height: 100%;
+ border-left: 1px solid black;
+ box-sizing: border-box;
+ font-family: Calibri,Ubuntu,sans-serif;
+ word-wrap: break-word;
+}
+
+#preview {
+ max-width: 40vw;
+ margin: auto;
+
+ table {
+ border-collapse: collapse;
+ tr {
+ th {
+ border: 3px solid black;
+ padding: 15px;
+ }
+ }
+ }
+}
+
+@media (max-width: 720px) {
+ .CodeMirror {
+ flex: 1;
+ max-width: 100%;
+ resize: none;
+ }
+ #previewContainer {
+ display: none !important;
+ }
+}
+
diff --git a/www/code/inner.html b/www/code/inner.html
index 12f4c8cac..b3ac7fed5 100644
--- a/www/code/inner.html
+++ b/www/code/inner.html
@@ -8,6 +8,7 @@
+
@@ -31,70 +32,6 @@
-
From d9f7470f065ce1a9c7f8ea939a7ee0274154b235 Mon Sep 17 00:00:00 2001
From: ansuz
Date: Wed, 24 May 2017 18:28:16 +0200
Subject: [PATCH 010/100] copy user details into sessionStorage for safari
---
www/common/fsStore.js | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/www/common/fsStore.js b/www/common/fsStore.js
index b20c38c48..726570574 100644
--- a/www/common/fsStore.js
+++ b/www/common/fsStore.js
@@ -173,6 +173,12 @@ define([
proxy[tokenKey] = Math.floor(Math.random()*Number.MAX_SAFE_INTEGER);
}
+ // copy User_hash into sessionStorage because cross-domain iframes
+ // on safari replaces localStorage with sessionStorage or something
+ if (sessionStorage) {
+ sessionStorage.setItem('User_hash', localStorage.getItem('User_hash'));
+ }
+
var localToken = tryParsing(localStorage.getItem(tokenKey));
if (localToken === null) {
// if that number hasn't been set to localStorage, do so.
From b32c3292690067d2ae81ff58ef0a0dd1e6769d80 Mon Sep 17 00:00:00 2001
From: ansuz
Date: Wed, 24 May 2017 18:41:19 +0200
Subject: [PATCH 011/100] remember whether you were using preview mode for a
pad
---
www/code/main.js | 26 +++++++++++++++++++++++---
1 file changed, 23 insertions(+), 3 deletions(-)
diff --git a/www/code/main.js b/www/code/main.js
index 44ecec76b..d5feaf22a 100644
--- a/www/code/main.js
+++ b/www/code/main.js
@@ -110,12 +110,16 @@ define([
return stringify(obj);
};
- var drawPreview = Cryptpad.throttle(function () {
- if (CodeMirror.highlightMode !== 'markdown') { return; }
- if (!$previewContainer.is(':visible')) { return; }
+ var forceDrawPreview = function () {
try {
DiffMd.apply(DiffMd.render(editor.getValue()), $preview);
} catch (e) { console.error(e); }
+ };
+
+ var drawPreview = Cryptpad.throttle(function () {
+ if (CodeMirror.highlightMode !== 'markdown') { return; }
+ if (!$previewContainer.is(':visible')) { return; }
+ forceDrawPreview();
}, 150);
var onLocal = config.onLocal = function () {
@@ -239,9 +243,16 @@ define([
}
$previewContainer.toggle();
if ($previewContainer.is(':visible')) {
+ forceDrawPreview();
$codeMirror.removeClass('fullPage');
+ Cryptpad.setPadAttribute('previewMode', true, function (e, data) {
+ if (e) { return console.log(e); }
+ });
} else {
$codeMirror.addClass('fullPage');
+ Cryptpad.setPadAttribute('previewMode', false, function (e, data) {
+ if (e) { return console.log(e); }
+ });
}
});
$rightside.append($previewButton);
@@ -255,6 +266,7 @@ define([
CodeMirror.configureTheme();
}
+
// set the hash
if (!readOnly) { Cryptpad.replaceHash(editHash); }
};
@@ -306,6 +318,14 @@ define([
Title.updateTitle(Cryptpad.initialName);
}
+ Cryptpad.getPadAttribute('previewMode', function (e, data) {
+ if (e) { return void console.error(e); }
+ var $codeMirror = $iframe.find('.CodeMirror');
+ if (data === false && APP.$previewButton) {
+ APP.$previewButton.click();
+ }
+ });
+
Cryptpad.removeLoadingScreen();
setEditable(true);
initializing = false;
From dc2b0ae6b4627f9d33a52cfa972c35978ad3d5f3 Mon Sep 17 00:00:00 2001
From: ansuz
Date: Wed, 24 May 2017 18:45:48 +0200
Subject: [PATCH 012/100] jshint compliance
---
www/code/main.js | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/www/code/main.js b/www/code/main.js
index d5feaf22a..38b5f2267 100644
--- a/www/code/main.js
+++ b/www/code/main.js
@@ -245,12 +245,12 @@ define([
if ($previewContainer.is(':visible')) {
forceDrawPreview();
$codeMirror.removeClass('fullPage');
- Cryptpad.setPadAttribute('previewMode', true, function (e, data) {
+ Cryptpad.setPadAttribute('previewMode', true, function (e) {
if (e) { return console.log(e); }
});
} else {
$codeMirror.addClass('fullPage');
- Cryptpad.setPadAttribute('previewMode', false, function (e, data) {
+ Cryptpad.setPadAttribute('previewMode', false, function (e) {
if (e) { return console.log(e); }
});
}
@@ -320,7 +320,6 @@ define([
Cryptpad.getPadAttribute('previewMode', function (e, data) {
if (e) { return void console.error(e); }
- var $codeMirror = $iframe.find('.CodeMirror');
if (data === false && APP.$previewButton) {
APP.$previewButton.click();
}
From a04f179d8b9adb2860d27f6a0ac38d928699d5e9 Mon Sep 17 00:00:00 2001
From: ansuz
Date: Wed, 24 May 2017 19:00:14 +0200
Subject: [PATCH 013/100] hide preview mode on phones
---
www/code/code.css | 2 +-
www/code/code.less | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/www/code/code.css b/www/code/code.css
index 337a75fd9..78a4b7bf2 100644
--- a/www/code/code.css
+++ b/www/code/code.css
@@ -61,7 +61,7 @@ body {
border: 3px solid black;
padding: 15px;
}
-@media (max-width: 720px) {
+@media (max-width: 600px) {
.CodeMirror {
flex: 1;
max-width: 100%;
diff --git a/www/code/code.less b/www/code/code.less
index 420371c93..ef7cef32d 100644
--- a/www/code/code.less
+++ b/www/code/code.less
@@ -68,7 +68,7 @@ body {
}
}
-@media (max-width: 720px) {
+@media (max-width: @media-medium-screen) {
.CodeMirror {
flex: 1;
max-width: 100%;
From 70fbbe0078ce29a68c7312a9d599af9ac6f1ea92 Mon Sep 17 00:00:00 2001
From: superniko
Date: Thu, 25 May 2017 10:23:27 +0300
Subject: [PATCH 014/100] Update messages.ro.js
---
customize.dist/translations/messages.ro.js | 180 ++++++++++-----------
1 file changed, 90 insertions(+), 90 deletions(-)
diff --git a/customize.dist/translations/messages.ro.js b/customize.dist/translations/messages.ro.js
index 4f8579ba0..2c09b9a76 100644
--- a/customize.dist/translations/messages.ro.js
+++ b/customize.dist/translations/messages.ro.js
@@ -1,8 +1,8 @@
define(function () {
var out = {};
- out.main_title = "CryptPad: Zero Knowledge, Colaborare n timp real";
- out.main_slogan = "Puterea stă n cooperare - Colaborarea este cheia";
+ out.main_title = "CryptPad: Zero Knowledge, Colaborare în timp real";
+ out.main_slogan = "Puterea stă în cooperare - Colaborarea este cheia";
out.type = {};
out.pad = "Rich text";
@@ -17,14 +17,14 @@ define(function () {
out.button_newpad = "Filă Text Nouă";
out.button_newcode = "Filă Cod Nouă";
out.button_newpoll = "Sondaj Nou";
- out.button_newslide = "Prezentare Noua";
- out.button_newwhiteboard = "Fila Desen Noua";
- out.updated_0_common_connectionLost = "Conexiunea la server este pierdută Până la revenirea conexiunii, vei fi n modul citire";
+ out.button_newslide = "Prezentare Nouă";
+ out.button_newwhiteboard = "Fila Desen Nouă";
+ out.updated_0_common_connectionLost = "Conexiunea la server este pierdută Până la revenirea conexiunii, vei fi în modul citire";
out.common_connectionLost = out.updated_0_common_connectionLost;
out.websocketError = "Conexiune inexistentă către serverul websocket...";
out.typeError = "Această filă nu este compatibilă cu aplicația aleasă";
- out.onLogout = "Nu mai ești autentificat, apasă aici să te autentifici sau apasă Escapesă accesezi fila n modul citire.";
- out.wrongApp = "Momentan nu putem arăta conținutul sesiunii n timp real n fereastra ta. Te rugăm rencarcă pagina.";
+ out.onLogout = "Nu mai ești autentificat, apasă aici să te autentifici sau apasă Escapesă accesezi fila în modul citire.";
+ out.wrongApp = "Momentan nu putem arăta conținutul sesiunii în timp real în fereastra ta. Te rugăm reîncarcă pagina.";
out.loading = "Încarcă...";
out.error = "Eroare";
@@ -46,20 +46,20 @@ define(function () {
out.viewers = "privitori";
out.editor = "editor";
out.editors = "editori";
- out.language = "Limba";
+ out.language = "Limbă";
out.upgrade = "Actualizare";
out.upgradeTitle = "Actualizează-ți contul pentru a mări limita de stocare";
out.MB = "MB";
out.greenLight = "Totul funcționează corespunzător";
- out.orangeLight = "Conexiunea lentă la internet ți poate afecta experiența";
+ out.orangeLight = "Conexiunea lentă la internet îți poate afecta experiența";
out.redLight = "Ai fost deconectat de la sesiune";
out.pinLimitReached = "Ai atins limita de stocare";
- out.pinLimitReachedAlert = "Ai atins limita de stocare. Noile pad-uri nu vor mai fi stocate n CryptDrive. Pentru a rezolva această problemă, poți să nlături pad-uri din CryptDrive-ul tău (incluzând gunoiul) sau să subscrii la un pachet premium pentru a ți extinde spațiul de stocare.";
+ out.pinLimitReachedAlert = "Ai atins limita de stocare. Noile pad-uri nu vor mai fi stocate în CryptDrive. Pentru a rezolva această problemă, poți să nlături pad-uri din CryptDrive-ul tău (incluzând gunoiul) sau să subscrii la un pachet premium pentru a-ți extinde spațiul de stocare.";
out.pinLimitNotPinned = "Ai atins limita de stocare. Acest pad nu va fi stocat n CryptDrive-ul tău.";
out.pinLimitDrive = "Ai atins limita de stocare. Nu poți să creezi alte pad-uri.";
out.importButtonTitle = "Importă un pad dintr-un fișier local";
out.exportButtonTitle = "Exportă pad-ul acesta către un fișier local";
- out.exportPrompt = "Cum ai vrea să ți denumești fișierul?";
+ out.exportPrompt = "Cum ai vrea să îți denumești fișierul?";
out.changeNamePrompt = "Schimbă-ți numele (lasă necompletat dacă vrei să fii anonim): ";
out.user_rename = "Schimbă numele afișat";
out.user_displayName = "Nume afișat";
@@ -69,19 +69,19 @@ define(function () {
out.forgetPrompt = "Click-ul pe OK va muta acest pad la gunoi. Ești sigur?";
out.movedToTrash = "Acest pad a fost mutat la gunoi. Acesează-mi Drive-ul";
out.shareButton = "Distribuie";
- out.shareSuccess = "Link copiat n clipboard";
+ out.shareSuccess = "Link copiat în clipboard";
out.newButton = "Nou";
out.newButtonTitle = "Crează un nou pad";
out.saveTemplateButton = "Salvează ca șablon";
out.saveTemplatePrompt = "Alege un titlu pentru șablon";
out.templateSaved = "Șablon salvat!";
out.selectTemplate = "Selectează un șablon sau apasă escape";
- out.presentButtonTitle = "Intră n modul de prezentare";
+ out.presentButtonTitle = "Intră în modul de prezentare";
out.presentSuccess = "Apasă ESC pentru a ieși din modul de prezentare";
out.backgroundButtonTitle = "Schimbă culoarea de fundal din prezentare";
- out.colorButtonTitle = "Schimbă culoarea textului n modul de prezentare";
+ out.colorButtonTitle = "Schimbă culoarea textului în modul de prezentare";
out.printButton = "Printează (enter)";
- out.printButtonTitle = "Printează-ți slide-urile sau exportă-le ca fișier PDF";
+ out.printButtonTitle = "Printează-ți slide-urile sau exportă-le ca fișier PDF";
out.printOptions = "Opțiuni schemă";
out.printSlideNumber = "Afișează numărul slide-ului";
out.printDate = "Afișează data";
@@ -91,13 +91,13 @@ define(function () {
out.slideOptionsTitle = "Personalizează-ți slide-urile";
out.slideOptionsButton = "Salvează (enter)";
out.editShare = "Editează link-ul";
- out.editShareTitle = "Copiază link-ul de editare n clipboard";
- out.editOpen = "Deschide link-ul de editare ntr-o nouă filă";
- out.editOpenTitle = "Deschide acest pad n modul de editare ntr-o nouă filă";
- out.viewShare = "Link n modul citire";
- out.viewShareTitle = "Copiază link-ul n modul de citire n clipboard";
- out.viewOpen = "Deschide link-ul n modul de citire ntr-o filă nouă";
- out.viewOpenTitle = "Deschide acest pad n modul de citire ntr-o nouă filă";
+ out.editShareTitle = "Copiază link-ul de editare în clipboard";
+ out.editOpen = "Deschide link-ul de editare într-o nouă filă";
+ out.editOpenTitle = "Deschide acest pad în modul de editare într-o nouă filă";
+ out.viewShare = "Link în modul citire";
+ out.viewShareTitle = "Copiază link-ul în modul de citire în clipboard";
+ out.viewOpen = "Deschide link-ul în modul de citire într-o filă nouă";
+ out.viewOpenTitle = "Deschide acest pad în modul de citire într-o nouă filă";
out.notifyJoined = "{0} s-au alăturat sesiunii colaborative";
out.notifyRenamed = "{0} e cunoscut ca {1}";
out.notifyLeft = "{0} au părăsit sesiunea colaborativă";
@@ -112,13 +112,13 @@ define(function () {
out.history_closeTitle = "Închide istoricul";
out.history_restore = "Restabilește";
out.history_restoreTitle = "Restabilește versiunea selectată a documentului";
- out.history_restorePrompt = "Ești sigur că vrei să nlocuiești versiunea curentă a documentului cu cea afișată?";
+ out.history_restorePrompt = "Ești sigur că vrei să înlocuiești versiunea curentă a documentului cu cea afișată?";
out.history_restoreDone = "Document restabilit";
out.history_version = "Versiune:";
out.poll_title = "Zero Knowledge Selector Dată";
out.poll_subtitle = "Zero Knowledge, realtime programare";
out.poll_p_save = "Setările tale sunt actualizate instant, așa că tu nu trebuie să salvezi.";
- out.poll_p_encryption = "Tot conținutul tău este criptat ca doar persoanele cărora tu le dai link-ul să aibă acces. Nici chiar serverul nu poate să vadă ce modifici.";
+ out.poll_p_encryption = "Tot conținutul tău este criptat ca doar persoanele cărora tu le dai link-ul să aibă acces. Nici serverul nu poate să vadă ce modifici.";
out.wizardLog = "Click pe butonul din dreapta sus pentru a te ntoarce la sondajul tău";
out.wizardTitle = "Folosește wizard-ul pentru a crea sondajul tău";
out.wizardConfirm = "Ești pregătit să adaugi aceste opțiuni la sondajul tău?";
@@ -131,14 +131,14 @@ define(function () {
out.poll_closeWizardButtonTitle = "Închide wizard-ul";
out.poll_wizardComputeButton = "Calculează Opțiunile";
out.poll_wizardClearButton = "Curăță Tabelul";
- out.poll_wizardDescription = "Crează automat un număr de opțiuni introducând orice număr de zile sau intervale orare";
+ out.poll_wizardDescription = "Crează automat un număr de opțiuni întroducând orice număr de zile sau intervale orare";
out.poll_wizardAddDateButton = "+ Zi";
out.poll_wizardAddTimeButton = "+ Ore";
out.poll_optionPlaceholder = "Opțiune";
out.poll_userPlaceholder = "Numele tău";
- out.poll_removeOption = "Ești sigur că vrei să ndepărtezi această opțiune?";
- out.poll_removeUser = "Ești sigur că vrei să ndepărtezi aceast utilizator?";
+ out.poll_removeOption = "Ești sigur că vrei să îndepărtezi această opțiune?";
+ out.poll_removeUser = "Ești sigur că vrei să îndepărtezi aceast utilizator?";
out.poll_titleHint = "Titlu";
out.poll_descriptionHint = "Descrie sondajul, și apoi folosește butonul 'publică' când ai terminat. Orice utilizator care are link-ul poate modifica descrierea, dar descurajăm această practică.";
out.canvas_clear = "Curăță";
@@ -162,35 +162,35 @@ define(function () {
out.fm_folderName = "Numele folderului";
out.fm_numberOfFolders = "# de foldere";
out.fm_numberOfFiles = "# of files";
- out.fm_fileName = "File name";
+ out.fm_fileName = "Nume filă";
out.fm_title = "Titlu";
out.fm_type = "Tip";
out.fm_lastAccess = "Ultima accesare";
out.fm_creation = "Creare";
out.fm_forbidden = "Acțiune interzisă";
out.fm_originalPath = "Ruta inițială";
- out.fm_openParent = "Arată n folder";
+ out.fm_openParent = "Arată în folder";
out.fm_noname = "Document nedenumit";
out.fm_emptyTrashDialog = "Ești sigur că vrei să golești coșul de gunoi?";
- out.fm_removeSeveralPermanentlyDialog = "Ești sigur că vrei să ștergi pentru totdeauna aceste {0} elements din coșul de gunoi?";
+ out.fm_removeSeveralPermanentlyDialog = "Ești sigur că vrei să ștergi pentru totdeauna aceste {0} elemente din coșul de gunoi?";
out.fm_removePermanentlyDialog = "Ești sigur că vrei să ștergi acest element pentru totdeauna?";
out.fm_removeSeveralDialog = "Ești sigur că vrei să muți aceste {0} elemente la coșul de gunoi?";
out.fm_removeDialog = "Ești sigur că vrei să muți {0} la gunoi?";
- out.fm_restoreDialog = "Ești sigur că vrei să restabilești {0} n locația trecută?";
+ out.fm_restoreDialog = "Ești sigur că vrei să restabilești {0} în locația trecută?";
out.fm_unknownFolderError = "Ultima locație vizitată sau cea selectată nu mai există. Deschidem fișierul părinte...";
- out.fm_contextMenuError = "Nu putem deschide meniul de context pentru acest element. Dacă problema persistă, rencarcă pagina.";
- out.fm_selectError = "Nu putem selecta elementul vizat. Dacă Unable to select the targeted element. Dacă problema persistă, rencarcă pagina.";
+ out.fm_contextMenuError = "Nu putem deschide meniul de context pentru acest element. Dacă problema persistă, reîncarcă pagina.";
+ out.fm_selectError = "Nu putem selecta elementul vizat. Dacă problema persistă, reîncarcă pagina.";
out.fm_categoryError = "Nu putem deschide categoria selectată, afișează sursa.";
- out.fm_info_root = "Crează câte foldere tip cuib ai nevoie pentru a ți sorta fișierele.";
- out.fm_info_unsorted = "Conține toate fișierele pe care le-ai vizitat și nu sunt sortate n \"Documente\" sau mutate n \"Gunoi\".";
+ out.fm_info_root = "Crează câte foldere tip cuib ai nevoie pentru a-ți sorta fișierele.";
+ out.fm_info_unsorted = "Conține toate fișierele pe care le-ai vizitat și nu sunt sortate în \"Documente\" sau mutate în \"Gunoi\".";
out.fm_info_template = "Conține toate pad-urile stocate ca șabloane și pe care le poți refolosi atunci când creezi un nou pad.";
out.fm_info_trash = "Fișierele șterse din gunoi vor fi șterse și din \"Toate fișierele\", făcând imposibilă recuperarea fișierelor din managerul de fișiere.";
out.fm_info_allFiles = "Conține toate fișierele din \"Documente\", \"Nesortate\" și \"Gunoi\". Poți să muți sau să ștergi fișierele aici.";
out.fm_info_login = "Loghează-te";
out.fm_info_register = "Înscrie-te";
out.fm_info_anonymous = "Nu ești logat cu un cont valid așa că aceste pad-uri vor fi șterse (află de ce). Înscrie-te sau Loghează-te pentru a le salva.";
- out.fm_alert_backupUrl = "Link copie de rezervă pentru acest drive. Este foarte recomandat să o păstrezi pentru tine. Poți să o folosești pentru a recupera toate fișierele n cazul n care memoria browserului tău este șterge.. Oricine are linkul poate să editeze sau să ndepărteze toate fișierele din managerul tău de documente. ";
- out.fm_alert_anonymous = "Salut, momentan folosești CryptPad n mod anonim. Este ok, doar că fișierele tale vor fi șterse după o perioadă de inactivitate. Am dezactivat caracteristicile avansate ale drive-ului pentru utilizatorii anonimi pentru a face clar faptul că stocare documentelor acolo nu este o metodă sigură. Poți să citești mai multe despre motivarea noastră și despre ce de trebuie să te Înregistrezi and Loghezi.";
+ out.fm_alert_backupUrl = "Link copie de rezervă pentru acest drive. Este foarte recomandat să o păstrezi pentru tine. Poți să o folosești pentru a recupera toate fișierele în cazul în care memoria browserului tău este șterge.. Oricine are linkul poate să editeze sau să îndepărteze toate fișierele din managerul tău de documente. ";
+ out.fm_alert_anonymous = "Salut, momentan folosești CryptPad în mod anonim. Este ok, doar că fișierele tale vor fi șterse după o perioadă de inactivitate. Am dezactivat caracteristicile avansate ale drive-ului pentru utilizatorii anonimi pentru a face clar faptul că stocare documentelor acolo nu este o metodă sigură. Poți să citești mai multe despre motivarea noastră și despre ce de trebuie să te Înregistrezi si sa te Loghezi.";
out.fm_backup_title = "Link de backup";
out.fm_nameFile = "Cum ai vrea să numești fișierul?";
out.fc_newfolder = "Folder nou";
@@ -204,12 +204,12 @@ define(function () {
out.fc_prop = "Proprietăți";
out.fc_sizeInKilobytes = "Dimensiune n Kilobytes";
out.fo_moveUnsortedError = "Nu poți să muți un folder la lista de pad-uri nesortate";
- out.fo_existingNameError = "Numele ales este deja folosit n acest director. Te rugăm să alegi altul.";
- out.fo_moveFolderToChildError = "Nu poți să muți un folder ntr-unul dintre descendenții săi";
- out.fo_unableToRestore = "Nu am reușit să restaurăm fișierul n locația de origine. Poți să ncerci să l muți ntr-o nouă locație.";
- out.fo_unavailableName = "Un fișier sau un folder cu același nume există deja n locația nouă. Redenumește elementul și ncearcă din nou.";
+ out.fo_existingNameError = "Numele ales este deja folosit în acest director. Te rugăm să alegi altul.";
+ out.fo_moveFolderToChildError = "Nu poți să muți un folder într-unul dintre descendenții săi";
+ out.fo_unableToRestore = "Nu am reușit să restaurăm fișierul în locația de origine. Poți să ncerci să îl muți într-o nouă locație.";
+ out.fo_unavailableName = "Un fișier sau un folder cu același nume există deja în locația nouă. Redenumește elementul și încearcă din nou.";
out.login_login = "Loghează-te";
- out.login_makeAPad = "Crează un pad n modul anonim";
+ out.login_makeAPad = "Crează un pad în modul anonim";
out.login_nologin = "Răsfoiește pad-urile locale";
out.login_register = "Înscrie-te";
out.logoutButton = "Deloghează-te";
@@ -223,7 +223,7 @@ define(function () {
out.login_helloNoName = "Salut,";
out.login_accessDrive = "Acesează-ți drive-ul";
out.login_orNoLogin = "sau";
- out.login_noSuchUser = "Nume de utilizator sau parolă invalide. Încearcă din nou sau nscrie-te.";
+ out.login_noSuchUser = "Nume de utilizator sau parolă invalide. Încearcă din nou sau înscrie-te.";
out.login_invalUser = "Nume utilizator cerut";
out.login_invalPass = "Parolă cerută";
out.login_unhandledError = "O eroare neașteptată a avut loc emoticon_unhappy";
@@ -231,12 +231,12 @@ define(function () {
out.register_acceptTerms = "Accept termenii serviciului";
out.register_passwordsDontMatch = "Parolele nu se potrivesc!";
out.register_mustAcceptTerms = "Trebuie să accepți termenii serviciului";
- out.register_mustRememberPass = "Nu putem să ți resetăm parola dacă o uiți. Este foarte important să o ții minte! Bifează căsuța pentru a confirma.";
- out.register_header = "Bine ai venit n CryptPad";
- out.register_explanation = "
Hai să stabilim câteva lucruri, mai ntâi
Parola ta este cheia secretă care criptează toate pad-urile tale. Dacă pierzi/uiți parola nu există nici-o metodă prin care ți putem recupera datele.
Poți importa pad-uri care au fost vizionate recent n browser pentru a le avea n cont.
Dacă folosești un computer mpărțit, trebuie să te deloghezi, nchiderea taburilor nu este de ajuns.
";
- out.register_writtenPassword = "Mi-am notat numele de utilizator și parola, naintează.";
+ out.register_mustRememberPass = "Nu putem să îți resetăm parola dacă o uiți. Este foarte important să o ții minte! Bifează căsuța pentru a confirma.";
+ out.register_header = "Bine ai venit în CryptPad";
+ out.register_explanation = "
Hai să stabilim câteva lucruri, mai întâi
Parola ta este cheia secretă care criptează toate pad-urile tale. Dacă pierzi/uiți parola nu există nici-o metodă prin care îți putem recupera datele.
Poți importa pad-uri care au fost vizionate recent în browser pentru a le avea în cont.
Dacă folosești un computer împărțit, trebuie să te deloghezi, închiderea taburilor nu este de ajuns.
";
+ out.register_writtenPassword = "Mi-am notat numele de utilizator și parola, înaintează.";
out.register_cancel = "Întoarce-te";
- out.register_warning = "Zero Knowledge nseamnă că noi nu ți putem recupera datele dacă ți pierzi parola.";
+ out.register_warning = "Zero Knowledge înseamnă că noi nu îți putem recupera datele dacă îți pierzi parola.";
out.register_alreadyRegistered = "Acest user există deja, vrei să te loghezi?";
out.settings_title = "Setări";
out.settings_save = "Salvează";
@@ -245,54 +245,54 @@ define(function () {
out.settings_restore = "Restaurează";
out.settings_resetTitle = "Curăță-ți drive-ul";
out.settings_reset = "Îndepărtează toate fișierele și folderele din CryptPad-ul tău.";
- out.settings_resetPrompt = "Această acțiune o să ndepărteze toate pad-urile din drive-ul tău. Ești sigur că vrei să continui? Type “Iubesc CryptPad” pentru a confirma.";
+ out.settings_resetPrompt = "Această acțiune va indepărta toate pad-urile din drive-ul tău. Ești sigur că vrei să continui? Tastează “Iubesc CryptPad” pentru a confirma.";
out.settings_resetDone = "Drive-ul tău este acum gol!";
- out.settings_resetError = "Text de verificare incorrect. CryptPad-ul tău nu a fost schimbat.";
- out.settings_resetTips = "Sfaturi n CryptDrive";
- out.settings_resetTipsButton = "Resetează sfaturile disponibile n CryptDrive";
+ out.settings_resetError = "Text de verificare incorect. CryptPad-ul tău nu a fost schimbat.";
+ out.settings_resetTips = "Sfaturi în CryptDrive";
+ out.settings_resetTipsButton = "Resetează sfaturile disponibile în CryptDrive";
out.settings_resetTipsDone = "Toate sfaturile sunt vizibile din nou.";
out.settings_importTitle = "Importă pad-urile recente ale acestui browser n CryptDrive-ul meu";
out.settings_import = "Importă";
- out.settings_importConfirm = "Ești sigur că vrei să imporți pad-urile recente ale acestui browser n contul tău de CryptDrive?";
+ out.settings_importConfirm = "Ești sigur că vrei să imporți pad-urile recente ale acestui browser în contul tău de CryptDrive?";
out.settings_importDone = "Import complet";
- out.settings_userFeedbackHint1 = "CryptPad oferă niște feedback foarte simplu serverului, pentru a ne informa cum putem să ți mbunătățim experiența voastră.";
- out.settings_userFeedbackHint2 = "Conținutul pad-ului tău nu va fi mpărțit cu serverele.";
+ out.settings_userFeedbackHint1 = "CryptPad oferă niște feedback foarte simplu serverului, pentru a ne informa cum putem să îți îmbunătățim experiența voastră.";
+ out.settings_userFeedbackHint2 = "Conținutul pad-ului tău nu va fi împărțit cu serverele.";
out.settings_userFeedback = "Activează feedback";
out.settings_anonymous = "Nu ești logat. Setările sunt specifice browser-ului.";
out.settings_publicSigningKey = "Cheia de semnătură publică";
out.settings_usage = "Uzaj";
- out.settings_usageTitle = "Vezi dimensiunea totală a pad-urilor fixate n MB";
- out.settings_pinningNotAvailable = "Pad-urile fixate sunt disponibile doar utilizatorilor nregistrați.";
+ out.settings_usageTitle = "Vezi dimensiunea totală a pad-urilor fixate în MB";
+ out.settings_pinningNotAvailable = "Pad-urile fixate sunt disponibile doar utilizatorilor înregistrați.";
out.settings_pinningError = "Ceva nu a funcționat";
out.settings_usageAmount = "Pad-urile tale fixate ocupă {0}MB";
out.settings_logoutEverywhereTitle = "Deloghează-te peste tot";
out.settings_logoutEverywhere = "Deloghează-te din toate sesiunile web";
out.settings_logoutEverywhereConfirm = "Ești sigur? Va trebui să te loghezi, din nou, pe toate device-urile tale.";
- out.upload_serverError = "Eroare de server: fișierele tale nu pot fi ncărcate la momentul acesta.";
- out.upload_uploadPending = "Ai deja o ncărcare n desfășurare. Anulezi si ncarci noul fișier?";
+ out.upload_serverError = "Eroare de server: fișierele tale nu pot fi încărcate la momentul acesta.";
+ out.upload_uploadPending = "Ai deja o încărcare în desfășurare. Anulezi și încarci noul fișier?";
out.upload_success = "Fișierul tău ({0}) a fost ncărcat și adăugat la drive-ul tău cu succes.";
- out.main_p2 = "Acest proiect folosește CKEditor Visual Editor, CodeMirror, și ChainPad un motor n timp real.";
- out.main_howitworks_p1 = "CryptPad folosește o variantă a algoritmului de Operational transformation care este capabil să găsescă consens distribuit folosind Nakamoto Blockchain, o construcție popularizată de Bitcoin. Astfel algoritmul poate evita nevoia ca serverul central să rezove conflicte, iar serverul nu este interesat de conținutul care este editat n pad.";
- out.main_about_p2 = "Dacă ai orice fel de ntrebare sau comentariu, poți să ne dai un tweet, semnalezi o problemă on github, spui salut pe IRC (irc.freenode.net), sau trimiți un email.";
- out.main_info = "
Colaborează n siguranță
Dezvoltă-ți ideile mpreună cu documente partajate n timp ce tehnologia Zero Knowledge ți păstrează securitatea; chiar și de noi.";
+ out.main_p2 = "Acest proiect folosește CKEditor Visual Editor, CodeMirror, și ChainPad un motor în timp real.";
+ out.main_howitworks_p1 = "CryptPad folosește o variantă a algoritmului de Operational transformation care este capabil să găsescă consens distribuit folosind Nakamoto Blockchain, o construcție popularizată de Bitcoin. Astfel algoritmul poate evita nevoia ca serverul central să rezove conflicte, iar serverul nu este interesat de conținutul care este editat în pad.";
+ out.main_about_p2 = "Dacă ai orice fel de întrebare sau comentariu, poți să ne dai un tweet, semnalezi o problemă on github, spui salut pe IRC (irc.freenode.net), sau trimiți un email.";
+ out.main_info = "
Colaborează n siguranță
Dezvoltă-ți ideile împreună cu documente partajate în timp ce tehnologia Zero Knowledge îți păstrează securitatea; chiar și de noi.";
out.main_howitworks = "Cum funcționează";
out.main_zeroKnowledge = "Zero Knowledge";
- out.main_zeroKnowledge_p = "Nu trebuie să ne crezi că nu ne uităm la pad-urile tale, cu tehnologia revoluționară Zero Knowledge a CryptPad nu putem. Învață mai multe despre cum ți protejăm Learn more about how we protect your Intimitate și Securitate.";
+ out.main_zeroKnowledge_p = "Nu trebuie să ne crezi că nu ne uităm la pad-urile tale, cu tehnologia revoluționară Zero Knowledge a CryptPad nu putem. Învață mai multe despre cum îți protejăm Intimitate și Securitate.";
out.main_writeItDown = "Notează";
out.main_writeItDown_p = "Cele mai importante proiecte vin din idei mici. Notează-ți momentele de inspirație și ideile neașteptate pentru că nu știi niciodată care ar putea fi noua mare descoperire.";
out.main_share = "Partajează link-ul, partajează pad-ul";
- out.main_share_p = "Dezvoltă-ți ideile mpreună: organizează ntâlniri eficiente, colaborează pe liste TODO și fă prezentări scurte cu toți prietenii tăi și device-urile tale.";
+ out.main_share_p = "Dezvoltă-ți ideile împreună: organizează întâlniri eficiente, colaborează pe liste TODO și fă prezentări scurte cu toți prietenii tăi și device-urile tale.";
out.main_organize = "Organizează-te";
- out.main_organize_p = "Cu CryptPad Drive, poți să stai cu ochii pe ce este important. Folderele ți permit să ții evidența proiectelor tale și să ai o viziune globală asupra evoluției lucrurilor.";
+ out.main_organize_p = "Cu CryptPad Drive, poți să stai cu ochii pe ce este important. Folderele îți permit să ții evidența proiectelor tale și să ai o viziune globală asupra evoluției lucrurilor.";
out.tryIt = "Testează!";
out.main_richText = "Rich Text editor";
- out.main_richText_p = "Editează texte complexe n mod colaborativ cu Zero Knowledge n timp real. CkEditor application.";
+ out.main_richText_p = "Editează texte complexe în mod colaborativ cu Zero Knowledge în timp real. CkEditor application.";
out.main_code = "Editor cod";
- out.main_code_p = "Editează cod din softul tău, n mod colaborativ, cu Zero Knowledge n timp real.CodeMirror application.";
+ out.main_code_p = "Editează cod din softul tău, în mod colaborativ, cu Zero Knowledge în timp real.CodeMirror application.";
out.main_slide = "Editor slide-uri";
- out.main_slide_p = "Crează-ți prezentări folosind sintaxa Markdown, și afișează-le n browser-ul tău.";
+ out.main_slide_p = "Crează-ți prezentări folosind sintaxa Markdown, și afișează-le în browser-ul tău.";
out.main_poll = "Sondaj";
- out.main_poll_p = "Plănuiește ntâlniri sau evenimente, sau votează pentru cea mai bună soluție pentru problema ta.";
+ out.main_poll_p = "Plănuiește întâlniri sau evenimente, sau votează pentru cea mai bună soluție pentru problema ta.";
out.main_drive = "CryptDrive";
out.footer_applications = "Aplicații";
out.footer_contact = "Contact";
@@ -304,47 +304,47 @@ define(function () {
out.blog = "Blog";
out.policy_title = "Politica de confidențialitate CryptPad";
out.policy_whatweknow = "Ce știm despre tine";
- out.policy_whatweknow_p1 = "Ca o aplicație care este găzduită online, CryptPad are acces la metadatele expuse de protocolul HTTP. Asta include adresa IP-ului tău, și alte titluri HTTP care pot fi folosite ca să identifice un browser. Poți să vezi ce informații mpărtășește browser-ul tău vizitând WhatIsMyBrowser.com.";
+ out.policy_whatweknow_p1 = "Ca o aplicație care este găzduită online, CryptPad are acces la metadatele expuse de protocolul HTTP. Asta include adresa IP-ului tău, și alte titluri HTTP care pot fi folosite ca să identifice un browser. Poți să vezi ce informații împărtășește browser-ul tău vizitând WhatIsMyBrowser.com.";
out.policy_whatweknow_p2 = "Folosim Kibana, o platformă open source, pentru a afla mai multe despre utilizatorii noștri. Kibana ne spune despre cum ai găsit CryptPad, căutare directă, printr-un motor de căutare, sau prin recomandare de la un alt serviciu online ca Reddit sau Twitter.";
out.policy_howweuse = "Cum folosim ce aflăm";
- out.policy_howweuse_p1 = "Folosim aceste informații pentru a lua decizii mai bune n promovarea CryptPad, prin evaluarea eforturilor trecute care au fost de succes. Informațiile despre locația ta ne ajută să aflăm dacă ar trebui să oferim suport pentru alte limbi, pe lângă engleză.";
- out.policy_howweuse_p2 = "Informațiile despre browser-ul tău (dacă este bazat pe un sistem de operare desktop sau mobil) ne ajută să luăm decizii când prioritizăm viitoare mbunătățiri. Echipa noastră de development este mică, și ncercăm să facem alegeri care să mbunătățească experiența câtor mai mulți utilizatori.";
+ out.policy_howweuse_p1 = "Folosim aceste informații pentru a lua decizii mai bune în promovarea CryptPad, prin evaluarea eforturilor trecute care au fost de succes. Informațiile despre locația ta ne ajută să aflăm dacă ar trebui să oferim suport pentru alte limbi, pe lângă engleză.";
+ out.policy_howweuse_p2 = "Informațiile despre browser-ul tău (dacă este bazat pe un sistem de operare desktop sau mobil) ne ajută să luăm decizii când prioritizăm viitoarele îmbunătățiri. Echipa noastră de dezvoltare este mică, și încercăm să facem alegeri care să îmbunătățească experiența câtor mai mulți utilizatori.";
out.policy_whatwetell = "Ce le spunem altora despre tine";
- out.policy_whatwetell_p1 = "Nu furnizăm informațiile obținute terților, decât dacă ne este cerut n mod legal.";
+ out.policy_whatwetell_p1 = "Nu furnizăm informațiile obținute terților, decât dacă ne este cerut în mod legal.";
out.policy_links = "Link-uri către alte site-uri";
out.policy_links_p1 = "Acest site conține link-uri către alte site-uri, incluzându-le pe cele produse de alte organizații. Nu suntem responsabili pentru practicile de intimitate sau pentru conținutul site-urilor externe. Ca regulă generală, link-urile către site-uri externe sunt deschise ntr-o fereastră noup, pentru a face clar faptul că părăsiți CryptPad.fr.";
out.policy_ads = "Reclame";
out.policy_ads_p1 = "Nu afișăm nici o formă de publicitate online, dar s-ar putea să atașăm link-uri către instituțiile care ne finanțează cerecetarea.";
out.policy_choices = "Ce alegeri ai";
out.policy_choices_open = "Codul nostru este open source, așa că tu ai mereu posibilitatea de a-ți găzdui propria instanță de CryptPad.";
- out.policy_choices_vpn = "Dacă vrei să folosești instanța găzduită de noi, dar nu vrei să ți expui IP-ul, poți să l protejezi folosind Tor browser bundle, sau VPN.";
+ out.policy_choices_vpn = "Dacă vrei să folosești instanța găzduită de noi, dar nu vrei să îți expui IP-ul, poți să îl protejezi folosind Tor browser bundle, sau VPN.";
out.policy_choices_ads = "Dacă vrei doar să blochezi platforma noastră de analiză, poți folosi soluții de adblocking ca Privacy Badger.";
out.tos_title = "CryptPad Termeni de Utilizare";
out.tos_legal = "Te rugăm să nu fii rău intenționat, abuziv, sau să faci orice ilegal.";
- out.tos_availability = "Sperăm că o să găsești acest serviciu util, dar disponibilitatea sau performanța nu poate fi garantată. Te rugăm să ți exporți datele n mod regulat.";
- out.tos_e2ee = "Conținutul CryptPad poate fi citit sau modificat de oricine care poate ghici sau obține fragmentul identificator al pad-ului. Recomandăm să folosești soluții de comunicare criptate end-to-end-encrypted (e2ee) pentru a partaja link-uri, evitând orice risc n cazul unei scurgeri de informații.";
- out.tos_logs = "Metadatele oferite de browser-ul tău serverului ar putea fi nscrise n scopul de a menține serviciul.";
+ out.tos_availability = "Sperăm că o să găsești acest serviciu util, dar disponibilitatea sau performanța nu poate fi garantată. Te rugăm să îți exporți datele n mod regulat.";
+ out.tos_e2ee = "Conținutul CryptPad poate fi citit sau modificat de oricine care poate ghici sau obține fragmentul identificator al pad-ului. Recomandăm să folosești soluții de comunicare criptate end-to-end-encrypted (e2ee) pentru a partaja link-uri, evitând orice risc în cazul unei scurgeri de informații.";
+ out.tos_logs = "Metadatele oferite de browser-ul tău serverului ar putea fi înscrise în scopul de a menține serviciul.";
out.tos_3rdparties = "Nu oferim date personale terților, decât dacă ne sunt solicitate prin lege.";
out.bottom_france = "Realizat cu n ";
out.bottom_support = "Un proiect al Labs Project cu susținerea ";
out.header_france = "With from by ";
out.header_support = "";
out.header_logoTitle = "Mergi la pagina principală";
- out.initialState = "
Acesta este CryptPad, editorul colaborativ bazat pe tehnologia Zero Knowledge n timp real. Totul este salvat pe măsură ce scrii. Partajează link-ul către acest pad pentru a edita cu prieteni sau folosește Share butonul pentru a partaja read-only link permițând vizualizarea dar nu și editarea.
Îndrăznește, ncepe să scrii...
";
+ out.initialState = "
Acesta este CryptPad, editorul colaborativ bazat pe tehnologia Zero Knowledge în timp real. Totul este salvat pe măsură ce scrii. Partajează link-ul către acest pad pentru a edita cu prieteni sau folosește Share butonul pentru a partaja read-only link permițând vizualizarea dar nu și editarea.
Îndrăznește, începe să scrii...
";
out.codeInitialState = "/*\n Acesta este editorul colaborativ de cod bazat pe tehnologia Zero Knowledge CryptPad.\n Ce scrii aici este criptat, așa că doar oamenii care au link-ul pot să-l acceseze.\n Poți să alegi ce limbaj de programare pus n evidență și schema de culori UI n dreapta sus.\n*/";
- out.slideInitialState = "# CryptSlide\n* Acesta este un editor colaborativ bazat pe tehnologia Zero Knowledge.\n* Ce scrii aici este criptat, așa că doar oamenii care au link-ul pot să-l acceseze.\n* Nici măcar serverele nu au acces la ce scrii tu.\n* Ce vezi aici, ce auzi aici, atunci când pleci, lasă aici.\n\n-\n# Cum se folosește\n1. Scrie-ți conținutul slide-urilor folosind sintaxa markdown\n - Află mai multe despre sintaxa markdown [aici](http://www.markdowntutorial.com/)\n2. Separă-ți slide-urile cu -\n3. Click pe butonul \"Play\" pentru a vedea rezultatele - Slide-urile tale sunt actualizate n timp real.";
+ out.slideInitialState = "# CryptSlide\n* Acesta este un editor colaborativ bazat pe tehnologia Zero Knowledge.\n* Ce scrii aici este criptat, așa că doar oamenii care au link-ul pot să-l acceseze.\n* Nici măcar serverele nu au acces la ce scrii tu.\n* Ce vezi aici, ce auzi aici, atunci când pleci, lași aici.\n\n-\n# Cum se folosește\n1. Scrie-ți conținutul slide-urilor folosind sintaxa markdown\n - Află mai multe despre sintaxa markdown [aici](http://www.markdowntutorial.com/)\n2. Separă-ți slide-urile cu -\n3. Click pe butonul \"Play\" pentru a vedea rezultatele - Slide-urile tale sunt actualizate în timp real.";
out.driveReadmeTitle = "Ce este CryptDrive?";
out.readme_welcome = "Bine ai venit n CryptPad !";
- out.readme_p1 = "Bine ai venit n CryptPad, acesta este locul unde ți poți lua notițe, singur sau cu prietenii.";
- out.readme_p2 = "Acest pad o să ți ofere un scurt ghid n cum poți să folosești CryptPad pentru a lua notițe, a le ține organizate și a colabora pe ele.";
+ out.readme_p1 = "Bine ai venit în CryptPad, acesta este locul unde îți poți lua notițe, singur sau cu prietenii.";
+ out.readme_p2 = "Acest pad o să îți ofere un scurt ghid în cum poți să folosești CryptPad pentru a lua notițe, a le ține organizate și a colabora pe ele.";
out.readme_cat1 = "Descoperă-ți CryptDrive-ul";
out.readme_cat1_l1 = "Crează un pad: În CryptDrive-ul tău, dă click {0} apoi {1} și poți să creezi un pad.";
out.readme_cat1_l2 = "Deschide pad-urile din CryptDrive-ul tău: doublu-click pe iconița unui pad pentru a-l deschide.";
- out.readme_cat1_l3 = "Organizează-ți pad-urile: Când ești logat, orice pad accesezi va fi afișat ca n secțiunea {0} a drive-ului tău.";
- out.readme_cat1_l3_l1 = "Poți să folosești funcția click and drag pentru a muta fișierele n folderele secțiunii {0} a drive-ului tău și pentru a crea noi foldere.";
- out.readme_cat1_l3_l2 = "Ține minte să ncerci click-dreapta pe iconițe pentru că există și meniuri adiționale.";
- out.readme_cat1_l4 = "Pune pad-urile vechi n gunoi. Poți să folosești funcția click and drag pe pad-uri n categoria {0} la fel ca și n cazul folderelor.";
+ out.readme_cat1_l3 = "Organizează-ți pad-urile: Când ești logat, orice pad accesezi va fi afișat ca în secțiunea {0} a drive-ului tău.";
+ out.readme_cat1_l3_l1 = "Poți să folosești funcția click and drag pentru a muta fișierele în folderele secțiunii {0} a drive-ului tău și pentru a crea noi foldere.";
+ out.readme_cat1_l3_l2 = "Ține minte să încerci click-dreapta pe iconițe pentru că există și meniuri adiționale.";
+ out.readme_cat1_l4 = "Pune pad-urile vechi în gunoi. Poți să folosești funcția click and drag pe pad-uri în categoria {0} la fel ca și în cazul folderelor.";
out.readme_cat2 = "Crează pad-uri ca un profesionist";
out.edit = "editează";
out.view = "vezi";
@@ -361,11 +361,11 @@ define(function () {
out.tips.indentare = "În listele cu bulină sau cele numerotate, poți folosi tab sau shift+tab pentru a mări sau micșora indentarea.";
out.tips.titlu = "Poți seta titlul pad-urilor tale prin click pe centru sus.";
out.tips.stocare = "De fiecare dată când vizitezi un pad, dacă ești logat va fi salvat pe CryptDrive-ul tău.";
- out.tips.marker = "Poți sublinia text ntr-un pad folosind itemul \"marker\" n meniul de stiluri.";
+ out.tips.marker = "Poți sublinia text într-un pad folosind itemul \"marker\" n meniul de stiluri.";
- out.feedback_about = "Dacă citești asta, probabil că ești curios de ce CryptPad cere pagini web atunci când ntreprinzi anumite acțiuni";
- out.feedback_privacy = "Ne pasă de intimitatea ta, si n același timp vrem să păstrăm CryptPad ușor de folosit. Folosim acest fișier pentru a ne da seama care beneficii UI contează cel mai mult pentru utilizatori, cerându-l alături de un parametru specific atunci când acțiunea se desfășoară";
+ out.feedback_about = "Dacă citești asta, probabil că ești curios de ce CryptPad cere pagini web atunci când întreprinzi anumite acțiuni";
+ out.feedback_privacy = "Ne pasă de intimitatea ta, si în același timp vrem să păstrăm CryptPad ușor de folosit. Folosim acest fișier pentru a ne da seama care beneficii UI contează cel mai mult pentru utilizatori, cerându-l alături de un parametru specific atunci când acțiunea se desfășoară";
out.feedback_optout = "Dacă vrei să ieși, vizitează setările de pe pagina ta de user, unde vei găsi o căsuță pentru a activa sau dezactiva feedback-ul de la user";
return out;
-});
\ No newline at end of file
+});
From cf658c1b3ab3df508a16731906e291cc80be8530 Mon Sep 17 00:00:00 2001
From: ansuz
Date: Fri, 26 May 2017 12:41:30 +0200
Subject: [PATCH 015/100] backport live changes
---
www/code/main.js | 17 ++++++++++++++---
www/common/common-util.js | 9 +++++++++
www/common/cryptpad-common.js | 1 +
3 files changed, 24 insertions(+), 3 deletions(-)
diff --git a/www/code/main.js b/www/code/main.js
index fa6ecf12b..d82d73273 100644
--- a/www/code/main.js
+++ b/www/code/main.js
@@ -110,6 +110,18 @@ define([
return stringify(obj);
};
+ var forceDrawPreview = function () {
+ try {
+ DiffMd.apply(DiffMd.render(editor.getValue()), $preview);
+ } catch (e) { console.error(e); }
+ };
+
+ var drawPreview = Cryptpad.throttle(function () {
+ if (CodeMirror.highlightMode !== 'markdown') { return; }
+ if (!$previewContainer.is(':visible')) { return; }
+ forceDrawPreview();
+ }, 150);
+
var onLocal = config.onLocal = function () {
if (initializing) { return; }
if (isHistoryMode) { return; }
@@ -117,7 +129,7 @@ define([
editor.save();
- DiffMd.apply(DiffMd.render(editor.getValue()), $preview);
+ drawPreview();
var textValue = canonicalize(CodeMirror.$textarea.val());
var shjson = stringifyInner(textValue);
@@ -324,14 +336,13 @@ define([
var hjson = JSON.parse(shjson);
var remoteDoc = hjson.content;
- DiffMd.apply(DiffMd.render(remoteDoc), $preview);
-
var highlightMode = hjson.highlightMode;
if (highlightMode && highlightMode !== APP.highlightMode) {
CodeMirror.setMode(highlightMode, onModeChanged);
}
CodeMirror.setValueAndCursor(oldDoc, remoteDoc, TextPatcher);
+ drawPreview();
if (!readOnly) {
var textValue = canonicalize(CodeMirror.$textarea.val());
diff --git a/www/common/common-util.js b/www/common/common-util.js
index 6fb2ad7bb..debbd8e2d 100644
--- a/www/common/common-util.js
+++ b/www/common/common-util.js
@@ -122,5 +122,14 @@ define([], function () {
xhr.send(null);
};
+ Util.throttle = function (f, ms) {
+ var to;
+ var g = function () {
+ window.clearTimeout(to);
+ to = window.setTimeout(f, ms);
+ };
+ return g;
+ };
+
return Util;
});
diff --git a/www/common/cryptpad-common.js b/www/common/cryptpad-common.js
index 730a7984f..20927dc04 100644
--- a/www/common/cryptpad-common.js
+++ b/www/common/cryptpad-common.js
@@ -71,6 +71,7 @@ define([
common.bytesToMegabytes = Util.bytesToMegabytes;
common.bytesToKilobytes = Util.bytesToKilobytes;
common.fetch = Util.fetch;
+ common.throttle = Util.throttle;
// import hash utilities for export
var createRandomHash = common.createRandomHash = Hash.createRandomHash;
From 57017c68fa2169644ff721fb4c9af253ba9112b2 Mon Sep 17 00:00:00 2001
From: ansuz
Date: Fri, 26 May 2017 12:42:12 +0200
Subject: [PATCH 016/100] hacks for cross-domain safari
---
www/common/fsStore.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/www/common/fsStore.js b/www/common/fsStore.js
index b20c38c48..08a1a8fa3 100644
--- a/www/common/fsStore.js
+++ b/www/common/fsStore.js
@@ -172,7 +172,7 @@ define([
if (typeof(proxy.loginToken) !== 'number') {
proxy[tokenKey] = Math.floor(Math.random()*Number.MAX_SAFE_INTEGER);
}
-
+ if (sessionStorage) { sessionStorage.setItem('User_hash', localStorage.getItem('User_hash')); }
var localToken = tryParsing(localStorage.getItem(tokenKey));
if (localToken === null) {
// if that number hasn't been set to localStorage, do so.
From 2ecf257fcdcadd65ea17c0e9f7b3678fb2b39c03 Mon Sep 17 00:00:00 2001
From: Caleb James DeLisle
Date: Fri, 26 May 2017 15:30:01 +0200
Subject: [PATCH 017/100] Sync localStorage with sessionStorage in auth because
safari...
---
www/auth/main.js | 3 +++
1 file changed, 3 insertions(+)
diff --git a/www/auth/main.js b/www/auth/main.js
index 488165911..747434c23 100644
--- a/www/auth/main.js
+++ b/www/auth/main.js
@@ -18,6 +18,9 @@ define([
/^http(s)?:\/\/localhost\:/
];
+ // Safari is weird about localStorage in iframes but seems to let sessionStorage slide.
+ localStorage.User_hash = localStorage.User_hash || sessionStorage.User_hash;
+
Cryptpad.ready(function () {
console.log('IFRAME READY');
$(window).on("message", function (jqe) {
From 0559b8cb775584f341fd84ec93809c3429d21a9d Mon Sep 17 00:00:00 2001
From: superniko
Date: Fri, 26 May 2017 16:47:45 +0300
Subject: [PATCH 018/100] Update messages.ro.js
---
customize.dist/translations/messages.ro.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/customize.dist/translations/messages.ro.js b/customize.dist/translations/messages.ro.js
index 2c09b9a76..75c1c5852 100644
--- a/customize.dist/translations/messages.ro.js
+++ b/customize.dist/translations/messages.ro.js
@@ -274,7 +274,7 @@ define(function () {
out.main_p2 = "Acest proiect folosește CKEditor Visual Editor, CodeMirror, și ChainPad un motor în timp real.";
out.main_howitworks_p1 = "CryptPad folosește o variantă a algoritmului de Operational transformation care este capabil să găsescă consens distribuit folosind Nakamoto Blockchain, o construcție popularizată de Bitcoin. Astfel algoritmul poate evita nevoia ca serverul central să rezove conflicte, iar serverul nu este interesat de conținutul care este editat în pad.";
out.main_about_p2 = "Dacă ai orice fel de întrebare sau comentariu, poți să ne dai un tweet, semnalezi o problemă on github, spui salut pe IRC (irc.freenode.net), sau trimiți un email.";
- out.main_info = "
Colaborează n siguranță
Dezvoltă-ți ideile împreună cu documente partajate în timp ce tehnologia Zero Knowledge îți păstrează securitatea; chiar și de noi.";
+ out.main_info = "
diff --git a/www/login/main.js b/www/login/main.js
index 194c824ac..caa77fe4b 100644
--- a/www/login/main.js
+++ b/www/login/main.js
@@ -128,5 +128,16 @@ define([
}, 0);
}, 100);
});
+ $('#register').on('click', function () {
+ if (sessionStorage) {
+ if ($uname.val()) {
+ sessionStorage.login_user = $uname.val();
+ }
+ if ($passwd.val()) {
+ sessionStorage.login_pass = $passwd.val();
+ }
+ }
+ window.location.href = '/register/';
+ });
});
});
From f434f002c4707be7362ca98eb5dc77097f347c55 Mon Sep 17 00:00:00 2001
From: Pierre Bondoerffer
Date: Mon, 29 May 2017 16:32:40 +0200
Subject: [PATCH 021/100] poll: make locks clickable
---
www/poll/main.js | 61 ++++++++++++++++++++++------------------------
www/poll/poll.css | 31 +++++++++++++++++------
www/poll/poll.less | 25 ++++++++++++++++---
www/poll/render.js | 9 ++-----
4 files changed, 77 insertions(+), 49 deletions(-)
diff --git a/www/poll/main.js b/www/poll/main.js
index 96012b7da..6e42ca75c 100644
--- a/www/poll/main.js
+++ b/www/poll/main.js
@@ -15,8 +15,6 @@ define([
$(function () {
- var unlockHTML = '';
- var lockHTML = '';
var HIDE_INTRODUCTION_TEXT = "hide_poll_text";
var defaultName;
@@ -100,12 +98,10 @@ define([
// Enable the checkboxes for the user's column (committed or not)
$('input[disabled="disabled"][data-rt-id^="' + id + '"]').removeAttr('disabled');
$('input[type="checkbox"][data-rt-id^="' + id + '"]').addClass('enabled');
- $('[data-rt-id="' + id + '"] ~ .edit').css('visibility', 'hidden');
- $('.lock[data-rt-id="' + id + '"]').html(unlockHTML).attr('title', Messages.poll_unlocked);
+ $('.lock[data-rt-id="' + id + '"]').addClass('fa-unlock').removeClass('fa-lock').attr('title', Messages.poll_unlocked);
if (isOwnColumnCommitted()) { return; }
$('[data-rt-id^="' + id + '"]').closest('td').addClass("uncommitted");
- $('td.uncommitted .remove, td.uncommitted .edit').css('visibility', 'hidden');
$('td.uncommitted .cover').addClass("uncommitted");
$('.uncommitted input[type="text"]').attr("placeholder", Messages.poll_userPlaceholder);
};
@@ -118,8 +114,7 @@ define([
APP.editable.col.forEach(function (id) {
$('input[disabled="disabled"][data-rt-id^="' + id + '"]').removeAttr('disabled');
$('input[type="checkbox"][data-rt-id^="' + id + '"]').addClass('enabled');
- $('span.edit[data-rt-id="' + id + '"]').css('visibility', 'hidden');
- $('.lock[data-rt-id="' + id + '"]').html(unlockHTML).attr('title', Messages.poll_unlocked);
+ $('.lock[data-rt-id="' + id + '"]').addClass('fa-unlock').removeClass('fa-lock').attr('title', Messages.poll_unlocked);
});
};
@@ -276,7 +271,6 @@ define([
switch (type) {
case 'text':
debug("text[rt-id='%s'] [%s]", id, input.value);
- if (!input.value) { return void debug("Hit enter?"); }
Render.setValue(object, id, input.value);
change(null, null, null, 50);
break;
@@ -295,12 +289,26 @@ define([
}
};
+ var hideInputs = function (target, isKeyup) {
+ if (!isKeyup && $(target).is('[type="text"]')) {
+ return;
+ }
+ $('.lock[data-rt-id!="' + APP.userid + '"]').addClass('fa-lock').removeClass('fa-unlock').attr('title', Messages.poll_locked);
+ var $cells = APP.$table.find('thead td:not(.uncommitted), tbody td');
+ $cells.find('[type="text"][data-rt-id!="' + APP.userid + '"]').attr('disabled', true);
+ $('.edit[data-rt-id!="' + APP.userid + '"]').css('visibility', 'visible');
+ APP.editable.col = [APP.userid];
+ APP.editable.row = [];
+ };
+
/* Called whenever an event is fired on a span */
var handleSpan = function (span) {
var id = span.getAttribute('data-rt-id');
var type = Render.typeofId(id);
var isRemove = span.className && span.className.split(' ').indexOf('remove') !== -1;
var isEdit = span.className && span.className.split(' ').indexOf('edit') !== -1;
+ var isLock = span.className && span.className.split(' ').indexOf('lock') !== -1;
+ var isLocked = span.className && span.className.split(' ').indexOf('fa-lock') !== -1;
if (type === 'row') {
if (isRemove) {
Cryptpad.confirm(Messages.poll_removeOption, function (res) {
@@ -310,6 +318,7 @@ define([
});
});
} else if (isEdit) {
+ hideInputs(span);
unlockRow(id, function () {
change(null, null, null, null, function() {
$('input[data-rt-id="' + id + '"]').focus();
@@ -324,7 +333,8 @@ define([
change();
});
});
- } else if (isEdit) {
+ } else if (isLock && isLocked) {
+ hideInputs(span);
unlockColumn(id, function () {
change(null, null, null, null, function() {
$('input[data-rt-id="' + id + '"]').focus();
@@ -338,48 +348,34 @@ define([
}
};
- var hideInputs = function (e, isKeyup) {
- if (!isKeyup && $(e.target).is('[type="text"]')) {
- return;
- }
- $('.lock[data-rt-id!="' + APP.userid + '"]').html(lockHTML).attr('title', Messages.poll_lock);
- var $cells = APP.$table.find('thead td:not(.uncommitted), tbody td');
- $cells.find('[type="text"][data-rt-id!="' + APP.userid + '"]').attr('disabled', true);
- $('.edit[data-rt-id!="' + APP.userid + '"]').css('visibility', 'visible');
- APP.editable.col = [APP.userid];
- APP.editable.row = [];
- };
-
- $(window).click(hideInputs);
-
var handleClick = function (e, isKeyup) {
e.stopPropagation();
if (!APP.ready) { return; }
var target = e && e.target;
- if (isKeyup) {
- debug("Keyup!");
- }
-
if (!target) { return void debug("NO TARGET"); }
var nodeName = target && target.nodeName;
+ var shouldLock = $(target).hasClass('fa-unlock');
- if (!$(target).parents('#table tbody').length || $(target).hasClass('edit')) {
+ if ((!$(target).parents('#table tbody').length && $(target).hasClass('lock'))) {
hideInputs(e);
}
switch (nodeName) {
case 'INPUT':
if (isKeyup && (e.keyCode === 13 || e.keyCode === 27)) {
- hideInputs(e, isKeyup);
- return;
+ hideInputs(target, isKeyup);
+ break;
}
handleInput(target);
break;
case 'SPAN':
//case 'LABEL':
+ if (shouldLock) {
+ break;
+ }
handleSpan(target);
break;
case undefined:
@@ -459,7 +455,6 @@ var ready = function (info, userid, readOnly) {
var $table = APP.$table = $(Render.asHTML(displayedObj, null, colsOrder, readOnly));
APP.$createRow = $('#create-option').click(function () {
- //console.error("BUTTON CLICKED! LOL");
Render.createRow(proxy, function (empty, id) {
change(null, null, null, null, function() {
$('.edit[data-rt-id="' + id + '"]').click();
@@ -470,7 +465,7 @@ var ready = function (info, userid, readOnly) {
APP.$createCol = $('#create-user').click(function () {
Render.createColumn(proxy, function (empty, id) {
change(null, null, null, null, function() {
- $('.edit[data-rt-id="' + id + '"]').click();
+ $('.lock[data-rt-id="' + id + '"]').click();
});
});
});
@@ -532,6 +527,8 @@ var ready = function (info, userid, readOnly) {
.click(handleClick)
.on('keyup', function (e) { handleClick(e, true); });
+ $(window).click(hideInputs);
+
proxy
.on('change', ['info'], function (o, n, p) {
if (p[1] === 'title') {
diff --git a/www/poll/poll.css b/www/poll/poll.css
index 8016a10c4..3e534d5e2 100644
--- a/www/poll/poll.css
+++ b/www/poll/poll.css
@@ -266,23 +266,37 @@ div.realtime table input[type="text"] {
border: 1px solid #fff;
width: 80%;
}
+form.realtime table span,
+div.realtime table span {
+ user-select: none;
+ -moz-user-select: none;
+ -webkit-user-select: none;
+ -ms-user-select: none;
+}
form.realtime table thead td,
div.realtime table thead td {
padding: 0px 5px;
background: #aaa;
border-radius: 20px 20px 0 0;
- text-align: center;
+}
+form.realtime table thead td:nth-of-type(2),
+div.realtime table thead td:nth-of-type(2) {
+ background: #999;
+}
+form.realtime table thead td:nth-of-type(2) .lock,
+div.realtime table thead td:nth-of-type(2) .lock {
+ cursor: default;
}
form.realtime table thead td input[type="text"],
div.realtime table thead td input[type="text"] {
width: 100%;
box-sizing: border-box;
+ padding: 1px 5px;
}
form.realtime table thead td input[type="text"][disabled],
div.realtime table thead td input[type="text"][disabled] {
color: #000;
- padding: 1px 5px;
- border: none;
+ border: 1px solid transparent;
}
form.realtime table tbody .text-cell,
div.realtime table tbody .text-cell {
@@ -302,10 +316,6 @@ div.realtime table tbody .text-cell .remove {
float: left;
margin: 0 0 0 10px;
}
-form.realtime table tbody tr td:nth-child(2),
-div.realtime table tbody tr td:nth-child(2) {
- border-left: 1px solid #555;
-}
form.realtime table tbody tr:not(:first-child) td:not(:first-child) label,
div.realtime table tbody tr:not(:first-child) td:not(:first-child) label {
border-top: 1px solid #555;
@@ -317,6 +327,13 @@ div.realtime table .edit {
float: left;
margin-left: 10px;
}
+form.realtime table .lock,
+div.realtime table .lock {
+ margin-left: calc(50% - 0.5em);
+ cursor: pointer;
+ width: 1em;
+ text-align: center;
+}
form.realtime table .remove,
div.realtime table .remove {
float: right;
diff --git a/www/poll/poll.less b/www/poll/poll.less
index 1ddcaa2f0..699e96e03 100644
--- a/www/poll/poll.less
+++ b/www/poll/poll.less
@@ -2,6 +2,7 @@
@import "../../customize.dist/src/less/mixins.less";
@poll-th-bg: #aaa;
+@poll-th-user-bg: #999;
@poll-td-bg: #aaa;
@poll-placeholder: #666;
@poll-border-color: #555;
@@ -293,20 +294,32 @@ form.realtime, div.realtime {
width: 80%;
}
}
+ span {
+ user-select: none;
+ -moz-user-select: none;
+ -webkit-user-select: none;
+ -ms-user-select: none;
+ }
thead {
td {
padding: 0px 5px;
background: @poll-th-bg;
border-radius: 20px 20px 0 0;
- text-align: center;
+ //text-align: center;
+ &:nth-of-type(2) {
+ background: @poll-th-user-bg;
+ .lock {
+ cursor: default;
+ }
+ }
input {
&[type="text"] {
width: 100%;
box-sizing: border-box;
+ padding: 1px 5px;
&[disabled] {
color: @poll-fg;
- padding: 1px 5px;
- border: none;
+ border: 1px solid transparent;
}
}
}
@@ -344,6 +357,12 @@ form.realtime, div.realtime {
margin-left: 10px;
}
+ .lock {
+ margin-left: ~"calc(50% - 0.5em)";
+ cursor: pointer;
+ width: 1em;
+ text-align: center;
+ }
.remove {
float: right;
margin-right: 10px;
diff --git a/www/poll/render.js b/www/poll/render.js
index ecd94159d..8399d5b71 100644
--- a/www/poll/render.js
+++ b/www/poll/render.js
@@ -269,12 +269,8 @@ var Renderer = function (Cryptpad) {
return ['SPAN', {
'data-rt-id': id,
'title': Cryptpad.Messages.poll_locked,
- class: 'lock',
- }, [['i', {
- class: 'fa fa-lock',
- 'aria-hidden': true,
- }, []]
- ]];
+ class: 'lock fa fa-lock',
+ }, []];
};
var makeHeadingCell = Render.makeHeadingCell = function (cell, readOnly) {
@@ -284,7 +280,6 @@ var Renderer = function (Cryptpad) {
if (!readOnly) {
elements.unshift(makeRemoveElement(cell['data-rt-id']));
elements.unshift(makeLockElement(cell['data-rt-id']));
- elements.unshift(makeEditElement(cell['data-rt-id']));
}
return ['TD', {}, elements];
}
From 6518b56945ece824a4ded11c7fb06f8e366311a8 Mon Sep 17 00:00:00 2001
From: Pierre Bondoerffer
Date: Mon, 29 May 2017 16:50:25 +0200
Subject: [PATCH 022/100] poll: french messages
---
customize.dist/translations/messages.fr.js | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/customize.dist/translations/messages.fr.js b/customize.dist/translations/messages.fr.js
index a112d397e..71227966c 100644
--- a/customize.dist/translations/messages.fr.js
+++ b/customize.dist/translations/messages.fr.js
@@ -193,6 +193,11 @@ define(function () {
out.poll_titleHint = "Titre";
out.poll_descriptionHint = "Description";
+ out.poll_remove = "Supprimer";
+ out.poll_edit = "Modifier";
+ out.poll_locked = "Verrouillé";
+ out.poll_unlocked = "Déverrouillé";
+
// Canvas
out.canvas_clear = "Nettoyer";
out.canvas_delete = "Supprimer la sélection";
From 1240b864ef2c0791a85268cf0101f779749ca1d7 Mon Sep 17 00:00:00 2001
From: ansuz
Date: Mon, 29 May 2017 17:25:06 +0200
Subject: [PATCH 023/100] fix misconfigured history
---
www/code/main.js | 4 ++--
www/pad/main.js | 4 ++--
www/slide/main.js | 4 ++--
3 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/www/code/main.js b/www/code/main.js
index d82d73273..d4f414040 100644
--- a/www/code/main.js
+++ b/www/code/main.js
@@ -191,8 +191,8 @@ define([
/* add a history button */
var histConfig = {
- onLocal: config.onLocal(),
- onRemote: config.onRemote(),
+ onLocal: config.onLocal,
+ onRemote: config.onRemote,
setHistory: setHistory,
applyVal: function (val) {
var remoteDoc = JSON.parse(val || '{}').content;
diff --git a/www/pad/main.js b/www/pad/main.js
index 635ea0087..f7d16a20b 100644
--- a/www/pad/main.js
+++ b/www/pad/main.js
@@ -500,8 +500,8 @@ define([
/* add a history button */
var histConfig = {
- onLocal: realtimeOptions.onLocal(),
- onRemote: realtimeOptions.onRemote(),
+ onLocal: realtimeOptions.onLocal,
+ onRemote: realtimeOptions.onRemote,
setHistory: setHistory,
applyVal: function (val) { applyHjson(val || '["BODY",{},[]]'); },
$toolbar: $bar
diff --git a/www/slide/main.js b/www/slide/main.js
index 6f04f96d0..f27fdbb2b 100644
--- a/www/slide/main.js
+++ b/www/slide/main.js
@@ -313,8 +313,8 @@ define([
/* add a history button */
var histConfig = {
- onLocal: config.onLocal(),
- onRemote: config.onRemote(),
+ onLocal: config.onLocal,
+ onRemote: config.onRemote,
setHistory: setHistory,
applyVal: function (val) {
var remoteDoc = JSON.parse(val || '{}').content;
From c4f8286be66be9562b177d902462140262598732 Mon Sep 17 00:00:00 2001
From: ansuz
Date: Mon, 29 May 2017 17:35:13 +0200
Subject: [PATCH 024/100] add timestamp to rpc error logs
---
rpc.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/rpc.js b/rpc.js
index 45be04cc7..07ad2e1cd 100644
--- a/rpc.js
+++ b/rpc.js
@@ -789,7 +789,7 @@ RPC.create = function (config /*:typeof(ConfigType)*/, cb /*:(?Error, ?Function)
var warn = function (e, output) {
if (e && !config.suppressRPCErrors) {
- console.error('[' + e + ']', output);
+ console.error(new Date().toISOString() + ' [' + e + ']', output);
}
};
From 0a92719763f4f31b77782044b130b19272942890 Mon Sep 17 00:00:00 2001
From: Pierre Bondoerffer
Date: Mon, 29 May 2017 18:25:18 +0200
Subject: [PATCH 025/100] spanish! new keys ahoy
---
customize.dist/translations/messages.es.js | 30 +++++++++++++++++++---
1 file changed, 26 insertions(+), 4 deletions(-)
diff --git a/customize.dist/translations/messages.es.js b/customize.dist/translations/messages.es.js
index 40efab91e..e3047cede 100644
--- a/customize.dist/translations/messages.es.js
+++ b/customize.dist/translations/messages.es.js
@@ -13,8 +13,7 @@ define(function () {
out.type.slide = 'Presentación';
out.type.whiteboard = 'Pizarra';
- out.updated_0_common_connectionLost = "Connexión perdida El documento está ahora en modo solo lectura hasta que la conexión vuelva.";
- out.common_connectionLost = out.updated_0_common_connectionLost;
+ out.common_connectionLost = "Connexión perdida El documento está ahora en modo solo lectura hasta que la conexión vuelva.";
out.disconnected = "Desconectado";
out.synchronizing = "Sincronización";
@@ -200,7 +199,6 @@ define(function () {
out.fm_info_root = "Crea carpetas aquí para organizar tus documentos.";
out.fm_info_unsorted = "Contiene todos los documentos que has visitado que no estan organizados en \"Documentos\" o movidos a la \"Papelera\".";
out.fm_info_template = "Contiene todas las plantillas que puedes volver a usar para crear nuevos documentos.";
- out.fm_info_trash = "Archivos eliminados de la papelera también se eliminan de \"Todos los archivos\" y es imposible recuparlos desde el explorador.";
out.fm_info_allFiles = "Contiene todos los archivos de \"Documentos\", \"Sin organizar\" y \"Papelera\". No puedes mover o eliminar archivos aquí.";
out.fm_alert_backupUrl = "Enlace de copia de seguridad para este drive. Te recomendamos muy fuertemente que lo guardes secreto. Lo puedes usar para recuparar todos tus archivos en el caso que la memoria de tu navegador se borre. Cualquiera con este enlace puede editar o eliminar todos los archivos en el explorador. ";
out.fm_backup_title = "Enlace de copia de seguridad";
@@ -417,7 +415,6 @@ define(function () {
out.formattedKB = "{0} KB";
out.pinLimitReached = "Has llegado al limite de espacio";
- out.pinLimitReachedAlert = "Has llegado al limite de espacio. Nuevos pads no serán movidos a tu CryptDrive. Para resolver este problema, puedes quitar pads de tu CryptDrive (incluso en la papelera) o mejorar tu cuenta para obtener más espacio.";
out.pinLimitNotPinned = "Has llegado al limite de espacio. Este pad no estará presente en tu CryptDrive.";
out.pinLimitDrive = "Has llegado al limite de espacio. No puedes crear nuevos pads.";
out.printTransition = "Activar transiciones";
@@ -429,5 +426,30 @@ define(function () {
out.upload_uploadPending = "Ya tienes una subida en progreso. ¿Cancelar y subir el nuevo archivo?";
out.upload_success = "Tu archivo ({0}) ha sido subido con éxito y fue añadido a tu drive.";
+ // 1.7.0 - Hodag
+ out.comingSoon = "Próximamente..."; // "Coming soon..."
+ out.newVersion = ["CryptPad ha sido actualizado!",
+ "Puedes ver lo que ha cambiada aquí (en inglés):",
+ "Notas de versión para CryptPad {0}"].join(" ");
+ out.pinLimitReachedAlert = ["Has llegado a tu limite de espacio. Nuevos pads no serán guardados en tu CryptDrive.",
+ "Puedes eliminar pads de tu CryptDrive o suscribirte a una oferta premium para obtener más espacio."].join(" ");
+ out.pinLimitReachedAlertNoAccounts = "Has llegado a tu limite de espacio";
+ out.pinAboveLimitAlert = "Desde esta versión, ponemos un limite de 50MB a las cuentas gratís y estás usando {0}. Tendrás que eliminar unos pads o suscribirte en accounts.cryptpad.fr. Tu contribución nos ayuda a mejorar CryptPad y extender el Zero Knowledge. Por favor contacta el soporte si tienes preguntas adicionales.";
+ out.previewButtonTitle = "Mostrar/esconder la vista previa Markdown";
+ out.fm_info_trash = "Vacía tu papelera para liberar espaci en tu CryptDrive.";
+ out.fm_info_anonymous = "No estás conectado, así que estos pads pueden ser borrados (¿por qué?). Registrate o Inicia sesión para asegurarlos.";
+ out.fm_alert_anonymous = "Hola, estás usando CryptPad anónimamente. Está bien, pero tus pads pueden ser borrados después de un périodo de inactividad. Hemos desactivado funciones avanzadas de CryptDrive para usuarios anónimos porque queremos ser claros que no es un lugar seguro para almacenar cosas. Puedes leer este articulo (en inglés) sobre por qué hacemos esto y por qué deberías Registrarte e Iniciar sesión.";
+ out.fm_error_cantPin = "Error del servidor. Por favor, recarga la página e intentalo de nuevo.";
+ out.upload_notEnoughSpace = "No tienes suficiente espacio para este archivo en tu CryptDrive";
+ out.upload_tooLarge = "Este archivo supera el límite de carga.";
+ out.upload_choose = "Escoge un archivo";
+ out.upload_pending = "Esperando";
+ out.upload_cancelled = "Cancelado";
+ out.upload_name = "Nombre";
+ out.upload_size = "Tamaño";
+ out.upload_progress = "Progreso";
+ out.download_button = "Descifrar y descargar";
+ out.warn_notPinned = "Este pad no está en ningun CryptDrive. Expirará después de 3 meses. Acerca de...";
+
return out;
});
From 75874424cf3b36366f0f21ea2e43d9895595c421 Mon Sep 17 00:00:00 2001
From: ansuz
Date: Tue, 30 May 2017 10:41:46 +0200
Subject: [PATCH 026/100] add 'support cryptpad' translation key
---
customize.dist/translations/messages.js | 3 +++
1 file changed, 3 insertions(+)
diff --git a/customize.dist/translations/messages.js b/customize.dist/translations/messages.js
index c28172017..58713a895 100644
--- a/customize.dist/translations/messages.js
+++ b/customize.dist/translations/messages.js
@@ -66,6 +66,8 @@ define(function () {
out.GB = "GB";
out.KB = "KB";
+ out.supportCryptpad = "Support CryptPad";
+
out.formattedMB = "{0} MB";
out.formattedGB = "{0} GB";
out.formattedKB = "{0} KB";
@@ -400,6 +402,7 @@ define(function () {
out.main_zeroKnowledge = 'Zero Knowledge';
out.main_zeroKnowledge_p = "You don't have to trust that we won't look at your pads, with CryptPad's revolutionary Zero Knowledge Technology we can't. Learn more about how we protect your Privacy and Security.";
out.main_writeItDown = 'Write it down';
+
out.main_writeItDown_p = "The greatest projects come from the smallest ideas. Take down the moments of inspiration and unexpected ideas because you never know which one might be a breakthrough.";
out.main_share = 'Share the link, share the pad';
out.main_share_p = "Grow your ideas together: conduct efficient meetings, collaborate on TODO lists and make quick presentations with all your friends and all your devices.";
From 99a44f119f6464f70a8ffc4587e97a0a35309495 Mon Sep 17 00:00:00 2001
From: ansuz
Date: Tue, 30 May 2017 10:44:40 +0200
Subject: [PATCH 027/100] don't send referrer headers on pads which may link
outward
---
www/code/index.html | 1 +
www/pad/index.html | 1 +
www/slide/index.html | 1 +
3 files changed, 3 insertions(+)
diff --git a/www/code/index.html b/www/code/index.html
index 448020d26..4fa11fc33 100644
--- a/www/code/index.html
+++ b/www/code/index.html
@@ -5,6 +5,7 @@
+
CryptPad
+
CryptPad
+
Date: Tue, 30 May 2017 15:35:51 +0200
Subject: [PATCH 028/100] update default configuration file with new attributes
and comments
---
config.example.js | 69 +++++++++++++++++++++++++++--------------------
rpc.js | 2 +-
server.js | 4 ++-
3 files changed, 44 insertions(+), 31 deletions(-)
diff --git a/config.example.js b/config.example.js
index a0f3003e0..be7682162 100644
--- a/config.example.js
+++ b/config.example.js
@@ -10,7 +10,7 @@ module.exports = {
// the port on which your httpd will listen
- /* Cryptpad can be configured to send customized HTTP Headers
+ /* CryptPad can be configured to send customized HTTP Headers
* These settings may vary widely depending on your needs
* Examples are provided below
*/
@@ -31,7 +31,7 @@ module.exports = {
* connect-src is used to restrict what domains can connect to the websocket.
*
* it is recommended that you configure these fields to match the
- * domain which will serve your cryptpad instance.
+ * domain which will serve your CryptPad instance.
*/
"child-src 'self' *",
@@ -82,24 +82,24 @@ module.exports = {
*/
//websocketPort: 3000,
- /* if you want to run a different version of cryptpad but using the same websocket
+ /* if you want to run a different version of CryptPad but using the same websocket
* server, you should use the other server port as websocketPort and disable
* the websockets on that server
*/
//useExternalWebsocket: false,
- /* If Cryptpad is proxied without using https, the server needs to know.
+ /* If CryptPad is proxied without using https, the server needs to know.
* Specify 'useSecureWebsockets: true' so that it can send
* Content Security Policy Headers that prevent http and https from mixing
*/
useSecureWebsockets: false,
- /* Cryptpad can log activity to stdout
+ /* CryptPad can log activity to stdout
* This may be useful for debugging
*/
logToStdout: false,
- /* Cryptpad supports verbose logging
+ /* CryptPad supports verbose logging
* (false by default)
*/
verbose: false,
@@ -116,13 +116,16 @@ module.exports = {
'contact',
],
- /* Limits, Subscriptions and Contact
+ /* Limits, Donations, Subscriptions and Contact
+ *
+ * By default, CryptPad limits every registered user to 50MB of storage. It also shows a
+ * donate button which allows for making a donation to support CryptPad development.
*
- * CryptPad limits every registered user to 50MB of storage.
- * By default it also allows that limit to be increased by subscribing at accounts.cryptpad.fr
* You can either:
- * A: Hide the button for subscribing, so everyone is limited to 50MB
- * B: Support cryptpad and share 50% of the revenue earned on your instance
+ * A: Leave it exactly as it is.
+ * B: Hide the donate button.
+ * C: Change the donate button to a subscribe button, people who subscribe will get more
+ * storage on your instance and you get 50% of the revenue earned.
*
* CryptPad is developed by people who need to live and who deserve an equivilent life to
* what they would get at a company which monitizes user data. However, we intend to have
@@ -131,28 +134,36 @@ module.exports = {
*
* If you are using CryptPad in a business context, please consider taking a support contract
* by contacting sales@cryptpad.fr
- *
- * If you choose A, set this variable to true to hide the subscription button.
+ *
+ * If you choose A then there's nothing to do.
+ *
+ * If you choose B, set this variable to true and it will remove the donate button.
*/
- noSubscriptionButton: false,
+ removeDonateButton: false,
/*
- * If you choose B, set the domain of your cryptpad instance here and then contact
- * sales@cryptpad.fr and tell us your domain, we will tell you what is needed to get paid.
+ * If you choose C, set allowSubscriptions to true, then set myDomain to the domain which people
+ * use to reach your CryptPad instance. Then contact sales@cryptpad.fr and tell us your domain.
+ * We will tell you what is needed to get paid.
*/
- myDomain: 'i.did.not.read.my.config.cryptpad.myserver.tld',
+ allowSubscriptions: false,
+ myDomain: 'i.did.not.read.my.config.myserver.tld',
+
/*
* If you are using CryptPad internally and you want to increase the per-user storage limit,
* change the following value.
- * Please note: Providing a public offer that is better than cryptpad.fr is an attack on
- * the project. Please leave this alone if you are providing a public service.
+ *
+ * Please note: This limit is what makes people subscribe and what pays for CryptPad
+ * development. Running a public instance that provides a "better deal" than cryptpad.fr
+ * is effectively using the project against itself.
*/
defaultStorageLimit: 50 * 1024 * 1024,
+
/*
- * By default, CryptPad contacts our accounts server once a day to check for changes in the
- * people who have accounts. This check-in will also send your email and the version of
- * CryptPad you run so we can reach you if we are aware of a serious problem with your
- * CryptPad instance. We will never sell it or use it for marketing. If you want to block this
- * check-in and remain completely private, set this to false and noSubscriptionButton to true.
+ * By default, CryptPad also contacts our accounts server once a day to check for changes in
+ * the people who have accounts. This check-in will also send the version of your CryptPad
+ * instance and your email so we can reach you if we are aware of a serious problem. We will
+ * never sell it or send you marketing mail. If you want to block this check-in and remain
+ * completely invisible, set this and allowSubscriptions both to false.
*/
adminEmail: 'i.did.not.read.my.config@cryptpad.fr',
@@ -176,7 +187,7 @@ module.exports = {
storage: './storage/file',
/*
- Cryptpad stores each document in an individual file on your hard drive.
+ CryptPad stores each document in an individual file on your hard drive.
Specify a directory where files should be stored.
It will be created automatically if it does not already exist.
*/
@@ -199,17 +210,17 @@ module.exports = {
*/
blobStagingPath: './blobstage',
- /* Cryptpad's file storage adaptor closes unused files after a configurale
+ /* CryptPad's file storage adaptor closes unused files after a configurale
* number of milliseconds (default 30000 (30 seconds))
*/
channelExpirationMs: 30000,
- /* Cryptpad's file storage adaptor is limited by the number of open files.
+ /* CryptPad's file storage adaptor is limited by the number of open files.
* When the adaptor reaches openFileLimit, it will clean up older files
*/
openFileLimit: 2048,
- /* Cryptpad's socket server can be extended to respond to RPC calls
+ /* CryptPad's socket server can be extended to respond to RPC calls
* you can configure it to respond to custom RPC calls if you like.
* provide the path to your RPC module here, or `false` if you would
* like to disable the RPC interface completely
@@ -261,7 +272,7 @@ module.exports = {
*/
//logFeedback: true,
- /* it is recommended that you serve cryptpad over https
+ /* it is recommended that you serve CryptPad over https
* the filepaths below are used to configure your certificates
*/
//privKeyAndCertFiles: [
diff --git a/rpc.js b/rpc.js
index 07ad2e1cd..fc204d87c 100644
--- a/rpc.js
+++ b/rpc.js
@@ -373,7 +373,7 @@ var getHash = function (Env, publicKey, cb) {
// To each key is associated an object containing the 'limit' value and a 'note' explaining that limit
var limits = {};
var updateLimits = function (config, publicKey, cb) {
- if (config.adminEmail === false && config.noSubscriptionButton === true) { return; }
+ if (config.adminEmail === false && config.allowSubscriptions === false) { return; }
if (typeof cb !== "function") { cb = function () {}; }
var defaultLimit = typeof(config.defaultStorageLimit) === 'number'?
diff --git a/server.js b/server.js
index e2527fa7d..eb16fbcf1 100644
--- a/server.js
+++ b/server.js
@@ -121,7 +121,9 @@ app.get('/api/config', function(req, res){
waitSeconds: 60,
urlArgs: 'ver=' + Package.version + (DEV_MODE? '-' + (+new Date()): ''),
},
- noSubscriptionButton: (config.noSubscriptionButton === true),
+ removeDonateButton: (config.removeDonateButton === true),
+ allowSubscriptions: (config.allowSubscriptions === true),
+
websocketPath: config.useExternalWebsocket ? undefined : config.websocketPath,
websocketURL:'ws' + ((useSecureWebsockets) ? 's' : '') + '://' + host + ':' +
websocketPort + '/cryptpad_websocket',
From 909bc2ebf3c1d337c5bd55f0e905e0b8358def99 Mon Sep 17 00:00:00 2001
From: ansuz
Date: Tue, 30 May 2017 15:39:13 +0200
Subject: [PATCH 029/100] add new translation key
---
customize.dist/translations/messages.es.js | 2 ++
customize.dist/translations/messages.js | 2 ++
2 files changed, 4 insertions(+)
diff --git a/customize.dist/translations/messages.es.js b/customize.dist/translations/messages.es.js
index 9706380ef..8f74d2433 100644
--- a/customize.dist/translations/messages.es.js
+++ b/customize.dist/translations/messages.es.js
@@ -407,6 +407,8 @@ define(function () {
out.deleted = "El pad fue borrado de tu CryptDrive";
out.upgrade = "Mejorar";
out.upgradeTitle = "Mejora tu cuenta para obtener más espacio";
+ out.upgradeAccount = "Mejorar cuenta";
+
out.MB = "MB";
out.GB = "GB";
out.KB = "KB";
diff --git a/customize.dist/translations/messages.js b/customize.dist/translations/messages.js
index 262de94dc..218aa6e99 100644
--- a/customize.dist/translations/messages.js
+++ b/customize.dist/translations/messages.js
@@ -62,6 +62,8 @@ define(function () {
out.upgrade = "Upgrade";
out.upgradeTitle = "Upgrade your account to increase the storage limit";
+
+ out.upgradeAccount = "Upgrade account";
out.MB = "MB";
out.GB = "GB";
out.KB = "KB";
From 9ca5bc507e7b759c2782c7084487111c44c9ad93 Mon Sep 17 00:00:00 2001
From: ansuz
Date: Tue, 30 May 2017 15:42:53 +0200
Subject: [PATCH 030/100] add support for donate button
---
www/common/cryptpad-common.js | 13 +++++++++++--
www/common/toolbar2.js | 21 +++++++++++++++++++--
2 files changed, 30 insertions(+), 4 deletions(-)
diff --git a/www/common/cryptpad-common.js b/www/common/cryptpad-common.js
index ae73867de..ddad01e68 100644
--- a/www/common/cryptpad-common.js
+++ b/www/common/cryptpad-common.js
@@ -25,7 +25,9 @@ define([
*/
var common = window.Cryptpad = {
Messages: Messages,
- Clipboard: Clipboard
+ Clipboard: Clipboard,
+ donateURL: 'https://accounts.cryptpad.fr/#/donate?on=' + window.location.hostname,
+ account: {},
};
// constants
@@ -1428,6 +1430,14 @@ define([
console.log('RPC handshake complete');
rpc = common.rpc = env.rpc = call;
+ common.getPinLimit(function (e, limit, plan, note) {
+ if (e) { return void console.error(e); }
+ common.account.limit = limit;
+ common.account.plan = plan;
+ common.account.note = note;
+ cb();
+ });
+
common.arePinsSynced(function (err, yes) {
if (!yes) {
common.resetPins(function (err) {
@@ -1436,7 +1446,6 @@ define([
});
}
});
- cb();
});
} else if (PINNING_ENABLED) {
console.log('not logged in. pads will not be pinned');
diff --git a/www/common/toolbar2.js b/www/common/toolbar2.js
index a17e24199..127fce91d 100644
--- a/www/common/toolbar2.js
+++ b/www/common/toolbar2.js
@@ -33,6 +33,7 @@ define([
var LIMIT_CLS = Bar.constants.lag = 'cryptpad-limit';
var TITLE_CLS = Bar.constants.title = "cryptpad-title";
var NEWPAD_CLS = Bar.constants.newpad = "cryptpad-newpad";
+ var UPGRADE_CLS = Bar.constants.upgrade = "cryptpad-upgrade";
// User admin menu
var USERADMIN_CLS = Bar.constants.user = 'cryptpad-user-dropdown';
@@ -70,6 +71,7 @@ define([
var $userContainer = $('', {
'class': USER_CLS
}).appendTo($topContainer);
+ $('
","Download");r.processingEngine.setDefaultPlugin(b),r.CryptoFilter=f;var v=["image/png","image/jpeg","image/jpg","image/gif","audio/mp3","audio/ogg","audio/wav","audio/webm","video/mp4","video/ogg","video/webm","application/pdf","application/dash+xml","download"];r.CryptoFilter.setAllowedMediaTypes(v);var g=n(21),d=(n(13),n(0),new g);r.processingEngine.configure(d),e.exports=r},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var u=n(1),a=n(5),c=n(6),s=function(e){function t(e){return r(this,t),o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,u.SANITIZER,a.EVERY))}return i(t,e),t}(c);e.exports=s},,,function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){var n=t.type.split("/"),r=t.type,o=n[0],i=n[1];s.isAllowedMediaType(r)?(e.setAttribute("data-type",t.type),e.type=o,e.extension=i,e.mime=r):console.log("Not allowed metadata, allowed ones are : ",s.getAllowedMediaTypes()),e.name=t.name,e.setAttribute("data-attr-type",t.type)}function i(e){var t=e.getAttribute("src"),n=e.getAttribute("data-crypto-key"),r=p.getKeyFromStr(n),i=new XMLHttpRequest;i.open("GET",t,!0),i.responseType="arraybuffer",i.onload=function(){var t=i.response;if(t){var n=new Uint8Array(t);p.decrypt(n,r,function(t,n){if(t){var r=new Event("decryptionError");return r.message=t.message,void window.document.dispatchEvent(r)}var i=n.content,u=y.getBlobUrl(i,e.getMimeType()),a=new Event("decryption");a.blob=new Blob([i],{type:e.getMimeType()}),a.metadata=n.metadata,e.setAttribute("src",u),e.removeAttribute("data-crypto-key"),o(e,n.metadata),a.callback=function(){c.processingEngine.return(e)},window.document.dispatchEvent(a)})}},i.send(null)}var u=function(){function e(e,t){for(var n=0;n1;){if(f){if("number"!=typeof e[t])throw new Error("E_UNSAFE_TYPE");if(e[t]>255)throw new Error("E_OUT_OF_BOUNDS")}if(255!==e[t])return void e[t]++;if(e[t]=0,0===t)throw new Error("E_NONCE_TOO_LARGE")}}},{key:"encodePrefix",value:function(e){return[65280,255].map(function(t,n){return(e&t)>>8*(1-n)})}},{key:"decodePrefix",value:function(e){return e[0]<<8|e[1]}},{key:"joinChunks",value:function(t){return new Uint8Array(t.reduce(function(t,n){return e.slice(t).concat(e.slice(n))},[]))}},{key:"slice",value:function(e){return Array.prototype.slice.call(e)}},{key:"getRandomKeyStr",value:function(){var t=e.Nacl,n=t.randomBytes(18);return t.util.encodeBase64(n)}},{key:"getKeyFromStr",value:function(t){return e.Nacl.util.decodeBase64(t)}},{key:"encrypt",value:function(t,n){var r=t,o=e.Nacl.randomBytes(24),i=e.Nacl.secretbox(r,o,n);if(i)return new Uint8Array(e.slice(o).concat(e.slice(i)));throw new Error}},{key:"decrypt",value:function(t,n,r){var o=e.Nacl,i=function(e){var n=new Event("decryptionProgress");n.percent=e/t.length*100,window.document.dispatchEvent(n)},u=e.createNonce(),a=0,c=t.subarray(0,2),s=e.decodePrefix(c),f={metadata:void 0},p=new Uint8Array(t.subarray(2,2+s)),y=o.secretbox.open(p,u,n);e.increment(u);try{f.metadata=JSON.parse(o.util.encodeUTF8(y))}catch(e){return r("E_METADATA_DECRYPTION")}if(!f.metadata)return r("NO_METADATA");var h=function(r){var c=a*l+2+s,f=c+l;a++;var p=new Uint8Array(t.subarray(c,f)),y=o.secretbox.open(p,u,n);if(e.increment(u),!y)return void r("DECRYPTION_FAILURE");i(Math.min(f,t.length)),r(void 0,y)},b=[];!function n(){h(function(o,i){return o?setTimeout(function(){r(o)}):i?a*l1?t[0]:window.location.protocol}},{key:"hostname",value:function(e){var t=e.getAttribute("src").split("://");return t.length>1?t[1].split("/")[0]:window.location.hostname}},{key:"source",value:function(e){return e.getAttribute("src")}},{key:"schemes",value:function(e){return/\w+:/.exec(e.getAttribute("src"))}},{key:"parse",value:function(t){return{protocol:e.protocol(t),hostname:e.hostname(t),src:e.source(t),type:e.type(t),extension:e.extension(t),mime:e.mime(t)}}}]),e}();e.exports=i},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var o=function(){function e(e,t){for(var n=0;n=e.STACK_LIMIT)throw console.error(this.snapshots[n]),new Error("Plugin stack size exceed");if(this.snapshots[n].length>=e.SNAPSHOT_LIMIT)throw console.error(this.snapshots[n]),new Error("Plugin snapshots size exceed");var r=0;if(this.stacks[n].forEach(function(e){e.type===a.RENDERER&&r++}),r>1)throw console.error(this.snapshots[n]),new Error("More of one renderer in the stack");if(0===this.stacks[n].length&&!this.stats[n][a.RENDERER]){if(!this.defaultPlugin)throw new Error("No default plugin assignated");this.stacks[n].unshift(this.defaultPlugin)}}},{key:"return",value:function(e){var t=e.getId(),n=this.unstack(e);this.stats[t]||(this.stats[t]={}),this.stats[t][n.type]?this.stats[t][n.type]+=1:this.stats[t][n.type]=1,0===this.stacks[t].length&&n.type===a.RENDERER?this.run(e):n.type!==a.SANITIZER&&this.fill(e),this.snapshot(e),this.check(e),this.run(e)}},{key:"process",value:function(e){var t=e.getId(),n=this.stacks[t].length,r=this.stacks[t][n-1];if(!r)throw console.log(this.stacks),new Error("Impossible to run a undefined plugin");r.process(e)}},{key:"isStacked",value:function(e,t){var n=e.getId();return!(!this.stacks[n]||!this.stacks[n].includes(t))}},{key:"setDefaultPlugin",value:function(e){this.defaultPlugin=e}}]),e}();f.STACK_LIMIT=100,f.SNAPSHOT_LIMIT=100,e.exports=f},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var u=function(){function e(e,t){for(var n=0;n
Date: Wed, 31 May 2017 12:11:33 +0200
Subject: [PATCH 041/100] remove unused files
---
customize.dist/BottomBar.html | 16 ----------------
customize.dist/bg.jpg | Bin 1405386 -> 0 bytes
customize.dist/bg2.jpg | Bin 261738 -> 0 bytes
3 files changed, 16 deletions(-)
delete mode 100644 customize.dist/BottomBar.html
delete mode 100644 customize.dist/bg.jpg
delete mode 100644 customize.dist/bg2.jpg
diff --git a/customize.dist/BottomBar.html b/customize.dist/BottomBar.html
deleted file mode 100644
index c8d43dfce..000000000
--- a/customize.dist/BottomBar.html
+++ /dev/null
@@ -1,16 +0,0 @@
-
-