diff --git a/www/common/onlyoffice/inner.js b/www/common/onlyoffice/inner.js
index 79a6cfd56..182149d81 100644
--- a/www/common/onlyoffice/inner.js
+++ b/www/common/onlyoffice/inner.js
@@ -1141,6 +1141,14 @@ define([
};
var handleChanges = function (obj, send) {
+ if (APP.history) {
+ send({
+ type: "unSaveLock",
+ index: ooChannel.cpIndex,
+ time: +new Date()
+ });
+ return;
+ }
// Add a new entry to the pendingChanges object.
// If we can't send the patch within 30s, force a page reload
var uid = Util.uid();
diff --git a/www/common/outer/messenger.js b/www/common/outer/messenger.js
index 981d9f8de..85400adc0 100644
--- a/www/common/outer/messenger.js
+++ b/www/common/outer/messenger.js
@@ -617,11 +617,11 @@ define([
return void cb({error: 'NO_SUCH_CHANNEL'});
}
- var proxy = ctx.store.proxy;
+ var proxy = ctx.store.proxy || {};
var msg = [Types.message, proxy.curvePublic, +new Date(), payload];
if (!channel.isFriendChat) {
var name = proxy[Constants.displayNameKey] ||
- Messages.anonymous + '#' + proxy.uid.slice(0,5);
+ Messages.anonymous + '#' + (proxy.uid || ctx.store.noDriveUid).slice(0,5);
msg.push(name);
}
var msgStr = JSON.stringify(msg);
diff --git a/www/common/outer/onlyoffice.js b/www/common/outer/onlyoffice.js
index b5c3e7ba1..dbde5e199 100644
--- a/www/common/outer/onlyoffice.js
+++ b/www/common/outer/onlyoffice.js
@@ -87,8 +87,10 @@ define([
chan.wc = wc;
chan.sendMsg = function (msg, cb) {
cb = cb || function () {};
+ var hash = msg.slice(0, 64);
wc.bcast(msg).then(function () {
chan.history.push(msg);
+ chan.lastKnownHash = hash;
cb();
}, function (err) {
cb({error: err});
diff --git a/www/common/translations/messages.es.json b/www/common/translations/messages.es.json
index f185ea637..e78d2bcef 100644
--- a/www/common/translations/messages.es.json
+++ b/www/common/translations/messages.es.json
@@ -20,7 +20,7 @@
"synchronizing": "Sincronizando",
"reconnecting": "Reconectando",
"readonly": "Sólo lectura",
- "anonymous": "Anónimo",
+ "anonymous": "Invitado",
"users": "Usuarios",
"viewer": "espectador",
"viewers": "espectadores",
@@ -124,7 +124,7 @@
"login_invalUser": "Nombre de usuario requerido",
"login_invalPass": "Contraseña requerida",
"login_unhandledError": "Ha ocurrido un error inesperado :(",
- "register_importRecent": "Importar documentos de su sesión no registrada",
+ "register_importRecent": "Importar documentos de su sesión de invitado",
"register_acceptTerms": "Acepto los términos de servicio",
"register_passwordsDontMatch": "Las contraseñas no corresponden",
"register_mustAcceptTerms": "Tienes que aceptar los términos de servicio",
@@ -167,7 +167,7 @@
"settings_import": "Importar",
"settings_importConfirm": "¿Seguro que quieres importar tus pads recientes a tu cuenta CryptDrive?",
"settings_importDone": "Importación terminada",
- "feedback_about": "Si estas leyendo esto, quizás sientas curiosidad por saber por qué CryptPad solicita páginas cuando realizas algunas acciones",
+ "feedback_about": "Si estas leyendo esto, quizás sientas curiosidad por saber por qué CryptPad solicita páginas cuando realizas ciertas acciones.",
"feedback_privacy": "Nos importa tu privacidad, y al mismo tiempo queremos que CryptPad sea muy fácil de usar. Utilizamos este archivo para conocer las funcionalidades que importan a nuestros usuarios, pidiéndolo con un parametro que nos dice qué acción fue realizada.",
"feedback_optout": "Si quieres darte de baja, visita tus preferencias, donde podrás activar o desactivar el feedback.",
"fm_searchName": "Buscar",
@@ -294,7 +294,7 @@
"topbar_whatIsCryptpad": "Qué es CryptPad",
"header_homeTitle": "Volver a la página de inicio",
"userListButton": "Lista de usuarios",
- "userAccountButton": "Tu cuenta",
+ "userAccountButton": "Menú de usuario",
"canvas_saveToDrive": "Guardar esta imagen como archivo en tu CryptDrive",
"canvas_currentBrush": "Pincel actual",
"fm_viewListButton": "Lista",
@@ -306,13 +306,13 @@
"button_newkanban": "Nuevo Kanban",
"button_newsheet": "Nueva Hoja",
"padNotPinned": "Esta nota expirará luego de 3 meses de inactividad, {0}ingresar{1} o {2}registrarse{3}para conservar.",
- "anonymousStoreDisabled": "El webmaster de esta instancia de CryptPad a deshabilitado al almacenamiento para usuarios anónimos. Debes ingresar para poder usar CrytDrive.",
+ "anonymousStoreDisabled": "El administrador de esta instancia de CryptPad ha deshabilitado al almacenamiento para usuarios anónimos. Debes iniciar sesión para poder usar CryptDrive.",
"expiredError": "Este pad ha expirado y ya no está disponible.",
- "deletedError": "Esta nota ha sido borrada por su dueño y ya no está disponible.",
+ "deletedError": "Este documento ha sido borrado y ya no se encuentra disponible.",
"inactiveError": "Esta nota ha sido eliminada por inactividad. Presione Esc para crear una nueva nota.",
"chainpadError": "Ha ocurrido un error crítico al actualizar su contenido. Esta página esta en modo de sólo lectura, para asegurarse que no perderá su trabajo. HitEscpara continuar y ver esta nota, o recargar para editar nuevamente.",
"invalidHashError": "El documento que has solicitado tiene una URL invalida.",
- "errorCopy": " Aún puedes acceder al contenido presionando Esc. Una vez que cierres esta ventana no te será posible acceder a ella nuevamente.",
+ "errorCopy": " Aún puedes acceder esta versión en modo lectura persionando Esc.",
"errorRedirectToHome": "PresionaEscpara ser redirigido a tu Cryptdrive.",
"newVersionError": "Una nueva versión de CryptPad está disponible. Recargar para usar la nueva versión, o presiona escape para acceder a tu contenido en modo offline.",
"deletedFromServer": "Nota borrada",
@@ -527,7 +527,7 @@
"whatis_drive": "Organización con CryptDrive",
"features": "Caracteristicas",
"features_title": "Características",
- "features_anon": "No registrado",
+ "features_anon": "Invitado",
"features_registered": "Registrado",
"features_premium": "Premium",
"features_f_apps": "Acceso a todas las aplicaciones",
@@ -539,7 +539,7 @@
"features_f_cryptdrive0_note": "Posibilidad de almacenar los pads visitados en su navegador para poder abrirlos más tarde",
"features_f_storage0": "Tiempo de almacenamiento limitado",
"features_f_storage0_note": "Los documentos se eliminan después de {0} días de inactividad",
- "features_f_anon": "Todas las funciones de usuario anónimo",
+ "features_f_anon": "Todas las funciones de invitado",
"features_f_anon_note": "Con funcionalidad adicional",
"features_f_cryptdrive1": "Funcionalidad completa de CryptDrive",
"features_f_cryptdrive1_note": "Carpetas, compartir carpetas, plantillas, tareas",
@@ -570,7 +570,7 @@
"creation_404": "Este pad ya no existe. Utilice el siguiente formulario para crear un nuevo pad.",
"creation_owned1": "Un objeto propiedad puede ser destruido cuando el propietario lo desee. La destrucción de un objeto propio hace que no esté disponible en los CryptDrives de otros usuarios.",
"settings_padNotifTitle": "Notificaciones de comentarios",
- "password_info": "El bloc que intentas abrir no existe o está protegido con una contraseña. Ingrese la contraseña correcta para acceder a su contenido.",
+ "password_info": "El documento que intenta abrir no existe o está protegido con una contraseña. Ingrese la contraseña correcta para acceder a su contenido.",
"creation_newPadModalDescription": "Haz click en un tipo de documento para crearlo. Tú también puedes presionar Tab para seleccionar el tipo y presiona Enter para confirmar.",
"toolbar_degraded": "Actualmente hay más de {0} editores en este documento. La lista de usuarios y el chat están desactivados para mejorar el rendimiento.",
"oo_lostEdits": "Lamentablemente, las ediciones recientes no guardadas no se pueden recuperar después de sincronizar el nuevo contenido.",
@@ -582,14 +582,14 @@
"properties_addPassword": "Añadir una contraseña",
"password_submit": "Enviar",
"password_placeholder": "Escriba la contraseña aquí...",
- "password_error": "¡No se ha encontrado el pad! Este error puede ser causado por dos factores: o la contraseña no es válida, o el pad ha sido borrado del servidor.",
+ "password_error": "No se ha encontrado el documento Este error puede ser causado por dos factores: la contraseña no es válida o el pad ha sido borrado del servidor.",
"creation_passwordValue": "Contraseña",
"creation_expiration": "Fecha de vencimiento",
"creation_noOwner": "Sin propietario",
"creation_owners": "Propietarios",
"creation_create": "Crear",
"creation_newTemplate": "Nueva plantilla",
- "creation_noTemplate": "Sin plantilla",
+ "creation_noTemplate": "Documento vacío",
"creation_password": "Contraseña\n",
"creation_expireMonths": "Mes(es)",
"creation_expireDays": "Día(s)",
@@ -601,8 +601,8 @@
"sharedFolders_forget": "Este bloc sólo se almacena en una carpeta compartida, no puedes moverlo a la papelera. Puedes usar tu CryptDrive si quieres borrarlo.",
"share_mediatagCopy": "Copiar mediatag al portapapeles",
"share_contactCategory": "Contactos",
- "share_linkCopy": "Copiar",
- "share_linkOpen": "Previsualizar",
+ "share_linkCopy": "Copiar enlace",
+ "share_linkOpen": "Abrir enlace",
"share_linkView": "Ver",
"share_linkEdit": "Editar",
"share_linkAccess": "Permisos de acceso",
@@ -646,5 +646,34 @@
"convertFolderToSF_SFParent": "Esta carpeta no puede ser convertida a una carpeta compartida en su actual localización. Mueva la carpeta fuera de la carperta compartida para continuar.",
"sharedFolders_share": "Comparte este enlace con otros usuarios registrados para darles accesso a la carpeta compartida. Una vez que ellos/as abran este enlace, la carpeta compartida será añadida a sus CryptDrive.",
"sharedFolders_create": "Crear una carpeta compartida",
- "sharedFolders_duplicate": "Algunos de los documentos que intentaste mover ya estaban compartidos en la carpeta de destino"
+ "sharedFolders_duplicate": "Algunos de los documentos que intentaste mover ya estaban compartidos en la carpeta de destino",
+ "admin_flushCacheTitle": "Vaciar caché HTTP",
+ "admin_updateLimitDone": "Actualización correcta",
+ "admin_updateLimitButton": "Actualizar cuotas",
+ "admin_updateLimitHint": "Forzar una actualización de los límites de almacenamiento del usuario se puede hacer en cualquier momento, pero sólo es necesario en caso de error",
+ "crowdfunding_button2": "Ayuda a CryptPad",
+ "autostore_pad": "bloc",
+ "settings_padOpenLinkTitle": "Abrir links con un click",
+ "fm_expirablePad": "Expiración: {0}",
+ "crowdfunding_button": "Apoya a CryptPad",
+ "autostore_file": "archivo",
+ "admin_diskUsageButton": "Generar informe",
+ "admin_diskUsageHint": "Cantidad de almacenamiento gastado por diversos recursos de CryptPad",
+ "admin_diskUsageTitle": "Almacenamiento usado",
+ "timeoutError": "Algún error ha cortado la conexión al servidor. PulsaEsc para recargar la página.",
+ "contact_email": "Correo electrónico",
+ "contact_chat": "Chat",
+ "contact_bug": "Informe de error",
+ "contact_devHint": "Para sugerencias de funciones, mejoras de usabilidad o para simplemente agradecer.",
+ "contact_dev": "Contactar a los desarrolladores",
+ "contact_adminHint": "Para cualquier problema relacionado con su cuenta, límites de almacenamiento o disponibilidad del servicio.\n",
+ "contact_admin": "Contactar a los administradores",
+ "footer_tos": "Términos de Servicio",
+ "footer_legal": "Legal",
+ "footer_donate": "Donar",
+ "footer_team": "Colaboradores",
+ "footer_product": "Producto",
+ "admin_flushCacheDone": "Vaciado de caché exitoso",
+ "admin_flushCacheButton": "Vaciar caché",
+ "admin_flushCacheHint": "Obligar a usuarios a descargar los recursos más nuevos para el cliente (sólo si su servidor está en modo actualizado o “fresh mode”)"
}
diff --git a/www/secureiframe/inner.js b/www/secureiframe/inner.js
index 18970c47b..0ae5d6ae8 100644
--- a/www/secureiframe/inner.js
+++ b/www/secureiframe/inner.js
@@ -171,7 +171,7 @@ define([
$block.append(h('p', text));
// Add filter input
- var $filter = $(h('p.cp-modal-form')).appendTo($block);
+ var $filter = $(h('p.cp-modal-form')).hide().appendTo($block);
var to;
var $input = $('', {
type: 'text',
@@ -211,6 +211,7 @@ define([
updateContainer = function () {
var filter = $input.val().trim();
var todo = function (err, list) {
+ $filter.show();
if (err) { return void console.error(err); }
$container.html('');
Object.keys(list).forEach(function (id) {