From 56f444a8a777acafd9c3331eaf4950418fab858c Mon Sep 17 00:00:00 2001 From: Marcos Date: Wed, 30 May 2018 01:41:25 +0200 Subject: [PATCH 001/183] New strings --- resources/lang/es/activities.php | 4 +++- resources/lang/es/common.php | 1 + resources/lang/es/entities.php | 3 +++ resources/lang/es/errors.php | 4 ++-- resources/lang/es/settings.php | 14 ++++++++++++++ 5 files changed, 23 insertions(+), 3 deletions(-) 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 b02b98e1a..866a3c1a6 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 */ From 134a96fa32d6e5efff8a912864c9a2a2862ddb39 Mon Sep 17 00:00:00 2001 From: Abijeet Date: Sun, 3 Jun 2018 13:47:07 +0530 Subject: [PATCH 002/183] Adds edit icon to each header in the page. Towards #618 Signed-off-by: Abijeet --- .../assets/js/components/page-display.js | 27 ++++++++++++++++++- .../assets/js/components/wysiwyg-editor.js | 13 +++++++++ resources/assets/js/vues/page-editor.js | 7 +++++ resources/assets/sass/_pages.scss | 21 +++++++++++++++ resources/views/pages/show.blade.php | 4 +++ 5 files changed, 71 insertions(+), 1 deletion(-) diff --git a/resources/assets/js/components/page-display.js b/resources/assets/js/components/page-display.js index f51cb7f34..82676b61b 100644 --- a/resources/assets/js/components/page-display.js +++ b/resources/assets/js/components/page-display.js @@ -11,6 +11,7 @@ class PageDisplay { this.setupPointer(); this.setupStickySidebar(); this.setupNavHighlighting(); + this.setupEditOnHeader(); // Check the hash on load if (window.location.hash) { @@ -219,7 +220,31 @@ class PageDisplay { } } } + setupEditOnHeader() { + const headingEditIcon = document.querySelector('.heading-edit-icon'); + if (headingEditIcon.length === 0) { + // user does not have permission to edit. + return; + } + + // Create a clone of the edit icon without the hidden class + const visibleHeadingEditIcon = headingEditIcon.cloneNode(true); + visibleHeadingEditIcon.style.display = ''; + + const headings = document.querySelector('.page-content').querySelectorAll('h1, h2, h3, h4, h5, h6'); + + // add an edit icon to each header. + for (let i = 0; i !== headings.length; ++i) { + const currHeading = headings[i]; + const headingId = currHeading.id; + + let editIcon = visibleHeadingEditIcon.cloneNode(true); + editIcon.href += `#${headingId}`; + + currHeading.appendChild(editIcon); + } + } } -module.exports = PageDisplay; \ No newline at end of file +module.exports = PageDisplay; diff --git a/resources/assets/js/components/wysiwyg-editor.js b/resources/assets/js/components/wysiwyg-editor.js index f7e9bfeed..69286abff 100644 --- a/resources/assets/js/components/wysiwyg-editor.js +++ b/resources/assets/js/components/wysiwyg-editor.js @@ -497,6 +497,19 @@ class WysiwygEditor { editorChange(html); }); + window.$events.listen('editor-scroll-to-text', textId => { + const element = editor.dom.get(textId) + if (!element) { + return; + } + + // scroll the element into the view and put the cursor at the end. + element.scrollIntoView(); + editor.selection.select(element, true); + editor.selection.collapse(false); + editor.focus(); + }); + registerEditorShortcuts(editor); let wrap; diff --git a/resources/assets/js/vues/page-editor.js b/resources/assets/js/vues/page-editor.js index 020e371b0..3796fbf65 100644 --- a/resources/assets/js/vues/page-editor.js +++ b/resources/assets/js/vues/page-editor.js @@ -43,6 +43,13 @@ function mounted() { window.$events.listen('editor-markdown-change', markdown => { this.editorMarkdown = markdown; }); + + const scrollToText = window.location.hash ? window.location.hash.substr(1) : ''; + if (scrollToText) { + setTimeout(() => { + window.$events.emit('editor-scroll-to-text', scrollToText); + }, 1000) + } } let data = { diff --git a/resources/assets/sass/_pages.scss b/resources/assets/sass/_pages.scss index ca146d890..834218145 100755 --- a/resources/assets/sass/_pages.scss +++ b/resources/assets/sass/_pages.scss @@ -66,6 +66,17 @@ } h1, h2, h3, h4, h5, h6, pre { clear: left; + + .heading-edit-icon { + margin-left: 10px; + font-size: 0.7em; + display: none; + line-height: 1em; + + .svg-icon { + bottom: 0px; + } + } } hr { clear: both; @@ -89,6 +100,16 @@ del { background: #FFECEC; } + h1:hover, + h2:hover, + h3:hover, + h4:hover, + h5:hover, + h6:hover { + .heading-edit-icon { + display: inline; + } + } } // Page content pointers diff --git a/resources/views/pages/show.blade.php b/resources/views/pages/show.blade.php index 3b8b7abff..8ccd2425b 100644 --- a/resources/views/pages/show.blade.php +++ b/resources/views/pages/show.blade.php @@ -132,6 +132,10 @@ @include('pages/page-display') + + @if(userCan('page-update', $page)) + + @endif @if ($commentsEnabled) From 0363fc4ea12a803013f56c3300da89d3a505dcd0 Mon Sep 17 00:00:00 2001 From: Abijeet Date: Sun, 3 Jun 2018 14:24:55 +0530 Subject: [PATCH 003/183] Fixes undefined error when clicking on page navigation links. Fixes #873 Signed-off-by: Abijeet --- resources/assets/js/components/page-display.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/assets/js/components/page-display.js b/resources/assets/js/components/page-display.js index f51cb7f34..5eb5648cd 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)); }); } From b936e1f403e0565adc9a619d8b9426dfd6b9492c Mon Sep 17 00:00:00 2001 From: Abijeet Date: Sun, 10 Jun 2018 13:11:10 +0530 Subject: [PATCH 004/183] Added code to handle scroll for markdown. Signed-off-by: Abijeet --- .../assets/js/components/markdown-editor.js | 35 +++++++++++++++++++ .../assets/js/components/page-display.js | 7 ++-- .../assets/js/components/wysiwyg-editor.js | 30 ++++++++++------ resources/assets/js/vues/page-editor.js | 7 ---- 4 files changed, 60 insertions(+), 19 deletions(-) diff --git a/resources/assets/js/components/markdown-editor.js b/resources/assets/js/components/markdown-editor.js index 06426bf34..4e0ba83ba 100644 --- a/resources/assets/js/components/markdown-editor.js +++ b/resources/assets/js/components/markdown-editor.js @@ -18,6 +18,13 @@ class MarkdownEditor { this.onMarkdownScroll = this.onMarkdownScroll.bind(this); this.init(); + + // Scroll to text if needed. + const queryParams = (new URL(window.location)).searchParams; + const scrollText = queryParams.get('content-text'); + if (scrollText) { + this.scrollToText(scrollText); + } } init() { @@ -387,6 +394,34 @@ class MarkdownEditor { }); } + // Scroll to a specified text + scrollToText(searchText) {; + if (!searchText) { + return; + } + const content = this.cm.getValue(); + const lines = content.split(/\r?\n/); + let lineNumber = -1; + for (let i = 0; i !== lines.length; ++i) { + const line = lines[i]; + if (!line) { + continue; + } + if (line.indexOf(searchText) !== -1) { + lineNumber = i; + break; + } + } + + if (lineNumber !== -1) { + this.cm.scrollIntoView({ + line: lineNumber, + char: lines[lineNumber].length + }, 200); + this.cm.focus(); + } + } + } module.exports = MarkdownEditor ; \ No newline at end of file diff --git a/resources/assets/js/components/page-display.js b/resources/assets/js/components/page-display.js index 82676b61b..ec5bcd67e 100644 --- a/resources/assets/js/components/page-display.js +++ b/resources/assets/js/components/page-display.js @@ -222,7 +222,7 @@ class PageDisplay { } setupEditOnHeader() { const headingEditIcon = document.querySelector('.heading-edit-icon'); - if (headingEditIcon.length === 0) { + if (headingEditIcon === null) { // user does not have permission to edit. return; } @@ -239,7 +239,10 @@ class PageDisplay { const headingId = currHeading.id; let editIcon = visibleHeadingEditIcon.cloneNode(true); - editIcon.href += `#${headingId}`; + + // get the first 50 characters. + let queryContent = currHeading.textContent && currHeading.textContent.substring(0, 50); + editIcon.href += `?content-id=${headingId}&content-text=${encodeURIComponent(queryContent)}`; currHeading.appendChild(editIcon); } diff --git a/resources/assets/js/components/wysiwyg-editor.js b/resources/assets/js/components/wysiwyg-editor.js index 69286abff..a094359ec 100644 --- a/resources/assets/js/components/wysiwyg-editor.js +++ b/resources/assets/js/components/wysiwyg-editor.js @@ -483,22 +483,25 @@ class WysiwygEditor { }, setup: function (editor) { - editor.on('init ExecCommand change input NodeChange ObjectResized', editorChange); + editor.on('ExecCommand change input NodeChange ObjectResized', editorChange); + + editor.on('init', () => { + editorChange(); + // Scroll to the content if needed. + const queryParams = (new URL(window.location)).searchParams; + const scrollId = queryParams.get('content-id'); + if (scrollId) { + scrollToText(scrollId); + } + }); function editorChange() { let content = editor.getContent(); window.$events.emit('editor-html-change', content); } - window.$events.listen('editor-html-update', html => { - editor.setContent(html); - editor.selection.select(editor.getBody(), true); - editor.selection.collapse(false); - editorChange(html); - }); - - window.$events.listen('editor-scroll-to-text', textId => { - const element = editor.dom.get(textId) + function scrollToText(scrollId) { + const element = editor.dom.get(scrollId) if (!element) { return; } @@ -508,6 +511,13 @@ class WysiwygEditor { editor.selection.select(element, true); editor.selection.collapse(false); editor.focus(); + } + + window.$events.listen('editor-html-update', html => { + editor.setContent(html); + editor.selection.select(editor.getBody(), true); + editor.selection.collapse(false); + editorChange(html); }); registerEditorShortcuts(editor); diff --git a/resources/assets/js/vues/page-editor.js b/resources/assets/js/vues/page-editor.js index 3796fbf65..020e371b0 100644 --- a/resources/assets/js/vues/page-editor.js +++ b/resources/assets/js/vues/page-editor.js @@ -43,13 +43,6 @@ function mounted() { window.$events.listen('editor-markdown-change', markdown => { this.editorMarkdown = markdown; }); - - const scrollToText = window.location.hash ? window.location.hash.substr(1) : ''; - if (scrollToText) { - setTimeout(() => { - window.$events.emit('editor-scroll-to-text', scrollToText); - }, 1000) - } } let data = { From 562225a77b1cde623bad3f51f12fc26bef38402a Mon Sep 17 00:00:00 2001 From: Abijeet Date: Sun, 10 Jun 2018 17:04:54 +0530 Subject: [PATCH 005/183] Added code to set the cursor at end of line while scrolling. Signed-off-by: Abijeet --- resources/assets/js/components/markdown-editor.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/resources/assets/js/components/markdown-editor.js b/resources/assets/js/components/markdown-editor.js index 4e0ba83ba..5688ebd61 100644 --- a/resources/assets/js/components/markdown-editor.js +++ b/resources/assets/js/components/markdown-editor.js @@ -416,9 +416,13 @@ class MarkdownEditor { if (lineNumber !== -1) { this.cm.scrollIntoView({ line: lineNumber, - char: lines[lineNumber].length }, 200); this.cm.focus(); + // set the cursor location. + this.cm.setCursor({ + line: lineNumber, + char: lines[lineNumber].length + }) } } From 6c4c1ccb583835ec794468767bc645d7fcdb0db9 Mon Sep 17 00:00:00 2001 From: Abijeet Date: Sun, 10 Jun 2018 17:06:23 +0530 Subject: [PATCH 006/183] Changed the way we were displaying the edit icon. Signed-off-by: Abijeet --- .../assets/js/components/page-display.js | 16 ++++++- resources/assets/sass/_pages.scss | 44 +++++++++---------- resources/lang/de/entities.php | 1 + resources/lang/en/entities.php | 1 + resources/lang/es/entities.php | 1 + resources/lang/es_AR/entities.php | 3 +- resources/lang/fr/entities.php | 1 + resources/lang/it/entities.php | 1 + resources/lang/ja/entities.php | 1 + resources/lang/nl/entities.php | 13 +++--- resources/lang/pl/entities.php | 1 + resources/lang/pt_BR/entities.php | 1 + resources/lang/ru/entities.php | 1 + resources/lang/sk/entities.php | 1 + resources/lang/sv/entities.php | 1 + resources/lang/zh_CN/entities.php | 1 + resources/lang/zh_TW/entities.php | 1 + resources/views/pages/show.blade.php | 16 ++++--- 18 files changed, 65 insertions(+), 40 deletions(-) diff --git a/resources/assets/js/components/page-display.js b/resources/assets/js/components/page-display.js index ec5bcd67e..70933ae8c 100644 --- a/resources/assets/js/components/page-display.js +++ b/resources/assets/js/components/page-display.js @@ -75,11 +75,23 @@ class PageDisplay { pointerShowing = false; }); - let updatePointerContent = () => { + let updatePointerContent = ($elem) => { let inputText = pointerModeLink ? window.baseUrl(`/link/${this.pageId}#${pointerSectionId}`) : `{{@${this.pageId}#${pointerSectionId}}}`; if (pointerModeLink && inputText.indexOf('http') !== 0) inputText = window.location.protocol + "//" + window.location.host + inputText; $pointer.find('input').val(inputText); + + // update anchor if present + const $editAnchor = $pointer.find('#pointer-edit'); + if ($editAnchor.length !== 0 && $elem) { + const editHref = $editAnchor.data('editHref'); + const element = $elem[0]; + const elementId = element.id; + + // get the first 50 characters. + let queryContent = element.textContent && element.textContent.substring(0, 50); + $editAnchor[0].href = `${editHref}?content-id=${elementId}&content-text=${encodeURIComponent(queryContent)}`; + } }; // Show pointer when selecting a single block of tagged content @@ -91,7 +103,7 @@ class PageDisplay { // Show pointer and set link let $elem = $(this); pointerSectionId = $elem.attr('id'); - updatePointerContent(); + updatePointerContent($elem); $elem.before($pointer); $pointer.show(); diff --git a/resources/assets/sass/_pages.scss b/resources/assets/sass/_pages.scss index 834218145..1a4f33dae 100755 --- a/resources/assets/sass/_pages.scss +++ b/resources/assets/sass/_pages.scss @@ -66,17 +66,6 @@ } h1, h2, h3, h4, h5, h6, pre { clear: left; - - .heading-edit-icon { - margin-left: 10px; - font-size: 0.7em; - display: none; - line-height: 1em; - - .svg-icon { - bottom: 0px; - } - } } hr { clear: both; @@ -100,16 +89,6 @@ del { background: #FFECEC; } - h1:hover, - h2:hover, - h3:hover, - h4:hover, - h5:hover, - h6:hover { - .heading-edit-icon { - display: inline; - } - } } // Page content pointers @@ -128,8 +107,13 @@ position: absolute; top: -60px; background-color:#FFF; - width: 272px; + width: 275px; z-index: 55; + + &.is-page-editable { + width: 328px; + } + &:before { position: absolute; left: 50%; @@ -153,12 +137,13 @@ width: 172px; z-index: 40; } - input, button { + input, button, a { position: relative; border-radius: 0; height: 28px; font-size: 12px; vertical-align: top; + padding: 5px 16px; } > i { color: #888; @@ -169,11 +154,22 @@ cursor: pointer; user-select: none; } - .button { + .input-group .button { line-height: 1; margin: 0 0 0 -4px; box-shadow: none; } + a.button { + margin: 0 0 0 0; + + &:hover { + fill: #fff; + } + } + .svg-icon { + width: 1.2em; + height: 1.2em; + } } // Attribute form diff --git a/resources/lang/de/entities.php b/resources/lang/de/entities.php index 250a86ea5..96aaa9b0e 100644 --- a/resources/lang/de/entities.php +++ b/resources/lang/de/entities.php @@ -179,6 +179,7 @@ return [ 'pages_revisions_restore' => 'Wiederherstellen', 'pages_revisions_none' => 'Diese Seite hat keine älteren Versionen.', 'pages_copy_link' => 'Link kopieren', + 'pages_edit_content_link' => 'Inhalt bearbeiten', 'pages_permissions_active' => 'Seiten-Berechtigungen aktiv', 'pages_initial_revision' => 'Erste Veröffentlichung', 'pages_initial_name' => 'Neue Seite', diff --git a/resources/lang/en/entities.php b/resources/lang/en/entities.php index 430655a87..93025ffd4 100644 --- a/resources/lang/en/entities.php +++ b/resources/lang/en/entities.php @@ -185,6 +185,7 @@ return [ 'pages_revisions_restore' => 'Restore', 'pages_revisions_none' => 'This page has no revisions', 'pages_copy_link' => 'Copy Link', + 'pages_edit_content_link' => 'Edit Content', 'pages_permissions_active' => 'Page Permissions Active', 'pages_initial_revision' => 'Initial publish', 'pages_initial_name' => 'New Page', diff --git a/resources/lang/es/entities.php b/resources/lang/es/entities.php index b02b98e1a..0e8ea95e5 100644 --- a/resources/lang/es/entities.php +++ b/resources/lang/es/entities.php @@ -182,6 +182,7 @@ return [ 'pages_revisions_restore' => 'Restaurar', 'pages_revisions_none' => 'Esta página no tiene revisiones', 'pages_copy_link' => 'Copiar Enlace', + 'pages_edit_content_link' => 'Contenido editado', 'pages_permissions_active' => 'Permisos de página activos', 'pages_initial_revision' => 'Publicación inicial', 'pages_initial_name' => 'Página nueva', diff --git a/resources/lang/es_AR/entities.php b/resources/lang/es_AR/entities.php index b294f24f9..371f1b7aa 100644 --- a/resources/lang/es_AR/entities.php +++ b/resources/lang/es_AR/entities.php @@ -124,7 +124,7 @@ return [ 'chapters_permissions_active' => 'Permisos de capítulo activado', 'chapters_permissions_success' => 'Permisos de capítulo actualizados', 'chapters_search_this' => 'Buscar en este capítulo', - + /** * Pages */ @@ -185,6 +185,7 @@ return [ 'pages_revisions_restore' => 'Restaurar', 'pages_revisions_none' => 'Esta página no tiene revisiones', 'pages_copy_link' => 'Copiar enlace', + 'pages_edit_content_link' => 'Contenido editado', 'pages_permissions_active' => 'Permisos de página activos', 'pages_initial_revision' => 'Publicación inicial', 'pages_initial_name' => 'Página nueva', diff --git a/resources/lang/fr/entities.php b/resources/lang/fr/entities.php index 7d0696c2a..c8503241e 100644 --- a/resources/lang/fr/entities.php +++ b/resources/lang/fr/entities.php @@ -182,6 +182,7 @@ return [ 'pages_revisions_restore' => 'Restaurer', 'pages_revisions_none' => 'Cette page n\'a aucune révision', 'pages_copy_link' => 'Copier le lien', + 'pages_edit_content_link' => 'Modifier le contenu', 'pages_permissions_active' => 'Permissions de page actives', 'pages_initial_revision' => 'Publication initiale', 'pages_initial_name' => 'Nouvelle page', diff --git a/resources/lang/it/entities.php b/resources/lang/it/entities.php index e3e44bfed..1941ffb1e 100755 --- a/resources/lang/it/entities.php +++ b/resources/lang/it/entities.php @@ -182,6 +182,7 @@ return [ 'pages_revisions_restore' => 'Ripristina', 'pages_revisions_none' => 'Questa pagina non ha versioni', 'pages_copy_link' => 'Copia Link', + 'pages_edit_content_link' => 'Modifica contenuto', 'pages_permissions_active' => 'Permessi Pagina Attivi', 'pages_initial_revision' => 'Pubblicazione iniziale', 'pages_initial_name' => 'Nuova Pagina', diff --git a/resources/lang/ja/entities.php b/resources/lang/ja/entities.php index d3699a4c4..c08c4998b 100644 --- a/resources/lang/ja/entities.php +++ b/resources/lang/ja/entities.php @@ -179,6 +179,7 @@ return [ 'pages_revisions_restore' => '復元', 'pages_revisions_none' => 'このページにはリビジョンがありません', 'pages_copy_link' => 'リンクをコピー', + 'pages_edit_content_link' => 'コンテンツの編集', 'pages_permissions_active' => 'ページの権限は有効です', 'pages_initial_revision' => '初回の公開', 'pages_initial_name' => '新規ページ', diff --git a/resources/lang/nl/entities.php b/resources/lang/nl/entities.php index 3b6797975..a807c84ce 100644 --- a/resources/lang/nl/entities.php +++ b/resources/lang/nl/entities.php @@ -14,7 +14,7 @@ return [ 'recent_activity' => 'Recente Activiteit', 'create_now' => 'Maak er zelf één', 'revisions' => 'Revisies', - 'meta_revision' => 'Revisie #:revisionCount', + 'meta_revision' => 'Revisie #:revisionCount', 'meta_created' => 'Aangemaakt :timeLength', 'meta_created_name' => 'Aangemaakt: :timeLength door :user', 'meta_updated' => ':timeLength Aangepast', @@ -44,7 +44,7 @@ return [ * Search */ 'search_results' => 'Zoekresultaten', - 'search_total_results_found' => ':count resultaten gevonden|:count resultaten gevonden', + 'search_total_results_found' => ':count resultaten gevonden|:count resultaten gevonden', 'search_clear' => 'Zoekopdracht wissen', 'search_no_pages' => 'Er zijn geen pagina\'s gevonden', 'search_for_term' => 'Zoeken op :term', @@ -105,7 +105,7 @@ return [ */ 'chapter' => 'Hoofdstuk', 'chapters' => 'Hoofdstukken', - 'x_chapters' => ':count Hoofdstuk|:count Hoofdstukken', + 'x_chapters' => ':count Hoofdstuk|:count Hoofdstukken', 'chapters_popular' => 'Populaire Hoofdstukken', 'chapters_new' => 'Nieuw Hoofdstuk', 'chapters_create' => 'Hoofdstuk Toevoegen', @@ -124,14 +124,14 @@ return [ 'chapters_empty' => 'Er zijn geen pagina\'s in dit hoofdstuk aangemaakt.', 'chapters_permissions_active' => 'Hoofdstuk Permissies Actief', 'chapters_permissions_success' => 'Hoofdstuk Permissies Bijgewerkt', - 'chapters_search_this' => 'Doorzoek dit hoofdstuk', + 'chapters_search_this' => 'Doorzoek dit hoofdstuk', /** * Pages */ 'page' => 'Pagina', 'pages' => 'Pagina\'s', - 'x_pages' => ':count Pagina|:count Pagina\'s', + 'x_pages' => ':count Pagina|:count Pagina\'s', 'pages_popular' => 'Populaire Pagina\'s', 'pages_new' => 'Nieuwe Pagina', 'pages_attachments' => 'Bijlages', @@ -168,7 +168,7 @@ return [ 'pages_move_success' => 'Pagina verplaatst naar ":parentName"', 'pages_permissions' => 'Pagina Permissies', 'pages_permissions_success' => 'Pagina Permissies bijgwerkt', - 'pages_revision' => 'Revisie', + 'pages_revision' => 'Revisie', 'pages_revisions' => 'Pagina Revisies', 'pages_revisions_named' => 'Pagina Revisies voor :pageName', 'pages_revision_named' => 'Pagina Revisie voor :pageName', @@ -182,6 +182,7 @@ return [ 'pages_revisions_restore' => 'Herstellen', 'pages_revisions_none' => 'Deze pagina heeft geen revisies', 'pages_copy_link' => 'Link Kopiëren', + 'pages_edit_content_link' => 'Bewerk inhoud', 'pages_permissions_active' => 'Pagina Permissies Actief', 'pages_initial_revision' => 'Eerste publicatie', 'pages_initial_name' => 'Nieuwe Pagina', diff --git a/resources/lang/pl/entities.php b/resources/lang/pl/entities.php index cc00c32ff..0407b1396 100644 --- a/resources/lang/pl/entities.php +++ b/resources/lang/pl/entities.php @@ -179,6 +179,7 @@ return [ 'pages_revisions_restore' => 'Przywróć', 'pages_revisions_none' => 'Ta strona nie posiada żadnych rewizji', 'pages_copy_link' => 'Kopiuj link', + 'pages_edit_content_link' => 'Edytuj zawartość', 'pages_permissions_active' => 'Uprawnienia strony aktywne', 'pages_initial_revision' => 'Wydanie pierwotne', 'pages_initial_name' => 'Nowa strona', diff --git a/resources/lang/pt_BR/entities.php b/resources/lang/pt_BR/entities.php index 20527b16d..4dbf9c935 100644 --- a/resources/lang/pt_BR/entities.php +++ b/resources/lang/pt_BR/entities.php @@ -181,6 +181,7 @@ return [ 'pages_revisions_restore' => 'Restaurar', 'pages_revisions_none' => 'Essa página não tem revisões', 'pages_copy_link' => 'Copia Link', + 'pages_edit_content_link' => 'Editar conteúdo', 'pages_permissions_active' => 'Permissões de Página Ativas', 'pages_initial_revision' => 'Publicação Inicial', 'pages_initial_name' => 'Nova Página', diff --git a/resources/lang/ru/entities.php b/resources/lang/ru/entities.php index 124726c1a..a0322d622 100644 --- a/resources/lang/ru/entities.php +++ b/resources/lang/ru/entities.php @@ -181,6 +181,7 @@ return [ 'pages_revisions_restore' => 'Восстановить', 'pages_revisions_none' => 'У этой страницы нет других версий', 'pages_copy_link' => 'Копировать ссылку', + 'pages_edit_content_link' => 'Изменить содержание', 'pages_permissions_active' => 'Действующие разрешения на страницу', 'pages_initial_revision' => 'Первоначальное издание', 'pages_initial_name' => 'Новая страница', diff --git a/resources/lang/sk/entities.php b/resources/lang/sk/entities.php index 25a1af140..8f9a57d1f 100644 --- a/resources/lang/sk/entities.php +++ b/resources/lang/sk/entities.php @@ -166,6 +166,7 @@ return [ 'pages_revisions_restore' => 'Obnoviť', 'pages_revisions_none' => 'Táto stránka nemá žiadne revízie', 'pages_copy_link' => 'Kopírovať odkaz', + 'pages_edit_content_link' => 'Upraviť obsah', 'pages_permissions_active' => 'Oprávnienia stránky aktívne', 'pages_initial_revision' => 'Prvé zverejnenie', 'pages_initial_name' => 'Nová stránka', diff --git a/resources/lang/sv/entities.php b/resources/lang/sv/entities.php index 6aa537b2d..e9d588a9f 100644 --- a/resources/lang/sv/entities.php +++ b/resources/lang/sv/entities.php @@ -182,6 +182,7 @@ return [ 'pages_revisions_restore' => 'Återställ', 'pages_revisions_none' => 'Sidan har inga revisioner', 'pages_copy_link' => 'Kopiera länk', + 'pages_edit_content_link' => 'Redigera innehåll', 'pages_permissions_active' => 'Anpassade rättigheter är i bruk', 'pages_initial_revision' => 'Första publicering', 'pages_initial_name' => 'Ny sida', diff --git a/resources/lang/zh_CN/entities.php b/resources/lang/zh_CN/entities.php index 3c04c442d..eed6b9532 100644 --- a/resources/lang/zh_CN/entities.php +++ b/resources/lang/zh_CN/entities.php @@ -181,6 +181,7 @@ return [ 'pages_revisions_restore' => '恢复', 'pages_revisions_none' => '此页面没有修订', 'pages_copy_link' => '复制链接', + 'pages_edit_content_link' => '编辑内容', 'pages_permissions_active' => '有效的页面权限', 'pages_initial_revision' => '初始发布', 'pages_initial_name' => '新页面', diff --git a/resources/lang/zh_TW/entities.php b/resources/lang/zh_TW/entities.php index b354a2f2f..664917eaa 100644 --- a/resources/lang/zh_TW/entities.php +++ b/resources/lang/zh_TW/entities.php @@ -182,6 +182,7 @@ return [ 'pages_revisions_restore' => '恢複', 'pages_revisions_none' => '此頁面沒有修訂', 'pages_copy_link' => '複製連結', + 'pages_edit_content_link' => '编辑内容', 'pages_permissions_active' => '有效的頁面權限', 'pages_initial_revision' => '初次發布', 'pages_initial_name' => '新頁面', diff --git a/resources/views/pages/show.blade.php b/resources/views/pages/show.blade.php index 8ccd2425b..0b6aa7d14 100644 --- a/resources/views/pages/show.blade.php +++ b/resources/views/pages/show.blade.php @@ -124,18 +124,20 @@
-
+
@icon('link') @icon('include', ['style' => 'display:none;']) - - + + + + + @if(userCan('page-update', $page)) + @icon('edit') + @endif
@include('pages/page-display') - - @if(userCan('page-update', $page)) - - @endif
@if ($commentsEnabled) From 78be8535f7c9e83e39c1bc3bad7357f2e6c7e14a Mon Sep 17 00:00:00 2001 From: Abijeet Date: Sun, 10 Jun 2018 17:19:03 +0530 Subject: [PATCH 007/183] Removed previous code that is now unneeded Signed-off-by: Abijeet --- .../assets/js/components/page-display.js | 29 ------------------- 1 file changed, 29 deletions(-) diff --git a/resources/assets/js/components/page-display.js b/resources/assets/js/components/page-display.js index 70933ae8c..257deedda 100644 --- a/resources/assets/js/components/page-display.js +++ b/resources/assets/js/components/page-display.js @@ -11,7 +11,6 @@ class PageDisplay { this.setupPointer(); this.setupStickySidebar(); this.setupNavHighlighting(); - this.setupEditOnHeader(); // Check the hash on load if (window.location.hash) { @@ -232,34 +231,6 @@ class PageDisplay { } } } - setupEditOnHeader() { - const headingEditIcon = document.querySelector('.heading-edit-icon'); - if (headingEditIcon === null) { - // user does not have permission to edit. - return; - } - - // Create a clone of the edit icon without the hidden class - const visibleHeadingEditIcon = headingEditIcon.cloneNode(true); - visibleHeadingEditIcon.style.display = ''; - - const headings = document.querySelector('.page-content').querySelectorAll('h1, h2, h3, h4, h5, h6'); - - // add an edit icon to each header. - for (let i = 0; i !== headings.length; ++i) { - const currHeading = headings[i]; - const headingId = currHeading.id; - - let editIcon = visibleHeadingEditIcon.cloneNode(true); - - // get the first 50 characters. - let queryContent = currHeading.textContent && currHeading.textContent.substring(0, 50); - editIcon.href += `?content-id=${headingId}&content-text=${encodeURIComponent(queryContent)}`; - - currHeading.appendChild(editIcon); - } - } - } module.exports = PageDisplay; From 771f781e7faf5823bf3aee905ab5610674149ad2 Mon Sep 17 00:00:00 2001 From: Abijeet Date: Sun, 10 Jun 2018 17:29:30 +0530 Subject: [PATCH 008/183] Fixes a corner case with exclamation in the ID. Signed-off-by: Abijeet --- resources/assets/js/components/wysiwyg-editor.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/assets/js/components/wysiwyg-editor.js b/resources/assets/js/components/wysiwyg-editor.js index a094359ec..a8a2ff175 100644 --- a/resources/assets/js/components/wysiwyg-editor.js +++ b/resources/assets/js/components/wysiwyg-editor.js @@ -501,7 +501,7 @@ class WysiwygEditor { } function scrollToText(scrollId) { - const element = editor.dom.get(scrollId) + const element = editor.dom.get(encodeURIComponent(scrollId).replace(/!/g, '%21')); if (!element) { return; } From a9bf2ed39837a0413b31079e891c7eb305893bfb Mon Sep 17 00:00:00 2001 From: Leonardo Martinez Date: Wed, 13 Jun 2018 10:12:36 -0300 Subject: [PATCH 009/183] Updated 'Spanish Argentina' translation. --- resources/lang/es_AR/settings.php | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) 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 */ From 4948b443b6ce3088fbdf99dbdc1d7621d1eb73c4 Mon Sep 17 00:00:00 2001 From: Dan Brown Date: Sun, 24 Jun 2018 13:38:19 +0100 Subject: [PATCH 010/183] Started work on bookshelves --- app/Book.php | 8 -- app/BookShelf.php | 74 +++++++++++++++++++ ..._06_24_115700_create_bookshelves_table.php | 70 ++++++++++++++++++ resources/views/books/show.blade.php | 2 +- 4 files changed, 145 insertions(+), 9 deletions(-) create mode 100644 app/BookShelf.php create mode 100644 database/migrations/2018_06_24_115700_create_bookshelves_table.php diff --git a/app/Book.php b/app/Book.php index 51ea226b4..effd6ca45 100644 --- a/app/Book.php +++ b/app/Book.php @@ -48,14 +48,6 @@ class Book extends Entity { return $this->belongsTo(Image::class, 'image_id'); } - /* - * Get the edit url for this book. - * @return string - */ - public function getEditUrl() - { - return $this->getUrl() . '/edit'; - } /** * Get all pages within this book. diff --git a/app/BookShelf.php b/app/BookShelf.php new file mode 100644 index 000000000..47f873bcd --- /dev/null +++ b/app/BookShelf.php @@ -0,0 +1,74 @@ +slug) . '/' . trim($path, '/')); + } + return baseUrl('/shelves/' . urlencode($this->slug)); + } + + /** + * Returns BookShelf cover image, if cover does not exists return default cover image. + * @param int $width - Width of the image + * @param int $height - Height of the image + * @return string + */ + public function getBookCover($width = 440, $height = 250) + { + $default = baseUrl('/book_default_cover.png'); + if (!$this->image_id) { + return $default; + } + + try { + $cover = $this->cover ? baseUrl($this->cover->getThumb($width, $height, false)) : $default; + } catch (\Exception $err) { + $cover = $default; + } + return $cover; + } + + /** + * Get the cover image of the book + * @return \Illuminate\Database\Eloquent\Relations\BelongsTo + */ + public function cover() + { + return $this->belongsTo(Image::class, 'image_id'); + } + + /** + * Get an excerpt of this book's description to the specified length or less. + * @param int $length + * @return string + */ + public function getExcerpt($length = 100) + { + $description = $this->description; + return strlen($description) > $length ? substr($description, 0, $length-3) . '...' : $description; + } + + /** + * Return a generalised, common raw query that can be 'unioned' across entities. + * @return string + */ + public function entityRawQuery() + { + return "'BookStack\\\\BookShelf' as entity_type, id, id as entity_id, slug, name, {$this->textField} as text,'' as html, '0' as book_id, '0' as priority, '0' as chapter_id, '0' as draft, created_by, updated_by, updated_at, created_at"; + } +} diff --git a/database/migrations/2018_06_24_115700_create_bookshelves_table.php b/database/migrations/2018_06_24_115700_create_bookshelves_table.php new file mode 100644 index 000000000..173e9214b --- /dev/null +++ b/database/migrations/2018_06_24_115700_create_bookshelves_table.php @@ -0,0 +1,70 @@ +increments('id'); + $table->string('name', 200); + $table->string('slug', 200); + $table->text('description'); + $table->integer('created_by')->nullable()->default(null); + $table->integer('updated_by')->nullable()->default(null); + $table->boolean('restricted')->default(false); + $table->integer('image_id')->nullable()->default(null); + $table->timestamps(); + + $table->index('slug'); + $table->index('created_by'); + $table->index('updated_by'); + $table->index('restricted'); + }); + + // Get roles with permissions we need to change + $adminRoleId = DB::table('roles')->where('system_name', '=', 'admin')->first()->id; + $editorRole = DB::table('roles')->where('name', '=', 'editor')->first(); + + // TODO - Copy existing role permissions from Books + $entity = 'BookShelf'; + $ops = ['View All', 'View Own', 'Create All', 'Create Own', 'Update All', 'Update Own', 'Delete All', 'Delete Own']; + foreach ($ops as $op) { + $permId = DB::table('permissions')->insertGetId([ + 'name' => strtolower($entity) . '-' . strtolower(str_replace(' ', '-', $op)), + 'display_name' => $op . ' ' . 'BookShelves', + 'created_at' => \Carbon\Carbon::now()->toDateTimeString(), + 'updated_at' => \Carbon\Carbon::now()->toDateTimeString() + ]); + // Assign view permission to all current roles + DB::table('permission_role')->insert([ + 'role_id' => $adminRoleId, + 'permission_id' => $permId + ]); + if ($editorRole !== null) { + DB::table('permission_role')->insert([ + 'role_id' => $editorRole->id, + 'permission_id' => $permId + ]); + } + } + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('bookshelves'); + } +} diff --git a/resources/views/books/show.blade.php b/resources/views/books/show.blade.php index d0a2eb2f7..e5845b495 100644 --- a/resources/views/books/show.blade.php +++ b/resources/views/books/show.blade.php @@ -25,7 +25,7 @@ @icon('more'){{ trans('common.more') }}
    @if(userCan('book-update', $book)) -
  • @icon('edit'){{ trans('common.edit') }}
  • +
  • @icon('edit'){{ trans('common.edit') }}
  • @icon('sort'){{ trans('common.sort') }}
  • @endif @if(userCan('restrictions-manage', $book)) From 93795b6eda17bec0e39d93841af13a102f588ea7 Mon Sep 17 00:00:00 2001 From: Timo B Date: Thu, 28 Jun 2018 09:01:36 +0200 Subject: [PATCH 011/183] add everything needed to use discord as social login provider --- .env.example | 2 + app/Providers/EventServiceProvider.php | 1 + app/Services/SocialAuthService.php | 2 +- composer.json | 3 +- composer.lock | 51 +++++++++++++++++++++---- config/services.php | 6 +++ resources/assets/icons/auth/discord.svg | 1 + 7 files changed, 57 insertions(+), 9 deletions(-) create mode 100644 resources/assets/icons/auth/discord.svg diff --git a/.env.example b/.env.example index ccafaf4fb..68d268635 100644 --- a/.env.example +++ b/.env.example @@ -56,6 +56,8 @@ TWITCH_APP_SECRET=false GITLAB_APP_ID=false GITLAB_APP_SECRET=false GITLAB_BASE_URI=false +DISCORD_APP_ID=false +DISCORD_APP_SECRET=false # External services such as Gravatar and Draw.IO DISABLE_EXTERNAL_SERVICES=false diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index cc3e4d993..00eeb036c 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -20,6 +20,7 @@ class EventServiceProvider extends ServiceProvider 'SocialiteProviders\Okta\OktaExtendSocialite@handle', 'SocialiteProviders\GitLab\GitLabExtendSocialite@handle', 'SocialiteProviders\Twitch\TwitchExtendSocialite@handle', + 'SocialiteProviders\Discord\DiscordExtendSocialite@handle', ], ]; diff --git a/app/Services/SocialAuthService.php b/app/Services/SocialAuthService.php index 02361e59b..dac6b7773 100644 --- a/app/Services/SocialAuthService.php +++ b/app/Services/SocialAuthService.php @@ -16,7 +16,7 @@ class SocialAuthService protected $socialite; protected $socialAccount; - protected $validSocialDrivers = ['google', 'github', 'facebook', 'slack', 'twitter', 'azure', 'okta', 'gitlab', 'twitch']; + protected $validSocialDrivers = ['google', 'github', 'facebook', 'slack', 'twitter', 'azure', 'okta', 'gitlab', 'twitch', 'discord']; /** * SocialAuthService constructor. diff --git a/composer.json b/composer.json index 3de0cb5f7..757b0982c 100644 --- a/composer.json +++ b/composer.json @@ -20,7 +20,8 @@ "socialiteproviders/microsoft-azure": "^3.0", "socialiteproviders/okta": "^1.0", "socialiteproviders/gitlab": "^3.0", - "socialiteproviders/twitch": "^3.0" + "socialiteproviders/twitch": "^3.0", + "socialiteproviders/discord": "^2.0" }, "require-dev": { "filp/whoops": "~2.0", diff --git a/composer.lock b/composer.lock index 6e0a35323..a06cbbef9 100644 --- a/composer.lock +++ b/composer.lock @@ -1,10 +1,10 @@ { "_readme": [ "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "3bf33ab103b15b06ca06c85fd8ae3b78", + "content-hash": "b9ea2a42e2f7780b3a54d4b7327750e0", "packages": [ { "name": "aws/aws-sdk-php", @@ -1665,16 +1665,16 @@ }, { "name": "phenx/php-svg-lib", - "version": "v0.3", + "version": "v0.3.0", "source": { "type": "git", "url": "https://github.com/PhenX/php-svg-lib.git", - "reference": "a85f7fe9fe08d093a4a8583cdd306b553ff918aa" + "reference": "8f543ede60386faec9b0012833536de4b6083bb9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PhenX/php-svg-lib/zipball/a85f7fe9fe08d093a4a8583cdd306b553ff918aa", - "reference": "a85f7fe9fe08d093a4a8583cdd306b553ff918aa", + "url": "https://api.github.com/repos/PhenX/php-svg-lib/zipball/8f543ede60386faec9b0012833536de4b6083bb9", + "reference": "8f543ede60386faec9b0012833536de4b6083bb9", "shasum": "" }, "require": { @@ -1701,7 +1701,7 @@ ], "description": "A library to read, parse and export to PDF SVG files.", "homepage": "https://github.com/PhenX/php-svg-lib", - "time": "2017-05-24T10:07:27+00:00" + "time": "2018-04-14T14:36:18+00:00" }, { "name": "predis/predis", @@ -2071,6 +2071,43 @@ ], "time": "2016-07-19T19:14:21+00:00" }, + { + "name": "socialiteproviders/discord", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/SocialiteProviders/Discord.git", + "reference": "f934ca3f4fa5ea915c1d20852b826e860aa64727" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/SocialiteProviders/Discord/zipball/f934ca3f4fa5ea915c1d20852b826e860aa64727", + "reference": "f934ca3f4fa5ea915c1d20852b826e860aa64727", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0", + "socialiteproviders/manager": "~2.0 || ~3.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "SocialiteProviders\\Discord\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christopher Eklund", + "email": "eklundchristopher@gmail.com" + } + ], + "description": "Discord OAuth2 Provider for Laravel Socialite", + "time": "2017-08-28T02:20:40+00:00" + }, { "name": "socialiteproviders/gitlab", "version": "v3.0.2", diff --git a/config/services.php b/config/services.php index 825b1f109..05ec09ec0 100644 --- a/config/services.php +++ b/config/services.php @@ -108,6 +108,12 @@ return [ 'redirect' => env('APP_URL') . '/login/service/twitch/callback', 'name' => 'Twitch', ], + 'discord' => [ + 'client_id' => env('DISCORD_APP_ID'), + 'client_secret' => env('DISCORD_APP_SECRET'), + 'redirect' => env('APP_URL') . '/login/service/discord/callback', + 'name' => 'Discord', + ], 'ldap' => [ 'server' => env('LDAP_SERVER', false), diff --git a/resources/assets/icons/auth/discord.svg b/resources/assets/icons/auth/discord.svg new file mode 100644 index 000000000..65c9fccff --- /dev/null +++ b/resources/assets/icons/auth/discord.svg @@ -0,0 +1 @@ + \ No newline at end of file From fb29f4119d430cc8d040ba5d7c5d5d084937cf32 Mon Sep 17 00:00:00 2001 From: Abijeet Date: Sat, 30 Jun 2018 09:49:55 +0530 Subject: [PATCH 012/183] Fixes issue with code not wrapping on revision page. Closes #888 Signed-off-by: Abijeet --- resources/assets/sass/_pages.scss | 6 ++++++ resources/views/pages/revision.blade.php | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/resources/assets/sass/_pages.scss b/resources/assets/sass/_pages.scss index ca146d890..4658b9c6a 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/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 @@
    -
    +
    @include('pages.page-display')
    From d640cc1eeef8fe5786f663b13dc3910b3d4d6b2e Mon Sep 17 00:00:00 2001 From: Brennan Murphy Date: Mon, 2 Jul 2018 17:09:39 +0000 Subject: [PATCH 013/183] LDAP groups sync to Bookstack roles. Closes #75 --- .env.example | 9 + app/Http/Controllers/Auth/LoginController.php | 10 +- app/Repos/LdapRepo.php | 84 ++++ app/Services/LdapService.php | 378 +++++++++++------- config/services.php | 6 +- 5 files changed, 350 insertions(+), 137 deletions(-) create mode 100644 app/Repos/LdapRepo.php diff --git a/.env.example b/.env.example index ccafaf4fb..57e6af6a9 100644 --- a/.env.example +++ b/.env.example @@ -67,6 +67,15 @@ LDAP_DN=false LDAP_PASS=false LDAP_USER_FILTER=false LDAP_VERSION=false +#do you want to sync LDAP groups to BookStack roles for a user +LDAP_USER_TO_GROUPS=false +#what is the LDAP attribute for group memberships +LDAP_GROUP_ATTRIBUTE="memberOf" +#what LDAP group should the user be a part of to be an admin on BookStack +LDAP_ADMIN_GROUP="Domain Admins" +#would you like to remove users from roles on bookstack if they do not match on LDAP +#if false, the ldap groups-roles sync will only add users to roles +LDAP_REMOVE_FROM_GROUPS=false # Mail settings MAIL_DRIVER=smtp diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php index 106b90524..4c846d0e0 100644 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -5,6 +5,7 @@ namespace BookStack\Http\Controllers\Auth; use BookStack\Exceptions\AuthException; use BookStack\Http\Controllers\Controller; use BookStack\Repos\UserRepo; +use BookStack\Repos\LdapRepo; use BookStack\Services\SocialAuthService; use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Foundation\Auth\AuthenticatesUsers; @@ -96,7 +97,14 @@ class LoginController extends Controller auth()->login($user); } - $path = session()->pull('url.intended', '/'); + // ldap groups refresh + if (config('services.ldap.user_to_groups') !== false && $request->filled('username')) { + $ldapRepo = new LdapRepo($this->userRepo); + $ldapRepo->syncGroups($user,$request->input('username')); + } + + + $path = session()->pull('url.intended', '/'); $path = baseUrl($path, true); return redirect($path); } diff --git a/app/Repos/LdapRepo.php b/app/Repos/LdapRepo.php new file mode 100644 index 000000000..33d05ea88 --- /dev/null +++ b/app/Repos/LdapRepo.php @@ -0,0 +1,84 @@ +config = config('services.ldap'); + + if (config('auth.method') !== 'ldap') { + return false; + } + + $this->ldapService = new LdapService(new Ldap); + $this->userRepo = $userRepo; + } + + /** + * If there is no ldap connection, all methods calls to this library will return null + */ + public function __call($method, $arguments) + { + if ($this->ldap === null) { + return null; + } + + return call_user_func_array(array($this,$method),$arguments); + } + + /** + * Sync the LDAP groups to the user roles for the current user + * @param \BookStack\User $user + * @param string $userName + * @throws \BookStack\Exceptions\NotFoundException + */ + public function syncGroups($user,$userName) + { + $userLdapGroups = $this->ldapService->getUserGroups($userName); + $userLdapGroups = $this->groupNameFilter($userLdapGroups); + // get the ids for the roles from the names + $ldapGroupsAsRoles = Role::whereIn('name',$userLdapGroups)->pluck('id'); + // sync groups + if ($this->config['remove_from_groups']) { + $user->roles()->sync($ldapGroupsAsRoles); + $this->userRepo->attachDefaultRole($user); + } else { + $user->roles()->syncWithoutDetaching($ldapGroupsAsRoles); + } + + // make the user an admin? + if (in_array($this->config['admin'],$userLdapGroups)) { + $this->userRepo->attachSystemRole($user,'admin'); + } + } + + /** + * Filter to convert the groups from ldap to the format of the roles name on BookStack + * Spaces replaced with -, all lowercase letters + * @param array $groups + * @return array + */ + private function groupNameFilter($groups) + { + $return = []; + foreach ($groups as $groupName) { + $return[] = str_replace(' ', '-', strtolower($groupName)); + } + return $return; + } +} \ No newline at end of file diff --git a/app/Services/LdapService.php b/app/Services/LdapService.php index 3eb2f2830..e56f45e4e 100644 --- a/app/Services/LdapService.php +++ b/app/Services/LdapService.php @@ -11,155 +11,263 @@ use Illuminate\Contracts\Auth\Authenticatable; class LdapService { - protected $ldap; - protected $ldapConnection; - protected $config; + protected $ldap; + protected $ldapConnection; + protected $config; - /** - * LdapService constructor. - * @param Ldap $ldap - */ - public function __construct(Ldap $ldap) - { - $this->ldap = $ldap; - $this->config = config('services.ldap'); - } + /** + * LdapService constructor. + * @param Ldap $ldap + */ + public function __construct(Ldap $ldap) + { + $this->ldap = $ldap; + $this->config = config('services.ldap'); + } - /** - * Get the details of a user from LDAP using the given username. - * User found via configurable user filter. - * @param $userName - * @return array|null - * @throws LdapException - */ - public function getUserDetails($userName) - { - $ldapConnection = $this->getConnection(); - $this->bindSystemUser($ldapConnection); + /** + * Search for attributes for a specific user on the ldap + * @param string $userName + * @param array $attributes + * @return null|array + * @throws LdapException + */ + private function getUserWithAttributes($userName,$attributes) + { + $ldapConnection = $this->getConnection(); + $this->bindSystemUser($ldapConnection); - // Find user - $userFilter = $this->buildFilter($this->config['user_filter'], ['user' => $userName]); - $baseDn = $this->config['base_dn']; - $emailAttr = $this->config['email_attribute']; - $followReferrals = $this->config['follow_referrals'] ? 1 : 0; - $this->ldap->setOption($ldapConnection, LDAP_OPT_REFERRALS, $followReferrals); - $users = $this->ldap->searchAndGetEntries($ldapConnection, $baseDn, $userFilter, ['cn', 'uid', 'dn', $emailAttr]); - if ($users['count'] === 0) { - return null; - } + // Find user + $userFilter = $this->buildFilter($this->config['user_filter'], ['user' => $userName]); + $baseDn = $this->config['base_dn']; - $user = $users[0]; - return [ - 'uid' => (isset($user['uid'])) ? $user['uid'][0] : $user['dn'], - 'name' => $user['cn'][0], - 'dn' => $user['dn'], - 'email' => (isset($user[$emailAttr])) ? (is_array($user[$emailAttr]) ? $user[$emailAttr][0] : $user[$emailAttr]) : null - ]; - } + $followReferrals = $this->config['follow_referrals'] ? 1 : 0; + $this->ldap->setOption($ldapConnection, LDAP_OPT_REFERRALS, $followReferrals); + $users = $this->ldap->searchAndGetEntries($ldapConnection, $baseDn, $userFilter, $attributes); + if ($users['count'] === 0) { + return null; + } - /** - * @param Authenticatable $user - * @param string $username - * @param string $password - * @return bool - * @throws LdapException - */ - public function validateUserCredentials(Authenticatable $user, $username, $password) - { - $ldapUser = $this->getUserDetails($username); - if ($ldapUser === null) { - return false; - } - if ($ldapUser['uid'] !== $user->external_auth_id) { - return false; - } + return $users[0]; + } - $ldapConnection = $this->getConnection(); - try { - $ldapBind = $this->ldap->bind($ldapConnection, $ldapUser['dn'], $password); - } catch (\ErrorException $e) { - $ldapBind = false; - } + /** + * Get the details of a user from LDAP using the given username. + * User found via configurable user filter. + * @param $userName + * @return array|null + * @throws LdapException + */ + public function getUserDetails($userName) + { + $emailAttr = $this->config['email_attribute']; + $user = $this->getUserWithAttributes($userName, ['cn', 'uid', 'dn', $emailAttr]); - return $ldapBind; - } + if ($user === null) { + return null; + } - /** - * Bind the system user to the LDAP connection using the given credentials - * otherwise anonymous access is attempted. - * @param $connection - * @throws LdapException - */ - protected function bindSystemUser($connection) - { - $ldapDn = $this->config['dn']; - $ldapPass = $this->config['pass']; + return [ + 'uid' => (isset($user['uid'])) ? $user['uid'][0] : $user['dn'], + 'name' => $user['cn'][0], + 'dn' => $user['dn'], + 'email' => (isset($user[$emailAttr])) ? (is_array($user[$emailAttr]) ? $user[$emailAttr][0] : $user[$emailAttr]) : null + ]; + } - $isAnonymous = ($ldapDn === false || $ldapPass === false); - if ($isAnonymous) { - $ldapBind = $this->ldap->bind($connection); - } else { - $ldapBind = $this->ldap->bind($connection, $ldapDn, $ldapPass); - } + /** + * @param Authenticatable $user + * @param string $username + * @param string $password + * @return bool + * @throws LdapException + */ + public function validateUserCredentials(Authenticatable $user, $username, $password) + { + $ldapUser = $this->getUserDetails($username); + if ($ldapUser === null) { + return false; + } + if ($ldapUser['uid'] !== $user->external_auth_id) { + return false; + } - if (!$ldapBind) { - throw new LdapException(($isAnonymous ? trans('errors.ldap_fail_anonymous') : trans('errors.ldap_fail_authed'))); - } - } + $ldapConnection = $this->getConnection(); + try { + $ldapBind = $this->ldap->bind($ldapConnection, $ldapUser['dn'], $password); + } catch (\ErrorException $e) { + $ldapBind = false; + } - /** - * Get the connection to the LDAP server. - * Creates a new connection if one does not exist. - * @return resource - * @throws LdapException - */ - protected function getConnection() - { - if ($this->ldapConnection !== null) { - return $this->ldapConnection; - } + return $ldapBind; + } - // Check LDAP extension in installed - if (!function_exists('ldap_connect') && config('app.env') !== 'testing') { - throw new LdapException(trans('errors.ldap_extension_not_installed')); - } + /** + * Bind the system user to the LDAP connection using the given credentials + * otherwise anonymous access is attempted. + * @param $connection + * @throws LdapException + */ + protected function bindSystemUser($connection) + { + $ldapDn = $this->config['dn']; + $ldapPass = $this->config['pass']; - // Get port from server string and protocol if specified. - $ldapServer = explode(':', $this->config['server']); - $hasProtocol = preg_match('/^ldaps{0,1}\:\/\//', $this->config['server']) === 1; - if (!$hasProtocol) { - array_unshift($ldapServer, ''); - } - $hostName = $ldapServer[0] . ($hasProtocol?':':'') . $ldapServer[1]; - $defaultPort = $ldapServer[0] === 'ldaps' ? 636 : 389; - $ldapConnection = $this->ldap->connect($hostName, count($ldapServer) > 2 ? intval($ldapServer[2]) : $defaultPort); + $isAnonymous = ($ldapDn === false || $ldapPass === false); + if ($isAnonymous) { + $ldapBind = $this->ldap->bind($connection); + } else { + $ldapBind = $this->ldap->bind($connection, $ldapDn, $ldapPass); + } - if ($ldapConnection === false) { - throw new LdapException(trans('errors.ldap_cannot_connect')); - } + if (!$ldapBind) { + throw new LdapException(($isAnonymous ? trans('errors.ldap_fail_anonymous') : trans('errors.ldap_fail_authed'))); + } + } - // Set any required options - if ($this->config['version']) { - $this->ldap->setVersion($ldapConnection, $this->config['version']); - } + /** + * Get the connection to the LDAP server. + * Creates a new connection if one does not exist. + * @return resource + * @throws LdapException + */ + protected function getConnection() + { + if ($this->ldapConnection !== null) { + return $this->ldapConnection; + } - $this->ldapConnection = $ldapConnection; - return $this->ldapConnection; - } + // Check LDAP extension in installed + if (!function_exists('ldap_connect') && config('app.env') !== 'testing') { + throw new LdapException(trans('errors.ldap_extension_not_installed')); + } - /** - * Build a filter string by injecting common variables. - * @param string $filterString - * @param array $attrs - * @return string - */ - protected function buildFilter($filterString, array $attrs) - { - $newAttrs = []; - foreach ($attrs as $key => $attrText) { - $newKey = '${' . $key . '}'; - $newAttrs[$newKey] = $attrText; - } - return strtr($filterString, $newAttrs); - } -} + // Get port from server string and protocol if specified. + $ldapServer = explode(':', $this->config['server']); + $hasProtocol = preg_match('/^ldaps{0,1}\:\/\//', $this->config['server']) === 1; + if (!$hasProtocol) { + array_unshift($ldapServer, ''); + } + $hostName = $ldapServer[0] . ($hasProtocol?':':'') . $ldapServer[1]; + $defaultPort = $ldapServer[0] === 'ldaps' ? 636 : 389; + $ldapConnection = $this->ldap->connect($hostName, count($ldapServer) > 2 ? intval($ldapServer[2]) : $defaultPort); + + if ($ldapConnection === false) { + throw new LdapException(trans('errors.ldap_cannot_connect')); + } + + // Set any required options + if ($this->config['version']) { + $this->ldap->setVersion($ldapConnection, $this->config['version']); + } + + $this->ldapConnection = $ldapConnection; + return $this->ldapConnection; + } + + /** + * Build a filter string by injecting common variables. + * @param string $filterString + * @param array $attrs + * @return string + */ + protected function buildFilter($filterString, array $attrs) + { + $newAttrs = []; + foreach ($attrs as $key => $attrText) { + $newKey = '${' . $key . '}'; + $newAttrs[$newKey] = $attrText; + } + return strtr($filterString, $newAttrs); + } + + /** + * Get the groups a user is a part of on ldap + * @param string $userName + * @return array|null + */ + public function getUserGroups($userName) + { + $groupsAttr = $this->config['group_attribute']; + $user = $this->getUserWithAttributes($userName, [$groupsAttr]); + + if ($user === null) { + return null; + } + + $userGroups = $this->groupFilter($user); + $userGroups = $this->getGroupsRecursive($userGroups,[]); + return $userGroups; + } + + /** + * Get the parent groups of an array of groups + * @param array $groupsArray + * @param array $checked + * @return array + */ + private function getGroupsRecursive($groupsArray,$checked) { + $groups_to_add = []; + foreach ($groupsArray as $groupName) { + if (in_array($groupName,$checked)) continue; + + $groupsToAdd = $this->getGroupGroups($groupName); + $groups_to_add = array_merge($groups_to_add,$groupsToAdd); + $checked[] = $groupName; + } + $groupsArray = array_unique(array_merge($groupsArray,$groups_to_add), SORT_REGULAR); + + if (!empty($groups_to_add)) { + return $this->getGroupsRecursive($groupsArray,$checked); + } else { + return $groupsArray; + } + } + + /** + * Get the parent groups of a single group + * @param string $groupName + * @return array + */ + private function getGroupGroups($groupName) + { + $ldapConnection = $this->getConnection(); + $this->bindSystemUser($ldapConnection); + + $followReferrals = $this->config['follow_referrals'] ? 1 : 0; + $this->ldap->setOption($ldapConnection, LDAP_OPT_REFERRALS, $followReferrals); + + $baseDn = $this->config['base_dn']; + $groupsAttr = strtolower($this->config['group_attribute']); + + $groups = $this->ldap->searchAndGetEntries($ldapConnection, $baseDn, 'CN='.$groupName, [$groupsAttr]); + if ($groups['count'] === 0) { + return []; + } + + $groupGroups = $this->groupFilter($groups[0]); + return $groupGroups; + } + + /** + * Filter out LDAP CN and DN language in a ldap search return + * Gets the base CN (common name) of the string + * @param string $ldapSearchReturn + * @return array + */ + protected function groupFilter($ldapSearchReturn) + { + $groupsAttr = strtolower($this->config['group_attribute']); + $ldapGroups = []; + $count = 0; + if (isset($ldapSearchReturn[$groupsAttr]['count'])) $count = (int) $ldapSearchReturn[$groupsAttr]['count']; + for ($i=0;$i<$count;$i++) { + $dnComponents = ldap_explode_dn($ldapSearchReturn[$groupsAttr][$i],1); + if (!in_array($dnComponents[0],$ldapGroups)) { + $ldapGroups[] = $dnComponents[0]; + } + } + return $ldapGroups; + } + +} \ No newline at end of file diff --git a/config/services.php b/config/services.php index 825b1f109..daa160643 100644 --- a/config/services.php +++ b/config/services.php @@ -118,6 +118,10 @@ return [ 'version' => env('LDAP_VERSION', false), 'email_attribute' => env('LDAP_EMAIL_ATTRIBUTE', 'mail'), 'follow_referrals' => env('LDAP_FOLLOW_REFERRALS', false), - ] + 'user_to_groups' => env('LDAP_USER_TO_GROUPS',false), + 'group_attribute' => env('LDAP_GROUP_ATTRIBUTE', 'memberOf'), + 'admin' => env('LDAP_ADMIN_GROUP','Domain Admins'), + 'remove_from_groups' => env('LDAP_REMOVE_FROM_GROUPS',false), + ] ]; From 37aa8b05f873f0453f154bdf5df2774c595d5118 Mon Sep 17 00:00:00 2001 From: Brennan Murphy Date: Mon, 2 Jul 2018 17:27:43 +0000 Subject: [PATCH 014/183] Update files to PSR-2 standards --- app/Http/Controllers/Auth/LoginController.php | 12 +- app/Repos/LdapRepo.php | 130 ++--- app/Services/LdapService.php | 458 +++++++++--------- 3 files changed, 302 insertions(+), 298 deletions(-) diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php index 4c846d0e0..21c9dc4c5 100644 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -97,14 +97,14 @@ class LoginController extends Controller auth()->login($user); } - // ldap groups refresh - if (config('services.ldap.user_to_groups') !== false && $request->filled('username')) { - $ldapRepo = new LdapRepo($this->userRepo); - $ldapRepo->syncGroups($user,$request->input('username')); - } + // ldap groups refresh + if (config('services.ldap.user_to_groups') !== false && $request->filled('username')) { + $ldapRepo = new LdapRepo($this->userRepo); + $ldapRepo->syncGroups($user, $request->input('username')); + } - $path = session()->pull('url.intended', '/'); + $path = session()->pull('url.intended', '/'); $path = baseUrl($path, true); return redirect($path); } diff --git a/app/Repos/LdapRepo.php b/app/Repos/LdapRepo.php index 33d05ea88..12bde0cdd 100644 --- a/app/Repos/LdapRepo.php +++ b/app/Repos/LdapRepo.php @@ -8,77 +8,77 @@ use BookStack\Repos\UserRepo; class LdapRepo { - protected $ldap = null; - protected $ldapService = null; + protected $ldap = null; + protected $ldapService = null; - protected $config; + protected $config; - /** - * LdapRepo constructor. - * @param \BookStack\Repos\UserRepo $userRepo - */ - public function __construct(UserRepo $userRepo) - { - $this->config = config('services.ldap'); + /** + * LdapRepo constructor. + * @param \BookStack\Repos\UserRepo $userRepo + */ + public function __construct(UserRepo $userRepo) + { + $this->config = config('services.ldap'); - if (config('auth.method') !== 'ldap') { - return false; - } + if (config('auth.method') !== 'ldap') { + return false; + } - $this->ldapService = new LdapService(new Ldap); - $this->userRepo = $userRepo; - } + $this->ldapService = new LdapService(new Ldap); + $this->userRepo = $userRepo; + } - /** - * If there is no ldap connection, all methods calls to this library will return null - */ - public function __call($method, $arguments) - { - if ($this->ldap === null) { - return null; - } + /** + * If there is no ldap connection, all methods calls to this library will return null + */ + public function __call($method, $arguments) + { + if ($this->ldap === null) { + return null; + } - return call_user_func_array(array($this,$method),$arguments); - } + return call_user_func_array(array($this,$method), $arguments); + } - /** - * Sync the LDAP groups to the user roles for the current user - * @param \BookStack\User $user - * @param string $userName - * @throws \BookStack\Exceptions\NotFoundException - */ - public function syncGroups($user,$userName) - { - $userLdapGroups = $this->ldapService->getUserGroups($userName); - $userLdapGroups = $this->groupNameFilter($userLdapGroups); - // get the ids for the roles from the names - $ldapGroupsAsRoles = Role::whereIn('name',$userLdapGroups)->pluck('id'); - // sync groups - if ($this->config['remove_from_groups']) { - $user->roles()->sync($ldapGroupsAsRoles); - $this->userRepo->attachDefaultRole($user); - } else { - $user->roles()->syncWithoutDetaching($ldapGroupsAsRoles); - } + /** + * Sync the LDAP groups to the user roles for the current user + * @param \BookStack\User $user + * @param string $userName + * @throws \BookStack\Exceptions\NotFoundException + */ + public function syncGroups($user, $userName) + { + $userLdapGroups = $this->ldapService->getUserGroups($userName); + $userLdapGroups = $this->groupNameFilter($userLdapGroups); + // get the ids for the roles from the names + $ldapGroupsAsRoles = Role::whereIn('name', $userLdapGroups)->pluck('id'); + // sync groups + if ($this->config['remove_from_groups']) { + $user->roles()->sync($ldapGroupsAsRoles); + $this->userRepo->attachDefaultRole($user); + } else { + $user->roles()->syncWithoutDetaching($ldapGroupsAsRoles); + } - // make the user an admin? - if (in_array($this->config['admin'],$userLdapGroups)) { - $this->userRepo->attachSystemRole($user,'admin'); - } - } + // make the user an admin? + if (in_array($this->config['admin'], $userLdapGroups)) { + $this->userRepo->attachSystemRole($user, 'admin'); + } + } - /** - * Filter to convert the groups from ldap to the format of the roles name on BookStack - * Spaces replaced with -, all lowercase letters - * @param array $groups - * @return array - */ - private function groupNameFilter($groups) - { - $return = []; - foreach ($groups as $groupName) { - $return[] = str_replace(' ', '-', strtolower($groupName)); - } - return $return; - } -} \ No newline at end of file + /** + * Filter to convert the groups from ldap to the format of the roles name on BookStack + * Spaces replaced with -, all lowercase letters + * @param array $groups + * @return array + */ + private function groupNameFilter($groups) + { + $return = []; + foreach ($groups as $groupName) { + $return[] = str_replace(' ', '-', strtolower($groupName)); + } + return $return; + } +} diff --git a/app/Services/LdapService.php b/app/Services/LdapService.php index e56f45e4e..d51b89409 100644 --- a/app/Services/LdapService.php +++ b/app/Services/LdapService.php @@ -11,263 +11,267 @@ use Illuminate\Contracts\Auth\Authenticatable; class LdapService { - protected $ldap; - protected $ldapConnection; - protected $config; + protected $ldap; + protected $ldapConnection; + protected $config; - /** - * LdapService constructor. - * @param Ldap $ldap - */ - public function __construct(Ldap $ldap) - { - $this->ldap = $ldap; - $this->config = config('services.ldap'); - } + /** + * LdapService constructor. + * @param Ldap $ldap + */ + public function __construct(Ldap $ldap) + { + $this->ldap = $ldap; + $this->config = config('services.ldap'); + } - /** - * Search for attributes for a specific user on the ldap - * @param string $userName - * @param array $attributes - * @return null|array - * @throws LdapException - */ - private function getUserWithAttributes($userName,$attributes) - { - $ldapConnection = $this->getConnection(); - $this->bindSystemUser($ldapConnection); + /** + * Search for attributes for a specific user on the ldap + * @param string $userName + * @param array $attributes + * @return null|array + * @throws LdapException + */ + private function getUserWithAttributes($userName, $attributes) + { + $ldapConnection = $this->getConnection(); + $this->bindSystemUser($ldapConnection); - // Find user - $userFilter = $this->buildFilter($this->config['user_filter'], ['user' => $userName]); - $baseDn = $this->config['base_dn']; + // Find user + $userFilter = $this->buildFilter($this->config['user_filter'], ['user' => $userName]); + $baseDn = $this->config['base_dn']; - $followReferrals = $this->config['follow_referrals'] ? 1 : 0; - $this->ldap->setOption($ldapConnection, LDAP_OPT_REFERRALS, $followReferrals); - $users = $this->ldap->searchAndGetEntries($ldapConnection, $baseDn, $userFilter, $attributes); - if ($users['count'] === 0) { - return null; - } + $followReferrals = $this->config['follow_referrals'] ? 1 : 0; + $this->ldap->setOption($ldapConnection, LDAP_OPT_REFERRALS, $followReferrals); + $users = $this->ldap->searchAndGetEntries($ldapConnection, $baseDn, $userFilter, $attributes); + if ($users['count'] === 0) { + return null; + } - return $users[0]; - } + return $users[0]; + } - /** - * Get the details of a user from LDAP using the given username. - * User found via configurable user filter. - * @param $userName - * @return array|null - * @throws LdapException - */ - public function getUserDetails($userName) - { - $emailAttr = $this->config['email_attribute']; - $user = $this->getUserWithAttributes($userName, ['cn', 'uid', 'dn', $emailAttr]); + /** + * Get the details of a user from LDAP using the given username. + * User found via configurable user filter. + * @param $userName + * @return array|null + * @throws LdapException + */ + public function getUserDetails($userName) + { + $emailAttr = $this->config['email_attribute']; + $user = $this->getUserWithAttributes($userName, ['cn', 'uid', 'dn', $emailAttr]); - if ($user === null) { - return null; - } + if ($user === null) { + return null; + } - return [ - 'uid' => (isset($user['uid'])) ? $user['uid'][0] : $user['dn'], - 'name' => $user['cn'][0], - 'dn' => $user['dn'], - 'email' => (isset($user[$emailAttr])) ? (is_array($user[$emailAttr]) ? $user[$emailAttr][0] : $user[$emailAttr]) : null - ]; - } + return [ + 'uid' => (isset($user['uid'])) ? $user['uid'][0] : $user['dn'], + 'name' => $user['cn'][0], + 'dn' => $user['dn'], + 'email' => (isset($user[$emailAttr])) ? (is_array($user[$emailAttr]) ? $user[$emailAttr][0] : $user[$emailAttr]) : null + ]; + } - /** - * @param Authenticatable $user - * @param string $username - * @param string $password - * @return bool - * @throws LdapException - */ - public function validateUserCredentials(Authenticatable $user, $username, $password) - { - $ldapUser = $this->getUserDetails($username); - if ($ldapUser === null) { - return false; - } - if ($ldapUser['uid'] !== $user->external_auth_id) { - return false; - } + /** + * @param Authenticatable $user + * @param string $username + * @param string $password + * @return bool + * @throws LdapException + */ + public function validateUserCredentials(Authenticatable $user, $username, $password) + { + $ldapUser = $this->getUserDetails($username); + if ($ldapUser === null) { + return false; + } + if ($ldapUser['uid'] !== $user->external_auth_id) { + return false; + } - $ldapConnection = $this->getConnection(); - try { - $ldapBind = $this->ldap->bind($ldapConnection, $ldapUser['dn'], $password); - } catch (\ErrorException $e) { - $ldapBind = false; - } + $ldapConnection = $this->getConnection(); + try { + $ldapBind = $this->ldap->bind($ldapConnection, $ldapUser['dn'], $password); + } catch (\ErrorException $e) { + $ldapBind = false; + } - return $ldapBind; - } + return $ldapBind; + } - /** - * Bind the system user to the LDAP connection using the given credentials - * otherwise anonymous access is attempted. - * @param $connection - * @throws LdapException - */ - protected function bindSystemUser($connection) - { - $ldapDn = $this->config['dn']; - $ldapPass = $this->config['pass']; + /** + * Bind the system user to the LDAP connection using the given credentials + * otherwise anonymous access is attempted. + * @param $connection + * @throws LdapException + */ + protected function bindSystemUser($connection) + { + $ldapDn = $this->config['dn']; + $ldapPass = $this->config['pass']; - $isAnonymous = ($ldapDn === false || $ldapPass === false); - if ($isAnonymous) { - $ldapBind = $this->ldap->bind($connection); - } else { - $ldapBind = $this->ldap->bind($connection, $ldapDn, $ldapPass); - } + $isAnonymous = ($ldapDn === false || $ldapPass === false); + if ($isAnonymous) { + $ldapBind = $this->ldap->bind($connection); + } else { + $ldapBind = $this->ldap->bind($connection, $ldapDn, $ldapPass); + } - if (!$ldapBind) { - throw new LdapException(($isAnonymous ? trans('errors.ldap_fail_anonymous') : trans('errors.ldap_fail_authed'))); - } - } + if (!$ldapBind) { + throw new LdapException(($isAnonymous ? trans('errors.ldap_fail_anonymous') : trans('errors.ldap_fail_authed'))); + } + } - /** - * Get the connection to the LDAP server. - * Creates a new connection if one does not exist. - * @return resource - * @throws LdapException - */ - protected function getConnection() - { - if ($this->ldapConnection !== null) { - return $this->ldapConnection; - } + /** + * Get the connection to the LDAP server. + * Creates a new connection if one does not exist. + * @return resource + * @throws LdapException + */ + protected function getConnection() + { + if ($this->ldapConnection !== null) { + return $this->ldapConnection; + } - // Check LDAP extension in installed - if (!function_exists('ldap_connect') && config('app.env') !== 'testing') { - throw new LdapException(trans('errors.ldap_extension_not_installed')); - } + // Check LDAP extension in installed + if (!function_exists('ldap_connect') && config('app.env') !== 'testing') { + throw new LdapException(trans('errors.ldap_extension_not_installed')); + } - // Get port from server string and protocol if specified. - $ldapServer = explode(':', $this->config['server']); - $hasProtocol = preg_match('/^ldaps{0,1}\:\/\//', $this->config['server']) === 1; - if (!$hasProtocol) { - array_unshift($ldapServer, ''); - } - $hostName = $ldapServer[0] . ($hasProtocol?':':'') . $ldapServer[1]; - $defaultPort = $ldapServer[0] === 'ldaps' ? 636 : 389; - $ldapConnection = $this->ldap->connect($hostName, count($ldapServer) > 2 ? intval($ldapServer[2]) : $defaultPort); + // Get port from server string and protocol if specified. + $ldapServer = explode(':', $this->config['server']); + $hasProtocol = preg_match('/^ldaps{0,1}\:\/\//', $this->config['server']) === 1; + if (!$hasProtocol) { + array_unshift($ldapServer, ''); + } + $hostName = $ldapServer[0] . ($hasProtocol?':':'') . $ldapServer[1]; + $defaultPort = $ldapServer[0] === 'ldaps' ? 636 : 389; + $ldapConnection = $this->ldap->connect($hostName, count($ldapServer) > 2 ? intval($ldapServer[2]) : $defaultPort); - if ($ldapConnection === false) { - throw new LdapException(trans('errors.ldap_cannot_connect')); - } + if ($ldapConnection === false) { + throw new LdapException(trans('errors.ldap_cannot_connect')); + } - // Set any required options - if ($this->config['version']) { - $this->ldap->setVersion($ldapConnection, $this->config['version']); - } + // Set any required options + if ($this->config['version']) { + $this->ldap->setVersion($ldapConnection, $this->config['version']); + } - $this->ldapConnection = $ldapConnection; - return $this->ldapConnection; - } + $this->ldapConnection = $ldapConnection; + return $this->ldapConnection; + } - /** - * Build a filter string by injecting common variables. - * @param string $filterString - * @param array $attrs - * @return string - */ - protected function buildFilter($filterString, array $attrs) - { - $newAttrs = []; - foreach ($attrs as $key => $attrText) { - $newKey = '${' . $key . '}'; - $newAttrs[$newKey] = $attrText; - } - return strtr($filterString, $newAttrs); - } + /** + * Build a filter string by injecting common variables. + * @param string $filterString + * @param array $attrs + * @return string + */ + protected function buildFilter($filterString, array $attrs) + { + $newAttrs = []; + foreach ($attrs as $key => $attrText) { + $newKey = '${' . $key . '}'; + $newAttrs[$newKey] = $attrText; + } + return strtr($filterString, $newAttrs); + } - /** - * Get the groups a user is a part of on ldap - * @param string $userName - * @return array|null - */ - public function getUserGroups($userName) - { - $groupsAttr = $this->config['group_attribute']; - $user = $this->getUserWithAttributes($userName, [$groupsAttr]); + /** + * Get the groups a user is a part of on ldap + * @param string $userName + * @return array|null + */ + public function getUserGroups($userName) + { + $groupsAttr = $this->config['group_attribute']; + $user = $this->getUserWithAttributes($userName, [$groupsAttr]); - if ($user === null) { - return null; - } + if ($user === null) { + return null; + } - $userGroups = $this->groupFilter($user); - $userGroups = $this->getGroupsRecursive($userGroups,[]); - return $userGroups; - } + $userGroups = $this->groupFilter($user); + $userGroups = $this->getGroupsRecursive($userGroups, []); + return $userGroups; + } - /** - * Get the parent groups of an array of groups - * @param array $groupsArray - * @param array $checked - * @return array - */ - private function getGroupsRecursive($groupsArray,$checked) { - $groups_to_add = []; - foreach ($groupsArray as $groupName) { - if (in_array($groupName,$checked)) continue; + /** + * Get the parent groups of an array of groups + * @param array $groupsArray + * @param array $checked + * @return array + */ + private function getGroupsRecursive($groupsArray, $checked) + { + $groups_to_add = []; + foreach ($groupsArray as $groupName) { + if (in_array($groupName, $checked)) { + continue; + } - $groupsToAdd = $this->getGroupGroups($groupName); - $groups_to_add = array_merge($groups_to_add,$groupsToAdd); - $checked[] = $groupName; - } - $groupsArray = array_unique(array_merge($groupsArray,$groups_to_add), SORT_REGULAR); + $groupsToAdd = $this->getGroupGroups($groupName); + $groups_to_add = array_merge($groups_to_add, $groupsToAdd); + $checked[] = $groupName; + } + $groupsArray = array_unique(array_merge($groupsArray, $groups_to_add), SORT_REGULAR); - if (!empty($groups_to_add)) { - return $this->getGroupsRecursive($groupsArray,$checked); - } else { - return $groupsArray; - } - } + if (!empty($groups_to_add)) { + return $this->getGroupsRecursive($groupsArray, $checked); + } else { + return $groupsArray; + } + } - /** - * Get the parent groups of a single group - * @param string $groupName - * @return array - */ - private function getGroupGroups($groupName) - { - $ldapConnection = $this->getConnection(); - $this->bindSystemUser($ldapConnection); + /** + * Get the parent groups of a single group + * @param string $groupName + * @return array + */ + private function getGroupGroups($groupName) + { + $ldapConnection = $this->getConnection(); + $this->bindSystemUser($ldapConnection); - $followReferrals = $this->config['follow_referrals'] ? 1 : 0; - $this->ldap->setOption($ldapConnection, LDAP_OPT_REFERRALS, $followReferrals); + $followReferrals = $this->config['follow_referrals'] ? 1 : 0; + $this->ldap->setOption($ldapConnection, LDAP_OPT_REFERRALS, $followReferrals); - $baseDn = $this->config['base_dn']; - $groupsAttr = strtolower($this->config['group_attribute']); + $baseDn = $this->config['base_dn']; + $groupsAttr = strtolower($this->config['group_attribute']); - $groups = $this->ldap->searchAndGetEntries($ldapConnection, $baseDn, 'CN='.$groupName, [$groupsAttr]); - if ($groups['count'] === 0) { - return []; - } + $groups = $this->ldap->searchAndGetEntries($ldapConnection, $baseDn, 'CN='.$groupName, [$groupsAttr]); + if ($groups['count'] === 0) { + return []; + } - $groupGroups = $this->groupFilter($groups[0]); - return $groupGroups; - } + $groupGroups = $this->groupFilter($groups[0]); + return $groupGroups; + } - /** - * Filter out LDAP CN and DN language in a ldap search return - * Gets the base CN (common name) of the string - * @param string $ldapSearchReturn - * @return array - */ - protected function groupFilter($ldapSearchReturn) - { - $groupsAttr = strtolower($this->config['group_attribute']); - $ldapGroups = []; - $count = 0; - if (isset($ldapSearchReturn[$groupsAttr]['count'])) $count = (int) $ldapSearchReturn[$groupsAttr]['count']; - for ($i=0;$i<$count;$i++) { - $dnComponents = ldap_explode_dn($ldapSearchReturn[$groupsAttr][$i],1); - if (!in_array($dnComponents[0],$ldapGroups)) { - $ldapGroups[] = $dnComponents[0]; - } - } - return $ldapGroups; - } - -} \ No newline at end of file + /** + * Filter out LDAP CN and DN language in a ldap search return + * Gets the base CN (common name) of the string + * @param string $ldapSearchReturn + * @return array + */ + protected function groupFilter($ldapSearchReturn) + { + $groupsAttr = strtolower($this->config['group_attribute']); + $ldapGroups = []; + $count = 0; + if (isset($ldapSearchReturn[$groupsAttr]['count'])) { + $count = (int) $ldapSearchReturn[$groupsAttr]['count']; + } + for ($i=0; $i<$count; $i++) { + $dnComponents = ldap_explode_dn($ldapSearchReturn[$groupsAttr][$i], 1); + if (!in_array($dnComponents[0], $ldapGroups)) { + $ldapGroups[] = $dnComponents[0]; + } + } + return $ldapGroups; + } +} From 642f2760cc8015b17e42ac6caeb6f22a2b8fb7e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Luiz=20da=20Silva?= Date: Tue, 10 Jul 2018 15:10:21 -0300 Subject: [PATCH 015/183] Improves and adds missing pt_BR strings --- resources/lang/pt_BR/common.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/resources/lang/pt_BR/common.php b/resources/lang/pt_BR/common.php index 991cb0b7e..5b5ed1f63 100644 --- a/resources/lang/pt_BR/common.php +++ b/resources/lang/pt_BR/common.php @@ -20,6 +20,7 @@ return [ 'role' => 'Regra', 'cover_image' => 'Imagem de capa', 'cover_image_description' => 'Esta imagem deve ser aproximadamente 300x170px.', + /** * Actions */ @@ -30,6 +31,7 @@ return [ 'edit' => 'Editar', 'sort' => 'Ordenar', 'move' => 'Mover', + 'copy' => 'Copiar', 'reply' => 'Responder', 'delete' => 'Excluir', 'search' => 'Pesquisar', @@ -48,6 +50,8 @@ return [ 'toggle_details' => 'Alternar Detalhes', 'toggle_thumbnails' => 'Alternar Miniaturas', 'details' => 'Detalhes', + 'grid_view' => 'Visualização em Grade', + 'list_view' => 'Visualização em Lista', /** * Header From b2cd363539c8670c099fbfe9ff26b6b866cca5ae Mon Sep 17 00:00:00 2001 From: Dan Brown Date: Sat, 14 Jul 2018 10:20:49 +0100 Subject: [PATCH 016/183] Added browserlist, Tweaked md scrollToText ot use ES6 --- .browserslistrc | 2 + .../assets/js/components/markdown-editor.js | 39 ++++++++----------- resources/assets/js/index.js | 1 - webpack.config.js | 6 ++- 4 files changed, 24 insertions(+), 24 deletions(-) create mode 100644 .browserslistrc diff --git a/.browserslistrc b/.browserslistrc new file mode 100644 index 000000000..47c683699 --- /dev/null +++ b/.browserslistrc @@ -0,0 +1,2 @@ +>0.25% +not op_mini all \ No newline at end of file diff --git a/resources/assets/js/components/markdown-editor.js b/resources/assets/js/components/markdown-editor.js index 5688ebd61..9e2bb3915 100644 --- a/resources/assets/js/components/markdown-editor.js +++ b/resources/assets/js/components/markdown-editor.js @@ -395,35 +395,30 @@ class MarkdownEditor { } // Scroll to a specified text - scrollToText(searchText) {; + scrollToText(searchText) { if (!searchText) { return; } + const content = this.cm.getValue(); const lines = content.split(/\r?\n/); - let lineNumber = -1; - for (let i = 0; i !== lines.length; ++i) { - const line = lines[i]; - if (!line) { - continue; - } - if (line.indexOf(searchText) !== -1) { - lineNumber = i; - break; - } + let lineNumber = lines.findIndex(line => { + return line && line.indexOf(searchText) !== -1; + }); + + if (lineNumber === -1) { + return; } - if (lineNumber !== -1) { - this.cm.scrollIntoView({ - line: lineNumber, - }, 200); - this.cm.focus(); - // set the cursor location. - this.cm.setCursor({ - line: lineNumber, - char: lines[lineNumber].length - }) - } + this.cm.scrollIntoView({ + line: lineNumber, + }, 200); + this.cm.focus(); + // set the cursor location. + this.cm.setCursor({ + line: lineNumber, + char: lines[lineNumber].length + }) } } diff --git a/resources/assets/js/index.js b/resources/assets/js/index.js index 6b24d5ee1..f202c322e 100644 --- a/resources/assets/js/index.js +++ b/resources/assets/js/index.js @@ -1,5 +1,4 @@ // Global Polyfills -import "@babel/polyfill" import "./services/dom-polyfills" // Url retrieval function diff --git a/webpack.config.js b/webpack.config.js index c5ce4829f..5c0501e3b 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -25,7 +25,11 @@ const config = { use: { loader: 'babel-loader', options: { - presets: ['@babel/preset-env'] + presets: [[ + '@babel/preset-env', { + useBuiltIns: 'usage' + } + ]] } } }, From 2bcc159fd6f51b9f18520f76888a81d46934f24f Mon Sep 17 00:00:00 2001 From: Dan Brown Date: Sat, 14 Jul 2018 14:12:29 +0100 Subject: [PATCH 017/183] Allowed creating pages in visible chapters in invisible books Fixes permissions with test to cover in the event a page is created, with permission, in a chapter but the user does not have permission to see the parent book. Fixes #912 --- app/Http/Controllers/PageController.php | 32 ++++++++++++++++--------- app/Page.php | 9 +++++++ tests/Permissions/RestrictionsTest.php | 22 +++++++++++++++++ 3 files changed, 52 insertions(+), 11 deletions(-) diff --git a/app/Http/Controllers/PageController.php b/app/Http/Controllers/PageController.php index 221e21a99..25a0503eb 100644 --- a/app/Http/Controllers/PageController.php +++ b/app/Http/Controllers/PageController.php @@ -5,7 +5,6 @@ use BookStack\Exceptions\NotFoundException; use BookStack\Repos\EntityRepo; use BookStack\Repos\UserRepo; use BookStack\Services\ExportService; -use Carbon\Carbon; use Illuminate\Http\Request; use Illuminate\Http\Response; use Views; @@ -38,11 +37,18 @@ class PageController extends Controller * @param string $chapterSlug * @return Response * @internal param bool $pageSlug + * @throws NotFoundException */ public function create($bookSlug, $chapterSlug = null) { - $book = $this->entityRepo->getBySlug('book', $bookSlug); - $chapter = $chapterSlug ? $this->entityRepo->getBySlug('chapter', $chapterSlug, $bookSlug) : null; + if ($chapterSlug !== null) { + $chapter = $this->entityRepo->getBySlug('chapter', $chapterSlug, $bookSlug); + $book = $chapter->book; + } else { + $chapter = null; + $book = $this->entityRepo->getBySlug('book', $bookSlug); + } + $parent = $chapter ? $chapter : $book; $this->checkOwnablePermission('page-create', $parent); @@ -52,7 +58,7 @@ class PageController extends Controller return redirect($draft->getUrl()); } - // Otherwise show edit view + // Otherwise show the edit view if they're a guest $this->setPageTitle(trans('entities.pages_new')); return view('pages/guest-create', ['parent' => $parent]); } @@ -71,8 +77,14 @@ class PageController extends Controller 'name' => 'required|string|max:255' ]); - $book = $this->entityRepo->getBySlug('book', $bookSlug); - $chapter = $chapterSlug ? $this->entityRepo->getBySlug('chapter', $chapterSlug, $bookSlug) : null; + if ($chapterSlug !== null) { + $chapter = $this->entityRepo->getBySlug('chapter', $chapterSlug, $bookSlug); + $book = $chapter->book; + } else { + $chapter = null; + $book = $this->entityRepo->getBySlug('book', $bookSlug); + } + $parent = $chapter ? $chapter : $book; $this->checkOwnablePermission('page-create', $parent); @@ -93,7 +105,7 @@ class PageController extends Controller public function editDraft($bookSlug, $pageId) { $draft = $this->entityRepo->getById('page', $pageId, true); - $this->checkOwnablePermission('page-create', $draft->book); + $this->checkOwnablePermission('page-create', $draft->parent); $this->setPageTitle(trans('entities.pages_edit_draft')); $draftsEnabled = $this->signedIn; @@ -119,12 +131,10 @@ class PageController extends Controller ]); $input = $request->all(); - $book = $this->entityRepo->getBySlug('book', $bookSlug); - $draftPage = $this->entityRepo->getById('page', $pageId, true); + $book = $draftPage->book; - $chapterId = intval($draftPage->chapter_id); - $parent = $chapterId !== 0 ? $this->entityRepo->getById('chapter', $chapterId) : $book; + $parent = $draftPage->parent; $this->checkOwnablePermission('page-create', $parent); if ($parent->isA('chapter')) { diff --git a/app/Page.php b/app/Page.php index 38feb610d..9554504b3 100644 --- a/app/Page.php +++ b/app/Page.php @@ -28,6 +28,15 @@ class Page extends Entity return $this->belongsTo(Book::class); } + /** + * Get the parent item + * @return \Illuminate\Database\Eloquent\Relations\BelongsTo + */ + public function parent() + { + return $this->chapter_id ? $this->chapter() : $this->book(); + } + /** * Get the chapter that this page is in, If applicable. * @return \Illuminate\Database\Eloquent\Relations\BelongsTo diff --git a/tests/Permissions/RestrictionsTest.php b/tests/Permissions/RestrictionsTest.php index 53e7ad3f3..2bbb1a5fa 100644 --- a/tests/Permissions/RestrictionsTest.php +++ b/tests/Permissions/RestrictionsTest.php @@ -592,4 +592,26 @@ class RestrictionsTest extends BrowserKitTest ->see('You do not have permission') ->seePageIs('/'); } + + public function test_can_create_page_if_chapter_has_permissions_when_book_not_visible() + { + $book = Book::first(); + $this->setEntityRestrictions($book, []); + $bookChapter = $book->chapters->first(); + $this->setEntityRestrictions($bookChapter, ['view']); + + $this->actingAs($this->user)->visit($bookChapter->getUrl()) + ->dontSee('New Page'); + + $this->setEntityRestrictions($bookChapter, ['view', 'create']); + + $this->actingAs($this->user)->visit($bookChapter->getUrl()) + ->click('New Page') + ->seeStatusCode(200) + ->type('test page', 'name') + ->type('test content', 'html') + ->press('Save Page') + ->seePageIs($book->getUrl('/page/test-page')) + ->seeStatusCode(200); + } } From 17bca662a7757a66538a8074527b43b2ba20a592 Mon Sep 17 00:00:00 2001 From: Dan Brown Date: Sun, 15 Jul 2018 17:57:25 +0100 Subject: [PATCH 018/183] Added tests to cover ldap group mapping Also updated .env.example formatting. Updated how LdapRepo uses Ldap so can be mocked by testing. --- .env.example | 10 +- app/Http/Controllers/Auth/LoginController.php | 3 +- app/Repos/LdapRepo.php | 7 +- tests/Auth/LdapTest.php | 119 +++++++++++++++++- 4 files changed, 126 insertions(+), 13 deletions(-) diff --git a/.env.example b/.env.example index 57e6af6a9..4bb2555b0 100644 --- a/.env.example +++ b/.env.example @@ -67,14 +67,14 @@ LDAP_DN=false LDAP_PASS=false LDAP_USER_FILTER=false LDAP_VERSION=false -#do you want to sync LDAP groups to BookStack roles for a user +# Do you want to sync LDAP groups to BookStack roles for a user LDAP_USER_TO_GROUPS=false -#what is the LDAP attribute for group memberships +# What is the LDAP attribute for group memberships LDAP_GROUP_ATTRIBUTE="memberOf" -#what LDAP group should the user be a part of to be an admin on BookStack +# What LDAP group should the user be a part of to be an admin on BookStack LDAP_ADMIN_GROUP="Domain Admins" -#would you like to remove users from roles on bookstack if they do not match on LDAP -#if false, the ldap groups-roles sync will only add users to roles +# Would you like to remove users from roles on BookStack if they do not match on LDAP +# If false, the ldap groups-roles sync will only add users to roles LDAP_REMOVE_FROM_GROUPS=false # Mail settings diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php index 21c9dc4c5..08b1bce67 100644 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -6,6 +6,7 @@ use BookStack\Exceptions\AuthException; use BookStack\Http\Controllers\Controller; use BookStack\Repos\UserRepo; use BookStack\Repos\LdapRepo; +use BookStack\Services\LdapService; use BookStack\Services\SocialAuthService; use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Foundation\Auth\AuthenticatesUsers; @@ -99,7 +100,7 @@ class LoginController extends Controller // ldap groups refresh if (config('services.ldap.user_to_groups') !== false && $request->filled('username')) { - $ldapRepo = new LdapRepo($this->userRepo); + $ldapRepo = new LdapRepo($this->userRepo, app(LdapService::class)); $ldapRepo->syncGroups($user, $request->input('username')); } diff --git a/app/Repos/LdapRepo.php b/app/Repos/LdapRepo.php index 12bde0cdd..e57872039 100644 --- a/app/Repos/LdapRepo.php +++ b/app/Repos/LdapRepo.php @@ -1,9 +1,7 @@ config = config('services.ldap'); @@ -25,7 +24,7 @@ class LdapRepo return false; } - $this->ldapService = new LdapService(new Ldap); + $this->ldapService = $ldapService; $this->userRepo = $userRepo; } diff --git a/tests/Auth/LdapTest.php b/tests/Auth/LdapTest.php index 8880c7b65..ada33d692 100644 --- a/tests/Auth/LdapTest.php +++ b/tests/Auth/LdapTest.php @@ -1,10 +1,17 @@ set(['auth.method' => 'ldap', 'services.ldap.base_dn' => 'dc=ldap,dc=local', 'auth.providers.users.driver' => 'ldap']); - $this->mockLdap = \Mockery::mock(\BookStack\Services\Ldap::class); - $this->app['BookStack\Services\Ldap'] = $this->mockLdap; + app('config')->set([ + 'auth.method' => 'ldap', + 'services.ldap.base_dn' => 'dc=ldap,dc=local', + 'services.ldap.email_attribute' => 'mail', + 'services.ldap.user_to_groups' => false, + 'auth.providers.users.driver' => 'ldap', + ]); + $this->mockLdap = \Mockery::mock(Ldap::class); + $this->app[Ldap::class] = $this->mockLdap; $this->mockUser = factory(User::class)->make(); } @@ -133,4 +146,104 @@ class LdapTest extends BrowserKitTest ->dontSee('External Authentication'); } + public function test_login_maps_roles_and_retains_existsing_roles() + { + $roleToRecieve = factory(Role::class)->create(['name' => 'ldaptester']); + $roleToRecieve2 = factory(Role::class)->create(['name' => 'ldaptester-second']); + $existingRole = factory(Role::class)->create(['name' => 'ldaptester-existing']); + $this->mockUser->forceFill(['external_auth_id' => $this->mockUser->name])->save(); + $this->mockUser->attachRole($existingRole); + + app('config')->set([ + 'services.ldap.user_to_groups' => true, + 'services.ldap.group_attribute' => 'memberOf', + 'services.ldap.remove_from_groups' => false, + ]); + $this->mockLdap->shouldReceive('connect')->times(2)->andReturn($this->resourceId); + $this->mockLdap->shouldReceive('setVersion')->times(2); + $this->mockLdap->shouldReceive('setOption')->times(5); + $this->mockLdap->shouldReceive('searchAndGetEntries')->times(5) + ->with($this->resourceId, config('services.ldap.base_dn'), \Mockery::type('string'), \Mockery::type('array')) + ->andReturn(['count' => 1, 0 => [ + 'uid' => [$this->mockUser->name], + 'cn' => [$this->mockUser->name], + 'dn' => ['dc=test' . config('services.ldap.base_dn')], + 'mail' => [$this->mockUser->email], + 'memberof' => [ + 'count' => 2, + 0 => "cn=ldaptester,ou=groups,dc=example,dc=com", + 1 => "cn=ldaptester-second,ou=groups,dc=example,dc=com", + ] + ]]); + $this->mockLdap->shouldReceive('bind')->times(6)->andReturn(true); + + $this->visit('/login') + ->see('Username') + ->type($this->mockUser->name, '#username') + ->type($this->mockUser->password, '#password') + ->press('Log In') + ->seePageIs('/'); + + $user = User::where('email', $this->mockUser->email)->first(); + $this->seeInDatabase('role_user', [ + 'user_id' => $user->id, + 'role_id' => $roleToRecieve->id + ]); + $this->seeInDatabase('role_user', [ + 'user_id' => $user->id, + 'role_id' => $roleToRecieve2->id + ]); + $this->seeInDatabase('role_user', [ + 'user_id' => $user->id, + 'role_id' => $existingRole->id + ]); + } + + public function test_login_maps_roles_and_removes_old_roles_if_set() + { + $roleToRecieve = factory(Role::class)->create(['name' => 'ldaptester']); + $existingRole = factory(Role::class)->create(['name' => 'ldaptester-existing']); + $this->mockUser->forceFill(['external_auth_id' => $this->mockUser->name])->save(); + $this->mockUser->attachRole($existingRole); + + app('config')->set([ + 'services.ldap.user_to_groups' => true, + 'services.ldap.group_attribute' => 'memberOf', + 'services.ldap.remove_from_groups' => true, + ]); + $this->mockLdap->shouldReceive('connect')->times(2)->andReturn($this->resourceId); + $this->mockLdap->shouldReceive('setVersion')->times(2); + $this->mockLdap->shouldReceive('setOption')->times(4); + $this->mockLdap->shouldReceive('searchAndGetEntries')->times(4) + ->with($this->resourceId, config('services.ldap.base_dn'), \Mockery::type('string'), \Mockery::type('array')) + ->andReturn(['count' => 1, 0 => [ + 'uid' => [$this->mockUser->name], + 'cn' => [$this->mockUser->name], + 'dn' => ['dc=test' . config('services.ldap.base_dn')], + 'mail' => [$this->mockUser->email], + 'memberof' => [ + 'count' => 1, + 0 => "cn=ldaptester,ou=groups,dc=example,dc=com", + ] + ]]); + $this->mockLdap->shouldReceive('bind')->times(5)->andReturn(true); + + $this->visit('/login') + ->see('Username') + ->type($this->mockUser->name, '#username') + ->type($this->mockUser->password, '#password') + ->press('Log In') + ->seePageIs('/'); + + $user = User::where('email', $this->mockUser->email)->first(); + $this->seeInDatabase('role_user', [ + 'user_id' => $user->id, + 'role_id' => $roleToRecieve->id + ]); + $this->dontSeeInDatabase('role_user', [ + 'user_id' => $user->id, + 'role_id' => $existingRole->id + ]); + } + } From be2ca9d4bbc8850ab70fce9549cf1087d4e4d721 Mon Sep 17 00:00:00 2001 From: Dan Brown Date: Sun, 15 Jul 2018 18:21:45 +0100 Subject: [PATCH 019/183] Refactored out the LDAP repo --- app/Http/Controllers/Auth/LoginController.php | 15 ++-- app/Repos/LdapRepo.php | 83 ------------------- app/Services/LdapService.php | 66 ++++++++++++++- 3 files changed, 73 insertions(+), 91 deletions(-) delete mode 100644 app/Repos/LdapRepo.php diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php index 08b1bce67..e011c642f 100644 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -5,7 +5,6 @@ namespace BookStack\Http\Controllers\Auth; use BookStack\Exceptions\AuthException; use BookStack\Http\Controllers\Controller; use BookStack\Repos\UserRepo; -use BookStack\Repos\LdapRepo; use BookStack\Services\LdapService; use BookStack\Services\SocialAuthService; use Illuminate\Contracts\Auth\Authenticatable; @@ -38,18 +37,21 @@ class LoginController extends Controller protected $redirectAfterLogout = '/login'; protected $socialAuthService; + protected $ldapService; protected $userRepo; /** * Create a new controller instance. * * @param SocialAuthService $socialAuthService + * @param LdapService $ldapService * @param UserRepo $userRepo */ - public function __construct(SocialAuthService $socialAuthService, UserRepo $userRepo) + public function __construct(SocialAuthService $socialAuthService, LdapService $ldapService, UserRepo $userRepo) { $this->middleware('guest', ['only' => ['getLogin', 'postLogin']]); $this->socialAuthService = $socialAuthService; + $this->ldapService = $ldapService; $this->userRepo = $userRepo; $this->redirectPath = baseUrl('/'); $this->redirectAfterLogout = baseUrl('/login'); @@ -98,13 +100,11 @@ class LoginController extends Controller auth()->login($user); } - // ldap groups refresh - if (config('services.ldap.user_to_groups') !== false && $request->filled('username')) { - $ldapRepo = new LdapRepo($this->userRepo, app(LdapService::class)); - $ldapRepo->syncGroups($user, $request->input('username')); + // Sync LDAP groups if required + if ($this->ldapService->shouldSyncGroups()) { + $this->ldapService->syncGroups($user); } - $path = session()->pull('url.intended', '/'); $path = baseUrl($path, true); return redirect($path); @@ -134,6 +134,7 @@ class LoginController extends Controller * Redirect to the relevant social site. * @param $socialDriver * @return \Symfony\Component\HttpFoundation\RedirectResponse + * @throws \BookStack\Exceptions\SocialDriverNotConfigured */ public function getSocialLogin($socialDriver) { diff --git a/app/Repos/LdapRepo.php b/app/Repos/LdapRepo.php deleted file mode 100644 index e57872039..000000000 --- a/app/Repos/LdapRepo.php +++ /dev/null @@ -1,83 +0,0 @@ -config = config('services.ldap'); - - if (config('auth.method') !== 'ldap') { - return false; - } - - $this->ldapService = $ldapService; - $this->userRepo = $userRepo; - } - - /** - * If there is no ldap connection, all methods calls to this library will return null - */ - public function __call($method, $arguments) - { - if ($this->ldap === null) { - return null; - } - - return call_user_func_array(array($this,$method), $arguments); - } - - /** - * Sync the LDAP groups to the user roles for the current user - * @param \BookStack\User $user - * @param string $userName - * @throws \BookStack\Exceptions\NotFoundException - */ - public function syncGroups($user, $userName) - { - $userLdapGroups = $this->ldapService->getUserGroups($userName); - $userLdapGroups = $this->groupNameFilter($userLdapGroups); - // get the ids for the roles from the names - $ldapGroupsAsRoles = Role::whereIn('name', $userLdapGroups)->pluck('id'); - // sync groups - if ($this->config['remove_from_groups']) { - $user->roles()->sync($ldapGroupsAsRoles); - $this->userRepo->attachDefaultRole($user); - } else { - $user->roles()->syncWithoutDetaching($ldapGroupsAsRoles); - } - - // make the user an admin? - if (in_array($this->config['admin'], $userLdapGroups)) { - $this->userRepo->attachSystemRole($user, 'admin'); - } - } - - /** - * Filter to convert the groups from ldap to the format of the roles name on BookStack - * Spaces replaced with -, all lowercase letters - * @param array $groups - * @return array - */ - private function groupNameFilter($groups) - { - $return = []; - foreach ($groups as $groupName) { - $return[] = str_replace(' ', '-', strtolower($groupName)); - } - return $return; - } -} diff --git a/app/Services/LdapService.php b/app/Services/LdapService.php index d51b89409..7606f1271 100644 --- a/app/Services/LdapService.php +++ b/app/Services/LdapService.php @@ -1,6 +1,9 @@ ldap = $ldap; $this->config = config('services.ldap'); + $this->userRepo = $userRepo; + $this->enabled = config('auth.method') === 'ldap'; + } + + /** + * Check if groups should be synced. + * @return bool + */ + public function shouldSyncGroups() + { + return $this->enabled && $this->config['user_to_groups'] !== false; } /** @@ -185,6 +202,7 @@ class LdapService * Get the groups a user is a part of on ldap * @param string $userName * @return array|null + * @throws LdapException */ public function getUserGroups($userName) { @@ -205,6 +223,7 @@ class LdapService * @param array $groupsArray * @param array $checked * @return array + * @throws LdapException */ private function getGroupsRecursive($groupsArray, $checked) { @@ -231,6 +250,7 @@ class LdapService * Get the parent groups of a single group * @param string $groupName * @return array + * @throws LdapException */ private function getGroupGroups($groupName) { @@ -274,4 +294,48 @@ class LdapService } return $ldapGroups; } + + /** + * Sync the LDAP groups to the user roles for the current user + * @param \BookStack\User $user + * @throws LdapException + * @throws \BookStack\Exceptions\NotFoundException + */ + public function syncGroups(User $user) + { + $userLdapGroups = $this->getUserGroups($user->external_auth_id); + $userLdapGroups = $this->groupNameFilter($userLdapGroups); + + // Get the ids for the roles from the names + $ldapGroupsAsRoles = Role::query()->whereIn('name', $userLdapGroups)->pluck('id'); + + // Sync groups + if ($this->config['remove_from_groups']) { + $user->roles()->sync($ldapGroupsAsRoles); + $this->userRepo->attachDefaultRole($user); + } else { + $user->roles()->syncWithoutDetaching($ldapGroupsAsRoles); + } + + // make the user an admin? + // TODO - Remove + if (in_array($this->config['admin'], $userLdapGroups)) { + $this->userRepo->attachSystemRole($user, 'admin'); + } + } + + /** + * Filter to convert the groups from ldap to the format of the roles name on BookStack + * Spaces replaced with -, all lowercase letters + * @param array $groups + * @return array + */ + private function groupNameFilter(array $groups) + { + $return = []; + foreach ($groups as $groupName) { + $return[] = str_replace(' ', '-', strtolower($groupName)); + } + return $return; + } } From f421d83627494d1aae9dab29cb5c5bf7d1ea86ac Mon Sep 17 00:00:00 2001 From: Dan Brown Date: Sun, 15 Jul 2018 19:34:42 +0100 Subject: [PATCH 020/183] Added ability to set custom ldap group -> role mapping Added input in role form to allow matching against custom names. Changed default mapping to use role display name instead of the hidden DB name. --- .env.example | 2 - app/Http/Controllers/PermissionController.php | 1 + app/Role.php | 2 +- app/Services/LdapService.php | 64 +++++++++++++------ config/services.php | 1 - ...07_15_173514_add_role_external_auth_id.php | 33 ++++++++++ resources/lang/en/settings.php | 1 + resources/views/settings/roles/form.blade.php | 8 +++ tests/Auth/LdapTest.php | 64 +++++++++++++++++-- 9 files changed, 148 insertions(+), 28 deletions(-) create mode 100644 database/migrations/2018_07_15_173514_add_role_external_auth_id.php diff --git a/.env.example b/.env.example index 4bb2555b0..d09db93d3 100644 --- a/.env.example +++ b/.env.example @@ -71,8 +71,6 @@ LDAP_VERSION=false LDAP_USER_TO_GROUPS=false # What is the LDAP attribute for group memberships LDAP_GROUP_ATTRIBUTE="memberOf" -# What LDAP group should the user be a part of to be an admin on BookStack -LDAP_ADMIN_GROUP="Domain Admins" # Would you like to remove users from roles on BookStack if they do not match on LDAP # If false, the ldap groups-roles sync will only add users to roles LDAP_REMOVE_FROM_GROUPS=false diff --git a/app/Http/Controllers/PermissionController.php b/app/Http/Controllers/PermissionController.php index c4c7fe972..5695705d0 100644 --- a/app/Http/Controllers/PermissionController.php +++ b/app/Http/Controllers/PermissionController.php @@ -78,6 +78,7 @@ class PermissionController extends Controller * @param $id * @param Request $request * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector + * @throws PermissionsException */ public function updateRole($id, Request $request) { diff --git a/app/Role.php b/app/Role.php index e86854e79..54a5bb180 100644 --- a/app/Role.php +++ b/app/Role.php @@ -3,7 +3,7 @@ class Role extends Model { - protected $fillable = ['display_name', 'description']; + protected $fillable = ['display_name', 'description', 'external_auth_id']; /** * The roles that belong to the role. diff --git a/app/Services/LdapService.php b/app/Services/LdapService.php index 7606f1271..4936b2da8 100644 --- a/app/Services/LdapService.php +++ b/app/Services/LdapService.php @@ -5,6 +5,7 @@ use BookStack\Repos\UserRepo; use BookStack\Role; use BookStack\User; use Illuminate\Contracts\Auth\Authenticatable; +use Illuminate\Database\Eloquent\Builder; /** * Class LdapService @@ -299,15 +300,13 @@ class LdapService * Sync the LDAP groups to the user roles for the current user * @param \BookStack\User $user * @throws LdapException - * @throws \BookStack\Exceptions\NotFoundException */ public function syncGroups(User $user) { $userLdapGroups = $this->getUserGroups($user->external_auth_id); - $userLdapGroups = $this->groupNameFilter($userLdapGroups); // Get the ids for the roles from the names - $ldapGroupsAsRoles = Role::query()->whereIn('name', $userLdapGroups)->pluck('id'); + $ldapGroupsAsRoles = $this->matchLdapGroupsToSystemsRoles($userLdapGroups); // Sync groups if ($this->config['remove_from_groups']) { @@ -316,26 +315,55 @@ class LdapService } else { $user->roles()->syncWithoutDetaching($ldapGroupsAsRoles); } - - // make the user an admin? - // TODO - Remove - if (in_array($this->config['admin'], $userLdapGroups)) { - $this->userRepo->attachSystemRole($user, 'admin'); - } } /** - * Filter to convert the groups from ldap to the format of the roles name on BookStack - * Spaces replaced with -, all lowercase letters - * @param array $groups - * @return array + * Match an array of group names from LDAP to BookStack system roles. + * Formats LDAP group names to be lower-case and hyphenated. + * @param array $groupNames + * @return \Illuminate\Support\Collection */ - private function groupNameFilter(array $groups) + protected function matchLdapGroupsToSystemsRoles(array $groupNames) { - $return = []; - foreach ($groups as $groupName) { - $return[] = str_replace(' ', '-', strtolower($groupName)); + foreach ($groupNames as $i => $groupName) { + $groupNames[$i] = str_replace(' ', '-', trim(strtolower($groupName))); } - return $return; + + $roles = Role::query()->where(function(Builder $query) use ($groupNames) { + $query->whereIn('name', $groupNames); + foreach ($groupNames as $groupName) { + $query->orWhere('external_auth_id', 'LIKE', '%' . $groupName . '%'); + } + })->get(); + + $matchedRoles = $roles->filter(function(Role $role) use ($groupNames) { + return $this->roleMatchesGroupNames($role, $groupNames); + }); + + return $matchedRoles->pluck('id'); } + + /** + * Check a role against an array of group names to see if it matches. + * Checked against role 'external_auth_id' if set otherwise the name of the role. + * @param Role $role + * @param array $groupNames + * @return bool + */ + protected function roleMatchesGroupNames(Role $role, array $groupNames) + { + if ($role->external_auth_id) { + $externalAuthIds = explode(',', strtolower($role->external_auth_id)); + foreach ($externalAuthIds as $externalAuthId) { + if (in_array(trim($externalAuthId), $groupNames)) { + return true; + } + } + return false; + } + + $roleName = str_replace(' ', '-', trim(strtolower($role->display_name))); + return in_array($roleName, $groupNames); + } + } diff --git a/config/services.php b/config/services.php index daa160643..9c550f2fa 100644 --- a/config/services.php +++ b/config/services.php @@ -120,7 +120,6 @@ return [ 'follow_referrals' => env('LDAP_FOLLOW_REFERRALS', false), 'user_to_groups' => env('LDAP_USER_TO_GROUPS',false), 'group_attribute' => env('LDAP_GROUP_ATTRIBUTE', 'memberOf'), - 'admin' => env('LDAP_ADMIN_GROUP','Domain Admins'), 'remove_from_groups' => env('LDAP_REMOVE_FROM_GROUPS',false), ] diff --git a/database/migrations/2018_07_15_173514_add_role_external_auth_id.php b/database/migrations/2018_07_15_173514_add_role_external_auth_id.php new file mode 100644 index 000000000..706a883a3 --- /dev/null +++ b/database/migrations/2018_07_15_173514_add_role_external_auth_id.php @@ -0,0 +1,33 @@ +string('external_auth_id', 200)->default(''); + $table->index('external_auth_id'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('roles', function (Blueprint $table) { + $table->dropColumn('external_auth_id'); + }); + } +} diff --git a/resources/lang/en/settings.php b/resources/lang/en/settings.php index 30abbc1b9..d6fbb6107 100755 --- a/resources/lang/en/settings.php +++ b/resources/lang/en/settings.php @@ -82,6 +82,7 @@ return [ 'role_details' => 'Role Details', 'role_name' => 'Role Name', 'role_desc' => 'Short Description of Role', + 'role_external_auth_id' => 'External Authentication IDs', 'role_system' => 'System Permissions', 'role_manage_users' => 'Manage users', 'role_manage_roles' => 'Manage roles & role permissions', diff --git a/resources/views/settings/roles/form.blade.php b/resources/views/settings/roles/form.blade.php index 15ce7e6d7..6a8e27487 100644 --- a/resources/views/settings/roles/form.blade.php +++ b/resources/views/settings/roles/form.blade.php @@ -15,6 +15,14 @@ @include('form/text', ['name' => 'description'])
    + + @if(config('auth.method') === 'ldap') +
    + + @include('form/text', ['name' => 'external_auth_id']) +
    + @endif +
    {{ trans('settings.role_system') }}
    diff --git a/tests/Auth/LdapTest.php b/tests/Auth/LdapTest.php index ada33d692..64f3fd742 100644 --- a/tests/Auth/LdapTest.php +++ b/tests/Auth/LdapTest.php @@ -148,8 +148,8 @@ class LdapTest extends BrowserKitTest public function test_login_maps_roles_and_retains_existsing_roles() { - $roleToRecieve = factory(Role::class)->create(['name' => 'ldaptester']); - $roleToRecieve2 = factory(Role::class)->create(['name' => 'ldaptester-second']); + $roleToReceive = factory(Role::class)->create(['name' => 'ldaptester', 'display_name' => 'LdapTester']); + $roleToReceive2 = factory(Role::class)->create(['name' => 'ldaptester-second', 'display_name' => 'LdapTester Second']); $existingRole = factory(Role::class)->create(['name' => 'ldaptester-existing']); $this->mockUser->forceFill(['external_auth_id' => $this->mockUser->name])->save(); $this->mockUser->attachRole($existingRole); @@ -187,11 +187,11 @@ class LdapTest extends BrowserKitTest $user = User::where('email', $this->mockUser->email)->first(); $this->seeInDatabase('role_user', [ 'user_id' => $user->id, - 'role_id' => $roleToRecieve->id + 'role_id' => $roleToReceive->id ]); $this->seeInDatabase('role_user', [ 'user_id' => $user->id, - 'role_id' => $roleToRecieve2->id + 'role_id' => $roleToReceive2->id ]); $this->seeInDatabase('role_user', [ 'user_id' => $user->id, @@ -201,7 +201,7 @@ class LdapTest extends BrowserKitTest public function test_login_maps_roles_and_removes_old_roles_if_set() { - $roleToRecieve = factory(Role::class)->create(['name' => 'ldaptester']); + $roleToReceive = factory(Role::class)->create(['name' => 'ldaptester', 'display_name' => 'LdapTester']); $existingRole = factory(Role::class)->create(['name' => 'ldaptester-existing']); $this->mockUser->forceFill(['external_auth_id' => $this->mockUser->name])->save(); $this->mockUser->attachRole($existingRole); @@ -238,7 +238,7 @@ class LdapTest extends BrowserKitTest $user = User::where('email', $this->mockUser->email)->first(); $this->seeInDatabase('role_user', [ 'user_id' => $user->id, - 'role_id' => $roleToRecieve->id + 'role_id' => $roleToReceive->id ]); $this->dontSeeInDatabase('role_user', [ 'user_id' => $user->id, @@ -246,4 +246,56 @@ class LdapTest extends BrowserKitTest ]); } + public function test_external_auth_id_visible_in_roles_page_when_ldap_active() + { + $role = factory(Role::class)->create(['name' => 'ldaptester', 'external_auth_id' => 'ex-auth-a, test-second-param']); + $this->asAdmin()->visit('/settings/roles/' . $role->id) + ->see('ex-auth-a'); + } + + public function test_login_maps_roles_using_external_auth_ids_if_set() + { + $roleToReceive = factory(Role::class)->create(['name' => 'ldaptester', 'external_auth_id' => 'test-second-param, ex-auth-a']); + $roleToNotReceive = factory(Role::class)->create(['name' => 'ldaptester-not-receive', 'display_name' => 'ex-auth-a', 'external_auth_id' => 'test-second-param']); + + app('config')->set([ + 'services.ldap.user_to_groups' => true, + 'services.ldap.group_attribute' => 'memberOf', + 'services.ldap.remove_from_groups' => true, + ]); + $this->mockLdap->shouldReceive('connect')->times(2)->andReturn($this->resourceId); + $this->mockLdap->shouldReceive('setVersion')->times(2); + $this->mockLdap->shouldReceive('setOption')->times(4); + $this->mockLdap->shouldReceive('searchAndGetEntries')->times(4) + ->with($this->resourceId, config('services.ldap.base_dn'), \Mockery::type('string'), \Mockery::type('array')) + ->andReturn(['count' => 1, 0 => [ + 'uid' => [$this->mockUser->name], + 'cn' => [$this->mockUser->name], + 'dn' => ['dc=test' . config('services.ldap.base_dn')], + 'mail' => [$this->mockUser->email], + 'memberof' => [ + 'count' => 1, + 0 => "cn=ex-auth-a,ou=groups,dc=example,dc=com", + ] + ]]); + $this->mockLdap->shouldReceive('bind')->times(5)->andReturn(true); + + $this->visit('/login') + ->see('Username') + ->type($this->mockUser->name, '#username') + ->type($this->mockUser->password, '#password') + ->press('Log In') + ->seePageIs('/'); + + $user = User::where('email', $this->mockUser->email)->first(); + $this->seeInDatabase('role_user', [ + 'user_id' => $user->id, + 'role_id' => $roleToReceive->id + ]); + $this->dontSeeInDatabase('role_user', [ + 'user_id' => $user->id, + 'role_id' => $roleToNotReceive->id + ]); + } + } From 369dc02e780fbd370580dc81d10a972b72685328 Mon Sep 17 00:00:00 2001 From: alex2702 Date: Sun, 15 Jul 2018 21:26:55 +0200 Subject: [PATCH 021/183] Fixed German translations for notifications --- resources/lang/de/activities.php | 48 ++++++++++++++++---------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/resources/lang/de/activities.php b/resources/lang/de/activities.php index 38d02bd9c..264397b3f 100644 --- a/resources/lang/de/activities.php +++ b/resources/lang/de/activities.php @@ -8,34 +8,34 @@ return [ */ // Pages - 'page_create' => 'hat Seite erstellt:', - 'page_create_notification' => 'hat Seite erfolgreich erstellt:', - 'page_update' => 'hat Seite aktualisiert:', - 'page_update_notification' => 'hat Seite erfolgreich aktualisiert:', - 'page_delete' => 'hat Seite gelöscht:', - 'page_delete_notification' => 'hat Seite erfolgreich gelöscht:', - 'page_restore' => 'hat Seite wiederhergstellt:', - 'page_restore_notification' => 'hat Seite erfolgreich wiederhergstellt:', - 'page_move' => 'hat Seite verschoben:', + 'page_create' => 'Seite erstellt', + 'page_create_notification' => 'Die Seite wurde erfolgreich erstellt.', + 'page_update' => 'Seite aktualisiert', + 'page_update_notification' => 'Die Seite wurde erfolgreich aktualisiert.', + 'page_delete' => 'Seite gelöscht', + 'page_delete_notification' => 'Die Seite wurde erfolgreich gelöscht.', + 'page_restore' => 'Seite wiederhergstellt', + 'page_restore_notification' => 'Die Seite wurde erfolgreich wiederhergstellt.', + 'page_move' => 'Seite verschoben', // Chapters - 'chapter_create' => 'hat Kapitel erstellt:', - 'chapter_create_notification' => 'hat Kapitel erfolgreich erstellt:', - 'chapter_update' => 'hat Kapitel aktualisiert:', - 'chapter_update_notification' => 'hat Kapitel erfolgreich aktualisiert:', - 'chapter_delete' => 'hat Kapitel gelöscht', - 'chapter_delete_notification' => 'hat Kapitel erfolgreich gelöscht:', - 'chapter_move' => 'hat Kapitel verschoben:', + 'chapter_create' => 'Kapitel erstellt', + 'chapter_create_notification' => 'Das Kapitel wurde erfolgreich erstellt.', + 'chapter_update' => 'Kapitel aktualisiert', + 'chapter_update_notification' => 'Das Kapitel wurde erfolgreich aktualisiert.', + 'chapter_delete' => 'Kapitel gelöscht', + 'chapter_delete_notification' => 'Das Kapitel wurde erfolgreich gelöscht.', + 'chapter_move' => 'Kapitel verschoben', // Books - 'book_create' => 'hat Buch erstellt:', - 'book_create_notification' => 'hat Buch erfolgreich erstellt:', - 'book_update' => 'hat Buch aktualisiert:', - 'book_update_notification' => 'hat Buch erfolgreich aktualisiert:', - 'book_delete' => 'hat Buch gelöscht:', - 'book_delete_notification' => 'hat Buch erfolgreich gelöscht:', - 'book_sort' => 'hat Buch sortiert:', - 'book_sort_notification' => 'hat Buch erfolgreich neu sortiert:', + 'book_create' => 'Buch erstellt', + 'book_create_notification' => 'Das Buch wurde erfolgreich erstellt.', + 'book_update' => 'Buch aktualisiert', + 'book_update_notification' => 'Das Buch wurde erfolgreich aktualisiert.', + 'book_delete' => 'Buch gelöscht', + 'book_delete_notification' => 'Das Buch wurde erfolgreich gelöscht.', + 'book_sort' => 'Buch sortiert', + 'book_sort_notification' => 'Das Buch wurde erfolgreich neu sortiert.', // Other 'commented_on' => 'kommentierte', From 79d0f707e622501452119e0877dd8deff183d020 Mon Sep 17 00:00:00 2001 From: nicobubulle Date: Sun, 22 Jul 2018 18:20:09 +0200 Subject: [PATCH 022/183] French translation update --- resources/lang/fr/activities.php | 3 +-- resources/lang/fr/auth.php | 2 +- resources/lang/fr/common.php | 5 +++-- resources/lang/fr/components.php | 7 ++++--- resources/lang/fr/entities.php | 17 +++++++++++------ resources/lang/fr/errors.php | 11 ++++++++--- resources/lang/fr/settings.php | 28 ++++++++++++++++++++++------ 7 files changed, 50 insertions(+), 23 deletions(-) diff --git a/resources/lang/fr/activities.php b/resources/lang/fr/activities.php index a59c9a543..95709b5d2 100644 --- a/resources/lang/fr/activities.php +++ b/resources/lang/fr/activities.php @@ -15,7 +15,7 @@ return [ 'page_delete' => 'a supprimé la page', 'page_delete_notification' => 'Page supprimée avec succès', 'page_restore' => 'a restauré la page', - 'page_restore_notification' => 'Page réstaurée avec succès', + 'page_restore_notification' => 'Page restaurée avec succès', 'page_move' => 'a déplacé la page', // Chapters @@ -39,5 +39,4 @@ return [ // Other 'commented_on' => 'a commenté' - ]; diff --git a/resources/lang/fr/auth.php b/resources/lang/fr/auth.php index 154066ae4..934dd56da 100644 --- a/resources/lang/fr/auth.php +++ b/resources/lang/fr/auth.php @@ -73,4 +73,4 @@ return [ 'email_not_confirmed_click_link' => 'Merci de cliquer sur le lien dans l\'e-mail qui vous a été envoyé après l\'enregistrement.', 'email_not_confirmed_resend' => 'Si vous ne retrouvez plus l\'e-mail, vous pouvez renvoyer un e-mail de confirmation en utilisant le formulaire ci-dessous.', 'email_not_confirmed_resend_button' => 'Renvoyez l\'e-mail de confirmation', -]; +]; \ No newline at end of file diff --git a/resources/lang/fr/common.php b/resources/lang/fr/common.php index 823c6ee2f..86465dd88 100644 --- a/resources/lang/fr/common.php +++ b/resources/lang/fr/common.php @@ -20,6 +20,7 @@ return [ 'role' => 'Rôle', 'cover_image' => 'Image de couverture', 'cover_image_description' => 'Cette image doit être environ 300x170px.', + /** * Actions */ @@ -30,6 +31,7 @@ return [ 'edit' => 'Editer', 'sort' => 'Trier', 'move' => 'Déplacer', + 'copy' => 'Copier', 'reply' => 'Répondre', 'delete' => 'Supprimer', 'search' => 'Chercher', @@ -38,7 +40,6 @@ return [ 'remove' => 'Enlever', 'add' => 'Ajouter', - /** * Misc */ @@ -63,4 +64,4 @@ return [ */ 'email_action_help' => 'Si vous rencontrez des problèmes pour cliquer sur le bouton ":actionText", copiez et collez l\'adresse ci-dessous dans votre navigateur :', 'email_rights' => 'Tous droits réservés', -]; +]; \ No newline at end of file diff --git a/resources/lang/fr/components.php b/resources/lang/fr/components.php index 438137b5e..e314536c7 100644 --- a/resources/lang/fr/components.php +++ b/resources/lang/fr/components.php @@ -4,7 +4,7 @@ return [ /** * Image Manager */ - 'image_select' => 'Selectionner une image', + 'image_select' => 'Sélectionner une image', 'image_all' => 'Toutes', 'image_all_title' => 'Voir toutes les images', 'image_book_title' => 'Voir les images ajoutées à ce livre', @@ -15,19 +15,20 @@ return [ 'image_image_name' => 'Nom de l\'image', 'image_delete_used' => 'Cette image est utilisée dans les pages ci-dessous.', 'image_delete_confirm' => 'Confirmez que vous souhaitez bien supprimer cette image.', - 'image_select_image' => 'Selectionner l\'image', + 'image_select_image' => 'Sélectionner l\'image', 'image_dropzone' => 'Glissez les images ici ou cliquez pour les ajouter', 'images_deleted' => 'Images supprimées', 'image_preview' => 'Prévisualiser l\'image', 'image_upload_success' => 'Image ajoutée avec succès', 'image_update_success' => 'Détails de l\'image mis à jour', 'image_delete_success' => 'Image supprimée avec succès', + 'image_upload_remove' => 'Supprimer', /** * Code editor */ 'code_editor' => 'Editer le code', - 'code_language' => 'Language du code', + 'code_language' => 'Langage du code', 'code_content' => 'Contenu du code', 'code_save' => 'Enregistrer le code', ]; diff --git a/resources/lang/fr/entities.php b/resources/lang/fr/entities.php index c8503241e..b20097775 100644 --- a/resources/lang/fr/entities.php +++ b/resources/lang/fr/entities.php @@ -19,7 +19,6 @@ return [ 'meta_created_name' => 'Créé :timeLength par :user', 'meta_updated' => 'Mis à jour :timeLength', 'meta_updated_name' => 'Mis à jour :timeLength par :user', - 'x_pages' => ':count pages', 'entity_select' => 'Sélectionner l\'entité', 'images' => 'Images', 'my_recent_drafts' => 'Mes brouillons récents', @@ -36,7 +35,7 @@ return [ * Permissions and restrictions */ 'permissions' => 'Permissions', - 'permissions_intro' => 'Une fois activées ces permission prendont la priorité sur tous les sets de permissions pré-existants.', + 'permissions_intro' => 'Une fois activées ces permissions prendront la priorité sur tous les sets de permissions préexistants.', 'permissions_enable' => 'Activer les permissions personnalisées', 'permissions_save' => 'Enregistrer les permissions', @@ -131,6 +130,7 @@ return [ */ 'page' => 'Page', 'pages' => 'Pages', + 'x_pages' => ':count Page|:count Pages', 'pages_popular' => 'Pages populaires', 'pages_new' => 'Nouvelle page', 'pages_attachments' => 'Fichiers joints', @@ -166,6 +166,9 @@ return [ 'pages_not_in_chapter' => 'La page n\'est pas dans un chapitre', 'pages_move' => 'Déplacer la page', 'pages_move_success' => 'Page déplacée à ":parentName"', + 'pages_copy' => 'Copier la page', + 'pages_copy_desination' => 'Destination de la copie', + 'pages_copy_success' => 'Page copiée avec succès', 'pages_permissions' => 'Permissions de la page', 'pages_permissions_success' => 'Permissions de la page mises à jour', 'pages_revision' => 'Révision', @@ -201,10 +204,12 @@ return [ * Editor sidebar */ 'page_tags' => 'Mots-clés de la page', + 'chapter_tags' => 'Mots-clés du chapitre', + 'book_tags' => 'Mots-clés du livre', 'tag' => 'Mot-clé', - 'tags' => 'Mots-clé', + 'tags' => 'Mots-clés', 'tag_value' => 'Valeur du mot-clé (Optionnel)', - 'tags_explain' => "Ajouter des mot-clés pour catégoriser votre contenu.", + 'tags_explain' => "Ajouter des mots-clés pour catégoriser votre contenu.", 'tags_add' => 'Ajouter un autre mot-clé', 'attachments' => 'Fichiers joints', 'attachments_explain' => 'Ajouter des fichiers ou des liens pour les afficher sur votre page. Ils seront affichés dans la barre latérale', @@ -258,6 +263,6 @@ return [ 'comment_deleted_success' => 'Commentaire supprimé', 'comment_created_success' => 'Commentaire ajouté', 'comment_updated_success' => 'Commentaire mis à jour', - 'comment_delete_confirm' => 'Etes-vous sûr de vouloir supprimer ce commentaire?', + 'comment_delete_confirm' => 'Etes-vous sûr de vouloir supprimer ce commentaire ?', 'comment_in_reply_to' => 'En réponse à :commentId', -]; +]; \ No newline at end of file diff --git a/resources/lang/fr/errors.php b/resources/lang/fr/errors.php index 9e20147b6..97bf83a75 100644 --- a/resources/lang/fr/errors.php +++ b/resources/lang/fr/errors.php @@ -14,12 +14,13 @@ return [ 'error_user_exists_different_creds' => 'Un utilisateur avec l\'adresse :email existe déjà.', 'email_already_confirmed' => 'Cet e-mail a déjà été validé, vous pouvez vous connecter.', 'email_confirmation_invalid' => 'Cette confirmation est invalide. Veuillez essayer de vous inscrire à nouveau.', - 'email_confirmation_expired' => 'Le jeton de confirmation est perimé. Un nouvel e-mail vous a été envoyé.', + 'email_confirmation_expired' => 'Le jeton de confirmation est périmé. Un nouvel e-mail vous a été envoyé.', 'ldap_fail_anonymous' => 'L\'accès LDAP anonyme n\'a pas abouti', 'ldap_fail_authed' => 'L\'accès LDAP n\'a pas abouti avec cet utilisateur et ce mot de passe', - 'ldap_extension_not_installed' => 'L\'extention LDAP PHP n\'est pas installée', + 'ldap_extension_not_installed' => 'L\'extension LDAP PHP n\'est pas installée', 'ldap_cannot_connect' => 'Impossible de se connecter au serveur LDAP, la connexion initiale a échoué', 'social_no_action_defined' => 'Pas d\'action définie', + 'social_login_bad_response' => "Erreur pendant la tentative de connexion à :socialAccount : \n:error", 'social_account_in_use' => 'Ce compte :socialAccount est déjà utilisé. Essayez de vous connecter via :socialAccount.', 'social_account_email_in_use' => 'L\'email :email est déjà utilisé. Si vous avez déjà un compte :socialAccount, vous pouvez le joindre à votre profil existant.', 'social_account_existing' => 'Ce compte :socialAccount est déjà rattaché à votre profil.', @@ -34,13 +35,17 @@ return [ 'cannot_get_image_from_url' => 'Impossible de récupérer l\'image depuis :url', 'cannot_create_thumbs' => 'Le serveur ne peut pas créer de miniature, vérifier que l\'extension PHP GD est installée.', 'server_upload_limit' => 'La taille du fichier est trop grande.', + 'uploaded' => 'Le serveur n\'autorise pas l\'envoi d\'un fichier de cette taille. Veuillez essayer avec une taille de fichier réduite.', 'image_upload_error' => 'Une erreur est survenue pendant l\'envoi de l\'image', + 'image_upload_type_error' => 'LE format de l\'image envoyée n\'est pas valide', // Attachments - 'attachment_page_mismatch' => 'Page mismatch during attachment update', + 'attachment_page_mismatch' => 'Page incorrecte durant la mise à jour du fichier joint', + 'attachment_not_found' => 'Fichier joint non trouvé', // Pages 'page_draft_autosave_fail' => 'Le brouillon n\'a pas pu être sauvé. Vérifiez votre connexion internet', + 'page_custom_home_deletion' => 'Impossible de supprimer une page définie comme page d\'accueil', // Entities 'entity_not_found' => 'Entité non trouvée', diff --git a/resources/lang/fr/settings.php b/resources/lang/fr/settings.php index ea6214d84..ef4de097d 100644 --- a/resources/lang/fr/settings.php +++ b/resources/lang/fr/settings.php @@ -34,8 +34,10 @@ return [ 'app_homepage' => 'Page d\'accueil de l\'application', 'app_homepage_desc' => 'Choisissez une page à afficher sur la page d\'accueil au lieu de la vue par défaut. Les permissions sont ignorées pour les pages sélectionnées.', 'app_homepage_default' => 'Page d\'accueil par défaut sélectionnée', + 'app_homepage_books' => 'Ou sélectionner la page des livres comme page d\'accueil. Cela va ignorer la page séléctionnée comme page d\'accueil.', 'app_disable_comments' => 'Désactiver les commentaires', 'app_disable_comments_desc' => 'Désactive les commentaires sur toutes les pages de l\'application. Les commentaires existants ne sont pas affichés.', + /** * Registration settings */ @@ -46,9 +48,22 @@ return [ 'reg_confirm_email' => 'Obliger la confirmation par e-mail ?', 'reg_confirm_email_desc' => 'Si la restriction de domaine est activée, la confirmation sera automatiquement obligatoire et cette valeur sera ignorée.', 'reg_confirm_restrict_domain' => 'Restreindre l\'inscription à un domaine', - 'reg_confirm_restrict_domain_desc' => 'Entrez une liste de domaines acceptés lors de l\'inscription, séparés par une virgule. Les utilisateur recevront un e-mail de confirmation à cette adresse.
    Les utilisateurs pourront changer leur adresse après inscription s\'ils le souhaitent.', + 'reg_confirm_restrict_domain_desc' => 'Entrez une liste de domaines acceptés lors de l\'inscription, séparés par une virgule. Les utilisateurs recevront un e-mail de confirmation à cette adresse.
    Les utilisateurs pourront changer leur adresse après inscription s\'ils le souhaitent.', 'reg_confirm_restrict_domain_placeholder' => 'Aucune restriction en place', + /** + * Maintenance settings + */ + + 'maint' => 'Maintenance', + 'maint_image_cleanup' => 'Nettoyer les images', + 'maint_image_cleanup_desc' => "Scan le contenu des pages et des révisions pour vérifier les images et les dessins en cours d'utilisation et lesquels sont redondant. Veuillez à faire une sauvegarde de la base de données et des images avant de lancer ceci.", + 'maint_image_cleanup_ignore_revisions' => 'Ignorer les images dans les révisions', + 'maint_image_cleanup_run' => 'Lancer le nettoyage', + 'maint_image_cleanup_warning' => ':count images potentiellement inutilisées trouvées. Etes-vous sûr de vouloir supprimer ces images ?', + 'maint_image_cleanup_success' => ':count images potentiellement inutilisées trouvées et supprimées !', + 'maint_image_cleanup_nothing_found' => 'Aucune image inutilisée trouvée, rien à supprimer !', + /** * Role settings */ @@ -61,23 +76,24 @@ return [ 'role_delete_confirm' => 'Ceci va supprimer le rôle \':roleName\'.', 'role_delete_users_assigned' => 'Ce rôle a :userCount utilisateurs assignés. Vous pouvez choisir un rôle de remplacement pour ces utilisateurs.', 'role_delete_no_migration' => "Ne pas assigner de nouveau rôle", - 'role_delete_sure' => 'Êtes vous sûr(e) de vouloir supprimer ce rôle ?', + 'role_delete_sure' => 'Êtes-vous sûr de vouloir supprimer ce rôle ?', 'role_delete_success' => 'Le rôle a été supprimé avec succès', 'role_edit' => 'Modifier le rôle', 'role_details' => 'Détails du rôle', 'role_name' => 'Nom du rôle', 'role_desc' => 'Courte description du rôle', + 'role_external_auth_id' => 'Identifiants d\'authentification externes', 'role_system' => 'Permissions système', 'role_manage_users' => 'Gérer les utilisateurs', 'role_manage_roles' => 'Gérer les rôles et permissions', 'role_manage_entity_permissions' => 'Gérer les permissions sur les livres, chapitres et pages', 'role_manage_own_entity_permissions' => 'Gérer les permissions de ses propres livres, chapitres, et pages', 'role_manage_settings' => 'Gérer les préférences de l\'application', - 'role_asset' => 'Asset Permissions', - 'role_asset_desc' => 'These permissions control default access to the assets within the system. Permissions on Books, Chapters and Pages will override these permissions.', + 'role_asset' => 'Permissions des ressources', + 'role_asset_desc' => 'Ces permissions contrôlent l\'accès par défaut des ressources dans le système. Les permissions dans les livres, les chapitres et les pages ignoreront ces permissions', 'role_all' => 'Tous', 'role_own' => 'Propres', - 'role_controlled_by_asset' => 'Controlled by the asset they are uploaded to', + 'role_controlled_by_asset' => 'Contrôlé par les ressources les ayant envoyés', 'role_save' => 'Enregistrer le rôle', 'role_update_success' => 'Rôle mis à jour avec succès', 'role_users' => 'Utilisateurs ayant ce rôle', @@ -93,7 +109,7 @@ return [ 'users_search' => 'Chercher les utilisateurs', 'users_role' => 'Rôles des utilisateurs', 'users_external_auth_id' => 'Identifiant d\'authentification externe', - 'users_password_warning' => 'Remplissez ce fomulaire uniquement si vous souhaitez changer de mot de passe:', + 'users_password_warning' => 'Remplissez ce formulaire uniquement si vous souhaitez changer de mot de passe:', 'users_system_public' => 'Cet utilisateur représente les invités visitant votre instance. Il est assigné automatiquement aux invités.', 'users_books_view_type' => 'Disposition d\'affichage préférée pour les livres', 'users_delete' => 'Supprimer un utilisateur', From 7dd11decb8f3eb35ea78b4c56751707b42e62232 Mon Sep 17 00:00:00 2001 From: Khalid Date: Mon, 23 Jul 2018 13:08:07 +0300 Subject: [PATCH 023/183] partial file translation --- resources/lang/ar/activities.php | 42 +++++ resources/lang/ar/auth.php | 76 +++++++++ resources/lang/ar/common.php | 67 ++++++++ resources/lang/ar/components.php | 34 ++++ resources/lang/ar/entities.php | 268 +++++++++++++++++++++++++++++++ resources/lang/ar/errors.php | 82 ++++++++++ resources/lang/ar/pagination.php | 19 +++ resources/lang/ar/passwords.php | 22 +++ resources/lang/ar/settings.php | 154 ++++++++++++++++++ resources/lang/ar/validation.php | 108 +++++++++++++ 10 files changed, 872 insertions(+) create mode 100644 resources/lang/ar/activities.php create mode 100644 resources/lang/ar/auth.php create mode 100644 resources/lang/ar/common.php create mode 100644 resources/lang/ar/components.php create mode 100644 resources/lang/ar/entities.php create mode 100644 resources/lang/ar/errors.php create mode 100644 resources/lang/ar/pagination.php create mode 100644 resources/lang/ar/passwords.php create mode 100755 resources/lang/ar/settings.php create mode 100644 resources/lang/ar/validation.php diff --git a/resources/lang/ar/activities.php b/resources/lang/ar/activities.php new file mode 100644 index 000000000..fd13b16aa --- /dev/null +++ b/resources/lang/ar/activities.php @@ -0,0 +1,42 @@ + 'تم إنشاء صفحة', + 'page_create_notification' => 'تم إنشاء الصفحة بنجاح', + 'page_update' => 'تم تحديث الصفحة', + 'page_update_notification' => 'تم تحديث الصفحة بنجاح', + 'page_delete' => 'تم حذف الصفحة', + 'page_delete_notification' => 'تم حذف الصفحة بنجاح', + 'page_restore' => 'تمت استعادة الصفحة', + 'page_restore_notification' => 'تمت استعادة الصفحة بنجاح', + 'page_move' => 'تم نقل الصفحة', + + // Chapters + 'chapter_create' => 'تم إنشاء فصل', + 'chapter_create_notification' => 'تم إنشاء فصل بنجاح', + 'chapter_update' => 'تم تحديث الفصل', + 'chapter_update_notification' => 'تم تحديث الفصل بنجاح', + 'chapter_delete' => 'تم حذف الفصل', + 'chapter_delete_notification' => 'تم حذف الفصل بنجاح', + 'chapter_move' => 'تم نقل الفصل', + + // Books + 'book_create' => 'تم إنشاء كتاب', + 'book_create_notification' => 'تم إنشاء كتاب بنجاح', + 'book_update' => 'تم تحديث الكتاب', + 'book_update_notification' => 'تم تحديث الكتاب بنجاح', + 'book_delete' => 'تم حذف الكتاب', + 'book_delete_notification' => 'تم حذف الكتاب بنجاح', + 'book_sort' => 'تم سرد الكتاب', + 'book_sort_notification' => 'تمت إعادة سرد الكتاب بنجاح', + + // Other + 'commented_on' => 'تم التعليق', +]; diff --git a/resources/lang/ar/auth.php b/resources/lang/ar/auth.php new file mode 100644 index 000000000..9f1c7ce85 --- /dev/null +++ b/resources/lang/ar/auth.php @@ -0,0 +1,76 @@ + 'البيانات المعطاة لا توافق سجلاتنا.', + 'throttle' => 'تجاوزت الحد الأقصى من المحاولات. الرجاء المحاولة مرة أخرى بعد :seconds seconds.', + + /** + * Login & Register + */ + 'sign_up' => 'إنشاء حساب', + 'log_in' => 'تسجيل الدخول', + 'log_in_with' => 'تسجيل الدخول باستخدام :socialDriver', + 'sign_up_with' => 'إنشاء حساب باستخدام :socialDriver', + 'logout' => 'تسجيل الخروج', + + 'name' => 'الاسم', + 'username' => 'اسم المستخدم', + 'email' => 'البريد الإلكتروني', + 'password' => 'كلمة المرور', + 'password_confirm' => 'تأكيد كلمة المرور', + 'password_hint' => 'يجب أن تكون أكثر من 5 حروف', + 'forgot_password' => 'نسيت كلمة المرور؟', + 'remember_me' => 'تذكرني', + 'ldap_email_hint' => 'الرجاء إدخال عنوان بريد إلكتروني لاستخدامه مع الحساب.', + 'create_account' => 'إنشاء حساب', + 'social_login' => 'تسجيل الدخول باستخدام حسابات التواصل الاجتماعي', + 'social_registration' => 'إنشاء حساب باستخدام حسابات التواصل الاجتماعي', + 'social_registration_text' => 'إنشاء حساب والدخول باستخدام خدمة أخرى.', + + 'register_thanks' => 'شكراً لتسجيل حسابك!', + 'register_confirm' => 'الرجاء مراجعة البريد الإلكتروني والضغط على زر التأكيد لاستخدام :appName.', + 'registrations_disabled' => 'التسجيل مغلق حالياً', + 'registration_email_domain_invalid' => 'المجال الخاص بالبريد الإلكتروني لا يملك حق الوصول لهذا التطبيق', + 'register_success' => 'شكراً لإنشاء حسابكم! تم تسجيلكم ودخولكم للحساب الخاص بكم.', + + + /** + * Password Reset + */ + 'reset_password' => 'استعادة كلمة المرور', + 'reset_password_send_instructions' => 'أدخل بريدك الإلكتروني بالأسفل وسيتم إرسال رسالة برابط لاستعادة كلمة المرور.', + 'reset_password_send_button' => 'أرسل رابط الاستعادة', + 'reset_password_sent_success' => 'تم إرسال رابط استعادة كلمة المرور إلى :email.', + 'reset_password_success' => 'تمت استعادة كلمة المرور بنجاح.', + + 'email_reset_subject' => 'استعد كلمة المرور الخاصة بتطبيق :appName', + 'email_reset_text' => 'تم إرسال هذه الرسالة بسبب تلقينا لطلب استعادة كلمة المرور الخاصة بحسابكم.', + 'email_reset_not_requested' => 'إذا لم يتم طلب استعادة كلمة المرور من قبلكم, فلا حاجة لاتخاذ أية خطوات.', + + + /** + * Email Confirmation // إذا لم يتم إيجاد الرسالة, بإمكانكم إعادة إرسال رسالة التأكيد عن طريق تعبئة النموذج أدناه + */ + 'email_confirm_subject' => 'تأكيد بريدكم الإلكتروني لتطبيق :appName', + 'email_confirm_greeting' => 'شكرا لانضمامكم إلى :appName!', + 'email_confirm_text' => 'الرجاء تأكيد بريدكم الإلكتروني بالضغط على الزر أدناه:', + 'email_confirm_action' => 'تأكيد البريد الإلكتروني', + 'email_confirm_send_error' => 'تأكيد البريد الإلكتروني مطلوب ولكن النظام لم يستطع إرسال الرسالة. تواصل مع مشرف النظام للتأكد من إعدادات البريد.', + 'email_confirm_success' => 'تم تأكيد بريدكم الإلكتروني!', + 'email_confirm_resent' => 'تمت إعادة إرسال رسالة التأكيد. الرجاء مراجعة صندوق الوارد', + + 'email_not_confirmed' => 'لم يتم تأكيد البريد الإلكتروني', + 'email_not_confirmed_text' => 'لم يتم بعد تأكيد عنوان البريد الإلكتروني.', + 'email_not_confirmed_click_link' => 'الرجاء الضغط على الرابط المرسل إلى بريدكم الإلكتروني بعد تسجيلكم.', + 'email_not_confirmed_resend' => 'إذا لم يتم إيجاد الرسالة, بإمكانكم إعادة إرسال رسالة التأكيد عن طريق تعبئة النموذج أدناه.', + 'email_not_confirmed_resend_button' => 'إعادة إرسال رسالة التأكيد', +]; \ No newline at end of file diff --git a/resources/lang/ar/common.php b/resources/lang/ar/common.php new file mode 100644 index 000000000..5c873f808 --- /dev/null +++ b/resources/lang/ar/common.php @@ -0,0 +1,67 @@ + 'إلغاء', + 'confirm' => 'تأكيد', + 'back' => 'رجوع', + 'save' => 'حفظ', + 'continue' => 'استمرار', + 'select' => 'تحديد', + 'more' => 'المزيد', + + /** + * Form Labels + */ + 'name' => 'الاسم', + 'description' => 'الوصف', + 'role' => 'الدور', + 'cover_image' => 'صورة الغلاف', + 'cover_image_description' => 'الصورة يجب أن تكون مقاربة لحجم 440×250 بكسل.', + + /** + * Actions + */ + 'actions' => 'Actions', + 'view' => 'عرض', + 'create' => 'إنشاء', + 'update' => 'تحديث', + 'edit' => 'تعديل', + 'sort' => 'سرد', + 'move' => 'نقل', + 'copy' => 'نسخ', + 'reply' => 'رد', + 'delete' => 'حذف', + 'search' => 'بحث', + 'search_clear' => 'تصفية البحث', + 'reset' => 'إعادة تعيين', + 'remove' => 'إزالة', + 'add' => 'إضافة', + + /** + * Misc + */ + 'deleted_user' => 'حذف مستخدم', + 'no_activity' => 'لا يوجد نشاط لعرضه', + 'no_items' => 'لا توجد عناصر متوفرة', + 'back_to_top' => 'العودة للبداية', + 'toggle_details' => 'عرض / إخفاء التفاصيل', + 'toggle_thumbnails' => 'عرض / إخفاء الصور المصغرة', + 'details' => 'التفاصيل', + 'grid_view' => 'عرض شبكي', + 'list_view' => 'عرض منسدل', + + /** + * Header + */ + 'view_profile' => 'عرض الملف الشخصي', + 'edit_profile' => 'تعديل الملف الشخصي', + + /** + * Email Content + */ + 'email_action_help' => 'إذا واجهتكم مشكلة بضغط زر ":actionText" فبإمكانكم نسخ الرابط أدناه ولصقه بالمتصفح:', + 'email_rights' => 'جميع الحقوق محفوظة', +]; \ No newline at end of file diff --git a/resources/lang/ar/components.php b/resources/lang/ar/components.php new file mode 100644 index 000000000..f6cec1d01 --- /dev/null +++ b/resources/lang/ar/components.php @@ -0,0 +1,34 @@ + 'تحديد صورة', + 'image_all' => 'الكل', + 'image_all_title' => 'عرض جميع الصور', + 'image_book_title' => 'عرض الصور المرفوعة لهذا الكتاب', + 'image_page_title' => 'عرض الصور المرفوعة لهذه الصفحة', + 'image_search_hint' => 'البحث باستخدام اسم الصورة', + 'image_uploaded' => 'وقت الرفع :uploadedDate', + 'image_load_more' => 'المزيد', + 'image_image_name' => 'اسم الصورة', + 'image_delete_used' => 'هذه الصورة مستخدمة بالصفحات أدناه.', + 'image_delete_confirm' => 'اضغط زر الحذف مرة أخرى لتأكيد حذف هذه الصورة.', + 'image_select_image' => 'تحديد الصورة', + 'image_dropzone' => 'قم بإسقاط الصورة أو اضغط هنا للرفع', + 'images_deleted' => 'تم حذف الصور', + 'image_preview' => 'معاينة الصور', + 'image_upload_success' => 'تم رفع الصورة بنجاح', + 'image_update_success' => 'تم تحديث تفاصيل الصورة بنجاح', + 'image_delete_success' => 'تم حذف الصورة بنجاح', + 'image_upload_remove' => 'إزالة', + + /** + * Code editor + */ + 'code_editor' => 'تعديل الشفرة', + 'code_language' => 'لغة الشفرة', + 'code_content' => 'محتويات الشفرة', + 'code_save' => 'حفظ الشفرة', +]; diff --git a/resources/lang/ar/entities.php b/resources/lang/ar/entities.php new file mode 100644 index 000000000..93025ffd4 --- /dev/null +++ b/resources/lang/ar/entities.php @@ -0,0 +1,268 @@ + 'Recently Created', + 'recently_created_pages' => 'Recently Created Pages', + 'recently_updated_pages' => 'Recently Updated Pages', + 'recently_created_chapters' => 'Recently Created Chapters', + 'recently_created_books' => 'Recently Created Books', + 'recently_update' => 'Recently Updated', + 'recently_viewed' => 'Recently Viewed', + 'recent_activity' => 'Recent Activity', + 'create_now' => 'Create one now', + 'revisions' => 'Revisions', + 'meta_revision' => 'Revision #:revisionCount', + 'meta_created' => 'Created :timeLength', + 'meta_created_name' => 'Created :timeLength by :user', + 'meta_updated' => 'Updated :timeLength', + 'meta_updated_name' => 'Updated :timeLength by :user', + 'entity_select' => 'Entity Select', + 'images' => 'Images', + 'my_recent_drafts' => 'My Recent Drafts', + 'my_recently_viewed' => 'My Recently Viewed', + 'no_pages_viewed' => 'You have not viewed any pages', + 'no_pages_recently_created' => 'No pages have been recently created', + 'no_pages_recently_updated' => 'No pages have been recently updated', + 'export' => 'Export', + 'export_html' => 'Contained Web File', + 'export_pdf' => 'PDF File', + 'export_text' => 'Plain Text File', + + /** + * Permissions and restrictions + */ + 'permissions' => 'Permissions', + 'permissions_intro' => 'Once enabled, These permissions will take priority over any set role permissions.', + 'permissions_enable' => 'Enable Custom Permissions', + 'permissions_save' => 'Save Permissions', + + /** + * Search + */ + 'search_results' => 'Search Results', + 'search_total_results_found' => ':count result found|:count total results found', + 'search_clear' => 'Clear Search', + 'search_no_pages' => 'No pages matched this search', + 'search_for_term' => 'Search for :term', + 'search_more' => 'More Results', + 'search_filters' => 'Search Filters', + 'search_content_type' => 'Content Type', + 'search_exact_matches' => 'Exact Matches', + 'search_tags' => 'Tag Searches', + 'search_viewed_by_me' => 'Viewed by me', + 'search_not_viewed_by_me' => 'Not viewed by me', + 'search_permissions_set' => 'Permissions set', + 'search_created_by_me' => 'Created by me', + 'search_updated_by_me' => 'Updated by me', + 'search_updated_before' => 'Updated before', + 'search_updated_after' => 'Updated after', + 'search_created_before' => 'Created before', + 'search_created_after' => 'Created after', + 'search_set_date' => 'Set Date', + 'search_update' => 'Update Search', + + /** + * Books + */ + 'book' => 'Book', + 'books' => 'Books', + 'x_books' => ':count Book|:count Books', + 'books_empty' => 'No books have been created', + 'books_popular' => 'Popular Books', + 'books_recent' => 'Recent Books', + 'books_new' => 'New Books', + 'books_popular_empty' => 'The most popular books will appear here.', + 'books_new_empty' => 'The most recently created books will appear here.', + 'books_create' => 'Create New Book', + 'books_delete' => 'Delete Book', + 'books_delete_named' => 'Delete Book :bookName', + 'books_delete_explain' => 'This will delete the book with the name \':bookName\'. All pages and chapters will be removed.', + 'books_delete_confirmation' => 'Are you sure you want to delete this book?', + 'books_edit' => 'Edit Book', + 'books_edit_named' => 'Edit Book :bookName', + 'books_form_book_name' => 'Book Name', + 'books_save' => 'Save Book', + 'books_permissions' => 'Book Permissions', + 'books_permissions_updated' => 'Book Permissions Updated', + 'books_empty_contents' => 'No pages or chapters have been created for this book.', + 'books_empty_create_page' => 'Create a new page', + 'books_empty_or' => 'or', + 'books_empty_sort_current_book' => 'Sort the current book', + 'books_empty_add_chapter' => 'Add a chapter', + 'books_permissions_active' => 'Book Permissions Active', + 'books_search_this' => 'Search this book', + 'books_navigation' => 'Book Navigation', + 'books_sort' => 'Sort Book Contents', + 'books_sort_named' => 'Sort Book :bookName', + 'books_sort_show_other' => 'Show Other Books', + 'books_sort_save' => 'Save New Order', + + /** + * Chapters + */ + 'chapter' => 'Chapter', + 'chapters' => 'Chapters', + 'x_chapters' => ':count Chapter|:count Chapters', + 'chapters_popular' => 'Popular Chapters', + 'chapters_new' => 'New Chapter', + 'chapters_create' => 'Create New Chapter', + 'chapters_delete' => 'Delete Chapter', + 'chapters_delete_named' => 'Delete Chapter :chapterName', + 'chapters_delete_explain' => 'This will delete the chapter with the name \':chapterName\'. All pages will be removed and added directly to the parent book.', + 'chapters_delete_confirm' => 'Are you sure you want to delete this chapter?', + 'chapters_edit' => 'Edit Chapter', + 'chapters_edit_named' => 'Edit Chapter :chapterName', + 'chapters_save' => 'Save Chapter', + 'chapters_move' => 'Move Chapter', + 'chapters_move_named' => 'Move Chapter :chapterName', + 'chapter_move_success' => 'Chapter moved to :bookName', + 'chapters_permissions' => 'Chapter Permissions', + 'chapters_empty' => 'No pages are currently in this chapter.', + 'chapters_permissions_active' => 'Chapter Permissions Active', + 'chapters_permissions_success' => 'Chapter Permissions Updated', + 'chapters_search_this' => 'Search this chapter', + + /** + * Pages + */ + 'page' => 'Page', + 'pages' => 'Pages', + 'x_pages' => ':count Page|:count Pages', + 'pages_popular' => 'Popular Pages', + 'pages_new' => 'New Page', + 'pages_attachments' => 'Attachments', + 'pages_navigation' => 'Page Navigation', + 'pages_delete' => 'Delete Page', + 'pages_delete_named' => 'Delete Page :pageName', + 'pages_delete_draft_named' => 'Delete Draft Page :pageName', + 'pages_delete_draft' => 'Delete Draft Page', + 'pages_delete_success' => 'Page deleted', + 'pages_delete_draft_success' => 'Draft page deleted', + 'pages_delete_confirm' => 'Are you sure you want to delete this page?', + 'pages_delete_draft_confirm' => 'Are you sure you want to delete this draft page?', + 'pages_editing_named' => 'Editing Page :pageName', + 'pages_edit_toggle_header' => 'Toggle header', + 'pages_edit_save_draft' => 'Save Draft', + 'pages_edit_draft' => 'Edit Page Draft', + 'pages_editing_draft' => 'Editing Draft', + 'pages_editing_page' => 'Editing Page', + 'pages_edit_draft_save_at' => 'Draft saved at ', + 'pages_edit_delete_draft' => 'Delete Draft', + 'pages_edit_discard_draft' => 'Discard Draft', + 'pages_edit_set_changelog' => 'Set Changelog', + 'pages_edit_enter_changelog_desc' => 'Enter a brief description of the changes you\'ve made', + 'pages_edit_enter_changelog' => 'Enter Changelog', + 'pages_save' => 'Save Page', + 'pages_title' => 'Page Title', + 'pages_name' => 'Page Name', + 'pages_md_editor' => 'Editor', + 'pages_md_preview' => 'Preview', + 'pages_md_insert_image' => 'Insert Image', + 'pages_md_insert_link' => 'Insert Entity Link', + 'pages_md_insert_drawing' => 'Insert Drawing', + 'pages_not_in_chapter' => 'Page is not in a chapter', + 'pages_move' => 'Move Page', + 'pages_move_success' => 'Page moved to ":parentName"', + 'pages_copy' => 'Copy Page', + 'pages_copy_desination' => 'Copy Destination', + 'pages_copy_success' => 'Page successfully copied', + 'pages_permissions' => 'Page Permissions', + 'pages_permissions_success' => 'Page permissions updated', + 'pages_revision' => 'Revision', + 'pages_revisions' => 'Page Revisions', + 'pages_revisions_named' => 'Page Revisions for :pageName', + 'pages_revision_named' => 'Page Revision for :pageName', + 'pages_revisions_created_by' => 'Created By', + 'pages_revisions_date' => 'Revision Date', + 'pages_revisions_number' => '#', + 'pages_revisions_changelog' => 'Changelog', + 'pages_revisions_changes' => 'Changes', + 'pages_revisions_current' => 'Current Version', + 'pages_revisions_preview' => 'Preview', + 'pages_revisions_restore' => 'Restore', + 'pages_revisions_none' => 'This page has no revisions', + 'pages_copy_link' => 'Copy Link', + 'pages_edit_content_link' => 'Edit Content', + 'pages_permissions_active' => 'Page Permissions Active', + 'pages_initial_revision' => 'Initial publish', + 'pages_initial_name' => 'New Page', + 'pages_editing_draft_notification' => 'You are currently editing a draft that was last saved :timeDiff.', + 'pages_draft_edited_notification' => 'This page has been updated by since that time. It is recommended that you discard this draft.', + 'pages_draft_edit_active' => [ + 'start_a' => ':count users have started editing this page', + 'start_b' => ':userName has started editing this page', + 'time_a' => 'since the page was last updated', + 'time_b' => 'in the last :minCount minutes', + 'message' => ':start :time. Take care not to overwrite each other\'s updates!', + ], + 'pages_draft_discarded' => 'Draft discarded, The editor has been updated with the current page content', + + /** + * Editor sidebar + */ + 'page_tags' => 'Page Tags', + 'chapter_tags' => 'Chapter Tags', + 'book_tags' => 'Book Tags', + 'tag' => 'Tag', + 'tags' => 'Tags', + 'tag_value' => 'Tag Value (Optional)', + 'tags_explain' => "Add some tags to better categorise your content. \n You can assign a value to a tag for more in-depth organisation.", + 'tags_add' => 'Add another tag', + 'attachments' => 'Attachments', + 'attachments_explain' => 'Upload some files or attach some links to display on your page. These are visible in the page sidebar.', + 'attachments_explain_instant_save' => 'Changes here are saved instantly.', + 'attachments_items' => 'Attached Items', + 'attachments_upload' => 'Upload File', + 'attachments_link' => 'Attach Link', + 'attachments_set_link' => 'Set Link', + 'attachments_delete_confirm' => 'Click delete again to confirm you want to delete this attachment.', + 'attachments_dropzone' => 'Drop files or click here to attach a file', + 'attachments_no_files' => 'No files have been uploaded', + 'attachments_explain_link' => 'You can attach a link if you\'d prefer not to upload a file. This can be a link to another page or a link to a file in the cloud.', + 'attachments_link_name' => 'Link Name', + 'attachment_link' => 'Attachment link', + 'attachments_link_url' => 'Link to file', + 'attachments_link_url_hint' => 'Url of site or file', + 'attach' => 'Attach', + 'attachments_edit_file' => 'Edit File', + 'attachments_edit_file_name' => 'File Name', + 'attachments_edit_drop_upload' => 'Drop files or click here to upload and overwrite', + 'attachments_order_updated' => 'Attachment order updated', + 'attachments_updated_success' => 'Attachment details updated', + 'attachments_deleted' => 'Attachment deleted', + 'attachments_file_uploaded' => 'File successfully uploaded', + 'attachments_file_updated' => 'File successfully updated', + 'attachments_link_attached' => 'Link successfully attached to page', + + /** + * Profile View + */ + 'profile_user_for_x' => 'User for :time', + 'profile_created_content' => 'Created Content', + 'profile_not_created_pages' => ':userName has not created any pages', + 'profile_not_created_chapters' => ':userName has not created any chapters', + 'profile_not_created_books' => ':userName has not created any books', + + /** + * Comments + */ + 'comment' => 'Comment', + 'comments' => 'Comments', + 'comment_add' => 'Add Comment', + 'comment_placeholder' => 'Leave a comment here', + 'comment_count' => '{0} No Comments|{1} 1 Comment|[2,*] :count Comments', + 'comment_save' => 'Save Comment', + 'comment_saving' => 'Saving comment...', + 'comment_deleting' => 'Deleting comment...', + 'comment_new' => 'New Comment', + 'comment_created' => 'commented :createDiff', + 'comment_updated' => 'Updated :updateDiff by :username', + 'comment_deleted_success' => 'Comment deleted', + 'comment_created_success' => 'Comment added', + 'comment_updated_success' => 'Comment updated', + 'comment_delete_confirm' => 'Are you sure you want to delete this comment?', + 'comment_in_reply_to' => 'In reply to :commentId', +]; \ No newline at end of file diff --git a/resources/lang/ar/errors.php b/resources/lang/ar/errors.php new file mode 100644 index 000000000..a86a1cdfc --- /dev/null +++ b/resources/lang/ar/errors.php @@ -0,0 +1,82 @@ + 'You do not have permission to access the requested page.', + 'permissionJson' => 'You do not have permission to perform the requested action.', + + // Auth + 'error_user_exists_different_creds' => 'A user with the email :email already exists but with different credentials.', + 'email_already_confirmed' => 'Email has already been confirmed, Try logging in.', + 'email_confirmation_invalid' => 'This confirmation token is not valid or has already been used, Please try registering again.', + 'email_confirmation_expired' => 'The confirmation token has expired, A new confirmation email has been sent.', + 'ldap_fail_anonymous' => 'LDAP access failed using anonymous bind', + 'ldap_fail_authed' => 'LDAP access failed using given dn & password details', + 'ldap_extension_not_installed' => 'LDAP PHP extension not installed', + 'ldap_cannot_connect' => 'Cannot connect to ldap server, Initial connection failed', + 'social_no_action_defined' => 'No action defined', + 'social_login_bad_response' => "Error received during :socialAccount login: \n:error", + 'social_account_in_use' => 'This :socialAccount account is already in use, Try logging in via the :socialAccount option.', + 'social_account_email_in_use' => 'The email :email is already in use. If you already have an account you can connect your :socialAccount account from your profile settings.', + 'social_account_existing' => 'This :socialAccount is already attached to your profile.', + 'social_account_already_used_existing' => 'This :socialAccount account is already used by another user.', + 'social_account_not_used' => 'This :socialAccount account is not linked to any users. Please attach it in your profile settings. ', + 'social_account_register_instructions' => 'If you do not yet have an account, You can register an account using the :socialAccount option.', + 'social_driver_not_found' => 'Social driver not found', + 'social_driver_not_configured' => 'Your :socialAccount social settings are not configured correctly.', + + // System + 'path_not_writable' => 'File path :filePath could not be uploaded to. Ensure it is writable to the server.', + 'cannot_get_image_from_url' => 'Cannot get image from :url', + 'cannot_create_thumbs' => 'The server cannot create thumbnails. Please check you have the GD PHP extension installed.', + 'server_upload_limit' => 'The server does not allow uploads of this size. Please try a smaller file size.', + 'uploaded' => 'The server does not allow uploads of this size. Please try a smaller file size.', + 'image_upload_error' => 'An error occurred uploading the image', + 'image_upload_type_error' => 'The image type being uploaded is invalid', + + // Attachments + 'attachment_page_mismatch' => 'Page mismatch during attachment update', + 'attachment_not_found' => 'Attachment not found', + + // Pages + 'page_draft_autosave_fail' => 'Failed to save draft. Ensure you have internet connection before saving this page', + 'page_custom_home_deletion' => 'Cannot delete a page while it is set as a homepage', + + // Entities + 'entity_not_found' => 'Entity not found', + 'book_not_found' => 'Book not found', + 'page_not_found' => 'Page not found', + 'chapter_not_found' => 'Chapter not found', + 'selected_book_not_found' => 'The selected book was not found', + 'selected_book_chapter_not_found' => 'The selected Book or Chapter was not found', + 'guests_cannot_save_drafts' => 'Guests cannot save drafts', + + // Users + 'users_cannot_delete_only_admin' => 'You cannot delete the only admin', + 'users_cannot_delete_guest' => 'You cannot delete the guest user', + + // Roles + 'role_cannot_be_edited' => 'This role cannot be edited', + 'role_system_cannot_be_deleted' => 'This role is a system role and cannot be deleted', + 'role_registration_default_cannot_delete' => 'This role cannot be deleted while set as the default registration role', + + // Comments + 'comment_list' => 'An error occurred while fetching the comments.', + 'cannot_add_comment_to_draft' => 'You cannot add comments to a draft.', + 'comment_add' => 'An error occurred while adding / updating the comment.', + 'comment_delete' => 'An error occurred while deleting the comment.', + 'empty_comment' => 'Cannot add an empty comment.', + + // Error pages + '404_page_not_found' => 'Page Not Found', + 'sorry_page_not_found' => 'Sorry, The page you were looking for could not be found.', + 'return_home' => 'Return to home', + 'error_occurred' => 'An Error Occurred', + 'app_down' => ':appName is down right now', + 'back_soon' => 'It will be back up soon.', +]; diff --git a/resources/lang/ar/pagination.php b/resources/lang/ar/pagination.php new file mode 100644 index 000000000..9a1276a8d --- /dev/null +++ b/resources/lang/ar/pagination.php @@ -0,0 +1,19 @@ + '« السابق', + 'next' => 'التالي »', + +]; diff --git a/resources/lang/ar/passwords.php b/resources/lang/ar/passwords.php new file mode 100644 index 000000000..7c10cba1a --- /dev/null +++ b/resources/lang/ar/passwords.php @@ -0,0 +1,22 @@ + 'Passwords must be at least six characters and match the confirmation.', + 'user' => "We can't find a user with that e-mail address.", + 'token' => 'This password reset token is invalid.', + 'sent' => 'We have e-mailed your password reset link!', + 'reset' => 'Your password has been reset!', + +]; diff --git a/resources/lang/ar/settings.php b/resources/lang/ar/settings.php new file mode 100755 index 000000000..d6fbb6107 --- /dev/null +++ b/resources/lang/ar/settings.php @@ -0,0 +1,154 @@ + 'Settings', + 'settings_save' => 'Save Settings', + 'settings_save_success' => 'Settings saved', + + /** + * App settings + */ + + 'app_settings' => 'App Settings', + 'app_name' => 'Application name', + 'app_name_desc' => 'This name is shown in the header and any emails.', + 'app_name_header' => 'Show Application name in header?', + 'app_public_viewing' => 'Allow public viewing?', + 'app_secure_images' => 'Enable higher security image uploads?', + 'app_secure_images_desc' => 'For performance reasons, all images are public. This option adds a random, hard-to-guess string in front of image urls. Ensure directory indexes are not enabled to prevent easy access.', + 'app_editor' => 'Page editor', + 'app_editor_desc' => 'Select which editor will be used by all users to edit pages.', + 'app_custom_html' => 'Custom HTML head content', + 'app_custom_html_desc' => 'Any content added here will be inserted into the bottom of the section of every page. This is handy for overriding styles or adding analytics code.', + 'app_logo' => 'Application logo', + 'app_logo_desc' => 'This image should be 43px in height.
    Large images will be scaled down.', + 'app_primary_color' => 'Application primary color', + 'app_primary_color_desc' => 'This should be a hex value.
    Leave empty to reset to the default color.', + 'app_homepage' => 'Application Homepage', + 'app_homepage_desc' => 'Select a page to show on the homepage instead of the default view. Page permissions are ignored for selected pages.', + 'app_homepage_default' => 'Default homepage view chosen', + 'app_homepage_books' => 'Or select the books page as your homepage. This will override any page selected as your homepage.', + 'app_disable_comments' => 'Disable comments', + 'app_disable_comments_desc' => 'Disable comments across all pages in the application. Existing comments are not shown.', + + /** + * Registration settings + */ + + 'reg_settings' => 'Registration Settings', + 'reg_allow' => 'Allow registration?', + 'reg_default_role' => 'Default user role after registration', + 'reg_confirm_email' => 'Require email confirmation?', + 'reg_confirm_email_desc' => 'If domain restriction is used then email confirmation will be required and the below value will be ignored.', + 'reg_confirm_restrict_domain' => 'Restrict registration to domain', + 'reg_confirm_restrict_domain_desc' => 'Enter a comma separated list of email domains you would like to restrict registration to. Users will be sent an email to confirm their address before being allowed to interact with the application.
    Note that users will be able to change their email addresses after successful registration.', + 'reg_confirm_restrict_domain_placeholder' => 'No restriction set', + + /** + * Maintenance settings + */ + + 'maint' => 'Maintenance', + 'maint_image_cleanup' => 'Cleanup Images', + 'maint_image_cleanup_desc' => "Scans page & revision content to check which images and drawings are currently in use and which images are redundant. Ensure you create a full database and image backup before running this.", + 'maint_image_cleanup_ignore_revisions' => 'Ignore images in revisions', + 'maint_image_cleanup_run' => 'Run Cleanup', + 'maint_image_cleanup_warning' => ':count potentially unused images were found. Are you sure you want to delete these images?', + 'maint_image_cleanup_success' => ':count potentially unused images found and deleted!', + 'maint_image_cleanup_nothing_found' => 'No unused images found, Nothing deleted!', + + /** + * Role settings + */ + + 'roles' => 'Roles', + 'role_user_roles' => 'User Roles', + 'role_create' => 'Create New Role', + 'role_create_success' => 'Role successfully created', + 'role_delete' => 'Delete Role', + 'role_delete_confirm' => 'This will delete the role with the name \':roleName\'.', + 'role_delete_users_assigned' => 'This role has :userCount users assigned to it. If you would like to migrate the users from this role select a new role below.', + 'role_delete_no_migration' => "Don't migrate users", + 'role_delete_sure' => 'Are you sure you want to delete this role?', + 'role_delete_success' => 'Role successfully deleted', + 'role_edit' => 'Edit Role', + 'role_details' => 'Role Details', + 'role_name' => 'Role Name', + 'role_desc' => 'Short Description of Role', + 'role_external_auth_id' => 'External Authentication IDs', + 'role_system' => 'System Permissions', + 'role_manage_users' => 'Manage users', + 'role_manage_roles' => 'Manage roles & role permissions', + 'role_manage_entity_permissions' => 'Manage all book, chapter & page permissions', + 'role_manage_own_entity_permissions' => 'Manage permissions on own book, chapter & pages', + 'role_manage_settings' => 'Manage app settings', + 'role_asset' => 'Asset Permissions', + 'role_asset_desc' => 'These permissions control default access to the assets within the system. Permissions on Books, Chapters and Pages will override these permissions.', + 'role_all' => 'All', + 'role_own' => 'Own', + 'role_controlled_by_asset' => 'Controlled by the asset they are uploaded to', + 'role_save' => 'Save Role', + 'role_update_success' => 'Role successfully updated', + 'role_users' => 'Users in this role', + 'role_users_none' => 'No users are currently assigned to this role', + + /** + * Users + */ + + 'users' => 'Users', + 'user_profile' => 'User Profile', + 'users_add_new' => 'Add New User', + 'users_search' => 'Search Users', + 'users_role' => 'User Roles', + 'users_external_auth_id' => 'External Authentication ID', + 'users_password_warning' => 'Only fill the below if you would like to change your password:', + 'users_system_public' => 'This user represents any guest users that visit your instance. It cannot be used to log in but is assigned automatically.', + 'users_delete' => 'Delete User', + 'users_delete_named' => 'Delete user :userName', + 'users_delete_warning' => 'This will fully delete this user with the name \':userName\' from the system.', + 'users_delete_confirm' => 'Are you sure you want to delete this user?', + 'users_delete_success' => 'Users successfully removed', + 'users_edit' => 'Edit User', + 'users_edit_profile' => 'Edit Profile', + 'users_edit_success' => 'User successfully updated', + 'users_avatar' => 'User Avatar', + 'users_avatar_desc' => 'This image should be approx 256px square.', + 'users_preferred_language' => 'Preferred Language', + 'users_social_accounts' => 'Social Accounts', + 'users_social_accounts_info' => 'Here you can connect your other accounts for quicker and easier login. Disconnecting an account here does not previously authorized access. Revoke access from your profile settings on the connected social account.', + 'users_social_connect' => 'Connect Account', + 'users_social_disconnect' => 'Disconnect Account', + 'users_social_connected' => ':socialAccount account was successfully attached to your profile.', + 'users_social_disconnected' => ':socialAccount account was successfully disconnected from your profile.', + + // Since these labels are already localized this array does not need to be + // translated in the language-specific files. + // DELETE BELOW IF COPIED FROM EN + /////////////////////////////////// + 'language_select' => [ + 'en' => 'English', + 'de' => 'Deutsch', + 'es' => 'Español', + 'es_AR' => 'Español Argentina', + 'fr' => 'Français', + 'nl' => 'Nederlands', + 'pt_BR' => 'Português do Brasil', + 'sk' => 'Slovensky', + 'sv' => 'Svenska', + 'ja' => '日本語', + 'pl' => 'Polski', + 'it' => 'Italian', + 'ru' => 'Русский', + 'zh_CN' => '简体中文', + 'zh_TW' => '繁體中文' + ] + /////////////////////////////////// +]; diff --git a/resources/lang/ar/validation.php b/resources/lang/ar/validation.php new file mode 100644 index 000000000..b75af7485 --- /dev/null +++ b/resources/lang/ar/validation.php @@ -0,0 +1,108 @@ + 'The :attribute must be accepted.', + 'active_url' => 'The :attribute is not a valid URL.', + 'after' => 'The :attribute must be a date after :date.', + 'alpha' => 'The :attribute may only contain letters.', + 'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.', + 'alpha_num' => 'The :attribute may only contain letters and numbers.', + 'array' => 'The :attribute must be an array.', + 'before' => 'The :attribute must be a date before :date.', + 'between' => [ + 'numeric' => 'The :attribute must be between :min and :max.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'string' => 'The :attribute must be between :min and :max characters.', + 'array' => 'The :attribute must have between :min and :max items.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'date' => 'The :attribute is not a valid date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'email' => 'The :attribute must be a valid email address.', + 'filled' => 'The :attribute field is required.', + 'exists' => 'The selected :attribute is invalid.', + 'image' => 'The :attribute must be an image.', + 'in' => 'The selected :attribute is invalid.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'max' => [ + 'numeric' => 'The :attribute may not be greater than :max.', + 'file' => 'The :attribute may not be greater than :max kilobytes.', + 'string' => 'The :attribute may not be greater than :max characters.', + 'array' => 'The :attribute may not have more than :max items.', + ], + 'mimes' => 'The :attribute must be a file of type: :values.', + 'min' => [ + 'numeric' => 'The :attribute must be at least :min.', + 'file' => 'The :attribute must be at least :min kilobytes.', + 'string' => 'The :attribute must be at least :min characters.', + 'array' => 'The :attribute must have at least :min items.', + ], + 'not_in' => 'The selected :attribute is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'regex' => 'The :attribute format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values is present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'size' => [ + 'numeric' => 'The :attribute must be :size.', + 'file' => 'The :attribute must be :size kilobytes.', + 'string' => 'The :attribute must be :size characters.', + 'array' => 'The :attribute must contain :size items.', + ], + 'string' => 'The :attribute must be a string.', + 'timezone' => 'The :attribute must be a valid zone.', + 'unique' => 'The :attribute has already been taken.', + 'url' => 'The :attribute format is invalid.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'password-confirm' => [ + 'required_with' => 'Password confirmation required', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => [], + +]; From f5ca7ab1c89ef29edd6384a024911b061c848fbe Mon Sep 17 00:00:00 2001 From: kmoj86 Date: Mon, 23 Jul 2018 18:19:17 +0300 Subject: [PATCH 024/183] Update entities.php --- resources/lang/ar/entities.php | 74 +++++++++++++++++----------------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/resources/lang/ar/entities.php b/resources/lang/ar/entities.php index 93025ffd4..e4c2a7ee9 100644 --- a/resources/lang/ar/entities.php +++ b/resources/lang/ar/entities.php @@ -4,51 +4,51 @@ return [ /** * Shared */ - 'recently_created' => 'Recently Created', - 'recently_created_pages' => 'Recently Created Pages', - 'recently_updated_pages' => 'Recently Updated Pages', - 'recently_created_chapters' => 'Recently Created Chapters', - 'recently_created_books' => 'Recently Created Books', - 'recently_update' => 'Recently Updated', - 'recently_viewed' => 'Recently Viewed', - 'recent_activity' => 'Recent Activity', - 'create_now' => 'Create one now', - 'revisions' => 'Revisions', - 'meta_revision' => 'Revision #:revisionCount', - 'meta_created' => 'Created :timeLength', - 'meta_created_name' => 'Created :timeLength by :user', - 'meta_updated' => 'Updated :timeLength', - 'meta_updated_name' => 'Updated :timeLength by :user', + 'recently_created' => 'أنشئت مؤخراً', + 'recently_created_pages' => 'صفحات أنشئت مؤخراً', + 'recently_updated_pages' => 'صفحات حُدثت مؤخراً', + 'recently_created_chapters' => 'فصول أنشئت مؤخراً', + 'recently_created_books' => 'كتب أنشئت مؤخراً', + 'recently_update' => 'حُدثت مؤخراً', + 'recently_viewed' => 'عُرضت مؤخراً', + 'recent_activity' => 'نشاطات حديثة', + 'create_now' => 'أنشئ الآن', + 'revisions' => 'مراجعات', + 'meta_revision' => 'مراجعة #:revisionCount', + 'meta_created' => 'أنشئ :timeLength', + 'meta_created_name' => 'أنشئ :timeLength بواسطة :user', + 'meta_updated' => 'مُحدث :timeLength', + 'meta_updated_name' => 'مُحدث :timeLength بواسطة :user', 'entity_select' => 'Entity Select', - 'images' => 'Images', - 'my_recent_drafts' => 'My Recent Drafts', - 'my_recently_viewed' => 'My Recently Viewed', - 'no_pages_viewed' => 'You have not viewed any pages', - 'no_pages_recently_created' => 'No pages have been recently created', - 'no_pages_recently_updated' => 'No pages have been recently updated', - 'export' => 'Export', + 'images' => 'صور', + 'my_recent_drafts' => 'مسوداتي الحديثة', + 'my_recently_viewed' => 'ما عرضته مؤخراً', + 'no_pages_viewed' => 'لم تستعرض أي صفحات', + 'no_pages_recently_created' => 'لم يتم إنشاء أي صفحات مؤخراً', + 'no_pages_recently_updated' => 'لم يتم تحديث أي صفحات مؤخراً', + 'export' => 'تصدير', 'export_html' => 'Contained Web File', - 'export_pdf' => 'PDF File', - 'export_text' => 'Plain Text File', + 'export_pdf' => 'ملف PDF', + 'export_text' => 'ملف نص عادي', /** * Permissions and restrictions */ - 'permissions' => 'Permissions', - 'permissions_intro' => 'Once enabled, These permissions will take priority over any set role permissions.', - 'permissions_enable' => 'Enable Custom Permissions', - 'permissions_save' => 'Save Permissions', + 'permissions' => 'الأذونات', + 'permissions_intro' => 'في حال التفعيل, ستتم تبدية هذه الأذونات على أذونات الأدوار.', + 'permissions_enable' => 'تفعيل الأذونات المخصصة', + 'permissions_save' => 'حفظ الأذونات', /** - * Search + * Search // */ - 'search_results' => 'Search Results', - 'search_total_results_found' => ':count result found|:count total results found', - 'search_clear' => 'Clear Search', - 'search_no_pages' => 'No pages matched this search', - 'search_for_term' => 'Search for :term', - 'search_more' => 'More Results', - 'search_filters' => 'Search Filters', + 'search_results' => 'نتائج البحث', + 'search_total_results_found' => 'عدد النتائج :count|مجموع النتائج :count', + 'search_clear' => 'مسح البحث', + 'search_no_pages' => 'لم يطابق بحثكم أي صفحة', + 'search_for_term' => 'ابحث عن :term', + 'search_more' => 'المزيد من النتائج', + 'search_filters' => 'تصفية البحث', 'search_content_type' => 'Content Type', 'search_exact_matches' => 'Exact Matches', 'search_tags' => 'Tag Searches', @@ -265,4 +265,4 @@ return [ 'comment_updated_success' => 'Comment updated', 'comment_delete_confirm' => 'Are you sure you want to delete this comment?', 'comment_in_reply_to' => 'In reply to :commentId', -]; \ No newline at end of file +]; From 6bae16f7e9b78eb17b99105de7a8528ae737505a Mon Sep 17 00:00:00 2001 From: Khalid Date: Tue, 24 Jul 2018 18:11:55 +0300 Subject: [PATCH 025/183] fully translated "common" and partially translated "entities" --- resources/lang/ar/common.php | 2 +- resources/lang/ar/entities.php | 104 ++++++++++++++++----------------- 2 files changed, 53 insertions(+), 53 deletions(-) diff --git a/resources/lang/ar/common.php b/resources/lang/ar/common.php index 5c873f808..3376cc61c 100644 --- a/resources/lang/ar/common.php +++ b/resources/lang/ar/common.php @@ -35,7 +35,7 @@ return [ 'reply' => 'رد', 'delete' => 'حذف', 'search' => 'بحث', - 'search_clear' => 'تصفية البحث', + 'search_clear' => 'مسح البحث', 'reset' => 'إعادة تعيين', 'remove' => 'إزالة', 'add' => 'إضافة', diff --git a/resources/lang/ar/entities.php b/resources/lang/ar/entities.php index e4c2a7ee9..ef50eb065 100644 --- a/resources/lang/ar/entities.php +++ b/resources/lang/ar/entities.php @@ -49,67 +49,67 @@ return [ 'search_for_term' => 'ابحث عن :term', 'search_more' => 'المزيد من النتائج', 'search_filters' => 'تصفية البحث', - 'search_content_type' => 'Content Type', - 'search_exact_matches' => 'Exact Matches', - 'search_tags' => 'Tag Searches', - 'search_viewed_by_me' => 'Viewed by me', - 'search_not_viewed_by_me' => 'Not viewed by me', - 'search_permissions_set' => 'Permissions set', - 'search_created_by_me' => 'Created by me', - 'search_updated_by_me' => 'Updated by me', - 'search_updated_before' => 'Updated before', - 'search_updated_after' => 'Updated after', - 'search_created_before' => 'Created before', - 'search_created_after' => 'Created after', - 'search_set_date' => 'Set Date', - 'search_update' => 'Update Search', + 'search_content_type' => 'نوع المحتوى', + 'search_exact_matches' => 'نتائج مطابقة تماماً', + 'search_tags' => 'بحث الوسوم', + 'search_viewed_by_me' => 'تم استعراضها من قبلي', + 'search_not_viewed_by_me' => 'لم يتم استعراضها من قبلي', + 'search_permissions_set' => 'حزمة الأذونات', + 'search_created_by_me' => 'أنشئت بواسطتي', + 'search_updated_by_me' => 'حُدثت بواسطتي', + 'search_updated_before' => 'حدثت قبل', + 'search_updated_after' => 'حدثت بعد', + 'search_created_before' => 'أنشئت قبل', + 'search_created_after' => 'أنشئت بعد', + 'search_set_date' => 'تحديد التاريخ', + 'search_update' => 'تحديث البحث', /** * Books */ - 'book' => 'Book', - 'books' => 'Books', - 'x_books' => ':count Book|:count Books', - 'books_empty' => 'No books have been created', - 'books_popular' => 'Popular Books', - 'books_recent' => 'Recent Books', - 'books_new' => 'New Books', - 'books_popular_empty' => 'The most popular books will appear here.', - 'books_new_empty' => 'The most recently created books will appear here.', - 'books_create' => 'Create New Book', - 'books_delete' => 'Delete Book', - 'books_delete_named' => 'Delete Book :bookName', - 'books_delete_explain' => 'This will delete the book with the name \':bookName\'. All pages and chapters will be removed.', - 'books_delete_confirmation' => 'Are you sure you want to delete this book?', - 'books_edit' => 'Edit Book', - 'books_edit_named' => 'Edit Book :bookName', - 'books_form_book_name' => 'Book Name', - 'books_save' => 'Save Book', - 'books_permissions' => 'Book Permissions', - 'books_permissions_updated' => 'Book Permissions Updated', - 'books_empty_contents' => 'No pages or chapters have been created for this book.', - 'books_empty_create_page' => 'Create a new page', - 'books_empty_or' => 'or', - 'books_empty_sort_current_book' => 'Sort the current book', - 'books_empty_add_chapter' => 'Add a chapter', - 'books_permissions_active' => 'Book Permissions Active', - 'books_search_this' => 'Search this book', + 'book' => 'كتاب', + 'books' => 'كتب', + 'x_books' => ':count كتاب|:count كتب', + 'books_empty' => 'لم يتم إنشاء أي كتب', + 'books_popular' => 'كتب رائجة', + 'books_recent' => 'كتب حديثة', + 'books_new' => 'كتب جديدة', + 'books_popular_empty' => 'الكتب الأكثر رواجاً ستظهر هنا.', + 'books_new_empty' => 'الكتب المنشأة مؤخراً ستظهر هنا.', + 'books_create' => 'إنشاء كتاب جديد', + 'books_delete' => 'حذف كتاب', + 'books_delete_named' => 'حذف كتاب :bookName', + 'books_delete_explain' => 'سيتم حذف كتاب \':bookName\'. ستتم إزالة جميع الفصول والصفحات.', + 'books_delete_confirmation' => 'تأكيد حذف الكتاب؟', + 'books_edit' => 'تعديل الكتاب', + 'books_edit_named' => 'تعديل كتاب :bookName', + 'books_form_book_name' => 'اسم الكتاب', + 'books_save' => 'حفظ الكتاب', + 'books_permissions' => 'أذونات الكتاب', + 'books_permissions_updated' => 'تم تحديث أذونات الكتاب', + 'books_empty_contents' => 'لم يتم إنشاء أي صفحات أو فصول لهذا الكتاب.', + 'books_empty_create_page' => 'إنشاء صفحة جديدة', + 'books_empty_or' => 'أو', + 'books_empty_sort_current_book' => 'فرز الكتاب الحالي', + 'books_empty_add_chapter' => 'إضافة فصل', + 'books_permissions_active' => 'أذونات الكتاب مفعلة', + 'books_search_this' => 'البحث داخل هذا الكتاب', 'books_navigation' => 'Book Navigation', - 'books_sort' => 'Sort Book Contents', - 'books_sort_named' => 'Sort Book :bookName', - 'books_sort_show_other' => 'Show Other Books', - 'books_sort_save' => 'Save New Order', + 'books_sort' => 'فرز محتويات الكتاب', + 'books_sort_named' => 'فرز كتاب :bookName', + 'books_sort_show_other' => 'عرض كتب أخرى', + 'books_sort_save' => 'حفظ الترتيب الجديد', /** * Chapters */ - 'chapter' => 'Chapter', - 'chapters' => 'Chapters', - 'x_chapters' => ':count Chapter|:count Chapters', - 'chapters_popular' => 'Popular Chapters', - 'chapters_new' => 'New Chapter', - 'chapters_create' => 'Create New Chapter', - 'chapters_delete' => 'Delete Chapter', + 'chapter' => 'فصل', + 'chapters' => 'فصول', + 'x_chapters' => ':count فصل|:count فصول', + 'chapters_popular' => 'فصول رائجة', + 'chapters_new' => 'فصل جديد', + 'chapters_create' => 'إنشاء فصل جديد', + 'chapters_delete' => 'حذف الفصل', 'chapters_delete_named' => 'Delete Chapter :chapterName', 'chapters_delete_explain' => 'This will delete the chapter with the name \':chapterName\'. All pages will be removed and added directly to the parent book.', 'chapters_delete_confirm' => 'Are you sure you want to delete this chapter?', From 0f2ffa95453d8007d63178a19a5b27ea0b72b71b Mon Sep 17 00:00:00 2001 From: Khalid Date: Tue, 24 Jul 2018 21:36:12 +0300 Subject: [PATCH 026/183] translated to Arabic --- resources/lang/ar/auth.php | 2 +- resources/lang/ar/common.php | 2 +- resources/lang/ar/components.php | 2 +- resources/lang/ar/entities.php | 278 +++++++++++++++---------------- resources/lang/ar/settings.php | 19 --- 5 files changed, 142 insertions(+), 161 deletions(-) diff --git a/resources/lang/ar/auth.php b/resources/lang/ar/auth.php index 9f1c7ce85..bad0910a2 100644 --- a/resources/lang/ar/auth.php +++ b/resources/lang/ar/auth.php @@ -58,7 +58,7 @@ return [ /** - * Email Confirmation // إذا لم يتم إيجاد الرسالة, بإمكانكم إعادة إرسال رسالة التأكيد عن طريق تعبئة النموذج أدناه + * Email Confirmation */ 'email_confirm_subject' => 'تأكيد بريدكم الإلكتروني لتطبيق :appName', 'email_confirm_greeting' => 'شكرا لانضمامكم إلى :appName!', diff --git a/resources/lang/ar/common.php b/resources/lang/ar/common.php index 3376cc61c..2708cac71 100644 --- a/resources/lang/ar/common.php +++ b/resources/lang/ar/common.php @@ -24,7 +24,7 @@ return [ /** * Actions */ - 'actions' => 'Actions', + 'actions' => 'Actions', // جار البحث عن الترجمة الأنسب 'view' => 'عرض', 'create' => 'إنشاء', 'update' => 'تحديث', diff --git a/resources/lang/ar/components.php b/resources/lang/ar/components.php index f6cec1d01..f98558935 100644 --- a/resources/lang/ar/components.php +++ b/resources/lang/ar/components.php @@ -2,7 +2,7 @@ return [ /** - * Image Manager / قم بإسقاط الصورة أو اضغط هنا للرفع + * Image Manager */ 'image_select' => 'تحديد صورة', 'image_all' => 'الكل', diff --git a/resources/lang/ar/entities.php b/resources/lang/ar/entities.php index ef50eb065..3e249efaf 100644 --- a/resources/lang/ar/entities.php +++ b/resources/lang/ar/entities.php @@ -27,7 +27,7 @@ return [ 'no_pages_recently_created' => 'لم يتم إنشاء أي صفحات مؤخراً', 'no_pages_recently_updated' => 'لم يتم تحديث أي صفحات مؤخراً', 'export' => 'تصدير', - 'export_html' => 'Contained Web File', + 'export_html' => 'صفحة ويب', 'export_pdf' => 'ملف PDF', 'export_text' => 'ملف نص عادي', @@ -77,7 +77,7 @@ return [ 'books_popular_empty' => 'الكتب الأكثر رواجاً ستظهر هنا.', 'books_new_empty' => 'الكتب المنشأة مؤخراً ستظهر هنا.', 'books_create' => 'إنشاء كتاب جديد', - 'books_delete' => 'حذف كتاب', + 'books_delete' => 'حذف الكتاب', 'books_delete_named' => 'حذف كتاب :bookName', 'books_delete_explain' => 'سيتم حذف كتاب \':bookName\'. ستتم إزالة جميع الفصول والصفحات.', 'books_delete_confirmation' => 'تأكيد حذف الكتاب؟', @@ -93,8 +93,8 @@ return [ 'books_empty_sort_current_book' => 'فرز الكتاب الحالي', 'books_empty_add_chapter' => 'إضافة فصل', 'books_permissions_active' => 'أذونات الكتاب مفعلة', - 'books_search_this' => 'البحث داخل هذا الكتاب', - 'books_navigation' => 'Book Navigation', + 'books_search_this' => 'البحث في هذا الكتاب', + 'books_navigation' => 'Book Navigation', // جار البحث عن الترجمة الأنسب 'books_sort' => 'فرز محتويات الكتاب', 'books_sort_named' => 'فرز كتاب :bookName', 'books_sort_show_other' => 'عرض كتب أخرى', @@ -110,159 +110,159 @@ return [ 'chapters_new' => 'فصل جديد', 'chapters_create' => 'إنشاء فصل جديد', 'chapters_delete' => 'حذف الفصل', - 'chapters_delete_named' => 'Delete Chapter :chapterName', - 'chapters_delete_explain' => 'This will delete the chapter with the name \':chapterName\'. All pages will be removed and added directly to the parent book.', - 'chapters_delete_confirm' => 'Are you sure you want to delete this chapter?', - 'chapters_edit' => 'Edit Chapter', - 'chapters_edit_named' => 'Edit Chapter :chapterName', - 'chapters_save' => 'Save Chapter', - 'chapters_move' => 'Move Chapter', - 'chapters_move_named' => 'Move Chapter :chapterName', - 'chapter_move_success' => 'Chapter moved to :bookName', - 'chapters_permissions' => 'Chapter Permissions', - 'chapters_empty' => 'No pages are currently in this chapter.', - 'chapters_permissions_active' => 'Chapter Permissions Active', - 'chapters_permissions_success' => 'Chapter Permissions Updated', - 'chapters_search_this' => 'Search this chapter', + 'chapters_delete_named' => 'حذف فصل :chapterName', + 'chapters_delete_explain' => 'سيتم حذف فصل \':chapterName\'. جميع الصفحات ستزال وستتم إضافتها مباشرة للكتاب الرئيسي.', + 'chapters_delete_confirm' => 'تأكيد حذف الفصل؟', + 'chapters_edit' => 'تعديل الفصل', + 'chapters_edit_named' => 'تعديل فصل :chapterName', + 'chapters_save' => 'حفظ الفصل', + 'chapters_move' => 'نقل الفصل', + 'chapters_move_named' => 'نقل فصل :chapterName', + 'chapter_move_success' => 'تم نقل الفصل إلى :bookName', + 'chapters_permissions' => 'أذونات الفصل', + 'chapters_empty' => 'لا توجد أي صفحات في هذا الفصل حالياً', + 'chapters_permissions_active' => 'أذونات الفصل مفعلة', + 'chapters_permissions_success' => 'تم تحديث أذونات الفصل', + 'chapters_search_this' => 'البحث في هذا الفصل', /** * Pages */ - 'page' => 'Page', - 'pages' => 'Pages', - 'x_pages' => ':count Page|:count Pages', - 'pages_popular' => 'Popular Pages', - 'pages_new' => 'New Page', - 'pages_attachments' => 'Attachments', - 'pages_navigation' => 'Page Navigation', - 'pages_delete' => 'Delete Page', - 'pages_delete_named' => 'Delete Page :pageName', - 'pages_delete_draft_named' => 'Delete Draft Page :pageName', - 'pages_delete_draft' => 'Delete Draft Page', - 'pages_delete_success' => 'Page deleted', - 'pages_delete_draft_success' => 'Draft page deleted', - 'pages_delete_confirm' => 'Are you sure you want to delete this page?', - 'pages_delete_draft_confirm' => 'Are you sure you want to delete this draft page?', - 'pages_editing_named' => 'Editing Page :pageName', - 'pages_edit_toggle_header' => 'Toggle header', - 'pages_edit_save_draft' => 'Save Draft', - 'pages_edit_draft' => 'Edit Page Draft', - 'pages_editing_draft' => 'Editing Draft', - 'pages_editing_page' => 'Editing Page', - 'pages_edit_draft_save_at' => 'Draft saved at ', - 'pages_edit_delete_draft' => 'Delete Draft', - 'pages_edit_discard_draft' => 'Discard Draft', - 'pages_edit_set_changelog' => 'Set Changelog', - 'pages_edit_enter_changelog_desc' => 'Enter a brief description of the changes you\'ve made', - 'pages_edit_enter_changelog' => 'Enter Changelog', - 'pages_save' => 'Save Page', - 'pages_title' => 'Page Title', - 'pages_name' => 'Page Name', - 'pages_md_editor' => 'Editor', - 'pages_md_preview' => 'Preview', - 'pages_md_insert_image' => 'Insert Image', - 'pages_md_insert_link' => 'Insert Entity Link', - 'pages_md_insert_drawing' => 'Insert Drawing', - 'pages_not_in_chapter' => 'Page is not in a chapter', - 'pages_move' => 'Move Page', - 'pages_move_success' => 'Page moved to ":parentName"', - 'pages_copy' => 'Copy Page', - 'pages_copy_desination' => 'Copy Destination', - 'pages_copy_success' => 'Page successfully copied', - 'pages_permissions' => 'Page Permissions', - 'pages_permissions_success' => 'Page permissions updated', - 'pages_revision' => 'Revision', - 'pages_revisions' => 'Page Revisions', - 'pages_revisions_named' => 'Page Revisions for :pageName', - 'pages_revision_named' => 'Page Revision for :pageName', - 'pages_revisions_created_by' => 'Created By', - 'pages_revisions_date' => 'Revision Date', + 'page' => 'صفحة', + 'pages' => 'صفحات', + 'x_pages' => ':count صفحة|:count صفحات', + 'pages_popular' => 'صفحات رائجة', + 'pages_new' => 'صفحة جديدة', + 'pages_attachments' => 'مرفقات', + 'pages_navigation' => 'Page Navigation', // جار البحث عن الترجمة الأنسب + 'pages_delete' => 'حذف الصفحة', + 'pages_delete_named' => 'حذف صفحة :pageName', + 'pages_delete_draft_named' => 'حذف مسودة :pageName', + 'pages_delete_draft' => 'حذف المسودة', + 'pages_delete_success' => 'تم حذف الصفحة', + 'pages_delete_draft_success' => 'تم حذف المسودة', + 'pages_delete_confirm' => 'تأكيد حذف الصفحة؟', + 'pages_delete_draft_confirm' => 'تأكيد حذف المسودة؟', + 'pages_editing_named' => ':pageName قيد التعديل', + 'pages_edit_toggle_header' => 'Toggle header', // جار البحث عن الترجمة الأنسب + 'pages_edit_save_draft' => 'حفظ المسودة', + 'pages_edit_draft' => 'تعديل مسودة الصفحة', + 'pages_editing_draft' => 'المسودة قيد التعديل', + 'pages_editing_page' => 'الصفحة قيد التعديل', + 'pages_edit_draft_save_at' => 'تم خفظ المسودة في ', + 'pages_edit_delete_draft' => 'حذف المسودة', + 'pages_edit_discard_draft' => 'التخلص من المسودة', + 'pages_edit_set_changelog' => 'تثبيت سجل التعديل', + 'pages_edit_enter_changelog_desc' => 'ضع وصف مختصر للتعديلات التي تمت', + 'pages_edit_enter_changelog' => 'أدخل سجل التعديل', + 'pages_save' => 'حفظ الصفحة', + 'pages_title' => 'عنوان الصفحة', + 'pages_name' => 'اسم الصفحة', + 'pages_md_editor' => 'المحرر', + 'pages_md_preview' => 'معاينة', + 'pages_md_insert_image' => 'إدخال صورة', + 'pages_md_insert_link' => 'Insert Entity Link', // جار البحث عن الترجمة الأنسب + 'pages_md_insert_drawing' => 'إدخال رسمة', + 'pages_not_in_chapter' => 'صفحة ليست في فصل', + 'pages_move' => 'نقل الصفحة', + 'pages_move_success' => 'تم نقل الصفحة إلى ":parentName"', + 'pages_copy' => 'نسخ الصفحة', + 'pages_copy_desination' => 'نسخ مكان الوصول', + 'pages_copy_success' => 'تم نسخ الصفحة بنجاح', + 'pages_permissions' => 'أذونات الصفحة', + 'pages_permissions_success' => 'تم تحديث أذونات الصفحة', + 'pages_revision' => 'مراجعة', + 'pages_revisions' => 'مراجعات الصفحة', + 'pages_revisions_named' => 'مراجعات صفحة :pageName', + 'pages_revision_named' => 'مراجعة صفحة :pageName', + 'pages_revisions_created_by' => 'أنشئ بواسطة', + 'pages_revisions_date' => 'تاريخ المراجعة', 'pages_revisions_number' => '#', - 'pages_revisions_changelog' => 'Changelog', - 'pages_revisions_changes' => 'Changes', - 'pages_revisions_current' => 'Current Version', - 'pages_revisions_preview' => 'Preview', - 'pages_revisions_restore' => 'Restore', - 'pages_revisions_none' => 'This page has no revisions', - 'pages_copy_link' => 'Copy Link', - 'pages_edit_content_link' => 'Edit Content', - 'pages_permissions_active' => 'Page Permissions Active', - 'pages_initial_revision' => 'Initial publish', - 'pages_initial_name' => 'New Page', - 'pages_editing_draft_notification' => 'You are currently editing a draft that was last saved :timeDiff.', - 'pages_draft_edited_notification' => 'This page has been updated by since that time. It is recommended that you discard this draft.', + 'pages_revisions_changelog' => 'سجل التعديل', + 'pages_revisions_changes' => 'التعديلات', + 'pages_revisions_current' => 'النسخة الحالية', + 'pages_revisions_preview' => 'معاينة', + 'pages_revisions_restore' => 'استرجاع', + 'pages_revisions_none' => 'لا توجد مراجعات لهذه الصفحة', + 'pages_copy_link' => 'نسخ الرابط', + 'pages_edit_content_link' => 'تعديل المحتوى', + 'pages_permissions_active' => 'أذونات الصفحة مفعلة', + 'pages_initial_revision' => 'نشر مبدئي', + 'pages_initial_name' => 'صفحة جديدة', + 'pages_editing_draft_notification' => 'جار تعديل مسودة لم يتم حفظها من :timeDiff.', + 'pages_draft_edited_notification' => 'تم تحديث هذه الصفحة منذ ذلك الوقت. من الأفضل التخلص من هذه المسودة.', 'pages_draft_edit_active' => [ - 'start_a' => ':count users have started editing this page', - 'start_b' => ':userName has started editing this page', - 'time_a' => 'since the page was last updated', - 'time_b' => 'in the last :minCount minutes', - 'message' => ':start :time. Take care not to overwrite each other\'s updates!', + 'start_a' => ':count من المستخدمين بدأوا بتعديل هذه الصفحة', + 'start_b' => ':userName بدأ بتعديل هذه الصفحة', + 'time_a' => 'منذ أن تم تحديث هذه الصفحة', + 'time_b' => 'في آخر :minCount دقيقة/دقائق', + 'message' => ':start :time. Take care not to overwrite each other\'s updates!', // جار البحث عن الترجمة الأنسب ], - 'pages_draft_discarded' => 'Draft discarded, The editor has been updated with the current page content', + 'pages_draft_discarded' => 'تم التخلص من المسودة. تم تحديث المحرر بمحتوى الصفحة الحالي', /** * Editor sidebar */ - 'page_tags' => 'Page Tags', - 'chapter_tags' => 'Chapter Tags', - 'book_tags' => 'Book Tags', - 'tag' => 'Tag', - 'tags' => 'Tags', - 'tag_value' => 'Tag Value (Optional)', - 'tags_explain' => "Add some tags to better categorise your content. \n You can assign a value to a tag for more in-depth organisation.", - 'tags_add' => 'Add another tag', - 'attachments' => 'Attachments', - 'attachments_explain' => 'Upload some files or attach some links to display on your page. These are visible in the page sidebar.', - 'attachments_explain_instant_save' => 'Changes here are saved instantly.', - 'attachments_items' => 'Attached Items', - 'attachments_upload' => 'Upload File', - 'attachments_link' => 'Attach Link', - 'attachments_set_link' => 'Set Link', - 'attachments_delete_confirm' => 'Click delete again to confirm you want to delete this attachment.', - 'attachments_dropzone' => 'Drop files or click here to attach a file', - 'attachments_no_files' => 'No files have been uploaded', - 'attachments_explain_link' => 'You can attach a link if you\'d prefer not to upload a file. This can be a link to another page or a link to a file in the cloud.', - 'attachments_link_name' => 'Link Name', - 'attachment_link' => 'Attachment link', - 'attachments_link_url' => 'Link to file', - 'attachments_link_url_hint' => 'Url of site or file', + 'page_tags' => 'وسوم الصفحة', + 'chapter_tags' => 'وسوم الفصل', + 'book_tags' => 'وسوم الكتاب', + 'tag' => 'وسم', + 'tags' => 'وسوم', + 'tag_value' => 'قيمة الوسم (اختياري)', + 'tags_explain' => "إضافة الوسوم تساعد بترتيب وتقسيم المحتوى. \n من الممكن وضع قيمة لكل وسم لترتيب أفضل وأدق.", + 'tags_add' => 'إضافة وسم آخر', + 'attachments' => 'المرفقات', + 'attachments_explain' => 'ارفع بعض الملفات أو أرفق بعض الروابط لعرضها بصفحتك. ستكون الملفات والروابط معروضة في الشريط الجانبي للصفحة.', + 'attachments_explain_instant_save' => 'سيتم حفظ التغييرات هنا بلحظتها', + 'attachments_items' => 'العناصر المرفقة', + 'attachments_upload' => 'رفع ملف', + 'attachments_link' => 'إرفاق رابط', + 'attachments_set_link' => 'تحديد الرابط', + 'attachments_delete_confirm' => 'اضغط على زر الحذف مرة أخرى لتأكيد حذف المرفق.', + 'attachments_dropzone' => 'أسقط الملفات أو اضغط هنا لإرفاق ملف', + 'attachments_no_files' => 'لم يتم رفع أي ملفات', + 'attachments_explain_link' => 'بالإمكان إرفاق رابط في حال عدم تفضيل رفع ملف. قد يكون الرابط لصفحة أخرى أو لملف في أحد خدمات التخزين السحابي.', + 'attachments_link_name' => 'اسم الرابط', + 'attachment_link' => 'رابط المرفق', + 'attachments_link_url' => 'Link to file', // جار البحث عن الترجمة الأنسب - هل المقصود الربط بالملف أو رابط يشير إلى ملف + 'attachments_link_url_hint' => 'رابط الموقع أو الملف', 'attach' => 'Attach', - 'attachments_edit_file' => 'Edit File', - 'attachments_edit_file_name' => 'File Name', - 'attachments_edit_drop_upload' => 'Drop files or click here to upload and overwrite', - 'attachments_order_updated' => 'Attachment order updated', - 'attachments_updated_success' => 'Attachment details updated', - 'attachments_deleted' => 'Attachment deleted', - 'attachments_file_uploaded' => 'File successfully uploaded', - 'attachments_file_updated' => 'File successfully updated', - 'attachments_link_attached' => 'Link successfully attached to page', + 'attachments_edit_file' => 'تعديل الملف', + 'attachments_edit_file_name' => 'اسم الملف', + 'attachments_edit_drop_upload' => 'أسقط الملفات أو اضغط هنا للرفع والاستبدال', + 'attachments_order_updated' => 'تم تحديث ترتيب المرفقات', + 'attachments_updated_success' => 'تم تحديث تفاصيل المرفق', + 'attachments_deleted' => 'تم حذف المرفق', + 'attachments_file_uploaded' => 'تم رفع الملف بنجاح', + 'attachments_file_updated' => 'تم تحديث الملف بنجاح', + 'attachments_link_attached' => 'تم إرفاق الرابط بالصفحة بنجاح', /** * Profile View */ - 'profile_user_for_x' => 'User for :time', - 'profile_created_content' => 'Created Content', - 'profile_not_created_pages' => ':userName has not created any pages', - 'profile_not_created_chapters' => ':userName has not created any chapters', - 'profile_not_created_books' => ':userName has not created any books', + 'profile_user_for_x' => 'User for :time', // جار البحث عن الترجمة الأنسب + 'profile_created_content' => 'المحتوى المنشأ', + 'profile_not_created_pages' => 'لم يتم إنشاء أي صفحات بواسطة :userName', + 'profile_not_created_chapters' => 'لم يتم إنشاء أي فصول بواسطة :userName', + 'profile_not_created_books' => 'لم يتم إنشاء أي كتب بواسطة :userName', /** * Comments */ - 'comment' => 'Comment', - 'comments' => 'Comments', - 'comment_add' => 'Add Comment', - 'comment_placeholder' => 'Leave a comment here', - 'comment_count' => '{0} No Comments|{1} 1 Comment|[2,*] :count Comments', - 'comment_save' => 'Save Comment', - 'comment_saving' => 'Saving comment...', - 'comment_deleting' => 'Deleting comment...', - 'comment_new' => 'New Comment', - 'comment_created' => 'commented :createDiff', - 'comment_updated' => 'Updated :updateDiff by :username', - 'comment_deleted_success' => 'Comment deleted', - 'comment_created_success' => 'Comment added', - 'comment_updated_success' => 'Comment updated', - 'comment_delete_confirm' => 'Are you sure you want to delete this comment?', - 'comment_in_reply_to' => 'In reply to :commentId', + 'comment' => 'تعليق', + 'comments' => 'تعليقات', + 'comment_add' => 'إضافة تعليق', + 'comment_placeholder' => 'ضع تعليقاً هنا', + 'comment_count' => '{0} ا توجد تعليقات|{1} تعليق واحد|{2} تعليقان|[3,*] :count تعليقات', + 'comment_save' => 'حفظ التعليق', + 'comment_saving' => 'جار حفظ التعليق...', + 'comment_deleting' => 'جار حذف التعليق...', + 'comment_new' => 'تعليق جديد', + 'comment_created' => 'تم التعليق :createDiff', + 'comment_updated' => 'تم التحديث :updateDiff بواسطة :username', + 'comment_deleted_success' => 'تم حذف التعليق', + 'comment_created_success' => 'تمت إضافة التعليق', + 'comment_updated_success' => 'تم تحديث التعليق', + 'comment_delete_confirm' => 'تأكيد حذف التعليق؟', + 'comment_in_reply_to' => 'رداً على :commentId', ]; diff --git a/resources/lang/ar/settings.php b/resources/lang/ar/settings.php index d6fbb6107..f81beb898 100755 --- a/resources/lang/ar/settings.php +++ b/resources/lang/ar/settings.php @@ -132,23 +132,4 @@ return [ // Since these labels are already localized this array does not need to be // translated in the language-specific files. // DELETE BELOW IF COPIED FROM EN - /////////////////////////////////// - 'language_select' => [ - 'en' => 'English', - 'de' => 'Deutsch', - 'es' => 'Español', - 'es_AR' => 'Español Argentina', - 'fr' => 'Français', - 'nl' => 'Nederlands', - 'pt_BR' => 'Português do Brasil', - 'sk' => 'Slovensky', - 'sv' => 'Svenska', - 'ja' => '日本語', - 'pl' => 'Polski', - 'it' => 'Italian', - 'ru' => 'Русский', - 'zh_CN' => '简体中文', - 'zh_TW' => '繁體中文' - ] - /////////////////////////////////// ]; From dcbb8ad960e07700c46ba27551d9c8d3103b526e Mon Sep 17 00:00:00 2001 From: Khalid Date: Tue, 24 Jul 2018 21:40:49 +0300 Subject: [PATCH 027/183] translated --- resources/lang/ar/common.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/lang/ar/common.php b/resources/lang/ar/common.php index 2708cac71..a28aaa83c 100644 --- a/resources/lang/ar/common.php +++ b/resources/lang/ar/common.php @@ -24,7 +24,7 @@ return [ /** * Actions */ - 'actions' => 'Actions', // جار البحث عن الترجمة الأنسب + 'actions' => 'Actions', // جار البحث عن الترجمة الأنسب: الإجراءات؟ 'view' => 'عرض', 'create' => 'إنشاء', 'update' => 'تحديث', From df88ffa159c1649fa9fd21fb796f608ea230be04 Mon Sep 17 00:00:00 2001 From: Khalid Date: Sat, 28 Jul 2018 00:13:33 +0300 Subject: [PATCH 028/183] translated --- resources/lang/ar/common.php | 2 +- resources/lang/ar/errors.php | 24 ++++++++++++------------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/resources/lang/ar/common.php b/resources/lang/ar/common.php index a28aaa83c..cc960c42c 100644 --- a/resources/lang/ar/common.php +++ b/resources/lang/ar/common.php @@ -24,7 +24,7 @@ return [ /** * Actions */ - 'actions' => 'Actions', // جار البحث عن الترجمة الأنسب: الإجراءات؟ + 'actions' => 'إجراءات', // جار البحث عن الترجمة الأنسب: الإجراءات؟ 'view' => 'عرض', 'create' => 'إنشاء', 'update' => 'تحديث', diff --git a/resources/lang/ar/errors.php b/resources/lang/ar/errors.php index a86a1cdfc..6b71f8319 100644 --- a/resources/lang/ar/errors.php +++ b/resources/lang/ar/errors.php @@ -49,19 +49,19 @@ return [ // Entities 'entity_not_found' => 'Entity not found', - 'book_not_found' => 'Book not found', - 'page_not_found' => 'Page not found', - 'chapter_not_found' => 'Chapter not found', - 'selected_book_not_found' => 'The selected book was not found', + 'book_not_found' => 'لم يتم العثور على الكتاب', + 'page_not_found' => 'لم يتم العثور على الصفحة', + 'chapter_not_found' => 'لم يتم العثور على الفصل', + 'selected_book_not_found' => 'لم يتم العثور على الكتاب المحدد', 'selected_book_chapter_not_found' => 'The selected Book or Chapter was not found', - 'guests_cannot_save_drafts' => 'Guests cannot save drafts', + 'guests_cannot_save_drafts' => 'لا يمكن حفظ المسودات من قبل الضيوف', // Users 'users_cannot_delete_only_admin' => 'You cannot delete the only admin', 'users_cannot_delete_guest' => 'You cannot delete the guest user', // Roles - 'role_cannot_be_edited' => 'This role cannot be edited', + 'role_cannot_be_edited' => 'لا يمكن تعديل هذا الدور', 'role_system_cannot_be_deleted' => 'This role is a system role and cannot be deleted', 'role_registration_default_cannot_delete' => 'This role cannot be deleted while set as the default registration role', @@ -70,13 +70,13 @@ return [ 'cannot_add_comment_to_draft' => 'You cannot add comments to a draft.', 'comment_add' => 'An error occurred while adding / updating the comment.', 'comment_delete' => 'An error occurred while deleting the comment.', - 'empty_comment' => 'Cannot add an empty comment.', + 'empty_comment' => 'لايمكن إضافة تعليق فارغ.', // Error pages - '404_page_not_found' => 'Page Not Found', + '404_page_not_found' => 'لم يتم العثور على الصفحة', 'sorry_page_not_found' => 'Sorry, The page you were looking for could not be found.', - 'return_home' => 'Return to home', - 'error_occurred' => 'An Error Occurred', - 'app_down' => ':appName is down right now', - 'back_soon' => 'It will be back up soon.', + 'return_home' => 'العودة للصفحة الرئيسية', + 'error_occurred' => 'حدث خطأ', + 'app_down' => ':appName لا يعمل حالياً', + 'back_soon' => 'سيعود للعمل قريباً.', ]; From 6ca8ccd330bc858aa6b8fa6e3ecd23fab013ffba Mon Sep 17 00:00:00 2001 From: Khalid Date: Sat, 28 Jul 2018 12:47:35 +0300 Subject: [PATCH 029/183] translated --- resources/lang/ar/common.php | 2 +- resources/lang/ar/errors.php | 84 ++++++++++++++++----------------- resources/lang/ar/passwords.php | 10 ++-- 3 files changed, 48 insertions(+), 48 deletions(-) diff --git a/resources/lang/ar/common.php b/resources/lang/ar/common.php index cc960c42c..9c978b454 100644 --- a/resources/lang/ar/common.php +++ b/resources/lang/ar/common.php @@ -24,7 +24,7 @@ return [ /** * Actions */ - 'actions' => 'إجراءات', // جار البحث عن الترجمة الأنسب: الإجراءات؟ + 'actions' => 'إجراءات', 'view' => 'عرض', 'create' => 'إنشاء', 'update' => 'تحديث', diff --git a/resources/lang/ar/errors.php b/resources/lang/ar/errors.php index 6b71f8319..928a5fd46 100644 --- a/resources/lang/ar/errors.php +++ b/resources/lang/ar/errors.php @@ -7,74 +7,74 @@ return [ */ // Permissions - 'permission' => 'You do not have permission to access the requested page.', - 'permissionJson' => 'You do not have permission to perform the requested action.', + 'permission' => 'لم يؤذن لك بالدخول للصفحة المطلوبة.', + 'permissionJson' => 'لم يؤذن لك بعمل الإجراء المطلوب.', // Auth - 'error_user_exists_different_creds' => 'A user with the email :email already exists but with different credentials.', - 'email_already_confirmed' => 'Email has already been confirmed, Try logging in.', - 'email_confirmation_invalid' => 'This confirmation token is not valid or has already been used, Please try registering again.', - 'email_confirmation_expired' => 'The confirmation token has expired, A new confirmation email has been sent.', - 'ldap_fail_anonymous' => 'LDAP access failed using anonymous bind', - 'ldap_fail_authed' => 'LDAP access failed using given dn & password details', - 'ldap_extension_not_installed' => 'LDAP PHP extension not installed', - 'ldap_cannot_connect' => 'Cannot connect to ldap server, Initial connection failed', - 'social_no_action_defined' => 'No action defined', - 'social_login_bad_response' => "Error received during :socialAccount login: \n:error", - 'social_account_in_use' => 'This :socialAccount account is already in use, Try logging in via the :socialAccount option.', - 'social_account_email_in_use' => 'The email :email is already in use. If you already have an account you can connect your :socialAccount account from your profile settings.', - 'social_account_existing' => 'This :socialAccount is already attached to your profile.', - 'social_account_already_used_existing' => 'This :socialAccount account is already used by another user.', - 'social_account_not_used' => 'This :socialAccount account is not linked to any users. Please attach it in your profile settings. ', - 'social_account_register_instructions' => 'If you do not yet have an account, You can register an account using the :socialAccount option.', - 'social_driver_not_found' => 'Social driver not found', - 'social_driver_not_configured' => 'Your :socialAccount social settings are not configured correctly.', + 'error_user_exists_different_creds' => 'يوجد مستخدم ببيانات مختلفة مسجل بالنظام للبريد الإلكتروني :email.', + 'email_already_confirmed' => 'تم تأكيد البريد الإلكتروني من قبل, الرجاء محاولة تسجيل الدخول.', + 'email_confirmation_invalid' => 'رابط التأكيد غير صحيح أو قد تم استخدامه من قبل, الرجاء محاولة التسجيل من جديد.', + 'email_confirmation_expired' => 'صلاحية رابط التأكيد انتهت, تم إرسال رسالة تأكيد جديدة لعنوان البريد الإلكتروني.', + 'ldap_fail_anonymous' => 'LDAP access failed using anonymous bind', // جار البحث عن الترجمة الأنسب + 'ldap_fail_authed' => 'LDAP access failed using given dn & password details', // جار البحث عن الترجمة الأنسب + 'ldap_extension_not_installed' => 'لم يتم تثبيت إضافة LDAP PHP', + 'ldap_cannot_connect' => 'لا يمكن الاتصال بخادم ldap, فشل الاتصال المبدئي', + 'social_no_action_defined' => 'لم يتم تعريف أي إجراء', + 'social_login_bad_response' => "حصل خطأ خلال تسجيل الدخول باستخدام :socialAccount \n:error", + 'social_account_in_use' => 'This :socialAccount account is already in use, Try logging in via the :socialAccount option.', // جار البحث عن الترجمة الأنسب + 'social_account_email_in_use' => 'The email :email is already in use. If you already have an account you can connect your :socialAccount account from your profile settings.', // جار البحث عن الترجمة الأنسب + 'social_account_existing' => 'This :socialAccount is already attached to your profile.', // جار البحث عن الترجمة الأنسب + 'social_account_already_used_existing' => 'This :socialAccount account is already used by another user.', // جار البحث عن الترجمة الأنسب + 'social_account_not_used' => 'This :socialAccount account is not linked to any users. Please attach it in your profile settings. ', // جار البحث عن الترجمة الأنسب + 'social_account_register_instructions' => 'إذا لم يكن لديك حساب فيمكنك التجسيل باستخدام خيار :socialAccount.', + 'social_driver_not_found' => 'Social driver not found', // جار البحث عن الترجمة الأنسب + 'social_driver_not_configured' => 'Your :socialAccount social settings are not configured correctly.', // جار البحث عن الترجمة الأنسب // System - 'path_not_writable' => 'File path :filePath could not be uploaded to. Ensure it is writable to the server.', - 'cannot_get_image_from_url' => 'Cannot get image from :url', - 'cannot_create_thumbs' => 'The server cannot create thumbnails. Please check you have the GD PHP extension installed.', - 'server_upload_limit' => 'The server does not allow uploads of this size. Please try a smaller file size.', - 'uploaded' => 'The server does not allow uploads of this size. Please try a smaller file size.', - 'image_upload_error' => 'An error occurred uploading the image', - 'image_upload_type_error' => 'The image type being uploaded is invalid', + 'path_not_writable' => 'لا يمكن الرفع إلى مسار :filePath. الرجاء التأكد من قابلية الكتابة إلى الخادم.', + 'cannot_get_image_from_url' => 'لا يمكن الحصول على الصورة من :url', + 'cannot_create_thumbs' => 'لا يمكن للخادم إنشاء صور مصغرة. الرجاء التأكد من تثبيت إضافة GD PHP.', + 'server_upload_limit' => 'الخادم لا يسمح برفع ملفات بهذا الحجم. الرجاء محاولة الرفع بحجم أصغر.', + 'uploaded' => 'الخادم لا يسمح برفع ملفات بهذا الحجم. الرجاء محاولة الرفع بحجم أصغر.', + 'image_upload_error' => 'حدث خطأ خلال رفع الصورة', + 'image_upload_type_error' => 'صيغة الصورة المرفوعة غير صالحة', // Attachments - 'attachment_page_mismatch' => 'Page mismatch during attachment update', - 'attachment_not_found' => 'Attachment not found', + 'attachment_page_mismatch' => 'Page mismatch during attachment update', // جار البحث عن الترجمة الأنسب + 'attachment_not_found' => 'لم يتم العثور على المرفق', // Pages - 'page_draft_autosave_fail' => 'Failed to save draft. Ensure you have internet connection before saving this page', - 'page_custom_home_deletion' => 'Cannot delete a page while it is set as a homepage', + 'page_draft_autosave_fail' => 'فشل حفظ المسودة. الرجاء التأكد من وجود اتصال بالإنترنت قبل حفظ الصفحة', + 'page_custom_home_deletion' => 'لا يمكن حذف الصفحة إذا كانت محددة كصفحة رئيسية', // Entities - 'entity_not_found' => 'Entity not found', + 'entity_not_found' => 'Entity not found', // جار البحث عن الترجمة الأنسب 'book_not_found' => 'لم يتم العثور على الكتاب', 'page_not_found' => 'لم يتم العثور على الصفحة', 'chapter_not_found' => 'لم يتم العثور على الفصل', 'selected_book_not_found' => 'لم يتم العثور على الكتاب المحدد', - 'selected_book_chapter_not_found' => 'The selected Book or Chapter was not found', + 'selected_book_chapter_not_found' => 'لم يتم العثور على الكتاب أو الفصل المحدد', 'guests_cannot_save_drafts' => 'لا يمكن حفظ المسودات من قبل الضيوف', // Users - 'users_cannot_delete_only_admin' => 'You cannot delete the only admin', - 'users_cannot_delete_guest' => 'You cannot delete the guest user', + 'users_cannot_delete_only_admin' => 'لا يمكن حذف المشرف الوحيد', + 'users_cannot_delete_guest' => 'لا يمكن حذف المستخدم الضيف', // Roles 'role_cannot_be_edited' => 'لا يمكن تعديل هذا الدور', - 'role_system_cannot_be_deleted' => 'This role is a system role and cannot be deleted', - 'role_registration_default_cannot_delete' => 'This role cannot be deleted while set as the default registration role', + 'role_system_cannot_be_deleted' => 'هذا الدور خاص بالنظام ولا يمكن حذفه', + 'role_registration_default_cannot_delete' => 'لا يمكن حذف الدور إذا كان مسجل كالدور الأساسي بعد تسجيل الحساب', // Comments - 'comment_list' => 'An error occurred while fetching the comments.', - 'cannot_add_comment_to_draft' => 'You cannot add comments to a draft.', - 'comment_add' => 'An error occurred while adding / updating the comment.', - 'comment_delete' => 'An error occurred while deleting the comment.', + 'comment_list' => 'حصل خطأ خلال جلب التعليقات.', + 'cannot_add_comment_to_draft' => 'لا يمكن إضافة تعليقات على مسودة.', + 'comment_add' => 'حصل خطاً خلال إضافة / تحديث التعليق.', + 'comment_delete' => 'حصل خطأ خلال حذف التعليق.', 'empty_comment' => 'لايمكن إضافة تعليق فارغ.', // Error pages '404_page_not_found' => 'لم يتم العثور على الصفحة', - 'sorry_page_not_found' => 'Sorry, The page you were looking for could not be found.', + 'sorry_page_not_found' => 'عفواً, لا يمكن العثور على الصفحة التي تبحث عنها.', 'return_home' => 'العودة للصفحة الرئيسية', 'error_occurred' => 'حدث خطأ', 'app_down' => ':appName لا يعمل حالياً', diff --git a/resources/lang/ar/passwords.php b/resources/lang/ar/passwords.php index 7c10cba1a..cbc2b995c 100644 --- a/resources/lang/ar/passwords.php +++ b/resources/lang/ar/passwords.php @@ -13,10 +13,10 @@ return [ | */ - 'password' => 'Passwords must be at least six characters and match the confirmation.', - 'user' => "We can't find a user with that e-mail address.", - 'token' => 'This password reset token is invalid.', - 'sent' => 'We have e-mailed your password reset link!', - 'reset' => 'Your password has been reset!', + 'password' => 'يجب أن تتكون كلمة المرور من ستة أحرف على الأقل وأن تطابق التأكيد.', + 'user' => "لم يتم العثور على مستخدم بعنوان البريد الإلكتروني المعطى.", + 'token' => 'رابط استعادة كلمة المرور غير صحيح.', + 'sent' => 'تم إرسال رابط استعادة كلمة المرور إلى بريدكم الإلكتروني!', + 'reset' => 'تم تجديد كلمة المرور الخاصة بكم!', ]; From 8774f1a3205ed80f2fd0e2dd67f31d8b2f1bf1a2 Mon Sep 17 00:00:00 2001 From: Khalid Date: Sat, 28 Jul 2018 13:02:19 +0300 Subject: [PATCH 030/183] translated --- resources/lang/ar/passwords.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/lang/ar/passwords.php b/resources/lang/ar/passwords.php index cbc2b995c..6af597f79 100644 --- a/resources/lang/ar/passwords.php +++ b/resources/lang/ar/passwords.php @@ -15,8 +15,8 @@ return [ 'password' => 'يجب أن تتكون كلمة المرور من ستة أحرف على الأقل وأن تطابق التأكيد.', 'user' => "لم يتم العثور على مستخدم بعنوان البريد الإلكتروني المعطى.", - 'token' => 'رابط استعادة كلمة المرور غير صحيح.', - 'sent' => 'تم إرسال رابط استعادة كلمة المرور إلى بريدكم الإلكتروني!', + 'token' => 'رابط تجديد كلمة المرور غير صحيح.', + 'sent' => 'تم إرسال رابط تجديد كلمة المرور إلى بريدكم الإلكتروني!', 'reset' => 'تم تجديد كلمة المرور الخاصة بكم!', ]; From 6eb63a1e03aca28743dd06fa49a8dae937113335 Mon Sep 17 00:00:00 2001 From: Khalid Date: Sat, 28 Jul 2018 14:13:12 +0300 Subject: [PATCH 031/183] translated --- resources/lang/ar/settings.php | 94 +++++++++++++++++----------------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/resources/lang/ar/settings.php b/resources/lang/ar/settings.php index f81beb898..3e1f135ed 100755 --- a/resources/lang/ar/settings.php +++ b/resources/lang/ar/settings.php @@ -8,72 +8,72 @@ return [ * including users and roles. */ - 'settings' => 'Settings', - 'settings_save' => 'Save Settings', - 'settings_save_success' => 'Settings saved', + 'settings' => 'الإعدادات', + 'settings_save' => 'حفظ الإعدادات', + 'settings_save_success' => 'تم حفظ الإعدادات', /** * App settings */ - 'app_settings' => 'App Settings', - 'app_name' => 'Application name', - 'app_name_desc' => 'This name is shown in the header and any emails.', - 'app_name_header' => 'Show Application name in header?', - 'app_public_viewing' => 'Allow public viewing?', - 'app_secure_images' => 'Enable higher security image uploads?', - 'app_secure_images_desc' => 'For performance reasons, all images are public. This option adds a random, hard-to-guess string in front of image urls. Ensure directory indexes are not enabled to prevent easy access.', - 'app_editor' => 'Page editor', - 'app_editor_desc' => 'Select which editor will be used by all users to edit pages.', - 'app_custom_html' => 'Custom HTML head content', - 'app_custom_html_desc' => 'Any content added here will be inserted into the bottom of the section of every page. This is handy for overriding styles or adding analytics code.', - 'app_logo' => 'Application logo', - 'app_logo_desc' => 'This image should be 43px in height.
    Large images will be scaled down.', - 'app_primary_color' => 'Application primary color', - 'app_primary_color_desc' => 'This should be a hex value.
    Leave empty to reset to the default color.', - 'app_homepage' => 'Application Homepage', - 'app_homepage_desc' => 'Select a page to show on the homepage instead of the default view. Page permissions are ignored for selected pages.', - 'app_homepage_default' => 'Default homepage view chosen', - 'app_homepage_books' => 'Or select the books page as your homepage. This will override any page selected as your homepage.', - 'app_disable_comments' => 'Disable comments', - 'app_disable_comments_desc' => 'Disable comments across all pages in the application. Existing comments are not shown.', + 'app_settings' => 'إعدادات التطبيق', + 'app_name' => 'اسم التطبيق', + 'app_name_desc' => 'سيتم عرض هذا الاسم في الترويسة وفي أي رسالة بريد إلكتروني.', + 'app_name_header' => 'عرض اسم التطبيق في الترويسة؟', + 'app_public_viewing' => 'السماح بالعرض على العامة؟', + 'app_secure_images' => 'Enable higher security image uploads?', // جار البحث عن الترجمة الأنسب + 'app_secure_images_desc' => 'For performance reasons, all images are public. This option adds a random, hard-to-guess string in front of image urls. Ensure directory indexes are not enabled to prevent easy access.', // جار البحث عن الترجمة الأنسب + 'app_editor' => 'محرر الصفحة', + 'app_editor_desc' => 'الرجاء اختيار محرر النص الذي سيستخدم من قبل جميع المستخدمين لتحرير الصفحات.', + 'app_custom_html' => 'Custom HTML head content', // جار البحث عن الترجمة الأنسب + 'app_custom_html_desc' => 'Any content added here will be inserted into the bottom of the section of every page. This is handy for overriding styles or adding analytics code.', // جار البحث عن الترجمة الأنسب + 'app_logo' => 'شعار التطبيق', + 'app_logo_desc' => 'يجب أن تكون الصورة بارتفاع 43 بكسل.
    سيتم تصغير الصور الأكبر من ذلك.', + 'app_primary_color' => 'اللون الأساسي للتطبيق', + 'app_primary_color_desc' => 'يجب أن تكون القيمة من نوع hex.
    اترك الخانة فارغة للرجوع للون الافتراضي.', + 'app_homepage' => 'الصفحة الرئيسية للتطبيق', + 'app_homepage_desc' => 'Select a page to show on the homepage instead of the default view. Page permissions are ignored for selected pages.', // جار البحث عن الترجمة الأنسب + 'app_homepage_default' => 'شكل الصفحة الافتراضية المختارة', + 'app_homepage_books' => 'Or select the books page as your homepage. This will override any page selected as your homepage.', // جار البحث عن الترجمة الأنسب + 'app_disable_comments' => 'تعطيل التعليقات', + 'app_disable_comments_desc' => 'Disable comments across all pages in the application. Existing comments are not shown.', // جار البحث عن الترجمة الأنسب /** * Registration settings */ - 'reg_settings' => 'Registration Settings', - 'reg_allow' => 'Allow registration?', - 'reg_default_role' => 'Default user role after registration', - 'reg_confirm_email' => 'Require email confirmation?', - 'reg_confirm_email_desc' => 'If domain restriction is used then email confirmation will be required and the below value will be ignored.', - 'reg_confirm_restrict_domain' => 'Restrict registration to domain', - 'reg_confirm_restrict_domain_desc' => 'Enter a comma separated list of email domains you would like to restrict registration to. Users will be sent an email to confirm their address before being allowed to interact with the application.
    Note that users will be able to change their email addresses after successful registration.', - 'reg_confirm_restrict_domain_placeholder' => 'No restriction set', + 'reg_settings' => 'إعدادات التسجيل', + 'reg_allow' => 'السماح بالتسجيل؟', + 'reg_default_role' => 'دور المستخدم الأساسي بعد التسجيل', + 'reg_confirm_email' => 'فرض التأكيد عن طريق البريد الإلكتروني؟', + 'reg_confirm_email_desc' => 'If domain restriction is used then email confirmation will be required and the below value will be ignored.', // جار البحث عن الترجمة الأنسب + 'reg_confirm_restrict_domain' => 'تقييد التسجيل على مجال محدد', + 'reg_confirm_restrict_domain_desc' => 'Enter a comma separated list of email domains you would like to restrict registration to. Users will be sent an email to confirm their address before being allowed to interact with the application.
    Note that users will be able to change their email addresses after successful registration.', // جار البحث عن الترجمة الأنسب + 'reg_confirm_restrict_domain_placeholder' => 'لم يتم اختيار أي قيود', /** * Maintenance settings */ - 'maint' => 'Maintenance', - 'maint_image_cleanup' => 'Cleanup Images', - 'maint_image_cleanup_desc' => "Scans page & revision content to check which images and drawings are currently in use and which images are redundant. Ensure you create a full database and image backup before running this.", - 'maint_image_cleanup_ignore_revisions' => 'Ignore images in revisions', - 'maint_image_cleanup_run' => 'Run Cleanup', - 'maint_image_cleanup_warning' => ':count potentially unused images were found. Are you sure you want to delete these images?', - 'maint_image_cleanup_success' => ':count potentially unused images found and deleted!', - 'maint_image_cleanup_nothing_found' => 'No unused images found, Nothing deleted!', + 'maint' => 'الصيانة', + 'maint_image_cleanup' => 'تنظيف الصور', + 'maint_image_cleanup_desc' => "Scans page & revision content to check which images and drawings are currently in use and which images are redundant. Ensure you create a full database and image backup before running this.", // جار البحث عن الترجمة الأنسب + 'maint_image_cleanup_ignore_revisions' => 'تجاهل الصور في المراجعات', + 'maint_image_cleanup_run' => 'بدء التنظيف', + 'maint_image_cleanup_warning' => ':count potentially unused images were found. Are you sure you want to delete these images?', // جار البحث عن الترجمة الأنسب + 'maint_image_cleanup_success' => ':count potentially unused images found and deleted!', // جار البحث عن الترجمة الأنسب + 'maint_image_cleanup_nothing_found' => 'No unused images found, Nothing deleted!', // جار البحث عن الترجمة الأنسب /** * Role settings */ - 'roles' => 'Roles', - 'role_user_roles' => 'User Roles', - 'role_create' => 'Create New Role', - 'role_create_success' => 'Role successfully created', - 'role_delete' => 'Delete Role', - 'role_delete_confirm' => 'This will delete the role with the name \':roleName\'.', + 'roles' => 'الأدوار', + 'role_user_roles' => 'أدوار المستخدمين', + 'role_create' => 'إنشاء دور جديد', + 'role_create_success' => 'تم إنشاء الدور بنجاح', + 'role_delete' => 'حذف الدور', + 'role_delete_confirm' => 'سيتم حذف الدور المسمى \':roleName\'.', 'role_delete_users_assigned' => 'This role has :userCount users assigned to it. If you would like to migrate the users from this role select a new role below.', 'role_delete_no_migration' => "Don't migrate users", 'role_delete_sure' => 'Are you sure you want to delete this role?', @@ -131,5 +131,5 @@ return [ // Since these labels are already localized this array does not need to be // translated in the language-specific files. - // DELETE BELOW IF COPIED FROM EN + // DELETE BELOW IF COPIED FROM EN (تم الحذف) ]; From 6d35fb5237cffa94623f3584be4096ea4065757a Mon Sep 17 00:00:00 2001 From: Dan Brown Date: Sat, 28 Jul 2018 15:03:29 +0100 Subject: [PATCH 032/183] Updated packages via npm audit --- package-lock.json | 6312 +++++++++++++++++++++++---------------------- package.json | 6 +- 2 files changed, 3161 insertions(+), 3157 deletions(-) diff --git a/package-lock.json b/package-lock.json index 917a8b75e..ec4da5ce2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,13 +24,13 @@ "@babel/traverse": "7.0.0-beta.40", "@babel/types": "7.0.0-beta.40", "babylon": "7.0.0-beta.40", - "convert-source-map": "1.5.1", - "debug": "3.1.0", - "json5": "0.5.1", - "lodash": "4.17.4", - "micromatch": "2.3.11", - "resolve": "1.5.0", - "source-map": "0.5.7" + "convert-source-map": "^1.1.0", + "debug": "^3.0.1", + "json5": "^0.5.0", + "lodash": "^4.2.0", + "micromatch": "^2.3.11", + "resolve": "^1.3.2", + "source-map": "^0.5.0" }, "dependencies": { "babylon": { @@ -63,10 +63,10 @@ "dev": true, "requires": { "@babel/types": "7.0.0-beta.40", - "jsesc": "2.5.1", - "lodash": "4.17.4", - "source-map": "0.5.7", - "trim-right": "1.0.1" + "jsesc": "^2.5.1", + "lodash": "^4.2.0", + "source-map": "^0.5.0", + "trim-right": "^1.0.1" }, "dependencies": { "jsesc": { @@ -121,7 +121,7 @@ "requires": { "@babel/helper-function-name": "7.0.0-beta.40", "@babel/types": "7.0.0-beta.40", - "lodash": "4.17.4" + "lodash": "^4.2.0" } }, "@babel/helper-explode-assignable-expression": { @@ -170,7 +170,7 @@ "dev": true, "requires": { "@babel/types": "7.0.0-beta.40", - "lodash": "4.17.4" + "lodash": "^4.2.0" } }, "@babel/helper-module-transforms": { @@ -183,7 +183,7 @@ "@babel/helper-simple-access": "7.0.0-beta.40", "@babel/template": "7.0.0-beta.40", "@babel/types": "7.0.0-beta.40", - "lodash": "4.17.4" + "lodash": "^4.2.0" } }, "@babel/helper-optimise-call-expression": { @@ -201,7 +201,7 @@ "integrity": "sha512-75zi8hZSdWLT7upmEyAemfN0hJ7522svItPGbIj4Pi2T/C5vbgNFXLy8o/iOCX4FzB+yVKhz0zWC3SzN9hyigA==", "dev": true, "requires": { - "lodash": "4.17.4" + "lodash": "^4.2.0" } }, "@babel/helper-remap-async-to-generator": { @@ -237,7 +237,7 @@ "requires": { "@babel/template": "7.0.0-beta.40", "@babel/types": "7.0.0-beta.40", - "lodash": "4.17.4" + "lodash": "^4.2.0" } }, "@babel/helper-wrap-function": { @@ -269,9 +269,9 @@ "integrity": "sha512-mOhhTrzieV6VO7odgzFGFapiwRK0ei8RZRhfzHhb6cpX3QM8XXuCLXWjN8qBB7JReDdUR80V3LFfFrGUYevhNg==", "dev": true, "requires": { - "chalk": "2.3.2", - "esutils": "2.0.2", - "js-tokens": "3.0.2" + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^3.0.0" }, "dependencies": { "ansi-styles": { @@ -280,7 +280,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "chalk": { @@ -289,9 +289,9 @@ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "supports-color": { @@ -300,7 +300,7 @@ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -340,7 +340,7 @@ "dev": true, "requires": { "@babel/helper-regex": "7.0.0-beta.40", - "regexpu-core": "4.1.3" + "regexpu-core": "^4.1.3" }, "dependencies": { "regexpu-core": { @@ -349,12 +349,12 @@ "integrity": "sha512-mB+njEzO7oezA57IbQxxd6fVPOeWKDmnGvJ485CwmfNchjHe5jWwqKepapmzUEj41yxIAqOg+C4LbXuJlkiO8A==", "dev": true, "requires": { - "regenerate": "1.3.3", - "regenerate-unicode-properties": "5.1.3", - "regjsgen": "0.3.0", - "regjsparser": "0.2.1", - "unicode-match-property-ecmascript": "1.0.3", - "unicode-match-property-value-ecmascript": "1.0.1" + "regenerate": "^1.3.3", + "regenerate-unicode-properties": "^5.1.1", + "regjsgen": "^0.3.0", + "regjsparser": "^0.2.1", + "unicode-match-property-ecmascript": "^1.0.3", + "unicode-match-property-value-ecmascript": "^1.0.1" } }, "regjsgen": { @@ -369,7 +369,7 @@ "integrity": "sha1-w3h1U/rwTndcMCEC7zRtmVAA7Bw=", "dev": true, "requires": { - "jsesc": "0.5.0" + "jsesc": "~0.5.0" } } } @@ -420,7 +420,7 @@ "integrity": "sha512-8QpOK9lXdzrq1QIrP3Hfx/BmGPaCKjBORd2QSjdghPNNRlQFZmO2l3kb0I6yC7w75U1M5q26KvUbAcPrE68E4w==", "dev": true, "requires": { - "lodash": "4.17.4" + "lodash": "^4.2.0" } }, "@babel/plugin-transform-classes": { @@ -434,7 +434,7 @@ "@babel/helper-function-name": "7.0.0-beta.40", "@babel/helper-optimise-call-expression": "7.0.0-beta.40", "@babel/helper-replace-supers": "7.0.0-beta.40", - "globals": "11.3.0" + "globals": "^11.1.0" }, "dependencies": { "globals": { @@ -464,7 +464,7 @@ "dev": true, "requires": { "@babel/helper-regex": "7.0.0-beta.40", - "regexpu-core": "4.1.3" + "regexpu-core": "^4.1.3" }, "dependencies": { "regexpu-core": { @@ -473,12 +473,12 @@ "integrity": "sha512-mB+njEzO7oezA57IbQxxd6fVPOeWKDmnGvJ485CwmfNchjHe5jWwqKepapmzUEj41yxIAqOg+C4LbXuJlkiO8A==", "dev": true, "requires": { - "regenerate": "1.3.3", - "regenerate-unicode-properties": "5.1.3", - "regjsgen": "0.3.0", - "regjsparser": "0.2.1", - "unicode-match-property-ecmascript": "1.0.3", - "unicode-match-property-value-ecmascript": "1.0.1" + "regenerate": "^1.3.3", + "regenerate-unicode-properties": "^5.1.1", + "regjsgen": "^0.3.0", + "regjsparser": "^0.2.1", + "unicode-match-property-ecmascript": "^1.0.3", + "unicode-match-property-value-ecmascript": "^1.0.1" } }, "regjsgen": { @@ -493,7 +493,7 @@ "integrity": "sha1-w3h1U/rwTndcMCEC7zRtmVAA7Bw=", "dev": true, "requires": { - "jsesc": "0.5.0" + "jsesc": "~0.5.0" } } } @@ -602,7 +602,7 @@ "integrity": "sha512-hFj52wAXbEpXwwfKsMol5Y967D3L8tz46Jin9n/gYPgcNWugvsw6d7g+HknBJ8FzaUESrDruFRkGPXgD+FyjvQ==", "dev": true, "requires": { - "regenerator-transform": "0.12.3" + "regenerator-transform": "^0.12.3" }, "dependencies": { "regenerator-transform": { @@ -611,7 +611,7 @@ "integrity": "sha512-y2uxO/6u+tVmtEDIKo+tLCtI0GcbQr0OreosKgCd7HP4VypGjtTrw79DezuwT+W5QX0YWuvpeBOgumrepwM1kA==", "dev": true, "requires": { - "private": "0.1.8" + "private": "^0.1.6" } } } @@ -659,7 +659,7 @@ "dev": true, "requires": { "@babel/helper-regex": "7.0.0-beta.40", - "regexpu-core": "4.1.3" + "regexpu-core": "^4.1.3" }, "dependencies": { "regexpu-core": { @@ -668,12 +668,12 @@ "integrity": "sha512-mB+njEzO7oezA57IbQxxd6fVPOeWKDmnGvJ485CwmfNchjHe5jWwqKepapmzUEj41yxIAqOg+C4LbXuJlkiO8A==", "dev": true, "requires": { - "regenerate": "1.3.3", - "regenerate-unicode-properties": "5.1.3", - "regjsgen": "0.3.0", - "regjsparser": "0.2.1", - "unicode-match-property-ecmascript": "1.0.3", - "unicode-match-property-value-ecmascript": "1.0.1" + "regenerate": "^1.3.3", + "regenerate-unicode-properties": "^5.1.1", + "regjsgen": "^0.3.0", + "regjsparser": "^0.2.1", + "unicode-match-property-ecmascript": "^1.0.3", + "unicode-match-property-value-ecmascript": "^1.0.1" } }, "regjsgen": { @@ -688,7 +688,7 @@ "integrity": "sha1-w3h1U/rwTndcMCEC7zRtmVAA7Bw=", "dev": true, "requires": { - "jsesc": "0.5.0" + "jsesc": "~0.5.0" } } } @@ -699,8 +699,8 @@ "integrity": "sha512-eFFWNiI3Os7bBkIA10ZGBUMywK+1/OTVg+qsrlaXRBTpAN0n1g1pXCkNN4rcGpgLPNyfZHQEj+aVAyWPGerSIQ==", "dev": true, "requires": { - "core-js": "2.5.5", - "regenerator-runtime": "0.11.1" + "core-js": "^2.5.3", + "regenerator-runtime": "^0.11.1" }, "dependencies": { "core-js": { @@ -757,9 +757,9 @@ "@babel/plugin-transform-template-literals": "7.0.0-beta.40", "@babel/plugin-transform-typeof-symbol": "7.0.0-beta.40", "@babel/plugin-transform-unicode-regex": "7.0.0-beta.40", - "browserslist": "3.1.2", - "invariant": "2.2.2", - "semver": "5.5.0" + "browserslist": "^3.0.0", + "invariant": "^2.2.2", + "semver": "^5.3.0" }, "dependencies": { "browserslist": { @@ -768,8 +768,8 @@ "integrity": "sha512-iO5MiK7MZXejqfnCK8onktxxb+mcW+KMiL/5gGF/UCWvVgPzbgbkA5cyYfqj/IIHHo7X1z0znrSHPw9AIfpvrw==", "dev": true, "requires": { - "caniuse-lite": "1.0.30000813", - "electron-to-chromium": "1.3.37" + "caniuse-lite": "^1.0.30000813", + "electron-to-chromium": "^1.3.36" } }, "semver": { @@ -789,7 +789,7 @@ "@babel/code-frame": "7.0.0-beta.40", "@babel/types": "7.0.0-beta.40", "babylon": "7.0.0-beta.40", - "lodash": "4.17.4" + "lodash": "^4.2.0" }, "dependencies": { "babylon": { @@ -811,10 +811,10 @@ "@babel/helper-function-name": "7.0.0-beta.40", "@babel/types": "7.0.0-beta.40", "babylon": "7.0.0-beta.40", - "debug": "3.1.0", - "globals": "11.3.0", - "invariant": "2.2.2", - "lodash": "4.17.4" + "debug": "^3.0.1", + "globals": "^11.1.0", + "invariant": "^2.2.0", + "lodash": "^4.2.0" }, "dependencies": { "babylon": { @@ -846,9 +846,9 @@ "integrity": "sha512-uXCGCzTgMZxcSUzutCPtZmXbVC+cvENgS2e0tRuhn+Y1hZnMb8IHP0Trq7Q2MB/eFmG5pKrAeTIUfQIe5kA4Tg==", "dev": true, "requires": { - "esutils": "2.0.2", - "lodash": "4.17.4", - "to-fast-properties": "2.0.0" + "esutils": "^2.0.2", + "lodash": "^4.2.0", + "to-fast-properties": "^2.0.0" }, "dependencies": { "to-fast-properties": { @@ -865,27 +865,294 @@ "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", "dev": true }, + "@webassemblyjs/ast": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.5.13.tgz", + "integrity": "sha512-49nwvW/Hx9i+OYHg+mRhKZfAlqThr11Dqz8TsrvqGKMhdI2ijy3KBJOun2Z4770TPjrIJhR6KxChQIDaz8clDA==", + "dev": true, + "requires": { + "@webassemblyjs/helper-module-context": "1.5.13", + "@webassemblyjs/helper-wasm-bytecode": "1.5.13", + "@webassemblyjs/wast-parser": "1.5.13", + "debug": "^3.1.0", + "mamacro": "^0.0.3" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.5.13.tgz", + "integrity": "sha512-vrvvB18Kh4uyghSKb0NTv+2WZx871WL2NzwMj61jcq2bXkyhRC+8Q0oD7JGVf0+5i/fKQYQSBCNMMsDMRVAMqA==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.5.13.tgz", + "integrity": "sha512-dBh2CWYqjaDlvMmRP/kudxpdh30uXjIbpkLj9HQe+qtYlwvYjPRjdQXrq1cTAAOUSMTtzqbXIxEdEZmyKfcwsg==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.5.13.tgz", + "integrity": "sha512-v7igWf1mHcpJNbn4m7e77XOAWXCDT76Xe7Is1VQFXc4K5jRcFrl9D0NrqM4XifQ0bXiuTSkTKMYqDxu5MhNljA==", + "dev": true, + "requires": { + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.5.13.tgz", + "integrity": "sha512-yN6ScQQDFCiAXnVctdVO/J5NQRbwyTbQzsGzEgXsAnrxhjp0xihh+nNHQTMrq5UhOqTb5LykpJAvEv9AT0jnAQ==", + "dev": true, + "requires": { + "@webassemblyjs/wast-printer": "1.5.13" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.5.13.tgz", + "integrity": "sha512-hSIKzbXjVMRvy3Jzhgu+vDd/aswJ+UMEnLRCkZDdknZO3Z9e6rp1DAs0tdLItjCFqkz9+0BeOPK/mk3eYvVzZg==", + "dev": true + }, + "@webassemblyjs/helper-module-context": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.5.13.tgz", + "integrity": "sha512-zxJXULGPLB7r+k+wIlvGlXpT4CYppRz8fLUM/xobGHc9Z3T6qlmJD9ySJ2jknuktuuiR9AjnNpKYDECyaiX+QQ==", + "dev": true, + "requires": { + "debug": "^3.1.0", + "mamacro": "^0.0.3" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.5.13.tgz", + "integrity": "sha512-0n3SoNGLvbJIZPhtMFq0XmmnA/YmQBXaZKQZcW8maGKwLpVcgjNrxpFZHEOLKjXJYVN5Il8vSfG7nRX50Zn+aw==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.5.13.tgz", + "integrity": "sha512-IJ/goicOZ5TT1axZFSnlAtz4m8KEjYr12BNOANAwGFPKXM4byEDaMNXYowHMG0yKV9a397eU/NlibFaLwr1fbw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/helper-buffer": "1.5.13", + "@webassemblyjs/helper-wasm-bytecode": "1.5.13", + "@webassemblyjs/wasm-gen": "1.5.13", + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "@webassemblyjs/ieee754": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.5.13.tgz", + "integrity": "sha512-TseswvXEPpG5TCBKoLx9tT7+/GMACjC1ruo09j46ULRZWYm8XHpDWaosOjTnI7kr4SRJFzA6MWoUkAB+YCGKKg==", + "dev": true, + "requires": { + "ieee754": "^1.1.11" + } + }, + "@webassemblyjs/leb128": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.5.13.tgz", + "integrity": "sha512-0NRMxrL+GG3eISGZBmLBLAVjphbN8Si15s7jzThaw1UE9e5BY1oH49/+MA1xBzxpf1OW5sf9OrPDOclk9wj2yg==", + "dev": true, + "requires": { + "long": "4.0.0" + }, + "dependencies": { + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", + "dev": true + } + } + }, + "@webassemblyjs/utf8": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.5.13.tgz", + "integrity": "sha512-Ve1ilU2N48Ew0lVGB8FqY7V7hXjaC4+PeZM+vDYxEd+R2iQ0q+Wb3Rw8v0Ri0+rxhoz6gVGsnQNb4FjRiEH/Ng==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.5.13.tgz", + "integrity": "sha512-X7ZNW4+Hga4f2NmqENnHke2V/mGYK/xnybJSIXImt1ulxbCOEs/A+ZK/Km2jgihjyVxp/0z0hwIcxC6PrkWtgw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/helper-buffer": "1.5.13", + "@webassemblyjs/helper-wasm-bytecode": "1.5.13", + "@webassemblyjs/helper-wasm-section": "1.5.13", + "@webassemblyjs/wasm-gen": "1.5.13", + "@webassemblyjs/wasm-opt": "1.5.13", + "@webassemblyjs/wasm-parser": "1.5.13", + "@webassemblyjs/wast-printer": "1.5.13", + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.5.13.tgz", + "integrity": "sha512-yfv94Se8R73zmr8GAYzezFHc3lDwE/lBXQddSiIZEKZFuqy7yWtm3KMwA1uGbv5G1WphimJxboXHR80IgX1hQA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/helper-wasm-bytecode": "1.5.13", + "@webassemblyjs/ieee754": "1.5.13", + "@webassemblyjs/leb128": "1.5.13", + "@webassemblyjs/utf8": "1.5.13" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.5.13.tgz", + "integrity": "sha512-IkXSkgzVhQ0QYAdIayuCWMmXSYx0dHGU8Ah/AxJf1gBvstMWVnzJnBwLsXLyD87VSBIcsqkmZ28dVb0mOC3oBg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/helper-buffer": "1.5.13", + "@webassemblyjs/wasm-gen": "1.5.13", + "@webassemblyjs/wasm-parser": "1.5.13", + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.5.13.tgz", + "integrity": "sha512-XnYoIcu2iqq8/LrtmdnN3T+bRjqYFjRHqWbqK3osD/0r/Fcv4d9ecRzjVtC29ENEuNTK4mQ9yyxCBCbK8S/cpg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/helper-api-error": "1.5.13", + "@webassemblyjs/helper-wasm-bytecode": "1.5.13", + "@webassemblyjs/ieee754": "1.5.13", + "@webassemblyjs/leb128": "1.5.13", + "@webassemblyjs/utf8": "1.5.13" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.5.13.tgz", + "integrity": "sha512-Lbz65T0LQ1LgzKiUytl34CwuhMNhaCLgrh0JW4rJBN6INnBB8NMwUfQM+FxTnLY9qJ+lHJL/gCM5xYhB9oWi4A==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/floating-point-hex-parser": "1.5.13", + "@webassemblyjs/helper-api-error": "1.5.13", + "@webassemblyjs/helper-code-frame": "1.5.13", + "@webassemblyjs/helper-fsm": "1.5.13", + "long": "^3.2.0", + "mamacro": "^0.0.3" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.5.13.tgz", + "integrity": "sha512-QcwogrdqcBh8Z+eUF8SG+ag5iwQSXxQJELBEHmLkk790wgQgnIMmntT2sMAMw53GiFNckArf5X0bsCA44j3lWQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/wast-parser": "1.5.13", + "long": "^3.2.0" + } + }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, + "acorn": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz", + "integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==", + "dev": true + }, "acorn-dynamic-import": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz", "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", "dev": true, "requires": { - "acorn": "5.5.3" - }, - "dependencies": { - "acorn": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", - "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==", - "dev": true - } + "acorn": "^5.0.0" + } + }, + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "dev": true, + "requires": { + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" } }, "ajv-keywords": { @@ -936,8 +1203,8 @@ "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", "dev": true, "requires": { - "micromatch": "2.3.11", - "normalize-path": "2.1.1" + "micromatch": "^2.1.5", + "normalize-path": "^2.0.0" } }, "aproba": { @@ -947,13 +1214,13 @@ "dev": true }, "are-we-there-yet": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", - "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", "dev": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.3" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, "argparse": { @@ -961,7 +1228,7 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", "requires": { - "sprintf-js": "1.0.3" + "sprintf-js": "~1.0.2" } }, "arr-diff": { @@ -970,7 +1237,7 @@ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", "dev": true, "requires": { - "arr-flatten": "1.1.0" + "arr-flatten": "^1.0.1" } }, "arr-flatten": { @@ -1021,7 +1288,7 @@ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { - "array-uniq": "1.0.3" + "array-uniq": "^1.0.1" } }, "array-uniq": { @@ -1049,14 +1316,14 @@ "dev": true }, "asn1.js": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.2.tgz", - "integrity": "sha512-b/OsSjvWEo8Pi8H0zsDd2P6Uqo2TK2pH8gNLSJtNLM2Db0v2QaAZ0pBQJXVjAn4gBuugeVDr7s63ZogpUIwWDg==", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dev": true, "requires": { - "bn.js": "4.11.8", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "assert": { @@ -1066,6 +1333,23 @@ "dev": true, "requires": { "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } } }, "assert-plus": { @@ -1110,18 +1394,24 @@ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, + "atob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz", + "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=", + "dev": true + }, "autoprefixer": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-8.1.0.tgz", "integrity": "sha512-b6mjq6VZ0guW6evRkKXL5sSSvIXICAE9dyWReZ3l/riidU7bVaJMe5cQ512SmaLA4Pvgnhi5MFsMs/Mvyh9//Q==", "dev": true, "requires": { - "browserslist": "3.2.0", - "caniuse-lite": "1.0.30000813", - "normalize-range": "0.1.2", - "num2fraction": "1.2.2", - "postcss": "6.0.20", - "postcss-value-parser": "3.3.0" + "browserslist": "^3.1.1", + "caniuse-lite": "^1.0.30000810", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^6.0.19", + "postcss-value-parser": "^3.2.3" }, "dependencies": { "ansi-styles": { @@ -1130,7 +1420,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "browserslist": { @@ -1139,8 +1429,8 @@ "integrity": "sha512-fXFmXYMUbD9E/I81MEknzD5TJmA1dQFy+2gYHHnO08CEWGTzWNlDyawBo9pfUIncaG840+RIuScjCT4IpQxTWA==", "dev": true, "requires": { - "caniuse-lite": "1.0.30000815", - "electron-to-chromium": "1.3.39" + "caniuse-lite": "^1.0.30000815", + "electron-to-chromium": "^1.3.39" }, "dependencies": { "caniuse-lite": { @@ -1157,9 +1447,9 @@ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "electron-to-chromium": { @@ -1174,9 +1464,9 @@ "integrity": "sha512-Opr6usW30Iy0xEDrJywDckRxtylfO7gTGs3Kfb2LdLQlGsUg89fTy0R3Vm1Dub2YHO7MK58avr0p70+uFFHb7A==", "dev": true, "requires": { - "chalk": "2.3.2", - "source-map": "0.6.1", - "supports-color": "5.3.0" + "chalk": "^2.3.2", + "source-map": "^0.6.1", + "supports-color": "^5.3.0" } }, "supports-color": { @@ -1185,7 +1475,7 @@ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -1197,9 +1487,9 @@ "dev": true }, "aws4": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", + "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==", "dev": true }, "axios": { @@ -1207,8 +1497,8 @@ "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.0.tgz", "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=", "requires": { - "follow-redirects": "1.4.1", - "is-buffer": "1.1.6" + "follow-redirects": "^1.3.0", + "is-buffer": "^1.1.5" }, "dependencies": { "debug": { @@ -1224,7 +1514,7 @@ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.4.1.tgz", "integrity": "sha512-uxYePVPogtya1ktGnAAXOacnbIuRMB4dkvqeNz2qTtTQsuzSfbDolV+wMMKxAmCx0bLgAKLbBOkjItMbbkR1vg==", "requires": { - "debug": "3.1.0" + "debug": "^3.1.0" } } } @@ -1235,9 +1525,9 @@ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "dev": true, "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" } }, "babel-core": { @@ -1246,25 +1536,25 @@ "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "babel-generator": "6.26.1", - "babel-helpers": "6.24.1", - "babel-messages": "6.23.0", - "babel-register": "6.26.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "convert-source-map": "1.5.1", - "debug": "2.6.9", - "json5": "0.5.1", - "lodash": "4.17.4", - "minimatch": "3.0.4", - "path-is-absolute": "1.0.1", - "private": "0.1.8", - "slash": "1.0.0", - "source-map": "0.5.7" + "babel-code-frame": "^6.26.0", + "babel-generator": "^6.26.0", + "babel-helpers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "convert-source-map": "^1.5.0", + "debug": "^2.6.8", + "json5": "^0.5.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.4", + "path-is-absolute": "^1.0.1", + "private": "^0.1.7", + "slash": "^1.0.0", + "source-map": "^0.5.6" }, "dependencies": { "source-map": { @@ -1281,14 +1571,14 @@ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", "dev": true, "requires": { - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "detect-indent": "4.0.0", - "jsesc": "1.3.0", - "lodash": "4.17.4", - "source-map": "0.5.7", - "trim-right": "1.0.1" + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" }, "dependencies": { "jsesc": { @@ -1311,9 +1601,9 @@ "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-builder-binary-assignment-operator-visitor": { @@ -1322,9 +1612,9 @@ "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", "dev": true, "requires": { - "babel-helper-explode-assignable-expression": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-explode-assignable-expression": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-call-delegate": { @@ -1333,10 +1623,10 @@ "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", "dev": true, "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-define-map": { @@ -1345,10 +1635,10 @@ "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.4" + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" } }, "babel-helper-explode-assignable-expression": { @@ -1357,9 +1647,9 @@ "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-explode-class": { @@ -1368,10 +1658,10 @@ "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=", "dev": true, "requires": { - "babel-helper-bindify-decorators": "6.24.1", - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-bindify-decorators": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-function-name": { @@ -1380,11 +1670,11 @@ "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", "dev": true, "requires": { - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-get-function-arity": { @@ -1393,8 +1683,8 @@ "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-hoist-variables": { @@ -1403,8 +1693,8 @@ "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-optimise-call-expression": { @@ -1413,8 +1703,8 @@ "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-regex": { @@ -1423,9 +1713,9 @@ "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.4" + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" } }, "babel-helper-remap-async-to-generator": { @@ -1434,11 +1724,11 @@ "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-replace-supers": { @@ -1447,12 +1737,12 @@ "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", "dev": true, "requires": { - "babel-helper-optimise-call-expression": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helpers": { @@ -1461,8 +1751,8 @@ "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-loader": { @@ -1471,9 +1761,9 @@ "integrity": "sha512-qVXXyIqTrLBH3Ki2VCJog1fUd6qzKUk9lHS34WJPW93Bh0BUvXTFSD5ZkG3a5+Uxxje+RgCk8Y7RyB6zyK9rWw==", "dev": true, "requires": { - "find-cache-dir": "1.0.0", - "loader-utils": "1.1.0", - "mkdirp": "0.5.1" + "find-cache-dir": "^1.0.0", + "loader-utils": "^1.0.2", + "mkdirp": "^0.5.1" } }, "babel-messages": { @@ -1482,7 +1772,7 @@ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-check-es2015-constants": { @@ -1491,7 +1781,7 @@ "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-syntax-async-functions": { @@ -1566,9 +1856,9 @@ "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=", "dev": true, "requires": { - "babel-helper-remap-async-to-generator": "6.24.1", - "babel-plugin-syntax-async-generators": "6.13.0", - "babel-runtime": "6.26.0" + "babel-helper-remap-async-to-generator": "^6.24.1", + "babel-plugin-syntax-async-generators": "^6.5.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-async-to-generator": { @@ -1577,9 +1867,9 @@ "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", "dev": true, "requires": { - "babel-helper-remap-async-to-generator": "6.24.1", - "babel-plugin-syntax-async-functions": "6.13.0", - "babel-runtime": "6.26.0" + "babel-helper-remap-async-to-generator": "^6.24.1", + "babel-plugin-syntax-async-functions": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-class-constructor-call": { @@ -1588,9 +1878,9 @@ "integrity": "sha1-gNwoVQWsBn3LjWxl4vbxGrd2Xvk=", "dev": true, "requires": { - "babel-plugin-syntax-class-constructor-call": "6.18.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-plugin-syntax-class-constructor-call": "^6.18.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-class-properties": { @@ -1599,10 +1889,10 @@ "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-plugin-syntax-class-properties": "6.13.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-helper-function-name": "^6.24.1", + "babel-plugin-syntax-class-properties": "^6.8.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-decorators": { @@ -1611,11 +1901,11 @@ "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=", "dev": true, "requires": { - "babel-helper-explode-class": "6.24.1", - "babel-plugin-syntax-decorators": "6.13.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-explode-class": "^6.24.1", + "babel-plugin-syntax-decorators": "^6.13.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-arrow-functions": { @@ -1624,7 +1914,7 @@ "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-block-scoped-functions": { @@ -1633,7 +1923,7 @@ "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-block-scoping": { @@ -1642,11 +1932,11 @@ "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.4" + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" } }, "babel-plugin-transform-es2015-classes": { @@ -1655,15 +1945,15 @@ "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", "dev": true, "requires": { - "babel-helper-define-map": "6.26.0", - "babel-helper-function-name": "6.24.1", - "babel-helper-optimise-call-expression": "6.24.1", - "babel-helper-replace-supers": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-define-map": "^6.24.1", + "babel-helper-function-name": "^6.24.1", + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-helper-replace-supers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-computed-properties": { @@ -1672,8 +1962,8 @@ "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-destructuring": { @@ -1682,7 +1972,7 @@ "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-duplicate-keys": { @@ -1691,8 +1981,8 @@ "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-for-of": { @@ -1701,7 +1991,7 @@ "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-function-name": { @@ -1710,9 +2000,9 @@ "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-literals": { @@ -1721,7 +2011,7 @@ "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-modules-amd": { @@ -1730,9 +2020,9 @@ "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", "dev": true, "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-modules-commonjs": { @@ -1741,10 +2031,10 @@ "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=", "dev": true, "requires": { - "babel-plugin-transform-strict-mode": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-types": "6.26.0" + "babel-plugin-transform-strict-mode": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-types": "^6.26.0" } }, "babel-plugin-transform-es2015-modules-systemjs": { @@ -1753,9 +2043,9 @@ "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", "dev": true, "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-modules-umd": { @@ -1764,9 +2054,9 @@ "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", "dev": true, "requires": { - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-object-super": { @@ -1775,8 +2065,8 @@ "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", "dev": true, "requires": { - "babel-helper-replace-supers": "6.24.1", - "babel-runtime": "6.26.0" + "babel-helper-replace-supers": "^6.24.1", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-parameters": { @@ -1785,12 +2075,12 @@ "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", "dev": true, "requires": { - "babel-helper-call-delegate": "6.24.1", - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-call-delegate": "^6.24.1", + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-shorthand-properties": { @@ -1799,8 +2089,8 @@ "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-spread": { @@ -1809,7 +2099,7 @@ "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-sticky-regex": { @@ -1818,9 +2108,9 @@ "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", "dev": true, "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-template-literals": { @@ -1829,7 +2119,7 @@ "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-typeof-symbol": { @@ -1838,7 +2128,7 @@ "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-unicode-regex": { @@ -1847,9 +2137,9 @@ "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", "dev": true, "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "regexpu-core": "2.0.0" + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "regexpu-core": "^2.0.0" } }, "babel-plugin-transform-exponentiation-operator": { @@ -1858,9 +2148,9 @@ "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", "dev": true, "requires": { - "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", - "babel-plugin-syntax-exponentiation-operator": "6.13.0", - "babel-runtime": "6.26.0" + "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", + "babel-plugin-syntax-exponentiation-operator": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-export-extensions": { @@ -1869,8 +2159,8 @@ "integrity": "sha1-U3OLR+deghhYnuqUbLvTkQm75lM=", "dev": true, "requires": { - "babel-plugin-syntax-export-extensions": "6.13.0", - "babel-runtime": "6.26.0" + "babel-plugin-syntax-export-extensions": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-flow-strip-types": { @@ -1879,8 +2169,8 @@ "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", "dev": true, "requires": { - "babel-plugin-syntax-flow": "6.18.0", - "babel-runtime": "6.26.0" + "babel-plugin-syntax-flow": "^6.18.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-object-rest-spread": { @@ -1889,8 +2179,8 @@ "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", "dev": true, "requires": { - "babel-plugin-syntax-object-rest-spread": "6.13.0", - "babel-runtime": "6.26.0" + "babel-plugin-syntax-object-rest-spread": "^6.8.0", + "babel-runtime": "^6.26.0" } }, "babel-plugin-transform-regenerator": { @@ -1899,7 +2189,7 @@ "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", "dev": true, "requires": { - "regenerator-transform": "0.10.1" + "regenerator-transform": "^0.10.0" } }, "babel-plugin-transform-strict-mode": { @@ -1908,8 +2198,8 @@ "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-preset-es2015": { @@ -1918,30 +2208,30 @@ "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", "dev": true, "requires": { - "babel-plugin-check-es2015-constants": "6.22.0", - "babel-plugin-transform-es2015-arrow-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoping": "6.26.0", - "babel-plugin-transform-es2015-classes": "6.24.1", - "babel-plugin-transform-es2015-computed-properties": "6.24.1", - "babel-plugin-transform-es2015-destructuring": "6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", - "babel-plugin-transform-es2015-for-of": "6.23.0", - "babel-plugin-transform-es2015-function-name": "6.24.1", - "babel-plugin-transform-es2015-literals": "6.22.0", - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", - "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", - "babel-plugin-transform-es2015-modules-umd": "6.24.1", - "babel-plugin-transform-es2015-object-super": "6.24.1", - "babel-plugin-transform-es2015-parameters": "6.24.1", - "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", - "babel-plugin-transform-es2015-spread": "6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "6.24.1", - "babel-plugin-transform-es2015-template-literals": "6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "6.24.1", - "babel-plugin-transform-regenerator": "6.26.0" + "babel-plugin-check-es2015-constants": "^6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoping": "^6.24.1", + "babel-plugin-transform-es2015-classes": "^6.24.1", + "babel-plugin-transform-es2015-computed-properties": "^6.24.1", + "babel-plugin-transform-es2015-destructuring": "^6.22.0", + "babel-plugin-transform-es2015-duplicate-keys": "^6.24.1", + "babel-plugin-transform-es2015-for-of": "^6.22.0", + "babel-plugin-transform-es2015-function-name": "^6.24.1", + "babel-plugin-transform-es2015-literals": "^6.22.0", + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-plugin-transform-es2015-modules-systemjs": "^6.24.1", + "babel-plugin-transform-es2015-modules-umd": "^6.24.1", + "babel-plugin-transform-es2015-object-super": "^6.24.1", + "babel-plugin-transform-es2015-parameters": "^6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "^6.24.1", + "babel-plugin-transform-es2015-spread": "^6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "^6.24.1", + "babel-plugin-transform-es2015-template-literals": "^6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "^6.22.0", + "babel-plugin-transform-es2015-unicode-regex": "^6.24.1", + "babel-plugin-transform-regenerator": "^6.24.1" } }, "babel-preset-stage-1": { @@ -1950,9 +2240,9 @@ "integrity": "sha1-dpLNfc1oSZB+auSgqFWJz7niv7A=", "dev": true, "requires": { - "babel-plugin-transform-class-constructor-call": "6.24.1", - "babel-plugin-transform-export-extensions": "6.22.0", - "babel-preset-stage-2": "6.24.1" + "babel-plugin-transform-class-constructor-call": "^6.24.1", + "babel-plugin-transform-export-extensions": "^6.22.0", + "babel-preset-stage-2": "^6.24.1" } }, "babel-preset-stage-2": { @@ -1961,10 +2251,10 @@ "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=", "dev": true, "requires": { - "babel-plugin-syntax-dynamic-import": "6.18.0", - "babel-plugin-transform-class-properties": "6.24.1", - "babel-plugin-transform-decorators": "6.24.1", - "babel-preset-stage-3": "6.24.1" + "babel-plugin-syntax-dynamic-import": "^6.18.0", + "babel-plugin-transform-class-properties": "^6.24.1", + "babel-plugin-transform-decorators": "^6.24.1", + "babel-preset-stage-3": "^6.24.1" } }, "babel-preset-stage-3": { @@ -1973,11 +2263,11 @@ "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=", "dev": true, "requires": { - "babel-plugin-syntax-trailing-function-commas": "6.22.0", - "babel-plugin-transform-async-generator-functions": "6.24.1", - "babel-plugin-transform-async-to-generator": "6.24.1", - "babel-plugin-transform-exponentiation-operator": "6.24.1", - "babel-plugin-transform-object-rest-spread": "6.26.0" + "babel-plugin-syntax-trailing-function-commas": "^6.22.0", + "babel-plugin-transform-async-generator-functions": "^6.24.1", + "babel-plugin-transform-async-to-generator": "^6.24.1", + "babel-plugin-transform-exponentiation-operator": "^6.24.1", + "babel-plugin-transform-object-rest-spread": "^6.22.0" } }, "babel-register": { @@ -1986,13 +2276,13 @@ "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", "dev": true, "requires": { - "babel-core": "6.26.0", - "babel-runtime": "6.26.0", - "core-js": "2.5.1", - "home-or-tmp": "2.0.0", - "lodash": "4.17.4", - "mkdirp": "0.5.1", - "source-map-support": "0.4.18" + "babel-core": "^6.26.0", + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "home-or-tmp": "^2.0.0", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "source-map-support": "^0.4.15" } }, "babel-runtime": { @@ -2001,8 +2291,8 @@ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "dev": true, "requires": { - "core-js": "2.5.1", - "regenerator-runtime": "0.11.0" + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" }, "dependencies": { "regenerator-runtime": { @@ -2019,11 +2309,11 @@ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "lodash": "4.17.4" + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" } }, "babel-traverse": { @@ -2032,15 +2322,15 @@ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "debug": "2.6.9", - "globals": "9.18.0", - "invariant": "2.2.2", - "lodash": "4.17.4" + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" } }, "babel-types": { @@ -2049,10 +2339,10 @@ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "esutils": "2.0.2", - "lodash": "4.17.4", - "to-fast-properties": "1.0.3" + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" } }, "babylon": { @@ -2073,13 +2363,13 @@ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, "requires": { - "cache-base": "1.0.1", - "class-utils": "0.3.6", - "component-emitter": "1.2.1", - "define-property": "1.0.0", - "isobject": "3.0.1", - "mixin-deep": "1.3.1", - "pascalcase": "0.1.1" + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" }, "dependencies": { "define-property": { @@ -2088,7 +2378,36 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "isobject": { @@ -2096,23 +2415,29 @@ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true } } }, "base64-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", - "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", + "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", "dev": true }, "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "dev": true, "optional": true, "requires": { - "tweetnacl": "0.14.5" + "tweetnacl": "^0.14.3" } }, "big.js": { @@ -2139,7 +2464,7 @@ "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", "dev": true, "requires": { - "inherits": "2.0.3" + "inherits": "~2.0.0" } }, "bluebird": { @@ -2160,7 +2485,7 @@ "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", "dev": true, "requires": { - "hoek": "2.16.3" + "hoek": "2.x.x" } }, "brace-expansion": { @@ -2169,7 +2494,7 @@ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -2179,9 +2504,9 @@ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", "dev": true, "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" } }, "brorand": { @@ -2191,39 +2516,48 @@ "dev": true }, "browserify-aes": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz", - "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.1.3", - "evp_bytestokey": "1.0.3", - "inherits": "2.0.3", - "safe-buffer": "5.1.1" + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "browserify-cipher": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", - "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, "requires": { - "browserify-aes": "1.1.1", - "browserify-des": "1.0.0", - "evp_bytestokey": "1.0.3" + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" } }, "browserify-des": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", - "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.0", - "inherits": "2.0.3" + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } } }, "browserify-rsa": { @@ -2232,8 +2566,8 @@ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "dev": true, "requires": { - "bn.js": "4.11.8", - "randombytes": "2.0.5" + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" } }, "browserify-sign": { @@ -2242,13 +2576,13 @@ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "elliptic": "6.4.0", - "inherits": "2.0.3", - "parse-asn1": "5.1.0" + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" } }, "browserify-zlib": { @@ -2257,7 +2591,7 @@ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, "requires": { - "pako": "1.0.6" + "pako": "~1.0.5" } }, "browserslist": { @@ -2266,8 +2600,19 @@ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "dev": true, "requires": { - "caniuse-db": "1.0.30000813", - "electron-to-chromium": "1.3.37" + "caniuse-db": "^1.0.30000639", + "electron-to-chromium": "^1.2.7" + } + }, + "buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } }, "buffer-xor": { @@ -2294,19 +2639,19 @@ "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", "dev": true, "requires": { - "bluebird": "3.5.1", - "chownr": "1.0.1", - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "lru-cache": "4.1.2", - "mississippi": "2.0.0", - "mkdirp": "0.5.1", - "move-concurrently": "1.0.1", - "promise-inflight": "1.0.1", - "rimraf": "2.6.2", - "ssri": "5.2.4", - "unique-filename": "1.1.0", - "y18n": "4.0.0" + "bluebird": "^3.5.1", + "chownr": "^1.0.1", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "lru-cache": "^4.1.1", + "mississippi": "^2.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^5.2.4", + "unique-filename": "^1.1.0", + "y18n": "^4.0.0" }, "dependencies": { "y18n": { @@ -2323,15 +2668,15 @@ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, "requires": { - "collection-visit": "1.0.0", - "component-emitter": "1.2.1", - "get-value": "2.0.6", - "has-value": "1.0.0", - "isobject": "3.0.1", - "set-value": "2.0.0", - "to-object-path": "0.3.0", - "union-value": "1.0.0", - "unset-value": "1.0.0" + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" }, "dependencies": { "isobject": { @@ -2369,8 +2714,8 @@ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "dev": true, "requires": { - "camelcase": "2.1.1", - "map-obj": "1.0.1" + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" } }, "caniuse-api": { @@ -2379,10 +2724,10 @@ "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", "dev": true, "requires": { - "browserslist": "1.7.7", - "caniuse-db": "1.0.30000813", - "lodash.memoize": "4.1.2", - "lodash.uniq": "4.5.0" + "browserslist": "^1.3.6", + "caniuse-db": "^1.0.30000529", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" } }, "caniuse-db": { @@ -2398,9 +2743,9 @@ "dev": true }, "caseless": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", - "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, "chalk": { @@ -2409,11 +2754,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "chardet": { @@ -2428,15 +2773,15 @@ "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", "dev": true, "requires": { - "anymatch": "1.3.2", - "async-each": "1.0.1", - "fsevents": "1.1.3", - "glob-parent": "2.0.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "2.0.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0" + "anymatch": "^1.3.0", + "async-each": "^1.0.0", + "fsevents": "^1.0.0", + "glob-parent": "^2.0.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^2.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0" } }, "chownr": { @@ -2446,10 +2791,13 @@ "dev": true }, "chrome-trace-event": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-0.1.2.tgz", - "integrity": "sha1-kPNohdU0WlBiEzLwcXtZWIPV2YI=", - "dev": true + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz", + "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } }, "cipher-base": { "version": "1.0.4", @@ -2457,8 +2805,8 @@ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "clap": { @@ -2467,7 +2815,7 @@ "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", "dev": true, "requires": { - "chalk": "1.1.3" + "chalk": "^1.1.3" } }, "class-utils": { @@ -2476,10 +2824,10 @@ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, "requires": { - "arr-union": "3.1.0", - "define-property": "0.2.5", - "isobject": "3.0.1", - "static-extend": "0.1.2" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, "dependencies": { "define-property": { @@ -2488,58 +2836,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-descriptor": "^0.1.0" } }, "isobject": { @@ -2547,12 +2844,6 @@ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true } } }, @@ -2562,7 +2853,7 @@ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "dev": true, "requires": { - "restore-cursor": "2.0.0" + "restore-cursor": "^2.0.0" } }, "cli-spinners": { @@ -2595,7 +2886,7 @@ "dev": true, "requires": { "slice-ansi": "0.0.4", - "string-width": "1.0.2" + "string-width": "^1.0.1" } }, "cli-width": { @@ -2609,9 +2900,9 @@ "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.0.tgz", "integrity": "sha512-gXzHBlzEVqCk2b8Wpkil89S0WSMAX7eZho2zANX+EEEa9LMutGe9ICU+wHRzsH7cCHaCbUzj900P+AXOM0FE3A==", "requires": { - "good-listener": "1.2.2", - "select": "1.1.2", - "tiny-emitter": "2.0.2" + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" } }, "cliui": { @@ -2620,9 +2911,9 @@ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" } }, "clone": { @@ -2643,10 +2934,10 @@ "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==", "dev": true, "requires": { - "for-own": "1.0.0", - "is-plain-object": "2.0.4", - "kind-of": "6.0.2", - "shallow-clone": "1.0.0" + "for-own": "^1.0.0", + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.0", + "shallow-clone": "^1.0.0" }, "dependencies": { "for-own": { @@ -2655,7 +2946,7 @@ "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", "dev": true, "requires": { - "for-in": "1.0.2" + "for-in": "^1.0.1" } }, "kind-of": { @@ -2672,7 +2963,7 @@ "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", "dev": true, "requires": { - "mimic-response": "1.0.0" + "mimic-response": "^1.0.0" } }, "clone-stats": { @@ -2687,9 +2978,9 @@ "integrity": "sha512-DNNEq6JdqBFPzS29TaoqZFPNLn5Xn3XyPFqLIhyBT8Xou4lHQEWzD6FinXoJUfhIfWX3aE1JkRa3cbWCHFbt1g==", "dev": true, "requires": { - "inherits": "2.0.3", - "process-nextick-args": "2.0.0", - "readable-stream": "2.3.5" + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" }, "dependencies": { "process-nextick-args": { @@ -2704,24 +2995,30 @@ "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.0.3", + "util-deprecate": "~1.0.1" } } } }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, "coa": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", "dev": true, "requires": { - "q": "1.5.1" + "q": "^1.1.2" } }, "code-point-at": { @@ -2741,8 +3038,8 @@ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "requires": { - "map-visit": "1.0.0", - "object-visit": "1.0.1" + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" } }, "color": { @@ -2751,9 +3048,9 @@ "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", "dev": true, "requires": { - "clone": "1.0.3", - "color-convert": "1.9.1", - "color-string": "0.3.0" + "clone": "^1.0.2", + "color-convert": "^1.3.0", + "color-string": "^0.3.0" } }, "color-convert": { @@ -2762,7 +3059,7 @@ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", "dev": true, "requires": { - "color-name": "1.1.3" + "color-name": "^1.1.1" } }, "color-name": { @@ -2777,7 +3074,7 @@ "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", "dev": true, "requires": { - "color-name": "1.1.3" + "color-name": "^1.0.0" } }, "colormin": { @@ -2786,9 +3083,9 @@ "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", "dev": true, "requires": { - "color": "0.11.4", + "color": "^0.11.0", "css-color-names": "0.0.4", - "has": "1.0.1" + "has": "^1.0.1" } }, "colors": { @@ -2803,7 +3100,7 @@ "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "dev": true, "requires": { - "delayed-stream": "1.0.0" + "delayed-stream": "~1.0.0" } }, "commander": { @@ -2836,9 +3133,9 @@ "integrity": "sha512-gslSSJx03QKa59cIKqeJO9HQ/WZMotvYJCuaUULrLpjj8oG40kV2Z+gz82pVxlTkOADi4PJxQPPfhl1ELYrrXw==", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "typedarray": "0.0.6" + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, "console-browserify": { @@ -2847,7 +3144,7 @@ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", "dev": true, "requires": { - "date-now": "0.1.4" + "date-now": "^0.1.4" } }, "console-control-strings": { @@ -2874,12 +3171,12 @@ "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", "dev": true, "requires": { - "aproba": "1.2.0", - "fs-write-stream-atomic": "1.0.10", - "iferr": "0.1.5", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "run-queue": "1.0.3" + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" } }, "copy-descriptor": { @@ -2906,49 +3203,50 @@ "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==", "dev": true, "requires": { - "is-directory": "0.3.1", - "js-yaml": "3.7.0", - "minimist": "1.2.0", - "object-assign": "4.1.1", - "os-homedir": "1.0.2", - "parse-json": "2.2.0", - "require-from-string": "1.2.1" + "is-directory": "^0.3.1", + "js-yaml": "^3.4.3", + "minimist": "^1.2.0", + "object-assign": "^4.1.0", + "os-homedir": "^1.0.1", + "parse-json": "^2.2.0", + "require-from-string": "^1.1.0" } }, "create-ecdh": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", - "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", "dev": true, "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.0" + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" } }, "create-hash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", - "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.3", - "ripemd160": "2.0.1", - "sha.js": "2.4.9" + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, "create-hmac": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", - "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.1.3", - "inherits": "2.0.3", - "ripemd160": "2.0.1", - "safe-buffer": "5.1.1", - "sha.js": "2.4.9" + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "cross-spawn": { @@ -2957,8 +3255,8 @@ "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", "dev": true, "requires": { - "lru-cache": "4.1.2", - "which": "1.3.0" + "lru-cache": "^4.0.1", + "which": "^1.2.9" } }, "cryptiles": { @@ -2967,7 +3265,7 @@ "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", "dev": true, "requires": { - "boom": "2.10.1" + "boom": "2.x.x" } }, "crypto-browserify": { @@ -2976,17 +3274,17 @@ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, "requires": { - "browserify-cipher": "1.0.0", - "browserify-sign": "4.0.4", - "create-ecdh": "4.0.0", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "diffie-hellman": "5.0.2", - "inherits": "2.0.3", - "pbkdf2": "3.0.14", - "public-encrypt": "4.0.0", - "randombytes": "2.0.5", - "randomfill": "1.0.3" + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" } }, "css-color-names": { @@ -3001,20 +3299,20 @@ "integrity": "sha512-X1IJteKnW9Llmrd+lJ0f7QZHh9Arf+11S7iRcoT2+riig3BK0QaCaOtubAulMK6Itbo08W6d3l8sW21r+Jhp5Q==", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "css-selector-tokenizer": "0.7.0", - "cssnano": "3.10.0", - "icss-utils": "2.1.0", - "loader-utils": "1.1.0", - "lodash.camelcase": "4.3.0", - "object-assign": "4.1.1", - "postcss": "5.2.18", - "postcss-modules-extract-imports": "1.2.0", - "postcss-modules-local-by-default": "1.2.0", - "postcss-modules-scope": "1.1.0", - "postcss-modules-values": "1.3.0", - "postcss-value-parser": "3.3.0", - "source-list-map": "2.0.0" + "babel-code-frame": "^6.26.0", + "css-selector-tokenizer": "^0.7.0", + "cssnano": "^3.10.0", + "icss-utils": "^2.1.0", + "loader-utils": "^1.0.2", + "lodash.camelcase": "^4.3.0", + "object-assign": "^4.1.1", + "postcss": "^5.0.6", + "postcss-modules-extract-imports": "^1.2.0", + "postcss-modules-local-by-default": "^1.2.0", + "postcss-modules-scope": "^1.1.0", + "postcss-modules-values": "^1.3.0", + "postcss-value-parser": "^3.3.0", + "source-list-map": "^2.0.0" } }, "css-selector-tokenizer": { @@ -3023,9 +3321,9 @@ "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=", "dev": true, "requires": { - "cssesc": "0.1.0", - "fastparse": "1.1.1", - "regexpu-core": "1.0.0" + "cssesc": "^0.1.0", + "fastparse": "^1.1.1", + "regexpu-core": "^1.0.0" }, "dependencies": { "regexpu-core": { @@ -3034,9 +3332,9 @@ "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", "dev": true, "requires": { - "regenerate": "1.3.3", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" } } } @@ -3053,38 +3351,38 @@ "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", "dev": true, "requires": { - "autoprefixer": "6.7.7", - "decamelize": "1.2.0", - "defined": "1.0.0", - "has": "1.0.1", - "object-assign": "4.1.1", - "postcss": "5.2.18", - "postcss-calc": "5.3.1", - "postcss-colormin": "2.2.2", - "postcss-convert-values": "2.6.1", - "postcss-discard-comments": "2.0.4", - "postcss-discard-duplicates": "2.1.0", - "postcss-discard-empty": "2.1.0", - "postcss-discard-overridden": "0.1.1", - "postcss-discard-unused": "2.2.3", - "postcss-filter-plugins": "2.0.2", - "postcss-merge-idents": "2.1.7", - "postcss-merge-longhand": "2.0.2", - "postcss-merge-rules": "2.1.2", - "postcss-minify-font-values": "1.0.5", - "postcss-minify-gradients": "1.0.5", - "postcss-minify-params": "1.2.2", - "postcss-minify-selectors": "2.1.1", - "postcss-normalize-charset": "1.1.1", - "postcss-normalize-url": "3.0.8", - "postcss-ordered-values": "2.2.3", - "postcss-reduce-idents": "2.4.0", - "postcss-reduce-initial": "1.0.1", - "postcss-reduce-transforms": "1.0.4", - "postcss-svgo": "2.1.6", - "postcss-unique-selectors": "2.0.2", - "postcss-value-parser": "3.3.0", - "postcss-zindex": "2.2.0" + "autoprefixer": "^6.3.1", + "decamelize": "^1.1.2", + "defined": "^1.0.0", + "has": "^1.0.1", + "object-assign": "^4.0.1", + "postcss": "^5.0.14", + "postcss-calc": "^5.2.0", + "postcss-colormin": "^2.1.8", + "postcss-convert-values": "^2.3.4", + "postcss-discard-comments": "^2.0.4", + "postcss-discard-duplicates": "^2.0.1", + "postcss-discard-empty": "^2.0.1", + "postcss-discard-overridden": "^0.1.1", + "postcss-discard-unused": "^2.2.1", + "postcss-filter-plugins": "^2.0.0", + "postcss-merge-idents": "^2.1.5", + "postcss-merge-longhand": "^2.0.1", + "postcss-merge-rules": "^2.0.3", + "postcss-minify-font-values": "^1.0.2", + "postcss-minify-gradients": "^1.0.1", + "postcss-minify-params": "^1.0.4", + "postcss-minify-selectors": "^2.0.4", + "postcss-normalize-charset": "^1.1.0", + "postcss-normalize-url": "^3.0.7", + "postcss-ordered-values": "^2.1.0", + "postcss-reduce-idents": "^2.2.2", + "postcss-reduce-initial": "^1.0.0", + "postcss-reduce-transforms": "^1.0.3", + "postcss-svgo": "^2.1.1", + "postcss-unique-selectors": "^2.0.2", + "postcss-value-parser": "^3.2.3", + "postcss-zindex": "^2.0.1" }, "dependencies": { "autoprefixer": { @@ -3093,12 +3391,12 @@ "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", "dev": true, "requires": { - "browserslist": "1.7.7", - "caniuse-db": "1.0.30000813", - "normalize-range": "0.1.2", - "num2fraction": "1.2.2", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "browserslist": "^1.7.6", + "caniuse-db": "^1.0.30000634", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^5.2.16", + "postcss-value-parser": "^3.2.3" } } } @@ -3109,8 +3407,8 @@ "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", "dev": true, "requires": { - "clap": "1.2.3", - "source-map": "0.5.7" + "clap": "^1.0.9", + "source-map": "^0.5.3" }, "dependencies": { "source-map": { @@ -3127,7 +3425,7 @@ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", "dev": true, "requires": { - "array-find-index": "1.0.2" + "array-find-index": "^1.0.1" } }, "cyclist": { @@ -3148,7 +3446,7 @@ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" }, "dependencies": { "assert-plus": { @@ -3198,7 +3496,7 @@ "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", "dev": true, "requires": { - "mimic-response": "1.0.0" + "mimic-response": "^1.0.0" } }, "deep-extend": { @@ -3213,8 +3511,8 @@ "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", "dev": true, "requires": { - "foreach": "2.0.5", - "object-keys": "1.0.11" + "foreach": "^2.0.5", + "object-keys": "^1.0.8" } }, "define-property": { @@ -3223,15 +3521,50 @@ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "requires": { - "is-descriptor": "1.0.2", - "isobject": "3.0.1" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" }, "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true } } }, @@ -3264,8 +3597,8 @@ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "detect-conflict": { @@ -3280,7 +3613,7 @@ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", "dev": true, "requires": { - "repeating": "2.0.1" + "repeating": "^2.0.0" } }, "diff": { @@ -3290,20 +3623,20 @@ "dev": true }, "diffie-hellman": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", - "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { - "bn.js": "4.11.8", - "miller-rabin": "4.0.1", - "randombytes": "2.0.5" + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" } }, "domain-browser": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", - "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "dev": true }, "dropzone": { @@ -3329,10 +3662,10 @@ "integrity": "sha512-JzYSLYMhoVVBe8+mbHQ4KgpvHpm0DZpJuL8PY93Vyv1fW7jYJ90LoXa1di/CVbJM+TgMs91rbDapE/RNIfnJsA==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "stream-shift": "1.0.0" + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" } }, "ecc-jsbn": { @@ -3342,7 +3675,7 @@ "dev": true, "optional": true, "requires": { - "jsbn": "0.1.1" + "jsbn": "~0.1.0" } }, "editions": { @@ -3375,13 +3708,13 @@ "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.3", - "hmac-drbg": "1.0.1", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0", - "minimalistic-crypto-utils": "1.0.1" + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" } }, "emojis-list": { @@ -3396,7 +3729,7 @@ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "dev": true, "requires": { - "once": "1.4.0" + "once": "^1.4.0" } }, "enhanced-resolve": { @@ -3405,9 +3738,9 @@ "integrity": "sha512-jox/62b2GofV1qTUQTMPEJSDIGycS43evqYzD/KVtEb9OCoki9cnacUPxCrZa7JfPzZSYOCZhu9O9luaMxAX8g==", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "memory-fs": "0.4.1", - "tapable": "1.0.0" + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "tapable": "^1.0.0" } }, "entities": { @@ -3421,7 +3754,7 @@ "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", "dev": true, "requires": { - "prr": "1.0.1" + "prr": "~1.0.1" } }, "error": { @@ -3430,8 +3763,8 @@ "integrity": "sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI=", "dev": true, "requires": { - "string-template": "0.2.1", - "xtend": "4.0.1" + "string-template": "~0.2.1", + "xtend": "~4.0.0" } }, "error-ex": { @@ -3440,7 +3773,7 @@ "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", "dev": true, "requires": { - "is-arrayish": "0.2.1" + "is-arrayish": "^0.2.1" } }, "es-abstract": { @@ -3449,11 +3782,11 @@ "integrity": "sha512-/uh/DhdqIOSkAWifU+8nG78vlQxdLckUdI/sPgy0VhuXi2qJ7T8czBmqIYtLQVpCIFYafChnsRsB5pyb1JdmCQ==", "dev": true, "requires": { - "es-to-primitive": "1.1.1", - "function-bind": "1.1.1", - "has": "1.0.1", - "is-callable": "1.1.3", - "is-regex": "1.0.4" + "es-to-primitive": "^1.1.1", + "function-bind": "^1.1.1", + "has": "^1.0.1", + "is-callable": "^1.1.3", + "is-regex": "^1.0.4" } }, "es-to-primitive": { @@ -3462,9 +3795,9 @@ "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", "dev": true, "requires": { - "is-callable": "1.1.3", - "is-date-object": "1.0.1", - "is-symbol": "1.0.1" + "is-callable": "^1.1.1", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.1" } }, "escape-string-regexp": { @@ -3474,13 +3807,13 @@ "dev": true }, "eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", + "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", "dev": true, "requires": { - "esrecurse": "4.2.1", - "estraverse": "4.2.0" + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } }, "esprima": { @@ -3495,7 +3828,7 @@ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "dev": true, "requires": { - "estraverse": "4.2.0" + "estraverse": "^4.1.0" } }, "estraverse": { @@ -3516,13 +3849,13 @@ "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", "dev": true, "requires": { - "duplexer": "0.1.1", - "from": "0.1.7", - "map-stream": "0.1.0", + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", "pause-stream": "0.0.11", - "split": "0.3.3", - "stream-combiner": "0.0.4", - "through": "2.3.8" + "split": "0.3", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" } }, "events": { @@ -3537,8 +3870,8 @@ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "requires": { - "md5.js": "1.3.4", - "safe-buffer": "5.1.1" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, "execa": { @@ -3547,13 +3880,13 @@ "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "dev": true, "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" }, "dependencies": { "cross-spawn": { @@ -3562,9 +3895,9 @@ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { - "lru-cache": "4.1.2", - "shebang-command": "1.2.0", - "which": "1.3.0" + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, "lru-cache": { @@ -3573,8 +3906,8 @@ "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==", "dev": true, "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } } } @@ -3591,7 +3924,7 @@ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", "dev": true, "requires": { - "is-posix-bracket": "0.1.1" + "is-posix-bracket": "^0.1.0" } }, "expand-range": { @@ -3600,13 +3933,13 @@ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", "dev": true, "requires": { - "fill-range": "2.2.3" + "fill-range": "^2.1.0" } }, "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true }, "extend-shallow": { @@ -3615,8 +3948,8 @@ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -3625,7 +3958,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -3636,9 +3969,9 @@ "integrity": "sha512-E44iT5QVOUJBKij4IIV3uvxuNlbKS38Tw1HiupxEIHPv9qtC2PrDYohbXV5U+1jnfIXttny8gUhj+oZvflFlzA==", "dev": true, "requires": { - "chardet": "0.4.2", - "iconv-lite": "0.4.19", - "tmp": "0.0.33" + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" }, "dependencies": { "iconv-lite": { @@ -3655,7 +3988,7 @@ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "extract-text-webpack-plugin": { @@ -3664,10 +3997,10 @@ "integrity": "sha512-Hypkn9jUTnFr0DpekNam53X47tXn3ucY08BQumv7kdGgeVUBLq3DJHJTi6HNxv4jl9W+Skxjz9+RnK0sJyqqjA==", "dev": true, "requires": { - "async": "2.6.0", - "loader-utils": "1.1.0", - "schema-utils": "0.4.5", - "webpack-sources": "1.1.0" + "async": "^2.4.1", + "loader-utils": "^1.1.0", + "schema-utils": "^0.4.5", + "webpack-sources": "^1.1.0" }, "dependencies": { "async": { @@ -3676,7 +4009,7 @@ "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", "dev": true, "requires": { - "lodash": "4.17.4" + "lodash": "^4.14.0" } } } @@ -3711,7 +4044,7 @@ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "dev": true, "requires": { - "escape-string-regexp": "1.0.5" + "escape-string-regexp": "^1.0.5" } }, "filename-regex": { @@ -3721,16 +4054,43 @@ "dev": true }, "fill-range": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", - "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", "dev": true, "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "1.1.7", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "randomatic": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz", + "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==", + "dev": true, + "requires": { + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + } + } + } } }, "find-cache-dir": { @@ -3739,9 +4099,9 @@ "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", "dev": true, "requires": { - "commondir": "1.0.1", - "make-dir": "1.2.0", - "pkg-dir": "2.0.0" + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^2.0.0" } }, "find-up": { @@ -3750,8 +4110,8 @@ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "dev": true, "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "flatten": { @@ -3772,8 +4132,8 @@ "integrity": "sha1-yBuQ2HRnZvGmCaRoCZRsRd2K5Bc=", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3" + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" } }, "for-in": { @@ -3788,7 +4148,7 @@ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", "dev": true, "requires": { - "for-in": "1.0.2" + "for-in": "^1.0.1" } }, "foreach": { @@ -3809,9 +4169,9 @@ "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", "dev": true, "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.6", - "mime-types": "2.1.18" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" } }, "fragment-cache": { @@ -3820,7 +4180,7 @@ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "requires": { - "map-cache": "0.2.2" + "map-cache": "^0.2.2" } }, "from": { @@ -3835,8 +4195,8 @@ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3" + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" } }, "fs-write-stream-atomic": { @@ -3845,10 +4205,10 @@ "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "iferr": "0.1.5", - "imurmurhash": "0.1.4", - "readable-stream": "2.3.3" + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" } }, "fs.realpath": { @@ -3858,39 +4218,29 @@ "dev": true }, "fsevents": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz", - "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", + "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", "dev": true, "optional": true, "requires": { - "nan": "2.7.0", - "node-pre-gyp": "0.6.39" + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" }, "dependencies": { "abbrev": { - "version": "1.1.0", + "version": "1.1.1", "bundled": true, "dev": true, "optional": true }, - "ajv": { - "version": "4.11.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, "ansi-regex": { "version": "2.1.1", "bundled": true, "dev": true }, "aproba": { - "version": "1.1.1", + "version": "1.2.0", "bundled": true, "dev": true, "optional": true @@ -3901,92 +4251,26 @@ "dev": true, "optional": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.2.9" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, - "asn1": { - "version": "0.2.3", - "bundled": true, - "dev": true, - "optional": true - }, - "assert-plus": { - "version": "0.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "asynckit": { - "version": "0.4.0", - "bundled": true, - "dev": true, - "optional": true - }, - "aws-sign2": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "aws4": { - "version": "1.6.0", - "bundled": true, - "dev": true, - "optional": true - }, "balanced-match": { - "version": "0.4.2", - "bundled": true, - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "block-stream": { - "version": "0.0.9", - "bundled": true, - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, - "boom": { - "version": "2.10.1", - "bundled": true, - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "brace-expansion": { - "version": "1.1.7", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "0.4.2", - "concat-map": "0.0.1" - } - }, - "buffer-shims": { "version": "1.0.0", "bundled": true, "dev": true }, - "caseless": { - "version": "0.12.0", + "brace-expansion": { + "version": "1.1.11", "bundled": true, "dev": true, - "optional": true + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, - "co": { - "version": "4.6.0", + "chownr": { + "version": "1.0.1", "bundled": true, "dev": true, "optional": true @@ -3996,14 +4280,6 @@ "bundled": true, "dev": true }, - "combined-stream": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "requires": { - "delayed-stream": "1.0.0" - } - }, "concat-map": { "version": "0.0.1", "bundled": true, @@ -4017,35 +4293,11 @@ "core-util-is": { "version": "1.0.2", "bundled": true, - "dev": true - }, - "cryptiles": { - "version": "2.0.5", - "bundled": true, "dev": true, - "requires": { - "boom": "2.10.1" - } - }, - "dashdash": { - "version": "1.14.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } + "optional": true }, "debug": { - "version": "2.6.8", + "version": "2.6.9", "bundled": true, "dev": true, "optional": true, @@ -4054,16 +4306,11 @@ } }, "deep-extend": { - "version": "0.4.2", + "version": "0.5.1", "bundled": true, "dev": true, "optional": true }, - "delayed-stream": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, "delegates": { "version": "1.0.0", "bundled": true, @@ -4071,74 +4318,25 @@ "optional": true }, "detect-libc": { - "version": "1.0.2", + "version": "1.0.3", "bundled": true, "dev": true, "optional": true }, - "ecc-jsbn": { - "version": "0.1.1", + "fs-minipass": { + "version": "1.2.5", "bundled": true, "dev": true, "optional": true, "requires": { - "jsbn": "0.1.1" - } - }, - "extend": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "extsprintf": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "bundled": true, - "dev": true, - "optional": true - }, - "form-data": { - "version": "2.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.15" + "minipass": "^2.2.1" } }, "fs.realpath": { "version": "1.0.0", "bundled": true, - "dev": true - }, - "fstream": { - "version": "1.0.11", - "bundled": true, "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.1" - } - }, - "fstream-ignore": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fstream": "1.0.11", - "inherits": "2.0.3", - "minimatch": "3.0.4" - } + "optional": true }, "gauge": { "version": "2.7.4", @@ -4146,65 +4344,28 @@ "dev": true, "optional": true, "requires": { - "aproba": "1.1.1", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" - } - }, - "getpass": { - "version": "0.1.7", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" } }, "glob": { "version": "7.1.2", "bundled": true, "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "graceful-fs": { - "version": "4.1.11", - "bundled": true, - "dev": true - }, - "har-schema": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "har-validator": { - "version": "4.2.1", - "bundled": true, - "dev": true, "optional": true, "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "has-unicode": { @@ -4213,40 +4374,32 @@ "dev": true, "optional": true }, - "hawk": { - "version": "3.1.3", - "bundled": true, - "dev": true, - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" - } - }, - "hoek": { - "version": "2.16.3", - "bundled": true, - "dev": true - }, - "http-signature": { - "version": "1.1.1", + "iconv-lite": { + "version": "0.4.21", "bundled": true, "dev": true, "optional": true, "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.0", - "sshpk": "1.13.0" + "safer-buffer": "^2.1.0" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" } }, "inflight": { "version": "1.0.6", "bundled": true, "dev": true, + "optional": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -4255,7 +4408,7 @@ "dev": true }, "ini": { - "version": "1.3.4", + "version": "1.3.5", "bundled": true, "dev": true, "optional": true @@ -4265,107 +4418,21 @@ "bundled": true, "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, - "is-typedarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, "isarray": { "version": "1.0.0", "bundled": true, - "dev": true - }, - "isstream": { - "version": "0.1.2", - "bundled": true, "dev": true, "optional": true }, - "jodid25519": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "jsbn": { - "version": "0.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "bundled": true, - "dev": true, - "optional": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsonify": "0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "jsonify": { - "version": "0.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "jsprim": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.0.2", - "json-schema": "0.2.3", - "verror": "1.3.6" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "mime-db": { - "version": "1.27.0", - "bundled": true, - "dev": true - }, - "mime-types": { - "version": "2.1.15", - "bundled": true, - "dev": true, - "requires": { - "mime-db": "1.27.0" - } - }, "minimatch": { "version": "3.0.4", "bundled": true, "dev": true, "requires": { - "brace-expansion": "1.1.7" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -4373,6 +4440,24 @@ "bundled": true, "dev": true }, + "minipass": { + "version": "2.2.4", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "^5.1.1", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, "mkdirp": { "version": "0.5.1", "bundled": true, @@ -4387,23 +4472,40 @@ "dev": true, "optional": true }, - "node-pre-gyp": { - "version": "0.6.39", + "nan": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", + "dev": true, + "optional": true + }, + "needle": { + "version": "2.2.0", "bundled": true, "dev": true, "optional": true, "requires": { - "detect-libc": "1.0.2", - "hawk": "3.1.3", - "mkdirp": "0.5.1", - "nopt": "4.0.1", - "npmlog": "4.1.0", - "rc": "1.2.1", - "request": "2.81.0", - "rimraf": "2.6.1", - "semver": "5.3.0", - "tar": "2.2.1", - "tar-pack": "3.4.0" + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.10.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.0", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.1.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" } }, "nopt": { @@ -4412,20 +4514,36 @@ "dev": true, "optional": true, "requires": { - "abbrev": "1.1.0", - "osenv": "0.1.4" + "abbrev": "1", + "osenv": "^0.1.4" } }, - "npmlog": { - "version": "4.1.0", + "npm-bundled": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.1.10", "bundled": true, "dev": true, "optional": true, "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" } }, "number-is-nan": { @@ -4433,12 +4551,6 @@ "bundled": true, "dev": true }, - "oauth-sign": { - "version": "0.8.2", - "bundled": true, - "dev": true, - "optional": true - }, "object-assign": { "version": "4.1.1", "bundled": true, @@ -4450,7 +4562,7 @@ "bundled": true, "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "os-homedir": { @@ -4466,53 +4578,37 @@ "optional": true }, "osenv": { - "version": "0.1.4", + "version": "0.1.5", "bundled": true, "dev": true, "optional": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "path-is-absolute": { "version": "1.0.1", "bundled": true, - "dev": true - }, - "performance-now": { - "version": "0.2.0", - "bundled": true, "dev": true, "optional": true }, "process-nextick-args": { - "version": "1.0.7", - "bundled": true, - "dev": true - }, - "punycode": { - "version": "1.4.1", - "bundled": true, - "dev": true, - "optional": true - }, - "qs": { - "version": "6.4.0", + "version": "2.0.0", "bundled": true, "dev": true, "optional": true }, "rc": { - "version": "1.2.1", + "version": "1.2.7", "bundled": true, "dev": true, "optional": true, "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.4", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "^0.5.1", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, "dependencies": { "minimist": { @@ -4524,64 +4620,48 @@ } }, "readable-stream": { - "version": "2.2.9", - "bundled": true, - "dev": true, - "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "1.0.1", - "util-deprecate": "1.0.2" - } - }, - "request": { - "version": "2.81.0", + "version": "2.3.6", "bundled": true, "dev": true, "optional": true, "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.15", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.0.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.6.0", - "uuid": "3.0.1" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "rimraf": { - "version": "2.6.1", + "version": "2.6.2", "bundled": true, "dev": true, + "optional": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "safe-buffer": { - "version": "5.0.1", + "version": "5.1.1", "bundled": true, "dev": true }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, "semver": { - "version": "5.3.0", + "version": "5.5.0", "bundled": true, "dev": true, "optional": true @@ -4598,69 +4678,31 @@ "dev": true, "optional": true }, - "sntp": { - "version": "1.0.9", - "bundled": true, - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "sshpk": { - "version": "1.13.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jodid25519": "1.0.2", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, "string-width": { "version": "1.0.2", "bundled": true, "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "string_decoder": { - "version": "1.0.1", + "version": "1.1.1", "bundled": true, "dev": true, + "optional": true, "requires": { - "safe-buffer": "5.0.1" + "safe-buffer": "~5.1.0" } }, - "stringstream": { - "version": "0.0.5", - "bundled": true, - "dev": true, - "optional": true - }, "strip-ansi": { "version": "3.0.1", "bundled": true, "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-json-comments": { @@ -4670,94 +4712,44 @@ "optional": true }, "tar": { - "version": "2.2.1", - "bundled": true, - "dev": true, - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, - "tar-pack": { - "version": "3.4.0", + "version": "4.4.1", "bundled": true, "dev": true, "optional": true, "requires": { - "debug": "2.6.8", - "fstream": "1.0.11", - "fstream-ignore": "1.0.5", - "once": "1.4.0", - "readable-stream": "2.2.9", - "rimraf": "2.6.1", - "tar": "2.2.1", - "uid-number": "0.0.6" + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.2.4", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.1", + "yallist": "^3.0.2" } }, - "tough-cookie": { - "version": "2.3.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "punycode": "1.4.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "bundled": true, - "dev": true, - "optional": true - }, - "uid-number": { - "version": "0.0.6", - "bundled": true, - "dev": true, - "optional": true - }, "util-deprecate": { "version": "1.0.2", "bundled": true, - "dev": true - }, - "uuid": { - "version": "3.0.1", - "bundled": true, "dev": true, "optional": true }, - "verror": { - "version": "1.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "extsprintf": "1.0.2" - } - }, "wide-align": { "version": "1.1.2", "bundled": true, "dev": true, "optional": true, "requires": { - "string-width": "1.0.2" + "string-width": "^1.0.2" } }, "wrappy": { "version": "1.0.2", "bundled": true, "dev": true + }, + "yallist": { + "version": "3.0.2", + "bundled": true, + "dev": true } } }, @@ -4767,10 +4759,10 @@ "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.2" + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" } }, "function-bind": { @@ -4785,38 +4777,23 @@ "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "dev": true, "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" } }, "gaze": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz", - "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", "dev": true, "requires": { - "globule": "1.2.0" - } - }, - "generate-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", - "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", - "dev": true - }, - "generate-object-property": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", - "dev": true, - "requires": { - "is-property": "1.0.2" + "globule": "^1.0.0" } }, "get-caller-file": { @@ -4849,7 +4826,7 @@ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" }, "dependencies": { "assert-plus": { @@ -4866,8 +4843,8 @@ "integrity": "sha512-F/mS+fsWQMo1zfgG9MD8KWvTWPPzzhuVwY++fhQ5Ggd+0P+CAMHtzMZhNxG+TqGfHDChJKsbh6otfMGqO2AKBw==", "dev": true, "requires": { - "got": "7.1.0", - "is-plain-obj": "1.1.0" + "got": "^7.0.0", + "is-plain-obj": "^1.1.0" }, "dependencies": { "got": { @@ -4876,20 +4853,20 @@ "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", "dev": true, "requires": { - "decompress-response": "3.3.0", - "duplexer3": "0.1.4", - "get-stream": "3.0.0", - "is-plain-obj": "1.1.0", - "is-retry-allowed": "1.1.0", - "is-stream": "1.1.0", - "isurl": "1.0.0", - "lowercase-keys": "1.0.0", - "p-cancelable": "0.3.0", - "p-timeout": "1.2.1", - "safe-buffer": "5.1.1", - "timed-out": "4.0.1", - "url-parse-lax": "1.0.0", - "url-to-options": "1.0.1" + "decompress-response": "^3.2.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-plain-obj": "^1.1.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "p-cancelable": "^0.3.0", + "p-timeout": "^1.1.1", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "url-parse-lax": "^1.0.0", + "url-to-options": "^1.0.1" } }, "p-cancelable": { @@ -4904,7 +4881,7 @@ "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", "dev": true, "requires": { - "p-finally": "1.0.0" + "p-finally": "^1.0.0" } }, "prepend-http": { @@ -4919,7 +4896,7 @@ "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", "dev": true, "requires": { - "prepend-http": "1.0.4" + "prepend-http": "^1.0.1" } } } @@ -4930,7 +4907,7 @@ "integrity": "sha1-y+KABBiDIG2kISrp5LXxacML9Bc=", "dev": true, "requires": { - "gh-got": "6.0.0" + "gh-got": "^6.0.0" } }, "glob": { @@ -4939,12 +4916,12 @@ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "glob-all": { @@ -4953,8 +4930,8 @@ "integrity": "sha1-iRPd+17hrHgSZWJBsD1SF8ZLAqs=", "dev": true, "requires": { - "glob": "7.1.2", - "yargs": "1.2.6" + "glob": "^7.0.5", + "yargs": "~1.2.6" }, "dependencies": { "minimist": { @@ -4969,7 +4946,7 @@ "integrity": "sha1-nHtKgv1dWVsr8Xq23MQxNUMv40s=", "dev": true, "requires": { - "minimist": "0.1.0" + "minimist": "^0.1.0" } } } @@ -4980,8 +4957,8 @@ "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", "dev": true, "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" } }, "glob-parent": { @@ -4990,7 +4967,7 @@ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", "dev": true, "requires": { - "is-glob": "2.0.1" + "is-glob": "^2.0.0" } }, "globals": { @@ -5005,22 +4982,22 @@ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, "requires": { - "array-union": "1.0.2", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "globule": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.0.tgz", - "integrity": "sha1-HcScaCLdnoovoAuiopUAboZkvQk=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", + "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", "dev": true, "requires": { - "glob": "7.1.2", - "lodash": "4.17.4", - "minimatch": "3.0.4" + "glob": "~7.1.1", + "lodash": "~4.17.10", + "minimatch": "~3.0.2" } }, "good-listener": { @@ -5028,7 +5005,7 @@ "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", "requires": { - "delegate": "3.1.3" + "delegate": "^3.1.2" } }, "got": { @@ -5037,23 +5014,23 @@ "integrity": "sha512-kBNy/S2CGwrYgDSec5KTWGKUvupwkkTVAjIsVFF2shXO13xpZdFP4d4kxa//CLX2tN/rV0aYwK8vY6UKWGn2vQ==", "dev": true, "requires": { - "@sindresorhus/is": "0.7.0", - "cacheable-request": "2.1.4", - "decompress-response": "3.3.0", - "duplexer3": "0.1.4", - "get-stream": "3.0.0", - "into-stream": "3.1.0", - "is-retry-allowed": "1.1.0", - "isurl": "1.0.0", - "lowercase-keys": "1.0.0", - "mimic-response": "1.0.0", - "p-cancelable": "0.4.0", - "p-timeout": "2.0.1", - "pify": "3.0.0", - "safe-buffer": "5.1.1", - "timed-out": "4.0.1", - "url-parse-lax": "3.0.0", - "url-to-options": "1.0.1" + "@sindresorhus/is": "^0.7.0", + "cacheable-request": "^2.1.1", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "into-stream": "^3.1.0", + "is-retry-allowed": "^1.1.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "mimic-response": "^1.0.0", + "p-cancelable": "^0.4.0", + "p-timeout": "^2.0.1", + "pify": "^3.0.0", + "safe-buffer": "^5.1.1", + "timed-out": "^4.0.1", + "url-parse-lax": "^3.0.0", + "url-to-options": "^1.0.1" }, "dependencies": { "pify": { @@ -5076,19 +5053,23 @@ "integrity": "sha1-wWfSpTGcWg4JZO9qJbfC34mWyFw=", "dev": true, "requires": { - "lodash": "4.17.4" + "lodash": "^4.17.2" } }, + "har-schema": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", + "dev": true + }, "har-validator": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", - "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", "dev": true, "requires": { - "chalk": "1.1.3", - "commander": "2.13.0", - "is-my-json-valid": "2.17.2", - "pinkie-promise": "2.0.1" + "ajv": "^4.9.1", + "har-schema": "^1.0.5" } }, "has": { @@ -5097,7 +5078,7 @@ "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", "dev": true, "requires": { - "function-bind": "1.1.1" + "function-bind": "^1.0.2" } }, "has-ansi": { @@ -5106,7 +5087,7 @@ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "has-color": { @@ -5133,7 +5114,7 @@ "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", "dev": true, "requires": { - "has-symbol-support-x": "1.4.2" + "has-symbol-support-x": "^1.4.1" } }, "has-unicode": { @@ -5148,9 +5129,9 @@ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "1.0.0", - "isobject": "3.0.1" + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" }, "dependencies": { "isobject": { @@ -5167,8 +5148,8 @@ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { "is-number": { @@ -5177,7 +5158,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -5186,7 +5167,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -5197,28 +5178,29 @@ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } }, "hash-base": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", - "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", "dev": true, "requires": { - "inherits": "2.0.3" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.5.tgz", + "integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==", "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, "hawk": { @@ -5227,10 +5209,10 @@ "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", "dev": true, "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" } }, "hmac-drbg": { @@ -5239,9 +5221,9 @@ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, "requires": { - "hash.js": "1.1.3", - "minimalistic-assert": "1.0.0", - "minimalistic-crypto-utils": "1.0.1" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, "hoek": { @@ -5256,8 +5238,8 @@ "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", "dev": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.1" } }, "homedir-polyfill": { @@ -5266,7 +5248,7 @@ "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", "dev": true, "requires": { - "parse-passwd": "1.0.0" + "parse-passwd": "^1.0.0" } }, "hosted-git-info": { @@ -5293,9 +5275,9 @@ "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", "dev": true, "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.1", - "sshpk": "1.13.1" + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" } }, "https-browserify": { @@ -5316,7 +5298,7 @@ "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", "dev": true, "requires": { - "postcss": "6.0.19" + "postcss": "^6.0.1" }, "dependencies": { "ansi-styles": { @@ -5325,7 +5307,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "chalk": { @@ -5334,9 +5316,9 @@ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "postcss": { @@ -5345,9 +5327,9 @@ "integrity": "sha512-f13HRz0HtVwVaEuW6J6cOUCBLFtymhgyLPV7t4QEk2UD3twRI9IluDcQNdzQdBpiixkXj2OmzejhhTbSbDxNTg==", "dev": true, "requires": { - "chalk": "2.3.2", - "source-map": "0.6.1", - "supports-color": "5.3.0" + "chalk": "^2.3.1", + "source-map": "^0.6.1", + "supports-color": "^5.2.0" } }, "supports-color": { @@ -5356,15 +5338,15 @@ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } }, "ieee754": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", - "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", + "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", "dev": true }, "iferr": { @@ -5391,7 +5373,7 @@ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", "dev": true, "requires": { - "repeating": "2.0.1" + "repeating": "^2.0.0" } }, "indexes-of": { @@ -5412,8 +5394,8 @@ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -5434,19 +5416,19 @@ "integrity": "sha512-kn7N70US1MSZHZHSGJLiZ7iCwwncc7b0gc68YtlX29OjI3Mp0tSVV+snVXpZ1G+ONS3Ac9zd1m6hve2ibLDYfA==", "dev": true, "requires": { - "ansi-escapes": "3.0.0", - "chalk": "2.3.2", - "cli-cursor": "2.1.0", - "cli-width": "2.2.0", - "external-editor": "2.1.0", - "figures": "2.0.0", - "lodash": "4.17.4", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.1.0", + "figures": "^2.0.0", + "lodash": "^4.3.0", "mute-stream": "0.0.7", - "run-async": "2.3.0", - "rxjs": "5.5.6", - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "through": "2.3.8" + "run-async": "^2.2.0", + "rxjs": "^5.5.2", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" }, "dependencies": { "ansi-regex": { @@ -5461,7 +5443,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "chalk": { @@ -5470,9 +5452,9 @@ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "is-fullwidth-code-point": { @@ -5487,8 +5469,8 @@ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, "strip-ansi": { @@ -5497,7 +5479,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } }, "supports-color": { @@ -5506,7 +5488,7 @@ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -5523,8 +5505,8 @@ "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", "dev": true, "requires": { - "from2": "2.3.0", - "p-is-promise": "1.1.0" + "from2": "^2.1.1", + "p-is-promise": "^1.1.0" } }, "invariant": { @@ -5533,7 +5515,7 @@ "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", "dev": true, "requires": { - "loose-envify": "1.3.1" + "loose-envify": "^1.0.0" } }, "invert-kv": { @@ -5549,20 +5531,12 @@ "dev": true }, "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } + "kind-of": "^3.0.2" } }, "is-arrayish": { @@ -5577,7 +5551,7 @@ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "requires": { - "binary-extensions": "1.10.0" + "binary-extensions": "^1.0.0" } }, "is-buffer": { @@ -5591,7 +5565,7 @@ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "dev": true, "requires": { - "builtin-modules": "1.1.1" + "builtin-modules": "^1.0.0" } }, "is-callable": { @@ -5601,20 +5575,12 @@ "dev": true }, "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } + "kind-of": "^3.0.2" } }, "is-date-object": { @@ -5624,20 +5590,20 @@ "dev": true }, "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "dependencies": { "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "dev": true } } @@ -5660,7 +5626,7 @@ "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", "dev": true, "requires": { - "is-primitive": "2.0.0" + "is-primitive": "^2.0.0" } }, "is-extendable": { @@ -5681,7 +5647,7 @@ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-fullwidth-code-point": { @@ -5690,7 +5656,7 @@ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-glob": { @@ -5699,26 +5665,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "1.0.0" - } - }, - "is-my-ip-valid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", - "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==", - "dev": true - }, - "is-my-json-valid": { - "version": "2.17.2", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz", - "integrity": "sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg==", - "dev": true, - "requires": { - "generate-function": "2.0.0", - "generate-object-property": "1.2.0", - "is-my-ip-valid": "1.0.0", - "jsonpointer": "4.0.1", - "xtend": "4.0.1" + "is-extglob": "^1.0.0" } }, "is-number": { @@ -5727,7 +5674,7 @@ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "is-object": { @@ -5742,7 +5689,7 @@ "integrity": "sha1-s2ExHYPG5dcmyr9eJQsCNxBvWuI=", "dev": true, "requires": { - "symbol-observable": "0.2.4" + "symbol-observable": "^0.2.2" }, "dependencies": { "symbol-observable": { @@ -5753,23 +5700,6 @@ } } }, - "is-odd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", - "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", - "dev": true, - "requires": { - "is-number": "4.0.0" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - } - } - }, "is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", @@ -5782,7 +5712,7 @@ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" }, "dependencies": { "isobject": { @@ -5811,19 +5741,13 @@ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", "dev": true }, - "is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", - "dev": true - }, "is-regex": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", "dev": true, "requires": { - "has": "1.0.1" + "has": "^1.0.1" } }, "is-retry-allowed": { @@ -5838,7 +5762,7 @@ "integrity": "sha1-RJypgpnnEwOCViieyytUDcQ3yzA=", "dev": true, "requires": { - "scoped-regex": "1.0.0" + "scoped-regex": "^1.0.0" } }, "is-stream": { @@ -5853,7 +5777,7 @@ "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", "dev": true, "requires": { - "html-comment-regex": "1.1.1" + "html-comment-regex": "^1.1.0" } }, "is-symbol": { @@ -5874,6 +5798,12 @@ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", "dev": true }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -5907,9 +5837,9 @@ "integrity": "sha512-TS+hoFl8Z5FAFMK38nhBkdLt44CclNRgDHWeMgsV8ko3nDlr/9UI2Sf839sW7enijf8oKsZYXRvM8g0it9Zmcw==", "dev": true, "requires": { - "binaryextensions": "2.1.1", - "editions": "1.3.4", - "textextensions": "2.2.0" + "binaryextensions": "2", + "editions": "^1.3.3", + "textextensions": "2" } }, "isurl": { @@ -5918,8 +5848,8 @@ "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", "dev": true, "requires": { - "has-to-string-tag-x": "1.4.1", - "is-object": "1.0.1" + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" } }, "jquery": { @@ -5945,8 +5875,8 @@ "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", "dev": true, "requires": { - "argparse": "1.0.9", - "esprima": "2.7.3" + "argparse": "^1.0.7", + "esprima": "^2.6.0" }, "dependencies": { "esprima": { @@ -5970,21 +5900,21 @@ "integrity": "sha512-JAcQINNMFpdzzpKJN8k5xXjF3XDuckB1/48uScSzcnNyK199iWEc9AxKL9OoX5144M2w5zEx9Qs4/E/eBZZUlw==", "dev": true, "requires": { - "babel-plugin-transform-flow-strip-types": "6.22.0", - "babel-preset-es2015": "6.24.1", - "babel-preset-stage-1": "6.24.1", - "babel-register": "6.26.0", - "babylon": "7.0.0-beta.40", - "colors": "1.2.0", - "flow-parser": "0.67.1", - "lodash": "4.17.4", - "micromatch": "2.3.11", - "neo-async": "2.5.0", + "babel-plugin-transform-flow-strip-types": "^6.8.0", + "babel-preset-es2015": "^6.9.0", + "babel-preset-stage-1": "^6.5.0", + "babel-register": "^6.9.0", + "babylon": "^7.0.0-beta.30", + "colors": "^1.1.2", + "flow-parser": "^0.*", + "lodash": "^4.13.1", + "micromatch": "^2.3.7", + "neo-async": "^2.5.0", "node-dir": "0.1.8", - "nomnom": "1.8.1", - "recast": "0.14.5", - "temp": "0.8.3", - "write-file-atomic": "1.3.4" + "nomnom": "^1.8.1", + "recast": "^0.14.1", + "temp": "^0.8.1", + "write-file-atomic": "^1.2.0" }, "dependencies": { "babylon": { @@ -6025,6 +5955,15 @@ "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", "dev": true }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "requires": { + "jsonify": "~0.0.0" + } + }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -6043,12 +5982,6 @@ "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", "dev": true }, - "jsonpointer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", - "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", - "dev": true - }, "jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", @@ -6084,7 +6017,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } }, "lcid": { @@ -6093,7 +6026,7 @@ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", "dev": true, "requires": { - "invert-kv": "1.0.0" + "invert-kv": "^1.0.0" } }, "linkify-it": { @@ -6101,7 +6034,7 @@ "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.0.3.tgz", "integrity": "sha1-2UpGSPmxwXnWT6lykSaL22zpQ08=", "requires": { - "uc.micro": "1.0.3" + "uc.micro": "^1.0.1" } }, "listr": { @@ -6110,23 +6043,23 @@ "integrity": "sha1-ILsLowuuZg7oTMBQPfS+PVYjiH0=", "dev": true, "requires": { - "chalk": "1.1.3", - "cli-truncate": "0.2.1", - "figures": "1.7.0", - "indent-string": "2.1.0", - "is-observable": "0.2.0", - "is-promise": "2.1.0", - "is-stream": "1.1.0", - "listr-silent-renderer": "1.1.1", - "listr-update-renderer": "0.4.0", - "listr-verbose-renderer": "0.4.1", - "log-symbols": "1.0.2", - "log-update": "1.0.2", - "ora": "0.2.3", - "p-map": "1.2.0", - "rxjs": "5.5.6", - "stream-to-observable": "0.2.0", - "strip-ansi": "3.0.1" + "chalk": "^1.1.3", + "cli-truncate": "^0.2.1", + "figures": "^1.7.0", + "indent-string": "^2.1.0", + "is-observable": "^0.2.0", + "is-promise": "^2.1.0", + "is-stream": "^1.1.0", + "listr-silent-renderer": "^1.1.1", + "listr-update-renderer": "^0.4.0", + "listr-verbose-renderer": "^0.4.0", + "log-symbols": "^1.0.2", + "log-update": "^1.0.2", + "ora": "^0.2.3", + "p-map": "^1.1.1", + "rxjs": "^5.4.2", + "stream-to-observable": "^0.2.0", + "strip-ansi": "^3.0.1" }, "dependencies": { "figures": { @@ -6135,8 +6068,8 @@ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", "dev": true, "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" } }, "log-symbols": { @@ -6145,7 +6078,7 @@ "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", "dev": true, "requires": { - "chalk": "1.1.3" + "chalk": "^1.0.0" } } } @@ -6162,14 +6095,14 @@ "integrity": "sha1-NE2YDaLKLosUW6MFkI8yrj9MyKc=", "dev": true, "requires": { - "chalk": "1.1.3", - "cli-truncate": "0.2.1", - "elegant-spinner": "1.0.1", - "figures": "1.7.0", - "indent-string": "3.2.0", - "log-symbols": "1.0.2", - "log-update": "1.0.2", - "strip-ansi": "3.0.1" + "chalk": "^1.1.3", + "cli-truncate": "^0.2.1", + "elegant-spinner": "^1.0.1", + "figures": "^1.7.0", + "indent-string": "^3.0.0", + "log-symbols": "^1.0.2", + "log-update": "^1.0.2", + "strip-ansi": "^3.0.1" }, "dependencies": { "figures": { @@ -6178,8 +6111,8 @@ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", "dev": true, "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" } }, "indent-string": { @@ -6194,7 +6127,7 @@ "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", "dev": true, "requires": { - "chalk": "1.1.3" + "chalk": "^1.0.0" } } } @@ -6205,10 +6138,10 @@ "integrity": "sha1-ggb0z21S3cWCfl/RSYng6WWTOjU=", "dev": true, "requires": { - "chalk": "1.1.3", - "cli-cursor": "1.0.2", - "date-fns": "1.29.0", - "figures": "1.7.0" + "chalk": "^1.1.3", + "cli-cursor": "^1.0.2", + "date-fns": "^1.27.2", + "figures": "^1.7.0" }, "dependencies": { "cli-cursor": { @@ -6217,7 +6150,7 @@ "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", "dev": true, "requires": { - "restore-cursor": "1.0.1" + "restore-cursor": "^1.0.1" } }, "figures": { @@ -6226,8 +6159,8 @@ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", "dev": true, "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" } }, "onetime": { @@ -6242,8 +6175,8 @@ "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", "dev": true, "requires": { - "exit-hook": "1.1.1", - "onetime": "1.1.0" + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" } } } @@ -6254,9 +6187,9 @@ "integrity": "sha512-PHnIGczQEvmCctDvRTWylA+1wSwE0/eFm+LkNhlmlAFus/aCRlVE97UOLOf6TUGLmZyfg7z7twG37ZiOgNJAyQ==", "dev": true, "requires": { - "chokidar": "1.7.0", - "opts": "1.2.6", - "ws": "1.1.5" + "chokidar": "^1.7.0", + "opts": ">= 1.2.0", + "ws": "^1.1.5" } }, "load-json-file": { @@ -6265,11 +6198,11 @@ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" } }, "loader-runner": { @@ -6284,9 +6217,9 @@ "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", "dev": true, "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1" + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0" } }, "locate-path": { @@ -6295,8 +6228,8 @@ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" }, "dependencies": { "path-exists": { @@ -6308,9 +6241,9 @@ } }, "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", "dev": true }, "lodash.assign": { @@ -6331,6 +6264,12 @@ "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", "dev": true }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -6361,7 +6300,7 @@ "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", "dev": true, "requires": { - "chalk": "2.3.2" + "chalk": "^2.0.1" }, "dependencies": { "ansi-styles": { @@ -6370,7 +6309,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "chalk": { @@ -6379,9 +6318,9 @@ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "supports-color": { @@ -6390,7 +6329,7 @@ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -6401,8 +6340,8 @@ "integrity": "sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE=", "dev": true, "requires": { - "ansi-escapes": "1.4.0", - "cli-cursor": "1.0.2" + "ansi-escapes": "^1.0.0", + "cli-cursor": "^1.0.2" }, "dependencies": { "ansi-escapes": { @@ -6417,7 +6356,7 @@ "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", "dev": true, "requires": { - "restore-cursor": "1.0.1" + "restore-cursor": "^1.0.1" } }, "onetime": { @@ -6432,19 +6371,25 @@ "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", "dev": true, "requires": { - "exit-hook": "1.1.1", - "onetime": "1.1.0" + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" } } } }, + "long": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz", + "integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s=", + "dev": true + }, "loose-envify": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", "dev": true, "requires": { - "js-tokens": "3.0.2" + "js-tokens": "^3.0.0" } }, "loud-rejection": { @@ -6453,8 +6398,8 @@ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", "dev": true, "requires": { - "currently-unhandled": "0.4.1", - "signal-exit": "3.0.2" + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" } }, "lowercase-keys": { @@ -6469,14 +6414,14 @@ "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==", "dev": true, "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, "macaddress": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/macaddress/-/macaddress-0.2.8.tgz", - "integrity": "sha1-WQTcU3w57G2+/q6QIycTX6hRHxI=", + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/macaddress/-/macaddress-0.2.9.tgz", + "integrity": "sha512-k4F1JUof6cQXxNFzx3thLby4oJzXTXQueAOOts944Vqizn+Rjc2QNFenT9FJSLU1CH3PmrHRSyZs2E+Cqw+P2w==", "dev": true }, "make-dir": { @@ -6485,7 +6430,7 @@ "integrity": "sha512-aNUAa4UMg/UougV25bbrU4ZaaKNjJ/3/xnvg/twpmKROPdKZPZ9wGgI0opdZzO8q/zUFawoUuixuOv33eZ61Iw==", "dev": true, "requires": { - "pify": "3.0.0" + "pify": "^3.0.0" }, "dependencies": { "pify": { @@ -6496,6 +6441,12 @@ } } }, + "mamacro": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", + "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==", + "dev": true + }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -6520,7 +6471,7 @@ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "requires": { - "object-visit": "1.0.1" + "object-visit": "^1.0.0" } }, "markdown-it": { @@ -6528,11 +6479,11 @@ "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.0.tgz", "integrity": "sha512-tNuOCCfunY5v5uhcO2AUMArvKAyKMygX8tfup/JrgnsDqcCATQsAExBq7o5Ml9iMmO82bk6jYNLj6khcrl0JGA==", "requires": { - "argparse": "1.0.9", - "entities": "1.1.1", - "linkify-it": "2.0.3", - "mdurl": "1.0.1", - "uc.micro": "1.0.3" + "argparse": "^1.0.7", + "entities": "~1.1.1", + "linkify-it": "^2.0.0", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.3" } }, "markdown-it-task-lists": { @@ -6546,26 +6497,20 @@ "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=", "dev": true }, + "math-random": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", + "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", + "dev": true + }, "md5.js": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", "dev": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" - }, - "dependencies": { - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" - } - } + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, "mdurl": { @@ -6579,7 +6524,7 @@ "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", "dev": true, "requires": { - "mimic-fn": "1.2.0" + "mimic-fn": "^1.0.0" } }, "mem-fs": { @@ -6588,9 +6533,9 @@ "integrity": "sha1-uK6NLj/Lb10/kWXBLUVRoGXZicw=", "dev": true, "requires": { - "through2": "2.0.3", - "vinyl": "1.2.0", - "vinyl-file": "2.0.0" + "through2": "^2.0.0", + "vinyl": "^1.1.0", + "vinyl-file": "^2.0.0" } }, "mem-fs-editor": { @@ -6599,16 +6544,16 @@ "integrity": "sha1-3Qpuryu4prN3QAZ6pUnrUwEFr58=", "dev": true, "requires": { - "commondir": "1.0.1", - "deep-extend": "0.4.2", - "ejs": "2.5.7", - "glob": "7.1.2", - "globby": "6.1.0", - "mkdirp": "0.5.1", - "multimatch": "2.1.0", - "rimraf": "2.6.2", - "through2": "2.0.3", - "vinyl": "2.1.0" + "commondir": "^1.0.1", + "deep-extend": "^0.4.0", + "ejs": "^2.3.1", + "glob": "^7.0.3", + "globby": "^6.1.0", + "mkdirp": "^0.5.0", + "multimatch": "^2.0.0", + "rimraf": "^2.2.8", + "through2": "^2.0.0", + "vinyl": "^2.0.1" }, "dependencies": { "clone": { @@ -6635,12 +6580,12 @@ "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", "dev": true, "requires": { - "clone": "2.1.1", - "clone-buffer": "1.0.0", - "clone-stats": "1.0.0", - "cloneable-readable": "1.1.1", - "remove-trailing-separator": "1.1.0", - "replace-ext": "1.0.0" + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" } } } @@ -6651,8 +6596,8 @@ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "dev": true, "requires": { - "errno": "0.1.7", - "readable-stream": "2.3.3" + "errno": "^0.1.3", + "readable-stream": "^2.0.1" } }, "memorystream": { @@ -6667,16 +6612,16 @@ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "dev": true, "requires": { - "camelcase-keys": "2.1.0", - "decamelize": "1.2.0", - "loud-rejection": "1.6.0", - "map-obj": "1.0.1", - "minimist": "1.2.0", - "normalize-package-data": "2.4.0", - "object-assign": "4.1.1", - "read-pkg-up": "1.0.1", - "redent": "1.0.0", - "trim-newlines": "1.0.0" + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" } }, "micromatch": { @@ -6685,19 +6630,19 @@ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "dev": true, "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" } }, "miller-rabin": { @@ -6706,23 +6651,23 @@ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0" + "bn.js": "^4.0.0", + "brorand": "^1.0.1" } }, "mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "version": "1.35.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz", + "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==", "dev": true }, "mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "version": "2.1.19", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz", + "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==", "dev": true, "requires": { - "mime-db": "1.33.0" + "mime-db": "~1.35.0" } }, "mimic-fn": { @@ -6738,9 +6683,9 @@ "dev": true }, "minimalistic-assert": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", - "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "dev": true }, "minimalistic-crypto-utils": { @@ -6755,7 +6700,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.8" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -6770,16 +6715,16 @@ "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", "dev": true, "requires": { - "concat-stream": "1.6.1", - "duplexify": "3.5.4", - "end-of-stream": "1.4.1", - "flush-write-stream": "1.0.2", - "from2": "2.3.0", - "parallel-transform": "1.1.0", - "pump": "2.0.1", - "pumpify": "1.4.0", - "stream-each": "1.2.2", - "through2": "2.0.3" + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^2.0.1", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" } }, "mixin-deep": { @@ -6788,8 +6733,8 @@ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", "dev": true, "requires": { - "for-in": "1.0.2", - "is-extendable": "1.0.1" + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -6798,7 +6743,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -6809,8 +6754,8 @@ "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", "dev": true, "requires": { - "for-in": "0.1.8", - "is-extendable": "0.1.1" + "for-in": "^0.1.3", + "is-extendable": "^0.1.1" }, "dependencies": { "for-in": { @@ -6844,12 +6789,12 @@ "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", "dev": true, "requires": { - "aproba": "1.2.0", - "copy-concurrently": "1.0.5", - "fs-write-stream-atomic": "1.0.10", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "run-queue": "1.0.3" + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" } }, "ms": { @@ -6863,10 +6808,10 @@ "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=", "dev": true, "requires": { - "array-differ": "1.0.0", - "array-union": "1.0.2", - "arrify": "1.0.1", - "minimatch": "3.0.4" + "array-differ": "^1.0.0", + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "minimatch": "^3.0.0" } }, "mute-stream": { @@ -6875,30 +6820,23 @@ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", "dev": true }, - "nan": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.7.0.tgz", - "integrity": "sha1-2Vv3IeyHfgjbJ27T/G63j5CDrUY=", - "dev": true - }, "nanomatch": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", - "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "fragment-cache": "0.2.1", - "is-odd": "2.0.0", - "is-windows": "1.0.2", - "kind-of": "6.0.2", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "arr-diff": { @@ -6913,12 +6851,6 @@ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", @@ -6946,26 +6878,55 @@ "dev": true }, "node-gyp": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz", - "integrity": "sha1-m/vlRWIoYoSDjnUOrAUpWFP6HGA=", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.7.0.tgz", + "integrity": "sha512-qDQE/Ft9xXP6zphwx4sD0t+VhwV7yFaloMpfbL2QnnDZcyaiakWlLdtFGGQfTAwpFHdpbRhRxVhIHN1OKAjgbg==", "dev": true, "requires": { - "fstream": "1.0.11", - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "nopt": "3.0.6", - "npmlog": "4.1.2", - "osenv": "0.1.5", - "request": "2.79.0", - "rimraf": "2.6.2", - "semver": "5.3.0", - "tar": "2.2.1", - "which": "1.3.0" + "fstream": "^1.0.0", + "glob": "^7.0.3", + "graceful-fs": "^4.1.2", + "mkdirp": "^0.5.0", + "nopt": "2 || 3", + "npmlog": "0 || 1 || 2 || 3 || 4", + "osenv": "0", + "request": ">=2.9.0 <2.82.0", + "rimraf": "2", + "semver": "~5.3.0", + "tar": "^2.0.0", + "which": "1" }, "dependencies": { + "request": { + "version": "2.81.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "dev": true, + "requires": { + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.1.1", + "har-validator": "~4.2.1", + "hawk": "~3.1.3", + "http-signature": "~1.1.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.7", + "oauth-sign": "~0.8.1", + "performance-now": "^0.2.0", + "qs": "~6.4.0", + "safe-buffer": "^5.0.1", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.0.0" + } + }, "semver": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", @@ -6980,84 +6941,64 @@ "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", "dev": true, "requires": { - "assert": "1.4.1", - "browserify-zlib": "0.2.0", - "buffer": "4.9.1", - "console-browserify": "1.1.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.12.0", - "domain-browser": "1.1.7", - "events": "1.1.1", - "https-browserify": "1.0.0", - "os-browserify": "0.3.0", + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^1.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", "path-browserify": "0.0.0", - "process": "0.11.10", - "punycode": "1.4.1", - "querystring-es3": "0.2.1", - "readable-stream": "2.3.3", - "stream-browserify": "2.0.1", - "stream-http": "2.7.2", - "string_decoder": "1.0.3", - "timers-browserify": "2.0.6", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.10.3", + "url": "^0.11.0", + "util": "^0.10.3", "vm-browserify": "0.0.4" - }, - "dependencies": { - "buffer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", - "dev": true, - "requires": { - "base64-js": "1.2.1", - "ieee754": "1.1.8", - "isarray": "1.0.0" - } - }, - "timers-browserify": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.6.tgz", - "integrity": "sha512-HQ3nbYRAowdVd0ckGFvmJPPCOH/CHleFN/Y0YQCX1DVaB7t+KFvisuyN09fuP8Jtp1CpfSh8O8bMkHbdbPe6Pw==", - "dev": true, - "requires": { - "setimmediate": "1.0.5" - } - }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", - "dev": true - } } }, "node-sass": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.7.2.tgz", - "integrity": "sha512-CaV+wLqZ7//Jdom5aUFCpGNoECd7BbNhjuwdsX/LkXBrHl8eb1Wjw4HvWqcFvhr5KuNgAk8i/myf/MQ1YYeroA==", + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.9.2.tgz", + "integrity": "sha512-LdxoJLZutx0aQXHtWIYwJKMj+9pTjneTcLWJgzf2XbGu0q5pRNqW5QvFCEdm3mc5rJOdru/mzln5d0EZLacf6g==", "dev": true, "requires": { - "async-foreach": "0.1.3", - "chalk": "1.1.3", - "cross-spawn": "3.0.1", - "gaze": "1.1.2", - "get-stdin": "4.0.1", - "glob": "7.1.2", - "in-publish": "2.0.0", - "lodash.assign": "4.2.0", - "lodash.clonedeep": "4.5.0", - "lodash.mergewith": "4.6.1", - "meow": "3.7.0", - "mkdirp": "0.5.1", - "nan": "2.7.0", - "node-gyp": "3.6.2", - "npmlog": "4.1.2", - "request": "2.79.0", - "sass-graph": "2.2.4", - "stdout-stream": "1.4.0", - "true-case-path": "1.0.2" + "async-foreach": "^0.1.3", + "chalk": "^1.1.1", + "cross-spawn": "^3.0.0", + "gaze": "^1.0.0", + "get-stdin": "^4.0.1", + "glob": "^7.0.3", + "in-publish": "^2.0.0", + "lodash.assign": "^4.2.0", + "lodash.clonedeep": "^4.3.2", + "lodash.mergewith": "^4.6.0", + "meow": "^3.7.0", + "mkdirp": "^0.5.1", + "nan": "^2.10.0", + "node-gyp": "^3.3.1", + "npmlog": "^4.0.0", + "request": "2.87.0", + "sass-graph": "^2.2.4", + "stdout-stream": "^1.4.0", + "true-case-path": "^1.0.2" + }, + "dependencies": { + "nan": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", + "dev": true + } } }, "nomnom": { @@ -7066,8 +7007,8 @@ "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=", "dev": true, "requires": { - "chalk": "0.4.0", - "underscore": "1.6.0" + "chalk": "~0.4.0", + "underscore": "~1.6.0" }, "dependencies": { "ansi-styles": { @@ -7082,9 +7023,9 @@ "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", "dev": true, "requires": { - "ansi-styles": "1.0.0", - "has-color": "0.1.7", - "strip-ansi": "0.1.1" + "ansi-styles": "~1.0.0", + "has-color": "~0.1.0", + "strip-ansi": "~0.1.0" } }, "strip-ansi": { @@ -7101,7 +7042,7 @@ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", "dev": true, "requires": { - "abbrev": "1.1.1" + "abbrev": "1" } }, "normalize-package-data": { @@ -7110,10 +7051,10 @@ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "dev": true, "requires": { - "hosted-git-info": "2.5.0", - "is-builtin-module": "1.0.0", - "semver": "4.3.6", - "validate-npm-package-license": "3.0.1" + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, "normalize-path": { @@ -7122,7 +7063,7 @@ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "remove-trailing-separator": "1.1.0" + "remove-trailing-separator": "^1.0.1" } }, "normalize-range": { @@ -7137,9 +7078,9 @@ "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", "dev": true, "requires": { - "prepend-http": "2.0.0", - "query-string": "5.1.0", - "sort-keys": "2.0.0" + "prepend-http": "^2.0.0", + "query-string": "^5.0.1", + "sort-keys": "^2.0.0" } }, "npm-run-all": { @@ -7148,15 +7089,15 @@ "integrity": "sha512-Z2aRlajMK4SQ8u19ZA75NZZu7wupfCNQWdYosIi8S6FgBdGf/8Y6Hgyjdc8zU2cYmIRVCx1nM80tJPkdEd+UYg==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "chalk": "2.3.2", - "cross-spawn": "5.1.0", - "memorystream": "0.3.1", - "minimatch": "3.0.4", - "ps-tree": "1.1.0", - "read-pkg": "3.0.0", - "shell-quote": "1.6.1", - "string.prototype.padend": "3.0.0" + "ansi-styles": "^3.2.0", + "chalk": "^2.1.0", + "cross-spawn": "^5.1.0", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "ps-tree": "^1.1.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" }, "dependencies": { "ansi-styles": { @@ -7165,7 +7106,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "chalk": { @@ -7174,9 +7115,9 @@ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "cross-spawn": { @@ -7185,9 +7126,9 @@ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { - "lru-cache": "4.1.2", - "shebang-command": "1.2.0", - "which": "1.3.0" + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, "load-json-file": { @@ -7196,10 +7137,10 @@ "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "parse-json": "4.0.0", - "pify": "3.0.0", - "strip-bom": "3.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" } }, "parse-json": { @@ -7208,8 +7149,8 @@ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { - "error-ex": "1.3.1", - "json-parse-better-errors": "1.0.1" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" } }, "path-type": { @@ -7218,7 +7159,7 @@ "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "requires": { - "pify": "3.0.0" + "pify": "^3.0.0" } }, "pify": { @@ -7233,9 +7174,9 @@ "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, "requires": { - "load-json-file": "4.0.0", - "normalize-package-data": "2.4.0", - "path-type": "3.0.0" + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" } }, "strip-bom": { @@ -7250,7 +7191,7 @@ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -7261,7 +7202,7 @@ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { - "path-key": "2.0.1" + "path-key": "^2.0.0" } }, "npmlog": { @@ -7270,10 +7211,10 @@ "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "dev": true, "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" } }, "num2fraction": { @@ -7306,9 +7247,9 @@ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "requires": { - "copy-descriptor": "0.1.1", - "define-property": "0.2.5", - "kind-of": "3.2.2" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" }, "dependencies": { "define-property": { @@ -7317,44 +7258,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "is-descriptor": "^0.1.0" } } } @@ -7371,7 +7275,7 @@ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.0" }, "dependencies": { "isobject": { @@ -7388,8 +7292,8 @@ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", "dev": true, "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" } }, "object.pick": { @@ -7398,7 +7302,7 @@ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" }, "dependencies": { "isobject": { @@ -7415,7 +7319,7 @@ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "onetime": { @@ -7424,7 +7328,7 @@ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", "dev": true, "requires": { - "mimic-fn": "1.2.0" + "mimic-fn": "^1.0.0" } }, "options": { @@ -7445,10 +7349,10 @@ "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=", "dev": true, "requires": { - "chalk": "1.1.3", - "cli-cursor": "1.0.2", - "cli-spinners": "0.1.2", - "object-assign": "4.1.1" + "chalk": "^1.1.1", + "cli-cursor": "^1.0.2", + "cli-spinners": "^0.1.2", + "object-assign": "^4.0.1" }, "dependencies": { "cli-cursor": { @@ -7457,7 +7361,7 @@ "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", "dev": true, "requires": { - "restore-cursor": "1.0.1" + "restore-cursor": "^1.0.1" } }, "onetime": { @@ -7472,8 +7376,8 @@ "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", "dev": true, "requires": { - "exit-hook": "1.1.1", - "onetime": "1.1.0" + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" } } } @@ -7496,7 +7400,7 @@ "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", "dev": true, "requires": { - "lcid": "1.0.0" + "lcid": "^1.0.0" } }, "os-tmpdir": { @@ -7511,8 +7415,8 @@ "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "dev": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "p-cancelable": { @@ -7527,7 +7431,7 @@ "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", "dev": true, "requires": { - "p-reduce": "1.0.0" + "p-reduce": "^1.0.0" } }, "p-finally": { @@ -7554,7 +7458,7 @@ "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", "dev": true, "requires": { - "p-try": "1.0.0" + "p-try": "^1.0.0" } }, "p-locate": { @@ -7563,7 +7467,7 @@ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "p-limit": "1.2.0" + "p-limit": "^1.1.0" } }, "p-map": { @@ -7584,7 +7488,7 @@ "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", "dev": true, "requires": { - "p-finally": "1.0.0" + "p-finally": "^1.0.0" } }, "p-try": { @@ -7605,22 +7509,22 @@ "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", "dev": true, "requires": { - "cyclist": "0.2.2", - "inherits": "2.0.3", - "readable-stream": "2.3.3" + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" } }, "parse-asn1": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", - "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", + "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", "dev": true, "requires": { - "asn1.js": "4.9.2", - "browserify-aes": "1.1.1", - "create-hash": "1.1.3", - "evp_bytestokey": "1.0.3", - "pbkdf2": "3.0.14" + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3" } }, "parse-glob": { @@ -7629,10 +7533,10 @@ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", "dev": true, "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" } }, "parse-json": { @@ -7641,7 +7545,7 @@ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { - "error-ex": "1.3.1" + "error-ex": "^1.2.0" } }, "parse-passwd": { @@ -7674,7 +7578,7 @@ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "dev": true, "requires": { - "pinkie-promise": "2.0.1" + "pinkie-promise": "^2.0.0" } }, "path-is-absolute": { @@ -7701,9 +7605,9 @@ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "pause-stream": { @@ -7712,22 +7616,28 @@ "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", "dev": true, "requires": { - "through": "2.3.8" + "through": "~2.3" } }, "pbkdf2": { - "version": "3.0.14", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz", - "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.16.tgz", + "integrity": "sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==", "dev": true, "requires": { - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "ripemd160": "2.0.1", - "safe-buffer": "5.1.1", - "sha.js": "2.4.9" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, + "performance-now": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", + "dev": true + }, "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", @@ -7746,7 +7656,7 @@ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, "requires": { - "pinkie": "2.0.4" + "pinkie": "^2.0.0" } }, "pkg-dir": { @@ -7755,7 +7665,7 @@ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "dev": true, "requires": { - "find-up": "2.1.0" + "find-up": "^2.1.0" }, "dependencies": { "find-up": { @@ -7764,7 +7674,7 @@ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "2.0.0" + "locate-path": "^2.0.0" } } } @@ -7781,10 +7691,10 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "dev": true, "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" }, "dependencies": { "has-flag": { @@ -7805,7 +7715,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } @@ -7816,9 +7726,9 @@ "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-message-helpers": "2.0.0", - "reduce-css-calc": "1.3.0" + "postcss": "^5.0.2", + "postcss-message-helpers": "^2.0.0", + "reduce-css-calc": "^1.2.6" } }, "postcss-colormin": { @@ -7827,9 +7737,9 @@ "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", "dev": true, "requires": { - "colormin": "1.1.2", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "colormin": "^1.0.5", + "postcss": "^5.0.13", + "postcss-value-parser": "^3.2.3" } }, "postcss-convert-values": { @@ -7838,8 +7748,8 @@ "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "postcss": "^5.0.11", + "postcss-value-parser": "^3.1.2" } }, "postcss-discard-comments": { @@ -7848,7 +7758,7 @@ "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.14" } }, "postcss-discard-duplicates": { @@ -7857,7 +7767,7 @@ "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.4" } }, "postcss-discard-empty": { @@ -7866,7 +7776,7 @@ "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.14" } }, "postcss-discard-overridden": { @@ -7875,7 +7785,7 @@ "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.16" } }, "postcss-discard-unused": { @@ -7884,8 +7794,8 @@ "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", "dev": true, "requires": { - "postcss": "5.2.18", - "uniqs": "2.0.0" + "postcss": "^5.0.14", + "uniqs": "^2.0.0" } }, "postcss-filter-plugins": { @@ -7894,8 +7804,8 @@ "integrity": "sha1-bYWGJTTXNaxCDkqFgG4fXUKG2Ew=", "dev": true, "requires": { - "postcss": "5.2.18", - "uniqid": "4.1.1" + "postcss": "^5.0.4", + "uniqid": "^4.0.0" } }, "postcss-load-config": { @@ -7904,10 +7814,10 @@ "integrity": "sha1-U56a/J3chiASHr+djDZz4M5Q0oo=", "dev": true, "requires": { - "cosmiconfig": "2.2.2", - "object-assign": "4.1.1", - "postcss-load-options": "1.2.0", - "postcss-load-plugins": "2.3.0" + "cosmiconfig": "^2.1.0", + "object-assign": "^4.1.0", + "postcss-load-options": "^1.2.0", + "postcss-load-plugins": "^2.3.0" } }, "postcss-load-options": { @@ -7916,8 +7826,8 @@ "integrity": "sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=", "dev": true, "requires": { - "cosmiconfig": "2.2.2", - "object-assign": "4.1.1" + "cosmiconfig": "^2.1.0", + "object-assign": "^4.1.0" } }, "postcss-load-plugins": { @@ -7926,8 +7836,8 @@ "integrity": "sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=", "dev": true, "requires": { - "cosmiconfig": "2.2.2", - "object-assign": "4.1.1" + "cosmiconfig": "^2.1.1", + "object-assign": "^4.1.0" } }, "postcss-loader": { @@ -7936,10 +7846,10 @@ "integrity": "sha512-f0J/DWE/hyO9/LH0WHpXkny/ZZ238sSaG3p1SRBtVZnFWUtD7GXIEgHoBg8cnAeRbmEvUxHQptY46zWfwNYj/w==", "dev": true, "requires": { - "loader-utils": "1.1.0", - "postcss": "6.0.20", - "postcss-load-config": "1.2.0", - "schema-utils": "0.4.5" + "loader-utils": "^1.1.0", + "postcss": "^6.0.0", + "postcss-load-config": "^1.2.0", + "schema-utils": "^0.4.0" }, "dependencies": { "ansi-styles": { @@ -7948,7 +7858,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "chalk": { @@ -7957,9 +7867,9 @@ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "postcss": { @@ -7968,9 +7878,9 @@ "integrity": "sha512-Opr6usW30Iy0xEDrJywDckRxtylfO7gTGs3Kfb2LdLQlGsUg89fTy0R3Vm1Dub2YHO7MK58avr0p70+uFFHb7A==", "dev": true, "requires": { - "chalk": "2.3.2", - "source-map": "0.6.1", - "supports-color": "5.3.0" + "chalk": "^2.3.2", + "source-map": "^0.6.1", + "supports-color": "^5.3.0" } }, "supports-color": { @@ -7979,7 +7889,7 @@ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -7990,9 +7900,9 @@ "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", "dev": true, "requires": { - "has": "1.0.1", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "has": "^1.0.1", + "postcss": "^5.0.10", + "postcss-value-parser": "^3.1.1" } }, "postcss-merge-longhand": { @@ -8001,7 +7911,7 @@ "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.4" } }, "postcss-merge-rules": { @@ -8010,11 +7920,11 @@ "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", "dev": true, "requires": { - "browserslist": "1.7.7", - "caniuse-api": "1.6.1", - "postcss": "5.2.18", - "postcss-selector-parser": "2.2.3", - "vendors": "1.0.1" + "browserslist": "^1.5.2", + "caniuse-api": "^1.5.2", + "postcss": "^5.0.4", + "postcss-selector-parser": "^2.2.2", + "vendors": "^1.0.0" } }, "postcss-message-helpers": { @@ -8029,9 +7939,9 @@ "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", "dev": true, "requires": { - "object-assign": "4.1.1", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "object-assign": "^4.0.1", + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.2" } }, "postcss-minify-gradients": { @@ -8040,8 +7950,8 @@ "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "postcss": "^5.0.12", + "postcss-value-parser": "^3.3.0" } }, "postcss-minify-params": { @@ -8050,10 +7960,10 @@ "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", "dev": true, "requires": { - "alphanum-sort": "1.0.2", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0", - "uniqs": "2.0.0" + "alphanum-sort": "^1.0.1", + "postcss": "^5.0.2", + "postcss-value-parser": "^3.0.2", + "uniqs": "^2.0.0" } }, "postcss-minify-selectors": { @@ -8062,10 +7972,10 @@ "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", "dev": true, "requires": { - "alphanum-sort": "1.0.2", - "has": "1.0.1", - "postcss": "5.2.18", - "postcss-selector-parser": "2.2.3" + "alphanum-sort": "^1.0.2", + "has": "^1.0.1", + "postcss": "^5.0.14", + "postcss-selector-parser": "^2.0.0" } }, "postcss-modules-extract-imports": { @@ -8074,7 +7984,7 @@ "integrity": "sha1-ZhQOzs447wa/DT41XWm/WdFB6oU=", "dev": true, "requires": { - "postcss": "6.0.19" + "postcss": "^6.0.1" }, "dependencies": { "ansi-styles": { @@ -8083,7 +7993,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "chalk": { @@ -8092,9 +8002,9 @@ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "postcss": { @@ -8103,9 +8013,9 @@ "integrity": "sha512-f13HRz0HtVwVaEuW6J6cOUCBLFtymhgyLPV7t4QEk2UD3twRI9IluDcQNdzQdBpiixkXj2OmzejhhTbSbDxNTg==", "dev": true, "requires": { - "chalk": "2.3.2", - "source-map": "0.6.1", - "supports-color": "5.3.0" + "chalk": "^2.3.1", + "source-map": "^0.6.1", + "supports-color": "^5.2.0" } }, "supports-color": { @@ -8114,7 +8024,7 @@ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -8125,8 +8035,8 @@ "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", "dev": true, "requires": { - "css-selector-tokenizer": "0.7.0", - "postcss": "6.0.19" + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" }, "dependencies": { "ansi-styles": { @@ -8135,7 +8045,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "chalk": { @@ -8144,9 +8054,9 @@ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "postcss": { @@ -8155,9 +8065,9 @@ "integrity": "sha512-f13HRz0HtVwVaEuW6J6cOUCBLFtymhgyLPV7t4QEk2UD3twRI9IluDcQNdzQdBpiixkXj2OmzejhhTbSbDxNTg==", "dev": true, "requires": { - "chalk": "2.3.2", - "source-map": "0.6.1", - "supports-color": "5.3.0" + "chalk": "^2.3.1", + "source-map": "^0.6.1", + "supports-color": "^5.2.0" } }, "supports-color": { @@ -8166,7 +8076,7 @@ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -8177,8 +8087,8 @@ "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", "dev": true, "requires": { - "css-selector-tokenizer": "0.7.0", - "postcss": "6.0.19" + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" }, "dependencies": { "ansi-styles": { @@ -8187,7 +8097,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "chalk": { @@ -8196,9 +8106,9 @@ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "postcss": { @@ -8207,9 +8117,9 @@ "integrity": "sha512-f13HRz0HtVwVaEuW6J6cOUCBLFtymhgyLPV7t4QEk2UD3twRI9IluDcQNdzQdBpiixkXj2OmzejhhTbSbDxNTg==", "dev": true, "requires": { - "chalk": "2.3.2", - "source-map": "0.6.1", - "supports-color": "5.3.0" + "chalk": "^2.3.1", + "source-map": "^0.6.1", + "supports-color": "^5.2.0" } }, "supports-color": { @@ -8218,7 +8128,7 @@ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -8229,8 +8139,8 @@ "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", "dev": true, "requires": { - "icss-replace-symbols": "1.1.0", - "postcss": "6.0.19" + "icss-replace-symbols": "^1.1.0", + "postcss": "^6.0.1" }, "dependencies": { "ansi-styles": { @@ -8239,7 +8149,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "chalk": { @@ -8248,9 +8158,9 @@ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "postcss": { @@ -8259,9 +8169,9 @@ "integrity": "sha512-f13HRz0HtVwVaEuW6J6cOUCBLFtymhgyLPV7t4QEk2UD3twRI9IluDcQNdzQdBpiixkXj2OmzejhhTbSbDxNTg==", "dev": true, "requires": { - "chalk": "2.3.2", - "source-map": "0.6.1", - "supports-color": "5.3.0" + "chalk": "^2.3.1", + "source-map": "^0.6.1", + "supports-color": "^5.2.0" } }, "supports-color": { @@ -8270,7 +8180,7 @@ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -8281,7 +8191,7 @@ "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.5" } }, "postcss-normalize-url": { @@ -8290,10 +8200,10 @@ "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", "dev": true, "requires": { - "is-absolute-url": "2.1.0", - "normalize-url": "1.9.1", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "is-absolute-url": "^2.0.0", + "normalize-url": "^1.4.0", + "postcss": "^5.0.14", + "postcss-value-parser": "^3.2.3" }, "dependencies": { "normalize-url": { @@ -8302,10 +8212,10 @@ "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", "dev": true, "requires": { - "object-assign": "4.1.1", - "prepend-http": "1.0.4", - "query-string": "4.3.4", - "sort-keys": "1.1.2" + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" } }, "prepend-http": { @@ -8320,8 +8230,8 @@ "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", "dev": true, "requires": { - "object-assign": "4.1.1", - "strict-uri-encode": "1.1.0" + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" } }, "sort-keys": { @@ -8330,7 +8240,7 @@ "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", "dev": true, "requires": { - "is-plain-obj": "1.1.0" + "is-plain-obj": "^1.0.0" } } } @@ -8341,8 +8251,8 @@ "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.1" } }, "postcss-reduce-idents": { @@ -8351,8 +8261,8 @@ "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.2" } }, "postcss-reduce-initial": { @@ -8361,7 +8271,7 @@ "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.4" } }, "postcss-reduce-transforms": { @@ -8370,9 +8280,9 @@ "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", "dev": true, "requires": { - "has": "1.0.1", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "has": "^1.0.1", + "postcss": "^5.0.8", + "postcss-value-parser": "^3.0.1" } }, "postcss-selector-parser": { @@ -8381,9 +8291,9 @@ "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", "dev": true, "requires": { - "flatten": "1.0.2", - "indexes-of": "1.0.1", - "uniq": "1.0.1" + "flatten": "^1.0.2", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" } }, "postcss-svgo": { @@ -8392,10 +8302,10 @@ "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", "dev": true, "requires": { - "is-svg": "2.1.0", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0", - "svgo": "0.7.2" + "is-svg": "^2.0.0", + "postcss": "^5.0.14", + "postcss-value-parser": "^3.2.3", + "svgo": "^0.7.0" } }, "postcss-unique-selectors": { @@ -8404,9 +8314,9 @@ "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", "dev": true, "requires": { - "alphanum-sort": "1.0.2", - "postcss": "5.2.18", - "uniqs": "2.0.0" + "alphanum-sort": "^1.0.1", + "postcss": "^5.0.4", + "uniqs": "^2.0.0" } }, "postcss-value-parser": { @@ -8421,9 +8331,9 @@ "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", "dev": true, "requires": { - "has": "1.0.1", - "postcss": "5.2.18", - "uniqs": "2.0.0" + "has": "^1.0.1", + "postcss": "^5.0.4", + "uniqs": "^2.0.0" } }, "prepend-http": { @@ -8486,7 +8396,7 @@ "integrity": "sha1-tCGyQUDWID8e08dplrRCewjowBQ=", "dev": true, "requires": { - "event-stream": "3.3.4" + "event-stream": "~3.3.0" } }, "pseudomap": { @@ -8496,16 +8406,16 @@ "dev": true }, "public-encrypt": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", - "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz", + "integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==", "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "parse-asn1": "5.1.0", - "randombytes": "2.0.5" + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1" } }, "pump": { @@ -8514,8 +8424,8 @@ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, "pumpify": { @@ -8524,9 +8434,9 @@ "integrity": "sha512-2kmNR9ry+Pf45opRVirpNuIFotsxUGLaYqxIwuR77AYrYRMuFCz9eryHBS52L360O+NcR383CL4QYlMKPq4zYA==", "dev": true, "requires": { - "duplexify": "3.5.4", - "inherits": "2.0.3", - "pump": "2.0.1" + "duplexify": "^3.5.3", + "inherits": "^2.0.3", + "pump": "^2.0.0" } }, "punycode": { @@ -8542,9 +8452,9 @@ "dev": true }, "qs": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz", - "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", "dev": true }, "query-string": { @@ -8553,9 +8463,9 @@ "integrity": "sha512-F3DkxxlY0AqD/rwe4YAwjRE2HjOkKW7TxsuteyrS/Jbwrxw887PqYBL4sWUJ9D/V1hmFns0SCD6FDyvlwo9RCQ==", "dev": true, "requires": { - "decode-uri-component": "0.2.0", - "object-assign": "4.1.1", - "strict-uri-encode": "1.1.0" + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" } }, "querystring": { @@ -8570,64 +8480,23 @@ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", "dev": true }, - "randomatic": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", - "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", - "dev": true, - "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, "randombytes": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz", - "integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", + "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "^5.1.0" } }, "randomfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.3.tgz", - "integrity": "sha512-YL6GrhrWoic0Eq8rXVbMptH7dAxCs0J+mh5Y0euNekPPYaxEmdVGim6GdoxoRzKW2yJoU8tueifS7mYxvcFDEQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "requires": { - "randombytes": "2.0.5", - "safe-buffer": "5.1.1" + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" } }, "read-chunk": { @@ -8636,8 +8505,8 @@ "integrity": "sha1-agTAkoAF7Z1C4aasVgDhnLx/9lU=", "dev": true, "requires": { - "pify": "3.0.0", - "safe-buffer": "5.1.1" + "pify": "^3.0.0", + "safe-buffer": "^5.1.1" }, "dependencies": { "pify": { @@ -8654,9 +8523,9 @@ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "dev": true, "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" } }, "read-pkg-up": { @@ -8665,8 +8534,8 @@ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", "dev": true, "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" } }, "readable-stream": { @@ -8675,13 +8544,13 @@ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.0.3", + "util-deprecate": "~1.0.1" } }, "readdirp": { @@ -8690,10 +8559,10 @@ "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "minimatch": "3.0.4", - "readable-stream": "2.3.3", - "set-immediate-shim": "1.0.1" + "graceful-fs": "^4.1.2", + "minimatch": "^3.0.2", + "readable-stream": "^2.0.2", + "set-immediate-shim": "^1.0.1" } }, "recast": { @@ -8703,9 +8572,9 @@ "dev": true, "requires": { "ast-types": "0.11.3", - "esprima": "4.0.0", - "private": "0.1.8", - "source-map": "0.6.1" + "esprima": "~4.0.0", + "private": "~0.1.5", + "source-map": "~0.6.1" } }, "rechoir": { @@ -8714,7 +8583,7 @@ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", "dev": true, "requires": { - "resolve": "1.5.0" + "resolve": "^1.1.6" } }, "redent": { @@ -8723,8 +8592,8 @@ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", "dev": true, "requires": { - "indent-string": "2.1.0", - "strip-indent": "1.0.1" + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" } }, "reduce-css-calc": { @@ -8733,9 +8602,9 @@ "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", "dev": true, "requires": { - "balanced-match": "0.4.2", - "math-expression-evaluator": "1.2.17", - "reduce-function-call": "1.0.2" + "balanced-match": "^0.4.2", + "math-expression-evaluator": "^1.2.14", + "reduce-function-call": "^1.0.1" }, "dependencies": { "balanced-match": { @@ -8752,7 +8621,7 @@ "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", "dev": true, "requires": { - "balanced-match": "0.4.2" + "balanced-match": "^0.4.2" }, "dependencies": { "balanced-match": { @@ -8775,7 +8644,7 @@ "integrity": "sha512-Yjy6t7jFQczDhYE+WVm7pg6gWYE258q4sUkk9qDErwXJIqx7jU9jGrMFHutJK/SRfcg7MEkXjGaYiVlOZyev/A==", "dev": true, "requires": { - "regenerate": "1.3.3" + "regenerate": "^1.3.3" } }, "regenerator-transform": { @@ -8784,9 +8653,9 @@ "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "private": "0.1.8" + "babel-runtime": "^6.18.0", + "babel-types": "^6.19.0", + "private": "^0.1.6" } }, "regex-cache": { @@ -8795,7 +8664,7 @@ "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", "dev": true, "requires": { - "is-equal-shallow": "0.1.3" + "is-equal-shallow": "^0.1.3" } }, "regex-not": { @@ -8804,8 +8673,8 @@ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "requires": { - "extend-shallow": "3.0.2", - "safe-regex": "1.1.0" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" } }, "regexpu-core": { @@ -8814,9 +8683,9 @@ "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", "dev": true, "requires": { - "regenerate": "1.3.3", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" } }, "regjsgen": { @@ -8831,7 +8700,7 @@ "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", "dev": true, "requires": { - "jsesc": "0.5.0" + "jsesc": "~0.5.0" } }, "remove-trailing-separator": { @@ -8858,7 +8727,7 @@ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "dev": true, "requires": { - "is-finite": "1.0.2" + "is-finite": "^1.0.0" } }, "replace-ext": { @@ -8868,31 +8737,107 @@ "dev": true }, "request": { - "version": "2.79.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz", - "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", + "version": "2.87.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", + "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", "dev": true, "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.11.0", - "combined-stream": "1.0.6", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "2.0.6", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.18", - "oauth-sign": "0.8.2", - "qs": "6.3.2", - "stringstream": "0.0.5", - "tough-cookie": "2.3.4", - "tunnel-agent": "0.4.3", - "uuid": "3.2.1" + "aws-sign2": "~0.7.0", + "aws4": "^1.6.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.1", + "forever-agent": "~0.6.1", + "form-data": "~2.3.1", + "har-validator": "~5.0.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.17", + "oauth-sign": "~0.8.2", + "performance-now": "^2.1.0", + "qs": "~6.5.1", + "safe-buffer": "^5.1.1", + "tough-cookie": "~2.3.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.1.0" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "form-data": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "1.0.6", + "mime-types": "^2.1.12" + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "dev": true, + "requires": { + "ajv": "^5.1.0", + "har-schema": "^2.0.0" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + } } }, "require-directory": { @@ -8919,7 +8864,7 @@ "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", "dev": true, "requires": { - "path-parse": "1.0.5" + "path-parse": "^1.0.5" } }, "resolve-cwd": { @@ -8928,7 +8873,7 @@ "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", "dev": true, "requires": { - "resolve-from": "3.0.0" + "resolve-from": "^3.0.0" } }, "resolve-from": { @@ -8949,7 +8894,7 @@ "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", "dev": true, "requires": { - "lowercase-keys": "1.0.0" + "lowercase-keys": "^1.0.0" } }, "restore-cursor": { @@ -8958,8 +8903,8 @@ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "dev": true, "requires": { - "onetime": "2.0.1", - "signal-exit": "3.0.2" + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" } }, "ret": { @@ -8974,17 +8919,17 @@ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "ripemd160": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", - "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, "requires": { - "hash-base": "2.0.2", - "inherits": "2.0.3" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, "run-async": { @@ -8993,7 +8938,7 @@ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", "dev": true, "requires": { - "is-promise": "2.1.0" + "is-promise": "^2.1.0" } }, "run-queue": { @@ -9002,7 +8947,7 @@ "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", "dev": true, "requires": { - "aproba": "1.2.0" + "aproba": "^1.1.1" } }, "rx-lite": { @@ -9017,7 +8962,7 @@ "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", "dev": true, "requires": { - "rx-lite": "4.0.8" + "rx-lite": "*" } }, "rxjs": { @@ -9041,19 +8986,25 @@ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { - "ret": "0.1.15" + "ret": "~0.1.10" } }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, "sass-graph": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", "dev": true, "requires": { - "glob": "7.1.2", - "lodash": "4.17.4", - "scss-tokenizer": "0.2.3", - "yargs": "7.1.0" + "glob": "^7.0.0", + "lodash": "^4.0.0", + "scss-tokenizer": "^0.2.3", + "yargs": "^7.0.0" }, "dependencies": { "camelcase": { @@ -9068,19 +9019,19 @@ "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", "dev": true, "requires": { - "camelcase": "3.0.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "1.4.0", - "read-pkg-up": "1.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "1.0.2", - "which-module": "1.0.0", - "y18n": "3.2.1", - "yargs-parser": "5.0.0" + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^5.0.0" } } } @@ -9091,11 +9042,11 @@ "integrity": "sha512-MeVVJFejJELlAbA7jrRchi88PGP6U9yIfqyiG+bBC4a9s2PX+ulJB9h8bbEohtPBfZmlLhNZ0opQM9hovRXvlw==", "dev": true, "requires": { - "clone-deep": "2.0.2", - "loader-utils": "1.1.0", - "lodash.tail": "4.1.1", - "neo-async": "2.5.0", - "pify": "3.0.0" + "clone-deep": "^2.0.1", + "loader-utils": "^1.0.1", + "lodash.tail": "^4.1.1", + "neo-async": "^2.5.0", + "pify": "^3.0.0" }, "dependencies": { "pify": { @@ -9118,8 +9069,8 @@ "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==", "dev": true, "requires": { - "ajv": "6.2.1", - "ajv-keywords": "3.1.0" + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" }, "dependencies": { "ajv": { @@ -9128,9 +9079,9 @@ "integrity": "sha1-KKarxJOiq+D7TIUHrK7bQ/pVBnE=", "dev": true, "requires": { - "fast-deep-equal": "1.0.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" } } } @@ -9147,8 +9098,8 @@ "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", "dev": true, "requires": { - "js-base64": "2.4.3", - "source-map": "0.4.4" + "js-base64": "^2.1.8", + "source-map": "^0.4.2" }, "dependencies": { "source-map": { @@ -9157,7 +9108,7 @@ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "dev": true, "requires": { - "amdefine": "1.0.1" + "amdefine": ">=0.0.4" } } } @@ -9197,10 +9148,10 @@ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "split-string": "3.1.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -9209,7 +9160,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -9221,13 +9172,13 @@ "dev": true }, "sha.js": { - "version": "2.4.9", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.9.tgz", - "integrity": "sha512-G8zektVqbiPHrylgew9Zg1VRB1L/DtXNUVAM6q4QLy8NE3qtHlFXTf8VLL4k1Yl6c7NMjtZUTdXV+X44nFaT6A==", + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "shallow-clone": { @@ -9236,9 +9187,9 @@ "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==", "dev": true, "requires": { - "is-extendable": "0.1.1", - "kind-of": "5.1.0", - "mixin-object": "2.0.1" + "is-extendable": "^0.1.1", + "kind-of": "^5.0.0", + "mixin-object": "^2.0.1" }, "dependencies": { "kind-of": { @@ -9255,7 +9206,7 @@ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { - "shebang-regex": "1.0.0" + "shebang-regex": "^1.0.0" } }, "shebang-regex": { @@ -9270,10 +9221,10 @@ "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", "dev": true, "requires": { - "array-filter": "0.0.1", - "array-map": "0.0.0", - "array-reduce": "0.0.0", - "jsonify": "0.0.0" + "array-filter": "~0.0.0", + "array-map": "~0.0.0", + "array-reduce": "~0.0.0", + "jsonify": "~0.0.0" } }, "shelljs": { @@ -9282,9 +9233,9 @@ "integrity": "sha512-YA/iYtZpzFe5HyWVGrb02FjPxc4EMCfpoU/Phg9fQoyMC72u9598OUBrsU8IrtwAKG0tO8IYaqbaLIw+k3IRGA==", "dev": true, "requires": { - "glob": "7.1.2", - "interpret": "1.0.4", - "rechoir": "0.6.2" + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" } }, "signal-exit": { @@ -9317,29 +9268,23 @@ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dev": true, "requires": { - "base": "0.11.2", - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "map-cache": "0.2.2", - "source-map": "0.5.7", - "source-map-resolve": "0.5.1", - "use": "3.1.0" + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" }, "dependencies": { - "atob": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.0.3.tgz", - "integrity": "sha1-GcenYEc3dEaPILLS0DNyrX1Mv10=", - "dev": true - }, "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -9348,90 +9293,14 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true - }, - "source-map-resolve": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz", - "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==", - "dev": true, - "requires": { - "atob": "2.0.3", - "decode-uri-component": "0.2.0", - "resolve-url": "0.2.1", - "source-map-url": "0.4.0", - "urix": "0.1.0" - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true } } }, @@ -9441,9 +9310,9 @@ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, "requires": { - "define-property": "1.0.0", - "isobject": "3.0.1", - "snapdragon-util": "3.0.1" + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" }, "dependencies": { "define-property": { @@ -9452,7 +9321,36 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "isobject": { @@ -9460,6 +9358,12 @@ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true } } }, @@ -9469,7 +9373,7 @@ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.2.0" } }, "sntp": { @@ -9478,7 +9382,7 @@ "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", "dev": true, "requires": { - "hoek": "2.16.3" + "hoek": "2.x.x" } }, "sort-keys": { @@ -9487,7 +9391,7 @@ "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", "dev": true, "requires": { - "is-plain-obj": "1.1.0" + "is-plain-obj": "^1.0.0" } }, "sortablejs": { @@ -9507,13 +9411,26 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "dev": true, + "requires": { + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, "source-map-support": { "version": "0.4.18", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", "dev": true, "requires": { - "source-map": "0.5.7" + "source-map": "^0.5.6" }, "dependencies": { "source-map": { @@ -9524,13 +9441,19 @@ } } }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, "spdx-correct": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", "dev": true, "requires": { - "spdx-license-ids": "1.2.2" + "spdx-license-ids": "^1.0.2" } }, "spdx-expression-parse": { @@ -9551,7 +9474,7 @@ "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", "dev": true, "requires": { - "through": "2.3.8" + "through": "2" } }, "split-string": { @@ -9560,7 +9483,7 @@ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, "requires": { - "extend-shallow": "3.0.2" + "extend-shallow": "^3.0.0" } }, "sprintf-js": { @@ -9569,19 +9492,20 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "sshpk": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", - "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", + "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", "dev": true, "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" }, "dependencies": { "assert-plus": { @@ -9598,7 +9522,7 @@ "integrity": "sha512-UnEAgMZa15973iH7cUi0AHjJn1ACDIkaMyZILoqwN6yzt+4P81I8tBc5Hl+qwi5auMplZtPQsHrPBR5vJLcQtQ==", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "^5.1.1" } }, "static-extend": { @@ -9607,8 +9531,8 @@ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "requires": { - "define-property": "0.2.5", - "object-copy": "0.1.0" + "define-property": "^0.2.5", + "object-copy": "^0.1.0" }, "dependencies": { "define-property": { @@ -9617,65 +9541,8 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true } } }, @@ -9685,7 +9552,7 @@ "integrity": "sha1-osfIWH5U2UJ+qe2zrD8s1SLfN4s=", "dev": true, "requires": { - "readable-stream": "2.3.3" + "readable-stream": "^2.0.1" } }, "stream-browserify": { @@ -9694,8 +9561,8 @@ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3" + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" } }, "stream-combiner": { @@ -9704,7 +9571,7 @@ "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", "dev": true, "requires": { - "duplexer": "0.1.1" + "duplexer": "~0.1.1" } }, "stream-each": { @@ -9713,21 +9580,53 @@ "integrity": "sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "stream-shift": "1.0.0" + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" } }, "stream-http": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", - "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", "dev": true, "requires": { - "builtin-status-codes": "3.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "to-arraybuffer": "1.0.1", - "xtend": "4.0.1" + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + }, + "dependencies": { + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "stream-shift": { @@ -9742,7 +9641,7 @@ "integrity": "sha1-WdbqOT2HwsDdrBCqDVYbxrpvDhA=", "dev": true, "requires": { - "any-observable": "0.2.0" + "any-observable": "^0.2.0" } }, "strict-uri-encode": { @@ -9763,9 +9662,9 @@ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "string.prototype.padend": { @@ -9774,9 +9673,9 @@ "integrity": "sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA=", "dev": true, "requires": { - "define-properties": "1.1.2", - "es-abstract": "1.10.0", - "function-bind": "1.1.1" + "define-properties": "^1.1.2", + "es-abstract": "^1.4.3", + "function-bind": "^1.0.2" } }, "string_decoder": { @@ -9785,13 +9684,13 @@ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, "stringstream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", + "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==", "dev": true }, "strip-ansi": { @@ -9800,7 +9699,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-bom": { @@ -9809,7 +9708,7 @@ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { - "is-utf8": "0.2.1" + "is-utf8": "^0.2.0" } }, "strip-bom-stream": { @@ -9818,8 +9717,8 @@ "integrity": "sha1-+H217yYT9paKpUWr/h7HKLaoKco=", "dev": true, "requires": { - "first-chunk-stream": "2.0.0", - "strip-bom": "2.0.0" + "first-chunk-stream": "^2.0.0", + "strip-bom": "^2.0.0" }, "dependencies": { "first-chunk-stream": { @@ -9828,7 +9727,7 @@ "integrity": "sha1-G97NuOCDwGZLkZRVgVd6Q6nzHXA=", "dev": true, "requires": { - "readable-stream": "2.3.3" + "readable-stream": "^2.0.2" } }, "strip-bom": { @@ -9837,7 +9736,7 @@ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { - "is-utf8": "0.2.1" + "is-utf8": "^0.2.0" } } } @@ -9854,7 +9753,7 @@ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", "dev": true, "requires": { - "get-stdin": "4.0.1" + "get-stdin": "^4.0.1" } }, "style-loader": { @@ -9863,8 +9762,8 @@ "integrity": "sha512-T+UNsAcl3Yg+BsPKs1vd22Fr8sVT+CJMtzqc6LEw9bbJZb43lm9GoeIfUcDEefBSWC0BhYbcdupV1GtI4DGzxg==", "dev": true, "requires": { - "loader-utils": "1.1.0", - "schema-utils": "0.4.5" + "loader-utils": "^1.1.0", + "schema-utils": "^0.4.5" } }, "supports-color": { @@ -9879,13 +9778,13 @@ "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", "dev": true, "requires": { - "coa": "1.0.4", - "colors": "1.1.2", - "csso": "2.3.2", - "js-yaml": "3.7.0", - "mkdirp": "0.5.1", - "sax": "1.2.4", - "whet.extend": "0.9.9" + "coa": "~1.0.1", + "colors": "~1.1.2", + "csso": "~2.3.1", + "js-yaml": "~3.7.0", + "mkdirp": "~0.5.1", + "sax": "~1.2.1", + "whet.extend": "~0.9.9" }, "dependencies": { "colors": { @@ -9914,9 +9813,9 @@ "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", "dev": true, "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" + "block-stream": "*", + "fstream": "^1.0.2", + "inherits": "2" } }, "temp": { @@ -9925,8 +9824,8 @@ "integrity": "sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=", "dev": true, "requires": { - "os-tmpdir": "1.0.2", - "rimraf": "2.2.8" + "os-tmpdir": "^1.0.0", + "rimraf": "~2.2.6" }, "dependencies": { "rimraf": { @@ -9961,8 +9860,8 @@ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "dev": true, "requires": { - "readable-stream": "2.3.3", - "xtend": "4.0.1" + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" } }, "timed-out": { @@ -9971,6 +9870,15 @@ "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", "dev": true }, + "timers-browserify": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", + "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", + "dev": true, + "requires": { + "setimmediate": "^1.0.4" + } + }, "tiny-emitter": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.0.2.tgz", @@ -9982,7 +9890,7 @@ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "requires": { - "os-tmpdir": "1.0.2" + "os-tmpdir": "~1.0.2" } }, "to-arraybuffer": { @@ -10003,7 +9911,7 @@ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "to-regex": { @@ -10012,10 +9920,10 @@ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, "requires": { - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "regex-not": "1.0.2", - "safe-regex": "1.1.0" + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" } }, "to-regex-range": { @@ -10024,8 +9932,8 @@ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" }, "dependencies": { "is-number": { @@ -10034,7 +9942,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } } } @@ -10045,7 +9953,7 @@ "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", "dev": true, "requires": { - "punycode": "1.4.1" + "punycode": "^1.4.1" } }, "trim-newlines": { @@ -10066,7 +9974,7 @@ "integrity": "sha1-fskRMJJHZsf1c74wIMNPj9/QDWI=", "dev": true, "requires": { - "glob": "6.0.4" + "glob": "^6.0.4" }, "dependencies": { "glob": { @@ -10075,21 +9983,36 @@ "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", "dev": true, "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } } } }, - "tunnel-agent": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", "dev": true }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", @@ -10114,8 +10037,8 @@ "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", "dev": true, "requires": { - "commander": "2.13.0", - "source-map": "0.6.1" + "commander": "~2.13.0", + "source-map": "~0.6.1" } }, "uglifyjs-webpack-plugin": { @@ -10124,14 +10047,14 @@ "integrity": "sha512-as/50351uuJGiQbhVvE510SCqM/YOWghCzIFJeEOu5oVE0QOZ3/vu2QcnVvu0Lz+vNd0rKsiCFAlbcw0i/YH2w==", "dev": true, "requires": { - "cacache": "10.0.4", - "find-cache-dir": "1.0.0", - "schema-utils": "0.4.5", - "serialize-javascript": "1.4.0", - "source-map": "0.6.1", - "uglify-es": "3.3.9", - "webpack-sources": "1.1.0", - "worker-farm": "1.6.0" + "cacache": "^10.0.4", + "find-cache-dir": "^1.0.0", + "schema-utils": "^0.4.5", + "serialize-javascript": "^1.4.0", + "source-map": "^0.6.1", + "uglify-es": "^3.3.4", + "webpack-sources": "^1.1.0", + "worker-farm": "^1.5.2" } }, "ultron": { @@ -10158,8 +10081,8 @@ "integrity": "sha512-nFcaBFcr08UQNF15ZgI5ISh3yUnQm7SJRRxwYrL5VYX46pS+6Q7TCTv4zbK+j6/l7rQt0mMiTL2zpmeygny6rA==", "dev": true, "requires": { - "unicode-canonical-property-names-ecmascript": "1.0.3", - "unicode-property-aliases-ecmascript": "1.0.3" + "unicode-canonical-property-names-ecmascript": "^1.0.2", + "unicode-property-aliases-ecmascript": "^1.0.3" } }, "unicode-match-property-value-ecmascript": { @@ -10180,10 +10103,10 @@ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", "dev": true, "requires": { - "arr-union": "3.1.0", - "get-value": "2.0.6", - "is-extendable": "0.1.1", - "set-value": "0.4.3" + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" }, "dependencies": { "extend-shallow": { @@ -10192,7 +10115,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "set-value": { @@ -10201,10 +10124,10 @@ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "to-object-path": "0.3.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" } } } @@ -10221,7 +10144,7 @@ "integrity": "sha1-iSIN32t1GuUrX3JISGNShZa7hME=", "dev": true, "requires": { - "macaddress": "0.2.8" + "macaddress": "^0.2.8" } }, "uniqs": { @@ -10236,7 +10159,7 @@ "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=", "dev": true, "requires": { - "unique-slug": "2.0.0" + "unique-slug": "^2.0.0" } }, "unique-slug": { @@ -10245,7 +10168,7 @@ "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=", "dev": true, "requires": { - "imurmurhash": "0.1.4" + "imurmurhash": "^0.1.4" } }, "unset-value": { @@ -10254,8 +10177,8 @@ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, "requires": { - "has-value": "0.3.1", - "isobject": "3.0.1" + "has-value": "^0.3.1", + "isobject": "^3.0.0" }, "dependencies": { "has-value": { @@ -10264,9 +10187,9 @@ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "0.1.4", - "isobject": "2.1.0" + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" }, "dependencies": { "isobject": { @@ -10301,11 +10224,28 @@ "dev": true }, "upath": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.0.4.tgz", - "integrity": "sha512-d4SJySNBXDaQp+DPrziv3xGS6w3d2Xt69FijJr86zMPBy23JEloMCEOUBBzuN7xCtjLCnmB9tI/z7SBCahHBOw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", + "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", "dev": true }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + } + } + }, "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", @@ -10336,7 +10276,7 @@ "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", "dev": true, "requires": { - "prepend-http": "2.0.0" + "prepend-http": "^2.0.0" } }, "url-to-options": { @@ -10346,37 +10286,18 @@ "dev": true }, "use": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz", - "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==", - "dev": true, - "requires": { - "kind-of": "6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true }, "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", "dev": true, "requires": { - "inherits": "2.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - } + "inherits": "2.0.3" } }, "util-deprecate": { @@ -10386,9 +10307,9 @@ "dev": true }, "uuid": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", - "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", "dev": true }, "v8-compile-cache": { @@ -10403,8 +10324,8 @@ "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", "dev": true, "requires": { - "spdx-correct": "1.0.2", - "spdx-expression-parse": "1.0.4" + "spdx-correct": "~1.0.0", + "spdx-expression-parse": "~1.0.0" } }, "vendors": { @@ -10419,9 +10340,9 @@ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "dev": true, "requires": { - "assert-plus": "1.0.0", + "assert-plus": "^1.0.0", "core-util-is": "1.0.2", - "extsprintf": "1.3.0" + "extsprintf": "^1.2.0" }, "dependencies": { "assert-plus": { @@ -10438,8 +10359,8 @@ "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", "dev": true, "requires": { - "clone": "1.0.3", - "clone-stats": "0.0.1", + "clone": "^1.0.0", + "clone-stats": "^0.0.1", "replace-ext": "0.0.1" } }, @@ -10449,12 +10370,12 @@ "integrity": "sha1-p+v1/779obfRjRQPyweyI++2dRo=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0", - "strip-bom-stream": "2.0.0", - "vinyl": "1.2.0" + "graceful-fs": "^4.1.2", + "pify": "^2.3.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0", + "strip-bom-stream": "^2.0.0", + "vinyl": "^1.1.0" }, "dependencies": { "strip-bom": { @@ -10463,7 +10384,7 @@ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { - "is-utf8": "0.2.1" + "is-utf8": "^0.2.0" } } } @@ -10487,18 +10408,18 @@ "resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-2.15.0.tgz", "integrity": "sha1-NSat7pJL0itHigG3DAo038nLu08=", "requires": { - "sortablejs": "1.7.0" + "sortablejs": "^1.7.0" } }, "watchpack": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.5.0.tgz", - "integrity": "sha512-RSlipNQB1u48cq0wH/BNfCu1tD/cJ8ydFIkNYhp9o+3d+8unClkIovpW5qpFPgmL9OE48wfAnlZydXByWP82AA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", + "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", "dev": true, "requires": { - "chokidar": "2.0.2", - "graceful-fs": "4.1.11", - "neo-async": "2.5.0" + "chokidar": "^2.0.2", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" }, "dependencies": { "anymatch": { @@ -10507,8 +10428,8 @@ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, "requires": { - "micromatch": "3.1.9", - "normalize-path": "2.1.1" + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" } }, "arr-diff": { @@ -10524,63 +10445,53 @@ "dev": true }, "braces": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.1.tgz", - "integrity": "sha512-SO5lYHA3vO6gz66erVvedSCkp7AKWdv6VcQ2N4ysXfPxdAlxAMMAdwegGGcv1Bqwm7naF1hNdk5d6AAIEHV2nQ==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "define-property": "1.0.0", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "kind-of": "6.0.2", - "repeat-element": "1.1.2", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" }, "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "1.0.2" - } - }, "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } }, "chokidar": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.2.tgz", - "integrity": "sha512-l32Hw3wqB0L2kGVmSbK/a+xXLDrUEsc84pSgMkmwygHvD7ubRsP/vxxHa5BtB6oix1XLLVCHyYMsckRXxThmZw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", + "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", "dev": true, "requires": { - "anymatch": "2.0.0", - "async-each": "1.0.1", - "braces": "2.3.1", - "fsevents": "1.1.3", - "glob-parent": "3.1.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "4.0.0", - "normalize-path": "2.1.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0", - "upath": "1.0.4" + "anymatch": "^2.0.0", + "async-each": "^1.0.0", + "braces": "^2.3.0", + "fsevents": "^1.2.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "lodash.debounce": "^4.0.8", + "normalize-path": "^2.1.1", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0", + "upath": "^1.0.5" } }, "expand-brackets": { @@ -10589,13 +10500,13 @@ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -10604,7 +10515,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -10613,7 +10524,47 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, "is-descriptor": { @@ -10622,9 +10573,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" } }, "kind-of": { @@ -10641,14 +10592,14 @@ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -10657,7 +10608,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "extend-shallow": { @@ -10666,7 +10617,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -10677,10 +10628,10 @@ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "dependencies": { "extend-shallow": { @@ -10689,7 +10640,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -10700,8 +10651,8 @@ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" }, "dependencies": { "is-glob": { @@ -10710,49 +10661,38 @@ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.0" } } } }, "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } + "kind-of": "^6.0.0" } }, "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "is-extglob": { @@ -10767,7 +10707,7 @@ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.1" } }, "is-number": { @@ -10776,7 +10716,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -10785,7 +10725,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -10803,70 +10743,71 @@ "dev": true }, "micromatch": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.9.tgz", - "integrity": "sha512-SlIz6sv5UPaAVVFRKodKjCg48EbNoIhgetzfK/Cy0v5U52Z6zB136M8tp0UC9jM53LYbmIRihJszvvqpKkfm9g==", + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.1", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.9", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" } } } }, "webpack": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.1.1.tgz", - "integrity": "sha512-PwxKH81yLjbPyBSZvPj/Ji9pT99XOGFA0t6zipoOKOMNRZ+09N39J5Uzcx3rYKnsHgKwDnfGkvzac4MF2Taknw==", + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.16.3.tgz", + "integrity": "sha512-3VcrVoFgzSz1IYgga71YpU3HO89Al5bSnDOj9RJQPsy+FNyI1sFsUyJITn3pktNuaRBlQT0usvKZE3GgkPGAIw==", "dev": true, "requires": { - "acorn": "5.5.3", - "acorn-dynamic-import": "3.0.0", - "ajv": "6.2.1", - "ajv-keywords": "3.1.0", - "chrome-trace-event": "0.1.2", - "enhanced-resolve": "4.0.0", - "eslint-scope": "3.7.1", - "loader-runner": "2.3.0", - "loader-utils": "1.1.0", - "memory-fs": "0.4.1", - "micromatch": "3.1.9", - "mkdirp": "0.5.1", - "neo-async": "2.5.0", - "node-libs-browser": "2.1.0", - "schema-utils": "0.4.5", - "tapable": "1.0.0", - "uglifyjs-webpack-plugin": "1.2.3", - "watchpack": "1.5.0", - "webpack-sources": "1.1.0" + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/helper-module-context": "1.5.13", + "@webassemblyjs/wasm-edit": "1.5.13", + "@webassemblyjs/wasm-opt": "1.5.13", + "@webassemblyjs/wasm-parser": "1.5.13", + "acorn": "^5.6.2", + "acorn-dynamic-import": "^3.0.0", + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0", + "chrome-trace-event": "^1.0.0", + "enhanced-resolve": "^4.1.0", + "eslint-scope": "^4.0.0", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.3.0", + "loader-utils": "^1.1.0", + "memory-fs": "~0.4.1", + "micromatch": "^3.1.8", + "mkdirp": "~0.5.0", + "neo-async": "^2.5.0", + "node-libs-browser": "^2.0.0", + "schema-utils": "^0.4.4", + "tapable": "^1.0.0", + "uglifyjs-webpack-plugin": "^1.2.4", + "watchpack": "^1.5.0", + "webpack-sources": "^1.0.1" }, "dependencies": { - "acorn": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", - "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==", - "dev": true - }, "ajv": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.2.1.tgz", - "integrity": "sha1-KKarxJOiq+D7TIUHrK7bQ/pVBnE=", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.2.tgz", + "integrity": "sha512-hOs7GfvI6tUI1LfZddH82ky6mOMyTuY0mk7kE2pWpmhhUSkumzaTO5vbVwij39MdwPQWCV4Zv57Eo06NtL/GVA==", "dev": true, "requires": { - "fast-deep-equal": "1.0.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.1" } }, "arr-diff": { @@ -10882,58 +10823,58 @@ "dev": true }, "braces": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.1.tgz", - "integrity": "sha512-SO5lYHA3vO6gz66erVvedSCkp7AKWdv6VcQ2N4ysXfPxdAlxAMMAdwegGGcv1Bqwm7naF1hNdk5d6AAIEHV2nQ==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "define-property": "1.0.0", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "kind-of": "6.0.2", - "repeat-element": "1.1.2", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" }, "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "1.0.2" - } - }, "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } }, + "enhanced-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", + "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "tapable": "^1.0.0" + } + }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -10942,7 +10883,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -10951,7 +10892,47 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, "is-descriptor": { @@ -10960,9 +10941,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" } }, "kind-of": { @@ -10979,14 +10960,14 @@ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -10995,7 +10976,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "extend-shallow": { @@ -11004,21 +10985,27 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "dependencies": { "extend-shallow": { @@ -11027,49 +11014,38 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } }, "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } + "kind-of": "^6.0.0" } }, "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "is-number": { @@ -11078,7 +11054,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -11087,7 +11063,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -11098,6 +11074,18 @@ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", @@ -11105,24 +11093,40 @@ "dev": true }, "micromatch": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.9.tgz", - "integrity": "sha512-SlIz6sv5UPaAVVFRKodKjCg48EbNoIhgetzfK/Cy0v5U52Z6zB136M8tp0UC9jM53LYbmIRihJszvvqpKkfm9g==", + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.1", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.9", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "uglifyjs-webpack-plugin": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.7.tgz", + "integrity": "sha512-1VicfKhCYHLS8m1DCApqBhoulnASsEoJ/BvpUpP4zoNAPpKzdH+ghk0olGJMmwX2/jprK2j3hAHdUbczBSy2FA==", + "dev": true, + "requires": { + "cacache": "^10.0.4", + "find-cache-dir": "^1.0.0", + "schema-utils": "^0.4.5", + "serialize-javascript": "^1.4.0", + "source-map": "^0.6.1", + "uglify-es": "^3.3.4", + "webpack-sources": "^1.1.0", + "worker-farm": "^1.5.2" } } } @@ -11133,7 +11137,7 @@ "integrity": "sha512-MGO0nVniCLFAQz1qv22zM02QPjcpAoJdy7ED0i3Zy7SY1IecgXCm460ib7H/Wq7e9oL5VL6S2BxaObxwIcag0g==", "dev": true, "requires": { - "jscodeshift": "0.4.1" + "jscodeshift": "^0.4.0" }, "dependencies": { "ast-types": { @@ -11148,21 +11152,21 @@ "integrity": "sha512-iOX6If+hsw0q99V3n31t4f5VlD1TQZddH08xbT65ZqA7T4Vkx68emrDZMUOLVvCEAJ6NpAk7DECe3fjC/t52AQ==", "dev": true, "requires": { - "async": "1.5.2", - "babel-plugin-transform-flow-strip-types": "6.22.0", - "babel-preset-es2015": "6.24.1", - "babel-preset-stage-1": "6.24.1", - "babel-register": "6.26.0", - "babylon": "6.18.0", - "colors": "1.2.0", - "flow-parser": "0.67.1", - "lodash": "4.17.4", - "micromatch": "2.3.11", + "async": "^1.5.0", + "babel-plugin-transform-flow-strip-types": "^6.8.0", + "babel-preset-es2015": "^6.9.0", + "babel-preset-stage-1": "^6.5.0", + "babel-register": "^6.9.0", + "babylon": "^6.17.3", + "colors": "^1.1.2", + "flow-parser": "^0.*", + "lodash": "^4.13.1", + "micromatch": "^2.3.7", "node-dir": "0.1.8", - "nomnom": "1.8.1", - "recast": "0.12.9", - "temp": "0.8.3", - "write-file-atomic": "1.3.4" + "nomnom": "^1.8.1", + "recast": "^0.12.5", + "temp": "^0.8.1", + "write-file-atomic": "^1.2.0" } }, "recast": { @@ -11172,10 +11176,10 @@ "dev": true, "requires": { "ast-types": "0.10.1", - "core-js": "2.5.1", - "esprima": "4.0.0", - "private": "0.1.8", - "source-map": "0.6.1" + "core-js": "^2.4.1", + "esprima": "~4.0.0", + "private": "~0.1.5", + "source-map": "~0.6.1" } } } @@ -11186,31 +11190,31 @@ "integrity": "sha512-+WwfDmsHB+V3OcbtfbIbKM12dDBysNwwMNulYjVSf/UIUhdMP7ZL4EmvCbgwBl0Xlf5hSELOkvS7sKwVDbn7TQ==", "dev": true, "requires": { - "chalk": "2.3.2", - "cross-spawn": "6.0.5", - "diff": "3.5.0", - "enhanced-resolve": "4.0.0", - "glob-all": "3.1.0", - "global-modules": "1.0.0", - "got": "8.3.0", - "inquirer": "5.1.0", - "interpret": "1.0.4", - "jscodeshift": "0.5.0", - "listr": "0.13.0", - "loader-utils": "1.1.0", - "lodash": "4.17.5", - "log-symbols": "2.2.0", - "mkdirp": "0.5.1", - "p-each-series": "1.0.0", - "p-lazy": "1.0.0", - "prettier": "1.11.1", - "resolve-cwd": "2.0.0", - "supports-color": "5.3.0", - "v8-compile-cache": "1.1.2", - "webpack-addons": "1.1.5", - "yargs": "11.0.0", - "yeoman-environment": "2.0.5", - "yeoman-generator": "2.0.3" + "chalk": "^2.3.2", + "cross-spawn": "^6.0.5", + "diff": "^3.5.0", + "enhanced-resolve": "^4.0.0", + "glob-all": "^3.1.0", + "global-modules": "^1.0.0", + "got": "^8.2.0", + "inquirer": "^5.1.0", + "interpret": "^1.0.4", + "jscodeshift": "^0.5.0", + "listr": "^0.13.0", + "loader-utils": "^1.1.0", + "lodash": "^4.17.5", + "log-symbols": "^2.2.0", + "mkdirp": "^0.5.1", + "p-each-series": "^1.0.0", + "p-lazy": "^1.0.0", + "prettier": "^1.5.3", + "resolve-cwd": "^2.0.0", + "supports-color": "^5.3.0", + "v8-compile-cache": "^1.1.2", + "webpack-addons": "^1.1.5", + "yargs": "^11.0.0", + "yeoman-environment": "^2.0.0", + "yeoman-generator": "^2.0.3" }, "dependencies": { "ansi-styles": { @@ -11219,7 +11223,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "chalk": { @@ -11228,9 +11232,9 @@ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "cross-spawn": { @@ -11239,11 +11243,11 @@ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "nice-try": "1.0.4", - "path-key": "2.0.1", - "semver": "5.5.0", - "shebang-command": "1.2.0", - "which": "1.3.0" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, "expand-tilde": { @@ -11252,7 +11256,7 @@ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", "dev": true, "requires": { - "homedir-polyfill": "1.0.1" + "homedir-polyfill": "^1.0.1" } }, "global-modules": { @@ -11261,9 +11265,9 @@ "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", "dev": true, "requires": { - "global-prefix": "1.0.2", - "is-windows": "1.0.2", - "resolve-dir": "1.0.1" + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" } }, "global-prefix": { @@ -11272,11 +11276,11 @@ "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", "dev": true, "requires": { - "expand-tilde": "2.0.2", - "homedir-polyfill": "1.0.1", - "ini": "1.3.4", - "is-windows": "1.0.2", - "which": "1.3.0" + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" } }, "is-windows": { @@ -11297,8 +11301,8 @@ "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", "dev": true, "requires": { - "expand-tilde": "2.0.2", - "global-modules": "1.0.0" + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" } }, "semver": { @@ -11313,7 +11317,7 @@ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -11324,8 +11328,8 @@ "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==", "dev": true, "requires": { - "source-list-map": "2.0.0", - "source-map": "0.6.1" + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" } }, "whet.extend": { @@ -11340,7 +11344,7 @@ "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "which-module": { @@ -11350,12 +11354,12 @@ "dev": true }, "wide-align": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", - "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "dev": true, "requires": { - "string-width": "1.0.2" + "string-width": "^1.0.2 || 2" } }, "worker-farm": { @@ -11364,7 +11368,7 @@ "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", "dev": true, "requires": { - "errno": "0.1.7" + "errno": "~0.1.7" } }, "wrap-ansi": { @@ -11373,8 +11377,8 @@ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" } }, "wrappy": { @@ -11389,9 +11393,9 @@ "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "imurmurhash": "0.1.4", - "slide": "1.1.6" + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "slide": "^1.1.5" } }, "ws": { @@ -11400,8 +11404,8 @@ "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", "dev": true, "requires": { - "options": "0.0.6", - "ultron": "1.0.2" + "options": ">=0.0.5", + "ultron": "1.0.x" } }, "xtend": { @@ -11428,18 +11432,18 @@ "integrity": "sha512-Rjp+lMYQOWtgqojx1dEWorjCofi1YN7AoFvYV7b1gx/7dAAeuI4kN5SZiEvr0ZmsZTOpDRcCqrpI10L31tFkBw==", "dev": true, "requires": { - "cliui": "4.0.0", - "decamelize": "1.2.0", - "find-up": "2.1.0", - "get-caller-file": "1.0.2", - "os-locale": "2.1.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "9.0.2" + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^9.0.2" }, "dependencies": { "ansi-regex": { @@ -11460,9 +11464,9 @@ "integrity": "sha512-nY3W5Gu2racvdDk//ELReY+dHjb9PlIcVDFXP72nVIhq2Gy3LuVXYwJoPVudwQnv1shtohpgkdCKT2YaKY0CKw==", "dev": true, "requires": { - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "wrap-ansi": "2.1.0" + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" } }, "find-up": { @@ -11471,7 +11475,7 @@ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "2.0.0" + "locate-path": "^2.0.0" } }, "is-fullwidth-code-point": { @@ -11486,9 +11490,9 @@ "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", "dev": true, "requires": { - "execa": "0.7.0", - "lcid": "1.0.0", - "mem": "1.1.0" + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" } }, "string-width": { @@ -11497,8 +11501,8 @@ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, "strip-ansi": { @@ -11507,7 +11511,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } }, "which-module": { @@ -11522,7 +11526,7 @@ "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", "dev": true, "requires": { - "camelcase": "4.1.0" + "camelcase": "^4.1.0" } } } @@ -11533,7 +11537,7 @@ "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", "dev": true, "requires": { - "camelcase": "3.0.0" + "camelcase": "^3.0.0" }, "dependencies": { "camelcase": { @@ -11550,19 +11554,19 @@ "integrity": "sha512-6/W7/B54OPHJXob0n0+pmkwFsirC8cokuQkPSmT/D0lCcSxkKtg/BA6ZnjUBIwjuGqmw3DTrT4en++htaUju5g==", "dev": true, "requires": { - "chalk": "2.3.2", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "globby": "6.1.0", - "grouped-queue": "0.3.3", - "inquirer": "3.3.0", - "is-scoped": "1.0.0", - "lodash": "4.17.4", - "log-symbols": "2.2.0", - "mem-fs": "1.1.3", - "text-table": "0.2.0", - "untildify": "3.0.2" + "chalk": "^2.1.0", + "debug": "^3.1.0", + "diff": "^3.3.1", + "escape-string-regexp": "^1.0.2", + "globby": "^6.1.0", + "grouped-queue": "^0.3.3", + "inquirer": "^3.3.0", + "is-scoped": "^1.0.0", + "lodash": "^4.17.4", + "log-symbols": "^2.1.0", + "mem-fs": "^1.1.0", + "text-table": "^0.2.0", + "untildify": "^3.0.2" }, "dependencies": { "ansi-regex": { @@ -11577,7 +11581,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "chalk": { @@ -11586,9 +11590,9 @@ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "debug": { @@ -11606,20 +11610,20 @@ "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", "dev": true, "requires": { - "ansi-escapes": "3.0.0", - "chalk": "2.3.2", - "cli-cursor": "2.1.0", - "cli-width": "2.2.0", - "external-editor": "2.1.0", - "figures": "2.0.0", - "lodash": "4.17.4", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.0.4", + "figures": "^2.0.0", + "lodash": "^4.3.0", "mute-stream": "0.0.7", - "run-async": "2.3.0", - "rx-lite": "4.0.8", - "rx-lite-aggregates": "4.0.8", - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "through": "2.3.8" + "run-async": "^2.2.0", + "rx-lite": "^4.0.8", + "rx-lite-aggregates": "^4.0.8", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" } }, "is-fullwidth-code-point": { @@ -11634,8 +11638,8 @@ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, "strip-ansi": { @@ -11644,7 +11648,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } }, "supports-color": { @@ -11653,7 +11657,7 @@ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -11664,31 +11668,31 @@ "integrity": "sha512-mODmrZ26a94djmGZZuIiomSGlN4wULdou29ZwcySupb2e9FdvoCl7Ps2FqHFjEHio3kOl/iBeaNqrnx3C3NwWg==", "dev": true, "requires": { - "async": "2.6.0", - "chalk": "2.3.2", - "cli-table": "0.3.1", - "cross-spawn": "5.1.0", - "dargs": "5.1.0", - "dateformat": "3.0.3", - "debug": "3.1.0", - "detect-conflict": "1.0.1", - "error": "7.0.2", - "find-up": "2.1.0", - "github-username": "4.1.0", - "istextorbinary": "2.2.1", - "lodash": "4.17.4", - "make-dir": "1.2.0", - "mem-fs-editor": "3.0.2", - "minimist": "1.2.0", - "pretty-bytes": "4.0.2", - "read-chunk": "2.1.0", - "read-pkg-up": "3.0.0", - "rimraf": "2.6.2", - "run-async": "2.3.0", - "shelljs": "0.8.1", - "text-table": "0.2.0", - "through2": "2.0.3", - "yeoman-environment": "2.0.5" + "async": "^2.6.0", + "chalk": "^2.3.0", + "cli-table": "^0.3.1", + "cross-spawn": "^5.1.0", + "dargs": "^5.1.0", + "dateformat": "^3.0.2", + "debug": "^3.1.0", + "detect-conflict": "^1.0.0", + "error": "^7.0.2", + "find-up": "^2.1.0", + "github-username": "^4.0.0", + "istextorbinary": "^2.1.0", + "lodash": "^4.17.4", + "make-dir": "^1.1.0", + "mem-fs-editor": "^3.0.2", + "minimist": "^1.2.0", + "pretty-bytes": "^4.0.2", + "read-chunk": "^2.1.0", + "read-pkg-up": "^3.0.0", + "rimraf": "^2.6.2", + "run-async": "^2.0.0", + "shelljs": "^0.8.0", + "text-table": "^0.2.0", + "through2": "^2.0.0", + "yeoman-environment": "^2.0.5" }, "dependencies": { "ansi-styles": { @@ -11697,7 +11701,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "async": { @@ -11706,7 +11710,7 @@ "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", "dev": true, "requires": { - "lodash": "4.17.4" + "lodash": "^4.14.0" } }, "chalk": { @@ -11715,9 +11719,9 @@ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "cross-spawn": { @@ -11726,9 +11730,9 @@ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { - "lru-cache": "4.1.2", - "shebang-command": "1.2.0", - "which": "1.3.0" + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, "dateformat": { @@ -11752,7 +11756,7 @@ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "2.0.0" + "locate-path": "^2.0.0" } }, "load-json-file": { @@ -11761,10 +11765,10 @@ "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "parse-json": "4.0.0", - "pify": "3.0.0", - "strip-bom": "3.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" } }, "lru-cache": { @@ -11773,8 +11777,8 @@ "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==", "dev": true, "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, "parse-json": { @@ -11783,8 +11787,8 @@ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { - "error-ex": "1.3.1", - "json-parse-better-errors": "1.0.1" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" } }, "path-type": { @@ -11793,7 +11797,7 @@ "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "requires": { - "pify": "3.0.0" + "pify": "^3.0.0" } }, "pify": { @@ -11808,9 +11812,9 @@ "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, "requires": { - "load-json-file": "4.0.0", - "normalize-package-data": "2.4.0", - "path-type": "3.0.0" + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" } }, "read-pkg-up": { @@ -11819,8 +11823,8 @@ "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", "dev": true, "requires": { - "find-up": "2.1.0", - "read-pkg": "3.0.0" + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" } }, "strip-bom": { @@ -11835,7 +11839,7 @@ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } diff --git a/package.json b/package.json index e6b7180b9..12d972cf9 100644 --- a/package.json +++ b/package.json @@ -11,20 +11,20 @@ }, "devDependencies": { "@babel/core": "^7.0.0-beta.40", + "@babel/polyfill": "^7.0.0-beta.40", "@babel/preset-env": "^7.0.0-beta.40", "autoprefixer": "^8.1.0", "babel-loader": "^8.0.0-beta.0", - "@babel/polyfill": "^7.0.0-beta.40", "css-loader": "^0.28.10", "extract-text-webpack-plugin": "^4.0.0-beta.0", "livereload": "^0.7.0", - "node-sass": "^4.7.2", + "node-sass": "^4.9.2", "npm-run-all": "^4.1.2", "postcss-loader": "^2.1.1", "sass-loader": "^7.0.1", "style-loader": "^0.21.0", "uglifyjs-webpack-plugin": "^1.2.3", - "webpack": "^4.1.1", + "webpack": "^4.16.3", "webpack-cli": "^2.0.11" }, "dependencies": { From 69a0f8d5028010dd30df79f07ec715833bfe91c3 Mon Sep 17 00:00:00 2001 From: Dan Brown Date: Sun, 29 Jul 2018 15:34:54 +0100 Subject: [PATCH 033/183] Prevented error notification being visible on load Fixes #897 Also made design a little more compact --- .../assets/js/components/notification.js | 7 ++++++- resources/assets/sass/_components.scss | 20 +++++++++---------- resources/assets/sass/_variables.scss | 1 + .../views/partials/notifications.blade.php | 7 +++---- 4 files changed, 19 insertions(+), 16 deletions(-) diff --git a/resources/assets/js/components/notification.js b/resources/assets/js/components/notification.js index c352a9c85..c5c934a9f 100644 --- a/resources/assets/js/components/notification.js +++ b/resources/assets/js/components/notification.js @@ -6,11 +6,16 @@ class Notification { this.type = elem.getAttribute('notification'); this.textElem = elem.querySelector('span'); this.autohide = this.elem.hasAttribute('data-autohide'); + this.elem.style.display = 'grid'; + window.$events.listen(this.type, text => { this.show(text); }); elem.addEventListener('click', this.hide.bind(this)); - if (elem.hasAttribute('data-show')) this.show(this.textElem.textContent); + + if (elem.hasAttribute('data-show')) { + setTimeout(() => this.show(this.textElem.textContent), 100); + } this.hideCleanup = this.hideCleanup.bind(this); } diff --git a/resources/assets/sass/_components.scss b/resources/assets/sass/_components.scss index dec087b9c..d00d1fe9a 100644 --- a/resources/assets/sass/_components.scss +++ b/resources/assets/sass/_components.scss @@ -4,17 +4,18 @@ top: 0; right: 0; margin: $-xl*2 $-xl; - padding: $-l $-xl; + padding: $-m $-l; background-color: #EEE; border-radius: 3px; - box-shadow: $bs-med; + box-shadow: $bs-card; z-index: 999999; cursor: pointer; max-width: 360px; transition: transform ease-in-out 280ms; - transform: translate3d(580px, 0, 0); + transform: translateX(580px); display: grid; - grid-template-columns: 64px 1fr; + grid-template-columns: 42px 1fr; + color: #FFF; span, svg { vertical-align: middle; justify-self: center; @@ -22,9 +23,9 @@ } svg { fill: #EEEEEE; - width: 4em; - height: 4em; - padding-right: $-m; + width: 2.8rem; + height: 2.8rem; + padding-right: $-s; } span { vertical-align: middle; @@ -32,18 +33,15 @@ } &.pos { background-color: $positive; - color: #EEE; } &.neg { background-color: $negative; - color: #EEE; } &.warning { background-color: $secondary; - color: #EEE; } &.showing { - transform: translate3d(0, 0, 0); + transform: translateX(0); } &.showing:hover { transform: translate3d(0, -2px, 0); diff --git a/resources/assets/sass/_variables.scss b/resources/assets/sass/_variables.scss index d2b6acc9f..e62d37efe 100644 --- a/resources/assets/sass/_variables.scss +++ b/resources/assets/sass/_variables.scss @@ -59,4 +59,5 @@ $text-light: #EEE; // Shadows $bs-light: 0 0 4px 1px #CCC; $bs-med: 0 1px 3px 1px rgba(76, 76, 76, 0.26); +$bs-card: 0 1px 3px 1px rgba(76, 76, 76, 0.26), 0 1px 12px 0px rgba(76, 76, 76, 0.2); $bs-hover: 0 2px 2px 1px rgba(0,0,0,.13); \ No newline at end of file diff --git a/resources/views/partials/notifications.blade.php b/resources/views/partials/notifications.blade.php index 4c6766d25..ac853a56c 100644 --- a/resources/views/partials/notifications.blade.php +++ b/resources/views/partials/notifications.blade.php @@ -1,12 +1,11 @@ - -
    has('success')) data-show @endif> + -
    has('warning')) data-show @endif> + -
    has('error')) data-show @endif> + From af6f4e6c8c891d58898dcb4af6c590781af01315 Mon Sep 17 00:00:00 2001 From: Dan Brown Date: Sun, 29 Jul 2018 15:44:10 +0100 Subject: [PATCH 034/183] Updated pagination to use theme colour --- resources/assets/sass/_lists.scss | 11 +----- .../views/vendor/pagination/default.blade.php | 36 +++++++++++++++++++ 2 files changed, 37 insertions(+), 10 deletions(-) create mode 100644 resources/views/vendor/pagination/default.blade.php diff --git a/resources/assets/sass/_lists.scss b/resources/assets/sass/_lists.scss index 748d473eb..3338b3938 100644 --- a/resources/assets/sass/_lists.scss +++ b/resources/assets/sass/_lists.scss @@ -266,22 +266,13 @@ ul.pagination { padding: $-xxs $-s; border: 1px solid #CCC; margin-left: -1px; - color: #888; - fill: #888; user-select: none; &.disabled { cursor: not-allowed; } } li.active span { - background-color: rgba($primary, 0.8); - color: #EEE; - fill: #EEE; - border-color: rgba($primary, 0.8); - } - a { - color: $primary; - fill: $primary; + color: #FFF; } } diff --git a/resources/views/vendor/pagination/default.blade.php b/resources/views/vendor/pagination/default.blade.php new file mode 100644 index 000000000..de05410dc --- /dev/null +++ b/resources/views/vendor/pagination/default.blade.php @@ -0,0 +1,36 @@ +@if ($paginator->hasPages()) +
      + {{-- Previous Page Link --}} + @if ($paginator->onFirstPage()) +
    • «
    • + @else +
    • + @endif + + {{-- Pagination Elements --}} + @foreach ($elements as $element) + {{-- "Three Dots" Separator --}} + @if (is_string($element)) +
    • {{ $element }}
    • + @endif + + {{-- Array Of Links --}} + @if (is_array($element)) + @foreach ($element as $page => $url) + @if ($page == $paginator->currentPage()) +
    • {{ $page }}
    • + @else +
    • {{ $page }}
    • + @endif + @endforeach + @endif + @endforeach + + {{-- Next Page Link --}} + @if ($paginator->hasMorePages()) +
    • + @else +
    • »
    • + @endif +
    +@endif From e6e740b2a1806ee7e0bb25133b1affecf39b6496 Mon Sep 17 00:00:00 2001 From: Dan Brown Date: Sun, 29 Jul 2018 15:54:53 +0100 Subject: [PATCH 035/183] Update issue templates --- .github/ISSUE_TEMPLATE/bug_report.md | 29 +++++++++++++++++++++++ .github/ISSUE_TEMPLATE/feature_request.md | 14 +++++++++++ 2 files changed, 43 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 000000000..0258cb6ba --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,29 @@ +--- +name: Bug report +about: Create a report to help us improve + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**Steps To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Your Configuration (please complete the following information):** + - Exact BookStack Version (Found in settings): + - PHP Version: + - Using Docker or reverse proxy (Yes/No): + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 000000000..7f38b9cdc --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,14 @@ +--- +name: Feature request +about: Suggest an idea for this project + +--- + +**Describe the feature you'd like** +A clear description of the feature you'd like implemented in BookStack. + +**Describe the benefits this feature would bring to BookStack users** +Explain the measurable benefits this feature would achieve. + +**Additional context** +Add any other context or screenshots about the feature request here. From d59ff132abb045f0f581ace9a416a7a07f3f844f Mon Sep 17 00:00:00 2001 From: Dan Brown Date: Sun, 29 Jul 2018 15:55:13 +0100 Subject: [PATCH 036/183] Delete ISSUE_TEMPLATE.md --- .github/ISSUE_TEMPLATE.md | 21 --------------------- 1 file changed, 21 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE.md diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index 544bd4e87..000000000 --- a/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,21 +0,0 @@ -### For Feature Requests - -Desired Feature: - -### For Bug Reports - -* BookStack Version *(Found in settings, Please don't put 'latest')*: -* PHP Version: -* MySQL Version: - -##### Expected Behavior - - - -##### Current Behavior - - - -##### Steps to Reproduce - - From f47f0e05d6d9244ad1e661a178df04ad6850b932 Mon Sep 17 00:00:00 2001 From: marcusforsberg Date: Mon, 30 Jul 2018 09:35:34 +0300 Subject: [PATCH 037/183] Updated Swedish translation --- resources/lang/sv/common.php | 1 + resources/lang/sv/entities.php | 3 +++ resources/lang/sv/settings.php | 39 ++++++++++++++-------------------- 3 files changed, 20 insertions(+), 23 deletions(-) diff --git a/resources/lang/sv/common.php b/resources/lang/sv/common.php index e7c1e0648..f7bf21e4a 100644 --- a/resources/lang/sv/common.php +++ b/resources/lang/sv/common.php @@ -31,6 +31,7 @@ return [ 'edit' => 'Redigera', 'sort' => 'Sortera', 'move' => 'Flytta', + 'copy' => 'Kopiera', 'reply' => 'Svara', 'delete' => 'Ta bort', 'search' => 'Sök', diff --git a/resources/lang/sv/entities.php b/resources/lang/sv/entities.php index e9d588a9f..3a2d1a2c6 100644 --- a/resources/lang/sv/entities.php +++ b/resources/lang/sv/entities.php @@ -166,6 +166,9 @@ return [ 'pages_not_in_chapter' => 'Sidan ligger inte i något kapitel', 'pages_move' => 'Flytta sida', 'pages_move_success' => 'Sidan har flyttats till ":parentName"', + 'pages_copy' => 'Kopiera sida', + 'pages_copy_desination' => 'Destination', + 'pages_copy_success' => 'Sidan har kopierats', 'pages_permissions' => 'Rättigheter för sida', 'pages_permissions_success' => 'Rättigheterna för sidan har uppdaterats', 'pages_revision' => 'Revision', diff --git a/resources/lang/sv/settings.php b/resources/lang/sv/settings.php index b0496c924..8fe92521a 100644 --- a/resources/lang/sv/settings.php +++ b/resources/lang/sv/settings.php @@ -34,6 +34,7 @@ return [ 'app_homepage' => 'Startsida', 'app_homepage_desc' => 'Välj en sida att använda som startsida istället för standardvyn. Den valda sidans rättigheter kommer att ignoreras.', 'app_homepage_default' => 'Vald vy för startsida', + 'app_homepage_books' => 'Eller välj att ha listan med böcker som startsida. Om du har valt någon annan sida som startsida ovan kommer den inställningen att ignoreras.', 'app_disable_comments' => 'Inaktivera kommentarer', 'app_disable_comments_desc' => 'Inaktivera kommentarer på alla sidor i applikationen. Befintliga kommentarer visas inte.', @@ -50,6 +51,19 @@ return [ 'reg_confirm_restrict_domain_desc' => 'Ange en kommaseparerad lista över e-postdomäner till vilka du vill begränsa registrering. Användare kommer att skickas ett mail för att bekräfta deras e-post innan de får logga in.
    Notera att användare kommer att kunna ändra sin e-postadress efter lyckad registrering.', 'reg_confirm_restrict_domain_placeholder' => 'Ingen begränsning satt', + /** + * Maintenance settings + */ + + 'maint' => 'Underhåll', + 'maint_image_cleanup' => 'Rensa bilder', + 'maint_image_cleanup_desc' => "Söker igenom innehåll i sidor & revisioner för att se vilka bilder och teckningar som är i bruk och vilka som är överflödiga. Se till att ta en komplett backup av databas och bilder innan du kör detta.", + 'maint_image_cleanup_ignore_revisions' => 'Ignorera bilder i revisioner', + 'maint_image_cleanup_run' => 'Kör rensning', + 'maint_image_cleanup_warning' => 'Hittade :count bilder som potentiellt inte används. Vill du verkligen ta bort dessa bilder?', + 'maint_image_cleanup_success' => 'Hittade och raderade :count bilder som potentiellt inte används!', + 'maint_image_cleanup_nothing_found' => 'Hittade inga oanvända bilder, så inget har raderats!', + /** * Role settings */ @@ -68,6 +82,7 @@ return [ 'role_details' => 'Om rollen', 'role_name' => 'Rollens namn', 'role_desc' => 'Kort beskrivning av rollen', + 'role_external_auth_id' => 'Externa autentiserings-ID:n', 'role_system' => 'Systemrättigheter', 'role_manage_users' => 'Hanter användare', 'role_manage_roles' => 'Hantera roller & rättigheter', @@ -96,7 +111,6 @@ return [ 'users_external_auth_id' => 'Externt ID för autentisering', 'users_password_warning' => 'Fyll i nedanstående fält endast om du vill byta lösenord:', 'users_system_public' => 'Den här användaren representerar eventuella gäster som använder systemet. Den kan inte användas för att logga in utan tilldeles automatiskt.', - 'users_books_view_type' => 'Layout för visning av böcker', 'users_delete' => 'Ta bort användare', 'users_delete_named' => 'Ta bort användaren :userName', 'users_delete_warning' => 'Detta kommer att ta bort användaren \':userName\' från systemet helt och hållet.', @@ -113,26 +127,5 @@ return [ 'users_social_connect' => 'Anslut konto', 'users_social_disconnect' => 'Koppla från konto', 'users_social_connected' => ':socialAccount har kopplats till ditt konto.', - 'users_social_disconnected' => ':socialAccount har kopplats bort från ditt konto.', - - // Since these labels are already localized this array does not need to be - // translated in the language-specific files. - // DELETE BELOW IF COPIED FROM EN - /////////////////////////////////// - 'language_select' => [ - 'en' => 'English', - 'de' => 'Deutsch', - 'es' => 'Español', - 'es_AR' => 'Español Argentina', - 'fr' => 'Français', - 'nl' => 'Nederlands', - 'pt_BR' => 'Português do Brasil', - 'sk' => 'Slovensky', - 'sv' => 'Svenska', - 'ja' => '日本語', - 'pl' => 'Polski', - 'it' => 'Italian', - 'ru' => 'Русский' - ] - /////////////////////////////////// + 'users_social_disconnected' => ':socialAccount har kopplats bort från ditt konto.' ]; From 86602854accf076b1724464a53bb9f77ccfe7b31 Mon Sep 17 00:00:00 2001 From: Khalid Date: Mon, 30 Jul 2018 12:54:32 +0300 Subject: [PATCH 038/183] translated --- resources/lang/ar/settings.php | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/resources/lang/ar/settings.php b/resources/lang/ar/settings.php index 3e1f135ed..9ca065a5e 100755 --- a/resources/lang/ar/settings.php +++ b/resources/lang/ar/settings.php @@ -21,8 +21,8 @@ return [ 'app_name_desc' => 'سيتم عرض هذا الاسم في الترويسة وفي أي رسالة بريد إلكتروني.', 'app_name_header' => 'عرض اسم التطبيق في الترويسة؟', 'app_public_viewing' => 'السماح بالعرض على العامة؟', - 'app_secure_images' => 'Enable higher security image uploads?', // جار البحث عن الترجمة الأنسب - 'app_secure_images_desc' => 'For performance reasons, all images are public. This option adds a random, hard-to-guess string in front of image urls. Ensure directory indexes are not enabled to prevent easy access.', // جار البحث عن الترجمة الأنسب + 'app_secure_images' => 'تفعيل حماية أكبر لرفع الصور؟', + 'app_secure_images_desc' => 'لتحسين أداء النظام, ستكون جميع الصور متاحة للعامة. هذا الخيار يضيف سلسلة من الحروف والأرقام العشوائية صعبة التخمين إلى رابط الصورة. الرجاء التأكد من تعطيل فهرسة المسارات لمنع الوصول السهل.', 'app_editor' => 'محرر الصفحة', 'app_editor_desc' => 'الرجاء اختيار محرر النص الذي سيستخدم من قبل جميع المستخدمين لتحرير الصفحات.', 'app_custom_html' => 'Custom HTML head content', // جار البحث عن الترجمة الأنسب @@ -32,11 +32,11 @@ return [ 'app_primary_color' => 'اللون الأساسي للتطبيق', 'app_primary_color_desc' => 'يجب أن تكون القيمة من نوع hex.
    اترك الخانة فارغة للرجوع للون الافتراضي.', 'app_homepage' => 'الصفحة الرئيسية للتطبيق', - 'app_homepage_desc' => 'Select a page to show on the homepage instead of the default view. Page permissions are ignored for selected pages.', // جار البحث عن الترجمة الأنسب + 'app_homepage_desc' => 'الرجاء اختيار صفحة لتصبح الصفحة الرئيسية بدل من الافتراضية. سيتم تجاهل جميع الأذونات الخاصة بالصفحة المختارة.', 'app_homepage_default' => 'شكل الصفحة الافتراضية المختارة', - 'app_homepage_books' => 'Or select the books page as your homepage. This will override any page selected as your homepage.', // جار البحث عن الترجمة الأنسب + 'app_homepage_books' => 'أو من الممكن اختيار صفحة الكتب كصفحة رئيسية. سيتم استبدالها بأي صفحة سابقة تم اختيارها كصفحة رئيسية.', 'app_disable_comments' => 'تعطيل التعليقات', - 'app_disable_comments_desc' => 'Disable comments across all pages in the application. Existing comments are not shown.', // جار البحث عن الترجمة الأنسب + 'app_disable_comments_desc' => 'تعطيل التعليقات على جميع الصفحات داخل التطبيق. التعليقات الموجودة من الأصل لن تكون ظاهرة.', /** * Registration settings @@ -46,7 +46,7 @@ return [ 'reg_allow' => 'السماح بالتسجيل؟', 'reg_default_role' => 'دور المستخدم الأساسي بعد التسجيل', 'reg_confirm_email' => 'فرض التأكيد عن طريق البريد الإلكتروني؟', - 'reg_confirm_email_desc' => 'If domain restriction is used then email confirmation will be required and the below value will be ignored.', // جار البحث عن الترجمة الأنسب + 'reg_confirm_email_desc' => 'إذا تم استخدام قيود للمجال سيصبح التأكيد عن طريق البريد الإلكتروني إلزامي وسيتم تجاهل القيمة أسفله.', 'reg_confirm_restrict_domain' => 'تقييد التسجيل على مجال محدد', 'reg_confirm_restrict_domain_desc' => 'Enter a comma separated list of email domains you would like to restrict registration to. Users will be sent an email to confirm their address before being allowed to interact with the application.
    Note that users will be able to change their email addresses after successful registration.', // جار البحث عن الترجمة الأنسب 'reg_confirm_restrict_domain_placeholder' => 'لم يتم اختيار أي قيود', @@ -60,9 +60,9 @@ return [ 'maint_image_cleanup_desc' => "Scans page & revision content to check which images and drawings are currently in use and which images are redundant. Ensure you create a full database and image backup before running this.", // جار البحث عن الترجمة الأنسب 'maint_image_cleanup_ignore_revisions' => 'تجاهل الصور في المراجعات', 'maint_image_cleanup_run' => 'بدء التنظيف', - 'maint_image_cleanup_warning' => ':count potentially unused images were found. Are you sure you want to delete these images?', // جار البحث عن الترجمة الأنسب - 'maint_image_cleanup_success' => ':count potentially unused images found and deleted!', // جار البحث عن الترجمة الأنسب - 'maint_image_cleanup_nothing_found' => 'No unused images found, Nothing deleted!', // جار البحث عن الترجمة الأنسب + 'maint_image_cleanup_warning' => 'يوجد عدد :count من الصور المحتمل عدم استخدامها. تأكيد حذف الصور؟', + 'maint_image_cleanup_success' => 'تم إيجاد وحذف عدد :count من الصور المحتمل عدم استخدامها!', + 'maint_image_cleanup_nothing_found' => 'لم يتم حذف أي شيء لعدم وجود أي صور غير مسمتخدمة', /** * Role settings @@ -75,12 +75,12 @@ return [ 'role_delete' => 'حذف الدور', 'role_delete_confirm' => 'سيتم حذف الدور المسمى \':roleName\'.', 'role_delete_users_assigned' => 'This role has :userCount users assigned to it. If you would like to migrate the users from this role select a new role below.', - 'role_delete_no_migration' => "Don't migrate users", - 'role_delete_sure' => 'Are you sure you want to delete this role?', - 'role_delete_success' => 'Role successfully deleted', - 'role_edit' => 'Edit Role', - 'role_details' => 'Role Details', - 'role_name' => 'Role Name', + 'role_delete_no_migration' => "لا تقم بترجيل المستخدمين", + 'role_delete_sure' => 'تأكيد حذف الدور؟', + 'role_delete_success' => 'تم حذف الدور بنجاح', + 'role_edit' => 'تعديل الدور', + 'role_details' => 'تفاصيل الدور', + 'role_name' => 'اسم الدور', 'role_desc' => 'Short Description of Role', 'role_external_auth_id' => 'External Authentication IDs', 'role_system' => 'System Permissions', From 08e290f3ead26a58c17913ad9dc556fce92156a9 Mon Sep 17 00:00:00 2001 From: Khalid Date: Mon, 30 Jul 2018 12:58:12 +0300 Subject: [PATCH 039/183] translated --- resources/lang/ar/settings.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/lang/ar/settings.php b/resources/lang/ar/settings.php index 9ca065a5e..cf78fdb83 100755 --- a/resources/lang/ar/settings.php +++ b/resources/lang/ar/settings.php @@ -80,7 +80,7 @@ return [ 'role_delete_success' => 'تم حذف الدور بنجاح', 'role_edit' => 'تعديل الدور', 'role_details' => 'تفاصيل الدور', - 'role_name' => 'اسم الدور', + 'role_name' => 'اسم الدور', // test tests 'role_desc' => 'Short Description of Role', 'role_external_auth_id' => 'External Authentication IDs', 'role_system' => 'System Permissions', From aac9fbf2366ef51ac9dbb6bd52682eb4fc6083af Mon Sep 17 00:00:00 2001 From: Khalid Date: Wed, 1 Aug 2018 18:25:44 +0300 Subject: [PATCH 040/183] translated --- resources/lang/ar/settings.php | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/resources/lang/ar/settings.php b/resources/lang/ar/settings.php index cf78fdb83..2715c1bfc 100755 --- a/resources/lang/ar/settings.php +++ b/resources/lang/ar/settings.php @@ -80,18 +80,18 @@ return [ 'role_delete_success' => 'تم حذف الدور بنجاح', 'role_edit' => 'تعديل الدور', 'role_details' => 'تفاصيل الدور', - 'role_name' => 'اسم الدور', // test tests - 'role_desc' => 'Short Description of Role', - 'role_external_auth_id' => 'External Authentication IDs', - 'role_system' => 'System Permissions', - 'role_manage_users' => 'Manage users', - 'role_manage_roles' => 'Manage roles & role permissions', - 'role_manage_entity_permissions' => 'Manage all book, chapter & page permissions', - 'role_manage_own_entity_permissions' => 'Manage permissions on own book, chapter & pages', - 'role_manage_settings' => 'Manage app settings', - 'role_asset' => 'Asset Permissions', + 'role_name' => 'اسم الدور', + 'role_desc' => 'وصف مختصر للدور', + 'role_external_auth_id' => 'External Authentication IDs', // جار البحث عن الترجمة الأنسب + 'role_system' => 'أذونات النظام', + 'role_manage_users' => 'إدارة المستخدمين', + 'role_manage_roles' => 'إدارة الأدوار وأذوناتها', + 'role_manage_entity_permissions' => 'إدارة جميع أذونات الكتب والفصول والصفحات', + 'role_manage_own_entity_permissions' => 'إدارة الأذونات الخاصة بكتابك أو فصلك أو صفحاتك', + 'role_manage_settings' => 'إدارة إعدادات التطبيق', + 'role_asset' => 'Asset Permissions', // جار البحث عن الترجمة الأنسب 'role_asset_desc' => 'These permissions control default access to the assets within the system. Permissions on Books, Chapters and Pages will override these permissions.', - 'role_all' => 'All', + 'role_all' => 'الكل', 'role_own' => 'Own', 'role_controlled_by_asset' => 'Controlled by the asset they are uploaded to', 'role_save' => 'Save Role', From 04274078c4ee0eb6dd4aa473cb60a8c56a8d2cc0 Mon Sep 17 00:00:00 2001 From: Khalid Date: Thu, 2 Aug 2018 06:38:33 +0300 Subject: [PATCH 041/183] translated --- resources/lang/ar/settings.php | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/resources/lang/ar/settings.php b/resources/lang/ar/settings.php index 2715c1bfc..da7841a15 100755 --- a/resources/lang/ar/settings.php +++ b/resources/lang/ar/settings.php @@ -74,7 +74,7 @@ return [ 'role_create_success' => 'تم إنشاء الدور بنجاح', 'role_delete' => 'حذف الدور', 'role_delete_confirm' => 'سيتم حذف الدور المسمى \':roleName\'.', - 'role_delete_users_assigned' => 'This role has :userCount users assigned to it. If you would like to migrate the users from this role select a new role below.', + 'role_delete_users_assigned' => 'This role has :userCount users assigned to it. If you would like to migrate the users from this role select a new role below.', // جار البحث عن الترجمة الأنسب 'role_delete_no_migration' => "لا تقم بترجيل المستخدمين", 'role_delete_sure' => 'تأكيد حذف الدور؟', 'role_delete_success' => 'تم حذف الدور بنجاح', @@ -90,27 +90,27 @@ return [ 'role_manage_own_entity_permissions' => 'إدارة الأذونات الخاصة بكتابك أو فصلك أو صفحاتك', 'role_manage_settings' => 'إدارة إعدادات التطبيق', 'role_asset' => 'Asset Permissions', // جار البحث عن الترجمة الأنسب - 'role_asset_desc' => 'These permissions control default access to the assets within the system. Permissions on Books, Chapters and Pages will override these permissions.', + 'role_asset_desc' => 'These permissions control default access to the assets within the system. Permissions on Books, Chapters and Pages will override these permissions.', // جار البحث عن الترجمة الأنسب 'role_all' => 'الكل', 'role_own' => 'Own', - 'role_controlled_by_asset' => 'Controlled by the asset they are uploaded to', - 'role_save' => 'Save Role', - 'role_update_success' => 'Role successfully updated', - 'role_users' => 'Users in this role', - 'role_users_none' => 'No users are currently assigned to this role', + 'role_controlled_by_asset' => 'Controlled by the asset they are uploaded to', // جار البحث عن الترجمة الأنسب + 'role_save' => 'حفظ الدور', + 'role_update_success' => 'تم تحديث الدور بنجاح', + 'role_users' => 'مستخدمون داخل هذا الدور', + 'role_users_none' => 'لم يتم تعيين أي مستخدمين لهذا الدور', /** * Users */ - 'users' => 'Users', - 'user_profile' => 'User Profile', - 'users_add_new' => 'Add New User', - 'users_search' => 'Search Users', - 'users_role' => 'User Roles', - 'users_external_auth_id' => 'External Authentication ID', - 'users_password_warning' => 'Only fill the below if you would like to change your password:', - 'users_system_public' => 'This user represents any guest users that visit your instance. It cannot be used to log in but is assigned automatically.', + 'users' => 'المستخدمون', + 'user_profile' => 'ملف المستخدم', + 'users_add_new' => 'إضافة مستخدم جديد', + 'users_search' => 'بحث عن مستخدم', + 'users_role' => 'أدوار المستخدمين', + 'users_external_auth_id' => 'External Authentication ID', // جار البحث عن الترجمة الأنسب + 'users_password_warning' => 'الرجاء ملئ الحقل أدناه فقط في حال أردتم تغيير كلمة المرور:', + 'users_system_public' => 'هذا المستخدم يمثل أي ضيف يقوم بزيارة شيء يخصك. لا يمكن استخدامه لتسجيل الدخول ولكن يتم تعيينه تلقائياً.', 'users_delete' => 'Delete User', 'users_delete_named' => 'Delete user :userName', 'users_delete_warning' => 'This will fully delete this user with the name \':userName\' from the system.', From 0a8ff6ffade0063fd0d257ea37a669433f879ef2 Mon Sep 17 00:00:00 2001 From: Khalid Date: Fri, 3 Aug 2018 18:34:39 +0300 Subject: [PATCH 042/183] translated --- resources/lang/ar/settings.php | 38 +++++------ resources/lang/ar/validation.php | 108 +++++++++++++++---------------- 2 files changed, 71 insertions(+), 75 deletions(-) diff --git a/resources/lang/ar/settings.php b/resources/lang/ar/settings.php index da7841a15..850776a59 100755 --- a/resources/lang/ar/settings.php +++ b/resources/lang/ar/settings.php @@ -111,25 +111,21 @@ return [ 'users_external_auth_id' => 'External Authentication ID', // جار البحث عن الترجمة الأنسب 'users_password_warning' => 'الرجاء ملئ الحقل أدناه فقط في حال أردتم تغيير كلمة المرور:', 'users_system_public' => 'هذا المستخدم يمثل أي ضيف يقوم بزيارة شيء يخصك. لا يمكن استخدامه لتسجيل الدخول ولكن يتم تعيينه تلقائياً.', - 'users_delete' => 'Delete User', - 'users_delete_named' => 'Delete user :userName', - 'users_delete_warning' => 'This will fully delete this user with the name \':userName\' from the system.', - 'users_delete_confirm' => 'Are you sure you want to delete this user?', - 'users_delete_success' => 'Users successfully removed', - 'users_edit' => 'Edit User', - 'users_edit_profile' => 'Edit Profile', - 'users_edit_success' => 'User successfully updated', - 'users_avatar' => 'User Avatar', - 'users_avatar_desc' => 'This image should be approx 256px square.', - 'users_preferred_language' => 'Preferred Language', - 'users_social_accounts' => 'Social Accounts', - 'users_social_accounts_info' => 'Here you can connect your other accounts for quicker and easier login. Disconnecting an account here does not previously authorized access. Revoke access from your profile settings on the connected social account.', - 'users_social_connect' => 'Connect Account', - 'users_social_disconnect' => 'Disconnect Account', - 'users_social_connected' => ':socialAccount account was successfully attached to your profile.', - 'users_social_disconnected' => ':socialAccount account was successfully disconnected from your profile.', - - // Since these labels are already localized this array does not need to be - // translated in the language-specific files. - // DELETE BELOW IF COPIED FROM EN (تم الحذف) + 'users_delete' => 'حذف المستخدم', + 'users_delete_named' => 'حذف المستخدم :userName', + 'users_delete_warning' => 'سيتم حذف المستخدم \':userName\' بشكل تام من النظام.', + 'users_delete_confirm' => 'تأكيد حذف المستخدم؟', + 'users_delete_success' => 'تم حذف المستخدم بنجاح', + 'users_edit' => 'تعديل المستخدم', + 'users_edit_profile' => 'تعديل الملف', + 'users_edit_success' => 'تم تحديث المستخدم بنجاح', + 'users_avatar' => 'صورة المستخدم', + 'users_avatar_desc' => 'يجب أن تكون الصورة مربعة ومقاربة لحجم 256 بكسل', + 'users_preferred_language' => 'اللغة المفضلة', + 'users_social_accounts' => 'الحسابات الاجتماعية', + 'users_social_accounts_info' => 'Here you can connect your other accounts for quicker and easier login. Disconnecting an account here does not previously authorized access. Revoke access from your profile settings on the connected social account.', // جار البحث عن الترجمة الأنسب + 'users_social_connect' => 'ربط الحساب', + 'users_social_disconnect' => 'فصل الحساب', + 'users_social_connected' => 'تم ربط حساب :socialAccount بملفك بنجاح.', + 'users_social_disconnected' => 'تم فصل حساب :socialAccount من ملفك بنجاح.', ]; diff --git a/resources/lang/ar/validation.php b/resources/lang/ar/validation.php index b75af7485..47035a97d 100644 --- a/resources/lang/ar/validation.php +++ b/resources/lang/ar/validation.php @@ -13,67 +13,67 @@ return [ | */ - 'accepted' => 'The :attribute must be accepted.', - 'active_url' => 'The :attribute is not a valid URL.', - 'after' => 'The :attribute must be a date after :date.', - 'alpha' => 'The :attribute may only contain letters.', - 'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.', - 'alpha_num' => 'The :attribute may only contain letters and numbers.', - 'array' => 'The :attribute must be an array.', - 'before' => 'The :attribute must be a date before :date.', + 'accepted' => 'يجب الموافقة على :attribute.', + 'active_url' => ':attribute ليس رابط صالح.', + 'after' => 'يجب أن يكون التاريخ :attribute بعد :date.', + 'alpha' => 'يجب أن يقتصر :attribute على الحروف فقط.', + 'alpha_dash' => 'يجب أن يقتصر :attribute على حروف أو أرقام أو شرطات فقط.', + 'alpha_num' => 'يجب أن يقتصر :attribute على الحروف والأرقام فقط.', + 'array' => 'The :attribute must be an array.', // جار البحث عن الترجمة الأنسب + 'before' => 'يجب أن يكون التاريخ :attribute قبل :date.', 'between' => [ - 'numeric' => 'The :attribute must be between :min and :max.', - 'file' => 'The :attribute must be between :min and :max kilobytes.', - 'string' => 'The :attribute must be between :min and :max characters.', - 'array' => 'The :attribute must have between :min and :max items.', + 'numeric' => 'يجب أن يكون :attribute بين :min و :max.', + 'file' => 'يجب أن يكون :attribute بين :min و :max كيلو بايت.', + 'string' => 'يجب أن يكون :attribute بين :min و :max حرف / حروف.', + 'array' => 'يجب أن يكون :attribute بين :min و :max عنصر / عناصر.', ], - 'boolean' => 'The :attribute field must be true or false.', - 'confirmed' => 'The :attribute confirmation does not match.', - 'date' => 'The :attribute is not a valid date.', - 'date_format' => 'The :attribute does not match the format :format.', - 'different' => 'The :attribute and :other must be different.', - 'digits' => 'The :attribute must be :digits digits.', - 'digits_between' => 'The :attribute must be between :min and :max digits.', - 'email' => 'The :attribute must be a valid email address.', - 'filled' => 'The :attribute field is required.', - 'exists' => 'The selected :attribute is invalid.', - 'image' => 'The :attribute must be an image.', - 'in' => 'The selected :attribute is invalid.', - 'integer' => 'The :attribute must be an integer.', - 'ip' => 'The :attribute must be a valid IP address.', + 'boolean' => 'The :attribute field must be true or false.', // جار البحث عن الترجمة الأنسب + 'confirmed' => ':attribute غير مطابق.', + 'date' => ':attribute ليس تاريخ صالح.', + 'date_format' => ':attribute لا يطابق الصيغة :format.', + 'different' => 'يجب أن يكون :attribute مختلف عن :other.', + 'digits' => 'يجب أن يكون :attribute بعدد :digits خانات.', + 'digits_between' => 'يجب أن يكون :attribute بعدد خانات بين :min و :max.', + 'email' => 'يجب أن يكون :attribute عنوان بريد إلكتروني صالح.', + 'filled' => 'حقل :attribute مطلوب.', + 'exists' => ':attribute المحدد غير صالح.', + 'image' => 'يجب أن يكون :attribute صورة.', + 'in' => ':attribute المحدد غير صالح.', + 'integer' => 'يجب أن يكون :attribute عدد صحيح.', + 'ip' => 'يجب أن يكون :attribute عنوان IP صالح.', 'max' => [ - 'numeric' => 'The :attribute may not be greater than :max.', - 'file' => 'The :attribute may not be greater than :max kilobytes.', - 'string' => 'The :attribute may not be greater than :max characters.', - 'array' => 'The :attribute may not have more than :max items.', + 'numeric' => 'يجب ألا يكون :attribute أكبر من :max.', + 'file' => 'يجب ألا يكون :attribute أكبر من :max كيلو بايت.', + 'string' => 'يجب ألا يكون :attribute أكثر من :max حرف / حروف.', + 'array' => 'يجب ألا يحتوي :attribute على أكثر من :max عنصر / عناصر.', ], - 'mimes' => 'The :attribute must be a file of type: :values.', + 'mimes' => 'يجب أن يكون :attribute ملف من نوع: :values.', 'min' => [ - 'numeric' => 'The :attribute must be at least :min.', - 'file' => 'The :attribute must be at least :min kilobytes.', - 'string' => 'The :attribute must be at least :min characters.', - 'array' => 'The :attribute must have at least :min items.', + 'numeric' => 'يجب أن يكون :attribute على الأقل :min.', + 'file' => 'يجب أن يكون :attribute على الأقل :min كيلو بايت.', + 'string' => 'يجب أن يكون :attribute على الأقل :min حرف / حروف.', + 'array' => 'يجب أن يحتوي :attribute على :min عنصر / عناصر كحد أدنى.', ], - 'not_in' => 'The selected :attribute is invalid.', - 'numeric' => 'The :attribute must be a number.', - 'regex' => 'The :attribute format is invalid.', - 'required' => 'The :attribute field is required.', - 'required_if' => 'The :attribute field is required when :other is :value.', - 'required_with' => 'The :attribute field is required when :values is present.', - 'required_with_all' => 'The :attribute field is required when :values is present.', - 'required_without' => 'The :attribute field is required when :values is not present.', - 'required_without_all' => 'The :attribute field is required when none of :values are present.', - 'same' => 'The :attribute and :other must match.', + 'not_in' => ':attribute المحدد غير صالح.', + 'numeric' => 'يجب أن يكون :attribute رقم.', + 'regex' => 'صيغة :attribute غير صالحة.', + 'required' => 'حقل :attribute مطلوب.', + 'required_if' => 'حقل :attribute مطلوب عندما يكون :other :value.', + 'required_with' => 'حقل :attribute مطلوب عندما تكون :values موجودة.', + 'required_with_all' => 'حقل :attribute مطلوب عندما تكون :values موجودة.', + 'required_without' => 'حقل :attribute مطلوب عندما تكون :values غير موجودة.', + 'required_without_all' => 'حقل :attribute مطلوب عندما لا يكون أي من :values موجودة.', + 'same' => 'يجب تطابق :attribute مع :other.', 'size' => [ - 'numeric' => 'The :attribute must be :size.', - 'file' => 'The :attribute must be :size kilobytes.', - 'string' => 'The :attribute must be :size characters.', - 'array' => 'The :attribute must contain :size items.', + 'numeric' => 'يجب أن يكون :attribute بحجم :size.', + 'file' => 'يجب أن يكون :attribute بحجم :size كيلو بايت.', + 'string' => 'يجب أن يكون :attribute بعدد :size حرف / حروف.', + 'array' => 'يجب أن يحتوي :attribute على :size عنصر / عناصر.', ], - 'string' => 'The :attribute must be a string.', - 'timezone' => 'The :attribute must be a valid zone.', - 'unique' => 'The :attribute has already been taken.', - 'url' => 'The :attribute format is invalid.', + 'string' => 'The :attribute must be a string.', // جار البحث عن الترجمة الأنسب + 'timezone' => 'يجب أن تكون :attribute منطقة صالحة.', + 'unique' => 'تم حجز :attribute من قبل.', + 'url' => 'صيغة :attribute غير صالحة.', /* |-------------------------------------------------------------------------- @@ -88,7 +88,7 @@ return [ 'custom' => [ 'password-confirm' => [ - 'required_with' => 'Password confirmation required', + 'required_with' => 'يجب تأكيد كلمة المرور', ], ], From 85544c04a9c1f4817329eaf9b2002551d441fde0 Mon Sep 17 00:00:00 2001 From: Khalid Date: Fri, 3 Aug 2018 18:51:18 +0300 Subject: [PATCH 043/183] translated --- resources/lang/ar/entities.php | 8 ++++---- resources/lang/ar/errors.php | 16 ++++++++-------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/resources/lang/ar/entities.php b/resources/lang/ar/entities.php index 3e249efaf..55099380d 100644 --- a/resources/lang/ar/entities.php +++ b/resources/lang/ar/entities.php @@ -19,7 +19,7 @@ return [ 'meta_created_name' => 'أنشئ :timeLength بواسطة :user', 'meta_updated' => 'مُحدث :timeLength', 'meta_updated_name' => 'مُحدث :timeLength بواسطة :user', - 'entity_select' => 'Entity Select', + 'entity_select' => 'Entity Select', // جار البحث عن الترجمة الأنسب 'images' => 'صور', 'my_recent_drafts' => 'مسوداتي الحديثة', 'my_recently_viewed' => 'ما عرضته مؤخراً', @@ -94,7 +94,7 @@ return [ 'books_empty_add_chapter' => 'إضافة فصل', 'books_permissions_active' => 'أذونات الكتاب مفعلة', 'books_search_this' => 'البحث في هذا الكتاب', - 'books_navigation' => 'Book Navigation', // جار البحث عن الترجمة الأنسب + 'books_navigation' => 'تصفح الكتاب', 'books_sort' => 'فرز محتويات الكتاب', 'books_sort_named' => 'فرز كتاب :bookName', 'books_sort_show_other' => 'عرض كتب أخرى', @@ -134,7 +134,7 @@ return [ 'pages_popular' => 'صفحات رائجة', 'pages_new' => 'صفحة جديدة', 'pages_attachments' => 'مرفقات', - 'pages_navigation' => 'Page Navigation', // جار البحث عن الترجمة الأنسب + 'pages_navigation' => 'تصفح الصفحة', 'pages_delete' => 'حذف الصفحة', 'pages_delete_named' => 'حذف صفحة :pageName', 'pages_delete_draft_named' => 'حذف مسودة :pageName', @@ -144,7 +144,7 @@ return [ 'pages_delete_confirm' => 'تأكيد حذف الصفحة؟', 'pages_delete_draft_confirm' => 'تأكيد حذف المسودة؟', 'pages_editing_named' => ':pageName قيد التعديل', - 'pages_edit_toggle_header' => 'Toggle header', // جار البحث عن الترجمة الأنسب + 'pages_edit_toggle_header' => 'إظهار / إخفاء الترويسة', 'pages_edit_save_draft' => 'حفظ المسودة', 'pages_edit_draft' => 'تعديل مسودة الصفحة', 'pages_editing_draft' => 'المسودة قيد التعديل', diff --git a/resources/lang/ar/errors.php b/resources/lang/ar/errors.php index 928a5fd46..019b1ac87 100644 --- a/resources/lang/ar/errors.php +++ b/resources/lang/ar/errors.php @@ -15,18 +15,18 @@ return [ 'email_already_confirmed' => 'تم تأكيد البريد الإلكتروني من قبل, الرجاء محاولة تسجيل الدخول.', 'email_confirmation_invalid' => 'رابط التأكيد غير صحيح أو قد تم استخدامه من قبل, الرجاء محاولة التسجيل من جديد.', 'email_confirmation_expired' => 'صلاحية رابط التأكيد انتهت, تم إرسال رسالة تأكيد جديدة لعنوان البريد الإلكتروني.', - 'ldap_fail_anonymous' => 'LDAP access failed using anonymous bind', // جار البحث عن الترجمة الأنسب - 'ldap_fail_authed' => 'LDAP access failed using given dn & password details', // جار البحث عن الترجمة الأنسب + 'ldap_fail_anonymous' => 'فشل الوصول إلى LDAP باستخدام الربط المجهول', + 'ldap_fail_authed' => 'فشل الوصول إلى LDAP باستخدام dn و password المعطاة', 'ldap_extension_not_installed' => 'لم يتم تثبيت إضافة LDAP PHP', 'ldap_cannot_connect' => 'لا يمكن الاتصال بخادم ldap, فشل الاتصال المبدئي', 'social_no_action_defined' => 'لم يتم تعريف أي إجراء', 'social_login_bad_response' => "حصل خطأ خلال تسجيل الدخول باستخدام :socialAccount \n:error", - 'social_account_in_use' => 'This :socialAccount account is already in use, Try logging in via the :socialAccount option.', // جار البحث عن الترجمة الأنسب - 'social_account_email_in_use' => 'The email :email is already in use. If you already have an account you can connect your :socialAccount account from your profile settings.', // جار البحث عن الترجمة الأنسب - 'social_account_existing' => 'This :socialAccount is already attached to your profile.', // جار البحث عن الترجمة الأنسب - 'social_account_already_used_existing' => 'This :socialAccount account is already used by another user.', // جار البحث عن الترجمة الأنسب - 'social_account_not_used' => 'This :socialAccount account is not linked to any users. Please attach it in your profile settings. ', // جار البحث عن الترجمة الأنسب - 'social_account_register_instructions' => 'إذا لم يكن لديك حساب فيمكنك التجسيل باستخدام خيار :socialAccount.', + 'social_account_in_use' => 'حساب :socialAccount قيد الاستخدام حالياً, الرجاء محاولة الدخول باستخدام خيار :socialAccount.', + 'social_account_email_in_use' => 'البريد الإلكتروني :email مستخدم. إذا كان لديكم حساب فبإمكانكم ربط حساب :socialAccount من إعدادات ملفكم.', + 'social_account_existing' => 'تم ربط حساب :socialAccount بملفكم من قبل.', + 'social_account_already_used_existing' => 'حساب :socialAccount مستخدَم من قبل مستخدم آخر.', + 'social_account_not_used' => 'حساب :socialAccount غير مرتبط بأي مستخدم. الرجاء ربطه من خلال إعدادات ملفكم. ', + 'social_account_register_instructions' => 'إذا لم يكن لديكم حساب فيمكنكم التجسيل باستخدام خيار :socialAccount.', 'social_driver_not_found' => 'Social driver not found', // جار البحث عن الترجمة الأنسب 'social_driver_not_configured' => 'Your :socialAccount social settings are not configured correctly.', // جار البحث عن الترجمة الأنسب From 7d4ec0d6338415512896e7c39327f96618603e10 Mon Sep 17 00:00:00 2001 From: Khalid Date: Fri, 3 Aug 2018 18:58:27 +0300 Subject: [PATCH 044/183] added Arabic language to drop-down list. --- resources/lang/en/settings.php | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/lang/en/settings.php b/resources/lang/en/settings.php index d6fbb6107..6b1eb3929 100755 --- a/resources/lang/en/settings.php +++ b/resources/lang/en/settings.php @@ -135,6 +135,7 @@ return [ /////////////////////////////////// 'language_select' => [ 'en' => 'English', + 'ar' => 'العربية', 'de' => 'Deutsch', 'es' => 'Español', 'es_AR' => 'Español Argentina', From a6862362c10df56cdbbb0436562df027b330b176 Mon Sep 17 00:00:00 2001 From: Khalid Date: Fri, 3 Aug 2018 19:00:51 +0300 Subject: [PATCH 045/183] added Arabic to locales --- config/app.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/app.php b/config/app.php index 69e2380e8..c98efadd5 100755 --- a/config/app.php +++ b/config/app.php @@ -77,7 +77,7 @@ return [ */ 'locale' => env('APP_LANG', 'en'), - 'locales' => ['en', 'de', 'es', 'es_AR', 'fr', 'nl', 'pt_BR', 'sk', 'sv', 'ja', 'pl', 'it', 'ru', 'zh_CN', 'zh_TW'], + 'locales' => ['en', 'ar', 'de', 'es', 'es_AR', 'fr', 'nl', 'pt_BR', 'sk', 'sv', 'ja', 'pl', 'it', 'ru', 'zh_CN', 'zh_TW'], /* |-------------------------------------------------------------------------- From c3986cedfc992abfe12c8ad596e949dbaf35a093 Mon Sep 17 00:00:00 2001 From: Dan Brown Date: Sat, 4 Aug 2018 12:45:45 +0100 Subject: [PATCH 046/183] Added shelve icon, improved migration, added role permission Icon is placeholder for now Migration will now copy permissions from Books to apply to shelves. Role view updated with visibility on shelve permission --- ...08_04_115700_create_bookshelves_table.php} | 45 +++++++++++-------- resources/assets/icons/bookshelf.svg | 2 + resources/lang/en/entities.php | 6 +++ resources/views/base.blade.php | 1 + resources/views/settings/roles/form.blade.php | 18 ++++++++ 5 files changed, 54 insertions(+), 18 deletions(-) rename database/migrations/{2018_06_24_115700_create_bookshelves_table.php => 2018_08_04_115700_create_bookshelves_table.php} (53%) create mode 100644 resources/assets/icons/bookshelf.svg diff --git a/database/migrations/2018_06_24_115700_create_bookshelves_table.php b/database/migrations/2018_08_04_115700_create_bookshelves_table.php similarity index 53% rename from database/migrations/2018_06_24_115700_create_bookshelves_table.php rename to database/migrations/2018_08_04_115700_create_bookshelves_table.php index 173e9214b..f32a1cdfb 100644 --- a/database/migrations/2018_06_24_115700_create_bookshelves_table.php +++ b/database/migrations/2018_08_04_115700_create_bookshelves_table.php @@ -30,31 +30,31 @@ class CreateBookshelvesTable extends Migration $table->index('restricted'); }); - // Get roles with permissions we need to change - $adminRoleId = DB::table('roles')->where('system_name', '=', 'admin')->first()->id; - $editorRole = DB::table('roles')->where('name', '=', 'editor')->first(); - - // TODO - Copy existing role permissions from Books - $entity = 'BookShelf'; + // Copy existing role permissions from Books $ops = ['View All', 'View Own', 'Create All', 'Create Own', 'Update All', 'Update Own', 'Delete All', 'Delete Own']; foreach ($ops as $op) { - $permId = DB::table('permissions')->insertGetId([ - 'name' => strtolower($entity) . '-' . strtolower(str_replace(' ', '-', $op)), + $dbOpName = strtolower(str_replace(' ', '-', $op)); + $roleIdsWithBookPermission = DB::table('role_permissions') + ->leftJoin('permission_role', 'role_permissions.id', '=', 'permission_role.permission_id') + ->leftJoin('roles', 'roles.id', '=', 'permission_role.role_id') + ->where('role_permissions.name', '=', 'book-' . $dbOpName)->get(['roles.id'])->pluck('id'); + + $permId = DB::table('role_permissions')->insertGetId([ + 'name' => 'bookshelf-' . $dbOpName, 'display_name' => $op . ' ' . 'BookShelves', 'created_at' => \Carbon\Carbon::now()->toDateTimeString(), 'updated_at' => \Carbon\Carbon::now()->toDateTimeString() ]); - // Assign view permission to all current roles - DB::table('permission_role')->insert([ - 'role_id' => $adminRoleId, - 'permission_id' => $permId - ]); - if ($editorRole !== null) { - DB::table('permission_role')->insert([ - 'role_id' => $editorRole->id, + + $rowsToInsert = $roleIdsWithBookPermission->map(function($roleId) use ($permId) { + return [ + 'role_id' => $roleId, 'permission_id' => $permId - ]); - } + ]; + })->toArray(); + + // Assign view permission to all current roles + DB::table('permission_role')->insert($rowsToInsert); } } @@ -65,6 +65,15 @@ class CreateBookshelvesTable extends Migration */ public function down() { + // Drop created permissions + $ops = ['bookshelf-create-all','bookshelf-create-own','bookshelf-delete-all','bookshelf-delete-own','bookshelf-update-all','bookshelf-update-own','bookshelf-view-all','bookshelf-view-own']; + + $permissionIds = DB::table('role_permissions')->whereIn('name', $ops) + ->get(['id'])->pluck('id')->toArray(); + DB::table('permission_role')->whereIn('permission_id', $permissionIds)->delete(); + DB::table('role_permissions')->whereIn('id', $permissionIds)->delete(); + + // Drop shelves table Schema::dropIfExists('bookshelves'); } } diff --git a/resources/assets/icons/bookshelf.svg b/resources/assets/icons/bookshelf.svg new file mode 100644 index 000000000..03da68f96 --- /dev/null +++ b/resources/assets/icons/bookshelf.svg @@ -0,0 +1,2 @@ + + diff --git a/resources/lang/en/entities.php b/resources/lang/en/entities.php index 93025ffd4..834b977e7 100644 --- a/resources/lang/en/entities.php +++ b/resources/lang/en/entities.php @@ -64,6 +64,12 @@ return [ 'search_set_date' => 'Set Date', 'search_update' => 'Update Search', + /** + * Shelves + */ + 'shelves' => 'Shelves', + 'shelves_long' => 'BookShelves', + /** * Books */ diff --git a/resources/views/base.blade.php b/resources/views/base.blade.php index 8f6c2eb46..93517ef6f 100644 --- a/resources/views/base.blade.php +++ b/resources/views/base.blade.php @@ -52,6 +52,7 @@
    +
    + +

    {{ trans('settings.reg_auto_social_allow_desc') }}

    + @include('components.toggle-switch', ['name' => 'setting-autosocialregistration-confirmation', 'value' => setting('autosocialregistration-confirmation')]) +

    {{ trans('settings.reg_confirm_email_desc') }}

    From b224a2c8a0862ca4d91389bba4d98cfaef3127b8 Mon Sep 17 00:00:00 2001 From: Ibrahim Ennafaa Date: Thu, 16 Aug 2018 21:52:16 +0000 Subject: [PATCH 057/183] attempt to fix unit test error for admin creation --- app/Repos/UserRepo.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Repos/UserRepo.php b/app/Repos/UserRepo.php index b828a582b..232c5315a 100644 --- a/app/Repos/UserRepo.php +++ b/app/Repos/UserRepo.php @@ -144,7 +144,7 @@ class UserRepo * @param array $data * @return User */ - public function create(array $data, $autoVerifyEmail) + public function create(array $data, $autoVerifyEmail=false) { return $this->user->forceCreate([ From d2a9b312e98128d08bfc5838c8ac72ac13d0f47a Mon Sep 17 00:00:00 2001 From: Dan Brown Date: Sun, 19 Aug 2018 15:24:42 +0100 Subject: [PATCH 058/183] Fixed LDAP group sync using wrong user filter LDAP group sync was trying to find users based on the external_auth_id which is not garunteed to match the username entered so somtimes the search for a user would fail. This passes the username to the group sync. Picked up by @yoyokko in #959. --- app/Http/Controllers/Auth/LoginController.php | 2 +- app/Services/LdapService.php | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php index 791c265ad..c0541c9e2 100644 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -103,7 +103,7 @@ class LoginController extends Controller // Sync LDAP groups if required if ($this->ldapService->shouldSyncGroups()) { - $this->ldapService->syncGroups($user); + $this->ldapService->syncGroups($user, $request->get($this->username())); } $path = session()->pull('url.intended', '/'); diff --git a/app/Services/LdapService.php b/app/Services/LdapService.php index c11094aa9..11223433b 100644 --- a/app/Services/LdapService.php +++ b/app/Services/LdapService.php @@ -299,11 +299,12 @@ class LdapService /** * Sync the LDAP groups to the user roles for the current user * @param \BookStack\User $user + * @param string $username * @throws LdapException */ - public function syncGroups(User $user) + public function syncGroups(User $user, string $username) { - $userLdapGroups = $this->getUserGroups($user->external_auth_id); + $userLdapGroups = $this->getUserGroups($username); // Get the ids for the roles from the names $ldapGroupsAsRoles = $this->matchLdapGroupsToSystemsRoles($userLdapGroups); From 572e75b7831c67f59a873e455565216441a3f2d8 Mon Sep 17 00:00:00 2001 From: Ibrahim Ennafaa Date: Mon, 20 Aug 2018 21:19:25 -0400 Subject: [PATCH 059/183] Update UserRepo.php --- app/Repos/UserRepo.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Repos/UserRepo.php b/app/Repos/UserRepo.php index 232c5315a..b31f0334d 100644 --- a/app/Repos/UserRepo.php +++ b/app/Repos/UserRepo.php @@ -76,7 +76,7 @@ class UserRepo return $query->paginate($count); } - /** + /** * Creates a new user and attaches a role to them. * @param array $data * @param boolean autoVerifyEmail @@ -261,4 +261,4 @@ class UserRepo return false; } } -} \ No newline at end of file +} From d2f5313f92c857c4ff71aea5cdb206662be20f3e Mon Sep 17 00:00:00 2001 From: Ibrahim Ennafaa Date: Tue, 21 Aug 2018 12:44:42 -0400 Subject: [PATCH 060/183] add missing @param in method comment --- app/Repos/UserRepo.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/Repos/UserRepo.php b/app/Repos/UserRepo.php index b31f0334d..6defe8aa5 100644 --- a/app/Repos/UserRepo.php +++ b/app/Repos/UserRepo.php @@ -142,6 +142,7 @@ class UserRepo /** * Create a new basic instance of user. * @param array $data + * @param boolean $autoVerifyEmail * @return User */ public function create(array $data, $autoVerifyEmail=false) From c472b82ee3ddd5e5446491d136f268e34a3e65dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Luiz=20da=20Silva?= Date: Fri, 24 Aug 2018 16:03:04 -0300 Subject: [PATCH 061/183] Adds and fixes pt_BR strings --- resources/lang/pt_BR/components.php | 3 ++- resources/lang/pt_BR/entities.php | 7 +++++++ resources/lang/pt_BR/errors.php | 12 ++++++++---- resources/lang/pt_BR/settings.php | 15 +++++++++++++++ 4 files changed, 32 insertions(+), 5 deletions(-) diff --git a/resources/lang/pt_BR/components.php b/resources/lang/pt_BR/components.php index 872c00c9f..4ea4d88c5 100644 --- a/resources/lang/pt_BR/components.php +++ b/resources/lang/pt_BR/components.php @@ -22,6 +22,7 @@ return [ 'image_upload_success' => 'Upload de imagem efetuado com sucesso', 'image_update_success' => 'Upload de detalhes da imagem efetuado com sucesso', 'image_delete_success' => 'Imagem excluída com sucesso', + 'image_upload_remove' => 'Remover', /** * Code editor @@ -30,4 +31,4 @@ return [ 'code_language' => 'Linguagem do Código', 'code_content' => 'Código', 'code_save' => 'Salvar Código', -]; \ No newline at end of file +]; diff --git a/resources/lang/pt_BR/entities.php b/resources/lang/pt_BR/entities.php index 4dbf9c935..2f77e5490 100644 --- a/resources/lang/pt_BR/entities.php +++ b/resources/lang/pt_BR/entities.php @@ -162,9 +162,13 @@ return [ 'pages_md_preview' => 'Preview', 'pages_md_insert_image' => 'Inserir Imagem', 'pages_md_insert_link' => 'Inserir Link para Entidade', + 'pages_md_insert_drawing' => 'Inserir Desenho', 'pages_not_in_chapter' => 'Página não está dentro de um Capítulo', 'pages_move' => 'Mover Página', 'pages_move_success' => 'Pagina movida para ":parentName"', + 'pages_copy' => 'Copiar Página', + 'pages_copy_desination' => 'Destino da Cópia', + 'pages_copy_success' => 'Página copiada com sucesso', 'pages_permissions' => 'Permissões de Página', 'pages_permissions_success' => 'Permissões de Página atualizadas', 'pages_revision' => 'Revisão', @@ -200,6 +204,8 @@ return [ * Editor sidebar */ 'page_tags' => 'Tags de Página', + 'chapter_tags' => 'Tags de Capítulo', + 'book_tags' => 'Tags de Livro', 'tag' => 'Tag', 'tags' => '', 'tag_value' => 'Valor da Tag (Opcional)', @@ -245,6 +251,7 @@ return [ */ 'comment' => 'Comentário', 'comments' => 'Comentários', + 'comment_add' => 'Adicionar Comentário', 'comment_placeholder' => 'Digite seus comentários aqui', 'comment_count' => '{0} Nenhum comentário|{1} 1 Comentário|[2,*] :count Comentários', 'comment_save' => 'Salvar comentário', diff --git a/resources/lang/pt_BR/errors.php b/resources/lang/pt_BR/errors.php index fd5d89c69..f6112c9dd 100644 --- a/resources/lang/pt_BR/errors.php +++ b/resources/lang/pt_BR/errors.php @@ -16,10 +16,11 @@ return [ 'email_confirmation_invalid' => 'Esse token de confirmação não é válido ou já foi utilizado. Por favor, tente efetuar o registro novamente.', 'email_confirmation_expired' => 'O token de confirmação já expirou. Um novo e-mail foi enviado.', 'ldap_fail_anonymous' => 'O acesso LDAP falhou ao tentar usar o anonymous bind', - 'ldap_fail_authed' => 'O acesso LDAPfalou ao tentar os detalhes do dn e senha fornecidos', + 'ldap_fail_authed' => 'O acesso LDAP falhou ao tentar os detalhes do dn e senha fornecidos', 'ldap_extension_not_installed' => 'As extensões LDAP PHP não estão instaladas', 'ldap_cannot_connect' => 'Não foi possível conectar ao servidor LDAP. Conexão inicial falhou', 'social_no_action_defined' => 'Nenhuma ação definida', + 'social_login_bad_response' => "Erro recebido durante o login :socialAccount: \n:error", 'social_account_in_use' => 'Essa conta :socialAccount já está em uso. Por favor, tente se logar usando a opção :socialAccount', 'social_account_email_in_use' => 'O e-mail :email já está e muso. Se você já tem uma conta você poderá se conectar a conta :socialAccount a partir das configurações de seu perfil.', 'social_account_existing' => 'Essa conta :socialAccount já está atrelada a esse perfil.', @@ -34,13 +35,16 @@ return [ 'cannot_get_image_from_url' => 'Não foi possivel capturar a imagem a partir de :url', 'cannot_create_thumbs' => 'O servidor não pôde criar as miniaturas de imagem. Por favor, verifique se a extensão GD PHP está instalada.', 'server_upload_limit' => 'O servidor não permite o upload de arquivos com esse tamanho. Por favor, tente fazer o upload de arquivos de menor tamanho.', + 'uploaded' => 'O servidor não permite o upload de arquivos com esse tamanho. Por favor, tente fazer o upload de arquivos de menor tamanho.', 'image_upload_error' => 'Um erro aconteceu enquanto o servidor tentava efetuar o upload da imagem', + 'image_upload_type_error' => 'O tipo de imagem que está sendo feito upload é inválido', // Attachments 'attachment_page_mismatch' => 'Erro de \'Page mismatch\' durante a atualização do anexo', + 'attachment_not_found' => 'Anexo não encontrado', // Pages - 'page_draft_autosave_fail' => 'Falou ao tentar salvar o rascunho. Certifique-se que a conexão de internet está funcional antes de tentar salvar essa página', + 'page_draft_autosave_fail' => 'Falhou ao tentar salvar o rascunho. Certifique-se que a conexão de internet está funcional antes de tentar salvar essa página', 'page_custom_home_deletion' => 'Não pode deletar uma página que está definida como página inicial', // Entities @@ -57,7 +61,7 @@ return [ 'users_cannot_delete_guest' => 'Você não pode excluir o usuário convidado', // Roles - 'role_cannot_be_edited' => 'Esse perfil não poed ser editado', + 'role_cannot_be_edited' => 'Esse perfil não pode ser editado', 'role_system_cannot_be_deleted' => 'Esse perfil é um perfil de sistema e não pode ser excluído', 'role_registration_default_cannot_delete' => 'Esse perfil não poderá se excluído enquando estiver registrado como o perfil padrão', @@ -75,4 +79,4 @@ return [ 'error_occurred' => 'Um erro ocorreu', 'app_down' => ':appName está fora do ar no momento', 'back_soon' => 'Voltaremos em seguida.', -]; \ No newline at end of file +]; diff --git a/resources/lang/pt_BR/settings.php b/resources/lang/pt_BR/settings.php index 77a0e6e39..7889d8a3c 100644 --- a/resources/lang/pt_BR/settings.php +++ b/resources/lang/pt_BR/settings.php @@ -35,6 +35,7 @@ return [ 'app_homepage_desc' => 'Selecione a página para ser usada como página inicial em vez da padrão. Permissões da página serão ignoradas.', 'app_homepage_default' => 'Escolhida página inicial padrão', 'app_disable_comments' => 'Desativar comentários', + 'app_homepage_books' => 'Ou selecione a página de livros como sua página inicial. Isso substituirá qualquer página selecionada como sua página inicial.', 'app_disable_comments_desc' => 'Desativar comentários em todas as páginas no aplicativo. Os comentários existentes não são exibidos.', /** @@ -50,6 +51,19 @@ return [ 'reg_confirm_restrict_domain_desc' => 'Entre com uma lista de domínios de e-mails separados por vírgula para os quais você deseja restringir os registros. Será enviado um e-mail de confirmação para o usuário validar o e-mail antes de ser permitido interação com a aplicação.
    Note que os usuários serão capazes de alterar o e-mail cadastrado após o sucesso na confirmação do registro.', 'reg_confirm_restrict_domain_placeholder' => 'Nenhuma restrição configurada', + /** + * Maintenance settings + */ + + 'maint' => 'Manutenção', + 'maint_image_cleanup' => 'Limpeza de Imagens', + 'maint_image_cleanup_desc' => "Examina páginas & revisa o conteúdo para verificar quais imagens e desenhos estão atualmente em uso e quais imagens são redundantes. Certifique-se de criar um backup completo do banco de dados e imagens antes de executar isso.", + 'maint_image_cleanup_ignore_revisions' => 'Ignorar imagens em revisões', + 'maint_image_cleanup_run' => 'Executar Limpeza', + 'maint_image_cleanup_warning' => ':count imagens potencialmente não utilizadas foram encontradas. Tem certeza de que deseja excluir estas imagens?', + 'maint_image_cleanup_success' => ':count imagens potencialmente não utilizadas foram encontradas e excluídas!', + 'maint_image_cleanup_nothing_found' => 'Nenhuma imagem não utilizada foi encontrada, nada foi excluído!', + /** * Role settings */ @@ -68,6 +82,7 @@ return [ 'role_details' => 'Detalhes do Perfil', 'role_name' => 'Nome do Perfil', 'role_desc' => 'Descrição Curta do Perfil', + 'role_external_auth_id' => 'IDs de Autenticação Externa', 'role_system' => 'Permissões do Sistema', 'role_manage_users' => 'Gerenciar Usuários', 'role_manage_roles' => 'Gerenciar Perfis & Permissões de Perfis', From b89411c108f08248215421a34bbf66bdf072d049 Mon Sep 17 00:00:00 2001 From: Dan Brown Date: Mon, 27 Aug 2018 14:18:09 +0100 Subject: [PATCH 062/183] Copied book content, Added create routes Added view control Added pivot table for books relation Added control to assign books --- app/{BookShelf.php => Bookshelf.php} | 11 +- app/Http/Controllers/BookshelfController.php | 341 ++++++++++++++++++ app/Http/Controllers/UserController.php | 25 +- app/Repos/EntityRepo.php | 30 ++ app/Services/PermissionService.php | 9 +- ..._08_04_115700_create_bookshelves_table.php | 13 + package-lock.json | 15 + package.json | 1 + resources/assets/js/components/index.js | 1 + resources/assets/js/components/shelf-sort.js | 41 +++ resources/assets/sass/_grid.scss | 35 ++ resources/assets/sass/_lists.scss | 29 -- resources/assets/sass/_text.scss | 8 + resources/assets/sass/_variables.scss | 1 + resources/assets/sass/styles.scss | 20 + resources/lang/en/entities.php | 11 + resources/views/base.blade.php | 4 +- resources/views/books/list.blade.php | 8 +- resources/views/books/view-toggle.blade.php | 2 +- .../views/partials/entity-list.blade.php | 2 + .../views/shelves/_breadcrumbs.blade.php | 3 + resources/views/shelves/create.blade.php | 31 ++ resources/views/shelves/delete.blade.php | 30 ++ resources/views/shelves/edit.blade.php | 24 ++ resources/views/shelves/export.blade.php | 80 ++++ resources/views/shelves/form.blade.php | 84 +++++ resources/views/shelves/grid-item.blade.php | 18 + resources/views/shelves/index.blade.php | 48 +++ resources/views/shelves/list-item.blade.php | 10 + resources/views/shelves/list.blade.php | 26 ++ .../views/shelves/restrictions.blade.php | 21 ++ resources/views/shelves/show.blade.php | 135 +++++++ resources/views/shelves/view-toggle.blade.php | 10 + routes/web.php | 8 + 34 files changed, 1092 insertions(+), 43 deletions(-) rename app/{BookShelf.php => Bookshelf.php} (88%) create mode 100644 app/Http/Controllers/BookshelfController.php create mode 100644 resources/assets/js/components/shelf-sort.js create mode 100644 resources/views/shelves/_breadcrumbs.blade.php create mode 100644 resources/views/shelves/create.blade.php create mode 100644 resources/views/shelves/delete.blade.php create mode 100644 resources/views/shelves/edit.blade.php create mode 100644 resources/views/shelves/export.blade.php create mode 100644 resources/views/shelves/form.blade.php create mode 100644 resources/views/shelves/grid-item.blade.php create mode 100644 resources/views/shelves/index.blade.php create mode 100644 resources/views/shelves/list-item.blade.php create mode 100644 resources/views/shelves/list.blade.php create mode 100644 resources/views/shelves/restrictions.blade.php create mode 100644 resources/views/shelves/show.blade.php create mode 100644 resources/views/shelves/view-toggle.blade.php diff --git a/app/BookShelf.php b/app/Bookshelf.php similarity index 88% rename from app/BookShelf.php rename to app/Bookshelf.php index 47f873bcd..1e33e31f6 100644 --- a/app/BookShelf.php +++ b/app/Bookshelf.php @@ -1,7 +1,7 @@ belongsToMany(Book::class, 'bookshelves_books', 'bookshelf_id', 'book_id'); + } + /** * Get the url for this bookshelf. * @param string|bool $path diff --git a/app/Http/Controllers/BookshelfController.php b/app/Http/Controllers/BookshelfController.php new file mode 100644 index 000000000..a1c56f29a --- /dev/null +++ b/app/Http/Controllers/BookshelfController.php @@ -0,0 +1,341 @@ +entityRepo = $entityRepo; + $this->userRepo = $userRepo; + $this->exportService = $exportService; + parent::__construct(); + } + + /** + * Display a listing of the book. + * @return Response + */ + public function index() + { + $shelves = $this->entityRepo->getAllPaginated('bookshelf', 18); + $recents = $this->signedIn ? $this->entityRepo->getRecentlyViewed('bookshelf', 4, 0) : false; + $popular = $this->entityRepo->getPopular('bookshelf', 4, 0); + $new = $this->entityRepo->getRecentlyCreated('bookshelf', 4, 0); + $shelvesViewType = setting()->getUser($this->currentUser, 'bookshelves_view_type', config('app.views.bookshelves', 'grid')); + $this->setPageTitle(trans('entities.shelves')); + return view('shelves/index', [ + 'shelves' => $shelves, + 'recents' => $recents, + 'popular' => $popular, + 'new' => $new, + 'shelvesViewType' => $shelvesViewType + ]); + } + + /** + * Show the form for creating a new bookshelf. + * @return Response + */ + public function create() + { + $this->checkPermission('bookshelf-create-all'); + $this->setPageTitle(trans('entities.shelves_create')); + $books = $this->entityRepo->getAll('book', false, 'update'); + return view('shelves/create', ['books' => $books]); + } + + /** + * Store a newly created book in storage. + * @param Request $request + * @return Response + */ + public function store(Request $request) + { + $this->checkPermission('bookshelf-create-all'); + $this->validate($request, [ + 'name' => 'required|string|max:255', + 'description' => 'string|max:1000', + ]); + + $bookshelf = $this->entityRepo->createFromInput('bookshelf', $request->all()); + $this->entityRepo->updateShelfBooks($bookshelf, $request->get('books', '')); + Activity::add($bookshelf, 'bookshelf_create'); + + return redirect($bookshelf->getUrl()); + } + +// +// /** +// * Display the specified book. +// * @param $slug +// * @return Response +// */ +// public function show($slug) +// { +// $book = $this->entityRepo->getBySlug('book', $slug); +// $this->checkOwnablePermission('book-view', $book); +// $bookChildren = $this->entityRepo->getBookChildren($book); +// Views::add($book); +// $this->setPageTitle($book->getShortName()); +// return view('books/show', [ +// 'book' => $book, +// 'current' => $book, +// 'bookChildren' => $bookChildren, +// 'activity' => Activity::entityActivity($book, 20, 0) +// ]); +// } +// +// /** +// * Show the form for editing the specified book. +// * @param $slug +// * @return Response +// */ +// public function edit($slug) +// { +// $book = $this->entityRepo->getBySlug('book', $slug); +// $this->checkOwnablePermission('book-update', $book); +// $this->setPageTitle(trans('entities.books_edit_named', ['bookName'=>$book->getShortName()])); +// return view('books/edit', ['book' => $book, 'current' => $book]); +// } +// +// /** +// * Update the specified book in storage. +// * @param Request $request +// * @param $slug +// * @return Response +// */ +// public function update(Request $request, $slug) +// { +// $book = $this->entityRepo->getBySlug('book', $slug); +// $this->checkOwnablePermission('book-update', $book); +// $this->validate($request, [ +// 'name' => 'required|string|max:255', +// 'description' => 'string|max:1000' +// ]); +// $book = $this->entityRepo->updateFromInput('book', $book, $request->all()); +// Activity::add($book, 'book_update', $book->id); +// return redirect($book->getUrl()); +// } +// +// /** +// * Shows the page to confirm deletion +// * @param $bookSlug +// * @return \Illuminate\View\View +// */ +// public function showDelete($bookSlug) +// { +// $book = $this->entityRepo->getBySlug('book', $bookSlug); +// $this->checkOwnablePermission('book-delete', $book); +// $this->setPageTitle(trans('entities.books_delete_named', ['bookName'=>$book->getShortName()])); +// return view('books/delete', ['book' => $book, 'current' => $book]); +// } +// +// /** +// * Shows the view which allows pages to be re-ordered and sorted. +// * @param string $bookSlug +// * @return \Illuminate\View\View +// */ +// public function sort($bookSlug) +// { +// $book = $this->entityRepo->getBySlug('book', $bookSlug); +// $this->checkOwnablePermission('book-update', $book); +// $bookChildren = $this->entityRepo->getBookChildren($book, true); +// $books = $this->entityRepo->getAll('book', false, 'update'); +// $this->setPageTitle(trans('entities.books_sort_named', ['bookName'=>$book->getShortName()])); +// return view('books/sort', ['book' => $book, 'current' => $book, 'books' => $books, 'bookChildren' => $bookChildren]); +// } +// +// /** +// * Shows the sort box for a single book. +// * Used via AJAX when loading in extra books to a sort. +// * @param $bookSlug +// * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View +// */ +// public function getSortItem($bookSlug) +// { +// $book = $this->entityRepo->getBySlug('book', $bookSlug); +// $bookChildren = $this->entityRepo->getBookChildren($book); +// return view('books/sort-box', ['book' => $book, 'bookChildren' => $bookChildren]); +// } +// +// /** +// * Saves an array of sort mapping to pages and chapters. +// * @param string $bookSlug +// * @param Request $request +// * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector +// */ +// public function saveSort($bookSlug, Request $request) +// { +// $book = $this->entityRepo->getBySlug('book', $bookSlug); +// $this->checkOwnablePermission('book-update', $book); +// +// // Return if no map sent +// if (!$request->filled('sort-tree')) { +// return redirect($book->getUrl()); +// } +// +// // Sort pages and chapters +// $sortMap = collect(json_decode($request->get('sort-tree'))); +// $bookIdsInvolved = collect([$book->id]); +// +// // Load models into map +// $sortMap->each(function ($mapItem) use ($bookIdsInvolved) { +// $mapItem->type = ($mapItem->type === 'page' ? 'page' : 'chapter'); +// $mapItem->model = $this->entityRepo->getById($mapItem->type, $mapItem->id); +// // Store source and target books +// $bookIdsInvolved->push(intval($mapItem->model->book_id)); +// $bookIdsInvolved->push(intval($mapItem->book)); +// }); +// +// // Get the books involved in the sort +// $bookIdsInvolved = $bookIdsInvolved->unique()->toArray(); +// $booksInvolved = $this->entityRepo->book->newQuery()->whereIn('id', $bookIdsInvolved)->get(); +// // Throw permission error if invalid ids or inaccessible books given. +// if (count($bookIdsInvolved) !== count($booksInvolved)) { +// $this->showPermissionError(); +// } +// // Check permissions of involved books +// $booksInvolved->each(function (Book $book) { +// $this->checkOwnablePermission('book-update', $book); +// }); +// +// // Perform the sort +// $sortMap->each(function ($mapItem) { +// $model = $mapItem->model; +// +// $priorityChanged = intval($model->priority) !== intval($mapItem->sort); +// $bookChanged = intval($model->book_id) !== intval($mapItem->book); +// $chapterChanged = ($mapItem->type === 'page') && intval($model->chapter_id) !== $mapItem->parentChapter; +// +// if ($bookChanged) { +// $this->entityRepo->changeBook($mapItem->type, $mapItem->book, $model); +// } +// if ($chapterChanged) { +// $model->chapter_id = intval($mapItem->parentChapter); +// $model->save(); +// } +// if ($priorityChanged) { +// $model->priority = intval($mapItem->sort); +// $model->save(); +// } +// }); +// +// // Rebuild permissions and add activity for involved books. +// $booksInvolved->each(function (Book $book) { +// $this->entityRepo->buildJointPermissionsForBook($book); +// Activity::add($book, 'book_sort', $book->id); +// }); +// +// return redirect($book->getUrl()); +// } +// +// /** +// * Remove the specified book from storage. +// * @param $bookSlug +// * @return Response +// */ +// public function destroy($bookSlug) +// { +// $book = $this->entityRepo->getBySlug('book', $bookSlug); +// $this->checkOwnablePermission('book-delete', $book); +// Activity::addMessage('book_delete', 0, $book->name); +// $this->entityRepo->destroyBook($book); +// return redirect('/books'); +// } +// +// /** +// * Show the Restrictions view. +// * @param $bookSlug +// * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View +// */ +// public function showRestrict($bookSlug) +// { +// $book = $this->entityRepo->getBySlug('book', $bookSlug); +// $this->checkOwnablePermission('restrictions-manage', $book); +// $roles = $this->userRepo->getRestrictableRoles(); +// return view('books/restrictions', [ +// 'book' => $book, +// 'roles' => $roles +// ]); +// } +// +// /** +// * Set the restrictions for this book. +// * @param $bookSlug +// * @param $bookSlug +// * @param Request $request +// * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector +// */ +// public function restrict($bookSlug, Request $request) +// { +// $book = $this->entityRepo->getBySlug('book', $bookSlug); +// $this->checkOwnablePermission('restrictions-manage', $book); +// $this->entityRepo->updateEntityPermissionsFromRequest($request, $book); +// session()->flash('success', trans('entities.books_permissions_updated')); +// return redirect($book->getUrl()); +// } +// +// /** +// * Export a book as a PDF file. +// * @param string $bookSlug +// * @return mixed +// */ +// public function exportPdf($bookSlug) +// { +// $book = $this->entityRepo->getBySlug('book', $bookSlug); +// $pdfContent = $this->exportService->bookToPdf($book); +// return response()->make($pdfContent, 200, [ +// 'Content-Type' => 'application/octet-stream', +// 'Content-Disposition' => 'attachment; filename="' . $bookSlug . '.pdf' +// ]); +// } +// +// /** +// * Export a book as a contained HTML file. +// * @param string $bookSlug +// * @return mixed +// */ +// public function exportHtml($bookSlug) +// { +// $book = $this->entityRepo->getBySlug('book', $bookSlug); +// $htmlContent = $this->exportService->bookToContainedHtml($book); +// return response()->make($htmlContent, 200, [ +// 'Content-Type' => 'application/octet-stream', +// 'Content-Disposition' => 'attachment; filename="' . $bookSlug . '.html' +// ]); +// } +// +// /** +// * Export a book as a plain text file. +// * @param $bookSlug +// * @return mixed +// */ +// public function exportPlainText($bookSlug) +// { +// $book = $this->entityRepo->getBySlug('book', $bookSlug); +// $htmlContent = $this->exportService->bookToPlainText($book); +// return response()->make($htmlContent, 200, [ +// 'Content-Type' => 'application/octet-stream', +// 'Content-Disposition' => 'attachment; filename="' . $bookSlug . '.txt' +// ]); +// } +} diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index d50baa86f..f6bd13e6f 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -252,7 +252,7 @@ class UserController extends Controller return $this->currentUser->id == $id; }); - $viewType = $request->get('book_view_type'); + $viewType = $request->get('view_type'); if (!in_array($viewType, ['grid', 'list'])) { $viewType = 'list'; } @@ -262,4 +262,27 @@ class UserController extends Controller return redirect()->back(302, [], "/settings/users/$id"); } + + /** + * Update the user's preferred shelf-list display setting. + * @param $id + * @param Request $request + * @return \Illuminate\Http\RedirectResponse + */ + public function switchShelfView($id, Request $request) + { + $this->checkPermissionOr('users-manage', function () use ($id) { + return $this->currentUser->id == $id; + }); + + $viewType = $request->get('view_type'); + if (!in_array($viewType, ['grid', 'list'])) { + $viewType = 'list'; + } + + $user = $this->user->findOrFail($id); + setting()->putUser($user, 'bookshelves_view_type', $viewType); + + return redirect()->back(302, [], "/settings/users/$id"); + } } diff --git a/app/Repos/EntityRepo.php b/app/Repos/EntityRepo.php index bdd1e37b1..ea7fc4882 100644 --- a/app/Repos/EntityRepo.php +++ b/app/Repos/EntityRepo.php @@ -1,6 +1,7 @@ bookshelf = $bookshelf; $this->book = $book; $this->chapter = $chapter; $this->page = $page; $this->pageRevision = $pageRevision; $this->entities = [ + 'bookshelf' => $this->bookshelf, 'page' => $this->page, 'chapter' => $this->chapter, 'book' => $this->book @@ -533,6 +542,23 @@ class EntityRepo return $entityModel; } + /** + * Sync the books assigned to a shelf from a comma-separated list + * of book IDs. + * @param Bookshelf $shelf + * @param string $books + */ + public function updateShelfBooks(Bookshelf $shelf, string $books) + { + $ids = explode(',', $books); + if (count($ids) === 0) { + return; + } + + $bookIds = $this->entityQuery('book')->whereIn('id', $ids)->get(['id'])->pluck('id'); + $shelf->books()->sync($bookIds); + } + /** * Change the book that an entity belongs to. * @param string $type @@ -1157,6 +1183,8 @@ class EntityRepo /** * Destroy the provided book and all its child entities. * @param Book $book + * @throws NotifyException + * @throws \Throwable */ public function destroyBook(Book $book) { @@ -1177,6 +1205,7 @@ class EntityRepo /** * Destroy a chapter and its relations. * @param Chapter $chapter + * @throws \Throwable */ public function destroyChapter(Chapter $chapter) { @@ -1198,6 +1227,7 @@ class EntityRepo * Destroy a given page along with its dependencies. * @param Page $page * @throws NotifyException + * @throws \Throwable */ public function destroyPage(Page $page) { diff --git a/app/Services/PermissionService.php b/app/Services/PermissionService.php index 0dd316b34..428cb895f 100644 --- a/app/Services/PermissionService.php +++ b/app/Services/PermissionService.php @@ -204,6 +204,7 @@ class PermissionService /** * Rebuild the entity jointPermissions for a particular entity. * @param Entity $entity + * @throws \Throwable */ public function buildJointPermissionsForEntity(Entity $entity) { @@ -214,7 +215,9 @@ class PermissionService return; } - $entities[] = $entity->book; + if ($entity->book) { + $entities[] = $entity->book; + } if ($entity->isA('page') && $entity->chapter_id) { $entities[] = $entity->chapter; @@ -226,13 +229,13 @@ class PermissionService } } - $this->deleteManyJointPermissionsForEntities($entities); $this->buildJointPermissionsForEntities(collect($entities)); } /** * Rebuild the entity jointPermissions for a collection of entities. * @param Collection $entities + * @throws \Throwable */ public function buildJointPermissionsForEntities(Collection $entities) { @@ -412,7 +415,7 @@ class PermissionService return $this->createJointPermissionDataArray($entity, $role, $action, $hasAccess, $hasAccess); } - if ($entity->isA('book')) { + if ($entity->isA('book') || $entity->isA('bookshelf')) { return $this->createJointPermissionDataArray($entity, $role, $action, $roleHasPermission, $roleHasPermissionOwn); } diff --git a/database/migrations/2018_08_04_115700_create_bookshelves_table.php b/database/migrations/2018_08_04_115700_create_bookshelves_table.php index f32a1cdfb..c7840e1a1 100644 --- a/database/migrations/2018_08_04_115700_create_bookshelves_table.php +++ b/database/migrations/2018_08_04_115700_create_bookshelves_table.php @@ -30,6 +30,18 @@ class CreateBookshelvesTable extends Migration $table->index('restricted'); }); + Schema::create('bookshelves_books', function (Blueprint $table) { + $table->integer('bookshelf_id')->unsigned(); + $table->integer('book_id')->unsigned(); + + $table->foreign('bookshelf_id')->references('id')->on('bookshelves') + ->onUpdate('cascade')->onDelete('cascade'); + $table->foreign('book_id')->references('id')->on('books') + ->onUpdate('cascade')->onDelete('cascade'); + + $table->primary(['bookshelf_id', 'book_id']); + }); + // Copy existing role permissions from Books $ops = ['View All', 'View Own', 'Create All', 'Create Own', 'Update All', 'Update Own', 'Delete All', 'Delete Own']; foreach ($ops as $op) { @@ -75,5 +87,6 @@ class CreateBookshelvesTable extends Migration // Drop shelves table Schema::dropIfExists('bookshelves'); + Schema::dropIfExists('bookshelves_books'); } } diff --git a/package-lock.json b/package-lock.json index ec4da5ce2..f8c43993b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5857,6 +5857,21 @@ "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.3.1.tgz", "integrity": "sha512-Ubldcmxp5np52/ENotGxlLe6aGMvmF4R8S6tZjsP6Knsaxd/xp3Zrh50cG93lR6nPXyUFwzN3ZSOQI0wRJNdGg==" }, + "jquery-sortable": { + "version": "0.9.13", + "resolved": "https://registry.npmjs.org/jquery-sortable/-/jquery-sortable-0.9.13.tgz", + "integrity": "sha1-HL+2VQE6B0c3BXHwbiL1JKAP+6I=", + "requires": { + "jquery": "^2.1.2" + }, + "dependencies": { + "jquery": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-2.2.4.tgz", + "integrity": "sha1-LInWiJterFIqfuoywUUhVZxsvwI=" + } + } + }, "js-base64": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.3.tgz", diff --git a/package.json b/package.json index 12d972cf9..58f2dad5e 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "codemirror": "^5.26.0", "dropzone": "^5.4.0", "jquery": "^3.3.1", + "jquery-sortable": "^0.9.13", "markdown-it": "^8.3.1", "markdown-it-task-lists": "^2.0.0", "vue": "^2.2.6", diff --git a/resources/assets/js/components/index.js b/resources/assets/js/components/index.js index aa69f3265..e1aef032c 100644 --- a/resources/assets/js/components/index.js +++ b/resources/assets/js/components/index.js @@ -18,6 +18,7 @@ let componentMapping = { 'collapsible': require('./collapsible'), 'toggle-switch': require('./toggle-switch'), 'page-display': require('./page-display'), + 'shelf-sort': require('./shelf-sort'), }; window.components = {}; diff --git a/resources/assets/js/components/shelf-sort.js b/resources/assets/js/components/shelf-sort.js new file mode 100644 index 000000000..91713ab41 --- /dev/null +++ b/resources/assets/js/components/shelf-sort.js @@ -0,0 +1,41 @@ + +class ShelfSort { + + constructor(elem) { + this.elem = elem; + this.sortGroup = this.initSortable(); + this.input = document.getElementById('books-input'); + } + + initSortable() { + const sortable = require('jquery-sortable'); + const placeHolderContent = this.getPlaceholderHTML(); + + return $('.scroll-box').sortable({ + group: 'shelf-books', + exclude: '.instruction,.scroll-box-placeholder', + containerSelector: 'div.scroll-box', + itemSelector: '.scroll-box-item', + placeholder: placeHolderContent, + onDrop: this.onDrop.bind(this) + }); + } + + onDrop($item, container, _super) { + const data = this.sortGroup.sortable('serialize').get(); + this.input.value = data[0].map(item => item.id).join(','); + _super($item, container); + } + + getPlaceholderHTML() { + const placeHolder = document.querySelector('.scroll-box-placeholder'); + placeHolder.style.display = 'block'; + const placeHolderContent = placeHolder.outerHTML; + placeHolder.style.display = 'none'; + return placeHolderContent; + } + + +} + +module.exports = ShelfSort; \ No newline at end of file diff --git a/resources/assets/sass/_grid.scss b/resources/assets/sass/_grid.scss index 8f15153b5..0e1f85ce6 100644 --- a/resources/assets/sass/_grid.scss +++ b/resources/assets/sass/_grid.scss @@ -192,8 +192,26 @@ div[class^="col-"] img { flex-direction: column; border: 1px solid #ddd; min-width: 100px; + h2 { + width: 100%; + font-size: 1.5em; + margin: 0 0 10px; + } + h2 a { + display: block; + width: 100%; + line-height: 1.2; + text-decoration: none; + } + p { + font-size: .85em; + margin: 0; + line-height: 1.6em; + } .grid-card-content { flex: 1; + border-top: 0; + border-bottom-width: 2px; } .grid-card-content, .grid-card-footer { padding: $-l; @@ -203,6 +221,23 @@ div[class^="col-"] img { } } +.book-grid-item .grid-card-content h2 a { + color: $color-book; + fill: $color-book; +} + +.bookshelf-grid-item .grid-card-content h2 a { + color: $color-bookshelf; + fill: $color-bookshelf; +} + +.book-grid-item .grid-card-footer { + p.small { + font-size: .8em; + margin: 0; + } +} + @include smaller-than($m) { .grid.third { grid-template-columns: 1fr 1fr; diff --git a/resources/assets/sass/_lists.scss b/resources/assets/sass/_lists.scss index 3338b3938..0afed4b36 100644 --- a/resources/assets/sass/_lists.scss +++ b/resources/assets/sass/_lists.scss @@ -408,32 +408,3 @@ ul.pagination { } } -.book-grid-item .grid-card-content { - border-top: 0; - border-bottom-width: 2px; - h2 { - width: 100%; - font-size: 1.5em; - margin: 0 0 10px; - } - h2 a { - display: block; - width: 100%; - line-height: 1.2; - color: #009688;; - fill: #009688;; - text-decoration: none; - } - p { - font-size: .85em; - margin: 0; - line-height: 1.6em; - } -} - -.book-grid-item .grid-card-footer { - p.small { - font-size: .8em; - margin: 0; - } -} \ No newline at end of file diff --git a/resources/assets/sass/_text.scss b/resources/assets/sass/_text.scss index da11846d8..63a91c968 100644 --- a/resources/assets/sass/_text.scss +++ b/resources/assets/sass/_text.scss @@ -281,6 +281,14 @@ p.secondary, p .secondary, span.secondary, .text-secondary { } } +.text-bookshelf { + color: $color-bookshelf; + fill: $color-bookshelf; + &:hover { + color: $color-bookshelf; + fill: $color-bookshelf; + } +} .text-book { color: $color-book; fill: $color-book; diff --git a/resources/assets/sass/_variables.scss b/resources/assets/sass/_variables.scss index e62d37efe..006d1b3f0 100644 --- a/resources/assets/sass/_variables.scss +++ b/resources/assets/sass/_variables.scss @@ -47,6 +47,7 @@ $warning: $secondary; $primary-faded: rgba(21, 101, 192, 0.15); // Item Colors +$color-bookshelf: #af5a5a; $color-book: #009688; $color-chapter: #ef7c3c; $color-page: $primary; diff --git a/resources/assets/sass/styles.scss b/resources/assets/sass/styles.scss index 0b2dfbf75..ab5972cbd 100644 --- a/resources/assets/sass/styles.scss +++ b/resources/assets/sass/styles.scss @@ -206,6 +206,12 @@ $btt-size: 40px; transition: all ease-in-out 120ms; cursor: pointer; } + &.compact { + font-size: 10px; + .entity-item-snippet { + display: none; + } + } } .entity-list-item.selected { @@ -214,6 +220,20 @@ $btt-size: 40px; } } +.scroll-box { + max-height: 250px; + overflow-y: scroll; + border: 1px solid #DDD; + border-radius: 3px; + .scroll-box-item { + padding: $-xs $-m; + border-bottom: 1px solid #DDD; + &:last-child { + border-bottom: 0; + } + } +} + .center-box { margin: $-xxl auto 0 auto; width: 420px; diff --git a/resources/lang/en/entities.php b/resources/lang/en/entities.php index 834b977e7..c744c5557 100644 --- a/resources/lang/en/entities.php +++ b/resources/lang/en/entities.php @@ -69,6 +69,16 @@ return [ */ 'shelves' => 'Shelves', 'shelves_long' => 'BookShelves', + 'shelves_empty' => 'No shelves have been created', + 'shelves_create' => 'Create New Shelf', + 'shelves_popular' => 'Popular Shelves', + 'shelves_new' => 'New Shelves', + 'shelves_popular_empty' => 'The most popular shelves will appear here.', + 'shelves_new_empty' => 'The most recently created shelves will appear here.', + 'shelves_save' => 'Save Shelf', + 'shelves_books' => 'Books on this shelf', + 'shelves_add_books' => 'Add books to this shelf', + 'shelves_drag_books' => 'Drag books here to add them to this shelf', /** * Books @@ -212,6 +222,7 @@ return [ 'page_tags' => 'Page Tags', 'chapter_tags' => 'Chapter Tags', 'book_tags' => 'Book Tags', + 'shelf_tags' => 'Shelf Tags', 'tag' => 'Tag', 'tags' => 'Tags', 'tag_value' => 'Tag Value (Optional)', diff --git a/resources/views/base.blade.php b/resources/views/base.blade.php index 93517ef6f..93ee6cdc6 100644 --- a/resources/views/base.blade.php +++ b/resources/views/base.blade.php @@ -33,7 +33,7 @@