diff --git a/resources/assets/js/components/page-display.js b/resources/assets/js/components/page-display.js index 257deed..260600d 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 6c04e98..ae63a8c 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 d0ecc20..119d8fa 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 16f96c7..5acad61 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 16c8ef9..9b17bcd 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 2366bf1..8fe4058 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 1a4f33d..21fdf90 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 649b8c7..7c53a7e 100644 --- a/resources/lang/es/activities.php +++ b/resources/lang/es/activities.php @@ -35,6 +35,8 @@ '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 dabeec4..fbadb65 100644 --- a/resources/lang/es/common.php +++ b/resources/lang/es/common.php @@ -31,6 +31,7 @@ '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 0e8ea95..8c5c9f0 100644 --- a/resources/lang/es/entities.php +++ b/resources/lang/es/entities.php @@ -166,6 +166,9 @@ '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 73c3063..7dddf71 100644 --- a/resources/lang/es/errors.php +++ b/resources/lang/es/errors.php @@ -7,7 +7,7 @@ */ // 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 @@ '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 ea1a128..d75d842 100644 --- a/resources/lang/es/settings.php +++ b/resources/lang/es/settings.php @@ -34,6 +34,7 @@ '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 @@ '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 cb32c01..92aaf7d 100644 --- a/resources/lang/es_AR/settings.php +++ b/resources/lang/es_AR/settings.php @@ -34,10 +34,10 @@ '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 @@ '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 f6ee251..01c2245 100644 --- a/resources/views/pages/form-toolbox.blade.php +++ b/resources/views/pages/form-toolbox.blade.php @@ -42,8 +42,8 @@ {{ trans('common.cancel') }} -
@icon('edit')
-
@icon('close')
+
@icon('edit')
+
@icon('close')

diff --git a/resources/views/pages/revision.blade.php b/resources/views/pages/revision.blade.php index ec6ca11..f2d181f 100644 --- a/resources/views/pages/revision.blade.php +++ b/resources/views/pages/revision.blade.php @@ -14,7 +14,7 @@

-
+
@include('pages.page-display')