diff --git a/resources/assets/js/components/page-display.js b/resources/assets/js/components/page-display.js
index 257deedda..260600d34 100644
--- a/resources/assets/js/components/page-display.js
+++ b/resources/assets/js/components/page-display.js
@@ -20,7 +20,7 @@ class PageDisplay {
// Sidebar page nav click event
$('.sidebar-page-nav').on('click', 'a', event => {
- goToText(event.target.getAttribute('href').substr(1));
+ this.goToText(event.target.getAttribute('href').substr(1));
});
}
diff --git a/resources/assets/js/services/code.js b/resources/assets/js/services/code.js
index 6c04e9872..ae63a8ce8 100644
--- a/resources/assets/js/services/code.js
+++ b/resources/assets/js/services/code.js
@@ -16,6 +16,8 @@ require('codemirror/mode/toml/toml');
require('codemirror/mode/xml/xml');
require('codemirror/mode/yaml/yaml');
+const Clipboard = require("clipboard");
+
const CodeMirror = require('codemirror');
const modeMap = {
@@ -77,7 +79,7 @@ function highlightElem(elem) {
elem.innerHTML = elem.innerHTML.replace(/
/gi ,'\n');
let content = elem.textContent.trim();
- CodeMirror(function(elt) {
+ let cm = CodeMirror(function(elt) {
elem.parentNode.replaceChild(elt, elem);
}, {
value: content,
@@ -86,6 +88,33 @@ function highlightElem(elem) {
theme: getTheme(),
readOnly: true
});
+
+ addCopyIcon(cm);
+}
+
+/**
+ * Add a button to a CodeMirror instance which copies the contents to the clipboard upon click.
+ * @param cmInstance
+ */
+function addCopyIcon(cmInstance) {
+ const copyIcon = ``;
+ const copyButton = document.createElement('div');
+ copyButton.classList.add('CodeMirror-copy');
+ copyButton.innerHTML = copyIcon;
+ cmInstance.display.wrapper.appendChild(copyButton);
+
+ const clipboard = new Clipboard(copyButton, {
+ text: function(trigger) {
+ return cmInstance.getValue()
+ }
+ });
+
+ clipboard.on('success', event => {
+ copyButton.classList.add('success');
+ setTimeout(() => {
+ copyButton.classList.remove('success');
+ }, 360);
+ });
}
/**
diff --git a/resources/assets/js/services/dates.js b/resources/assets/js/services/dates.js
index d0ecc207d..119d8fa60 100644
--- a/resources/assets/js/services/dates.js
+++ b/resources/assets/js/services/dates.js
@@ -12,4 +12,13 @@ export function utcTimeStampToLocalTime(timestamp) {
let hours = date.getHours();
let mins = date.getMinutes();
return `${(hours>9?'':'0') + hours}:${(mins>9?'':'0') + mins}`;
+}
+
+export function formatDateTime(date) {
+ let month = date.getMonth() + 1;
+ let day = date.getDate();
+ let hours = date.getHours();
+ let mins = date.getMinutes();
+
+ return `${date.getFullYear()}-${(month>9?'':'0') + month}-${(day>9?'':'0') + day} ${(hours>9?'':'0') + hours}:${(mins>9?'':'0') + mins}`;
}
\ No newline at end of file
diff --git a/resources/assets/js/vues/attachment-manager.js b/resources/assets/js/vues/attachment-manager.js
index 16f96c70b..5acad6184 100644
--- a/resources/assets/js/vues/attachment-manager.js
+++ b/resources/assets/js/vues/attachment-manager.js
@@ -52,7 +52,9 @@ let methods = {
},
deleteFile(file) {
- if (!file.deleting) return file.deleting = true;
+ if (!file.deleting) {
+ return this.$set(file, 'deleting', true);
+ }
this.$http.delete(window.baseUrl(`/attachments/${file.id}`)).then(resp => {
this.$events.emit('success', resp.data.message);
diff --git a/resources/assets/js/vues/image-manager.js b/resources/assets/js/vues/image-manager.js
index 16c8ef9cf..9b17bcd0c 100644
--- a/resources/assets/js/vues/image-manager.js
+++ b/resources/assets/js/vues/image-manager.js
@@ -1,3 +1,6 @@
+
+import * as Dates from "../services/dates";
+
const dropzone = require('./components/dropzone');
let page = 0;
@@ -168,7 +171,7 @@ const methods = {
},
getDate(stringDate) {
- return new Date(stringDate);
+ return Dates.formatDateTime(new Date(stringDate));
},
uploadSuccess(event) {
diff --git a/resources/assets/sass/_codemirror.scss b/resources/assets/sass/_codemirror.scss
index 2366bf18c..8fe4058cb 100644
--- a/resources/assets/sass/_codemirror.scss
+++ b/resources/assets/sass/_codemirror.scss
@@ -403,4 +403,38 @@ span.CodeMirror-selectedtext { background: none; }
left: 0;
width: 100%;
height: 100%;
+}
+
+/**
+ * Custom Copy Button
+ */
+.CodeMirror-copy {
+ position: absolute;
+ top: -1px;
+ right: -1px;
+ background-color: #EEE;
+ padding: $-xs;
+ line-height: 0;
+ border: 1px solid #DDD;
+ cursor: pointer;
+ fill: #444;
+ z-index: 5;
+ transition: all ease-in 180ms;
+ user-select: none;
+ opacity: 0.7;
+ svg {
+ transition: transform ease-in 180ms;
+ transform: translateY(0);
+ }
+ &.success {
+ background-color: lighten($positive, 10%);
+ fill: #FFF;
+ svg {
+ transform: translateY(-3px);
+ }
+ }
+}
+.CodeMirror:hover .CodeMirror-copy {
+ user-select: all;
+ opacity: 1;
}
\ No newline at end of file
diff --git a/resources/assets/sass/_pages.scss b/resources/assets/sass/_pages.scss
index 1a4f33dae..21fdf90de 100755
--- a/resources/assets/sass/_pages.scss
+++ b/resources/assets/sass/_pages.scss
@@ -89,6 +89,12 @@
del {
background: #FFECEC;
}
+
+ &.page-revision {
+ pre code {
+ white-space: pre-wrap;
+ }
+ }
}
// Page content pointers
diff --git a/resources/lang/es/activities.php b/resources/lang/es/activities.php
index 649b8c7d2..7c53a7e7d 100644
--- a/resources/lang/es/activities.php
+++ b/resources/lang/es/activities.php
@@ -35,6 +35,8 @@ return [
'book_delete' => 'libro borrado',
'book_delete_notification' => 'Libro borrado exitosamente',
'book_sort' => 'libro ordenado',
- 'book_sort_notification' => 'Libro re-ordenado exitosamente',
+ 'book_sort_notification' => 'Libro reordenado exitosamente',
+ // Other
+ 'commented_on' => 'comentada el',
];
diff --git a/resources/lang/es/common.php b/resources/lang/es/common.php
index dabeec472..fbadb6545 100644
--- a/resources/lang/es/common.php
+++ b/resources/lang/es/common.php
@@ -31,6 +31,7 @@ return [
'edit' => 'Editar',
'sort' => 'Ordenar',
'move' => 'Mover',
+ 'copy' => 'Copiar',
'reply' => 'Responder',
'delete' => 'Borrar',
'search' => 'Buscar',
diff --git a/resources/lang/es/entities.php b/resources/lang/es/entities.php
index 0e8ea95e5..8c5c9f07f 100644
--- a/resources/lang/es/entities.php
+++ b/resources/lang/es/entities.php
@@ -166,6 +166,9 @@ return [
'pages_not_in_chapter' => 'La página no está en un capítulo',
'pages_move' => 'Mover página',
'pages_move_success' => 'Página movida a ":parentName"',
+ 'pages_copy' => 'Copiar página',
+ 'pages_copy_desination' => 'Destino de la copia',
+ 'pages_copy_success' => 'Página copiada a correctamente',
'pages_permissions' => 'Permisos de página',
'pages_permissions_success' => 'Permisos de página actualizados',
'pages_revision' => 'Revisión',
diff --git a/resources/lang/es/errors.php b/resources/lang/es/errors.php
index 73c3063b6..7dddf7152 100644
--- a/resources/lang/es/errors.php
+++ b/resources/lang/es/errors.php
@@ -7,7 +7,7 @@ return [
*/
// Permissions
- 'permission' => 'UNo tiene permisos para visualizar la página solicitada.',
+ 'permission' => 'No tiene permisos para visualizar la página solicitada.',
'permissionJson' => 'No tiene permisos para ejecutar la acción solicitada.',
// Auth
@@ -65,7 +65,7 @@ return [
'role_system_cannot_be_deleted' => 'Este rol es un rol de sistema y no puede ser borrado',
'role_registration_default_cannot_delete' => 'Este rol no puede ser borrado mientras sea el rol por defecto de nuevos registros',
- // Comments
+ // Comments
'comment_list' => 'Se ha producido un error al buscar los comentarios.',
'cannot_add_comment_to_draft' => 'No puedes añadir comentarios a un borrador.',
'comment_add' => 'Se ha producido un error al añadir el comentario.',
diff --git a/resources/lang/es/settings.php b/resources/lang/es/settings.php
index ea1a128f9..d75d84213 100644
--- a/resources/lang/es/settings.php
+++ b/resources/lang/es/settings.php
@@ -34,6 +34,7 @@ return [
'app_homepage' => 'Página de inicio',
'app_homepage_desc' => 'Elija la página que se mostrará al inicio en lugar de la vista predeterminada. Se ignorarán los permisos de la página seleccionada.',
'app_homepage_default' => 'Página de inicio seleccionada',
+ 'app_homepage_books' => 'O selecciona la página de libros como página de inicio. Esto prevalecerá sobre cualquier página seleccionada como página de inicio.',
'app_disable_comments' => 'Deshabilitar comentarios',
'app_disable_comments_desc' => 'Deshabilita los comentarios en todas las páginas de la aplicación. Los comentarios existentes no se muestran.',
@@ -50,6 +51,19 @@ return [
'reg_confirm_restrict_domain_desc' => 'Introduzca una lista separada por comas de los dominio a los que les gustaría restringir el registro de usuarios. A los usuarios les será enviado un correo electrónico para confirmar la dirección antes de que se le permita interactuar con la aplicación.
Tenga en cuenta que los usuarios podrán cambiar sus direcciones de correo electrónico después de registrarse exitosamente.',
'reg_confirm_restrict_domain_placeholder' => 'Ninguna restricción establecida',
+ /**
+ * Maintenance settings
+ */
+
+ 'maint' => 'Mantenimiento',
+ 'maint_image_cleanup' => 'Limpiar imágenes',
+ 'maint_image_cleanup_desc' => "Analiza las páginas y sus revisiones para comprobar qué imágenes y dibujos están siendo utilizadas y cuales no son necesarias. Asegúrate de crear una copia completa de la base de datos y de las imágenes antes de lanzar esta opción.",
+ 'maint_image_cleanup_ignore_revisions' => 'Ignorar imágenes en revisiones',
+ 'maint_image_cleanup_run' => 'Lanzar limpieza',
+ 'maint_image_cleanup_warning' => 'Se han encontrado :count imágenes posiblemente no utilizadas . ¿Estás seguro de querer borrar estas imágenes?',
+ 'maint_image_cleanup_success' => '¡Se han encontrado y borrado :count imágenes posiblemente no utilizadas!',
+ 'maint_image_cleanup_nothing_found' => '¡No se han encontrado imágenes sin utilizar, no se han borrado imágenes!',
+
/**
* Role settings
*/
diff --git a/resources/lang/es_AR/settings.php b/resources/lang/es_AR/settings.php
index cb32c01cf..92aaf7d86 100644
--- a/resources/lang/es_AR/settings.php
+++ b/resources/lang/es_AR/settings.php
@@ -34,10 +34,10 @@ return [
'app_homepage' => 'Página de inicio de la Aplicación',
'app_homepage_desc' => 'Seleccione una página de inicio para mostrar en lugar de la vista por defecto. Se ignoran los permisos de página para las páginas seleccionadas.',
'app_homepage_default' => 'Página de inicio por defecto seleccionadad',
+ 'app_homepage_books' => 'O seleccione la página de libros como su página de inicio. Esto tendrá preferencia sobre cualquier página seleccionada como página de inicio.',
'app_disable_comments' => 'Deshabilitar comentarios',
'app_disable_comments_desc' => 'Deshabilitar comentarios en todas las páginas de la aplicación. Los comentarios existentes no se muestran.',
-
/**
* Registration settings
*/
@@ -51,6 +51,19 @@ return [
'reg_confirm_restrict_domain_desc' => 'Introduzca una lista separada por comas de los correos electrónicos del dominio a los que les gustaría restringir el registro por dominio. A los usuarios les será enviado un correo elctrónico para confirmar la dirección antes de que se le permita interactuar con la aplicación.
Note que a los usuarios se les permitirá cambiar sus direcciones de correo electrónico luego de un registro éxioso.',
'reg_confirm_restrict_domain_placeholder' => 'Ninguna restricción establecida',
+ /**
+ * Maintenance settings
+ */
+
+ 'maint' => 'Mantenimiento',
+ 'maint_image_cleanup' => 'Limpiar imágenes',
+ 'maint_image_cleanup_desc' => "Analizar contenido de páginas y revisiones para detectar cuáles imágenes y dibujos están en uso y cuáles son redundantes. Asegúrese de crear un respaldo completo de imágenes y base de datos antes de ejecutar esta tarea.",
+ 'maint_image_cleanup_ignore_revisions' => 'Ignorar imágenes en revisión',
+ 'maint_image_cleanup_run' => 'Ejecutar limpieza',
+ 'maint_image_cleanup_warning' => 'Se encontraron :count imágenes pontencialmente sin uso. Está seguro de que quiere eliminarlas?',
+ 'maint_image_cleanup_success' => 'Se encontraron y se eliminaron :count imágenes pontencialmente sin uso!',
+ 'maint_image_cleanup_nothing_found' => 'No se encotraron imágenes sin usar, Nada eliminado!',
+
/**
* Role settings
*/
diff --git a/resources/views/pages/form-toolbox.blade.php b/resources/views/pages/form-toolbox.blade.php
index f6ee2510d..01c224543 100644
--- a/resources/views/pages/form-toolbox.blade.php
+++ b/resources/views/pages/form-toolbox.blade.php
@@ -42,8 +42,8 @@
{{ trans('common.cancel') }}
-
diff --git a/resources/views/pages/revision.blade.php b/resources/views/pages/revision.blade.php index ec6ca112e..f2d181fa1 100644 --- a/resources/views/pages/revision.blade.php +++ b/resources/views/pages/revision.blade.php @@ -14,7 +14,7 @@