From 5411dbfd0ad0e3d50cb82705d3084f743521100c Mon Sep 17 00:00:00 2001 From: Weston Ruter Date: Tue, 7 Nov 2017 05:40:38 +0000 Subject: [PATCH 001/537] Branch 4.9 git-svn-id: https://develop.svn.wordpress.org/branches/4.9@42126 602fd350-edb4-49c9-b593-d223f7449a82 From f63d3d1a1620e3d49331e3cf9b82c193a9d332a3 Mon Sep 17 00:00:00 2001 From: Weston Ruter Date: Thu, 9 Nov 2017 01:05:01 +0000 Subject: [PATCH 002/537] Customize: Restore search icon to available widgets pane incorrectly removed in [41893]. See #42215. Fixes #42472 for 4.9. git-svn-id: https://develop.svn.wordpress.org/branches/4.9@42133 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/css/customize-controls.css | 1 + 1 file changed, 1 insertion(+) diff --git a/src/wp-admin/css/customize-controls.css b/src/wp-admin/css/customize-controls.css index d7d538739dcb9..b595e2a8da6ed 100644 --- a/src/wp-admin/css/customize-controls.css +++ b/src/wp-admin/css/customize-controls.css @@ -2706,6 +2706,7 @@ body.adding-widget .add-new-widget:before, } #available-menu-items-search .search-icon:after, +#available-widgets-filter .search-icon:after, .themes-filter-bar .search-icon:after { content: "\f179"; font: normal 20px/1 dashicons; From 9a73a6168353ed762bb1d1e094d884719e14986f Mon Sep 17 00:00:00 2001 From: Weston Ruter Date: Thu, 9 Nov 2017 03:56:56 +0000 Subject: [PATCH 003/537] Settings: Fix date/time format previewing. Props afercia. Amends [41857]. Fixes #41603 for 4.9. git-svn-id: https://develop.svn.wordpress.org/branches/4.9@42135 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/css/forms.css | 2 +- src/wp-admin/includes/options.php | 19 ++++++++++++------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/wp-admin/css/forms.css b/src/wp-admin/css/forms.css index dac5fddf6513a..0e499cfc4ab94 100644 --- a/src/wp-admin/css/forms.css +++ b/src/wp-admin/css/forms.css @@ -897,7 +897,7 @@ table.form-table td .updated p { .options-general-php .spinner { float: none; - margin: 0 3px; + margin: -3px 3px 0; } .settings-php .language-install-spinner, diff --git a/src/wp-admin/includes/options.php b/src/wp-admin/includes/options.php index 053d5eec6425a..f011efd312369 100644 --- a/src/wp-admin/includes/options.php +++ b/src/wp-admin/includes/options.php @@ -51,7 +51,7 @@ function options_general_add_js() { $("input[name='date_format']").click(function(){ if ( "date_format_custom_radio" != $(this).attr("id") ) - $( "input[name='date_format_custom']" ).val( $( this ).val() ).siblings( '.example' ).text( $( this ).parent( 'label' ).children( '.format-i18n' ).text() ); + $( 'input[name="date_format_custom"]' ).val( $( this ).val() ).closest( 'fieldset' ).find( '.example' ).text( $( this ).parent( 'label' ).children( '.format-i18n' ).text() ); }); $( 'input[name="date_format_custom"]' ).on( 'click input', function() { $( '#date_format_custom_radio' ).prop( 'checked', true ); @@ -59,18 +59,23 @@ function options_general_add_js() { $("input[name='time_format']").click(function(){ if ( "time_format_custom_radio" != $(this).attr("id") ) - $( "input[name='time_format_custom']" ).val( $( this ).val() ).siblings( '.example' ).text( $( this ).parent( 'label' ).children( '.format-i18n' ).text() ); + $( 'input[name="time_format_custom"]' ).val( $( this ).val() ).closest( 'fieldset' ).find( '.example' ).text( $( this ).parent( 'label' ).children( '.format-i18n' ).text() ); }); $( 'input[name="time_format_custom"]' ).on( 'click input', function() { $( '#time_format_custom_radio' ).prop( 'checked', true ); }); $("input[name='date_format_custom'], input[name='time_format_custom']").change( function() { - var format = $(this); - format.siblings( '.spinner' ).addClass( 'is-active' ); - $.post(ajaxurl, { - action: 'date_format_custom' == format.attr('name') ? 'date_format' : 'time_format', + var format = $( this ), + fieldset = format.closest( 'fieldset' ), + example = fieldset.find( '.example' ), + spinner = fieldset.find( '.spinner' ); + + spinner.addClass( 'is-active' ); + + $.post( ajaxurl, { + action: 'date_format_custom' == format.attr( 'name' ) ? 'date_format' : 'time_format', date : format.val() - }, function(d) { format.siblings( '.spinner' ).removeClass( 'is-active' ); format.siblings('.example').text(d); } ); + }, function( d ) { spinner.removeClass( 'is-active' ); example.text( d ); } ); }); var languageSelect = $( '#WPLANG' ); From 4a5a6541fcb41fea9e5a31c557ca8c114534cfab Mon Sep 17 00:00:00 2001 From: Weston Ruter Date: Thu, 9 Nov 2017 04:20:18 +0000 Subject: [PATCH 004/537] Customize: Ensure `autosaving` message gets sent to preview after initial change when `saved` state is first dirty. Amends [41667]. Fixes #42475 for 4.9. git-svn-id: https://develop.svn.wordpress.org/branches/4.9@42137 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/js/customize-controls.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/wp-admin/js/customize-controls.js b/src/wp-admin/js/customize-controls.js index 5ff47c49986d2..0e4e5d0238bb0 100644 --- a/src/wp-admin/js/customize-controls.js +++ b/src/wp-admin/js/customize-controls.js @@ -9191,12 +9191,14 @@ api.unbind( 'change', startAutosaving ); // Ensure startAutosaving only fires once. - api.state( 'saved' ).bind( function( isSaved ) { + function onChangeSaved( isSaved ) { if ( ! isSaved && ! api.settings.changeset.autosaved ) { api.settings.changeset.autosaved = true; // Once a change is made then autosaving kicks in. api.previewer.send( 'autosaving' ); } - } ); + } + api.state( 'saved' ).bind( onChangeSaved ); + onChangeSaved( api.state( 'saved' ).get() ); /** * Request changeset update and then re-schedule the next changeset update time. From 244ce3c6ad48085fb73eb00b4ec790b74f57c090 Mon Sep 17 00:00:00 2001 From: Weston Ruter Date: Thu, 9 Nov 2017 04:44:35 +0000 Subject: [PATCH 005/537] Customize: Fix reliability of just-in-time publishing for changesets that miss their schedule when visiting `customize.php`. When just doing `wp_publish_post()` for the changeset from `customize.php`, any option-based settings will fail to get saved because `WP_Customize_Manager` would have already been loaded with `settings_previewed`, resulting in `update_option()` calls being short-circuited. So an admin-ajax request to `customize_save` is used to work around this. Props westonruter, jeremyfelt, dlh for testing, LittleBigThing for testing. Amends [41626]. See #28721, #39221. Fixes #42457 for 4.9. git-svn-id: https://develop.svn.wordpress.org/branches/4.9@42139 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/customize.php | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/src/wp-admin/customize.php b/src/wp-admin/customize.php index 7f9e5a9dc7952..91c67d00168dc 100644 --- a/src/wp-admin/customize.php +++ b/src/wp-admin/customize.php @@ -42,10 +42,34 @@ get_post_time( 'G', true, $changeset_post ) < time() ); if ( $missed_schedule ) { - wp_publish_post( $changeset_post->ID ); + /* + * Note that an Ajax request spawns here instead of just calling `wp_publish_post( $changeset_post->ID )`. + * + * Because WP_Customize_Manager is not instantiated for customize.php with the `settings_previewed=false` + * argument, settings cannot be reliably saved. Some logic short-circuits if the current value is the + * same as the value being saved. This is particularly true for options via `update_option()`. + * + * By opening an Ajax request, this is avoided and the changeset is published. See #39221. + */ + $nonces = $wp_customize->get_nonces(); + $request_args = array( + 'nonce' => $nonces['save'], + 'customize_changeset_uuid' => $wp_customize->changeset_uuid(), + 'wp_customize' => 'on', + 'customize_changeset_status' => 'publish', + ); + ob_start(); + ?> + + + ' . __( 'Your scheduled changes just published' ) . '' . - '

' . __( 'Customize New Changes' ) . '

', + '

' . __( 'Customize New Changes' ) . '

' . $script, 200 ); } From 19ab5e402d3df3f2c43750850b56694534f6eedb Mon Sep 17 00:00:00 2001 From: Weston Ruter Date: Fri, 10 Nov 2017 01:28:27 +0000 Subject: [PATCH 006/537] Widgets: Style the Image Widget's link field as invalid when a bad URL is supplied. Fixes issue where user may supply an invalid URL and be unable to save the widget on the Widgets admin screen without being told why. Amends [41252]. See #41274. Fixes #42488 for 4.9. git-svn-id: https://develop.svn.wordpress.org/branches/4.9@42141 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/css/widgets.css | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/wp-admin/css/widgets.css b/src/wp-admin/css/widgets.css index 9576be2fc622c..976ab9ba1717f 100644 --- a/src/wp-admin/css/widgets.css +++ b/src/wp-admin/css/widgets.css @@ -154,7 +154,8 @@ top: 30px; } -.media-frame #embed-url-field.invalid { +.media-frame #embed-url-field.invalid, +.media-widget-image-link > .link:invalid { border: 1px solid #dc3232; } From 6d65adc1d1b0d23f67fcd1d57e79e050230e6c46 Mon Sep 17 00:00:00 2001 From: Weston Ruter Date: Fri, 10 Nov 2017 21:44:44 +0000 Subject: [PATCH 007/537] Customize: Ensure autosave revision is dismissed immediately after implicit restoration notice dismissal as done with explicit notice dismissal. Fixes issue where a drafted/scheduled changeset could inadvertently re-use the previous autosave revision in the preview while a user expects it to have been dismissed. See #39896, [41597]. Fixes #42502 for 4.9. git-svn-id: https://develop.svn.wordpress.org/branches/4.9@42145 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/js/customize-controls.js | 32 ++++++++++++++++++--------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/src/wp-admin/js/customize-controls.js b/src/wp-admin/js/customize-controls.js index 0e4e5d0238bb0..4bc94ae88c0cc 100644 --- a/src/wp-admin/js/customize-controls.js +++ b/src/wp-admin/js/customize-controls.js @@ -8248,7 +8248,7 @@ // Set up initial notifications. (function() { - var removedQueryParams = []; + var removedQueryParams = [], autosaveDismissed = false; /** * Obtain the URL to restore the autosave. @@ -8294,6 +8294,25 @@ history.replaceState( {}, document.title, urlParser.href ); } + /** + * Dismiss autosave. + * + * @returns {void} + */ + function dismissAutosave() { + if ( autosaveDismissed ) { + return; + } + wp.ajax.post( 'customize_dismiss_autosave_or_lock', { + wp_customize: 'on', + customize_theme: api.settings.theme.stylesheet, + customize_changeset_uuid: api.settings.changeset.uuid, + nonce: api.settings.nonce.dismiss_autosave_or_lock, + dismiss_autosave: true + } ); + autosaveDismissed = true; + } + /** * Add notification regarding the availability of an autosave to restore. * @@ -8319,15 +8338,7 @@ } ); // Handle dismissal of notice. - li.find( '.notice-dismiss' ).on( 'click', function() { - wp.ajax.post( 'customize_dismiss_autosave_or_lock', { - wp_customize: 'on', - customize_theme: api.settings.theme.stylesheet, - customize_changeset_uuid: api.settings.changeset.uuid, - nonce: api.settings.nonce.dismiss_autosave_or_lock, - dismiss_autosave: true - } ); - } ); + li.find( '.notice-dismiss' ).on( 'click', dismissAutosave ); return li; } @@ -8335,6 +8346,7 @@ // Remove the notification once the user starts making changes. onStateChange = function() { + dismissAutosave(); api.notifications.remove( code ); api.unbind( 'change', onStateChange ); api.state( 'changesetStatus' ).unbind( onStateChange ); From 2aedf55c2195bf907a55749258ab7246fb0fc13d Mon Sep 17 00:00:00 2001 From: Weston Ruter Date: Fri, 10 Nov 2017 22:31:58 +0000 Subject: [PATCH 008/537] Settings: Replace `count()` call with `empty()` in `get_settings_errors()` to prevent PHP 7.2 warnings when `$wp_settings_errors` is `null`. Props pross, dd32, westonruter. See #40109. Fixes #42498 for 4.9. git-svn-id: https://develop.svn.wordpress.org/branches/4.9@42147 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/template.php | 3 +- .../phpunit/tests/option/sanitize-option.php | 42 +++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/src/wp-admin/includes/template.php b/src/wp-admin/includes/template.php index ec0fb525911f9..0c8c863ec75d7 100644 --- a/src/wp-admin/includes/template.php +++ b/src/wp-admin/includes/template.php @@ -1457,8 +1457,9 @@ function get_settings_errors( $setting = '', $sanitize = false ) { } // Check global in case errors have been added on this pageload. - if ( ! count( $wp_settings_errors ) ) + if ( empty( $wp_settings_errors ) ) { return array(); + } // Filter the results to those of a specific setting if one was set. if ( $setting ) { diff --git a/tests/phpunit/tests/option/sanitize-option.php b/tests/phpunit/tests/option/sanitize-option.php index bb4a814c54903..b551d984814ca 100644 --- a/tests/phpunit/tests/option/sanitize-option.php +++ b/tests/phpunit/tests/option/sanitize-option.php @@ -157,4 +157,46 @@ public function permalink_structure_provider() { array( '/%year/%postname%/', '/%year/%postname%/', true ), ); } + + /** + * Test calling get_settings_errors() with variations on where it gets errors from. + * + * @ticket 42498 + * @covers get_settings_errors() + * @global array $wp_settings_errors + */ + public function test_get_settings_errors_sources() { + global $wp_settings_errors; + + $blogname_error = array( + 'setting' => 'blogname', + 'code' => 'blogname', + 'message' => 'Capital P dangit!', + 'type' => 'error', + ); + $blogdescription_error = array( + 'setting' => 'blogdescription', + 'code' => 'blogdescription', + 'message' => 'Too short', + 'type' => 'error', + ); + + $wp_settings_errors = null; + $this->assertSame( array(), get_settings_errors( 'blogname' ) ); + + // Test getting errors from transient. + $_GET['settings-updated'] = '1'; + set_transient( 'settings_errors', array( $blogname_error ) ); + $wp_settings_errors = null; + $this->assertSame( array( $blogname_error ), get_settings_errors( 'blogname' ) ); + + // Test getting errors from transient and from global. + $_GET['settings-updated'] = '1'; + set_transient( 'settings_errors', array( $blogname_error ) ); + $wp_settings_errors = null; + add_settings_error( $blogdescription_error['setting'], $blogdescription_error['code'], $blogdescription_error['message'], $blogdescription_error['type'] ); + $this->assertEqualSets( array( $blogname_error, $blogdescription_error ), get_settings_errors() ); + + $wp_settings_errors = null; + } } From 93d5407ea9fb4ad8fa0d14aa33f74169bd8565f6 Mon Sep 17 00:00:00 2001 From: Weston Ruter Date: Fri, 10 Nov 2017 22:44:30 +0000 Subject: [PATCH 009/537] Customize: Ensure customization drafts are published instead of trashed when scheduled changeset goes live while non-admin user is authenticated (such as during WP Cron). Props designsimply for testing, dlh for testing, melchoyce for testing. See #28721, #34923, #42220. Fixes #42489 for 4.9. git-svn-id: https://develop.svn.wordpress.org/branches/4.9@42149 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/class-wp-customize-nav-menus.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wp-includes/class-wp-customize-nav-menus.php b/src/wp-includes/class-wp-customize-nav-menus.php index d178de3e24bbf..9540f65836979 100644 --- a/src/wp-includes/class-wp-customize-nav-menus.php +++ b/src/wp-includes/class-wp-customize-nav-menus.php @@ -49,6 +49,7 @@ public function __construct( $manager ) { add_action( 'customize_register', array( $this, 'customize_register' ), 11 ); add_filter( 'customize_dynamic_setting_args', array( $this, 'filter_dynamic_setting_args' ), 10, 2 ); add_filter( 'customize_dynamic_setting_class', array( $this, 'filter_dynamic_setting_class' ), 10, 3 ); + add_action( 'customize_save_nav_menus_created_posts', array( $this, 'save_nav_menus_created_posts' ) ); // Skip remaining hooks when the user can't manage nav menus anyway. if ( ! current_user_can( 'edit_theme_options' ) ) { @@ -64,7 +65,6 @@ public function __construct( $manager ) { add_action( 'customize_controls_print_footer_scripts', array( $this, 'available_items_template' ) ); add_action( 'customize_preview_init', array( $this, 'customize_preview_init' ) ); add_action( 'customize_preview_init', array( $this, 'make_auto_draft_status_previewable' ) ); - add_action( 'customize_save_nav_menus_created_posts', array( $this, 'save_nav_menus_created_posts' ) ); // Selective Refresh partials. add_filter( 'customize_dynamic_partial_args', array( $this, 'customize_dynamic_partial_args' ), 10, 2 ); From cc3d2dfbd375120bfaad0b91f9d920f97530255e Mon Sep 17 00:00:00 2001 From: Weston Ruter Date: Fri, 10 Nov 2017 23:42:15 +0000 Subject: [PATCH 010/537] Customize: Restore ability to add Custom Link nav menu items for jump links and other URLs that were previously allowed. Simplify regular expression for checking URL validity to just do basic checks to confirm the value looks like a URL. Leave the complete validation to the server-side logic in `WP_Customize_Nav_Menu_Item_Setting::sanitize()` to avoid having to maintain two separate codebases for validating URLs. Props westonruter, SergeyBiryukov for testing. Amends [41697]. See #32816. Fixes #42506 for 4.9. git-svn-id: https://develop.svn.wordpress.org/branches/4.9@42154 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/js/customize-nav-menus.js | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/wp-admin/js/customize-nav-menus.js b/src/wp-admin/js/customize-nav-menus.js index 3e223825c4dcb..0818079656338 100644 --- a/src/wp-admin/js/customize-nav-menus.js +++ b/src/wp-admin/js/customize-nav-menus.js @@ -537,33 +537,37 @@ var menuItem, itemName = $( '#custom-menu-item-name' ), itemUrl = $( '#custom-menu-item-url' ), - urlRegex, - urlValue; + urlRegex; if ( ! this.currentMenuControl ) { return; } /* - * Copyright (c) 2010-2013 Diego Perini, MIT licensed - * https://gist.github.com/dperini/729294 - * see also https://mathiasbynens.be/demo/url-regex - * modified to allow protocol-relative URLs + * Allow URLs including: + * - http://example.com/ + * - //example.com + * - /directory/ + * - ?query-param + * - #target + * - mailto:foo@example.com + * + * Any further validation will be handled on the server when the setting is attempted to be saved, + * so this pattern does not need to be complete. */ - urlRegex = /^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})).?)(?::\d{2,5})?(?:[/?#]\S*)?$/i; + urlRegex = /^((\w+:)?\/\/\w.*|\w+:(?!\/\/$)|\/|\?|#)/; - urlValue = itemUrl.val(); if ( '' === itemName.val() ) { itemName.addClass( 'invalid' ); return; - } else if ( '' === urlValue || 'http://' === urlValue || ! ( '/' === urlValue[0] || urlRegex.test( urlValue ) ) ) { + } else if ( ! urlRegex.test( itemUrl.val() ) ) { itemUrl.addClass( 'invalid' ); return; } menuItem = { 'title': itemName.val(), - 'url': urlValue, + 'url': itemUrl.val(), 'type': 'custom', 'type_label': api.Menus.data.l10n.custom_label, 'object': 'custom' From 90d47ddc8f271a04e296b9c60fe63f137509bd15 Mon Sep 17 00:00:00 2001 From: Weston Ruter Date: Sat, 11 Nov 2017 20:43:03 +0000 Subject: [PATCH 011/537] Theme Editor: Fix styling of child theme notice. Props westonruter, melchoyce, ndiego. See #24048. Fixes #42491 for 4.9. git-svn-id: https://develop.svn.wordpress.org/branches/4.9@42156 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/css/common.css | 13 ++++++++++--- src/wp-admin/theme-editor.php | 26 +++++++++++++------------- 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/src/wp-admin/css/common.css b/src/wp-admin/css/common.css index 038c6c82800de..203feaa0e4103 100644 --- a/src/wp-admin/css/common.css +++ b/src/wp-admin/css/common.css @@ -3240,17 +3240,21 @@ img { margin: 4px 0; } -#templateside li a, +#templateside li:not(.howto) a, .theme-editor-php .highlight { display: block; padding: 3px 0 3px 12px; text-decoration: none; } -#templateside li > a:first-of-type { +#templateside li:not(.howto) > a:first-of-type { padding-top: 0; } +#templateside li.howto { + padding: 6px 12px 12px 12px; +} + .theme-editor-php .highlight { margin: -3px 3px -3px -12px; } @@ -3775,10 +3779,13 @@ img { margin: 0; } - #templateside li a { + #templateside li:not(.howto) a { display: block; padding: 5px; } + #templateside li.howto { + padding: 12px; + } #templateside .highlight { padding: 5px; diff --git a/src/wp-admin/theme-editor.php b/src/wp-admin/theme-editor.php index e31748d2c5371..22c201e01eb19 100644 --- a/src/wp-admin/theme-editor.php +++ b/src/wp-admin/theme-editor.php @@ -229,20 +229,20 @@ ?>

- parent() ) : - if ( $theme->parent() ) { - /* translators: %s: link to edit parent theme */ - echo '

' . sprintf( __( 'This child theme inherits templates from a parent theme, %s.' ), - sprintf( '%s', - self_admin_url( 'theme-editor.php?theme=' . urlencode( $theme->get_template() ) ), - $theme->parent()->display( 'Name' ) - ) - ) . "

\n"; - } - endif; - ?>
    + parent() ) && $theme->parent() ) : ?> +
  • + %s', + self_admin_url( 'theme-editor.php?theme=' . urlencode( $theme->get_template() ) ), + $theme->parent()->display( 'Name' ) + ) + ); + ?> +
  • +
    • From d88407dbe04997209eccd5a11ed73d10a3b7b7e4 Mon Sep 17 00:00:00 2001 From: Weston Ruter Date: Sun, 12 Nov 2017 19:59:12 +0000 Subject: [PATCH 012/537] About: Synchronize 4.9 tagline across about pages for credits, freedoms, and privacy. Props dave.pullig. Amends [41943]. See #42087. Fixes #42518 for 4.9. git-svn-id: https://develop.svn.wordpress.org/branches/4.9@42158 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/credits.php | 2 +- src/wp-admin/freedoms.php | 2 +- src/wp-admin/privacy.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/wp-admin/credits.php b/src/wp-admin/credits.php index 5a54a806e1e57..7c6df4bcad86f 100644 --- a/src/wp-admin/credits.php +++ b/src/wp-admin/credits.php @@ -20,7 +20,7 @@

      -

      +

      diff --git a/src/wp-admin/freedoms.php b/src/wp-admin/freedoms.php index a9e078003ca3d..28c16461b7c87 100644 --- a/src/wp-admin/freedoms.php +++ b/src/wp-admin/freedoms.php @@ -19,7 +19,7 @@

      -

      +

      diff --git a/src/wp-admin/privacy.php b/src/wp-admin/privacy.php index f611ee1175ab4..c0fcbba87b998 100644 --- a/src/wp-admin/privacy.php +++ b/src/wp-admin/privacy.php @@ -19,7 +19,7 @@

      -

      +

      From d91fc6f67293137529b7c351390e7f0686e828fb Mon Sep 17 00:00:00 2001 From: Weston Ruter Date: Mon, 13 Nov 2017 05:19:05 +0000 Subject: [PATCH 013/537] About: Fix grammar typo with pluralization. Props metodiew, westonruter. Amends [42121]. See #42087. Fixes #42476 for 4.9. git-svn-id: https://develop.svn.wordpress.org/branches/4.9@42160 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/about.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wp-admin/about.php b/src/wp-admin/about.php index 5e7654188c18b..a24745d1dfe03 100644 --- a/src/wp-admin/about.php +++ b/src/wp-admin/about.php @@ -211,7 +211,7 @@

-

+

From a2233a29f32774923301ab47325848cd9d13dd0c Mon Sep 17 00:00:00 2001 From: Weston Ruter Date: Mon, 13 Nov 2017 05:48:25 +0000 Subject: [PATCH 014/537] About: Add vertical alignment for developer happiness sections. Also run CSS autoprefixer to add `-ms-` prefixes for CSS grid identifiers for IE11. Props Presskopp. Amends [42121]. See #42087. Fixes #42524 for 4.9. git-svn-id: https://develop.svn.wordpress.org/branches/4.9@42162 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/css/about.css | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/wp-admin/css/about.css b/src/wp-admin/css/about.css index bbbcd8dbcbfdf..e38cd10bb8250 100644 --- a/src/wp-admin/css/about.css +++ b/src/wp-admin/css/about.css @@ -172,8 +172,6 @@ display: flex; -webkit-box-pack: justify; justify-content: space-between; - -webkit-box-align: center; - align-items: center; flex-wrap: wrap; } @@ -357,14 +355,17 @@ /* 2.3 Floating Header Layout */ .about-wrap .floating-header-section { + display: -ms-grid; display: grid; grid-gap: 0 60px; + -ms-grid-columns: 5fr 11fr; grid-template-columns: 5fr 11fr; max-width: 1020px; margin: 0 auto 120px; } .about-wrap .floating-header-section h2 { + -ms-grid-column: 1; grid-column: 1; text-align: left; margin: 0; @@ -376,17 +377,22 @@ } .about-wrap .floating-header-section .section-content { + display: -ms-grid; display: grid; grid-gap: 60px; + -ms-grid-columns: 5fr 5fr; grid-template-columns: 5fr 5fr; + -ms-grid-column: 2; grid-column: 2; } .about-wrap .floating-header-section .section-item:nth-of-type(odd) { + -ms-grid-column: 1; grid-column: 1; } .about-wrap .floating-header-section .section-item:nth-of-type(even) { + -ms-grid-column: 2; grid-column: 2; } @@ -498,12 +504,14 @@ } .about-wrap .floating-header-section { + -ms-grid-columns: 1fr; grid-template-columns: 1fr; grid-gap: 60px 0; } .about-wrap .floating-header-section h2, .about-wrap .floating-header-section .section-content { + -ms-grid-column: 1; grid-column: 1; } } @@ -561,11 +569,13 @@ } .about-wrap .floating-header-section .section-content { + -ms-grid-columns: 1fr; grid-template-columns: 1fr; grid-gap: 60px 0; } .about-wrap .floating-header-section .section-content .section-item { + -ms-grid-column: 1; grid-column: 1; } } From c32b6bbef342a66f4e8b28f576efd3633e0e6384 Mon Sep 17 00:00:00 2001 From: Weston Ruter Date: Mon, 13 Nov 2017 07:08:56 +0000 Subject: [PATCH 015/537] I18N: Fix passing singular/plural strings to JS. This is a temporary solution while waiting for full I18N support in JS. Props ocean90, dd32, westonruter, Mirucon for testing. Amends [41376], [41721], [41389]. See #20491. Fixes #42510 for 4.9. git-svn-id: https://develop.svn.wordpress.org/branches/4.9@42164 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/script-loader.php | 21 +++++++++++-------- .../widgets/class-wp-widget-custom-html.php | 7 ++++--- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/wp-includes/script-loader.php b/src/wp-includes/script-loader.php index e5204a7aa00df..cc401f69255e2 100644 --- a/src/wp-includes/script-loader.php +++ b/src/wp-includes/script-loader.php @@ -476,10 +476,11 @@ function wp_default_scripts( &$scripts ) { did_action( 'init' ) && $scripts->add_inline_script( 'wp-theme-plugin-editor', sprintf( 'wp.themePluginEditor.l10n = %s;', wp_json_encode( array( 'saveAlert' => __( 'The changes you made will be lost if you navigate away from this page.' ), 'saveError' => __( 'Something went wrong. Your change may not have been saved. Please try again. There is also a chance that you may need to manually fix and upload the file over FTP.' ), - 'lintError' => wp_array_slice_assoc( + 'lintError' => array( /* translators: %d: error count */ - _n_noop( 'There is %d error which must be fixed before you can update this file.', 'There are %d errors which must be fixed before you can update this file.' ), - array( 'singular', 'plural' ) + 'singular' => _n( 'There is %d error which must be fixed before you can update this file.', 'There are %d errors which must be fixed before you can update this file.', 1 ), + /* translators: %d: error count */ + 'plural' => _n( 'There is %d error which must be fixed before you can update this file.', 'There are %d errors which must be fixed before you can update this file.', 2 ), // @todo This is lacking, as some languages have a dedicated dual form. For proper handling of plurals in JS, see #20491. ), ) ) ) ); @@ -580,16 +581,18 @@ function wp_default_scripts( &$scripts ) { 'videoHeaderNotice' => __( 'This theme doesn’t support video headers on this page. Navigate to the front page or another page that supports video headers.' ), // Used for overriding the file types allowed in plupload. 'allowedFiles' => __( 'Allowed Files' ), - 'customCssError' => wp_array_slice_assoc( + 'customCssError' => array( + /* translators: %d: error count */ + 'singular' => _n( 'There is %d error which must be fixed before you can save.', 'There are %d errors which must be fixed before you can save.', 1 ), /* translators: %d: error count */ - _n_noop( 'There is %d error which must be fixed before you can save.', 'There are %d errors which must be fixed before you can save.' ), - array( 'singular', 'plural' ) + 'plural' => _n( 'There is %d error which must be fixed before you can save.', 'There are %d errors which must be fixed before you can save.', 2 ), // @todo This is lacking, as some languages have a dedicated dual form. For proper handling of plurals in JS, see #20491. ), 'pageOnFrontError' => __( 'Homepage and posts page must be different.' ), - 'saveBlockedError' => wp_array_slice_assoc( + 'saveBlockedError' => array( + /* translators: %s: number of invalid settings */ + 'singular' => _n( 'Unable to save due to %s invalid setting.', 'Unable to save due to %s invalid settings.', 1 ), /* translators: %s: number of invalid settings */ - _n_noop( 'Unable to save due to %s invalid setting.', 'Unable to save due to %s invalid settings.' ), - array( 'singular', 'plural' ) + 'plural' => _n( 'Unable to save due to %s invalid setting.', 'Unable to save due to %s invalid settings.', 2 ), // @todo This is lacking, as some languages have a dedicated dual form. For proper handling of plurals in JS, see #20491. ), 'scheduleDescription' => __( 'Schedule your customization changes to publish ("go live") at a future date.' ), 'themePreviewUnavailable' => __( 'Sorry, you can’t preview new themes when you have changes scheduled or saved as a draft. Please publish your changes, or wait until they publish to preview new themes.' ), diff --git a/src/wp-includes/widgets/class-wp-widget-custom-html.php b/src/wp-includes/widgets/class-wp-widget-custom-html.php index a75e26447974d..855c3c58955d3 100644 --- a/src/wp-includes/widgets/class-wp-widget-custom-html.php +++ b/src/wp-includes/widgets/class-wp-widget-custom-html.php @@ -175,10 +175,11 @@ public function enqueue_admin_scripts() { wp_add_inline_script( 'custom-html-widgets', sprintf( 'wp.customHtmlWidgets.init( %s );', wp_json_encode( $settings ) ), 'after' ); $l10n = array( - 'errorNotice' => wp_array_slice_assoc( + 'errorNotice' => array( /* translators: %d: error count */ - _n_noop( 'There is %d error which must be fixed before you can save.', 'There are %d errors which must be fixed before you can save.' ), - array( 'singular', 'plural' ) + 'singular' => _n( 'There is %d error which must be fixed before you can save.', 'There are %d errors which must be fixed before you can save.', 1 ), + /* translators: %d: error count */ + 'plural' => _n( 'There is %d error which must be fixed before you can save.', 'There are %d errors which must be fixed before you can save.', 2 ), // @todo This is lacking, as some languages have a dedicated dual form. For proper handling of plurals in JS, see #20491. ), ); wp_add_inline_script( 'custom-html-widgets', sprintf( 'jQuery.extend( wp.customHtmlWidgets.l10n, %s );', wp_json_encode( $l10n ) ), 'after' ); From b51e2edf34a5275b87ea15fee51a28d08719df3f Mon Sep 17 00:00:00 2001 From: "Dominik Schilling (ocean90)" Date: Mon, 13 Nov 2017 18:40:23 +0000 Subject: [PATCH 016/537] Build: Add `npm-shrinkwrap.json`. For compatibility with the build server `fsevent` has been manually removed. Props netweb. Fixes #42483. git-svn-id: https://develop.svn.wordpress.org/branches/4.9@42166 602fd350-edb4-49c9-b593-d223f7449a82 --- npm-shrinkwrap.json | 9832 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 9832 insertions(+) create mode 100644 npm-shrinkwrap.json diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json new file mode 100644 index 0000000000000..0190e4aa8abc2 --- /dev/null +++ b/npm-shrinkwrap.json @@ -0,0 +1,9832 @@ +{ + "name": "WordPress", + "version": "4.9.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "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 + }, + "accepts": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", + "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", + "dev": true, + "requires": { + "mime-types": "2.1.17", + "negotiator": "0.6.1" + } + }, + "acorn": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.2.1.tgz", + "integrity": "sha512-jG0u7c4Ly+3QkkW18V+NRDN+4bWHdln30NL1ZL2AvFZZmQe/BfopYCtghCKKVBUSetZ4QKcyA0pY6/4Gw8Pv8w==", + "dev": true + }, + "acorn-dynamic-import": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", + "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", + "dev": true, + "requires": { + "acorn": "4.0.13" + }, + "dependencies": { + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", + "dev": true + } + } + }, + "ajv": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.3.0.tgz", + "integrity": "sha1-RBT/dKUIecII7l/cgm4ywwNUnto=", + "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.1" + }, + "dependencies": { + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + } + } + }, + "ajv-keywords": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", + "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", + "dev": true + }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, + "requires": { + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-escapes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", + "dev": true + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "anymatch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "dev": true, + "requires": { + "micromatch": "2.3.11", + "normalize-path": "2.1.1" + } + }, + "applause": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/applause/-/applause-1.2.2.tgz", + "integrity": "sha1-qEaFeegfZzl7tWNMKZU77c0PVsA=", + "dev": true, + "requires": { + "cson-parser": "1.3.5", + "js-yaml": "3.10.0", + "lodash": "3.10.1" + }, + "dependencies": { + "argparse": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "dev": true, + "requires": { + "sprintf-js": "1.0.3" + } + }, + "esprima": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", + "dev": true + }, + "js-yaml": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", + "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", + "dev": true, + "requires": { + "argparse": "1.0.9", + "esprima": "4.0.0" + } + }, + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + } + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "archive-type": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-3.2.0.tgz", + "integrity": "sha1-nNnABpV+vpX62tW9YJiUKoE3N/Y=", + "dev": true, + "requires": { + "file-type": "3.9.0" + } + }, + "archiver": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-1.3.0.tgz", + "integrity": "sha1-TyGU1tj5nfP1MeaIHxTxXVX6ryI=", + "dev": true, + "requires": { + "archiver-utils": "1.3.0", + "async": "2.6.0", + "buffer-crc32": "0.2.13", + "glob": "7.1.2", + "lodash": "4.17.4", + "readable-stream": "2.3.3", + "tar-stream": "1.5.4", + "walkdir": "0.0.11", + "zip-stream": "1.2.0" + }, + "dependencies": { + "async": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", + "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", + "dev": true, + "requires": { + "lodash": "4.17.4" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "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" + } + }, + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + } + } + }, + "archiver-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.3.0.tgz", + "integrity": "sha1-5QtMCccL89aA4y/xt5lOn52JUXQ=", + "dev": true, + "requires": { + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "lazystream": "1.0.0", + "lodash": "4.17.4", + "normalize-path": "2.1.1", + "readable-stream": "2.3.3" + }, + "dependencies": { + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "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" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + } + } + }, + "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=", + "dev": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.3.3" + } + }, + "argparse": { + "version": "0.1.16", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz", + "integrity": "sha1-z9AeD7uj1srtBJ+9dY1A9lGW9Xw=", + "dev": true, + "requires": { + "underscore": "1.7.0", + "underscore.string": "2.4.0" + }, + "dependencies": { + "underscore.string": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz", + "integrity": "sha1-jN2PusTi0uoefi6Al8QvRCKA+Fs=", + "dev": true + } + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "1.1.0" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "array-differ": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-flatten": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.1.tgz", + "integrity": "sha1-Qmu52oQJDBg42BLIFQryCoMx4pY=", + "dev": true + }, + "array-includes": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", + "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "dev": true, + "requires": { + "define-properties": "1.1.2", + "es-abstract": "1.9.0" + } + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "1.0.3" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "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==", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } + }, + "assert": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "dev": true, + "requires": { + "util": "0.10.3" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "async": { + "version": "0.1.22", + "resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz", + "integrity": "sha1-D8GqoIig4+8Ovi2IMbqw3PiEUGE=", + "dev": true + }, + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true + }, + "async-each-series": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-1.1.0.tgz", + "integrity": "sha1-9C/YFV048hpbjqB8KOBj7RcAsTg=", + "dev": true, + "optional": true + }, + "async-foreach": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", + "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "autoprefixer": { + "version": "6.7.7", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", + "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", + "dev": true, + "requires": { + "browserslist": "1.7.7", + "caniuse-db": "1.0.30000760", + "normalize-range": "0.1.2", + "num2fraction": "1.2.2", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + } + }, + "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 + }, + "aws4": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", + "dev": true + }, + "babylon": { + "version": "7.0.0-beta.19", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.19.tgz", + "integrity": "sha512-Vg0C9s/REX6/WIXN37UKpv5ZhRi6A4pjHlpkE34+8/a6c2W1Q692n3hmc+SZG5lKRnaExLUbxtJ1SVT+KaCQ/A==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base64-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", + "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "beeper": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", + "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=", + "dev": true + }, + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "dev": true + }, + "bin-build": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/bin-build/-/bin-build-2.2.0.tgz", + "integrity": "sha1-EfjdYfcP/Por3KpbRvXo/t1CIcw=", + "dev": true, + "optional": true, + "requires": { + "archive-type": "3.2.0", + "decompress": "3.0.0", + "download": "4.4.3", + "exec-series": "1.0.3", + "rimraf": "2.2.8", + "tempfile": "1.1.1", + "url-regex": "3.2.0" + } + }, + "bin-check": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-2.0.0.tgz", + "integrity": "sha1-hvjm9CU4k99g3DFpV/WvAqywWTA=", + "dev": true, + "optional": true, + "requires": { + "executable": "1.1.0" + } + }, + "bin-version": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-1.0.4.tgz", + "integrity": "sha1-nrSY7m/Xb3q5p8FgQ2+JV5Q1144=", + "dev": true, + "optional": true, + "requires": { + "find-versions": "1.2.1" + } + }, + "bin-version-check": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-2.1.0.tgz", + "integrity": "sha1-5OXfKQuQaffRETJAMe/BP90RpbA=", + "dev": true, + "optional": true, + "requires": { + "bin-version": "1.0.4", + "minimist": "1.2.0", + "semver": "4.3.6", + "semver-truncate": "1.1.2" + }, + "dependencies": { + "semver": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", + "dev": true, + "optional": true + } + } + }, + "bin-wrapper": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-3.0.2.tgz", + "integrity": "sha1-Z9MwYmLksaXy+I7iNGT2plVneus=", + "dev": true, + "optional": true, + "requires": { + "bin-check": "2.0.0", + "bin-version-check": "2.1.0", + "download": "4.4.3", + "each-async": "1.1.1", + "lazy-req": "1.1.0", + "os-filter-obj": "1.0.3" + } + }, + "binary-extensions": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.10.0.tgz", + "integrity": "sha1-muuabF6IY4qtFx4Wf1kAq+JINdA=", + "dev": true + }, + "bl": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz", + "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=", + "dev": true, + "requires": { + "readable-stream": "2.3.3" + } + }, + "block-stream": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", + "dev": true + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "dev": true + }, + "body-parser": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.14.2.tgz", + "integrity": "sha1-EBXLH+LEQ4WCWVgdtTMy+NDPUPk=", + "dev": true, + "requires": { + "bytes": "2.2.0", + "content-type": "1.0.4", + "debug": "2.2.0", + "depd": "1.1.1", + "http-errors": "1.3.1", + "iconv-lite": "0.4.13", + "on-finished": "2.3.0", + "qs": "5.2.0", + "raw-body": "2.1.7", + "type-is": "1.6.15" + }, + "dependencies": { + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true, + "requires": { + "ms": "0.7.1" + } + }, + "iconv-lite": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", + "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=", + "dev": true + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + }, + "qs": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-5.2.0.tgz", + "integrity": "sha1-qfMRQq9GjLcrJbMBNrokVoNJFr4=", + "dev": true + } + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "requires": { + "array-flatten": "2.1.1", + "deep-equal": "1.0.1", + "dns-equal": "1.0.0", + "dns-txt": "2.0.2", + "multicast-dns": "6.1.1", + "multicast-dns-service-types": "1.1.0" + } + }, + "boom": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", + "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", + "dev": true, + "requires": { + "hoek": "4.2.0" + } + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "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==", + "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" + } + }, + "browserify-cipher": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", + "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", + "dev": true, + "requires": { + "browserify-aes": "1.1.1", + "browserify-des": "1.0.0", + "evp_bytestokey": "1.0.3" + } + }, + "browserify-des": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", + "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "des.js": "1.0.0", + "inherits": "2.0.3" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "randombytes": "2.0.5" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "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" + } + }, + "browserify-zlib": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", + "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", + "dev": true, + "requires": { + "pako": "0.2.9" + } + }, + "browserslist": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "dev": true, + "requires": { + "caniuse-db": "1.0.30000760", + "electron-to-chromium": "1.3.27" + } + }, + "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" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, + "buffer-to-vinyl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-to-vinyl/-/buffer-to-vinyl-1.1.0.tgz", + "integrity": "sha1-APFfruOreh3aLN5tkSG//dB7ImI=", + "dev": true, + "requires": { + "file-type": "3.9.0", + "readable-stream": "2.3.3", + "uuid": "2.0.3", + "vinyl": "1.2.0" + } + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "bytes": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.2.0.tgz", + "integrity": "sha1-/TVGSkA/b5EXwt42Cez/nK4ABYg=", + "dev": true + }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "2.1.1", + "map-obj": "1.0.1" + } + }, + "caniuse-db": { + "version": "1.0.30000760", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000760.tgz", + "integrity": "sha1-PqKUc+t4psywny63Osnh3r/sUo0=", + "dev": true + }, + "capture-stack-trace": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", + "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "catharsis": { + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.9.tgz", + "integrity": "sha1-mMyJDKZS3S7w5ws3klMQ/56Q/Is=", + "dev": true, + "requires": { + "underscore-contrib": "0.3.0" + } + }, + "caw": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/caw/-/caw-1.2.0.tgz", + "integrity": "sha1-/7Im/n78VHKI3GLuPpcHPCEtEDQ=", + "dev": true, + "requires": { + "get-proxy": "1.1.0", + "is-obj": "1.0.1", + "object-assign": "3.0.0", + "tunnel-agent": "0.4.3" + }, + "dependencies": { + "object-assign": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", + "dev": true + } + } + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "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" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "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" + }, + "dependencies": { + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "2.0.1" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + } + } + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + }, + "clap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", + "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", + "dev": true, + "optional": true, + "requires": { + "chalk": "1.1.3" + } + }, + "clean-css": { + "version": "3.4.28", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz", + "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=", + "dev": true, + "requires": { + "commander": "2.8.1", + "source-map": "0.4.4" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "cli": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", + "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=", + "dev": true, + "requires": { + "exit": "0.1.2", + "glob": "7.1.2" + }, + "dependencies": { + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "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" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + } + } + }, + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "requires": { + "restore-cursor": "1.0.1" + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + } + }, + "clone": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", + "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=", + "dev": true + }, + "clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", + "dev": true + }, + "co": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/co/-/co-3.1.0.tgz", + "integrity": "sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g=", + "dev": true + }, + "coa": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", + "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", + "dev": true, + "optional": true, + "requires": { + "q": "1.5.1" + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "coffee-script": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz", + "integrity": "sha1-FQ1rTLUiiUNp7+1qIQHCC8f0pPQ=", + "dev": true + }, + "color-convert": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", + "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "colors": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", + "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=", + "dev": true + }, + "combined-stream": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "commander": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", + "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", + "dev": true, + "requires": { + "graceful-readlink": "1.0.1" + } + }, + "compress-commons": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.2.tgz", + "integrity": "sha1-UkqfEJA/OoEzibAiXSfEi7dRiQ8=", + "dev": true, + "requires": { + "buffer-crc32": "0.2.13", + "crc32-stream": "2.0.0", + "normalize-path": "2.1.1", + "readable-stream": "2.3.3" + } + }, + "compressible": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.12.tgz", + "integrity": "sha1-xZpcmdt2dn6YdlAOJx72OzSTvWY=", + "dev": true, + "requires": { + "mime-db": "1.30.0" + } + }, + "compression": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.1.tgz", + "integrity": "sha1-7/JgPvwuIs+G810uuTWJ+YdTc9s=", + "dev": true, + "requires": { + "accepts": "1.3.4", + "bytes": "3.0.0", + "compressible": "2.0.12", + "debug": "2.6.9", + "on-headers": "1.0.1", + "safe-buffer": "5.1.1", + "vary": "1.1.2" + }, + "dependencies": { + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", + "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.3", + "typedarray": "0.0.6" + } + }, + "connect-history-api-fallback": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.4.0.tgz", + "integrity": "sha1-PbJPlz9LkjsOgvYZzg3wJBHKYj0=", + "dev": true + }, + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, + "requires": { + "date-now": "0.1.4" + } + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "console-stream": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/console-stream/-/console-stream-0.1.1.tgz", + "integrity": "sha1-oJX+B7IEZZVfL6/Si11yvM2UnUQ=", + "dev": true, + "optional": true + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", + "dev": true + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "convert-source-map": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz", + "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=", + "dev": true + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "crc": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.5.0.tgz", + "integrity": "sha1-mLi6fUiWZbo5efWbITgTdBAaGWQ=", + "dev": true + }, + "crc32-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz", + "integrity": "sha1-483TtN8xaN10494/u8t7KX/pCPQ=", + "dev": true, + "requires": { + "crc": "3.5.0", + "readable-stream": "2.3.3" + } + }, + "create-ecdh": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", + "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "elliptic": "6.4.0" + } + }, + "create-error-class": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "dev": true, + "requires": { + "capture-stack-trace": "1.0.0" + } + }, + "create-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", + "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "inherits": "2.0.3", + "ripemd160": "2.0.1", + "sha.js": "2.4.9" + } + }, + "create-hmac": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", + "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", + "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" + } + }, + "cross-spawn": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", + "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", + "dev": true, + "requires": { + "lru-cache": "4.1.1", + "which": "1.3.0" + }, + "dependencies": { + "lru-cache": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", + "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } + }, + "which": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", + "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "dev": true, + "requires": { + "isexe": "2.0.0" + } + } + } + }, + "cryptiles": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", + "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", + "dev": true, + "requires": { + "boom": "5.2.0" + }, + "dependencies": { + "boom": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", + "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", + "dev": true, + "requires": { + "hoek": "4.2.0" + } + } + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "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" + } + }, + "cson-parser": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/cson-parser/-/cson-parser-1.3.5.tgz", + "integrity": "sha1-fsZ14DkUVTO/KmqFYHPxWZ2cLSQ=", + "dev": true, + "requires": { + "coffee-script": "1.12.7" + }, + "dependencies": { + "coffee-script": { + "version": "1.12.7", + "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz", + "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==", + "dev": true + } + } + }, + "csso": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-2.0.0.tgz", + "integrity": "sha1-F4tDpEYhIhwndWCG9THgL0KQDug=", + "dev": true, + "optional": true, + "requires": { + "clap": "1.2.3", + "source-map": "0.5.7" + } + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "1.0.2" + } + }, + "d": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "dev": true, + "requires": { + "es5-ext": "0.10.35" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + } + }, + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true + }, + "dateformat": { + "version": "1.0.2-1.2.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz", + "integrity": "sha1-sCIMAt6YYXQztyhRz0fePfLNvuk=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decompress": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-3.0.0.tgz", + "integrity": "sha1-rx3VDQbjv8QyRh033hGzjA2ZG+0=", + "dev": true, + "requires": { + "buffer-to-vinyl": "1.1.0", + "concat-stream": "1.6.0", + "decompress-tar": "3.1.0", + "decompress-tarbz2": "3.1.0", + "decompress-targz": "3.1.0", + "decompress-unzip": "3.4.0", + "stream-combiner2": "1.1.1", + "vinyl-assign": "1.2.1", + "vinyl-fs": "2.4.4" + } + }, + "decompress-tar": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-3.1.0.tgz", + "integrity": "sha1-IXx4n5uURQ76rcXF5TeXj8MzxGY=", + "dev": true, + "requires": { + "is-tar": "1.0.0", + "object-assign": "2.1.1", + "strip-dirs": "1.1.1", + "tar-stream": "1.5.4", + "through2": "0.6.5", + "vinyl": "0.4.6" + }, + "dependencies": { + "clone": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", + "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", + "dev": true + }, + "object-assign": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", + "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=", + "dev": true + }, + "vinyl": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", + "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", + "dev": true, + "requires": { + "clone": "0.2.0", + "clone-stats": "0.0.1" + } + } + } + }, + "decompress-tarbz2": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-3.1.0.tgz", + "integrity": "sha1-iyOTVoE1X58YnYclag+L3ZbZZm0=", + "dev": true, + "requires": { + "is-bzip2": "1.0.0", + "object-assign": "2.1.1", + "seek-bzip": "1.0.5", + "strip-dirs": "1.1.1", + "tar-stream": "1.5.4", + "through2": "0.6.5", + "vinyl": "0.4.6" + }, + "dependencies": { + "clone": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", + "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", + "dev": true + }, + "object-assign": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", + "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=", + "dev": true + }, + "vinyl": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", + "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", + "dev": true, + "requires": { + "clone": "0.2.0", + "clone-stats": "0.0.1" + } + } + } + }, + "decompress-targz": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-3.1.0.tgz", + "integrity": "sha1-ssE9+YFmJomRtxXWRH9kLpaW9aA=", + "dev": true, + "requires": { + "is-gzip": "1.0.0", + "object-assign": "2.1.1", + "strip-dirs": "1.1.1", + "tar-stream": "1.5.4", + "through2": "0.6.5", + "vinyl": "0.4.6" + }, + "dependencies": { + "clone": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", + "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", + "dev": true + }, + "object-assign": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", + "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=", + "dev": true + }, + "vinyl": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", + "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", + "dev": true, + "requires": { + "clone": "0.2.0", + "clone-stats": "0.0.1" + } + } + } + }, + "decompress-unzip": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-3.4.0.tgz", + "integrity": "sha1-YUdbQVIGa74/7hL51inRX+ZHjus=", + "dev": true, + "requires": { + "is-zip": "1.0.0", + "read-all-stream": "3.1.0", + "stat-mode": "0.2.2", + "strip-dirs": "1.1.1", + "through2": "2.0.3", + "vinyl": "1.2.0", + "yauzl": "2.9.1" + }, + "dependencies": { + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "requires": { + "readable-stream": "2.3.3", + "xtend": "4.0.1" + } + } + } + }, + "deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", + "dev": true + }, + "deep-extend": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", + "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", + "dev": true + }, + "deep-for-each": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/deep-for-each/-/deep-for-each-1.0.6.tgz", + "integrity": "sha1-r6DOJJxYSSqXIFOUeKGNN+GxC64=", + "dev": true, + "requires": { + "is-plain-object": "2.0.4" + } + }, + "define-properties": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", + "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", + "dev": true, + "requires": { + "foreach": "2.0.5", + "object-keys": "1.0.11" + } + }, + "del": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", + "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", + "dev": true, + "requires": { + "globby": "6.1.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.0", + "p-map": "1.2.0", + "pify": "3.0.0", + "rimraf": "2.2.8" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", + "dev": true + }, + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-node": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.3.tgz", + "integrity": "sha1-ogM8CcyOFY03dI+951B4Mr1s4Sc=", + "dev": true + }, + "diff": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/diff/-/diff-2.2.3.tgz", + "integrity": "sha1-YOr9DSjukG5Oj/ClLBIpUhAzv5k=", + "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=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "miller-rabin": "4.0.1", + "randombytes": "2.0.5" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "dns-packet": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.2.2.tgz", + "integrity": "sha512-kN+DjfGF7dJGUL7nWRktL9Z18t1rWP3aQlyZdY8XlpvU3Nc6GeFTQApftcjtWKxAZfiggZSGrCEoszNgvnpwDg==", + "dev": true, + "requires": { + "ip": "1.1.5", + "safe-buffer": "5.1.1" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "requires": { + "buffer-indexof": "1.1.1" + } + }, + "dom-serializer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "dev": true, + "requires": { + "domelementtype": "1.1.3", + "entities": "1.1.1" + }, + "dependencies": { + "domelementtype": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", + "dev": true + }, + "entities": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", + "dev": true + } + } + }, + "domain-browser": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", + "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", + "dev": true + }, + "domelementtype": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", + "dev": true + }, + "domhandler": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", + "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", + "dev": true, + "requires": { + "domelementtype": "1.3.0" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "0.1.0", + "domelementtype": "1.3.0" + } + }, + "download": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/download/-/download-4.4.3.tgz", + "integrity": "sha1-qlX9rTktldS2jowr4D4MKqIbqaw=", + "dev": true, + "requires": { + "caw": "1.2.0", + "concat-stream": "1.6.0", + "each-async": "1.1.1", + "filenamify": "1.2.1", + "got": "5.7.1", + "gulp-decompress": "1.2.0", + "gulp-rename": "1.2.2", + "is-url": "1.2.2", + "object-assign": "4.1.1", + "read-all-stream": "3.1.0", + "readable-stream": "2.3.3", + "stream-combiner2": "1.1.1", + "vinyl": "1.2.0", + "vinyl-fs": "2.4.4", + "ware": "1.3.0" + } + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "dev": true, + "requires": { + "readable-stream": "2.3.3" + } + }, + "duplexify": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.1.tgz", + "integrity": "sha512-j5goxHTwVED1Fpe5hh3q9R93Kip0Bg2KVAt4f8CEYM3UEwYcPSvWbXaUQOzdX/HtiNomipv+gU7ASQPDbV7pGQ==", + "dev": true, + "requires": { + "end-of-stream": "1.4.0", + "inherits": "2.0.3", + "readable-stream": "2.3.3", + "stream-shift": "1.0.0" + } + }, + "each-async": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/each-async/-/each-async-1.1.1.tgz", + "integrity": "sha1-3uUim98KtrogEqOV4bhpq/iBNHM=", + "dev": true, + "requires": { + "onetime": "1.1.0", + "set-immediate-shim": "1.0.1" + } + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.27", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.27.tgz", + "integrity": "sha1-eOy4o5kGYYe7N07t412ccFZagD0=", + "dev": true + }, + "elliptic": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", + "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" + } + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "encodeurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", + "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=", + "dev": true + }, + "end-of-stream": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz", + "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=", + "dev": true, + "requires": { + "once": "1.4.0" + } + }, + "enhanced-resolve": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", + "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "memory-fs": "0.4.1", + "object-assign": "4.1.1", + "tapable": "0.2.8" + }, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + } + } + }, + "entities": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", + "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", + "dev": true + }, + "errno": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", + "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=", + "dev": true, + "requires": { + "prr": "0.0.0" + } + }, + "error-ex": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "dev": true, + "requires": { + "is-arrayish": "0.2.1" + } + }, + "es-abstract": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.9.0.tgz", + "integrity": "sha512-kk3IJoKo7A3pWJc0OV8yZ/VEX2oSUytfekrJiqoxBlKJMFAJVJVpGdHClCCTdv+Fn2zHfpDHHIelMFhZVfef3Q==", + "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": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", + "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", + "dev": true, + "requires": { + "is-callable": "1.1.3", + "is-date-object": "1.0.1", + "is-symbol": "1.0.1" + } + }, + "es5-ext": { + "version": "0.10.35", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.35.tgz", + "integrity": "sha1-GO6FjOajxFx9eekcFfzKnsVoSU8=", + "dev": true, + "requires": { + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.35", + "es6-symbol": "3.1.1" + } + }, + "es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.35", + "es6-iterator": "2.0.3", + "es6-set": "0.1.5", + "es6-symbol": "3.1.1", + "event-emitter": "0.3.5" + } + }, + "es6-promise": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.1.1.tgz", + "integrity": "sha512-OaU1hHjgJf+b0NzsxCg7NdIYERD6Hy/PEmFLTjw+b65scuisG3Kt4QoTvJ66BBkPZ581gr0kpoVzKnxniM8nng==", + "dev": true + }, + "es6-set": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.35", + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1", + "event-emitter": "0.3.5" + } + }, + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.35" + } + }, + "es6-weak-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", + "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.35", + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "escope": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "dev": true, + "requires": { + "es6-map": "0.1.5", + "es6-weak-map": "2.0.2", + "esrecurse": "4.2.0", + "estraverse": "4.2.0" + } + }, + "esprima": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", + "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=", + "dev": true + }, + "esrecurse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", + "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", + "dev": true, + "requires": { + "estraverse": "4.2.0", + "object-assign": "4.1.1" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.35" + } + }, + "eventemitter2": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", + "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", + "dev": true + }, + "eventemitter3": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", + "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", + "dev": true + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "dev": true + }, + "eventsource": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz", + "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", + "dev": true, + "requires": { + "original": "1.0.0" + } + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "1.3.4", + "safe-buffer": "5.1.1" + } + }, + "exec-buffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/exec-buffer/-/exec-buffer-2.0.1.tgz", + "integrity": "sha1-ACijG+CxRgth0HX5avRYO54zXqA=", + "dev": true, + "optional": true, + "requires": { + "rimraf": "2.2.8", + "tempfile": "1.1.1" + } + }, + "exec-series": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/exec-series/-/exec-series-1.0.3.tgz", + "integrity": "sha1-bSV6m+rEgqhyx3g7yGFYOfx3FDo=", + "dev": true, + "optional": true, + "requires": { + "async-each-series": "1.1.0", + "object-assign": "4.1.1" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "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" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "4.1.1", + "shebang-command": "1.2.0", + "which": "1.3.0" + } + }, + "lru-cache": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", + "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } + }, + "which": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", + "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "dev": true, + "requires": { + "isexe": "2.0.0" + } + } + } + }, + "executable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/executable/-/executable-1.1.0.tgz", + "integrity": "sha1-h3mA6REvM5EGbaNyZd562ENKtNk=", + "dev": true, + "optional": true, + "requires": { + "meow": "3.7.0" + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "exit-hook": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", + "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", + "dev": true + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "2.2.3" + } + }, + "express": { + "version": "4.16.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz", + "integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=", + "dev": true, + "requires": { + "accepts": "1.3.4", + "array-flatten": "1.1.1", + "body-parser": "1.18.2", + "content-disposition": "0.5.2", + "content-type": "1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "1.1.1", + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "etag": "1.8.1", + "finalhandler": "1.1.0", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "2.0.2", + "qs": "6.5.1", + "range-parser": "1.2.0", + "safe-buffer": "5.1.1", + "send": "0.16.1", + "serve-static": "1.13.1", + "setprototypeof": "1.1.0", + "statuses": "1.3.1", + "type-is": "1.6.15", + "utils-merge": "1.0.1", + "vary": "1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "body-parser": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "dev": true, + "requires": { + "bytes": "3.0.0", + "content-type": "1.0.4", + "debug": "2.6.9", + "depd": "1.1.1", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "on-finished": "2.3.0", + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "1.6.15" + } + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "dev": true, + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": "1.3.1" + }, + "dependencies": { + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", + "dev": true + } + } + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", + "dev": true + }, + "raw-body": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "dev": true, + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "unpipe": "1.0.0" + } + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "dev": true + } + } + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true + }, + "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" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + } + } + }, + "extract-zip": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.6.tgz", + "integrity": "sha1-EpDt6NINCHK0Kf0/NRyhKOxe+Fw=", + "dev": true, + "requires": { + "concat-stream": "1.6.0", + "debug": "2.6.9", + "mkdirp": "0.5.0", + "yauzl": "2.4.1" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", + "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "yauzl": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", + "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", + "dev": true, + "requires": { + "fd-slicer": "1.0.1" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fancy-log": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.0.tgz", + "integrity": "sha1-Rb4X0Cu5kX1gzP/UmVyZnmyMmUg=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "time-stamp": "1.1.0" + } + }, + "fast-deep-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", + "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "requires": { + "websocket-driver": "0.7.0" + } + }, + "fd-slicer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", + "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "dev": true, + "requires": { + "pend": "1.2.0" + } + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5", + "object-assign": "4.1.1" + } + }, + "file-sync-cmp": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz", + "integrity": "sha1-peeo/7+kk7Q7kju9TKiaU7Y7YSs=", + "dev": true + }, + "file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", + "dev": true + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "filename-reserved-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-1.0.0.tgz", + "integrity": "sha1-5hz4BfDeHJhFZ9A4bcXfUO5a9+Q=", + "dev": true + }, + "filenamify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-1.2.1.tgz", + "integrity": "sha1-qfL/0RxQO+0wABUCknI3jx8TZaU=", + "dev": true, + "requires": { + "filename-reserved-regex": "1.0.0", + "strip-outer": "1.0.0", + "trim-repeated": "1.0.0" + } + }, + "fill-range": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "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" + } + }, + "finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.3.1", + "unpipe": "1.0.0" + }, + "dependencies": { + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "dev": true + } + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "find-versions": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-1.2.1.tgz", + "integrity": "sha1-y96fEuOFdaCvG+G5osXV/Y8Ya2I=", + "dev": true, + "optional": true, + "requires": { + "array-uniq": "1.0.3", + "get-stdin": "4.0.1", + "meow": "3.7.0", + "semver-regex": "1.0.0" + } + }, + "findup": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/findup/-/findup-0.1.5.tgz", + "integrity": "sha1-itkpozk7rGJ5V6fl3kYjsGsOLOs=", + "dev": true, + "requires": { + "colors": "0.6.2", + "commander": "2.1.0" + }, + "dependencies": { + "commander": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.1.0.tgz", + "integrity": "sha1-0SG7roYNmZKj1Re6lvVliOR8Z4E=", + "dev": true + } + } + }, + "findup-sync": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz", + "integrity": "sha1-fz56l7gjksZTvwZYm9hRkOk8NoM=", + "dev": true, + "requires": { + "glob": "3.2.11", + "lodash": "2.4.2" + }, + "dependencies": { + "glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", + "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "minimatch": "0.3.0" + } + }, + "lodash": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", + "dev": true + }, + "minimatch": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", + "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", + "dev": true, + "requires": { + "lru-cache": "2.7.3", + "sigmund": "1.0.1" + } + } + } + }, + "first-chunk-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", + "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=", + "dev": true + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "1.0.2" + } + }, + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz", + "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=", + "dev": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.17" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "fs-extra": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", + "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "2.4.0", + "klaw": "1.3.1" + }, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + } + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz", + "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", + "dev": true, + "optional": true, + "requires": { + "nan": "2.7.0", + "node-pre-gyp": "0.6.39" + }, + "dependencies": { + "abbrev": { + "version": "1.1.0", + "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", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.2.9" + } + }, + "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", + "bundled": true, + "dev": true, + "optional": true + }, + "co": { + "version": "4.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "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, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "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 + } + } + }, + "debug": { + "version": "2.6.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.4.2", + "bundled": true, + "dev": true, + "optional": true + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "ecc-jsbn": { + "version": "0.1.1", + "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" + } + }, + "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" + } + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "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 + } + } + }, + "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" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "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", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.0" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.4", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "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" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "node-pre-gyp": { + "version": "0.6.39", + "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" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1.1.0", + "osenv": "0.1.4" + } + }, + "npmlog": { + "version": "4.1.0", + "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" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "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", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.1", + "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" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "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", + "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" + } + }, + "rimraf": { + "version": "2.6.1", + "bundled": true, + "dev": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-buffer": { + "version": "5.0.1", + "bundled": true, + "dev": true + }, + "semver": { + "version": "5.3.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "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" + } + }, + "string_decoder": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "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" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "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", + "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" + } + }, + "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" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + } + } + }, + "fstream": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.2.8" + }, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + } + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "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" + } + }, + "gaze": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz", + "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=", + "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" + } + }, + "get-caller-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", + "dev": true + }, + "get-proxy": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-1.1.0.tgz", + "integrity": "sha1-iUhUSRvFkbDxR9euVw9cZ4tyVus=", + "dev": true, + "requires": { + "rc": "1.2.2" + } + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "getobject": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", + "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + } + }, + "gifsicle": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/gifsicle/-/gifsicle-3.0.4.tgz", + "integrity": "sha1-9Fy17RAWW2ZdySng6TKLbIId+js=", + "dev": true, + "optional": true, + "requires": { + "bin-build": "2.2.0", + "bin-wrapper": "3.0.2", + "logalot": "2.1.0" + } + }, + "glob": { + "version": "3.1.21", + "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", + "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", + "dev": true, + "requires": { + "graceful-fs": "1.2.3", + "inherits": "1.0.2", + "minimatch": "0.2.14" + }, + "dependencies": { + "inherits": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", + "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=", + "dev": true + } + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + }, + "dependencies": { + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "2.0.1" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + } + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "3.1.0", + "path-dirname": "1.0.2" + } + }, + "glob-stream": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz", + "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=", + "dev": true, + "requires": { + "extend": "3.0.1", + "glob": "5.0.15", + "glob-parent": "3.1.0", + "micromatch": "2.3.11", + "ordered-read-streams": "0.3.0", + "through2": "0.6.5", + "to-absolute-glob": "0.1.1", + "unique-stream": "2.2.1" + }, + "dependencies": { + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "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" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + } + } + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "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" + }, + "dependencies": { + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "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" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + } + } + }, + "globule": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.0.tgz", + "integrity": "sha1-HcScaCLdnoovoAuiopUAboZkvQk=", + "dev": true, + "requires": { + "glob": "7.1.2", + "lodash": "4.17.4", + "minimatch": "3.0.4" + }, + "dependencies": { + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "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" + } + }, + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + } + } + }, + "glogg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.0.tgz", + "integrity": "sha1-f+DxmfV6yQbPUS/urY+Q7kooT8U=", + "dev": true, + "requires": { + "sparkles": "1.0.0" + } + }, + "got": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-5.7.1.tgz", + "integrity": "sha1-X4FjWmHkplifGAVp6k44FoClHzU=", + "dev": true, + "requires": { + "create-error-class": "3.0.2", + "duplexer2": "0.1.4", + "is-redirect": "1.0.0", + "is-retry-allowed": "1.1.0", + "is-stream": "1.1.0", + "lowercase-keys": "1.0.0", + "node-status-codes": "1.0.0", + "object-assign": "4.1.1", + "parse-json": "2.2.0", + "pinkie-promise": "2.0.1", + "read-all-stream": "3.1.0", + "readable-stream": "2.3.3", + "timed-out": "3.1.3", + "unzip-response": "1.0.2", + "url-parse-lax": "1.0.0" + } + }, + "graceful-fs": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", + "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=", + "dev": true + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", + "dev": true + }, + "grunt": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz", + "integrity": "sha1-VpN81RlDJK3/bSB2MYMqnWuk5/A=", + "dev": true, + "requires": { + "async": "0.1.22", + "coffee-script": "1.3.3", + "colors": "0.6.2", + "dateformat": "1.0.2-1.2.3", + "eventemitter2": "0.4.14", + "exit": "0.1.2", + "findup-sync": "0.1.3", + "getobject": "0.1.0", + "glob": "3.1.21", + "grunt-legacy-log": "0.1.3", + "grunt-legacy-util": "0.2.0", + "hooker": "0.2.3", + "iconv-lite": "0.2.11", + "js-yaml": "2.0.5", + "lodash": "0.9.2", + "minimatch": "0.2.14", + "nopt": "1.0.10", + "rimraf": "2.2.8", + "underscore.string": "2.2.1", + "which": "1.0.9" + } + }, + "grunt-banner": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/grunt-banner/-/grunt-banner-0.6.0.tgz", + "integrity": "sha1-P4eQIdEj+linuloLb7a+QStYhaw=", + "dev": true, + "requires": { + "chalk": "1.1.3" + } + }, + "grunt-contrib-clean": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-1.0.0.tgz", + "integrity": "sha1-ay7ZQRfix//jLuBFeMlv5GJam20=", + "dev": true, + "requires": { + "async": "1.5.2", + "rimraf": "2.6.2" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "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" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "requires": { + "glob": "7.1.2" + } + } + } + }, + "grunt-contrib-compress": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-compress/-/grunt-contrib-compress-1.3.0.tgz", + "integrity": "sha1-XlwmogBJCCPH93KIr9LXNQ2Vxj0=", + "dev": true, + "requires": { + "archiver": "1.3.0", + "chalk": "1.1.3", + "lodash": "4.17.4", + "pretty-bytes": "3.0.1", + "stream-buffers": "2.2.0" + }, + "dependencies": { + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + } + } + }, + "grunt-contrib-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-1.0.1.tgz", + "integrity": "sha1-YVCYYwhOhx1+ht5IwBUlntl3Rb0=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "source-map": "0.5.7" + } + }, + "grunt-contrib-copy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-copy/-/grunt-contrib-copy-1.0.0.tgz", + "integrity": "sha1-cGDGWB6QS4qw0A8HbgqPbj58NXM=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "file-sync-cmp": "0.1.1" + } + }, + "grunt-contrib-cssmin": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/grunt-contrib-cssmin/-/grunt-contrib-cssmin-1.0.2.tgz", + "integrity": "sha1-FzTL09hMpzZHWLflj/GOUqpgu3Y=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "clean-css": "3.4.28", + "maxmin": "1.1.0" + } + }, + "grunt-contrib-imagemin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/grunt-contrib-imagemin/-/grunt-contrib-imagemin-1.0.1.tgz", + "integrity": "sha1-5Ho1YTN29MqpwfkERlA8rhyUTXk=", + "dev": true, + "requires": { + "async": "1.5.2", + "chalk": "1.1.3", + "gulp-rename": "1.2.2", + "imagemin": "4.0.0", + "pretty-bytes": "3.0.1" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + } + } + }, + "grunt-contrib-jshint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-1.0.0.tgz", + "integrity": "sha1-MPQFpR3mVr+m6wKbmkZLn+AqQCo=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "hooker": "0.2.3", + "jshint": "2.9.5" + } + }, + "grunt-contrib-qunit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-qunit/-/grunt-contrib-qunit-1.3.0.tgz", + "integrity": "sha1-naxijP1OyBWZhjPbc7Ur2z3byZ4=", + "dev": true, + "requires": { + "grunt-lib-phantomjs": "1.1.0" + } + }, + "grunt-contrib-uglify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-2.0.0.tgz", + "integrity": "sha1-jJlw1pCTbN5tJaoRk1Sb2SkBaTA=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "lodash.assign": "4.2.0", + "maxmin": "1.1.0", + "uglify-js": "2.7.5", + "uri-path": "1.0.0" + } + }, + "grunt-contrib-watch": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-1.0.0.tgz", + "integrity": "sha1-hKGnodar0m7VaEE0lscxM+mQAY8=", + "dev": true, + "requires": { + "async": "1.5.2", + "gaze": "1.1.2", + "lodash": "3.10.1", + "tiny-lr": "0.2.1" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + } + } + }, + "grunt-includes": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/grunt-includes/-/grunt-includes-0.5.4.tgz", + "integrity": "sha1-fGyS4LM3rOYjMYHZ+NMWodSY4yk=", + "dev": true + }, + "grunt-jsdoc": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/grunt-jsdoc/-/grunt-jsdoc-2.2.0.tgz", + "integrity": "sha512-3/HzvzcG7gxlm4YefR5ELbsUB/bIFCeX3CbUeAANKGMfNUZ2tDQ+Pp0YRb/VWHjyu+v8wG6n1PD8yIjubjEDeg==", + "dev": true, + "requires": { + "cross-spawn": "3.0.1", + "jsdoc": "3.5.5" + } + }, + "grunt-jsvalidate": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/grunt-jsvalidate/-/grunt-jsvalidate-0.2.2.tgz", + "integrity": "sha1-/QlEJYiNbmPfqgbPsJ7gUrjrvo8=", + "dev": true, + "requires": { + "esprima": "1.0.4" + } + }, + "grunt-legacy-log": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-0.1.3.tgz", + "integrity": "sha1-7ClCboAwIa9ZAp+H0vnNczWgVTE=", + "dev": true, + "requires": { + "colors": "0.6.2", + "grunt-legacy-log-utils": "0.1.1", + "hooker": "0.2.3", + "lodash": "2.4.2", + "underscore.string": "2.3.3" + }, + "dependencies": { + "lodash": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", + "dev": true + }, + "underscore.string": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz", + "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=", + "dev": true + } + } + }, + "grunt-legacy-log-utils": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-0.1.1.tgz", + "integrity": "sha1-wHBrndkGThFvNvI/5OawSGcsD34=", + "dev": true, + "requires": { + "colors": "0.6.2", + "lodash": "2.4.2", + "underscore.string": "2.3.3" + }, + "dependencies": { + "lodash": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", + "dev": true + }, + "underscore.string": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz", + "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=", + "dev": true + } + } + }, + "grunt-legacy-util": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz", + "integrity": "sha1-kzJIhNv343qf98Am3/RR2UqeVUs=", + "dev": true, + "requires": { + "async": "0.1.22", + "exit": "0.1.2", + "getobject": "0.1.0", + "hooker": "0.2.3", + "lodash": "0.9.2", + "underscore.string": "2.2.1", + "which": "1.0.9" + } + }, + "grunt-lib-phantomjs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/grunt-lib-phantomjs/-/grunt-lib-phantomjs-1.1.0.tgz", + "integrity": "sha1-np7c3Z/S3UDgwYHJQ3HVcqpe6tI=", + "dev": true, + "requires": { + "eventemitter2": "0.4.14", + "phantomjs-prebuilt": "2.1.16", + "rimraf": "2.6.2", + "semver": "5.4.1", + "temporary": "0.0.8" + }, + "dependencies": { + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "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" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "requires": { + "glob": "7.1.2" + } + } + } + }, + "grunt-patch-wordpress": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/grunt-patch-wordpress/-/grunt-patch-wordpress-0.4.2.tgz", + "integrity": "sha1-wO38taMmPpk8wWk98RsrPkSG2Mg=", + "dev": true, + "requires": { + "inquirer": "0.12.0", + "request": "2.69.0", + "underscore": "1.8.3", + "underscore.string": "3.3.4", + "xmlrpc": "1.3.2" + }, + "dependencies": { + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "dev": true + }, + "async": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", + "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", + "dev": true, + "requires": { + "lodash": "4.17.4" + } + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "dev": true + }, + "bl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.0.3.tgz", + "integrity": "sha1-/FQhoo/UImA2w7OJGmaiW8ZNIm4=", + "dev": true, + "requires": { + "readable-stream": "2.0.6" + } + }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "caseless": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", + "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", + "dev": true + }, + "commander": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", + "dev": true + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "dev": true, + "requires": { + "boom": "2.10.1" + } + }, + "form-data": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-1.0.1.tgz", + "integrity": "sha1-rjFduaSQf6BlUCMEpm13M0de43w=", + "dev": true, + "requires": { + "async": "2.6.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.17" + } + }, + "har-validator": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", + "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "commander": "2.11.0", + "is-my-json-valid": "2.16.1", + "pinkie-promise": "2.0.1" + } + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "dev": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "dev": true + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "dev": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.1", + "sshpk": "1.13.1" + } + }, + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + }, + "qs": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.0.4.tgz", + "integrity": "sha1-UQGdhHIMk5uCc36EVWp4Izjs6ns=", + "dev": true + }, + "readable-stream": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" + } + }, + "request": { + "version": "2.69.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.69.0.tgz", + "integrity": "sha1-z5HS4AB1KxIXFVwAUkGRGZGiNGo=", + "dev": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "bl": "1.0.3", + "caseless": "0.11.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "1.0.1", + "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.17", + "node-uuid": "1.4.8", + "oauth-sign": "0.8.2", + "qs": "6.0.4", + "stringstream": "0.0.5", + "tough-cookie": "2.2.2", + "tunnel-agent": "0.4.3" + } + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "tough-cookie": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.2.2.tgz", + "integrity": "sha1-yDoYMPTl7wuT7yo0iOck+N4Basc=", + "dev": true + }, + "underscore": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", + "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", + "dev": true + }, + "underscore.string": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.4.tgz", + "integrity": "sha1-LCo/n4PmR2L9xF5s6sZRQoZCE9s=", + "dev": true, + "requires": { + "sprintf-js": "1.0.3", + "util-deprecate": "1.0.2" + } + } + } + }, + "grunt-postcss": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/grunt-postcss/-/grunt-postcss-0.7.2.tgz", + "integrity": "sha1-V7dke4d9Qq0yz51M0RAID/+0OKs=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "diff": "2.2.3", + "es6-promise": "3.3.1", + "postcss": "5.2.18" + }, + "dependencies": { + "es6-promise": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", + "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=", + "dev": true + } + } + }, + "grunt-replace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/grunt-replace/-/grunt-replace-1.0.1.tgz", + "integrity": "sha1-kKeVMvuJBB/kJ8h9QlI4sPiGZRo=", + "dev": true, + "requires": { + "applause": "1.2.2", + "chalk": "1.1.3", + "file-sync-cmp": "0.1.1", + "lodash": "4.17.4" + }, + "dependencies": { + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + } + } + }, + "grunt-rtlcss": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/grunt-rtlcss/-/grunt-rtlcss-2.0.1.tgz", + "integrity": "sha1-6eYc5DdAY5f546Sxv2aeR+cf/MM=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "rtlcss": "2.2.1" + } + }, + "grunt-sass": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/grunt-sass/-/grunt-sass-1.2.1.tgz", + "integrity": "sha1-+4e2yqxG+zLUUXf9Lktv90aMGRk=", + "dev": true, + "requires": { + "each-async": "1.1.1", + "node-sass": "3.13.1", + "object-assign": "4.1.1" + } + }, + "grunt-webpack": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/grunt-webpack/-/grunt-webpack-3.0.2.tgz", + "integrity": "sha512-ghSkdCdvbF1SpI46qDT9FYqw5ZP5sSYbEQU/DwzoJE1K42xizAZ5Rv3kzpaRdJT4yvu8/6fO5+wne3/y0n74QA==", + "dev": true, + "requires": { + "deep-for-each": "1.0.6", + "lodash": "4.17.4" + }, + "dependencies": { + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + } + } + }, + "gulp-decompress": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gulp-decompress/-/gulp-decompress-1.2.0.tgz", + "integrity": "sha1-jutlpeAV+O2FMsr+KEVJYGJvDcc=", + "dev": true, + "requires": { + "archive-type": "3.2.0", + "decompress": "3.0.0", + "gulp-util": "3.0.8", + "readable-stream": "2.3.3" + } + }, + "gulp-rename": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.2.2.tgz", + "integrity": "sha1-OtRCh2PwXidk3sHGfYaNsnVoeBc=", + "dev": true + }, + "gulp-sourcemaps": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz", + "integrity": "sha1-uG/zSdgBzrVuHZ59x7vLS33uYAw=", + "dev": true, + "requires": { + "convert-source-map": "1.5.0", + "graceful-fs": "4.1.11", + "strip-bom": "2.0.0", + "through2": "2.0.3", + "vinyl": "1.2.0" + }, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "requires": { + "readable-stream": "2.3.3", + "xtend": "4.0.1" + } + } + } + }, + "gulp-util": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", + "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", + "dev": true, + "requires": { + "array-differ": "1.0.0", + "array-uniq": "1.0.3", + "beeper": "1.1.1", + "chalk": "1.1.3", + "dateformat": "2.2.0", + "fancy-log": "1.3.0", + "gulplog": "1.0.0", + "has-gulplog": "0.1.0", + "lodash._reescape": "3.0.0", + "lodash._reevaluate": "3.0.0", + "lodash._reinterpolate": "3.0.0", + "lodash.template": "3.6.2", + "minimist": "1.2.0", + "multipipe": "0.1.2", + "object-assign": "3.0.0", + "replace-ext": "0.0.1", + "through2": "2.0.3", + "vinyl": "0.5.3" + }, + "dependencies": { + "dateformat": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", + "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=", + "dev": true + }, + "object-assign": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", + "dev": true + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "requires": { + "readable-stream": "2.3.3", + "xtend": "4.0.1" + } + }, + "vinyl": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", + "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", + "dev": true, + "requires": { + "clone": "1.0.3", + "clone-stats": "0.0.1", + "replace-ext": "0.0.1" + } + } + } + }, + "gulplog": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", + "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", + "dev": true, + "requires": { + "glogg": "1.0.0" + } + }, + "gzip-size": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-1.0.0.tgz", + "integrity": "sha1-Zs+LEBBHInuVus5uodoMF37Vwi8=", + "dev": true, + "requires": { + "browserify-zlib": "0.1.4", + "concat-stream": "1.6.0" + } + }, + "handle-thing": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz", + "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=", + "dev": true + }, + "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.3.0", + "har-schema": "2.0.0" + } + }, + "has": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "dev": true, + "requires": { + "function-bind": "1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "has-gulplog": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", + "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", + "dev": true, + "requires": { + "sparkles": "1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "hash-base": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", + "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "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==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } + }, + "hasha": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz", + "integrity": "sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE=", + "dev": true, + "requires": { + "is-stream": "1.1.0", + "pinkie-promise": "2.0.1" + } + }, + "hawk": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", + "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", + "dev": true, + "requires": { + "boom": "4.3.1", + "cryptiles": "3.1.2", + "hoek": "4.2.0", + "sntp": "2.1.0" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "1.1.3", + "minimalistic-assert": "1.0.0", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "hoek": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", + "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==", + "dev": true + }, + "hooker": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", + "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=", + "dev": true + }, + "hosted-git-info": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", + "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", + "dev": true + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "obuf": "1.1.1", + "readable-stream": "2.3.3", + "wbuf": "1.7.2" + } + }, + "html-entities": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", + "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", + "dev": true + }, + "htmlparser2": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", + "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", + "dev": true, + "requires": { + "domelementtype": "1.3.0", + "domhandler": "2.3.0", + "domutils": "1.5.1", + "entities": "1.0.0", + "readable-stream": "1.1.14" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "http-errors": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz", + "integrity": "sha1-GX4izevUGYWF6GlO9nhhl7ke2UI=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "statuses": "1.4.0" + } + }, + "http-parser-js": { + "version": "0.4.9", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.9.tgz", + "integrity": "sha1-6hoE+2St/wJC6ZdPKX3Uw8rSceE=", + "dev": true + }, + "http-proxy": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz", + "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=", + "dev": true, + "requires": { + "eventemitter3": "1.2.0", + "requires-port": "1.0.0" + } + }, + "http-proxy-middleware": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz", + "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=", + "dev": true, + "requires": { + "http-proxy": "1.16.2", + "is-glob": "3.1.0", + "lodash": "4.17.4", + "micromatch": "2.3.11" + }, + "dependencies": { + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + } + } + }, + "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.4.1", + "sshpk": "1.13.1" + } + }, + "https-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz", + "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=", + "dev": true + }, + "iconv-lite": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz", + "integrity": "sha1-HOYKOleGSiktEyH/RgnKS7llrcg=", + "dev": true + }, + "ieee754": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", + "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", + "dev": true + }, + "imagemin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-4.0.0.tgz", + "integrity": "sha1-6Q5/CTaDZZXxj6Ff6Qb0+iWeqEc=", + "dev": true, + "requires": { + "buffer-to-vinyl": "1.1.0", + "concat-stream": "1.6.0", + "imagemin-gifsicle": "4.2.0", + "imagemin-jpegtran": "4.3.2", + "imagemin-optipng": "4.3.0", + "imagemin-svgo": "4.2.1", + "optional": "0.1.4", + "readable-stream": "2.3.3", + "stream-combiner2": "1.1.1", + "vinyl-fs": "2.4.4" + } + }, + "imagemin-gifsicle": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/imagemin-gifsicle/-/imagemin-gifsicle-4.2.0.tgz", + "integrity": "sha1-D++butNHbmt2iFc2zFsLh6CHV8o=", + "dev": true, + "optional": true, + "requires": { + "gifsicle": "3.0.4", + "is-gif": "1.0.0", + "through2": "0.6.5" + } + }, + "imagemin-jpegtran": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/imagemin-jpegtran/-/imagemin-jpegtran-4.3.2.tgz", + "integrity": "sha1-G8bR4r0T/bZNJFUm1jWn5d/rEvw=", + "dev": true, + "optional": true, + "requires": { + "is-jpg": "1.0.0", + "jpegtran-bin": "3.2.0", + "through2": "2.0.3" + }, + "dependencies": { + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "optional": true, + "requires": { + "readable-stream": "2.3.3", + "xtend": "4.0.1" + } + } + } + }, + "imagemin-optipng": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/imagemin-optipng/-/imagemin-optipng-4.3.0.tgz", + "integrity": "sha1-dgRmOrLuMVczJ0cm/Rw3TStErbY=", + "dev": true, + "optional": true, + "requires": { + "exec-buffer": "2.0.1", + "is-png": "1.1.0", + "optipng-bin": "3.1.4", + "through2": "0.6.5" + } + }, + "imagemin-svgo": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/imagemin-svgo/-/imagemin-svgo-4.2.1.tgz", + "integrity": "sha1-VPB9xW9HJgRi32phxUvvtEtXvlU=", + "dev": true, + "optional": true, + "requires": { + "is-svg": "1.1.1", + "svgo": "0.6.6", + "through2": "2.0.3" + }, + "dependencies": { + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "optional": true, + "requires": { + "readable-stream": "2.3.3", + "xtend": "4.0.1" + } + } + } + }, + "import-local": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-0.1.1.tgz", + "integrity": "sha1-sReVcqrNwRxqkQCftDDbyrX2aKg=", + "dev": true, + "requires": { + "pkg-dir": "2.0.0", + "resolve-cwd": "2.0.0" + } + }, + "in-publish": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", + "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", + "dev": true + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ini": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", + "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", + "dev": true + }, + "ink-docstrap": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ink-docstrap/-/ink-docstrap-1.3.0.tgz", + "integrity": "sha1-6QBeW7kCXMmpvo5ErYf4rViIyB0=", + "dev": true, + "requires": { + "moment": "2.19.1", + "sanitize-html": "1.15.0" + } + }, + "inquirer": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", + "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", + "dev": true, + "requires": { + "ansi-escapes": "1.4.0", + "ansi-regex": "2.1.1", + "chalk": "1.1.3", + "cli-cursor": "1.0.2", + "cli-width": "2.2.0", + "figures": "1.7.0", + "lodash": "4.17.4", + "readline2": "1.0.1", + "run-async": "0.1.0", + "rx-lite": "3.1.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "through": "2.3.8" + }, + "dependencies": { + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + } + } + }, + "internal-ip": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-1.2.0.tgz", + "integrity": "sha1-rp+/k7mEh4eF1QqN4bNWlWBYz1w=", + "dev": true, + "requires": { + "meow": "3.7.0" + } + }, + "interpret": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.4.tgz", + "integrity": "sha1-ggzdWIuGj/sZGoCVBtbJyPISsbA=", + "dev": true + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "ip-regex": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-1.0.3.tgz", + "integrity": "sha1-3FiQdvZZ9BnCIgOaMzFvHHOH7/0=", + "dev": true, + "optional": true + }, + "ipaddr.js": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.5.2.tgz", + "integrity": "sha1-1LUFvemUaYfM8PxY2QEP+WB+P6A=", + "dev": true + }, + "is-absolute": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.1.7.tgz", + "integrity": "sha1-hHSREZ/MtftDYhfMc39/qtUPYD8=", + "dev": true, + "requires": { + "is-relative": "0.1.3" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "1.10.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, + "requires": { + "builtin-modules": "1.1.1" + } + }, + "is-bzip2": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-bzip2/-/is-bzip2-1.0.0.tgz", + "integrity": "sha1-XuWOqlounIDiFAe+3yOuWsCRs/w=", + "dev": true + }, + "is-callable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", + "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=", + "dev": true + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-gif": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-gif/-/is-gif-1.0.0.tgz", + "integrity": "sha1-ptKumIkwB7/6l6HYwB1jIFgyCX4=", + "dev": true, + "optional": true + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + }, + "is-gzip": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-gzip/-/is-gzip-1.0.0.tgz", + "integrity": "sha1-bKiwe5nHeZgCWQDlVc7Y7YCHmoM=", + "dev": true + }, + "is-jpg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-jpg/-/is-jpg-1.0.0.tgz", + "integrity": "sha1-KVnBfnNDDbOCZNp1uQ3VTy2G2hw=", + "dev": true, + "optional": true + }, + "is-my-json-valid": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz", + "integrity": "sha512-ochPsqWS1WXj8ZnMIV0vnNXooaMhp7cyL4FMSIPKTtnV0Ha/T19G2b9kkhcNsabV9bxYkze7/aLZJb/bYuFduQ==", + "dev": true, + "requires": { + "generate-function": "2.0.0", + "generate-object-property": "1.2.0", + "jsonpointer": "4.0.1", + "xtend": "4.0.1" + } + }, + "is-natural-number": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-2.1.1.tgz", + "integrity": "sha1-fUxXKDd+84bD4ZSpkRv1fG3DNec=", + "dev": true + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", + "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", + "dev": true, + "requires": { + "is-path-inside": "1.0.0" + } + }, + "is-path-inside": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", + "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", + "dev": true, + "requires": { + "path-is-inside": "1.0.2" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "is-png": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-png/-/is-png-1.1.0.tgz", + "integrity": "sha1-1XSxK/J1wDUEVVcLDltXqwYgd84=", + "dev": true, + "optional": true + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "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-redirect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", + "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" + } + }, + "is-relative": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.1.3.tgz", + "integrity": "sha1-kF/uiuhvRbPsYUvDwVyGnfCHboI=", + "dev": true + }, + "is-retry-allowed": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-svg": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-1.1.1.tgz", + "integrity": "sha1-rA76r7ZTrFhHNwix+HNjbKEQ4xs=", + "dev": true, + "optional": true + }, + "is-symbol": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", + "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", + "dev": true + }, + "is-tar": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-tar/-/is-tar-1.0.0.tgz", + "integrity": "sha1-L2suF5LB9bs2UZrKqdZcDSb+hT0=", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-url": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.2.tgz", + "integrity": "sha1-SYkFpZO/R8wtnn9zg3K792lsfyY=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-valid-glob": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-0.3.0.tgz", + "integrity": "sha1-1LVcafUYhvm2XHDWwmItN+KfSP4=", + "dev": true + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "is-zip": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-zip/-/is-zip-1.0.0.tgz", + "integrity": "sha1-R7Co/004p2QxzP2ZqOFaTIa6IyU=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "jpegtran-bin": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jpegtran-bin/-/jpegtran-bin-3.2.0.tgz", + "integrity": "sha1-9g7PSumZwL2tLp+83ytvCYHnops=", + "dev": true, + "optional": true, + "requires": { + "bin-build": "2.2.0", + "bin-wrapper": "3.0.2", + "logalot": "2.1.0" + } + }, + "js-base64": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.3.2.tgz", + "integrity": "sha512-Y2/+DnfJJXT1/FCwUebUhLWb3QihxiSC42+ctHLGogmW2jPY6LCapMdFZXRvVP2z6qyKW7s6qncE/9gSqZiArw==", + "dev": true + }, + "js-yaml": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-2.0.5.tgz", + "integrity": "sha1-olrmUJmZ6X3yeMZxnaEb0Gh3Q6g=", + "dev": true, + "requires": { + "argparse": "0.1.16", + "esprima": "1.0.4" + } + }, + "js2xmlparser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-3.0.0.tgz", + "integrity": "sha1-P7YOqgicVED5MZ9RdgzNB+JJlzM=", + "dev": true, + "requires": { + "xmlcreate": "1.0.2" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": true + }, + "jsdoc": { + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.5.5.tgz", + "integrity": "sha512-6PxB65TAU4WO0Wzyr/4/YhlGovXl0EVYfpKbpSroSj0qBxT4/xod/l40Opkm38dRHRdQgdeY836M0uVnJQG7kg==", + "dev": true, + "requires": { + "babylon": "7.0.0-beta.19", + "bluebird": "3.5.1", + "catharsis": "0.8.9", + "escape-string-regexp": "1.0.5", + "js2xmlparser": "3.0.0", + "klaw": "2.0.0", + "marked": "0.3.6", + "mkdirp": "0.5.1", + "requizzle": "0.2.1", + "strip-json-comments": "2.0.1", + "taffydb": "2.6.2", + "underscore": "1.8.3" + }, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "klaw": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-2.0.0.tgz", + "integrity": "sha1-WcEo4Nxc5BAgEVEZTuucv4WGUPY=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + }, + "underscore": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", + "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", + "dev": true + } + } + }, + "jshint": { + "version": "2.9.5", + "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.9.5.tgz", + "integrity": "sha1-HnJSkVzmgbQIJ+4UJIxG006apiw=", + "dev": true, + "requires": { + "cli": "1.0.1", + "console-browserify": "1.1.0", + "exit": "0.1.2", + "htmlparser2": "3.8.3", + "lodash": "3.7.0", + "minimatch": "3.0.4", + "shelljs": "0.3.0", + "strip-json-comments": "1.0.4" + }, + "dependencies": { + "lodash": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.7.0.tgz", + "integrity": "sha1-Nni9irmVBXwHreg27S7wh9qBHUU=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + }, + "strip-json-comments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", + "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", + "dev": true + } + } + }, + "json-loader": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", + "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "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", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json3": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + }, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true, + "optional": true + } + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "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", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "kew": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz", + "integrity": "sha1-edk9LTM2PW/dKXCzNdkUGtWR15s=", + "dev": true + }, + "killable": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.0.tgz", + "integrity": "sha1-2ouEvUfeU5WHj5XWTQLyRJ/gXms=", + "dev": true + }, + "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" + } + }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + }, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true, + "optional": true + } + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true + }, + "lazy-req": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/lazy-req/-/lazy-req-1.1.0.tgz", + "integrity": "sha1-va6+rTD42CQDnODOFJ1Nqge6H6w=", + "dev": true, + "optional": true + }, + "lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "dev": true, + "requires": { + "readable-stream": "2.3.3" + } + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "1.0.0" + } + }, + "livereload-js": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.2.2.tgz", + "integrity": "sha1-bIclfmSKtHW8JOoldFftzB+NC8I=", + "dev": true + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "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" + }, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + } + } + }, + "loader-runner": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz", + "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=", + "dev": true + }, + "loader-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "dev": true, + "requires": { + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "2.0.0", + "path-exists": "3.0.0" + }, + "dependencies": { + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } + } + }, + "lodash": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz", + "integrity": "sha1-jzSZxSRdNG1oLlsNO0B2fgnxqSw=", + "dev": true + }, + "lodash._basecopy": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", + "dev": true + }, + "lodash._basetostring": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", + "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=", + "dev": true + }, + "lodash._basevalues": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", + "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", + "dev": true + }, + "lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "dev": true + }, + "lodash._isiterateecall": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", + "dev": true + }, + "lodash._reescape": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", + "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=", + "dev": true + }, + "lodash._reevaluate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", + "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=", + "dev": true + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", + "dev": true + }, + "lodash._root": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", + "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", + "dev": true + }, + "lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", + "dev": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.escape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", + "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", + "dev": true, + "requires": { + "lodash._root": "3.0.1" + } + }, + "lodash.escaperegexp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "integrity": "sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=", + "dev": true + }, + "lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", + "dev": true + }, + "lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", + "dev": true + }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", + "dev": true + }, + "lodash.keys": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "dev": true, + "requires": { + "lodash._getnative": "3.9.1", + "lodash.isarguments": "3.1.0", + "lodash.isarray": "3.0.4" + } + }, + "lodash.restparam": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", + "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", + "dev": true + }, + "lodash.template": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", + "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", + "dev": true, + "requires": { + "lodash._basecopy": "3.0.1", + "lodash._basetostring": "3.0.1", + "lodash._basevalues": "3.0.0", + "lodash._isiterateecall": "3.0.9", + "lodash._reinterpolate": "3.0.0", + "lodash.escape": "3.2.0", + "lodash.keys": "3.1.2", + "lodash.restparam": "3.6.1", + "lodash.templatesettings": "3.1.1" + } + }, + "lodash.templatesettings": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", + "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", + "dev": true, + "requires": { + "lodash._reinterpolate": "3.0.0", + "lodash.escape": "3.2.0" + } + }, + "logalot": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/logalot/-/logalot-2.1.0.tgz", + "integrity": "sha1-X46MkNME7fElMJUaVVSruMXj9VI=", + "dev": true, + "optional": true, + "requires": { + "figures": "1.7.0", + "squeak": "1.3.0" + } + }, + "loglevel": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.5.1.tgz", + "integrity": "sha1-GJB4yUq5BT7iFaCs2/JCROoPZQI=", + "dev": true + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "0.4.1", + "signal-exit": "3.0.2" + } + }, + "lowercase-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", + "dev": true + }, + "lpad-align": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/lpad-align/-/lpad-align-1.1.2.tgz", + "integrity": "sha1-IfYArBwwlcPG5JfuZyce4ISB/p4=", + "dev": true, + "optional": true, + "requires": { + "get-stdin": "4.0.1", + "indent-string": "2.1.0", + "longest": "1.0.1", + "meow": "3.7.0" + } + }, + "lru-cache": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", + "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", + "dev": true + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "marked": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.6.tgz", + "integrity": "sha1-ssbGGPzOzk74bE/Gy4p8v1rtqNc=", + "dev": true + }, + "matchdep": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-1.0.1.tgz", + "integrity": "sha1-pXozgESR+64girqPaDgEN6vC3KU=", + "dev": true, + "requires": { + "findup-sync": "0.3.0", + "micromatch": "2.3.11", + "resolve": "1.1.7", + "stack-trace": "0.0.9" + }, + "dependencies": { + "findup-sync": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", + "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", + "dev": true, + "requires": { + "glob": "5.0.15" + } + }, + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "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" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + } + } + }, + "maxmin": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-1.1.0.tgz", + "integrity": "sha1-cTZehKmd2Piz99X94vANHn9zvmE=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "figures": "1.7.0", + "gzip-size": "1.0.0", + "pretty-bytes": "1.0.4" + }, + "dependencies": { + "pretty-bytes": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz", + "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=", + "dev": true, + "requires": { + "get-stdin": "4.0.1", + "meow": "3.7.0" + } + } + } + }, + "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" + } + } + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "dev": true, + "requires": { + "mimic-fn": "1.1.0" + } + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "0.1.4", + "readable-stream": "2.3.3" + } + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "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" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "merge-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", + "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", + "dev": true, + "requires": { + "readable-stream": "2.3.3" + } + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "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" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + } + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0" + } + }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "dev": true + }, + "mime-db": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", + "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=", + "dev": true + }, + "mime-types": { + "version": "2.1.17", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", + "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", + "dev": true, + "requires": { + "mime-db": "1.30.0" + } + }, + "mimic-fn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", + "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", + "dev": true + }, + "minimalistic-assert": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", + "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", + "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", + "dev": true, + "requires": { + "lru-cache": "2.7.3", + "sigmund": "1.0.1" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } + } + }, + "moment": { + "version": "2.19.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.19.1.tgz", + "integrity": "sha1-VtoaLRy/AdOLfhr8McELz6GSkWc=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "multicast-dns": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.1.1.tgz", + "integrity": "sha1-bn3oalcIcqsXBYrepxYLvsqBTd4=", + "dev": true, + "requires": { + "dns-packet": "1.2.2", + "thunky": "0.1.0" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "multipipe": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", + "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", + "dev": true, + "requires": { + "duplexer2": "0.0.2" + }, + "dependencies": { + "duplexer2": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", + "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", + "dev": true, + "requires": { + "readable-stream": "1.1.14" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "mute-stream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", + "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=", + "dev": true + }, + "nan": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.7.0.tgz", + "integrity": "sha1-2Vv3IeyHfgjbJ27T/G63j5CDrUY=", + "dev": true + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "dev": true + }, + "node-forge": { + "version": "0.6.33", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.6.33.tgz", + "integrity": "sha1-RjgRh59XPUUVWtap9D3ClujoXrw=", + "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=", + "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.4", + "request": "2.83.0", + "rimraf": "2.2.8", + "semver": "5.3.0", + "tar": "2.2.1", + "which": "1.0.9" + }, + "dependencies": { + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "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" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1.1.1" + } + }, + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true + } + } + }, + "node-libs-browser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.0.0.tgz", + "integrity": "sha1-o6WeyXAkmFtG6Vg3lkb5bEthZkY=", + "dev": true, + "requires": { + "assert": "1.4.1", + "browserify-zlib": "0.1.4", + "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": "0.0.1", + "os-browserify": "0.2.1", + "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": "0.10.31", + "timers-browserify": "2.0.4", + "tty-browserify": "0.0.0", + "url": "0.11.0", + "util": "0.10.3", + "vm-browserify": "0.0.4" + }, + "dependencies": { + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "node-sass": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-3.13.1.tgz", + "integrity": "sha1-ckD7v/I5YwS0IjUn7TAgWJwAT8I=", + "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", + "meow": "3.7.0", + "mkdirp": "0.5.1", + "nan": "2.7.0", + "node-gyp": "3.6.2", + "npmlog": "4.1.2", + "request": "2.83.0", + "sass-graph": "2.2.4" + }, + "dependencies": { + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "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" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + } + } + }, + "node-status-codes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz", + "integrity": "sha1-WuVUHQJGRdMqWPzdyc7s6nrjrC8=", + "dev": true + }, + "node-uuid": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", + "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=", + "dev": true + }, + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "requires": { + "abbrev": "1.1.1" + } + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "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": "5.4.1", + "validate-npm-package-license": "3.0.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "1.1.0" + } + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "2.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "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" + } + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-keys": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", + "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", + "dev": true + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + } + }, + "obuf": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.1.tgz", + "integrity": "sha1-EEEktsYCxnlogaBCVB0220OlJk4=", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "opn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.1.0.tgz", + "integrity": "sha512-iPNl7SyM8L30Rm1sjGdLLheyHVw5YXVfi3SKWJzBI7efxRwHojfRFjwE/OLM6qp9xJYMgab8WicTU1cPoY+Hpg==", + "dev": true, + "requires": { + "is-wsl": "1.1.0" + } + }, + "optional": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/optional/-/optional-0.1.4.tgz", + "integrity": "sha512-gtvrrCfkE08wKcgXaVwQVgwEQ8vel2dc5DDBn9RLQZ3YtmtkBss6A2HY6BnJH4N/4Ku97Ri/SF8sNWE2225WJw==", + "dev": true + }, + "optipng-bin": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/optipng-bin/-/optipng-bin-3.1.4.tgz", + "integrity": "sha1-ldNPLEiHBPb9cGBr/qDGWfHZXYQ=", + "dev": true, + "optional": true, + "requires": { + "bin-build": "2.2.0", + "bin-wrapper": "3.0.2", + "logalot": "2.1.0" + } + }, + "ordered-read-streams": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz", + "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=", + "dev": true, + "requires": { + "is-stream": "1.1.0", + "readable-stream": "2.3.3" + } + }, + "original": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.0.tgz", + "integrity": "sha1-kUf5P6FpbQS+YeAb1QuurKZWvTs=", + "dev": true, + "requires": { + "url-parse": "1.0.5" + }, + "dependencies": { + "url-parse": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.0.5.tgz", + "integrity": "sha1-CFSGBCKv3P7+tsllxmLUgAFpkns=", + "dev": true, + "requires": { + "querystringify": "0.0.4", + "requires-port": "1.0.0" + } + } + } + }, + "os-browserify": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.2.1.tgz", + "integrity": "sha1-Y/xMzuXS13Y9Jrv4YBB45sLgBE8=", + "dev": true + }, + "os-filter-obj": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-1.0.3.tgz", + "integrity": "sha1-WRUzDZDs7VV9LZOKMcbdIU2cY60=", + "dev": true, + "optional": true + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "requires": { + "lcid": "1.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "osenv": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", + "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", + "dev": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz", + "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=", + "dev": true + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "1.1.0" + } + }, + "p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", + "dev": true + }, + "package": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package/-/package-1.0.1.tgz", + "integrity": "sha1-0lofmeJQbcsn1nBLg9yooxLk7cw=", + "dev": true + }, + "pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", + "dev": true + }, + "parse-asn1": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", + "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", + "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" + } + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "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" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + } + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "1.3.1" + } + }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", + "dev": true + }, + "path-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + }, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + } + } + }, + "pbkdf2": { + "version": "3.0.14", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz", + "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==", + "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" + } + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "phantomjs-prebuilt": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz", + "integrity": "sha1-79ISpKOWbTZHaE6ouniFSb4q7+8=", + "dev": true, + "requires": { + "es6-promise": "4.1.1", + "extract-zip": "1.6.6", + "fs-extra": "1.0.0", + "hasha": "2.2.0", + "kew": "0.7.0", + "progress": "1.1.8", + "request": "2.83.0", + "request-progress": "2.0.1", + "which": "1.3.0" + }, + "dependencies": { + "which": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", + "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "dev": true, + "requires": { + "isexe": "2.0.0" + } + } + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "2.0.4" + } + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "2.1.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "2.0.0" + } + } + } + }, + "portfinder": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.13.tgz", + "integrity": "sha1-uzLs2HwnEErm7kS1o8y/Drsa7ek=", + "dev": true, + "requires": { + "async": "1.5.2", + "debug": "2.6.9", + "mkdirp": "0.5.1" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + } + } + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.3.2", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "postcss-value-parser": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", + "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=", + "dev": true + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "pretty-bytes": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-3.0.1.tgz", + "integrity": "sha1-J9AAjXeAY6C0gRuzXHnxvV1fvM8=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "progress": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", + "dev": true + }, + "proxy-addr": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.2.tgz", + "integrity": "sha1-ZXFQT0e7mI7IGAJT+F3X4UlSvew=", + "dev": true, + "requires": { + "forwarded": "0.1.2", + "ipaddr.js": "1.5.2" + } + }, + "prr": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", + "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "public-encrypt": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", + "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", + "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" + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true, + "optional": true + }, + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", + "dev": true + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "querystringify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-0.0.4.tgz", + "integrity": "sha1-DPf4T5Rj/wrlHExLFC2VvjdyTZw=", + "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==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "randomfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.3.tgz", + "integrity": "sha512-YL6GrhrWoic0Eq8rXVbMptH7dAxCs0J+mh5Y0euNekPPYaxEmdVGim6GdoxoRzKW2yJoU8tueifS7mYxvcFDEQ==", + "dev": true, + "requires": { + "randombytes": "2.0.5", + "safe-buffer": "5.1.1" + } + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "dev": true + }, + "raw-body": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.1.7.tgz", + "integrity": "sha1-rf6s4uT7MJgFgBTQjActzFl1h3Q=", + "dev": true, + "requires": { + "bytes": "2.4.0", + "iconv-lite": "0.4.13", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", + "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=", + "dev": true + }, + "iconv-lite": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", + "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=", + "dev": true + } + } + }, + "rc": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.2.tgz", + "integrity": "sha1-2M6ctX6NZNnHut2YdsfDTL48cHc=", + "dev": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + } + }, + "read-all-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz", + "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1", + "readable-stream": "2.3.3" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + } + }, + "readable-stream": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "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" + } + }, + "readdirp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "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" + }, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + } + } + }, + "readline2": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", + "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "mute-stream": "0.0.5" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "2.1.0", + "strip-indent": "1.0.1" + } + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "dev": true, + "requires": { + "is-equal-shallow": "0.1.3" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "1.0.2" + } + }, + "replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", + "dev": true + }, + "request": { + "version": "2.83.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", + "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", + "dev": true, + "requires": { + "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", + "hawk": "6.0.2", + "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", + "stringstream": "0.0.5", + "tough-cookie": "2.3.3", + "tunnel-agent": "0.6.0", + "uuid": "3.1.0" + }, + "dependencies": { + "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.1.1" + } + }, + "uuid": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", + "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==", + "dev": true + } + } + }, + "request-progress": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-2.0.1.tgz", + "integrity": "sha1-XTa7V5YcZzqlt4jbyBQf3yO0Tgg=", + "dev": true, + "requires": { + "throttleit": "1.0.0" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "requizzle": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.1.tgz", + "integrity": "sha1-aUPDUwxNmn5G8c3dUcFY/GcM294=", + "dev": true, + "requires": { + "underscore": "1.6.0" + }, + "dependencies": { + "underscore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", + "dev": true + } + } + }, + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "3.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "requires": { + "exit-hook": "1.1.1", + "onetime": "1.1.0" + } + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "requires": { + "align-text": "0.1.4" + } + }, + "rimraf": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", + "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", + "dev": true + }, + "ripemd160": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", + "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", + "dev": true, + "requires": { + "hash-base": "2.0.2", + "inherits": "2.0.3" + } + }, + "rtlcss": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-2.2.1.tgz", + "integrity": "sha512-JjQ5DlrmwiItAjlmhoxrJq5ihgZcE0wMFxt7S17bIrt4Lw0WwKKFk+viRhvodB/0falyG/5fiO043ZDh6/aqTw==", + "dev": true, + "requires": { + "chalk": "2.3.0", + "findup": "0.1.5", + "mkdirp": "0.5.1", + "postcss": "6.0.14", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", + "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.5.0" + } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "postcss": { + "version": "6.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.14.tgz", + "integrity": "sha512-NJ1z0f+1offCgadPhz+DvGm5Mkci+mmV5BqD13S992o0Xk9eElxUfPPF+t2ksH5R/17gz4xVK8KWocUQ5o3Rog==", + "dev": true, + "requires": { + "chalk": "2.3.0", + "source-map": "0.6.1", + "supports-color": "4.5.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + } + } + }, + "run-async": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", + "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", + "dev": true, + "requires": { + "once": "1.4.0" + } + }, + "rx-lite": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", + "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=", + "dev": true + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "dev": true + }, + "sanitize-html": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-1.15.0.tgz", + "integrity": "sha512-1jWLToWx8ZV53Z1Jg+2fHl8dNFsxvQt2Cmrk4o/z1+MUdB5EXSU0QVuzlGGhfp7cQrYbEEfMO/TUWHfkBUqujQ==", + "dev": true, + "requires": { + "htmlparser2": "3.9.2", + "lodash.escaperegexp": "4.1.2", + "srcset": "1.0.0", + "xtend": "4.0.1" + }, + "dependencies": { + "entities": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", + "dev": true + }, + "htmlparser2": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", + "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", + "dev": true, + "requires": { + "domelementtype": "1.3.0", + "domhandler": "2.3.0", + "domutils": "1.5.1", + "entities": "1.1.1", + "inherits": "2.0.3", + "readable-stream": "2.3.3" + } + } + } + }, + "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" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "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" + } + }, + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + }, + "yargs": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", + "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" + } + } + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "scss-tokenizer": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", + "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", + "dev": true, + "requires": { + "js-base64": "2.3.2", + "source-map": "0.4.4" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "seek-bzip": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz", + "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", + "dev": true, + "requires": { + "commander": "2.8.1" + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "selfsigned": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.1.tgz", + "integrity": "sha1-v4y3uDJWxFUeMTR8YxF3jbme7FI=", + "dev": true, + "requires": { + "node-forge": "0.6.33" + } + }, + "semver": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", + "dev": true + }, + "semver-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-1.0.0.tgz", + "integrity": "sha1-kqSWkGX5xwxpR1PVUkj8aPj2Usk=", + "dev": true, + "optional": true + }, + "semver-truncate": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz", + "integrity": "sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g=", + "dev": true, + "optional": true, + "requires": { + "semver": "5.4.1" + } + }, + "send": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz", + "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "1.1.1", + "destroy": "1.0.4", + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "etag": "1.8.1", + "fresh": "0.5.2", + "http-errors": "1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.3.1" + }, + "dependencies": { + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "dev": true, + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": "1.3.1" + } + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", + "dev": true + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "dev": true + } + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "requires": { + "accepts": "1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "1.0.3", + "http-errors": "1.6.2", + "mime-types": "2.1.17", + "parseurl": "1.3.2" + }, + "dependencies": { + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "dev": true, + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": "1.4.0" + } + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", + "dev": true + } + } + }, + "serve-static": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz", + "integrity": "sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ==", + "dev": true, + "requires": { + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "parseurl": "1.3.2", + "send": "0.16.1" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "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==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shelljs": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", + "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=", + "dev": true + }, + "sigmund": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "sntp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", + "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", + "dev": true, + "requires": { + "hoek": "4.2.0" + } + }, + "sockjs": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.18.tgz", + "integrity": "sha1-2bKJMWyn33dZXvKZ4HXw+TfrQgc=", + "dev": true, + "requires": { + "faye-websocket": "0.10.0", + "uuid": "2.0.3" + } + }, + "sockjs-client": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.4.tgz", + "integrity": "sha1-W6vjhrd15M8U51IJEUUmVAFsixI=", + "dev": true, + "requires": { + "debug": "2.6.9", + "eventsource": "0.1.6", + "faye-websocket": "0.11.1", + "inherits": "2.0.3", + "json3": "3.3.2", + "url-parse": "1.2.0" + }, + "dependencies": { + "faye-websocket": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", + "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", + "dev": true, + "requires": { + "websocket-driver": "0.7.0" + } + } + } + }, + "source-list-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", + "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==", + "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 + }, + "sparkles": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz", + "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=", + "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-expression-parse": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", + "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "dev": true + }, + "spdx-license-ids": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", + "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "dev": true + }, + "spdy": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz", + "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=", + "dev": true, + "requires": { + "debug": "2.6.9", + "handle-thing": "1.2.5", + "http-deceiver": "1.2.7", + "safe-buffer": "5.1.1", + "select-hose": "2.0.0", + "spdy-transport": "2.0.20" + } + }, + "spdy-transport": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.0.20.tgz", + "integrity": "sha1-c15yBUxIayNU/onnAiVgBKOazk0=", + "dev": true, + "requires": { + "debug": "2.6.9", + "detect-node": "2.0.3", + "hpack.js": "2.1.6", + "obuf": "1.1.1", + "readable-stream": "2.3.3", + "safe-buffer": "5.1.1", + "wbuf": "1.7.2" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "squeak": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/squeak/-/squeak-1.3.0.tgz", + "integrity": "sha1-MwRQN7ZDiLVnZ0uEMiplIQc5FsM=", + "dev": true, + "optional": true, + "requires": { + "chalk": "1.1.3", + "console-stream": "0.1.1", + "lpad-align": "1.1.2" + } + }, + "srcset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/srcset/-/srcset-1.0.0.tgz", + "integrity": "sha1-pWad4StC87HV6D7QPHEEb8SPQe8=", + "dev": true, + "requires": { + "array-uniq": "1.0.3", + "number-is-nan": "1.0.1" + } + }, + "sshpk": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", + "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "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" + } + }, + "stack-trace": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz", + "integrity": "sha1-qPbq7KkGdMMz58Q5U/J1tFFRBpU=", + "dev": true + }, + "stat-mode": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-0.2.2.tgz", + "integrity": "sha1-5sgLYjEj19gM8TLOU480YokHJQI=", + "dev": true + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true + }, + "stream-browserify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", + "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.3" + } + }, + "stream-buffers": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", + "integrity": "sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ=", + "dev": true + }, + "stream-combiner2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", + "dev": true, + "requires": { + "duplexer2": "0.1.4", + "readable-stream": "2.3.3" + } + }, + "stream-http": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", + "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==", + "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" + } + }, + "stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "dev": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "stringstream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + }, + "strip-bom-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz", + "integrity": "sha1-5xRDmFd9Uaa+0PoZlPoF9D/ZiO4=", + "dev": true, + "requires": { + "first-chunk-stream": "1.0.0", + "strip-bom": "2.0.0" + } + }, + "strip-dirs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-1.1.1.tgz", + "integrity": "sha1-lgu9EoeETzl1pFWKoQOoJV4kVqA=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "get-stdin": "4.0.1", + "is-absolute": "0.1.7", + "is-natural-number": "2.1.1", + "minimist": "1.2.0", + "sum-up": "1.0.3" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "4.0.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "strip-outer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.0.tgz", + "integrity": "sha1-qsC6YNLpDF1PJ1/Yhp/ZotMQ/7g=", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5" + } + }, + "sum-up": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sum-up/-/sum-up-1.0.3.tgz", + "integrity": "sha1-HGYfZnBX9jvLeHWqFDi8FiUlFW4=", + "dev": true, + "requires": { + "chalk": "1.1.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + }, + "svgo": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.6.6.tgz", + "integrity": "sha1-s0CIkDbyD5tEdUMHfQ9Vc+0ETAg=", + "dev": true, + "optional": true, + "requires": { + "coa": "1.0.4", + "colors": "1.1.2", + "csso": "2.0.0", + "js-yaml": "3.6.1", + "mkdirp": "0.5.1", + "sax": "1.2.4", + "whet.extend": "0.9.9" + }, + "dependencies": { + "argparse": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "dev": true, + "optional": true, + "requires": { + "sprintf-js": "1.0.3" + } + }, + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true, + "optional": true + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true, + "optional": true + }, + "js-yaml": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.6.1.tgz", + "integrity": "sha1-bl/mfYsgXOTSL60Ft3geja3MSzA=", + "dev": true, + "optional": true, + "requires": { + "argparse": "1.0.9", + "esprima": "2.7.3" + } + } + } + }, + "taffydb": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", + "integrity": "sha1-fLy2S1oUG2ou/CxdLGe04VCyomg=", + "dev": true + }, + "tapable": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", + "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=", + "dev": true + }, + "tar": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "dev": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "tar-stream": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.4.tgz", + "integrity": "sha1-NlSc8E7RrumyowwBQyUiONr5QBY=", + "dev": true, + "requires": { + "bl": "1.2.1", + "end-of-stream": "1.4.0", + "readable-stream": "2.3.3", + "xtend": "4.0.1" + } + }, + "tempfile": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-1.1.1.tgz", + "integrity": "sha1-W8xOrsxKsscH2LwR2ZzMmiyyh/I=", + "dev": true, + "requires": { + "os-tmpdir": "1.0.2", + "uuid": "2.0.3" + } + }, + "temporary": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/temporary/-/temporary-0.0.8.tgz", + "integrity": "sha1-oYqYHSi6jKNgJ/s8MFOMPst0CsA=", + "dev": true, + "requires": { + "package": "1.0.1" + } + }, + "throttleit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", + "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "dev": true, + "requires": { + "readable-stream": "1.0.34", + "xtend": "4.0.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "through2-filter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz", + "integrity": "sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=", + "dev": true, + "requires": { + "through2": "2.0.3", + "xtend": "4.0.1" + }, + "dependencies": { + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "requires": { + "readable-stream": "2.3.3", + "xtend": "4.0.1" + } + } + } + }, + "thunky": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-0.1.0.tgz", + "integrity": "sha1-vzAUaCTituZ7Dy16Ssi+smkIaE4=", + "dev": true + }, + "time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", + "dev": true + }, + "timed-out": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-3.1.3.tgz", + "integrity": "sha1-lYYL/MXHbCd/j4Mm/Q9bLiDrohc=", + "dev": true + }, + "timers-browserify": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.4.tgz", + "integrity": "sha512-uZYhyU3EX8O7HQP+J9fTVYwsq90Vr68xPEFo7yrVImIxYvHgukBEgOB/SgGoorWVTzGM/3Z+wUNnboA4M8jWrg==", + "dev": true, + "requires": { + "setimmediate": "1.0.5" + } + }, + "tiny-lr": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-0.2.1.tgz", + "integrity": "sha1-s/26gC5dVqM8L28QeUsy5Hescp0=", + "dev": true, + "requires": { + "body-parser": "1.14.2", + "debug": "2.2.0", + "faye-websocket": "0.10.0", + "livereload-js": "2.2.2", + "parseurl": "1.3.2", + "qs": "5.1.0" + }, + "dependencies": { + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true, + "requires": { + "ms": "0.7.1" + } + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + }, + "qs": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-5.1.0.tgz", + "integrity": "sha1-TZMuXH6kEcynajEtOaYGIA/VDNk=", + "dev": true + } + } + }, + "to-absolute-glob": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz", + "integrity": "sha1-HN+kcqnvUMI57maZm2YsoOs5k38=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1" + } + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "tough-cookie": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", + "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", + "dev": true, + "requires": { + "punycode": "1.4.1" + } + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", + "dev": true, + "requires": { + "escape-string-regexp": "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 + }, + "tunnel-agent": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", + "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", + "dev": true + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "optional": true + }, + "type-is": { + "version": "1.6.15", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", + "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.17" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "uglify-js": { + "version": "2.7.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.7.5.tgz", + "integrity": "sha1-RhLAx7qu4rp8SH3kkErhIgefLKg=", + "dev": true, + "requires": { + "async": "0.2.10", + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, + "dependencies": { + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", + "dev": true + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true + }, + "uglifyjs-webpack-plugin": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", + "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", + "dev": true, + "requires": { + "source-map": "0.5.7", + "uglify-js": "2.8.29", + "webpack-sources": "1.0.2" + }, + "dependencies": { + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "requires": { + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + } + } + } + }, + "underscore": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", + "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=", + "dev": true + }, + "underscore-contrib": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/underscore-contrib/-/underscore-contrib-0.3.0.tgz", + "integrity": "sha1-ZltmwkeD+PorGMn4y7Dix9SMJsc=", + "dev": true, + "requires": { + "underscore": "1.6.0" + }, + "dependencies": { + "underscore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", + "dev": true + } + } + }, + "underscore.string": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz", + "integrity": "sha1-18D6KvXVoaZ/QlPa7pgTLnM/Dxk=", + "dev": true + }, + "unique-stream": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz", + "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=", + "dev": true, + "requires": { + "json-stable-stringify": "1.0.1", + "through2-filter": "2.0.0" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unzip-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz", + "integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4=", + "dev": true + }, + "uri-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/uri-path/-/uri-path-1.0.0.tgz", + "integrity": "sha1-l0fwGDWJM8Md4PzP2C0TjmcmLjI=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "url-parse": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.2.0.tgz", + "integrity": "sha512-DT1XbYAfmQP65M/mE6OALxmXzZ/z1+e5zk2TcSKe/KiYbNGZxgtttzC0mR/sjopbpOXcbniq7eIKmocJnUWlEw==", + "dev": true, + "requires": { + "querystringify": "1.0.0", + "requires-port": "1.0.0" + }, + "dependencies": { + "querystringify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-1.0.0.tgz", + "integrity": "sha1-YoYkIRLFtxL6ZU5SZlK/ahP/Bcs=", + "dev": true + } + } + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "dev": true, + "requires": { + "prepend-http": "1.0.4" + } + }, + "url-regex": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/url-regex/-/url-regex-3.2.0.tgz", + "integrity": "sha1-260eDJ4p4QXdCx8J9oYvf9tIJyQ=", + "dev": true, + "optional": true, + "requires": { + "ip-regex": "1.0.3" + } + }, + "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" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", + "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", + "dev": true + }, + "vali-date": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", + "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", + "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "dev": true, + "requires": { + "spdx-correct": "1.0.2", + "spdx-expression-parse": "1.0.4" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + } + }, + "vinyl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", + "dev": true, + "requires": { + "clone": "1.0.3", + "clone-stats": "0.0.1", + "replace-ext": "0.0.1" + } + }, + "vinyl-assign": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/vinyl-assign/-/vinyl-assign-1.2.1.tgz", + "integrity": "sha1-TRmIkbVRWRHXcajNnFSApGoHSkU=", + "dev": true, + "requires": { + "object-assign": "4.1.1", + "readable-stream": "2.3.3" + } + }, + "vinyl-fs": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz", + "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=", + "dev": true, + "requires": { + "duplexify": "3.5.1", + "glob-stream": "5.3.5", + "graceful-fs": "4.1.11", + "gulp-sourcemaps": "1.6.0", + "is-valid-glob": "0.3.0", + "lazystream": "1.0.0", + "lodash.isequal": "4.5.0", + "merge-stream": "1.0.1", + "mkdirp": "0.5.1", + "object-assign": "4.1.1", + "readable-stream": "2.3.3", + "strip-bom": "2.0.0", + "strip-bom-stream": "1.0.0", + "through2": "2.0.3", + "through2-filter": "2.0.0", + "vali-date": "1.0.0", + "vinyl": "1.2.0" + }, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "requires": { + "readable-stream": "2.3.3", + "xtend": "4.0.1" + } + } + } + }, + "vm-browserify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "dev": true, + "requires": { + "indexof": "0.0.1" + } + }, + "walkdir": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.0.11.tgz", + "integrity": "sha1-oW0CXrkxvQO1LzCMrtD0D86+lTI=", + "dev": true + }, + "ware": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ware/-/ware-1.3.0.tgz", + "integrity": "sha1-0bFPOdLiy0q4xAmPdW/ksWTkc9Q=", + "dev": true, + "requires": { + "wrap-fn": "0.1.5" + } + }, + "watchpack": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.4.0.tgz", + "integrity": "sha1-ShRyvLuVK9Cpu0A2gB+VTfs5+qw=", + "dev": true, + "requires": { + "async": "2.6.0", + "chokidar": "1.7.0", + "graceful-fs": "4.1.11" + }, + "dependencies": { + "async": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", + "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", + "dev": true, + "requires": { + "lodash": "4.17.4" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + } + } + }, + "wbuf": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.2.tgz", + "integrity": "sha1-1pe5nx9ZUS3ydRvkJ2nBWAtYAf4=", + "dev": true, + "requires": { + "minimalistic-assert": "1.0.0" + } + }, + "webpack": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.8.1.tgz", + "integrity": "sha512-5ZXLWWsMqHKFr5y0N3Eo5IIisxeEeRAajNq4mELb/WELOR7srdbQk2N5XiyNy2A/AgvlR3AmeBCZJW8lHrolbw==", + "dev": true, + "requires": { + "acorn": "5.2.1", + "acorn-dynamic-import": "2.0.2", + "ajv": "5.3.0", + "ajv-keywords": "2.1.1", + "async": "2.6.0", + "enhanced-resolve": "3.4.1", + "escope": "3.6.0", + "interpret": "1.0.4", + "json-loader": "0.5.7", + "json5": "0.5.1", + "loader-runner": "2.3.0", + "loader-utils": "1.1.0", + "memory-fs": "0.4.1", + "mkdirp": "0.5.1", + "node-libs-browser": "2.0.0", + "source-map": "0.5.7", + "supports-color": "4.5.0", + "tapable": "0.2.8", + "uglifyjs-webpack-plugin": "0.4.6", + "watchpack": "1.4.0", + "webpack-sources": "1.0.2", + "yargs": "8.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "async": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", + "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", + "dev": true, + "requires": { + "lodash": "4.17.4" + } + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "2.0.0" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "strip-bom": "3.0.0" + } + }, + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "dev": true, + "requires": { + "execa": "0.7.0", + "lcid": "1.0.0", + "mem": "1.1.0" + } + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "2.3.0" + } + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "2.0.0", + "normalize-package-data": "2.4.0", + "path-type": "2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "2.1.0", + "read-pkg": "2.0.0" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "yargs": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", + "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", + "dev": true, + "requires": { + "camelcase": "4.1.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "2.1.0", + "read-pkg-up": "2.0.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": "7.0.0" + } + }, + "yargs-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", + "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "dev": true, + "requires": { + "camelcase": "4.1.0" + } + } + } + }, + "webpack-dev-middleware": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.0.tgz", + "integrity": "sha1-007++y7dp+HTtdvgcolRMhllFwk=", + "dev": true, + "requires": { + "memory-fs": "0.4.1", + "mime": "1.4.1", + "path-is-absolute": "1.0.1", + "range-parser": "1.2.0", + "time-stamp": "2.0.0" + }, + "dependencies": { + "time-stamp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.0.0.tgz", + "integrity": "sha1-lcakRTDhW6jW9KPsuMOj+sRto1c=", + "dev": true + } + } + }, + "webpack-dev-server": { + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.9.4.tgz", + "integrity": "sha512-thrqC0EQEoSjXeYgP6pUXcUCZ+LNrKsDPn+mItLnn5VyyNZOJKd06hUP5vqkYwL8nWWXsii0loSF9NHNccT6ow==", + "dev": true, + "requires": { + "ansi-html": "0.0.7", + "array-includes": "3.0.3", + "bonjour": "3.5.0", + "chokidar": "1.7.0", + "compression": "1.7.1", + "connect-history-api-fallback": "1.4.0", + "debug": "3.1.0", + "del": "3.0.0", + "express": "4.16.2", + "html-entities": "1.2.1", + "http-proxy-middleware": "0.17.4", + "import-local": "0.1.1", + "internal-ip": "1.2.0", + "ip": "1.1.5", + "killable": "1.0.0", + "loglevel": "1.5.1", + "opn": "5.1.0", + "portfinder": "1.0.13", + "selfsigned": "1.10.1", + "serve-index": "1.9.1", + "sockjs": "0.3.18", + "sockjs-client": "1.1.4", + "spdy": "3.4.7", + "strip-ansi": "3.0.1", + "supports-color": "4.5.0", + "webpack-dev-middleware": "1.12.0", + "yargs": "6.6.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + } + }, + "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" + } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + }, + "yargs": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", + "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", + "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": "4.2.1" + } + }, + "yargs-parser": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", + "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", + "dev": true, + "requires": { + "camelcase": "3.0.0" + } + } + } + }, + "webpack-sources": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.0.2.tgz", + "integrity": "sha512-Y7UddMCv6dGjy81nBv6nuQeFFIt5aalHm7uyDsAsW86nZwfOVPGRr3XMjEQLaT+WKo8rlzhC9qtbJvYKLtAwaw==", + "dev": true, + "requires": { + "source-list-map": "2.0.0", + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "websocket-driver": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", + "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", + "dev": true, + "requires": { + "http-parser-js": "0.4.9", + "websocket-extensions": "0.1.2" + } + }, + "websocket-extensions": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.2.tgz", + "integrity": "sha1-Dhh4HeYpoYMIzhSBZQ9n/6JpOl0=", + "dev": true + }, + "whet.extend": { + "version": "0.9.9", + "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", + "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=", + "dev": true, + "optional": true + }, + "which": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz", + "integrity": "sha1-RgwdoPgQED0DIam2M6+eV15kSG8=", + "dev": true + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "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==", + "dev": true, + "requires": { + "string-width": "1.0.2" + } + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true + }, + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1" + } + }, + "wrap-fn": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/wrap-fn/-/wrap-fn-0.1.5.tgz", + "integrity": "sha1-8htuQQFv9KfjFyDbxjoJAWvfmEU=", + "dev": true, + "requires": { + "co": "3.1.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "xmlbuilder": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz", + "integrity": "sha1-aSSGc0ELS6QuGmE2VR0pIjNap3M=", + "dev": true + }, + "xmlcreate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-1.0.2.tgz", + "integrity": "sha1-+mv3YqYKQT+z3Y9LA8WyaSONMI8=", + "dev": true + }, + "xmlrpc": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/xmlrpc/-/xmlrpc-1.3.2.tgz", + "integrity": "sha1-JrLqNHhI0Ciqx+dRS1NRl23j6D0=", + "dev": true, + "requires": { + "sax": "1.2.4", + "xmlbuilder": "8.2.2" + } + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + }, + "dependencies": { + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true + } + } + }, + "yargs-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", + "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "dev": true, + "requires": { + "camelcase": "3.0.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + } + } + }, + "yauzl": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.9.1.tgz", + "integrity": "sha1-qBmB6nCleUYTOIPwKcWCGok1mn8=", + "dev": true, + "requires": { + "buffer-crc32": "0.2.13", + "fd-slicer": "1.0.1" + } + }, + "zip-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.2.0.tgz", + "integrity": "sha1-qLxF9MG0lpnGuQGYuqyqzbzUugQ=", + "dev": true, + "requires": { + "archiver-utils": "1.3.0", + "compress-commons": "1.2.2", + "lodash": "4.17.4", + "readable-stream": "2.3.3" + }, + "dependencies": { + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + } + } + } + } +} From 07f1d287c91736583c57ae94c284e1b9aad99009 Mon Sep 17 00:00:00 2001 From: "Dominik Schilling (ocean90)" Date: Mon, 13 Nov 2017 18:59:59 +0000 Subject: [PATCH 017/537] Revert [42166]. Due to running `npm install` an updated `npm-shrinkwrap.json` file was committed. See #42483. git-svn-id: https://develop.svn.wordpress.org/branches/4.9@42167 602fd350-edb4-49c9-b593-d223f7449a82 --- npm-shrinkwrap.json | 9832 ------------------------------------------- 1 file changed, 9832 deletions(-) delete mode 100644 npm-shrinkwrap.json diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json deleted file mode 100644 index 0190e4aa8abc2..0000000000000 --- a/npm-shrinkwrap.json +++ /dev/null @@ -1,9832 +0,0 @@ -{ - "name": "WordPress", - "version": "4.9.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "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 - }, - "accepts": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", - "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", - "dev": true, - "requires": { - "mime-types": "2.1.17", - "negotiator": "0.6.1" - } - }, - "acorn": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.2.1.tgz", - "integrity": "sha512-jG0u7c4Ly+3QkkW18V+NRDN+4bWHdln30NL1ZL2AvFZZmQe/BfopYCtghCKKVBUSetZ4QKcyA0pY6/4Gw8Pv8w==", - "dev": true - }, - "acorn-dynamic-import": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", - "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", - "dev": true, - "requires": { - "acorn": "4.0.13" - }, - "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", - "dev": true - } - } - }, - "ajv": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.3.0.tgz", - "integrity": "sha1-RBT/dKUIecII7l/cgm4ywwNUnto=", - "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.1" - }, - "dependencies": { - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - } - } - }, - "ajv-keywords": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", - "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", - "dev": true - }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "dev": true, - "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" - } - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true - }, - "ansi-escapes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", - "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", - "dev": true - }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", - "dev": true, - "requires": { - "micromatch": "2.3.11", - "normalize-path": "2.1.1" - } - }, - "applause": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/applause/-/applause-1.2.2.tgz", - "integrity": "sha1-qEaFeegfZzl7tWNMKZU77c0PVsA=", - "dev": true, - "requires": { - "cson-parser": "1.3.5", - "js-yaml": "3.10.0", - "lodash": "3.10.1" - }, - "dependencies": { - "argparse": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", - "dev": true, - "requires": { - "sprintf-js": "1.0.3" - } - }, - "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", - "dev": true - }, - "js-yaml": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", - "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", - "dev": true, - "requires": { - "argparse": "1.0.9", - "esprima": "4.0.0" - } - }, - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - } - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "archive-type": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-3.2.0.tgz", - "integrity": "sha1-nNnABpV+vpX62tW9YJiUKoE3N/Y=", - "dev": true, - "requires": { - "file-type": "3.9.0" - } - }, - "archiver": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-1.3.0.tgz", - "integrity": "sha1-TyGU1tj5nfP1MeaIHxTxXVX6ryI=", - "dev": true, - "requires": { - "archiver-utils": "1.3.0", - "async": "2.6.0", - "buffer-crc32": "0.2.13", - "glob": "7.1.2", - "lodash": "4.17.4", - "readable-stream": "2.3.3", - "tar-stream": "1.5.4", - "walkdir": "0.0.11", - "zip-stream": "1.2.0" - }, - "dependencies": { - "async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", - "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", - "dev": true, - "requires": { - "lodash": "4.17.4" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "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" - } - }, - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } - } - } - }, - "archiver-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.3.0.tgz", - "integrity": "sha1-5QtMCccL89aA4y/xt5lOn52JUXQ=", - "dev": true, - "requires": { - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "lazystream": "1.0.0", - "lodash": "4.17.4", - "normalize-path": "2.1.1", - "readable-stream": "2.3.3" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "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" - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } - } - } - }, - "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=", - "dev": true, - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.3" - } - }, - "argparse": { - "version": "0.1.16", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz", - "integrity": "sha1-z9AeD7uj1srtBJ+9dY1A9lGW9Xw=", - "dev": true, - "requires": { - "underscore": "1.7.0", - "underscore.string": "2.4.0" - }, - "dependencies": { - "underscore.string": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz", - "integrity": "sha1-jN2PusTi0uoefi6Al8QvRCKA+Fs=", - "dev": true - } - } - }, - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "1.1.0" - } - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "array-differ": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", - "dev": true - }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true - }, - "array-flatten": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.1.tgz", - "integrity": "sha1-Qmu52oQJDBg42BLIFQryCoMx4pY=", - "dev": true - }, - "array-includes": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", - "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", - "dev": true, - "requires": { - "define-properties": "1.1.2", - "es-abstract": "1.9.0" - } - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "1.0.3" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "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==", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" - } - }, - "assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", - "dev": true, - "requires": { - "util": "0.10.3" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "async": { - "version": "0.1.22", - "resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz", - "integrity": "sha1-D8GqoIig4+8Ovi2IMbqw3PiEUGE=", - "dev": true - }, - "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", - "dev": true - }, - "async-each-series": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-1.1.0.tgz", - "integrity": "sha1-9C/YFV048hpbjqB8KOBj7RcAsTg=", - "dev": true, - "optional": true - }, - "async-foreach": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", - "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "autoprefixer": { - "version": "6.7.7", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", - "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", - "dev": true, - "requires": { - "browserslist": "1.7.7", - "caniuse-db": "1.0.30000760", - "normalize-range": "0.1.2", - "num2fraction": "1.2.2", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" - } - }, - "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 - }, - "aws4": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", - "dev": true - }, - "babylon": { - "version": "7.0.0-beta.19", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.19.tgz", - "integrity": "sha512-Vg0C9s/REX6/WIXN37UKpv5ZhRi6A4pjHlpkE34+8/a6c2W1Q692n3hmc+SZG5lKRnaExLUbxtJ1SVT+KaCQ/A==", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base64-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", - "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==", - "dev": true - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "beeper": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", - "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=", - "dev": true - }, - "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", - "dev": true - }, - "bin-build": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/bin-build/-/bin-build-2.2.0.tgz", - "integrity": "sha1-EfjdYfcP/Por3KpbRvXo/t1CIcw=", - "dev": true, - "optional": true, - "requires": { - "archive-type": "3.2.0", - "decompress": "3.0.0", - "download": "4.4.3", - "exec-series": "1.0.3", - "rimraf": "2.2.8", - "tempfile": "1.1.1", - "url-regex": "3.2.0" - } - }, - "bin-check": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-2.0.0.tgz", - "integrity": "sha1-hvjm9CU4k99g3DFpV/WvAqywWTA=", - "dev": true, - "optional": true, - "requires": { - "executable": "1.1.0" - } - }, - "bin-version": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-1.0.4.tgz", - "integrity": "sha1-nrSY7m/Xb3q5p8FgQ2+JV5Q1144=", - "dev": true, - "optional": true, - "requires": { - "find-versions": "1.2.1" - } - }, - "bin-version-check": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-2.1.0.tgz", - "integrity": "sha1-5OXfKQuQaffRETJAMe/BP90RpbA=", - "dev": true, - "optional": true, - "requires": { - "bin-version": "1.0.4", - "minimist": "1.2.0", - "semver": "4.3.6", - "semver-truncate": "1.1.2" - }, - "dependencies": { - "semver": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", - "dev": true, - "optional": true - } - } - }, - "bin-wrapper": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-3.0.2.tgz", - "integrity": "sha1-Z9MwYmLksaXy+I7iNGT2plVneus=", - "dev": true, - "optional": true, - "requires": { - "bin-check": "2.0.0", - "bin-version-check": "2.1.0", - "download": "4.4.3", - "each-async": "1.1.1", - "lazy-req": "1.1.0", - "os-filter-obj": "1.0.3" - } - }, - "binary-extensions": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.10.0.tgz", - "integrity": "sha1-muuabF6IY4qtFx4Wf1kAq+JINdA=", - "dev": true - }, - "bl": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz", - "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=", - "dev": true, - "requires": { - "readable-stream": "2.3.3" - } - }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", - "dev": true - }, - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true - }, - "body-parser": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.14.2.tgz", - "integrity": "sha1-EBXLH+LEQ4WCWVgdtTMy+NDPUPk=", - "dev": true, - "requires": { - "bytes": "2.2.0", - "content-type": "1.0.4", - "debug": "2.2.0", - "depd": "1.1.1", - "http-errors": "1.3.1", - "iconv-lite": "0.4.13", - "on-finished": "2.3.0", - "qs": "5.2.0", - "raw-body": "2.1.7", - "type-is": "1.6.15" - }, - "dependencies": { - "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true, - "requires": { - "ms": "0.7.1" - } - }, - "iconv-lite": { - "version": "0.4.13", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", - "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=", - "dev": true - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", - "dev": true - }, - "qs": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-5.2.0.tgz", - "integrity": "sha1-qfMRQq9GjLcrJbMBNrokVoNJFr4=", - "dev": true - } - } - }, - "bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", - "dev": true, - "requires": { - "array-flatten": "2.1.1", - "deep-equal": "1.0.1", - "dns-equal": "1.0.0", - "dns-txt": "2.0.2", - "multicast-dns": "6.1.1", - "multicast-dns-service-types": "1.1.0" - } - }, - "boom": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", - "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", - "dev": true, - "requires": { - "hoek": "4.2.0" - } - }, - "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", - "dev": true, - "requires": { - "balanced-match": "1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "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==", - "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" - } - }, - "browserify-cipher": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", - "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", - "dev": true, - "requires": { - "browserify-aes": "1.1.1", - "browserify-des": "1.0.0", - "evp_bytestokey": "1.0.3" - } - }, - "browserify-des": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", - "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", - "dev": true, - "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.0", - "inherits": "2.0.3" - } - }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "randombytes": "2.0.5" - } - }, - "browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "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" - } - }, - "browserify-zlib": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", - "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", - "dev": true, - "requires": { - "pako": "0.2.9" - } - }, - "browserslist": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", - "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", - "dev": true, - "requires": { - "caniuse-db": "1.0.30000760", - "electron-to-chromium": "1.3.27" - } - }, - "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" - } - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true - }, - "buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", - "dev": true - }, - "buffer-to-vinyl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-to-vinyl/-/buffer-to-vinyl-1.1.0.tgz", - "integrity": "sha1-APFfruOreh3aLN5tkSG//dB7ImI=", - "dev": true, - "requires": { - "file-type": "3.9.0", - "readable-stream": "2.3.3", - "uuid": "2.0.3", - "vinyl": "1.2.0" - } - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true - }, - "bytes": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.2.0.tgz", - "integrity": "sha1-/TVGSkA/b5EXwt42Cez/nK4ABYg=", - "dev": true - }, - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true - }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "dev": true, - "requires": { - "camelcase": "2.1.1", - "map-obj": "1.0.1" - } - }, - "caniuse-db": { - "version": "1.0.30000760", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000760.tgz", - "integrity": "sha1-PqKUc+t4psywny63Osnh3r/sUo0=", - "dev": true - }, - "capture-stack-trace": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", - "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "catharsis": { - "version": "0.8.9", - "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.9.tgz", - "integrity": "sha1-mMyJDKZS3S7w5ws3klMQ/56Q/Is=", - "dev": true, - "requires": { - "underscore-contrib": "0.3.0" - } - }, - "caw": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/caw/-/caw-1.2.0.tgz", - "integrity": "sha1-/7Im/n78VHKI3GLuPpcHPCEtEDQ=", - "dev": true, - "requires": { - "get-proxy": "1.1.0", - "is-obj": "1.0.1", - "object-assign": "3.0.0", - "tunnel-agent": "0.4.3" - }, - "dependencies": { - "object-assign": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", - "dev": true - } - } - }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "dev": true, - "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" - } - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "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" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "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" - }, - "dependencies": { - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "requires": { - "is-glob": "2.0.1" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - } - } - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" - } - }, - "clap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", - "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", - "dev": true, - "optional": true, - "requires": { - "chalk": "1.1.3" - } - }, - "clean-css": { - "version": "3.4.28", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz", - "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=", - "dev": true, - "requires": { - "commander": "2.8.1", - "source-map": "0.4.4" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - } - } - }, - "cli": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", - "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=", - "dev": true, - "requires": { - "exit": "0.1.2", - "glob": "7.1.2" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "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" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } - } - } - }, - "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "dev": true, - "requires": { - "restore-cursor": "1.0.1" - } - }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true - }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true, - "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", - "wordwrap": "0.0.2" - } - }, - "clone": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", - "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=", - "dev": true - }, - "clone-stats": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", - "dev": true - }, - "co": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/co/-/co-3.1.0.tgz", - "integrity": "sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g=", - "dev": true - }, - "coa": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", - "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", - "dev": true, - "optional": true, - "requires": { - "q": "1.5.1" - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "coffee-script": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz", - "integrity": "sha1-FQ1rTLUiiUNp7+1qIQHCC8f0pPQ=", - "dev": true - }, - "color-convert": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", - "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "colors": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", - "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=", - "dev": true - }, - "combined-stream": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", - "dev": true, - "requires": { - "delayed-stream": "1.0.0" - } - }, - "commander": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", - "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", - "dev": true, - "requires": { - "graceful-readlink": "1.0.1" - } - }, - "compress-commons": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.2.tgz", - "integrity": "sha1-UkqfEJA/OoEzibAiXSfEi7dRiQ8=", - "dev": true, - "requires": { - "buffer-crc32": "0.2.13", - "crc32-stream": "2.0.0", - "normalize-path": "2.1.1", - "readable-stream": "2.3.3" - } - }, - "compressible": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.12.tgz", - "integrity": "sha1-xZpcmdt2dn6YdlAOJx72OzSTvWY=", - "dev": true, - "requires": { - "mime-db": "1.30.0" - } - }, - "compression": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.1.tgz", - "integrity": "sha1-7/JgPvwuIs+G810uuTWJ+YdTc9s=", - "dev": true, - "requires": { - "accepts": "1.3.4", - "bytes": "3.0.0", - "compressible": "2.0.12", - "debug": "2.6.9", - "on-headers": "1.0.1", - "safe-buffer": "5.1.1", - "vary": "1.1.2" - }, - "dependencies": { - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", - "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "typedarray": "0.0.6" - } - }, - "connect-history-api-fallback": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.4.0.tgz", - "integrity": "sha1-PbJPlz9LkjsOgvYZzg3wJBHKYj0=", - "dev": true - }, - "console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "dev": true, - "requires": { - "date-now": "0.1.4" - } - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true - }, - "console-stream": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/console-stream/-/console-stream-0.1.1.tgz", - "integrity": "sha1-oJX+B7IEZZVfL6/Si11yvM2UnUQ=", - "dev": true, - "optional": true - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", - "dev": true - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true - }, - "convert-source-map": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz", - "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=", - "dev": true - }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "crc": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.5.0.tgz", - "integrity": "sha1-mLi6fUiWZbo5efWbITgTdBAaGWQ=", - "dev": true - }, - "crc32-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz", - "integrity": "sha1-483TtN8xaN10494/u8t7KX/pCPQ=", - "dev": true, - "requires": { - "crc": "3.5.0", - "readable-stream": "2.3.3" - } - }, - "create-ecdh": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", - "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.0" - } - }, - "create-error-class": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", - "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", - "dev": true, - "requires": { - "capture-stack-trace": "1.0.0" - } - }, - "create-hash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", - "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", - "dev": true, - "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.3", - "ripemd160": "2.0.1", - "sha.js": "2.4.9" - } - }, - "create-hmac": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", - "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", - "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" - } - }, - "cross-spawn": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", - "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", - "dev": true, - "requires": { - "lru-cache": "4.1.1", - "which": "1.3.0" - }, - "dependencies": { - "lru-cache": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", - "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", - "dev": true, - "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" - } - }, - "which": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", - "dev": true, - "requires": { - "isexe": "2.0.0" - } - } - } - }, - "cryptiles": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", - "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", - "dev": true, - "requires": { - "boom": "5.2.0" - }, - "dependencies": { - "boom": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", - "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", - "dev": true, - "requires": { - "hoek": "4.2.0" - } - } - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "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" - } - }, - "cson-parser": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/cson-parser/-/cson-parser-1.3.5.tgz", - "integrity": "sha1-fsZ14DkUVTO/KmqFYHPxWZ2cLSQ=", - "dev": true, - "requires": { - "coffee-script": "1.12.7" - }, - "dependencies": { - "coffee-script": { - "version": "1.12.7", - "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz", - "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==", - "dev": true - } - } - }, - "csso": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-2.0.0.tgz", - "integrity": "sha1-F4tDpEYhIhwndWCG9THgL0KQDug=", - "dev": true, - "optional": true, - "requires": { - "clap": "1.2.3", - "source-map": "0.5.7" - } - }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true, - "requires": { - "array-find-index": "1.0.2" - } - }, - "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "dev": true, - "requires": { - "es5-ext": "0.10.35" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "1.0.0" - } - }, - "date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", - "dev": true - }, - "dateformat": { - "version": "1.0.2-1.2.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz", - "integrity": "sha1-sCIMAt6YYXQztyhRz0fePfLNvuk=", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decompress": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/decompress/-/decompress-3.0.0.tgz", - "integrity": "sha1-rx3VDQbjv8QyRh033hGzjA2ZG+0=", - "dev": true, - "requires": { - "buffer-to-vinyl": "1.1.0", - "concat-stream": "1.6.0", - "decompress-tar": "3.1.0", - "decompress-tarbz2": "3.1.0", - "decompress-targz": "3.1.0", - "decompress-unzip": "3.4.0", - "stream-combiner2": "1.1.1", - "vinyl-assign": "1.2.1", - "vinyl-fs": "2.4.4" - } - }, - "decompress-tar": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-3.1.0.tgz", - "integrity": "sha1-IXx4n5uURQ76rcXF5TeXj8MzxGY=", - "dev": true, - "requires": { - "is-tar": "1.0.0", - "object-assign": "2.1.1", - "strip-dirs": "1.1.1", - "tar-stream": "1.5.4", - "through2": "0.6.5", - "vinyl": "0.4.6" - }, - "dependencies": { - "clone": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", - "dev": true - }, - "object-assign": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", - "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=", - "dev": true - }, - "vinyl": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", - "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", - "dev": true, - "requires": { - "clone": "0.2.0", - "clone-stats": "0.0.1" - } - } - } - }, - "decompress-tarbz2": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-3.1.0.tgz", - "integrity": "sha1-iyOTVoE1X58YnYclag+L3ZbZZm0=", - "dev": true, - "requires": { - "is-bzip2": "1.0.0", - "object-assign": "2.1.1", - "seek-bzip": "1.0.5", - "strip-dirs": "1.1.1", - "tar-stream": "1.5.4", - "through2": "0.6.5", - "vinyl": "0.4.6" - }, - "dependencies": { - "clone": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", - "dev": true - }, - "object-assign": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", - "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=", - "dev": true - }, - "vinyl": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", - "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", - "dev": true, - "requires": { - "clone": "0.2.0", - "clone-stats": "0.0.1" - } - } - } - }, - "decompress-targz": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-3.1.0.tgz", - "integrity": "sha1-ssE9+YFmJomRtxXWRH9kLpaW9aA=", - "dev": true, - "requires": { - "is-gzip": "1.0.0", - "object-assign": "2.1.1", - "strip-dirs": "1.1.1", - "tar-stream": "1.5.4", - "through2": "0.6.5", - "vinyl": "0.4.6" - }, - "dependencies": { - "clone": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", - "dev": true - }, - "object-assign": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", - "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=", - "dev": true - }, - "vinyl": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", - "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", - "dev": true, - "requires": { - "clone": "0.2.0", - "clone-stats": "0.0.1" - } - } - } - }, - "decompress-unzip": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-3.4.0.tgz", - "integrity": "sha1-YUdbQVIGa74/7hL51inRX+ZHjus=", - "dev": true, - "requires": { - "is-zip": "1.0.0", - "read-all-stream": "3.1.0", - "stat-mode": "0.2.2", - "strip-dirs": "1.1.1", - "through2": "2.0.3", - "vinyl": "1.2.0", - "yauzl": "2.9.1" - }, - "dependencies": { - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true, - "requires": { - "readable-stream": "2.3.3", - "xtend": "4.0.1" - } - } - } - }, - "deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", - "dev": true - }, - "deep-extend": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", - "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", - "dev": true - }, - "deep-for-each": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/deep-for-each/-/deep-for-each-1.0.6.tgz", - "integrity": "sha1-r6DOJJxYSSqXIFOUeKGNN+GxC64=", - "dev": true, - "requires": { - "is-plain-object": "2.0.4" - } - }, - "define-properties": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", - "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", - "dev": true, - "requires": { - "foreach": "2.0.5", - "object-keys": "1.0.11" - } - }, - "del": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", - "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", - "dev": true, - "requires": { - "globby": "6.1.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.0", - "p-map": "1.2.0", - "pify": "3.0.0", - "rimraf": "2.2.8" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true - }, - "depd": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", - "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", - "dev": true - }, - "des.js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", - "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" - } - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "detect-node": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.3.tgz", - "integrity": "sha1-ogM8CcyOFY03dI+951B4Mr1s4Sc=", - "dev": true - }, - "diff": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/diff/-/diff-2.2.3.tgz", - "integrity": "sha1-YOr9DSjukG5Oj/ClLBIpUhAzv5k=", - "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=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "miller-rabin": "4.0.1", - "randombytes": "2.0.5" - } - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", - "dev": true - }, - "dns-packet": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.2.2.tgz", - "integrity": "sha512-kN+DjfGF7dJGUL7nWRktL9Z18t1rWP3aQlyZdY8XlpvU3Nc6GeFTQApftcjtWKxAZfiggZSGrCEoszNgvnpwDg==", - "dev": true, - "requires": { - "ip": "1.1.5", - "safe-buffer": "5.1.1" - } - }, - "dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", - "dev": true, - "requires": { - "buffer-indexof": "1.1.1" - } - }, - "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", - "dev": true, - "requires": { - "domelementtype": "1.1.3", - "entities": "1.1.1" - }, - "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", - "dev": true - }, - "entities": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", - "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", - "dev": true - } - } - }, - "domain-browser": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", - "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", - "dev": true - }, - "domelementtype": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", - "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", - "dev": true - }, - "domhandler": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", - "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", - "dev": true, - "requires": { - "domelementtype": "1.3.0" - } - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, - "requires": { - "dom-serializer": "0.1.0", - "domelementtype": "1.3.0" - } - }, - "download": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/download/-/download-4.4.3.tgz", - "integrity": "sha1-qlX9rTktldS2jowr4D4MKqIbqaw=", - "dev": true, - "requires": { - "caw": "1.2.0", - "concat-stream": "1.6.0", - "each-async": "1.1.1", - "filenamify": "1.2.1", - "got": "5.7.1", - "gulp-decompress": "1.2.0", - "gulp-rename": "1.2.2", - "is-url": "1.2.2", - "object-assign": "4.1.1", - "read-all-stream": "3.1.0", - "readable-stream": "2.3.3", - "stream-combiner2": "1.1.1", - "vinyl": "1.2.0", - "vinyl-fs": "2.4.4", - "ware": "1.3.0" - } - }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "dev": true, - "requires": { - "readable-stream": "2.3.3" - } - }, - "duplexify": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.1.tgz", - "integrity": "sha512-j5goxHTwVED1Fpe5hh3q9R93Kip0Bg2KVAt4f8CEYM3UEwYcPSvWbXaUQOzdX/HtiNomipv+gU7ASQPDbV7pGQ==", - "dev": true, - "requires": { - "end-of-stream": "1.4.0", - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "stream-shift": "1.0.0" - } - }, - "each-async": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/each-async/-/each-async-1.1.1.tgz", - "integrity": "sha1-3uUim98KtrogEqOV4bhpq/iBNHM=", - "dev": true, - "requires": { - "onetime": "1.1.0", - "set-immediate-shim": "1.0.1" - } - }, - "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.27", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.27.tgz", - "integrity": "sha1-eOy4o5kGYYe7N07t412ccFZagD0=", - "dev": true - }, - "elliptic": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", - "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" - } - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true - }, - "encodeurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", - "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=", - "dev": true - }, - "end-of-stream": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz", - "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=", - "dev": true, - "requires": { - "once": "1.4.0" - } - }, - "enhanced-resolve": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", - "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "memory-fs": "0.4.1", - "object-assign": "4.1.1", - "tapable": "0.2.8" - }, - "dependencies": { - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - } - } - }, - "entities": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", - "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", - "dev": true - }, - "errno": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", - "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=", - "dev": true, - "requires": { - "prr": "0.0.0" - } - }, - "error-ex": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", - "dev": true, - "requires": { - "is-arrayish": "0.2.1" - } - }, - "es-abstract": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.9.0.tgz", - "integrity": "sha512-kk3IJoKo7A3pWJc0OV8yZ/VEX2oSUytfekrJiqoxBlKJMFAJVJVpGdHClCCTdv+Fn2zHfpDHHIelMFhZVfef3Q==", - "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": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", - "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", - "dev": true, - "requires": { - "is-callable": "1.1.3", - "is-date-object": "1.0.1", - "is-symbol": "1.0.1" - } - }, - "es5-ext": { - "version": "0.10.35", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.35.tgz", - "integrity": "sha1-GO6FjOajxFx9eekcFfzKnsVoSU8=", - "dev": true, - "requires": { - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.35", - "es6-symbol": "3.1.1" - } - }, - "es6-map": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", - "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.35", - "es6-iterator": "2.0.3", - "es6-set": "0.1.5", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" - } - }, - "es6-promise": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.1.1.tgz", - "integrity": "sha512-OaU1hHjgJf+b0NzsxCg7NdIYERD6Hy/PEmFLTjw+b65scuisG3Kt4QoTvJ66BBkPZ581gr0kpoVzKnxniM8nng==", - "dev": true - }, - "es6-set": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", - "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.35", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" - } - }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.35" - } - }, - "es6-weak-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", - "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.35", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" - } - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "escope": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", - "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", - "dev": true, - "requires": { - "es6-map": "0.1.5", - "es6-weak-map": "2.0.2", - "esrecurse": "4.2.0", - "estraverse": "4.2.0" - } - }, - "esprima": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", - "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=", - "dev": true - }, - "esrecurse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", - "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", - "dev": true, - "requires": { - "estraverse": "4.2.0", - "object-assign": "4.1.1" - } - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true - }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.35" - } - }, - "eventemitter2": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", - "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", - "dev": true - }, - "eventemitter3": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", - "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", - "dev": true - }, - "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", - "dev": true - }, - "eventsource": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz", - "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", - "dev": true, - "requires": { - "original": "1.0.0" - } - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "requires": { - "md5.js": "1.3.4", - "safe-buffer": "5.1.1" - } - }, - "exec-buffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/exec-buffer/-/exec-buffer-2.0.1.tgz", - "integrity": "sha1-ACijG+CxRgth0HX5avRYO54zXqA=", - "dev": true, - "optional": true, - "requires": { - "rimraf": "2.2.8", - "tempfile": "1.1.1" - } - }, - "exec-series": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/exec-series/-/exec-series-1.0.3.tgz", - "integrity": "sha1-bSV6m+rEgqhyx3g7yGFYOfx3FDo=", - "dev": true, - "optional": true, - "requires": { - "async-each-series": "1.1.0", - "object-assign": "4.1.1" - } - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "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" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "4.1.1", - "shebang-command": "1.2.0", - "which": "1.3.0" - } - }, - "lru-cache": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", - "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", - "dev": true, - "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" - } - }, - "which": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", - "dev": true, - "requires": { - "isexe": "2.0.0" - } - } - } - }, - "executable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/executable/-/executable-1.1.0.tgz", - "integrity": "sha1-h3mA6REvM5EGbaNyZd562ENKtNk=", - "dev": true, - "optional": true, - "requires": { - "meow": "3.7.0" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, - "exit-hook": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", - "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", - "dev": true - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "requires": { - "is-posix-bracket": "0.1.1" - } - }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true, - "requires": { - "fill-range": "2.2.3" - } - }, - "express": { - "version": "4.16.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz", - "integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=", - "dev": true, - "requires": { - "accepts": "1.3.4", - "array-flatten": "1.1.1", - "body-parser": "1.18.2", - "content-disposition": "0.5.2", - "content-type": "1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "1.1.1", - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "etag": "1.8.1", - "finalhandler": "1.1.0", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.2", - "qs": "6.5.1", - "range-parser": "1.2.0", - "safe-buffer": "5.1.1", - "send": "0.16.1", - "serve-static": "1.13.1", - "setprototypeof": "1.1.0", - "statuses": "1.3.1", - "type-is": "1.6.15", - "utils-merge": "1.0.1", - "vary": "1.1.2" - }, - "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "body-parser": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", - "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", - "dev": true, - "requires": { - "bytes": "3.0.0", - "content-type": "1.0.4", - "debug": "2.6.9", - "depd": "1.1.1", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", - "on-finished": "2.3.0", - "qs": "6.5.1", - "raw-body": "2.3.2", - "type-is": "1.6.15" - } - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true - }, - "http-errors": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", - "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", - "dev": true, - "requires": { - "depd": "1.1.1", - "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": "1.3.1" - }, - "dependencies": { - "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", - "dev": true - } - } - }, - "iconv-lite": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", - "dev": true - }, - "raw-body": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", - "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", - "dev": true, - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", - "unpipe": "1.0.0" - } - }, - "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", - "dev": true - } - } - }, - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", - "dev": true - }, - "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" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - } - } - }, - "extract-zip": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.6.tgz", - "integrity": "sha1-EpDt6NINCHK0Kf0/NRyhKOxe+Fw=", - "dev": true, - "requires": { - "concat-stream": "1.6.0", - "debug": "2.6.9", - "mkdirp": "0.5.0", - "yauzl": "2.4.1" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "mkdirp": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", - "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "yauzl": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", - "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", - "dev": true, - "requires": { - "fd-slicer": "1.0.1" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fancy-log": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.0.tgz", - "integrity": "sha1-Rb4X0Cu5kX1gzP/UmVyZnmyMmUg=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "time-stamp": "1.1.0" - } - }, - "fast-deep-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", - "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true - }, - "faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", - "dev": true, - "requires": { - "websocket-driver": "0.7.0" - } - }, - "fd-slicer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", - "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", - "dev": true, - "requires": { - "pend": "1.2.0" - } - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" - } - }, - "file-sync-cmp": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz", - "integrity": "sha1-peeo/7+kk7Q7kju9TKiaU7Y7YSs=", - "dev": true - }, - "file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", - "dev": true - }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true - }, - "filename-reserved-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-1.0.0.tgz", - "integrity": "sha1-5hz4BfDeHJhFZ9A4bcXfUO5a9+Q=", - "dev": true - }, - "filenamify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-1.2.1.tgz", - "integrity": "sha1-qfL/0RxQO+0wABUCknI3jx8TZaU=", - "dev": true, - "requires": { - "filename-reserved-regex": "1.0.0", - "strip-outer": "1.0.0", - "trim-repeated": "1.0.0" - } - }, - "fill-range": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", - "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", - "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" - } - }, - "finalhandler": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", - "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.3.1", - "unpipe": "1.0.0" - }, - "dependencies": { - "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", - "dev": true - } - } - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" - } - }, - "find-versions": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-1.2.1.tgz", - "integrity": "sha1-y96fEuOFdaCvG+G5osXV/Y8Ya2I=", - "dev": true, - "optional": true, - "requires": { - "array-uniq": "1.0.3", - "get-stdin": "4.0.1", - "meow": "3.7.0", - "semver-regex": "1.0.0" - } - }, - "findup": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/findup/-/findup-0.1.5.tgz", - "integrity": "sha1-itkpozk7rGJ5V6fl3kYjsGsOLOs=", - "dev": true, - "requires": { - "colors": "0.6.2", - "commander": "2.1.0" - }, - "dependencies": { - "commander": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.1.0.tgz", - "integrity": "sha1-0SG7roYNmZKj1Re6lvVliOR8Z4E=", - "dev": true - } - } - }, - "findup-sync": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz", - "integrity": "sha1-fz56l7gjksZTvwZYm9hRkOk8NoM=", - "dev": true, - "requires": { - "glob": "3.2.11", - "lodash": "2.4.2" - }, - "dependencies": { - "glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", - "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "minimatch": "0.3.0" - } - }, - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", - "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", - "dev": true - }, - "minimatch": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", - "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", - "dev": true, - "requires": { - "lru-cache": "2.7.3", - "sigmund": "1.0.1" - } - } - } - }, - "first-chunk-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", - "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=", - "dev": true - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, - "requires": { - "for-in": "1.0.2" - } - }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz", - "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=", - "dev": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.17" - } - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", - "dev": true - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true - }, - "fs-extra": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", - "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "2.4.0", - "klaw": "1.3.1" - }, - "dependencies": { - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - } - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz", - "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", - "dev": true, - "optional": true, - "requires": { - "nan": "2.7.0", - "node-pre-gyp": "0.6.39" - }, - "dependencies": { - "abbrev": { - "version": "1.1.0", - "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", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.2.9" - } - }, - "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", - "bundled": true, - "dev": true, - "optional": true - }, - "co": { - "version": "4.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "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, - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "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 - } - } - }, - "debug": { - "version": "2.6.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.4.2", - "bundled": true, - "dev": true, - "optional": true - }, - "delayed-stream": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "ecc-jsbn": { - "version": "0.1.1", - "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" - } - }, - "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" - } - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "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 - } - } - }, - "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" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "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", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.0", - "sshpk": "1.13.0" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true - }, - "ini": { - "version": "1.3.4", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "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" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "node-pre-gyp": { - "version": "0.6.39", - "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" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1.1.0", - "osenv": "0.1.4" - } - }, - "npmlog": { - "version": "4.1.0", - "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" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "oauth-sign": { - "version": "0.8.2", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "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", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.1", - "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" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "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", - "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" - } - }, - "rimraf": { - "version": "2.6.1", - "bundled": true, - "dev": true, - "requires": { - "glob": "7.1.2" - } - }, - "safe-buffer": { - "version": "5.0.1", - "bundled": true, - "dev": true - }, - "semver": { - "version": "5.3.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "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" - } - }, - "string_decoder": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "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" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "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", - "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" - } - }, - "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" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true - } - } - }, - "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.2.8" - }, - "dependencies": { - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - } - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "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" - } - }, - "gaze": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz", - "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=", - "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" - } - }, - "get-caller-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", - "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", - "dev": true - }, - "get-proxy": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-1.1.0.tgz", - "integrity": "sha1-iUhUSRvFkbDxR9euVw9cZ4tyVus=", - "dev": true, - "requires": { - "rc": "1.2.2" - } - }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "getobject": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", - "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "1.0.0" - } - }, - "gifsicle": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/gifsicle/-/gifsicle-3.0.4.tgz", - "integrity": "sha1-9Fy17RAWW2ZdySng6TKLbIId+js=", - "dev": true, - "optional": true, - "requires": { - "bin-build": "2.2.0", - "bin-wrapper": "3.0.2", - "logalot": "2.1.0" - } - }, - "glob": { - "version": "3.1.21", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", - "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", - "dev": true, - "requires": { - "graceful-fs": "1.2.3", - "inherits": "1.0.2", - "minimatch": "0.2.14" - }, - "dependencies": { - "inherits": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", - "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=", - "dev": true - } - } - }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, - "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" - }, - "dependencies": { - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "requires": { - "is-glob": "2.0.1" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - } - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" - } - }, - "glob-stream": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz", - "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=", - "dev": true, - "requires": { - "extend": "3.0.1", - "glob": "5.0.15", - "glob-parent": "3.1.0", - "micromatch": "2.3.11", - "ordered-read-streams": "0.3.0", - "through2": "0.6.5", - "to-absolute-glob": "0.1.1", - "unique-stream": "2.2.1" - }, - "dependencies": { - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "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" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } - } - } - }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "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" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "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" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } - } - } - }, - "globule": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.0.tgz", - "integrity": "sha1-HcScaCLdnoovoAuiopUAboZkvQk=", - "dev": true, - "requires": { - "glob": "7.1.2", - "lodash": "4.17.4", - "minimatch": "3.0.4" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "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" - } - }, - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } - } - } - }, - "glogg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.0.tgz", - "integrity": "sha1-f+DxmfV6yQbPUS/urY+Q7kooT8U=", - "dev": true, - "requires": { - "sparkles": "1.0.0" - } - }, - "got": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-5.7.1.tgz", - "integrity": "sha1-X4FjWmHkplifGAVp6k44FoClHzU=", - "dev": true, - "requires": { - "create-error-class": "3.0.2", - "duplexer2": "0.1.4", - "is-redirect": "1.0.0", - "is-retry-allowed": "1.1.0", - "is-stream": "1.1.0", - "lowercase-keys": "1.0.0", - "node-status-codes": "1.0.0", - "object-assign": "4.1.1", - "parse-json": "2.2.0", - "pinkie-promise": "2.0.1", - "read-all-stream": "3.1.0", - "readable-stream": "2.3.3", - "timed-out": "3.1.3", - "unzip-response": "1.0.2", - "url-parse-lax": "1.0.0" - } - }, - "graceful-fs": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", - "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=", - "dev": true - }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", - "dev": true - }, - "grunt": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz", - "integrity": "sha1-VpN81RlDJK3/bSB2MYMqnWuk5/A=", - "dev": true, - "requires": { - "async": "0.1.22", - "coffee-script": "1.3.3", - "colors": "0.6.2", - "dateformat": "1.0.2-1.2.3", - "eventemitter2": "0.4.14", - "exit": "0.1.2", - "findup-sync": "0.1.3", - "getobject": "0.1.0", - "glob": "3.1.21", - "grunt-legacy-log": "0.1.3", - "grunt-legacy-util": "0.2.0", - "hooker": "0.2.3", - "iconv-lite": "0.2.11", - "js-yaml": "2.0.5", - "lodash": "0.9.2", - "minimatch": "0.2.14", - "nopt": "1.0.10", - "rimraf": "2.2.8", - "underscore.string": "2.2.1", - "which": "1.0.9" - } - }, - "grunt-banner": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/grunt-banner/-/grunt-banner-0.6.0.tgz", - "integrity": "sha1-P4eQIdEj+linuloLb7a+QStYhaw=", - "dev": true, - "requires": { - "chalk": "1.1.3" - } - }, - "grunt-contrib-clean": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-1.0.0.tgz", - "integrity": "sha1-ay7ZQRfix//jLuBFeMlv5GJam20=", - "dev": true, - "requires": { - "async": "1.5.2", - "rimraf": "2.6.2" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "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" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dev": true, - "requires": { - "glob": "7.1.2" - } - } - } - }, - "grunt-contrib-compress": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-compress/-/grunt-contrib-compress-1.3.0.tgz", - "integrity": "sha1-XlwmogBJCCPH93KIr9LXNQ2Vxj0=", - "dev": true, - "requires": { - "archiver": "1.3.0", - "chalk": "1.1.3", - "lodash": "4.17.4", - "pretty-bytes": "3.0.1", - "stream-buffers": "2.2.0" - }, - "dependencies": { - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", - "dev": true - } - } - }, - "grunt-contrib-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-1.0.1.tgz", - "integrity": "sha1-YVCYYwhOhx1+ht5IwBUlntl3Rb0=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "source-map": "0.5.7" - } - }, - "grunt-contrib-copy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-copy/-/grunt-contrib-copy-1.0.0.tgz", - "integrity": "sha1-cGDGWB6QS4qw0A8HbgqPbj58NXM=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "file-sync-cmp": "0.1.1" - } - }, - "grunt-contrib-cssmin": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/grunt-contrib-cssmin/-/grunt-contrib-cssmin-1.0.2.tgz", - "integrity": "sha1-FzTL09hMpzZHWLflj/GOUqpgu3Y=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "clean-css": "3.4.28", - "maxmin": "1.1.0" - } - }, - "grunt-contrib-imagemin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/grunt-contrib-imagemin/-/grunt-contrib-imagemin-1.0.1.tgz", - "integrity": "sha1-5Ho1YTN29MqpwfkERlA8rhyUTXk=", - "dev": true, - "requires": { - "async": "1.5.2", - "chalk": "1.1.3", - "gulp-rename": "1.2.2", - "imagemin": "4.0.0", - "pretty-bytes": "3.0.1" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - } - } - }, - "grunt-contrib-jshint": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-1.0.0.tgz", - "integrity": "sha1-MPQFpR3mVr+m6wKbmkZLn+AqQCo=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "hooker": "0.2.3", - "jshint": "2.9.5" - } - }, - "grunt-contrib-qunit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-qunit/-/grunt-contrib-qunit-1.3.0.tgz", - "integrity": "sha1-naxijP1OyBWZhjPbc7Ur2z3byZ4=", - "dev": true, - "requires": { - "grunt-lib-phantomjs": "1.1.0" - } - }, - "grunt-contrib-uglify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-2.0.0.tgz", - "integrity": "sha1-jJlw1pCTbN5tJaoRk1Sb2SkBaTA=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "lodash.assign": "4.2.0", - "maxmin": "1.1.0", - "uglify-js": "2.7.5", - "uri-path": "1.0.0" - } - }, - "grunt-contrib-watch": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-1.0.0.tgz", - "integrity": "sha1-hKGnodar0m7VaEE0lscxM+mQAY8=", - "dev": true, - "requires": { - "async": "1.5.2", - "gaze": "1.1.2", - "lodash": "3.10.1", - "tiny-lr": "0.2.1" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - } - } - }, - "grunt-includes": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/grunt-includes/-/grunt-includes-0.5.4.tgz", - "integrity": "sha1-fGyS4LM3rOYjMYHZ+NMWodSY4yk=", - "dev": true - }, - "grunt-jsdoc": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/grunt-jsdoc/-/grunt-jsdoc-2.2.0.tgz", - "integrity": "sha512-3/HzvzcG7gxlm4YefR5ELbsUB/bIFCeX3CbUeAANKGMfNUZ2tDQ+Pp0YRb/VWHjyu+v8wG6n1PD8yIjubjEDeg==", - "dev": true, - "requires": { - "cross-spawn": "3.0.1", - "jsdoc": "3.5.5" - } - }, - "grunt-jsvalidate": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/grunt-jsvalidate/-/grunt-jsvalidate-0.2.2.tgz", - "integrity": "sha1-/QlEJYiNbmPfqgbPsJ7gUrjrvo8=", - "dev": true, - "requires": { - "esprima": "1.0.4" - } - }, - "grunt-legacy-log": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-0.1.3.tgz", - "integrity": "sha1-7ClCboAwIa9ZAp+H0vnNczWgVTE=", - "dev": true, - "requires": { - "colors": "0.6.2", - "grunt-legacy-log-utils": "0.1.1", - "hooker": "0.2.3", - "lodash": "2.4.2", - "underscore.string": "2.3.3" - }, - "dependencies": { - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", - "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", - "dev": true - }, - "underscore.string": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz", - "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=", - "dev": true - } - } - }, - "grunt-legacy-log-utils": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-0.1.1.tgz", - "integrity": "sha1-wHBrndkGThFvNvI/5OawSGcsD34=", - "dev": true, - "requires": { - "colors": "0.6.2", - "lodash": "2.4.2", - "underscore.string": "2.3.3" - }, - "dependencies": { - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", - "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", - "dev": true - }, - "underscore.string": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz", - "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=", - "dev": true - } - } - }, - "grunt-legacy-util": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz", - "integrity": "sha1-kzJIhNv343qf98Am3/RR2UqeVUs=", - "dev": true, - "requires": { - "async": "0.1.22", - "exit": "0.1.2", - "getobject": "0.1.0", - "hooker": "0.2.3", - "lodash": "0.9.2", - "underscore.string": "2.2.1", - "which": "1.0.9" - } - }, - "grunt-lib-phantomjs": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/grunt-lib-phantomjs/-/grunt-lib-phantomjs-1.1.0.tgz", - "integrity": "sha1-np7c3Z/S3UDgwYHJQ3HVcqpe6tI=", - "dev": true, - "requires": { - "eventemitter2": "0.4.14", - "phantomjs-prebuilt": "2.1.16", - "rimraf": "2.6.2", - "semver": "5.4.1", - "temporary": "0.0.8" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "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" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dev": true, - "requires": { - "glob": "7.1.2" - } - } - } - }, - "grunt-patch-wordpress": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/grunt-patch-wordpress/-/grunt-patch-wordpress-0.4.2.tgz", - "integrity": "sha1-wO38taMmPpk8wWk98RsrPkSG2Mg=", - "dev": true, - "requires": { - "inquirer": "0.12.0", - "request": "2.69.0", - "underscore": "1.8.3", - "underscore.string": "3.3.4", - "xmlrpc": "1.3.2" - }, - "dependencies": { - "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", - "dev": true - }, - "async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", - "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", - "dev": true, - "requires": { - "lodash": "4.17.4" - } - }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", - "dev": true - }, - "bl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.0.3.tgz", - "integrity": "sha1-/FQhoo/UImA2w7OJGmaiW8ZNIm4=", - "dev": true, - "requires": { - "readable-stream": "2.0.6" - } - }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "caseless": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", - "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", - "dev": true - }, - "commander": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", - "dev": true - }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "dev": true, - "requires": { - "boom": "2.10.1" - } - }, - "form-data": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-1.0.1.tgz", - "integrity": "sha1-rjFduaSQf6BlUCMEpm13M0de43w=", - "dev": true, - "requires": { - "async": "2.6.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.17" - } - }, - "har-validator": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", - "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "commander": "2.11.0", - "is-my-json-valid": "2.16.1", - "pinkie-promise": "2.0.1" - } - }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "dev": true, - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" - } - }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "dev": true - }, - "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "dev": true, - "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.1", - "sshpk": "1.13.1" - } - }, - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", - "dev": true - }, - "qs": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.0.4.tgz", - "integrity": "sha1-UQGdhHIMk5uCc36EVWp4Izjs6ns=", - "dev": true - }, - "readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "0.10.31", - "util-deprecate": "1.0.2" - } - }, - "request": { - "version": "2.69.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.69.0.tgz", - "integrity": "sha1-z5HS4AB1KxIXFVwAUkGRGZGiNGo=", - "dev": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "bl": "1.0.3", - "caseless": "0.11.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "1.0.1", - "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.17", - "node-uuid": "1.4.8", - "oauth-sign": "0.8.2", - "qs": "6.0.4", - "stringstream": "0.0.5", - "tough-cookie": "2.2.2", - "tunnel-agent": "0.4.3" - } - }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "tough-cookie": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.2.2.tgz", - "integrity": "sha1-yDoYMPTl7wuT7yo0iOck+N4Basc=", - "dev": true - }, - "underscore": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", - "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", - "dev": true - }, - "underscore.string": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.4.tgz", - "integrity": "sha1-LCo/n4PmR2L9xF5s6sZRQoZCE9s=", - "dev": true, - "requires": { - "sprintf-js": "1.0.3", - "util-deprecate": "1.0.2" - } - } - } - }, - "grunt-postcss": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/grunt-postcss/-/grunt-postcss-0.7.2.tgz", - "integrity": "sha1-V7dke4d9Qq0yz51M0RAID/+0OKs=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "diff": "2.2.3", - "es6-promise": "3.3.1", - "postcss": "5.2.18" - }, - "dependencies": { - "es6-promise": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", - "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=", - "dev": true - } - } - }, - "grunt-replace": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/grunt-replace/-/grunt-replace-1.0.1.tgz", - "integrity": "sha1-kKeVMvuJBB/kJ8h9QlI4sPiGZRo=", - "dev": true, - "requires": { - "applause": "1.2.2", - "chalk": "1.1.3", - "file-sync-cmp": "0.1.1", - "lodash": "4.17.4" - }, - "dependencies": { - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", - "dev": true - } - } - }, - "grunt-rtlcss": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/grunt-rtlcss/-/grunt-rtlcss-2.0.1.tgz", - "integrity": "sha1-6eYc5DdAY5f546Sxv2aeR+cf/MM=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "rtlcss": "2.2.1" - } - }, - "grunt-sass": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/grunt-sass/-/grunt-sass-1.2.1.tgz", - "integrity": "sha1-+4e2yqxG+zLUUXf9Lktv90aMGRk=", - "dev": true, - "requires": { - "each-async": "1.1.1", - "node-sass": "3.13.1", - "object-assign": "4.1.1" - } - }, - "grunt-webpack": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/grunt-webpack/-/grunt-webpack-3.0.2.tgz", - "integrity": "sha512-ghSkdCdvbF1SpI46qDT9FYqw5ZP5sSYbEQU/DwzoJE1K42xizAZ5Rv3kzpaRdJT4yvu8/6fO5+wne3/y0n74QA==", - "dev": true, - "requires": { - "deep-for-each": "1.0.6", - "lodash": "4.17.4" - }, - "dependencies": { - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", - "dev": true - } - } - }, - "gulp-decompress": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gulp-decompress/-/gulp-decompress-1.2.0.tgz", - "integrity": "sha1-jutlpeAV+O2FMsr+KEVJYGJvDcc=", - "dev": true, - "requires": { - "archive-type": "3.2.0", - "decompress": "3.0.0", - "gulp-util": "3.0.8", - "readable-stream": "2.3.3" - } - }, - "gulp-rename": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.2.2.tgz", - "integrity": "sha1-OtRCh2PwXidk3sHGfYaNsnVoeBc=", - "dev": true - }, - "gulp-sourcemaps": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz", - "integrity": "sha1-uG/zSdgBzrVuHZ59x7vLS33uYAw=", - "dev": true, - "requires": { - "convert-source-map": "1.5.0", - "graceful-fs": "4.1.11", - "strip-bom": "2.0.0", - "through2": "2.0.3", - "vinyl": "1.2.0" - }, - "dependencies": { - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true, - "requires": { - "readable-stream": "2.3.3", - "xtend": "4.0.1" - } - } - } - }, - "gulp-util": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", - "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", - "dev": true, - "requires": { - "array-differ": "1.0.0", - "array-uniq": "1.0.3", - "beeper": "1.1.1", - "chalk": "1.1.3", - "dateformat": "2.2.0", - "fancy-log": "1.3.0", - "gulplog": "1.0.0", - "has-gulplog": "0.1.0", - "lodash._reescape": "3.0.0", - "lodash._reevaluate": "3.0.0", - "lodash._reinterpolate": "3.0.0", - "lodash.template": "3.6.2", - "minimist": "1.2.0", - "multipipe": "0.1.2", - "object-assign": "3.0.0", - "replace-ext": "0.0.1", - "through2": "2.0.3", - "vinyl": "0.5.3" - }, - "dependencies": { - "dateformat": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", - "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=", - "dev": true - }, - "object-assign": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", - "dev": true - }, - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true, - "requires": { - "readable-stream": "2.3.3", - "xtend": "4.0.1" - } - }, - "vinyl": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", - "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", - "dev": true, - "requires": { - "clone": "1.0.3", - "clone-stats": "0.0.1", - "replace-ext": "0.0.1" - } - } - } - }, - "gulplog": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", - "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", - "dev": true, - "requires": { - "glogg": "1.0.0" - } - }, - "gzip-size": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-1.0.0.tgz", - "integrity": "sha1-Zs+LEBBHInuVus5uodoMF37Vwi8=", - "dev": true, - "requires": { - "browserify-zlib": "0.1.4", - "concat-stream": "1.6.0" - } - }, - "handle-thing": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz", - "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=", - "dev": true - }, - "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.3.0", - "har-schema": "2.0.0" - } - }, - "has": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", - "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", - "dev": true, - "requires": { - "function-bind": "1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "has-gulplog": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", - "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", - "dev": true, - "requires": { - "sparkles": "1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true - }, - "hash-base": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", - "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, - "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==", - "dev": true, - "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" - } - }, - "hasha": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz", - "integrity": "sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE=", - "dev": true, - "requires": { - "is-stream": "1.1.0", - "pinkie-promise": "2.0.1" - } - }, - "hawk": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", - "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", - "dev": true, - "requires": { - "boom": "4.3.1", - "cryptiles": "3.1.2", - "hoek": "4.2.0", - "sntp": "2.1.0" - } - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "requires": { - "hash.js": "1.1.3", - "minimalistic-assert": "1.0.0", - "minimalistic-crypto-utils": "1.0.1" - } - }, - "hoek": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", - "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==", - "dev": true - }, - "hooker": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", - "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=", - "dev": true - }, - "hosted-git-info": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", - "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", - "dev": true - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "obuf": "1.1.1", - "readable-stream": "2.3.3", - "wbuf": "1.7.2" - } - }, - "html-entities": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", - "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", - "dev": true - }, - "htmlparser2": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", - "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", - "dev": true, - "requires": { - "domelementtype": "1.3.0", - "domhandler": "2.3.0", - "domutils": "1.5.1", - "entities": "1.0.0", - "readable-stream": "1.1.14" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } - } - }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", - "dev": true - }, - "http-errors": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz", - "integrity": "sha1-GX4izevUGYWF6GlO9nhhl7ke2UI=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "statuses": "1.4.0" - } - }, - "http-parser-js": { - "version": "0.4.9", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.9.tgz", - "integrity": "sha1-6hoE+2St/wJC6ZdPKX3Uw8rSceE=", - "dev": true - }, - "http-proxy": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz", - "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=", - "dev": true, - "requires": { - "eventemitter3": "1.2.0", - "requires-port": "1.0.0" - } - }, - "http-proxy-middleware": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz", - "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=", - "dev": true, - "requires": { - "http-proxy": "1.16.2", - "is-glob": "3.1.0", - "lodash": "4.17.4", - "micromatch": "2.3.11" - }, - "dependencies": { - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", - "dev": true - } - } - }, - "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.4.1", - "sshpk": "1.13.1" - } - }, - "https-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz", - "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=", - "dev": true - }, - "iconv-lite": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz", - "integrity": "sha1-HOYKOleGSiktEyH/RgnKS7llrcg=", - "dev": true - }, - "ieee754": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", - "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", - "dev": true - }, - "imagemin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-4.0.0.tgz", - "integrity": "sha1-6Q5/CTaDZZXxj6Ff6Qb0+iWeqEc=", - "dev": true, - "requires": { - "buffer-to-vinyl": "1.1.0", - "concat-stream": "1.6.0", - "imagemin-gifsicle": "4.2.0", - "imagemin-jpegtran": "4.3.2", - "imagemin-optipng": "4.3.0", - "imagemin-svgo": "4.2.1", - "optional": "0.1.4", - "readable-stream": "2.3.3", - "stream-combiner2": "1.1.1", - "vinyl-fs": "2.4.4" - } - }, - "imagemin-gifsicle": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/imagemin-gifsicle/-/imagemin-gifsicle-4.2.0.tgz", - "integrity": "sha1-D++butNHbmt2iFc2zFsLh6CHV8o=", - "dev": true, - "optional": true, - "requires": { - "gifsicle": "3.0.4", - "is-gif": "1.0.0", - "through2": "0.6.5" - } - }, - "imagemin-jpegtran": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/imagemin-jpegtran/-/imagemin-jpegtran-4.3.2.tgz", - "integrity": "sha1-G8bR4r0T/bZNJFUm1jWn5d/rEvw=", - "dev": true, - "optional": true, - "requires": { - "is-jpg": "1.0.0", - "jpegtran-bin": "3.2.0", - "through2": "2.0.3" - }, - "dependencies": { - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true, - "optional": true, - "requires": { - "readable-stream": "2.3.3", - "xtend": "4.0.1" - } - } - } - }, - "imagemin-optipng": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/imagemin-optipng/-/imagemin-optipng-4.3.0.tgz", - "integrity": "sha1-dgRmOrLuMVczJ0cm/Rw3TStErbY=", - "dev": true, - "optional": true, - "requires": { - "exec-buffer": "2.0.1", - "is-png": "1.1.0", - "optipng-bin": "3.1.4", - "through2": "0.6.5" - } - }, - "imagemin-svgo": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/imagemin-svgo/-/imagemin-svgo-4.2.1.tgz", - "integrity": "sha1-VPB9xW9HJgRi32phxUvvtEtXvlU=", - "dev": true, - "optional": true, - "requires": { - "is-svg": "1.1.1", - "svgo": "0.6.6", - "through2": "2.0.3" - }, - "dependencies": { - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true, - "optional": true, - "requires": { - "readable-stream": "2.3.3", - "xtend": "4.0.1" - } - } - } - }, - "import-local": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-0.1.1.tgz", - "integrity": "sha1-sReVcqrNwRxqkQCftDDbyrX2aKg=", - "dev": true, - "requires": { - "pkg-dir": "2.0.0", - "resolve-cwd": "2.0.0" - } - }, - "in-publish": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", - "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", - "dev": true - }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, - "requires": { - "repeating": "2.0.1" - } - }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "ini": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", - "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", - "dev": true - }, - "ink-docstrap": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ink-docstrap/-/ink-docstrap-1.3.0.tgz", - "integrity": "sha1-6QBeW7kCXMmpvo5ErYf4rViIyB0=", - "dev": true, - "requires": { - "moment": "2.19.1", - "sanitize-html": "1.15.0" - } - }, - "inquirer": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", - "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", - "dev": true, - "requires": { - "ansi-escapes": "1.4.0", - "ansi-regex": "2.1.1", - "chalk": "1.1.3", - "cli-cursor": "1.0.2", - "cli-width": "2.2.0", - "figures": "1.7.0", - "lodash": "4.17.4", - "readline2": "1.0.1", - "run-async": "0.1.0", - "rx-lite": "3.1.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "through": "2.3.8" - }, - "dependencies": { - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", - "dev": true - } - } - }, - "internal-ip": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-1.2.0.tgz", - "integrity": "sha1-rp+/k7mEh4eF1QqN4bNWlWBYz1w=", - "dev": true, - "requires": { - "meow": "3.7.0" - } - }, - "interpret": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.4.tgz", - "integrity": "sha1-ggzdWIuGj/sZGoCVBtbJyPISsbA=", - "dev": true - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - }, - "ip-regex": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-1.0.3.tgz", - "integrity": "sha1-3FiQdvZZ9BnCIgOaMzFvHHOH7/0=", - "dev": true, - "optional": true - }, - "ipaddr.js": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.5.2.tgz", - "integrity": "sha1-1LUFvemUaYfM8PxY2QEP+WB+P6A=", - "dev": true - }, - "is-absolute": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.1.7.tgz", - "integrity": "sha1-hHSREZ/MtftDYhfMc39/qtUPYD8=", - "dev": true, - "requires": { - "is-relative": "0.1.3" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "1.10.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, - "requires": { - "builtin-modules": "1.1.1" - } - }, - "is-bzip2": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-bzip2/-/is-bzip2-1.0.0.tgz", - "integrity": "sha1-XuWOqlounIDiFAe+3yOuWsCRs/w=", - "dev": true - }, - "is-callable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", - "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=", - "dev": true - }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true - }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true - }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true, - "requires": { - "is-primitive": "2.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-gif": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-gif/-/is-gif-1.0.0.tgz", - "integrity": "sha1-ptKumIkwB7/6l6HYwB1jIFgyCX4=", - "dev": true, - "optional": true - }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "2.1.1" - } - }, - "is-gzip": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-gzip/-/is-gzip-1.0.0.tgz", - "integrity": "sha1-bKiwe5nHeZgCWQDlVc7Y7YCHmoM=", - "dev": true - }, - "is-jpg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-jpg/-/is-jpg-1.0.0.tgz", - "integrity": "sha1-KVnBfnNDDbOCZNp1uQ3VTy2G2hw=", - "dev": true, - "optional": true - }, - "is-my-json-valid": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz", - "integrity": "sha512-ochPsqWS1WXj8ZnMIV0vnNXooaMhp7cyL4FMSIPKTtnV0Ha/T19G2b9kkhcNsabV9bxYkze7/aLZJb/bYuFduQ==", - "dev": true, - "requires": { - "generate-function": "2.0.0", - "generate-object-property": "1.2.0", - "jsonpointer": "4.0.1", - "xtend": "4.0.1" - } - }, - "is-natural-number": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-2.1.1.tgz", - "integrity": "sha1-fUxXKDd+84bD4ZSpkRv1fG3DNec=", - "dev": true - }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - } - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": true - }, - "is-path-in-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", - "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", - "dev": true, - "requires": { - "is-path-inside": "1.0.0" - } - }, - "is-path-inside": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", - "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", - "dev": true, - "requires": { - "path-is-inside": "1.0.2" - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "is-png": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-png/-/is-png-1.1.0.tgz", - "integrity": "sha1-1XSxK/J1wDUEVVcLDltXqwYgd84=", - "dev": true, - "optional": true - }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "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-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", - "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" - } - }, - "is-relative": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.1.3.tgz", - "integrity": "sha1-kF/uiuhvRbPsYUvDwVyGnfCHboI=", - "dev": true - }, - "is-retry-allowed": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-svg": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-1.1.1.tgz", - "integrity": "sha1-rA76r7ZTrFhHNwix+HNjbKEQ4xs=", - "dev": true, - "optional": true - }, - "is-symbol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", - "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", - "dev": true - }, - "is-tar": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-tar/-/is-tar-1.0.0.tgz", - "integrity": "sha1-L2suF5LB9bs2UZrKqdZcDSb+hT0=", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-url": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.2.tgz", - "integrity": "sha1-SYkFpZO/R8wtnn9zg3K792lsfyY=", - "dev": true - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "is-valid-glob": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-0.3.0.tgz", - "integrity": "sha1-1LVcafUYhvm2XHDWwmItN+KfSP4=", - "dev": true - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - }, - "is-zip": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-zip/-/is-zip-1.0.0.tgz", - "integrity": "sha1-R7Co/004p2QxzP2ZqOFaTIa6IyU=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "jpegtran-bin": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jpegtran-bin/-/jpegtran-bin-3.2.0.tgz", - "integrity": "sha1-9g7PSumZwL2tLp+83ytvCYHnops=", - "dev": true, - "optional": true, - "requires": { - "bin-build": "2.2.0", - "bin-wrapper": "3.0.2", - "logalot": "2.1.0" - } - }, - "js-base64": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.3.2.tgz", - "integrity": "sha512-Y2/+DnfJJXT1/FCwUebUhLWb3QihxiSC42+ctHLGogmW2jPY6LCapMdFZXRvVP2z6qyKW7s6qncE/9gSqZiArw==", - "dev": true - }, - "js-yaml": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-2.0.5.tgz", - "integrity": "sha1-olrmUJmZ6X3yeMZxnaEb0Gh3Q6g=", - "dev": true, - "requires": { - "argparse": "0.1.16", - "esprima": "1.0.4" - } - }, - "js2xmlparser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-3.0.0.tgz", - "integrity": "sha1-P7YOqgicVED5MZ9RdgzNB+JJlzM=", - "dev": true, - "requires": { - "xmlcreate": "1.0.2" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, - "optional": true - }, - "jsdoc": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.5.5.tgz", - "integrity": "sha512-6PxB65TAU4WO0Wzyr/4/YhlGovXl0EVYfpKbpSroSj0qBxT4/xod/l40Opkm38dRHRdQgdeY836M0uVnJQG7kg==", - "dev": true, - "requires": { - "babylon": "7.0.0-beta.19", - "bluebird": "3.5.1", - "catharsis": "0.8.9", - "escape-string-regexp": "1.0.5", - "js2xmlparser": "3.0.0", - "klaw": "2.0.0", - "marked": "0.3.6", - "mkdirp": "0.5.1", - "requizzle": "0.2.1", - "strip-json-comments": "2.0.1", - "taffydb": "2.6.2", - "underscore": "1.8.3" - }, - "dependencies": { - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "klaw": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-2.0.0.tgz", - "integrity": "sha1-WcEo4Nxc5BAgEVEZTuucv4WGUPY=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11" - } - }, - "underscore": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", - "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", - "dev": true - } - } - }, - "jshint": { - "version": "2.9.5", - "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.9.5.tgz", - "integrity": "sha1-HnJSkVzmgbQIJ+4UJIxG006apiw=", - "dev": true, - "requires": { - "cli": "1.0.1", - "console-browserify": "1.1.0", - "exit": "0.1.2", - "htmlparser2": "3.8.3", - "lodash": "3.7.0", - "minimatch": "3.0.4", - "shelljs": "0.3.0", - "strip-json-comments": "1.0.4" - }, - "dependencies": { - "lodash": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.7.0.tgz", - "integrity": "sha1-Nni9irmVBXwHreg27S7wh9qBHUU=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } - }, - "strip-json-comments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", - "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", - "dev": true - } - } - }, - "json-loader": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", - "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "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", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json3": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", - "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", - "dev": true - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11" - }, - "dependencies": { - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true, - "optional": true - } - } - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "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", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "kew": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz", - "integrity": "sha1-edk9LTM2PW/dKXCzNdkUGtWR15s=", - "dev": true - }, - "killable": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.0.tgz", - "integrity": "sha1-2ouEvUfeU5WHj5XWTQLyRJ/gXms=", - "dev": true - }, - "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" - } - }, - "klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11" - }, - "dependencies": { - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true, - "optional": true - } - } - }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "dev": true - }, - "lazy-req": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/lazy-req/-/lazy-req-1.1.0.tgz", - "integrity": "sha1-va6+rTD42CQDnODOFJ1Nqge6H6w=", - "dev": true, - "optional": true - }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "dev": true, - "requires": { - "readable-stream": "2.3.3" - } - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "1.0.0" - } - }, - "livereload-js": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.2.2.tgz", - "integrity": "sha1-bIclfmSKtHW8JOoldFftzB+NC8I=", - "dev": true - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "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" - }, - "dependencies": { - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - } - } - }, - "loader-runner": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz", - "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=", - "dev": true - }, - "loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", - "dev": true, - "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" - }, - "dependencies": { - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } - } - }, - "lodash": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz", - "integrity": "sha1-jzSZxSRdNG1oLlsNO0B2fgnxqSw=", - "dev": true - }, - "lodash._basecopy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", - "dev": true - }, - "lodash._basetostring": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", - "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=", - "dev": true - }, - "lodash._basevalues": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", - "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", - "dev": true - }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", - "dev": true - }, - "lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", - "dev": true - }, - "lodash._reescape": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", - "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=", - "dev": true - }, - "lodash._reevaluate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", - "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=", - "dev": true - }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", - "dev": true - }, - "lodash._root": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", - "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", - "dev": true - }, - "lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", - "dev": true - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "lodash.escape": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", - "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", - "dev": true, - "requires": { - "lodash._root": "3.0.1" - } - }, - "lodash.escaperegexp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", - "integrity": "sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=", - "dev": true - }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", - "dev": true - }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", - "dev": true - }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", - "dev": true - }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true, - "requires": { - "lodash._getnative": "3.9.1", - "lodash.isarguments": "3.1.0", - "lodash.isarray": "3.0.4" - } - }, - "lodash.restparam": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", - "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", - "dev": true - }, - "lodash.template": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", - "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", - "dev": true, - "requires": { - "lodash._basecopy": "3.0.1", - "lodash._basetostring": "3.0.1", - "lodash._basevalues": "3.0.0", - "lodash._isiterateecall": "3.0.9", - "lodash._reinterpolate": "3.0.0", - "lodash.escape": "3.2.0", - "lodash.keys": "3.1.2", - "lodash.restparam": "3.6.1", - "lodash.templatesettings": "3.1.1" - } - }, - "lodash.templatesettings": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", - "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", - "dev": true, - "requires": { - "lodash._reinterpolate": "3.0.0", - "lodash.escape": "3.2.0" - } - }, - "logalot": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/logalot/-/logalot-2.1.0.tgz", - "integrity": "sha1-X46MkNME7fElMJUaVVSruMXj9VI=", - "dev": true, - "optional": true, - "requires": { - "figures": "1.7.0", - "squeak": "1.3.0" - } - }, - "loglevel": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.5.1.tgz", - "integrity": "sha1-GJB4yUq5BT7iFaCs2/JCROoPZQI=", - "dev": true - }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true - }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "dev": true, - "requires": { - "currently-unhandled": "0.4.1", - "signal-exit": "3.0.2" - } - }, - "lowercase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", - "dev": true - }, - "lpad-align": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/lpad-align/-/lpad-align-1.1.2.tgz", - "integrity": "sha1-IfYArBwwlcPG5JfuZyce4ISB/p4=", - "dev": true, - "optional": true, - "requires": { - "get-stdin": "4.0.1", - "indent-string": "2.1.0", - "longest": "1.0.1", - "meow": "3.7.0" - } - }, - "lru-cache": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", - "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", - "dev": true - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - }, - "marked": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.6.tgz", - "integrity": "sha1-ssbGGPzOzk74bE/Gy4p8v1rtqNc=", - "dev": true - }, - "matchdep": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-1.0.1.tgz", - "integrity": "sha1-pXozgESR+64girqPaDgEN6vC3KU=", - "dev": true, - "requires": { - "findup-sync": "0.3.0", - "micromatch": "2.3.11", - "resolve": "1.1.7", - "stack-trace": "0.0.9" - }, - "dependencies": { - "findup-sync": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", - "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", - "dev": true, - "requires": { - "glob": "5.0.15" - } - }, - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "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" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } - } - } - }, - "maxmin": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-1.1.0.tgz", - "integrity": "sha1-cTZehKmd2Piz99X94vANHn9zvmE=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "figures": "1.7.0", - "gzip-size": "1.0.0", - "pretty-bytes": "1.0.4" - }, - "dependencies": { - "pretty-bytes": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz", - "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=", - "dev": true, - "requires": { - "get-stdin": "4.0.1", - "meow": "3.7.0" - } - } - } - }, - "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" - } - } - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true - }, - "mem": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", - "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", - "dev": true, - "requires": { - "mimic-fn": "1.1.0" - } - }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, - "requires": { - "errno": "0.1.4", - "readable-stream": "2.3.3" - } - }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "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" - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true - }, - "merge-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", - "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", - "dev": true, - "requires": { - "readable-stream": "2.3.3" - } - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "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" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - } - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0" - } - }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", - "dev": true - }, - "mime-db": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", - "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=", - "dev": true - }, - "mime-types": { - "version": "2.1.17", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", - "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", - "dev": true, - "requires": { - "mime-db": "1.30.0" - } - }, - "mimic-fn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", - "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", - "dev": true - }, - "minimalistic-assert": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", - "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true - }, - "minimatch": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", - "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", - "dev": true, - "requires": { - "lru-cache": "2.7.3", - "sigmund": "1.0.1" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - } - } - }, - "moment": { - "version": "2.19.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.19.1.tgz", - "integrity": "sha1-VtoaLRy/AdOLfhr8McELz6GSkWc=", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "multicast-dns": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.1.1.tgz", - "integrity": "sha1-bn3oalcIcqsXBYrepxYLvsqBTd4=", - "dev": true, - "requires": { - "dns-packet": "1.2.2", - "thunky": "0.1.0" - } - }, - "multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", - "dev": true - }, - "multipipe": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", - "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", - "dev": true, - "requires": { - "duplexer2": "0.0.2" - }, - "dependencies": { - "duplexer2": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", - "dev": true, - "requires": { - "readable-stream": "1.1.14" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } - } - }, - "mute-stream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", - "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=", - "dev": true - }, - "nan": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.7.0.tgz", - "integrity": "sha1-2Vv3IeyHfgjbJ27T/G63j5CDrUY=", - "dev": true - }, - "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", - "dev": true - }, - "node-forge": { - "version": "0.6.33", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.6.33.tgz", - "integrity": "sha1-RjgRh59XPUUVWtap9D3ClujoXrw=", - "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=", - "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.4", - "request": "2.83.0", - "rimraf": "2.2.8", - "semver": "5.3.0", - "tar": "2.2.1", - "which": "1.0.9" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "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" - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } - }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "requires": { - "abbrev": "1.1.1" - } - }, - "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", - "dev": true - } - } - }, - "node-libs-browser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.0.0.tgz", - "integrity": "sha1-o6WeyXAkmFtG6Vg3lkb5bEthZkY=", - "dev": true, - "requires": { - "assert": "1.4.1", - "browserify-zlib": "0.1.4", - "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": "0.0.1", - "os-browserify": "0.2.1", - "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": "0.10.31", - "timers-browserify": "2.0.4", - "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.10.3", - "vm-browserify": "0.0.4" - }, - "dependencies": { - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } - } - }, - "node-sass": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-3.13.1.tgz", - "integrity": "sha1-ckD7v/I5YwS0IjUn7TAgWJwAT8I=", - "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", - "meow": "3.7.0", - "mkdirp": "0.5.1", - "nan": "2.7.0", - "node-gyp": "3.6.2", - "npmlog": "4.1.2", - "request": "2.83.0", - "sass-graph": "2.2.4" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "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" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } - } - } - }, - "node-status-codes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz", - "integrity": "sha1-WuVUHQJGRdMqWPzdyc7s6nrjrC8=", - "dev": true - }, - "node-uuid": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", - "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=", - "dev": true - }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "dev": true, - "requires": { - "abbrev": "1.1.1" - } - }, - "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "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": "5.4.1", - "validate-npm-package-license": "3.0.1" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "1.1.0" - } - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", - "dev": true - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "2.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "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" - } - }, - "num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", - "dev": true - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object-keys": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", - "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", - "dev": true - }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true, - "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" - } - }, - "obuf": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.1.tgz", - "integrity": "sha1-EEEktsYCxnlogaBCVB0220OlJk4=", - "dev": true - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", - "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "onetime": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "dev": true - }, - "opn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.1.0.tgz", - "integrity": "sha512-iPNl7SyM8L30Rm1sjGdLLheyHVw5YXVfi3SKWJzBI7efxRwHojfRFjwE/OLM6qp9xJYMgab8WicTU1cPoY+Hpg==", - "dev": true, - "requires": { - "is-wsl": "1.1.0" - } - }, - "optional": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/optional/-/optional-0.1.4.tgz", - "integrity": "sha512-gtvrrCfkE08wKcgXaVwQVgwEQ8vel2dc5DDBn9RLQZ3YtmtkBss6A2HY6BnJH4N/4Ku97Ri/SF8sNWE2225WJw==", - "dev": true - }, - "optipng-bin": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/optipng-bin/-/optipng-bin-3.1.4.tgz", - "integrity": "sha1-ldNPLEiHBPb9cGBr/qDGWfHZXYQ=", - "dev": true, - "optional": true, - "requires": { - "bin-build": "2.2.0", - "bin-wrapper": "3.0.2", - "logalot": "2.1.0" - } - }, - "ordered-read-streams": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz", - "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=", - "dev": true, - "requires": { - "is-stream": "1.1.0", - "readable-stream": "2.3.3" - } - }, - "original": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.0.tgz", - "integrity": "sha1-kUf5P6FpbQS+YeAb1QuurKZWvTs=", - "dev": true, - "requires": { - "url-parse": "1.0.5" - }, - "dependencies": { - "url-parse": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.0.5.tgz", - "integrity": "sha1-CFSGBCKv3P7+tsllxmLUgAFpkns=", - "dev": true, - "requires": { - "querystringify": "0.0.4", - "requires-port": "1.0.0" - } - } - } - }, - "os-browserify": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.2.1.tgz", - "integrity": "sha1-Y/xMzuXS13Y9Jrv4YBB45sLgBE8=", - "dev": true - }, - "os-filter-obj": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-1.0.3.tgz", - "integrity": "sha1-WRUzDZDs7VV9LZOKMcbdIU2cY60=", - "dev": true, - "optional": true - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "requires": { - "lcid": "1.0.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "osenv": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", - "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", - "dev": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-limit": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz", - "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=", - "dev": true - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "1.1.0" - } - }, - "p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", - "dev": true - }, - "package": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package/-/package-1.0.1.tgz", - "integrity": "sha1-0lofmeJQbcsn1nBLg9yooxLk7cw=", - "dev": true - }, - "pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", - "dev": true - }, - "parse-asn1": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", - "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", - "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" - } - }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "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" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - } - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "1.3.1" - } - }, - "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", - "dev": true - }, - "path-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", - "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "2.0.1" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - }, - "dependencies": { - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - } - } - }, - "pbkdf2": { - "version": "3.0.14", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz", - "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==", - "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" - } - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", - "dev": true - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "phantomjs-prebuilt": { - "version": "2.1.16", - "resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz", - "integrity": "sha1-79ISpKOWbTZHaE6ouniFSb4q7+8=", - "dev": true, - "requires": { - "es6-promise": "4.1.1", - "extract-zip": "1.6.6", - "fs-extra": "1.0.0", - "hasha": "2.2.0", - "kew": "0.7.0", - "progress": "1.1.8", - "request": "2.83.0", - "request-progress": "2.0.1", - "which": "1.3.0" - }, - "dependencies": { - "which": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", - "dev": true, - "requires": { - "isexe": "2.0.0" - } - } - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "2.0.4" - } - }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "requires": { - "find-up": "2.1.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "2.0.0" - } - } - } - }, - "portfinder": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.13.tgz", - "integrity": "sha1-uzLs2HwnEErm7kS1o8y/Drsa7ek=", - "dev": true, - "requires": { - "async": "1.5.2", - "debug": "2.6.9", - "mkdirp": "0.5.1" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - } - } - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.3.2", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "postcss-value-parser": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", - "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=", - "dev": true - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true - }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true - }, - "pretty-bytes": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-3.0.1.tgz", - "integrity": "sha1-J9AAjXeAY6C0gRuzXHnxvV1fvM8=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true - }, - "progress": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", - "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", - "dev": true - }, - "proxy-addr": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.2.tgz", - "integrity": "sha1-ZXFQT0e7mI7IGAJT+F3X4UlSvew=", - "dev": true, - "requires": { - "forwarded": "0.1.2", - "ipaddr.js": "1.5.2" - } - }, - "prr": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", - "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=", - "dev": true - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "public-encrypt": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", - "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", - "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" - } - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "dev": true, - "optional": true - }, - "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", - "dev": true - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true - }, - "querystringify": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-0.0.4.tgz", - "integrity": "sha1-DPf4T5Rj/wrlHExLFC2VvjdyTZw=", - "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==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - }, - "randomfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.3.tgz", - "integrity": "sha512-YL6GrhrWoic0Eq8rXVbMptH7dAxCs0J+mh5Y0euNekPPYaxEmdVGim6GdoxoRzKW2yJoU8tueifS7mYxvcFDEQ==", - "dev": true, - "requires": { - "randombytes": "2.0.5", - "safe-buffer": "5.1.1" - } - }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", - "dev": true - }, - "raw-body": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.1.7.tgz", - "integrity": "sha1-rf6s4uT7MJgFgBTQjActzFl1h3Q=", - "dev": true, - "requires": { - "bytes": "2.4.0", - "iconv-lite": "0.4.13", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", - "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=", - "dev": true - }, - "iconv-lite": { - "version": "0.4.13", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", - "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=", - "dev": true - } - } - }, - "rc": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.2.tgz", - "integrity": "sha1-2M6ctX6NZNnHut2YdsfDTL48cHc=", - "dev": true, - "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.4", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" - } - }, - "read-all-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz", - "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=", - "dev": true, - "requires": { - "pinkie-promise": "2.0.1", - "readable-stream": "2.3.3" - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" - } - }, - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "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" - } - }, - "readdirp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", - "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" - }, - "dependencies": { - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } - } - } - }, - "readline2": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", - "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "mute-stream": "0.0.5" - } - }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true, - "requires": { - "indent-string": "2.1.0", - "strip-indent": "1.0.1" - } - }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "dev": true, - "requires": { - "is-equal-shallow": "0.1.3" - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "1.0.2" - } - }, - "replace-ext": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", - "dev": true - }, - "request": { - "version": "2.83.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", - "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", - "dev": true, - "requires": { - "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", - "hawk": "6.0.2", - "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", - "stringstream": "0.0.5", - "tough-cookie": "2.3.3", - "tunnel-agent": "0.6.0", - "uuid": "3.1.0" - }, - "dependencies": { - "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.1.1" - } - }, - "uuid": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==", - "dev": true - } - } - }, - "request-progress": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-2.0.1.tgz", - "integrity": "sha1-XTa7V5YcZzqlt4jbyBQf3yO0Tgg=", - "dev": true, - "requires": { - "throttleit": "1.0.0" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "requizzle": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.1.tgz", - "integrity": "sha1-aUPDUwxNmn5G8c3dUcFY/GcM294=", - "dev": true, - "requires": { - "underscore": "1.6.0" - }, - "dependencies": { - "underscore": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", - "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", - "dev": true - } - } - }, - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dev": true, - "requires": { - "resolve-from": "3.0.0" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - }, - "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "dev": true, - "requires": { - "exit-hook": "1.1.1", - "onetime": "1.1.0" - } - }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "dev": true, - "requires": { - "align-text": "0.1.4" - } - }, - "rimraf": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", - "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", - "dev": true - }, - "ripemd160": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", - "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", - "dev": true, - "requires": { - "hash-base": "2.0.2", - "inherits": "2.0.3" - } - }, - "rtlcss": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-2.2.1.tgz", - "integrity": "sha512-JjQ5DlrmwiItAjlmhoxrJq5ihgZcE0wMFxt7S17bIrt4Lw0WwKKFk+viRhvodB/0falyG/5fiO043ZDh6/aqTw==", - "dev": true, - "requires": { - "chalk": "2.3.0", - "findup": "0.1.5", - "mkdirp": "0.5.1", - "postcss": "6.0.14", - "strip-json-comments": "2.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - } - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "postcss": { - "version": "6.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.14.tgz", - "integrity": "sha512-NJ1z0f+1offCgadPhz+DvGm5Mkci+mmV5BqD13S992o0Xk9eElxUfPPF+t2ksH5R/17gz4xVK8KWocUQ5o3Rog==", - "dev": true, - "requires": { - "chalk": "2.3.0", - "source-map": "0.6.1", - "supports-color": "4.5.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } - } - }, - "run-async": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", - "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", - "dev": true, - "requires": { - "once": "1.4.0" - } - }, - "rx-lite": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", - "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=", - "dev": true - }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", - "dev": true - }, - "sanitize-html": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-1.15.0.tgz", - "integrity": "sha512-1jWLToWx8ZV53Z1Jg+2fHl8dNFsxvQt2Cmrk4o/z1+MUdB5EXSU0QVuzlGGhfp7cQrYbEEfMO/TUWHfkBUqujQ==", - "dev": true, - "requires": { - "htmlparser2": "3.9.2", - "lodash.escaperegexp": "4.1.2", - "srcset": "1.0.0", - "xtend": "4.0.1" - }, - "dependencies": { - "entities": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", - "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", - "dev": true - }, - "htmlparser2": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", - "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", - "dev": true, - "requires": { - "domelementtype": "1.3.0", - "domhandler": "2.3.0", - "domutils": "1.5.1", - "entities": "1.1.1", - "inherits": "2.0.3", - "readable-stream": "2.3.3" - } - } - } - }, - "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" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "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" - } - }, - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } - }, - "yargs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", - "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" - } - } - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "scss-tokenizer": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", - "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", - "dev": true, - "requires": { - "js-base64": "2.3.2", - "source-map": "0.4.4" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - } - } - }, - "seek-bzip": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz", - "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", - "dev": true, - "requires": { - "commander": "2.8.1" - } - }, - "select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", - "dev": true - }, - "selfsigned": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.1.tgz", - "integrity": "sha1-v4y3uDJWxFUeMTR8YxF3jbme7FI=", - "dev": true, - "requires": { - "node-forge": "0.6.33" - } - }, - "semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", - "dev": true - }, - "semver-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-1.0.0.tgz", - "integrity": "sha1-kqSWkGX5xwxpR1PVUkj8aPj2Usk=", - "dev": true, - "optional": true - }, - "semver-truncate": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz", - "integrity": "sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g=", - "dev": true, - "optional": true, - "requires": { - "semver": "5.4.1" - } - }, - "send": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz", - "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "1.1.1", - "destroy": "1.0.4", - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "etag": "1.8.1", - "fresh": "0.5.2", - "http-errors": "1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.3.1" - }, - "dependencies": { - "http-errors": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", - "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", - "dev": true, - "requires": { - "depd": "1.1.1", - "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": "1.3.1" - } - }, - "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", - "dev": true - }, - "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", - "dev": true - } - } - }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", - "dev": true, - "requires": { - "accepts": "1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "1.0.3", - "http-errors": "1.6.2", - "mime-types": "2.1.17", - "parseurl": "1.3.2" - }, - "dependencies": { - "http-errors": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", - "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", - "dev": true, - "requires": { - "depd": "1.1.1", - "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": "1.4.0" - } - }, - "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", - "dev": true - } - } - }, - "serve-static": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz", - "integrity": "sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ==", - "dev": true, - "requires": { - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "parseurl": "1.3.2", - "send": "0.16.1" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", - "dev": true - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "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==", - "dev": true, - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "shelljs": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", - "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=", - "dev": true - }, - "sigmund": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "sntp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", - "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", - "dev": true, - "requires": { - "hoek": "4.2.0" - } - }, - "sockjs": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.18.tgz", - "integrity": "sha1-2bKJMWyn33dZXvKZ4HXw+TfrQgc=", - "dev": true, - "requires": { - "faye-websocket": "0.10.0", - "uuid": "2.0.3" - } - }, - "sockjs-client": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.4.tgz", - "integrity": "sha1-W6vjhrd15M8U51IJEUUmVAFsixI=", - "dev": true, - "requires": { - "debug": "2.6.9", - "eventsource": "0.1.6", - "faye-websocket": "0.11.1", - "inherits": "2.0.3", - "json3": "3.3.2", - "url-parse": "1.2.0" - }, - "dependencies": { - "faye-websocket": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", - "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", - "dev": true, - "requires": { - "websocket-driver": "0.7.0" - } - } - } - }, - "source-list-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", - "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==", - "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 - }, - "sparkles": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz", - "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=", - "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-expression-parse": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", - "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", - "dev": true - }, - "spdx-license-ids": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", - "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", - "dev": true - }, - "spdy": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz", - "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=", - "dev": true, - "requires": { - "debug": "2.6.9", - "handle-thing": "1.2.5", - "http-deceiver": "1.2.7", - "safe-buffer": "5.1.1", - "select-hose": "2.0.0", - "spdy-transport": "2.0.20" - } - }, - "spdy-transport": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.0.20.tgz", - "integrity": "sha1-c15yBUxIayNU/onnAiVgBKOazk0=", - "dev": true, - "requires": { - "debug": "2.6.9", - "detect-node": "2.0.3", - "hpack.js": "2.1.6", - "obuf": "1.1.1", - "readable-stream": "2.3.3", - "safe-buffer": "5.1.1", - "wbuf": "1.7.2" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "squeak": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/squeak/-/squeak-1.3.0.tgz", - "integrity": "sha1-MwRQN7ZDiLVnZ0uEMiplIQc5FsM=", - "dev": true, - "optional": true, - "requires": { - "chalk": "1.1.3", - "console-stream": "0.1.1", - "lpad-align": "1.1.2" - } - }, - "srcset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/srcset/-/srcset-1.0.0.tgz", - "integrity": "sha1-pWad4StC87HV6D7QPHEEb8SPQe8=", - "dev": true, - "requires": { - "array-uniq": "1.0.3", - "number-is-nan": "1.0.1" - } - }, - "sshpk": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", - "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", - "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" - } - }, - "stack-trace": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz", - "integrity": "sha1-qPbq7KkGdMMz58Q5U/J1tFFRBpU=", - "dev": true - }, - "stat-mode": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-0.2.2.tgz", - "integrity": "sha1-5sgLYjEj19gM8TLOU480YokHJQI=", - "dev": true - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", - "dev": true - }, - "stream-browserify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", - "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3" - } - }, - "stream-buffers": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", - "integrity": "sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ=", - "dev": true - }, - "stream-combiner2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", - "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", - "dev": true, - "requires": { - "duplexer2": "0.1.4", - "readable-stream": "2.3.3" - } - }, - "stream-http": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", - "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==", - "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" - } - }, - "stream-shift": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", - "dev": true - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - }, - "stringstream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "0.2.1" - } - }, - "strip-bom-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz", - "integrity": "sha1-5xRDmFd9Uaa+0PoZlPoF9D/ZiO4=", - "dev": true, - "requires": { - "first-chunk-stream": "1.0.0", - "strip-bom": "2.0.0" - } - }, - "strip-dirs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-1.1.1.tgz", - "integrity": "sha1-lgu9EoeETzl1pFWKoQOoJV4kVqA=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "get-stdin": "4.0.1", - "is-absolute": "0.1.7", - "is-natural-number": "2.1.1", - "minimist": "1.2.0", - "sum-up": "1.0.3" - } - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true, - "requires": { - "get-stdin": "4.0.1" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "strip-outer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.0.tgz", - "integrity": "sha1-qsC6YNLpDF1PJ1/Yhp/ZotMQ/7g=", - "dev": true, - "requires": { - "escape-string-regexp": "1.0.5" - } - }, - "sum-up": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sum-up/-/sum-up-1.0.3.tgz", - "integrity": "sha1-HGYfZnBX9jvLeHWqFDi8FiUlFW4=", - "dev": true, - "requires": { - "chalk": "1.1.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - }, - "svgo": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.6.6.tgz", - "integrity": "sha1-s0CIkDbyD5tEdUMHfQ9Vc+0ETAg=", - "dev": true, - "optional": true, - "requires": { - "coa": "1.0.4", - "colors": "1.1.2", - "csso": "2.0.0", - "js-yaml": "3.6.1", - "mkdirp": "0.5.1", - "sax": "1.2.4", - "whet.extend": "0.9.9" - }, - "dependencies": { - "argparse": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", - "dev": true, - "optional": true, - "requires": { - "sprintf-js": "1.0.3" - } - }, - "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", - "dev": true, - "optional": true - }, - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true, - "optional": true - }, - "js-yaml": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.6.1.tgz", - "integrity": "sha1-bl/mfYsgXOTSL60Ft3geja3MSzA=", - "dev": true, - "optional": true, - "requires": { - "argparse": "1.0.9", - "esprima": "2.7.3" - } - } - } - }, - "taffydb": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", - "integrity": "sha1-fLy2S1oUG2ou/CxdLGe04VCyomg=", - "dev": true - }, - "tapable": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", - "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=", - "dev": true - }, - "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", - "dev": true, - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, - "tar-stream": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.4.tgz", - "integrity": "sha1-NlSc8E7RrumyowwBQyUiONr5QBY=", - "dev": true, - "requires": { - "bl": "1.2.1", - "end-of-stream": "1.4.0", - "readable-stream": "2.3.3", - "xtend": "4.0.1" - } - }, - "tempfile": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-1.1.1.tgz", - "integrity": "sha1-W8xOrsxKsscH2LwR2ZzMmiyyh/I=", - "dev": true, - "requires": { - "os-tmpdir": "1.0.2", - "uuid": "2.0.3" - } - }, - "temporary": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/temporary/-/temporary-0.0.8.tgz", - "integrity": "sha1-oYqYHSi6jKNgJ/s8MFOMPst0CsA=", - "dev": true, - "requires": { - "package": "1.0.1" - } - }, - "throttleit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", - "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } - } - }, - "through2-filter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz", - "integrity": "sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=", - "dev": true, - "requires": { - "through2": "2.0.3", - "xtend": "4.0.1" - }, - "dependencies": { - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true, - "requires": { - "readable-stream": "2.3.3", - "xtend": "4.0.1" - } - } - } - }, - "thunky": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-0.1.0.tgz", - "integrity": "sha1-vzAUaCTituZ7Dy16Ssi+smkIaE4=", - "dev": true - }, - "time-stamp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", - "dev": true - }, - "timed-out": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-3.1.3.tgz", - "integrity": "sha1-lYYL/MXHbCd/j4Mm/Q9bLiDrohc=", - "dev": true - }, - "timers-browserify": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.4.tgz", - "integrity": "sha512-uZYhyU3EX8O7HQP+J9fTVYwsq90Vr68xPEFo7yrVImIxYvHgukBEgOB/SgGoorWVTzGM/3Z+wUNnboA4M8jWrg==", - "dev": true, - "requires": { - "setimmediate": "1.0.5" - } - }, - "tiny-lr": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-0.2.1.tgz", - "integrity": "sha1-s/26gC5dVqM8L28QeUsy5Hescp0=", - "dev": true, - "requires": { - "body-parser": "1.14.2", - "debug": "2.2.0", - "faye-websocket": "0.10.0", - "livereload-js": "2.2.2", - "parseurl": "1.3.2", - "qs": "5.1.0" - }, - "dependencies": { - "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true, - "requires": { - "ms": "0.7.1" - } - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", - "dev": true - }, - "qs": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-5.1.0.tgz", - "integrity": "sha1-TZMuXH6kEcynajEtOaYGIA/VDNk=", - "dev": true - } - } - }, - "to-absolute-glob": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz", - "integrity": "sha1-HN+kcqnvUMI57maZm2YsoOs5k38=", - "dev": true, - "requires": { - "extend-shallow": "2.0.1" - } - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "dev": true - }, - "tough-cookie": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", - "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", - "dev": true, - "requires": { - "punycode": "1.4.1" - } - }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true - }, - "trim-repeated": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", - "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", - "dev": true, - "requires": { - "escape-string-regexp": "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 - }, - "tunnel-agent": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", - "dev": true - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true, - "optional": true - }, - "type-is": { - "version": "1.6.15", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", - "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "2.1.17" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "uglify-js": { - "version": "2.7.5", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.7.5.tgz", - "integrity": "sha1-RhLAx7qu4rp8SH3kkErhIgefLKg=", - "dev": true, - "requires": { - "async": "0.2.10", - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" - }, - "dependencies": { - "async": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", - "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", - "dev": true - } - } - }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "dev": true - }, - "uglifyjs-webpack-plugin": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", - "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", - "dev": true, - "requires": { - "source-map": "0.5.7", - "uglify-js": "2.8.29", - "webpack-sources": "1.0.2" - }, - "dependencies": { - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "dev": true, - "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" - } - } - } - }, - "underscore": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", - "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=", - "dev": true - }, - "underscore-contrib": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/underscore-contrib/-/underscore-contrib-0.3.0.tgz", - "integrity": "sha1-ZltmwkeD+PorGMn4y7Dix9SMJsc=", - "dev": true, - "requires": { - "underscore": "1.6.0" - }, - "dependencies": { - "underscore": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", - "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", - "dev": true - } - } - }, - "underscore.string": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz", - "integrity": "sha1-18D6KvXVoaZ/QlPa7pgTLnM/Dxk=", - "dev": true - }, - "unique-stream": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz", - "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=", - "dev": true, - "requires": { - "json-stable-stringify": "1.0.1", - "through2-filter": "2.0.0" - } - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, - "unzip-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz", - "integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4=", - "dev": true - }, - "uri-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/uri-path/-/uri-path-1.0.0.tgz", - "integrity": "sha1-l0fwGDWJM8Md4PzP2C0TjmcmLjI=", - "dev": true - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - } - } - }, - "url-parse": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.2.0.tgz", - "integrity": "sha512-DT1XbYAfmQP65M/mE6OALxmXzZ/z1+e5zk2TcSKe/KiYbNGZxgtttzC0mR/sjopbpOXcbniq7eIKmocJnUWlEw==", - "dev": true, - "requires": { - "querystringify": "1.0.0", - "requires-port": "1.0.0" - }, - "dependencies": { - "querystringify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-1.0.0.tgz", - "integrity": "sha1-YoYkIRLFtxL6ZU5SZlK/ahP/Bcs=", - "dev": true - } - } - }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "dev": true, - "requires": { - "prepend-http": "1.0.4" - } - }, - "url-regex": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/url-regex/-/url-regex-3.2.0.tgz", - "integrity": "sha1-260eDJ4p4QXdCx8J9oYvf9tIJyQ=", - "dev": true, - "optional": true, - "requires": { - "ip-regex": "1.0.3" - } - }, - "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" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true - }, - "uuid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", - "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", - "dev": true - }, - "vali-date": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", - "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", - "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", - "dev": true, - "requires": { - "spdx-correct": "1.0.2", - "spdx-expression-parse": "1.0.4" - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "1.3.0" - } - }, - "vinyl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", - "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", - "dev": true, - "requires": { - "clone": "1.0.3", - "clone-stats": "0.0.1", - "replace-ext": "0.0.1" - } - }, - "vinyl-assign": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/vinyl-assign/-/vinyl-assign-1.2.1.tgz", - "integrity": "sha1-TRmIkbVRWRHXcajNnFSApGoHSkU=", - "dev": true, - "requires": { - "object-assign": "4.1.1", - "readable-stream": "2.3.3" - } - }, - "vinyl-fs": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz", - "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=", - "dev": true, - "requires": { - "duplexify": "3.5.1", - "glob-stream": "5.3.5", - "graceful-fs": "4.1.11", - "gulp-sourcemaps": "1.6.0", - "is-valid-glob": "0.3.0", - "lazystream": "1.0.0", - "lodash.isequal": "4.5.0", - "merge-stream": "1.0.1", - "mkdirp": "0.5.1", - "object-assign": "4.1.1", - "readable-stream": "2.3.3", - "strip-bom": "2.0.0", - "strip-bom-stream": "1.0.0", - "through2": "2.0.3", - "through2-filter": "2.0.0", - "vali-date": "1.0.0", - "vinyl": "1.2.0" - }, - "dependencies": { - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true, - "requires": { - "readable-stream": "2.3.3", - "xtend": "4.0.1" - } - } - } - }, - "vm-browserify": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", - "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", - "dev": true, - "requires": { - "indexof": "0.0.1" - } - }, - "walkdir": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.0.11.tgz", - "integrity": "sha1-oW0CXrkxvQO1LzCMrtD0D86+lTI=", - "dev": true - }, - "ware": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ware/-/ware-1.3.0.tgz", - "integrity": "sha1-0bFPOdLiy0q4xAmPdW/ksWTkc9Q=", - "dev": true, - "requires": { - "wrap-fn": "0.1.5" - } - }, - "watchpack": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.4.0.tgz", - "integrity": "sha1-ShRyvLuVK9Cpu0A2gB+VTfs5+qw=", - "dev": true, - "requires": { - "async": "2.6.0", - "chokidar": "1.7.0", - "graceful-fs": "4.1.11" - }, - "dependencies": { - "async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", - "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", - "dev": true, - "requires": { - "lodash": "4.17.4" - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", - "dev": true - } - } - }, - "wbuf": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.2.tgz", - "integrity": "sha1-1pe5nx9ZUS3ydRvkJ2nBWAtYAf4=", - "dev": true, - "requires": { - "minimalistic-assert": "1.0.0" - } - }, - "webpack": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.8.1.tgz", - "integrity": "sha512-5ZXLWWsMqHKFr5y0N3Eo5IIisxeEeRAajNq4mELb/WELOR7srdbQk2N5XiyNy2A/AgvlR3AmeBCZJW8lHrolbw==", - "dev": true, - "requires": { - "acorn": "5.2.1", - "acorn-dynamic-import": "2.0.2", - "ajv": "5.3.0", - "ajv-keywords": "2.1.1", - "async": "2.6.0", - "enhanced-resolve": "3.4.1", - "escope": "3.6.0", - "interpret": "1.0.4", - "json-loader": "0.5.7", - "json5": "0.5.1", - "loader-runner": "2.3.0", - "loader-utils": "1.1.0", - "memory-fs": "0.4.1", - "mkdirp": "0.5.1", - "node-libs-browser": "2.0.0", - "source-map": "0.5.7", - "supports-color": "4.5.0", - "tapable": "0.2.8", - "uglifyjs-webpack-plugin": "0.4.6", - "watchpack": "1.4.0", - "webpack-sources": "1.0.2", - "yargs": "8.0.2" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", - "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", - "dev": true, - "requires": { - "lodash": "4.17.4" - } - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - } - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "2.0.0" - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "strip-bom": "3.0.0" - } - }, - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", - "dev": true - }, - "os-locale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", - "dev": true, - "requires": { - "execa": "0.7.0", - "lcid": "1.0.0", - "mem": "1.1.0" - } - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "2.3.0" - } - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "2.0.0", - "normalize-package-data": "2.4.0", - "path-type": "2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "2.1.0", - "read-pkg": "2.0.0" - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "3.0.0" - } - } - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "yargs": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", - "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", - "dev": true, - "requires": { - "camelcase": "4.1.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "2.1.0", - "read-pkg-up": "2.0.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": "7.0.0" - } - }, - "yargs-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", - "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", - "dev": true, - "requires": { - "camelcase": "4.1.0" - } - } - } - }, - "webpack-dev-middleware": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.0.tgz", - "integrity": "sha1-007++y7dp+HTtdvgcolRMhllFwk=", - "dev": true, - "requires": { - "memory-fs": "0.4.1", - "mime": "1.4.1", - "path-is-absolute": "1.0.1", - "range-parser": "1.2.0", - "time-stamp": "2.0.0" - }, - "dependencies": { - "time-stamp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.0.0.tgz", - "integrity": "sha1-lcakRTDhW6jW9KPsuMOj+sRto1c=", - "dev": true - } - } - }, - "webpack-dev-server": { - "version": "2.9.4", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.9.4.tgz", - "integrity": "sha512-thrqC0EQEoSjXeYgP6pUXcUCZ+LNrKsDPn+mItLnn5VyyNZOJKd06hUP5vqkYwL8nWWXsii0loSF9NHNccT6ow==", - "dev": true, - "requires": { - "ansi-html": "0.0.7", - "array-includes": "3.0.3", - "bonjour": "3.5.0", - "chokidar": "1.7.0", - "compression": "1.7.1", - "connect-history-api-fallback": "1.4.0", - "debug": "3.1.0", - "del": "3.0.0", - "express": "4.16.2", - "html-entities": "1.2.1", - "http-proxy-middleware": "0.17.4", - "import-local": "0.1.1", - "internal-ip": "1.2.0", - "ip": "1.1.5", - "killable": "1.0.0", - "loglevel": "1.5.1", - "opn": "5.1.0", - "portfinder": "1.0.13", - "selfsigned": "1.10.1", - "serve-index": "1.9.1", - "sockjs": "0.3.18", - "sockjs-client": "1.1.4", - "spdy": "3.4.7", - "strip-ansi": "3.0.1", - "supports-color": "4.5.0", - "webpack-dev-middleware": "1.12.0", - "yargs": "6.6.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" - } - }, - "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" - } - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - }, - "yargs": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", - "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", - "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": "4.2.1" - } - }, - "yargs-parser": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", - "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", - "dev": true, - "requires": { - "camelcase": "3.0.0" - } - } - } - }, - "webpack-sources": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.0.2.tgz", - "integrity": "sha512-Y7UddMCv6dGjy81nBv6nuQeFFIt5aalHm7uyDsAsW86nZwfOVPGRr3XMjEQLaT+WKo8rlzhC9qtbJvYKLtAwaw==", - "dev": true, - "requires": { - "source-list-map": "2.0.0", - "source-map": "0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "websocket-driver": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", - "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", - "dev": true, - "requires": { - "http-parser-js": "0.4.9", - "websocket-extensions": "0.1.2" - } - }, - "websocket-extensions": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.2.tgz", - "integrity": "sha1-Dhh4HeYpoYMIzhSBZQ9n/6JpOl0=", - "dev": true - }, - "whet.extend": { - "version": "0.9.9", - "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", - "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=", - "dev": true, - "optional": true - }, - "which": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz", - "integrity": "sha1-RgwdoPgQED0DIam2M6+eV15kSG8=", - "dev": true - }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", - "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==", - "dev": true, - "requires": { - "string-width": "1.0.2" - } - }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", - "dev": true - }, - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "dev": true - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" - } - }, - "wrap-fn": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/wrap-fn/-/wrap-fn-0.1.5.tgz", - "integrity": "sha1-8htuQQFv9KfjFyDbxjoJAWvfmEU=", - "dev": true, - "requires": { - "co": "3.1.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "xmlbuilder": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz", - "integrity": "sha1-aSSGc0ELS6QuGmE2VR0pIjNap3M=", - "dev": true - }, - "xmlcreate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-1.0.2.tgz", - "integrity": "sha1-+mv3YqYKQT+z3Y9LA8WyaSONMI8=", - "dev": true - }, - "xmlrpc": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/xmlrpc/-/xmlrpc-1.3.2.tgz", - "integrity": "sha1-JrLqNHhI0Ciqx+dRS1NRl23j6D0=", - "dev": true, - "requires": { - "sax": "1.2.4", - "xmlbuilder": "8.2.2" - } - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true, - "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", - "window-size": "0.1.0" - }, - "dependencies": { - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true - } - } - }, - "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", - "dev": true, - "requires": { - "camelcase": "3.0.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - } - } - }, - "yauzl": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.9.1.tgz", - "integrity": "sha1-qBmB6nCleUYTOIPwKcWCGok1mn8=", - "dev": true, - "requires": { - "buffer-crc32": "0.2.13", - "fd-slicer": "1.0.1" - } - }, - "zip-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.2.0.tgz", - "integrity": "sha1-qLxF9MG0lpnGuQGYuqyqzbzUugQ=", - "dev": true, - "requires": { - "archiver-utils": "1.3.0", - "compress-commons": "1.2.2", - "lodash": "4.17.4", - "readable-stream": "2.3.3" - }, - "dependencies": { - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", - "dev": true - } - } - } - } -} From a256da7dbc407e28a402cb70cccd46043f03af1d Mon Sep 17 00:00:00 2001 From: "Dominik Schilling (ocean90)" Date: Mon, 13 Nov 2017 19:01:34 +0000 Subject: [PATCH 018/537] Build: Add `npm-shrinkwrap.json`. For compatibility with the build server `fsevent` has been manually removed. Props netweb. See #42483. git-svn-id: https://develop.svn.wordpress.org/branches/4.9@42168 602fd350-edb4-49c9-b593-d223f7449a82 --- npm-shrinkwrap.json | 6270 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 6270 insertions(+) create mode 100644 npm-shrinkwrap.json diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json new file mode 100644 index 0000000000000..0e66445db92c4 --- /dev/null +++ b/npm-shrinkwrap.json @@ -0,0 +1,6270 @@ +{ + "name": "WordPress", + "version": "4.9.0", + "dependencies": { + "abbrev": { + "version": "1.1.1", + "from": "abbrev@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "dev": true + }, + "accepts": { + "version": "1.3.4", + "from": "accepts@>=1.3.4 <1.4.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", + "dev": true + }, + "acorn": { + "version": "5.2.1", + "from": "acorn@>=5.0.0 <6.0.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.2.1.tgz", + "dev": true + }, + "acorn-dynamic-import": { + "version": "2.0.2", + "from": "acorn-dynamic-import@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", + "dev": true, + "dependencies": { + "acorn": { + "version": "4.0.13", + "from": "acorn@>=4.0.3 <5.0.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "dev": true + } + } + }, + "ajv": { + "version": "5.3.0", + "from": "ajv@>=5.1.0 <6.0.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.3.0.tgz", + "dev": true, + "dependencies": { + "co": { + "version": "4.6.0", + "from": "co@>=4.6.0 <5.0.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "dev": true + } + } + }, + "ajv-keywords": { + "version": "2.1.1", + "from": "ajv-keywords@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", + "dev": true + }, + "align-text": { + "version": "0.1.4", + "from": "align-text@>=0.1.3 <0.2.0", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "dev": true + }, + "amdefine": { + "version": "1.0.1", + "from": "amdefine@>=0.0.4", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "dev": true + }, + "ansi-escapes": { + "version": "1.4.0", + "from": "ansi-escapes@>=1.1.0 <2.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "dev": true + }, + "ansi-html": { + "version": "0.0.7", + "from": "ansi-html@0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "from": "ansi-regex@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "from": "ansi-styles@>=2.2.1 <3.0.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "dev": true + }, + "anymatch": { + "version": "1.3.2", + "from": "anymatch@>=1.3.0 <2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "dev": true + }, + "applause": { + "version": "1.2.2", + "from": "applause@1.2.2", + "resolved": "https://registry.npmjs.org/applause/-/applause-1.2.2.tgz", + "dev": true, + "dependencies": { + "argparse": { + "version": "1.0.9", + "from": "argparse@>=1.0.7 <2.0.0", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "dev": true + }, + "esprima": { + "version": "4.0.0", + "from": "esprima@>=4.0.0 <5.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "dev": true + }, + "js-yaml": { + "version": "3.10.0", + "from": "js-yaml@>=3.3.0 <4.0.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", + "dev": true + }, + "lodash": { + "version": "3.10.1", + "from": "lodash@>=3.10.0 <4.0.0", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "dev": true + } + } + }, + "aproba": { + "version": "1.2.0", + "from": "aproba@>=1.0.3 <2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "dev": true + }, + "archive-type": { + "version": "3.2.0", + "from": "archive-type@>=3.0.1 <4.0.0", + "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-3.2.0.tgz", + "dev": true + }, + "archiver": { + "version": "1.3.0", + "from": "archiver@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-1.3.0.tgz", + "dev": true, + "dependencies": { + "async": { + "version": "2.6.0", + "from": "async@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", + "dev": true + }, + "glob": { + "version": "7.1.2", + "from": "glob@>=7.0.0 <8.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "dev": true + }, + "lodash": { + "version": "4.17.4", + "from": "lodash@>=4.8.0 <5.0.0", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "from": "minimatch@>=3.0.4 <4.0.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "dev": true + } + } + }, + "archiver-utils": { + "version": "1.3.0", + "from": "archiver-utils@>=1.3.0 <2.0.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.3.0.tgz", + "dev": true, + "dependencies": { + "glob": { + "version": "7.1.2", + "from": "glob@>=7.0.0 <8.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "dev": true + }, + "graceful-fs": { + "version": "4.1.11", + "from": "graceful-fs@>=4.1.0 <5.0.0", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "dev": true + }, + "lodash": { + "version": "4.17.4", + "from": "lodash@>=4.8.0 <5.0.0", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "from": "minimatch@>=3.0.4 <4.0.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "dev": true + } + } + }, + "are-we-there-yet": { + "version": "1.1.4", + "from": "are-we-there-yet@>=1.1.2 <1.2.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", + "dev": true + }, + "argparse": { + "version": "0.1.16", + "from": "argparse@>=0.1.11 <0.2.0", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz", + "dev": true, + "dependencies": { + "underscore.string": { + "version": "2.4.0", + "from": "underscore.string@>=2.4.0 <2.5.0", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz", + "dev": true + } + } + }, + "arr-diff": { + "version": "2.0.0", + "from": "arr-diff@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "from": "arr-flatten@>=1.0.1 <2.0.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "dev": true + }, + "array-differ": { + "version": "1.0.0", + "from": "array-differ@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "from": "array-find-index@>=1.0.1 <2.0.0", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "dev": true + }, + "array-flatten": { + "version": "2.1.1", + "from": "array-flatten@>=2.1.0 <3.0.0", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.1.tgz", + "dev": true + }, + "array-includes": { + "version": "3.0.3", + "from": "array-includes@>=3.0.3 <4.0.0", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "from": "array-union@>=1.0.1 <2.0.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "dev": true + }, + "array-uniq": { + "version": "1.0.3", + "from": "array-uniq@>=1.0.2 <2.0.0", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "dev": true + }, + "array-unique": { + "version": "0.2.1", + "from": "array-unique@>=0.2.1 <0.3.0", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "dev": true + }, + "asn1": { + "version": "0.2.3", + "from": "asn1@>=0.2.3 <0.3.0", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "dev": true + }, + "asn1.js": { + "version": "4.9.2", + "from": "asn1.js@>=4.0.0 <5.0.0", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.2.tgz", + "dev": true + }, + "assert": { + "version": "1.4.1", + "from": "assert@>=1.1.1 <2.0.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "dev": true + }, + "assert-plus": { + "version": "1.0.0", + "from": "assert-plus@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "dev": true + }, + "async": { + "version": "0.1.22", + "from": "async@>=0.1.22 <0.2.0", + "resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz", + "dev": true + }, + "async-each": { + "version": "1.0.1", + "from": "async-each@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "dev": true + }, + "async-each-series": { + "version": "1.1.0", + "from": "async-each-series@>=1.1.0 <2.0.0", + "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-1.1.0.tgz", + "dev": true, + "optional": true + }, + "async-foreach": { + "version": "0.1.3", + "from": "async-foreach@>=0.1.3 <0.2.0", + "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "from": "asynckit@>=0.4.0 <0.5.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "dev": true + }, + "autoprefixer": { + "version": "6.7.7", + "from": "autoprefixer@>=6.5.1 <7.0.0", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "from": "aws-sign2@>=0.7.0 <0.8.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "dev": true + }, + "aws4": { + "version": "1.6.0", + "from": "aws4@>=1.6.0 <2.0.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "dev": true + }, + "babylon": { + "version": "7.0.0-beta.19", + "from": "babylon@7.0.0-beta.19", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.19.tgz", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "from": "balanced-match@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "dev": true + }, + "base64-js": { + "version": "1.2.1", + "from": "base64-js@>=1.0.2 <2.0.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", + "dev": true + }, + "batch": { + "version": "0.6.1", + "from": "batch@0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "from": "bcrypt-pbkdf@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "dev": true, + "optional": true + }, + "beeper": { + "version": "1.1.1", + "from": "beeper@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", + "dev": true + }, + "big.js": { + "version": "3.2.0", + "from": "big.js@>=3.1.3 <4.0.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "dev": true + }, + "bin-build": { + "version": "2.2.0", + "from": "bin-build@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/bin-build/-/bin-build-2.2.0.tgz", + "dev": true, + "optional": true + }, + "bin-check": { + "version": "2.0.0", + "from": "bin-check@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-2.0.0.tgz", + "dev": true, + "optional": true + }, + "bin-version": { + "version": "1.0.4", + "from": "bin-version@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-1.0.4.tgz", + "dev": true, + "optional": true + }, + "bin-version-check": { + "version": "2.1.0", + "from": "bin-version-check@>=2.1.0 <3.0.0", + "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-2.1.0.tgz", + "dev": true, + "optional": true, + "dependencies": { + "semver": { + "version": "4.3.6", + "from": "semver@>=4.0.3 <5.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "dev": true, + "optional": true + } + } + }, + "bin-wrapper": { + "version": "3.0.2", + "from": "bin-wrapper@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-3.0.2.tgz", + "dev": true, + "optional": true + }, + "binary-extensions": { + "version": "1.10.0", + "from": "binary-extensions@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.10.0.tgz", + "dev": true + }, + "bl": { + "version": "1.2.1", + "from": "bl@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz", + "dev": true + }, + "block-stream": { + "version": "0.0.9", + "from": "block-stream@*", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "dev": true + }, + "bluebird": { + "version": "3.5.1", + "from": "bluebird@>=3.5.0 <3.6.0", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "dev": true + }, + "bn.js": { + "version": "4.11.8", + "from": "bn.js@>=4.1.1 <5.0.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "dev": true + }, + "body-parser": { + "version": "1.14.2", + "from": "body-parser@>=1.14.0 <1.15.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.14.2.tgz", + "dev": true, + "dependencies": { + "debug": { + "version": "2.2.0", + "from": "debug@>=2.2.0 <2.3.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "dev": true + }, + "iconv-lite": { + "version": "0.4.13", + "from": "iconv-lite@0.4.13", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", + "dev": true + }, + "ms": { + "version": "0.7.1", + "from": "ms@0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "dev": true + }, + "qs": { + "version": "5.2.0", + "from": "qs@5.2.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-5.2.0.tgz", + "dev": true + } + } + }, + "bonjour": { + "version": "3.5.0", + "from": "bonjour@>=3.5.0 <4.0.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "dev": true + }, + "boom": { + "version": "4.3.1", + "from": "boom@>=4.0.0 <5.0.0", + "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", + "dev": true + }, + "brace-expansion": { + "version": "1.1.8", + "from": "brace-expansion@>=1.1.7 <2.0.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "dev": true + }, + "braces": { + "version": "1.8.5", + "from": "braces@>=1.8.2 <2.0.0", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "dev": true + }, + "brorand": { + "version": "1.1.0", + "from": "brorand@>=1.0.1 <2.0.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "dev": true + }, + "browserify-aes": { + "version": "1.1.1", + "from": "browserify-aes@>=1.0.4 <2.0.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz", + "dev": true + }, + "browserify-cipher": { + "version": "1.0.0", + "from": "browserify-cipher@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", + "dev": true + }, + "browserify-des": { + "version": "1.0.0", + "from": "browserify-des@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", + "dev": true + }, + "browserify-rsa": { + "version": "4.0.1", + "from": "browserify-rsa@>=4.0.0 <5.0.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "dev": true + }, + "browserify-sign": { + "version": "4.0.4", + "from": "browserify-sign@>=4.0.0 <5.0.0", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "dev": true + }, + "browserify-zlib": { + "version": "0.1.4", + "from": "browserify-zlib@>=0.1.4 <0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", + "dev": true + }, + "browserslist": { + "version": "1.7.7", + "from": "browserslist@>=1.7.6 <2.0.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "dev": true + }, + "buffer": { + "version": "4.9.1", + "from": "buffer@>=4.3.0 <5.0.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "dev": true + }, + "buffer-crc32": { + "version": "0.2.13", + "from": "buffer-crc32@>=0.2.1 <0.3.0", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "dev": true + }, + "buffer-indexof": { + "version": "1.1.1", + "from": "buffer-indexof@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "dev": true + }, + "buffer-to-vinyl": { + "version": "1.1.0", + "from": "buffer-to-vinyl@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/buffer-to-vinyl/-/buffer-to-vinyl-1.1.0.tgz", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "from": "buffer-xor@>=1.0.3 <2.0.0", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "dev": true + }, + "builtin-modules": { + "version": "1.1.1", + "from": "builtin-modules@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "from": "builtin-status-codes@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "dev": true + }, + "bytes": { + "version": "2.2.0", + "from": "bytes@2.2.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.2.0.tgz", + "dev": true + }, + "camelcase": { + "version": "2.1.1", + "from": "camelcase@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "from": "camelcase-keys@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "dev": true + }, + "caniuse-db": { + "version": "1.0.30000760", + "from": "caniuse-db@>=1.0.30000634 <2.0.0", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000760.tgz", + "dev": true + }, + "capture-stack-trace": { + "version": "1.0.0", + "from": "capture-stack-trace@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "from": "caseless@>=0.12.0 <0.13.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "dev": true + }, + "catharsis": { + "version": "0.8.9", + "from": "catharsis@>=0.8.9 <0.9.0", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.9.tgz", + "dev": true + }, + "caw": { + "version": "1.2.0", + "from": "caw@>=1.0.1 <2.0.0", + "resolved": "https://registry.npmjs.org/caw/-/caw-1.2.0.tgz", + "dev": true, + "dependencies": { + "object-assign": { + "version": "3.0.0", + "from": "object-assign@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "dev": true + } + } + }, + "center-align": { + "version": "0.1.3", + "from": "center-align@>=0.1.1 <0.2.0", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "from": "chalk@>=1.1.3 <2.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "dev": true, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "from": "supports-color@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "dev": true + } + } + }, + "chokidar": { + "version": "1.7.0", + "from": "chokidar@>=1.7.0 <2.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "dev": true, + "dependencies": { + "glob-parent": { + "version": "2.0.0", + "from": "glob-parent@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "dev": true + }, + "is-extglob": { + "version": "1.0.0", + "from": "is-extglob@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "from": "is-glob@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "dev": true + } + } + }, + "cipher-base": { + "version": "1.0.4", + "from": "cipher-base@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "dev": true + }, + "clap": { + "version": "1.2.3", + "from": "clap@>=1.0.9 <2.0.0", + "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", + "dev": true, + "optional": true + }, + "clean-css": { + "version": "3.4.28", + "from": "clean-css@>=3.4.2 <3.5.0", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz", + "dev": true, + "dependencies": { + "source-map": { + "version": "0.4.4", + "from": "source-map@>=0.4.0 <0.5.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "dev": true + } + } + }, + "cli": { + "version": "1.0.1", + "from": "cli@>=1.0.0 <1.1.0", + "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", + "dev": true, + "dependencies": { + "glob": { + "version": "7.1.2", + "from": "glob@>=7.1.1 <8.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "from": "minimatch@>=3.0.4 <4.0.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "dev": true + } + } + }, + "cli-cursor": { + "version": "1.0.2", + "from": "cli-cursor@>=1.0.1 <2.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "dev": true + }, + "cli-width": { + "version": "2.2.0", + "from": "cli-width@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "dev": true + }, + "cliui": { + "version": "2.1.0", + "from": "cliui@>=2.1.0 <3.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "dev": true + }, + "clone": { + "version": "1.0.3", + "from": "clone@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", + "dev": true + }, + "clone-stats": { + "version": "0.0.1", + "from": "clone-stats@>=0.0.1 <0.0.2", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "dev": true + }, + "co": { + "version": "3.1.0", + "from": "co@3.1.0", + "resolved": "https://registry.npmjs.org/co/-/co-3.1.0.tgz", + "dev": true + }, + "coa": { + "version": "1.0.4", + "from": "coa@>=1.0.1 <1.1.0", + "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "from": "code-point-at@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "dev": true + }, + "coffee-script": { + "version": "1.3.3", + "from": "coffee-script@>=1.3.3 <1.4.0", + "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz", + "dev": true + }, + "color-convert": { + "version": "1.9.1", + "from": "color-convert@>=1.9.0 <2.0.0", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", + "dev": true + }, + "color-name": { + "version": "1.1.3", + "from": "color-name@>=1.1.1 <2.0.0", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "dev": true + }, + "colors": { + "version": "0.6.2", + "from": "colors@>=0.6.2 <0.7.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", + "dev": true + }, + "combined-stream": { + "version": "1.0.5", + "from": "combined-stream@>=1.0.5 <1.1.0", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "dev": true + }, + "commander": { + "version": "2.8.1", + "from": "commander@>=2.8.0 <2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", + "dev": true + }, + "compress-commons": { + "version": "1.2.2", + "from": "compress-commons@>=1.2.0 <2.0.0", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.2.tgz", + "dev": true + }, + "compressible": { + "version": "2.0.12", + "from": "compressible@>=2.0.11 <2.1.0", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.12.tgz", + "dev": true + }, + "compression": { + "version": "1.7.1", + "from": "compression@>=1.5.2 <2.0.0", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.1.tgz", + "dev": true, + "dependencies": { + "bytes": { + "version": "3.0.0", + "from": "bytes@3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "from": "concat-map@0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "dev": true + }, + "concat-stream": { + "version": "1.6.0", + "from": "concat-stream@>=1.4.1 <2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", + "dev": true + }, + "connect-history-api-fallback": { + "version": "1.4.0", + "from": "connect-history-api-fallback@>=1.3.0 <2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.4.0.tgz", + "dev": true + }, + "console-browserify": { + "version": "1.1.0", + "from": "console-browserify@>=1.1.0 <1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "from": "console-control-strings@>=1.1.0 <1.2.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "dev": true + }, + "console-stream": { + "version": "0.1.1", + "from": "console-stream@>=0.1.1 <0.2.0", + "resolved": "https://registry.npmjs.org/console-stream/-/console-stream-0.1.1.tgz", + "dev": true, + "optional": true + }, + "constants-browserify": { + "version": "1.0.0", + "from": "constants-browserify@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "dev": true + }, + "content-disposition": { + "version": "0.5.2", + "from": "content-disposition@0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "dev": true + }, + "content-type": { + "version": "1.0.4", + "from": "content-type@>=1.0.1 <1.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "dev": true + }, + "convert-source-map": { + "version": "1.5.0", + "from": "convert-source-map@>=1.1.1 <2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz", + "dev": true + }, + "cookie": { + "version": "0.3.1", + "from": "cookie@0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "from": "cookie-signature@1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "from": "core-util-is@>=1.0.0 <1.1.0", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "dev": true + }, + "crc": { + "version": "3.5.0", + "from": "crc@>=3.4.4 <4.0.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.5.0.tgz", + "dev": true + }, + "crc32-stream": { + "version": "2.0.0", + "from": "crc32-stream@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz", + "dev": true + }, + "create-ecdh": { + "version": "4.0.0", + "from": "create-ecdh@>=4.0.0 <5.0.0", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", + "dev": true + }, + "create-error-class": { + "version": "3.0.2", + "from": "create-error-class@>=3.0.1 <4.0.0", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "dev": true + }, + "create-hash": { + "version": "1.1.3", + "from": "create-hash@>=1.1.0 <2.0.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", + "dev": true + }, + "create-hmac": { + "version": "1.1.6", + "from": "create-hmac@>=1.1.0 <2.0.0", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", + "dev": true + }, + "cross-spawn": { + "version": "3.0.1", + "from": "cross-spawn@>=3.0.1 <4.0.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", + "dev": true, + "dependencies": { + "lru-cache": { + "version": "4.1.1", + "from": "lru-cache@>=4.0.1 <5.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", + "dev": true + }, + "which": { + "version": "1.3.0", + "from": "which@>=1.2.9 <2.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", + "dev": true + } + } + }, + "cryptiles": { + "version": "3.1.2", + "from": "cryptiles@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", + "dev": true, + "dependencies": { + "boom": { + "version": "5.2.0", + "from": "boom@>=5.0.0 <6.0.0", + "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", + "dev": true + } + } + }, + "crypto-browserify": { + "version": "3.12.0", + "from": "crypto-browserify@>=3.11.0 <4.0.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "dev": true + }, + "cson-parser": { + "version": "1.3.5", + "from": "cson-parser@>=1.1.0 <2.0.0", + "resolved": "https://registry.npmjs.org/cson-parser/-/cson-parser-1.3.5.tgz", + "dev": true, + "dependencies": { + "coffee-script": { + "version": "1.12.7", + "from": "coffee-script@>=1.10.0 <2.0.0", + "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz", + "dev": true + } + } + }, + "csso": { + "version": "2.0.0", + "from": "csso@>=2.0.0 <2.1.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-2.0.0.tgz", + "dev": true, + "optional": true + }, + "currently-unhandled": { + "version": "0.4.1", + "from": "currently-unhandled@>=0.4.1 <0.5.0", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "dev": true + }, + "d": { + "version": "1.0.0", + "from": "d@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "from": "dashdash@>=1.12.0 <2.0.0", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "dev": true + }, + "date-now": { + "version": "0.1.4", + "from": "date-now@>=0.1.4 <0.2.0", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "dev": true + }, + "dateformat": { + "version": "1.0.2-1.2.3", + "from": "dateformat@1.0.2-1.2.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz", + "dev": true + }, + "debug": { + "version": "2.6.9", + "from": "debug@2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "dev": true + }, + "decamelize": { + "version": "1.2.0", + "from": "decamelize@>=1.1.2 <2.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "dev": true + }, + "decompress": { + "version": "3.0.0", + "from": "decompress@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-3.0.0.tgz", + "dev": true + }, + "decompress-tar": { + "version": "3.1.0", + "from": "decompress-tar@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-3.1.0.tgz", + "dev": true, + "dependencies": { + "clone": { + "version": "0.2.0", + "from": "clone@>=0.2.0 <0.3.0", + "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", + "dev": true + }, + "object-assign": { + "version": "2.1.1", + "from": "object-assign@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", + "dev": true + }, + "vinyl": { + "version": "0.4.6", + "from": "vinyl@>=0.4.3 <0.5.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", + "dev": true + } + } + }, + "decompress-tarbz2": { + "version": "3.1.0", + "from": "decompress-tarbz2@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-3.1.0.tgz", + "dev": true, + "dependencies": { + "clone": { + "version": "0.2.0", + "from": "clone@>=0.2.0 <0.3.0", + "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", + "dev": true + }, + "object-assign": { + "version": "2.1.1", + "from": "object-assign@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", + "dev": true + }, + "vinyl": { + "version": "0.4.6", + "from": "vinyl@>=0.4.3 <0.5.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", + "dev": true + } + } + }, + "decompress-targz": { + "version": "3.1.0", + "from": "decompress-targz@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-3.1.0.tgz", + "dev": true, + "dependencies": { + "clone": { + "version": "0.2.0", + "from": "clone@>=0.2.0 <0.3.0", + "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", + "dev": true + }, + "object-assign": { + "version": "2.1.1", + "from": "object-assign@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", + "dev": true + }, + "vinyl": { + "version": "0.4.6", + "from": "vinyl@>=0.4.3 <0.5.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", + "dev": true + } + } + }, + "decompress-unzip": { + "version": "3.4.0", + "from": "decompress-unzip@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-3.4.0.tgz", + "dev": true, + "dependencies": { + "through2": { + "version": "2.0.3", + "from": "through2@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "dev": true + } + } + }, + "deep-equal": { + "version": "1.0.1", + "from": "deep-equal@>=1.0.1 <2.0.0", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "dev": true + }, + "deep-extend": { + "version": "0.4.2", + "from": "deep-extend@>=0.4.0 <0.5.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", + "dev": true + }, + "deep-for-each": { + "version": "1.0.6", + "from": "deep-for-each@>=1.0.5 <2.0.0", + "resolved": "https://registry.npmjs.org/deep-for-each/-/deep-for-each-1.0.6.tgz", + "dev": true + }, + "define-properties": { + "version": "1.1.2", + "from": "define-properties@>=1.1.2 <2.0.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", + "dev": true + }, + "del": { + "version": "3.0.0", + "from": "del@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", + "dev": true, + "dependencies": { + "pify": { + "version": "3.0.0", + "from": "pify@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "dev": true + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "from": "delayed-stream@>=1.0.0 <1.1.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "from": "delegates@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "dev": true + }, + "depd": { + "version": "1.1.1", + "from": "depd@>=1.1.0 <1.2.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "dev": true + }, + "des.js": { + "version": "1.0.0", + "from": "des.js@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "dev": true + }, + "destroy": { + "version": "1.0.4", + "from": "destroy@>=1.0.4 <1.1.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "dev": true + }, + "detect-node": { + "version": "2.0.3", + "from": "detect-node@>=2.0.3 <3.0.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.3.tgz", + "dev": true + }, + "diff": { + "version": "2.2.3", + "from": "diff@>=2.0.2 <3.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-2.2.3.tgz", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.2", + "from": "diffie-hellman@>=5.0.0 <6.0.0", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", + "dev": true + }, + "dns-equal": { + "version": "1.0.0", + "from": "dns-equal@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "dev": true + }, + "dns-packet": { + "version": "1.2.2", + "from": "dns-packet@>=1.0.1 <2.0.0", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.2.2.tgz", + "dev": true + }, + "dns-txt": { + "version": "2.0.2", + "from": "dns-txt@>=2.0.2 <3.0.0", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "dev": true + }, + "dom-serializer": { + "version": "0.1.0", + "from": "dom-serializer@>=0.0.0 <1.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "dev": true, + "dependencies": { + "domelementtype": { + "version": "1.1.3", + "from": "domelementtype@>=1.1.1 <1.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "dev": true + }, + "entities": { + "version": "1.1.1", + "from": "entities@>=1.1.1 <1.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", + "dev": true + } + } + }, + "domain-browser": { + "version": "1.1.7", + "from": "domain-browser@>=1.1.1 <2.0.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", + "dev": true + }, + "domelementtype": { + "version": "1.3.0", + "from": "domelementtype@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "dev": true + }, + "domhandler": { + "version": "2.3.0", + "from": "domhandler@>=2.3.0 <2.4.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", + "dev": true + }, + "domutils": { + "version": "1.5.1", + "from": "domutils@>=1.5.0 <1.6.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "dev": true + }, + "download": { + "version": "4.4.3", + "from": "download@>=4.1.2 <5.0.0", + "resolved": "https://registry.npmjs.org/download/-/download-4.4.3.tgz", + "dev": true + }, + "duplexer2": { + "version": "0.1.4", + "from": "duplexer2@>=0.1.0 <0.2.0", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "dev": true + }, + "duplexify": { + "version": "3.5.1", + "from": "duplexify@>=3.2.0 <4.0.0", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.1.tgz", + "dev": true + }, + "each-async": { + "version": "1.1.1", + "from": "each-async@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/each-async/-/each-async-1.1.1.tgz", + "dev": true + }, + "ecc-jsbn": { + "version": "0.1.1", + "from": "ecc-jsbn@>=0.1.1 <0.2.0", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "dev": true, + "optional": true + }, + "ee-first": { + "version": "1.1.1", + "from": "ee-first@1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.27", + "from": "electron-to-chromium@>=1.2.7 <2.0.0", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.27.tgz", + "dev": true + }, + "elliptic": { + "version": "6.4.0", + "from": "elliptic@>=6.0.0 <7.0.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", + "dev": true + }, + "emojis-list": { + "version": "2.1.0", + "from": "emojis-list@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "dev": true + }, + "encodeurl": { + "version": "1.0.1", + "from": "encodeurl@>=1.0.1 <1.1.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", + "dev": true + }, + "end-of-stream": { + "version": "1.4.0", + "from": "end-of-stream@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz", + "dev": true + }, + "enhanced-resolve": { + "version": "3.4.1", + "from": "enhanced-resolve@>=3.4.0 <4.0.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", + "dev": true, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "from": "graceful-fs@>=4.1.2 <5.0.0", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "dev": true + } + } + }, + "entities": { + "version": "1.0.0", + "from": "entities@>=1.0.0 <1.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", + "dev": true + }, + "errno": { + "version": "0.1.4", + "from": "errno@>=0.1.3 <0.2.0", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", + "dev": true + }, + "error-ex": { + "version": "1.3.1", + "from": "error-ex@>=1.2.0 <2.0.0", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "dev": true + }, + "es-abstract": { + "version": "1.9.0", + "from": "es-abstract@>=1.7.0 <2.0.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.9.0.tgz", + "dev": true + }, + "es-to-primitive": { + "version": "1.1.1", + "from": "es-to-primitive@>=1.1.1 <2.0.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", + "dev": true + }, + "es5-ext": { + "version": "0.10.35", + "from": "es5-ext@>=0.10.14 <0.11.0", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.35.tgz", + "dev": true + }, + "es6-iterator": { + "version": "2.0.3", + "from": "es6-iterator@>=2.0.1 <2.1.0", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "dev": true + }, + "es6-map": { + "version": "0.1.5", + "from": "es6-map@>=0.1.3 <0.2.0", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "dev": true + }, + "es6-promise": { + "version": "4.1.1", + "from": "es6-promise@>=4.0.3 <5.0.0", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.1.1.tgz", + "dev": true + }, + "es6-set": { + "version": "0.1.5", + "from": "es6-set@>=0.1.5 <0.2.0", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "dev": true + }, + "es6-symbol": { + "version": "3.1.1", + "from": "es6-symbol@>=3.1.1 <3.2.0", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "dev": true + }, + "es6-weak-map": { + "version": "2.0.2", + "from": "es6-weak-map@>=2.0.1 <3.0.0", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "from": "escape-html@>=1.0.3 <1.1.0", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "from": "escape-string-regexp@>=1.0.2 <2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "dev": true + }, + "escope": { + "version": "3.6.0", + "from": "escope@>=3.6.0 <4.0.0", + "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "dev": true + }, + "esprima": { + "version": "1.0.4", + "from": "esprima@>=1.0.2 <1.1.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", + "dev": true + }, + "esrecurse": { + "version": "4.2.0", + "from": "esrecurse@>=4.1.0 <5.0.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", + "dev": true + }, + "estraverse": { + "version": "4.2.0", + "from": "estraverse@>=4.1.1 <5.0.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "dev": true + }, + "etag": { + "version": "1.8.1", + "from": "etag@>=1.8.1 <1.9.0", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "dev": true + }, + "event-emitter": { + "version": "0.3.5", + "from": "event-emitter@>=0.3.5 <0.4.0", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "dev": true + }, + "eventemitter2": { + "version": "0.4.14", + "from": "eventemitter2@>=0.4.13 <0.5.0", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", + "dev": true + }, + "eventemitter3": { + "version": "1.2.0", + "from": "eventemitter3@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", + "dev": true + }, + "events": { + "version": "1.1.1", + "from": "events@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "dev": true + }, + "eventsource": { + "version": "0.1.6", + "from": "eventsource@0.1.6", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz", + "dev": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "from": "evp_bytestokey@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "dev": true + }, + "exec-buffer": { + "version": "2.0.1", + "from": "exec-buffer@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/exec-buffer/-/exec-buffer-2.0.1.tgz", + "dev": true, + "optional": true + }, + "exec-series": { + "version": "1.0.3", + "from": "exec-series@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/exec-series/-/exec-series-1.0.3.tgz", + "dev": true, + "optional": true + }, + "execa": { + "version": "0.7.0", + "from": "execa@>=0.7.0 <0.8.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "dev": true, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "from": "cross-spawn@>=5.0.1 <6.0.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "dev": true + }, + "lru-cache": { + "version": "4.1.1", + "from": "lru-cache@>=4.0.1 <5.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", + "dev": true + }, + "which": { + "version": "1.3.0", + "from": "which@>=1.2.9 <2.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", + "dev": true + } + } + }, + "executable": { + "version": "1.1.0", + "from": "executable@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/executable/-/executable-1.1.0.tgz", + "dev": true, + "optional": true + }, + "exit": { + "version": "0.1.2", + "from": "exit@>=0.1.1 <0.2.0", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "dev": true + }, + "exit-hook": { + "version": "1.1.1", + "from": "exit-hook@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", + "dev": true + }, + "expand-brackets": { + "version": "0.1.5", + "from": "expand-brackets@>=0.1.4 <0.2.0", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "dev": true + }, + "expand-range": { + "version": "1.8.2", + "from": "expand-range@>=1.8.1 <2.0.0", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "dev": true + }, + "express": { + "version": "4.16.2", + "from": "express@>=4.13.3 <5.0.0", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz", + "dev": true, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "from": "array-flatten@1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "dev": true + }, + "body-parser": { + "version": "1.18.2", + "from": "body-parser@1.18.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "from": "bytes@3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "dev": true + }, + "http-errors": { + "version": "1.6.2", + "from": "http-errors@>=1.6.2 <1.7.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "dev": true, + "dependencies": { + "setprototypeof": { + "version": "1.0.3", + "from": "setprototypeof@1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "dev": true + } + } + }, + "iconv-lite": { + "version": "0.4.19", + "from": "iconv-lite@0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "dev": true + }, + "raw-body": { + "version": "2.3.2", + "from": "raw-body@2.3.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", + "dev": true + }, + "statuses": { + "version": "1.3.1", + "from": "statuses@>=1.3.1 <1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "dev": true + } + } + }, + "extend": { + "version": "3.0.1", + "from": "extend@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "dev": true + }, + "extend-shallow": { + "version": "2.0.1", + "from": "extend-shallow@>=2.0.1 <3.0.0", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "dev": true + }, + "extglob": { + "version": "0.3.2", + "from": "extglob@>=0.3.1 <0.4.0", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "dev": true, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "from": "is-extglob@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "dev": true + } + } + }, + "extract-zip": { + "version": "1.6.6", + "from": "extract-zip@>=1.6.5 <2.0.0", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.6.tgz", + "dev": true, + "dependencies": { + "minimist": { + "version": "0.0.8", + "from": "minimist@0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "dev": true + }, + "mkdirp": { + "version": "0.5.0", + "from": "mkdirp@0.5.0", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", + "dev": true + }, + "yauzl": { + "version": "2.4.1", + "from": "yauzl@2.4.1", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", + "dev": true + } + } + }, + "extsprintf": { + "version": "1.3.0", + "from": "extsprintf@1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "dev": true + }, + "fancy-log": { + "version": "1.3.0", + "from": "fancy-log@>=1.1.0 <2.0.0", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.0.tgz", + "dev": true + }, + "fast-deep-equal": { + "version": "1.0.0", + "from": "fast-deep-equal@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "from": "fast-json-stable-stringify@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "dev": true + }, + "faye-websocket": { + "version": "0.10.0", + "from": "faye-websocket@>=0.10.0 <0.11.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "dev": true + }, + "fd-slicer": { + "version": "1.0.1", + "from": "fd-slicer@>=1.0.1 <1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", + "dev": true + }, + "figures": { + "version": "1.7.0", + "from": "figures@>=1.0.1 <2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "dev": true + }, + "file-sync-cmp": { + "version": "0.1.1", + "from": "file-sync-cmp@>=0.1.0 <0.2.0", + "resolved": "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz", + "dev": true + }, + "file-type": { + "version": "3.9.0", + "from": "file-type@>=3.1.0 <4.0.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "dev": true + }, + "filename-regex": { + "version": "2.0.1", + "from": "filename-regex@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "dev": true + }, + "filename-reserved-regex": { + "version": "1.0.0", + "from": "filename-reserved-regex@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-1.0.0.tgz", + "dev": true + }, + "filenamify": { + "version": "1.2.1", + "from": "filenamify@>=1.0.1 <2.0.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-1.2.1.tgz", + "dev": true + }, + "fill-range": { + "version": "2.2.3", + "from": "fill-range@>=2.1.0 <3.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "dev": true + }, + "finalhandler": { + "version": "1.1.0", + "from": "finalhandler@1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "dev": true, + "dependencies": { + "statuses": { + "version": "1.3.1", + "from": "statuses@>=1.3.1 <1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "dev": true + } + } + }, + "find-up": { + "version": "1.1.2", + "from": "find-up@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "dev": true + }, + "find-versions": { + "version": "1.2.1", + "from": "find-versions@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-1.2.1.tgz", + "dev": true, + "optional": true + }, + "findup": { + "version": "0.1.5", + "from": "findup@>=0.1.5 <0.2.0", + "resolved": "https://registry.npmjs.org/findup/-/findup-0.1.5.tgz", + "dev": true, + "dependencies": { + "commander": { + "version": "2.1.0", + "from": "commander@>=2.1.0 <2.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.1.0.tgz", + "dev": true + } + } + }, + "findup-sync": { + "version": "0.1.3", + "from": "findup-sync@>=0.1.2 <0.2.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz", + "dev": true, + "dependencies": { + "glob": { + "version": "3.2.11", + "from": "glob@>=3.2.9 <3.3.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", + "dev": true + }, + "lodash": { + "version": "2.4.2", + "from": "lodash@>=2.4.1 <2.5.0", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "dev": true + }, + "minimatch": { + "version": "0.3.0", + "from": "minimatch@>=0.3.0 <0.4.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", + "dev": true + } + } + }, + "first-chunk-stream": { + "version": "1.0.0", + "from": "first-chunk-stream@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", + "dev": true + }, + "for-in": { + "version": "1.0.2", + "from": "for-in@>=1.0.1 <2.0.0", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "dev": true + }, + "for-own": { + "version": "0.1.5", + "from": "for-own@>=0.1.4 <0.2.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "dev": true + }, + "foreach": { + "version": "2.0.5", + "from": "foreach@>=2.0.5 <3.0.0", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "from": "forever-agent@>=0.6.1 <0.7.0", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "dev": true + }, + "form-data": { + "version": "2.3.1", + "from": "form-data@>=2.3.1 <2.4.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz", + "dev": true + }, + "forwarded": { + "version": "0.1.2", + "from": "forwarded@>=0.1.2 <0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "dev": true + }, + "fresh": { + "version": "0.5.2", + "from": "fresh@0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "dev": true + }, + "fs-extra": { + "version": "1.0.0", + "from": "fs-extra@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", + "dev": true, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "from": "graceful-fs@>=4.1.2 <5.0.0", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "dev": true + } + } + }, + "fs.realpath": { + "version": "1.0.0", + "from": "fs.realpath@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "dev": true + }, + "fstream": { + "version": "1.0.11", + "from": "fstream@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "dev": true, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "from": "graceful-fs@>=4.1.2 <5.0.0", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "dev": true + } + } + }, + "function-bind": { + "version": "1.1.1", + "from": "function-bind@>=1.1.1 <2.0.0", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "from": "gauge@>=2.7.3 <2.8.0", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "dev": true + }, + "gaze": { + "version": "1.1.2", + "from": "gaze@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz", + "dev": true + }, + "generate-function": { + "version": "2.0.0", + "from": "generate-function@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", + "dev": true + }, + "generate-object-property": { + "version": "1.2.0", + "from": "generate-object-property@>=1.1.0 <2.0.0", + "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "dev": true + }, + "get-caller-file": { + "version": "1.0.2", + "from": "get-caller-file@>=1.0.1 <2.0.0", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "dev": true + }, + "get-proxy": { + "version": "1.1.0", + "from": "get-proxy@>=1.0.1 <2.0.0", + "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-1.1.0.tgz", + "dev": true + }, + "get-stdin": { + "version": "4.0.1", + "from": "get-stdin@>=4.0.1 <5.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "from": "get-stream@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "dev": true + }, + "getobject": { + "version": "0.1.0", + "from": "getobject@>=0.1.0 <0.2.0", + "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "from": "getpass@>=0.1.1 <0.2.0", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "dev": true + }, + "gifsicle": { + "version": "3.0.4", + "from": "gifsicle@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/gifsicle/-/gifsicle-3.0.4.tgz", + "dev": true, + "optional": true + }, + "glob": { + "version": "3.1.21", + "from": "glob@>=3.1.21 <3.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", + "dev": true, + "dependencies": { + "inherits": { + "version": "1.0.2", + "from": "inherits@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", + "dev": true + } + } + }, + "glob-base": { + "version": "0.3.0", + "from": "glob-base@>=0.3.0 <0.4.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "dev": true, + "dependencies": { + "glob-parent": { + "version": "2.0.0", + "from": "glob-parent@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "dev": true + }, + "is-extglob": { + "version": "1.0.0", + "from": "is-extglob@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "from": "is-glob@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "dev": true + } + } + }, + "glob-parent": { + "version": "3.1.0", + "from": "glob-parent@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "dev": true + }, + "glob-stream": { + "version": "5.3.5", + "from": "glob-stream@>=5.3.2 <6.0.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz", + "dev": true, + "dependencies": { + "glob": { + "version": "5.0.15", + "from": "glob@>=5.0.3 <6.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "from": "minimatch@>=2.0.0 <3.0.0||>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "dev": true + } + } + }, + "globby": { + "version": "6.1.0", + "from": "globby@>=6.1.0 <7.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "dev": true, + "dependencies": { + "glob": { + "version": "7.1.2", + "from": "glob@>=7.0.3 <8.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "from": "minimatch@>=3.0.4 <4.0.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "dev": true + } + } + }, + "globule": { + "version": "1.2.0", + "from": "globule@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.0.tgz", + "dev": true, + "dependencies": { + "glob": { + "version": "7.1.2", + "from": "glob@>=7.1.1 <7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "dev": true + }, + "lodash": { + "version": "4.17.4", + "from": "lodash@>=4.17.4 <4.18.0", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "from": "minimatch@>=3.0.2 <3.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "dev": true + } + } + }, + "glogg": { + "version": "1.0.0", + "from": "glogg@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.0.tgz", + "dev": true + }, + "got": { + "version": "5.7.1", + "from": "got@>=5.0.0 <6.0.0", + "resolved": "https://registry.npmjs.org/got/-/got-5.7.1.tgz", + "dev": true + }, + "graceful-fs": { + "version": "1.2.3", + "from": "graceful-fs@>=1.2.0 <1.3.0", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", + "dev": true + }, + "graceful-readlink": { + "version": "1.0.1", + "from": "graceful-readlink@>=1.0.0", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "dev": true + }, + "grunt": { + "version": "0.4.5", + "from": "grunt@>=0.4.5 <0.5.0", + "resolved": "https://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz", + "dev": true + }, + "grunt-banner": { + "version": "0.6.0", + "from": "grunt-banner@>=0.6.0 <0.7.0", + "resolved": "https://registry.npmjs.org/grunt-banner/-/grunt-banner-0.6.0.tgz", + "dev": true + }, + "grunt-contrib-clean": { + "version": "1.0.0", + "from": "grunt-contrib-clean@>=1.0.0 <1.1.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-1.0.0.tgz", + "dev": true, + "dependencies": { + "async": { + "version": "1.5.2", + "from": "async@>=1.5.2 <2.0.0", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "dev": true + }, + "glob": { + "version": "7.1.2", + "from": "glob@>=7.0.5 <8.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "from": "minimatch@>=3.0.4 <4.0.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "dev": true + }, + "rimraf": { + "version": "2.6.2", + "from": "rimraf@>=2.5.1 <3.0.0", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "dev": true + } + } + }, + "grunt-contrib-compress": { + "version": "1.3.0", + "from": "grunt-contrib-compress@>=1.3.0 <1.4.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-compress/-/grunt-contrib-compress-1.3.0.tgz", + "dev": true, + "dependencies": { + "lodash": { + "version": "4.17.4", + "from": "lodash@>=4.7.0 <5.0.0", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "dev": true + } + } + }, + "grunt-contrib-concat": { + "version": "1.0.1", + "from": "grunt-contrib-concat@>=1.0.0 <1.1.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-1.0.1.tgz", + "dev": true + }, + "grunt-contrib-copy": { + "version": "1.0.0", + "from": "grunt-contrib-copy@>=1.0.0 <1.1.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-copy/-/grunt-contrib-copy-1.0.0.tgz", + "dev": true + }, + "grunt-contrib-cssmin": { + "version": "1.0.2", + "from": "grunt-contrib-cssmin@>=1.0.2 <1.1.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-cssmin/-/grunt-contrib-cssmin-1.0.2.tgz", + "dev": true + }, + "grunt-contrib-imagemin": { + "version": "1.0.1", + "from": "grunt-contrib-imagemin@>=1.0.0 <1.1.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-imagemin/-/grunt-contrib-imagemin-1.0.1.tgz", + "dev": true, + "dependencies": { + "async": { + "version": "1.5.2", + "from": "async@>=1.5.2 <2.0.0", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "dev": true + } + } + }, + "grunt-contrib-jshint": { + "version": "1.0.0", + "from": "grunt-contrib-jshint@>=1.0.0 <1.1.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-1.0.0.tgz", + "dev": true + }, + "grunt-contrib-qunit": { + "version": "1.3.0", + "from": "grunt-contrib-qunit@>=1.2.0 <2.0.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-qunit/-/grunt-contrib-qunit-1.3.0.tgz", + "dev": true + }, + "grunt-contrib-uglify": { + "version": "2.0.0", + "from": "grunt-contrib-uglify@>=2.0.0 <2.1.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-2.0.0.tgz", + "dev": true + }, + "grunt-contrib-watch": { + "version": "1.0.0", + "from": "grunt-contrib-watch@>=1.0.0 <1.1.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-1.0.0.tgz", + "dev": true, + "dependencies": { + "async": { + "version": "1.5.2", + "from": "async@>=1.5.0 <2.0.0", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "dev": true + }, + "lodash": { + "version": "3.10.1", + "from": "lodash@>=3.10.1 <4.0.0", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "dev": true + } + } + }, + "grunt-includes": { + "version": "0.5.4", + "from": "grunt-includes@>=0.5.1 <0.6.0", + "resolved": "https://registry.npmjs.org/grunt-includes/-/grunt-includes-0.5.4.tgz", + "dev": true + }, + "grunt-jsdoc": { + "version": "2.2.0", + "from": "grunt-jsdoc@>=2.1.0 <3.0.0", + "resolved": "https://registry.npmjs.org/grunt-jsdoc/-/grunt-jsdoc-2.2.0.tgz", + "dev": true + }, + "grunt-jsvalidate": { + "version": "0.2.2", + "from": "grunt-jsvalidate@>=0.2.2 <0.3.0", + "resolved": "https://registry.npmjs.org/grunt-jsvalidate/-/grunt-jsvalidate-0.2.2.tgz", + "dev": true + }, + "grunt-legacy-log": { + "version": "0.1.3", + "from": "grunt-legacy-log@>=0.1.0 <0.2.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-0.1.3.tgz", + "dev": true, + "dependencies": { + "lodash": { + "version": "2.4.2", + "from": "lodash@>=2.4.1 <2.5.0", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "dev": true + }, + "underscore.string": { + "version": "2.3.3", + "from": "underscore.string@>=2.3.3 <2.4.0", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz", + "dev": true + } + } + }, + "grunt-legacy-log-utils": { + "version": "0.1.1", + "from": "grunt-legacy-log-utils@>=0.1.1 <0.2.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-0.1.1.tgz", + "dev": true, + "dependencies": { + "lodash": { + "version": "2.4.2", + "from": "lodash@>=2.4.1 <2.5.0", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "dev": true + }, + "underscore.string": { + "version": "2.3.3", + "from": "underscore.string@>=2.3.3 <2.4.0", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz", + "dev": true + } + } + }, + "grunt-legacy-util": { + "version": "0.2.0", + "from": "grunt-legacy-util@>=0.2.0 <0.3.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz", + "dev": true + }, + "grunt-lib-phantomjs": { + "version": "1.1.0", + "from": "grunt-lib-phantomjs@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/grunt-lib-phantomjs/-/grunt-lib-phantomjs-1.1.0.tgz", + "dev": true, + "dependencies": { + "glob": { + "version": "7.1.2", + "from": "glob@>=7.0.5 <8.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "from": "minimatch@>=3.0.4 <4.0.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "dev": true + }, + "rimraf": { + "version": "2.6.2", + "from": "rimraf@>=2.5.2 <3.0.0", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "dev": true + } + } + }, + "grunt-patch-wordpress": { + "version": "0.4.2", + "from": "grunt-patch-wordpress@>=0.4.2 <0.5.0", + "resolved": "https://registry.npmjs.org/grunt-patch-wordpress/-/grunt-patch-wordpress-0.4.2.tgz", + "dev": true, + "dependencies": { + "assert-plus": { + "version": "0.2.0", + "from": "assert-plus@>=0.2.0 <0.3.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "dev": true + }, + "async": { + "version": "2.6.0", + "from": "async@>=2.0.1 <3.0.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", + "dev": true + }, + "aws-sign2": { + "version": "0.6.0", + "from": "aws-sign2@>=0.6.0 <0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "dev": true + }, + "bl": { + "version": "1.0.3", + "from": "bl@>=1.0.0 <1.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.0.3.tgz", + "dev": true + }, + "boom": { + "version": "2.10.1", + "from": "boom@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "dev": true + }, + "caseless": { + "version": "0.11.0", + "from": "caseless@>=0.11.0 <0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", + "dev": true + }, + "commander": { + "version": "2.11.0", + "from": "commander@>=2.9.0 <3.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "dev": true + }, + "cryptiles": { + "version": "2.0.5", + "from": "cryptiles@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "dev": true + }, + "form-data": { + "version": "1.0.1", + "from": "form-data@>=1.0.0-rc3 <1.1.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-1.0.1.tgz", + "dev": true + }, + "har-validator": { + "version": "2.0.6", + "from": "har-validator@>=2.0.6 <2.1.0", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", + "dev": true + }, + "hawk": { + "version": "3.1.3", + "from": "hawk@>=3.1.0 <3.2.0", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "dev": true + }, + "hoek": { + "version": "2.16.3", + "from": "hoek@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "dev": true + }, + "http-signature": { + "version": "1.1.1", + "from": "http-signature@>=1.1.0 <1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "dev": true + }, + "lodash": { + "version": "4.17.4", + "from": "lodash@>=4.14.0 <5.0.0", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "dev": true + }, + "qs": { + "version": "6.0.4", + "from": "qs@>=6.0.2 <6.1.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.0.4.tgz", + "dev": true + }, + "readable-stream": { + "version": "2.0.6", + "from": "readable-stream@>=2.0.5 <2.1.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "dev": true + }, + "request": { + "version": "2.69.0", + "from": "request@>=2.69.0 <2.70.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.69.0.tgz", + "dev": true + }, + "sntp": { + "version": "1.0.9", + "from": "sntp@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "dev": true + }, + "string_decoder": { + "version": "0.10.31", + "from": "string_decoder@>=0.10.0 <0.11.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "dev": true + }, + "tough-cookie": { + "version": "2.2.2", + "from": "tough-cookie@>=2.2.0 <2.3.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.2.2.tgz", + "dev": true + }, + "underscore": { + "version": "1.8.3", + "from": "underscore@>=1.8.3 <1.9.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", + "dev": true + }, + "underscore.string": { + "version": "3.3.4", + "from": "underscore.string@>=3.3.4 <3.4.0", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.4.tgz", + "dev": true + } + } + }, + "grunt-postcss": { + "version": "0.7.2", + "from": "grunt-postcss@>=0.7.1 <0.8.0", + "resolved": "https://registry.npmjs.org/grunt-postcss/-/grunt-postcss-0.7.2.tgz", + "dev": true, + "dependencies": { + "es6-promise": { + "version": "3.3.1", + "from": "es6-promise@>=3.0.2 <4.0.0", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", + "dev": true + } + } + }, + "grunt-replace": { + "version": "1.0.1", + "from": "grunt-replace@>=1.0.1 <1.1.0", + "resolved": "https://registry.npmjs.org/grunt-replace/-/grunt-replace-1.0.1.tgz", + "dev": true, + "dependencies": { + "lodash": { + "version": "4.17.4", + "from": "lodash@>=4.11.0 <5.0.0", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "dev": true + } + } + }, + "grunt-rtlcss": { + "version": "2.0.1", + "from": "grunt-rtlcss@>=2.0.1 <2.1.0", + "resolved": "https://registry.npmjs.org/grunt-rtlcss/-/grunt-rtlcss-2.0.1.tgz", + "dev": true + }, + "grunt-sass": { + "version": "1.2.1", + "from": "grunt-sass@>=1.2.1 <1.3.0", + "resolved": "https://registry.npmjs.org/grunt-sass/-/grunt-sass-1.2.1.tgz", + "dev": true + }, + "grunt-webpack": { + "version": "3.0.2", + "from": "grunt-webpack@>=3.0.2 <4.0.0", + "resolved": "https://registry.npmjs.org/grunt-webpack/-/grunt-webpack-3.0.2.tgz", + "dev": true, + "dependencies": { + "lodash": { + "version": "4.17.4", + "from": "lodash@>=4.7.0 <5.0.0", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "dev": true + } + } + }, + "gulp-decompress": { + "version": "1.2.0", + "from": "gulp-decompress@>=1.2.0 <2.0.0", + "resolved": "https://registry.npmjs.org/gulp-decompress/-/gulp-decompress-1.2.0.tgz", + "dev": true + }, + "gulp-rename": { + "version": "1.2.2", + "from": "gulp-rename@>=1.2.0 <2.0.0", + "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.2.2.tgz", + "dev": true + }, + "gulp-sourcemaps": { + "version": "1.6.0", + "from": "gulp-sourcemaps@1.6.0", + "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz", + "dev": true, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "from": "graceful-fs@>=4.1.2 <5.0.0", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "dev": true + }, + "through2": { + "version": "2.0.3", + "from": "through2@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "dev": true + } + } + }, + "gulp-util": { + "version": "3.0.8", + "from": "gulp-util@>=3.0.1 <4.0.0", + "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", + "dev": true, + "dependencies": { + "dateformat": { + "version": "2.2.0", + "from": "dateformat@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", + "dev": true + }, + "object-assign": { + "version": "3.0.0", + "from": "object-assign@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "dev": true + }, + "through2": { + "version": "2.0.3", + "from": "through2@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "dev": true + }, + "vinyl": { + "version": "0.5.3", + "from": "vinyl@>=0.5.0 <0.6.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", + "dev": true + } + } + }, + "gulplog": { + "version": "1.0.0", + "from": "gulplog@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", + "dev": true + }, + "gzip-size": { + "version": "1.0.0", + "from": "gzip-size@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-1.0.0.tgz", + "dev": true + }, + "handle-thing": { + "version": "1.2.5", + "from": "handle-thing@>=1.2.5 <2.0.0", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz", + "dev": true + }, + "har-schema": { + "version": "2.0.0", + "from": "har-schema@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "dev": true + }, + "har-validator": { + "version": "5.0.3", + "from": "har-validator@>=5.0.3 <5.1.0", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", + "dev": true + }, + "has": { + "version": "1.0.1", + "from": "has@>=1.0.1 <2.0.0", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "dev": true + }, + "has-ansi": { + "version": "2.0.0", + "from": "has-ansi@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "dev": true + }, + "has-flag": { + "version": "1.0.0", + "from": "has-flag@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "dev": true + }, + "has-gulplog": { + "version": "0.1.0", + "from": "has-gulplog@>=0.1.0 <0.2.0", + "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", + "dev": true + }, + "has-unicode": { + "version": "2.0.1", + "from": "has-unicode@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "dev": true + }, + "hash-base": { + "version": "2.0.2", + "from": "hash-base@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", + "dev": true + }, + "hash.js": { + "version": "1.1.3", + "from": "hash.js@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", + "dev": true + }, + "hasha": { + "version": "2.2.0", + "from": "hasha@>=2.2.0 <3.0.0", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz", + "dev": true + }, + "hawk": { + "version": "6.0.2", + "from": "hawk@>=6.0.2 <6.1.0", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "from": "hmac-drbg@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "dev": true + }, + "hoek": { + "version": "4.2.0", + "from": "hoek@>=4.0.0 <5.0.0", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", + "dev": true + }, + "hooker": { + "version": "0.2.3", + "from": "hooker@>=0.2.3 <0.3.0", + "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", + "dev": true + }, + "hosted-git-info": { + "version": "2.5.0", + "from": "hosted-git-info@>=2.1.4 <3.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", + "dev": true + }, + "hpack.js": { + "version": "2.1.6", + "from": "hpack.js@>=2.1.6 <3.0.0", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "dev": true + }, + "html-entities": { + "version": "1.2.1", + "from": "html-entities@>=1.2.0 <2.0.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", + "dev": true + }, + "htmlparser2": { + "version": "3.8.3", + "from": "htmlparser2@>=3.8.0 <3.9.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", + "dev": true, + "dependencies": { + "isarray": { + "version": "0.0.1", + "from": "isarray@0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "dev": true + }, + "readable-stream": { + "version": "1.1.14", + "from": "readable-stream@>=1.1.0 <1.2.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "dev": true + }, + "string_decoder": { + "version": "0.10.31", + "from": "string_decoder@>=0.10.0 <0.11.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "dev": true + } + } + }, + "http-deceiver": { + "version": "1.2.7", + "from": "http-deceiver@>=1.2.7 <2.0.0", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "dev": true + }, + "http-errors": { + "version": "1.3.1", + "from": "http-errors@>=1.3.1 <1.4.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz", + "dev": true + }, + "http-parser-js": { + "version": "0.4.9", + "from": "http-parser-js@>=0.4.0", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.9.tgz", + "dev": true + }, + "http-proxy": { + "version": "1.16.2", + "from": "http-proxy@>=1.16.2 <2.0.0", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz", + "dev": true + }, + "http-proxy-middleware": { + "version": "0.17.4", + "from": "http-proxy-middleware@>=0.17.4 <0.18.0", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz", + "dev": true, + "dependencies": { + "lodash": { + "version": "4.17.4", + "from": "lodash@>=4.17.2 <5.0.0", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "dev": true + } + } + }, + "http-signature": { + "version": "1.2.0", + "from": "http-signature@>=1.2.0 <1.3.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "dev": true + }, + "https-browserify": { + "version": "0.0.1", + "from": "https-browserify@0.0.1", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz", + "dev": true + }, + "iconv-lite": { + "version": "0.2.11", + "from": "iconv-lite@>=0.2.11 <0.3.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz", + "dev": true + }, + "ieee754": { + "version": "1.1.8", + "from": "ieee754@>=1.1.4 <2.0.0", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", + "dev": true + }, + "imagemin": { + "version": "4.0.0", + "from": "imagemin@>=4.0.0 <5.0.0", + "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-4.0.0.tgz", + "dev": true + }, + "imagemin-gifsicle": { + "version": "4.2.0", + "from": "imagemin-gifsicle@>=4.0.0 <5.0.0", + "resolved": "https://registry.npmjs.org/imagemin-gifsicle/-/imagemin-gifsicle-4.2.0.tgz", + "dev": true, + "optional": true + }, + "imagemin-jpegtran": { + "version": "4.3.2", + "from": "imagemin-jpegtran@>=4.0.0 <5.0.0", + "resolved": "https://registry.npmjs.org/imagemin-jpegtran/-/imagemin-jpegtran-4.3.2.tgz", + "dev": true, + "optional": true, + "dependencies": { + "through2": { + "version": "2.0.3", + "from": "through2@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "dev": true, + "optional": true + } + } + }, + "imagemin-optipng": { + "version": "4.3.0", + "from": "imagemin-optipng@>=4.0.0 <5.0.0", + "resolved": "https://registry.npmjs.org/imagemin-optipng/-/imagemin-optipng-4.3.0.tgz", + "dev": true, + "optional": true + }, + "imagemin-svgo": { + "version": "4.2.1", + "from": "imagemin-svgo@>=4.0.0 <5.0.0", + "resolved": "https://registry.npmjs.org/imagemin-svgo/-/imagemin-svgo-4.2.1.tgz", + "dev": true, + "optional": true, + "dependencies": { + "through2": { + "version": "2.0.3", + "from": "through2@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "dev": true, + "optional": true + } + } + }, + "import-local": { + "version": "0.1.1", + "from": "import-local@>=0.1.1 <0.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-0.1.1.tgz", + "dev": true + }, + "in-publish": { + "version": "2.0.0", + "from": "in-publish@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", + "dev": true + }, + "indent-string": { + "version": "2.1.0", + "from": "indent-string@>=2.1.0 <3.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "dev": true + }, + "indexof": { + "version": "0.0.1", + "from": "indexof@0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "from": "inflight@>=1.0.4 <2.0.0", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "dev": true + }, + "inherits": { + "version": "2.0.3", + "from": "inherits@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "dev": true + }, + "ini": { + "version": "1.3.4", + "from": "ini@>=1.3.0 <1.4.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", + "dev": true + }, + "ink-docstrap": { + "version": "1.3.0", + "from": "ink-docstrap@>=1.3.0 <2.0.0", + "resolved": "https://registry.npmjs.org/ink-docstrap/-/ink-docstrap-1.3.0.tgz", + "dev": true + }, + "inquirer": { + "version": "0.12.0", + "from": "inquirer@>=0.12.0 <0.13.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", + "dev": true, + "dependencies": { + "lodash": { + "version": "4.17.4", + "from": "lodash@>=4.3.0 <5.0.0", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "dev": true + } + } + }, + "internal-ip": { + "version": "1.2.0", + "from": "internal-ip@1.2.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-1.2.0.tgz", + "dev": true + }, + "interpret": { + "version": "1.0.4", + "from": "interpret@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.4.tgz", + "dev": true + }, + "invert-kv": { + "version": "1.0.0", + "from": "invert-kv@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "dev": true + }, + "ip": { + "version": "1.1.5", + "from": "ip@>=1.1.5 <2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "dev": true + }, + "ip-regex": { + "version": "1.0.3", + "from": "ip-regex@>=1.0.1 <2.0.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-1.0.3.tgz", + "dev": true, + "optional": true + }, + "ipaddr.js": { + "version": "1.5.2", + "from": "ipaddr.js@1.5.2", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.5.2.tgz", + "dev": true + }, + "is-absolute": { + "version": "0.1.7", + "from": "is-absolute@>=0.1.5 <0.2.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.1.7.tgz", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "from": "is-arrayish@>=0.2.1 <0.3.0", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "from": "is-binary-path@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "dev": true + }, + "is-buffer": { + "version": "1.1.6", + "from": "is-buffer@>=1.1.5 <2.0.0", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "dev": true + }, + "is-builtin-module": { + "version": "1.0.0", + "from": "is-builtin-module@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "dev": true + }, + "is-bzip2": { + "version": "1.0.0", + "from": "is-bzip2@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-bzip2/-/is-bzip2-1.0.0.tgz", + "dev": true + }, + "is-callable": { + "version": "1.1.3", + "from": "is-callable@>=1.1.3 <2.0.0", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", + "dev": true + }, + "is-date-object": { + "version": "1.0.1", + "from": "is-date-object@>=1.0.1 <2.0.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "dev": true + }, + "is-dotfile": { + "version": "1.0.3", + "from": "is-dotfile@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "from": "is-equal-shallow@>=0.1.3 <0.2.0", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "dev": true + }, + "is-extendable": { + "version": "0.1.1", + "from": "is-extendable@>=0.1.1 <0.2.0", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "from": "is-extglob@>=2.1.0 <3.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "from": "is-finite@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "from": "is-fullwidth-code-point@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "dev": true + }, + "is-gif": { + "version": "1.0.0", + "from": "is-gif@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-gif/-/is-gif-1.0.0.tgz", + "dev": true, + "optional": true + }, + "is-glob": { + "version": "3.1.0", + "from": "is-glob@>=3.1.0 <4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "dev": true + }, + "is-gzip": { + "version": "1.0.0", + "from": "is-gzip@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-gzip/-/is-gzip-1.0.0.tgz", + "dev": true + }, + "is-jpg": { + "version": "1.0.0", + "from": "is-jpg@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-jpg/-/is-jpg-1.0.0.tgz", + "dev": true, + "optional": true + }, + "is-my-json-valid": { + "version": "2.16.1", + "from": "is-my-json-valid@>=2.12.4 <3.0.0", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz", + "dev": true + }, + "is-natural-number": { + "version": "2.1.1", + "from": "is-natural-number@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-2.1.1.tgz", + "dev": true + }, + "is-number": { + "version": "2.1.0", + "from": "is-number@>=2.1.0 <3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "dev": true + }, + "is-obj": { + "version": "1.0.1", + "from": "is-obj@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "dev": true + }, + "is-path-cwd": { + "version": "1.0.0", + "from": "is-path-cwd@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.0", + "from": "is-path-in-cwd@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", + "dev": true + }, + "is-path-inside": { + "version": "1.0.0", + "from": "is-path-inside@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "from": "is-plain-object@>=2.0.1 <3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "dev": true, + "dependencies": { + "isobject": { + "version": "3.0.1", + "from": "isobject@>=3.0.1 <4.0.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "dev": true + } + } + }, + "is-png": { + "version": "1.1.0", + "from": "is-png@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-png/-/is-png-1.1.0.tgz", + "dev": true, + "optional": true + }, + "is-posix-bracket": { + "version": "0.1.1", + "from": "is-posix-bracket@>=0.1.0 <0.2.0", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "from": "is-primitive@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "dev": true + }, + "is-property": { + "version": "1.0.2", + "from": "is-property@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "dev": true + }, + "is-redirect": { + "version": "1.0.0", + "from": "is-redirect@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "dev": true + }, + "is-regex": { + "version": "1.0.4", + "from": "is-regex@>=1.0.4 <2.0.0", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "dev": true + }, + "is-relative": { + "version": "0.1.3", + "from": "is-relative@>=0.1.0 <0.2.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.1.3.tgz", + "dev": true + }, + "is-retry-allowed": { + "version": "1.1.0", + "from": "is-retry-allowed@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "from": "is-stream@>=1.0.1 <2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "dev": true + }, + "is-svg": { + "version": "1.1.1", + "from": "is-svg@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-1.1.1.tgz", + "dev": true, + "optional": true + }, + "is-symbol": { + "version": "1.0.1", + "from": "is-symbol@>=1.0.1 <2.0.0", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", + "dev": true + }, + "is-tar": { + "version": "1.0.0", + "from": "is-tar@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-tar/-/is-tar-1.0.0.tgz", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "from": "is-typedarray@>=1.0.0 <1.1.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "dev": true + }, + "is-url": { + "version": "1.2.2", + "from": "is-url@>=1.2.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.2.tgz", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "from": "is-utf8@>=0.2.0 <0.3.0", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "dev": true + }, + "is-valid-glob": { + "version": "0.3.0", + "from": "is-valid-glob@>=0.3.0 <0.4.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-0.3.0.tgz", + "dev": true + }, + "is-wsl": { + "version": "1.1.0", + "from": "is-wsl@>=1.1.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "dev": true + }, + "is-zip": { + "version": "1.0.0", + "from": "is-zip@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-zip/-/is-zip-1.0.0.tgz", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "from": "isarray@>=1.0.0 <1.1.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "from": "isexe@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "dev": true + }, + "isobject": { + "version": "2.1.0", + "from": "isobject@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "from": "isstream@>=0.1.2 <0.2.0", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "dev": true + }, + "jpegtran-bin": { + "version": "3.2.0", + "from": "jpegtran-bin@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/jpegtran-bin/-/jpegtran-bin-3.2.0.tgz", + "dev": true, + "optional": true + }, + "js-base64": { + "version": "2.3.2", + "from": "js-base64@>=2.1.9 <3.0.0", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.3.2.tgz", + "dev": true + }, + "js-yaml": { + "version": "2.0.5", + "from": "js-yaml@>=2.0.5 <2.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-2.0.5.tgz", + "dev": true + }, + "js2xmlparser": { + "version": "3.0.0", + "from": "js2xmlparser@>=3.0.0 <3.1.0", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-3.0.0.tgz", + "dev": true + }, + "jsbn": { + "version": "0.1.1", + "from": "jsbn@>=0.1.0 <0.2.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "dev": true, + "optional": true + }, + "jsdoc": { + "version": "3.5.5", + "from": "jsdoc@>=3.5.5 <3.6.0", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.5.5.tgz", + "dev": true, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "from": "graceful-fs@>=4.1.9 <5.0.0", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "dev": true + }, + "klaw": { + "version": "2.0.0", + "from": "klaw@>=2.0.0 <2.1.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-2.0.0.tgz", + "dev": true + }, + "underscore": { + "version": "1.8.3", + "from": "underscore@>=1.8.3 <1.9.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", + "dev": true + } + } + }, + "jshint": { + "version": "2.9.5", + "from": "jshint@>=2.9.1 <2.10.0", + "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.9.5.tgz", + "dev": true, + "dependencies": { + "lodash": { + "version": "3.7.0", + "from": "lodash@>=3.7.0 <3.8.0", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.7.0.tgz", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "from": "minimatch@>=3.0.2 <3.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "dev": true + }, + "strip-json-comments": { + "version": "1.0.4", + "from": "strip-json-comments@>=1.0.0 <1.1.0", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", + "dev": true + } + } + }, + "json-loader": { + "version": "0.5.7", + "from": "json-loader@>=0.5.4 <0.6.0", + "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "from": "json-schema@0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "dev": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "from": "json-schema-traverse@>=0.3.0 <0.4.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "dev": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "from": "json-stable-stringify@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "from": "json-stringify-safe@>=5.0.1 <5.1.0", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "dev": true + }, + "json3": { + "version": "3.3.2", + "from": "json3@>=3.3.2 <4.0.0", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "dev": true + }, + "json5": { + "version": "0.5.1", + "from": "json5@>=0.5.1 <0.6.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "dev": true + }, + "jsonfile": { + "version": "2.4.0", + "from": "jsonfile@>=2.1.0 <3.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "dev": true, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "from": "graceful-fs@>=4.1.6 <5.0.0", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "dev": true, + "optional": true + } + } + }, + "jsonify": { + "version": "0.0.0", + "from": "jsonify@>=0.0.0 <0.1.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "dev": true + }, + "jsonpointer": { + "version": "4.0.1", + "from": "jsonpointer@>=4.0.0 <5.0.0", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "from": "jsprim@>=1.2.2 <2.0.0", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "dev": true + }, + "kew": { + "version": "0.7.0", + "from": "kew@>=0.7.0 <0.8.0", + "resolved": "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz", + "dev": true + }, + "killable": { + "version": "1.0.0", + "from": "killable@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.0.tgz", + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "from": "kind-of@>=3.0.2 <4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "dev": true + }, + "klaw": { + "version": "1.3.1", + "from": "klaw@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "dev": true, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "from": "graceful-fs@>=4.1.9 <5.0.0", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "dev": true, + "optional": true + } + } + }, + "lazy-cache": { + "version": "1.0.4", + "from": "lazy-cache@>=1.0.3 <2.0.0", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "dev": true + }, + "lazy-req": { + "version": "1.1.0", + "from": "lazy-req@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/lazy-req/-/lazy-req-1.1.0.tgz", + "dev": true, + "optional": true + }, + "lazystream": { + "version": "1.0.0", + "from": "lazystream@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "dev": true + }, + "lcid": { + "version": "1.0.0", + "from": "lcid@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "dev": true + }, + "livereload-js": { + "version": "2.2.2", + "from": "livereload-js@>=2.2.0 <3.0.0", + "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.2.2.tgz", + "dev": true + }, + "load-json-file": { + "version": "1.1.0", + "from": "load-json-file@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "dev": true, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "from": "graceful-fs@>=4.1.2 <5.0.0", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "dev": true + } + } + }, + "loader-runner": { + "version": "2.3.0", + "from": "loader-runner@>=2.3.0 <3.0.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz", + "dev": true + }, + "loader-utils": { + "version": "1.1.0", + "from": "loader-utils@>=1.1.0 <2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "dev": true + }, + "locate-path": { + "version": "2.0.0", + "from": "locate-path@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "dev": true, + "dependencies": { + "path-exists": { + "version": "3.0.0", + "from": "path-exists@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "dev": true + } + } + }, + "lodash": { + "version": "0.9.2", + "from": "lodash@>=0.9.2 <0.10.0", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz", + "dev": true + }, + "lodash._basecopy": { + "version": "3.0.1", + "from": "lodash._basecopy@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "dev": true + }, + "lodash._basetostring": { + "version": "3.0.1", + "from": "lodash._basetostring@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", + "dev": true + }, + "lodash._basevalues": { + "version": "3.0.0", + "from": "lodash._basevalues@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", + "dev": true + }, + "lodash._getnative": { + "version": "3.9.1", + "from": "lodash._getnative@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "dev": true + }, + "lodash._isiterateecall": { + "version": "3.0.9", + "from": "lodash._isiterateecall@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "dev": true + }, + "lodash._reescape": { + "version": "3.0.0", + "from": "lodash._reescape@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", + "dev": true + }, + "lodash._reevaluate": { + "version": "3.0.0", + "from": "lodash._reevaluate@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", + "dev": true + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "from": "lodash._reinterpolate@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "dev": true + }, + "lodash._root": { + "version": "3.0.1", + "from": "lodash._root@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", + "dev": true + }, + "lodash.assign": { + "version": "4.2.0", + "from": "lodash.assign@>=4.0.9 <5.0.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "dev": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "from": "lodash.clonedeep@>=4.3.2 <5.0.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "dev": true + }, + "lodash.escape": { + "version": "3.2.0", + "from": "lodash.escape@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", + "dev": true + }, + "lodash.escaperegexp": { + "version": "4.1.2", + "from": "lodash.escaperegexp@>=4.1.2 <5.0.0", + "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "dev": true + }, + "lodash.isarguments": { + "version": "3.1.0", + "from": "lodash.isarguments@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "dev": true + }, + "lodash.isarray": { + "version": "3.0.4", + "from": "lodash.isarray@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "dev": true + }, + "lodash.isequal": { + "version": "4.5.0", + "from": "lodash.isequal@>=4.0.0 <5.0.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "dev": true + }, + "lodash.keys": { + "version": "3.1.2", + "from": "lodash.keys@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "dev": true + }, + "lodash.restparam": { + "version": "3.6.1", + "from": "lodash.restparam@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", + "dev": true + }, + "lodash.template": { + "version": "3.6.2", + "from": "lodash.template@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", + "dev": true + }, + "lodash.templatesettings": { + "version": "3.1.1", + "from": "lodash.templatesettings@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", + "dev": true + }, + "logalot": { + "version": "2.1.0", + "from": "logalot@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/logalot/-/logalot-2.1.0.tgz", + "dev": true, + "optional": true + }, + "loglevel": { + "version": "1.5.1", + "from": "loglevel@>=1.4.1 <2.0.0", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.5.1.tgz", + "dev": true + }, + "longest": { + "version": "1.0.1", + "from": "longest@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "dev": true + }, + "loud-rejection": { + "version": "1.6.0", + "from": "loud-rejection@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "dev": true + }, + "lowercase-keys": { + "version": "1.0.0", + "from": "lowercase-keys@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "dev": true + }, + "lpad-align": { + "version": "1.1.2", + "from": "lpad-align@>=1.0.1 <2.0.0", + "resolved": "https://registry.npmjs.org/lpad-align/-/lpad-align-1.1.2.tgz", + "dev": true, + "optional": true + }, + "lru-cache": { + "version": "2.7.3", + "from": "lru-cache@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", + "dev": true + }, + "map-obj": { + "version": "1.0.1", + "from": "map-obj@>=1.0.1 <2.0.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "dev": true + }, + "marked": { + "version": "0.3.6", + "from": "marked@>=0.3.6 <0.4.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.6.tgz", + "dev": true + }, + "matchdep": { + "version": "1.0.1", + "from": "matchdep@>=1.0.0 <1.1.0", + "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-1.0.1.tgz", + "dev": true, + "dependencies": { + "findup-sync": { + "version": "0.3.0", + "from": "findup-sync@>=0.3.0 <0.4.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", + "dev": true + }, + "glob": { + "version": "5.0.15", + "from": "glob@>=5.0.0 <5.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "from": "minimatch@>=2.0.0 <3.0.0||>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "dev": true + } + } + }, + "maxmin": { + "version": "1.1.0", + "from": "maxmin@>=1.1.0 <2.0.0", + "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-1.1.0.tgz", + "dev": true, + "dependencies": { + "pretty-bytes": { + "version": "1.0.4", + "from": "pretty-bytes@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz", + "dev": true + } + } + }, + "md5.js": { + "version": "1.3.4", + "from": "md5.js@>=1.3.4 <2.0.0", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", + "dev": true, + "dependencies": { + "hash-base": { + "version": "3.0.4", + "from": "hash-base@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "dev": true + } + } + }, + "media-typer": { + "version": "0.3.0", + "from": "media-typer@0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "dev": true + }, + "mem": { + "version": "1.1.0", + "from": "mem@>=1.1.0 <2.0.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "dev": true + }, + "memory-fs": { + "version": "0.4.1", + "from": "memory-fs@>=0.4.1 <0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "dev": true + }, + "meow": { + "version": "3.7.0", + "from": "meow@>=3.1.0 <4.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "dev": true + }, + "merge-descriptors": { + "version": "1.0.1", + "from": "merge-descriptors@1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "dev": true + }, + "merge-stream": { + "version": "1.0.1", + "from": "merge-stream@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", + "dev": true + }, + "methods": { + "version": "1.1.2", + "from": "methods@>=1.1.2 <1.2.0", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "dev": true + }, + "micromatch": { + "version": "2.3.11", + "from": "micromatch@>=2.3.7 <3.0.0", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "dev": true, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "from": "is-extglob@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "from": "is-glob@>=2.0.1 <3.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "dev": true + } + } + }, + "miller-rabin": { + "version": "4.0.1", + "from": "miller-rabin@>=4.0.0 <5.0.0", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "dev": true + }, + "mime": { + "version": "1.4.1", + "from": "mime@1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "dev": true + }, + "mime-db": { + "version": "1.30.0", + "from": "mime-db@>=1.30.0 <1.31.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", + "dev": true + }, + "mime-types": { + "version": "2.1.17", + "from": "mime-types@>=2.1.17 <2.2.0", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", + "dev": true + }, + "mimic-fn": { + "version": "1.1.0", + "from": "mimic-fn@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", + "dev": true + }, + "minimalistic-assert": { + "version": "1.0.0", + "from": "minimalistic-assert@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "from": "minimalistic-crypto-utils@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "dev": true + }, + "minimatch": { + "version": "0.2.14", + "from": "minimatch@>=0.2.12 <0.3.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", + "dev": true + }, + "minimist": { + "version": "1.2.0", + "from": "minimist@>=1.1.3 <2.0.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "from": "mkdirp@>=0.5.0 <0.6.0", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "dev": true, + "dependencies": { + "minimist": { + "version": "0.0.8", + "from": "minimist@0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "dev": true + } + } + }, + "moment": { + "version": "2.19.1", + "from": "moment@>=2.14.1 <3.0.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.19.1.tgz", + "dev": true + }, + "ms": { + "version": "2.0.0", + "from": "ms@2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "dev": true + }, + "multicast-dns": { + "version": "6.1.1", + "from": "multicast-dns@>=6.0.1 <7.0.0", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.1.1.tgz", + "dev": true + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "from": "multicast-dns-service-types@>=1.1.0 <2.0.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "dev": true + }, + "multipipe": { + "version": "0.1.2", + "from": "multipipe@>=0.1.2 <0.2.0", + "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", + "dev": true, + "dependencies": { + "duplexer2": { + "version": "0.0.2", + "from": "duplexer2@0.0.2", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", + "dev": true + }, + "isarray": { + "version": "0.0.1", + "from": "isarray@0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "dev": true + }, + "readable-stream": { + "version": "1.1.14", + "from": "readable-stream@>=1.1.9 <1.2.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "dev": true + }, + "string_decoder": { + "version": "0.10.31", + "from": "string_decoder@>=0.10.0 <0.11.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "dev": true + } + } + }, + "mute-stream": { + "version": "0.0.5", + "from": "mute-stream@0.0.5", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", + "dev": true + }, + "nan": { + "version": "2.7.0", + "from": "nan@>=2.3.2 <3.0.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.7.0.tgz", + "dev": true + }, + "negotiator": { + "version": "0.6.1", + "from": "negotiator@0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "dev": true + }, + "node-forge": { + "version": "0.6.33", + "from": "node-forge@0.6.33", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.6.33.tgz", + "dev": true + }, + "node-gyp": { + "version": "3.6.2", + "from": "node-gyp@>=3.3.1 <4.0.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz", + "dev": true, + "dependencies": { + "glob": { + "version": "7.1.2", + "from": "glob@>=7.0.3 <8.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "dev": true + }, + "graceful-fs": { + "version": "4.1.11", + "from": "graceful-fs@>=4.1.2 <5.0.0", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "from": "minimatch@>=3.0.2 <4.0.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "dev": true + }, + "nopt": { + "version": "3.0.6", + "from": "nopt@>=2.0.0 <3.0.0||>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "dev": true + }, + "semver": { + "version": "5.3.0", + "from": "semver@>=5.3.0 <5.4.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "dev": true + } + } + }, + "node-libs-browser": { + "version": "2.0.0", + "from": "node-libs-browser@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.0.0.tgz", + "dev": true, + "dependencies": { + "string_decoder": { + "version": "0.10.31", + "from": "string_decoder@>=0.10.25 <0.11.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "dev": true + } + } + }, + "node-sass": { + "version": "3.13.1", + "from": "node-sass@>=3.7.0 <4.0.0", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-3.13.1.tgz", + "dev": true, + "dependencies": { + "glob": { + "version": "7.1.2", + "from": "glob@>=7.0.3 <8.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "from": "minimatch@>=3.0.4 <4.0.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "dev": true + } + } + }, + "node-status-codes": { + "version": "1.0.0", + "from": "node-status-codes@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz", + "dev": true + }, + "node-uuid": { + "version": "1.4.8", + "from": "node-uuid@>=1.4.7 <1.5.0", + "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", + "dev": true + }, + "nopt": { + "version": "1.0.10", + "from": "nopt@>=1.0.10 <1.1.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "dev": true + }, + "normalize-package-data": { + "version": "2.4.0", + "from": "normalize-package-data@>=2.3.4 <3.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "dev": true + }, + "normalize-path": { + "version": "2.1.1", + "from": "normalize-path@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "from": "normalize-range@>=0.1.2 <0.2.0", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "dev": true + }, + "npm-run-path": { + "version": "2.0.2", + "from": "npm-run-path@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "dev": true + }, + "npmlog": { + "version": "4.1.2", + "from": "npmlog@>=4.0.0 <5.0.0", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "dev": true + }, + "num2fraction": { + "version": "1.2.2", + "from": "num2fraction@>=1.2.2 <2.0.0", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "dev": true + }, + "number-is-nan": { + "version": "1.0.1", + "from": "number-is-nan@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "from": "oauth-sign@>=0.8.2 <0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "from": "object-assign@>=4.1.0 <5.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "dev": true + }, + "object-keys": { + "version": "1.0.11", + "from": "object-keys@>=1.0.8 <2.0.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", + "dev": true + }, + "object.omit": { + "version": "2.0.1", + "from": "object.omit@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "dev": true + }, + "obuf": { + "version": "1.1.1", + "from": "obuf@>=1.1.1 <2.0.0", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.1.tgz", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "from": "on-finished@>=2.3.0 <2.4.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "dev": true + }, + "on-headers": { + "version": "1.0.1", + "from": "on-headers@>=1.0.1 <1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", + "dev": true + }, + "once": { + "version": "1.4.0", + "from": "once@>=1.3.0 <2.0.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "dev": true + }, + "onetime": { + "version": "1.1.0", + "from": "onetime@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "dev": true + }, + "opn": { + "version": "5.1.0", + "from": "opn@>=5.1.0 <6.0.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.1.0.tgz", + "dev": true + }, + "optional": { + "version": "0.1.4", + "from": "optional@>=0.1.0 <0.2.0", + "resolved": "https://registry.npmjs.org/optional/-/optional-0.1.4.tgz", + "dev": true + }, + "optipng-bin": { + "version": "3.1.4", + "from": "optipng-bin@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/optipng-bin/-/optipng-bin-3.1.4.tgz", + "dev": true, + "optional": true + }, + "ordered-read-streams": { + "version": "0.3.0", + "from": "ordered-read-streams@>=0.3.0 <0.4.0", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz", + "dev": true + }, + "original": { + "version": "1.0.0", + "from": "original@>=0.0.5", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.0.tgz", + "dev": true, + "dependencies": { + "url-parse": { + "version": "1.0.5", + "from": "url-parse@>=1.0.0 <1.1.0", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.0.5.tgz", + "dev": true + } + } + }, + "os-browserify": { + "version": "0.2.1", + "from": "os-browserify@>=0.2.0 <0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.2.1.tgz", + "dev": true + }, + "os-filter-obj": { + "version": "1.0.3", + "from": "os-filter-obj@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-1.0.3.tgz", + "dev": true, + "optional": true + }, + "os-homedir": { + "version": "1.0.2", + "from": "os-homedir@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "dev": true + }, + "os-locale": { + "version": "1.4.0", + "from": "os-locale@>=1.4.0 <2.0.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "dev": true + }, + "os-tmpdir": { + "version": "1.0.2", + "from": "os-tmpdir@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "dev": true + }, + "osenv": { + "version": "0.1.4", + "from": "osenv@>=0.0.0 <1.0.0", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "from": "p-finally@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "dev": true + }, + "p-limit": { + "version": "1.1.0", + "from": "p-limit@>=1.1.0 <2.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz", + "dev": true + }, + "p-locate": { + "version": "2.0.0", + "from": "p-locate@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "dev": true + }, + "p-map": { + "version": "1.2.0", + "from": "p-map@>=1.1.1 <2.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "dev": true + }, + "package": { + "version": "1.0.1", + "from": "package@>=1.0.0 <1.2.0", + "resolved": "https://registry.npmjs.org/package/-/package-1.0.1.tgz", + "dev": true + }, + "pako": { + "version": "0.2.9", + "from": "pako@>=0.2.0 <0.3.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "dev": true + }, + "parse-asn1": { + "version": "5.1.0", + "from": "parse-asn1@>=5.0.0 <6.0.0", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", + "dev": true + }, + "parse-glob": { + "version": "3.0.4", + "from": "parse-glob@>=3.0.4 <4.0.0", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "dev": true, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "from": "is-extglob@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "from": "is-glob@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "dev": true + } + } + }, + "parse-json": { + "version": "2.2.0", + "from": "parse-json@>=2.2.0 <3.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "dev": true + }, + "parseurl": { + "version": "1.3.2", + "from": "parseurl@>=1.3.0 <1.4.0", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "dev": true + }, + "path-browserify": { + "version": "0.0.0", + "from": "path-browserify@0.0.0", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "from": "path-dirname@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "dev": true + }, + "path-exists": { + "version": "2.1.0", + "from": "path-exists@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "from": "path-is-absolute@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "from": "path-is-inside@>=1.0.1 <2.0.0", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "from": "path-key@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "from": "path-to-regexp@0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "dev": true + }, + "path-type": { + "version": "1.1.0", + "from": "path-type@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "dev": true, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "from": "graceful-fs@>=4.1.2 <5.0.0", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "dev": true + } + } + }, + "pbkdf2": { + "version": "3.0.14", + "from": "pbkdf2@>=3.0.3 <4.0.0", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz", + "dev": true + }, + "pend": { + "version": "1.2.0", + "from": "pend@>=1.2.0 <1.3.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "from": "performance-now@>=2.1.0 <3.0.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "dev": true + }, + "phantomjs-prebuilt": { + "version": "2.1.16", + "from": "phantomjs-prebuilt@>=2.1.3 <3.0.0", + "resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz", + "dev": true, + "dependencies": { + "which": { + "version": "1.3.0", + "from": "which@>=1.2.10 <2.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", + "dev": true + } + } + }, + "pify": { + "version": "2.3.0", + "from": "pify@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "from": "pinkie@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "from": "pinkie-promise@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "dev": true + }, + "pkg-dir": { + "version": "2.0.0", + "from": "pkg-dir@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "dev": true, + "dependencies": { + "find-up": { + "version": "2.1.0", + "from": "find-up@>=2.1.0 <3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "dev": true + } + } + }, + "portfinder": { + "version": "1.0.13", + "from": "portfinder@>=1.0.9 <2.0.0", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.13.tgz", + "dev": true, + "dependencies": { + "async": { + "version": "1.5.2", + "from": "async@>=1.5.2 <2.0.0", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "dev": true + } + } + }, + "postcss": { + "version": "5.2.18", + "from": "postcss@>=5.2.16 <6.0.0", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "dev": true + }, + "postcss-value-parser": { + "version": "3.3.0", + "from": "postcss-value-parser@>=3.2.3 <4.0.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", + "dev": true + }, + "prepend-http": { + "version": "1.0.4", + "from": "prepend-http@>=1.0.1 <2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "from": "preserve@>=0.2.0 <0.3.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "dev": true + }, + "pretty-bytes": { + "version": "3.0.1", + "from": "pretty-bytes@>=3.0.1 <4.0.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-3.0.1.tgz", + "dev": true + }, + "process": { + "version": "0.11.10", + "from": "process@>=0.11.0 <0.12.0", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "dev": true + }, + "process-nextick-args": { + "version": "1.0.7", + "from": "process-nextick-args@>=1.0.6 <1.1.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "dev": true + }, + "progress": { + "version": "1.1.8", + "from": "progress@>=1.1.8 <2.0.0", + "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "dev": true + }, + "proxy-addr": { + "version": "2.0.2", + "from": "proxy-addr@>=2.0.2 <2.1.0", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.2.tgz", + "dev": true + }, + "prr": { + "version": "0.0.0", + "from": "prr@>=0.0.0 <0.1.0", + "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "from": "pseudomap@>=1.0.2 <2.0.0", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "dev": true + }, + "public-encrypt": { + "version": "4.0.0", + "from": "public-encrypt@>=4.0.0 <5.0.0", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", + "dev": true + }, + "punycode": { + "version": "1.4.1", + "from": "punycode@>=1.4.1 <2.0.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "dev": true + }, + "q": { + "version": "1.5.1", + "from": "q@>=1.1.2 <2.0.0", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "dev": true, + "optional": true + }, + "qs": { + "version": "6.5.1", + "from": "qs@>=6.5.1 <6.6.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "dev": true + }, + "querystring": { + "version": "0.2.0", + "from": "querystring@0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "from": "querystring-es3@>=0.2.0 <0.3.0", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "dev": true + }, + "querystringify": { + "version": "0.0.4", + "from": "querystringify@>=0.0.0 <0.1.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-0.0.4.tgz", + "dev": true + }, + "randomatic": { + "version": "1.1.7", + "from": "randomatic@>=1.1.3 <2.0.0", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", + "dev": true, + "dependencies": { + "is-number": { + "version": "3.0.0", + "from": "is-number@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "dev": true, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "from": "kind-of@^3.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "dev": true + } + } + }, + "kind-of": { + "version": "4.0.0", + "from": "kind-of@>=4.0.0 <5.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "dev": true + } + } + }, + "randombytes": { + "version": "2.0.5", + "from": "randombytes@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz", + "dev": true + }, + "randomfill": { + "version": "1.0.3", + "from": "randomfill@>=1.0.3 <2.0.0", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.3.tgz", + "dev": true + }, + "range-parser": { + "version": "1.2.0", + "from": "range-parser@>=1.2.0 <1.3.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "dev": true + }, + "raw-body": { + "version": "2.1.7", + "from": "raw-body@>=2.1.5 <2.2.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.1.7.tgz", + "dev": true, + "dependencies": { + "bytes": { + "version": "2.4.0", + "from": "bytes@2.4.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", + "dev": true + }, + "iconv-lite": { + "version": "0.4.13", + "from": "iconv-lite@0.4.13", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", + "dev": true + } + } + }, + "rc": { + "version": "1.2.2", + "from": "rc@>=1.1.2 <2.0.0", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.2.tgz", + "dev": true + }, + "read-all-stream": { + "version": "3.1.0", + "from": "read-all-stream@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz", + "dev": true + }, + "read-pkg": { + "version": "1.1.0", + "from": "read-pkg@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "dev": true + }, + "read-pkg-up": { + "version": "1.0.1", + "from": "read-pkg-up@>=1.0.1 <2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "dev": true + }, + "readable-stream": { + "version": "2.3.3", + "from": "readable-stream@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "dev": true + }, + "readdirp": { + "version": "2.1.0", + "from": "readdirp@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "dev": true, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "from": "graceful-fs@>=4.1.2 <5.0.0", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "from": "minimatch@>=3.0.2 <4.0.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "dev": true + } + } + }, + "readline2": { + "version": "1.0.1", + "from": "readline2@>=1.0.1 <2.0.0", + "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", + "dev": true + }, + "redent": { + "version": "1.0.0", + "from": "redent@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "dev": true + }, + "regex-cache": { + "version": "0.4.4", + "from": "regex-cache@>=0.4.2 <0.5.0", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "dev": true + }, + "remove-trailing-separator": { + "version": "1.1.0", + "from": "remove-trailing-separator@>=1.0.1 <2.0.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "dev": true + }, + "repeat-element": { + "version": "1.1.2", + "from": "repeat-element@>=1.1.2 <2.0.0", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "from": "repeat-string@>=1.5.2 <2.0.0", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "from": "repeating@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "dev": true + }, + "replace-ext": { + "version": "0.0.1", + "from": "replace-ext@0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "dev": true + }, + "request": { + "version": "2.83.0", + "from": "request@>=2.81.0 <3.0.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", + "dev": true, + "dependencies": { + "tunnel-agent": { + "version": "0.6.0", + "from": "tunnel-agent@>=0.6.0 <0.7.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "dev": true + }, + "uuid": { + "version": "3.1.0", + "from": "uuid@>=3.1.0 <4.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", + "dev": true + } + } + }, + "request-progress": { + "version": "2.0.1", + "from": "request-progress@>=2.0.1 <3.0.0", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-2.0.1.tgz", + "dev": true + }, + "require-directory": { + "version": "2.1.1", + "from": "require-directory@>=2.1.1 <3.0.0", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "from": "require-main-filename@>=1.0.1 <2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "from": "requires-port@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "dev": true + }, + "requizzle": { + "version": "0.2.1", + "from": "requizzle@>=0.2.1 <0.3.0", + "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.1.tgz", + "dev": true, + "dependencies": { + "underscore": { + "version": "1.6.0", + "from": "underscore@>=1.6.0 <1.7.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "dev": true + } + } + }, + "resolve": { + "version": "1.1.7", + "from": "resolve@>=1.1.6 <1.2.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "dev": true + }, + "resolve-cwd": { + "version": "2.0.0", + "from": "resolve-cwd@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "dev": true + }, + "resolve-from": { + "version": "3.0.0", + "from": "resolve-from@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "dev": true + }, + "restore-cursor": { + "version": "1.0.1", + "from": "restore-cursor@>=1.0.1 <2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "dev": true + }, + "right-align": { + "version": "0.1.3", + "from": "right-align@>=0.1.1 <0.2.0", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "dev": true + }, + "rimraf": { + "version": "2.2.8", + "from": "rimraf@>=2.2.8 <2.3.0", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", + "dev": true + }, + "ripemd160": { + "version": "2.0.1", + "from": "ripemd160@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", + "dev": true + }, + "rtlcss": { + "version": "2.2.1", + "from": "rtlcss@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-2.2.1.tgz", + "dev": true, + "dependencies": { + "ansi-styles": { + "version": "3.2.0", + "from": "ansi-styles@>=3.1.0 <4.0.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "dev": true + }, + "chalk": { + "version": "2.3.0", + "from": "chalk@>=2.3.0 <3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", + "dev": true + }, + "has-flag": { + "version": "2.0.0", + "from": "has-flag@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "dev": true + }, + "postcss": { + "version": "6.0.14", + "from": "postcss@>=6.0.14 <7.0.0", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.14.tgz", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "from": "source-map@>=0.6.1 <0.7.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "dev": true + }, + "supports-color": { + "version": "4.5.0", + "from": "supports-color@>=4.0.0 <5.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "dev": true + } + } + }, + "run-async": { + "version": "0.1.0", + "from": "run-async@>=0.1.0 <0.2.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", + "dev": true + }, + "rx-lite": { + "version": "3.1.2", + "from": "rx-lite@>=3.1.2 <4.0.0", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", + "dev": true + }, + "safe-buffer": { + "version": "5.1.1", + "from": "safe-buffer@>=5.1.1 <5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "dev": true + }, + "sanitize-html": { + "version": "1.15.0", + "from": "sanitize-html@>=1.13.0 <2.0.0", + "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-1.15.0.tgz", + "dev": true, + "dependencies": { + "entities": { + "version": "1.1.1", + "from": "entities@>=1.1.1 <2.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", + "dev": true + }, + "htmlparser2": { + "version": "3.9.2", + "from": "htmlparser2@>=3.9.0 <4.0.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", + "dev": true + } + } + }, + "sass-graph": { + "version": "2.2.4", + "from": "sass-graph@>=2.1.1 <3.0.0", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", + "dev": true, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "from": "camelcase@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "from": "cliui@>=3.2.0 <4.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "dev": true + }, + "glob": { + "version": "7.1.2", + "from": "glob@>=7.0.0 <8.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "dev": true + }, + "lodash": { + "version": "4.17.4", + "from": "lodash@>=4.0.0 <5.0.0", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "from": "minimatch@>=3.0.4 <4.0.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "dev": true + }, + "yargs": { + "version": "7.1.0", + "from": "yargs@>=7.0.0 <8.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", + "dev": true + } + } + }, + "sax": { + "version": "1.2.4", + "from": "sax@>=1.2.1 <1.3.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "dev": true + }, + "scss-tokenizer": { + "version": "0.2.3", + "from": "scss-tokenizer@>=0.2.3 <0.3.0", + "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", + "dev": true, + "dependencies": { + "source-map": { + "version": "0.4.4", + "from": "source-map@>=0.4.2 <0.5.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "dev": true + } + } + }, + "seek-bzip": { + "version": "1.0.5", + "from": "seek-bzip@>=1.0.3 <2.0.0", + "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz", + "dev": true + }, + "select-hose": { + "version": "2.0.0", + "from": "select-hose@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "dev": true + }, + "selfsigned": { + "version": "1.10.1", + "from": "selfsigned@>=1.9.1 <2.0.0", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.1.tgz", + "dev": true + }, + "semver": { + "version": "5.4.1", + "from": "semver@>=2.0.0 <3.0.0||>=3.0.0 <4.0.0||>=4.0.0 <5.0.0||>=5.0.0 <6.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "dev": true + }, + "semver-regex": { + "version": "1.0.0", + "from": "semver-regex@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-1.0.0.tgz", + "dev": true, + "optional": true + }, + "semver-truncate": { + "version": "1.1.2", + "from": "semver-truncate@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz", + "dev": true, + "optional": true + }, + "send": { + "version": "0.16.1", + "from": "send@0.16.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz", + "dev": true, + "dependencies": { + "http-errors": { + "version": "1.6.2", + "from": "http-errors@>=1.6.2 <1.7.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "dev": true + }, + "setprototypeof": { + "version": "1.0.3", + "from": "setprototypeof@1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "dev": true + }, + "statuses": { + "version": "1.3.1", + "from": "statuses@>=1.3.1 <1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "dev": true + } + } + }, + "serve-index": { + "version": "1.9.1", + "from": "serve-index@>=1.7.2 <2.0.0", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "dev": true, + "dependencies": { + "http-errors": { + "version": "1.6.2", + "from": "http-errors@>=1.6.2 <1.7.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "dev": true + }, + "setprototypeof": { + "version": "1.0.3", + "from": "setprototypeof@1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "dev": true + } + } + }, + "serve-static": { + "version": "1.13.1", + "from": "serve-static@1.13.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz", + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "from": "set-blocking@>=2.0.0 <2.1.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "dev": true + }, + "set-immediate-shim": { + "version": "1.0.1", + "from": "set-immediate-shim@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "dev": true + }, + "setimmediate": { + "version": "1.0.5", + "from": "setimmediate@>=1.0.4 <2.0.0", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "from": "setprototypeof@1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "dev": true + }, + "sha.js": { + "version": "2.4.9", + "from": "sha.js@>=2.4.0 <3.0.0", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.9.tgz", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "from": "shebang-command@>=1.2.0 <2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "dev": true + }, + "shebang-regex": { + "version": "1.0.0", + "from": "shebang-regex@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "dev": true + }, + "shelljs": { + "version": "0.3.0", + "from": "shelljs@>=0.3.0 <0.4.0", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", + "dev": true + }, + "sigmund": { + "version": "1.0.1", + "from": "sigmund@>=1.0.0 <1.1.0", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "from": "signal-exit@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "dev": true + }, + "sntp": { + "version": "2.1.0", + "from": "sntp@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", + "dev": true + }, + "sockjs": { + "version": "0.3.18", + "from": "sockjs@0.3.18", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.18.tgz", + "dev": true + }, + "sockjs-client": { + "version": "1.1.4", + "from": "sockjs-client@1.1.4", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.4.tgz", + "dev": true, + "dependencies": { + "faye-websocket": { + "version": "0.11.1", + "from": "faye-websocket@>=0.11.0 <0.12.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", + "dev": true + } + } + }, + "source-list-map": { + "version": "2.0.0", + "from": "source-list-map@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "from": "source-map@>=0.5.6 <0.6.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "dev": true + }, + "sparkles": { + "version": "1.0.0", + "from": "sparkles@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz", + "dev": true + }, + "spdx-correct": { + "version": "1.0.2", + "from": "spdx-correct@>=1.0.0 <1.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", + "dev": true + }, + "spdx-expression-parse": { + "version": "1.0.4", + "from": "spdx-expression-parse@>=1.0.0 <1.1.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", + "dev": true + }, + "spdx-license-ids": { + "version": "1.2.2", + "from": "spdx-license-ids@>=1.0.2 <2.0.0", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", + "dev": true + }, + "spdy": { + "version": "3.4.7", + "from": "spdy@>=3.4.1 <4.0.0", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz", + "dev": true + }, + "spdy-transport": { + "version": "2.0.20", + "from": "spdy-transport@>=2.0.18 <3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.0.20.tgz", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "from": "sprintf-js@>=1.0.2 <1.1.0", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "dev": true + }, + "squeak": { + "version": "1.3.0", + "from": "squeak@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/squeak/-/squeak-1.3.0.tgz", + "dev": true, + "optional": true + }, + "srcset": { + "version": "1.0.0", + "from": "srcset@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/srcset/-/srcset-1.0.0.tgz", + "dev": true + }, + "sshpk": { + "version": "1.13.1", + "from": "sshpk@>=1.7.0 <2.0.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", + "dev": true + }, + "stack-trace": { + "version": "0.0.9", + "from": "stack-trace@0.0.9", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz", + "dev": true + }, + "stat-mode": { + "version": "0.2.2", + "from": "stat-mode@>=0.2.0 <0.3.0", + "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-0.2.2.tgz", + "dev": true + }, + "statuses": { + "version": "1.4.0", + "from": "statuses@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "dev": true + }, + "stream-browserify": { + "version": "2.0.1", + "from": "stream-browserify@>=2.0.1 <3.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", + "dev": true + }, + "stream-buffers": { + "version": "2.2.0", + "from": "stream-buffers@>=2.1.0 <3.0.0", + "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", + "dev": true + }, + "stream-combiner2": { + "version": "1.1.1", + "from": "stream-combiner2@>=1.1.1 <2.0.0", + "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "dev": true + }, + "stream-http": { + "version": "2.7.2", + "from": "stream-http@>=2.3.1 <3.0.0", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", + "dev": true + }, + "stream-shift": { + "version": "1.0.0", + "from": "stream-shift@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "dev": true + }, + "string_decoder": { + "version": "1.0.3", + "from": "string_decoder@>=1.0.3 <1.1.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "dev": true + }, + "string-width": { + "version": "1.0.2", + "from": "string-width@>=1.0.1 <2.0.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "dev": true + }, + "stringstream": { + "version": "0.0.5", + "from": "stringstream@>=0.0.5 <0.1.0", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "from": "strip-ansi@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "dev": true + }, + "strip-bom": { + "version": "2.0.0", + "from": "strip-bom@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "dev": true + }, + "strip-bom-stream": { + "version": "1.0.0", + "from": "strip-bom-stream@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz", + "dev": true + }, + "strip-dirs": { + "version": "1.1.1", + "from": "strip-dirs@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-1.1.1.tgz", + "dev": true + }, + "strip-eof": { + "version": "1.0.0", + "from": "strip-eof@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "dev": true + }, + "strip-indent": { + "version": "1.0.1", + "from": "strip-indent@>=1.0.1 <2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "dev": true + }, + "strip-json-comments": { + "version": "2.0.1", + "from": "strip-json-comments@>=2.0.1 <2.1.0", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "dev": true + }, + "strip-outer": { + "version": "1.0.0", + "from": "strip-outer@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.0.tgz", + "dev": true + }, + "sum-up": { + "version": "1.0.3", + "from": "sum-up@>=1.0.1 <2.0.0", + "resolved": "https://registry.npmjs.org/sum-up/-/sum-up-1.0.3.tgz", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "from": "supports-color@>=3.2.3 <4.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "dev": true + }, + "svgo": { + "version": "0.6.6", + "from": "svgo@>=0.6.0 <0.7.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.6.6.tgz", + "dev": true, + "optional": true, + "dependencies": { + "argparse": { + "version": "1.0.9", + "from": "argparse@>=1.0.7 <2.0.0", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "dev": true, + "optional": true + }, + "colors": { + "version": "1.1.2", + "from": "colors@>=1.1.2 <1.2.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "dev": true, + "optional": true + }, + "esprima": { + "version": "2.7.3", + "from": "esprima@>=2.6.0 <3.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "dev": true, + "optional": true + }, + "js-yaml": { + "version": "3.6.1", + "from": "js-yaml@>=3.6.0 <3.7.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.6.1.tgz", + "dev": true, + "optional": true + } + } + }, + "taffydb": { + "version": "2.6.2", + "from": "taffydb@2.6.2", + "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", + "dev": true + }, + "tapable": { + "version": "0.2.8", + "from": "tapable@>=0.2.7 <0.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", + "dev": true + }, + "tar": { + "version": "2.2.1", + "from": "tar@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "dev": true + }, + "tar-stream": { + "version": "1.5.4", + "from": "tar-stream@>=1.5.0 <2.0.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.4.tgz", + "dev": true + }, + "tempfile": { + "version": "1.1.1", + "from": "tempfile@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-1.1.1.tgz", + "dev": true + }, + "temporary": { + "version": "0.0.8", + "from": "temporary@>=0.0.8 <0.0.9", + "resolved": "https://registry.npmjs.org/temporary/-/temporary-0.0.8.tgz", + "dev": true + }, + "throttleit": { + "version": "1.0.0", + "from": "throttleit@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", + "dev": true + }, + "through": { + "version": "2.3.8", + "from": "through@>=2.3.6 <3.0.0", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "dev": true + }, + "through2": { + "version": "0.6.5", + "from": "through2@>=0.6.1 <0.7.0", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "dev": true, + "dependencies": { + "isarray": { + "version": "0.0.1", + "from": "isarray@0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "from": "readable-stream@>=1.0.33-1 <1.1.0-0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "dev": true + }, + "string_decoder": { + "version": "0.10.31", + "from": "string_decoder@>=0.10.0 <0.11.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "dev": true + } + } + }, + "through2-filter": { + "version": "2.0.0", + "from": "through2-filter@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz", + "dev": true, + "dependencies": { + "through2": { + "version": "2.0.3", + "from": "through2@>=2.0.0 <2.1.0", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "dev": true + } + } + }, + "thunky": { + "version": "0.1.0", + "from": "thunky@>=0.1.0 <0.2.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-0.1.0.tgz", + "dev": true + }, + "time-stamp": { + "version": "1.1.0", + "from": "time-stamp@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "dev": true + }, + "timed-out": { + "version": "3.1.3", + "from": "timed-out@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-3.1.3.tgz", + "dev": true + }, + "timers-browserify": { + "version": "2.0.4", + "from": "timers-browserify@>=2.0.2 <3.0.0", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.4.tgz", + "dev": true + }, + "tiny-lr": { + "version": "0.2.1", + "from": "tiny-lr@>=0.2.1 <0.3.0", + "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-0.2.1.tgz", + "dev": true, + "dependencies": { + "debug": { + "version": "2.2.0", + "from": "debug@>=2.2.0 <2.3.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "dev": true + }, + "ms": { + "version": "0.7.1", + "from": "ms@0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "dev": true + }, + "qs": { + "version": "5.1.0", + "from": "qs@>=5.1.0 <5.2.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-5.1.0.tgz", + "dev": true + } + } + }, + "to-absolute-glob": { + "version": "0.1.1", + "from": "to-absolute-glob@>=0.1.1 <0.2.0", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz", + "dev": true + }, + "to-arraybuffer": { + "version": "1.0.1", + "from": "to-arraybuffer@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "dev": true + }, + "tough-cookie": { + "version": "2.3.3", + "from": "tough-cookie@>=2.3.3 <2.4.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", + "dev": true + }, + "trim-newlines": { + "version": "1.0.0", + "from": "trim-newlines@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "dev": true + }, + "trim-repeated": { + "version": "1.0.0", + "from": "trim-repeated@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "dev": true + }, + "tty-browserify": { + "version": "0.0.0", + "from": "tty-browserify@0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "dev": true + }, + "tunnel-agent": { + "version": "0.4.3", + "from": "tunnel-agent@>=0.4.0 <0.5.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", + "dev": true + }, + "tweetnacl": { + "version": "0.14.5", + "from": "tweetnacl@>=0.14.0 <0.15.0", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "dev": true, + "optional": true + }, + "type-is": { + "version": "1.6.15", + "from": "type-is@>=1.6.10 <1.7.0", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", + "dev": true + }, + "typedarray": { + "version": "0.0.6", + "from": "typedarray@>=0.0.6 <0.0.7", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "dev": true + }, + "uglify-js": { + "version": "2.7.5", + "from": "uglify-js@>=2.7.0 <2.8.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.7.5.tgz", + "dev": true, + "dependencies": { + "async": { + "version": "0.2.10", + "from": "async@>=0.2.6 <0.3.0", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "dev": true + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "from": "uglify-to-browserify@>=1.0.0 <1.1.0", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "dev": true + }, + "uglifyjs-webpack-plugin": { + "version": "0.4.6", + "from": "uglifyjs-webpack-plugin@>=0.4.6 <0.5.0", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", + "dev": true, + "dependencies": { + "uglify-js": { + "version": "2.8.29", + "from": "uglify-js@>=2.8.29 <3.0.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "dev": true + } + } + }, + "underscore": { + "version": "1.7.0", + "from": "underscore@>=1.7.0 <1.8.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", + "dev": true + }, + "underscore-contrib": { + "version": "0.3.0", + "from": "underscore-contrib@>=0.3.0 <0.4.0", + "resolved": "https://registry.npmjs.org/underscore-contrib/-/underscore-contrib-0.3.0.tgz", + "dev": true, + "dependencies": { + "underscore": { + "version": "1.6.0", + "from": "underscore@1.6.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "dev": true + } + } + }, + "underscore.string": { + "version": "2.2.1", + "from": "underscore.string@>=2.2.1 <2.3.0", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz", + "dev": true + }, + "unique-stream": { + "version": "2.2.1", + "from": "unique-stream@>=2.0.2 <3.0.0", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "from": "unpipe@1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "dev": true + }, + "unzip-response": { + "version": "1.0.2", + "from": "unzip-response@>=1.0.2 <2.0.0", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz", + "dev": true + }, + "uri-path": { + "version": "1.0.0", + "from": "uri-path@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/uri-path/-/uri-path-1.0.0.tgz", + "dev": true + }, + "url": { + "version": "0.11.0", + "from": "url@>=0.11.0 <0.12.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "dev": true, + "dependencies": { + "punycode": { + "version": "1.3.2", + "from": "punycode@1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "dev": true + } + } + }, + "url-parse": { + "version": "1.2.0", + "from": "url-parse@>=1.1.8 <2.0.0", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.2.0.tgz", + "dev": true, + "dependencies": { + "querystringify": { + "version": "1.0.0", + "from": "querystringify@>=1.0.0 <1.1.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-1.0.0.tgz", + "dev": true + } + } + }, + "url-parse-lax": { + "version": "1.0.0", + "from": "url-parse-lax@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "dev": true + }, + "url-regex": { + "version": "3.2.0", + "from": "url-regex@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/url-regex/-/url-regex-3.2.0.tgz", + "dev": true, + "optional": true + }, + "util": { + "version": "0.10.3", + "from": "util@>=0.10.3 <0.11.0", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "dev": true, + "dependencies": { + "inherits": { + "version": "2.0.1", + "from": "inherits@2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "from": "util-deprecate@>=1.0.1 <1.1.0", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "from": "utils-merge@1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "dev": true + }, + "uuid": { + "version": "2.0.3", + "from": "uuid@>=2.0.1 <3.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", + "dev": true + }, + "vali-date": { + "version": "1.0.0", + "from": "vali-date@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.1", + "from": "validate-npm-package-license@>=3.0.1 <4.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", + "dev": true + }, + "vary": { + "version": "1.1.2", + "from": "vary@>=1.1.2 <1.2.0", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "dev": true + }, + "verror": { + "version": "1.10.0", + "from": "verror@1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "dev": true + }, + "vinyl": { + "version": "1.2.0", + "from": "vinyl@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "dev": true + }, + "vinyl-assign": { + "version": "1.2.1", + "from": "vinyl-assign@>=1.0.1 <2.0.0", + "resolved": "https://registry.npmjs.org/vinyl-assign/-/vinyl-assign-1.2.1.tgz", + "dev": true + }, + "vinyl-fs": { + "version": "2.4.4", + "from": "vinyl-fs@>=2.1.1 <3.0.0", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz", + "dev": true, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "from": "graceful-fs@>=4.0.0 <5.0.0", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "dev": true + }, + "through2": { + "version": "2.0.3", + "from": "through2@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "dev": true + } + } + }, + "vm-browserify": { + "version": "0.0.4", + "from": "vm-browserify@0.0.4", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "dev": true + }, + "walkdir": { + "version": "0.0.11", + "from": "walkdir@>=0.0.11 <0.0.12", + "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.0.11.tgz", + "dev": true + }, + "ware": { + "version": "1.3.0", + "from": "ware@>=1.2.0 <2.0.0", + "resolved": "https://registry.npmjs.org/ware/-/ware-1.3.0.tgz", + "dev": true + }, + "watchpack": { + "version": "1.4.0", + "from": "watchpack@>=1.4.0 <2.0.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.4.0.tgz", + "dev": true, + "dependencies": { + "async": { + "version": "2.6.0", + "from": "async@>=2.1.2 <3.0.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", + "dev": true + }, + "graceful-fs": { + "version": "4.1.11", + "from": "graceful-fs@>=4.1.2 <5.0.0", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "dev": true + }, + "lodash": { + "version": "4.17.4", + "from": "lodash@>=4.14.0 <5.0.0", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "dev": true + } + } + }, + "wbuf": { + "version": "1.7.2", + "from": "wbuf@>=1.7.2 <2.0.0", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.2.tgz", + "dev": true + }, + "webpack": { + "version": "3.8.1", + "from": "webpack@>=3.6.0 <4.0.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.8.1.tgz", + "dev": true, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "from": "ansi-regex@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "dev": true + }, + "async": { + "version": "2.6.0", + "from": "async@>=2.1.2 <3.0.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "from": "camelcase@>=4.1.0 <5.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "from": "cliui@>=3.2.0 <4.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "dev": true, + "dependencies": { + "string-width": { + "version": "1.0.2", + "from": "string-width@^1.0.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "dev": true + } + } + }, + "find-up": { + "version": "2.1.0", + "from": "find-up@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "dev": true + }, + "graceful-fs": { + "version": "4.1.11", + "from": "graceful-fs@>=4.1.2 <5.0.0", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "dev": true + }, + "has-flag": { + "version": "2.0.0", + "from": "has-flag@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "dev": true + }, + "load-json-file": { + "version": "2.0.0", + "from": "load-json-file@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "dev": true + }, + "lodash": { + "version": "4.17.4", + "from": "lodash@>=4.14.0 <5.0.0", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "dev": true + }, + "os-locale": { + "version": "2.1.0", + "from": "os-locale@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "dev": true + }, + "path-type": { + "version": "2.0.0", + "from": "path-type@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "dev": true + }, + "read-pkg": { + "version": "2.0.0", + "from": "read-pkg@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "dev": true + }, + "read-pkg-up": { + "version": "2.0.0", + "from": "read-pkg-up@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "from": "string-width@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "from": "is-fullwidth-code-point@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "from": "strip-ansi@>=4.0.0 <5.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "dev": true + } + } + }, + "strip-bom": { + "version": "3.0.0", + "from": "strip-bom@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "dev": true + }, + "supports-color": { + "version": "4.5.0", + "from": "supports-color@>=4.2.1 <5.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "dev": true + }, + "which-module": { + "version": "2.0.0", + "from": "which-module@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "dev": true + }, + "yargs": { + "version": "8.0.2", + "from": "yargs@>=8.0.2 <9.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", + "dev": true + }, + "yargs-parser": { + "version": "7.0.0", + "from": "yargs-parser@>=7.0.0 <8.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", + "dev": true + } + } + }, + "webpack-dev-middleware": { + "version": "1.12.0", + "from": "webpack-dev-middleware@>=1.11.0 <2.0.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.0.tgz", + "dev": true, + "dependencies": { + "time-stamp": { + "version": "2.0.0", + "from": "time-stamp@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.0.0.tgz", + "dev": true + } + } + }, + "webpack-dev-server": { + "version": "2.9.4", + "from": "webpack-dev-server@>=2.9.1 <3.0.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.9.4.tgz", + "dev": true, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "from": "camelcase@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "from": "cliui@>=3.2.0 <4.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "dev": true + }, + "debug": { + "version": "3.1.0", + "from": "debug@>=3.1.0 <4.0.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "dev": true + }, + "has-flag": { + "version": "2.0.0", + "from": "has-flag@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "dev": true + }, + "supports-color": { + "version": "4.5.0", + "from": "supports-color@>=4.2.1 <5.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "dev": true + }, + "yargs": { + "version": "6.6.0", + "from": "yargs@>=6.6.0 <7.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", + "dev": true + }, + "yargs-parser": { + "version": "4.2.1", + "from": "yargs-parser@>=4.2.0 <5.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", + "dev": true + } + } + }, + "webpack-sources": { + "version": "1.0.2", + "from": "webpack-sources@>=1.0.1 <2.0.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.0.2.tgz", + "dev": true, + "dependencies": { + "source-map": { + "version": "0.6.1", + "from": "source-map@>=0.6.1 <0.7.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "dev": true + } + } + }, + "websocket-driver": { + "version": "0.7.0", + "from": "websocket-driver@>=0.5.1", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", + "dev": true + }, + "websocket-extensions": { + "version": "0.1.2", + "from": "websocket-extensions@>=0.1.1", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.2.tgz", + "dev": true + }, + "whet.extend": { + "version": "0.9.9", + "from": "whet.extend@>=0.9.9 <0.10.0", + "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", + "dev": true, + "optional": true + }, + "which": { + "version": "1.0.9", + "from": "which@>=1.0.5 <1.1.0", + "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz", + "dev": true + }, + "which-module": { + "version": "1.0.0", + "from": "which-module@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "dev": true + }, + "wide-align": { + "version": "1.1.2", + "from": "wide-align@>=1.1.0 <2.0.0", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", + "dev": true + }, + "window-size": { + "version": "0.1.0", + "from": "window-size@0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "dev": true + }, + "wordwrap": { + "version": "0.0.2", + "from": "wordwrap@0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "dev": true + }, + "wrap-ansi": { + "version": "2.1.0", + "from": "wrap-ansi@>=2.0.0 <3.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "dev": true + }, + "wrap-fn": { + "version": "0.1.5", + "from": "wrap-fn@>=0.1.0 <0.2.0", + "resolved": "https://registry.npmjs.org/wrap-fn/-/wrap-fn-0.1.5.tgz", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "from": "wrappy@>=1.0.0 <2.0.0", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "dev": true + }, + "xmlbuilder": { + "version": "8.2.2", + "from": "xmlbuilder@>=8.2.0 <8.3.0", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz", + "dev": true + }, + "xmlcreate": { + "version": "1.0.2", + "from": "xmlcreate@>=1.0.1 <2.0.0", + "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-1.0.2.tgz", + "dev": true + }, + "xmlrpc": { + "version": "1.3.2", + "from": "xmlrpc@>=1.3.1 <2.0.0", + "resolved": "https://registry.npmjs.org/xmlrpc/-/xmlrpc-1.3.2.tgz", + "dev": true + }, + "xtend": { + "version": "4.0.1", + "from": "xtend@>=4.0.0 <5.0.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "dev": true + }, + "y18n": { + "version": "3.2.1", + "from": "y18n@>=3.2.1 <4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "from": "yallist@>=2.1.2 <3.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "dev": true + }, + "yargs": { + "version": "3.10.0", + "from": "yargs@>=3.10.0 <3.11.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "dev": true, + "dependencies": { + "camelcase": { + "version": "1.2.1", + "from": "camelcase@>=1.0.2 <2.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "dev": true + } + } + }, + "yargs-parser": { + "version": "5.0.0", + "from": "yargs-parser@>=5.0.0 <6.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", + "dev": true, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "from": "camelcase@>=3.0.0 <4.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "dev": true + } + } + }, + "yauzl": { + "version": "2.9.1", + "from": "yauzl@>=2.2.1 <3.0.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.9.1.tgz", + "dev": true + }, + "zip-stream": { + "version": "1.2.0", + "from": "zip-stream@>=1.1.0 <2.0.0", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.2.0.tgz", + "dev": true, + "dependencies": { + "lodash": { + "version": "4.17.4", + "from": "lodash@>=4.8.0 <5.0.0", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "dev": true + } + } + } + } +} From 1a2ace4feb0bbaa4449101ff700e0b3c7168beb9 Mon Sep 17 00:00:00 2001 From: Weston Ruter Date: Mon, 13 Nov 2017 19:25:23 +0000 Subject: [PATCH 019/537] Customize: Prevent PHP notice on theme-switch dashboard welcome link (and link to themes admin screen) when user cannot `customize`. Props skostadinov, ocean90. Amends [41699]. See #42050. Fixes #42525 for 4.9. git-svn-id: https://develop.svn.wordpress.org/branches/4.9@42170 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/dashboard.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/wp-admin/includes/dashboard.php b/src/wp-admin/includes/dashboard.php index 89047bab9859b..fa1d2ffad4997 100644 --- a/src/wp-admin/includes/dashboard.php +++ b/src/wp-admin/includes/dashboard.php @@ -1567,14 +1567,14 @@ function wp_welcome_panel() {

- +

true ) ) ) > 1 ) ) : ?> -

change your theme completely' ), $customize_themes_link ); ?>

+ +

change your theme completely' ), $themes_link ); ?>

From d224238b21319cb1a4e71c1ea0e21da34c9070f2 Mon Sep 17 00:00:00 2001 From: Weston Ruter Date: Mon, 13 Nov 2017 21:20:01 +0000 Subject: [PATCH 020/537] Customize: Allow notifications for linting errors in code editor control (for Additional CSS) to be overridden to allow saving. Implements the same override that was implemented in [41721] for the theme/plugin editors. See #41897, #41887. Fixes #42528 for 4.9. git-svn-id: https://develop.svn.wordpress.org/branches/4.9@42172 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/js/customize-controls.js | 21 +++++++++++++++++++ .../class-wp-customize-manager.php | 12 +++++++++++ 2 files changed, 33 insertions(+) diff --git a/src/wp-admin/js/customize-controls.js b/src/wp-admin/js/customize-controls.js index 4bc94ae88c0cc..38e408ab673a5 100644 --- a/src/wp-admin/js/customize-controls.js +++ b/src/wp-admin/js/customize-controls.js @@ -5280,6 +5280,27 @@ codemirror: $.Deferred() } ); api.Control.prototype.initialize.call( control, id, options ); + + // Note that rendering is debounced so the props will be used when rendering happens after add event. + control.notifications.bind( 'add', function( notification ) { + + // Skip if control notification is not from setting csslint_error notification. + if ( notification.code !== control.setting.id + ':csslint_error' ) { + return; + } + + // Customize the template and behavior of csslint_error notifications. + notification.templateId = 'customize-code-editor-lint-error-notification'; + notification.render = (function( render ) { + return function() { + var li = render.call( this ); + li.find( 'input[type=checkbox]' ).on( 'click', function() { + control.setting.notifications.remove( 'csslint_error' ); + } ); + return li; + }; + })( notification.render ); + } ); }, /** diff --git a/src/wp-includes/class-wp-customize-manager.php b/src/wp-includes/class-wp-customize-manager.php index bb4aafb0b7ae2..803a509bf048f 100644 --- a/src/wp-includes/class-wp-customize-manager.php +++ b/src/wp-includes/class-wp-customize-manager.php @@ -4125,6 +4125,18 @@ public function render_control_templates() { + + From 91bd25aaf7ba0357b1030c8886bb1c8ab6696c67 Mon Sep 17 00:00:00 2001 From: Weston Ruter Date: Mon, 13 Nov 2017 22:29:28 +0000 Subject: [PATCH 021/537] About: Fix jumping behavior for titles and columns when scrolling. Props ryelle. See #42087. Fixes #42514, #42526 for 4.9. git-svn-id: https://develop.svn.wordpress.org/branches/4.9@42174 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/about.php | 90 +++++++++++++++++++++++++++++++------- src/wp-admin/css/about.css | 44 +++++++++++++++---- 2 files changed, 110 insertions(+), 24 deletions(-) diff --git a/src/wp-admin/about.php b/src/wp-admin/about.php index a24745d1dfe03..496cb4e78d97c 100644 --- a/src/wp-admin/about.php +++ b/src/wp-admin/about.php @@ -53,7 +53,9 @@
-

+
+

+
@@ -88,7 +90,9 @@
-

+
+

+
@@ -116,7 +120,9 @@
-

+
+

+
@@ -137,7 +143,9 @@
-

+
+

+
@@ -242,34 +250,84 @@ offset += $adminbar.height(); } - var adjustScrollClass = _.throttle( function adjustScrollClass() { + function setup() { + $sections.each( function( i, section ) { + var $section = $( section ); + // Set width on header to prevent column jump + var $header = $section.find('.section-header'); + $header.css( { + width: $header.innerWidth() + 'px' + } ); + + // If the title is long, switch the layout + var $title = $section.find( 'h2' ); + if ( $title.innerWidth() > 300 ) { + $section.addClass( 'has-long-title' ); + } + } ); + } + + var adjustScrollPosition = _.throttle( function adjustScrollPosition() { $sections.each( function( i, section ) { var $section = $( section ); var $header = $section.find( 'h2' ); var width = $header.innerWidth(); + var height = $header.innerHeight(); + + if ( $section.hasClass( 'has-long-title' ) ) { + return; + } var sectionStart = $section.offset().top - offset; - var sectionEnd = sectionStart + $section.innerHeight() - 60; + var sectionEnd = sectionStart + $section.innerHeight(); + var scrollPos = $window.scrollTop(); // If we're scrolled into a section, stick the header - if ( $window.scrollTop() >= sectionStart && $window.scrollTop() < sectionEnd ) { - $header.addClass( 'header-fixed' ); - $header.css( { top: offset + 'px', width: width + 'px' } ); + if ( scrollPos >= sectionStart && scrollPos < sectionEnd - height ) { + $header.css( { + position: 'fixed', + top: offset + 'px', + bottom: 'auto', + width: width + 'px' + } ); + // If we're at the end of the section, stick the header to the bottom + } else if ( scrollPos >= sectionEnd - height && scrollPos < sectionEnd ) { + $header.css( { + position: 'absolute', + top: 'auto', + bottom: 0, + width: width + 'px' + } ); + // Unstick the header } else { - $header.removeClass( 'header-fixed' ); - $header.css( { top: 0, width: 'auto' } ); + $header.css( { + position: 'static', + top: 'auto', + bottom: 'auto', + width: 'auto' + } ); } } ); }, 100 ); + function enableFixedHeaders() { if ( $window.width() > 782 ) { - adjustScrollClass(); - $window.on( 'scroll', adjustScrollClass ); + setup(); + adjustScrollPosition(); + $window.on( 'scroll', adjustScrollPosition ); } else { - $window.off( 'scroll', adjustScrollClass ); + $window.off( 'scroll', adjustScrollPosition ); + $sections.find( '.section-header' ) + .css( { + width: 'auto' + } ); $sections.find( 'h2' ) - .removeClass( 'header-fixed' ) - .css( { top: 0, width: 'auto' } ); + .css( { + position: 'static', + top: 'auto', + bottom: 'auto', + width: 'auto' + } ); } } $( window ).resize( enableFixedHeaders ); diff --git a/src/wp-admin/css/about.css b/src/wp-admin/css/about.css index e38cd10bb8250..4ff91c775595d 100644 --- a/src/wp-admin/css/about.css +++ b/src/wp-admin/css/about.css @@ -364,16 +364,15 @@ margin: 0 auto 120px; } -.about-wrap .floating-header-section h2 { +.about-wrap .floating-header-section .section-header { -ms-grid-column: 1; grid-column: 1; - text-align: left; - margin: 0; + position: relative; } -.about-wrap .floating-header-section .header-fixed { - position: fixed; - width: 300px; +.about-wrap .floating-header-section h2 { + margin: 0; + text-align: left; } .about-wrap .floating-header-section .section-content { @@ -396,6 +395,27 @@ grid-column: 2; } +.about-wrap .floating-header-section.has-long-title { + -ms-grid-columns: 1fr; + grid-template-columns: 1fr; + grid-gap: 60px 0; +} + +.about-wrap .floating-header-section.has-long-title .section-content { + -ms-grid-columns: minmax(max-content, 300px) minmax(max-content, 300px); + grid-template-columns: minmax(max-content, 300px) minmax(max-content, 300px); +} + +.about-wrap .floating-header-section.has-long-title .section-item { + max-width: 300px; +} + +.about-wrap .floating-header-section.has-long-title .section-header, +.about-wrap .floating-header-section.has-long-title .section-content { + -ms-grid-column: 1; + grid-column: 1; +} + /*------------------------------------------------------------------------------ 3.0 - Credits & Freedoms Pages ------------------------------------------------------------------------------*/ @@ -415,7 +435,7 @@ } .about-wrap .compact { - margin-bottom: 0 + margin-bottom: 0; } .about-wrap .wp-person { @@ -509,7 +529,7 @@ grid-gap: 60px 0; } - .about-wrap .floating-header-section h2, + .about-wrap .floating-header-section .section-header, .about-wrap .floating-header-section .section-content { -ms-grid-column: 1; grid-column: 1; @@ -568,6 +588,13 @@ margin-bottom: 60px; } + .about-wrap .floating-header-section h2 { + word-break: break-all; + -webkit-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto; + } + .about-wrap .floating-header-section .section-content { -ms-grid-columns: 1fr; grid-template-columns: 1fr; @@ -577,5 +604,6 @@ .about-wrap .floating-header-section .section-content .section-item { -ms-grid-column: 1; grid-column: 1; + max-width: 100%; } } From caf613bb127ca1152515c2224a2fa1523d5c7f1e Mon Sep 17 00:00:00 2001 From: Gary Pendergast Date: Tue, 14 Nov 2017 05:20:24 +0000 Subject: [PATCH 022/537] Editor: When switching Editor tabs, don't scroll unnecessarily. - When switching to the Text view, wait until after the Visual editor element has been hidden, before focussing the `

', + 'comment_field' => '

', /** This filter is documented in wp-includes/link-template.php */ 'must_log_in' => '
'+n+"
"}else c+=""}c+=""}c+="";var o={type:"container",html:c,onclick:function(a){var c=a.target;if(/^(TD|DIV)$/.test(c.nodeName)){var d=b(c).firstChild;d&&d.hasAttribute("data-chr")&&(h(d.getAttribute("data-chr")),a.ctrlKey||f.close())}},onmouseover:function(a){var c=b(a.target);c&&c.firstChild?(f.find("#preview").text(c.firstChild.firstChild.data),f.find("#previewTitle").text(c.title)):(f.find("#preview").text(" "),f.find("#previewTitle").text(" "))}};f=a.windowManager.open({title:"Special character",spacing:10,padding:10,items:[o,{type:"container",layout:"flex",direction:"column",align:"center",spacing:5,minWidth:160,minHeight:160,items:[{type:"label",name:"preview",text:" ",style:"font-size: 40px; text-align: center",border:1,minWidth:140,minHeight:80},{type:"spacer",minHeight:20},{type:"label",name:"previewTitle",text:" ",style:"white-space: pre-wrap;",border:1,minWidth:140}]}],buttons:[{text:"Close",onclick:function(){f.close()}}]})}var j=b.isArray;return a.addCommand("mceShowCharmap",i),a.addButton("charmap",{icon:"charmap",tooltip:"Special character",cmd:"mceShowCharmap"}),a.addMenuItem("charmap",{icon:"charmap",text:"Special character",cmd:"mceShowCharmap",context:"insert"}),{getCharMap:g,insertChar:h}}),function(){}}),d("0")()}(); \ No newline at end of file +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),i=function(e,t){return e.fire("insertCustomChar",{chr:t})},l=function(e,t){var a=i(e,t).chr;e.execCommand("mceInsertContent",!1,a)},a=tinymce.util.Tools.resolve("tinymce.util.Tools"),r=function(e){return e.settings.charmap},n=function(e){return e.settings.charmap_append},o=a.isArray,c=function(e){return o(e)?[].concat((t=e,a.grep(t,function(e){return o(e)&&2===e.length}))):"function"==typeof e?e():[];var t},s=function(e){return function(e,t){var a=r(e);a&&(t=c(a));var i=n(e);return i?[].concat(t).concat(c(i)):t}(e,[["160","no-break space"],["173","soft hyphen"],["34","quotation mark"],["162","cent sign"],["8364","euro sign"],["163","pound sign"],["165","yen sign"],["169","copyright sign"],["174","registered sign"],["8482","trade mark sign"],["8240","per mille sign"],["181","micro sign"],["183","middle dot"],["8226","bullet"],["8230","three dot leader"],["8242","minutes / feet"],["8243","seconds / inches"],["167","section sign"],["182","paragraph sign"],["223","sharp s / ess-zed"],["8249","single left-pointing angle quotation mark"],["8250","single right-pointing angle quotation mark"],["171","left pointing guillemet"],["187","right pointing guillemet"],["8216","left single quotation mark"],["8217","right single quotation mark"],["8220","left double quotation mark"],["8221","right double quotation mark"],["8218","single low-9 quotation mark"],["8222","double low-9 quotation mark"],["60","less-than sign"],["62","greater-than sign"],["8804","less-than or equal to"],["8805","greater-than or equal to"],["8211","en dash"],["8212","em dash"],["175","macron"],["8254","overline"],["164","currency sign"],["166","broken bar"],["168","diaeresis"],["161","inverted exclamation mark"],["191","turned question mark"],["710","circumflex accent"],["732","small tilde"],["176","degree sign"],["8722","minus sign"],["177","plus-minus sign"],["247","division sign"],["8260","fraction slash"],["215","multiplication sign"],["185","superscript one"],["178","superscript two"],["179","superscript three"],["188","fraction one quarter"],["189","fraction one half"],["190","fraction three quarters"],["402","function / florin"],["8747","integral"],["8721","n-ary sumation"],["8734","infinity"],["8730","square root"],["8764","similar to"],["8773","approximately equal to"],["8776","almost equal to"],["8800","not equal to"],["8801","identical to"],["8712","element of"],["8713","not an element of"],["8715","contains as member"],["8719","n-ary product"],["8743","logical and"],["8744","logical or"],["172","not sign"],["8745","intersection"],["8746","union"],["8706","partial differential"],["8704","for all"],["8707","there exists"],["8709","diameter"],["8711","backward difference"],["8727","asterisk operator"],["8733","proportional to"],["8736","angle"],["180","acute accent"],["184","cedilla"],["170","feminine ordinal indicator"],["186","masculine ordinal indicator"],["8224","dagger"],["8225","double dagger"],["192","A - grave"],["193","A - acute"],["194","A - circumflex"],["195","A - tilde"],["196","A - diaeresis"],["197","A - ring above"],["256","A - macron"],["198","ligature AE"],["199","C - cedilla"],["200","E - grave"],["201","E - acute"],["202","E - circumflex"],["203","E - diaeresis"],["274","E - macron"],["204","I - grave"],["205","I - acute"],["206","I - circumflex"],["207","I - diaeresis"],["298","I - macron"],["208","ETH"],["209","N - tilde"],["210","O - grave"],["211","O - acute"],["212","O - circumflex"],["213","O - tilde"],["214","O - diaeresis"],["216","O - slash"],["332","O - macron"],["338","ligature OE"],["352","S - caron"],["217","U - grave"],["218","U - acute"],["219","U - circumflex"],["220","U - diaeresis"],["362","U - macron"],["221","Y - acute"],["376","Y - diaeresis"],["562","Y - macron"],["222","THORN"],["224","a - grave"],["225","a - acute"],["226","a - circumflex"],["227","a - tilde"],["228","a - diaeresis"],["229","a - ring above"],["257","a - macron"],["230","ligature ae"],["231","c - cedilla"],["232","e - grave"],["233","e - acute"],["234","e - circumflex"],["235","e - diaeresis"],["275","e - macron"],["236","i - grave"],["237","i - acute"],["238","i - circumflex"],["239","i - diaeresis"],["299","i - macron"],["240","eth"],["241","n - tilde"],["242","o - grave"],["243","o - acute"],["244","o - circumflex"],["245","o - tilde"],["246","o - diaeresis"],["248","o slash"],["333","o macron"],["339","ligature oe"],["353","s - caron"],["249","u - grave"],["250","u - acute"],["251","u - circumflex"],["252","u - diaeresis"],["363","u - macron"],["253","y - acute"],["254","thorn"],["255","y - diaeresis"],["563","y - macron"],["913","Alpha"],["914","Beta"],["915","Gamma"],["916","Delta"],["917","Epsilon"],["918","Zeta"],["919","Eta"],["920","Theta"],["921","Iota"],["922","Kappa"],["923","Lambda"],["924","Mu"],["925","Nu"],["926","Xi"],["927","Omicron"],["928","Pi"],["929","Rho"],["931","Sigma"],["932","Tau"],["933","Upsilon"],["934","Phi"],["935","Chi"],["936","Psi"],["937","Omega"],["945","alpha"],["946","beta"],["947","gamma"],["948","delta"],["949","epsilon"],["950","zeta"],["951","eta"],["952","theta"],["953","iota"],["954","kappa"],["955","lambda"],["956","mu"],["957","nu"],["958","xi"],["959","omicron"],["960","pi"],["961","rho"],["962","final sigma"],["963","sigma"],["964","tau"],["965","upsilon"],["966","phi"],["967","chi"],["968","psi"],["969","omega"],["8501","alef symbol"],["982","pi symbol"],["8476","real part symbol"],["978","upsilon - hook symbol"],["8472","Weierstrass p"],["8465","imaginary part"],["8592","leftwards arrow"],["8593","upwards arrow"],["8594","rightwards arrow"],["8595","downwards arrow"],["8596","left right arrow"],["8629","carriage return"],["8656","leftwards double arrow"],["8657","upwards double arrow"],["8658","rightwards double arrow"],["8659","downwards double arrow"],["8660","left right double arrow"],["8756","therefore"],["8834","subset of"],["8835","superset of"],["8836","not a subset of"],["8838","subset of or equal to"],["8839","superset of or equal to"],["8853","circled plus"],["8855","circled times"],["8869","perpendicular"],["8901","dot operator"],["8968","left ceiling"],["8969","right ceiling"],["8970","left floor"],["8971","right floor"],["9001","left-pointing angle bracket"],["9002","right-pointing angle bracket"],["9674","lozenge"],["9824","black spade suit"],["9827","black club suit"],["9829","black heart suit"],["9830","black diamond suit"],["8194","en space"],["8195","em space"],["8201","thin space"],["8204","zero width non-joiner"],["8205","zero width joiner"],["8206","left-to-right mark"],["8207","right-to-left mark"]])},t=function(t){return{getCharMap:function(){return s(t)},insertChar:function(e){l(t,e)}}},u=function(e){var t,a,i,r=Math.min(e.length,25),n=Math.ceil(e.length/r);for(t='',i=0;i",a=0;a
'+s+"
"}else t+="
"}return t+=""},d=function(e){for(;e;){if("TD"===e.nodeName)return e;e=e.parentNode}},m=function(n){var o,e={type:"container",html:u(s(n)),onclick:function(e){var t=e.target;if(/^(TD|DIV)$/.test(t.nodeName)){var a=d(t).firstChild;if(a&&a.hasAttribute("data-chr")){var i=a.getAttribute("data-chr"),r=parseInt(i,10);isNaN(r)||l(n,String.fromCharCode(r)),e.ctrlKey||o.close()}}},onmouseover:function(e){var t=d(e.target);t&&t.firstChild?(o.find("#preview").text(t.firstChild.firstChild.data),o.find("#previewTitle").text(t.title)):(o.find("#preview").text(" "),o.find("#previewTitle").text(" "))}};o=n.windowManager.open({title:"Special character",spacing:10,padding:10,items:[e,{type:"container",layout:"flex",direction:"column",align:"center",spacing:5,minWidth:160,minHeight:160,items:[{type:"label",name:"preview",text:" ",style:"font-size: 40px; text-align: center",border:1,minWidth:140,minHeight:80},{type:"spacer",minHeight:20},{type:"label",name:"previewTitle",text:" ",style:"white-space: pre-wrap;",border:1,minWidth:140}]}],buttons:[{text:"Close",onclick:function(){o.close()}}]})},g=function(e){e.addCommand("mceShowCharmap",function(){m(e)})},p=function(e){e.addButton("charmap",{icon:"charmap",tooltip:"Special character",cmd:"mceShowCharmap"}),e.addMenuItem("charmap",{icon:"charmap",text:"Special character",cmd:"mceShowCharmap",context:"insert"})};e.add("charmap",function(e){return g(e),p(e),t(e)})}(); \ No newline at end of file diff --git a/src/wp-includes/js/tinymce/plugins/colorpicker/plugin.js b/src/wp-includes/js/tinymce/plugins/colorpicker/plugin.js index 2f4954f2152c2..63d2dd87b4f21 100644 --- a/src/wp-includes/js/tinymce/plugins/colorpicker/plugin.js +++ b/src/wp-includes/js/tinymce/plugins/colorpicker/plugin.js @@ -1,255 +1,126 @@ (function () { +var colorpicker = (function () { + 'use strict'; -var defs = {}; // id -> {dependencies, definition, instance (possibly undefined)} + var global = tinymce.util.Tools.resolve('tinymce.PluginManager'); -// Used when there is no 'main' module. -// The name is probably (hopefully) unique so minification removes for releases. -var register_3795 = function (id) { - var module = dem(id); - var fragments = id.split('.'); - var target = Function('return this;')(); - for (var i = 0; i < fragments.length - 1; ++i) { - if (target[fragments[i]] === undefined) - target[fragments[i]] = {}; - target = target[fragments[i]]; - } - target[fragments[fragments.length - 1]] = module; -}; - -var instantiate = function (id) { - var actual = defs[id]; - var dependencies = actual.deps; - var definition = actual.defn; - var len = dependencies.length; - var instances = new Array(len); - for (var i = 0; i < len; ++i) - instances[i] = dem(dependencies[i]); - var defResult = definition.apply(null, instances); - if (defResult === undefined) - throw 'module [' + id + '] returned undefined'; - actual.instance = defResult; -}; + var global$1 = tinymce.util.Tools.resolve('tinymce.util.Color'); -var def = function (id, dependencies, definition) { - if (typeof id !== 'string') - throw 'module id must be a string'; - else if (dependencies === undefined) - throw 'no dependencies for ' + id; - else if (definition === undefined) - throw 'no definition function for ' + id; - defs[id] = { - deps: dependencies, - defn: definition, - instance: undefined + var showPreview = function (win, hexColor) { + win.find('#preview')[0].getEl().style.background = hexColor; }; -}; - -var dem = function (id) { - var actual = defs[id]; - if (actual === undefined) - throw 'module [' + id + '] was undefined'; - else if (actual.instance === undefined) - instantiate(id); - return actual.instance; -}; - -var req = function (ids, callback) { - var len = ids.length; - var instances = new Array(len); - for (var i = 0; i < len; ++i) - instances.push(dem(ids[i])); - callback.apply(null, callback); -}; - -var ephox = {}; - -ephox.bolt = { - module: { - api: { - define: def, - require: req, - demand: dem - } - } -}; - -var define = def; -var require = req; -var demand = dem; -// this helps with minificiation when using a lot of global references -var defineGlobal = function (id, ref) { - define(id, [], function () { return ref; }); -}; -/*jsc -["tinymce.plugins.colorpicker.Plugin","tinymce.core.PluginManager","tinymce.core.util.Color","global!tinymce.util.Tools.resolve"] -jsc*/ -defineGlobal("global!tinymce.util.Tools.resolve", tinymce.util.Tools.resolve); -/** - * ResolveGlobal.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.core.PluginManager', - [ - 'global!tinymce.util.Tools.resolve' - ], - function (resolve) { - return resolve('tinymce.PluginManager'); - } -); - -/** - * ResolveGlobal.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.core.util.Color', - [ - 'global!tinymce.util.Tools.resolve' - ], - function (resolve) { - return resolve('tinymce.util.Color'); - } -); - -/** - * Plugin.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -/** - * This class contains all core logic for the colorpicker plugin. - * - * @class tinymce.colorpicker.Plugin - * @private - */ -define( - 'tinymce.plugins.colorpicker.Plugin', - [ - 'tinymce.core.PluginManager', - 'tinymce.core.util.Color' - ], - function (PluginManager, Color) { - PluginManager.add('colorpicker', function (editor) { - function colorPickerCallback(callback, value) { - function setColor(value) { - var color = new Color(value), rgb = color.toRgb(); - - win.fromJSON({ - r: rgb.r, - g: rgb.g, - b: rgb.b, - hex: color.toHex().substr(1) - }); - - showPreview(color.toHex()); - } - - function showPreview(hexColor) { - win.find('#preview')[0].getEl().style.background = hexColor; - } - - var win = editor.windowManager.open({ - title: 'Color', - items: { - type: 'container', - layout: 'flex', - direction: 'row', - align: 'stretch', - padding: 5, - spacing: 10, + var setColor = function (win, value) { + var color = global$1(value), rgb = color.toRgb(); + win.fromJSON({ + r: rgb.r, + g: rgb.g, + b: rgb.b, + hex: color.toHex().substr(1) + }); + showPreview(win, color.toHex()); + }; + var open = function (editor, callback, value) { + var win = editor.windowManager.open({ + title: 'Color', + items: { + type: 'container', + layout: 'flex', + direction: 'row', + align: 'stretch', + padding: 5, + spacing: 10, + items: [ + { + type: 'colorpicker', + value: value, + onchange: function () { + var rgb = this.rgb(); + if (win) { + win.find('#r').value(rgb.r); + win.find('#g').value(rgb.g); + win.find('#b').value(rgb.b); + win.find('#hex').value(this.value().substr(1)); + showPreview(win, this.value()); + } + } + }, + { + type: 'form', + padding: 0, + labelGap: 5, + defaults: { + type: 'textbox', + size: 7, + value: '0', + flex: 1, + spellcheck: false, + onchange: function () { + var colorPickerCtrl = win.find('colorpicker')[0]; + var name, value; + name = this.name(); + value = this.value(); + if (name === 'hex') { + value = '#' + value; + setColor(win, value); + colorPickerCtrl.value(value); + return; + } + value = { + r: win.find('#r').value(), + g: win.find('#g').value(), + b: win.find('#b').value() + }; + colorPickerCtrl.value(value); + setColor(win, value); + } + }, items: [ { - type: 'colorpicker', - value: value, - onchange: function () { - var rgb = this.rgb(); - - if (win) { - win.find('#r').value(rgb.r); - win.find('#g').value(rgb.g); - win.find('#b').value(rgb.b); - win.find('#hex').value(this.value().substr(1)); - showPreview(this.value()); - } - } + name: 'r', + label: 'R', + autofocus: 1 }, { - type: 'form', - padding: 0, - labelGap: 5, - defaults: { - type: 'textbox', - size: 7, - value: '0', - flex: 1, - spellcheck: false, - onchange: function () { - var colorPickerCtrl = win.find('colorpicker')[0]; - var name, value; - - name = this.name(); - value = this.value(); - - if (name == "hex") { - value = '#' + value; - setColor(value); - colorPickerCtrl.value(value); - return; - } - - value = { - r: win.find('#r').value(), - g: win.find('#g').value(), - b: win.find('#b').value() - }; - - colorPickerCtrl.value(value); - setColor(value); - } - }, - items: [ - { name: 'r', label: 'R', autofocus: 1 }, - { name: 'g', label: 'G' }, - { name: 'b', label: 'B' }, - { name: 'hex', label: '#', value: '000000' }, - { name: 'preview', type: 'container', border: 1 } - ] + name: 'g', + label: 'G' + }, + { + name: 'b', + label: 'B' + }, + { + name: 'hex', + label: '#', + value: '000000' + }, + { + name: 'preview', + type: 'container', + border: 1 } ] - }, - onSubmit: function () { - callback('#' + this.toJSON().hex); } - }); - - setColor(value); - } - - if (!editor.settings.color_picker_callback) { - editor.settings.color_picker_callback = colorPickerCallback; + ] + }, + onSubmit: function () { + callback('#' + win.toJSON().hex); } }); + setColor(win, value); + }; + var $_3y7nz6a1jfuw8osh = { open: open }; - return function () { }; + global.add('colorpicker', function (editor) { + if (!editor.settings.color_picker_callback) { + editor.settings.color_picker_callback = function (callback, value) { + $_3y7nz6a1jfuw8osh.open(editor, callback, value); + }; + } + }); + function Plugin () { } -); -dem('tinymce.plugins.colorpicker.Plugin')(); + + return Plugin; + +}()); })(); diff --git a/src/wp-includes/js/tinymce/plugins/colorpicker/plugin.min.js b/src/wp-includes/js/tinymce/plugins/colorpicker/plugin.min.js index 35bfea2141f3e..10317a5f6f4b0 100644 --- a/src/wp-includes/js/tinymce/plugins/colorpicker/plugin.min.js +++ b/src/wp-includes/js/tinymce/plugins/colorpicker/plugin.min.js @@ -1 +1 @@ -!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i.on"+d+".add(..)"),a.on(d,j,i);var k={original:b,patched:j};return g.push(k),j},this.addToTop=function(a,b){this.add(a,b,!0)},this.remove=function(b){return g.forEach(function(c,e){if(c.original===b)return g.splice(e,1),a.off(d,c.patched)}),a.off(d,b)},void(this.dispatch=function(){return a.fire(d),!0})):void(this.add=this.addToTop=this.remove=this.dispatch=b)}function e(e){function f(b){var c=e.settings.language||"en",d=[c,b].join("."),f=a.i18n.translate(d);return d!==f?f:a.i18n.translate(b)}function g(b,c){a.each(b.split(" "),function(a){e["on"+a]=new d(e,a,c)})}function h(a,b,c){return[b.level,c]}function i(a){return function(b,c){if(!c.selection&&!a||c.selection==a)return[c]}}function j(){function b(){return j()}var d={},e="add addMenu addSeparator collapse createMenu destroy displayColor expand focus getLength hasMenus hideMenu isActive isCollapsed isDisabled isRendered isSelected mark postRender remove removeAll renderHTML renderMenu renderNode renderTo select selectByIndex setActive setAriaProperty setColor setDisabled setSelected setState showMenu update";return c("editor.controlManager.*"),a.each(e.split(" "),function(a){d[a]=b}),d}if(!e.controlManager){e.controlManager={buttons:{},setDisabled:function(a,b){c("controlManager.setDisabled(..)"),this.buttons[a]&&this.buttons[a].disabled(b)},setActive:function(a,b){c("controlManager.setActive(..)"),this.buttons[a]&&this.buttons[a].active(b)},onAdd:new d,onPostRender:new d,add:function(a){return a},createButton:j,createColorSplitButton:j,createControl:j,createDropMenu:j,createListBox:j,createMenuButton:j,createSeparator:j,createSplitButton:j,createToolbar:j,createToolbarGroup:j,destroy:b,get:b,setControlType:j},g("PreInit BeforeRenderUI PostRender Load Init Remove Activate Deactivate","editor"),g("Click MouseUp MouseDown DblClick KeyDown KeyUp KeyPress ContextMenu Paste Submit Reset"),g("BeforeExecCommand ExecCommand","command ui value args"),g("PreProcess PostProcess LoadContent SaveContent Change"),g("BeforeSetContent BeforeGetContent SetContent GetContent",i(!1)),g("SetProgressState","state time"),g("VisualAid","element hasVisual"),g("Undo Redo",h),g("NodeChange",function(a,b){return[e.controlManager,b.element,e.selection.isCollapsed(),b]});var k=e.addButton;e.addButton=function(a,b){function c(){if(e.controlManager.buttons[a]=this,d)return d.apply(this,arguments)}var d;for(var g in b)"onpostrender"===g.toLowerCase()&&(d=b[g],b.onPostRender=c);return d||(b.onPostRender=c),b.title&&(b.title=f(b.title)),k.call(this,a,b)},e.on("init",function(){var a=e.undoManager,b=e.selection;a.onUndo=new d(e,"Undo",h,null,a),a.onRedo=new d(e,"Redo",h,null,a),a.onBeforeAdd=new d(e,"BeforeAddUndo",null,a),a.onAdd=new d(e,"AddUndo",null,a),b.onBeforeGetContent=new d(e,"BeforeGetContent",i(!0),b),b.onGetContent=new d(e,"GetContent",i(!0),b),b.onBeforeSetContent=new d(e,"BeforeSetContent",i(!0),b),b.onSetContent=new d(e,"SetContent",i(!0),b)}),e.on("BeforeRenderUI",function(){var b=e.windowManager;b.onOpen=new d,b.onClose=new d,b.createInstance=function(b,d,e,f,g,h){c("windowManager.createInstance(..)");var i=a.resolve(b);return new i(d,e,f,g,h)}})}}var f;a.util.Dispatcher=d,a.onBeforeUnload=new d(a,"BeforeUnload"),a.onAddEditor=new d(a,"AddEditor","editor"),a.onRemoveEditor=new d(a,"RemoveEditor","editor"),a.util.Cookie={get:b,getHash:b,remove:b,set:b,setHash:b},a.on("SetupEditor",e),a.PluginManager.add("compat3x",e),a.addI18n=function(b,c){var d=a.util.I18n,e=a.each;return"string"==typeof b&&b.indexOf(".")===-1?void d.add(b,c):void(a.is(b,"string")?e(c,function(a,c){d.data[b+"."+c]=a}):e(b,function(a,b){e(a,function(a,c){e(a,function(a,e){"common"===c?d.data[b+"."+e]=a:d.data[b+"."+c+"."+e]=a})})}))}}(tinymce); \ No newline at end of file +!function(u){var t;function l(){}function f(e){!t&&window&&window.console&&(t=!0,console.log("Deprecated TinyMCE API call: "+e))}function i(i,a,d,s){i=i||this;var c=[];a?(this.add=function(o,r,e){function t(e){var t=[];if("string"==typeof d&&(d=d.split(" ")),d&&"function"!=typeof d)for(var n=0;n.on"+a+".add(..)"),i.on(a,t,e);var n={original:o,patched:t};return c.push(n),t},this.addToTop=function(e,t){this.add(e,t,!0)},this.remove=function(n){return c.forEach(function(e,t){if(e.original===n)return c.splice(t,1),i.off(a,e.patched)}),i.off(a,n)},this.dispatch=function(){return i.fire(a),!0}):this.add=this.addToTop=this.remove=this.dispatch=l}function n(s){function e(e,t){u.each(e.split(" "),function(e){s["on"+e]=new i(s,e,t)})}function n(e,t,n){return[t.level,n]}function o(n){return function(e,t){if(!t.selection&&!n||t.selection==n)return[t]}}if(!s.controlManager){s.controlManager={buttons:{},setDisabled:function(e,t){f("controlManager.setDisabled(..)"),this.buttons[e]&&this.buttons[e].disabled(t)},setActive:function(e,t){f("controlManager.setActive(..)"),this.buttons[e]&&this.buttons[e].active(t)},onAdd:new i,onPostRender:new i,add:function(e){return e},createButton:r,createColorSplitButton:r,createControl:r,createDropMenu:r,createListBox:r,createMenuButton:r,createSeparator:r,createSplitButton:r,createToolbar:r,createToolbarGroup:r,destroy:l,get:l,setControlType:r},e("PreInit BeforeRenderUI PostRender Load Init Remove Activate Deactivate","editor"),e("Click MouseUp MouseDown DblClick KeyDown KeyUp KeyPress ContextMenu Paste Submit Reset"),e("BeforeExecCommand ExecCommand","command ui value args"),e("PreProcess PostProcess LoadContent SaveContent Change"),e("BeforeSetContent BeforeGetContent SetContent GetContent",o(!1)),e("SetProgressState","state time"),e("VisualAid","element hasVisual"),e("Undo Redo",n),e("NodeChange",function(e,t){return[s.controlManager,t.element,s.selection.isCollapsed(),t]});var c=s.addButton;s.addButton=function(e,t){var n,o,r,i;function a(){if(s.controlManager.buttons[e]=this,n)return n.apply(this,arguments)}for(var d in t)"onpostrender"===d.toLowerCase()&&(n=t[d],t.onPostRender=a);return n||(t.onPostRender=a),t.title&&(t.title=(o=t.title,r=[s.settings.language||"en",o].join("."),i=u.i18n.translate(r),r!==i?i:u.i18n.translate(o))),c.call(this,e,t)},s.on("init",function(){var e=s.undoManager,t=s.selection;e.onUndo=new i(s,"Undo",n,null,e),e.onRedo=new i(s,"Redo",n,null,e),e.onBeforeAdd=new i(s,"BeforeAddUndo",null,e),e.onAdd=new i(s,"AddUndo",null,e),t.onBeforeGetContent=new i(s,"BeforeGetContent",o(!0),t),t.onGetContent=new i(s,"GetContent",o(!0),t),t.onBeforeSetContent=new i(s,"BeforeSetContent",o(!0),t),t.onSetContent=new i(s,"SetContent",o(!0),t)}),s.on("BeforeRenderUI",function(){var e=s.windowManager;e.onOpen=new i,e.onClose=new i,e.createInstance=function(e,t,n,o,r,i){return f("windowManager.createInstance(..)"),new(u.resolve(e))(t,n,o,r,i)}})}function r(){var t={};function n(){return r()}return f("editor.controlManager.*"),u.each("add addMenu addSeparator collapse createMenu destroy displayColor expand focus getLength hasMenus hideMenu isActive isCollapsed isDisabled isRendered isSelected mark postRender remove removeAll renderHTML renderMenu renderNode renderTo select selectByIndex setActive setAriaProperty setColor setDisabled setSelected setState showMenu update".split(" "),function(e){t[e]=n}),t}}u.util.Dispatcher=i,u.onBeforeUnload=new i(u,"BeforeUnload"),u.onAddEditor=new i(u,"AddEditor","editor"),u.onRemoveEditor=new i(u,"RemoveEditor","editor"),u.util.Cookie={get:l,getHash:l,remove:l,set:l,setHash:l},u.on("SetupEditor",function(e){n(e.editor)}),u.PluginManager.add("compat3x",n),u.addI18n=function(n,e){var r=u.util.I18n,t=u.each;"string"!=typeof n||-1!==n.indexOf(".")?u.is(n,"string")?t(e,function(e,t){r.data[n+"."+t]=e}):t(n,function(e,o){t(e,function(e,n){t(e,function(e,t){"common"===n?r.data[o+"."+t]=e:r.data[o+"."+n+"."+t]=e})})}):r.add(n,e)}}(tinymce); \ No newline at end of file diff --git a/src/wp-includes/js/tinymce/plugins/directionality/plugin.js b/src/wp-includes/js/tinymce/plugins/directionality/plugin.js index 74b85b51936df..73edbfbdbfc93 100644 --- a/src/wp-includes/js/tinymce/plugins/directionality/plugin.js +++ b/src/wp-includes/js/tinymce/plugins/directionality/plugin.js @@ -1,207 +1,66 @@ (function () { - -var defs = {}; // id -> {dependencies, definition, instance (possibly undefined)} - -// Used when there is no 'main' module. -// The name is probably (hopefully) unique so minification removes for releases. -var register_3795 = function (id) { - var module = dem(id); - var fragments = id.split('.'); - var target = Function('return this;')(); - for (var i = 0; i < fragments.length - 1; ++i) { - if (target[fragments[i]] === undefined) - target[fragments[i]] = {}; - target = target[fragments[i]]; - } - target[fragments[fragments.length - 1]] = module; -}; - -var instantiate = function (id) { - var actual = defs[id]; - var dependencies = actual.deps; - var definition = actual.defn; - var len = dependencies.length; - var instances = new Array(len); - for (var i = 0; i < len; ++i) - instances[i] = dem(dependencies[i]); - var defResult = definition.apply(null, instances); - if (defResult === undefined) - throw 'module [' + id + '] returned undefined'; - actual.instance = defResult; -}; - -var def = function (id, dependencies, definition) { - if (typeof id !== 'string') - throw 'module id must be a string'; - else if (dependencies === undefined) - throw 'no dependencies for ' + id; - else if (definition === undefined) - throw 'no definition function for ' + id; - defs[id] = { - deps: dependencies, - defn: definition, - instance: undefined - }; -}; - -var dem = function (id) { - var actual = defs[id]; - if (actual === undefined) - throw 'module [' + id + '] was undefined'; - else if (actual.instance === undefined) - instantiate(id); - return actual.instance; -}; - -var req = function (ids, callback) { - var len = ids.length; - var instances = new Array(len); - for (var i = 0; i < len; ++i) - instances.push(dem(ids[i])); - callback.apply(null, callback); -}; - -var ephox = {}; - -ephox.bolt = { - module: { - api: { - define: def, - require: req, - demand: dem - } - } -}; - -var define = def; -var require = req; -var demand = dem; -// this helps with minificiation when using a lot of global references -var defineGlobal = function (id, ref) { - define(id, [], function () { return ref; }); -}; -/*jsc -["tinymce.plugins.directionality.Plugin","tinymce.core.PluginManager","tinymce.core.util.Tools","global!tinymce.util.Tools.resolve"] -jsc*/ -defineGlobal("global!tinymce.util.Tools.resolve", tinymce.util.Tools.resolve); -/** - * ResolveGlobal.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.core.PluginManager', - [ - 'global!tinymce.util.Tools.resolve' - ], - function (resolve) { - return resolve('tinymce.PluginManager'); - } -); - -/** - * ResolveGlobal.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.core.util.Tools', - [ - 'global!tinymce.util.Tools.resolve' - ], - function (resolve) { - return resolve('tinymce.util.Tools'); - } -); - -/** - * Plugin.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -/** - * This class contains all core logic for the directionality plugin. - * - * @class tinymce.directionality.Plugin - * @private - */ -define( - 'tinymce.plugins.directionality.Plugin', - [ - 'tinymce.core.PluginManager', - 'tinymce.core.util.Tools' - ], - function (PluginManager, Tools) { - PluginManager.add('directionality', function (editor) { - function setDir(dir) { - var dom = editor.dom, curDir, blocks = editor.selection.getSelectedBlocks(); - - if (blocks.length) { - curDir = dom.getAttrib(blocks[0], "dir"); - - Tools.each(blocks, function (block) { - // Add dir to block if the parent block doesn't already have that dir - if (!dom.getParent(block.parentNode, "*[dir='" + dir + "']", dom.getRoot())) { - if (curDir != dir) { - dom.setAttrib(block, "dir", dir); - } else { - dom.setAttrib(block, "dir", null); - } - } - }); - - editor.nodeChanged(); +var directionality = (function () { + 'use strict'; + + var global = tinymce.util.Tools.resolve('tinymce.PluginManager'); + + var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools'); + + var setDir = function (editor, dir) { + var dom = editor.dom; + var curDir; + var blocks = editor.selection.getSelectedBlocks(); + if (blocks.length) { + curDir = dom.getAttrib(blocks[0], 'dir'); + global$1.each(blocks, function (block) { + if (!dom.getParent(block.parentNode, '*[dir="' + dir + '"]', dom.getRoot())) { + dom.setAttrib(block, 'dir', curDir !== dir ? dir : null); } - } - - function generateSelector(dir) { - var selector = []; - - Tools.each('h1 h2 h3 h4 h5 h6 div p'.split(' '), function (name) { - selector.push(name + '[dir=' + dir + ']'); - }); - - return selector.join(','); - } - - editor.addCommand('mceDirectionLTR', function () { - setDir("ltr"); - }); - - editor.addCommand('mceDirectionRTL', function () { - setDir("rtl"); }); + editor.nodeChanged(); + } + }; + var $_3zbk8naijfuw8otk = { setDir: setDir }; - editor.addButton('ltr', { - title: 'Left to right', - cmd: 'mceDirectionLTR', - stateSelector: generateSelector('ltr') - }); + var register = function (editor) { + editor.addCommand('mceDirectionLTR', function () { + $_3zbk8naijfuw8otk.setDir(editor, 'ltr'); + }); + editor.addCommand('mceDirectionRTL', function () { + $_3zbk8naijfuw8otk.setDir(editor, 'rtl'); + }); + }; + var $_eltqhvahjfuw8otj = { register: register }; - editor.addButton('rtl', { - title: 'Right to left', - cmd: 'mceDirectionRTL', - stateSelector: generateSelector('rtl') - }); + var generateSelector = function (dir) { + var selector = []; + global$1.each('h1 h2 h3 h4 h5 h6 div p'.split(' '), function (name) { + selector.push(name + '[dir=' + dir + ']'); + }); + return selector.join(','); + }; + var register$1 = function (editor) { + editor.addButton('ltr', { + title: 'Left to right', + cmd: 'mceDirectionLTR', + stateSelector: generateSelector('ltr') + }); + editor.addButton('rtl', { + title: 'Right to left', + cmd: 'mceDirectionRTL', + stateSelector: generateSelector('rtl') }); + }; + var $_g7lfqakjfuw8otn = { register: register$1 }; - return function () { }; + global.add('directionality', function (editor) { + $_eltqhvahjfuw8otj.register(editor); + $_g7lfqakjfuw8otn.register(editor); + }); + function Plugin () { } -); -dem('tinymce.plugins.directionality.Plugin')(); + + return Plugin; + +}()); })(); diff --git a/src/wp-includes/js/tinymce/plugins/directionality/plugin.min.js b/src/wp-includes/js/tinymce/plugins/directionality/plugin.min.js index 226c641aa9538..bb48bcf941776 100644 --- a/src/wp-includes/js/tinymce/plugins/directionality/plugin.min.js +++ b/src/wp-includes/js/tinymce/plugins/directionality/plugin.min.js @@ -1 +1 @@ -!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i {dependencies, definition, instance (possibly undefined)} - -// Used when there is no 'main' module. -// The name is probably (hopefully) unique so minification removes for releases. -var register_3795 = function (id) { - var module = dem(id); - var fragments = id.split('.'); - var target = Function('return this;')(); - for (var i = 0; i < fragments.length - 1; ++i) { - if (target[fragments[i]] === undefined) - target[fragments[i]] = {}; - target = target[fragments[i]]; - } - target[fragments[fragments.length - 1]] = module; -}; - -var instantiate = function (id) { - var actual = defs[id]; - var dependencies = actual.deps; - var definition = actual.defn; - var len = dependencies.length; - var instances = new Array(len); - for (var i = 0; i < len; ++i) - instances[i] = dem(dependencies[i]); - var defResult = definition.apply(null, instances); - if (defResult === undefined) - throw 'module [' + id + '] returned undefined'; - actual.instance = defResult; -}; - -var def = function (id, dependencies, definition) { - if (typeof id !== 'string') - throw 'module id must be a string'; - else if (dependencies === undefined) - throw 'no dependencies for ' + id; - else if (definition === undefined) - throw 'no definition function for ' + id; - defs[id] = { - deps: dependencies, - defn: definition, - instance: undefined +var fullscreen = (function () { + 'use strict'; + + var Cell = function (initial) { + var value = initial; + var get = function () { + return value; + }; + var set = function (v) { + value = v; + }; + var clone = function () { + return Cell(get()); + }; + return { + get: get, + set: set, + clone: clone + }; }; -}; - -var dem = function (id) { - var actual = defs[id]; - if (actual === undefined) - throw 'module [' + id + '] was undefined'; - else if (actual.instance === undefined) - instantiate(id); - return actual.instance; -}; - -var req = function (ids, callback) { - var len = ids.length; - var instances = new Array(len); - for (var i = 0; i < len; ++i) - instances.push(dem(ids[i])); - callback.apply(null, callback); -}; - -var ephox = {}; - -ephox.bolt = { - module: { - api: { - define: def, - require: req, - demand: dem - } - } -}; - -var define = def; -var require = req; -var demand = dem; -// this helps with minificiation when using a lot of global references -var defineGlobal = function (id, ref) { - define(id, [], function () { return ref; }); -}; -/*jsc -["tinymce.plugins.fullscreen.Plugin","tinymce.core.dom.DOMUtils","tinymce.core.PluginManager","global!tinymce.util.Tools.resolve"] -jsc*/ -defineGlobal("global!tinymce.util.Tools.resolve", tinymce.util.Tools.resolve); -/** - * ResolveGlobal.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.core.dom.DOMUtils', - [ - 'global!tinymce.util.Tools.resolve' - ], - function (resolve) { - return resolve('tinymce.dom.DOMUtils'); - } -); - -/** - * ResolveGlobal.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.core.PluginManager', - [ - 'global!tinymce.util.Tools.resolve' - ], - function (resolve) { - return resolve('tinymce.PluginManager'); - } -); -/** - * Plugin.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ + var global = tinymce.util.Tools.resolve('tinymce.PluginManager'); -/** - * This class contains all core logic for the fullscreen plugin. - * - * @class tinymce.fullscreen.Plugin - * @private - */ -define( - 'tinymce.plugins.fullscreen.Plugin', - [ - 'tinymce.core.dom.DOMUtils', - 'tinymce.core.PluginManager' - ], - function (DOMUtils, PluginManager) { - var DOM = DOMUtils.DOM; - - PluginManager.add('fullscreen', function (editor) { - var fullscreenState = false, iframeWidth, iframeHeight, resizeHandler; - var containerWidth, containerHeight, scrollPos; - - if (editor.settings.inline) { - return; - } - - function getWindowSize() { - var w, h, win = window, doc = document; - var body = doc.body; - - // Old IE - if (body.offsetWidth) { - w = body.offsetWidth; - h = body.offsetHeight; - } - - // Modern browsers - if (win.innerWidth && win.innerHeight) { - w = win.innerWidth; - h = win.innerHeight; - } - - return { w: w, h: h }; + var get = function (fullscreenState) { + return { + isFullscreen: function () { + return fullscreenState.get() !== null; } + }; + }; + var $_2d5qbdbsjfuw8ozh = { get: get }; - function getScrollPos() { - var vp = DOM.getViewPort(); - - return { - x: vp.x, - y: vp.y - }; - } + var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils'); - function setScrollPos(pos) { - window.scrollTo(pos.x, pos.y); + var fireFullscreenStateChanged = function (editor, state) { + editor.fire('FullscreenStateChanged', { state: state }); + }; + var $_6m5hhtbwjfuw8ozm = { fireFullscreenStateChanged: fireFullscreenStateChanged }; + + var DOM = global$1.DOM; + var getWindowSize = function () { + var w; + var h; + var win = window; + var doc = document; + var body = doc.body; + if (body.offsetWidth) { + w = body.offsetWidth; + h = body.offsetHeight; + } + if (win.innerWidth && win.innerHeight) { + w = win.innerWidth; + h = win.innerHeight; + } + return { + w: w, + h: h + }; + }; + var getScrollPos = function () { + var vp = DOM.getViewPort(); + return { + x: vp.x, + y: vp.y + }; + }; + var setScrollPos = function (pos) { + window.scrollTo(pos.x, pos.y); + }; + var toggleFullscreen = function (editor, fullscreenState) { + var body = document.body; + var documentElement = document.documentElement; + var editorContainerStyle; + var editorContainer, iframe, iframeStyle; + var fullscreenInfo = fullscreenState.get(); + var resize = function () { + DOM.setStyle(iframe, 'height', getWindowSize().h - (editorContainer.clientHeight - iframe.clientHeight)); + }; + var removeResize = function () { + DOM.unbind(window, 'resize', resize); + }; + editorContainer = editor.getContainer(); + editorContainerStyle = editorContainer.style; + iframe = editor.getContentAreaContainer().firstChild; + iframeStyle = iframe.style; + if (!fullscreenInfo) { + var newFullScreenInfo = { + scrollPos: getScrollPos(), + containerWidth: editorContainerStyle.width, + containerHeight: editorContainerStyle.height, + iframeWidth: iframeStyle.width, + iframeHeight: iframeStyle.height, + resizeHandler: resize, + removeHandler: removeResize + }; + iframeStyle.width = iframeStyle.height = '100%'; + editorContainerStyle.width = editorContainerStyle.height = ''; + DOM.addClass(body, 'mce-fullscreen'); + DOM.addClass(documentElement, 'mce-fullscreen'); + DOM.addClass(editorContainer, 'mce-fullscreen'); + DOM.bind(window, 'resize', resize); + editor.on('remove', removeResize); + resize(); + fullscreenState.set(newFullScreenInfo); + $_6m5hhtbwjfuw8ozm.fireFullscreenStateChanged(editor, true); + } else { + iframeStyle.width = fullscreenInfo.iframeWidth; + iframeStyle.height = fullscreenInfo.iframeHeight; + if (fullscreenInfo.containerWidth) { + editorContainerStyle.width = fullscreenInfo.containerWidth; } - - function toggleFullscreen() { - var body = document.body, documentElement = document.documentElement, editorContainerStyle; - var editorContainer, iframe, iframeStyle; - - function resize() { - DOM.setStyle(iframe, 'height', getWindowSize().h - (editorContainer.clientHeight - iframe.clientHeight)); - } - - fullscreenState = !fullscreenState; - - editorContainer = editor.getContainer(); - editorContainerStyle = editorContainer.style; - iframe = editor.getContentAreaContainer().firstChild; - iframeStyle = iframe.style; - - if (fullscreenState) { - scrollPos = getScrollPos(); - iframeWidth = iframeStyle.width; - iframeHeight = iframeStyle.height; - iframeStyle.width = iframeStyle.height = '100%'; - containerWidth = editorContainerStyle.width; - containerHeight = editorContainerStyle.height; - editorContainerStyle.width = editorContainerStyle.height = ''; - - DOM.addClass(body, 'mce-fullscreen'); - DOM.addClass(documentElement, 'mce-fullscreen'); - DOM.addClass(editorContainer, 'mce-fullscreen'); - - DOM.bind(window, 'resize', resize); - resize(); - resizeHandler = resize; - } else { - iframeStyle.width = iframeWidth; - iframeStyle.height = iframeHeight; - - if (containerWidth) { - editorContainerStyle.width = containerWidth; - } - - if (containerHeight) { - editorContainerStyle.height = containerHeight; - } - - DOM.removeClass(body, 'mce-fullscreen'); - DOM.removeClass(documentElement, 'mce-fullscreen'); - DOM.removeClass(editorContainer, 'mce-fullscreen'); - DOM.unbind(window, 'resize', resizeHandler); - setScrollPos(scrollPos); - } - - editor.fire('FullscreenStateChanged', { state: fullscreenState }); + if (fullscreenInfo.containerHeight) { + editorContainerStyle.height = fullscreenInfo.containerHeight; } + DOM.removeClass(body, 'mce-fullscreen'); + DOM.removeClass(documentElement, 'mce-fullscreen'); + DOM.removeClass(editorContainer, 'mce-fullscreen'); + setScrollPos(fullscreenInfo.scrollPos); + DOM.unbind(window, 'resize', fullscreenInfo.resizeHandler); + editor.off('remove', fullscreenInfo.removeHandler); + fullscreenState.set(null); + $_6m5hhtbwjfuw8ozm.fireFullscreenStateChanged(editor, false); + } + }; + var $_e74zxhbujfuw8ozj = { toggleFullscreen: toggleFullscreen }; - editor.on('init', function () { - editor.addShortcut('Ctrl+Shift+F', '', toggleFullscreen); - }); - - editor.on('remove', function () { - if (resizeHandler) { - DOM.unbind(window, 'resize', resizeHandler); - } - }); - - editor.addCommand('mceFullScreen', toggleFullscreen); - - editor.addMenuItem('fullscreen', { - text: 'Fullscreen', - shortcut: 'Ctrl+Shift+F', - selectable: true, - onClick: function () { - toggleFullscreen(); - editor.focus(); - }, - onPostRender: function () { - var self = this; - - editor.on('FullscreenStateChanged', function (e) { - self.active(e.state); - }); - }, - context: 'view' - }); - - editor.addButton('fullscreen', { - tooltip: 'Fullscreen', - shortcut: 'Ctrl+Shift+F', - onClick: toggleFullscreen, - onPostRender: function () { - var self = this; + var register = function (editor, fullscreenState) { + editor.addCommand('mceFullScreen', function () { + $_e74zxhbujfuw8ozj.toggleFullscreen(editor, fullscreenState); + }); + }; + var $_j53v2btjfuw8ozi = { register: register }; - editor.on('FullscreenStateChanged', function (e) { - self.active(e.state); - }); - } + var postRender = function (editor) { + return function (e) { + var ctrl = e.control; + editor.on('FullscreenStateChanged', function (e) { + ctrl.active(e.state); }); - - return { - isFullscreen: function () { - return fullscreenState; - } - }; + }; + }; + var register$1 = function (editor) { + editor.addMenuItem('fullscreen', { + text: 'Fullscreen', + shortcut: 'Ctrl+Shift+F', + selectable: true, + cmd: 'mceFullScreen', + onPostRender: postRender(editor), + context: 'view' + }); + editor.addButton('fullscreen', { + active: false, + tooltip: 'Fullscreen', + cmd: 'mceFullScreen', + onPostRender: postRender(editor) }); + }; + var $_3ge8trbxjfuw8ozn = { register: register$1 }; - return function () { }; + global.add('fullscreen', function (editor) { + var fullscreenState = Cell(null); + if (editor.settings.inline) { + return $_2d5qbdbsjfuw8ozh.get(fullscreenState); + } + $_j53v2btjfuw8ozi.register(editor, fullscreenState); + $_3ge8trbxjfuw8ozn.register(editor); + editor.addShortcut('Ctrl+Shift+F', '', 'mceFullScreen'); + return $_2d5qbdbsjfuw8ozh.get(fullscreenState); + }); + function Plugin () { } -); -dem('tinymce.plugins.fullscreen.Plugin')(); + + return Plugin; + +}()); })(); diff --git a/src/wp-includes/js/tinymce/plugins/fullscreen/plugin.min.js b/src/wp-includes/js/tinymce/plugins/fullscreen/plugin.min.js index 3db2176572917..cd4eb5ed47e00 100644 --- a/src/wp-includes/js/tinymce/plugins/fullscreen/plugin.min.js +++ b/src/wp-includes/js/tinymce/plugins/fullscreen/plugin.min.js @@ -1 +1 @@ -!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i {dependencies, definition, instance (possibly undefined)} + var global = tinymce.util.Tools.resolve('tinymce.PluginManager'); -// Used when there is no 'main' module. -// The name is probably (hopefully) unique so minification removes for releases. -var register_3795 = function (id) { - var module = dem(id); - var fragments = id.split('.'); - var target = Function('return this;')(); - for (var i = 0; i < fragments.length - 1; ++i) { - if (target[fragments[i]] === undefined) - target[fragments[i]] = {}; - target = target[fragments[i]]; - } - target[fragments[fragments.length - 1]] = module; -}; - -var instantiate = function (id) { - var actual = defs[id]; - var dependencies = actual.deps; - var definition = actual.defn; - var len = dependencies.length; - var instances = new Array(len); - for (var i = 0; i < len; ++i) - instances[i] = dem(dependencies[i]); - var defResult = definition.apply(null, instances); - if (defResult === undefined) - throw 'module [' + id + '] returned undefined'; - actual.instance = defResult; -}; - -var def = function (id, dependencies, definition) { - if (typeof id !== 'string') - throw 'module id must be a string'; - else if (dependencies === undefined) - throw 'no dependencies for ' + id; - else if (definition === undefined) - throw 'no definition function for ' + id; - defs[id] = { - deps: dependencies, - defn: definition, - instance: undefined + var register = function (editor) { + editor.addCommand('InsertHorizontalRule', function () { + editor.execCommand('mceInsertContent', false, '
'); + }); }; -}; - -var dem = function (id) { - var actual = defs[id]; - if (actual === undefined) - throw 'module [' + id + '] was undefined'; - else if (actual.instance === undefined) - instantiate(id); - return actual.instance; -}; - -var req = function (ids, callback) { - var len = ids.length; - var instances = new Array(len); - for (var i = 0; i < len; ++i) - instances.push(dem(ids[i])); - callback.apply(null, callback); -}; - -var ephox = {}; - -ephox.bolt = { - module: { - api: { - define: def, - require: req, - demand: dem - } - } -}; + var $_598wgdc0jfuw8p00 = { register: register }; -var define = def; -var require = req; -var demand = dem; -// this helps with minificiation when using a lot of global references -var defineGlobal = function (id, ref) { - define(id, [], function () { return ref; }); -}; -/*jsc -["tinymce.plugins.hr.Plugin","tinymce.core.PluginManager","global!tinymce.util.Tools.resolve"] -jsc*/ -defineGlobal("global!tinymce.util.Tools.resolve", tinymce.util.Tools.resolve); -/** - * ResolveGlobal.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ + var register$1 = function (editor) { + editor.addButton('hr', { + icon: 'hr', + tooltip: 'Horizontal line', + cmd: 'InsertHorizontalRule' + }); + editor.addMenuItem('hr', { + icon: 'hr', + text: 'Horizontal line', + cmd: 'InsertHorizontalRule', + context: 'insert' + }); + }; + var $_7oq7jyc1jfuw8p02 = { register: register$1 }; -define( - 'tinymce.core.PluginManager', - [ - 'global!tinymce.util.Tools.resolve' - ], - function (resolve) { - return resolve('tinymce.PluginManager'); + global.add('hr', function (editor) { + $_598wgdc0jfuw8p00.register(editor); + $_7oq7jyc1jfuw8p02.register(editor); + }); + function Plugin () { } -); - -/** - * Plugin.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ -/** - * This class contains all core logic for the hr plugin. - * - * @class tinymce.hr.Plugin - * @private - */ -define( - 'tinymce.plugins.hr.Plugin', - [ - 'tinymce.core.PluginManager' - ], - function (PluginManager) { - PluginManager.add('hr', function (editor) { - editor.addCommand('InsertHorizontalRule', function () { - editor.execCommand('mceInsertContent', false, '
'); - }); + return Plugin; - editor.addButton('hr', { - icon: 'hr', - tooltip: 'Horizontal line', - cmd: 'InsertHorizontalRule' - }); - - editor.addMenuItem('hr', { - icon: 'hr', - text: 'Horizontal line', - cmd: 'InsertHorizontalRule', - context: 'insert' - }); - }); - - return function () { }; - } -); -dem('tinymce.plugins.hr.Plugin')(); +}()); })(); diff --git a/src/wp-includes/js/tinymce/plugins/hr/plugin.min.js b/src/wp-includes/js/tinymce/plugins/hr/plugin.min.js index 6c0dfa44780b2..72bc2cabd109c 100644 --- a/src/wp-includes/js/tinymce/plugins/hr/plugin.min.js +++ b/src/wp-includes/js/tinymce/plugins/hr/plugin.min.js @@ -1 +1 @@ -!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i")}),a.addButton("hr",{icon:"hr",tooltip:"Horizontal line",cmd:"InsertHorizontalRule"}),a.addMenuItem("hr",{icon:"hr",text:"Horizontal line",cmd:"InsertHorizontalRule",context:"insert"})}),function(){}}),d("0")()}(); \ No newline at end of file +!function(){"use strict";var n=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=function(n){n.addCommand("InsertHorizontalRule",function(){n.execCommand("mceInsertContent",!1,"
")})},o=function(n){n.addButton("hr",{icon:"hr",tooltip:"Horizontal line",cmd:"InsertHorizontalRule"}),n.addMenuItem("hr",{icon:"hr",text:"Horizontal line",cmd:"InsertHorizontalRule",context:"insert"})};n.add("hr",function(n){t(n),o(n)})}(); \ No newline at end of file diff --git a/src/wp-includes/js/tinymce/plugins/image/plugin.js b/src/wp-includes/js/tinymce/plugins/image/plugin.js index 3395ec69b7050..9fe18bb996b54 100644 --- a/src/wp-includes/js/tinymce/plugins/image/plugin.js +++ b/src/wp-includes/js/tinymce/plugins/image/plugin.js @@ -1,1159 +1,1337 @@ (function () { +var image = (function () { + 'use strict'; -var defs = {}; // id -> {dependencies, definition, instance (possibly undefined)} + var global = tinymce.util.Tools.resolve('tinymce.PluginManager'); -// Used when there is no 'main' module. -// The name is probably (hopefully) unique so minification removes for releases. -var register_3795 = function (id) { - var module = dem(id); - var fragments = id.split('.'); - var target = Function('return this;')(); - for (var i = 0; i < fragments.length - 1; ++i) { - if (target[fragments[i]] === undefined) - target[fragments[i]] = {}; - target = target[fragments[i]]; - } - target[fragments[fragments.length - 1]] = module; -}; - -var instantiate = function (id) { - var actual = defs[id]; - var dependencies = actual.deps; - var definition = actual.defn; - var len = dependencies.length; - var instances = new Array(len); - for (var i = 0; i < len; ++i) - instances[i] = dem(dependencies[i]); - var defResult = definition.apply(null, instances); - if (defResult === undefined) - throw 'module [' + id + '] returned undefined'; - actual.instance = defResult; -}; - -var def = function (id, dependencies, definition) { - if (typeof id !== 'string') - throw 'module id must be a string'; - else if (dependencies === undefined) - throw 'no dependencies for ' + id; - else if (definition === undefined) - throw 'no definition function for ' + id; - defs[id] = { - deps: dependencies, - defn: definition, - instance: undefined - }; -}; - -var dem = function (id) { - var actual = defs[id]; - if (actual === undefined) - throw 'module [' + id + '] was undefined'; - else if (actual.instance === undefined) - instantiate(id); - return actual.instance; -}; - -var req = function (ids, callback) { - var len = ids.length; - var instances = new Array(len); - for (var i = 0; i < len; ++i) - instances.push(dem(ids[i])); - callback.apply(null, callback); -}; - -var ephox = {}; - -ephox.bolt = { - module: { - api: { - define: def, - require: req, - demand: dem - } - } -}; - -var define = def; -var require = req; -var demand = dem; -// this helps with minificiation when using a lot of global references -var defineGlobal = function (id, ref) { - define(id, [], function () { return ref; }); -}; -/*jsc -["tinymce.plugins.image.Plugin","tinymce.core.PluginManager","tinymce.core.util.Tools","tinymce.plugins.image.ui.Dialog","global!tinymce.util.Tools.resolve","global!document","global!Math","global!RegExp","tinymce.core.Env","tinymce.core.ui.Factory","tinymce.core.util.JSON","tinymce.core.util.XHR","tinymce.plugins.image.core.Uploader","tinymce.plugins.image.core.Utils","tinymce.core.util.Promise"] -jsc*/ -defineGlobal("global!tinymce.util.Tools.resolve", tinymce.util.Tools.resolve); -/** - * ResolveGlobal.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.core.PluginManager', - [ - 'global!tinymce.util.Tools.resolve' - ], - function (resolve) { - return resolve('tinymce.PluginManager'); - } -); - -/** - * ResolveGlobal.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.core.util.Tools', - [ - 'global!tinymce.util.Tools.resolve' - ], - function (resolve) { - return resolve('tinymce.util.Tools'); - } -); - -defineGlobal("global!document", document); -defineGlobal("global!Math", Math); -defineGlobal("global!RegExp", RegExp); -/** - * ResolveGlobal.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.core.Env', - [ - 'global!tinymce.util.Tools.resolve' - ], - function (resolve) { - return resolve('tinymce.Env'); - } -); - -/** - * ResolveGlobal.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.core.ui.Factory', - [ - 'global!tinymce.util.Tools.resolve' - ], - function (resolve) { - return resolve('tinymce.ui.Factory'); - } -); + var hasDimensions = function (editor) { + return editor.settings.image_dimensions === false ? false : true; + }; + var hasAdvTab = function (editor) { + return editor.settings.image_advtab === true ? true : false; + }; + var getPrependUrl = function (editor) { + return editor.getParam('image_prepend_url', ''); + }; + var getClassList = function (editor) { + return editor.getParam('image_class_list'); + }; + var hasDescription = function (editor) { + return editor.settings.image_description === false ? false : true; + }; + var hasImageTitle = function (editor) { + return editor.settings.image_title === true ? true : false; + }; + var hasImageCaption = function (editor) { + return editor.settings.image_caption === true ? true : false; + }; + var getImageList = function (editor) { + return editor.getParam('image_list', false); + }; + var hasUploadUrl = function (editor) { + return editor.getParam('images_upload_url', false); + }; + var hasUploadHandler = function (editor) { + return editor.getParam('images_upload_handler', false); + }; + var getUploadUrl = function (editor) { + return editor.getParam('images_upload_url'); + }; + var getUploadHandler = function (editor) { + return editor.getParam('images_upload_handler'); + }; + var getUploadBasePath = function (editor) { + return editor.getParam('images_upload_base_path'); + }; + var getUploadCredentials = function (editor) { + return editor.getParam('images_upload_credentials'); + }; + var $_9cq6y3c6jfuw8p0n = { + hasDimensions: hasDimensions, + hasAdvTab: hasAdvTab, + getPrependUrl: getPrependUrl, + getClassList: getClassList, + hasDescription: hasDescription, + hasImageTitle: hasImageTitle, + hasImageCaption: hasImageCaption, + getImageList: getImageList, + hasUploadUrl: hasUploadUrl, + hasUploadHandler: hasUploadHandler, + getUploadUrl: getUploadUrl, + getUploadHandler: getUploadHandler, + getUploadBasePath: getUploadBasePath, + getUploadCredentials: getUploadCredentials + }; -/** - * ResolveGlobal.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ + var global$1 = typeof window !== 'undefined' ? window : Function('return this;')(); -define( - 'tinymce.core.util.JSON', - [ - 'global!tinymce.util.Tools.resolve' - ], - function (resolve) { - return resolve('tinymce.util.JSON'); - } -); + var path = function (parts, scope) { + var o = scope !== undefined && scope !== null ? scope : global$1; + for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i) + o = o[parts[i]]; + return o; + }; + var resolve = function (p, scope) { + var parts = p.split('.'); + return path(parts, scope); + }; + var step = function (o, part) { + if (o[part] === undefined || o[part] === null) + o[part] = {}; + return o[part]; + }; + var forge = function (parts, target) { + var o = target !== undefined ? target : global$1; + for (var i = 0; i < parts.length; ++i) + o = step(o, parts[i]); + return o; + }; + var namespace = function (name, target) { + var parts = name.split('.'); + return forge(parts, target); + }; + var $_5mb36jcajfuw8p19 = { + path: path, + resolve: resolve, + forge: forge, + namespace: namespace + }; -/** - * ResolveGlobal.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ + var unsafe = function (name, scope) { + return $_5mb36jcajfuw8p19.resolve(name, scope); + }; + var getOrDie = function (name, scope) { + var actual = unsafe(name, scope); + if (actual === undefined || actual === null) + throw name + ' not available on this browser'; + return actual; + }; + var $_ba69mec9jfuw8p15 = { getOrDie: getOrDie }; -define( - 'tinymce.core.util.XHR', - [ - 'global!tinymce.util.Tools.resolve' - ], - function (resolve) { - return resolve('tinymce.util.XHR'); + function FileReader () { + var f = $_ba69mec9jfuw8p15.getOrDie('FileReader'); + return new f(); } -); - -/** - * ResolveGlobal.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ -define( - 'tinymce.core.util.Promise', - [ - 'global!tinymce.util.Tools.resolve' - ], - function (resolve) { - return resolve('tinymce.util.Promise'); - } -); + var global$2 = tinymce.util.Tools.resolve('tinymce.util.Promise'); -/** - * Uploader.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ + var global$3 = tinymce.util.Tools.resolve('tinymce.util.Tools'); -/** - * This is basically cut down version of tinymce.core.file.Uploader, which we could use directly - * if it wasn't marked as private. - * - * @class tinymce.image.core.Uploader - * @private - */ -define( - 'tinymce.plugins.image.core.Uploader', - [ - 'tinymce.core.util.Promise', - 'tinymce.core.util.Tools', - 'global!document' - ], - function (Promise, Tools, document) { - return function (settings) { - var noop = function () {}; + var global$4 = tinymce.util.Tools.resolve('tinymce.util.XHR'); - function pathJoin(path1, path2) { - if (path1) { - return path1.replace(/\/$/, '') + '/' + path2.replace(/^\//, ''); + var parseIntAndGetMax = function (val1, val2) { + return Math.max(parseInt(val1, 10), parseInt(val2, 10)); + }; + var getImageSize = function (url, callback) { + var img = document.createElement('img'); + function done(width, height) { + if (img.parentNode) { + img.parentNode.removeChild(img); + } + callback({ + width: width, + height: height + }); + } + img.onload = function () { + var width = parseIntAndGetMax(img.width, img.clientWidth); + var height = parseIntAndGetMax(img.height, img.clientHeight); + done(width, height); + }; + img.onerror = function () { + done(0, 0); + }; + var style = img.style; + style.visibility = 'hidden'; + style.position = 'fixed'; + style.bottom = style.left = '0px'; + style.width = style.height = 'auto'; + document.body.appendChild(img); + img.src = url; + }; + var buildListItems = function (inputList, itemCallback, startItems) { + function appendItems(values, output) { + output = output || []; + global$3.each(values, function (item) { + var menuItem = { text: item.text || item.title }; + if (item.menu) { + menuItem.menu = appendItems(item.menu); + } else { + menuItem.value = item.value; + itemCallback(menuItem); } - - return path2; + output.push(menuItem); + }); + return output; + } + return appendItems(inputList, startItems || []); + }; + var removePixelSuffix = function (value) { + if (value) { + value = value.replace(/px$/, ''); + } + return value; + }; + var addPixelSuffix = function (value) { + if (value.length > 0 && /^[0-9]+$/.test(value)) { + value += 'px'; + } + return value; + }; + var mergeMargins = function (css) { + if (css.margin) { + var splitMargin = css.margin.split(' '); + switch (splitMargin.length) { + case 1: + css['margin-top'] = css['margin-top'] || splitMargin[0]; + css['margin-right'] = css['margin-right'] || splitMargin[0]; + css['margin-bottom'] = css['margin-bottom'] || splitMargin[0]; + css['margin-left'] = css['margin-left'] || splitMargin[0]; + break; + case 2: + css['margin-top'] = css['margin-top'] || splitMargin[0]; + css['margin-right'] = css['margin-right'] || splitMargin[1]; + css['margin-bottom'] = css['margin-bottom'] || splitMargin[0]; + css['margin-left'] = css['margin-left'] || splitMargin[1]; + break; + case 3: + css['margin-top'] = css['margin-top'] || splitMargin[0]; + css['margin-right'] = css['margin-right'] || splitMargin[1]; + css['margin-bottom'] = css['margin-bottom'] || splitMargin[2]; + css['margin-left'] = css['margin-left'] || splitMargin[1]; + break; + case 4: + css['margin-top'] = css['margin-top'] || splitMargin[0]; + css['margin-right'] = css['margin-right'] || splitMargin[1]; + css['margin-bottom'] = css['margin-bottom'] || splitMargin[2]; + css['margin-left'] = css['margin-left'] || splitMargin[3]; } - - function defaultHandler(blobInfo, success, failure, progress) { - var xhr, formData; - - xhr = new XMLHttpRequest(); - xhr.open('POST', settings.url); - xhr.withCredentials = settings.credentials; - - xhr.upload.onprogress = function (e) { - progress(e.loaded / e.total * 100); - }; - - xhr.onerror = function () { - failure("Image upload failed due to a XHR Transport error. Code: " + xhr.status); - }; - - xhr.onload = function () { - var json; - - if (xhr.status < 200 || xhr.status >= 300) { - failure("HTTP Error: " + xhr.status); - return; - } - - json = JSON.parse(xhr.responseText); - - if (!json || typeof json.location != "string") { - failure("Invalid JSON: " + xhr.responseText); - return; - } - - success(pathJoin(settings.basePath, json.location)); - }; - - formData = new FormData(); - formData.append('file', blobInfo.blob(), blobInfo.filename()); - - xhr.send(formData); + delete css.margin; + } + return css; + }; + var createImageList = function (editor, callback) { + var imageList = $_9cq6y3c6jfuw8p0n.getImageList(editor); + if (typeof imageList === 'string') { + global$4.send({ + url: imageList, + success: function (text) { + callback(JSON.parse(text)); + } + }); + } else if (typeof imageList === 'function') { + imageList(callback); + } else { + callback(imageList); + } + }; + var waitLoadImage = function (editor, data, imgElm) { + function selectImage() { + imgElm.onload = imgElm.onerror = null; + if (editor.selection) { + editor.selection.select(imgElm); + editor.nodeChanged(); } - - function uploadBlob(blobInfo, handler) { - return new Promise(function (resolve, reject) { - try { - handler(blobInfo, resolve, reject, noop); - } catch (ex) { - reject(ex.message); - } + } + imgElm.onload = function () { + if (!data.width && !data.height && $_9cq6y3c6jfuw8p0n.hasDimensions(editor)) { + editor.dom.setAttribs(imgElm, { + width: imgElm.clientWidth, + height: imgElm.clientHeight }); } - - function isDefaultHandler(handler) { - return handler === defaultHandler; - } - - function upload(blobInfo) { - return (!settings.url && isDefaultHandler(settings.handler)) ? Promise.reject("Upload url missng from the settings.") : uploadBlob(blobInfo, settings.handler); - } - - settings = Tools.extend({ - credentials: false, - handler: defaultHandler - }, settings); - - return { - upload: upload - }; + selectImage(); }; - } -); -/** - * Utils.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -/** - * @class tinymce.image.core.Utils - * @private - */ -define( - 'tinymce.plugins.image.core.Utils', - [ - 'tinymce.core.util.Tools', - 'global!Math', - 'global!document' - ], - function (Tools, Math, document) { - - var getImageSize = function (url, callback) { - var img = document.createElement('img'); - - function done(width, height) { - if (img.parentNode) { - img.parentNode.removeChild(img); - } - - callback({ width: width, height: height }); - } - - img.onload = function () { - done(Math.max(img.width, img.clientWidth), Math.max(img.height, img.clientHeight)); + imgElm.onerror = selectImage; + }; + var blobToDataUri = function (blob) { + return new global$2(function (resolve, reject) { + var reader = new FileReader(); + reader.onload = function () { + resolve(reader.result); }; - - img.onerror = function () { - done(); + reader.onerror = function () { + reject(FileReader.error.message); }; + reader.readAsDataURL(blob); + }); + }; + var $_7v7yldc7jfuw8p0q = { + getImageSize: getImageSize, + buildListItems: buildListItems, + removePixelSuffix: removePixelSuffix, + addPixelSuffix: addPixelSuffix, + mergeMargins: mergeMargins, + createImageList: createImageList, + waitLoadImage: waitLoadImage, + blobToDataUri: blobToDataUri + }; - var style = img.style; - style.visibility = 'hidden'; - style.position = 'fixed'; - style.bottom = style.left = 0; - style.width = style.height = 'auto'; - - document.body.appendChild(img); - img.src = url; + var global$5 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils'); + + var typeOf = function (x) { + if (x === null) + return 'null'; + var t = typeof x; + if (t === 'object' && Array.prototype.isPrototypeOf(x)) + return 'array'; + if (t === 'object' && String.prototype.isPrototypeOf(x)) + return 'string'; + return t; + }; + var isType = function (type) { + return function (value) { + return typeOf(value) === type; }; + }; + var $_rbqovckjfuw8p27 = { + isString: isType('string'), + isObject: isType('object'), + isArray: isType('array'), + isNull: isType('null'), + isBoolean: isType('boolean'), + isUndefined: isType('undefined'), + isFunction: isType('function'), + isNumber: isType('number') + }; - - var buildListItems = function (inputList, itemCallback, startItems) { - function appendItems(values, output) { - output = output || []; - - Tools.each(values, function (item) { - var menuItem = { text: item.text || item.title }; - - if (item.menu) { - menuItem.menu = appendItems(item.menu); - } else { - menuItem.value = item.value; - itemCallback(menuItem); + var shallow = function (old, nu) { + return nu; + }; + var deep = function (old, nu) { + var bothObjects = $_rbqovckjfuw8p27.isObject(old) && $_rbqovckjfuw8p27.isObject(nu); + return bothObjects ? deepMerge(old, nu) : nu; + }; + var baseMerge = function (merger) { + return function () { + var objects = new Array(arguments.length); + for (var i = 0; i < objects.length; i++) + objects[i] = arguments[i]; + if (objects.length === 0) + throw new Error('Can\'t merge zero objects'); + var ret = {}; + for (var j = 0; j < objects.length; j++) { + var curObject = objects[j]; + for (var key in curObject) + if (curObject.hasOwnProperty(key)) { + ret[key] = merger(ret[key], curObject[key]); } - - output.push(menuItem); - }); - - return output; } - - return appendItems(inputList, startItems || []); - }; - - var removePixelSuffix = function (value) { - if (value) { - value = value.replace(/px$/, ''); - } - return value; + return ret; }; + }; + var deepMerge = baseMerge(deep); + var merge = baseMerge(shallow); + var $_ajpvnqcjjfuw8p25 = { + deepMerge: deepMerge, + merge: merge + }; - var addPixelSuffix = function (value) { - if (value.length > 0 && /^[0-9]+$/.test(value)) { - value += 'px'; + var DOM = global$5.DOM; + var getHspace = function (image) { + if (image.style.marginLeft && image.style.marginRight && image.style.marginLeft === image.style.marginRight) { + return $_7v7yldc7jfuw8p0q.removePixelSuffix(image.style.marginLeft); + } else { + return ''; + } + }; + var getVspace = function (image) { + if (image.style.marginTop && image.style.marginBottom && image.style.marginTop === image.style.marginBottom) { + return $_7v7yldc7jfuw8p0q.removePixelSuffix(image.style.marginTop); + } else { + return ''; + } + }; + var getBorder = function (image) { + if (image.style.borderWidth) { + return $_7v7yldc7jfuw8p0q.removePixelSuffix(image.style.borderWidth); + } else { + return ''; + } + }; + var getAttrib = function (image, name) { + if (image.hasAttribute(name)) { + return image.getAttribute(name); + } else { + return ''; + } + }; + var getStyle = function (image, name) { + return image.style[name] ? image.style[name] : ''; + }; + var hasCaption = function (image) { + return image.parentNode !== null && image.parentNode.nodeName === 'FIGURE'; + }; + var setAttrib = function (image, name, value) { + image.setAttribute(name, value); + }; + var wrapInFigure = function (image) { + var figureElm = DOM.create('figure', { class: 'image' }); + DOM.insertAfter(figureElm, image); + figureElm.appendChild(image); + figureElm.appendChild(DOM.create('figcaption', { contentEditable: true }, 'Caption')); + figureElm.contentEditable = 'false'; + }; + var removeFigure = function (image) { + var figureElm = image.parentNode; + DOM.insertAfter(image, figureElm); + DOM.remove(figureElm); + }; + var toggleCaption = function (image) { + if (hasCaption(image)) { + removeFigure(image); + } else { + wrapInFigure(image); + } + }; + var normalizeStyle = function (image, normalizeCss) { + var attrValue = image.getAttribute('style'); + var value = normalizeCss(attrValue !== null ? attrValue : ''); + if (value.length > 0) { + image.setAttribute('style', value); + image.setAttribute('data-mce-style', value); + } else { + image.removeAttribute('style'); + } + }; + var setSize = function (name, normalizeCss) { + return function (image, name, value) { + if (image.style[name]) { + image.style[name] = $_7v7yldc7jfuw8p0q.addPixelSuffix(value); + normalizeStyle(image, normalizeCss); + } else { + setAttrib(image, name, value); } - return value; }; - - var mergeMargins = function (css) { - if (css.margin) { - - var splitMargin = css.margin.split(" "); - - switch (splitMargin.length) { - case 1: //margin: toprightbottomleft; - css['margin-top'] = css['margin-top'] || splitMargin[0]; - css['margin-right'] = css['margin-right'] || splitMargin[0]; - css['margin-bottom'] = css['margin-bottom'] || splitMargin[0]; - css['margin-left'] = css['margin-left'] || splitMargin[0]; - break; - case 2: //margin: topbottom rightleft; - css['margin-top'] = css['margin-top'] || splitMargin[0]; - css['margin-right'] = css['margin-right'] || splitMargin[1]; - css['margin-bottom'] = css['margin-bottom'] || splitMargin[0]; - css['margin-left'] = css['margin-left'] || splitMargin[1]; - break; - case 3: //margin: top rightleft bottom; - css['margin-top'] = css['margin-top'] || splitMargin[0]; - css['margin-right'] = css['margin-right'] || splitMargin[1]; - css['margin-bottom'] = css['margin-bottom'] || splitMargin[2]; - css['margin-left'] = css['margin-left'] || splitMargin[1]; - break; - case 4: //margin: top right bottom left; - css['margin-top'] = css['margin-top'] || splitMargin[0]; - css['margin-right'] = css['margin-right'] || splitMargin[1]; - css['margin-bottom'] = css['margin-bottom'] || splitMargin[2]; - css['margin-left'] = css['margin-left'] || splitMargin[3]; - } - delete css.margin; - } - return css; + }; + var getSize = function (image, name) { + if (image.style[name]) { + return $_7v7yldc7jfuw8p0q.removePixelSuffix(image.style[name]); + } else { + return getAttrib(image, name); + } + }; + var setHspace = function (image, value) { + var pxValue = $_7v7yldc7jfuw8p0q.addPixelSuffix(value); + image.style.marginLeft = pxValue; + image.style.marginRight = pxValue; + }; + var setVspace = function (image, value) { + var pxValue = $_7v7yldc7jfuw8p0q.addPixelSuffix(value); + image.style.marginTop = pxValue; + image.style.marginBottom = pxValue; + }; + var setBorder = function (image, value) { + var pxValue = $_7v7yldc7jfuw8p0q.addPixelSuffix(value); + image.style.borderWidth = pxValue; + }; + var setBorderStyle = function (image, value) { + image.style.borderStyle = value; + }; + var getBorderStyle = function (image) { + return getStyle(image, 'borderStyle'); + }; + var isFigure = function (elm) { + return elm.nodeName === 'FIGURE'; + }; + var defaultData = function () { + return { + src: '', + alt: '', + title: '', + width: '', + height: '', + class: '', + style: '', + caption: false, + hspace: '', + vspace: '', + border: '', + borderStyle: '' }; - + }; + var getStyleValue = function (normalizeCss, data) { + var image = document.createElement('img'); + setAttrib(image, 'style', data.style); + if (getHspace(image) || data.hspace !== '') { + setHspace(image, data.hspace); + } + if (getVspace(image) || data.vspace !== '') { + setVspace(image, data.vspace); + } + if (getBorder(image) || data.border !== '') { + setBorder(image, data.border); + } + if (getBorderStyle(image) || data.borderStyle !== '') { + setBorderStyle(image, data.borderStyle); + } + return normalizeCss(image.getAttribute('style')); + }; + var create = function (normalizeCss, data) { + var image = document.createElement('img'); + write(normalizeCss, $_ajpvnqcjjfuw8p25.merge(data, { caption: false }), image); + setAttrib(image, 'alt', data.alt); + if (data.caption) { + var figure = DOM.create('figure', { class: 'image' }); + figure.appendChild(image); + figure.appendChild(DOM.create('figcaption', { contentEditable: true }, 'Caption')); + figure.contentEditable = 'false'; + return figure; + } else { + return image; + } + }; + var read = function (normalizeCss, image) { return { - getImageSize: getImageSize, - buildListItems: buildListItems, - removePixelSuffix: removePixelSuffix, - addPixelSuffix: addPixelSuffix, - mergeMargins: mergeMargins + src: getAttrib(image, 'src'), + alt: getAttrib(image, 'alt'), + title: getAttrib(image, 'title'), + width: getSize(image, 'width'), + height: getSize(image, 'height'), + class: getAttrib(image, 'class'), + style: normalizeCss(getAttrib(image, 'style')), + caption: hasCaption(image), + hspace: getHspace(image), + vspace: getVspace(image), + border: getBorder(image), + borderStyle: getStyle(image, 'borderStyle') }; - } -); - -/** - * Dialog.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -/** - * @class tinymce.image.ui.Dialog - * @private - */ -define( - 'tinymce.plugins.image.ui.Dialog', - [ - 'global!document', - 'global!Math', - 'global!RegExp', - 'tinymce.core.Env', - 'tinymce.core.ui.Factory', - 'tinymce.core.util.JSON', - 'tinymce.core.util.Tools', - 'tinymce.core.util.XHR', - 'tinymce.plugins.image.core.Uploader', - 'tinymce.plugins.image.core.Utils' - ], - function (document, Math, RegExp, Env, Factory, JSON, Tools, XHR, Uploader, Utils) { - - return function (editor) { - function createImageList(callback) { - var imageList = editor.settings.image_list; + }; + var updateProp = function (image, oldData, newData, name, set) { + if (newData[name] !== oldData[name]) { + set(image, name, newData[name]); + } + }; + var normalized = function (set, normalizeCss) { + return function (image, name, value) { + set(image, value); + normalizeStyle(image, normalizeCss); + }; + }; + var write = function (normalizeCss, newData, image) { + var oldData = read(normalizeCss, image); + updateProp(image, oldData, newData, 'caption', function (image, _name, _value) { + return toggleCaption(image); + }); + updateProp(image, oldData, newData, 'src', setAttrib); + updateProp(image, oldData, newData, 'alt', setAttrib); + updateProp(image, oldData, newData, 'title', setAttrib); + updateProp(image, oldData, newData, 'width', setSize('width', normalizeCss)); + updateProp(image, oldData, newData, 'height', setSize('height', normalizeCss)); + updateProp(image, oldData, newData, 'class', setAttrib); + updateProp(image, oldData, newData, 'style', normalized(function (image, value) { + return setAttrib(image, 'style', value); + }, normalizeCss)); + updateProp(image, oldData, newData, 'hspace', normalized(setHspace, normalizeCss)); + updateProp(image, oldData, newData, 'vspace', normalized(setVspace, normalizeCss)); + updateProp(image, oldData, newData, 'border', normalized(setBorder, normalizeCss)); + updateProp(image, oldData, newData, 'borderStyle', normalized(setBorderStyle, normalizeCss)); + }; - if (typeof imageList == "string") { - XHR.send({ - url: imageList, - success: function (text) { - callback(JSON.parse(text)); - } - }); - } else if (typeof imageList == "function") { - imageList(callback); - } else { - callback(imageList); - } + var normalizeCss = function (editor, cssText) { + var css = editor.dom.styles.parse(cssText); + var mergedCss = $_7v7yldc7jfuw8p0q.mergeMargins(css); + var compressed = editor.dom.styles.parse(editor.dom.styles.serialize(mergedCss)); + return editor.dom.styles.serialize(compressed); + }; + var getSelectedImage = function (editor) { + var imgElm = editor.selection.getNode(); + var figureElm = editor.dom.getParent(imgElm, 'figure.image'); + if (figureElm) { + return editor.dom.select('img', figureElm)[0]; + } + if (imgElm && (imgElm.nodeName !== 'IMG' || imgElm.getAttribute('data-mce-object') || imgElm.getAttribute('data-mce-placeholder'))) { + return null; + } + return imgElm; + }; + var splitTextBlock = function (editor, figure) { + var dom = editor.dom; + var textBlock = dom.getParent(figure.parentNode, function (node) { + return editor.schema.getTextBlockElements()[node.nodeName]; + }); + if (textBlock) { + return dom.split(textBlock, figure); + } else { + return figure; + } + }; + var readImageDataFromSelection = function (editor) { + var image = getSelectedImage(editor); + return image ? read(function (css) { + return normalizeCss(editor, css); + }, image) : defaultData(); + }; + var insertImageAtCaret = function (editor, data) { + var elm = create(function (css) { + return normalizeCss(editor, css); + }, data); + editor.dom.setAttrib(elm, 'data-mce-id', '__mcenew'); + editor.focus(); + editor.selection.setContent(elm.outerHTML); + var insertedElm = editor.dom.select('*[data-mce-id="__mcenew"]')[0]; + editor.dom.setAttrib(insertedElm, 'data-mce-id', null); + if (isFigure(insertedElm)) { + var figure = splitTextBlock(editor, insertedElm); + editor.selection.select(figure); + } else { + editor.selection.select(insertedElm); + } + }; + var syncSrcAttr = function (editor, image) { + editor.dom.setAttrib(image, 'src', image.getAttribute('src')); + }; + var deleteImage = function (editor, image) { + if (image) { + var elm = editor.dom.is(image.parentNode, 'figure.image') ? image.parentNode : image; + editor.dom.remove(elm); + editor.focus(); + editor.nodeChanged(); + if (editor.dom.isEmpty(editor.getBody())) { + editor.setContent(''); + editor.selection.setCursorLocation(); } + } + }; + var writeImageDataToSelection = function (editor, data) { + var image = getSelectedImage(editor); + write(function (css) { + return normalizeCss(editor, css); + }, data, image); + syncSrcAttr(editor, image); + if (isFigure(image.parentNode)) { + var figure = image.parentNode; + splitTextBlock(editor, figure); + editor.selection.select(image.parentNode); + } else { + editor.selection.select(image); + $_7v7yldc7jfuw8p0q.waitLoadImage(editor, data, image); + } + }; + var insertOrUpdateImage = function (editor, data) { + var image = getSelectedImage(editor); + if (image) { + if (data.src) { + writeImageDataToSelection(editor, data); + } else { + deleteImage(editor, image); + } + } else if (data.src) { + insertImageAtCaret(editor, data); + } + }; - function showDialog(imageList) { - var win, data = {}, imgElm, figureElm, dom = editor.dom, settings = editor.settings; - var width, height, imageListCtrl, classListCtrl, imageDimensions = settings.image_dimensions !== false; - - - function onFileInput() { - var Throbber = Factory.get('Throbber'); - var throbber = new Throbber(win.getEl()); - var file = this.value(); - - var uploader = new Uploader({ - url: settings.images_upload_url, - basePath: settings.images_upload_base_path, - credentials: settings.images_upload_credentials, - handler: settings.images_upload_handler - }); - - // we do not need to add this to editors blobCache, so we fake bare minimum - var blobInfo = editor.editorUpload.blobCache.create({ - blob: file, - name: file.name ? file.name.replace(/\.[^\.]+$/, '') : null, // strip extension - base64: 'data:image/fake;base64,=' // without this create() will throw exception - }); - - var finalize = function () { - throbber.hide(); - URL.revokeObjectURL(blobInfo.blobUri()); // in theory we could fake blobUri too, but until it's legitimate, we have too revoke it manually - }; - - throbber.show(); - - return uploader.upload(blobInfo).then(function (url) { - var src = win.find('#src'); - src.value(url); - win.find('tabpanel')[0].activateTab(0); // switch to General tab - src.fire('change'); // this will invoke onSrcChange (and any other handlers, if any). - finalize(); - return url; - }, function (err) { - editor.windowManager.alert(err); - finalize(); - }); - } - - function isTextBlock(node) { - return editor.schema.getTextBlockElements()[node.nodeName]; - } - - function recalcSize() { - var widthCtrl, heightCtrl, newWidth, newHeight; - - widthCtrl = win.find('#width')[0]; - heightCtrl = win.find('#height')[0]; - - if (!widthCtrl || !heightCtrl) { - return; - } - - newWidth = widthCtrl.value(); - newHeight = heightCtrl.value(); - - if (win.find('#constrain')[0].checked() && width && height && newWidth && newHeight) { - if (width != newWidth) { - newHeight = Math.round((newWidth / width) * newHeight); - - if (!isNaN(newHeight)) { - heightCtrl.value(newHeight); - } - } else { - newWidth = Math.round((newHeight / height) * newWidth); - - if (!isNaN(newWidth)) { - widthCtrl.value(newWidth); - } - } - } - - width = newWidth; - height = newHeight; - } - - function updateStyle() { - if (!editor.settings.image_advtab) { - return; - } - - var data = win.toJSON(), - css = dom.parseStyle(data.style); - - css = Utils.mergeMargins(css); - - if (data.vspace) { - css['margin-top'] = css['margin-bottom'] = Utils.addPixelSuffix(data.vspace); - } - if (data.hspace) { - css['margin-left'] = css['margin-right'] = Utils.addPixelSuffix(data.hspace); - } - if (data.border) { - css['border-width'] = Utils.addPixelSuffix(data.border); - } - - win.find('#style').value(dom.serializeStyle(dom.parseStyle(dom.serializeStyle(css)))); - } - - function updateVSpaceHSpaceBorder() { - if (!editor.settings.image_advtab) { - return; - } - - var data = win.toJSON(), - css = dom.parseStyle(data.style); - - win.find('#vspace').value(""); - win.find('#hspace').value(""); - - css = Utils.mergeMargins(css); - - //Move opposite equal margins to vspace/hspace field - if ((css['margin-top'] && css['margin-bottom']) || (css['margin-right'] && css['margin-left'])) { - if (css['margin-top'] === css['margin-bottom']) { - win.find('#vspace').value(Utils.removePixelSuffix(css['margin-top'])); - } else { - win.find('#vspace').value(''); - } - if (css['margin-right'] === css['margin-left']) { - win.find('#hspace').value(Utils.removePixelSuffix(css['margin-right'])); - } else { - win.find('#hspace').value(''); - } - } - - //Move border-width - if (css['border-width']) { - win.find('#border').value(Utils.removePixelSuffix(css['border-width'])); - } - - win.find('#style').value(dom.serializeStyle(dom.parseStyle(dom.serializeStyle(css)))); + var updateVSpaceHSpaceBorder = function (editor) { + return function (evt) { + var dom = editor.dom; + var rootControl = evt.control.rootControl; + if (!$_9cq6y3c6jfuw8p0n.hasAdvTab(editor)) { + return; + } + var data = rootControl.toJSON(); + var css = dom.parseStyle(data.style); + rootControl.find('#vspace').value(''); + rootControl.find('#hspace').value(''); + css = $_7v7yldc7jfuw8p0q.mergeMargins(css); + if (css['margin-top'] && css['margin-bottom'] || css['margin-right'] && css['margin-left']) { + if (css['margin-top'] === css['margin-bottom']) { + rootControl.find('#vspace').value($_7v7yldc7jfuw8p0q.removePixelSuffix(css['margin-top'])); + } else { + rootControl.find('#vspace').value(''); } - - function waitLoad(imgElm) { - function selectImage() { - imgElm.onload = imgElm.onerror = null; - - if (editor.selection) { - editor.selection.select(imgElm); - editor.nodeChanged(); - } - } - - imgElm.onload = function () { - if (!data.width && !data.height && imageDimensions) { - dom.setAttribs(imgElm, { - width: imgElm.clientWidth, - height: imgElm.clientHeight - }); - } - - selectImage(); - }; - - imgElm.onerror = selectImage; + if (css['margin-right'] === css['margin-left']) { + rootControl.find('#hspace').value($_7v7yldc7jfuw8p0q.removePixelSuffix(css['margin-right'])); + } else { + rootControl.find('#hspace').value(''); } - - function onSubmitForm() { - var figureElm, oldImg; - - updateStyle(); - recalcSize(); - - data = Tools.extend(data, win.toJSON()); - - if (!data.alt) { - data.alt = ''; - } - - if (!data.title) { - data.title = ''; - } - - if (data.width === '') { - data.width = null; - } - - if (data.height === '') { - data.height = null; - } - - if (!data.style) { - data.style = null; - } - - // Setup new data excluding style properties - /*eslint dot-notation: 0*/ - data = { - src: data.src, - alt: data.alt, - title: data.title, - width: data.width, - height: data.height, - style: data.style, - caption: data.caption, - "class": data["class"] - }; - - editor.undoManager.transact(function () { - if (!data.src) { - if (imgElm) { - var elm = dom.is(imgElm.parentNode, 'figure.image') ? imgElm.parentNode : imgElm; - dom.remove(elm); - editor.focus(); - editor.nodeChanged(); - - if (dom.isEmpty(editor.getBody())) { - editor.setContent(''); - editor.selection.setCursorLocation(); - } - } - - return; - } - - if (data.title === "") { - data.title = null; - } - - if (!imgElm) { - data.id = '__mcenew'; - editor.focus(); - editor.selection.setContent(dom.createHTML('img', data)); - imgElm = dom.get('__mcenew'); - dom.setAttrib(imgElm, 'id', null); - } else { - dom.setAttribs(imgElm, data); - } - - editor.editorUpload.uploadImagesAuto(); - - if (data.caption === false) { - if (dom.is(imgElm.parentNode, 'figure.image')) { - figureElm = imgElm.parentNode; - dom.setAttrib(imgElm, 'contenteditable', null); - dom.insertAfter(imgElm, figureElm); - dom.remove(figureElm); - editor.selection.select(imgElm); - editor.nodeChanged(); - } + } + if (css['border-width']) { + rootControl.find('#border').value($_7v7yldc7jfuw8p0q.removePixelSuffix(css['border-width'])); + } else { + rootControl.find('#border').value(''); + } + if (css['border-style']) { + rootControl.find('#borderStyle').value(css['border-style']); + } else { + rootControl.find('#borderStyle').value(''); + } + rootControl.find('#style').value(dom.serializeStyle(dom.parseStyle(dom.serializeStyle(css)))); + }; + }; + var updateStyle = function (editor, win) { + win.find('#style').each(function (ctrl) { + var value = getStyleValue(function (css) { + return normalizeCss(editor, css); + }, $_ajpvnqcjjfuw8p25.merge(defaultData(), win.toJSON())); + ctrl.value(value); + }); + }; + var makeTab = function (editor) { + return { + title: 'Advanced', + type: 'form', + pack: 'start', + items: [ + { + label: 'Style', + name: 'style', + type: 'textbox', + onchange: updateVSpaceHSpaceBorder(editor) + }, + { + type: 'form', + layout: 'grid', + packV: 'start', + columns: 2, + padding: 0, + defaults: { + type: 'textbox', + maxWidth: 50, + onchange: function (evt) { + updateStyle(editor, evt.control.rootControl); } - - if (data.caption === true) { - if (!dom.is(imgElm.parentNode, 'figure.image')) { - oldImg = imgElm; - imgElm = imgElm.cloneNode(true); - imgElm.contentEditable = true; - figureElm = dom.create('figure', { 'class': 'image' }); - figureElm.appendChild(imgElm); - figureElm.appendChild(dom.create('figcaption', { contentEditable: true }, 'Caption')); - figureElm.contentEditable = false; - - var textBlock = dom.getParent(oldImg, isTextBlock); - if (textBlock) { - dom.split(textBlock, oldImg, figureElm); - } else { - dom.replace(figureElm, oldImg); + }, + items: [ + { + label: 'Vertical space', + name: 'vspace' + }, + { + label: 'Border width', + name: 'border' + }, + { + label: 'Horizontal space', + name: 'hspace' + }, + { + label: 'Border style', + type: 'listbox', + name: 'borderStyle', + width: 90, + maxWidth: 90, + onselect: function (evt) { + updateStyle(editor, evt.control.rootControl); + }, + values: [ + { + text: 'Select...', + value: '' + }, + { + text: 'Solid', + value: 'solid' + }, + { + text: 'Dotted', + value: 'dotted' + }, + { + text: 'Dashed', + value: 'dashed' + }, + { + text: 'Double', + value: 'double' + }, + { + text: 'Groove', + value: 'groove' + }, + { + text: 'Ridge', + value: 'ridge' + }, + { + text: 'Inset', + value: 'inset' + }, + { + text: 'Outset', + value: 'outset' + }, + { + text: 'None', + value: 'none' + }, + { + text: 'Hidden', + value: 'hidden' } - - editor.selection.select(figureElm); - } - - return; - } - - waitLoad(imgElm); - }); - } - - function onSrcChange(e) { - var srcURL, prependURL, absoluteURLPattern, meta = e.meta || {}; - - if (imageListCtrl) { - imageListCtrl.value(editor.convertURL(this.value(), 'src')); - } - - Tools.each(meta, function (value, key) { - win.find('#' + key).value(value); - }); - - if (!meta.width && !meta.height) { - srcURL = editor.convertURL(this.value(), 'src'); - - // Pattern test the src url and make sure we haven't already prepended the url - prependURL = editor.settings.image_prepend_url; - absoluteURLPattern = new RegExp('^(?:[a-z]+:)?//', 'i'); - if (prependURL && !absoluteURLPattern.test(srcURL) && srcURL.substring(0, prependURL.length) !== prependURL) { - srcURL = prependURL + srcURL; + ] } - - this.value(srcURL); - - Utils.getImageSize(editor.documentBaseURI.toAbsolute(this.value()), function (data) { - if (data.width && data.height && imageDimensions) { - width = data.width; - height = data.height; - - win.find('#width').value(width); - win.find('#height').value(height); - } - }); - } - } - - function onBeforeCall(e) { - e.meta = win.toJSON(); + ] } + ] + }; + }; + var $_dlliegcfjfuw8p1m = { makeTab: makeTab }; - imgElm = editor.selection.getNode(); - figureElm = dom.getParent(imgElm, 'figure.image'); - if (figureElm) { - imgElm = dom.select('img', figureElm)[0]; + var doSyncSize = function (widthCtrl, heightCtrl) { + widthCtrl.state.set('oldVal', widthCtrl.value()); + heightCtrl.state.set('oldVal', heightCtrl.value()); + }; + var doSizeControls = function (win, f) { + var widthCtrl = win.find('#width')[0]; + var heightCtrl = win.find('#height')[0]; + var constrained = win.find('#constrain')[0]; + if (widthCtrl && heightCtrl && constrained) { + f(widthCtrl, heightCtrl, constrained.checked()); + } + }; + var doUpdateSize = function (widthCtrl, heightCtrl, isContrained) { + var oldWidth = widthCtrl.state.get('oldVal'); + var oldHeight = heightCtrl.state.get('oldVal'); + var newWidth = widthCtrl.value(); + var newHeight = heightCtrl.value(); + if (isContrained && oldWidth && oldHeight && newWidth && newHeight) { + if (newWidth !== oldWidth) { + newHeight = Math.round(newWidth / oldWidth * newHeight); + if (!isNaN(newHeight)) { + heightCtrl.value(newHeight); } - - if (imgElm && - (imgElm.nodeName != 'IMG' || - imgElm.getAttribute('data-mce-object') || - imgElm.getAttribute('data-mce-placeholder'))) { - imgElm = null; + } else { + newWidth = Math.round(newHeight / oldHeight * newWidth); + if (!isNaN(newWidth)) { + widthCtrl.value(newWidth); } - - if (imgElm) { - width = dom.getAttrib(imgElm, 'width'); - height = dom.getAttrib(imgElm, 'height'); - - data = { - src: dom.getAttrib(imgElm, 'src'), - alt: dom.getAttrib(imgElm, 'alt'), - title: dom.getAttrib(imgElm, 'title'), - "class": dom.getAttrib(imgElm, 'class'), - width: width, - height: height, - caption: !!figureElm - }; + } + } + doSyncSize(widthCtrl, heightCtrl); + }; + var syncSize = function (win) { + doSizeControls(win, doSyncSize); + }; + var updateSize = function (win) { + doSizeControls(win, doUpdateSize); + }; + var createUi = function () { + var recalcSize = function (evt) { + updateSize(evt.control.rootControl); + }; + return { + type: 'container', + label: 'Dimensions', + layout: 'flex', + align: 'center', + spacing: 5, + items: [ + { + name: 'width', + type: 'textbox', + maxLength: 5, + size: 5, + onchange: recalcSize, + ariaLabel: 'Width' + }, + { + type: 'label', + text: 'x' + }, + { + name: 'height', + type: 'textbox', + maxLength: 5, + size: 5, + onchange: recalcSize, + ariaLabel: 'Height' + }, + { + name: 'constrain', + type: 'checkbox', + checked: true, + text: 'Constrain proportions' } + ] + }; + }; + var $_1ahiincmjfuw8p2c = { + createUi: createUi, + syncSize: syncSize, + updateSize: updateSize + }; - if (imageList) { - imageListCtrl = { - type: 'listbox', - label: 'Image list', - values: Utils.buildListItems( - imageList, - function (item) { - item.value = editor.convertURL(item.value || item.url, 'src'); - }, - [{ text: 'None', value: '' }] - ), - value: data.src && editor.convertURL(data.src, 'src'), - onselect: function (e) { - var altCtrl = win.find('#alt'); - - if (!altCtrl.value() || (e.lastControl && altCtrl.value() == e.lastControl.text())) { - altCtrl.value(e.control.text()); - } - - win.find('#src').value(e.control.value()).fire('change'); - }, - onPostRender: function () { - /*eslint consistent-this: 0*/ - imageListCtrl = this; - } - }; + var onSrcChange = function (evt, editor) { + var srcURL, prependURL, absoluteURLPattern; + var meta = evt.meta || {}; + var control = evt.control; + var rootControl = control.rootControl; + var imageListCtrl = rootControl.find('#image-list')[0]; + if (imageListCtrl) { + imageListCtrl.value(editor.convertURL(control.value(), 'src')); + } + global$3.each(meta, function (value, key) { + rootControl.find('#' + key).value(value); + }); + if (!meta.width && !meta.height) { + srcURL = editor.convertURL(control.value(), 'src'); + prependURL = $_9cq6y3c6jfuw8p0n.getPrependUrl(editor); + absoluteURLPattern = new RegExp('^(?:[a-z]+:)?//', 'i'); + if (prependURL && !absoluteURLPattern.test(srcURL) && srcURL.substring(0, prependURL.length) !== prependURL) { + srcURL = prependURL + srcURL; + } + control.value(srcURL); + $_7v7yldc7jfuw8p0q.getImageSize(editor.documentBaseURI.toAbsolute(control.value()), function (data) { + if (data.width && data.height && $_9cq6y3c6jfuw8p0n.hasDimensions(editor)) { + rootControl.find('#width').value(data.width); + rootControl.find('#height').value(data.height); + $_1ahiincmjfuw8p2c.syncSize(rootControl); } + }); + } + }; + var onBeforeCall = function (evt) { + evt.meta = evt.control.rootControl.toJSON(); + }; + var getGeneralItems = function (editor, imageListCtrl) { + var generalFormItems = [ + { + name: 'src', + type: 'filepicker', + filetype: 'image', + label: 'Source', + autofocus: true, + onchange: function (evt) { + onSrcChange(evt, editor); + }, + onbeforecall: onBeforeCall + }, + imageListCtrl + ]; + if ($_9cq6y3c6jfuw8p0n.hasDescription(editor)) { + generalFormItems.push({ + name: 'alt', + type: 'textbox', + label: 'Image description' + }); + } + if ($_9cq6y3c6jfuw8p0n.hasImageTitle(editor)) { + generalFormItems.push({ + name: 'title', + type: 'textbox', + label: 'Image Title' + }); + } + if ($_9cq6y3c6jfuw8p0n.hasDimensions(editor)) { + generalFormItems.push($_1ahiincmjfuw8p2c.createUi()); + } + if ($_9cq6y3c6jfuw8p0n.getClassList(editor)) { + generalFormItems.push({ + name: 'class', + type: 'listbox', + label: 'Class', + values: $_7v7yldc7jfuw8p0q.buildListItems($_9cq6y3c6jfuw8p0n.getClassList(editor), function (item) { + if (item.value) { + item.textStyle = function () { + return editor.formatter.getCssText({ + inline: 'img', + classes: [item.value] + }); + }; + } + }) + }); + } + if ($_9cq6y3c6jfuw8p0n.hasImageCaption(editor)) { + generalFormItems.push({ + name: 'caption', + type: 'checkbox', + label: 'Caption' + }); + } + return generalFormItems; + }; + var makeTab$1 = function (editor, imageListCtrl) { + return { + title: 'General', + type: 'form', + items: getGeneralItems(editor, imageListCtrl) + }; + }; + var $_e4gxykcljfuw8p29 = { + makeTab: makeTab$1, + getGeneralItems: getGeneralItems + }; - if (editor.settings.image_class_list) { - classListCtrl = { - name: 'class', - type: 'listbox', - label: 'Class', - values: Utils.buildListItems( - editor.settings.image_class_list, - function (item) { - if (item.value) { - item.textStyle = function () { - return editor.formatter.getCssText({ inline: 'img', classes: [item.value] }); - }; - } - } - ) - }; - } + var url = function () { + return $_ba69mec9jfuw8p15.getOrDie('URL'); + }; + var createObjectURL = function (blob) { + return url().createObjectURL(blob); + }; + var revokeObjectURL = function (u) { + url().revokeObjectURL(u); + }; + var $_52xhfhcojfuw8p2i = { + createObjectURL: createObjectURL, + revokeObjectURL: revokeObjectURL + }; - // General settings shared between simple and advanced dialogs - var generalFormItems = [ - { - name: 'src', - type: 'filepicker', - filetype: 'image', - label: 'Source', - autofocus: true, - onchange: onSrcChange, - onbeforecall: onBeforeCall - }, - imageListCtrl - ]; + var global$6 = tinymce.util.Tools.resolve('tinymce.ui.Factory'); - if (editor.settings.image_description !== false) { - generalFormItems.push({ name: 'alt', type: 'textbox', label: 'Image description' }); - } + function XMLHttpRequest () { + var f = $_ba69mec9jfuw8p15.getOrDie('XMLHttpRequest'); + return new f(); + } - if (editor.settings.image_title) { - generalFormItems.push({ name: 'title', type: 'textbox', label: 'Image Title' }); + var noop = function () { + }; + var pathJoin = function (path1, path2) { + if (path1) { + return path1.replace(/\/$/, '') + '/' + path2.replace(/^\//, ''); + } + return path2; + }; + function Uploader (settings) { + var defaultHandler = function (blobInfo, success, failure, progress) { + var xhr, formData; + xhr = new XMLHttpRequest(); + xhr.open('POST', settings.url); + xhr.withCredentials = settings.credentials; + xhr.upload.onprogress = function (e) { + progress(e.loaded / e.total * 100); + }; + xhr.onerror = function () { + failure('Image upload failed due to a XHR Transport error. Code: ' + xhr.status); + }; + xhr.onload = function () { + var json; + if (xhr.status < 200 || xhr.status >= 300) { + failure('HTTP Error: ' + xhr.status); + return; } - - if (imageDimensions) { - generalFormItems.push({ - type: 'container', - label: 'Dimensions', - layout: 'flex', - direction: 'row', - align: 'center', - spacing: 5, - items: [ - { name: 'width', type: 'textbox', maxLength: 5, size: 3, onchange: recalcSize, ariaLabel: 'Width' }, - { type: 'label', text: 'x' }, - { name: 'height', type: 'textbox', maxLength: 5, size: 3, onchange: recalcSize, ariaLabel: 'Height' }, - { name: 'constrain', type: 'checkbox', checked: true, text: 'Constrain proportions' } - ] - }); + json = JSON.parse(xhr.responseText); + if (!json || typeof json.location !== 'string') { + failure('Invalid JSON: ' + xhr.responseText); + return; } - - generalFormItems.push(classListCtrl); - - if (editor.settings.image_caption && Env.ceFalse) { - generalFormItems.push({ name: 'caption', type: 'checkbox', label: 'Caption' }); + success(pathJoin(settings.basePath, json.location)); + }; + formData = new FormData(); + formData.append('file', blobInfo.blob(), blobInfo.filename()); + xhr.send(formData); + }; + var uploadBlob = function (blobInfo, handler) { + return new global$2(function (resolve, reject) { + try { + handler(blobInfo, resolve, reject, noop); + } catch (ex) { + reject(ex.message); } + }); + }; + var isDefaultHandler = function (handler) { + return handler === defaultHandler; + }; + var upload = function (blobInfo) { + return !settings.url && isDefaultHandler(settings.handler) ? global$2.reject('Upload url missing from the settings.') : uploadBlob(blobInfo, settings.handler); + }; + settings = global$3.extend({ + credentials: false, + handler: defaultHandler + }, settings); + return { upload: upload }; + } - if (editor.settings.image_advtab || editor.settings.images_upload_url) { - var body = [ + var onFileInput = function (editor) { + return function (evt) { + var Throbber = global$6.get('Throbber'); + var rootControl = evt.control.rootControl; + var throbber = new Throbber(rootControl.getEl()); + var file = evt.control.value(); + var blobUri = $_52xhfhcojfuw8p2i.createObjectURL(file); + var uploader = Uploader({ + url: $_9cq6y3c6jfuw8p0n.getUploadUrl(editor), + basePath: $_9cq6y3c6jfuw8p0n.getUploadBasePath(editor), + credentials: $_9cq6y3c6jfuw8p0n.getUploadCredentials(editor), + handler: $_9cq6y3c6jfuw8p0n.getUploadHandler(editor) + }); + var finalize = function () { + throbber.hide(); + $_52xhfhcojfuw8p2i.revokeObjectURL(blobUri); + }; + throbber.show(); + return $_7v7yldc7jfuw8p0q.blobToDataUri(file).then(function (dataUrl) { + var blobInfo = editor.editorUpload.blobCache.create({ + blob: file, + blobUri: blobUri, + name: file.name ? file.name.replace(/\.[^\.]+$/, '') : null, + base64: dataUrl.split(',')[1] + }); + return uploader.upload(blobInfo).then(function (url) { + var src = rootControl.find('#src'); + src.value(url); + rootControl.find('tabpanel')[0].activateTab(0); + src.fire('change'); + finalize(); + return url; + }); + }).catch(function (err) { + editor.windowManager.alert(err); + finalize(); + }); + }; + }; + var acceptExts = '.jpg,.jpeg,.png,.gif'; + var makeTab$2 = function (editor) { + return { + title: 'Upload', + type: 'form', + layout: 'flex', + direction: 'column', + align: 'stretch', + padding: '20 20 20 20', + items: [ + { + type: 'container', + layout: 'flex', + direction: 'column', + align: 'center', + spacing: 10, + items: [ + { + text: 'Browse for an image', + type: 'browsebutton', + accept: acceptExts, + onchange: onFileInput(editor) + }, { - title: 'General', - type: 'form', - items: generalFormItems + text: 'OR', + type: 'label' } - ]; + ] + }, + { + text: 'Drop an image here', + type: 'dropzone', + accept: acceptExts, + height: 100, + onchange: onFileInput(editor) + } + ] + }; + }; + var $_9k5u99cnjfuw8p2f = { makeTab: makeTab$2 }; - if (editor.settings.image_advtab) { - // Parse styles from img - if (imgElm) { - if (imgElm.style.marginLeft && imgElm.style.marginRight && imgElm.style.marginLeft === imgElm.style.marginRight) { - data.hspace = Utils.removePixelSuffix(imgElm.style.marginLeft); - } - if (imgElm.style.marginTop && imgElm.style.marginBottom && imgElm.style.marginTop === imgElm.style.marginBottom) { - data.vspace = Utils.removePixelSuffix(imgElm.style.marginTop); - } - if (imgElm.style.borderWidth) { - data.border = Utils.removePixelSuffix(imgElm.style.borderWidth); - } + var noop$1 = function () { + var x = []; + for (var _i = 0; _i < arguments.length; _i++) { + x[_i] = arguments[_i]; + } + }; + var noarg = function (f) { + return function () { + var x = []; + for (var _i = 0; _i < arguments.length; _i++) { + x[_i] = arguments[_i]; + } + return f(); + }; + }; + var compose = function (fa, fb) { + return function () { + var x = []; + for (var _i = 0; _i < arguments.length; _i++) { + x[_i] = arguments[_i]; + } + return fa(fb.apply(null, arguments)); + }; + }; + var constant = function (value) { + return function () { + return value; + }; + }; + var identity = function (x) { + return x; + }; + var tripleEquals = function (a, b) { + return a === b; + }; + var curry = function (f) { + var x = []; + for (var _i = 1; _i < arguments.length; _i++) { + x[_i - 1] = arguments[_i]; + } + var args = new Array(arguments.length - 1); + for (var i = 1; i < arguments.length; i++) + args[i - 1] = arguments[i]; + return function () { + var x = []; + for (var _i = 0; _i < arguments.length; _i++) { + x[_i] = arguments[_i]; + } + var newArgs = new Array(arguments.length); + for (var j = 0; j < newArgs.length; j++) + newArgs[j] = arguments[j]; + var all = args.concat(newArgs); + return f.apply(null, all); + }; + }; + var not = function (f) { + return function () { + var x = []; + for (var _i = 0; _i < arguments.length; _i++) { + x[_i] = arguments[_i]; + } + return !f.apply(null, arguments); + }; + }; + var die = function (msg) { + return function () { + throw new Error(msg); + }; + }; + var apply = function (f) { + return f(); + }; + var call = function (f) { + f(); + }; + var never = constant(false); + var always = constant(true); + var $_ajqvh7csjfuw8p2q = { + noop: noop$1, + noarg: noarg, + compose: compose, + constant: constant, + identity: identity, + tripleEquals: tripleEquals, + curry: curry, + not: not, + die: die, + apply: apply, + call: call, + never: never, + always: always + }; - data.style = editor.dom.serializeStyle(editor.dom.parseStyle(editor.dom.getAttrib(imgElm, 'style'))); + var submitForm = function (editor, evt) { + var win = evt.control.getRoot(); + $_1ahiincmjfuw8p2c.updateSize(win); + editor.undoManager.transact(function () { + var data = $_ajpvnqcjjfuw8p25.merge(readImageDataFromSelection(editor), win.toJSON()); + insertOrUpdateImage(editor, data); + }); + editor.editorUpload.uploadImagesAuto(); + }; + function Dialog (editor) { + function showDialog(imageList) { + var data = readImageDataFromSelection(editor); + var win, imageListCtrl; + if (imageList) { + imageListCtrl = { + type: 'listbox', + label: 'Image list', + name: 'image-list', + values: $_7v7yldc7jfuw8p0q.buildListItems(imageList, function (item) { + item.value = editor.convertURL(item.value || item.url, 'src'); + }, [{ + text: 'None', + value: '' + }]), + value: data.src && editor.convertURL(data.src, 'src'), + onselect: function (e) { + var altCtrl = win.find('#alt'); + if (!altCtrl.value() || e.lastControl && altCtrl.value() === e.lastControl.text()) { + altCtrl.value(e.control.text()); } - - body.push({ - title: 'Advanced', - type: 'form', - pack: 'start', - items: [ - { - label: 'Style', - name: 'style', - type: 'textbox', - onchange: updateVSpaceHSpaceBorder - }, - { - type: 'form', - layout: 'grid', - packV: 'start', - columns: 2, - padding: 0, - alignH: ['left', 'right'], - defaults: { - type: 'textbox', - maxWidth: 50, - onchange: updateStyle - }, - items: [ - { label: 'Vertical space', name: 'vspace' }, - { label: 'Horizontal space', name: 'hspace' }, - { label: 'Border', name: 'border' } - ] - } - ] - }); - } - - if (editor.settings.images_upload_url) { - var acceptExts = '.jpg,.jpeg,.png,.gif'; - - var uploadTab = { - title: 'Upload', - type: 'form', - layout: 'flex', - direction: 'column', - align: 'stretch', - padding: '20 20 20 20', - items: [ - { - type: 'container', - layout: 'flex', - direction: 'column', - align: 'center', - spacing: 10, - items: [ - { - text: "Browse for an image", - type: 'browsebutton', - accept: acceptExts, - onchange: onFileInput - }, - { - text: 'OR', - type: 'label' - } - ] - }, - { - text: "Drop an image here", - type: 'dropzone', - accept: acceptExts, - height: 100, - onchange: onFileInput - } - ] - }; - - body.push(uploadTab); + win.find('#src').value(e.control.value()).fire('change'); + }, + onPostRender: function () { + imageListCtrl = this; } - - // Advanced dialog shows general+advanced tabs - win = editor.windowManager.open({ - title: 'Insert/edit image', - data: data, - bodyType: 'tabpanel', - body: body, - onSubmit: onSubmitForm - }); - } else { - // Simple default dialog - win = editor.windowManager.open({ - title: 'Insert/edit image', - data: data, - body: generalFormItems, - onSubmit: onSubmitForm - }); + }; + } + if ($_9cq6y3c6jfuw8p0n.hasAdvTab(editor) || $_9cq6y3c6jfuw8p0n.hasUploadUrl(editor) || $_9cq6y3c6jfuw8p0n.hasUploadHandler(editor)) { + var body = [$_e4gxykcljfuw8p29.makeTab(editor, imageListCtrl)]; + if ($_9cq6y3c6jfuw8p0n.hasAdvTab(editor)) { + body.push($_dlliegcfjfuw8p1m.makeTab(editor)); + } + if ($_9cq6y3c6jfuw8p0n.hasUploadUrl(editor) || $_9cq6y3c6jfuw8p0n.hasUploadHandler(editor)) { + body.push($_9k5u99cnjfuw8p2f.makeTab(editor)); } + win = editor.windowManager.open({ + title: 'Insert/edit image', + data: data, + bodyType: 'tabpanel', + body: body, + onSubmit: $_ajqvh7csjfuw8p2q.curry(submitForm, editor) + }); + } else { + win = editor.windowManager.open({ + title: 'Insert/edit image', + data: data, + body: $_e4gxykcljfuw8p29.getGeneralItems(editor, imageListCtrl), + onSubmit: $_ajqvh7csjfuw8p2q.curry(submitForm, editor) + }); } + $_1ahiincmjfuw8p2c.syncSize(win); + } + function open() { + $_7v7yldc7jfuw8p0q.createImageList(editor, showDialog); + } + return { open: open }; + } - function open() { - createImageList(showDialog); - } + var register = function (editor) { + editor.addCommand('mceImage', Dialog(editor).open); + }; + var $_cbuvmdc4jfuw8p0d = { register: register }; - return { - open: open + var hasImageClass = function (node) { + var className = node.attr('class'); + return className && /\bimage\b/.test(className); + }; + var toggleContentEditableState = function (state) { + return function (nodes) { + var i = nodes.length, node; + var toggleContentEditable = function (node) { + node.attr('contenteditable', state ? 'true' : null); }; + while (i--) { + node = nodes[i]; + if (hasImageClass(node)) { + node.attr('contenteditable', state ? 'false' : null); + global$3.each(node.getAll('figcaption'), toggleContentEditable); + } + } }; + }; + var setup = function (editor) { + editor.on('preInit', function () { + editor.parser.addNodeFilter('figure', toggleContentEditableState(true)); + editor.serializer.addNodeFilter('figure', toggleContentEditableState(false)); + }); + }; + var $_191db6ctjfuw8p2t = { setup: setup }; + + var register$1 = function (editor) { + editor.addButton('image', { + icon: 'image', + tooltip: 'Insert/edit image', + onclick: Dialog(editor).open, + stateSelector: 'img:not([data-mce-object],[data-mce-placeholder]),figure.image' + }); + editor.addMenuItem('image', { + icon: 'image', + text: 'Image', + onclick: Dialog(editor).open, + context: 'insert', + prependToContext: true + }); + }; + var $_9nl4e0cujfuw8p2v = { register: register$1 }; + + global.add('image', function (editor) { + $_191db6ctjfuw8p2t.setup(editor); + $_9nl4e0cujfuw8p2v.register(editor); + $_cbuvmdc4jfuw8p0d.register(editor); + }); + function Plugin () { } -); - -/** - * Plugin.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -/** - * This class contains all core logic for the image plugin. - * - * @class tinymce.image.Plugin - * @private - */ -define( - 'tinymce.plugins.image.Plugin', - [ - 'tinymce.core.PluginManager', - 'tinymce.core.util.Tools', - 'tinymce.plugins.image.ui.Dialog' - ], - function (PluginManager, Tools, Dialog) { - PluginManager.add('image', function (editor) { - - editor.on('preInit', function () { - function hasImageClass(node) { - var className = node.attr('class'); - return className && /\bimage\b/.test(className); - } - function toggleContentEditableState(state) { - return function (nodes) { - var i = nodes.length, node; + return Plugin; - function toggleContentEditable(node) { - node.attr('contenteditable', state ? 'true' : null); - } - - while (i--) { - node = nodes[i]; - - if (hasImageClass(node)) { - node.attr('contenteditable', state ? 'false' : null); - Tools.each(node.getAll('figcaption'), toggleContentEditable); - Tools.each(node.getAll('img'), toggleContentEditable); - } - } - }; - } - - editor.parser.addNodeFilter('figure', toggleContentEditableState(true)); - editor.serializer.addNodeFilter('figure', toggleContentEditableState(false)); - }); - - editor.addButton('image', { - icon: 'image', - tooltip: 'Insert/edit image', - onclick: Dialog(editor).open, - stateSelector: 'img:not([data-mce-object],[data-mce-placeholder]),figure.image' - }); - - editor.addMenuItem('image', { - icon: 'image', - text: 'Image', - onclick: Dialog(editor).open, - context: 'insert', - prependToContext: true - }); - - editor.addCommand('mceImage', Dialog(editor).open); - }); - - return function () { }; - } -); -dem('tinymce.plugins.image.Plugin')(); +}()); })(); diff --git a/src/wp-includes/js/tinymce/plugins/image/plugin.min.js b/src/wp-includes/js/tinymce/plugins/image/plugin.min.js index dc5369e5e4bca..40b2929557ea5 100644 --- a/src/wp-includes/js/tinymce/plugins/image/plugin.min.js +++ b/src/wp-includes/js/tinymce/plugins/image/plugin.min.js @@ -1 +1 @@ -!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i=300?void e("HTTP Error: "+g.status):(a=JSON.parse(g.responseText),a&&"string"==typeof a.location?void b(d(c.basePath,a.location)):void e("Invalid JSON: "+g.responseText))},h=new FormData,h.append("file",a.blob(),a.filename()),g.send(h)}function f(b,c){return new a(function(a,d){try{c(b,a,d,i)}catch(a){d(a.message)}})}function g(a){return a===e}function h(b){return!c.url&&g(c.handler)?a.reject("Upload url missng from the settings."):f(b,c.handler)}var i=function(){};return c=b.extend({credentials:!1,handler:e},c),{upload:h}}}),g("d",["2","6","5"],function(a,b,c){var d=function(a,d){function e(a,b){f.parentNode&&f.parentNode.removeChild(f),d({width:a,height:b})}var f=c.createElement("img");f.onload=function(){e(b.max(f.width,f.clientWidth),b.max(f.height,f.clientHeight))},f.onerror=function(){e()};var g=f.style;g.visibility="hidden",g.position="fixed",g.bottom=g.left=0,g.width=g.height="auto",c.body.appendChild(f),f.src=a},e=function(b,c,d){function e(b,d){return d=d||[],a.each(b,function(a){var b={text:a.text||a.title};a.menu?b.menu=e(a.menu):(b.value=a.value,c(b)),d.push(b)}),d}return e(b,d||[])},f=function(a){return a&&(a=a.replace(/px$/,"")),a},g=function(a){return a.length>0&&/^[0-9]+$/.test(a)&&(a+="px"),a},h=function(a){if(a.margin){var b=a.margin.split(" ");switch(b.length){case 1:a["margin-top"]=a["margin-top"]||b[0],a["margin-right"]=a["margin-right"]||b[0],a["margin-bottom"]=a["margin-bottom"]||b[0],a["margin-left"]=a["margin-left"]||b[0];break;case 2:a["margin-top"]=a["margin-top"]||b[0],a["margin-right"]=a["margin-right"]||b[1],a["margin-bottom"]=a["margin-bottom"]||b[0],a["margin-left"]=a["margin-left"]||b[1];break;case 3:a["margin-top"]=a["margin-top"]||b[0],a["margin-right"]=a["margin-right"]||b[1],a["margin-bottom"]=a["margin-bottom"]||b[2],a["margin-left"]=a["margin-left"]||b[1];break;case 4:a["margin-top"]=a["margin-top"]||b[0],a["margin-right"]=a["margin-right"]||b[1],a["margin-bottom"]=a["margin-bottom"]||b[2],a["margin-left"]=a["margin-left"]||b[3]}delete a.margin}return a};return{getImageSize:d,buildListItems:e,removePixelSuffix:f,addPixelSuffix:g,mergeMargins:h}}),g("3",["5","6","7","8","9","a","2","b","c","d"],function(a,b,c,d,e,f,g,h,i,j){return function(a){function k(b){var c=a.settings.image_list;"string"==typeof c?h.send({url:c,success:function(a){b(f.parse(a))}}):"function"==typeof c?c(b):b(c)}function l(f){function h(){var b=e.get("Throbber"),c=new b(s.getEl()),d=this.value(),f=new i({url:B.images_upload_url,basePath:B.images_upload_base_path,credentials:B.images_upload_credentials,handler:B.images_upload_handler}),g=a.editorUpload.blobCache.create({blob:d,name:d.name?d.name.replace(/\.[^\.]+$/,""):null,base64:"data:image/fake;base64,="}),h=function(){c.hide(),URL.revokeObjectURL(g.blobUri())};return c.show(),f.upload(g).then(function(a){var b=s.find("#src");return b.value(a),s.find("tabpanel")[0].activateTab(0),b.fire("change"),h(),a},function(b){a.windowManager.alert(b),h()})}function k(b){return a.schema.getTextBlockElements()[b.nodeName]}function l(){var a,c,d,e;a=s.find("#width")[0],c=s.find("#height")[0],a&&c&&(d=a.value(),e=c.value(),s.find("#constrain")[0].checked()&&v&&w&&d&&e&&(v!=d?(e=b.round(d/v*e),isNaN(e)||c.value(e)):(d=b.round(e/w*d),isNaN(d)||a.value(d))),v=d,w=e)}function m(){if(a.settings.image_advtab){var b=s.toJSON(),c=A.parseStyle(b.style);c=j.mergeMargins(c),b.vspace&&(c["margin-top"]=c["margin-bottom"]=j.addPixelSuffix(b.vspace)),b.hspace&&(c["margin-left"]=c["margin-right"]=j.addPixelSuffix(b.hspace)),b.border&&(c["border-width"]=j.addPixelSuffix(b.border)),s.find("#style").value(A.serializeStyle(A.parseStyle(A.serializeStyle(c))))}}function n(){if(a.settings.image_advtab){var b=s.toJSON(),c=A.parseStyle(b.style);s.find("#vspace").value(""),s.find("#hspace").value(""),c=j.mergeMargins(c),(c["margin-top"]&&c["margin-bottom"]||c["margin-right"]&&c["margin-left"])&&(c["margin-top"]===c["margin-bottom"]?s.find("#vspace").value(j.removePixelSuffix(c["margin-top"])):s.find("#vspace").value(""),c["margin-right"]===c["margin-left"]?s.find("#hspace").value(j.removePixelSuffix(c["margin-right"])):s.find("#hspace").value("")),c["border-width"]&&s.find("#border").value(j.removePixelSuffix(c["border-width"])),s.find("#style").value(A.serializeStyle(A.parseStyle(A.serializeStyle(c))))}}function o(b){function c(){b.onload=b.onerror=null,a.selection&&(a.selection.select(b),a.nodeChanged())}b.onload=function(){z.width||z.height||!C||A.setAttribs(b,{width:b.clientWidth,height:b.clientHeight}),c()},b.onerror=c}function p(){var b,c;m(),l(),z=g.extend(z,s.toJSON()),z.alt||(z.alt=""),z.title||(z.title=""),""===z.width&&(z.width=null),""===z.height&&(z.height=null),z.style||(z.style=null),z={src:z.src,alt:z.alt,title:z.title,width:z.width,height:z.height,style:z.style,caption:z.caption,"class":z["class"]},a.undoManager.transact(function(){if(z.src){if(""===z.title&&(z.title=null),t?A.setAttribs(t,z):(z.id="__mcenew",a.focus(),a.selection.setContent(A.createHTML("img",z)),t=A.get("__mcenew"),A.setAttrib(t,"id",null)),a.editorUpload.uploadImagesAuto(),z.caption===!1&&A.is(t.parentNode,"figure.image")&&(b=t.parentNode,A.setAttrib(t,"contenteditable",null),A.insertAfter(t,b),A.remove(b),a.selection.select(t),a.nodeChanged()),z.caption!==!0)o(t);else if(!A.is(t.parentNode,"figure.image")){c=t,t=t.cloneNode(!0),t.contentEditable=!0,b=A.create("figure",{"class":"image"}),b.appendChild(t),b.appendChild(A.create("figcaption",{contentEditable:!0},"Caption")),b.contentEditable=!1;var d=A.getParent(c,k);d?A.split(d,c,b):A.replace(b,c),a.selection.select(b)}}else if(t){var e=A.is(t.parentNode,"figure.image")?t.parentNode:t;A.remove(e),a.focus(),a.nodeChanged(),A.isEmpty(a.getBody())&&(a.setContent(""),a.selection.setCursorLocation())}})}function q(b){var d,e,f,h=b.meta||{};x&&x.value(a.convertURL(this.value(),"src")),g.each(h,function(a,b){s.find("#"+b).value(a)}),h.width||h.height||(d=a.convertURL(this.value(),"src"),e=a.settings.image_prepend_url,f=new c("^(?:[a-z]+:)?//","i"),e&&!f.test(d)&&d.substring(0,e.length)!==e&&(d=e+d),this.value(d),j.getImageSize(a.documentBaseURI.toAbsolute(this.value()),function(a){a.width&&a.height&&C&&(v=a.width,w=a.height,s.find("#width").value(v),s.find("#height").value(w))}))}function r(a){a.meta=s.toJSON()}var s,t,u,v,w,x,y,z={},A=a.dom,B=a.settings,C=B.image_dimensions!==!1;t=a.selection.getNode(),u=A.getParent(t,"figure.image"),u&&(t=A.select("img",u)[0]),t&&("IMG"!=t.nodeName||t.getAttribute("data-mce-object")||t.getAttribute("data-mce-placeholder"))&&(t=null),t&&(v=A.getAttrib(t,"width"),w=A.getAttrib(t,"height"),z={src:A.getAttrib(t,"src"),alt:A.getAttrib(t,"alt"),title:A.getAttrib(t,"title"),"class":A.getAttrib(t,"class"),width:v,height:w,caption:!!u}),f&&(x={type:"listbox",label:"Image list",values:j.buildListItems(f,function(b){b.value=a.convertURL(b.value||b.url,"src")},[{text:"None",value:""}]),value:z.src&&a.convertURL(z.src,"src"),onselect:function(a){var b=s.find("#alt");(!b.value()||a.lastControl&&b.value()==a.lastControl.text())&&b.value(a.control.text()),s.find("#src").value(a.control.value()).fire("change")},onPostRender:function(){x=this}}),a.settings.image_class_list&&(y={name:"class",type:"listbox",label:"Class",values:j.buildListItems(a.settings.image_class_list,function(b){b.value&&(b.textStyle=function(){return a.formatter.getCssText({inline:"img",classes:[b.value]})})})});var D=[{name:"src",type:"filepicker",filetype:"image",label:"Source",autofocus:!0,onchange:q,onbeforecall:r},x];if(a.settings.image_description!==!1&&D.push({name:"alt",type:"textbox",label:"Image description"}),a.settings.image_title&&D.push({name:"title",type:"textbox",label:"Image Title"}),C&&D.push({type:"container",label:"Dimensions",layout:"flex",direction:"row",align:"center",spacing:5,items:[{name:"width",type:"textbox",maxLength:5,size:3,onchange:l,ariaLabel:"Width"},{type:"label",text:"x"},{name:"height",type:"textbox",maxLength:5,size:3,onchange:l,ariaLabel:"Height"},{name:"constrain",type:"checkbox",checked:!0,text:"Constrain proportions"}]}),D.push(y),a.settings.image_caption&&d.ceFalse&&D.push({name:"caption",type:"checkbox",label:"Caption"}),a.settings.image_advtab||a.settings.images_upload_url){var E=[{title:"General",type:"form",items:D}];if(a.settings.image_advtab&&(t&&(t.style.marginLeft&&t.style.marginRight&&t.style.marginLeft===t.style.marginRight&&(z.hspace=j.removePixelSuffix(t.style.marginLeft)),t.style.marginTop&&t.style.marginBottom&&t.style.marginTop===t.style.marginBottom&&(z.vspace=j.removePixelSuffix(t.style.marginTop)),t.style.borderWidth&&(z.border=j.removePixelSuffix(t.style.borderWidth)),z.style=a.dom.serializeStyle(a.dom.parseStyle(a.dom.getAttrib(t,"style")))),E.push({title:"Advanced",type:"form",pack:"start",items:[{label:"Style",name:"style",type:"textbox",onchange:n},{type:"form",layout:"grid",packV:"start",columns:2,padding:0,alignH:["left","right"],defaults:{type:"textbox",maxWidth:50,onchange:m},items:[{label:"Vertical space",name:"vspace"},{label:"Horizontal space",name:"hspace"},{label:"Border",name:"border"}]}]})),a.settings.images_upload_url){var F=".jpg,.jpeg,.png,.gif",G={title:"Upload",type:"form",layout:"flex",direction:"column",align:"stretch",padding:"20 20 20 20",items:[{type:"container",layout:"flex",direction:"column",align:"center",spacing:10,items:[{text:"Browse for an image",type:"browsebutton",accept:F,onchange:h},{text:"OR",type:"label"}]},{text:"Drop an image here",type:"dropzone",accept:F,height:100,onchange:h}]};E.push(G)}s=a.windowManager.open({title:"Insert/edit image",data:z,bodyType:"tabpanel",body:E,onSubmit:p})}else s=a.windowManager.open({title:"Insert/edit image",data:z,body:D,onSubmit:p})}function m(){k(l)}return{open:m}}}),g("0",["1","2","3"],function(a,b,c){return a.add("image",function(a){a.on("preInit",function(){function c(a){var b=a.attr("class");return b&&/\bimage\b/.test(b)}function d(a){return function(d){function e(b){b.attr("contenteditable",a?"true":null)}for(var f,g=d.length;g--;)f=d[g],c(f)&&(f.attr("contenteditable",a?"false":null),b.each(f.getAll("figcaption"),e),b.each(f.getAll("img"),e))}}a.parser.addNodeFilter("figure",d(!0)),a.serializer.addNodeFilter("figure",d(!1))}),a.addButton("image",{icon:"image",tooltip:"Insert/edit image",onclick:c(a).open,stateSelector:"img:not([data-mce-object],[data-mce-placeholder]),figure.image"}),a.addMenuItem("image",{icon:"image",text:"Image",onclick:c(a).open,context:"insert",prependToContext:!0}),a.addCommand("mceImage",c(a).open)}),function(){}}),d("0")()}(); \ No newline at end of file +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),d={hasDimensions:function(e){return!1!==e.settings.image_dimensions},hasAdvTab:function(e){return!0===e.settings.image_advtab},getPrependUrl:function(e){return e.getParam("image_prepend_url","")},getClassList:function(e){return e.getParam("image_class_list")},hasDescription:function(e){return!1!==e.settings.image_description},hasImageTitle:function(e){return!0===e.settings.image_title},hasImageCaption:function(e){return!0===e.settings.image_caption},getImageList:function(e){return e.getParam("image_list",!1)},hasUploadUrl:function(e){return e.getParam("images_upload_url",!1)},hasUploadHandler:function(e){return e.getParam("images_upload_handler",!1)},getUploadUrl:function(e){return e.getParam("images_upload_url")},getUploadHandler:function(e){return e.getParam("images_upload_handler")},getUploadBasePath:function(e){return e.getParam("images_upload_base_path")},getUploadCredentials:function(e){return e.getParam("images_upload_credentials")}},a="undefined"!=typeof window?window:Function("return this;")(),r=function(e,t){for(var n=t!==undefined&&null!==t?t:a,r=0;r {dependencies, definition, instance (possibly undefined)} + var global = tinymce.util.Tools.resolve('tinymce.PluginManager'); -// Used when there is no 'main' module. -// The name is probably (hopefully) unique so minification removes for releases. -var register_3795 = function (id) { - var module = dem(id); - var fragments = id.split('.'); - var target = Function('return this;')(); - for (var i = 0; i < fragments.length - 1; ++i) { - if (target[fragments[i]] === undefined) - target[fragments[i]] = {}; - target = target[fragments[i]]; - } - target[fragments[fragments.length - 1]] = module; -}; - -var instantiate = function (id) { - var actual = defs[id]; - var dependencies = actual.deps; - var definition = actual.defn; - var len = dependencies.length; - var instances = new Array(len); - for (var i = 0; i < len; ++i) - instances[i] = dem(dependencies[i]); - var defResult = definition.apply(null, instances); - if (defResult === undefined) - throw 'module [' + id + '] returned undefined'; - actual.instance = defResult; -}; + var global$1 = tinymce.util.Tools.resolve('tinymce.util.VK'); -var def = function (id, dependencies, definition) { - if (typeof id !== 'string') - throw 'module id must be a string'; - else if (dependencies === undefined) - throw 'no dependencies for ' + id; - else if (definition === undefined) - throw 'no definition function for ' + id; - defs[id] = { - deps: dependencies, - defn: definition, - instance: undefined + var assumeExternalTargets = function (editorSettings) { + return typeof editorSettings.link_assume_external_targets === 'boolean' ? editorSettings.link_assume_external_targets : false; + }; + var hasContextToolbar = function (editorSettings) { + return typeof editorSettings.link_context_toolbar === 'boolean' ? editorSettings.link_context_toolbar : false; + }; + var getLinkList = function (editorSettings) { + return editorSettings.link_list; + }; + var hasDefaultLinkTarget = function (editorSettings) { + return typeof editorSettings.default_link_target === 'string'; + }; + var getDefaultLinkTarget = function (editorSettings) { + return editorSettings.default_link_target; + }; + var getTargetList = function (editorSettings) { + return editorSettings.target_list; + }; + var setTargetList = function (editor, list) { + editor.settings.target_list = list; + }; + var shouldShowTargetList = function (editorSettings) { + return getTargetList(editorSettings) !== false; + }; + var getRelList = function (editorSettings) { + return editorSettings.rel_list; + }; + var hasRelList = function (editorSettings) { + return getRelList(editorSettings) !== undefined; + }; + var getLinkClassList = function (editorSettings) { + return editorSettings.link_class_list; + }; + var hasLinkClassList = function (editorSettings) { + return getLinkClassList(editorSettings) !== undefined; + }; + var shouldShowLinkTitle = function (editorSettings) { + return editorSettings.link_title !== false; + }; + var allowUnsafeLinkTarget = function (editorSettings) { + return typeof editorSettings.allow_unsafe_link_target === 'boolean' ? editorSettings.allow_unsafe_link_target : false; + }; + var $_ae1yh4f3jfuw8pj4 = { + assumeExternalTargets: assumeExternalTargets, + hasContextToolbar: hasContextToolbar, + getLinkList: getLinkList, + hasDefaultLinkTarget: hasDefaultLinkTarget, + getDefaultLinkTarget: getDefaultLinkTarget, + getTargetList: getTargetList, + setTargetList: setTargetList, + shouldShowTargetList: shouldShowTargetList, + getRelList: getRelList, + hasRelList: hasRelList, + getLinkClassList: getLinkClassList, + hasLinkClassList: hasLinkClassList, + shouldShowLinkTitle: shouldShowLinkTitle, + allowUnsafeLinkTarget: allowUnsafeLinkTarget }; -}; - -var dem = function (id) { - var actual = defs[id]; - if (actual === undefined) - throw 'module [' + id + '] was undefined'; - else if (actual.instance === undefined) - instantiate(id); - return actual.instance; -}; - -var req = function (ids, callback) { - var len = ids.length; - var instances = new Array(len); - for (var i = 0; i < len; ++i) - instances.push(dem(ids[i])); - callback.apply(null, callback); -}; - -var ephox = {}; - -ephox.bolt = { - module: { - api: { - define: def, - require: req, - demand: dem - } - } -}; - -var define = def; -var require = req; -var demand = dem; -// this helps with minificiation when using a lot of global references -var defineGlobal = function (id, ref) { - define(id, [], function () { return ref; }); -}; -/*jsc -["tinymce.plugins.link.Plugin","tinymce.core.PluginManager","tinymce.plugins.link.core.Actions","tinymce.plugins.link.ui.Controls","global!tinymce.util.Tools.resolve","tinymce.core.util.VK","tinymce.plugins.link.ui.Dialog","tinymce.plugins.link.core.OpenUrl","tinymce.plugins.link.core.Utils","tinymce.plugins.link.core.Settings","tinymce.core.util.Delay","tinymce.core.util.Tools","tinymce.core.util.XHR","global!RegExp","tinymce.core.dom.DOMUtils","tinymce.core.Env"] -jsc*/ -defineGlobal("global!tinymce.util.Tools.resolve", tinymce.util.Tools.resolve); -/** - * ResolveGlobal.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.core.PluginManager', - [ - 'global!tinymce.util.Tools.resolve' - ], - function (resolve) { - return resolve('tinymce.PluginManager'); - } -); - -/** - * ResolveGlobal.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.core.util.VK', - [ - 'global!tinymce.util.Tools.resolve' - ], - function (resolve) { - return resolve('tinymce.util.VK'); - } -); - -/** - * ResolveGlobal.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.core.util.Delay', - [ - 'global!tinymce.util.Tools.resolve' - ], - function (resolve) { - return resolve('tinymce.util.Delay'); - } -); - -/** - * ResolveGlobal.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.core.util.Tools', - [ - 'global!tinymce.util.Tools.resolve' - ], - function (resolve) { - return resolve('tinymce.util.Tools'); - } -); - -/** - * ResolveGlobal.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.core.util.XHR', - [ - 'global!tinymce.util.Tools.resolve' - ], - function (resolve) { - return resolve('tinymce.util.XHR'); - } -); - -define( - 'tinymce.plugins.link.core.Settings', - [ - - ], - function () { - var assumeExternalTargets = function (editorSettings) { - return typeof editorSettings.link_assume_external_targets === 'boolean' ? editorSettings.link_assume_external_targets : false; - }; - - var hasContextToolbar = function (editorSettings) { - return typeof editorSettings.link_context_toolbar === 'boolean' ? editorSettings.link_context_toolbar : false; - }; - - var getLinkList = function (editorSettings) { - return editorSettings.link_list; - }; - - var hasDefaultLinkTarget = function (editorSettings) { - return typeof editorSettings.default_link_target === 'string'; - }; - - var getDefaultLinkTarget = function (editorSettings) { - return editorSettings.default_link_target; - }; - - var getTargetList = function (editorSettings) { - return editorSettings.target_list; - }; - - var setTargetList = function (editor, list) { - editor.settings.target_list = list; - }; - - var shouldShowTargetList = function (editorSettings) { - return getTargetList(editorSettings) !== false; - }; - - var getRelList = function (editorSettings) { - return editorSettings.rel_list; - }; - - var hasRelList = function (editorSettings) { - return getRelList(editorSettings) !== undefined; - }; - - var getLinkClassList = function (editorSettings) { - return editorSettings.link_class_list; - }; - - var hasLinkClassList = function (editorSettings) { - return getLinkClassList(editorSettings) !== undefined; - }; - - var shouldShowLinkTitle = function (editorSettings) { - return editorSettings.link_title !== false; - }; - - var allowUnsafeLinkTarget = function (editorSettings) { - return typeof editorSettings.allow_unsafe_link_target === 'boolean' ? editorSettings.allow_unsafe_link_target : false; - }; - - return { - assumeExternalTargets: assumeExternalTargets, - hasContextToolbar: hasContextToolbar, - getLinkList: getLinkList, - hasDefaultLinkTarget: hasDefaultLinkTarget, - getDefaultLinkTarget: getDefaultLinkTarget, - getTargetList: getTargetList, - setTargetList: setTargetList, - shouldShowTargetList: shouldShowTargetList, - getRelList: getRelList, - hasRelList: hasRelList, - getLinkClassList: getLinkClassList, - hasLinkClassList: hasLinkClassList, - shouldShowLinkTitle: shouldShowLinkTitle, - allowUnsafeLinkTarget: allowUnsafeLinkTarget - }; - } -); - -defineGlobal("global!RegExp", RegExp); -/** - * Utils.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.plugins.link.core.Utils', - [ - 'tinymce.core.util.Tools', - 'tinymce.plugins.link.core.Settings', - 'global!RegExp' - ], - function (Tools, Settings, RegExp) { - - var toggleTargetRules = function (rel, isUnsafe) { - var rules = ['noopener']; - var newRel = rel ? rel.split(/\s+/) : []; - - var toString = function (rel) { - return Tools.trim(rel.sort().join(' ')); - }; - - var addTargetRules = function (rel) { - rel = removeTargetRules(rel); - return rel.length ? rel.concat(rules) : rules; - }; - - var removeTargetRules = function (rel) { - return rel.filter(function (val) { - return Tools.inArray(rules, val) === -1; - }); - }; - - newRel = isUnsafe ? addTargetRules(newRel) : removeTargetRules(newRel); - return newRel.length ? toString(newRel) : null; - }; - - var trimCaretContainers = function (text) { - return text.replace(/\uFEFF/g, ''); - }; + var global$2 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils'); + var global$3 = tinymce.util.Tools.resolve('tinymce.Env'); - var getAnchorElement = function (editor, selectedElm) { - selectedElm = selectedElm || editor.selection.getStart(); - if (isImageFigure(selectedElm)) { - // for an image conained in a figure we look for a link inside the selected element - return editor.dom.select('a[href]', selectedElm)[0]; - } else { - return editor.dom.getParent(selectedElm, 'a[href]'); + var appendClickRemove = function (link, evt) { + document.body.appendChild(link); + link.dispatchEvent(evt); + document.body.removeChild(link); + }; + var open = function (url) { + if (!global$3.ie || global$3.ie > 10) { + var link = document.createElement('a'); + link.target = '_blank'; + link.href = url; + link.rel = 'noreferrer noopener'; + var evt = document.createEvent('MouseEvents'); + evt.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); + appendClickRemove(link, evt); + } else { + var win = window.open('', '_blank'); + if (win) { + win.opener = null; + var doc = win.document; + doc.open(); + doc.write(''); + doc.close(); } - }; - - - var getAnchorText = function (selection, anchorElm) { - var text = anchorElm ? (anchorElm.innerText || anchorElm.textContent) : selection.getContent({ format: 'text' }); - return trimCaretContainers(text); - }; - + } + }; + var $_2ksejbf4jfuw8pj6 = { open: open }; - var isLink = function (elm) { - return elm && elm.nodeName === 'A' && elm.href; - }; + var global$4 = tinymce.util.Tools.resolve('tinymce.util.Tools'); - var hasLinks = function (elements) { - return Tools.grep(elements, isLink).length > 0; + var toggleTargetRules = function (rel, isUnsafe) { + var rules = ['noopener']; + var newRel = rel ? rel.split(/\s+/) : []; + var toString = function (rel) { + return global$4.trim(rel.sort().join(' ')); }; - - - var isOnlyTextSelected = function (html) { - // Partial html and not a fully selected anchor element - if (/]+>[^<]+<\/a>$/.test(html) || html.indexOf('href=') == -1)) { - return false; - } - - return true; + var addTargetRules = function (rel) { + rel = removeTargetRules(rel); + return rel.length ? rel.concat(rules) : rules; }; - - - var isImageFigure = function (node) { - return node && node.nodeName === 'FIGURE' && /\bimage\b/i.test(node.className); + var removeTargetRules = function (rel) { + return rel.filter(function (val) { + return global$4.inArray(rules, val) === -1; + }); }; - - - var link = function (editor, attachState) { - return function (data) { - editor.undoManager.transact(function () { - var selectedElm = editor.selection.getNode(); - var anchorElm = getAnchorElement(editor, selectedElm); - - var linkAttrs = { - href: data.href, - target: data.target ? data.target : null, - rel: data.rel ? data.rel : null, - "class": data["class"] ? data["class"] : null, - title: data.title ? data.title : null - }; - - if (!Settings.hasRelList(editor.settings) && Settings.allowUnsafeLinkTarget(editor.settings) === false) { - linkAttrs.rel = toggleTargetRules(linkAttrs.rel, linkAttrs.target == '_blank'); - } - - if (data.href === attachState.href) { - attachState.attach(); - attachState = {}; - } - - if (anchorElm) { - editor.focus(); - - if (data.hasOwnProperty('text')) { - if ("innerText" in anchorElm) { - anchorElm.innerText = data.text; - } else { - anchorElm.textContent = data.text; - } - } - - editor.dom.setAttribs(anchorElm, linkAttrs); - - editor.selection.select(anchorElm); - editor.undoManager.add(); - } else { - if (isImageFigure(selectedElm)) { - linkImageFigure(editor, selectedElm, linkAttrs); - } else if (data.hasOwnProperty('text')) { - editor.insertContent(editor.dom.createHTML('a', linkAttrs, editor.dom.encode(data.text))); + newRel = isUnsafe ? addTargetRules(newRel) : removeTargetRules(newRel); + return newRel.length ? toString(newRel) : null; + }; + var trimCaretContainers = function (text) { + return text.replace(/\uFEFF/g, ''); + }; + var getAnchorElement = function (editor, selectedElm) { + selectedElm = selectedElm || editor.selection.getNode(); + if (isImageFigure(selectedElm)) { + return editor.dom.select('a[href]', selectedElm)[0]; + } else { + return editor.dom.getParent(selectedElm, 'a[href]'); + } + }; + var getAnchorText = function (selection, anchorElm) { + var text = anchorElm ? anchorElm.innerText || anchorElm.textContent : selection.getContent({ format: 'text' }); + return trimCaretContainers(text); + }; + var isLink = function (elm) { + return elm && elm.nodeName === 'A' && elm.href; + }; + var hasLinks = function (elements) { + return global$4.grep(elements, isLink).length > 0; + }; + var isOnlyTextSelected = function (html) { + if (/]+>[^<]+<\/a>$/.test(html) || html.indexOf('href=') === -1)) { + return false; + } + return true; + }; + var isImageFigure = function (node) { + return node && node.nodeName === 'FIGURE' && /\bimage\b/i.test(node.className); + }; + var link = function (editor, attachState) { + return function (data) { + editor.undoManager.transact(function () { + var selectedElm = editor.selection.getNode(); + var anchorElm = getAnchorElement(editor, selectedElm); + var linkAttrs = { + href: data.href, + target: data.target ? data.target : null, + rel: data.rel ? data.rel : null, + class: data.class ? data.class : null, + title: data.title ? data.title : null + }; + if (!$_ae1yh4f3jfuw8pj4.hasRelList(editor.settings) && $_ae1yh4f3jfuw8pj4.allowUnsafeLinkTarget(editor.settings) === false) { + linkAttrs.rel = toggleTargetRules(linkAttrs.rel, linkAttrs.target === '_blank'); + } + if (data.href === attachState.href) { + attachState.attach(); + attachState = {}; + } + if (anchorElm) { + editor.focus(); + if (data.hasOwnProperty('text')) { + if ('innerText' in anchorElm) { + anchorElm.innerText = data.text; } else { - editor.execCommand('mceInsertLink', false, linkAttrs); + anchorElm.textContent = data.text; } } - }); - }; - }; - - - var unlink = function (editor) { - return function () { - editor.undoManager.transact(function () { - var node = editor.selection.getNode(); - if (isImageFigure(node)) { - unlinkImageFigure(editor, node); + editor.dom.setAttribs(anchorElm, linkAttrs); + editor.selection.select(anchorElm); + editor.undoManager.add(); + } else { + if (isImageFigure(selectedElm)) { + linkImageFigure(editor, selectedElm, linkAttrs); + } else if (data.hasOwnProperty('text')) { + editor.insertContent(editor.dom.createHTML('a', linkAttrs, editor.dom.encode(data.text))); } else { - editor.execCommand('unlink'); + editor.execCommand('mceInsertLink', false, linkAttrs); } - }); - }; + } + }); }; - - - var unlinkImageFigure = function (editor, fig) { - var a, img; - img = editor.dom.select('img', fig)[0]; - if (img) { - a = editor.dom.getParents(img, 'a[href]', fig)[0]; - if (a) { - a.parentNode.insertBefore(img, a); - editor.dom.remove(a); + }; + var unlink = function (editor) { + return function () { + editor.undoManager.transact(function () { + var node = editor.selection.getNode(); + if (isImageFigure(node)) { + unlinkImageFigure(editor, node); + } else { + editor.execCommand('unlink'); } - } + }); }; - - - var linkImageFigure = function (editor, fig, attrs) { - var a, img; - img = editor.dom.select('img', fig)[0]; - if (img) { - a = editor.dom.create('a', attrs); - img.parentNode.insertBefore(a, img); - a.appendChild(img); + }; + var unlinkImageFigure = function (editor, fig) { + var a, img; + img = editor.dom.select('img', fig)[0]; + if (img) { + a = editor.dom.getParents(img, 'a[href]', fig)[0]; + if (a) { + a.parentNode.insertBefore(img, a); + editor.dom.remove(a); } - }; - - return { - link: link, - unlink: unlink, - isLink: isLink, - hasLinks: hasLinks, - isOnlyTextSelected: isOnlyTextSelected, - getAnchorElement: getAnchorElement, - getAnchorText: getAnchorText, - toggleTargetRules: toggleTargetRules - }; - } -); -/** - * Dialog.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ + } + }; + var linkImageFigure = function (editor, fig, attrs) { + var a, img; + img = editor.dom.select('img', fig)[0]; + if (img) { + a = editor.dom.create('a', attrs); + img.parentNode.insertBefore(a, img); + a.appendChild(img); + } + }; + var $_fs5xf5f7jfuw8pjf = { + link: link, + unlink: unlink, + isLink: isLink, + hasLinks: hasLinks, + isOnlyTextSelected: isOnlyTextSelected, + getAnchorElement: getAnchorElement, + getAnchorText: getAnchorText, + toggleTargetRules: toggleTargetRules + }; -define( - 'tinymce.plugins.link.ui.Dialog', - [ - 'tinymce.core.util.Delay', - 'tinymce.core.util.Tools', - 'tinymce.core.util.XHR', - 'tinymce.plugins.link.core.Utils', - 'tinymce.plugins.link.core.Settings' - ], - function (Delay, Tools, XHR, Utils, Settings) { - var attachState = {}; + var global$5 = tinymce.util.Tools.resolve('tinymce.util.Delay'); - var createLinkList = function (editor, callback) { - var linkList = Settings.getLinkList(editor.settings); + var global$6 = tinymce.util.Tools.resolve('tinymce.util.XHR'); - if (typeof linkList == "string") { - XHR.send({ - url: linkList, - success: function (text) { - callback(editor, JSON.parse(text)); + var attachState = {}; + var createLinkList = function (editor, callback) { + var linkList = $_ae1yh4f3jfuw8pj4.getLinkList(editor.settings); + if (typeof linkList === 'string') { + global$6.send({ + url: linkList, + success: function (text) { + callback(editor, JSON.parse(text)); + } + }); + } else if (typeof linkList === 'function') { + linkList(function (list) { + callback(editor, list); + }); + } else { + callback(editor, linkList); + } + }; + var buildListItems = function (inputList, itemCallback, startItems) { + var appendItems = function (values, output) { + output = output || []; + global$4.each(values, function (item) { + var menuItem = { text: item.text || item.title }; + if (item.menu) { + menuItem.menu = appendItems(item.menu); + } else { + menuItem.value = item.value; + if (itemCallback) { + itemCallback(menuItem); } + } + output.push(menuItem); + }); + return output; + }; + return appendItems(inputList, startItems || []); + }; + var delayedConfirm = function (editor, message, callback) { + var rng = editor.selection.getRng(); + global$5.setEditorTimeout(editor, function () { + editor.windowManager.confirm(message, function (state) { + editor.selection.setRng(rng); + callback(state); + }); + }); + }; + var showDialog = function (editor, linkList) { + var data = {}; + var selection = editor.selection; + var dom = editor.dom; + var anchorElm, initialText; + var win, onlyText, textListCtrl, linkListCtrl, relListCtrl, targetListCtrl, classListCtrl, linkTitleCtrl, value; + var linkListChangeHandler = function (e) { + var textCtrl = win.find('#text'); + if (!textCtrl.value() || e.lastControl && textCtrl.value() === e.lastControl.text()) { + textCtrl.value(e.control.text()); + } + win.find('#href').value(e.control.value()); + }; + var buildAnchorListControl = function (url) { + var anchorList = []; + global$4.each(editor.dom.select('a:not([href])'), function (anchor) { + var id = anchor.name || anchor.id; + if (id) { + anchorList.push({ + text: id, + value: '#' + id, + selected: url.indexOf('#' + id) !== -1 + }); + } + }); + if (anchorList.length) { + anchorList.unshift({ + text: 'None', + value: '' }); - } else if (typeof linkList == "function") { - linkList(function (list) { - callback(editor, list); - }); - } else { - callback(editor, linkList); + return { + name: 'anchor', + type: 'listbox', + label: 'Anchors', + values: anchorList, + onselect: linkListChangeHandler + }; } }; - - var buildListItems = function (inputList, itemCallback, startItems) { - var appendItems = function (values, output) { - output = output || []; - - Tools.each(values, function (item) { - var menuItem = { text: item.text || item.title }; - - if (item.menu) { - menuItem.menu = appendItems(item.menu); - } else { - menuItem.value = item.value; - - if (itemCallback) { - itemCallback(menuItem); - } - } - - output.push(menuItem); - }); - - return output; - }; - - return appendItems(inputList, startItems || []); + var updateText = function () { + if (!initialText && onlyText && !data.text) { + this.parent().parent().find('#text')[0].value(this.value()); + } }; - - // Delay confirm since onSubmit will move focus - var delayedConfirm = function (editor, message, callback) { - var rng = editor.selection.getRng(); - - Delay.setEditorTimeout(editor, function () { - editor.windowManager.confirm(message, function (state) { - editor.selection.setRng(rng); - callback(state); - }); + var urlChange = function (e) { + var meta = e.meta || {}; + if (linkListCtrl) { + linkListCtrl.value(editor.convertURL(this.value(), 'href')); + } + global$4.each(e.meta, function (value, key) { + var inp = win.find('#' + key); + if (key === 'text') { + if (initialText.length === 0) { + inp.value(value); + data.text = value; + } + } else { + inp.value(value); + } }); + if (meta.attach) { + attachState = { + href: this.value(), + attach: meta.attach + }; + } + if (!meta.text) { + updateText.call(this); + } }; - - var showDialog = function (editor, linkList) { - var data = {}, selection = editor.selection, dom = editor.dom, anchorElm, initialText; - var win, onlyText, textListCtrl, linkListCtrl, relListCtrl, targetListCtrl, classListCtrl, linkTitleCtrl, value; - - var linkListChangeHandler = function (e) { - var textCtrl = win.find('#text'); - - if (!textCtrl.value() || (e.lastControl && textCtrl.value() == e.lastControl.text())) { - textCtrl.value(e.control.text()); + var onBeforeCall = function (e) { + e.meta = win.toJSON(); + }; + onlyText = $_fs5xf5f7jfuw8pjf.isOnlyTextSelected(selection.getContent()); + anchorElm = $_fs5xf5f7jfuw8pjf.getAnchorElement(editor); + data.text = initialText = $_fs5xf5f7jfuw8pjf.getAnchorText(editor.selection, anchorElm); + data.href = anchorElm ? dom.getAttrib(anchorElm, 'href') : ''; + if (anchorElm) { + data.target = dom.getAttrib(anchorElm, 'target'); + } else if ($_ae1yh4f3jfuw8pj4.hasDefaultLinkTarget(editor.settings)) { + data.target = $_ae1yh4f3jfuw8pj4.getDefaultLinkTarget(editor.settings); + } + if (value = dom.getAttrib(anchorElm, 'rel')) { + data.rel = value; + } + if (value = dom.getAttrib(anchorElm, 'class')) { + data.class = value; + } + if (value = dom.getAttrib(anchorElm, 'title')) { + data.title = value; + } + if (onlyText) { + textListCtrl = { + name: 'text', + type: 'textbox', + size: 40, + label: 'Text to display', + onchange: function () { + data.text = this.value(); } - - win.find('#href').value(e.control.value()); }; - - var buildAnchorListControl = function (url) { - var anchorList = []; - - Tools.each(editor.dom.select('a:not([href])'), function (anchor) { - var id = anchor.name || anchor.id; - - if (id) { - anchorList.push({ - text: id, - value: '#' + id, - selected: url.indexOf('#' + id) != -1 - }); - } - }); - - if (anchorList.length) { - anchorList.unshift({ text: 'None', value: '' }); - - return { - name: 'anchor', - type: 'listbox', - label: 'Anchors', - values: anchorList, - onselect: linkListChangeHandler - }; + } + if (linkList) { + linkListCtrl = { + type: 'listbox', + label: 'Link list', + values: buildListItems(linkList, function (item) { + item.value = editor.convertURL(item.value || item.url, 'href'); + }, [{ + text: 'None', + value: '' + }]), + onselect: linkListChangeHandler, + value: editor.convertURL(data.href, 'href'), + onPostRender: function () { + linkListCtrl = this; } }; - - var updateText = function () { - if (!initialText && onlyText && !data.text) { - this.parent().parent().find('#text')[0].value(this.value()); - } + } + if ($_ae1yh4f3jfuw8pj4.shouldShowTargetList(editor.settings)) { + if ($_ae1yh4f3jfuw8pj4.getTargetList(editor.settings) === undefined) { + $_ae1yh4f3jfuw8pj4.setTargetList(editor, [ + { + text: 'None', + value: '' + }, + { + text: 'New window', + value: '_blank' + } + ]); + } + targetListCtrl = { + name: 'target', + type: 'listbox', + label: 'Target', + values: buildListItems($_ae1yh4f3jfuw8pj4.getTargetList(editor.settings)) }; - - var urlChange = function (e) { - var meta = e.meta || {}; - - if (linkListCtrl) { - linkListCtrl.value(editor.convertURL(this.value(), 'href')); - } - - Tools.each(e.meta, function (value, key) { - var inp = win.find('#' + key); - - if (key === 'text') { - if (initialText.length === 0) { - inp.value(value); - data.text = value; - } - } else { - inp.value(value); + } + if ($_ae1yh4f3jfuw8pj4.hasRelList(editor.settings)) { + relListCtrl = { + name: 'rel', + type: 'listbox', + label: 'Rel', + values: buildListItems($_ae1yh4f3jfuw8pj4.getRelList(editor.settings), function (item) { + if ($_ae1yh4f3jfuw8pj4.allowUnsafeLinkTarget(editor.settings) === false) { + item.value = $_fs5xf5f7jfuw8pjf.toggleTargetRules(item.value, data.target === '_blank'); } - }); - - if (meta.attach) { - attachState = { - href: this.value(), - attach: meta.attach - }; - } - - if (!meta.text) { - updateText.call(this); - } + }) }; - - var onBeforeCall = function (e) { - e.meta = win.toJSON(); + } + if ($_ae1yh4f3jfuw8pj4.hasLinkClassList(editor.settings)) { + classListCtrl = { + name: 'class', + type: 'listbox', + label: 'Class', + values: buildListItems($_ae1yh4f3jfuw8pj4.getLinkClassList(editor.settings), function (item) { + if (item.value) { + item.textStyle = function () { + return editor.formatter.getCssText({ + inline: 'a', + classes: [item.value] + }); + }; + } + }) }; - - onlyText = Utils.isOnlyTextSelected(selection.getContent()); - anchorElm = Utils.getAnchorElement(editor); - - data.text = initialText = Utils.getAnchorText(editor.selection, anchorElm); - data.href = anchorElm ? dom.getAttrib(anchorElm, 'href') : ''; - - if (anchorElm) { - data.target = dom.getAttrib(anchorElm, 'target'); - } else if (Settings.hasDefaultLinkTarget(editor.settings)) { - data.target = Settings.getDefaultLinkTarget(editor.settings); - } - - if ((value = dom.getAttrib(anchorElm, 'rel'))) { - data.rel = value; - } - - if ((value = dom.getAttrib(anchorElm, 'class'))) { - data['class'] = value; - } - - if ((value = dom.getAttrib(anchorElm, 'title'))) { - data.title = value; - } - - if (onlyText) { - textListCtrl = { - name: 'text', - type: 'textbox', + } + if ($_ae1yh4f3jfuw8pj4.shouldShowLinkTitle(editor.settings)) { + linkTitleCtrl = { + name: 'title', + type: 'textbox', + label: 'Title', + value: data.title + }; + } + win = editor.windowManager.open({ + title: 'Insert link', + data: data, + body: [ + { + name: 'href', + type: 'filepicker', + filetype: 'file', size: 40, - label: 'Text to display', - onchange: function () { - data.text = this.value(); - } - }; - } - - if (linkList) { - linkListCtrl = { - type: 'listbox', - label: 'Link list', - values: buildListItems( - linkList, - function (item) { - item.value = editor.convertURL(item.value || item.url, 'href'); - }, - [{ text: 'None', value: '' }] - ), - onselect: linkListChangeHandler, - value: editor.convertURL(data.href, 'href'), - onPostRender: function () { - /*eslint consistent-this:0*/ - linkListCtrl = this; - } - }; - } - - if (Settings.shouldShowTargetList(editor.settings)) { - if (Settings.getTargetList(editor.settings) === undefined) { - Settings.setTargetList(editor, [ - { text: 'None', value: '' }, - { text: 'New window', value: '_blank' } - ]); + autofocus: true, + label: 'Url', + onchange: urlChange, + onkeyup: updateText, + onpaste: updateText, + onbeforecall: onBeforeCall + }, + textListCtrl, + linkTitleCtrl, + buildAnchorListControl(data.href), + linkListCtrl, + relListCtrl, + targetListCtrl, + classListCtrl + ], + onSubmit: function (e) { + var assumeExternalTargets = $_ae1yh4f3jfuw8pj4.assumeExternalTargets(editor.settings); + var insertLink = $_fs5xf5f7jfuw8pjf.link(editor, attachState); + var removeLink = $_fs5xf5f7jfuw8pjf.unlink(editor); + var resultData = global$4.extend({}, data, e.data); + var href = resultData.href; + if (!href) { + removeLink(); + return; } - - targetListCtrl = { - name: 'target', - type: 'listbox', - label: 'Target', - values: buildListItems(Settings.getTargetList(editor.settings)) - }; - } - - if (Settings.hasRelList(editor.settings)) { - relListCtrl = { - name: 'rel', - type: 'listbox', - label: 'Rel', - values: buildListItems( - Settings.getRelList(editor.settings), - function (item) { - if (Settings.allowUnsafeLinkTarget(editor.settings) === false) { - item.value = Utils.toggleTargetRules(item.value, data.target === '_blank'); - } + if (!onlyText || resultData.text === initialText) { + delete resultData.text; + } + if (href.indexOf('@') > 0 && href.indexOf('//') === -1 && href.indexOf('mailto:') === -1) { + delayedConfirm(editor, 'The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?', function (state) { + if (state) { + resultData.href = 'mailto:' + href; } - ) - }; - } - - if (Settings.hasLinkClassList(editor.settings)) { - classListCtrl = { - name: 'class', - type: 'listbox', - label: 'Class', - values: buildListItems( - Settings.getLinkClassList(editor.settings), - function (item) { - if (item.value) { - item.textStyle = function () { - return editor.formatter.getCssText({ inline: 'a', classes: [item.value] }); - }; - } + insertLink(resultData); + }); + return; + } + if (assumeExternalTargets === true && !/^\w+:/i.test(href) || assumeExternalTargets === false && /^\s*www[\.|\d\.]/i.test(href)) { + delayedConfirm(editor, 'The URL you entered seems to be an external link. Do you want to add the required http:// prefix?', function (state) { + if (state) { + resultData.href = 'http://' + href; } - ) - }; - } - - if (Settings.shouldShowLinkTitle(editor.settings)) { - linkTitleCtrl = { - name: 'title', - type: 'textbox', - label: 'Title', - value: data.title - }; + insertLink(resultData); + }); + return; + } + insertLink(resultData); } + }); + }; + var open$1 = function (editor) { + createLinkList(editor, showDialog); + }; + var $_3kgdixf9jfuw8pjm = { open: open$1 }; - win = editor.windowManager.open({ - title: 'Insert link', - data: data, - body: [ - { - name: 'href', - type: 'filepicker', - filetype: 'file', - size: 40, - autofocus: true, - label: 'Url', - onchange: urlChange, - onkeyup: updateText, - onbeforecall: onBeforeCall - }, - textListCtrl, - linkTitleCtrl, - buildAnchorListControl(data.href), - linkListCtrl, - relListCtrl, - targetListCtrl, - classListCtrl - ], - onSubmit: function (e) { - var assumeExternalTargets = Settings.assumeExternalTargets(editor.settings); - var insertLink = Utils.link(editor, attachState); - var removeLink = Utils.unlink(editor); - - var resultData = Tools.extend({}, data, e.data); - /*eslint dot-notation: 0*/ - var href = resultData.href; - - if (!href) { - removeLink(); - return; - } - - if (!onlyText || resultData.text === initialText) { - delete resultData.text; - } - - // Is email and not //user@domain.com - if (href.indexOf('@') > 0 && href.indexOf('//') == -1 && href.indexOf('mailto:') == -1) { - delayedConfirm( - editor, - 'The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?', - function (state) { - if (state) { - resultData.href = 'mailto:' + href; - } - insertLink(resultData); - } - ); - return; - } - - // Is not protocol prefixed - if ((assumeExternalTargets === true && !/^\w+:/i.test(href)) || - (assumeExternalTargets === false && /^\s*www[\.|\d\.]/i.test(href))) { - delayedConfirm( - editor, - 'The URL you entered seems to be an external link. Do you want to add the required http:// prefix?', - function (state) { - if (state) { - resultData.href = 'http://' + href; - } - insertLink(resultData); - } - ); - return; - } - - insertLink(resultData); + var getLink = function (editor, elm) { + return editor.dom.getParent(elm, 'a[href]'); + }; + var getSelectedLink = function (editor) { + return getLink(editor, editor.selection.getStart()); + }; + var getHref = function (elm) { + var href = elm.getAttribute('data-mce-href'); + return href ? href : elm.getAttribute('href'); + }; + var isContextMenuVisible = function (editor) { + var contextmenu = editor.plugins.contextmenu; + return contextmenu ? contextmenu.isContextMenuVisible() : false; + }; + var hasOnlyAltModifier = function (e) { + return e.altKey === true && e.shiftKey === false && e.ctrlKey === false && e.metaKey === false; + }; + var gotoLink = function (editor, a) { + if (a) { + var href = getHref(a); + if (/^#/.test(href)) { + var targetEl = editor.$(href); + if (targetEl.length) { + editor.selection.scrollIntoView(targetEl[0], true); } - }); - }; - - var open = function (editor) { - createLinkList(editor, showDialog); - }; - - return { - open: open - }; - } -); -/** - * ResolveGlobal.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.core.dom.DOMUtils', - [ - 'global!tinymce.util.Tools.resolve' - ], - function (resolve) { - return resolve('tinymce.dom.DOMUtils'); - } -); - -/** - * ResolveGlobal.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.core.Env', - [ - 'global!tinymce.util.Tools.resolve' - ], - function (resolve) { - return resolve('tinymce.Env'); - } -); - -/** - * OpenUrl.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.plugins.link.core.OpenUrl', - [ - 'tinymce.core.dom.DOMUtils', - 'tinymce.core.Env' - ], - function (DOMUtils, Env) { - var appendClickRemove = function (link, evt) { - document.body.appendChild(link); - link.dispatchEvent(evt); - document.body.removeChild(link); - }; - - var open = function (url) { - // Chrome and Webkit has implemented noopener and works correctly with/without popup blocker - // Firefox has it implemented noopener but when the popup blocker is activated it doesn't work - // Edge has only implemented noreferrer and it seems to remove opener as well - // Older IE versions pre IE 11 falls back to a window.open approach - if (!Env.ie || Env.ie > 10) { - var link = document.createElement('a'); - link.target = '_blank'; - link.href = url; - link.rel = 'noreferrer noopener'; - - var evt = document.createEvent('MouseEvents'); - evt.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); - - appendClickRemove(link, evt); } else { - var win = window.open('', '_blank'); - if (win) { - win.opener = null; - var doc = win.document; - doc.open(); - doc.write(''); - doc.close(); - } + $_2ksejbf4jfuw8pj6.open(a.href); } + } + }; + var openDialog = function (editor) { + return function () { + $_3kgdixf9jfuw8pjm.open(editor); }; - - return { - open: open - }; - } -); -/** - * Actions.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.plugins.link.core.Actions', - [ - 'tinymce.core.util.VK', - 'tinymce.plugins.link.ui.Dialog', - 'tinymce.plugins.link.core.OpenUrl', - 'tinymce.plugins.link.core.Utils', - 'tinymce.plugins.link.core.Settings' - ], - function (VK, Dialog, OpenUrl, Utils, Settings) { - var getLink = function (editor, elm) { - return editor.dom.getParent(elm, 'a[href]'); - }; - - var getSelectedLink = function (editor) { - return getLink(editor, editor.selection.getStart()); - }; - - var getHref = function (elm) { - // Returns the real href value not the resolved a.href value - var href = elm.getAttribute('data-mce-href'); - return href ? href : elm.getAttribute('href'); - }; - - var isContextMenuVisible = function (editor) { - var contextmenu = editor.plugins.contextmenu; - return contextmenu ? contextmenu.isContextMenuVisible() : false; - }; - - var hasOnlyAltModifier = function (e) { - return e.altKey === true && e.shiftKey === false && e.ctrlKey === false && e.metaKey === false; + }; + var gotoSelectedLink = function (editor) { + return function () { + gotoLink(editor, getSelectedLink(editor)); }; - - var gotoLink = function (editor, a) { - if (a) { - var href = getHref(a); - if (/^#/.test(href)) { - var targetEl = editor.$(href); - if (targetEl.length) { - editor.selection.scrollIntoView(targetEl[0], true); - } - } else { - OpenUrl.open(a.href); + }; + var leftClickedOnAHref = function (editor) { + return function (elm) { + var sel, rng, node; + if ($_ae1yh4f3jfuw8pj4.hasContextToolbar(editor.settings) && !isContextMenuVisible(editor) && $_fs5xf5f7jfuw8pjf.isLink(elm)) { + sel = editor.selection; + rng = sel.getRng(); + node = rng.startContainer; + if (node.nodeType === 3 && sel.isCollapsed() && rng.startOffset > 0 && rng.startOffset < node.data.length) { + return true; } } + return false; }; - - var openDialog = function (editor) { - return function () { - Dialog.open(editor); - }; - }; - - var gotoSelectedLink = function (editor) { - return function () { - gotoLink(editor, getSelectedLink(editor)); - }; - }; - - var leftClickedOnAHref = function (editor) { - return function (elm) { - var sel, rng, node; - if (Settings.hasContextToolbar(editor.settings) && !isContextMenuVisible(editor) && Utils.isLink(elm)) { - sel = editor.selection; - rng = sel.getRng(); - node = rng.startContainer; - // ignore cursor positions at the beginning/end (to make context toolbar less noisy) - if (node.nodeType == 3 && sel.isCollapsed() && rng.startOffset > 0 && rng.startOffset < node.data.length) { - return true; - } - } - return false; - }; - }; - - var setupGotoLinks = function (editor) { - editor.on('click', function (e) { - var link = getLink(editor, e.target); - if (link && VK.metaKeyPressed(e)) { - e.preventDefault(); - gotoLink(editor, link); - } - }); - - editor.on('keydown', function (e) { - var link = getSelectedLink(editor); - if (link && e.keyCode === 13 && hasOnlyAltModifier(e)) { - e.preventDefault(); - gotoLink(editor, link); - } + }; + var setupGotoLinks = function (editor) { + editor.on('click', function (e) { + var link = getLink(editor, e.target); + if (link && global$1.metaKeyPressed(e)) { + e.preventDefault(); + gotoLink(editor, link); + } + }); + editor.on('keydown', function (e) { + var link = getSelectedLink(editor); + if (link && e.keyCode === 13 && hasOnlyAltModifier(e)) { + e.preventDefault(); + gotoLink(editor, link); + } + }); + }; + var toggleActiveState = function (editor) { + return function () { + var self = this; + editor.on('nodechange', function (e) { + self.active(!editor.readonly && !!$_fs5xf5f7jfuw8pjf.getAnchorElement(editor, e.element)); }); }; - - var toggleActiveState = function (editor) { - return function () { - var self = this; - editor.on('nodechange', function (e) { - self.active(!editor.readonly && !!Utils.getAnchorElement(editor, e.element)); - }); - }; - }; - - var toggleViewLinkState = function (editor) { - return function () { - var self = this; - - var toggleVisibility = function (e) { - if (Utils.hasLinks(e.parents)) { - self.show(); - } else { - self.hide(); - } - }; - - if (!Utils.hasLinks(editor.dom.getParents(editor.selection.getStart()))) { + }; + var toggleViewLinkState = function (editor) { + return function () { + var self = this; + var toggleVisibility = function (e) { + if ($_fs5xf5f7jfuw8pjf.hasLinks(e.parents)) { + self.show(); + } else { self.hide(); } - - editor.on('nodechange', toggleVisibility); - - self.on('remove', function () { - editor.off('nodechange', toggleVisibility); - }); }; - }; - - return { - openDialog: openDialog, - gotoSelectedLink: gotoSelectedLink, - leftClickedOnAHref: leftClickedOnAHref, - setupGotoLinks: setupGotoLinks, - toggleActiveState: toggleActiveState, - toggleViewLinkState: toggleViewLinkState - }; - } -); -/** - * Controls.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.plugins.link.ui.Controls', - [ - 'tinymce.plugins.link.core.Actions', - 'tinymce.plugins.link.core.Utils' - ], - function (Actions, Utils) { - - var setupButtons = function (editor) { - editor.addButton('link', { - icon: 'link', - tooltip: 'Insert/edit link', - shortcut: 'Meta+K', - onclick: Actions.openDialog(editor), - onpostrender: Actions.toggleActiveState(editor) - }); - - editor.addButton('unlink', { - icon: 'unlink', - tooltip: 'Remove link', - onclick: Utils.unlink(editor), - onpostrender: Actions.toggleActiveState(editor) - }); - - if (editor.addContextToolbar) { - editor.addButton('openlink', { - icon: 'newtab', - tooltip: 'Open link', - onclick: Actions.gotoSelectedLink(editor) - }); + if (!$_fs5xf5f7jfuw8pjf.hasLinks(editor.dom.getParents(editor.selection.getStart()))) { + self.hide(); } + editor.on('nodechange', toggleVisibility); + self.on('remove', function () { + editor.off('nodechange', toggleVisibility); + }); }; + }; + var $_auu7ckf1jfuw8pj0 = { + openDialog: openDialog, + gotoSelectedLink: gotoSelectedLink, + leftClickedOnAHref: leftClickedOnAHref, + setupGotoLinks: setupGotoLinks, + toggleActiveState: toggleActiveState, + toggleViewLinkState: toggleViewLinkState + }; - var setupMenuItems = function (editor) { - editor.addMenuItem('openlink', { - text: 'Open link', - icon: 'newtab', - onclick: Actions.gotoSelectedLink(editor), - onPostRender: Actions.toggleViewLinkState(editor), - prependToContext: true - }); + var register = function (editor) { + editor.addCommand('mceLink', $_auu7ckf1jfuw8pj0.openDialog(editor)); + }; + var $_4bbs70f0jfuw8piz = { register: register }; - editor.addMenuItem('link', { - icon: 'link', - text: 'Link', - shortcut: 'Meta+K', - onclick: Actions.openDialog(editor), - stateSelector: 'a[href]', - context: 'insert', - prependToContext: true + var setup = function (editor) { + editor.addShortcut('Meta+K', '', $_auu7ckf1jfuw8pj0.openDialog(editor)); + }; + var $_7rlm6qfcjfuw8pjt = { setup: setup }; + + var setupButtons = function (editor) { + editor.addButton('link', { + active: false, + icon: 'link', + tooltip: 'Insert/edit link', + onclick: $_auu7ckf1jfuw8pj0.openDialog(editor), + onpostrender: $_auu7ckf1jfuw8pj0.toggleActiveState(editor) + }); + editor.addButton('unlink', { + active: false, + icon: 'unlink', + tooltip: 'Remove link', + onclick: $_fs5xf5f7jfuw8pjf.unlink(editor), + onpostrender: $_auu7ckf1jfuw8pj0.toggleActiveState(editor) + }); + if (editor.addContextToolbar) { + editor.addButton('openlink', { + icon: 'newtab', + tooltip: 'Open link', + onclick: $_auu7ckf1jfuw8pj0.gotoSelectedLink(editor) }); - }; - - var setupContextToolbars = function (editor) { - if (editor.addContextToolbar) { - editor.addContextToolbar( - Actions.leftClickedOnAHref(editor), - 'openlink | link unlink' - ); - } - }; + } + }; + var setupMenuItems = function (editor) { + editor.addMenuItem('openlink', { + text: 'Open link', + icon: 'newtab', + onclick: $_auu7ckf1jfuw8pj0.gotoSelectedLink(editor), + onPostRender: $_auu7ckf1jfuw8pj0.toggleViewLinkState(editor), + prependToContext: true + }); + editor.addMenuItem('link', { + icon: 'link', + text: 'Link', + shortcut: 'Meta+K', + onclick: $_auu7ckf1jfuw8pj0.openDialog(editor), + stateSelector: 'a[href]', + context: 'insert', + prependToContext: true + }); + editor.addMenuItem('unlink', { + icon: 'unlink', + text: 'Remove link', + onclick: $_fs5xf5f7jfuw8pjf.unlink(editor), + stateSelector: 'a[href]' + }); + }; + var setupContextToolbars = function (editor) { + if (editor.addContextToolbar) { + editor.addContextToolbar($_auu7ckf1jfuw8pj0.leftClickedOnAHref(editor), 'openlink | link unlink'); + } + }; + var $_dz7svyfdjfuw8pju = { + setupButtons: setupButtons, + setupMenuItems: setupMenuItems, + setupContextToolbars: setupContextToolbars + }; - return { - setupButtons: setupButtons, - setupMenuItems: setupMenuItems, - setupContextToolbars: setupContextToolbars - }; + global.add('link', function (editor) { + $_dz7svyfdjfuw8pju.setupButtons(editor); + $_dz7svyfdjfuw8pju.setupMenuItems(editor); + $_dz7svyfdjfuw8pju.setupContextToolbars(editor); + $_auu7ckf1jfuw8pj0.setupGotoLinks(editor); + $_4bbs70f0jfuw8piz.register(editor); + $_7rlm6qfcjfuw8pjt.setup(editor); + }); + function Plugin () { } -); -/** - * Plugin.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ -define( - 'tinymce.plugins.link.Plugin', - [ - 'tinymce.core.PluginManager', - 'tinymce.plugins.link.core.Actions', - 'tinymce.plugins.link.ui.Controls' - ], - function (PluginManager, Actions, Controls) { - PluginManager.add('link', function (editor) { - Controls.setupButtons(editor); - Controls.setupMenuItems(editor); - Controls.setupContextToolbars(editor); - Actions.setupGotoLinks(editor); - editor.addShortcut('Meta+K', '', Actions.openDialog(editor)); - editor.addCommand('mceLink', Actions.openDialog(editor)); - }); + return Plugin; - return function () { }; - } -); -dem('tinymce.plugins.link.Plugin')(); +}()); })(); diff --git a/src/wp-includes/js/tinymce/plugins/link/plugin.min.js b/src/wp-includes/js/tinymce/plugins/link/plugin.min.js index dcd9d4369f074..ebd4165e897ab 100644 --- a/src/wp-includes/js/tinymce/plugins/link/plugin.min.js +++ b/src/wp-includes/js/tinymce/plugins/link/plugin.min.js @@ -1 +1 @@ -!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i0},j=function(a){return!(/]+>[^<]+<\/a>$/.test(a)||a.indexOf("href=")==-1))},k=function(a){return a&&"FIGURE"===a.nodeName&&/\bimage\b/i.test(a.className)},l=function(a,c){return function(e){a.undoManager.transact(function(){var g=a.selection.getNode(),h=f(a,g),i={href:e.href,target:e.target?e.target:null,rel:e.rel?e.rel:null,"class":e["class"]?e["class"]:null,title:e.title?e.title:null};b.hasRelList(a.settings)||b.allowUnsafeLinkTarget(a.settings)!==!1||(i.rel=d(i.rel,"_blank"==i.target)),e.href===c.href&&(c.attach(),c={}),h?(a.focus(),e.hasOwnProperty("text")&&("innerText"in h?h.innerText=e.text:h.textContent=e.text),a.dom.setAttribs(h,i),a.selection.select(h),a.undoManager.add()):k(g)?o(a,g,i):e.hasOwnProperty("text")?a.insertContent(a.dom.createHTML("a",i,a.dom.encode(e.text))):a.execCommand("mceInsertLink",!1,i)})}},m=function(a){return function(){a.undoManager.transact(function(){var b=a.selection.getNode();k(b)?n(a,b):a.execCommand("unlink")})}},n=function(a,b){var c,d;d=a.dom.select("img",b)[0],d&&(c=a.dom.getParents(d,"a[href]",b)[0],c&&(c.parentNode.insertBefore(d,c),a.dom.remove(c)))},o=function(a,b,c){var d,e;e=a.dom.select("img",b)[0],e&&(d=a.dom.create("a",c),e.parentNode.insertBefore(d,e),d.appendChild(e))};return{link:l,unlink:m,isLink:h,hasLinks:i,isOnlyTextSelected:j,getAnchorElement:f,getAnchorText:g,toggleTargetRules:d}}),g("6",["a","b","c","8","9"],function(a,b,c,d,e){var f={},g=function(a,b){var d=e.getLinkList(a.settings);"string"==typeof d?c.send({url:d,success:function(c){b(a,JSON.parse(c))}}):"function"==typeof d?d(function(c){b(a,c)}):b(a,d)},h=function(a,c,d){var e=function(a,d){return d=d||[],b.each(a,function(a){var b={text:a.text||a.title};a.menu?b.menu=e(a.menu):(b.value=a.value,c&&c(b)),d.push(b)}),d};return e(a,d||[])},i=function(b,c,d){var e=b.selection.getRng();a.setEditorTimeout(b,function(){b.windowManager.confirm(c,function(a){b.selection.setRng(e),d(a)})})},j=function(a,c){var g,j,k,l,m,n,o,p,q,r,s,t={},u=a.selection,v=a.dom,w=function(a){var b=k.find("#text");(!b.value()||a.lastControl&&b.value()==a.lastControl.text())&&b.value(a.control.text()),k.find("#href").value(a.control.value())},x=function(c){var d=[];if(b.each(a.dom.select("a:not([href])"),function(a){var b=a.name||a.id;b&&d.push({text:b,value:"#"+b,selected:c.indexOf("#"+b)!=-1})}),d.length)return d.unshift({text:"None",value:""}),{name:"anchor",type:"listbox",label:"Anchors",values:d,onselect:w}},y=function(){j||!l||t.text||this.parent().parent().find("#text")[0].value(this.value())},z=function(c){var d=c.meta||{};n&&n.value(a.convertURL(this.value(),"href")),b.each(c.meta,function(a,b){var c=k.find("#"+b);"text"===b?0===j.length&&(c.value(a),t.text=a):c.value(a)}),d.attach&&(f={href:this.value(),attach:d.attach}),d.text||y.call(this)},A=function(a){a.meta=k.toJSON()};l=d.isOnlyTextSelected(u.getContent()),g=d.getAnchorElement(a),t.text=j=d.getAnchorText(a.selection,g),t.href=g?v.getAttrib(g,"href"):"",g?t.target=v.getAttrib(g,"target"):e.hasDefaultLinkTarget(a.settings)&&(t.target=e.getDefaultLinkTarget(a.settings)),(s=v.getAttrib(g,"rel"))&&(t.rel=s),(s=v.getAttrib(g,"class"))&&(t["class"]=s),(s=v.getAttrib(g,"title"))&&(t.title=s),l&&(m={name:"text",type:"textbox",size:40,label:"Text to display",onchange:function(){t.text=this.value()}}),c&&(n={type:"listbox",label:"Link list",values:h(c,function(b){b.value=a.convertURL(b.value||b.url,"href")},[{text:"None",value:""}]),onselect:w,value:a.convertURL(t.href,"href"),onPostRender:function(){n=this}}),e.shouldShowTargetList(a.settings)&&(void 0===e.getTargetList(a.settings)&&e.setTargetList(a,[{text:"None",value:""},{text:"New window",value:"_blank"}]),p={name:"target",type:"listbox",label:"Target",values:h(e.getTargetList(a.settings))}),e.hasRelList(a.settings)&&(o={name:"rel",type:"listbox",label:"Rel",values:h(e.getRelList(a.settings),function(b){e.allowUnsafeLinkTarget(a.settings)===!1&&(b.value=d.toggleTargetRules(b.value,"_blank"===t.target))})}),e.hasLinkClassList(a.settings)&&(q={name:"class",type:"listbox",label:"Class",values:h(e.getLinkClassList(a.settings),function(b){b.value&&(b.textStyle=function(){return a.formatter.getCssText({inline:"a",classes:[b.value]})})})}),e.shouldShowLinkTitle(a.settings)&&(r={name:"title",type:"textbox",label:"Title",value:t.title}),k=a.windowManager.open({title:"Insert link",data:t,body:[{name:"href",type:"filepicker",filetype:"file",size:40,autofocus:!0,label:"Url",onchange:z,onkeyup:y,onbeforecall:A},m,r,x(t.href),n,o,p,q],onSubmit:function(c){var g=e.assumeExternalTargets(a.settings),h=d.link(a,f),k=d.unlink(a),m=b.extend({},t,c.data),n=m.href;return n?(l&&m.text!==j||delete m.text,n.indexOf("@")>0&&n.indexOf("//")==-1&&n.indexOf("mailto:")==-1?void i(a,"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",function(a){a&&(m.href="mailto:"+n),h(m)}):g===!0&&!/^\w+:/i.test(n)||g===!1&&/^\s*www[\.|\d\.]/i.test(n)?void i(a,"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?",function(a){a&&(m.href="http://"+n),h(m)}):void h(m)):void k()}})},k=function(a){g(a,j)};return{open:k}}),g("e",["4"],function(a){return a("tinymce.dom.DOMUtils")}),g("f",["4"],function(a){return a("tinymce.Env")}),g("7",["e","f"],function(a,b){var c=function(a,b){document.body.appendChild(a),a.dispatchEvent(b),document.body.removeChild(a)},d=function(d){if(!b.ie||b.ie>10){var e=document.createElement("a");e.target="_blank",e.href=d,e.rel="noreferrer noopener";var f=document.createEvent("MouseEvents");f.initMouseEvent("click",!0,!0,window,0,0,0,0,0,!1,!1,!1,!1,0,null),c(e,f)}else{var g=window.open("","_blank");if(g){g.opener=null;var h=g.document;h.open(),h.write(''),h.close()}}};return{open:d}}),g("2",["5","6","7","8","9"],function(a,b,c,d,e){var f=function(a,b){return a.dom.getParent(b,"a[href]")},g=function(a){return f(a,a.selection.getStart())},h=function(a){var b=a.getAttribute("data-mce-href");return b?b:a.getAttribute("href")},i=function(a){var b=a.plugins.contextmenu;return!!b&&b.isContextMenuVisible()},j=function(a){return a.altKey===!0&&a.shiftKey===!1&&a.ctrlKey===!1&&a.metaKey===!1},k=function(a,b){if(b){var d=h(b);if(/^#/.test(d)){var e=a.$(d);e.length&&a.selection.scrollIntoView(e[0],!0)}else c.open(b.href)}},l=function(a){return function(){b.open(a)}},m=function(a){return function(){k(a,g(a))}},n=function(a){return function(b){var c,f,g;return!!(e.hasContextToolbar(a.settings)&&!i(a)&&d.isLink(b)&&(c=a.selection,f=c.getRng(),g=f.startContainer,3==g.nodeType&&c.isCollapsed()&&f.startOffset>0&&f.startOffset'),i.close()}}var r,a},A=tinymce.util.Tools.resolve("tinymce.util.Tools"),s=function(t,e){var n,o,i=["noopener"],r=t?t.split(/\s+/):[],a=function(t){return t.filter(function(t){return-1===A.inArray(i,t)})};return(r=e?(n=a(n=r)).length?n.concat(i):i:a(r)).length?(o=r,A.trim(o.sort().join(" "))):null},f=function(t,e){return e=e||t.selection.getNode(),m(e)?t.dom.select("a[href]",e)[0]:t.dom.getParent(e,"a[href]")},d=function(t){return t&&"A"===t.nodeName&&t.href},m=function(t){return t&&"FIGURE"===t.nodeName&&/\bimage\b/i.test(t.className)},v=function(t,e){var n,o;(o=t.dom.select("img",e)[0])&&(n=t.dom.getParents(o,"a[href]",e)[0])&&(n.parentNode.insertBefore(o,n),t.dom.remove(n))},g=function(t,e,n){var o,i;(i=t.dom.select("img",e)[0])&&(o=t.dom.create("a",n),i.parentNode.insertBefore(o,i),o.appendChild(i))},L=function(i,r){return function(o){i.undoManager.transact(function(){var t=i.selection.getNode(),e=f(i,t),n={href:o.href,target:o.target?o.target:null,rel:o.rel?o.rel:null,"class":o["class"]?o["class"]:null,title:o.title?o.title:null};C(i.settings)||!1!==N(i.settings)||(n.rel=s(n.rel,"_blank"===n.target)),o.href===r.href&&(r.attach(),r={}),e?(i.focus(),o.hasOwnProperty("text")&&("innerText"in e?e.innerText=o.text:e.textContent=o.text),i.dom.setAttribs(e,n),i.selection.select(e),i.undoManager.add()):m(t)?g(i,t,n):o.hasOwnProperty("text")?i.insertContent(i.dom.createHTML("a",n,i.dom.encode(o.text))):i.execCommand("mceInsertLink",!1,n)})}},P=function(e){return function(){e.undoManager.transact(function(){var t=e.selection.getNode();m(t)?v(e,t):e.execCommand("unlink")})}},h=d,x=function(t){return 0]+>[^<]+<\/a>$/.test(t)||-1===t.indexOf("href=")))},S=f,I=function(t,e){var n=e?e.innerText||e.textContent:t.getContent({format:"text"});return n.replace(/\uFEFF/g,"")},K=s,U=tinymce.util.Tools.resolve("tinymce.util.Delay"),D=tinymce.util.Tools.resolve("tinymce.util.XHR"),B={},F=function(t,o,e){var i=function(t,n){return n=n||[],A.each(t,function(t){var e={text:t.text||t.title};t.menu?e.menu=i(t.menu):(e.value=t.value,o&&o(e)),n.push(e)}),n};return i(t,e||[])},q=function(e,t,n){var o=e.selection.getRng();U.setEditorTimeout(e,function(){e.windowManager.confirm(t,function(t){e.selection.setRng(o),n(t)})})},V=function(a,t){var e,l,o,u,n,i,r,c,s,f,d,m={},v=a.selection,g=a.dom,h=function(t){var e=o.find("#text");(!e.value()||t.lastControl&&e.value()===t.lastControl.text())&&e.value(t.control.text()),o.find("#href").value(t.control.value())},x=function(){l||!u||m.text||this.parent().parent().find("#text")[0].value(this.value())};u=E(v.getContent()),e=S(a),m.text=l=I(a.selection,e),m.href=e?g.getAttrib(e,"href"):"",e?m.target=g.getAttrib(e,"target"):k(a.settings)&&(m.target=y(a.settings)),(d=g.getAttrib(e,"rel"))&&(m.rel=d),(d=g.getAttrib(e,"class"))&&(m["class"]=d),(d=g.getAttrib(e,"title"))&&(m.title=d),u&&(n={name:"text",type:"textbox",size:40,label:"Text to display",onchange:function(){m.text=this.value()}}),t&&(i={type:"listbox",label:"Link list",values:F(t,function(t){t.value=a.convertURL(t.value||t.url,"href")},[{text:"None",value:""}]),onselect:h,value:a.convertURL(m.href,"href"),onPostRender:function(){i=this}}),w(a.settings)&&(b(a.settings)===undefined&&_(a,[{text:"None",value:""},{text:"New window",value:"_blank"}]),c={name:"target",type:"listbox",label:"Target",values:F(b(a.settings))}),C(a.settings)&&(r={name:"rel",type:"listbox",label:"Rel",values:F(T(a.settings),function(t){!1===N(a.settings)&&(t.value=K(t.value,"_blank"===m.target))})}),O(a.settings)&&(s={name:"class",type:"listbox",label:"Class",values:F(M(a.settings),function(t){t.value&&(t.textStyle=function(){return a.formatter.getCssText({inline:"a",classes:[t.value]})})})}),R(a.settings)&&(f={name:"title",type:"textbox",label:"Title",value:m.title}),o=a.windowManager.open({title:"Insert link",data:m,body:[{name:"href",type:"filepicker",filetype:"file",size:40,autofocus:!0,label:"Url",onchange:function(t){var e=t.meta||{};i&&i.value(a.convertURL(this.value(),"href")),A.each(t.meta,function(t,e){var n=o.find("#"+e);"text"===e?0===l.length&&(n.value(t),m.text=t):n.value(t)}),e.attach&&(B={href:this.value(),attach:e.attach}),e.text||x.call(this)},onkeyup:x,onpaste:x,onbeforecall:function(t){t.meta=o.toJSON()}},n,f,function(n){var o=[];if(A.each(a.dom.select("a:not([href])"),function(t){var e=t.name||t.id;e&&o.push({text:e,value:"#"+e,selected:-1!==n.indexOf("#"+e)})}),o.length)return o.unshift({text:"None",value:""}),{name:"anchor",type:"listbox",label:"Anchors",values:o,onselect:h}}(m.href),i,r,c,s],onSubmit:function(t){var e=p(a.settings),n=L(a,B),o=P(a),i=A.extend({},m,t.data),r=i.href;r?(u&&i.text!==l||delete i.text,0 {dependencies, definition, instance (possibly undefined)} + var global = tinymce.util.Tools.resolve('tinymce.PluginManager'); -// Used when there is no 'main' module. -// The name is probably (hopefully) unique so minification removes for releases. -var register_3795 = function (id) { - var module = dem(id); - var fragments = id.split('.'); - var target = Function('return this;')(); - for (var i = 0; i < fragments.length - 1; ++i) { - if (target[fragments[i]] === undefined) - target[fragments[i]] = {}; - target = target[fragments[i]]; - } - target[fragments[fragments.length - 1]] = module; -}; - -var instantiate = function (id) { - var actual = defs[id]; - var dependencies = actual.deps; - var definition = actual.defn; - var len = dependencies.length; - var instances = new Array(len); - for (var i = 0; i < len; ++i) - instances[i] = dem(dependencies[i]); - var defResult = definition.apply(null, instances); - if (defResult === undefined) - throw 'module [' + id + '] returned undefined'; - actual.instance = defResult; -}; - -var def = function (id, dependencies, definition) { - if (typeof id !== 'string') - throw 'module id must be a string'; - else if (dependencies === undefined) - throw 'no dependencies for ' + id; - else if (definition === undefined) - throw 'no definition function for ' + id; - defs[id] = { - deps: dependencies, - defn: definition, - instance: undefined - }; -}; - -var dem = function (id) { - var actual = defs[id]; - if (actual === undefined) - throw 'module [' + id + '] was undefined'; - else if (actual.instance === undefined) - instantiate(id); - return actual.instance; -}; - -var req = function (ids, callback) { - var len = ids.length; - var instances = new Array(len); - for (var i = 0; i < len; ++i) - instances.push(dem(ids[i])); - callback.apply(null, callback); -}; - -var ephox = {}; - -ephox.bolt = { - module: { - api: { - define: def, - require: req, - demand: dem - } - } -}; - -var define = def; -var require = req; -var demand = dem; -// this helps with minificiation when using a lot of global references -var defineGlobal = function (id, ref) { - define(id, [], function () { return ref; }); -}; -/*jsc -["tinymce.plugins.lists.Plugin","tinymce.core.PluginManager","tinymce.core.util.Tools","tinymce.core.util.VK","tinymce.plugins.lists.actions.Indent","tinymce.plugins.lists.actions.Outdent","tinymce.plugins.lists.actions.ToggleList","tinymce.plugins.lists.core.Delete","tinymce.plugins.lists.core.NodeType","tinymce.plugins.lists.core.Selection","global!tinymce.util.Tools.resolve","tinymce.core.dom.DOMUtils","tinymce.plugins.lists.core.Bookmark","tinymce.core.dom.DomQuery","tinymce.plugins.lists.core.NormalizeLists","tinymce.plugins.lists.core.SplitList","tinymce.plugins.lists.core.TextBlock","tinymce.core.dom.BookmarkManager","tinymce.core.dom.RangeUtils","tinymce.core.dom.TreeWalker","tinymce.plugins.lists.core.Range","tinymce.core.Env"] -jsc*/ -defineGlobal("global!tinymce.util.Tools.resolve", tinymce.util.Tools.resolve); -/** - * ResolveGlobal.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.core.PluginManager', - [ - 'global!tinymce.util.Tools.resolve' - ], - function (resolve) { - return resolve('tinymce.PluginManager'); - } -); - -/** - * ResolveGlobal.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.core.util.Tools', - [ - 'global!tinymce.util.Tools.resolve' - ], - function (resolve) { - return resolve('tinymce.util.Tools'); - } -); - -/** - * ResolveGlobal.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.core.util.VK', - [ - 'global!tinymce.util.Tools.resolve' - ], - function (resolve) { - return resolve('tinymce.util.VK'); - } -); - -/** - * ResolveGlobal.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.core.dom.DOMUtils', - [ - 'global!tinymce.util.Tools.resolve' - ], - function (resolve) { - return resolve('tinymce.dom.DOMUtils'); - } -); - -/** - * NodeType.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.plugins.lists.core.NodeType', - [ - ], - function () { - var isTextNode = function (node) { - return node && node.nodeType === 3; - }; - - var isListNode = function (node) { - return node && (/^(OL|UL|DL)$/).test(node.nodeName); - }; - - var isListItemNode = function (node) { - return node && /^(LI|DT|DD)$/.test(node.nodeName); - }; - - var isBr = function (node) { - return node && node.nodeName === 'BR'; - }; - - var isFirstChild = function (node) { - return node.parentNode.firstChild === node; - }; - - var isLastChild = function (node) { - return node.parentNode.lastChild === node; - }; - - var isTextBlock = function (editor, node) { - return node && !!editor.schema.getTextBlockElements()[node.nodeName]; - }; - - var isBlock = function (node, blockElements) { - return node && node.nodeName in blockElements; - }; - - var isBogusBr = function (dom, node) { - if (!isBr(node)) { - return false; - } - - if (dom.isBlock(node.nextSibling) && !isBr(node.previousSibling)) { - return true; - } - - return false; - }; - - var isEmpty = function (dom, elm, keepBookmarks) { - var empty = dom.isEmpty(elm); - - if (keepBookmarks && dom.select('span[data-mce-type=bookmark]', elm).length > 0) { - return false; - } - - return empty; - }; - - var isChildOfBody = function (dom, elm) { - return dom.isChildOf(elm, dom.getRoot()); - }; - - return { - isTextNode: isTextNode, - isListNode: isListNode, - isListItemNode: isListItemNode, - isBr: isBr, - isFirstChild: isFirstChild, - isLastChild: isLastChild, - isTextBlock: isTextBlock, - isBlock: isBlock, - isBogusBr: isBogusBr, - isEmpty: isEmpty, - isChildOfBody: isChildOfBody - }; - } -); - - -/** - * ResolveGlobal.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.core.dom.RangeUtils', - [ - 'global!tinymce.util.Tools.resolve' - ], - function (resolve) { - return resolve('tinymce.dom.RangeUtils'); - } -); - -/** - * Range.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.plugins.lists.core.Range', - [ - 'tinymce.core.dom.RangeUtils', - 'tinymce.plugins.lists.core.NodeType' - ], - function (RangeUtils, NodeType) { - var getNormalizedEndPoint = function (container, offset) { - var node = RangeUtils.getNode(container, offset); - - if (NodeType.isListItemNode(container) && NodeType.isTextNode(node)) { - var textNodeOffset = offset >= container.childNodes.length ? node.data.length : 0; - return { container: node, offset: textNodeOffset }; - } - - return { container: container, offset: offset }; - }; - - var normalizeRange = function (rng) { - var outRng = rng.cloneRange(); - - var rangeStart = getNormalizedEndPoint(rng.startContainer, rng.startOffset); - outRng.setStart(rangeStart.container, rangeStart.offset); - - var rangeEnd = getNormalizedEndPoint(rng.endContainer, rng.endOffset); - outRng.setEnd(rangeEnd.container, rangeEnd.offset); - - return outRng; - }; - - return { - getNormalizedEndPoint: getNormalizedEndPoint, - normalizeRange: normalizeRange - }; - } -); - - -/** - * Bookmark.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.plugins.lists.core.Bookmark', - [ - 'tinymce.core.dom.DOMUtils', - 'tinymce.plugins.lists.core.NodeType', - 'tinymce.plugins.lists.core.Range' - ], - function (DOMUtils, NodeType, Range) { - var DOM = DOMUtils.DOM; - - /** - * Returns a range bookmark. This will convert indexed bookmarks into temporary span elements with - * index 0 so that they can be restored properly after the DOM has been modified. Text bookmarks will not have spans - * added to them since they can be restored after a dom operation. - * - * So this:

||

- * becomes:

||

- * - * @param {DOMRange} rng DOM Range to get bookmark on. - * @return {Object} Bookmark object. - */ - var createBookmark = function (rng) { - var bookmark = {}; - - var setupEndPoint = function (start) { - var offsetNode, container, offset; - - container = rng[start ? 'startContainer' : 'endContainer']; - offset = rng[start ? 'startOffset' : 'endOffset']; - - if (container.nodeType === 1) { - offsetNode = DOM.create('span', { 'data-mce-type': 'bookmark' }); - - if (container.hasChildNodes()) { - offset = Math.min(offset, container.childNodes.length - 1); - - if (start) { - container.insertBefore(offsetNode, container.childNodes[offset]); - } else { - DOM.insertAfter(offsetNode, container.childNodes[offset]); - } - } else { - container.appendChild(offsetNode); - } - - container = offsetNode; - offset = 0; - } - - bookmark[start ? 'startContainer' : 'endContainer'] = container; - bookmark[start ? 'startOffset' : 'endOffset'] = offset; - }; - - setupEndPoint(true); - - if (!rng.collapsed) { - setupEndPoint(); - } - - return bookmark; - }; - - var resolveBookmark = function (bookmark) { - function restoreEndPoint(start) { - var container, offset, node; - - var nodeIndex = function (container) { - var node = container.parentNode.firstChild, idx = 0; - - while (node) { - if (node === container) { - return idx; - } - - // Skip data-mce-type=bookmark nodes - if (node.nodeType !== 1 || node.getAttribute('data-mce-type') !== 'bookmark') { - idx++; - } - - node = node.nextSibling; - } - - return -1; - }; - - container = node = bookmark[start ? 'startContainer' : 'endContainer']; - offset = bookmark[start ? 'startOffset' : 'endOffset']; - - if (!container) { - return; - } - - if (container.nodeType === 1) { - offset = nodeIndex(container); - container = container.parentNode; - DOM.remove(node); - } - - bookmark[start ? 'startContainer' : 'endContainer'] = container; - bookmark[start ? 'startOffset' : 'endOffset'] = offset; - } - - restoreEndPoint(true); - restoreEndPoint(); - - var rng = DOM.createRng(); - - rng.setStart(bookmark.startContainer, bookmark.startOffset); - - if (bookmark.endContainer) { - rng.setEnd(bookmark.endContainer, bookmark.endOffset); - } - - return Range.normalizeRange(rng); - }; - - return { - createBookmark: createBookmark, - resolveBookmark: resolveBookmark - }; - } -); - - -/** - * ResolveGlobal.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.core.dom.DomQuery', - [ - 'global!tinymce.util.Tools.resolve' - ], - function (resolve) { - return resolve('tinymce.dom.DomQuery'); - } -); - -/** - * Selection.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.plugins.lists.core.Selection', - [ - 'tinymce.core.dom.DomQuery', - 'tinymce.core.util.Tools', - 'tinymce.plugins.lists.core.NodeType' - ], - function (DomQuery, Tools, NodeType) { - var getParentList = function (editor) { - return editor.dom.getParent(editor.selection.getStart(true), 'OL,UL,DL'); - }; - - var getSelectedSubLists = function (editor) { - var parentList = getParentList(editor); - return Tools.grep(editor.selection.getSelectedBlocks(), function (elm) { - return NodeType.isListNode(elm) && parentList !== elm; - }); - }; - - var findParentListItemsNodes = function (editor, elms) { - var listItemsElms = Tools.map(elms, function (elm) { - var parentLi = editor.dom.getParent(elm, 'li,dd,dt', editor.getBody()); - - return parentLi ? parentLi : elm; - }); - - return DomQuery.unique(listItemsElms); - }; - - var getSelectedListItems = function (editor) { - var selectedBlocks = editor.selection.getSelectedBlocks(); - return Tools.grep(findParentListItemsNodes(editor, selectedBlocks), function (block) { - return NodeType.isListItemNode(block); - }); - }; - - return { - getParentList: getParentList, - getSelectedSubLists: getSelectedSubLists, - getSelectedListItems: getSelectedListItems - }; - } -); - - -/** - * Indent.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.plugins.lists.actions.Indent', - [ - 'tinymce.core.dom.DOMUtils', - 'tinymce.plugins.lists.core.Bookmark', - 'tinymce.plugins.lists.core.NodeType', - 'tinymce.plugins.lists.core.Selection' - ], - function (DOMUtils, Bookmark, NodeType, Selection) { - var DOM = DOMUtils.DOM; - - var mergeLists = function (from, to) { - var node; - - if (NodeType.isListNode(from)) { - while ((node = from.firstChild)) { - to.appendChild(node); - } - - DOM.remove(from); - } - }; - - var indent = function (li) { - var sibling, newList, listStyle; - - if (li.nodeName === 'DT') { - DOM.rename(li, 'DD'); - return true; - } - - sibling = li.previousSibling; - - if (sibling && NodeType.isListNode(sibling)) { - sibling.appendChild(li); - return true; - } - - if (sibling && sibling.nodeName === 'LI' && NodeType.isListNode(sibling.lastChild)) { - sibling.lastChild.appendChild(li); - mergeLists(li.lastChild, sibling.lastChild); - return true; - } - - sibling = li.nextSibling; - - if (sibling && NodeType.isListNode(sibling)) { - sibling.insertBefore(li, sibling.firstChild); - return true; - } - - /*if (sibling && sibling.nodeName === 'LI' && isListNode(li.lastChild)) { - return false; - }*/ - - sibling = li.previousSibling; - if (sibling && sibling.nodeName === 'LI') { - newList = DOM.create(li.parentNode.nodeName); - listStyle = DOM.getStyle(li.parentNode, 'listStyleType'); - if (listStyle) { - DOM.setStyle(newList, 'listStyleType', listStyle); - } - sibling.appendChild(newList); - newList.appendChild(li); - mergeLists(li.lastChild, newList); - return true; - } - - return false; - }; - - var indentSelection = function (editor) { - var listElements = Selection.getSelectedListItems(editor); - - if (listElements.length) { - var bookmark = Bookmark.createBookmark(editor.selection.getRng(true)); - - for (var i = 0; i < listElements.length; i++) { - if (!indent(listElements[i]) && i === 0) { - break; - } - } - - editor.selection.setRng(Bookmark.resolveBookmark(bookmark)); - editor.nodeChanged(); - - return true; - } - }; - - return { - indentSelection: indentSelection - }; - } -); - - -/** - * NormalizeLists.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.plugins.lists.core.NormalizeLists', - [ - 'tinymce.core.dom.DOMUtils', - 'tinymce.core.util.Tools', - 'tinymce.plugins.lists.core.NodeType' - ], - function (DOMUtils, Tools, NodeType) { - var DOM = DOMUtils.DOM; - - var normalizeList = function (dom, ul) { - var sibling, parentNode = ul.parentNode; - - // Move UL/OL to previous LI if it's the only child of a LI - if (parentNode.nodeName === 'LI' && parentNode.firstChild === ul) { - sibling = parentNode.previousSibling; - if (sibling && sibling.nodeName === 'LI') { - sibling.appendChild(ul); - - if (NodeType.isEmpty(dom, parentNode)) { - DOM.remove(parentNode); - } - } else { - DOM.setStyle(parentNode, 'listStyleType', 'none'); - } - } - - // Append OL/UL to previous LI if it's in a parent OL/UL i.e. old HTML4 - if (NodeType.isListNode(parentNode)) { - sibling = parentNode.previousSibling; - if (sibling && sibling.nodeName === 'LI') { - sibling.appendChild(ul); - } - } - }; - - var normalizeLists = function (dom, element) { - Tools.each(Tools.grep(dom.select('ol,ul', element)), function (ul) { - normalizeList(dom, ul); - }); - }; - - return { - normalizeList: normalizeList, - normalizeLists: normalizeLists - }; - } -); - - -/** - * ResolveGlobal.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.core.Env', - [ - 'global!tinymce.util.Tools.resolve' - ], - function (resolve) { - return resolve('tinymce.Env'); - } -); - -/** - * TextBlock.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.plugins.lists.core.TextBlock', - [ - 'tinymce.core.dom.DOMUtils', - 'tinymce.core.Env', - 'tinymce.plugins.lists.core.NodeType' - ], - function (DOMUtils, Env, NodeType) { - var DOM = DOMUtils.DOM; - - var createNewTextBlock = function (editor, contentNode, blockName) { - var node, textBlock, fragment = DOM.createFragment(), hasContentNode; - var blockElements = editor.schema.getBlockElements(); - - if (editor.settings.forced_root_block) { - blockName = blockName || editor.settings.forced_root_block; - } - - if (blockName) { - textBlock = DOM.create(blockName); - - if (textBlock.tagName === editor.settings.forced_root_block) { - DOM.setAttribs(textBlock, editor.settings.forced_root_block_attrs); - } - - if (!NodeType.isBlock(contentNode.firstChild, blockElements)) { - fragment.appendChild(textBlock); - } - } - - if (contentNode) { - while ((node = contentNode.firstChild)) { - var nodeName = node.nodeName; - - if (!hasContentNode && (nodeName !== 'SPAN' || node.getAttribute('data-mce-type') !== 'bookmark')) { - hasContentNode = true; - } - - if (NodeType.isBlock(node, blockElements)) { - fragment.appendChild(node); - textBlock = null; - } else { - if (blockName) { - if (!textBlock) { - textBlock = DOM.create(blockName); - fragment.appendChild(textBlock); - } - - textBlock.appendChild(node); - } else { - fragment.appendChild(node); - } - } - } - } - - if (!editor.settings.forced_root_block) { - fragment.appendChild(DOM.create('br')); - } else { - // BR is needed in empty blocks on non IE browsers - if (!hasContentNode && (!Env.ie || Env.ie > 10)) { - textBlock.appendChild(DOM.create('br', { 'data-mce-bogus': '1' })); - } - } - - return fragment; - }; - - return { - createNewTextBlock: createNewTextBlock - }; - } -); - -/** - * SplitList.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.plugins.lists.core.SplitList', - [ - 'tinymce.core.dom.DOMUtils', - 'tinymce.plugins.lists.core.NodeType', - 'tinymce.plugins.lists.core.TextBlock', - 'tinymce.core.util.Tools' - ], - function (DOMUtils, NodeType, TextBlock, Tools) { - var DOM = DOMUtils.DOM; - - var splitList = function (editor, ul, li, newBlock) { - var tmpRng, fragment, bookmarks, node; - - var removeAndKeepBookmarks = function (targetNode) { - Tools.each(bookmarks, function (node) { - targetNode.parentNode.insertBefore(node, li.parentNode); - }); - - DOM.remove(targetNode); - }; - - bookmarks = DOM.select('span[data-mce-type="bookmark"]', ul); - newBlock = newBlock || TextBlock.createNewTextBlock(editor, li); - tmpRng = DOM.createRng(); - tmpRng.setStartAfter(li); - tmpRng.setEndAfter(ul); - fragment = tmpRng.extractContents(); - - for (node = fragment.firstChild; node; node = node.firstChild) { - if (node.nodeName === 'LI' && editor.dom.isEmpty(node)) { - DOM.remove(node); - break; - } - } - - if (!editor.dom.isEmpty(fragment)) { - DOM.insertAfter(fragment, ul); - } - - DOM.insertAfter(newBlock, ul); - - if (NodeType.isEmpty(editor.dom, li.parentNode)) { - removeAndKeepBookmarks(li.parentNode); - } - - DOM.remove(li); - - if (NodeType.isEmpty(editor.dom, ul)) { - DOM.remove(ul); - } - }; - - return { - splitList: splitList - }; - } -); - - -/** - * Outdent.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.plugins.lists.actions.Outdent', - [ - 'tinymce.core.dom.DOMUtils', - 'tinymce.plugins.lists.core.Bookmark', - 'tinymce.plugins.lists.core.NodeType', - 'tinymce.plugins.lists.core.NormalizeLists', - 'tinymce.plugins.lists.core.Selection', - 'tinymce.plugins.lists.core.SplitList', - 'tinymce.plugins.lists.core.TextBlock' - ], - function (DOMUtils, Bookmark, NodeType, NormalizeLists, Selection, SplitList, TextBlock) { - var DOM = DOMUtils.DOM; - - var removeEmptyLi = function (dom, li) { - if (NodeType.isEmpty(dom, li)) { - DOM.remove(li); - } - }; - - var outdent = function (editor, li) { - var ul = li.parentNode, ulParent = ul.parentNode, newBlock; - - if (ul === editor.getBody()) { - return true; - } - - if (li.nodeName === 'DD') { - DOM.rename(li, 'DT'); - return true; - } - - if (NodeType.isFirstChild(li) && NodeType.isLastChild(li)) { - if (ulParent.nodeName === "LI") { - DOM.insertAfter(li, ulParent); - removeEmptyLi(editor.dom, ulParent); - DOM.remove(ul); - } else if (NodeType.isListNode(ulParent)) { - DOM.remove(ul, true); - } else { - ulParent.insertBefore(TextBlock.createNewTextBlock(editor, li), ul); - DOM.remove(ul); - } - - return true; - } else if (NodeType.isFirstChild(li)) { - if (ulParent.nodeName === "LI") { - DOM.insertAfter(li, ulParent); - li.appendChild(ul); - removeEmptyLi(editor.dom, ulParent); - } else if (NodeType.isListNode(ulParent)) { - ulParent.insertBefore(li, ul); - } else { - ulParent.insertBefore(TextBlock.createNewTextBlock(editor, li), ul); - DOM.remove(li); - } - - return true; - } else if (NodeType.isLastChild(li)) { - if (ulParent.nodeName === "LI") { - DOM.insertAfter(li, ulParent); - } else if (NodeType.isListNode(ulParent)) { - DOM.insertAfter(li, ul); - } else { - DOM.insertAfter(TextBlock.createNewTextBlock(editor, li), ul); - DOM.remove(li); - } - - return true; - } - - if (ulParent.nodeName === 'LI') { - ul = ulParent; - newBlock = TextBlock.createNewTextBlock(editor, li, 'LI'); - } else if (NodeType.isListNode(ulParent)) { - newBlock = TextBlock.createNewTextBlock(editor, li, 'LI'); - } else { - newBlock = TextBlock.createNewTextBlock(editor, li); - } - - SplitList.splitList(editor, ul, li, newBlock); - NormalizeLists.normalizeLists(editor.dom, ul.parentNode); - - return true; - }; + var global$1 = tinymce.util.Tools.resolve('tinymce.dom.RangeUtils'); - var outdentSelection = function (editor) { - var listElements = Selection.getSelectedListItems(editor); + var global$2 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker'); - if (listElements.length) { - var bookmark = Bookmark.createBookmark(editor.selection.getRng(true)); - var i, y, root = editor.getBody(); + var global$3 = tinymce.util.Tools.resolve('tinymce.util.VK'); - i = listElements.length; - while (i--) { - var node = listElements[i].parentNode; + var global$4 = tinymce.util.Tools.resolve('tinymce.dom.BookmarkManager'); - while (node && node !== root) { - y = listElements.length; - while (y--) { - if (listElements[y] === node) { - listElements.splice(i, 1); - break; - } - } - - node = node.parentNode; - } - } + var global$5 = tinymce.util.Tools.resolve('tinymce.util.Tools'); - for (i = 0; i < listElements.length; i++) { - if (!outdent(editor, listElements[i]) && i === 0) { - break; - } - } + var global$6 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils'); - editor.selection.setRng(Bookmark.resolveBookmark(bookmark)); - editor.nodeChanged(); - - return true; - } - }; + var isTextNode = function (node) { + return node && node.nodeType === 3; + }; + var isListNode = function (node) { + return node && /^(OL|UL|DL)$/.test(node.nodeName); + }; + var isListItemNode = function (node) { + return node && /^(LI|DT|DD)$/.test(node.nodeName); + }; + var isTableCellNode = function (node) { + return node && /^(TH|TD)$/.test(node.nodeName); + }; + var isBr = function (node) { + return node && node.nodeName === 'BR'; + }; + var isFirstChild = function (node) { + return node.parentNode.firstChild === node; + }; + var isLastChild = function (node) { + return node.parentNode.lastChild === node; + }; + var isTextBlock = function (editor, node) { + return node && !!editor.schema.getTextBlockElements()[node.nodeName]; + }; + var isBlock = function (node, blockElements) { + return node && node.nodeName in blockElements; + }; + var isBogusBr = function (dom, node) { + if (!isBr(node)) { + return false; + } + if (dom.isBlock(node.nextSibling) && !isBr(node.previousSibling)) { + return true; + } + return false; + }; + var isEmpty = function (dom, elm, keepBookmarks) { + var empty = dom.isEmpty(elm); + if (keepBookmarks && dom.select('span[data-mce-type=bookmark]', elm).length > 0) { + return false; + } + return empty; + }; + var isChildOfBody = function (dom, elm) { + return dom.isChildOf(elm, dom.getRoot()); + }; + var $_fmlqy7fsjfuw8plr = { + isTextNode: isTextNode, + isListNode: isListNode, + isListItemNode: isListItemNode, + isTableCellNode: isTableCellNode, + isBr: isBr, + isFirstChild: isFirstChild, + isLastChild: isLastChild, + isTextBlock: isTextBlock, + isBlock: isBlock, + isBogusBr: isBogusBr, + isEmpty: isEmpty, + isChildOfBody: isChildOfBody + }; + var getNormalizedEndPoint = function (container, offset) { + var node = global$1.getNode(container, offset); + if ($_fmlqy7fsjfuw8plr.isListItemNode(container) && $_fmlqy7fsjfuw8plr.isTextNode(node)) { + var textNodeOffset = offset >= container.childNodes.length ? node.data.length : 0; + return { + container: node, + offset: textNodeOffset + }; + } return { - outdent: outdent, - outdentSelection: outdentSelection + container: container, + offset: offset }; - } -); - - -/** - * ResolveGlobal.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.core.dom.BookmarkManager', - [ - 'global!tinymce.util.Tools.resolve' - ], - function (resolve) { - return resolve('tinymce.dom.BookmarkManager'); - } -); - -/** - * ToggleList.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.plugins.lists.actions.ToggleList', - [ - 'tinymce.core.dom.BookmarkManager', - 'tinymce.core.util.Tools', - 'tinymce.plugins.lists.actions.Outdent', - 'tinymce.plugins.lists.core.Bookmark', - 'tinymce.plugins.lists.core.NodeType', - 'tinymce.plugins.lists.core.NormalizeLists', - 'tinymce.plugins.lists.core.Selection', - 'tinymce.plugins.lists.core.SplitList' - ], - function (BookmarkManager, Tools, Outdent, Bookmark, NodeType, NormalizeLists, Selection, SplitList) { - var updateListStyle = function (dom, el, detail) { - var type = detail['list-style-type'] ? detail['list-style-type'] : null; - dom.setStyle(el, 'list-style-type', type); - }; - - var setAttribs = function (elm, attrs) { - Tools.each(attrs, function (value, key) { - elm.setAttribute(key, value); - }); - }; - - var updateListAttrs = function (dom, el, detail) { - setAttribs(el, detail['list-attributes']); - Tools.each(dom.select('li', el), function (li) { - setAttribs(li, detail['list-item-attributes']); - }); - }; - - var updateListWithDetails = function (dom, el, detail) { - updateListStyle(dom, el, detail); - updateListAttrs(dom, el, detail); - }; - - var getEndPointNode = function (editor, rng, start) { - var container, offset, root = editor.getBody(); + }; + var normalizeRange = function (rng) { + var outRng = rng.cloneRange(); + var rangeStart = getNormalizedEndPoint(rng.startContainer, rng.startOffset); + outRng.setStart(rangeStart.container, rangeStart.offset); + var rangeEnd = getNormalizedEndPoint(rng.endContainer, rng.endOffset); + outRng.setEnd(rangeEnd.container, rangeEnd.offset); + return outRng; + }; + var $_14fh94frjfuw8plp = { + getNormalizedEndPoint: getNormalizedEndPoint, + normalizeRange: normalizeRange + }; + var DOM = global$6.DOM; + var createBookmark = function (rng) { + var bookmark = {}; + var setupEndPoint = function (start) { + var offsetNode, container, offset; container = rng[start ? 'startContainer' : 'endContainer']; offset = rng[start ? 'startOffset' : 'endOffset']; - - // Resolve node index if (container.nodeType === 1) { - container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container; - } - - while (container.parentNode !== root) { - if (NodeType.isTextBlock(editor, container)) { - return container; - } - - if (/^(TD|TH)$/.test(container.parentNode.nodeName)) { - return container; + offsetNode = DOM.create('span', { 'data-mce-type': 'bookmark' }); + if (container.hasChildNodes()) { + offset = Math.min(offset, container.childNodes.length - 1); + if (start) { + container.insertBefore(offsetNode, container.childNodes[offset]); + } else { + DOM.insertAfter(offsetNode, container.childNodes[offset]); + } + } else { + container.appendChild(offsetNode); } - - container = container.parentNode; + container = offsetNode; + offset = 0; } - - return container; + bookmark[start ? 'startContainer' : 'endContainer'] = container; + bookmark[start ? 'startOffset' : 'endOffset'] = offset; }; - - var getSelectedTextBlocks = function (editor, rng) { - var textBlocks = [], root = editor.getBody(), dom = editor.dom; - - var startNode = getEndPointNode(editor, rng, true); - var endNode = getEndPointNode(editor, rng, false); - var block, siblings = []; - - for (var node = startNode; node; node = node.nextSibling) { - siblings.push(node); - - if (node === endNode) { - break; - } - } - - Tools.each(siblings, function (node) { - if (NodeType.isTextBlock(editor, node)) { - textBlocks.push(node); - block = null; - return; - } - - if (dom.isBlock(node) || NodeType.isBr(node)) { - if (NodeType.isBr(node)) { - dom.remove(node); + setupEndPoint(true); + if (!rng.collapsed) { + setupEndPoint(); + } + return bookmark; + }; + var resolveBookmark = function (bookmark) { + function restoreEndPoint(start) { + var container, offset, node; + var nodeIndex = function (container) { + var node = container.parentNode.firstChild, idx = 0; + while (node) { + if (node === container) { + return idx; } - - block = null; - return; - } - - var nextSibling = node.nextSibling; - if (BookmarkManager.isBookmarkNode(node)) { - if (NodeType.isTextBlock(editor, nextSibling) || (!nextSibling && node.parentNode === root)) { - block = null; - return; + if (node.nodeType !== 1 || node.getAttribute('data-mce-type') !== 'bookmark') { + idx++; } + node = node.nextSibling; } - - if (!block) { - block = dom.create('p'); - node.parentNode.insertBefore(block, node); - textBlocks.push(block); - } - - block.appendChild(node); - }); - - return textBlocks; - }; - - var applyList = function (editor, listName, detail) { - var rng = editor.selection.getRng(true), bookmark, listItemName = 'LI'; - var dom = editor.dom; - - detail = detail ? detail : {}; - - if (dom.getContentEditable(editor.selection.getNode()) === "false") { + return -1; + }; + container = node = bookmark[start ? 'startContainer' : 'endContainer']; + offset = bookmark[start ? 'startOffset' : 'endOffset']; + if (!container) { return; } - - listName = listName.toUpperCase(); - - if (listName === 'DL') { - listItemName = 'DT'; + if (container.nodeType === 1) { + offset = nodeIndex(container); + container = container.parentNode; + DOM.remove(node); + if (!container.hasChildNodes() && DOM.isBlock(container)) { + container.appendChild(DOM.create('br')); + } } + bookmark[start ? 'startContainer' : 'endContainer'] = container; + bookmark[start ? 'startOffset' : 'endOffset'] = offset; + } + restoreEndPoint(true); + restoreEndPoint(); + var rng = DOM.createRng(); + rng.setStart(bookmark.startContainer, bookmark.startOffset); + if (bookmark.endContainer) { + rng.setEnd(bookmark.endContainer, bookmark.endOffset); + } + return $_14fh94frjfuw8plp.normalizeRange(rng); + }; + var $_3byghwfqjfuw8pln = { + createBookmark: createBookmark, + resolveBookmark: resolveBookmark + }; - bookmark = Bookmark.createBookmark(rng); - - Tools.each(getSelectedTextBlocks(editor, rng), function (block) { - var listBlock, sibling; - - var hasCompatibleStyle = function (sib) { - var sibStyle = dom.getStyle(sib, 'list-style-type'); - var detailStyle = detail ? detail['list-style-type'] : ''; - - detailStyle = detailStyle === null ? '' : detailStyle; - - return sibStyle === detailStyle; - }; - - sibling = block.previousSibling; - if (sibling && NodeType.isListNode(sibling) && sibling.nodeName === listName && hasCompatibleStyle(sibling)) { - listBlock = sibling; - block = dom.rename(block, listItemName); - sibling.appendChild(block); - } else { - listBlock = dom.create(listName); - block.parentNode.insertBefore(listBlock, block); - listBlock.appendChild(block); - block = dom.rename(block, listItemName); + var DOM$1 = global$6.DOM; + var normalizeList = function (dom, ul) { + var sibling; + var parentNode = ul.parentNode; + if (parentNode.nodeName === 'LI' && parentNode.firstChild === ul) { + sibling = parentNode.previousSibling; + if (sibling && sibling.nodeName === 'LI') { + sibling.appendChild(ul); + if ($_fmlqy7fsjfuw8plr.isEmpty(dom, parentNode)) { + DOM$1.remove(parentNode); } + } else { + DOM$1.setStyle(parentNode, 'listStyleType', 'none'); + } + } + if ($_fmlqy7fsjfuw8plr.isListNode(parentNode)) { + sibling = parentNode.previousSibling; + if (sibling && sibling.nodeName === 'LI') { + sibling.appendChild(ul); + } + } + }; + var normalizeLists = function (dom, element) { + global$5.each(global$5.grep(dom.select('ol,ul', element)), function (ul) { + normalizeList(dom, ul); + }); + }; + var $_7p90zmftjfuw8plu = { + normalizeList: normalizeList, + normalizeLists: normalizeLists + }; - updateListWithDetails(dom, listBlock, detail); - mergeWithAdjacentLists(editor.dom, listBlock); - }); - - editor.selection.setRng(Bookmark.resolveBookmark(bookmark)); - }; - - var removeList = function (editor) { - var bookmark = Bookmark.createBookmark(editor.selection.getRng(true)), root = editor.getBody(); - var listItems = Selection.getSelectedListItems(editor); - var emptyListItems = Tools.grep(listItems, function (li) { - return editor.dom.isEmpty(li); - }); - - listItems = Tools.grep(listItems, function (li) { - return !editor.dom.isEmpty(li); - }); + var global$7 = tinymce.util.Tools.resolve('tinymce.dom.DomQuery'); - Tools.each(emptyListItems, function (li) { - if (NodeType.isEmpty(editor.dom, li)) { - Outdent.outdent(editor, li); - return; - } + var getParentList = function (editor) { + var selectionStart = editor.selection.getStart(true); + return editor.dom.getParent(selectionStart, 'OL,UL,DL', getClosestListRootElm(editor, selectionStart)); + }; + var isParentListSelected = function (parentList, selectedBlocks) { + return parentList && selectedBlocks.length === 1 && selectedBlocks[0] === parentList; + }; + var findSubLists = function (parentList) { + return global$5.grep(parentList.querySelectorAll('ol,ul,dl'), function (elm) { + return $_fmlqy7fsjfuw8plr.isListNode(elm); + }); + }; + var getSelectedSubLists = function (editor) { + var parentList = getParentList(editor); + var selectedBlocks = editor.selection.getSelectedBlocks(); + if (isParentListSelected(parentList, selectedBlocks)) { + return findSubLists(parentList); + } else { + return global$5.grep(selectedBlocks, function (elm) { + return $_fmlqy7fsjfuw8plr.isListNode(elm) && parentList !== elm; }); + } + }; + var findParentListItemsNodes = function (editor, elms) { + var listItemsElms = global$5.map(elms, function (elm) { + var parentLi = editor.dom.getParent(elm, 'li,dd,dt', getClosestListRootElm(editor, elm)); + return parentLi ? parentLi : elm; + }); + return global$7.unique(listItemsElms); + }; + var getSelectedListItems = function (editor) { + var selectedBlocks = editor.selection.getSelectedBlocks(); + return global$5.grep(findParentListItemsNodes(editor, selectedBlocks), function (block) { + return $_fmlqy7fsjfuw8plr.isListItemNode(block); + }); + }; + var getClosestListRootElm = function (editor, elm) { + var parentTableCell = editor.dom.getParents(elm, 'TD,TH'); + var root = parentTableCell.length > 0 ? parentTableCell[0] : editor.getBody(); + return root; + }; + var $_2bncsnfujfuw8plw = { + getParentList: getParentList, + getSelectedSubLists: getSelectedSubLists, + getSelectedListItems: getSelectedListItems, + getClosestListRootElm: getClosestListRootElm + }; - Tools.each(listItems, function (li) { - var node, rootList; + var global$8 = tinymce.util.Tools.resolve('tinymce.Env'); - if (li.parentNode === editor.getBody()) { - return; + var DOM$2 = global$6.DOM; + var createNewTextBlock = function (editor, contentNode, blockName) { + var node, textBlock; + var fragment = DOM$2.createFragment(); + var hasContentNode; + var blockElements = editor.schema.getBlockElements(); + if (editor.settings.forced_root_block) { + blockName = blockName || editor.settings.forced_root_block; + } + if (blockName) { + textBlock = DOM$2.create(blockName); + if (textBlock.tagName === editor.settings.forced_root_block) { + DOM$2.setAttribs(textBlock, editor.settings.forced_root_block_attrs); + } + if (!$_fmlqy7fsjfuw8plr.isBlock(contentNode.firstChild, blockElements)) { + fragment.appendChild(textBlock); + } + } + if (contentNode) { + while (node = contentNode.firstChild) { + var nodeName = node.nodeName; + if (!hasContentNode && (nodeName !== 'SPAN' || node.getAttribute('data-mce-type') !== 'bookmark')) { + hasContentNode = true; } - - for (node = li; node && node !== root; node = node.parentNode) { - if (NodeType.isListNode(node)) { - rootList = node; + if ($_fmlqy7fsjfuw8plr.isBlock(node, blockElements)) { + fragment.appendChild(node); + textBlock = null; + } else { + if (blockName) { + if (!textBlock) { + textBlock = DOM$2.create(blockName); + fragment.appendChild(textBlock); + } + textBlock.appendChild(node); + } else { + fragment.appendChild(node); } } - - SplitList.splitList(editor, rootList, li); - NormalizeLists.normalizeLists(editor.dom, rootList.parentNode); + } + } + if (!editor.settings.forced_root_block) { + fragment.appendChild(DOM$2.create('br')); + } else { + if (!hasContentNode && (!global$8.ie || global$8.ie > 10)) { + textBlock.appendChild(DOM$2.create('br', { 'data-mce-bogus': '1' })); + } + } + return fragment; + }; + var $_3c0i4zfxjfuw8pm1 = { createNewTextBlock: createNewTextBlock }; + + var DOM$3 = global$6.DOM; + var splitList = function (editor, ul, li, newBlock) { + var tmpRng, fragment, bookmarks, node; + var removeAndKeepBookmarks = function (targetNode) { + global$5.each(bookmarks, function (node) { + targetNode.parentNode.insertBefore(node, li.parentNode); }); - - editor.selection.setRng(Bookmark.resolveBookmark(bookmark)); - }; - - var isValidLists = function (list1, list2) { - return list1 && list2 && NodeType.isListNode(list1) && list1.nodeName === list2.nodeName; - }; - - var hasSameListStyle = function (dom, list1, list2) { - var targetStyle = dom.getStyle(list1, 'list-style-type', true); - var style = dom.getStyle(list2, 'list-style-type', true); - return targetStyle === style; - }; - - var hasSameClasses = function (elm1, elm2) { - return elm1.className === elm2.className; - }; - - var shouldMerge = function (dom, list1, list2) { - return isValidLists(list1, list2) && hasSameListStyle(dom, list1, list2) && hasSameClasses(list1, list2); - }; - - var mergeWithAdjacentLists = function (dom, listBlock) { - var sibling, node; - - sibling = listBlock.nextSibling; - if (shouldMerge(dom, listBlock, sibling)) { - while ((node = sibling.firstChild)) { - listBlock.appendChild(node); - } - - dom.remove(sibling); + DOM$3.remove(targetNode); + }; + bookmarks = DOM$3.select('span[data-mce-type="bookmark"]', ul); + newBlock = newBlock || $_3c0i4zfxjfuw8pm1.createNewTextBlock(editor, li); + tmpRng = DOM$3.createRng(); + tmpRng.setStartAfter(li); + tmpRng.setEndAfter(ul); + fragment = tmpRng.extractContents(); + for (node = fragment.firstChild; node; node = node.firstChild) { + if (node.nodeName === 'LI' && editor.dom.isEmpty(node)) { + DOM$3.remove(node); + break; } + } + if (!editor.dom.isEmpty(fragment)) { + DOM$3.insertAfter(fragment, ul); + } + DOM$3.insertAfter(newBlock, ul); + if ($_fmlqy7fsjfuw8plr.isEmpty(editor.dom, li.parentNode)) { + removeAndKeepBookmarks(li.parentNode); + } + DOM$3.remove(li); + if ($_fmlqy7fsjfuw8plr.isEmpty(editor.dom, ul)) { + DOM$3.remove(ul); + } + }; + var $_dbkw03fwjfuw8plz = { splitList: splitList }; - sibling = listBlock.previousSibling; - if (shouldMerge(dom, listBlock, sibling)) { - while ((node = sibling.lastChild)) { - listBlock.insertBefore(node, listBlock.firstChild); - } - - dom.remove(sibling); + var DOM$4 = global$6.DOM; + var removeEmptyLi = function (dom, li) { + if ($_fmlqy7fsjfuw8plr.isEmpty(dom, li)) { + DOM$4.remove(li); + } + }; + var outdent = function (editor, li) { + var ul = li.parentNode; + var ulParent, newBlock; + if (ul) { + ulParent = ul.parentNode; + } else { + removeEmptyLi(editor.dom, li); + return true; + } + if (ul === editor.getBody()) { + return true; + } + if (li.nodeName === 'DD') { + DOM$4.rename(li, 'DT'); + return true; + } + if ($_fmlqy7fsjfuw8plr.isFirstChild(li) && $_fmlqy7fsjfuw8plr.isLastChild(li)) { + if (ulParent.nodeName === 'LI') { + DOM$4.insertAfter(li, ulParent); + removeEmptyLi(editor.dom, ulParent); + DOM$4.remove(ul); + } else if ($_fmlqy7fsjfuw8plr.isListNode(ulParent)) { + DOM$4.remove(ul, true); + } else { + ulParent.insertBefore($_3c0i4zfxjfuw8pm1.createNewTextBlock(editor, li), ul); + DOM$4.remove(ul); } - }; - - var updateList = function (dom, list, listName, detail) { - if (list.nodeName !== listName) { - var newList = dom.rename(list, listName); - updateListWithDetails(dom, newList, detail); + return true; + } else if ($_fmlqy7fsjfuw8plr.isFirstChild(li)) { + if (ulParent.nodeName === 'LI') { + DOM$4.insertAfter(li, ulParent); + li.appendChild(ul); + removeEmptyLi(editor.dom, ulParent); + } else if ($_fmlqy7fsjfuw8plr.isListNode(ulParent)) { + ulParent.insertBefore(li, ul); } else { - updateListWithDetails(dom, list, detail); + ulParent.insertBefore($_3c0i4zfxjfuw8pm1.createNewTextBlock(editor, li), ul); + DOM$4.remove(li); } - }; - - var toggleMultipleLists = function (editor, parentList, lists, listName, detail) { - if (parentList.nodeName === listName && !hasListStyleDetail(detail)) { - removeList(editor, listName); + return true; + } else if ($_fmlqy7fsjfuw8plr.isLastChild(li)) { + if (ulParent.nodeName === 'LI') { + DOM$4.insertAfter(li, ulParent); + } else if ($_fmlqy7fsjfuw8plr.isListNode(ulParent)) { + DOM$4.insertAfter(li, ul); } else { - var bookmark = Bookmark.createBookmark(editor.selection.getRng(true)); - - Tools.each([parentList].concat(lists), function (elm) { - updateList(editor.dom, elm, listName, detail); - }); - - editor.selection.setRng(Bookmark.resolveBookmark(bookmark)); + DOM$4.insertAfter($_3c0i4zfxjfuw8pm1.createNewTextBlock(editor, li), ul); + DOM$4.remove(li); } - }; - - var hasListStyleDetail = function (detail) { - return 'list-style-type' in detail; - }; - - var toggleSingleList = function (editor, parentList, listName, detail) { - if (parentList === editor.getBody()) { - return; + return true; + } + if (ulParent.nodeName === 'LI') { + ul = ulParent; + newBlock = $_3c0i4zfxjfuw8pm1.createNewTextBlock(editor, li, 'LI'); + } else if ($_fmlqy7fsjfuw8plr.isListNode(ulParent)) { + newBlock = $_3c0i4zfxjfuw8pm1.createNewTextBlock(editor, li, 'LI'); + } else { + newBlock = $_3c0i4zfxjfuw8pm1.createNewTextBlock(editor, li); + } + $_dbkw03fwjfuw8plz.splitList(editor, ul, li, newBlock); + $_7p90zmftjfuw8plu.normalizeLists(editor.dom, ul.parentNode); + return true; + }; + var outdentSelection = function (editor) { + var listElements = $_2bncsnfujfuw8plw.getSelectedListItems(editor); + if (listElements.length) { + var bookmark = $_3byghwfqjfuw8pln.createBookmark(editor.selection.getRng()); + var i = void 0, y = void 0; + var root = $_2bncsnfujfuw8plw.getClosestListRootElm(editor, editor.selection.getStart(true)); + i = listElements.length; + while (i--) { + var node = listElements[i].parentNode; + while (node && node !== root) { + y = listElements.length; + while (y--) { + if (listElements[y] === node) { + listElements.splice(i, 1); + break; + } + } + node = node.parentNode; + } } - - if (parentList) { - if (parentList.nodeName === listName && !hasListStyleDetail(detail)) { - removeList(editor, listName); - } else { - var bookmark = Bookmark.createBookmark(editor.selection.getRng(true)); - updateListWithDetails(editor.dom, parentList, detail); - mergeWithAdjacentLists(editor.dom, editor.dom.rename(parentList, listName)); - editor.selection.setRng(Bookmark.resolveBookmark(bookmark)); + for (i = 0; i < listElements.length; i++) { + if (!outdent(editor, listElements[i]) && i === 0) { + break; } - } else { - applyList(editor, listName, detail); } - }; - - var toggleList = function (editor, listName, detail) { - var parentList = Selection.getParentList(editor); - var selectedSubLists = Selection.getSelectedSubLists(editor); - - detail = detail ? detail : {}; + editor.selection.setRng($_3byghwfqjfuw8pln.resolveBookmark(bookmark)); + editor.nodeChanged(); + return true; + } + }; + var $_b067pwfojfuw8plj = { + outdent: outdent, + outdentSelection: outdentSelection + }; - if (parentList && selectedSubLists.length > 0) { - toggleMultipleLists(editor, parentList, selectedSubLists, listName, detail); - } else { - toggleSingleList(editor, parentList, listName, detail); + var updateListStyle = function (dom, el, detail) { + var type = detail['list-style-type'] ? detail['list-style-type'] : null; + dom.setStyle(el, 'list-style-type', type); + }; + var setAttribs = function (elm, attrs) { + global$5.each(attrs, function (value, key) { + elm.setAttribute(key, value); + }); + }; + var updateListAttrs = function (dom, el, detail) { + setAttribs(el, detail['list-attributes']); + global$5.each(dom.select('li', el), function (li) { + setAttribs(li, detail['list-item-attributes']); + }); + }; + var updateListWithDetails = function (dom, el, detail) { + updateListStyle(dom, el, detail); + updateListAttrs(dom, el, detail); + }; + var removeStyles = function (dom, element, styles) { + global$5.each(styles, function (style) { + return dom.setStyle(element, (_a = {}, _a[style] = '', _a)); + var _a; + }); + }; + var getEndPointNode = function (editor, rng, start, root) { + var container, offset; + container = rng[start ? 'startContainer' : 'endContainer']; + offset = rng[start ? 'startOffset' : 'endOffset']; + if (container.nodeType === 1) { + container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container; + } + if (!start && $_fmlqy7fsjfuw8plr.isBr(container.nextSibling)) { + container = container.nextSibling; + } + while (container.parentNode !== root) { + if ($_fmlqy7fsjfuw8plr.isTextBlock(editor, container)) { + return container; } - }; - - return { - toggleList: toggleList, - removeList: removeList, - mergeWithAdjacentLists: mergeWithAdjacentLists - }; - } -); - - -/** - * ResolveGlobal.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.core.dom.TreeWalker', - [ - 'global!tinymce.util.Tools.resolve' - ], - function (resolve) { - return resolve('tinymce.dom.TreeWalker'); - } -); - -/** - * Delete.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.plugins.lists.core.Delete', - [ - 'tinymce.core.dom.RangeUtils', - 'tinymce.core.dom.TreeWalker', - 'tinymce.core.util.VK', - 'tinymce.plugins.lists.actions.ToggleList', - 'tinymce.plugins.lists.core.Bookmark', - 'tinymce.plugins.lists.core.NodeType', - 'tinymce.plugins.lists.core.NormalizeLists', - 'tinymce.plugins.lists.core.Range', - 'tinymce.plugins.lists.core.Selection' - ], - function (RangeUtils, TreeWalker, VK, ToggleList, Bookmark, NodeType, NormalizeLists, Range, Selection) { - var findNextCaretContainer = function (editor, rng, isForward) { - var node = rng.startContainer, offset = rng.startOffset; - var nonEmptyBlocks, walker; - - if (node.nodeType === 3 && (isForward ? offset < node.data.length : offset > 0)) { - return node; + if (/^(TD|TH)$/.test(container.parentNode.nodeName)) { + return container; } - - nonEmptyBlocks = editor.schema.getNonEmptyElements(); - if (node.nodeType === 1) { - node = RangeUtils.getNode(node, offset); + container = container.parentNode; + } + return container; + }; + var getSelectedTextBlocks = function (editor, rng, root) { + var textBlocks = [], dom = editor.dom; + var startNode = getEndPointNode(editor, rng, true, root); + var endNode = getEndPointNode(editor, rng, false, root); + var block; + var siblings = []; + for (var node = startNode; node; node = node.nextSibling) { + siblings.push(node); + if (node === endNode) { + break; } - - walker = new TreeWalker(node, editor.getBody()); - - // Delete at
  • |
  • then jump over the bogus br - if (isForward) { - if (NodeType.isBogusBr(editor.dom, node)) { - walker.next(); - } + } + global$5.each(siblings, function (node) { + if ($_fmlqy7fsjfuw8plr.isTextBlock(editor, node)) { + textBlocks.push(node); + block = null; + return; } - - while ((node = walker[isForward ? 'next' : 'prev2']())) { - if (node.nodeName === 'LI' && !node.hasChildNodes()) { - return node; - } - - if (nonEmptyBlocks[node.nodeName]) { - return node; + if (dom.isBlock(node) || $_fmlqy7fsjfuw8plr.isBr(node)) { + if ($_fmlqy7fsjfuw8plr.isBr(node)) { + dom.remove(node); } - - if (node.nodeType === 3 && node.data.length > 0) { - return node; + block = null; + return; + } + var nextSibling = node.nextSibling; + if (global$4.isBookmarkNode(node)) { + if ($_fmlqy7fsjfuw8plr.isTextBlock(editor, nextSibling) || !nextSibling && node.parentNode === root) { + block = null; + return; } } - }; - - var hasOnlyOneBlockChild = function (dom, elm) { - var childNodes = elm.childNodes; - return childNodes.length === 1 && !NodeType.isListNode(childNodes[0]) && dom.isBlock(childNodes[0]); - }; - - var unwrapSingleBlockChild = function (dom, elm) { - if (hasOnlyOneBlockChild(dom, elm)) { - dom.remove(elm.firstChild, true); + if (!block) { + block = dom.create('p'); + node.parentNode.insertBefore(block, node); + textBlocks.push(block); } - }; - - var moveChildren = function (dom, fromElm, toElm) { - var node, targetElm; - - targetElm = hasOnlyOneBlockChild(dom, toElm) ? toElm.firstChild : toElm; - unwrapSingleBlockChild(dom, fromElm); - - if (!NodeType.isEmpty(dom, fromElm, true)) { - while ((node = fromElm.firstChild)) { - targetElm.appendChild(node); - } + block.appendChild(node); + }); + return textBlocks; + }; + var hasCompatibleStyle = function (dom, sib, detail) { + var sibStyle = dom.getStyle(sib, 'list-style-type'); + var detailStyle = detail ? detail['list-style-type'] : ''; + detailStyle = detailStyle === null ? '' : detailStyle; + return sibStyle === detailStyle; + }; + var applyList = function (editor, listName, detail) { + if (detail === void 0) { + detail = {}; + } + var rng = editor.selection.getRng(true); + var bookmark; + var listItemName = 'LI'; + var root = $_2bncsnfujfuw8plw.getClosestListRootElm(editor, editor.selection.getStart(true)); + var dom = editor.dom; + if (dom.getContentEditable(editor.selection.getNode()) === 'false') { + return; + } + listName = listName.toUpperCase(); + if (listName === 'DL') { + listItemName = 'DT'; + } + bookmark = $_3byghwfqjfuw8pln.createBookmark(rng); + global$5.each(getSelectedTextBlocks(editor, rng, root), function (block) { + var listBlock, sibling; + sibling = block.previousSibling; + if (sibling && $_fmlqy7fsjfuw8plr.isListNode(sibling) && sibling.nodeName === listName && hasCompatibleStyle(dom, sibling, detail)) { + listBlock = sibling; + block = dom.rename(block, listItemName); + sibling.appendChild(block); + } else { + listBlock = dom.create(listName); + block.parentNode.insertBefore(listBlock, block); + listBlock.appendChild(block); + block = dom.rename(block, listItemName); } - }; - - var mergeLiElements = function (dom, fromElm, toElm) { - var node, listNode, ul = fromElm.parentNode; - - if (!NodeType.isChildOfBody(dom, fromElm) || !NodeType.isChildOfBody(dom, toElm)) { + removeStyles(dom, block, [ + 'margin', + 'margin-right', + 'margin-bottom', + 'margin-left', + 'margin-top', + 'padding', + 'padding-right', + 'padding-bottom', + 'padding-left', + 'padding-top' + ]); + updateListWithDetails(dom, listBlock, detail); + mergeWithAdjacentLists(editor.dom, listBlock); + }); + editor.selection.setRng($_3byghwfqjfuw8pln.resolveBookmark(bookmark)); + }; + var removeList = function (editor) { + var bookmark = $_3byghwfqjfuw8pln.createBookmark(editor.selection.getRng(true)); + var root = $_2bncsnfujfuw8plw.getClosestListRootElm(editor, editor.selection.getStart(true)); + var listItems = $_2bncsnfujfuw8plw.getSelectedListItems(editor); + var emptyListItems = global$5.grep(listItems, function (li) { + return editor.dom.isEmpty(li); + }); + listItems = global$5.grep(listItems, function (li) { + return !editor.dom.isEmpty(li); + }); + global$5.each(emptyListItems, function (li) { + if ($_fmlqy7fsjfuw8plr.isEmpty(editor.dom, li)) { + $_b067pwfojfuw8plj.outdent(editor, li); return; } - - if (NodeType.isListNode(toElm.lastChild)) { - listNode = toElm.lastChild; + }); + global$5.each(listItems, function (li) { + var node, rootList; + if (li.parentNode === editor.getBody()) { + return; } - - if (ul === toElm.lastChild) { - if (NodeType.isBr(ul.previousSibling)) { - dom.remove(ul.previousSibling); + for (node = li; node && node !== root; node = node.parentNode) { + if ($_fmlqy7fsjfuw8plr.isListNode(node)) { + rootList = node; } } - - node = toElm.lastChild; - if (node && NodeType.isBr(node) && fromElm.hasChildNodes()) { - dom.remove(node); + $_dbkw03fwjfuw8plz.splitList(editor, rootList, li); + $_7p90zmftjfuw8plu.normalizeLists(editor.dom, rootList.parentNode); + }); + editor.selection.setRng($_3byghwfqjfuw8pln.resolveBookmark(bookmark)); + }; + var isValidLists = function (list1, list2) { + return list1 && list2 && $_fmlqy7fsjfuw8plr.isListNode(list1) && list1.nodeName === list2.nodeName; + }; + var hasSameListStyle = function (dom, list1, list2) { + var targetStyle = dom.getStyle(list1, 'list-style-type', true); + var style = dom.getStyle(list2, 'list-style-type', true); + return targetStyle === style; + }; + var hasSameClasses = function (elm1, elm2) { + return elm1.className === elm2.className; + }; + var shouldMerge = function (dom, list1, list2) { + return isValidLists(list1, list2) && hasSameListStyle(dom, list1, list2) && hasSameClasses(list1, list2); + }; + var mergeWithAdjacentLists = function (dom, listBlock) { + var sibling, node; + sibling = listBlock.nextSibling; + if (shouldMerge(dom, listBlock, sibling)) { + while (node = sibling.firstChild) { + listBlock.appendChild(node); } - - if (NodeType.isEmpty(dom, toElm, true)) { - dom.$(toElm).empty(); + dom.remove(sibling); + } + sibling = listBlock.previousSibling; + if (shouldMerge(dom, listBlock, sibling)) { + while (node = sibling.lastChild) { + listBlock.insertBefore(node, listBlock.firstChild); } - - moveChildren(dom, fromElm, toElm); - - if (listNode) { - toElm.appendChild(listNode); + dom.remove(sibling); + } + }; + var updateList = function (dom, list, listName, detail) { + if (list.nodeName !== listName) { + var newList = dom.rename(list, listName); + updateListWithDetails(dom, newList, detail); + } else { + updateListWithDetails(dom, list, detail); + } + }; + var toggleMultipleLists = function (editor, parentList, lists, listName, detail) { + if (parentList.nodeName === listName && !hasListStyleDetail(detail)) { + removeList(editor); + } else { + var bookmark = $_3byghwfqjfuw8pln.createBookmark(editor.selection.getRng(true)); + global$5.each([parentList].concat(lists), function (elm) { + updateList(editor.dom, elm, listName, detail); + }); + editor.selection.setRng($_3byghwfqjfuw8pln.resolveBookmark(bookmark)); + } + }; + var hasListStyleDetail = function (detail) { + return 'list-style-type' in detail; + }; + var toggleSingleList = function (editor, parentList, listName, detail) { + if (parentList === editor.getBody()) { + return; + } + if (parentList) { + if (parentList.nodeName === listName && !hasListStyleDetail(detail)) { + removeList(editor); + } else { + var bookmark = $_3byghwfqjfuw8pln.createBookmark(editor.selection.getRng(true)); + updateListWithDetails(editor.dom, parentList, detail); + mergeWithAdjacentLists(editor.dom, editor.dom.rename(parentList, listName)); + editor.selection.setRng($_3byghwfqjfuw8pln.resolveBookmark(bookmark)); } + } else { + applyList(editor, listName, detail); + } + }; + var toggleList = function (editor, listName, detail) { + var parentList = $_2bncsnfujfuw8plw.getParentList(editor); + var selectedSubLists = $_2bncsnfujfuw8plw.getSelectedSubLists(editor); + detail = detail ? detail : {}; + if (parentList && selectedSubLists.length > 0) { + toggleMultipleLists(editor, parentList, selectedSubLists, listName, detail); + } else { + toggleSingleList(editor, parentList, listName, detail); + } + }; + var $_8qbnsrfljfuw8plb = { + toggleList: toggleList, + removeList: removeList, + mergeWithAdjacentLists: mergeWithAdjacentLists + }; - dom.remove(fromElm); - - if (NodeType.isEmpty(dom, ul) && ul !== dom.getRoot()) { - dom.remove(ul); + var findNextCaretContainer = function (editor, rng, isForward, root) { + var node = rng.startContainer; + var offset = rng.startOffset; + var nonEmptyBlocks, walker; + if (node.nodeType === 3 && (isForward ? offset < node.data.length : offset > 0)) { + return node; + } + nonEmptyBlocks = editor.schema.getNonEmptyElements(); + if (node.nodeType === 1) { + node = global$1.getNode(node, offset); + } + walker = new global$2(node, root); + if (isForward) { + if ($_fmlqy7fsjfuw8plr.isBogusBr(editor.dom, node)) { + walker.next(); } - }; - - var mergeIntoEmptyLi = function (editor, fromLi, toLi) { - editor.dom.$(toLi).empty(); - mergeLiElements(editor.dom, fromLi, toLi); - editor.selection.setCursorLocation(toLi); - }; - - var mergeForward = function (editor, rng, fromLi, toLi) { - var dom = editor.dom; - - if (dom.isEmpty(toLi)) { - mergeIntoEmptyLi(editor, fromLi, toLi); - } else { - var bookmark = Bookmark.createBookmark(rng); - mergeLiElements(dom, fromLi, toLi); - editor.selection.setRng(Bookmark.resolveBookmark(bookmark)); + } + while (node = walker[isForward ? 'next' : 'prev2']()) { + if (node.nodeName === 'LI' && !node.hasChildNodes()) { + return node; } - }; - - var mergeBackward = function (editor, rng, fromLi, toLi) { - var bookmark = Bookmark.createBookmark(rng); - mergeLiElements(editor.dom, fromLi, toLi); - editor.selection.setRng(Bookmark.resolveBookmark(bookmark)); - }; - - var backspaceDeleteFromListToListCaret = function (editor, isForward) { - var dom = editor.dom, selection = editor.selection; - var li = dom.getParent(selection.getStart(), 'LI'), ul, rng, otherLi; - - if (li) { - ul = li.parentNode; - if (ul === editor.getBody() && NodeType.isEmpty(dom, ul)) { - return true; - } - - rng = Range.normalizeRange(selection.getRng(true)); - otherLi = dom.getParent(findNextCaretContainer(editor, rng, isForward), 'LI'); - - if (otherLi && otherLi !== li) { - if (isForward) { - mergeForward(editor, rng, otherLi, li); - } else { - mergeBackward(editor, rng, li, otherLi); - } - - return true; - } else if (!otherLi) { - if (!isForward && ToggleList.removeList(editor, ul.nodeName)) { - return true; - } - } + if (nonEmptyBlocks[node.nodeName]) { + return node; } - - return false; - }; - - var removeBlock = function (dom, block) { - var parentBlock = dom.getParent(block.parentNode, dom.isBlock); - - dom.remove(block); - if (parentBlock && dom.isEmpty(parentBlock)) { - dom.remove(parentBlock); + if (node.nodeType === 3 && node.data.length > 0) { + return node; } - }; - - var backspaceDeleteIntoListCaret = function (editor, isForward) { - var dom = editor.dom; - var block = dom.getParent(editor.selection.getStart(), dom.isBlock); - - if (block && dom.isEmpty(block)) { - var rng = Range.normalizeRange(editor.selection.getRng(true)); - var otherLi = dom.getParent(findNextCaretContainer(editor, rng, isForward), 'LI'); - - if (otherLi) { - editor.undoManager.transact(function () { - removeBlock(dom, block); - ToggleList.mergeWithAdjacentLists(dom, otherLi.parentNode); - editor.selection.select(otherLi, true); - editor.selection.collapse(isForward); - }); - + } + }; + var hasOnlyOneBlockChild = function (dom, elm) { + var childNodes = elm.childNodes; + return childNodes.length === 1 && !$_fmlqy7fsjfuw8plr.isListNode(childNodes[0]) && dom.isBlock(childNodes[0]); + }; + var unwrapSingleBlockChild = function (dom, elm) { + if (hasOnlyOneBlockChild(dom, elm)) { + dom.remove(elm.firstChild, true); + } + }; + var moveChildren = function (dom, fromElm, toElm) { + var node, targetElm; + targetElm = hasOnlyOneBlockChild(dom, toElm) ? toElm.firstChild : toElm; + unwrapSingleBlockChild(dom, fromElm); + if (!$_fmlqy7fsjfuw8plr.isEmpty(dom, fromElm, true)) { + while (node = fromElm.firstChild) { + targetElm.appendChild(node); + } + } + }; + var mergeLiElements = function (dom, fromElm, toElm) { + var node, listNode; + var ul = fromElm.parentNode; + if (!$_fmlqy7fsjfuw8plr.isChildOfBody(dom, fromElm) || !$_fmlqy7fsjfuw8plr.isChildOfBody(dom, toElm)) { + return; + } + if ($_fmlqy7fsjfuw8plr.isListNode(toElm.lastChild)) { + listNode = toElm.lastChild; + } + if (ul === toElm.lastChild) { + if ($_fmlqy7fsjfuw8plr.isBr(ul.previousSibling)) { + dom.remove(ul.previousSibling); + } + } + node = toElm.lastChild; + if (node && $_fmlqy7fsjfuw8plr.isBr(node) && fromElm.hasChildNodes()) { + dom.remove(node); + } + if ($_fmlqy7fsjfuw8plr.isEmpty(dom, toElm, true)) { + dom.$(toElm).empty(); + } + moveChildren(dom, fromElm, toElm); + if (listNode) { + toElm.appendChild(listNode); + } + dom.remove(fromElm); + if ($_fmlqy7fsjfuw8plr.isEmpty(dom, ul) && ul !== dom.getRoot()) { + dom.remove(ul); + } + }; + var mergeIntoEmptyLi = function (editor, fromLi, toLi) { + editor.dom.$(toLi).empty(); + mergeLiElements(editor.dom, fromLi, toLi); + editor.selection.setCursorLocation(toLi); + }; + var mergeForward = function (editor, rng, fromLi, toLi) { + var dom = editor.dom; + if (dom.isEmpty(toLi)) { + mergeIntoEmptyLi(editor, fromLi, toLi); + } else { + var bookmark = $_3byghwfqjfuw8pln.createBookmark(rng); + mergeLiElements(dom, fromLi, toLi); + editor.selection.setRng($_3byghwfqjfuw8pln.resolveBookmark(bookmark)); + } + }; + var mergeBackward = function (editor, rng, fromLi, toLi) { + var bookmark = $_3byghwfqjfuw8pln.createBookmark(rng); + mergeLiElements(editor.dom, fromLi, toLi); + var resolvedBookmark = $_3byghwfqjfuw8pln.resolveBookmark(bookmark); + editor.selection.setRng(resolvedBookmark); + }; + var backspaceDeleteFromListToListCaret = function (editor, isForward) { + var dom = editor.dom, selection = editor.selection; + var selectionStartElm = selection.getStart(); + var root = $_2bncsnfujfuw8plw.getClosestListRootElm(editor, selectionStartElm); + var li = dom.getParent(selection.getStart(), 'LI', root); + var ul, rng, otherLi; + if (li) { + ul = li.parentNode; + if (ul === editor.getBody() && $_fmlqy7fsjfuw8plr.isEmpty(dom, ul)) { + return true; + } + rng = $_14fh94frjfuw8plp.normalizeRange(selection.getRng(true)); + otherLi = dom.getParent(findNextCaretContainer(editor, rng, isForward, root), 'LI', root); + if (otherLi && otherLi !== li) { + if (isForward) { + mergeForward(editor, rng, otherLi, li); + } else { + mergeBackward(editor, rng, li, otherLi); + } + return true; + } else if (!otherLi) { + if (!isForward && $_8qbnsrfljfuw8plb.removeList(editor)) { return true; } } - - return false; - }; - - var backspaceDeleteCaret = function (editor, isForward) { - return backspaceDeleteFromListToListCaret(editor, isForward) || backspaceDeleteIntoListCaret(editor, isForward); - }; - - var backspaceDeleteRange = function (editor) { - var startListParent = editor.dom.getParent(editor.selection.getStart(), 'LI,DT,DD'); - - if (startListParent || Selection.getSelectedListItems(editor).length > 0) { + } + return false; + }; + var removeBlock = function (dom, block, root) { + var parentBlock = dom.getParent(block.parentNode, dom.isBlock, root); + dom.remove(block); + if (parentBlock && dom.isEmpty(parentBlock)) { + dom.remove(parentBlock); + } + }; + var backspaceDeleteIntoListCaret = function (editor, isForward) { + var dom = editor.dom; + var selectionStartElm = editor.selection.getStart(); + var root = $_2bncsnfujfuw8plw.getClosestListRootElm(editor, selectionStartElm); + var block = dom.getParent(selectionStartElm, dom.isBlock, root); + if (block && dom.isEmpty(block)) { + var rng = $_14fh94frjfuw8plp.normalizeRange(editor.selection.getRng(true)); + var otherLi_1 = dom.getParent(findNextCaretContainer(editor, rng, isForward, root), 'LI', root); + if (otherLi_1) { editor.undoManager.transact(function () { - editor.execCommand('Delete'); - NormalizeLists.normalizeLists(editor.dom, editor.getBody()); + removeBlock(dom, block, root); + $_8qbnsrfljfuw8plb.mergeWithAdjacentLists(dom, otherLi_1.parentNode); + editor.selection.select(otherLi_1, true); + editor.selection.collapse(isForward); }); - return true; } - - return false; - }; - - var backspaceDelete = function (editor, isForward) { - return editor.selection.isCollapsed() ? backspaceDeleteCaret(editor, isForward) : backspaceDeleteRange(editor); - }; - - var setup = function (editor) { - editor.on('keydown', function (e) { - if (e.keyCode === VK.BACKSPACE) { - if (backspaceDelete(editor, false)) { - e.preventDefault(); - } - } else if (e.keyCode === VK.DELETE) { - if (backspaceDelete(editor, true)) { - e.preventDefault(); - } - } + } + return false; + }; + var backspaceDeleteCaret = function (editor, isForward) { + return backspaceDeleteFromListToListCaret(editor, isForward) || backspaceDeleteIntoListCaret(editor, isForward); + }; + var backspaceDeleteRange = function (editor) { + var selectionStartElm = editor.selection.getStart(); + var root = $_2bncsnfujfuw8plw.getClosestListRootElm(editor, selectionStartElm); + var startListParent = editor.dom.getParent(selectionStartElm, 'LI,DT,DD', root); + if (startListParent || $_2bncsnfujfuw8plw.getSelectedListItems(editor).length > 0) { + editor.undoManager.transact(function () { + editor.execCommand('Delete'); + $_7p90zmftjfuw8plu.normalizeLists(editor.dom, editor.getBody()); }); - }; - - return { - setup: setup, - backspaceDelete: backspaceDelete - }; - } -); - - -/** - * plugin.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.plugins.lists.Plugin', - [ - 'tinymce.core.PluginManager', - 'tinymce.core.util.Tools', - 'tinymce.core.util.VK', - 'tinymce.plugins.lists.actions.Indent', - 'tinymce.plugins.lists.actions.Outdent', - 'tinymce.plugins.lists.actions.ToggleList', - 'tinymce.plugins.lists.core.Delete', - 'tinymce.plugins.lists.core.NodeType', - 'tinymce.plugins.lists.core.Selection' - ], - function (PluginManager, Tools, VK, Indent, Outdent, ToggleList, Delete, NodeType, Selection) { - var queryListCommandState = function (editor, listName) { - return function () { - var parentList = editor.dom.getParent(editor.selection.getStart(), 'UL,OL,DL'); - return parentList && parentList.nodeName === listName; - }; - }; - - var setupCommands = function (editor) { - editor.on('BeforeExecCommand', function (e) { - var cmd = e.command.toLowerCase(), isHandled; - - if (cmd === "indent") { - if (Indent.indentSelection(editor)) { - isHandled = true; - } - } else if (cmd === "outdent") { - if (Outdent.outdentSelection(editor)) { - isHandled = true; - } + return true; + } + return false; + }; + var backspaceDelete = function (editor, isForward) { + return editor.selection.isCollapsed() ? backspaceDeleteCaret(editor, isForward) : backspaceDeleteRange(editor); + }; + var setup = function (editor) { + editor.on('keydown', function (e) { + if (e.keyCode === global$3.BACKSPACE) { + if (backspaceDelete(editor, false)) { + e.preventDefault(); } - - if (isHandled) { - editor.fire('ExecCommand', { command: e.command }); + } else if (e.keyCode === global$3.DELETE) { + if (backspaceDelete(editor, true)) { e.preventDefault(); - return true; } - }); - - editor.addCommand('InsertUnorderedList', function (ui, detail) { - ToggleList.toggleList(editor, 'UL', detail); - }); - - editor.addCommand('InsertOrderedList', function (ui, detail) { - ToggleList.toggleList(editor, 'OL', detail); - }); + } + }); + }; + var $_6qu3vpfhjfuw8pl2 = { + setup: setup, + backspaceDelete: backspaceDelete + }; - editor.addCommand('InsertDefinitionList', function (ui, detail) { - ToggleList.toggleList(editor, 'DL', detail); - }); + var get = function (editor) { + return { + backspaceDelete: function (isForward) { + $_6qu3vpfhjfuw8pl2.backspaceDelete(editor, isForward); + } }; + }; + var $_bgmttlfgjfuw8pl0 = { get: get }; + + var DOM$5 = global$6.DOM; + var mergeLists = function (from, to) { + var node; + if ($_fmlqy7fsjfuw8plr.isListNode(from)) { + while (node = from.firstChild) { + to.appendChild(node); + } + DOM$5.remove(from); + } + }; + var indent = function (li) { + var sibling, newList, listStyle; + if (li.nodeName === 'DT') { + DOM$5.rename(li, 'DD'); + return true; + } + sibling = li.previousSibling; + if (sibling && $_fmlqy7fsjfuw8plr.isListNode(sibling)) { + sibling.appendChild(li); + return true; + } + if (sibling && sibling.nodeName === 'LI' && $_fmlqy7fsjfuw8plr.isListNode(sibling.lastChild)) { + sibling.lastChild.appendChild(li); + mergeLists(li.lastChild, sibling.lastChild); + return true; + } + sibling = li.nextSibling; + if (sibling && $_fmlqy7fsjfuw8plr.isListNode(sibling)) { + sibling.insertBefore(li, sibling.firstChild); + return true; + } + sibling = li.previousSibling; + if (sibling && sibling.nodeName === 'LI') { + newList = DOM$5.create(li.parentNode.nodeName); + listStyle = DOM$5.getStyle(li.parentNode, 'listStyleType'); + if (listStyle) { + DOM$5.setStyle(newList, 'listStyleType', listStyle); + } + sibling.appendChild(newList); + newList.appendChild(li); + mergeLists(li.lastChild, newList); + return true; + } + return false; + }; + var indentSelection = function (editor) { + var listElements = $_2bncsnfujfuw8plw.getSelectedListItems(editor); + if (listElements.length) { + var bookmark = $_3byghwfqjfuw8pln.createBookmark(editor.selection.getRng(true)); + for (var i = 0; i < listElements.length; i++) { + if (!indent(listElements[i]) && i === 0) { + break; + } + } + editor.selection.setRng($_3byghwfqjfuw8pln.resolveBookmark(bookmark)); + editor.nodeChanged(); + return true; + } + }; + var $_4zf6mug0jfuw8pm7 = { indentSelection: indentSelection }; - var setupStateHandlers = function (editor) { - editor.addQueryStateHandler('InsertUnorderedList', queryListCommandState(editor, 'UL')); - editor.addQueryStateHandler('InsertOrderedList', queryListCommandState(editor, 'OL')); - editor.addQueryStateHandler('InsertDefinitionList', queryListCommandState(editor, 'DL')); + var queryListCommandState = function (editor, listName) { + return function () { + var parentList = editor.dom.getParent(editor.selection.getStart(), 'UL,OL,DL'); + return parentList && parentList.nodeName === listName; }; - - var setupTabKey = function (editor) { - editor.on('keydown', function (e) { - // Check for tab but not ctrl/cmd+tab since it switches browser tabs - if (e.keyCode !== 9 || VK.metaKeyPressed(e)) { - return; + }; + var register = function (editor) { + editor.on('BeforeExecCommand', function (e) { + var cmd = e.command.toLowerCase(); + var isHandled; + if (cmd === 'indent') { + if ($_4zf6mug0jfuw8pm7.indentSelection(editor)) { + isHandled = true; } - - if (editor.dom.getParent(editor.selection.getStart(), 'LI,DT,DD')) { - e.preventDefault(); - - if (e.shiftKey) { - Outdent.outdentSelection(editor); - } else { - Indent.indentSelection(editor); - } + } else if (cmd === 'outdent') { + if ($_b067pwfojfuw8plj.outdentSelection(editor)) { + isHandled = true; } - }); - }; - - var setupUi = function (editor) { - var listState = function (listName) { - return function () { - var self = this; - - editor.on('NodeChange', function (e) { - var lists = Tools.grep(e.parents, NodeType.isListNode); - self.active(lists.length > 0 && lists[0].nodeName === listName); - }); - }; - }; - - var hasPlugin = function (editor, plugin) { - var plugins = editor.settings.plugins ? editor.settings.plugins : ''; - return Tools.inArray(plugins.split(/[ ,]/), plugin) !== -1; - }; - - if (!hasPlugin(editor, 'advlist')) { - editor.addButton('numlist', { - title: 'Numbered list', - cmd: 'InsertOrderedList', - onPostRender: listState('OL') - }); - - editor.addButton('bullist', { - title: 'Bullet list', - cmd: 'InsertUnorderedList', - onPostRender: listState('UL') - }); } + if (isHandled) { + editor.fire('ExecCommand', { command: e.command }); + e.preventDefault(); + return true; + } + }); + editor.addCommand('InsertUnorderedList', function (ui, detail) { + $_8qbnsrfljfuw8plb.toggleList(editor, 'UL', detail); + }); + editor.addCommand('InsertOrderedList', function (ui, detail) { + $_8qbnsrfljfuw8plb.toggleList(editor, 'OL', detail); + }); + editor.addCommand('InsertDefinitionList', function (ui, detail) { + $_8qbnsrfljfuw8plb.toggleList(editor, 'DL', detail); + }); + editor.addQueryStateHandler('InsertUnorderedList', queryListCommandState(editor, 'UL')); + editor.addQueryStateHandler('InsertOrderedList', queryListCommandState(editor, 'OL')); + editor.addQueryStateHandler('InsertDefinitionList', queryListCommandState(editor, 'DL')); + }; + var $_ci56e3fzjfuw8pm5 = { register: register }; - editor.addButton('indent', { - icon: 'indent', - title: 'Increase indent', - cmd: 'Indent', - onPostRender: function (e) { - var ctrl = e.control; + var shouldIndentOnTab = function (editor) { + return editor.getParam('lists_indent_on_tab', true); + }; + var $_e85xmvg2jfuw8pmc = { shouldIndentOnTab: shouldIndentOnTab }; - editor.on('nodechange', function () { - var listItemBlocks = Selection.getSelectedListItems(editor); - var disable = listItemBlocks.length > 0 && NodeType.isFirstChild(listItemBlocks[0]); - ctrl.disabled(disable); - }); + var setupTabKey = function (editor) { + editor.on('keydown', function (e) { + if (e.keyCode !== global$3.TAB || global$3.metaKeyPressed(e)) { + return; + } + if (editor.dom.getParent(editor.selection.getStart(), 'LI,DT,DD')) { + e.preventDefault(); + if (e.shiftKey) { + $_b067pwfojfuw8plj.outdentSelection(editor); + } else { + $_4zf6mug0jfuw8pm7.indentSelection(editor); } + } + }); + }; + var setup$1 = function (editor) { + if ($_e85xmvg2jfuw8pmc.shouldIndentOnTab(editor)) { + setupTabKey(editor); + } + $_6qu3vpfhjfuw8pl2.setup(editor); + }; + var $_1iz32kg1jfuw8pma = { setup: setup$1 }; + + var findIndex = function (list, predicate) { + for (var index = 0; index < list.length; index++) { + var element = list[index]; + if (predicate(element)) { + return index; + } + } + return -1; + }; + var listState = function (editor, listName) { + return function (e) { + var ctrl = e.control; + editor.on('NodeChange', function (e) { + var tableCellIndex = findIndex(e.parents, $_fmlqy7fsjfuw8plr.isTableCellNode); + var parents = tableCellIndex !== -1 ? e.parents.slice(0, tableCellIndex) : e.parents; + var lists = global$5.grep(parents, $_fmlqy7fsjfuw8plr.isListNode); + ctrl.active(lists.length > 0 && lists[0].nodeName === listName); }); }; - - PluginManager.add('lists', function (editor) { - setupUi(editor); - Delete.setup(editor); - - editor.on('init', function () { - setupCommands(editor); - setupStateHandlers(editor); - if (editor.getParam('lists_indent_on_tab', true)) { - setupTabKey(editor); - } + }; + var indentPostRender = function (editor) { + return function (e) { + var ctrl = e.control; + editor.on('nodechange', function () { + var listItemBlocks = $_2bncsnfujfuw8plw.getSelectedListItems(editor); + var disable = listItemBlocks.length > 0 && $_fmlqy7fsjfuw8plr.isFirstChild(listItemBlocks[0]); + ctrl.disabled(disable); }); - - return { - backspaceDelete: function (isForward) { - Delete.backspaceDelete(editor, isForward); - } - }; + }; + }; + var register$1 = function (editor) { + var hasPlugin = function (editor, plugin) { + var plugins = editor.settings.plugins ? editor.settings.plugins : ''; + return global$5.inArray(plugins.split(/[ ,]/), plugin) !== -1; + }; + if (!hasPlugin(editor, 'advlist')) { + editor.addButton('numlist', { + active: false, + title: 'Numbered list', + cmd: 'InsertOrderedList', + onPostRender: listState(editor, 'OL') + }); + editor.addButton('bullist', { + active: false, + title: 'Bullet list', + cmd: 'InsertUnorderedList', + onPostRender: listState(editor, 'UL') + }); + } + editor.addButton('indent', { + icon: 'indent', + title: 'Increase indent', + cmd: 'Indent', + onPostRender: indentPostRender(editor) }); - - return function () { }; + }; + var $_fizi9xg3jfuw8pmd = { register: register$1 }; + + global.add('lists', function (editor) { + $_1iz32kg1jfuw8pma.setup(editor); + $_fizi9xg3jfuw8pmd.register(editor); + $_ci56e3fzjfuw8pm5.register(editor); + return $_bgmttlfgjfuw8pl0.get(editor); + }); + function Plugin () { } -); + return Plugin; -dem('tinymce.plugins.lists.Plugin')(); +}()); })(); diff --git a/src/wp-includes/js/tinymce/plugins/lists/plugin.min.js b/src/wp-includes/js/tinymce/plugins/lists/plugin.min.js index b25d33bf1c905..68a1bae4a03a8 100644 --- a/src/wp-includes/js/tinymce/plugins/lists/plugin.min.js +++ b/src/wp-includes/js/tinymce/plugins/lists/plugin.min.js @@ -1 +1 @@ -!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i0)&&d},k=function(a,b){return a.isChildOf(b,a.getRoot())};return{isTextNode:a,isListNode:b,isListItemNode:c,isBr:d,isFirstChild:e,isLastChild:f,isTextBlock:g,isBlock:h,isBogusBr:i,isEmpty:j,isChildOfBody:k}}),g("i",["a"],function(a){return a("tinymce.dom.RangeUtils")}),g("k",["i","8"],function(a,b){var c=function(c,d){var e=a.getNode(c,d);if(b.isListItemNode(c)&&b.isTextNode(e)){var f=d>=c.childNodes.length?e.data.length:0;return{container:e,offset:f}}return{container:c,offset:d}},d=function(a){var b=a.cloneRange(),d=c(a.startContainer,a.startOffset);b.setStart(d.container,d.offset);var e=c(a.endContainer,a.endOffset);return b.setEnd(e.container,e.offset),b};return{getNormalizedEndPoint:c,normalizeRange:d}}),g("c",["b","8","k"],function(a,b,c){var d=a.DOM,e=function(a){var b={},c=function(c){var e,f,g;f=a[c?"startContainer":"endContainer"],g=a[c?"startOffset":"endOffset"],1===f.nodeType&&(e=d.create("span",{"data-mce-type":"bookmark"}),f.hasChildNodes()?(g=Math.min(g,f.childNodes.length-1),c?f.insertBefore(e,f.childNodes[g]):d.insertAfter(e,f.childNodes[g])):f.appendChild(e),f=e,g=0),b[c?"startContainer":"endContainer"]=f,b[c?"startOffset":"endOffset"]=g};return c(!0),a.collapsed||c(),b},f=function(a){function b(b){var c,e,f,g=function(a){for(var b=a.parentNode.firstChild,c=0;b;){if(b===a)return c;1===b.nodeType&&"bookmark"===b.getAttribute("data-mce-type")||c++,b=b.nextSibling}return-1};c=f=a[b?"startContainer":"endContainer"],e=a[b?"startOffset":"endOffset"],c&&(1===c.nodeType&&(e=g(c),c=c.parentNode,d.remove(f)),a[b?"startContainer":"endContainer"]=c,a[b?"startOffset":"endOffset"]=e)}b(!0),b();var e=d.createRng();return e.setStart(a.startContainer,a.startOffset),a.endContainer&&e.setEnd(a.endContainer,a.endOffset),c.normalizeRange(e)};return{createBookmark:e,resolveBookmark:f}}),g("d",["a"],function(a){return a("tinymce.dom.DomQuery")}),g("9",["d","2","8"],function(a,b,c){var d=function(a){return a.dom.getParent(a.selection.getStart(!0),"OL,UL,DL")},e=function(a){var e=d(a);return b.grep(a.selection.getSelectedBlocks(),function(a){return c.isListNode(a)&&e!==a})},f=function(c,d){var e=b.map(d,function(a){var b=c.dom.getParent(a,"li,dd,dt",c.getBody());return b?b:a});return a.unique(e)},g=function(a){var d=a.selection.getSelectedBlocks();return b.grep(f(a,d),function(a){return c.isListItemNode(a)})};return{getParentList:d,getSelectedSubLists:e,getSelectedListItems:g}}),g("4",["b","c","8","9"],function(a,b,c,d){var e=a.DOM,f=function(a,b){var d;if(c.isListNode(a)){for(;d=a.firstChild;)b.appendChild(d);e.remove(a)}},g=function(a){var b,d,g;return"DT"===a.nodeName?(e.rename(a,"DD"),!0):(b=a.previousSibling,b&&c.isListNode(b)?(b.appendChild(a),!0):b&&"LI"===b.nodeName&&c.isListNode(b.lastChild)?(b.lastChild.appendChild(a),f(a.lastChild,b.lastChild),!0):(b=a.nextSibling,b&&c.isListNode(b)?(b.insertBefore(a,b.firstChild),!0):(b=a.previousSibling,!(!b||"LI"!==b.nodeName)&&(d=e.create(a.parentNode.nodeName),g=e.getStyle(a.parentNode,"listStyleType"),g&&e.setStyle(d,"listStyleType",g),b.appendChild(d),d.appendChild(a),f(a.lastChild,d),!0))))},h=function(a){var c=d.getSelectedListItems(a);if(c.length){for(var e=b.createBookmark(a.selection.getRng(!0)),f=0;f10)||h.appendChild(d.create("br",{"data-mce-bogus":"1"})):j.appendChild(d.create("br")),j};return{createNewTextBlock:e}}),g("f",["b","8","g","2"],function(a,b,c,d){var e=a.DOM,f=function(a,f,g,h){var i,j,k,l,m=function(a){d.each(k,function(b){a.parentNode.insertBefore(b,g.parentNode)}),e.remove(a)};for(k=e.select('span[data-mce-type="bookmark"]',f),h=h||c.createNewTextBlock(a,g),i=e.createRng(),i.setStartAfter(g),i.setEndAfter(f),j=i.extractContents(),l=j.firstChild;l;l=l.firstChild)if("LI"===l.nodeName&&a.dom.isEmpty(l)){e.remove(l);break}a.dom.isEmpty(j)||e.insertAfter(j,f),e.insertAfter(h,f),b.isEmpty(a.dom,g.parentNode)&&m(g.parentNode),e.remove(g),b.isEmpty(a.dom,f)&&e.remove(f)};return{splitList:f}}),g("5",["b","c","8","e","9","f","g"],function(a,b,c,d,e,f,g){var h=a.DOM,i=function(a,b){c.isEmpty(a,b)&&h.remove(b)},j=function(a,b){var e,j=b.parentNode,k=j.parentNode;return j===a.getBody()||("DD"===b.nodeName?(h.rename(b,"DT"),!0):c.isFirstChild(b)&&c.isLastChild(b)?("LI"===k.nodeName?(h.insertAfter(b,k),i(a.dom,k),h.remove(j)):c.isListNode(k)?h.remove(j,!0):(k.insertBefore(g.createNewTextBlock(a,b),j),h.remove(j)),!0):c.isFirstChild(b)?("LI"===k.nodeName?(h.insertAfter(b,k),b.appendChild(j),i(a.dom,k)):c.isListNode(k)?k.insertBefore(b,j):(k.insertBefore(g.createNewTextBlock(a,b),j),h.remove(b)),!0):c.isLastChild(b)?("LI"===k.nodeName?h.insertAfter(b,k):c.isListNode(k)?h.insertAfter(b,j):(h.insertAfter(g.createNewTextBlock(a,b),j),h.remove(b)),!0):("LI"===k.nodeName?(j=k,e=g.createNewTextBlock(a,b,"LI")):e=c.isListNode(k)?g.createNewTextBlock(a,b,"LI"):g.createNewTextBlock(a,b),f.splitList(a,j,b,e),d.normalizeLists(a.dom,j.parentNode),!0))},k=function(a){var c=e.getSelectedListItems(a);if(c.length){var d,f,g=b.createBookmark(a.selection.getRng(!0)),h=a.getBody();for(d=c.length;d--;)for(var i=c[d].parentNode;i&&i!==h;){for(f=c.length;f--;)if(c[f]===i){c.splice(d,1);break}i=i.parentNode}for(d=0;d0?w(a,d,e,b,c):y(a,d,b,c)};return{toggleList:z,removeList:p,mergeWithAdjacentLists:u}}),g("j",["a"],function(a){return a("tinymce.dom.TreeWalker")}),g("7",["i","j","3","6","c","8","e","k","9"],function(a,b,c,d,e,f,g,h,i){var j=function(c,d,e){var g,h,i=d.startContainer,j=d.startOffset;if(3===i.nodeType&&(e?j0))return i;for(g=c.schema.getNonEmptyElements(),1===i.nodeType&&(i=a.getNode(i,j)),h=new b(i,c.getBody()),e&&f.isBogusBr(c.dom,i)&&h.next();i=h[e?"next":"prev2"]();){if("LI"===i.nodeName&&!i.hasChildNodes())return i;if(g[i.nodeName])return i;if(3===i.nodeType&&i.data.length>0)return i}},k=function(a,b){var c=b.childNodes;return 1===c.length&&!f.isListNode(c[0])&&a.isBlock(c[0])},l=function(a,b){k(a,b)&&a.remove(b.firstChild,!0)},m=function(a,b,c){var d,e;if(e=k(a,c)?c.firstChild:c,l(a,b),!f.isEmpty(a,b,!0))for(;d=b.firstChild;)e.appendChild(d)},n=function(a,b,c){var d,e,g=b.parentNode;f.isChildOfBody(a,b)&&f.isChildOfBody(a,c)&&(f.isListNode(c.lastChild)&&(e=c.lastChild),g===c.lastChild&&f.isBr(g.previousSibling)&&a.remove(g.previousSibling),d=c.lastChild,d&&f.isBr(d)&&b.hasChildNodes()&&a.remove(d),f.isEmpty(a,c,!0)&&a.$(c).empty(),m(a,b,c),e&&c.appendChild(e),a.remove(b),f.isEmpty(a,g)&&g!==a.getRoot()&&a.remove(g))},o=function(a,b,c){a.dom.$(c).empty(),n(a.dom,b,c),a.selection.setCursorLocation(c)},p=function(a,b,c,d){var f=a.dom;if(f.isEmpty(d))o(a,c,d);else{var g=e.createBookmark(b);n(f,c,d),a.selection.setRng(e.resolveBookmark(g))}},q=function(a,b,c,d){var f=e.createBookmark(b);n(a.dom,c,d),a.selection.setRng(e.resolveBookmark(f))},r=function(a,b){var c,e,g,i=a.dom,k=a.selection,l=i.getParent(k.getStart(),"LI");if(l){if(c=l.parentNode,c===a.getBody()&&f.isEmpty(i,c))return!0;if(e=h.normalizeRange(k.getRng(!0)),g=i.getParent(j(a,e,b),"LI"),g&&g!==l)return b?p(a,e,g,l):q(a,e,l,g),!0;if(!g&&!b&&d.removeList(a,c.nodeName))return!0}return!1},s=function(a,b){var c=a.getParent(b.parentNode,a.isBlock);a.remove(b),c&&a.isEmpty(c)&&a.remove(c)},t=function(a,b){var c=a.dom,e=c.getParent(a.selection.getStart(),c.isBlock);if(e&&c.isEmpty(e)){var f=h.normalizeRange(a.selection.getRng(!0)),g=c.getParent(j(a,f,b),"LI");if(g)return a.undoManager.transact(function(){s(c,e),d.mergeWithAdjacentLists(c,g.parentNode),a.selection.select(g,!0),a.selection.collapse(b)}),!0}return!1},u=function(a,b){return r(a,b)||t(a,b)},v=function(a){var b=a.dom.getParent(a.selection.getStart(),"LI,DT,DD");return!!(b||i.getSelectedListItems(a).length>0)&&(a.undoManager.transact(function(){a.execCommand("Delete"),g.normalizeLists(a.dom,a.getBody())}),!0)},w=function(a,b){return a.selection.isCollapsed()?u(a,b):v(a)},x=function(a){a.on("keydown",function(b){b.keyCode===c.BACKSPACE?w(a,!1)&&b.preventDefault():b.keyCode===c.DELETE&&w(a,!0)&&b.preventDefault()})};return{setup:x,backspaceDelete:w}}),g("0",["1","2","3","4","5","6","7","8","9"],function(a,b,c,d,e,f,g,h,i){var j=function(a,b){return function(){var c=a.dom.getParent(a.selection.getStart(),"UL,OL,DL");return c&&c.nodeName===b}},k=function(a){a.on("BeforeExecCommand",function(b){var c,f=b.command.toLowerCase();if("indent"===f?d.indentSelection(a)&&(c=!0):"outdent"===f&&e.outdentSelection(a)&&(c=!0),c)return a.fire("ExecCommand",{command:b.command}),b.preventDefault(),!0}),a.addCommand("InsertUnorderedList",function(b,c){f.toggleList(a,"UL",c)}),a.addCommand("InsertOrderedList",function(b,c){f.toggleList(a,"OL",c)}),a.addCommand("InsertDefinitionList",function(b,c){f.toggleList(a,"DL",c)})},l=function(a){a.addQueryStateHandler("InsertUnorderedList",j(a,"UL")),a.addQueryStateHandler("InsertOrderedList",j(a,"OL")),a.addQueryStateHandler("InsertDefinitionList",j(a,"DL"))},m=function(a){a.on("keydown",function(b){9!==b.keyCode||c.metaKeyPressed(b)||a.dom.getParent(a.selection.getStart(),"LI,DT,DD")&&(b.preventDefault(),b.shiftKey?e.outdentSelection(a):d.indentSelection(a))})},n=function(a){var c=function(c){return function(){var d=this;a.on("NodeChange",function(a){var e=b.grep(a.parents,h.isListNode);d.active(e.length>0&&e[0].nodeName===c)})}},d=function(a,c){var d=a.settings.plugins?a.settings.plugins:"";return b.inArray(d.split(/[ ,]/),c)!==-1};d(a,"advlist")||(a.addButton("numlist",{title:"Numbered list",cmd:"InsertOrderedList",onPostRender:c("OL")}),a.addButton("bullist",{title:"Bullet list",cmd:"InsertUnorderedList",onPostRender:c("UL")})),a.addButton("indent",{icon:"indent",title:"Increase indent",cmd:"Indent",onPostRender:function(b){var c=b.control;a.on("nodechange",function(){var b=i.getSelectedListItems(a),d=b.length>0&&h.isFirstChild(b[0]);c.disabled(d)})}})};return a.add("lists",function(a){return n(a),g.setup(a),a.on("init",function(){k(a),l(a),a.getParam("lists_indent_on_tab",!0)&&m(a)}),{backspaceDelete:function(b){g.backspaceDelete(a,b)}}}),function(){}}),d("0")()}(); \ No newline at end of file +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),d=tinymce.util.Tools.resolve("tinymce.dom.RangeUtils"),l=tinymce.util.Tools.resolve("tinymce.dom.TreeWalker"),n=tinymce.util.Tools.resolve("tinymce.util.VK"),p=tinymce.util.Tools.resolve("tinymce.dom.BookmarkManager"),v=tinymce.util.Tools.resolve("tinymce.util.Tools"),t=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),o=function(e){return e&&"BR"===e.nodeName},r=function(e){return e&&3===e.nodeType},h=function(e){return e&&/^(OL|UL|DL)$/.test(e.nodeName)},i=function(e){return e&&/^(LI|DT|DD)$/.test(e.nodeName)},a=function(e){return e&&/^(TH|TD)$/.test(e.nodeName)},C=o,s=function(e){return e.parentNode.firstChild===e},c=function(e){return e.parentNode.lastChild===e},y=function(e,t){return t&&!!e.schema.getTextBlockElements()[t.nodeName]},f=function(e,t){return e&&e.nodeName in t},u=function(e,t){return!!o(t)&&!(!e.isBlock(t.nextSibling)||o(t.previousSibling))},m=function(e,t,n){var o=e.isEmpty(t);return!(n&&0=e.childNodes.length?n.data.length:0}:{container:e,offset:t}},L=function(e){var t=e.cloneRange(),n=N(e.startContainer,e.startOffset);t.setStart(n.container,n.offset);var o=N(e.endContainer,e.endOffset);return t.setEnd(o.container,o.offset),t},S=t.DOM,b=function(r){var i={},e=function(e){var t,n,o;n=r[e?"startContainer":"endContainer"],o=r[e?"startOffset":"endOffset"],1===n.nodeType&&(t=S.create("span",{"data-mce-type":"bookmark"}),n.hasChildNodes()?(o=Math.min(o,n.childNodes.length-1),e?n.insertBefore(t,n.childNodes[o]):S.insertAfter(t,n.childNodes[o])):n.appendChild(t),n=t,o=0),i[e?"startContainer":"endContainer"]=n,i[e?"startOffset":"endOffset"]=o};return e(!0),r.collapsed||e(),i},D=function(r){function e(e){var t,n,o;t=o=r[e?"startContainer":"endContainer"],n=r[e?"startOffset":"endOffset"],t&&(1===t.nodeType&&(n=function(e){for(var t=e.parentNode.firstChild,n=0;t;){if(t===e)return n;1===t.nodeType&&"bookmark"===t.getAttribute("data-mce-type")||n++,t=t.nextSibling}return-1}(t),t=t.parentNode,S.remove(o),!t.hasChildNodes()&&S.isBlock(t)&&t.appendChild(S.create("br"))),r[e?"startContainer":"endContainer"]=t,r[e?"startOffset":"endOffset"]=n)}e(!0),e();var t=S.createRng();return t.setStart(r.startContainer,r.startOffset),r.endContainer&&t.setEnd(r.endContainer,r.endOffset),L(t)},k=t.DOM,T=function(e,t){var n,o=t.parentNode;"LI"===o.nodeName&&o.firstChild===t&&((n=o.previousSibling)&&"LI"===n.nodeName?(n.appendChild(t),m(e,o)&&k.remove(o)):k.setStyle(o,"listStyleType","none")),h(o)&&(n=o.previousSibling)&&"LI"===n.nodeName&&n.appendChild(t)},I=function(t,e){v.each(v.grep(t.select("ol,ul",e)),function(e){T(t,e)})},B=tinymce.util.Tools.resolve("tinymce.dom.DomQuery"),R=function(e){var t=e.selection.getStart(!0);return e.dom.getParent(t,"OL,UL,DL",O(e,t))},O=function(e,t){var n=e.dom.getParents(t,"TD,TH");return 0 {dependencies, definition, instance (possibly undefined)} + var global = tinymce.util.Tools.resolve('tinymce.PluginManager'); -// Used when there is no 'main' module. -// The name is probably (hopefully) unique so minification removes for releases. -var register_3795 = function (id) { - var module = dem(id); - var fragments = id.split('.'); - var target = Function('return this;')(); - for (var i = 0; i < fragments.length - 1; ++i) { - if (target[fragments[i]] === undefined) - target[fragments[i]] = {}; - target = target[fragments[i]]; - } - target[fragments[fragments.length - 1]] = module; -}; - -var instantiate = function (id) { - var actual = defs[id]; - var dependencies = actual.deps; - var definition = actual.defn; - var len = dependencies.length; - var instances = new Array(len); - for (var i = 0; i < len; ++i) - instances[i] = dem(dependencies[i]); - var defResult = definition.apply(null, instances); - if (defResult === undefined) - throw 'module [' + id + '] returned undefined'; - actual.instance = defResult; -}; - -var def = function (id, dependencies, definition) { - if (typeof id !== 'string') - throw 'module id must be a string'; - else if (dependencies === undefined) - throw 'no dependencies for ' + id; - else if (definition === undefined) - throw 'no definition function for ' + id; - defs[id] = { - deps: dependencies, - defn: definition, - instance: undefined - }; -}; - -var dem = function (id) { - var actual = defs[id]; - if (actual === undefined) - throw 'module [' + id + '] was undefined'; - else if (actual.instance === undefined) - instantiate(id); - return actual.instance; -}; - -var req = function (ids, callback) { - var len = ids.length; - var instances = new Array(len); - for (var i = 0; i < len; ++i) - instances.push(dem(ids[i])); - callback.apply(null, callback); -}; - -var ephox = {}; - -ephox.bolt = { - module: { - api: { - define: def, - require: req, - demand: dem - } - } -}; - -var define = def; -var require = req; -var demand = dem; -// this helps with minificiation when using a lot of global references -var defineGlobal = function (id, ref) { - define(id, [], function () { return ref; }); -}; -/*jsc -["tinymce.plugins.media.Plugin","tinymce.core.html.Node","tinymce.core.PluginManager","tinymce.core.util.Tools","tinymce.plugins.media.core.Nodes","tinymce.plugins.media.core.Sanitize","tinymce.plugins.media.core.UpdateHtml","tinymce.plugins.media.ui.Dialog","global!tinymce.util.Tools.resolve","tinymce.core.html.Writer","tinymce.core.html.SaxParser","tinymce.core.html.Schema","tinymce.plugins.media.core.VideoScript","tinymce.core.Env","tinymce.core.dom.DOMUtils","tinymce.plugins.media.core.Size","tinymce.core.util.Delay","tinymce.plugins.media.core.HtmlToData","tinymce.plugins.media.core.Service","tinymce.plugins.media.ui.SizeManager","tinymce.plugins.media.core.DataToHtml","tinymce.core.util.Promise","tinymce.plugins.media.core.Mime","tinymce.plugins.media.core.UrlPatterns"] -jsc*/ -defineGlobal("global!tinymce.util.Tools.resolve", tinymce.util.Tools.resolve); -/** - * ResolveGlobal.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.core.html.Node', - [ - 'global!tinymce.util.Tools.resolve' - ], - function (resolve) { - return resolve('tinymce.html.Node'); - } -); - -/** - * ResolveGlobal.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.core.PluginManager', - [ - 'global!tinymce.util.Tools.resolve' - ], - function (resolve) { - return resolve('tinymce.PluginManager'); - } -); - -/** - * ResolveGlobal.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.core.util.Tools', - [ - 'global!tinymce.util.Tools.resolve' - ], - function (resolve) { - return resolve('tinymce.util.Tools'); - } -); - -/** - * ResolveGlobal.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.core.html.Writer', - [ - 'global!tinymce.util.Tools.resolve' - ], - function (resolve) { - return resolve('tinymce.html.Writer'); - } -); - -/** - * ResolveGlobal.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.core.html.SaxParser', - [ - 'global!tinymce.util.Tools.resolve' - ], - function (resolve) { - return resolve('tinymce.html.SaxParser'); - } -); + var global$1 = tinymce.util.Tools.resolve('tinymce.Env'); -/** - * ResolveGlobal.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.core.html.Schema', - [ - 'global!tinymce.util.Tools.resolve' - ], - function (resolve) { - return resolve('tinymce.html.Schema'); - } -); - -/** - * Sanitize.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.plugins.media.core.Sanitize', - [ - 'tinymce.core.util.Tools', - 'tinymce.core.html.Writer', - 'tinymce.core.html.SaxParser', - 'tinymce.core.html.Schema' - ], - function (Tools, Writer, SaxParser, Schema) { - var sanitize = function (editor, html) { - if (editor.settings.media_filter_html === false) { - return html; - } - - var writer = new Writer(); - var blocked; - - new SaxParser({ - validate: false, - allow_conditional_comments: false, - special: 'script,noscript', - - comment: function (text) { - writer.comment(text); - }, - - cdata: function (text) { - writer.cdata(text); - }, - - text: function (text, raw) { - writer.text(text, raw); - }, - - start: function (name, attrs, empty) { - blocked = true; - - if (name === 'script' || name === 'noscript') { - return; - } - - for (var i = 0; i < attrs.length; i++) { - if (attrs[i].name.indexOf('on') === 0) { - return; - } - - if (attrs[i].name === 'style') { - attrs[i].value = editor.dom.serializeStyle(editor.dom.parseStyle(attrs[i].value), name); - } - } + var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools'); - writer.start(name, attrs, empty); - blocked = false; - }, - - end: function (name) { - if (blocked) { - return; - } - - writer.end(name); - } - }, new Schema({})).parse(html); + var getScripts = function (editor) { + return editor.getParam('media_scripts'); + }; + var getAudioTemplateCallback = function (editor) { + return editor.getParam('audio_template_callback'); + }; + var getVideoTemplateCallback = function (editor) { + return editor.getParam('video_template_callback'); + }; + var hasLiveEmbeds = function (editor) { + return editor.getParam('media_live_embeds', true); + }; + var shouldFilterHtml = function (editor) { + return editor.getParam('media_filter_html', true); + }; + var getUrlResolver = function (editor) { + return editor.getParam('media_url_resolver'); + }; + var hasAltSource = function (editor) { + return editor.getParam('media_alt_source', true); + }; + var hasPoster = function (editor) { + return editor.getParam('media_poster', true); + }; + var hasDimensions = function (editor) { + return editor.getParam('media_dimensions', true); + }; + var $_bmkzfegajfuw8pol = { + getScripts: getScripts, + getAudioTemplateCallback: getAudioTemplateCallback, + getVideoTemplateCallback: getVideoTemplateCallback, + hasLiveEmbeds: hasLiveEmbeds, + shouldFilterHtml: shouldFilterHtml, + getUrlResolver: getUrlResolver, + hasAltSource: hasAltSource, + hasPoster: hasPoster, + hasDimensions: hasDimensions + }; - return writer.getContent(); - }; + var global$3 = tinymce.util.Tools.resolve('tinymce.html.SaxParser'); - return { - sanitize: sanitize - }; - } -); -/** - * VideoScript.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ + var global$4 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils'); -define( - 'tinymce.plugins.media.core.VideoScript', - [ - ], - function () { - var getVideoScriptMatch = function (prefixes, src) { - // var prefixes = editor.settings.media_scripts; - if (prefixes) { - for (var i = 0; i < prefixes.length; i++) { - if (src.indexOf(prefixes[i].filter) !== -1) { - return prefixes[i]; - } + var getVideoScriptMatch = function (prefixes, src) { + if (prefixes) { + for (var i = 0; i < prefixes.length; i++) { + if (src.indexOf(prefixes[i].filter) !== -1) { + return prefixes[i]; } } - }; - - return { - getVideoScriptMatch: getVideoScriptMatch - }; - } -); -/** - * ResolveGlobal.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.core.Env', - [ - 'global!tinymce.util.Tools.resolve' - ], - function (resolve) { - return resolve('tinymce.Env'); - } -); - -/** - * Nodes.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.plugins.media.core.Nodes', - [ - 'tinymce.plugins.media.core.Sanitize', - 'tinymce.plugins.media.core.VideoScript', - 'tinymce.core.html.Node', - 'tinymce.core.Env' - ], - function (Sanitize, VideoScript, Node, Env) { - var createPlaceholderNode = function (editor, node) { - var placeHolder; - var name = node.name; - - placeHolder = new Node('img', 1); - placeHolder.shortEnded = true; - - retainAttributesAndInnerHtml(editor, node, placeHolder); - - placeHolder.attr({ - width: node.attr('width') || "300", - height: node.attr('height') || (name === "audio" ? "30" : "150"), - style: node.attr('style'), - src: Env.transparentSrc, - "data-mce-object": name, - "class": "mce-object mce-object-" + name - }); - - return placeHolder; - }; - - var createPreviewIframeNode = function (editor, node) { - var previewWrapper; - var previewNode; - var shimNode; - var name = node.name; - - previewWrapper = new Node('span', 1); - previewWrapper.attr({ - contentEditable: 'false', - style: node.attr('style'), - "data-mce-object": name, - "class": "mce-preview-object mce-object-" + name - }); - - retainAttributesAndInnerHtml(editor, node, previewWrapper); - - previewNode = new Node(name, 1); - previewNode.attr({ - src: node.attr('src'), - allowfullscreen: node.attr('allowfullscreen'), - width: node.attr('width') || "300", - height: node.attr('height') || (name === "audio" ? "30" : "150"), - frameborder: '0' - }); - - shimNode = new Node('span', 1); - shimNode.attr('class', 'mce-shim'); - - previewWrapper.append(previewNode); - previewWrapper.append(shimNode); + } + }; + var $_9fg1sigejfuw8poq = { getVideoScriptMatch: getVideoScriptMatch }; - return previewWrapper; + var trimPx = function (value) { + return value.replace(/px$/, ''); + }; + var addPx = function (value) { + return /^[0-9.]+$/.test(value) ? value + 'px' : value; + }; + var getSize = function (name) { + return function (elm) { + return elm ? trimPx(elm.style[name]) : ''; }; - - var retainAttributesAndInnerHtml = function (editor, sourceNode, targetNode) { - var attrName; - var attrValue; - var attribs; - var ai; - var innerHtml; - - // Prefix all attributes except width, height and style since we - // will add these to the placeholder - attribs = sourceNode.attributes; - ai = attribs.length; - while (ai--) { - attrName = attribs[ai].name; - attrValue = attribs[ai].value; - - if (attrName !== "width" && attrName !== "height" && attrName !== "style") { - if (attrName === "data" || attrName === "src") { - attrValue = editor.convertURL(attrValue, attrName); - } - - targetNode.attr('data-mce-p-' + attrName, attrValue); - } - } - - // Place the inner HTML contents inside an escaped attribute - // This enables us to copy/paste the fake object - innerHtml = sourceNode.firstChild && sourceNode.firstChild.value; - if (innerHtml) { - targetNode.attr("data-mce-html", escape(Sanitize.sanitize(editor, innerHtml))); - targetNode.firstChild = null; + }; + var setSize = function (name) { + return function (elm, value) { + if (elm) { + elm.style[name] = addPx(value); } }; + }; + var $_7rx1rygfjfuw8por = { + getMaxWidth: getSize('maxWidth'), + getMaxHeight: getSize('maxHeight'), + setMaxWidth: setSize('maxWidth'), + setMaxHeight: setSize('maxHeight') + }; - var isWithinEphoxEmbed = function (node) { - while ((node = node.parent)) { - if (node.attr('data-ephox-embed-iri')) { - return true; + var DOM = global$4.DOM; + var getEphoxEmbedIri = function (elm) { + return DOM.getAttrib(elm, 'data-ephox-embed-iri'); + }; + var isEphoxEmbed = function (html) { + var fragment = DOM.createFragment(html); + return getEphoxEmbedIri(fragment.firstChild) !== ''; + }; + var htmlToDataSax = function (prefixes, html) { + var data = {}; + global$3({ + validate: false, + allow_conditional_comments: true, + special: 'script,noscript', + start: function (name, attrs) { + if (!data.source1 && name === 'param') { + data.source1 = attrs.map.movie; } - } - - return false; - }; - - var placeHolderConverter = function (editor) { - return function (nodes) { - var i = nodes.length; - var node; - var videoScript; - - while (i--) { - node = nodes[i]; - if (!node.parent) { - continue; - } - - if (node.parent.attr('data-mce-object')) { - continue; - } - - if (node.name === 'script') { - videoScript = VideoScript.getVideoScriptMatch(editor.settings.media_scripts, node.attr('src')); - if (!videoScript) { - continue; - } + if (name === 'iframe' || name === 'object' || name === 'embed' || name === 'video' || name === 'audio') { + if (!data.type) { + data.type = name; } - - if (videoScript) { - if (videoScript.width) { - node.attr('width', videoScript.width.toString()); - } - - if (videoScript.height) { - node.attr('height', videoScript.height.toString()); - } + data = global$2.extend(attrs.map, data); + } + if (name === 'script') { + var videoScript = $_9fg1sigejfuw8poq.getVideoScriptMatch(prefixes, attrs.map.src); + if (!videoScript) { + return; } - - if (node.name === 'iframe' && editor.settings.media_live_embeds !== false && Env.ceFalse) { - if (!isWithinEphoxEmbed(node)) { - node.replace(createPreviewIframeNode(editor, node)); - } - } else { - if (!isWithinEphoxEmbed(node)) { - node.replace(createPlaceholderNode(editor, node)); - } + data = { + type: 'script', + source1: attrs.map.src, + width: videoScript.width, + height: videoScript.height + }; + } + if (name === 'source') { + if (!data.source1) { + data.source1 = attrs.map.src; + } else if (!data.source2) { + data.source2 = attrs.map.src; } } - }; - }; - - return { - createPreviewIframeNode: createPreviewIframeNode, - createPlaceholderNode: createPlaceholderNode, - placeHolderConverter: placeHolderConverter - }; - } -); -/** - * ResolveGlobal.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.core.dom.DOMUtils', - [ - 'global!tinymce.util.Tools.resolve' - ], - function (resolve) { - return resolve('tinymce.dom.DOMUtils'); - } -); - -/** - * Size.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.plugins.media.core.Size', - [ - ], - function () { - var trimPx = function (value) { - return value.replace(/px$/, ''); - }; - - var addPx = function (value) { - return /^[0-9.]+$/.test(value) ? (value + 'px') : value; - }; - - var getSize = function (name) { - return function (elm) { - return elm ? trimPx(elm.style[name]) : ''; - }; - }; - - var setSize = function (name) { - return function (elm, value) { - if (elm) { - elm.style[name] = addPx(value); + if (name === 'img' && !data.poster) { + data.poster = attrs.map.src; } - }; - }; - + } + }).parse(html); + data.source1 = data.source1 || data.src || data.data; + data.source2 = data.source2 || ''; + data.poster = data.poster || ''; + return data; + }; + var ephoxEmbedHtmlToData = function (html) { + var fragment = DOM.createFragment(html); + var div = fragment.firstChild; return { - getMaxWidth: getSize('maxWidth'), - getMaxHeight: getSize('maxHeight'), - setMaxWidth: setSize('maxWidth'), - setMaxHeight: setSize('maxHeight') + type: 'ephox-embed-iri', + source1: getEphoxEmbedIri(div), + source2: '', + poster: '', + width: $_7rx1rygfjfuw8por.getMaxWidth(div), + height: $_7rx1rygfjfuw8por.getMaxHeight(div) }; - } -); -/** - * UpdateHtml.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.plugins.media.core.UpdateHtml', - [ - 'tinymce.core.html.Writer', - 'tinymce.core.html.SaxParser', - 'tinymce.core.html.Schema', - 'tinymce.core.dom.DOMUtils', - 'tinymce.plugins.media.core.Size' - ], - function (Writer, SaxParser, Schema, DOMUtils, Size) { - var DOM = DOMUtils.DOM; - - var setAttributes = function (attrs, updatedAttrs) { - var name; - var i; - var value; - var attr; - - for (name in updatedAttrs) { - value = "" + updatedAttrs[name]; - - if (attrs.map[name]) { - i = attrs.length; - while (i--) { - attr = attrs[i]; - - if (attr.name === name) { - if (value) { - attrs.map[name] = value; - attr.value = value; - } else { - delete attrs.map[name]; - attrs.splice(i, 1); - } + }; + var htmlToData = function (prefixes, html) { + return isEphoxEmbed(html) ? ephoxEmbedHtmlToData(html) : htmlToDataSax(prefixes, html); + }; + var $_g969ozgbjfuw8pom = { htmlToData: htmlToData }; + + var global$5 = tinymce.util.Tools.resolve('tinymce.util.Promise'); + + var guess = function (url) { + var mimes = { + mp3: 'audio/mpeg', + wav: 'audio/wav', + mp4: 'video/mp4', + webm: 'video/webm', + ogg: 'video/ogg', + swf: 'application/x-shockwave-flash' + }; + var fileEnd = url.toLowerCase().split('.').pop(); + var mime = mimes[fileEnd]; + return mime ? mime : ''; + }; + var $_dq3p76gjjfuw8poy = { guess: guess }; + + var global$6 = tinymce.util.Tools.resolve('tinymce.html.Writer'); + + var global$7 = tinymce.util.Tools.resolve('tinymce.html.Schema'); + + var DOM$1 = global$4.DOM; + var setAttributes = function (attrs, updatedAttrs) { + var name; + var i; + var value; + var attr; + for (name in updatedAttrs) { + value = '' + updatedAttrs[name]; + if (attrs.map[name]) { + i = attrs.length; + while (i--) { + attr = attrs[i]; + if (attr.name === name) { + if (value) { + attrs.map[name] = value; + attr.value = value; + } else { + delete attrs.map[name]; + attrs.splice(i, 1); } } - } else if (value) { - attrs.push({ - name: name, - value: value - }); - - attrs.map[name] = value; } + } else if (value) { + attrs.push({ + name: name, + value: value + }); + attrs.map[name] = value; } - }; - - var normalizeHtml = function (html) { - var writer = new Writer(); - var parser = new SaxParser(writer); - parser.parse(html); - return writer.getContent(); - }; - - var updateHtmlSax = function (html, data, updateAll) { - var writer = new Writer(); - var sourceCount = 0; - var hasImage; - - new SaxParser({ - validate: false, - allow_conditional_comments: true, - special: 'script,noscript', - - comment: function (text) { - writer.comment(text); - }, - - cdata: function (text) { - writer.cdata(text); - }, - - text: function (text, raw) { - writer.text(text, raw); - }, - - start: function (name, attrs, empty) { - switch (name) { - case "video": - case "object": - case "embed": - case "img": - case "iframe": - if (data.height !== undefined && data.width !== undefined) { - setAttributes(attrs, { - width: data.width, - height: data.height - }); - } - break; - } - - if (updateAll) { - switch (name) { - case "video": - setAttributes(attrs, { - poster: data.poster, - src: "" - }); - - if (data.source2) { - setAttributes(attrs, { - src: "" - }); - } - break; - - case "iframe": - setAttributes(attrs, { - src: data.source1 - }); - break; - - case "source": - sourceCount++; - - if (sourceCount <= 2) { - setAttributes(attrs, { - src: data["source" + sourceCount], - type: data["source" + sourceCount + "mime"] - }); - - if (!data["source" + sourceCount]) { - return; - } - } - break; - - case "img": - if (!data.poster) { - return; - } - - hasImage = true; - break; - } - } - - writer.start(name, attrs, empty); - }, - - end: function (name) { - if (name === "video" && updateAll) { - for (var index = 1; index <= 2; index++) { - if (data["source" + index]) { - var attrs = []; - attrs.map = {}; - - if (sourceCount < index) { - setAttributes(attrs, { - src: data["source" + index], - type: data["source" + index + "mime"] - }); - - writer.start("source", attrs, true); - } - } - } - } - - if (data.poster && name === "object" && updateAll && !hasImage) { - var imgAttrs = []; - imgAttrs.map = {}; - - setAttributes(imgAttrs, { - src: data.poster, + } + }; + var normalizeHtml = function (html) { + var writer = global$6(); + var parser = global$3(writer); + parser.parse(html); + return writer.getContent(); + }; + var updateHtmlSax = function (html, data, updateAll) { + var writer = global$6(); + var sourceCount = 0; + var hasImage; + global$3({ + validate: false, + allow_conditional_comments: true, + special: 'script,noscript', + comment: function (text) { + writer.comment(text); + }, + cdata: function (text) { + writer.cdata(text); + }, + text: function (text, raw) { + writer.text(text, raw); + }, + start: function (name, attrs, empty) { + switch (name) { + case 'video': + case 'object': + case 'embed': + case 'img': + case 'iframe': + if (data.height !== undefined && data.width !== undefined) { + setAttributes(attrs, { width: data.width, height: data.height }); - - writer.start("img", imgAttrs, true); } - - writer.end(name); + break; } - }, new Schema({})).parse(html); - - return writer.getContent(); - }; - - var isEphoxEmbed = function (html) { - var fragment = DOM.createFragment(html); - return DOM.getAttrib(fragment.firstChild, 'data-ephox-embed-iri') !== ''; - }; - - var updateEphoxEmbed = function (html, data) { - var fragment = DOM.createFragment(html); - var div = fragment.firstChild; - - Size.setMaxWidth(div, data.width); - Size.setMaxHeight(div, data.height); - - return normalizeHtml(div.outerHTML); - }; - - var updateHtml = function (html, data, updateAll) { - return isEphoxEmbed(html) ? updateEphoxEmbed(html, data) : updateHtmlSax(html, data, updateAll); - }; - - return { - updateHtml: updateHtml - }; - } -); -/** - * ResolveGlobal.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.core.util.Delay', - [ - 'global!tinymce.util.Tools.resolve' - ], - function (resolve) { - return resolve('tinymce.util.Delay'); - } -); - -/** - * HtmlToData.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.plugins.media.core.HtmlToData', - [ - 'tinymce.core.util.Tools', - 'tinymce.core.html.SaxParser', - 'tinymce.core.html.Schema', - 'tinymce.core.dom.DOMUtils', - 'tinymce.plugins.media.core.VideoScript', - 'tinymce.plugins.media.core.Size' - ], - function (Tools, SaxParser, Schema, DOMUtils, VideoScript, Size) { - var DOM = DOMUtils.DOM; - - var getEphoxEmbedIri = function (elm) { - return DOM.getAttrib(elm, 'data-ephox-embed-iri'); - }; - - var isEphoxEmbed = function (html) { - var fragment = DOM.createFragment(html); - return getEphoxEmbedIri(fragment.firstChild) !== ''; - }; - - var htmlToDataSax = function (prefixes, html) { - var data = {}; - - new SaxParser({ - validate: false, - allow_conditional_comments: true, - special: 'script,noscript', - start: function (name, attrs) { - if (!data.source1 && name === "param") { - data.source1 = attrs.map.movie; - } - - if (name === "iframe" || name === "object" || name === "embed" || name === "video" || name === "audio") { - if (!data.type) { - data.type = name; + if (updateAll) { + switch (name) { + case 'video': + setAttributes(attrs, { + poster: data.poster, + src: '' + }); + if (data.source2) { + setAttributes(attrs, { src: '' }); } - - data = Tools.extend(attrs.map, data); - } - - if (name === "script") { - var videoScript = VideoScript.getVideoScriptMatch(prefixes, attrs.map.src); - if (!videoScript) { + break; + case 'iframe': + setAttributes(attrs, { src: data.source1 }); + break; + case 'source': + sourceCount++; + if (sourceCount <= 2) { + setAttributes(attrs, { + src: data['source' + sourceCount], + type: data['source' + sourceCount + 'mime'] + }); + if (!data['source' + sourceCount]) { + return; + } + } + break; + case 'img': + if (!data.poster) { return; } - - data = { - type: "script", - source1: attrs.map.src, - width: videoScript.width, - height: videoScript.height - }; + hasImage = true; + break; } - - if (name === "source") { - if (!data.source1) { - data.source1 = attrs.map.src; - } else if (!data.source2) { - data.source2 = attrs.map.src; + } + writer.start(name, attrs, empty); + }, + end: function (name) { + if (name === 'video' && updateAll) { + for (var index = 1; index <= 2; index++) { + if (data['source' + index]) { + var attrs = []; + attrs.map = {}; + if (sourceCount < index) { + setAttributes(attrs, { + src: data['source' + index], + type: data['source' + index + 'mime'] + }); + writer.start('source', attrs, true); + } } } - - if (name === "img" && !data.poster) { - data.poster = attrs.map.src; - } } - }).parse(html); - - data.source1 = data.source1 || data.src || data.data; - data.source2 = data.source2 || ''; - data.poster = data.poster || ''; - - return data; - }; - - var ephoxEmbedHtmlToData = function (html) { - var fragment = DOM.createFragment(html); - var div = fragment.firstChild; - - return { - type: 'ephox-embed-iri', - source1: getEphoxEmbedIri(div), - source2: '', - poster: '', - width: Size.getMaxWidth(div), - height: Size.getMaxHeight(div) - }; - }; - - var htmlToData = function (prefixes, html) { - return isEphoxEmbed(html) ? ephoxEmbedHtmlToData(html) : htmlToDataSax(prefixes, html); - }; - - return { - htmlToData: htmlToData - }; - } -); -/** - * Mime.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.plugins.media.core.Mime', - [ - ], - function () { - var guess = function (url) { - var mimes = { - 'mp3': 'audio/mpeg', - 'wav': 'audio/wav', - 'mp4': 'video/mp4', - 'webm': 'video/webm', - 'ogg': 'video/ogg', - 'swf': 'application/x-shockwave-flash' - }; - var fileEnd = url.toLowerCase().split('.').pop(); - var mime = mimes[fileEnd]; - - return mime ? mime : ''; - }; - - return { - guess: guess - }; - } -); -/** - * UrlPatterns.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.plugins.media.core.UrlPatterns', - [ - ], - function () { - var urlPatterns = [ - { - regex: /youtu\.be\/([\w\-.]+)/, - type: 'iframe', w: 560, h: 314, - url: '//www.youtube.com/embed/$1', - allowFullscreen: true - }, - { - regex: /youtube\.com(.+)v=([^&]+)/, - type: 'iframe', w: 560, h: 314, - url: '//www.youtube.com/embed/$2', - allowFullscreen: true - }, - { - regex: /youtube.com\/embed\/([a-z0-9\-_]+(?:\?.+)?)/i, - type: 'iframe', w: 560, h: 314, - url: '//www.youtube.com/embed/$1', - allowFullscreen: true - }, - { - regex: /vimeo\.com\/([0-9]+)/, - type: 'iframe', w: 425, h: 350, - url: '//player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc', - allowfullscreen: true - }, - { - regex: /vimeo\.com\/(.*)\/([0-9]+)/, - type: "iframe", w: 425, h: 350, - url: "//player.vimeo.com/video/$2?title=0&byline=0", - allowfullscreen: true - }, - { - regex: /maps\.google\.([a-z]{2,3})\/maps\/(.+)msid=(.+)/, - type: 'iframe', w: 425, h: 350, - url: '//maps.google.com/maps/ms?msid=$2&output=embed"', - allowFullscreen: false - }, - { - regex: /dailymotion\.com\/video\/([^_]+)/, - type: 'iframe', w: 480, h: 270, - url: '//www.dailymotion.com/embed/video/$1', - allowFullscreen: true + if (data.poster && name === 'object' && updateAll && !hasImage) { + var imgAttrs = []; + imgAttrs.map = {}; + setAttributes(imgAttrs, { + src: data.poster, + width: data.width, + height: data.height + }); + writer.start('img', imgAttrs, true); + } + writer.end(name); } - ]; - - return { - urlPatterns: urlPatterns + }, global$7({})).parse(html); + return writer.getContent(); + }; + var isEphoxEmbed$1 = function (html) { + var fragment = DOM$1.createFragment(html); + return DOM$1.getAttrib(fragment.firstChild, 'data-ephox-embed-iri') !== ''; + }; + var updateEphoxEmbed = function (html, data) { + var fragment = DOM$1.createFragment(html); + var div = fragment.firstChild; + $_7rx1rygfjfuw8por.setMaxWidth(div, data.width); + $_7rx1rygfjfuw8por.setMaxHeight(div, data.height); + return normalizeHtml(div.outerHTML); + }; + var updateHtml = function (html, data, updateAll) { + return isEphoxEmbed$1(html) ? updateEphoxEmbed(html, data) : updateHtmlSax(html, data, updateAll); + }; + var $_9oq1mlgkjfuw8pp0 = { updateHtml: updateHtml }; + + var urlPatterns = [ + { + regex: /youtu\.be\/([\w\-_\?&=.]+)/i, + type: 'iframe', + w: 560, + h: 314, + url: '//www.youtube.com/embed/$1', + allowFullscreen: true + }, + { + regex: /youtube\.com(.+)v=([^&]+)(&([a-z0-9&=\-_]+))?/i, + type: 'iframe', + w: 560, + h: 314, + url: '//www.youtube.com/embed/$2?$4', + allowFullscreen: true + }, + { + regex: /youtube.com\/embed\/([a-z0-9\?&=\-_]+)/i, + type: 'iframe', + w: 560, + h: 314, + url: '//www.youtube.com/embed/$1', + allowFullscreen: true + }, + { + regex: /vimeo\.com\/([0-9]+)/, + type: 'iframe', + w: 425, + h: 350, + url: '//player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc', + allowFullscreen: true + }, + { + regex: /vimeo\.com\/(.*)\/([0-9]+)/, + type: 'iframe', + w: 425, + h: 350, + url: '//player.vimeo.com/video/$2?title=0&byline=0', + allowFullscreen: true + }, + { + regex: /maps\.google\.([a-z]{2,3})\/maps\/(.+)msid=(.+)/, + type: 'iframe', + w: 425, + h: 350, + url: '//maps.google.com/maps/ms?msid=$2&output=embed"', + allowFullscreen: false + }, + { + regex: /dailymotion\.com\/video\/([^_]+)/, + type: 'iframe', + w: 480, + h: 270, + url: '//www.dailymotion.com/embed/video/$1', + allowFullscreen: true + }, + { + regex: /dai\.ly\/([^_]+)/, + type: 'iframe', + w: 480, + h: 270, + url: '//www.dailymotion.com/embed/video/$1', + allowFullscreen: true + } + ]; + var getUrl = function (pattern, url) { + var match = pattern.regex.exec(url); + var newUrl = pattern.url; + var _loop_1 = function (i) { + newUrl = newUrl.replace('$' + i, function () { + return match[i] ? match[i] : ''; + }); }; - } -); -/** - * DataToHtml.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.plugins.media.core.DataToHtml', - [ - 'tinymce.plugins.media.core.Mime', - 'tinymce.plugins.media.core.HtmlToData', - 'tinymce.plugins.media.core.UrlPatterns', - 'tinymce.plugins.media.core.VideoScript', - 'tinymce.plugins.media.core.UpdateHtml', - 'tinymce.core.util.Tools' - ], - function (Mime, HtmlToData, UrlPatterns, VideoScript, UpdateHtml, Tools) { - var dataToHtml = function (editor, dataIn) { - var html = ''; - var data = Tools.extend({}, dataIn); + for (var i = 0; i < match.length; i++) { + _loop_1(i); + } + return newUrl.replace(/\?$/, ''); + }; + var matchPattern = function (url) { + var pattern = urlPatterns.filter(function (pattern) { + return pattern.regex.test(url); + }); + if (pattern.length > 0) { + return global$2.extend({}, pattern[0], { url: getUrl(pattern[0], url) }); + } else { + return null; + } + }; + var getIframeHtml = function (data) { + var allowFullscreen = data.allowFullscreen ? ' allowFullscreen="1"' : ''; + return ''; + }; + var getFlashHtml = function (data) { + var html = ''; + if (data.poster) { + html += ''; + } + html += ''; + return html; + }; + var getAudioHtml = function (data, audioTemplateCallback) { + if (audioTemplateCallback) { + return audioTemplateCallback(data); + } else { + return ''; + } + }; + var getVideoHtml = function (data, videoTemplateCallback) { + if (videoTemplateCallback) { + return videoTemplateCallback(data); + } else { + return ''; + } + }; + var getScriptHtml = function (data) { + return ''; + }; + var dataToHtml = function (editor, dataIn) { + var data = global$2.extend({}, dataIn); + if (!data.source1) { + global$2.extend(data, $_g969ozgbjfuw8pom.htmlToData($_bmkzfegajfuw8pol.getScripts(editor), data.embed)); if (!data.source1) { - Tools.extend(data, HtmlToData.htmlToData(editor.settings.media_scripts, data.embed)); - if (!data.source1) { - return ''; - } + return ''; } - - if (!data.source2) { - data.source2 = ''; - } - - if (!data.poster) { - data.poster = ''; + } + if (!data.source2) { + data.source2 = ''; + } + if (!data.poster) { + data.poster = ''; + } + data.source1 = editor.convertURL(data.source1, 'source'); + data.source2 = editor.convertURL(data.source2, 'source'); + data.source1mime = $_dq3p76gjjfuw8poy.guess(data.source1); + data.source2mime = $_dq3p76gjjfuw8poy.guess(data.source2); + data.poster = editor.convertURL(data.poster, 'poster'); + var pattern = matchPattern(data.source1); + if (pattern) { + data.source1 = pattern.url; + data.type = pattern.type; + data.allowFullscreen = pattern.allowFullscreen; + data.width = data.width || pattern.w; + data.height = data.height || pattern.h; + } + if (data.embed) { + return $_9oq1mlgkjfuw8pp0.updateHtml(data.embed, data, true); + } else { + var videoScript = $_9fg1sigejfuw8poq.getVideoScriptMatch($_bmkzfegajfuw8pol.getScripts(editor), data.source1); + if (videoScript) { + data.type = 'script'; + data.width = videoScript.width; + data.height = videoScript.height; } - - data.source1 = editor.convertURL(data.source1, "source"); - data.source2 = editor.convertURL(data.source2, "source"); - data.source1mime = Mime.guess(data.source1); - data.source2mime = Mime.guess(data.source2); - data.poster = editor.convertURL(data.poster, "poster"); - - Tools.each(UrlPatterns.urlPatterns, function (pattern) { - var i; - var url; - - var match = pattern.regex.exec(data.source1); - - if (match) { - url = pattern.url; - - for (i = 0; match[i]; i++) { - /*jshint loopfunc:true*/ - /*eslint no-loop-func:0 */ - url = url.replace('$' + i, function () { - return match[i]; - }); - } - - data.source1 = url; - data.type = pattern.type; - data.allowFullscreen = pattern.allowFullscreen; - data.width = data.width || pattern.w; - data.height = data.height || pattern.h; - } + var audioTemplateCallback = $_bmkzfegajfuw8pol.getAudioTemplateCallback(editor); + var videoTemplateCallback = $_bmkzfegajfuw8pol.getVideoTemplateCallback(editor); + data.width = data.width || 300; + data.height = data.height || 150; + global$2.each(data, function (value, key) { + data[key] = editor.dom.encode(value); }); - - if (data.embed) { - html = UpdateHtml.updateHtml(data.embed, data, true); + if (data.type === 'iframe') { + return getIframeHtml(data); + } else if (data.source1mime === 'application/x-shockwave-flash') { + return getFlashHtml(data); + } else if (data.source1mime.indexOf('audio') !== -1) { + return getAudioHtml(data, audioTemplateCallback); + } else if (data.type === 'script') { + return getScriptHtml(data); } else { - var videoScript = VideoScript.getVideoScriptMatch(editor.settings.media_scripts, data.source1); - if (videoScript) { - data.type = 'script'; - data.width = videoScript.width; - data.height = videoScript.height; - } - - data.width = data.width || 300; - data.height = data.height || 150; - - Tools.each(data, function (value, key) { - data[key] = editor.dom.encode(value); - }); - - if (data.type === "iframe") { - var allowFullscreen = data.allowFullscreen ? ' allowFullscreen="1"' : ''; - html += - ''; - } else if (data.source1mime === "application/x-shockwave-flash") { - html += - ''; - - if (data.poster) { - html += ''; - } - - html += ''; - } else if (data.source1mime.indexOf('audio') !== -1) { - if (editor.settings.audio_template_callback) { - html = editor.settings.audio_template_callback(data); - } else { - html += ( - '' - ); - } - } else if (data.type === "script") { - html += ''; - } else { - if (editor.settings.video_template_callback) { - html = editor.settings.video_template_callback(data); - } else { - html = ( - '' - ); - } - } + return getVideoHtml(data, videoTemplateCallback); } - - return html; - }; - - return { - dataToHtml: dataToHtml - }; - } -); -/** - * ResolveGlobal.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.core.util.Promise', - [ - 'global!tinymce.util.Tools.resolve' - ], - function (resolve) { - return resolve('tinymce.util.Promise'); - } -); - -/** - * Service.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.plugins.media.core.Service', - [ - 'tinymce.plugins.media.core.DataToHtml', - 'tinymce.core.util.Promise' - ], - function (DataToHtml, Promise) { - var embedPromise = function (data, dataToHtml, handler) { - var cache = {}; - return new Promise(function (res, rej) { - var wrappedResolve = function (response) { - if (response.html) { - cache[data.source1] = response; - } - return res({ - url: data.source1, - html: response.html ? response.html : dataToHtml(data) - }); - }; - if (cache[data.source1]) { - wrappedResolve(cache[data.source1]); - } else { - handler({ url: data.source1 }, wrappedResolve, rej); + } + }; + var $_ekbiypgijfuw8pov = { dataToHtml: dataToHtml }; + + var cache = {}; + var embedPromise = function (data, dataToHtml, handler) { + return new global$5(function (res, rej) { + var wrappedResolve = function (response) { + if (response.html) { + cache[data.source1] = response; } + return res({ + url: data.source1, + html: response.html ? response.html : dataToHtml(data) + }); + }; + if (cache[data.source1]) { + wrappedResolve(cache[data.source1]); + } else { + handler({ url: data.source1 }, wrappedResolve, rej); + } + }); + }; + var defaultPromise = function (data, dataToHtml) { + return new global$5(function (res) { + res({ + html: dataToHtml(data), + url: data.source1 }); + }); + }; + var loadedData = function (editor) { + return function (data) { + return $_ekbiypgijfuw8pov.dataToHtml(editor, data); }; + }; + var getEmbedHtml = function (editor, data) { + var embedHandler = $_bmkzfegajfuw8pol.getUrlResolver(editor); + return embedHandler ? embedPromise(data, loadedData(editor), embedHandler) : defaultPromise(data, loadedData(editor)); + }; + var isCached = function (url) { + return cache.hasOwnProperty(url); + }; + var $_6v4rhbggjfuw8pos = { + getEmbedHtml: getEmbedHtml, + isCached: isCached + }; - var defaultPromise = function (data, dataToHtml) { - return new Promise(function (res) { - res({ html: dataToHtml(data), url: data.source1 }); + var doSyncSize = function (widthCtrl, heightCtrl) { + widthCtrl.state.set('oldVal', widthCtrl.value()); + heightCtrl.state.set('oldVal', heightCtrl.value()); + }; + var doSizeControls = function (win, f) { + var widthCtrl = win.find('#width')[0]; + var heightCtrl = win.find('#height')[0]; + var constrained = win.find('#constrain')[0]; + if (widthCtrl && heightCtrl && constrained) { + f(widthCtrl, heightCtrl, constrained.checked()); + } + }; + var doUpdateSize = function (widthCtrl, heightCtrl, isContrained) { + var oldWidth = widthCtrl.state.get('oldVal'); + var oldHeight = heightCtrl.state.get('oldVal'); + var newWidth = widthCtrl.value(); + var newHeight = heightCtrl.value(); + if (isContrained && oldWidth && oldHeight && newWidth && newHeight) { + if (newWidth !== oldWidth) { + newHeight = Math.round(newWidth / oldWidth * newHeight); + if (!isNaN(newHeight)) { + heightCtrl.value(newHeight); + } + } else { + newWidth = Math.round(newHeight / oldHeight * newWidth); + if (!isNaN(newWidth)) { + widthCtrl.value(newWidth); + } + } + } + doSyncSize(widthCtrl, heightCtrl); + }; + var syncSize = function (win) { + doSizeControls(win, doSyncSize); + }; + var updateSize = function (win) { + doSizeControls(win, doUpdateSize); + }; + var createUi = function (onChange) { + var recalcSize = function () { + onChange(function (win) { + updateSize(win); }); }; - - var loadedData = function (editor) { - return function (data) { - return DataToHtml.dataToHtml(editor, data); - }; - }; - - var getEmbedHtml = function (editor, data) { - var embedHandler = editor.settings.media_url_resolver; - - return embedHandler ? embedPromise(data, loadedData(editor), embedHandler) : defaultPromise(data, loadedData(editor)); - }; - return { - getEmbedHtml: getEmbedHtml + type: 'container', + label: 'Dimensions', + layout: 'flex', + align: 'center', + spacing: 5, + items: [ + { + name: 'width', + type: 'textbox', + maxLength: 5, + size: 5, + onchange: recalcSize, + ariaLabel: 'Width' + }, + { + type: 'label', + text: 'x' + }, + { + name: 'height', + type: 'textbox', + maxLength: 5, + size: 5, + onchange: recalcSize, + ariaLabel: 'Height' + }, + { + name: 'constrain', + type: 'checkbox', + checked: true, + text: 'Constrain proportions' + } + ] }; - } -); -/** - * SizeManager.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ + }; + var $_32c8argojfuw8ppe = { + createUi: createUi, + syncSize: syncSize, + updateSize: updateSize + }; -define( - 'tinymce.plugins.media.ui.SizeManager', - [ - ], - function () { - var doSyncSize = function (widthCtrl, heightCtrl) { - widthCtrl.state.set('oldVal', widthCtrl.value()); - heightCtrl.state.set('oldVal', heightCtrl.value()); + var embedChange = global$1.ie && global$1.ie <= 8 ? 'onChange' : 'onInput'; + var handleError = function (editor) { + return function (error) { + var errorMessage = error && error.msg ? 'Media embed handler error: ' + error.msg : 'Media embed handler threw unknown error.'; + editor.notificationManager.open({ + type: 'error', + text: errorMessage + }); }; - var doSizeControls = function (win, f) { - var widthCtrl = win.find('#width')[0]; - var heightCtrl = win.find('#height')[0]; - var constrained = win.find('#constrain')[0]; - if (widthCtrl && heightCtrl && constrained) { - f(widthCtrl, heightCtrl, constrained.checked()); + }; + var getData = function (editor) { + var element = editor.selection.getNode(); + var dataEmbed = element.getAttribute('data-ephox-embed-iri'); + if (dataEmbed) { + return { + 'source1': dataEmbed, + 'data-ephox-embed-iri': dataEmbed, + 'width': $_7rx1rygfjfuw8por.getMaxWidth(element), + 'height': $_7rx1rygfjfuw8por.getMaxHeight(element) + }; + } + return element.getAttribute('data-mce-object') ? $_g969ozgbjfuw8pom.htmlToData($_bmkzfegajfuw8pol.getScripts(editor), editor.serializer.serialize(element, { selection: true })) : {}; + }; + var getSource = function (editor) { + var elm = editor.selection.getNode(); + if (elm.getAttribute('data-mce-object') || elm.getAttribute('data-ephox-embed-iri')) { + return editor.selection.getContent(); + } + }; + var addEmbedHtml = function (win, editor) { + return function (response) { + var html = response.html; + var embed = win.find('#embed')[0]; + var data = global$2.extend($_g969ozgbjfuw8pom.htmlToData($_bmkzfegajfuw8pol.getScripts(editor), html), { source1: response.url }); + win.fromJSON(data); + if (embed) { + embed.value(html); + $_32c8argojfuw8ppe.updateSize(win); } }; - - var doUpdateSize = function (widthCtrl, heightCtrl, isContrained) { - var oldWidth = widthCtrl.state.get('oldVal'); - var oldHeight = heightCtrl.state.get('oldVal'); - var newWidth = widthCtrl.value(); - var newHeight = heightCtrl.value(); - - if (isContrained && oldWidth && oldHeight && newWidth && newHeight) { - if (newWidth !== oldWidth) { - newHeight = Math.round((newWidth / oldWidth) * newHeight); - - if (!isNaN(newHeight)) { - heightCtrl.value(newHeight); - } - } else { - newWidth = Math.round((newHeight / oldHeight) * newWidth); - - if (!isNaN(newWidth)) { - widthCtrl.value(newWidth); - } + }; + var selectPlaceholder = function (editor, beforeObjects) { + var i; + var y; + var afterObjects = editor.dom.select('img[data-mce-object]'); + for (i = 0; i < beforeObjects.length; i++) { + for (y = afterObjects.length - 1; y >= 0; y--) { + if (beforeObjects[i] === afterObjects[y]) { + afterObjects.splice(y, 1); } } - - doSyncSize(widthCtrl, heightCtrl); + } + editor.selection.select(afterObjects[0]); + }; + var handleInsert = function (editor, html) { + var beforeObjects = editor.dom.select('img[data-mce-object]'); + editor.insertContent(html); + selectPlaceholder(editor, beforeObjects); + editor.nodeChanged(); + }; + var submitForm = function (win, editor) { + var data = win.toJSON(); + data.embed = $_9oq1mlgkjfuw8pp0.updateHtml(data.embed, data); + if (data.embed && $_6v4rhbggjfuw8pos.isCached(data.source1)) { + handleInsert(editor, data.embed); + } else { + $_6v4rhbggjfuw8pos.getEmbedHtml(editor, data).then(function (response) { + handleInsert(editor, response.html); + }).catch(handleError(editor)); + } + }; + var populateMeta = function (win, meta) { + global$2.each(meta, function (value, key) { + win.find('#' + key).value(value); + }); + }; + var showDialog = function (editor) { + var win; + var data; + var generalFormItems = [{ + name: 'source1', + type: 'filepicker', + filetype: 'media', + size: 40, + autofocus: true, + label: 'Source', + onpaste: function () { + setTimeout(function () { + $_6v4rhbggjfuw8pos.getEmbedHtml(editor, win.toJSON()).then(addEmbedHtml(win, editor)).catch(handleError(editor)); + }, 1); + }, + onchange: function (e) { + $_6v4rhbggjfuw8pos.getEmbedHtml(editor, win.toJSON()).then(addEmbedHtml(win, editor)).catch(handleError(editor)); + populateMeta(win, e.meta); + }, + onbeforecall: function (e) { + e.meta = win.toJSON(); + } + }]; + var advancedFormItems = []; + var reserialise = function (update) { + update(win); + data = win.toJSON(); + win.find('#embed').value($_9oq1mlgkjfuw8pp0.updateHtml(data.embed, data)); }; - - var syncSize = function (win) { - doSizeControls(win, doSyncSize); + if ($_bmkzfegajfuw8pol.hasAltSource(editor)) { + advancedFormItems.push({ + name: 'source2', + type: 'filepicker', + filetype: 'media', + size: 40, + label: 'Alternative source' + }); + } + if ($_bmkzfegajfuw8pol.hasPoster(editor)) { + advancedFormItems.push({ + name: 'poster', + type: 'filepicker', + filetype: 'image', + size: 40, + label: 'Poster' + }); + } + if ($_bmkzfegajfuw8pol.hasDimensions(editor)) { + var control = $_32c8argojfuw8ppe.createUi(reserialise); + generalFormItems.push(control); + } + data = getData(editor); + var embedTextBox = { + id: 'mcemediasource', + type: 'textbox', + flex: 1, + name: 'embed', + value: getSource(editor), + multiline: true, + rows: 5, + label: 'Source' }; - - var updateSize = function (win) { - doSizeControls(win, doUpdateSize); + var updateValueOnChange = function () { + data = global$2.extend({}, $_g969ozgbjfuw8pom.htmlToData($_bmkzfegajfuw8pol.getScripts(editor), this.value())); + this.parent().parent().fromJSON(data); }; - - var createUi = function (onChange) { - var recalcSize = function () { - onChange(function (win) { - updateSize(win); - }); - }; - - return { + embedTextBox[embedChange] = updateValueOnChange; + var body = [ + { + title: 'General', + type: 'form', + items: generalFormItems + }, + { + title: 'Embed', type: 'container', - label: 'Dimensions', layout: 'flex', - align: 'center', - spacing: 5, + direction: 'column', + align: 'stretch', + padding: 10, + spacing: 10, items: [ { - name: 'width', type: 'textbox', maxLength: 5, size: 5, - onchange: recalcSize, ariaLabel: 'Width' + type: 'label', + text: 'Paste your embed code below:', + forId: 'mcemediasource' }, - { type: 'label', text: 'x' }, - { - name: 'height', type: 'textbox', maxLength: 5, size: 5, - onchange: recalcSize, ariaLabel: 'Height' - }, - { name: 'constrain', type: 'checkbox', checked: true, text: 'Constrain proportions' } + embedTextBox ] - }; - }; - - return { - createUi: createUi, - syncSize: syncSize, - updateSize: updateSize - }; - } -); -/** - * Dialog.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.plugins.media.ui.Dialog', - [ - 'tinymce.core.util.Delay', - 'tinymce.plugins.media.core.HtmlToData', - 'tinymce.plugins.media.core.UpdateHtml', - 'tinymce.plugins.media.core.Service', - 'tinymce.plugins.media.core.Size', - 'tinymce.core.util.Tools', - 'tinymce.core.Env', - 'tinymce.plugins.media.ui.SizeManager' - ], - function (Delay, HtmlToData, UpdateHtml, Service, Size, Tools, Env, SizeManager) { - var embedChange = (Env.ie && Env.ie <= 8) ? 'onChange' : 'onInput'; - - var handleError = function (editor) { - return function (error) { - var errorMessage = error && error.msg ? - 'Media embed handler error: ' + error.msg : - 'Media embed handler threw unknown error.'; - editor.notificationManager.open({ type: 'error', text: errorMessage }); - }; - }; - - var getData = function (editor) { - var element = editor.selection.getNode(); - var dataEmbed = element.getAttribute('data-ephox-embed-iri'); - - if (dataEmbed) { - return { - source1: dataEmbed, - 'data-ephox-embed-iri': dataEmbed, - width: Size.getMaxWidth(element), - height: Size.getMaxHeight(element) - }; } + ]; + if (advancedFormItems.length > 0) { + body.push({ + title: 'Advanced', + type: 'form', + items: advancedFormItems + }); + } + win = editor.windowManager.open({ + title: 'Insert/edit media', + data: data, + bodyType: 'tabpanel', + body: body, + onSubmit: function () { + $_32c8argojfuw8ppe.updateSize(win); + submitForm(win, editor); + } + }); + $_32c8argojfuw8ppe.syncSize(win); + }; + var $_92htb0g7jfuw8pog = { showDialog: showDialog }; - return element.getAttribute('data-mce-object') ? - HtmlToData.htmlToData(editor.settings.media_scripts, editor.serializer.serialize(element, { selection: true })) : - {}; + var get = function (editor) { + var showDialog = function () { + $_92htb0g7jfuw8pog.showDialog(editor); }; + return { showDialog: showDialog }; + }; + var $_4zi4sfg6jfuw8poe = { get: get }; - var getSource = function (editor) { - var elm = editor.selection.getNode(); - - if (elm.getAttribute('data-mce-object') || elm.getAttribute('data-ephox-embed-iri')) { - return editor.selection.getContent(); - } + var register = function (editor) { + var showDialog = function () { + $_92htb0g7jfuw8pog.showDialog(editor); }; + editor.addCommand('mceMedia', showDialog); + }; + var $_1si9ufgpjfuw8ppg = { register: register }; - var addEmbedHtml = function (win, editor) { - return function (response) { - var html = response.html; - var embed = win.find('#embed')[0]; - var data = Tools.extend(HtmlToData.htmlToData(editor.settings.media_scripts, html), { source1: response.url }); - win.fromJSON(data); + var global$8 = tinymce.util.Tools.resolve('tinymce.html.Node'); - if (embed) { - embed.value(html); - SizeManager.updateSize(win); + var sanitize = function (editor, html) { + if ($_bmkzfegajfuw8pol.shouldFilterHtml(editor) === false) { + return html; + } + var writer = global$6(); + var blocked; + global$3({ + validate: false, + allow_conditional_comments: false, + special: 'script,noscript', + comment: function (text) { + writer.comment(text); + }, + cdata: function (text) { + writer.cdata(text); + }, + text: function (text, raw) { + writer.text(text, raw); + }, + start: function (name, attrs, empty) { + blocked = true; + if (name === 'script' || name === 'noscript') { + return; } - }; - }; - - var selectPlaceholder = function (editor, beforeObjects) { - var i; - var y; - var afterObjects = editor.dom.select('img[data-mce-object]'); - - // Find new image placeholder so we can select it - for (i = 0; i < beforeObjects.length; i++) { - for (y = afterObjects.length - 1; y >= 0; y--) { - if (beforeObjects[i] === afterObjects[y]) { - afterObjects.splice(y, 1); + for (var i = 0; i < attrs.length; i++) { + if (attrs[i].name.indexOf('on') === 0) { + return; } - } - } - - editor.selection.select(afterObjects[0]); - }; - - var handleInsert = function (editor, html) { - var beforeObjects = editor.dom.select('img[data-mce-object]'); - - editor.insertContent(html); - selectPlaceholder(editor, beforeObjects); - editor.nodeChanged(); - }; - - var submitForm = function (win, editor) { - var data = win.toJSON(); - - data.embed = UpdateHtml.updateHtml(data.embed, data); - - if (data.embed) { - handleInsert(editor, data.embed); - } else { - Service.getEmbedHtml(editor, data) - .then(function (response) { - handleInsert(editor, response.html); - })["catch"](handleError(editor)); - } - }; - - var populateMeta = function (win, meta) { - Tools.each(meta, function (value, key) { - win.find('#' + key).value(value); - }); - }; - - var showDialog = function (editor) { - var win; - var data; - - var generalFormItems = [ - { - name: 'source1', - type: 'filepicker', - filetype: 'media', - size: 40, - autofocus: true, - label: 'Source', - onpaste: function () { - setTimeout(function () { - Service.getEmbedHtml(editor, win.toJSON()) - .then( - addEmbedHtml(win, editor) - )["catch"](handleError(editor)); - }, 1); - }, - onchange: function (e) { - Service.getEmbedHtml(editor, win.toJSON()) - .then( - addEmbedHtml(win, editor) - )["catch"](handleError(editor)); - - populateMeta(win, e.meta); - }, - onbeforecall: function (e) { - e.meta = win.toJSON(); + if (attrs[i].name === 'style') { + attrs[i].value = editor.dom.serializeStyle(editor.dom.parseStyle(attrs[i].value), name); } } - ]; - - var advancedFormItems = []; - - var reserialise = function (update) { - update(win); - data = win.toJSON(); - win.find('#embed').value(UpdateHtml.updateHtml(data.embed, data)); - }; - - if (editor.settings.media_alt_source !== false) { - advancedFormItems.push({ name: 'source2', type: 'filepicker', filetype: 'media', size: 40, label: 'Alternative source' }); + writer.start(name, attrs, empty); + blocked = false; + }, + end: function (name) { + if (blocked) { + return; + } + writer.end(name); } - - if (editor.settings.media_poster !== false) { - advancedFormItems.push({ name: 'poster', type: 'filepicker', filetype: 'image', size: 40, label: 'Poster' }); + }, global$7({})).parse(html); + return writer.getContent(); + }; + var $_77d5ybgtjfuw8ppp = { sanitize: sanitize }; + + var createPlaceholderNode = function (editor, node) { + var placeHolder; + var name = node.name; + placeHolder = new global$8('img', 1); + placeHolder.shortEnded = true; + retainAttributesAndInnerHtml(editor, node, placeHolder); + placeHolder.attr({ + 'width': node.attr('width') || '300', + 'height': node.attr('height') || (name === 'audio' ? '30' : '150'), + 'style': node.attr('style'), + 'src': global$1.transparentSrc, + 'data-mce-object': name, + 'class': 'mce-object mce-object-' + name + }); + return placeHolder; + }; + var createPreviewIframeNode = function (editor, node) { + var previewWrapper; + var previewNode; + var shimNode; + var name = node.name; + previewWrapper = new global$8('span', 1); + previewWrapper.attr({ + 'contentEditable': 'false', + 'style': node.attr('style'), + 'data-mce-object': name, + 'class': 'mce-preview-object mce-object-' + name + }); + retainAttributesAndInnerHtml(editor, node, previewWrapper); + previewNode = new global$8(name, 1); + previewNode.attr({ + src: node.attr('src'), + allowfullscreen: node.attr('allowfullscreen'), + style: node.attr('style'), + class: node.attr('class'), + width: node.attr('width'), + height: node.attr('height'), + frameborder: '0' + }); + shimNode = new global$8('span', 1); + shimNode.attr('class', 'mce-shim'); + previewWrapper.append(previewNode); + previewWrapper.append(shimNode); + return previewWrapper; + }; + var retainAttributesAndInnerHtml = function (editor, sourceNode, targetNode) { + var attrName; + var attrValue; + var attribs; + var ai; + var innerHtml; + attribs = sourceNode.attributes; + ai = attribs.length; + while (ai--) { + attrName = attribs[ai].name; + attrValue = attribs[ai].value; + if (attrName !== 'width' && attrName !== 'height' && attrName !== 'style') { + if (attrName === 'data' || attrName === 'src') { + attrValue = editor.convertURL(attrValue, attrName); + } + targetNode.attr('data-mce-p-' + attrName, attrValue); } - - if (editor.settings.media_dimensions !== false) { - var control = SizeManager.createUi(reserialise); - generalFormItems.push(control); + } + innerHtml = sourceNode.firstChild && sourceNode.firstChild.value; + if (innerHtml) { + targetNode.attr('data-mce-html', escape($_77d5ybgtjfuw8ppp.sanitize(editor, innerHtml))); + targetNode.firstChild = null; + } + }; + var isWithinEphoxEmbed = function (node) { + while (node = node.parent) { + if (node.attr('data-ephox-embed-iri')) { + return true; } - - data = getData(editor); - - var embedTextBox = { - id: 'mcemediasource', - type: 'textbox', - flex: 1, - name: 'embed', - value: getSource(editor), - multiline: true, - rows: 5, - label: 'Source' - }; - - var updateValueOnChange = function () { - data = Tools.extend({}, HtmlToData.htmlToData(editor.settings.media_scripts, this.value())); - this.parent().parent().fromJSON(data); - }; - - embedTextBox[embedChange] = updateValueOnChange; - - win = editor.windowManager.open({ - title: 'Insert/edit media', - data: data, - bodyType: 'tabpanel', - body: [ - { - title: 'General', - type: "form", - items: generalFormItems - }, - - { - title: 'Embed', - type: "container", - layout: 'flex', - direction: 'column', - align: 'stretch', - padding: 10, - spacing: 10, - items: [ - { - type: 'label', - text: 'Paste your embed code below:', - forId: 'mcemediasource' - }, - embedTextBox - ] - }, - - { - title: 'Advanced', - type: "form", - items: advancedFormItems + } + return false; + }; + var placeHolderConverter = function (editor) { + return function (nodes) { + var i = nodes.length; + var node; + var videoScript; + while (i--) { + node = nodes[i]; + if (!node.parent) { + continue; + } + if (node.parent.attr('data-mce-object')) { + continue; + } + if (node.name === 'script') { + videoScript = $_9fg1sigejfuw8poq.getVideoScriptMatch($_bmkzfegajfuw8pol.getScripts(editor), node.attr('src')); + if (!videoScript) { + continue; } - ], - onSubmit: function () { - SizeManager.updateSize(win); - submitForm(win, editor); } - }); - - SizeManager.syncSize(win); - }; - - return { - showDialog: showDialog + if (videoScript) { + if (videoScript.width) { + node.attr('width', videoScript.width.toString()); + } + if (videoScript.height) { + node.attr('height', videoScript.height.toString()); + } + } + if (node.name === 'iframe' && $_bmkzfegajfuw8pol.hasLiveEmbeds(editor) && global$1.ceFalse) { + if (!isWithinEphoxEmbed(node)) { + node.replace(createPreviewIframeNode(editor, node)); + } + } else { + if (!isWithinEphoxEmbed(node)) { + node.replace(createPlaceholderNode(editor, node)); + } + } + } }; - } -); -/** - * Plugin.js - * - * Released under LGPL License. - * Copyright (c) 1999-2017 Ephox Corp. All rights reserved - * - * License: http://www.tinymce.com/license - * Contributing: http://www.tinymce.com/contributing - */ - -define( - 'tinymce.plugins.media.Plugin', - [ - 'tinymce.core.html.Node', - 'tinymce.core.PluginManager', - 'tinymce.core.util.Tools', - 'tinymce.plugins.media.core.Nodes', - 'tinymce.plugins.media.core.Sanitize', - 'tinymce.plugins.media.core.UpdateHtml', - 'tinymce.plugins.media.ui.Dialog' - ], - function (Node, PluginManager, Tools, Nodes, Sanitize, UpdateHtml, Dialog) { - var Plugin = function (editor) { - editor.on('ResolveName', function (e) { - var name; + }; + var $_bp9pftgsjfuw8ppl = { + createPreviewIframeNode: createPreviewIframeNode, + createPlaceholderNode: createPlaceholderNode, + placeHolderConverter: placeHolderConverter + }; - if (e.target.nodeType === 1 && (name = e.target.getAttribute("data-mce-object"))) { - e.name = name; - } + var setup = function (editor) { + editor.on('preInit', function () { + var specialElements = editor.schema.getSpecialElements(); + global$2.each('video audio iframe object'.split(' '), function (name) { + specialElements[name] = new RegExp(']*>', 'gi'); }); - - editor.on('preInit', function () { - // Make sure that any messy HTML is retained inside these - var specialElements = editor.schema.getSpecialElements(); - Tools.each('video audio iframe object'.split(' '), function (name) { - specialElements[name] = new RegExp('<\/' + name + '[^>]*>', 'gi'); - }); - - // Allow elements - //editor.schema.addValidElements( - // 'object[id|style|width|height|classid|codebase|*],embed[id|style|width|height|type|src|*],video[*],audio[*]' - //); - - // Set allowFullscreen attribs as boolean - var boolAttrs = editor.schema.getBoolAttrs(); - Tools.each('webkitallowfullscreen mozallowfullscreen allowfullscreen'.split(' '), function (name) { - boolAttrs[name] = {}; - }); - - // Converts iframe, video etc into placeholder images - editor.parser.addNodeFilter('iframe,video,audio,object,embed,script', - Nodes.placeHolderConverter(editor)); - - // Replaces placeholder images with real elements for video, object, iframe etc - editor.serializer.addAttributeFilter('data-mce-object', function (nodes, name) { - var i = nodes.length; - var node; - var realElm; - var ai; - var attribs; - var innerHtml; - var innerNode; - var realElmName; - var className; - - while (i--) { - node = nodes[i]; - if (!node.parent) { - continue; - } - - realElmName = node.attr(name); - realElm = new Node(realElmName, 1); - - // Add width/height to everything but audio - if (realElmName !== "audio" && realElmName !== "script") { - className = node.attr('class'); - if (className && className.indexOf('mce-preview-object') !== -1) { - realElm.attr({ - width: node.firstChild.attr('width'), - height: node.firstChild.attr('height') - }); - } else { - realElm.attr({ - width: node.attr('width'), - height: node.attr('height') - }); - } - } - - realElm.attr({ - style: node.attr('style') - }); - - // Unprefix all placeholder attributes - attribs = node.attributes; - ai = attribs.length; - while (ai--) { - var attrName = attribs[ai].name; - - if (attrName.indexOf('data-mce-p-') === 0) { - realElm.attr(attrName.substr(11), attribs[ai].value); - } - } - - if (realElmName === "script") { - realElm.attr('type', 'text/javascript'); + var boolAttrs = editor.schema.getBoolAttrs(); + global$2.each('webkitallowfullscreen mozallowfullscreen allowfullscreen'.split(' '), function (name) { + boolAttrs[name] = {}; + }); + editor.parser.addNodeFilter('iframe,video,audio,object,embed,script', $_bp9pftgsjfuw8ppl.placeHolderConverter(editor)); + editor.serializer.addAttributeFilter('data-mce-object', function (nodes, name) { + var i = nodes.length; + var node; + var realElm; + var ai; + var attribs; + var innerHtml; + var innerNode; + var realElmName; + var className; + while (i--) { + node = nodes[i]; + if (!node.parent) { + continue; + } + realElmName = node.attr(name); + realElm = new global$8(realElmName, 1); + if (realElmName !== 'audio' && realElmName !== 'script') { + className = node.attr('class'); + if (className && className.indexOf('mce-preview-object') !== -1) { + realElm.attr({ + width: node.firstChild.attr('width'), + height: node.firstChild.attr('height') + }); + } else { + realElm.attr({ + width: node.attr('width'), + height: node.attr('height') + }); } - - // Inject innerhtml - innerHtml = node.attr('data-mce-html'); - if (innerHtml) { - innerNode = new Node('#text', 3); - innerNode.raw = true; - innerNode.value = Sanitize.sanitize(editor, unescape(innerHtml)); - realElm.append(innerNode); + } + realElm.attr({ style: node.attr('style') }); + attribs = node.attributes; + ai = attribs.length; + while (ai--) { + var attrName = attribs[ai].name; + if (attrName.indexOf('data-mce-p-') === 0) { + realElm.attr(attrName.substr(11), attribs[ai].value); } - - node.replace(realElm); } - }); - }); - - editor.on('click keyup', function () { - var selectedNode = editor.selection.getNode(); - - if (selectedNode && editor.dom.hasClass(selectedNode, 'mce-preview-object')) { - if (editor.dom.getAttrib(selectedNode, 'data-mce-selected')) { - selectedNode.setAttribute('data-mce-selected', '2'); + if (realElmName === 'script') { + realElm.attr('type', 'text/javascript'); + } + innerHtml = node.attr('data-mce-html'); + if (innerHtml) { + innerNode = new global$8('#text', 3); + innerNode.raw = true; + innerNode.value = $_77d5ybgtjfuw8ppp.sanitize(editor, unescape(innerHtml)); + realElm.append(innerNode); } + node.replace(realElm); } }); - - editor.on('ObjectSelected', function (e) { - var objectType = e.target.getAttribute('data-mce-object'); - - if (objectType === "audio" || objectType === "script") { - e.preventDefault(); + }); + editor.on('setContent', function () { + editor.$('span.mce-preview-object').each(function (index, elm) { + var $elm = editor.$(elm); + if ($elm.find('span.mce-shim', elm).length === 0) { + $elm.append(''); } }); + }); + }; + var $_7xjmklgqjfuw8pph = { setup: setup }; - editor.on('objectResized', function (e) { - var target = e.target; - var html; - - if (target.getAttribute('data-mce-object')) { - html = target.getAttribute('data-mce-html'); - if (html) { - html = unescape(html); - target.setAttribute('data-mce-html', escape( - UpdateHtml.updateHtml(html, { - width: e.width, - height: e.height - }) - )); - } + var setup$1 = function (editor) { + editor.on('ResolveName', function (e) { + var name; + if (e.target.nodeType === 1 && (name = e.target.getAttribute('data-mce-object'))) { + e.name = name; + } + }); + }; + var $_8fr4logujfuw8ppr = { setup: setup$1 }; + + var setup$2 = function (editor) { + editor.on('click keyup', function () { + var selectedNode = editor.selection.getNode(); + if (selectedNode && editor.dom.hasClass(selectedNode, 'mce-preview-object')) { + if (editor.dom.getAttrib(selectedNode, 'data-mce-selected')) { + selectedNode.setAttribute('data-mce-selected', '2'); } - }); - - this.showDialog = function () { - Dialog.showDialog(editor); - }; - - editor.addButton('media', { - tooltip: 'Insert/edit media', - onclick: this.showDialog, - stateSelector: ['img[data-mce-object]', 'span[data-mce-object]', 'div[data-ephox-embed-iri]'] - }); - - editor.addMenuItem('media', { - icon: 'media', - text: 'Media', - onclick: this.showDialog, - context: 'insert', - prependToContext: true - }); - - editor.on('setContent', function () { - // TODO: This shouldn't be needed there should be a way to mark bogus - // elements so they are never removed except external save - editor.$('span.mce-preview-object').each(function (index, elm) { - var $elm = editor.$(elm); - - if ($elm.find('span.mce-shim', elm).length === 0) { - $elm.append(''); - } - }); - }); - - editor.addCommand('mceMedia', this.showDialog); - }; - - PluginManager.add('media', Plugin); - - return function () { }; + } + }); + editor.on('ObjectSelected', function (e) { + var objectType = e.target.getAttribute('data-mce-object'); + if (objectType === 'audio' || objectType === 'script') { + e.preventDefault(); + } + }); + editor.on('objectResized', function (e) { + var target = e.target; + var html; + if (target.getAttribute('data-mce-object')) { + html = target.getAttribute('data-mce-html'); + if (html) { + html = unescape(html); + target.setAttribute('data-mce-html', escape($_9oq1mlgkjfuw8pp0.updateHtml(html, { + width: e.width, + height: e.height + }))); + } + } + }); + }; + var $_b7skwpgvjfuw8pps = { setup: setup$2 }; + + var register$1 = function (editor) { + editor.addButton('media', { + tooltip: 'Insert/edit media', + cmd: 'mceMedia', + stateSelector: [ + 'img[data-mce-object]', + 'span[data-mce-object]', + 'div[data-ephox-embed-iri]' + ] + }); + editor.addMenuItem('media', { + icon: 'media', + text: 'Media', + cmd: 'mceMedia', + context: 'insert', + prependToContext: true + }); + }; + var $_7zyd29gwjfuw8ppt = { register: register$1 }; + + global.add('media', function (editor) { + $_1si9ufgpjfuw8ppg.register(editor); + $_7zyd29gwjfuw8ppt.register(editor); + $_8fr4logujfuw8ppr.setup(editor); + $_7xjmklgqjfuw8pph.setup(editor); + $_b7skwpgvjfuw8pps.setup(editor); + return $_4zi4sfg6jfuw8poe.get(editor); + }); + function Plugin () { } -); + return Plugin; -dem('tinymce.plugins.media.Plugin')(); +}()); })(); diff --git a/src/wp-includes/js/tinymce/plugins/media/plugin.min.js b/src/wp-includes/js/tinymce/plugins/media/plugin.min.js index 8373a000888e6..0dd06ba6816d9 100644 --- a/src/wp-includes/js/tinymce/plugins/media/plugin.min.js +++ b/src/wp-includes/js/tinymce/plugins/media/plugin.min.js @@ -1 +1 @@ -!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i"}else"application/x-shockwave-flash"===j.source1mime?(i+='',j.poster&&(i+=''),i+=""):j.source1mime.indexOf("audio")!==-1?g.settings.audio_template_callback?i=g.settings.audio_template_callback(j):i+='":"script"===j.type?i+='':i=g.settings.video_template_callback?g.settings.video_template_callback(j):'"}return i};return{dataToHtml:g}}),g("l",["8"],function(a){return a("tinymce.util.Promise")}),g("i",["k","l"],function(a,b){var c=function(a,c,d){var e={};return new b(function(b,f){var g=function(d){return d.html&&(e[a.source1]=d),b({url:a.source1,html:d.html?d.html:c(a)})};e[a.source1]?g(e[a.source1]):d({url:a.source1},g,f)})},d=function(a,c){return new b(function(b){b({html:c(a),url:a.source1})})},e=function(b){return function(c){return a.dataToHtml(b,c)}},f=function(a,b){var f=a.settings.media_url_resolver;return f?c(b,e(a),f):d(b,e(a))};return{getEmbedHtml:f}}),g("j",[],function(){var a=function(a,b){a.state.set("oldVal",a.value()),b.state.set("oldVal",b.value())},b=function(a,b){var c=a.find("#width")[0],d=a.find("#height")[0],e=a.find("#constrain")[0];c&&d&&e&&b(c,d,e.checked())},c=function(b,c,d){var e=b.state.get("oldVal"),f=c.state.get("oldVal"),g=b.value(),h=c.value();d&&e&&f&&g&&h&&(g!==e?(h=Math.round(g/e*h),isNaN(h)||c.value(h)):(g=Math.round(h/f*g),isNaN(g)||b.value(g))),a(b,c)},d=function(c){b(c,a)},e=function(a){b(a,c)},f=function(a){var b=function(){a(function(a){e(a)})};return{type:"container",label:"Dimensions",layout:"flex",align:"center",spacing:5,items:[{name:"width",type:"textbox",maxLength:5,size:5,onchange:b,ariaLabel:"Width"},{type:"label",text:"x"},{name:"height",type:"textbox",maxLength:5,size:5,onchange:b,ariaLabel:"Height"},{name:"constrain",type:"checkbox",checked:!0,text:"Constrain proportions"}]}};return{createUi:f,syncSize:d,updateSize:e}}),g("7",["g","h","6","i","f","3","d","j"],function(a,b,c,d,e,f,g,h){var i=g.ie&&g.ie<=8?"onChange":"onInput",j=function(a){return function(b){var c=b&&b.msg?"Media embed handler error: "+b.msg:"Media embed handler threw unknown error.";a.notificationManager.open({type:"error",text:c})}},k=function(a){var c=a.selection.getNode(),d=c.getAttribute("data-ephox-embed-iri");return d?{source1:d,"data-ephox-embed-iri":d,width:e.getMaxWidth(c),height:e.getMaxHeight(c)}:c.getAttribute("data-mce-object")?b.htmlToData(a.settings.media_scripts,a.serializer.serialize(c,{selection:!0})):{}},l=function(a){var b=a.selection.getNode();if(b.getAttribute("data-mce-object")||b.getAttribute("data-ephox-embed-iri"))return a.selection.getContent()},m=function(a,c){return function(d){var e=d.html,g=a.find("#embed")[0],i=f.extend(b.htmlToData(c.settings.media_scripts,e),{source1:d.url});a.fromJSON(i),g&&(g.value(e),h.updateSize(a))}},n=function(a,b){var c,d,e=a.dom.select("img[data-mce-object]");for(c=0;c=0;d--)b[c]===e[d]&&e.splice(d,1);a.selection.select(e[0])},o=function(a,b){var c=a.dom.select("img[data-mce-object]");a.insertContent(b),n(a,c),a.nodeChanged()},p=function(a,b){var e=a.toJSON();e.embed=c.updateHtml(e.embed,e),e.embed?o(b,e.embed):d.getEmbedHtml(b,e).then(function(a){o(b,a.html)})["catch"](j(b))},q=function(a,b){f.each(b,function(b,c){a.find("#"+c).value(b)})},r=function(a){var e,g,n=[{name:"source1",type:"filepicker",filetype:"media",size:40,autofocus:!0,label:"Source",onpaste:function(){setTimeout(function(){d.getEmbedHtml(a,e.toJSON()).then(m(e,a))["catch"](j(a))},1)},onchange:function(b){d.getEmbedHtml(a,e.toJSON()).then(m(e,a))["catch"](j(a)),q(e,b.meta)},onbeforecall:function(a){a.meta=e.toJSON()}}],o=[],r=function(a){a(e),g=e.toJSON(),e.find("#embed").value(c.updateHtml(g.embed,g))};if(a.settings.media_alt_source!==!1&&o.push({name:"source2",type:"filepicker",filetype:"media",size:40,label:"Alternative source"}),a.settings.media_poster!==!1&&o.push({name:"poster",type:"filepicker",filetype:"image",size:40,label:"Poster"}),a.settings.media_dimensions!==!1){var s=h.createUi(r);n.push(s)}g=k(a);var t={id:"mcemediasource",type:"textbox",flex:1,name:"embed",value:l(a),multiline:!0,rows:5,label:"Source"},u=function(){g=f.extend({},b.htmlToData(a.settings.media_scripts,this.value())),this.parent().parent().fromJSON(g)};t[i]=u,e=a.windowManager.open({title:"Insert/edit media",data:g,bodyType:"tabpanel",body:[{title:"General",type:"form",items:n},{title:"Embed",type:"container",layout:"flex",direction:"column",align:"stretch",padding:10,spacing:10,items:[{type:"label",text:"Paste your embed code below:",forId:"mcemediasource"},t]},{title:"Advanced",type:"form",items:o}],onSubmit:function(){h.updateSize(e),p(e,a)}}),h.syncSize(e)};return{showDialog:r}}),g("0",["1","2","3","4","5","6","7"],function(a,b,c,d,e,f,g){var h=function(b){b.on("ResolveName",function(a){var b;1===a.target.nodeType&&(b=a.target.getAttribute("data-mce-object"))&&(a.name=b)}),b.on("preInit",function(){var f=b.schema.getSpecialElements();c.each("video audio iframe object".split(" "),function(a){f[a]=new RegExp("]*>","gi")});var g=b.schema.getBoolAttrs();c.each("webkitallowfullscreen mozallowfullscreen allowfullscreen".split(" "),function(a){g[a]={}}),b.parser.addNodeFilter("iframe,video,audio,object,embed,script",d.placeHolderConverter(b)),b.serializer.addAttributeFilter("data-mce-object",function(c,d){for(var f,g,h,i,j,k,l,m,n=c.length;n--;)if(f=c[n],f.parent){for(l=f.attr(d),g=new a(l,1),"audio"!==l&&"script"!==l&&(m=f.attr("class"),m&&m.indexOf("mce-preview-object")!==-1?g.attr({width:f.firstChild.attr("width"),height:f.firstChild.attr("height")}):g.attr({width:f.attr("width"),height:f.attr("height")})),g.attr({style:f.attr("style")}),i=f.attributes,h=i.length;h--;){var o=i[h].name;0===o.indexOf("data-mce-p-")&&g.attr(o.substr(11),i[h].value)}"script"===l&&g.attr("type","text/javascript"),j=f.attr("data-mce-html"),j&&(k=new a("#text",3),k.raw=!0,k.value=e.sanitize(b,unescape(j)),g.append(k)),f.replace(g)}})}),b.on("click keyup",function(){var a=b.selection.getNode();a&&b.dom.hasClass(a,"mce-preview-object")&&b.dom.getAttrib(a,"data-mce-selected")&&a.setAttribute("data-mce-selected","2")}),b.on("ObjectSelected",function(a){var b=a.target.getAttribute("data-mce-object");"audio"!==b&&"script"!==b||a.preventDefault()}),b.on("objectResized",function(a){var b,c=a.target;c.getAttribute("data-mce-object")&&(b=c.getAttribute("data-mce-html"),b&&(b=unescape(b),c.setAttribute("data-mce-html",escape(f.updateHtml(b,{width:a.width,height:a.height})))))}),this.showDialog=function(){g.showDialog(b)},b.addButton("media",{tooltip:"Insert/edit media",onclick:this.showDialog,stateSelector:["img[data-mce-object]","span[data-mce-object]","div[data-ephox-embed-iri]"]}),b.addMenuItem("media",{icon:"media",text:"Media",onclick:this.showDialog,context:"insert",prependToContext:!0}),b.on("setContent",function(){b.$("span.mce-preview-object").each(function(a,c){var d=b.$(c);0===d.find("span.mce-shim",c).length&&d.append('')})}),b.addCommand("mceMedia",this.showDialog)};return b.add("media",h),function(){}}),d("0")()}(); \ No newline at end of file +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),o=tinymce.util.Tools.resolve("tinymce.Env"),v=tinymce.util.Tools.resolve("tinymce.util.Tools"),w=function(e){return e.getParam("media_scripts")},b=function(e){return e.getParam("audio_template_callback")},y=function(e){return e.getParam("video_template_callback")},n=function(e){return e.getParam("media_live_embeds",!0)},t=function(e){return e.getParam("media_filter_html",!0)},s=function(e){return e.getParam("media_url_resolver")},m=function(e){return e.getParam("media_alt_source",!0)},d=function(e){return e.getParam("media_poster",!0)},h=function(e){return e.getParam("media_dimensions",!0)},p=tinymce.util.Tools.resolve("tinymce.html.SaxParser"),r=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),x=function(e,t){if(e)for(var r=0;r"):"application/x-shockwave-flash"===i.source1mime?(d='',m.poster&&(d+=''),d+=""):-1!==i.source1mime.indexOf("audio")?(u=i,(l=f)?l(u):'"):"script"===i.type?'\n"; - } else { - echo "\n"; - echo "\n"; - } - echo "\n"; } diff --git a/src/wp-includes/default-filters.php b/src/wp-includes/default-filters.php index 61ebf0cedcde7..cec310b1757c4 100644 --- a/src/wp-includes/default-filters.php +++ b/src/wp-includes/default-filters.php @@ -491,6 +491,8 @@ // Script Loader add_action( 'wp_default_scripts', 'wp_default_scripts' ); +add_action( 'wp_default_scripts', 'wp_default_packages' ); + add_action( 'wp_enqueue_scripts', 'wp_localize_jquery_ui_datepicker', 1000 ); add_action( 'admin_enqueue_scripts', 'wp_localize_jquery_ui_datepicker', 1000 ); add_action( 'admin_print_scripts-index.php', 'wp_localize_community_events' ); diff --git a/src/wp-includes/script-loader.php b/src/wp-includes/script-loader.php index 7b98ae1206084..fb6569a6366f7 100644 --- a/src/wp-includes/script-loader.php +++ b/src/wp-includes/script-loader.php @@ -41,22 +41,26 @@ * * @param WP_Scripts $scripts WP_Scripts object. */ -function wp_register_tinymce_scripts( &$scripts ) { +function wp_register_tinymce_scripts( &$scripts, $force_uncompressed = false ) { global $tinymce_version, $concatenate_scripts, $compress_scripts; $suffix = SCRIPT_DEBUG ? '' : '.min'; + + script_concat_settings(); + $compressed = $compress_scripts && $concatenate_scripts && isset( $_SERVER['HTTP_ACCEPT_ENCODING'] ) - && false !== stripos( $_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip' ); + && false !== stripos( $_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip' ) && ! $force_uncompressed; + // Load tinymce.js when running from /src, otherwise load wp-tinymce.js.gz (in production) or // tinymce.min.js (when SCRIPT_DEBUG is true). $mce_suffix = false !== strpos( get_bloginfo( 'version' ), '-src' ) ? '' : '.min'; if ( $compressed ) { $scripts->add( 'wp-tinymce', includes_url( 'js/tinymce/' ) . 'wp-tinymce.php', array(), $tinymce_version ); } else { - $scripts->add( 'wp-tinymce-root', includes_url( 'js/tinymce/' ) . "tinymce{$mce_suffix}.js", array(), $tinymce_version ); - $scripts->add( 'wp-tinymce', includes_url( 'js/tinymce/' ) . "plugins/compat3x/plugin{$suffix}.js", array( 'wp-tinymce-root' ), $tinymce_version ); + $scripts->add( 'wp-tinymce-root', includes_url( 'js/tinymce/' ) . "tinymce$mce_suffix.js", array(), $tinymce_version ); + $scripts->add( 'wp-tinymce', includes_url( 'js/tinymce/' ) . "plugins/compat3x/plugin$suffix.js", array( 'wp-tinymce-root' ), $tinymce_version ); } - $scripts->add( 'wp-tinymce-lists', includes_url( 'js/tinymce/plugins/lists/index' . $suffix . '.js', array( 'wp-tinymce' ), $tinymce_version ) ); + $scripts->add( 'wp-tinymce-lists', includes_url( "js/tinymce/plugins/lists/plugin$suffix.js", array( 'wp-tinymce' ), $tinymce_version ) ); } /** @@ -69,9 +73,11 @@ function wp_register_tinymce_scripts( &$scripts ) { * * @param WP_Scripts $scripts WP_Scripts object. */ -function wp_default_packages_vendor( &$scripts, $dev_suffix ) { +function wp_default_packages_vendor( &$scripts ) { wp_register_tinymce_scripts( $scripts ); + $dev_suffix = wp_scripts_get_suffix( 'dev' ); + $vendor_scripts = array( 'react', 'react-dom' => array( 'react' ), @@ -90,7 +96,7 @@ function wp_default_packages_vendor( &$scripts, $dev_suffix ) { $dependencies = array(); } - $path = '/js/dist/vendor/' . $handle . $dev_suffix . '.js'; + $path = "/js/dist/vendor/$handle$dev_suffix.js"; $scripts->add( $handle, $path, $dependencies, false, 1 ); } @@ -124,7 +130,7 @@ function wp_default_packages_vendor( &$scripts, $dev_suffix ) { * @param array $tests Features to detect. * @return string Conditional polyfill inline script. */ -function wp_get_script_polyfill( $scripts, $tests ) { +function wp_get_script_polyfill( &$scripts, $tests ) { $polyfill = ''; foreach ( $tests as $test => $handle ) { if ( ! array_key_exists( $handle, $scripts->registered ) ) { @@ -147,7 +153,7 @@ function wp_get_script_polyfill( $scripts, $tests ) { } /** - * Register all the WordPress packages scripts that are in the standardized + * Registers all the WordPress packages scripts that are in the standardized * `js/dist/` location. * * For the order of `$scripts->add` see `wp_default_scripts`. @@ -155,9 +161,10 @@ function wp_get_script_polyfill( $scripts, $tests ) { * @since 5.0.0 * * @param WP_Scripts $scripts WP_Scripts object. - * @param string $suffix The suffix to use before `.js`. */ -function wp_default_packages_scripts( &$scripts, $suffix ) { +function wp_default_packages_scripts( &$scripts ) { + $suffix = wp_scripts_get_suffix(); + $packages_dependencies = array( 'api-fetch' => array( 'wp-polyfill', 'wp-hooks', 'wp-i18n' ), 'a11y' => array( 'wp-dom-ready', 'wp-polyfill' ), @@ -330,7 +337,7 @@ function wp_default_packages_scripts( &$scripts, $suffix ) { foreach ( $packages_dependencies as $package => $dependencies ) { $handle = 'wp-' . $package; - $path = '/js/dist/' . $package . $suffix . '.js'; + $path = "/js/dist/$package$suffix.js"; $scripts->add( $handle, $path, $dependencies, false, 1 ); } @@ -422,12 +429,14 @@ function wp_default_packages_inline_scripts( &$scripts ) { 'after' ); + /* This filter is documented in wp-includes/class-wp-editor.php */ $tinymce_settings = apply_filters( 'tiny_mce_before_init', array( 'plugins' => implode( ',', array_unique( + /* This filter is documented in wp-includes/class-wp-editor.php */ apply_filters( 'tiny_mce_plugins', array( @@ -456,6 +465,7 @@ function wp_default_packages_inline_scripts( &$scripts ) { 'toolbar1' => implode( ',', array_merge( + /* This filter is documented in wp-includes/class-wp-editor.php */ apply_filters( 'mce_buttons', array( @@ -481,6 +491,7 @@ function wp_default_packages_inline_scripts( &$scripts ) { ), 'toolbar2' => implode( ',', + /* This filter is documented in wp-includes/class-wp-editor.php */ apply_filters( 'mce_buttons_2', array( @@ -499,8 +510,11 @@ function wp_default_packages_inline_scripts( &$scripts ) { 'editor' ) ), + /* This filter is documented in wp-includes/class-wp-editor.php */ 'toolbar3' => implode( ',', apply_filters( 'mce_buttons_3', array(), 'editor' ) ), + /* This filter is documented in wp-includes/class-wp-editor.php */ 'toolbar4' => implode( ',', apply_filters( 'mce_buttons_4', array(), 'editor' ) ), + /* This filter is documented in wp-includes/class-wp-editor.php */ 'external_plugins' => apply_filters( 'mce_external_plugins', array() ), ), 'editor' @@ -524,6 +538,57 @@ function wp_default_packages_inline_scripts( &$scripts ) { ); } +/** + * Registers all the WordPress packages scripts. + * + * @since 5.0.0 + * + * @param WP_Scripts $scripts WP_Scripts object. + */ +function wp_default_packages( &$scripts ) { + wp_default_packages_vendor( $scripts ); + wp_register_tinymce_scripts( $scripts ); + wp_default_packages_scripts( $scripts ); + + if ( did_action( 'init' ) ) { + wp_default_packages_inline_scripts( $scripts ); + } +} + +/** + * Returns the suffix that can be used for the scripts. + * + * There are two suffix types, the normal one and the dev suffix. + * + * @since 5.0.0 + * + * @param string $type The type of suffix to retrieve. + * @return string The script suffix. + */ +function wp_scripts_get_suffix( $type = '' ) { + static $suffixes; + + if ( $suffixes === null ) { + include( ABSPATH . WPINC . '/version.php' ); // include an unmodified $wp_version + + $develop_src = false !== strpos( $wp_version, '-src' ); + + if ( ! defined( 'SCRIPT_DEBUG' ) ) { + define( 'SCRIPT_DEBUG', $develop_src ); + } + $suffix = SCRIPT_DEBUG ? '' : '.min'; + $dev_suffix = $develop_src ? '' : '.min'; + + $suffixes = array( 'suffix' => $suffix, 'dev_suffix' => $dev_suffix ); + } + + if ( $type === 'dev' ) { + return $suffixes['dev_suffix']; + } + + return $suffixes['suffix']; +} + /** * Register all WordPress scripts. * @@ -536,13 +601,8 @@ function wp_default_packages_inline_scripts( &$scripts ) { * @param WP_Scripts $scripts WP_Scripts object. */ function wp_default_scripts( &$scripts ) { - include( ABSPATH . WPINC . '/version.php' ); // include an unmodified $wp_version - - $develop_src = false !== strpos( $wp_version, '-src' ); - - if ( ! defined( 'SCRIPT_DEBUG' ) ) { - define( 'SCRIPT_DEBUG', $develop_src ); - } + $suffix = wp_scripts_get_suffix(); + $dev_suffix = wp_scripts_get_suffix( 'dev' ); if ( ! $guessurl = site_url() ) { $guessed_url = true; @@ -554,8 +614,6 @@ function wp_default_scripts( &$scripts ) { $scripts->default_version = get_bloginfo( 'version' ); $scripts->default_dirs = array('/wp-admin/js/', '/wp-includes/js/'); - $suffix = SCRIPT_DEBUG ? '' : '.min'; - $dev_suffix = $develop_src ? '' : '.min'; $scripts->add( 'utils', "/wp-includes/js/utils$suffix.js" ); did_action( 'init' ) && $scripts->localize( 'utils', 'userSettings', array( @@ -612,7 +670,7 @@ function wp_default_scripts( &$scripts ) { $scripts->add( 'colorpicker', "/wp-includes/js/colorpicker$suffix.js", array('prototype'), '3517m' ); - $scripts->add( 'editor', "/wp-admin/js/editor$suffix.js", array('utils','jquery'), false, 1 ); + $scripts->add( 'editor', "/wp-admin/js/editor$suffix.js", array('wp-tinymce','utils','jquery'), false, 1 ); // Back-compat for old DFW. To-do: remove at the end of 2016. $scripts->add( 'wp-fullscreen-stub', "/wp-admin/js/wp-fullscreen-stub$suffix.js", array(), false, 1 ); @@ -1128,12 +1186,6 @@ function wp_default_scripts( &$scripts ) { $scripts->add( 'wp-api', "/wp-includes/js/wp-api$suffix.js", array( 'jquery', 'backbone', 'underscore', 'wp-api-request' ), false, 1 ); - wp_default_packages_vendor( $scripts, $dev_suffix ); - wp_default_packages_scripts( $scripts, $suffix ); - if ( did_action( 'init' ) ) { - wp_default_packages_inline_scripts( $scripts ); - } - if ( is_admin() ) { $scripts->add( 'admin-tags', "/wp-admin/js/tags$suffix.js", array( 'jquery', 'wp-ajax-response' ), false, 1 ); did_action( 'init' ) && $scripts->localize( 'admin-tags', 'tagsl10n', array( diff --git a/tests/phpunit/tests/dependencies/scripts.php b/tests/phpunit/tests/dependencies/scripts.php index 4dc248279ee63..05cb723d17eab 100644 --- a/tests/phpunit/tests/dependencies/scripts.php +++ b/tests/phpunit/tests/dependencies/scripts.php @@ -10,6 +10,7 @@ function setUp() { parent::setUp(); $this->old_wp_scripts = isset( $GLOBALS['wp_scripts'] ) ? $GLOBALS['wp_scripts'] : null; remove_action( 'wp_default_scripts', 'wp_default_scripts' ); + remove_action( 'wp_default_scripts', 'wp_default_packages' ); $GLOBALS['wp_scripts'] = new WP_Scripts(); $GLOBALS['wp_scripts']->default_version = get_bloginfo( 'version' ); } diff --git a/tools/webpack/media.js b/tools/webpack/media.js index 654842f8062ac..ed8e348b2175d 100644 --- a/tools/webpack/media.js +++ b/tools/webpack/media.js @@ -11,10 +11,9 @@ mediaBuilds.forEach( function ( build ) { const baseDir = path.join( __dirname, '../../' ); module.exports = function( env = { environment: 'production', watch: false } ) { - const mode = env.environment; const mediaConfig = { - mode, + mode: "production", cache: true, entry: mediaEntries, output: { From 22d106805fb4d4d5e70b65c428ecbc630963d552 Mon Sep 17 00:00:00 2001 From: Daniel Bachhuber Date: Wed, 17 Oct 2018 17:02:04 +0000 Subject: [PATCH 444/537] REST API: Introduce controller for searching across post types. Introduces a `WP_REST_Search_Controller` class which registers a `/wp/v2/search` endpoint. Search types are handled by extending `WP_REST_Search_Handler`. The default search type is `WP_REST_Post_Search_Handler` but can be filtered by plugins or a theme. Props danielbachhuber, flixos90, pento, rmccue. Fixes #39965. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43739 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/rest-api.php | 14 + .../class-wp-rest-search-controller.php | 359 ++++++++++++ .../class-wp-rest-post-search-handler.php | 192 +++++++ .../search/class-wp-rest-search-handler.php | 97 ++++ src/wp-settings.php | 3 + tests/phpunit/includes/bootstrap.php | 1 + .../class-wp-rest-test-search-handler.php | 91 +++ .../tests/rest-api/rest-schema-setup.php | 1 + .../tests/rest-api/rest-search-controller.php | 525 ++++++++++++++++++ tests/qunit/fixtures/wp-api-generated.js | 68 +++ 10 files changed, 1351 insertions(+) create mode 100644 src/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php create mode 100644 src/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php create mode 100644 src/wp-includes/rest-api/search/class-wp-rest-search-handler.php create mode 100644 tests/phpunit/includes/class-wp-rest-test-search-handler.php create mode 100644 tests/phpunit/tests/rest-api/rest-search-controller.php diff --git a/src/wp-includes/rest-api.php b/src/wp-includes/rest-api.php index e1403d71bd665..adcd8b957b6d2 100644 --- a/src/wp-includes/rest-api.php +++ b/src/wp-includes/rest-api.php @@ -230,6 +230,20 @@ function create_initial_rest_routes() { $controller = new WP_REST_Comments_Controller; $controller->register_routes(); + /** + * Filters the search handlers to use in the REST search controller. + * + * @since 5.0.0 + * + * @param array $search_handlers List of search handlers to use in the controller. Each search + * handler instance must extend the `WP_REST_Search_Handler` class. + * Default is only a handler for posts. + */ + $search_handlers = apply_filters( 'wp_rest_search_handlers', array( new WP_REST_Post_Search_Handler() ) ); + + $controller = new WP_REST_Search_Controller( $search_handlers ); + $controller->register_routes(); + // Settings. $controller = new WP_REST_Settings_Controller; $controller->register_routes(); diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php new file mode 100644 index 0000000000000..eb5493a9da05f --- /dev/null +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php @@ -0,0 +1,359 @@ +namespace = 'wp/v2'; + $this->rest_base = 'search'; + + foreach ( $search_handlers as $search_handler ) { + if ( ! $search_handler instanceof WP_REST_Search_Handler ) { + + /* translators: %s: PHP class name */ + _doing_it_wrong( __METHOD__, sprintf( __( 'REST search handlers must extend the %s class.' ), 'WP_REST_Search_Handler' ), '5.5.0' ); + continue; + } + + $this->search_handlers[ $search_handler->get_type() ] = $search_handler; + } + } + + /** + * Registers the routes for the objects of the controller. + * + * @since 5.0.0 + * + * @see register_rest_route() + */ + public function register_routes() { + register_rest_route( + $this->namespace, + '/' . $this->rest_base, + array( + array( + 'methods' => WP_REST_Server::READABLE, + 'callback' => array( $this, 'get_items' ), + 'permission_callback' => array( $this, 'get_items_permission_check' ), + 'args' => $this->get_collection_params(), + ), + 'schema' => array( $this, 'get_public_item_schema' ), + ) + ); + } + + /** + * Checks if a given request has access to search content. + * + * @since 5.0.0 + * + * @param WP_REST_Request $request Full details about the request. + * @return true|WP_Error True if the request has search access, WP_Error object otherwise. + */ + public function get_items_permission_check( $request ) { + return true; + } + + /** + * Retrieves a collection of search results. + * + * @since 5.0.0 + * + * @param WP_REST_Request $request Full details about the request. + * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. + */ + public function get_items( $request ) { + $handler = $this->get_search_handler( $request ); + if ( is_wp_error( $handler ) ) { + return $handler; + } + + $result = $handler->search_items( $request ); + + if ( ! isset( $result[ WP_REST_Search_Handler::RESULT_IDS ] ) || ! is_array( $result[ WP_REST_Search_Handler::RESULT_IDS ] ) || ! isset( $result[ WP_REST_Search_Handler::RESULT_TOTAL ] ) ) { + return new WP_Error( 'rest_search_handler_error', __( 'Internal search handler error.' ), array( 'status' => 500 ) ); + } + + $ids = array_map( 'absint', $result[ WP_REST_Search_Handler::RESULT_IDS ] ); + + $results = array(); + foreach ( $ids as $id ) { + $data = $this->prepare_item_for_response( $id, $request ); + $results[] = $this->prepare_response_for_collection( $data ); + } + + $total = (int) $result[ WP_REST_Search_Handler::RESULT_TOTAL ]; + $page = (int) $request['page']; + $per_page = (int) $request['per_page']; + $max_pages = ceil( $total / $per_page ); + + if ( $page > $max_pages && $total > 0 ) { + return new WP_Error( 'rest_search_invalid_page_number', __( 'The page number requested is larger than the number of pages available.' ), array( 'status' => 400 ) ); + } + + $response = rest_ensure_response( $results ); + $response->header( 'X-WP-Total', $total ); + $response->header( 'X-WP-TotalPages', $max_pages ); + + $request_params = $request->get_query_params(); + $base = add_query_arg( $request_params, rest_url( sprintf( '%s/%s', $this->namespace, $this->rest_base ) ) ); + + if ( $page > 1 ) { + $prev_link = add_query_arg( 'page', $page - 1, $base ); + $response->link_header( 'prev', $prev_link ); + } + if ( $page < $max_pages ) { + $next_link = add_query_arg( 'page', $page + 1, $base ); + $response->link_header( 'next', $next_link ); + } + + return $response; + } + + /** + * Prepares a single search result for response. + * + * @since 5.0.0 + * + * @param int $id ID of the item to prepare. + * @param WP_REST_Request $request Request object. + * @return WP_REST_Response Response object. + */ + public function prepare_item_for_response( $id, $request ) { + $handler = $this->get_search_handler( $request ); + if ( is_wp_error( $handler ) ) { + return new WP_REST_Response(); + } + + $fields = $this->get_fields_for_response( $request ); + + $data = $handler->prepare_item( $id, $fields ); + $data = $this->add_additional_fields_to_object( $data, $request ); + + $context = ! empty( $request['context'] ) ? $request['context'] : 'view'; + $data = $this->filter_response_by_context( $data, $context ); + + $response = rest_ensure_response( $data ); + + $links = $handler->prepare_item_links( $id ); + $links['collection'] = array( + 'href' => rest_url( sprintf( '%s/%s', $this->namespace, $this->rest_base ) ), + ); + $response->add_links( $links ); + + return $response; + } + + /** + * Retrieves the item schema, conforming to JSON Schema. + * + * @since 5.0.0 + * + * @return array Item schema data. + */ + public function get_item_schema() { + $types = array(); + $subtypes = array(); + foreach ( $this->search_handlers as $search_handler ) { + $types[] = $search_handler->get_type(); + $subtypes = array_merge( $subtypes, $search_handler->get_subtypes() ); + } + + $types = array_unique( $types ); + $subtypes = array_unique( $subtypes ); + + $schema = array( + '$schema' => 'http://json-schema.org/draft-04/schema#', + 'title' => 'search-result', + 'type' => 'object', + 'properties' => array( + self::PROP_ID => array( + 'description' => __( 'Unique identifier for the object.' ), + 'type' => 'integer', + 'context' => array( 'view', 'embed' ), + 'readonly' => true, + ), + self::PROP_TITLE => array( + 'description' => __( 'The title for the object.' ), + 'type' => 'string', + 'context' => array( 'view', 'embed' ), + 'readonly' => true, + ), + self::PROP_URL => array( + 'description' => __( 'URL to the object.' ), + 'type' => 'string', + 'format' => 'uri', + 'context' => array( 'view', 'embed' ), + 'readonly' => true, + ), + self::PROP_TYPE => array( + 'description' => __( 'Object type.' ), + 'type' => 'string', + 'enum' => $types, + 'context' => array( 'view', 'embed' ), + 'readonly' => true, + ), + self::PROP_SUBTYPE => array( + 'description' => __( 'Object subtype.' ), + 'type' => 'string', + 'enum' => $subtypes, + 'context' => array( 'view', 'embed' ), + 'readonly' => true, + ), + ), + ); + + return $this->add_additional_fields_schema( $schema ); + } + + /** + * Retrieves the query params for the search results collection. + * + * @since 5.0.0 + * + * @return array Collection parameters. + */ + public function get_collection_params() { + $types = array(); + $subtypes = array(); + foreach ( $this->search_handlers as $search_handler ) { + $types[] = $search_handler->get_type(); + $subtypes = array_merge( $subtypes, $search_handler->get_subtypes() ); + } + + $types = array_unique( $types ); + $subtypes = array_unique( $subtypes ); + + $query_params = parent::get_collection_params(); + + $query_params['context']['default'] = 'view'; + + $query_params[ self::PROP_TYPE ] = array( + 'default' => $types[0], + 'description' => __( 'Limit results to items of an object type.' ), + 'type' => 'string', + 'enum' => $types, + ); + + $query_params[ self::PROP_SUBTYPE ] = array( + 'default' => self::TYPE_ANY, + 'description' => __( 'Limit results to items of one or more object subtypes.' ), + 'type' => 'array', + 'items' => array( + 'enum' => array_merge( $subtypes, array( self::TYPE_ANY ) ), + 'type' => 'string', + ), + 'sanitize_callback' => array( $this, 'sanitize_subtypes' ), + ); + + return $query_params; + } + + /** + * Sanitizes the list of subtypes, to ensure only subtypes of the passed type are included. + * + * @since 5.0.0 + * + * @param string|array $subtypes One or more subtypes. + * @param WP_REST_Request $request Full details about the request. + * @param string $parameter Parameter name. + * @return array|WP_Error List of valid subtypes, or WP_Error object on failure. + */ + public function sanitize_subtypes( $subtypes, $request, $parameter ) { + $subtypes = wp_parse_slug_list( $subtypes ); + + $subtypes = rest_parse_request_arg( $subtypes, $request, $parameter ); + if ( is_wp_error( $subtypes ) ) { + return $subtypes; + } + + // 'any' overrides any other subtype. + if ( in_array( self::TYPE_ANY, $subtypes, true ) ) { + return array( self::TYPE_ANY ); + } + + $handler = $this->get_search_handler( $request ); + if ( is_wp_error( $handler ) ) { + return $handler; + } + + return array_intersect( $subtypes, $handler->get_subtypes() ); + } + + /** + * Gets the search handler to handle the current request. + * + * @since 5.0.0 + * + * @param WP_REST_Request $request Full details about the request. + * @return WP_REST_Search_Handler|WP_Error Search handler for the request type, or WP_Error object on failure. + */ + protected function get_search_handler( $request ) { + $type = $request->get_param( self::PROP_TYPE ); + + if ( ! $type || ! isset( $this->search_handlers[ $type ] ) ) { + return new WP_Error( 'rest_search_invalid_type', __( 'Invalid type parameter.' ), array( 'status' => 400 ) ); + } + + return $this->search_handlers[ $type ]; + } +} diff --git a/src/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php b/src/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php new file mode 100644 index 0000000000000..804be3b31b601 --- /dev/null +++ b/src/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php @@ -0,0 +1,192 @@ +type = 'post'; + + // Support all public post types except attachments. + $this->subtypes = array_diff( + array_values( + get_post_types( + array( + 'public' => true, + 'show_in_rest' => true, + ), + 'names' + ) + ), + array( 'attachment' ) + ); + } + + /** + * Searches the object type content for a given search request. + * + * @since 5.0.0 + * + * @param WP_REST_Request $request Full REST request. + * @return array Associative array containing an `WP_REST_Search_Handler::RESULT_IDS` containing + * an array of found IDs and `WP_REST_Search_Handler::RESULT_TOTAL` containing the + * total count for the matching search results. + */ + public function search_items( WP_REST_Request $request ) { + + // Get the post types to search for the current request. + $post_types = $request[ WP_REST_Search_Controller::PROP_SUBTYPE ]; + if ( in_array( WP_REST_Search_Controller::TYPE_ANY, $post_types, true ) ) { + $post_types = $this->subtypes; + } + + $query_args = array( + 'post_type' => $post_types, + 'post_status' => 'publish', + 'paged' => (int) $request['page'], + 'posts_per_page' => (int) $request['per_page'], + 'ignore_sticky_posts' => true, + 'fields' => 'ids', + ); + + if ( ! empty( $request['search'] ) ) { + $query_args['s'] = $request['search']; + } + + $query = new WP_Query(); + $found_ids = $query->query( $query_args ); + $total = $query->found_posts; + + return array( + self::RESULT_IDS => $found_ids, + self::RESULT_TOTAL => $total, + ); + } + + /** + * Prepares the search result for a given ID. + * + * @since 5.0.0 + * + * @param int $id Item ID. + * @param array $fields Fields to include for the item. + * @return array Associative array containing all fields for the item. + */ + public function prepare_item( $id, array $fields ) { + $post = get_post( $id ); + + $data = array(); + + if ( in_array( WP_REST_Search_Controller::PROP_ID, $fields, true ) ) { + $data[ WP_REST_Search_Controller::PROP_ID ] = (int) $post->ID; + } + + if ( in_array( WP_REST_Search_Controller::PROP_TITLE, $fields, true ) ) { + if ( post_type_supports( $post->post_type, 'title' ) ) { + add_filter( 'protected_title_format', array( $this, 'protected_title_format' ) ); + $data[ WP_REST_Search_Controller::PROP_TITLE ] = get_the_title( $post->ID ); + remove_filter( 'protected_title_format', array( $this, 'protected_title_format' ) ); + } else { + $data[ WP_REST_Search_Controller::PROP_TITLE ] = ''; + } + } + + if ( in_array( WP_REST_Search_Controller::PROP_URL, $fields, true ) ) { + $data[ WP_REST_Search_Controller::PROP_URL ] = get_permalink( $post->ID ); + } + + if ( in_array( WP_REST_Search_Controller::PROP_TYPE, $fields, true ) ) { + $data[ WP_REST_Search_Controller::PROP_TYPE ] = $this->type; + } + + if ( in_array( WP_REST_Search_Controller::PROP_SUBTYPE, $fields, true ) ) { + $data[ WP_REST_Search_Controller::PROP_SUBTYPE ] = $post->post_type; + } + + return $data; + } + + /** + * Prepares links for the search result of a given ID. + * + * @since 5.0.0 + * + * @param int $id Item ID. + * @return array Links for the given item. + */ + public function prepare_item_links( $id ) { + $post = get_post( $id ); + + $links = array(); + + $item_route = $this->detect_rest_item_route( $post ); + if ( ! empty( $item_route ) ) { + $links['self'] = array( + 'href' => rest_url( $item_route ), + 'embeddable' => true, + ); + } + + $links['about'] = array( + 'href' => rest_url( 'wp/v2/types/' . $post->post_type ), + ); + + return $links; + } + + /** + * Overwrites the default protected title format. + * + * By default, WordPress will show password protected posts with a title of + * "Protected: %s". As the REST API communicates the protected status of a post + * in a machine readable format, we remove the "Protected: " prefix. + * + * @since 5.0.0 + * + * @return string Protected title format. + */ + public function protected_title_format() { + return '%s'; + } + + /** + * Attempts to detect the route to access a single item. + * + * @since 5.0.0 + * + * @param WP_Post $post Post object. + * @return string REST route relative to the REST base URI, or empty string if unknown. + */ + protected function detect_rest_item_route( $post ) { + $post_type = get_post_type_object( $post->post_type ); + if ( ! $post_type ) { + return ''; + } + + // It's currently impossible to detect the REST URL from a custom controller. + if ( ! empty( $post_type->rest_controller_class ) && 'WP_REST_Posts_Controller' !== $post_type->rest_controller_class ) { + return ''; + } + + $namespace = 'wp/v2'; + $rest_base = ! empty( $post_type->rest_base ) ? $post_type->rest_base : $post_type->name; + + return sprintf( '%s/%s/%d', $namespace, $rest_base, $post->ID ); + } + +} diff --git a/src/wp-includes/rest-api/search/class-wp-rest-search-handler.php b/src/wp-includes/rest-api/search/class-wp-rest-search-handler.php new file mode 100644 index 0000000000000..4799e1c981974 --- /dev/null +++ b/src/wp-includes/rest-api/search/class-wp-rest-search-handler.php @@ -0,0 +1,97 @@ +type; + } + + /** + * Gets the object subtypes managed by this search handler. + * + * @since 5.0.0 + * + * @return array Array of object subtype identifiers. + */ + public function get_subtypes() { + return $this->subtypes; + } + + /** + * Searches the object type content for a given search request. + * + * @since 5.0.0 + * + * @param WP_REST_Request $request Full REST request. + * @return array Associative array containing an `WP_REST_Search_Handler::RESULT_IDS` containing + * an array of found IDs and `WP_REST_Search_Handler::RESULT_TOTAL` containing the + * total count for the matching search results. + */ + abstract public function search_items( WP_REST_Request $request ); + + /** + * Prepares the search result for a given ID. + * + * @since 5.0.0 + * + * @param int $id Item ID. + * @param array $fields Fields to include for the item. + * @return array Associative array containing all fields for the item. + */ + abstract public function prepare_item( $id, array $fields ); + + /** + * Prepares links for the search result of a given ID. + * + * @since 5.0.0 + * + * @param int $id Item ID. + * @return array Links for the given item. + */ + abstract public function prepare_item_links( $id ); +} diff --git a/src/wp-settings.php b/src/wp-settings.php index 44c8a91a07078..d17325974fabb 100644 --- a/src/wp-settings.php +++ b/src/wp-settings.php @@ -233,6 +233,7 @@ require( ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-terms-controller.php' ); require( ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-users-controller.php' ); require( ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-comments-controller.php' ); +require( ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-search-controller.php' ); require( ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-settings-controller.php' ); require( ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-themes-controller.php' ); require( ABSPATH . WPINC . '/rest-api/fields/class-wp-rest-meta-fields.php' ); @@ -240,6 +241,8 @@ require( ABSPATH . WPINC . '/rest-api/fields/class-wp-rest-post-meta-fields.php' ); require( ABSPATH . WPINC . '/rest-api/fields/class-wp-rest-term-meta-fields.php' ); require( ABSPATH . WPINC . '/rest-api/fields/class-wp-rest-user-meta-fields.php' ); +require( ABSPATH . WPINC . '/rest-api/search/class-wp-rest-search-handler.php' ); +require( ABSPATH . WPINC . '/rest-api/search/class-wp-rest-post-search-handler.php' ); $GLOBALS['wp_embed'] = new WP_Embed(); diff --git a/tests/phpunit/includes/bootstrap.php b/tests/phpunit/includes/bootstrap.php index c3b52cc553d48..a5bac2bcb0729 100644 --- a/tests/phpunit/includes/bootstrap.php +++ b/tests/phpunit/includes/bootstrap.php @@ -117,6 +117,7 @@ function wp_tests_options( $value ) { require dirname( __FILE__ ) . '/exceptions.php'; require dirname( __FILE__ ) . '/utils.php'; require dirname( __FILE__ ) . '/spy-rest-server.php'; +require dirname( __FILE__ ) . '/class-wp-rest-test-search-handler.php'; /** * A child class of the PHP test runner. diff --git a/tests/phpunit/includes/class-wp-rest-test-search-handler.php b/tests/phpunit/includes/class-wp-rest-test-search-handler.php new file mode 100644 index 0000000000000..10a686972b738 --- /dev/null +++ b/tests/phpunit/includes/class-wp-rest-test-search-handler.php @@ -0,0 +1,91 @@ +type = 'test'; + + $this->subtypes = array( 'test_first_type', 'test_second_type' ); + + $this->items = array(); + for ( $i = 1; $i <= $amount; $i++ ) { + $subtype = $i > $amount / 2 ? 'test_second_type' : 'test_first_type'; + + $this->items[ $i ] = (object) array( + 'test_id' => $i, + 'test_title' => sprintf( 'Title %d', $i ), + 'test_url' => sprintf( home_url( '/tests/%d' ), $i ), + 'test_type' => $subtype, + ); + } + } + + public function search_items( WP_REST_Request $request ) { + $subtypes = $request[ WP_REST_Search_Controller::PROP_SUBTYPE ]; + if ( in_array( WP_REST_Search_Controller::TYPE_ANY, $subtypes, true ) ) { + $subtypes = $this->subtypes; + } + + $results = array(); + foreach ( $subtypes as $subtype ) { + $results = array_merge( $results, wp_list_filter( array_values( $this->items ), array( 'test_type' => $subtype ) ) ); + } + + $results = wp_list_sort( $results, 'test_id', 'DESC' ); + + $number = (int) $request['per_page']; + $offset = (int) $request['per_page'] * ( (int) $request['page'] - 1 ); + + $total = count( $results ); + + $results = array_slice( $results, $offset, $number ); + + return array( + self::RESULT_IDS => wp_list_pluck( $results, 'test_id' ), + self::RESULT_TOTAL => $total, + ); + } + + public function prepare_item( $id, array $fields ) { + $test = $this->items[ $id ]; + + $data = array(); + + if ( in_array( WP_REST_Search_Controller::PROP_ID, $fields, true ) ) { + $data[ WP_REST_Search_Controller::PROP_ID ] = (int) $test->test_id; + } + + if ( in_array( WP_REST_Search_Controller::PROP_TITLE, $fields, true ) ) { + $data[ WP_REST_Search_Controller::PROP_TITLE ] = $test->test_title; + } + + if ( in_array( WP_REST_Search_Controller::PROP_URL, $fields, true ) ) { + $data[ WP_REST_Search_Controller::PROP_URL ] = $test->test_url; + } + + if ( in_array( WP_REST_Search_Controller::PROP_TYPE, $fields, true ) ) { + $data[ WP_REST_Search_Controller::PROP_TYPE ] = $this->type; + } + + if ( in_array( WP_REST_Search_Controller::PROP_SUBTYPE, $fields, true ) ) { + $data[ WP_REST_Search_Controller::PROP_SUBTYPE ] = $test->test_type; + } + + return $data; + } + + public function prepare_item_links( $id ) { + return array(); + } +} diff --git a/tests/phpunit/tests/rest-api/rest-schema-setup.php b/tests/phpunit/tests/rest-api/rest-schema-setup.php index e51fcc796d821..1b868316f0692 100644 --- a/tests/phpunit/tests/rest-api/rest-schema-setup.php +++ b/tests/phpunit/tests/rest-api/rest-schema-setup.php @@ -110,6 +110,7 @@ public function test_expected_routes_in_schema() { '/wp/v2/users/me', '/wp/v2/comments', '/wp/v2/comments/(?P[\\d]+)', + '/wp/v2/search', '/wp/v2/settings', '/wp/v2/themes', ); diff --git a/tests/phpunit/tests/rest-api/rest-search-controller.php b/tests/phpunit/tests/rest-api/rest-search-controller.php new file mode 100644 index 0000000000000..60d1ef0bfbfb6 --- /dev/null +++ b/tests/phpunit/tests/rest-api/rest-search-controller.php @@ -0,0 +1,525 @@ +post->create_many( + 4, + array( + 'post_title' => 'my-footitle', + 'post_type' => 'post', + ) + ); + + self::$my_title_page_ids = $factory->post->create_many( + 4, + array( + 'post_title' => 'my-footitle', + 'post_type' => 'page', + ) + ); + + self::$my_content_post_ids = $factory->post->create_many( + 6, + array( + 'post_content' => 'my-foocontent', + ) + ); + } + + /** + * Delete our fake data after our tests run. + */ + public static function wpTearDownAfterClass() { + $post_ids = array_merge( + self::$my_title_post_ids, + self::$my_title_page_ids, + self::$my_content_post_ids + ); + + foreach ( $post_ids as $post_id ) { + wp_delete_post( $post_id, true ); + } + } + + /** + * Check that our routes get set up properly. + */ + public function test_register_routes() { + $routes = rest_get_server()->get_routes(); + + $this->assertArrayHasKey( '/wp/v2/search', $routes ); + $this->assertCount( 1, $routes['/wp/v2/search'] ); + } + + /** + * Check the context parameter. + */ + public function test_context_param() { + $response = $this->do_request_with_params( array(), 'OPTIONS' ); + $data = $response->get_data(); + + $this->assertEquals( 'view', $data['endpoints'][0]['args']['context']['default'] ); + $this->assertEquals( array( 'view', 'embed' ), $data['endpoints'][0]['args']['context']['enum'] ); + } + + /** + * Search through all content. + */ + public function test_get_items() { + $response = $this->do_request_with_params( + array( + 'per_page' => 100, + ) + ); + + $this->assertEquals( 200, $response->get_status() ); + $this->assertEqualSets( + array_merge( + self::$my_title_post_ids, + self::$my_title_page_ids, + self::$my_content_post_ids + ), + wp_list_pluck( $response->get_data(), 'id' ) + ); + } + + /** + * Search through all content with a low limit. + */ + public function test_get_items_with_limit() { + $response = $this->do_request_with_params( + array( + 'per_page' => 3, + ) + ); + + $this->assertEquals( 200, $response->get_status() ); + $this->assertEquals( 3, count( $response->get_data() ) ); + } + + /** + * Search through posts of any post type. + */ + public function test_get_items_search_type_post() { + $response = $this->do_request_with_params( + array( + 'per_page' => 100, + 'type' => 'post', + ) + ); + + $this->assertEquals( 200, $response->get_status() ); + $this->assertEqualSets( + array_merge( + self::$my_title_post_ids, + self::$my_title_page_ids, + self::$my_content_post_ids + ), + wp_list_pluck( $response->get_data(), 'id' ) + ); + } + + /** + * Search through posts of post type 'post'. + */ + public function test_get_items_search_type_post_subtype_post() { + $response = $this->do_request_with_params( + array( + 'per_page' => 100, + 'type' => 'post', + 'subtype' => 'post', + ) + ); + + $this->assertEquals( 200, $response->get_status() ); + $this->assertEqualSets( + array_merge( + self::$my_title_post_ids, + self::$my_content_post_ids + ), + wp_list_pluck( $response->get_data(), 'id' ) + ); + } + + /** + * Search through posts of post type 'page'. + */ + public function test_get_items_search_type_post_subtype_page() { + $response = $this->do_request_with_params( + array( + 'per_page' => 100, + 'type' => 'post', + 'subtype' => 'page', + ) + ); + + $this->assertEquals( 200, $response->get_status() ); + $this->assertEqualSets( + self::$my_title_page_ids, + wp_list_pluck( $response->get_data(), 'id' ) + ); + } + + /** + * Search through an invalid type + */ + public function test_get_items_search_type_invalid() { + $response = $this->do_request_with_params( + array( + 'per_page' => 100, + 'type' => 'invalid', + ) + ); + + $this->assertErrorResponse( 'rest_invalid_param', $response, 400 ); + } + + /** + * Search through posts of an invalid post type. + */ + public function test_get_items_search_type_post_subtype_invalid() { + $response = $this->do_request_with_params( + array( + 'per_page' => 100, + 'type' => 'post', + 'subtype' => 'invalid', + ) + ); + + $this->assertErrorResponse( 'rest_invalid_param', $response, 400 ); + } + + /** + * Search through posts and pages. + */ + public function test_get_items_search_posts_and_pages() { + $response = $this->do_request_with_params( + array( + 'per_page' => 100, + 'type' => 'post', + 'subtype' => 'post,page', + ) + ); + + $this->assertEquals( 200, $response->get_status() ); + $this->assertEqualSets( + array_merge( + self::$my_title_post_ids, + self::$my_title_page_ids, + self::$my_content_post_ids + ), + wp_list_pluck( $response->get_data(), 'id' ) + ); + } + + /** + * Search through all that matches a 'footitle' search. + */ + public function test_get_items_search_for_footitle() { + $response = $this->do_request_with_params( + array( + 'per_page' => 100, + 'search' => 'footitle', + ) + ); + + $this->assertEquals( 200, $response->get_status() ); + $this->assertEqualSets( + array_merge( + self::$my_title_post_ids, + self::$my_title_page_ids + ), + wp_list_pluck( $response->get_data(), 'id' ) + ); + } + + /** + * Search through all that matches a 'foocontent' search. + */ + public function test_get_items_search_for_foocontent() { + $response = $this->do_request_with_params( + array( + 'per_page' => 100, + 'search' => 'foocontent', + ) + ); + + $this->assertEquals( 200, $response->get_status() ); + $this->assertEqualSets( + self::$my_content_post_ids, + wp_list_pluck( $response->get_data(), 'id' ) + ); + } + + /** + * Test retrieving a single item isn't possible. + */ + public function test_get_item() { + /** The search controller does not allow getting individual item content */ + $request = new WP_REST_Request( 'GET', '/wp/v2/search' . self::$my_title_post_ids[0] ); + $response = rest_get_server()->dispatch( $request ); + $this->assertEquals( 404, $response->get_status() ); + } + + /** + * Test creating an item isn't possible. + */ + public function test_create_item() { + /** The search controller does not allow creating content */ + $request = new WP_REST_Request( 'POST', '/wp/v2/search' ); + $response = rest_get_server()->dispatch( $request ); + $this->assertEquals( 404, $response->get_status() ); + } + + /** + * Test updating an item isn't possible. + */ + public function test_update_item() { + /** The search controller does not allow upading content */ + $request = new WP_REST_Request( 'POST', '/wp/v2/search' . self::$my_title_post_ids[0] ); + $response = rest_get_server()->dispatch( $request ); + $this->assertEquals( 404, $response->get_status() ); + } + + /** + * Test deleting an item isn't possible. + */ + public function test_delete_item() { + /** The search controller does not allow deleting content */ + $request = new WP_REST_Request( 'DELETE', '/wp/v2/search' . self::$my_title_post_ids[0] ); + $response = rest_get_server()->dispatch( $request ); + $this->assertEquals( 404, $response->get_status() ); + } + + /** + * Test preparing the data contains the correct fields. + */ + public function test_prepare_item() { + $response = $this->do_request_with_params(); + $this->assertEquals( 200, $response->get_status() ); + + $data = $response->get_data(); + $this->assertEquals( + array( + 'id', + 'title', + 'url', + 'type', + 'subtype', + '_links', + ), + array_keys( $data[0] ) + ); + } + + /** + * Test preparing the data with limited fields contains the correct fields. + */ + public function test_prepare_item_limit_fields() { + if ( ! method_exists( 'WP_REST_Controller', 'get_fields_for_response' ) ) { + $this->markTestSkipped( 'Limiting fields requires the WP_REST_Controller::get_fields_for_response() method.' ); + } + + $response = $this->do_request_with_params( + array( + '_fields' => 'id,title', + ) + ); + $this->assertEquals( 200, $response->get_status() ); + + $data = $response->get_data(); + $this->assertEquals( + array( + 'id', + 'title', + '_links', + ), + array_keys( $data[0] ) + ); + } + + /** + * Tests the item schema is correct. + */ + public function test_get_item_schema() { + $request = new WP_REST_Request( 'OPTIONS', '/wp/v2/search' ); + $response = rest_get_server()->dispatch( $request ); + $data = $response->get_data(); + $properties = $data['schema']['properties']; + + $this->assertArrayHasKey( 'id', $properties ); + $this->assertArrayHasKey( 'title', $properties ); + $this->assertArrayHasKey( 'url', $properties ); + $this->assertArrayHasKey( 'type', $properties ); + $this->assertArrayHasKey( 'subtype', $properties ); + } + + /** + * Tests that non-public post types are not allowed. + */ + public function test_non_public_post_type() { + $response = $this->do_request_with_params( + array( + 'type' => 'post', + 'subtype' => 'post,nav_menu_item', + ) + ); + $this->assertErrorResponse( 'rest_invalid_param', $response, 400 ); + } + + /** + * Test getting items directly with a custom search handler. + */ + public function test_custom_search_handler_get_items() { + $controller = new WP_REST_Search_Controller( array( new WP_REST_Test_Search_Handler( 10 ) ) ); + + $request = $this->get_request( + array( + 'page' => 1, + 'per_page' => 10, + 'type' => 'test', + 'subtype' => array( WP_REST_Search_Controller::TYPE_ANY ), + ) + ); + $response = $controller->get_items( $request ); + $this->assertEqualSets( range( 1, 10 ), wp_list_pluck( $response->get_data(), 'id' ) ); + + $request = $this->get_request( + array( + 'page' => 1, + 'per_page' => 10, + 'type' => 'test', + 'subtype' => array( 'test_first_type' ), + ) + ); + $response = $controller->get_items( $request ); + $this->assertEqualSets( range( 1, 5 ), wp_list_pluck( $response->get_data(), 'id' ) ); + } + + /** + * Test preparing an item directly with a custom search handler. + */ + public function test_custom_search_handler_prepare_item() { + $controller = new WP_REST_Search_Controller( array( new WP_REST_Test_Search_Handler( 10 ) ) ); + + $request = $this->get_request( + array( + 'type' => 'test', + 'subtype' => array( WP_REST_Search_Controller::TYPE_ANY ), + ) + ); + $response = $controller->prepare_item_for_response( 1, $request ); + $data = $response->get_data(); + $this->assertEquals( + array( + 'id', + 'title', + 'url', + 'type', + 'subtype', + ), + array_keys( $data ) + ); + } + + /** + * Test preparing an item directly with a custom search handler with limited fields. + */ + public function test_custom_search_handler_prepare_item_limit_fields() { + if ( ! method_exists( 'WP_REST_Controller', 'get_fields_for_response' ) ) { + $this->markTestSkipped( 'Limiting fields requires the WP_REST_Controller::get_fields_for_response() method.' ); + } + + $controller = new WP_REST_Search_Controller( array( new WP_REST_Test_Search_Handler( 10 ) ) ); + + $request = $this->get_request( + array( + 'type' => 'test', + 'subtype' => array( WP_REST_Search_Controller::TYPE_ANY ), + '_fields' => 'id,title', + ) + ); + $response = $controller->prepare_item_for_response( 1, $request ); + $data = $response->get_data(); + $this->assertEquals( + array( + 'id', + 'title', + ), + array_keys( $data ) + ); + } + + /** + * Test getting the collection params directly with a custom search handler. + */ + public function test_custom_search_handler_get_collection_params() { + $controller = new WP_REST_Search_Controller( array( new WP_REST_Test_Search_Handler( 10 ) ) ); + + $params = $controller->get_collection_params(); + $this->assertEquals( 'test', $params[ WP_REST_Search_Controller::PROP_TYPE ]['default'] ); + $this->assertEqualSets( array( 'test' ), $params[ WP_REST_Search_Controller::PROP_TYPE ]['enum'] ); + $this->assertEqualSets( array( 'test_first_type', 'test_second_type', WP_REST_Search_Controller::TYPE_ANY ), $params[ WP_REST_Search_Controller::PROP_SUBTYPE ]['items']['enum'] ); + } + + /** + * Perform a REST request to our search endpoint with given parameters. + */ + private function do_request_with_params( $params = array(), $method = 'GET' ) { + $request = $this->get_request( $params, $method ); + + return rest_get_server()->dispatch( $request ); + } + + /** + * Get a REST request object for given parameters. + */ + private function get_request( $params = array(), $method = 'GET' ) { + $request = new WP_REST_Request( $method, '/wp/v2/search' ); + + foreach ( $params as $param => $value ) { + $request->set_param( $param, $value ); + } + + return $request; + } + +} diff --git a/tests/qunit/fixtures/wp-api-generated.js b/tests/qunit/fixtures/wp-api-generated.js index 6b9d530b46204..5f3875ca04f10 100644 --- a/tests/qunit/fixtures/wp-api-generated.js +++ b/tests/qunit/fixtures/wp-api-generated.js @@ -3406,6 +3406,74 @@ mockedApiResponse.Schema = { } ] }, + "/wp/v2/search": { + "namespace": "wp/v2", + "methods": [ + "GET" + ], + "endpoints": [ + { + "methods": [ + "GET" + ], + "args": { + "context": { + "required": false, + "default": "view", + "enum": [ + "view", + "embed" + ], + "description": "Scope under which the request is made; determines fields present in response.", + "type": "string" + }, + "page": { + "required": false, + "default": 1, + "description": "Current page of the collection.", + "type": "integer" + }, + "per_page": { + "required": false, + "default": 10, + "description": "Maximum number of items to be returned in result set.", + "type": "integer" + }, + "search": { + "required": false, + "description": "Limit results to those matching a string.", + "type": "string" + }, + "type": { + "required": false, + "default": "post", + "enum": [ + "post" + ], + "description": "Limit results to items of an object type.", + "type": "string" + }, + "subtype": { + "required": false, + "default": "any", + "description": "Limit results to items of one or more object subtypes.", + "type": "array", + "items": { + "enum": [ + "post", + "page", + "any" + ], + "type": "string" + } + } + } + } + ], + "_links": { + "self": "http://example.org/index.php?rest_route=/wp/v2/search" + } + }, "/wp/v2/settings": { "namespace": "wp/v2", "methods": [ From 5b45675d595d75490612d1acbaf3d88b9a6a6cfa Mon Sep 17 00:00:00 2001 From: "K. Adam White" Date: Wed, 17 Oct 2018 20:09:33 +0000 Subject: [PATCH 445/537] REST API: Slash existing meta values when comparing with incoming meta upates. When comparing the old and new values for a meta key being set, ensure both values are sanitized using the same logic so that equal values match. props boonebgorges, dcavins, MattGeri, pilou69, TimothyBlynJacobs. Fixes #42069. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43740 602fd350-edb4-49c9-b593-d223f7449a82 --- .../fields/class-wp-rest-meta-fields.php | 8 +- .../tests/rest-api/rest-post-meta-fields.php | 94 ++++++++++++++++++- 2 files changed, 96 insertions(+), 6 deletions(-) diff --git a/src/wp-includes/rest-api/fields/class-wp-rest-meta-fields.php b/src/wp-includes/rest-api/fields/class-wp-rest-meta-fields.php index 46c2d06250ab4..54e0498132222 100644 --- a/src/wp-includes/rest-api/fields/class-wp-rest-meta-fields.php +++ b/src/wp-includes/rest-api/fields/class-wp-rest-meta-fields.php @@ -295,19 +295,17 @@ protected function update_meta_value( $object_id, $meta_key, $name, $value ) { ); } - $meta_key = wp_slash( $meta_key ); - $meta_value = wp_slash( $value ); - // Do the exact same check for a duplicate value as in update_metadata() to avoid update_metadata() returning false. $old_value = get_metadata( $meta_type, $object_id, $meta_key ); + $subtype = get_object_subtype( $meta_type, $object_id ); if ( 1 === count( $old_value ) ) { - if ( $old_value[0] === $meta_value ) { + if ( (string) sanitize_meta( $meta_key, $value, $meta_type, $subtype ) === $old_value[0] ) { return true; } } - if ( ! update_metadata( $meta_type, $object_id, $meta_key, $meta_value ) ) { + if ( ! update_metadata( $meta_type, $object_id, wp_slash( $meta_key ), wp_slash( $value ) ) ) { return new WP_Error( 'rest_meta_database_error', __( 'Could not update meta value in database.' ), diff --git a/tests/phpunit/tests/rest-api/rest-post-meta-fields.php b/tests/phpunit/tests/rest-api/rest-post-meta-fields.php index cfeec389c5953..58a2e2f449303 100644 --- a/tests/phpunit/tests/rest-api/rest-post-meta-fields.php +++ b/tests/phpunit/tests/rest-api/rest-post-meta-fields.php @@ -20,7 +20,7 @@ public static function wpSetUpBeforeClass( $factory ) { 'supports' => array( 'custom-fields' ), ) ); - self::$wp_meta_keys_saved = $GLOBALS['wp_meta_keys']; + self::$wp_meta_keys_saved = isset( $GLOBALS['wp_meta_keys'] ) ? $GLOBALS['wp_meta_keys'] : array(); self::$post_id = $factory->post->create(); self::$cpt_post_id = $factory->post->create( array( 'post_type' => 'cpt' ) ); } @@ -130,6 +130,48 @@ public function setUp() { 'auth_callback' => '__return_false', ) ); + register_meta( + 'post', + 'test_boolean_update', + array( + 'single' => true, + 'type' => 'boolean', + 'sanitize_callback' => 'absint', + 'show_in_rest' => true, + ) + ); + + register_meta( + 'post', + 'test_textured_text_update', + array( + 'single' => true, + 'type' => 'string', + 'sanitize_callback' => 'sanitize_text_field', + 'show_in_rest' => true, + ) + ); + + register_meta( + 'post', + 'test_json_encoded', + array( + 'single' => true, + 'type' => 'string', + 'show_in_rest' => true, + ) + ); + + register_meta( + 'post', + 'test\'slashed\'key', + array( + 'single' => true, + 'type' => 'string', + 'show_in_rest' => true, + ) + ); + /** @var WP_REST_Server $wp_rest_server */ global $wp_rest_server; $this->server = $wp_rest_server = new Spy_REST_Server; @@ -1161,6 +1203,56 @@ public function data_set_subtype_meta_value() { return $data; } + /** + * @ticket 42069 + * @dataProvider data_update_value_return_success_with_same_value + */ + public function test_update_value_return_success_with_same_value( $meta_key, $meta_value ) { + add_post_meta( self::$post_id, $meta_key, $meta_value ); + + $this->grant_write_permission(); + + $data = array( + 'meta' => array( + $meta_key => $meta_value, + ), + ); + + $request = new WP_REST_Request( 'POST', sprintf( '/wp/v2/posts/%d', self::$post_id ) ); + $request->set_body_params( $data ); + + $response = rest_get_server()->dispatch( $request ); + + $this->assertEquals( 200, $response->get_status() ); + } + + public function data_update_value_return_success_with_same_value() { + return array( + array( 'test_boolean_update', false ), + array( 'test_boolean_update', true ), + array( 'test_textured_text_update', 'She said, "What about the > 10,000 penguins in the kitchen?"' ), + array( 'test_textured_text_update', "He's about to do something rash..." ), + array( 'test_json_encoded', json_encode( array( 'foo' => 'bar' ) ) ), + array( 'test\'slashed\'key', 'Hello' ), + ); + } + + /** + * @ticket 42069 + */ + public function test_slashed_meta_key() { + + add_post_meta( self::$post_id, 'test\'slashed\'key', 'Hello' ); + + $request = new WP_REST_Request( 'GET', sprintf( '/wp/v2/posts/%d', self::$post_id ) ); + + $response = rest_get_server()->dispatch( $request ); + $data = $response->get_data(); + + $this->assertArrayHasKey( 'test\'slashed\'key', $data['meta'] ); + $this->assertEquals( 'Hello', $data['meta']['test\'slashed\'key'] ); + } + /** * Internal function used to disable an insert query which * will trigger a wpdb error for testing purposes. From 76468d6516c54830fe495afa7c9834cb22e83071 Mon Sep 17 00:00:00 2001 From: Daniel Bachhuber Date: Wed, 17 Oct 2018 22:19:20 +0000 Subject: [PATCH 446/537] REST API: Fix version number in `_doing_it_wrong()` call. `_doing_it_wrong()`, indeed. Props joehoyle. See #39965. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43741 602fd350-edb4-49c9-b593-d223f7449a82 --- .../rest-api/endpoints/class-wp-rest-search-controller.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php index eb5493a9da05f..8aaf9c6476bc4 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php @@ -70,7 +70,7 @@ public function __construct( array $search_handlers ) { if ( ! $search_handler instanceof WP_REST_Search_Handler ) { /* translators: %s: PHP class name */ - _doing_it_wrong( __METHOD__, sprintf( __( 'REST search handlers must extend the %s class.' ), 'WP_REST_Search_Handler' ), '5.5.0' ); + _doing_it_wrong( __METHOD__, sprintf( __( 'REST search handlers must extend the %s class.' ), 'WP_REST_Search_Handler' ), '5.0.0' ); continue; } From 15b8548ca0dc331610189d1775a2b92e12e5fc48 Mon Sep 17 00:00:00 2001 From: Gary Pendergast Date: Thu, 18 Oct 2018 01:30:49 +0000 Subject: [PATCH 447/537] Blocks: Introduce `WP_Block_Type` and `WP_Block_Type_Registry` classes. These are the foundational classes allowing blocks to be registered and used throughout WordPress. This commit also includes the `has_block()` and `has_blocks()` functions, which are required for unit testing these classes. Props adamsilverstein, danielbachhuber, desrosj. See #45097, #45109. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43742 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/blocks.php | 61 ++++ .../class-wp-block-type-registry.php | 173 ++++++++++ src/wp-includes/class-wp-block-type.php | 205 ++++++++++++ src/wp-settings.php | 3 + tests/phpunit/includes/bootstrap.php | 1 + .../includes/class-wp-fake-block-type.php | 27 ++ .../tests/blocks/block-type-registry.php | 191 +++++++++++ tests/phpunit/tests/blocks/block-type.php | 313 ++++++++++++++++++ 8 files changed, 974 insertions(+) create mode 100644 src/wp-includes/blocks.php create mode 100644 src/wp-includes/class-wp-block-type-registry.php create mode 100644 src/wp-includes/class-wp-block-type.php create mode 100644 tests/phpunit/includes/class-wp-fake-block-type.php create mode 100644 tests/phpunit/tests/blocks/block-type-registry.php create mode 100644 tests/phpunit/tests/blocks/block-type.php diff --git a/src/wp-includes/blocks.php b/src/wp-includes/blocks.php new file mode 100644 index 0000000000000..b04696d591a84 --- /dev/null +++ b/src/wp-includes/blocks.php @@ -0,0 +1,61 @@ +post_content; + } + } + + return false !== strpos( (string) $post, '\n

    Tester

    \n", + ) + ); + + self::$post_without_blocks = self::factory()->post->create( + array( + 'post_title' => 'Example', + 'post_content' => 'Tester', + ) + ); + } + + /** + * @ticket 45097 + */ + public function test_set_props() { + $name = 'core/fake'; + $args = array( + 'render_callback' => array( $this, 'render_fake_block' ), + 'foo' => 'bar', + ); + + $block_type = new WP_Block_Type( $name, $args ); + + $this->assertSame( $name, $block_type->name ); + $this->assertSame( $args['render_callback'], $block_type->render_callback ); + $this->assertSame( $args['foo'], $block_type->foo ); + } + + /** + * @ticket 45097 + */ + public function test_render() { + $attributes = array( + 'foo' => 'bar', + 'bar' => 'foo', + ); + + $block_type = new WP_Block_Type( + 'core/fake', + array( + 'render_callback' => array( $this, 'render_fake_block' ), + ) + ); + $output = $block_type->render( $attributes ); + $this->assertEquals( $attributes, json_decode( $output, true ) ); + } + + /** + * @ticket 45097 + */ + public function test_render_with_content() { + $attributes = array( + 'foo' => 'bar', + 'bar' => 'foo', + ); + + $content = 'baz'; + + $expected = array_merge( $attributes, array( '_content' => $content ) ); + + $block_type = new WP_Block_Type( + 'core/fake', + array( + 'render_callback' => array( $this, 'render_fake_block_with_content' ), + ) + ); + $output = $block_type->render( $attributes, $content ); + $this->assertEquals( $expected, json_decode( $output, true ) ); + } + + /** + * @ticket 45097 + */ + public function test_render_for_static_block() { + $block_type = new WP_Block_Type( 'core/fake', array() ); + $output = $block_type->render(); + + $this->assertEquals( '', $output ); + } + + /** + * @ticket 45097 + */ + public function test_is_dynamic_for_static_block() { + $block_type = new WP_Block_Type( 'core/fake', array() ); + + $this->assertFalse( $block_type->is_dynamic() ); + } + + /** + * @ticket 45097 + */ + public function test_is_dynamic_for_dynamic_block() { + $block_type = new WP_Block_Type( + 'core/fake', + array( + 'render_callback' => array( $this, 'render_fake_block' ), + ) + ); + + $this->assertTrue( $block_type->is_dynamic() ); + } + + /** + * @ticket 45097 + */ + public function test_prepare_attributes() { + $attributes = array( + 'correct' => 'include', + 'wrongType' => 5, + 'wrongTypeDefaulted' => 5, + /* missingDefaulted */ + 'undefined' => 'omit', + ); + + $block_type = new WP_Block_Type( + 'core/fake', + array( + 'attributes' => array( + 'correct' => array( + 'type' => 'string', + ), + 'wrongType' => array( + 'type' => 'string', + ), + 'wrongTypeDefaulted' => array( + 'type' => 'string', + 'default' => 'defaulted', + ), + 'missingDefaulted' => array( + 'type' => 'string', + 'default' => 'define', + ), + ), + ) + ); + + $prepared_attributes = $block_type->prepare_attributes_for_render( $attributes ); + + $this->assertEquals( + array( + 'correct' => 'include', + 'wrongType' => null, + 'wrongTypeDefaulted' => 'defaulted', + 'missingDefaulted' => 'define', + ), + $prepared_attributes + ); + } + + /** + * @ticket 45097 + */ + public function test_has_block_with_mixed_content() { + $mixed_post_content = 'before' . + '' . + '' . + ' +

    testing the test

    + ' . + 'between' . + '' . + '' . + 'after'; + + $this->assertTrue( has_block( 'core/fake', $mixed_post_content ) ); + + $this->assertTrue( has_block( 'core/fake_atts', $mixed_post_content ) ); + + $this->assertTrue( has_block( 'core/fake-child', $mixed_post_content ) ); + + $this->assertTrue( has_block( 'core/self-close-fake', $mixed_post_content ) ); + + $this->assertTrue( has_block( 'custom/fake', $mixed_post_content ) ); + + // checking for a partial block name should fail. + $this->assertFalse( has_block( 'core/fak', $mixed_post_content ) ); + + // checking for a wrong namespace should fail. + $this->assertFalse( has_block( 'custom/fake_atts', $mixed_post_content ) ); + + // checking for namespace only should not work. Or maybe ... ? + $this->assertFalse( has_block( 'core', $mixed_post_content ) ); + } + + /** + * @ticket 45097 + */ + public function test_has_block_with_invalid_content() { + // some content with invalid HMTL comments and a single valid block. + $invalid_content = 'before' . + '' . + '' . + '' . + '' . + 'after'; + + $this->assertFalse( has_block( 'core/text', self::$post_without_blocks ) ); + + $this->assertFalse( has_block( 'core/weird-space', $invalid_content ) ); + + $this->assertFalse( has_block( 'core/untrimmed-left', $invalid_content ) ); + + $this->assertFalse( has_block( 'core/untrimmed-right', $invalid_content ) ); + + $this->assertTrue( has_block( 'core/fake', $invalid_content ) ); + } + + /** + * @ticket 45097 + */ + public function test_post_has_block() { + // should fail for a non-existent block `custom/fake`. + $this->assertFalse( has_block( 'custom/fake', self::$post_with_blocks ) ); + + // this functions should not work without the second param until the $post global is set. + $this->assertFalse( has_block( 'core/text' ) ); + $this->assertFalse( has_block( 'core/fake' ) ); + + global $post; + $post = get_post( self::$post_with_blocks ); + + // check if the function correctly detects content from the $post global. + $this->assertTrue( has_block( 'core/text' ) ); + // even if it detects a proper $post global it should still be false for a missing block. + $this->assertFalse( has_block( 'core/fake' ) ); + } + + /** + * Renders a test block without content. + * + * @since 5.0.0 + * + * @param array $attributes Block attributes. Default empty array. + * @return string JSON encoded list of attributes. + */ + public function render_fake_block( $attributes ) { + return json_encode( $attributes ); + } + + /** + * Renders a test block with content. + * + * @since 5.0.0 + * + * @param array $attributes Block attributes. Default empty array. + * @param string $content Block content. Default empty string. + * @return string JSON encoded list of attributes. + */ + public function render_fake_block_with_content( $attributes, $content ) { + $attributes['_content'] = $content; + + return json_encode( $attributes ); + } +} From 7ae9e6abdda1e5380290afe25de251406ee21754 Mon Sep 17 00:00:00 2001 From: Gary Pendergast Date: Thu, 18 Oct 2018 01:52:58 +0000 Subject: [PATCH 448/537] Blocks: Introduce `register_block_type()`, `unregister_block_type()`, and `get_dynamic_blocks()` functions. These helper functions allow easy access to the global block registry. See #45109. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43743 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/blocks.php | 53 +++++++ .../data/blocks/do-blocks-expected.html | 17 +++ .../data/blocks/do-blocks-original.html | 25 ++++ tests/phpunit/tests/blocks/register.php | 141 ++++++++++++++++++ 4 files changed, 236 insertions(+) create mode 100644 tests/phpunit/data/blocks/do-blocks-expected.html create mode 100644 tests/phpunit/data/blocks/do-blocks-original.html create mode 100644 tests/phpunit/tests/blocks/register.php diff --git a/src/wp-includes/blocks.php b/src/wp-includes/blocks.php index b04696d591a84..2ec3a07e3eeee 100644 --- a/src/wp-includes/blocks.php +++ b/src/wp-includes/blocks.php @@ -7,6 +7,39 @@ * @since 5.0.0 */ +/** + * Registers a block type. + * + * @since 5.0.0 + * + * @param string|WP_Block_Type $name Block type name including namespace, or alternatively a + * complete WP_Block_Type instance. In case a WP_Block_Type + * is provided, the $args parameter will be ignored. + * @param array $args { + * Optional. Array of block type arguments. Any arguments may be defined, however the + * ones described below are supported by default. Default empty array. + * + * @type callable $render_callback Callback used to render blocks of this block type. + * } + * @return WP_Block_Type|false The registered block type on success, or false on failure. + */ +function register_block_type( $name, $args = array() ) { + return WP_Block_Type_Registry::get_instance()->register( $name, $args ); +} + +/** + * Unregisters a block type. + * + * @since 5.0.0 + * + * @param string|WP_Block_Type $name Block type name including namespace, or alternatively a + * complete WP_Block_Type instance. + * @return WP_Block_Type|false The unregistered block type on success, or false on failure. + */ +function unregister_block_type( $name ) { + return WP_Block_Type_Registry::get_instance()->unregister( $name ); +} + /** * Determine whether a post or content string has blocks. * @@ -59,3 +92,23 @@ function has_block( $block_type, $post = null ) { return false !== strpos( $post, ' + +

    First Gutenberg Paragraph

    + +

    Second Auto Paragraph

    + + +

    Third Gutenberg Paragraph

    + +

    Third Auto Paragraph

    + +

    [someshortcode]

    +

    And some content?!

    +

    [/someshortcode]

    + diff --git a/tests/phpunit/data/blocks/do-blocks-original.html b/tests/phpunit/data/blocks/do-blocks-original.html new file mode 100644 index 0000000000000..bbd2eb4bb1457 --- /dev/null +++ b/tests/phpunit/data/blocks/do-blocks-original.html @@ -0,0 +1,25 @@ +

    First Auto Paragraph

    + + + + +

    First Gutenberg Paragraph

    + + +

    Second Auto Paragraph

    + + + + +

    Third Gutenberg Paragraph

    + + +

    Third Auto Paragraph

    + + +[someshortcode] + +And some content?! + +[/someshortcode] + diff --git a/tests/phpunit/tests/blocks/register.php b/tests/phpunit/tests/blocks/register.php new file mode 100644 index 0000000000000..8271c9babdf67 --- /dev/null +++ b/tests/phpunit/tests/blocks/register.php @@ -0,0 +1,141 @@ +post->create( + array( + 'post_content' => file_get_contents( DIR_TESTDATA . '/blocks/do-blocks-original.html' ), + ) + ); + } + + /** + * Tear down after class. + * + * @since 5.0.0 + */ + public static function wpTearDownAfterClass() { + // Also deletes revisions. + wp_delete_post( self::$post_id, true ); + } + + /** + * Empty render function for tests to use. + */ + function render_stub() {} + + /** + * Tear down after each test. + * + * @since 5.0.0 + */ + function tearDown() { + parent::tearDown(); + + $registry = WP_Block_Type_Registry::get_instance(); + + foreach ( array( 'test-static', 'test-dynamic' ) as $block_name ) { + $block_name = 'core/' . $block_name; + + if ( $registry->is_registered( $block_name ) ) { + $registry->unregister( $block_name ); + } + } + } + + /** + * @ticket 45109 + */ + function test_register_affects_main_registry() { + $name = 'core/test-static'; + $settings = array( + 'icon' => 'text', + ); + + register_block_type( $name, $settings ); + + $registry = WP_Block_Type_Registry::get_instance(); + $this->assertTrue( $registry->is_registered( $name ) ); + } + + /** + * @ticket 45109 + */ + function test_unregister_affects_main_registry() { + $name = 'core/test-static'; + $settings = array( + 'icon' => 'text', + ); + + register_block_type( $name, $settings ); + unregister_block_type( $name ); + + $registry = WP_Block_Type_Registry::get_instance(); + $this->assertFalse( $registry->is_registered( $name ) ); + } + + /** + * @ticket 45109 + */ + function test_get_dynamic_block_names() { + register_block_type( 'core/test-static', array() ); + register_block_type( 'core/test-dynamic', array( 'render_callback' => array( $this, 'render_stub' ) ) ); + + $dynamic_block_names = get_dynamic_block_names(); + + $this->assertContains( 'core/test-dynamic', $dynamic_block_names ); + $this->assertNotContains( 'core/test-static', $dynamic_block_names ); + } + + /** + * @ticket 45109 + */ + function test_has_blocks() { + // Test with passing post ID. + $this->assertTrue( has_blocks( self::$post_id ) ); + + // Test with passing WP_Post object. + $this->assertTrue( has_blocks( get_post( self::$post_id ) ) ); + + // Test with passing content string. + $this->assertTrue( has_blocks( get_post( self::$post_id ) ) ); + + // Test default. + $this->assertFalse( has_blocks() ); + $query = new WP_Query( array( 'post__in' => array( self::$post_id ) ) ); + $query->the_post(); + $this->assertTrue( has_blocks() ); + + // Test string (without blocks). + $content = file_get_contents( DIR_TESTDATA . '/blocks/do-blocks-expected.html' ); + $this->assertFalse( has_blocks( $content ) ); + } +} From f8be144d6f4864e6374f9d12aea6e32f81f8e3a8 Mon Sep 17 00:00:00 2001 From: Daniel Bachhuber Date: Thu, 18 Oct 2018 02:03:58 +0000 Subject: [PATCH 449/537] Posts, Post Types: Add labels for post transformation messages. Because the existing `post_updated_messages` filter can be modified dynamically based on post state, it's unreliable to use with REST API clients. Instead, these new labels give clients stateless equivalents. Props earnjam. Fixes #45101. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43744 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/post.php | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/wp-includes/post.php b/src/wp-includes/post.php index 10f2129c530c6..2afe28bb96368 100644 --- a/src/wp-includes/post.php +++ b/src/wp-includes/post.php @@ -1420,6 +1420,14 @@ function _post_type_meta_capabilities( $capabilities = null ) { * - `items_list_navigation` - Label for the table pagination hidden heading. Default is 'Posts list navigation' / * 'Pages list navigation'. * - `items_list` - Label for the table hidden heading. Default is 'Posts list' / 'Pages list'. + * - `item_published` - Label used when an item is published. Default is 'Post published.' / 'Page published.' + * - `item_published_privately` - Label used when an item is published with private visibility. + * Default is 'Post published privately.' / 'Page published privately.' + * - `item_reverted_to_draft` - Label used when an item is switched to a draft. + * Default is 'Post reverted to draft.' / 'Page reverted to draft.' + * - `item_scheduled` - Label used when an item is scheduled for publishing. Default is 'Post scheduled.' / + * 'Page scheduled.' + * - `item_updated` - Label used when an item is updated. Default is 'Post updated.' / 'Page updated.' * * Above, the first default value is for non-hierarchical post types (like posts) * and the second one is for hierarchical post types (like pages). @@ -1433,6 +1441,8 @@ function _post_type_meta_capabilities( $capabilities = null ) { * `items_list_navigation`, and `items_list` labels. * @since 4.6.0 Converted the `$post_type` parameter to accept a WP_Post_Type object. * @since 4.7.0 Added the `view_items` and `attributes` labels. + * @since 5.0.0 Added the `item_published`, `item_published_privately`, `item_reverted_to_draft`, + * `item_scheduled`, and `item_updated` labels. * * @access private * @@ -1465,6 +1475,11 @@ function get_post_type_labels( $post_type_object ) { 'filter_items_list' => array( __( 'Filter posts list' ), __( 'Filter pages list' ) ), 'items_list_navigation' => array( __( 'Posts list navigation' ), __( 'Pages list navigation' ) ), 'items_list' => array( __( 'Posts list' ), __( 'Pages list' ) ), + 'item_published' => array( __( 'Post published.' ), __( 'Page published.' ) ), + 'item_published_privately' => array( __( 'Post published privately.' ), __( 'Page published privately.' ) ), + 'item_reverted_to_draft' => array( __( 'Post reverted to draft.' ), __( 'Page reverted to draft.' ) ), + 'item_scheduled' => array( __( 'Post scheduled.' ), __( 'Page scheduled.' ) ), + 'item_updated' => array( __( 'Post updated.' ), __( 'Page updated.' ) ), ); $nohier_vs_hier_defaults['menu_name'] = $nohier_vs_hier_defaults['name']; From 6a57068b2938012f259ff1e866c8f905db03e971 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Thu, 18 Oct 2018 03:10:42 +0000 Subject: [PATCH 450/537] Media: Remove checkered background for icons in Attachment Details. Props BandonRandon. Merges [42642] to the 5.0 branch. Fixes #42535. See #41948. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43745 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/css/media.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/wp-admin/css/media.css b/src/wp-admin/css/media.css index 95e52acd82b5d..f84741bc1d035 100644 --- a/src/wp-admin/css/media.css +++ b/src/wp-admin/css/media.css @@ -751,6 +751,10 @@ border color while dragging a file over the uploader drop area */ background-size: 20px 20px; } +.edit-attachment-frame .attachment-media-view .details-image.icon { + background: none; +} + .edit-attachment-frame .attachment-media-view .attachment-actions { text-align: center; } From dcb3ac99b908c6243ef4694fed611302c58ab42b Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Thu, 18 Oct 2018 03:41:46 +0000 Subject: [PATCH 451/537] General: PHP 7.3 throws an `E_WARNING` when using continue to target a switch. Applying continue to a switch is equivalent to using break and quite possibly, a continue targeting a higher level control structure is actually intended. To target the higher level control structure, a numeric argument has to be passed to continue. This fixes two cases in WordPress Core where this is currently happening. See: https://github.com/php/php-src/pull/3364 See: https://wiki.php.net/rfc/continue_on_switch_deprecation Props jrf. Merges [43653] to the 5.0 branch. Fixes #44543. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43746 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/pomo/plural-forms.php | 2 +- tests/phpunit/includes/utils.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/wp-includes/pomo/plural-forms.php b/src/wp-includes/pomo/plural-forms.php index a41c659598310..aa6fd902efaeb 100644 --- a/src/wp-includes/pomo/plural-forms.php +++ b/src/wp-includes/pomo/plural-forms.php @@ -207,7 +207,7 @@ protected function parse( $str ) { $span = strspn( $str, self::NUM_CHARS, $pos ); $output[] = array( 'value', intval( substr( $str, $pos, $span ) ) ); $pos += $span; - continue; + break; } throw new Exception( sprintf( 'Unknown symbol "%s"', $next ) ); diff --git a/tests/phpunit/includes/utils.php b/tests/phpunit/includes/utils.php index 396edaebb37eb..247faed7073f2 100644 --- a/tests/phpunit/includes/utils.php +++ b/tests/phpunit/includes/utils.php @@ -440,7 +440,7 @@ function benchmark_pcre_backtracking( $pattern, $subject, $strategy ) { case PREG_NO_ERROR: return $i; case PREG_BACKTRACK_LIMIT_ERROR: - continue; + break; case PREG_RECURSION_LIMIT_ERROR: trigger_error('PCRE recursion limit encountered before backtrack limit.'); return; From 27d8e6f47097119bed1ba9ecb2ab80f21008dfb1 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Thu, 18 Oct 2018 04:08:08 +0000 Subject: [PATCH 452/537] Build/Test Tools: Remove `vendor` file name entry from `.gitignore.` Props netweb. Merges [42733] to the 5.0 branch. Fixes #43411. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43747 602fd350-edb4-49c9-b593-d223f7449a82 --- .gitignore | 2 -- 1 file changed, 2 deletions(-) diff --git a/.gitignore b/.gitignore index b6252d227cf2b..d4d7745ce445f 100644 --- a/.gitignore +++ b/.gitignore @@ -57,5 +57,3 @@ wp-tests-config.php *.patch *.diff .svn - -vendor From 280d7907db0334cd38ed5465ca6c822e21d2cd31 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Thu, 18 Oct 2018 04:12:09 +0000 Subject: [PATCH 453/537] Build/Test Tools: Instruct Git and Subversion to ignore Composer's `vendor` directory. Props netweb. Merges [42405] to the 5.0 branch. Fixes #42909. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43748 602fd350-edb4-49c9-b593-d223f7449a82 --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index d4d7745ce445f..785ce9dd23477 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,7 @@ wp-tests-config.php /tests/phpunit/build /wp-cli.local.yml /jsdoc +/vendor # Files and folders that get created in wp-content /src/wp-content/blogs.dir From f74570d1393a013b7250fba3c1f86944cca8fccf Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Thu, 18 Oct 2018 04:13:36 +0000 Subject: [PATCH 454/537] Media: In `wp_read_image_metadata()`, rename `$sourceImageType` variable to `$image_type` to match coding standards. Merges [42878] to the 5.0 branch. See #43624. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43749 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/image.php | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/wp-admin/includes/image.php b/src/wp-admin/includes/image.php index 596aa7961eb5c..c5a74487e6330 100644 --- a/src/wp-admin/includes/image.php +++ b/src/wp-admin/includes/image.php @@ -343,7 +343,7 @@ function wp_read_image_metadata( $file ) { if ( ! file_exists( $file ) ) return false; - list( , , $sourceImageType ) = @getimagesize( $file ); + list( , , $image_type ) = @getimagesize( $file ); /* * EXIF contains a bunch of data we'll probably never need formatted in ways @@ -427,7 +427,9 @@ function wp_read_image_metadata( $file ) { * * @param array $image_types Image types to check for exif data. */ - if ( is_callable( 'exif_read_data' ) && in_array( $sourceImageType, apply_filters( 'wp_read_image_metadata_types', array( IMAGETYPE_JPEG, IMAGETYPE_TIFF_II, IMAGETYPE_TIFF_MM ) ) ) ) { + $exif_image_types = apply_filters( 'wp_read_image_metadata_types', array( IMAGETYPE_JPEG, IMAGETYPE_TIFF_II, IMAGETYPE_TIFF_MM ) ); + + if ( is_callable( 'exif_read_data' ) && in_array( $image_type, $exif_image_types ) ) { $exif = @exif_read_data( $file ); if ( ! empty( $exif['ImageDescription'] ) ) { @@ -506,12 +508,12 @@ function wp_read_image_metadata( $file ) { * @since 2.5.0 * @since 4.4.0 The `$iptc` parameter was added. * - * @param array $meta Image meta data. - * @param string $file Path to image file. - * @param int $sourceImageType Type of image. - * @param array $iptc IPTC data. + * @param array $meta Image meta data. + * @param string $file Path to image file. + * @param int $image_type Type of image, one of the `IMAGETYPE_XXX` constants. + * @param array $iptc IPTC data. */ - return apply_filters( 'wp_read_image_metadata', $meta, $file, $sourceImageType, $iptc ); + return apply_filters( 'wp_read_image_metadata', $meta, $file, $image_type, $iptc ); } From 56b7476d7a78c789db0c37aaf3e4287b008f0698 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Thu, 18 Oct 2018 04:14:41 +0000 Subject: [PATCH 455/537] Media: Pass EXIF data to the `wp_read_image_metadata` filter. Props desrosj. Merges [42879] to the 5.0 branch. Fixes #43624. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43750 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/image.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/wp-admin/includes/image.php b/src/wp-admin/includes/image.php index c5a74487e6330..d33f7539f9d60 100644 --- a/src/wp-admin/includes/image.php +++ b/src/wp-admin/includes/image.php @@ -420,6 +420,8 @@ function wp_read_image_metadata( $file ) { } } + $exif = array(); + /** * Filters the image types to check for exif data. * @@ -507,13 +509,15 @@ function wp_read_image_metadata( $file ) { * * @since 2.5.0 * @since 4.4.0 The `$iptc` parameter was added. + * @since 5.0.0 The `$exif` parameter was added. * * @param array $meta Image meta data. * @param string $file Path to image file. * @param int $image_type Type of image, one of the `IMAGETYPE_XXX` constants. * @param array $iptc IPTC data. + * @param array $exif EXIF data. */ - return apply_filters( 'wp_read_image_metadata', $meta, $file, $image_type, $iptc ); + return apply_filters( 'wp_read_image_metadata', $meta, $file, $image_type, $iptc, $exif ); } From 570fc2a5b049dbd7ab759fcee263143118c0d923 Mon Sep 17 00:00:00 2001 From: Gary Pendergast Date: Thu, 18 Oct 2018 04:39:40 +0000 Subject: [PATCH 456/537] Blocks: Introduce the block parser. The `WP_Block_Parser` class, and the accompanying `parse_blocks()` helper function, can be used to parse an array of blocks out of a content string. `WP_Block_Parser` is copied from the `@wordpress/block-serialization-default-parser` package. To ensure it stays in sync with the JavaScript parser, changes should be implemented in the package first, then the package version should be upgraded to include the changes. See #45109. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43751 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/blocks.php | 37 ++ src/wp-includes/class-wp-block-parser.php | 473 ++++++++++++++++++ src/wp-settings.php | 1 + .../core__4-invalid-starting-letter.html | 1 + .../core__4-invalid-starting-letter.json | 12 + ...ore__4-invalid-starting-letter.parsed.json | 8 + ..._4-invalid-starting-letter.serialized.html | 1 + .../data/blocks/fixtures/core__archives.html | 1 + .../data/blocks/fixtures/core__archives.json | 13 + .../fixtures/core__archives.parsed.json | 11 + .../fixtures/core__archives.serialized.html | 1 + .../core__archives__showPostCounts.html | 1 + .../core__archives__showPostCounts.json | 13 + ...core__archives__showPostCounts.parsed.json | 11 + ...__archives__showPostCounts.serialized.html | 1 + .../data/blocks/fixtures/core__audio.html | 5 + .../data/blocks/fixtures/core__audio.json | 16 + .../blocks/fixtures/core__audio.parsed.json | 16 + .../fixtures/core__audio.serialized.html | 3 + .../data/blocks/fixtures/core__block.html | 1 + .../data/blocks/fixtures/core__block.json | 12 + .../blocks/fixtures/core__block.parsed.json | 16 + .../fixtures/core__block.serialized.html | 1 + .../blocks/fixtures/core__button__center.html | 3 + .../blocks/fixtures/core__button__center.json | 14 + .../fixtures/core__button__center.parsed.json | 16 + .../core__button__center.serialized.html | 3 + .../blocks/fixtures/core__categories.html | 1 + .../blocks/fixtures/core__categories.json | 14 + .../fixtures/core__categories.parsed.json | 18 + .../fixtures/core__categories.serialized.html | 1 + .../data/blocks/fixtures/core__code.html | 5 + .../data/blocks/fixtures/core__code.json | 12 + .../blocks/fixtures/core__code.parsed.json | 14 + .../fixtures/core__code.serialized.html | 5 + .../data/blocks/fixtures/core__column.html | 10 + .../data/blocks/fixtures/core__column.json | 33 ++ .../blocks/fixtures/core__column.parsed.json | 27 + .../fixtures/core__column.serialized.html | 9 + .../data/blocks/fixtures/core__columns.html | 24 + .../data/blocks/fixtures/core__columns.json | 75 +++ .../blocks/fixtures/core__columns.parsed.json | 55 ++ .../fixtures/core__columns.serialized.html | 21 + .../blocks/fixtures/core__cover-image.html | 5 + .../blocks/fixtures/core__cover-image.json | 16 + .../fixtures/core__cover-image.parsed.json | 17 + .../core__cover-image.serialized.html | 3 + .../data/blocks/fixtures/core__embed.html | 8 + .../data/blocks/fixtures/core__embed.json | 14 + .../blocks/fixtures/core__embed.parsed.json | 16 + .../fixtures/core__embed.serialized.html | 5 + .../fixtures/core__file__new-window.html | 3 + .../fixtures/core__file__new-window.json | 18 + .../core__file__new-window.parsed.json | 18 + .../core__file__new-window.serialized.html | 3 + .../core__file__no-download-button.html | 3 + .../core__file__no-download-button.json | 17 + ...core__file__no-download-button.parsed.json | 18 + ...__file__no-download-button.serialized.html | 3 + .../fixtures/core__file__no-text-link.html | 3 + .../fixtures/core__file__no-text-link.json | 16 + .../core__file__no-text-link.parsed.json | 18 + .../core__file__no-text-link.serialized.html | 3 + .../data/blocks/fixtures/core__freeform.html | 6 + .../data/blocks/fixtures/core__freeform.json | 12 + .../fixtures/core__freeform.parsed.json | 14 + .../fixtures/core__freeform.serialized.html | 4 + .../fixtures/core__freeform__undelimited.html | 4 + .../fixtures/core__freeform__undelimited.json | 12 + .../core__freeform__undelimited.parsed.json | 8 + ...ore__freeform__undelimited.serialized.html | 4 + .../data/blocks/fixtures/core__gallery.html | 14 + .../data/blocks/fixtures/core__gallery.json | 25 + .../blocks/fixtures/core__gallery.parsed.json | 14 + .../fixtures/core__gallery.serialized.html | 3 + .../fixtures/core__gallery__columns.html | 14 + .../fixtures/core__gallery__columns.json | 26 + .../core__gallery__columns.parsed.json | 16 + .../core__gallery__columns.serialized.html | 3 + .../blocks/fixtures/core__heading__h2-em.html | 3 + .../blocks/fixtures/core__heading__h2-em.json | 13 + .../fixtures/core__heading__h2-em.parsed.json | 14 + .../core__heading__h2-em.serialized.html | 3 + .../blocks/fixtures/core__heading__h2.html | 3 + .../blocks/fixtures/core__heading__h2.json | 13 + .../fixtures/core__heading__h2.parsed.json | 14 + .../core__heading__h2.serialized.html | 3 + .../data/blocks/fixtures/core__html.html | 4 + .../data/blocks/fixtures/core__html.json | 12 + .../blocks/fixtures/core__html.parsed.json | 14 + .../fixtures/core__html.serialized.html | 4 + .../data/blocks/fixtures/core__image.html | 3 + .../data/blocks/fixtures/core__image.json | 15 + .../blocks/fixtures/core__image.parsed.json | 14 + .../fixtures/core__image.serialized.html | 3 + .../core__image__attachment-link.html | 3 + .../core__image__attachment-link.json | 16 + .../core__image__attachment-link.parsed.json | 16 + ...re__image__attachment-link.serialized.html | 3 + .../fixtures/core__image__center-caption.html | 3 + .../fixtures/core__image__center-caption.json | 16 + .../core__image__center-caption.parsed.json | 16 + ...ore__image__center-caption.serialized.html | 3 + .../fixtures/core__image__custom-link.html | 3 + .../fixtures/core__image__custom-link.json | 16 + .../core__image__custom-link.parsed.json | 16 + .../core__image__custom-link.serialized.html | 3 + .../fixtures/core__image__media-link.html | 3 + .../fixtures/core__image__media-link.json | 16 + .../core__image__media-link.parsed.json | 16 + .../core__image__media-link.serialized.html | 3 + .../fixtures/core__invalid-Capitals.html | 1 + .../fixtures/core__invalid-Capitals.json | 12 + .../core__invalid-Capitals.parsed.json | 8 + .../core__invalid-Capitals.serialized.html | 1 + .../fixtures/core__invalid-special.html | 1 + .../fixtures/core__invalid-special.json | 12 + .../core__invalid-special.parsed.json | 8 + .../core__invalid-special.serialized.html | 1 + .../fixtures/core__latest-comments.html | 1 + .../fixtures/core__latest-comments.json | 15 + .../core__latest-comments.parsed.json | 18 + .../core__latest-comments.serialized.html | 1 + .../blocks/fixtures/core__latest-posts.html | 1 + .../blocks/fixtures/core__latest-posts.json | 17 + .../fixtures/core__latest-posts.parsed.json | 17 + .../core__latest-posts.serialized.html | 1 + .../core__latest-posts__displayPostDate.html | 1 + .../core__latest-posts__displayPostDate.json | 17 + ..._latest-posts__displayPostDate.parsed.json | 17 + ...est-posts__displayPostDate.serialized.html | 1 + .../data/blocks/fixtures/core__list__ul.html | 3 + .../data/blocks/fixtures/core__list__ul.json | 13 + .../fixtures/core__list__ul.parsed.json | 14 + .../fixtures/core__list__ul.serialized.html | 3 + .../data/blocks/fixtures/core__missing.html | 6 + .../data/blocks/fixtures/core__missing.json | 14 + .../blocks/fixtures/core__missing.parsed.json | 17 + .../fixtures/core__missing.serialized.html | 6 + .../data/blocks/fixtures/core__more.html | 3 + .../data/blocks/fixtures/core__more.json | 12 + .../blocks/fixtures/core__more.parsed.json | 14 + .../fixtures/core__more.serialized.html | 3 + .../core__more__custom-text-teaser.html | 4 + .../core__more__custom-text-teaser.json | 13 + ...core__more__custom-text-teaser.parsed.json | 17 + ...__more__custom-text-teaser.serialized.html | 4 + .../data/blocks/fixtures/core__nextpage.html | 3 + .../data/blocks/fixtures/core__nextpage.json | 10 + .../fixtures/core__nextpage.parsed.json | 14 + .../fixtures/core__nextpage.serialized.html | 3 + .../core__paragraph__align-right.html | 3 + .../core__paragraph__align-right.json | 14 + .../core__paragraph__align-right.parsed.json | 16 + ...re__paragraph__align-right.serialized.html | 3 + .../fixtures/core__paragraph__deprecated.html | 3 + .../fixtures/core__paragraph__deprecated.json | 13 + .../core__paragraph__deprecated.parsed.json | 14 + ...ore__paragraph__deprecated.serialized.html | 3 + .../blocks/fixtures/core__preformatted.html | 3 + .../blocks/fixtures/core__preformatted.json | 12 + .../fixtures/core__preformatted.parsed.json | 14 + .../core__preformatted.serialized.html | 3 + .../data/blocks/fixtures/core__pullquote.html | 7 + .../data/blocks/fixtures/core__pullquote.json | 13 + .../fixtures/core__pullquote.parsed.json | 14 + .../fixtures/core__pullquote.serialized.html | 3 + .../core__pullquote__multi-paragraph.html | 9 + .../core__pullquote__multi-paragraph.json | 13 + ...re__pullquote__multi-paragraph.parsed.json | 14 + ...pullquote__multi-paragraph.serialized.html | 3 + .../blocks/fixtures/core__quote__style-1.html | 3 + .../blocks/fixtures/core__quote__style-1.json | 13 + .../fixtures/core__quote__style-1.parsed.json | 14 + .../core__quote__style-1.serialized.html | 3 + .../blocks/fixtures/core__quote__style-2.html | 3 + .../blocks/fixtures/core__quote__style-2.json | 14 + .../fixtures/core__quote__style-2.parsed.json | 16 + .../core__quote__style-2.serialized.html | 3 + .../data/blocks/fixtures/core__separator.html | 3 + .../data/blocks/fixtures/core__separator.json | 10 + .../fixtures/core__separator.parsed.json | 14 + .../fixtures/core__separator.serialized.html | 3 + .../data/blocks/fixtures/core__shortcode.html | 3 + .../data/blocks/fixtures/core__shortcode.json | 12 + .../fixtures/core__shortcode.parsed.json | 14 + .../fixtures/core__shortcode.serialized.html | 3 + .../data/blocks/fixtures/core__spacer.html | 3 + .../data/blocks/fixtures/core__spacer.json | 12 + .../blocks/fixtures/core__spacer.parsed.json | 14 + .../fixtures/core__spacer.serialized.html | 3 + .../data/blocks/fixtures/core__subhead.html | 3 + .../data/blocks/fixtures/core__subhead.json | 12 + .../blocks/fixtures/core__subhead.parsed.json | 14 + .../fixtures/core__subhead.serialized.html | 3 + .../data/blocks/fixtures/core__table.html | 3 + .../data/blocks/fixtures/core__table.json | 145 ++++++ .../blocks/fixtures/core__table.parsed.json | 14 + .../fixtures/core__table.serialized.html | 3 + .../blocks/fixtures/core__text-columns.html | 10 + .../blocks/fixtures/core__text-columns.json | 21 + .../fixtures/core__text-columns.parsed.json | 16 + .../core__text-columns.serialized.html | 3 + .../core__text__converts-to-paragraph.html | 3 + .../core__text__converts-to-paragraph.json | 13 + ...e__text__converts-to-paragraph.parsed.json | 14 + ...ext__converts-to-paragraph.serialized.html | 3 + .../data/blocks/fixtures/core__verse.html | 3 + .../data/blocks/fixtures/core__verse.json | 12 + .../blocks/fixtures/core__verse.parsed.json | 14 + .../fixtures/core__verse.serialized.html | 3 + .../data/blocks/fixtures/core__video.html | 3 + .../data/blocks/fixtures/core__video.json | 18 + .../blocks/fixtures/core__video.parsed.json | 14 + .../fixtures/core__video.serialized.html | 3 + tests/phpunit/tests/blocks/block-parser.php | 120 +++++ tools/webpack/packages.js | 10 + 217 files changed, 2835 insertions(+) create mode 100644 src/wp-includes/class-wp-block-parser.php create mode 100644 tests/phpunit/data/blocks/fixtures/core__4-invalid-starting-letter.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__4-invalid-starting-letter.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__4-invalid-starting-letter.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__4-invalid-starting-letter.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__archives.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__archives.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__archives.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__archives.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__archives__showPostCounts.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__archives__showPostCounts.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__archives__showPostCounts.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__archives__showPostCounts.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__audio.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__audio.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__audio.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__audio.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__block.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__block.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__block.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__block.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__button__center.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__button__center.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__button__center.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__button__center.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__categories.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__categories.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__categories.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__categories.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__code.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__code.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__code.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__code.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__column.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__column.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__column.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__column.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__columns.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__columns.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__columns.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__columns.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__cover-image.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__cover-image.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__cover-image.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__cover-image.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__embed.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__embed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__embed.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__embed.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__file__new-window.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__file__new-window.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__file__new-window.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__file__new-window.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__file__no-download-button.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__file__no-download-button.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__file__no-download-button.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__file__no-download-button.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__file__no-text-link.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__file__no-text-link.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__file__no-text-link.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__file__no-text-link.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__freeform.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__freeform.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__freeform.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__freeform.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__freeform__undelimited.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__freeform__undelimited.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__freeform__undelimited.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__freeform__undelimited.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__gallery.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__gallery.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__gallery.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__gallery.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__gallery__columns.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__gallery__columns.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__gallery__columns.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__gallery__columns.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__heading__h2-em.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__heading__h2-em.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__heading__h2-em.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__heading__h2-em.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__heading__h2.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__heading__h2.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__heading__h2.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__heading__h2.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__html.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__html.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__html.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__html.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__image.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__image.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__image.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__image.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__image__attachment-link.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__image__attachment-link.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__image__attachment-link.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__image__attachment-link.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__image__center-caption.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__image__center-caption.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__image__center-caption.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__image__center-caption.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__image__custom-link.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__image__custom-link.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__image__custom-link.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__image__custom-link.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__image__media-link.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__image__media-link.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__image__media-link.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__image__media-link.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__invalid-Capitals.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__invalid-Capitals.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__invalid-Capitals.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__invalid-Capitals.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__invalid-special.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__invalid-special.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__invalid-special.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__invalid-special.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__latest-comments.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__latest-comments.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__latest-comments.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__latest-comments.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__latest-posts.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__latest-posts.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__latest-posts.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__latest-posts.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__latest-posts__displayPostDate.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__latest-posts__displayPostDate.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__latest-posts__displayPostDate.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__latest-posts__displayPostDate.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__list__ul.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__list__ul.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__list__ul.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__list__ul.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__missing.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__missing.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__missing.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__missing.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__more.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__more.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__more.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__more.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__more__custom-text-teaser.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__more__custom-text-teaser.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__more__custom-text-teaser.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__more__custom-text-teaser.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__nextpage.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__nextpage.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__nextpage.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__nextpage.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__paragraph__align-right.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__paragraph__align-right.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__paragraph__align-right.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__paragraph__align-right.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__paragraph__deprecated.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__paragraph__deprecated.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__paragraph__deprecated.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__paragraph__deprecated.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__preformatted.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__preformatted.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__preformatted.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__preformatted.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__pullquote.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__pullquote.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__pullquote.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__pullquote.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__pullquote__multi-paragraph.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__pullquote__multi-paragraph.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__pullquote__multi-paragraph.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__pullquote__multi-paragraph.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__quote__style-1.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__quote__style-1.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__quote__style-1.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__quote__style-1.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__quote__style-2.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__quote__style-2.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__quote__style-2.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__quote__style-2.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__separator.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__separator.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__separator.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__separator.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__shortcode.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__shortcode.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__shortcode.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__shortcode.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__spacer.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__spacer.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__spacer.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__spacer.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__subhead.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__subhead.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__subhead.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__subhead.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__table.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__table.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__table.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__table.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__text-columns.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__text-columns.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__text-columns.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__text-columns.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__text__converts-to-paragraph.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__text__converts-to-paragraph.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__text__converts-to-paragraph.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__text__converts-to-paragraph.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__verse.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__verse.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__verse.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__verse.serialized.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__video.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__video.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__video.parsed.json create mode 100644 tests/phpunit/data/blocks/fixtures/core__video.serialized.html create mode 100644 tests/phpunit/tests/blocks/block-parser.php diff --git a/src/wp-includes/blocks.php b/src/wp-includes/blocks.php index 2ec3a07e3eeee..98d8f10d5c847 100644 --- a/src/wp-includes/blocks.php +++ b/src/wp-includes/blocks.php @@ -112,3 +112,40 @@ function get_dynamic_block_names() { return $dynamic_block_names; } + +/** + * Parses blocks out of a content string. + * + * @since 5.0.0 + * + * @param string $content Post content. + * @return array Array of parsed block objects. + */ +function parse_blocks( $content ) { + /* + * If there are no blocks in the content, return a single block, rather + * than wasting time trying to parse the string. + */ + if ( ! has_blocks( $content ) ) { + return array( + array( + 'blockName' => null, + 'attrs' => array(), + 'innerBlocks' => array(), + 'innerHTML' => $content, + ), + ); + } + + /** + * Filter to allow plugins to replace the server-side block parser + * + * @since 5.0.0 + * + * @param string $parser_class Name of block parser class + */ + $parser_class = apply_filters( 'block_parser_class', 'WP_Block_Parser' ); + + $parser = new $parser_class(); + return $parser->parse( $content ); +} diff --git a/src/wp-includes/class-wp-block-parser.php b/src/wp-includes/class-wp-block-parser.php new file mode 100644 index 0000000000000..78b6921787cc4 --- /dev/null +++ b/src/wp-includes/class-wp-block-parser.php @@ -0,0 +1,473 @@ + 3 ) + * + * @since 3.8.0 + * @var array|null + */ + public $attrs; + + /** + * List of inner blocks (of this same class) + * + * @since 3.8.0 + * @var WP_Block_Parser_Block[] + */ + public $innerBlocks; + + /** + * Resultant HTML from inside block comment delimiters + * after removing inner blocks + * + * @example "...Just testing..." -> "Just testing..." + * + * @since 3.8.0 + * @var string + */ + public $innerHTML; + + function __construct( $name, $attrs, $innerBlocks, $innerHTML ) { + $this->blockName = $name; + $this->attrs = $attrs; + $this->innerBlocks = $innerBlocks; + $this->innerHTML = $innerHTML; + } +} + +/** + * Class WP_Block_Parser_Frame + * + * Holds partial blocks in memory while parsing + * + * @internal + * @since 3.8.0 + */ +class WP_Block_Parser_Frame { + /** + * Full or partial block + * + * @since 3.8.0 + * @var WP_Block_Parser_Block + */ + public $block; + + /** + * Byte offset into document for start of parse token + * + * @since 3.8.0 + * @var int + */ + public $token_start; + + /** + * Byte length of entire parse token string + * + * @since 3.8.0 + * @var int + */ + public $token_length; + + /** + * Byte offset into document for after parse token ends + * (used during reconstruction of stack into parse production) + * + * @since 3.8.0 + * @var int + */ + public $prev_offset; + + /** + * Byte offset into document where leading HTML before token starts + * + * @since 3.8.0 + * @var int + */ + public $leading_html_start; + + function __construct( $block, $token_start, $token_length, $prev_offset = null, $leading_html_start = null ) { + $this->block = $block; + $this->token_start = $token_start; + $this->token_length = $token_length; + $this->prev_offset = isset( $prev_offset ) ? $prev_offset : $token_start + $token_length; + $this->leading_html_start = $leading_html_start; + } +} + +/** + * Class WP_Block_Parser + * + * Parses a document and constructs a list of parsed block objects + * + * @since 3.8.0 + * @since 4.0.0 returns arrays not objects, all attributes are arrays + */ +class WP_Block_Parser { + /** + * Input document being parsed + * + * @example "Pre-text\nThis is inside a block!" + * + * @since 3.8.0 + * @var string + */ + public $document; + + /** + * Tracks parsing progress through document + * + * @since 3.8.0 + * @var int + */ + public $offset; + + /** + * List of parsed blocks + * + * @since 3.8.0 + * @var WP_Block_Parser_Block[] + */ + public $output; + + /** + * Stack of partially-parsed structures in memory during parse + * + * @since 3.8.0 + * @var WP_Block_Parser_Frame[] + */ + public $stack; + + /** + * Parses a document and returns a list of block structures + * + * When encountering an invalid parse will return a best-effort + * parse. In contrast to the specification parser this does not + * return an error on invalid inputs. + * + * @since 3.8.0 + * + * @param string $document + * @return WP_Block_Parser_Block[] + */ + function parse( $document ) { + $this->document = $document; + $this->offset = 0; + $this->output = array(); + $this->stack = array(); + + do { + // twiddle our thumbs + } while ( $this->proceed() ); + + return $this->output; + } + + /** + * Processes the next token from the input document + * and returns whether to proceed eating more tokens + * + * This is the "next step" function that essentially + * takes a token as its input and decides what to do + * with that token before descending deeper into a + * nested block tree or continuing along the document + * or breaking out of a level of nesting. + * + * @internal + * @since 3.8.0 + * @return bool + */ + function proceed() { + $next_token = $this->next_token(); + list( $token_type, $block_name, $attrs, $start_offset, $token_length ) = $next_token; + $stack_depth = count( $this->stack ); + + // we may have some HTML soup before the next block + $leading_html_start = $start_offset > $this->offset ? $this->offset : null; + + switch ( $token_type ) { + case 'no-more-tokens': + // if not in a block then flush output + if ( 0 === $stack_depth ) { + $this->add_freeform(); + return false; + } + + /* + * Otherwise we have a problem + * This is an error + * + * we have options + * - treat it all as freeform text + * - assume an implicit closer (easiest when not nesting) + */ + + // for the easy case we'll assume an implicit closer + if ( 1 === $stack_depth ) { + $this->add_block_from_stack(); + return false; + } + + /* + * for the nested case where it's more difficult we'll + * have to assume that multiple closers are missing + * and so we'll collapse the whole stack piecewise + */ + while ( 0 < count( $this->stack ) ) { + $this->add_block_from_stack(); + } + return false; + + case 'void-block': + /* + * easy case is if we stumbled upon a void block + * in the top-level of the document + */ + if ( 0 === $stack_depth ) { + if ( isset( $leading_html_start ) ) { + $this->output[] = (array) self::freeform( substr( + $this->document, + $leading_html_start, + $start_offset - $leading_html_start + ) ); + } + + $this->output[] = (array) new WP_Block_Parser_Block( $block_name, $attrs, array(), '' ); + $this->offset = $start_offset + $token_length; + return true; + } + + // otherwise we found an inner block + $this->add_inner_block( + new WP_Block_Parser_Block( $block_name, $attrs, array(), '' ), + $start_offset, + $token_length + ); + $this->offset = $start_offset + $token_length; + return true; + + case 'block-opener': + // track all newly-opened blocks on the stack + array_push( $this->stack, new WP_Block_Parser_Frame( + new WP_Block_Parser_Block( $block_name, $attrs, array(), '' ), + $start_offset, + $token_length, + $start_offset + $token_length, + $leading_html_start + ) ); + $this->offset = $start_offset + $token_length; + return true; + + case 'block-closer': + /* + * if we're missing an opener we're in trouble + * This is an error + */ + if ( 0 === $stack_depth ) { + /* + * we have options + * - assume an implicit opener + * - assume _this_ is the opener + * - give up and close out the document + */ + $this->add_freeform(); + return false; + } + + // if we're not nesting then this is easy - close the block + if ( 1 === $stack_depth ) { + $this->add_block_from_stack( $start_offset ); + $this->offset = $start_offset + $token_length; + return true; + } + + /* + * otherwise we're nested and we have to close out the current + * block and add it as a new innerBlock to the parent + */ + $stack_top = array_pop( $this->stack ); + $stack_top->block->innerHTML .= substr( $this->document, $stack_top->prev_offset, $start_offset - $stack_top->prev_offset ); + $stack_top->prev_offset = $start_offset + $token_length; + + $this->add_inner_block( + $stack_top->block, + $stack_top->token_start, + $stack_top->token_length, + $start_offset + $token_length + ); + $this->offset = $start_offset + $token_length; + return true; + + default: + // This is an error + $this->add_freeform(); + return false; + } + } + + /** + * Scans the document from where we last left off + * and finds the next valid token to parse if it exists + * + * Returns the type of the find: kind of find, block information, attributes + * + * @internal + * @since 3.8.0 + * @return array + */ + function next_token() { + $matches = null; + + /* + * aye the magic + * we're using a single RegExp to tokenize the block comment delimiters + * we're also using a trick here because the only difference between a + * block opener and a block closer is the leading `/` before `wp:` (and + * a closer has no attributes). we can trap them both and process the + * match back in PHP to see which one it was. + */ + $has_match = preg_match( + '/).)+?}\s+)?(?\/)?-->/s', + $this->document, + $matches, + PREG_OFFSET_CAPTURE, + $this->offset + ); + + // we have no more tokens + if ( 0 === $has_match ) { + return array( 'no-more-tokens', null, null, null, null ); + } + + list( $match, $started_at ) = $matches[ 0 ]; + + $length = strlen( $match ); + $is_closer = isset( $matches[ 'closer' ] ) && -1 !== $matches[ 'closer' ][ 1 ]; + $is_void = isset( $matches[ 'void' ] ) && -1 !== $matches[ 'void' ][ 1 ]; + $namespace = $matches[ 'namespace' ]; + $namespace = ( isset( $namespace ) && -1 !== $namespace[ 1 ] ) ? $namespace[ 0 ] : 'core/'; + $name = $namespace . $matches[ 'name' ][ 0 ]; + $has_attrs = isset( $matches[ 'attrs' ] ) && -1 !== $matches[ 'attrs' ][ 1 ]; + + /* + * Fun fact! It's not trivial in PHP to create "an empty associative array" since all arrays + * are associative arrays. If we use `array()` we get a JSON `[]` + */ + $attrs = $has_attrs + ? json_decode( $matches[ 'attrs' ][ 0 ], /* as-associative */ true ) + : json_decode( '{}', /* don't ask why, just verify in PHP */ false ); + + /* + * This state isn't allowed + * This is an error + */ + if ( $is_closer && ( $is_void || $has_attrs ) ) { + // we can ignore them since they don't hurt anything + } + + if ( $is_void ) { + return array( 'void-block', $name, $attrs, $started_at, $length ); + } + + if ( $is_closer ) { + return array( 'block-closer', $name, null, $started_at, $length ); + } + + return array( 'block-opener', $name, $attrs, $started_at, $length ); + } + + /** + * Returns a new block object for freeform HTML + * + * @internal + * @since 3.9.0 + * + * @param string $innerHTML HTML content of block + * @return WP_Block_Parser_Block freeform block object + */ + static function freeform( $innerHTML ) { + return new WP_Block_Parser_Block( null, array(), array(), $innerHTML ); + } + + /** + * Pushes a length of text from the input document + * to the output list as a freeform block + * + * @internal + * @since 3.8.0 + * @param null $length how many bytes of document text to output + */ + function add_freeform( $length = null ) { + $length = $length ? $length : strlen( $this->document ) - $this->offset; + + if ( 0 === $length ) { + return; + } + + $this->output[] = (array) self::freeform( substr( $this->document, $this->offset, $length ) ); + } + + /** + * Given a block structure from memory pushes + * a new block to the output list + * + * @internal + * @since 3.8.0 + * @param WP_Block_Parser_Block $block the block to add to the output + * @param int $token_start byte offset into the document where the first token for the block starts + * @param int $token_length byte length of entire block from start of opening token to end of closing token + * @param int|null $last_offset last byte offset into document if continuing form earlier output + */ + function add_inner_block( WP_Block_Parser_Block $block, $token_start, $token_length, $last_offset = null ) { + $parent = $this->stack[ count( $this->stack ) - 1 ]; + $parent->block->innerBlocks[] = $block; + $parent->block->innerHTML .= substr( $this->document, $parent->prev_offset, $token_start - $parent->prev_offset ); + $parent->prev_offset = $last_offset ? $last_offset : $token_start + $token_length; + } + + /** + * Pushes the top block from the parsing stack to the output list + * + * @internal + * @since 3.8.0 + * @param int|null $end_offset byte offset into document for where we should stop sending text output as HTML + */ + function add_block_from_stack( $end_offset = null ) { + $stack_top = array_pop( $this->stack ); + $prev_offset = $stack_top->prev_offset; + + $stack_top->block->innerHTML .= isset( $end_offset ) + ? substr( $this->document, $prev_offset, $end_offset - $prev_offset ) + : substr( $this->document, $prev_offset ); + + if ( isset( $stack_top->leading_html_start ) ) { + $this->output[] = (array) self::freeform( substr( + $this->document, + $stack_top->leading_html_start, + $stack_top->token_start - $stack_top->leading_html_start + ) ); + } + + $this->output[] = (array) $stack_top->block; + } +} diff --git a/src/wp-settings.php b/src/wp-settings.php index a09e50ffe9666..81cc3ccb4fcdc 100644 --- a/src/wp-settings.php +++ b/src/wp-settings.php @@ -245,6 +245,7 @@ require( ABSPATH . WPINC . '/rest-api/search/class-wp-rest-post-search-handler.php' ); require( ABSPATH . WPINC . '/class-wp-block-type.php' ); require( ABSPATH . WPINC . '/class-wp-block-type-registry.php' ); +require( ABSPATH . WPINC . '/class-wp-block-parser.php' ); require( ABSPATH . WPINC . '/blocks.php' ); $GLOBALS['wp_embed'] = new WP_Embed(); diff --git a/tests/phpunit/data/blocks/fixtures/core__4-invalid-starting-letter.html b/tests/phpunit/data/blocks/fixtures/core__4-invalid-starting-letter.html new file mode 100644 index 0000000000000..220f8b60c8d65 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__4-invalid-starting-letter.html @@ -0,0 +1 @@ + diff --git a/tests/phpunit/data/blocks/fixtures/core__4-invalid-starting-letter.json b/tests/phpunit/data/blocks/fixtures/core__4-invalid-starting-letter.json new file mode 100644 index 0000000000000..3439923f417ab --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__4-invalid-starting-letter.json @@ -0,0 +1,12 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/freeform", + "isValid": true, + "attributes": { + "content": "

    " + }, + "innerBlocks": [], + "originalContent": "

    " + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__4-invalid-starting-letter.parsed.json b/tests/phpunit/data/blocks/fixtures/core__4-invalid-starting-letter.parsed.json new file mode 100644 index 0000000000000..2dfce101b41c9 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__4-invalid-starting-letter.parsed.json @@ -0,0 +1,8 @@ +[ + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__4-invalid-starting-letter.serialized.html b/tests/phpunit/data/blocks/fixtures/core__4-invalid-starting-letter.serialized.html new file mode 100644 index 0000000000000..fe35001a46b8e --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__4-invalid-starting-letter.serialized.html @@ -0,0 +1 @@ +

    diff --git a/tests/phpunit/data/blocks/fixtures/core__archives.html b/tests/phpunit/data/blocks/fixtures/core__archives.html new file mode 100644 index 0000000000000..dbed6fec172dc --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__archives.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/phpunit/data/blocks/fixtures/core__archives.json b/tests/phpunit/data/blocks/fixtures/core__archives.json new file mode 100644 index 0000000000000..ad43f4051a739 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__archives.json @@ -0,0 +1,13 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/archives", + "isValid": true, + "attributes": { + "displayAsDropdown": false, + "showPostCounts": false + }, + "innerBlocks": [], + "originalContent": "" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__archives.parsed.json b/tests/phpunit/data/blocks/fixtures/core__archives.parsed.json new file mode 100644 index 0000000000000..fab690ff93afd --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__archives.parsed.json @@ -0,0 +1,11 @@ +[ + { + "blockName": "core/archives", + "attrs": { + "displayAsDropdown": false, + "showPostCounts": false + }, + "innerBlocks": [], + "innerHTML": "" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__archives.serialized.html b/tests/phpunit/data/blocks/fixtures/core__archives.serialized.html new file mode 100644 index 0000000000000..b8928752375cd --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__archives.serialized.html @@ -0,0 +1 @@ + diff --git a/tests/phpunit/data/blocks/fixtures/core__archives__showPostCounts.html b/tests/phpunit/data/blocks/fixtures/core__archives__showPostCounts.html new file mode 100644 index 0000000000000..cce02a6a1a784 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__archives__showPostCounts.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/phpunit/data/blocks/fixtures/core__archives__showPostCounts.json b/tests/phpunit/data/blocks/fixtures/core__archives__showPostCounts.json new file mode 100644 index 0000000000000..0c1514e413a61 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__archives__showPostCounts.json @@ -0,0 +1,13 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/archives", + "isValid": true, + "attributes": { + "displayAsDropdown": false, + "showPostCounts": true + }, + "innerBlocks": [], + "originalContent": "" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__archives__showPostCounts.parsed.json b/tests/phpunit/data/blocks/fixtures/core__archives__showPostCounts.parsed.json new file mode 100644 index 0000000000000..cd58cbf96924d --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__archives__showPostCounts.parsed.json @@ -0,0 +1,11 @@ +[ + { + "blockName": "core/archives", + "attrs": { + "displayAsDropdown": false, + "showPostCounts": true + }, + "innerBlocks": [], + "innerHTML": "" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__archives__showPostCounts.serialized.html b/tests/phpunit/data/blocks/fixtures/core__archives__showPostCounts.serialized.html new file mode 100644 index 0000000000000..e294016710bd4 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__archives__showPostCounts.serialized.html @@ -0,0 +1 @@ + diff --git a/tests/phpunit/data/blocks/fixtures/core__audio.html b/tests/phpunit/data/blocks/fixtures/core__audio.html new file mode 100644 index 0000000000000..cfa3f20267c4b --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__audio.html @@ -0,0 +1,5 @@ + +
    + +
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__audio.json b/tests/phpunit/data/blocks/fixtures/core__audio.json new file mode 100644 index 0000000000000..f9acbfdd8ce2d --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__audio.json @@ -0,0 +1,16 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/audio", + "isValid": true, + "attributes": { + "src": "https://media.simplecast.com/episodes/audio/80564/draft-podcast-51-livePublish2.mp3", + "caption": "", + "autoplay": false, + "loop": false, + "align": "right" + }, + "innerBlocks": [], + "originalContent": "
    \n \n
    " + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__audio.parsed.json b/tests/phpunit/data/blocks/fixtures/core__audio.parsed.json new file mode 100644 index 0000000000000..33926c0b889b5 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__audio.parsed.json @@ -0,0 +1,16 @@ +[ + { + "blockName": "core/audio", + "attrs": { + "align": "right" + }, + "innerBlocks": [], + "innerHTML": "\n
    \n \n
    \n" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__audio.serialized.html b/tests/phpunit/data/blocks/fixtures/core__audio.serialized.html new file mode 100644 index 0000000000000..f7b69332aa882 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__audio.serialized.html @@ -0,0 +1,3 @@ + +
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__block.html b/tests/phpunit/data/blocks/fixtures/core__block.html new file mode 100644 index 0000000000000..25cde6619b519 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__block.html @@ -0,0 +1 @@ + diff --git a/tests/phpunit/data/blocks/fixtures/core__block.json b/tests/phpunit/data/blocks/fixtures/core__block.json new file mode 100644 index 0000000000000..da89e970b452b --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__block.json @@ -0,0 +1,12 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/block", + "isValid": true, + "attributes": { + "ref": 123 + }, + "innerBlocks": [], + "originalContent": "" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__block.parsed.json b/tests/phpunit/data/blocks/fixtures/core__block.parsed.json new file mode 100644 index 0000000000000..61b65e317a8e1 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__block.parsed.json @@ -0,0 +1,16 @@ +[ + { + "blockName": "core/block", + "attrs": { + "ref": 123 + }, + "innerBlocks": [], + "innerHTML": "" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__block.serialized.html b/tests/phpunit/data/blocks/fixtures/core__block.serialized.html new file mode 100644 index 0000000000000..65efadb46dcd6 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__block.serialized.html @@ -0,0 +1 @@ + diff --git a/tests/phpunit/data/blocks/fixtures/core__button__center.html b/tests/phpunit/data/blocks/fixtures/core__button__center.html new file mode 100644 index 0000000000000..ce1262f7063ff --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__button__center.html @@ -0,0 +1,3 @@ + + + diff --git a/tests/phpunit/data/blocks/fixtures/core__button__center.json b/tests/phpunit/data/blocks/fixtures/core__button__center.json new file mode 100644 index 0000000000000..7334b3f483293 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__button__center.json @@ -0,0 +1,14 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/button", + "isValid": true, + "attributes": { + "url": "https://github.com/WordPress/gutenberg", + "text": "Help build Gutenberg", + "align": "center" + }, + "innerBlocks": [], + "originalContent": "" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__button__center.parsed.json b/tests/phpunit/data/blocks/fixtures/core__button__center.parsed.json new file mode 100644 index 0000000000000..0094e8f264073 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__button__center.parsed.json @@ -0,0 +1,16 @@ +[ + { + "blockName": "core/button", + "attrs": { + "align": "center" + }, + "innerBlocks": [], + "innerHTML": "\n\n" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__button__center.serialized.html b/tests/phpunit/data/blocks/fixtures/core__button__center.serialized.html new file mode 100644 index 0000000000000..3d88c7ec1a551 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__button__center.serialized.html @@ -0,0 +1,3 @@ + + + diff --git a/tests/phpunit/data/blocks/fixtures/core__categories.html b/tests/phpunit/data/blocks/fixtures/core__categories.html new file mode 100644 index 0000000000000..89dd1be4ab254 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__categories.html @@ -0,0 +1 @@ + diff --git a/tests/phpunit/data/blocks/fixtures/core__categories.json b/tests/phpunit/data/blocks/fixtures/core__categories.json new file mode 100644 index 0000000000000..ff93919fbcc72 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__categories.json @@ -0,0 +1,14 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/categories", + "isValid": true, + "attributes": { + "showPostCounts": false, + "displayAsDropdown": false, + "showHierarchy": false + }, + "innerBlocks": [], + "originalContent": "" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__categories.parsed.json b/tests/phpunit/data/blocks/fixtures/core__categories.parsed.json new file mode 100644 index 0000000000000..df39a8078db37 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__categories.parsed.json @@ -0,0 +1,18 @@ +[ + { + "blockName": "core/categories", + "attrs": { + "showPostCounts": false, + "displayAsDropdown": false, + "showHierarchy": false + }, + "innerBlocks": [], + "innerHTML": "" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__categories.serialized.html b/tests/phpunit/data/blocks/fixtures/core__categories.serialized.html new file mode 100644 index 0000000000000..7816d6b192f6d --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__categories.serialized.html @@ -0,0 +1 @@ + diff --git a/tests/phpunit/data/blocks/fixtures/core__code.html b/tests/phpunit/data/blocks/fixtures/core__code.html new file mode 100644 index 0000000000000..5d3f951c17f71 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__code.html @@ -0,0 +1,5 @@ + +
    export default function MyButton() {
    +	return <Button>Click Me!</Button>;
    +}
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__code.json b/tests/phpunit/data/blocks/fixtures/core__code.json new file mode 100644 index 0000000000000..0958025736676 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__code.json @@ -0,0 +1,12 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/code", + "isValid": true, + "attributes": { + "content": "export default function MyButton() {\n\treturn ;\n}" + }, + "innerBlocks": [], + "originalContent": "
    export default function MyButton() {\n\treturn <Button>Click Me!</Button>;\n}
    " + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__code.parsed.json b/tests/phpunit/data/blocks/fixtures/core__code.parsed.json new file mode 100644 index 0000000000000..5aea1d9a14a01 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__code.parsed.json @@ -0,0 +1,14 @@ +[ + { + "blockName": "core/code", + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n
    export default function MyButton() {\n\treturn <Button>Click Me!</Button>;\n}
    \n" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__code.serialized.html b/tests/phpunit/data/blocks/fixtures/core__code.serialized.html new file mode 100644 index 0000000000000..651254a7cab49 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__code.serialized.html @@ -0,0 +1,5 @@ + +
    export default function MyButton() {
    +	return <Button>Click Me!</Button>;
    +}
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__column.html b/tests/phpunit/data/blocks/fixtures/core__column.html new file mode 100644 index 0000000000000..a18d2ee30a3eb --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__column.html @@ -0,0 +1,10 @@ + +
    + +

    Column One, Paragraph One

    + + +

    Column One, Paragraph Two

    + +
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__column.json b/tests/phpunit/data/blocks/fixtures/core__column.json new file mode 100644 index 0000000000000..aabfc10300c5e --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__column.json @@ -0,0 +1,33 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/column", + "isValid": true, + "attributes": {}, + "innerBlocks": [ + { + "clientId": "_clientId_0", + "name": "core/paragraph", + "isValid": true, + "attributes": { + "content": "Column One, Paragraph One", + "dropCap": false + }, + "innerBlocks": [], + "originalContent": "

    Column One, Paragraph One

    " + }, + { + "clientId": "_clientId_1", + "name": "core/paragraph", + "isValid": true, + "attributes": { + "content": "Column One, Paragraph Two", + "dropCap": false + }, + "innerBlocks": [], + "originalContent": "

    Column One, Paragraph Two

    " + } + ], + "originalContent": "
    \n\t\n\t\n
    " + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__column.parsed.json b/tests/phpunit/data/blocks/fixtures/core__column.parsed.json new file mode 100644 index 0000000000000..74b53bdf6ae96 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__column.parsed.json @@ -0,0 +1,27 @@ +[ + { + "blockName": "core/column", + "attrs": {}, + "innerBlocks": [ + { + "blockName": "core/paragraph", + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n\t

    Column One, Paragraph One

    \n\t" + }, + { + "blockName": "core/paragraph", + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n\t

    Column One, Paragraph Two

    \n\t" + } + ], + "innerHTML": "\n
    \n\t\n\t\n
    \n" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__column.serialized.html b/tests/phpunit/data/blocks/fixtures/core__column.serialized.html new file mode 100644 index 0000000000000..5d7839c470918 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__column.serialized.html @@ -0,0 +1,9 @@ + +
    +

    Column One, Paragraph One

    + + + +

    Column One, Paragraph Two

    +
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__columns.html b/tests/phpunit/data/blocks/fixtures/core__columns.html new file mode 100644 index 0000000000000..bcced4e7b9f24 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__columns.html @@ -0,0 +1,24 @@ + +
    + +
    + +

    Column One, Paragraph One

    + + +

    Column One, Paragraph Two

    + +
    + + +
    + +

    Column Two, Paragraph One

    + + +

    Column Three, Paragraph One

    + +
    + +
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__columns.json b/tests/phpunit/data/blocks/fixtures/core__columns.json new file mode 100644 index 0000000000000..2a446b72dc79d --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__columns.json @@ -0,0 +1,75 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/columns", + "isValid": true, + "attributes": { + "columns": 3 + }, + "innerBlocks": [ + { + "clientId": "_clientId_0", + "name": "core/column", + "isValid": true, + "attributes": {}, + "innerBlocks": [ + { + "clientId": "_clientId_0", + "name": "core/paragraph", + "isValid": true, + "attributes": { + "content": "Column One, Paragraph One", + "dropCap": false + }, + "innerBlocks": [], + "originalContent": "

    Column One, Paragraph One

    " + }, + { + "clientId": "_clientId_1", + "name": "core/paragraph", + "isValid": true, + "attributes": { + "content": "Column One, Paragraph Two", + "dropCap": false + }, + "innerBlocks": [], + "originalContent": "

    Column One, Paragraph Two

    " + } + ], + "originalContent": "
    \n\t\t\n\t\t\n\t
    " + }, + { + "clientId": "_clientId_1", + "name": "core/column", + "isValid": true, + "attributes": {}, + "innerBlocks": [ + { + "clientId": "_clientId_0", + "name": "core/paragraph", + "isValid": true, + "attributes": { + "content": "Column Two, Paragraph One", + "dropCap": false + }, + "innerBlocks": [], + "originalContent": "

    Column Two, Paragraph One

    " + }, + { + "clientId": "_clientId_1", + "name": "core/paragraph", + "isValid": true, + "attributes": { + "content": "Column Three, Paragraph One", + "dropCap": false + }, + "innerBlocks": [], + "originalContent": "

    Column Three, Paragraph One

    " + } + ], + "originalContent": "
    \n\t\t\n\t\t\n\t
    " + } + ], + "originalContent": "
    \n\t\n\t\n
    " + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__columns.parsed.json b/tests/phpunit/data/blocks/fixtures/core__columns.parsed.json new file mode 100644 index 0000000000000..9ec5cef66ad23 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__columns.parsed.json @@ -0,0 +1,55 @@ +[ + { + "blockName": "core/columns", + "attrs": { + "columns": 3 + }, + "innerBlocks": [ + { + "blockName": "core/column", + "attrs": {}, + "innerBlocks": [ + { + "blockName": "core/paragraph", + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n\t\t

    Column One, Paragraph One

    \n\t\t" + }, + { + "blockName": "core/paragraph", + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n\t\t

    Column One, Paragraph Two

    \n\t\t" + } + ], + "innerHTML": "\n\t
    \n\t\t\n\t\t\n\t
    \n\t" + }, + { + "blockName": "core/column", + "attrs": {}, + "innerBlocks": [ + { + "blockName": "core/paragraph", + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n\t\t

    Column Two, Paragraph One

    \n\t\t" + }, + { + "blockName": "core/paragraph", + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n\t\t

    Column Three, Paragraph One

    \n\t\t" + } + ], + "innerHTML": "\n\t
    \n\t\t\n\t\t\n\t
    \n\t" + } + ], + "innerHTML": "\n
    \n\t\n\t\n
    \n" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__columns.serialized.html b/tests/phpunit/data/blocks/fixtures/core__columns.serialized.html new file mode 100644 index 0000000000000..b7472ac094fbb --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__columns.serialized.html @@ -0,0 +1,21 @@ + +
    +
    +

    Column One, Paragraph One

    + + + +

    Column One, Paragraph Two

    +
    + + + +
    +

    Column Two, Paragraph One

    + + + +

    Column Three, Paragraph One

    +
    +
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__cover-image.html b/tests/phpunit/data/blocks/fixtures/core__cover-image.html new file mode 100644 index 0000000000000..86b5915701b0b --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__cover-image.html @@ -0,0 +1,5 @@ + +
    +

    Guten Berg!

    +
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__cover-image.json b/tests/phpunit/data/blocks/fixtures/core__cover-image.json new file mode 100644 index 0000000000000..342a160d3e4de --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__cover-image.json @@ -0,0 +1,16 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/cover-image", + "isValid": true, + "attributes": { + "title": "Guten Berg!", + "url": "https://cldup.com/uuUqE_dXzy.jpg", + "contentAlign": "center", + "hasParallax": false, + "dimRatio": 40 + }, + "innerBlocks": [], + "originalContent": "
    \n

    Guten Berg!

    \n
    " + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__cover-image.parsed.json b/tests/phpunit/data/blocks/fixtures/core__cover-image.parsed.json new file mode 100644 index 0000000000000..93bc4fbc8ddfd --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__cover-image.parsed.json @@ -0,0 +1,17 @@ +[ + { + "blockName": "core/cover-image", + "attrs": { + "url": "https://cldup.com/uuUqE_dXzy.jpg", + "dimRatio": 40 + }, + "innerBlocks": [], + "innerHTML": "\n
    \n

    Guten Berg!

    \n
    \n" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__cover-image.serialized.html b/tests/phpunit/data/blocks/fixtures/core__cover-image.serialized.html new file mode 100644 index 0000000000000..d64692d60c8fe --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__cover-image.serialized.html @@ -0,0 +1,3 @@ + +

    Guten Berg!

    + diff --git a/tests/phpunit/data/blocks/fixtures/core__embed.html b/tests/phpunit/data/blocks/fixtures/core__embed.html new file mode 100644 index 0000000000000..211e9e114ec54 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__embed.html @@ -0,0 +1,8 @@ + +
    +
    + https://example.com/ +
    +
    Embedded content from an example URL
    +
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__embed.json b/tests/phpunit/data/blocks/fixtures/core__embed.json new file mode 100644 index 0000000000000..916935db4c4c3 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__embed.json @@ -0,0 +1,14 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/embed", + "isValid": true, + "attributes": { + "url": "https://example.com/", + "caption": "Embedded content from an example URL", + "allowResponsive": true + }, + "innerBlocks": [], + "originalContent": "
    \n
    \n https://example.com/\n
    \n
    Embedded content from an example URL
    \n
    " + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__embed.parsed.json b/tests/phpunit/data/blocks/fixtures/core__embed.parsed.json new file mode 100644 index 0000000000000..5efa23bb5f83c --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__embed.parsed.json @@ -0,0 +1,16 @@ +[ + { + "blockName": "core/embed", + "attrs": { + "url": "https://example.com/" + }, + "innerBlocks": [], + "innerHTML": "\n
    \n
    \n https://example.com/\n
    \n
    Embedded content from an example URL
    \n
    \n" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__embed.serialized.html b/tests/phpunit/data/blocks/fixtures/core__embed.serialized.html new file mode 100644 index 0000000000000..3906dd45ee541 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__embed.serialized.html @@ -0,0 +1,5 @@ + +
    +https://example.com/ +
    Embedded content from an example URL
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__file__new-window.html b/tests/phpunit/data/blocks/fixtures/core__file__new-window.html new file mode 100644 index 0000000000000..e8ee1b8258103 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__file__new-window.html @@ -0,0 +1,3 @@ + + + diff --git a/tests/phpunit/data/blocks/fixtures/core__file__new-window.json b/tests/phpunit/data/blocks/fixtures/core__file__new-window.json new file mode 100644 index 0000000000000..4922f02880ecc --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__file__new-window.json @@ -0,0 +1,18 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/file", + "isValid": true, + "attributes": { + "id": 176, + "href": "http://localhost:8888/wp-content/uploads/2018/05/keycodes.js", + "fileName": "6546", + "textLinkHref": "http://localhost:8888/wp-content/uploads/2018/05/keycodes.js", + "textLinkTarget": "_blank", + "showDownloadButton": true, + "downloadButtonText": "Download" + }, + "innerBlocks": [], + "originalContent": "" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__file__new-window.parsed.json b/tests/phpunit/data/blocks/fixtures/core__file__new-window.parsed.json new file mode 100644 index 0000000000000..481c7e5c98daf --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__file__new-window.parsed.json @@ -0,0 +1,18 @@ +[ + { + "blockName": "core/file", + "attrs": { + "href": "http://localhost:8888/wp-content/uploads/2018/05/keycodes.js", + "showDownloadButton": true, + "id": 176 + }, + "innerBlocks": [], + "innerHTML": "\n\n" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__file__new-window.serialized.html b/tests/phpunit/data/blocks/fixtures/core__file__new-window.serialized.html new file mode 100644 index 0000000000000..7d28f4db58b62 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__file__new-window.serialized.html @@ -0,0 +1,3 @@ + + + diff --git a/tests/phpunit/data/blocks/fixtures/core__file__no-download-button.html b/tests/phpunit/data/blocks/fixtures/core__file__no-download-button.html new file mode 100644 index 0000000000000..54d82d4391f0e --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__file__no-download-button.html @@ -0,0 +1,3 @@ + + + diff --git a/tests/phpunit/data/blocks/fixtures/core__file__no-download-button.json b/tests/phpunit/data/blocks/fixtures/core__file__no-download-button.json new file mode 100644 index 0000000000000..44ff5553acbe1 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__file__no-download-button.json @@ -0,0 +1,17 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/file", + "isValid": true, + "attributes": { + "id": 176, + "href": "http://localhost:8888/wp-content/uploads/2018/05/keycodes.js", + "fileName": "lkjfijwef", + "textLinkHref": "http://localhost:8888/?attachment_id=176", + "showDownloadButton": false, + "downloadButtonText": "" + }, + "innerBlocks": [], + "originalContent": "" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__file__no-download-button.parsed.json b/tests/phpunit/data/blocks/fixtures/core__file__no-download-button.parsed.json new file mode 100644 index 0000000000000..65a2cffa5ec9a --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__file__no-download-button.parsed.json @@ -0,0 +1,18 @@ +[ + { + "blockName": "core/file", + "attrs": { + "href": "http://localhost:8888/wp-content/uploads/2018/05/keycodes.js", + "showDownloadButton": false, + "id": 176 + }, + "innerBlocks": [], + "innerHTML": "\n\n" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__file__no-download-button.serialized.html b/tests/phpunit/data/blocks/fixtures/core__file__no-download-button.serialized.html new file mode 100644 index 0000000000000..639e3e6c9d8a2 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__file__no-download-button.serialized.html @@ -0,0 +1,3 @@ + + + diff --git a/tests/phpunit/data/blocks/fixtures/core__file__no-text-link.html b/tests/phpunit/data/blocks/fixtures/core__file__no-text-link.html new file mode 100644 index 0000000000000..89c0390aac30d --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__file__no-text-link.html @@ -0,0 +1,3 @@ + + + diff --git a/tests/phpunit/data/blocks/fixtures/core__file__no-text-link.json b/tests/phpunit/data/blocks/fixtures/core__file__no-text-link.json new file mode 100644 index 0000000000000..6cf32d1f9d959 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__file__no-text-link.json @@ -0,0 +1,16 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/file", + "isValid": true, + "attributes": { + "id": 176, + "href": "http://localhost:8888/wp-content/uploads/2018/05/keycodes.js", + "fileName": "", + "showDownloadButton": true, + "downloadButtonText": "Download" + }, + "innerBlocks": [], + "originalContent": "" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__file__no-text-link.parsed.json b/tests/phpunit/data/blocks/fixtures/core__file__no-text-link.parsed.json new file mode 100644 index 0000000000000..c905766eb9ca2 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__file__no-text-link.parsed.json @@ -0,0 +1,18 @@ +[ + { + "blockName": "core/file", + "attrs": { + "href": "http://localhost:8888/wp-content/uploads/2018/05/keycodes.js", + "showDownloadButton": true, + "id": 176 + }, + "innerBlocks": [], + "innerHTML": "\n\n" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__file__no-text-link.serialized.html b/tests/phpunit/data/blocks/fixtures/core__file__no-text-link.serialized.html new file mode 100644 index 0000000000000..a0ab5b5f41744 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__file__no-text-link.serialized.html @@ -0,0 +1,3 @@ + + + diff --git a/tests/phpunit/data/blocks/fixtures/core__freeform.html b/tests/phpunit/data/blocks/fixtures/core__freeform.html new file mode 100644 index 0000000000000..302e94487bea5 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__freeform.html @@ -0,0 +1,6 @@ + +Testing freeform block with some +
    + HTML content +
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__freeform.json b/tests/phpunit/data/blocks/fixtures/core__freeform.json new file mode 100644 index 0000000000000..72341f093f2fb --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__freeform.json @@ -0,0 +1,12 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/freeform", + "isValid": true, + "attributes": { + "content": "

    Testing freeform block with some\n

    \n\tHTML content\n
    " + }, + "innerBlocks": [], + "originalContent": "

    Testing freeform block with some\n

    \n\tHTML content\n
    " + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__freeform.parsed.json b/tests/phpunit/data/blocks/fixtures/core__freeform.parsed.json new file mode 100644 index 0000000000000..5cf330c0e9e99 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__freeform.parsed.json @@ -0,0 +1,14 @@ +[ + { + "blockName": "core/freeform", + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\nTesting freeform block with some\n
    \n\tHTML content\n
    \n" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__freeform.serialized.html b/tests/phpunit/data/blocks/fixtures/core__freeform.serialized.html new file mode 100644 index 0000000000000..4fed04550b031 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__freeform.serialized.html @@ -0,0 +1,4 @@ +

    Testing freeform block with some +

    + HTML content +
    diff --git a/tests/phpunit/data/blocks/fixtures/core__freeform__undelimited.html b/tests/phpunit/data/blocks/fixtures/core__freeform__undelimited.html new file mode 100644 index 0000000000000..2c349303c54e0 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__freeform__undelimited.html @@ -0,0 +1,4 @@ +Testing freeform block with some +
    + HTML content +
    diff --git a/tests/phpunit/data/blocks/fixtures/core__freeform__undelimited.json b/tests/phpunit/data/blocks/fixtures/core__freeform__undelimited.json new file mode 100644 index 0000000000000..72341f093f2fb --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__freeform__undelimited.json @@ -0,0 +1,12 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/freeform", + "isValid": true, + "attributes": { + "content": "

    Testing freeform block with some\n

    \n\tHTML content\n
    " + }, + "innerBlocks": [], + "originalContent": "

    Testing freeform block with some\n

    \n\tHTML content\n
    " + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__freeform__undelimited.parsed.json b/tests/phpunit/data/blocks/fixtures/core__freeform__undelimited.parsed.json new file mode 100644 index 0000000000000..e0b2c76f29562 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__freeform__undelimited.parsed.json @@ -0,0 +1,8 @@ +[ + { + "attrs": {}, + "blockName": null, + "innerBlocks": [], + "innerHTML": "Testing freeform block with some\n
    \n\tHTML content\n
    \n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__freeform__undelimited.serialized.html b/tests/phpunit/data/blocks/fixtures/core__freeform__undelimited.serialized.html new file mode 100644 index 0000000000000..4fed04550b031 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__freeform__undelimited.serialized.html @@ -0,0 +1,4 @@ +

    Testing freeform block with some +

    + HTML content +
    diff --git a/tests/phpunit/data/blocks/fixtures/core__gallery.html b/tests/phpunit/data/blocks/fixtures/core__gallery.html new file mode 100644 index 0000000000000..5e48c7e66351f --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__gallery.html @@ -0,0 +1,14 @@ + + + diff --git a/tests/phpunit/data/blocks/fixtures/core__gallery.json b/tests/phpunit/data/blocks/fixtures/core__gallery.json new file mode 100644 index 0000000000000..8cfcc26d3b37a --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__gallery.json @@ -0,0 +1,25 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/gallery", + "isValid": true, + "attributes": { + "images": [ + { + "url": "https://cldup.com/uuUqE_dXzy.jpg", + "alt": "title", + "caption": "" + }, + { + "url": "http://google.com/hi.png", + "alt": "title", + "caption": "" + } + ], + "imageCrop": true, + "linkTo": "none" + }, + "innerBlocks": [], + "originalContent": "" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__gallery.parsed.json b/tests/phpunit/data/blocks/fixtures/core__gallery.parsed.json new file mode 100644 index 0000000000000..3d80657c7f204 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__gallery.parsed.json @@ -0,0 +1,14 @@ +[ + { + "blockName": "core/gallery", + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n\n" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__gallery.serialized.html b/tests/phpunit/data/blocks/fixtures/core__gallery.serialized.html new file mode 100644 index 0000000000000..5bf6ce819f976 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__gallery.serialized.html @@ -0,0 +1,3 @@ + + + diff --git a/tests/phpunit/data/blocks/fixtures/core__gallery__columns.html b/tests/phpunit/data/blocks/fixtures/core__gallery__columns.html new file mode 100644 index 0000000000000..cf1f1bb43fa3f --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__gallery__columns.html @@ -0,0 +1,14 @@ + + + diff --git a/tests/phpunit/data/blocks/fixtures/core__gallery__columns.json b/tests/phpunit/data/blocks/fixtures/core__gallery__columns.json new file mode 100644 index 0000000000000..b3daaa05f6e8a --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__gallery__columns.json @@ -0,0 +1,26 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/gallery", + "isValid": true, + "attributes": { + "images": [ + { + "url": "https://cldup.com/uuUqE_dXzy.jpg", + "alt": "title", + "caption": "" + }, + { + "url": "http://google.com/hi.png", + "alt": "title", + "caption": "" + } + ], + "columns": 1, + "imageCrop": true, + "linkTo": "none" + }, + "innerBlocks": [], + "originalContent": "" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__gallery__columns.parsed.json b/tests/phpunit/data/blocks/fixtures/core__gallery__columns.parsed.json new file mode 100644 index 0000000000000..44faed907a8fc --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__gallery__columns.parsed.json @@ -0,0 +1,16 @@ +[ + { + "blockName": "core/gallery", + "attrs": { + "columns": 1 + }, + "innerBlocks": [], + "innerHTML": "\n\n" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__gallery__columns.serialized.html b/tests/phpunit/data/blocks/fixtures/core__gallery__columns.serialized.html new file mode 100644 index 0000000000000..183e484ec42b6 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__gallery__columns.serialized.html @@ -0,0 +1,3 @@ + + + diff --git a/tests/phpunit/data/blocks/fixtures/core__heading__h2-em.html b/tests/phpunit/data/blocks/fixtures/core__heading__h2-em.html new file mode 100644 index 0000000000000..7755d1dcf4eae --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__heading__h2-em.html @@ -0,0 +1,3 @@ + +

    The Inserter Tool

    + diff --git a/tests/phpunit/data/blocks/fixtures/core__heading__h2-em.json b/tests/phpunit/data/blocks/fixtures/core__heading__h2-em.json new file mode 100644 index 0000000000000..b72785dd6d8c2 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__heading__h2-em.json @@ -0,0 +1,13 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/heading", + "isValid": true, + "attributes": { + "content": "The Inserter Tool", + "level": 2 + }, + "innerBlocks": [], + "originalContent": "

    The Inserter Tool

    " + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__heading__h2-em.parsed.json b/tests/phpunit/data/blocks/fixtures/core__heading__h2-em.parsed.json new file mode 100644 index 0000000000000..76d235d42c896 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__heading__h2-em.parsed.json @@ -0,0 +1,14 @@ +[ + { + "blockName": "core/heading", + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n

    The Inserter Tool

    \n" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__heading__h2-em.serialized.html b/tests/phpunit/data/blocks/fixtures/core__heading__h2-em.serialized.html new file mode 100644 index 0000000000000..55ce73502b618 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__heading__h2-em.serialized.html @@ -0,0 +1,3 @@ + +

    The Inserter Tool

    + diff --git a/tests/phpunit/data/blocks/fixtures/core__heading__h2.html b/tests/phpunit/data/blocks/fixtures/core__heading__h2.html new file mode 100644 index 0000000000000..a55b391a25057 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__heading__h2.html @@ -0,0 +1,3 @@ + +

    A picture is worth a thousand words, or so the saying goes

    + diff --git a/tests/phpunit/data/blocks/fixtures/core__heading__h2.json b/tests/phpunit/data/blocks/fixtures/core__heading__h2.json new file mode 100644 index 0000000000000..f2073ff78bd43 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__heading__h2.json @@ -0,0 +1,13 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/heading", + "isValid": true, + "attributes": { + "content": "A picture is worth a thousand words, or so the saying goes", + "level": 2 + }, + "innerBlocks": [], + "originalContent": "

    A picture is worth a thousand words, or so the saying goes

    " + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__heading__h2.parsed.json b/tests/phpunit/data/blocks/fixtures/core__heading__h2.parsed.json new file mode 100644 index 0000000000000..700f5f941e3fd --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__heading__h2.parsed.json @@ -0,0 +1,14 @@ +[ + { + "blockName": "core/heading", + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n

    A picture is worth a thousand words, or so the saying goes

    \n" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__heading__h2.serialized.html b/tests/phpunit/data/blocks/fixtures/core__heading__h2.serialized.html new file mode 100644 index 0000000000000..1212bf83c3029 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__heading__h2.serialized.html @@ -0,0 +1,3 @@ + +

    A picture is worth a thousand words, or so the saying goes

    + diff --git a/tests/phpunit/data/blocks/fixtures/core__html.html b/tests/phpunit/data/blocks/fixtures/core__html.html new file mode 100644 index 0000000000000..4824e6e373c06 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__html.html @@ -0,0 +1,4 @@ + +

    Some HTML code

    +This text will scroll from right to left + diff --git a/tests/phpunit/data/blocks/fixtures/core__html.json b/tests/phpunit/data/blocks/fixtures/core__html.json new file mode 100644 index 0000000000000..cd7cf91f03cdc --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__html.json @@ -0,0 +1,12 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/html", + "isValid": true, + "attributes": { + "content": "

    Some HTML code

    \nThis text will scroll from right to left" + }, + "innerBlocks": [], + "originalContent": "

    Some HTML code

    \nThis text will scroll from right to left" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__html.parsed.json b/tests/phpunit/data/blocks/fixtures/core__html.parsed.json new file mode 100644 index 0000000000000..2bfdc658667ae --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__html.parsed.json @@ -0,0 +1,14 @@ +[ + { + "blockName": "core/html", + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n

    Some HTML code

    \nThis text will scroll from right to left\n" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__html.serialized.html b/tests/phpunit/data/blocks/fixtures/core__html.serialized.html new file mode 100644 index 0000000000000..8abffc385d4e1 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__html.serialized.html @@ -0,0 +1,4 @@ + +

    Some HTML code

    +This text will scroll from right to left + diff --git a/tests/phpunit/data/blocks/fixtures/core__image.html b/tests/phpunit/data/blocks/fixtures/core__image.html new file mode 100644 index 0000000000000..eda663561a38b --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__image.html @@ -0,0 +1,3 @@ + +
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__image.json b/tests/phpunit/data/blocks/fixtures/core__image.json new file mode 100644 index 0000000000000..4369150f0c929 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__image.json @@ -0,0 +1,15 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/image", + "isValid": true, + "attributes": { + "url": "https://cldup.com/uuUqE_dXzy.jpg", + "alt": "", + "caption": "", + "linkDestination": "none" + }, + "innerBlocks": [], + "originalContent": "
    \"\"
    " + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__image.parsed.json b/tests/phpunit/data/blocks/fixtures/core__image.parsed.json new file mode 100644 index 0000000000000..fff414d9b01ba --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__image.parsed.json @@ -0,0 +1,14 @@ +[ + { + "blockName": "core/image", + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n
    \"\"
    \n" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__image.serialized.html b/tests/phpunit/data/blocks/fixtures/core__image.serialized.html new file mode 100644 index 0000000000000..5dfb0bac3e5b7 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__image.serialized.html @@ -0,0 +1,3 @@ + +
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__image__attachment-link.html b/tests/phpunit/data/blocks/fixtures/core__image__attachment-link.html new file mode 100644 index 0000000000000..908250d8ca249 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__image__attachment-link.html @@ -0,0 +1,3 @@ + +
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__image__attachment-link.json b/tests/phpunit/data/blocks/fixtures/core__image__attachment-link.json new file mode 100644 index 0000000000000..5d169589043a5 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__image__attachment-link.json @@ -0,0 +1,16 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/image", + "isValid": true, + "attributes": { + "url": "https://cldup.com/uuUqE_dXzy.jpg", + "alt": "", + "caption": "", + "href": "http://localhost:8888/?attachment_id=7", + "linkDestination": "attachment" + }, + "innerBlocks": [], + "originalContent": "
    \"\"
    " + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__image__attachment-link.parsed.json b/tests/phpunit/data/blocks/fixtures/core__image__attachment-link.parsed.json new file mode 100644 index 0000000000000..e5da07242d556 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__image__attachment-link.parsed.json @@ -0,0 +1,16 @@ +[ + { + "blockName": "core/image", + "attrs": { + "linkDestination": "attachment" + }, + "innerBlocks": [], + "innerHTML": "\n
    \"\"
    \n" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__image__attachment-link.serialized.html b/tests/phpunit/data/blocks/fixtures/core__image__attachment-link.serialized.html new file mode 100644 index 0000000000000..f5ebb9af4182c --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__image__attachment-link.serialized.html @@ -0,0 +1,3 @@ + +
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__image__center-caption.html b/tests/phpunit/data/blocks/fixtures/core__image__center-caption.html new file mode 100644 index 0000000000000..bfe40d190fa66 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__image__center-caption.html @@ -0,0 +1,3 @@ + +
    Give it a try. Press the "really wide" button on the image toolbar.
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__image__center-caption.json b/tests/phpunit/data/blocks/fixtures/core__image__center-caption.json new file mode 100644 index 0000000000000..f569bda22c81b --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__image__center-caption.json @@ -0,0 +1,16 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/image", + "isValid": true, + "attributes": { + "url": "https://cldup.com/YLYhpou2oq.jpg", + "alt": "", + "caption": "Give it a try. Press the \"really wide\" button on the image toolbar.", + "align": "center", + "linkDestination": "none" + }, + "innerBlocks": [], + "originalContent": "
    \"\"
    Give it a try. Press the "really wide" button on the image toolbar.
    " + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__image__center-caption.parsed.json b/tests/phpunit/data/blocks/fixtures/core__image__center-caption.parsed.json new file mode 100644 index 0000000000000..290057c2876a7 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__image__center-caption.parsed.json @@ -0,0 +1,16 @@ +[ + { + "blockName": "core/image", + "attrs": { + "align": "center" + }, + "innerBlocks": [], + "innerHTML": "\n
    \"\"
    Give it a try. Press the "really wide" button on the image toolbar.
    \n" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__image__center-caption.serialized.html b/tests/phpunit/data/blocks/fixtures/core__image__center-caption.serialized.html new file mode 100644 index 0000000000000..3410b04fdf121 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__image__center-caption.serialized.html @@ -0,0 +1,3 @@ + +
    Give it a try. Press the "really wide" button on the image toolbar.
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__image__custom-link.html b/tests/phpunit/data/blocks/fixtures/core__image__custom-link.html new file mode 100644 index 0000000000000..353dc5376b7a4 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__image__custom-link.html @@ -0,0 +1,3 @@ + +
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__image__custom-link.json b/tests/phpunit/data/blocks/fixtures/core__image__custom-link.json new file mode 100644 index 0000000000000..735e552282662 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__image__custom-link.json @@ -0,0 +1,16 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/image", + "isValid": true, + "attributes": { + "url": "https://cldup.com/uuUqE_dXzy.jpg", + "alt": "", + "caption": "", + "href": "https://wordpress.org/", + "linkDestination": "custom" + }, + "innerBlocks": [], + "originalContent": "
    \"\"
    " + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__image__custom-link.parsed.json b/tests/phpunit/data/blocks/fixtures/core__image__custom-link.parsed.json new file mode 100644 index 0000000000000..d814737aaedf2 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__image__custom-link.parsed.json @@ -0,0 +1,16 @@ +[ + { + "blockName": "core/image", + "attrs": { + "linkDestination": "custom" + }, + "innerBlocks": [], + "innerHTML": "\n
    \"\"
    \n" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__image__custom-link.serialized.html b/tests/phpunit/data/blocks/fixtures/core__image__custom-link.serialized.html new file mode 100644 index 0000000000000..47357bea6b9d4 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__image__custom-link.serialized.html @@ -0,0 +1,3 @@ + +
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__image__media-link.html b/tests/phpunit/data/blocks/fixtures/core__image__media-link.html new file mode 100644 index 0000000000000..90b3d227117b0 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__image__media-link.html @@ -0,0 +1,3 @@ + +
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__image__media-link.json b/tests/phpunit/data/blocks/fixtures/core__image__media-link.json new file mode 100644 index 0000000000000..690fa778b6fd5 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__image__media-link.json @@ -0,0 +1,16 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/image", + "isValid": true, + "attributes": { + "url": "https://cldup.com/uuUqE_dXzy.jpg", + "alt": "", + "caption": "", + "href": "https://cldup.com/uuUqE_dXzy.jpg", + "linkDestination": "media" + }, + "innerBlocks": [], + "originalContent": "
    \"\"
    " + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__image__media-link.parsed.json b/tests/phpunit/data/blocks/fixtures/core__image__media-link.parsed.json new file mode 100644 index 0000000000000..345c5d4e258ed --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__image__media-link.parsed.json @@ -0,0 +1,16 @@ +[ + { + "blockName": "core/image", + "attrs": { + "linkDestination": "media" + }, + "innerBlocks": [], + "innerHTML": "\n
    \"\"
    \n" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__image__media-link.serialized.html b/tests/phpunit/data/blocks/fixtures/core__image__media-link.serialized.html new file mode 100644 index 0000000000000..721abac903ff3 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__image__media-link.serialized.html @@ -0,0 +1,3 @@ + +
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__invalid-Capitals.html b/tests/phpunit/data/blocks/fixtures/core__invalid-Capitals.html new file mode 100644 index 0000000000000..1eaeb570265d9 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__invalid-Capitals.html @@ -0,0 +1 @@ + diff --git a/tests/phpunit/data/blocks/fixtures/core__invalid-Capitals.json b/tests/phpunit/data/blocks/fixtures/core__invalid-Capitals.json new file mode 100644 index 0000000000000..91dc39fca892a --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__invalid-Capitals.json @@ -0,0 +1,12 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/freeform", + "isValid": true, + "attributes": { + "content": "

    " + }, + "innerBlocks": [], + "originalContent": "

    " + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__invalid-Capitals.parsed.json b/tests/phpunit/data/blocks/fixtures/core__invalid-Capitals.parsed.json new file mode 100644 index 0000000000000..c17c81b398cf3 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__invalid-Capitals.parsed.json @@ -0,0 +1,8 @@ +[ + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__invalid-Capitals.serialized.html b/tests/phpunit/data/blocks/fixtures/core__invalid-Capitals.serialized.html new file mode 100644 index 0000000000000..4b0ff53da7118 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__invalid-Capitals.serialized.html @@ -0,0 +1 @@ +

    diff --git a/tests/phpunit/data/blocks/fixtures/core__invalid-special.html b/tests/phpunit/data/blocks/fixtures/core__invalid-special.html new file mode 100644 index 0000000000000..548aef63c749b --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__invalid-special.html @@ -0,0 +1 @@ + diff --git a/tests/phpunit/data/blocks/fixtures/core__invalid-special.json b/tests/phpunit/data/blocks/fixtures/core__invalid-special.json new file mode 100644 index 0000000000000..cd026a2a3c405 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__invalid-special.json @@ -0,0 +1,12 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/freeform", + "isValid": true, + "attributes": { + "content": "

    " + }, + "innerBlocks": [], + "originalContent": "

    " + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__invalid-special.parsed.json b/tests/phpunit/data/blocks/fixtures/core__invalid-special.parsed.json new file mode 100644 index 0000000000000..3198b43be513a --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__invalid-special.parsed.json @@ -0,0 +1,8 @@ +[ + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__invalid-special.serialized.html b/tests/phpunit/data/blocks/fixtures/core__invalid-special.serialized.html new file mode 100644 index 0000000000000..de4f2acc41f8d --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__invalid-special.serialized.html @@ -0,0 +1 @@ +

    diff --git a/tests/phpunit/data/blocks/fixtures/core__latest-comments.html b/tests/phpunit/data/blocks/fixtures/core__latest-comments.html new file mode 100644 index 0000000000000..cc4a2523b9d41 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__latest-comments.html @@ -0,0 +1 @@ + diff --git a/tests/phpunit/data/blocks/fixtures/core__latest-comments.json b/tests/phpunit/data/blocks/fixtures/core__latest-comments.json new file mode 100644 index 0000000000000..a4558772762f2 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__latest-comments.json @@ -0,0 +1,15 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/latest-comments", + "isValid": true, + "attributes": { + "commentsToShow": 5, + "displayAvatar": true, + "displayDate": true, + "displayExcerpt": true + }, + "innerBlocks": [], + "originalContent": "" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__latest-comments.parsed.json b/tests/phpunit/data/blocks/fixtures/core__latest-comments.parsed.json new file mode 100644 index 0000000000000..7e8bb541adc0c --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__latest-comments.parsed.json @@ -0,0 +1,18 @@ +[ + { + "blockName": "core/latest-comments", + "attrs": { + "displayAvatar": true, + "displayExcerpt": true, + "displayTimestamp": true + }, + "innerBlocks": [], + "innerHTML": "" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__latest-comments.serialized.html b/tests/phpunit/data/blocks/fixtures/core__latest-comments.serialized.html new file mode 100644 index 0000000000000..a50d5664a60a6 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__latest-comments.serialized.html @@ -0,0 +1 @@ + diff --git a/tests/phpunit/data/blocks/fixtures/core__latest-posts.html b/tests/phpunit/data/blocks/fixtures/core__latest-posts.html new file mode 100644 index 0000000000000..99d215f58affa --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__latest-posts.html @@ -0,0 +1 @@ + diff --git a/tests/phpunit/data/blocks/fixtures/core__latest-posts.json b/tests/phpunit/data/blocks/fixtures/core__latest-posts.json new file mode 100644 index 0000000000000..f31c903f58c27 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__latest-posts.json @@ -0,0 +1,17 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/latest-posts", + "isValid": true, + "attributes": { + "postsToShow": 5, + "displayPostDate": false, + "postLayout": "list", + "columns": 3, + "order": "desc", + "orderBy": "date" + }, + "innerBlocks": [], + "originalContent": "" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__latest-posts.parsed.json b/tests/phpunit/data/blocks/fixtures/core__latest-posts.parsed.json new file mode 100644 index 0000000000000..f1c800291d9bc --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__latest-posts.parsed.json @@ -0,0 +1,17 @@ +[ + { + "blockName": "core/latest-posts", + "attrs": { + "postsToShow": 5, + "displayPostDate": false + }, + "innerBlocks": [], + "innerHTML": "" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__latest-posts.serialized.html b/tests/phpunit/data/blocks/fixtures/core__latest-posts.serialized.html new file mode 100644 index 0000000000000..2c5b3f264c887 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__latest-posts.serialized.html @@ -0,0 +1 @@ + diff --git a/tests/phpunit/data/blocks/fixtures/core__latest-posts__displayPostDate.html b/tests/phpunit/data/blocks/fixtures/core__latest-posts__displayPostDate.html new file mode 100644 index 0000000000000..d3128a6682063 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__latest-posts__displayPostDate.html @@ -0,0 +1 @@ + diff --git a/tests/phpunit/data/blocks/fixtures/core__latest-posts__displayPostDate.json b/tests/phpunit/data/blocks/fixtures/core__latest-posts__displayPostDate.json new file mode 100644 index 0000000000000..024e1a7f37b8a --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__latest-posts__displayPostDate.json @@ -0,0 +1,17 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/latest-posts", + "isValid": true, + "attributes": { + "postsToShow": 5, + "displayPostDate": true, + "postLayout": "list", + "columns": 3, + "order": "desc", + "orderBy": "date" + }, + "innerBlocks": [], + "originalContent": "" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__latest-posts__displayPostDate.parsed.json b/tests/phpunit/data/blocks/fixtures/core__latest-posts__displayPostDate.parsed.json new file mode 100644 index 0000000000000..a92b392679099 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__latest-posts__displayPostDate.parsed.json @@ -0,0 +1,17 @@ +[ + { + "blockName": "core/latest-posts", + "attrs": { + "postsToShow": 5, + "displayPostDate": true + }, + "innerBlocks": [], + "innerHTML": "" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__latest-posts__displayPostDate.serialized.html b/tests/phpunit/data/blocks/fixtures/core__latest-posts__displayPostDate.serialized.html new file mode 100644 index 0000000000000..0d80d351d6f83 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__latest-posts__displayPostDate.serialized.html @@ -0,0 +1 @@ + diff --git a/tests/phpunit/data/blocks/fixtures/core__list__ul.html b/tests/phpunit/data/blocks/fixtures/core__list__ul.html new file mode 100644 index 0000000000000..aef6bf669f2c9 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__list__ul.html @@ -0,0 +1,3 @@ + +
    • Text & Headings
    • Images & Videos
    • Galleries
    • Embeds, like YouTube, Tweets, or other WordPress posts.
    • Layout blocks, like Buttons, Hero Images, Separators, etc.
    • And Lists like this one of course :)
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__list__ul.json b/tests/phpunit/data/blocks/fixtures/core__list__ul.json new file mode 100644 index 0000000000000..17baec7cef1c7 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__list__ul.json @@ -0,0 +1,13 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/list", + "isValid": true, + "attributes": { + "ordered": false, + "values": "
  • Text & Headings
  • Images & Videos
  • Galleries
  • Embeds, like YouTube, Tweets, or other WordPress posts.
  • Layout blocks, like Buttons, Hero Images, Separators, etc.
  • And Lists like this one of course :)
  • " + }, + "innerBlocks": [], + "originalContent": "
    • Text & Headings
    • Images & Videos
    • Galleries
    • Embeds, like YouTube, Tweets, or other WordPress posts.
    • Layout blocks, like Buttons, Hero Images, Separators, etc.
    • And Lists like this one of course :)
    " + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__list__ul.parsed.json b/tests/phpunit/data/blocks/fixtures/core__list__ul.parsed.json new file mode 100644 index 0000000000000..c42181ba553ac --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__list__ul.parsed.json @@ -0,0 +1,14 @@ +[ + { + "blockName": "core/list", + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n
    • Text & Headings
    • Images & Videos
    • Galleries
    • Embeds, like YouTube, Tweets, or other WordPress posts.
    • Layout blocks, like Buttons, Hero Images, Separators, etc.
    • And Lists like this one of course :)
    \n" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__list__ul.serialized.html b/tests/phpunit/data/blocks/fixtures/core__list__ul.serialized.html new file mode 100644 index 0000000000000..6b83b73a47ea1 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__list__ul.serialized.html @@ -0,0 +1,3 @@ + +
    • Text & Headings
    • Images & Videos
    • Galleries
    • Embeds, like YouTube, Tweets, or other WordPress posts.
    • Layout blocks, like Buttons, Hero Images, Separators, etc.
    • And Lists like this one of course :)
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__missing.html b/tests/phpunit/data/blocks/fixtures/core__missing.html new file mode 100644 index 0000000000000..a29cbdea3f633 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__missing.html @@ -0,0 +1,6 @@ + +

    Testing missing block with some

    +
    + HTML content +
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__missing.json b/tests/phpunit/data/blocks/fixtures/core__missing.json new file mode 100644 index 0000000000000..4e90cf71328ce --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__missing.json @@ -0,0 +1,14 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/missing", + "isValid": true, + "attributes": { + "originalContent": "\n

    Testing missing block with some

    \n
    \n\tHTML content\n
    \n", + "originalName": "unregistered/example", + "originalUndelimitedContent": "

    Testing missing block with some

    \n
    \n\tHTML content\n
    " + }, + "innerBlocks": [], + "originalContent": "\n

    Testing missing block with some

    \n
    \n\tHTML content\n
    \n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__missing.parsed.json b/tests/phpunit/data/blocks/fixtures/core__missing.parsed.json new file mode 100644 index 0000000000000..3466b8cf2ac41 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__missing.parsed.json @@ -0,0 +1,17 @@ +[ + { + "blockName": "unregistered/example", + "attrs": { + "attr1": "One", + "attr2": "Two" + }, + "innerBlocks": [], + "innerHTML": "\n

    Testing missing block with some

    \n
    \n\tHTML content\n
    \n" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__missing.serialized.html b/tests/phpunit/data/blocks/fixtures/core__missing.serialized.html new file mode 100644 index 0000000000000..a29cbdea3f633 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__missing.serialized.html @@ -0,0 +1,6 @@ + +

    Testing missing block with some

    +
    + HTML content +
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__more.html b/tests/phpunit/data/blocks/fixtures/core__more.html new file mode 100644 index 0000000000000..b3b4f9e5e4926 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__more.html @@ -0,0 +1,3 @@ + + + diff --git a/tests/phpunit/data/blocks/fixtures/core__more.json b/tests/phpunit/data/blocks/fixtures/core__more.json new file mode 100644 index 0000000000000..886638ab06e05 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__more.json @@ -0,0 +1,12 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/more", + "isValid": true, + "attributes": { + "noTeaser": false + }, + "innerBlocks": [], + "originalContent": "" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__more.parsed.json b/tests/phpunit/data/blocks/fixtures/core__more.parsed.json new file mode 100644 index 0000000000000..176e7fe7f7c16 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__more.parsed.json @@ -0,0 +1,14 @@ +[ + { + "blockName": "core/more", + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n\n" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__more.serialized.html b/tests/phpunit/data/blocks/fixtures/core__more.serialized.html new file mode 100644 index 0000000000000..3b02c97e91b67 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__more.serialized.html @@ -0,0 +1,3 @@ + + + diff --git a/tests/phpunit/data/blocks/fixtures/core__more__custom-text-teaser.html b/tests/phpunit/data/blocks/fixtures/core__more__custom-text-teaser.html new file mode 100644 index 0000000000000..1dcca9096610a --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__more__custom-text-teaser.html @@ -0,0 +1,4 @@ + + + + diff --git a/tests/phpunit/data/blocks/fixtures/core__more__custom-text-teaser.json b/tests/phpunit/data/blocks/fixtures/core__more__custom-text-teaser.json new file mode 100644 index 0000000000000..7f7811e0d1a54 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__more__custom-text-teaser.json @@ -0,0 +1,13 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/more", + "isValid": true, + "attributes": { + "customText": "Continue Reading", + "noTeaser": true + }, + "innerBlocks": [], + "originalContent": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__more__custom-text-teaser.parsed.json b/tests/phpunit/data/blocks/fixtures/core__more__custom-text-teaser.parsed.json new file mode 100644 index 0000000000000..a533e3c09c471 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__more__custom-text-teaser.parsed.json @@ -0,0 +1,17 @@ +[ + { + "blockName": "core/more", + "attrs": { + "customText": "Continue Reading", + "noTeaser": true + }, + "innerBlocks": [], + "innerHTML": "\n\n\n" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__more__custom-text-teaser.serialized.html b/tests/phpunit/data/blocks/fixtures/core__more__custom-text-teaser.serialized.html new file mode 100644 index 0000000000000..6cc18dcfba306 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__more__custom-text-teaser.serialized.html @@ -0,0 +1,4 @@ + + + + diff --git a/tests/phpunit/data/blocks/fixtures/core__nextpage.html b/tests/phpunit/data/blocks/fixtures/core__nextpage.html new file mode 100644 index 0000000000000..9bf78b8cbf792 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__nextpage.html @@ -0,0 +1,3 @@ + + + diff --git a/tests/phpunit/data/blocks/fixtures/core__nextpage.json b/tests/phpunit/data/blocks/fixtures/core__nextpage.json new file mode 100644 index 0000000000000..1a2c5478ae6b4 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__nextpage.json @@ -0,0 +1,10 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/nextpage", + "isValid": true, + "attributes": {}, + "innerBlocks": [], + "originalContent": "" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__nextpage.parsed.json b/tests/phpunit/data/blocks/fixtures/core__nextpage.parsed.json new file mode 100644 index 0000000000000..e4dd2534c821e --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__nextpage.parsed.json @@ -0,0 +1,14 @@ +[ + { + "blockName": "core/nextpage", + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n\n" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__nextpage.serialized.html b/tests/phpunit/data/blocks/fixtures/core__nextpage.serialized.html new file mode 100644 index 0000000000000..beef64ebd56d3 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__nextpage.serialized.html @@ -0,0 +1,3 @@ + + + diff --git a/tests/phpunit/data/blocks/fixtures/core__paragraph__align-right.html b/tests/phpunit/data/blocks/fixtures/core__paragraph__align-right.html new file mode 100644 index 0000000000000..d41481a57f2e5 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__paragraph__align-right.html @@ -0,0 +1,3 @@ + +

    ... like this one, which is separate from the above and right aligned.

    + diff --git a/tests/phpunit/data/blocks/fixtures/core__paragraph__align-right.json b/tests/phpunit/data/blocks/fixtures/core__paragraph__align-right.json new file mode 100644 index 0000000000000..079d9a704f2e9 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__paragraph__align-right.json @@ -0,0 +1,14 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/paragraph", + "isValid": true, + "attributes": { + "content": "... like this one, which is separate from the above and right aligned.", + "align": "right", + "dropCap": false + }, + "innerBlocks": [], + "originalContent": "

    ... like this one, which is separate from the above and right aligned.

    " + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__paragraph__align-right.parsed.json b/tests/phpunit/data/blocks/fixtures/core__paragraph__align-right.parsed.json new file mode 100644 index 0000000000000..060d40a38de5a --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__paragraph__align-right.parsed.json @@ -0,0 +1,16 @@ +[ + { + "blockName": "core/paragraph", + "attrs": { + "align": "right" + }, + "innerBlocks": [], + "innerHTML": "\n

    ... like this one, which is separate from the above and right aligned.

    \n" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__paragraph__align-right.serialized.html b/tests/phpunit/data/blocks/fixtures/core__paragraph__align-right.serialized.html new file mode 100644 index 0000000000000..3e18265b5c44b --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__paragraph__align-right.serialized.html @@ -0,0 +1,3 @@ + +

    ... like this one, which is separate from the above and right aligned.

    + diff --git a/tests/phpunit/data/blocks/fixtures/core__paragraph__deprecated.html b/tests/phpunit/data/blocks/fixtures/core__paragraph__deprecated.html new file mode 100644 index 0000000000000..96ec545b64fda --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__paragraph__deprecated.html @@ -0,0 +1,3 @@ + +Unwrapped is still valid. + diff --git a/tests/phpunit/data/blocks/fixtures/core__paragraph__deprecated.json b/tests/phpunit/data/blocks/fixtures/core__paragraph__deprecated.json new file mode 100644 index 0000000000000..ce0f468e35188 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__paragraph__deprecated.json @@ -0,0 +1,13 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/paragraph", + "isValid": true, + "attributes": { + "content": "Unwrapped is still valid.", + "dropCap": false + }, + "innerBlocks": [], + "originalContent": "Unwrapped is still valid." + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__paragraph__deprecated.parsed.json b/tests/phpunit/data/blocks/fixtures/core__paragraph__deprecated.parsed.json new file mode 100644 index 0000000000000..ac11af1b3a92c --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__paragraph__deprecated.parsed.json @@ -0,0 +1,14 @@ +[ + { + "blockName": "core/paragraph", + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\nUnwrapped is still valid.\n" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__paragraph__deprecated.serialized.html b/tests/phpunit/data/blocks/fixtures/core__paragraph__deprecated.serialized.html new file mode 100644 index 0000000000000..ddc0a9d9a1cf4 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__paragraph__deprecated.serialized.html @@ -0,0 +1,3 @@ + +

    Unwrapped is still valid.

    + diff --git a/tests/phpunit/data/blocks/fixtures/core__preformatted.html b/tests/phpunit/data/blocks/fixtures/core__preformatted.html new file mode 100644 index 0000000000000..1a890a7a5dc2d --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__preformatted.html @@ -0,0 +1,3 @@ + +
    Some preformatted text...
    And more!
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__preformatted.json b/tests/phpunit/data/blocks/fixtures/core__preformatted.json new file mode 100644 index 0000000000000..290c7e9849496 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__preformatted.json @@ -0,0 +1,12 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/preformatted", + "isValid": true, + "attributes": { + "content": "Some preformatted text...
    And more!" + }, + "innerBlocks": [], + "originalContent": "
    Some preformatted text...
    And more!
    " + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__preformatted.parsed.json b/tests/phpunit/data/blocks/fixtures/core__preformatted.parsed.json new file mode 100644 index 0000000000000..247fdda2e3eee --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__preformatted.parsed.json @@ -0,0 +1,14 @@ +[ + { + "blockName": "core/preformatted", + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n
    Some preformatted text...
    And more!
    \n" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__preformatted.serialized.html b/tests/phpunit/data/blocks/fixtures/core__preformatted.serialized.html new file mode 100644 index 0000000000000..8c7cf539e4ea2 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__preformatted.serialized.html @@ -0,0 +1,3 @@ + +
    Some preformatted text...
    And more!
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__pullquote.html b/tests/phpunit/data/blocks/fixtures/core__pullquote.html new file mode 100644 index 0000000000000..87bd8b74f964c --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__pullquote.html @@ -0,0 +1,7 @@ + +
    +
    +

    Testing pullquote block...

    ...with a caption +
    +
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__pullquote.json b/tests/phpunit/data/blocks/fixtures/core__pullquote.json new file mode 100644 index 0000000000000..5cf126489bc64 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__pullquote.json @@ -0,0 +1,13 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/pullquote", + "isValid": true, + "attributes": { + "value": "

    Testing pullquote block...

    ", + "citation": "...with a caption" + }, + "innerBlocks": [], + "originalContent": "
    \n
    \n

    Testing pullquote block...

    ...with a caption\n
    \n
    " + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__pullquote.parsed.json b/tests/phpunit/data/blocks/fixtures/core__pullquote.parsed.json new file mode 100644 index 0000000000000..0e39eea4ec89c --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__pullquote.parsed.json @@ -0,0 +1,14 @@ +[ + { + "blockName": "core/pullquote", + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n
    \n
    \n

    Testing pullquote block...

    ...with a caption\n
    \n
    \n" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__pullquote.serialized.html b/tests/phpunit/data/blocks/fixtures/core__pullquote.serialized.html new file mode 100644 index 0000000000000..6ef3209575aeb --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__pullquote.serialized.html @@ -0,0 +1,3 @@ + +

    Testing pullquote block...

    ...with a caption
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__pullquote__multi-paragraph.html b/tests/phpunit/data/blocks/fixtures/core__pullquote__multi-paragraph.html new file mode 100644 index 0000000000000..eace115333c62 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__pullquote__multi-paragraph.html @@ -0,0 +1,9 @@ + +
    +
    +

    Paragraph one

    +

    Paragraph two

    + by whomever +
    +
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__pullquote__multi-paragraph.json b/tests/phpunit/data/blocks/fixtures/core__pullquote__multi-paragraph.json new file mode 100644 index 0000000000000..81c058e5ab10c --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__pullquote__multi-paragraph.json @@ -0,0 +1,13 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/pullquote", + "isValid": true, + "attributes": { + "value": "

    Paragraph one

    Paragraph two

    ", + "citation": "by whomever" + }, + "innerBlocks": [], + "originalContent": "
    \n
    \n

    Paragraph one

    \n

    Paragraph two

    \n by whomever\n\t
    \n
    " + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__pullquote__multi-paragraph.parsed.json b/tests/phpunit/data/blocks/fixtures/core__pullquote__multi-paragraph.parsed.json new file mode 100644 index 0000000000000..3b303a0d8d157 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__pullquote__multi-paragraph.parsed.json @@ -0,0 +1,14 @@ +[ + { + "blockName": "core/pullquote", + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n
    \n
    \n

    Paragraph one

    \n

    Paragraph two

    \n by whomever\n\t
    \n
    \n" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__pullquote__multi-paragraph.serialized.html b/tests/phpunit/data/blocks/fixtures/core__pullquote__multi-paragraph.serialized.html new file mode 100644 index 0000000000000..333b051f19728 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__pullquote__multi-paragraph.serialized.html @@ -0,0 +1,3 @@ + +

    Paragraph one

    Paragraph two

    by whomever
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__quote__style-1.html b/tests/phpunit/data/blocks/fixtures/core__quote__style-1.html new file mode 100644 index 0000000000000..4bfd0ef80e5d4 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__quote__style-1.html @@ -0,0 +1,3 @@ + +

    The editor will endeavour to create a new page and post building experience that makes writing rich posts effortless, and has “blocks” to make it easy what today might take shortcodes, custom HTML, or “mystery meat” embed discovery.

    Matt Mullenweg, 2017
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__quote__style-1.json b/tests/phpunit/data/blocks/fixtures/core__quote__style-1.json new file mode 100644 index 0000000000000..cd8d15bcc9b34 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__quote__style-1.json @@ -0,0 +1,13 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/quote", + "isValid": true, + "attributes": { + "value": "

    The editor will endeavour to create a new page and post building experience that makes writing rich posts effortless, and has “blocks” to make it easy what today might take shortcodes, custom HTML, or “mystery meat” embed discovery.

    ", + "citation": "Matt Mullenweg, 2017" + }, + "innerBlocks": [], + "originalContent": "

    The editor will endeavour to create a new page and post building experience that makes writing rich posts effortless, and has “blocks” to make it easy what today might take shortcodes, custom HTML, or “mystery meat” embed discovery.

    Matt Mullenweg, 2017
    " + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__quote__style-1.parsed.json b/tests/phpunit/data/blocks/fixtures/core__quote__style-1.parsed.json new file mode 100644 index 0000000000000..12f480ef313fe --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__quote__style-1.parsed.json @@ -0,0 +1,14 @@ +[ + { + "blockName": "core/quote", + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n

    The editor will endeavour to create a new page and post building experience that makes writing rich posts effortless, and has “blocks” to make it easy what today might take shortcodes, custom HTML, or “mystery meat” embed discovery.

    Matt Mullenweg, 2017
    \n" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__quote__style-1.serialized.html b/tests/phpunit/data/blocks/fixtures/core__quote__style-1.serialized.html new file mode 100644 index 0000000000000..4268c4139854e --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__quote__style-1.serialized.html @@ -0,0 +1,3 @@ + +

    The editor will endeavour to create a new page and post building experience that makes writing rich posts effortless, and has “blocks” to make it easy what today might take shortcodes, custom HTML, or “mystery meat” embed discovery.

    Matt Mullenweg, 2017
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__quote__style-2.html b/tests/phpunit/data/blocks/fixtures/core__quote__style-2.html new file mode 100644 index 0000000000000..d4ecdca350df1 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__quote__style-2.html @@ -0,0 +1,3 @@ + +

    There is no greater agony than bearing an untold story inside you.

    Maya Angelou
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__quote__style-2.json b/tests/phpunit/data/blocks/fixtures/core__quote__style-2.json new file mode 100644 index 0000000000000..300770c72c007 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__quote__style-2.json @@ -0,0 +1,14 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/quote", + "isValid": true, + "attributes": { + "value": "

    There is no greater agony than bearing an untold story inside you.

    ", + "citation": "Maya Angelou", + "className": "is-style-large" + }, + "innerBlocks": [], + "originalContent": "

    There is no greater agony than bearing an untold story inside you.

    Maya Angelou
    " + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__quote__style-2.parsed.json b/tests/phpunit/data/blocks/fixtures/core__quote__style-2.parsed.json new file mode 100644 index 0000000000000..87a9377e2e9ed --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__quote__style-2.parsed.json @@ -0,0 +1,16 @@ +[ + { + "blockName": "core/quote", + "attrs": { + "className": "is-style-large" + }, + "innerBlocks": [], + "innerHTML": "\n

    There is no greater agony than bearing an untold story inside you.

    Maya Angelou
    \n" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__quote__style-2.serialized.html b/tests/phpunit/data/blocks/fixtures/core__quote__style-2.serialized.html new file mode 100644 index 0000000000000..b257de24088e9 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__quote__style-2.serialized.html @@ -0,0 +1,3 @@ + +

    There is no greater agony than bearing an untold story inside you.

    Maya Angelou
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__separator.html b/tests/phpunit/data/blocks/fixtures/core__separator.html new file mode 100644 index 0000000000000..d835a483147f1 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__separator.html @@ -0,0 +1,3 @@ + +
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__separator.json b/tests/phpunit/data/blocks/fixtures/core__separator.json new file mode 100644 index 0000000000000..12a687c00ac18 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__separator.json @@ -0,0 +1,10 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/separator", + "isValid": true, + "attributes": {}, + "innerBlocks": [], + "originalContent": "
    " + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__separator.parsed.json b/tests/phpunit/data/blocks/fixtures/core__separator.parsed.json new file mode 100644 index 0000000000000..d01eb1eed1f59 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__separator.parsed.json @@ -0,0 +1,14 @@ +[ + { + "blockName": "core/separator", + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n
    \n" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__separator.serialized.html b/tests/phpunit/data/blocks/fixtures/core__separator.serialized.html new file mode 100644 index 0000000000000..cb5aeea74070c --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__separator.serialized.html @@ -0,0 +1,3 @@ + +
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__shortcode.html b/tests/phpunit/data/blocks/fixtures/core__shortcode.html new file mode 100644 index 0000000000000..ed4bd8928dbee --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__shortcode.html @@ -0,0 +1,3 @@ + +[gallery ids="238,338"] + diff --git a/tests/phpunit/data/blocks/fixtures/core__shortcode.json b/tests/phpunit/data/blocks/fixtures/core__shortcode.json new file mode 100644 index 0000000000000..0f1d3e559dcd2 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__shortcode.json @@ -0,0 +1,12 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/shortcode", + "isValid": true, + "attributes": { + "text": "[gallery ids=\"238,338\"]" + }, + "innerBlocks": [], + "originalContent": "[gallery ids=\"238,338\"]" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__shortcode.parsed.json b/tests/phpunit/data/blocks/fixtures/core__shortcode.parsed.json new file mode 100644 index 0000000000000..70d24dc276253 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__shortcode.parsed.json @@ -0,0 +1,14 @@ +[ + { + "blockName": "core/shortcode", + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n[gallery ids=\"238,338\"]\n" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__shortcode.serialized.html b/tests/phpunit/data/blocks/fixtures/core__shortcode.serialized.html new file mode 100644 index 0000000000000..293b6983594e7 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__shortcode.serialized.html @@ -0,0 +1,3 @@ + +[gallery ids="238,338"] + diff --git a/tests/phpunit/data/blocks/fixtures/core__spacer.html b/tests/phpunit/data/blocks/fixtures/core__spacer.html new file mode 100644 index 0000000000000..e7c1e256196de --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__spacer.html @@ -0,0 +1,3 @@ + + + diff --git a/tests/phpunit/data/blocks/fixtures/core__spacer.json b/tests/phpunit/data/blocks/fixtures/core__spacer.json new file mode 100644 index 0000000000000..a157520b7563c --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__spacer.json @@ -0,0 +1,12 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/spacer", + "isValid": true, + "attributes": { + "height": 100 + }, + "innerBlocks": [], + "originalContent": "
    " + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__spacer.parsed.json b/tests/phpunit/data/blocks/fixtures/core__spacer.parsed.json new file mode 100644 index 0000000000000..8b8baa2a7fc61 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__spacer.parsed.json @@ -0,0 +1,14 @@ +[ + { + "blockName": "core/spacer", + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n
    \n" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__spacer.serialized.html b/tests/phpunit/data/blocks/fixtures/core__spacer.serialized.html new file mode 100644 index 0000000000000..e7c1e256196de --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__spacer.serialized.html @@ -0,0 +1,3 @@ + + + diff --git a/tests/phpunit/data/blocks/fixtures/core__subhead.html b/tests/phpunit/data/blocks/fixtures/core__subhead.html new file mode 100644 index 0000000000000..61cf93189617e --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__subhead.html @@ -0,0 +1,3 @@ + +

    This is a subhead.

    + diff --git a/tests/phpunit/data/blocks/fixtures/core__subhead.json b/tests/phpunit/data/blocks/fixtures/core__subhead.json new file mode 100644 index 0000000000000..a0c58740e2bc6 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__subhead.json @@ -0,0 +1,12 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/subhead", + "isValid": true, + "attributes": { + "content": "This is a subhead." + }, + "innerBlocks": [], + "originalContent": "

    This is a subhead.

    " + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__subhead.parsed.json b/tests/phpunit/data/blocks/fixtures/core__subhead.parsed.json new file mode 100644 index 0000000000000..06ca46da1b88d --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__subhead.parsed.json @@ -0,0 +1,14 @@ +[ + { + "blockName": "core/subhead", + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n

    This is a subhead.

    \n" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__subhead.serialized.html b/tests/phpunit/data/blocks/fixtures/core__subhead.serialized.html new file mode 100644 index 0000000000000..23468192081a0 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__subhead.serialized.html @@ -0,0 +1,3 @@ + +

    This is a subhead.

    + diff --git a/tests/phpunit/data/blocks/fixtures/core__table.html b/tests/phpunit/data/blocks/fixtures/core__table.html new file mode 100644 index 0000000000000..b9b41659e835a --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__table.html @@ -0,0 +1,3 @@ + +
    VersionMusicianDate
    .70No musician chosen.May 27, 2003
    1.0Miles DavisJanuary 3, 2004
    Lots of versions skipped, see the full list
    4.4Clifford BrownDecember 8, 2015
    4.5Coleman HawkinsApril 12, 2016
    4.6Pepper AdamsAugust 16, 2016
    4.7Sarah VaughanDecember 6, 2016
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__table.json b/tests/phpunit/data/blocks/fixtures/core__table.json new file mode 100644 index 0000000000000..7d71d09c53be8 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__table.json @@ -0,0 +1,145 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/table", + "isValid": true, + "attributes": { + "hasFixedLayout": false, + "head": [ + { + "cells": [ + { + "content": "Version", + "tag": "th" + }, + { + "content": "Musician", + "tag": "th" + }, + { + "content": "Date", + "tag": "th" + } + ] + } + ], + "body": [ + { + "cells": [ + { + "content": ".70", + "tag": "td" + }, + { + "content": "No musician chosen.", + "tag": "td" + }, + { + "content": "May 27, 2003", + "tag": "td" + } + ] + }, + { + "cells": [ + { + "content": "1.0", + "tag": "td" + }, + { + "content": "Miles Davis", + "tag": "td" + }, + { + "content": "January 3, 2004", + "tag": "td" + } + ] + }, + { + "cells": [ + { + "content": "Lots of versions skipped, see the full list", + "tag": "td" + }, + { + "content": "…", + "tag": "td" + }, + { + "content": "…", + "tag": "td" + } + ] + }, + { + "cells": [ + { + "content": "4.4", + "tag": "td" + }, + { + "content": "Clifford Brown", + "tag": "td" + }, + { + "content": "December 8, 2015", + "tag": "td" + } + ] + }, + { + "cells": [ + { + "content": "4.5", + "tag": "td" + }, + { + "content": "Coleman Hawkins", + "tag": "td" + }, + { + "content": "April 12, 2016", + "tag": "td" + } + ] + }, + { + "cells": [ + { + "content": "4.6", + "tag": "td" + }, + { + "content": "Pepper Adams", + "tag": "td" + }, + { + "content": "August 16, 2016", + "tag": "td" + } + ] + }, + { + "cells": [ + { + "content": "4.7", + "tag": "td" + }, + { + "content": "Sarah Vaughan", + "tag": "td" + }, + { + "content": "December 6, 2016", + "tag": "td" + } + ] + } + ], + "foot": [] + }, + "innerBlocks": [], + "originalContent": "
    VersionMusicianDate
    .70No musician chosen.May 27, 2003
    1.0Miles DavisJanuary 3, 2004
    Lots of versions skipped, see the full list
    4.4Clifford BrownDecember 8, 2015
    4.5Coleman HawkinsApril 12, 2016
    4.6Pepper AdamsAugust 16, 2016
    4.7Sarah VaughanDecember 6, 2016
    " + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__table.parsed.json b/tests/phpunit/data/blocks/fixtures/core__table.parsed.json new file mode 100644 index 0000000000000..8c24b96113b94 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__table.parsed.json @@ -0,0 +1,14 @@ +[ + { + "blockName": "core/table", + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n
    VersionMusicianDate
    .70No musician chosen.May 27, 2003
    1.0Miles DavisJanuary 3, 2004
    Lots of versions skipped, see the full list
    4.4Clifford BrownDecember 8, 2015
    4.5Coleman HawkinsApril 12, 2016
    4.6Pepper AdamsAugust 16, 2016
    4.7Sarah VaughanDecember 6, 2016
    \n" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__table.serialized.html b/tests/phpunit/data/blocks/fixtures/core__table.serialized.html new file mode 100644 index 0000000000000..a791eb149f627 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__table.serialized.html @@ -0,0 +1,3 @@ + +
    VersionMusicianDate
    .70No musician chosen.May 27, 2003
    1.0Miles DavisJanuary 3, 2004
    Lots of versions skipped, see the full list
    4.4Clifford BrownDecember 8, 2015
    4.5Coleman HawkinsApril 12, 2016
    4.6Pepper AdamsAugust 16, 2016
    4.7Sarah VaughanDecember 6, 2016
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__text-columns.html b/tests/phpunit/data/blocks/fixtures/core__text-columns.html new file mode 100644 index 0000000000000..a273839c39765 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__text-columns.html @@ -0,0 +1,10 @@ + +
    +
    +

    One

    +
    +
    +

    Two

    +
    +
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__text-columns.json b/tests/phpunit/data/blocks/fixtures/core__text-columns.json new file mode 100644 index 0000000000000..f610db9e556a7 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__text-columns.json @@ -0,0 +1,21 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/text-columns", + "isValid": true, + "attributes": { + "content": [ + { + "children": "One" + }, + { + "children": "Two" + } + ], + "columns": 2, + "width": "center" + }, + "innerBlocks": [], + "originalContent": "
    \n
    \n

    One

    \n
    \n
    \n

    Two

    \n
    \n
    " + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__text-columns.parsed.json b/tests/phpunit/data/blocks/fixtures/core__text-columns.parsed.json new file mode 100644 index 0000000000000..293c930ac59e6 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__text-columns.parsed.json @@ -0,0 +1,16 @@ +[ + { + "blockName": "core/text-columns", + "attrs": { + "width": "center" + }, + "innerBlocks": [], + "innerHTML": "\n
    \n
    \n

    One

    \n
    \n
    \n

    Two

    \n
    \n
    \n" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__text-columns.serialized.html b/tests/phpunit/data/blocks/fixtures/core__text-columns.serialized.html new file mode 100644 index 0000000000000..8ae01efcb9c9b --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__text-columns.serialized.html @@ -0,0 +1,3 @@ + +

    One

    Two

    + diff --git a/tests/phpunit/data/blocks/fixtures/core__text__converts-to-paragraph.html b/tests/phpunit/data/blocks/fixtures/core__text__converts-to-paragraph.html new file mode 100644 index 0000000000000..a1d47a56e0022 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__text__converts-to-paragraph.html @@ -0,0 +1,3 @@ + +

    This is an old-style text block. Changed to paragraph in #2135.

    + diff --git a/tests/phpunit/data/blocks/fixtures/core__text__converts-to-paragraph.json b/tests/phpunit/data/blocks/fixtures/core__text__converts-to-paragraph.json new file mode 100644 index 0000000000000..2f85e75d9af26 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__text__converts-to-paragraph.json @@ -0,0 +1,13 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/paragraph", + "isValid": true, + "attributes": { + "content": "This is an old-style text block. Changed to paragraph in #2135.", + "dropCap": false + }, + "innerBlocks": [], + "originalContent": "

    This is an old-style text block. Changed to paragraph in #2135.

    " + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__text__converts-to-paragraph.parsed.json b/tests/phpunit/data/blocks/fixtures/core__text__converts-to-paragraph.parsed.json new file mode 100644 index 0000000000000..958d2a2921327 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__text__converts-to-paragraph.parsed.json @@ -0,0 +1,14 @@ +[ + { + "blockName": "core/text", + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n

    This is an old-style text block. Changed to paragraph in #2135.

    \n" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__text__converts-to-paragraph.serialized.html b/tests/phpunit/data/blocks/fixtures/core__text__converts-to-paragraph.serialized.html new file mode 100644 index 0000000000000..61fd699dace63 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__text__converts-to-paragraph.serialized.html @@ -0,0 +1,3 @@ + +

    This is an old-style text block. Changed to paragraph in #2135.

    + diff --git a/tests/phpunit/data/blocks/fixtures/core__verse.html b/tests/phpunit/data/blocks/fixtures/core__verse.html new file mode 100644 index 0000000000000..0e6904a898ead --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__verse.html @@ -0,0 +1,3 @@ + +
    A verse
    And more!
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__verse.json b/tests/phpunit/data/blocks/fixtures/core__verse.json new file mode 100644 index 0000000000000..5c6e3d83e6516 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__verse.json @@ -0,0 +1,12 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/verse", + "isValid": true, + "attributes": { + "content": "A verse
    And more!" + }, + "innerBlocks": [], + "originalContent": "
    A verse
    And more!
    " + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__verse.parsed.json b/tests/phpunit/data/blocks/fixtures/core__verse.parsed.json new file mode 100644 index 0000000000000..4f244cb551d50 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__verse.parsed.json @@ -0,0 +1,14 @@ +[ + { + "blockName": "core/verse", + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n
    A verse
    And more!
    \n" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__verse.serialized.html b/tests/phpunit/data/blocks/fixtures/core__verse.serialized.html new file mode 100644 index 0000000000000..a601b259912a8 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__verse.serialized.html @@ -0,0 +1,3 @@ + +
    A verse
    And more!
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__video.html b/tests/phpunit/data/blocks/fixtures/core__video.html new file mode 100644 index 0000000000000..dd720ecda8bf5 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__video.html @@ -0,0 +1,3 @@ + +
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__video.json b/tests/phpunit/data/blocks/fixtures/core__video.json new file mode 100644 index 0000000000000..e91fd20c5bd8b --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__video.json @@ -0,0 +1,18 @@ +[ + { + "clientId": "_clientId_0", + "name": "core/video", + "isValid": true, + "attributes": { + "autoplay": false, + "caption": "", + "controls": true, + "loop": false, + "muted": false, + "preload": "metadata", + "src": "https://awesome-fake.video/file.mp4" + }, + "innerBlocks": [], + "originalContent": "
    " + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__video.parsed.json b/tests/phpunit/data/blocks/fixtures/core__video.parsed.json new file mode 100644 index 0000000000000..7b448d6f380d9 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__video.parsed.json @@ -0,0 +1,14 @@ +[ + { + "blockName": "core/video", + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n
    \n" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n" + } +] diff --git a/tests/phpunit/data/blocks/fixtures/core__video.serialized.html b/tests/phpunit/data/blocks/fixtures/core__video.serialized.html new file mode 100644 index 0000000000000..48dca62aecd32 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__video.serialized.html @@ -0,0 +1,3 @@ + +
    + diff --git a/tests/phpunit/tests/blocks/block-parser.php b/tests/phpunit/tests/blocks/block-parser.php new file mode 100644 index 0000000000000..3818cd9816c55 --- /dev/null +++ b/tests/phpunit/tests/blocks/block-parser.php @@ -0,0 +1,120 @@ +parse( $html ) ), true ); + + $this->assertEquals( + $expected_parsed, + $result, + "File '$parsed_json_filename' does not match expected value" + ); + } + + /** + * Helper function to remove relative paths and extension from a filename, leaving just the fixture name. + * + * @since 5.0.0 + * + * @param string $filename The filename to clean. + * @return string The cleaned fixture name. + */ + protected function clean_fixture_filename( $filename ) { + $filename = basename( $filename ); + $filename = preg_replace( '/\..+$/', '', $filename ); + return $filename; + } + + /** + * Helper function to return the filenames needed to test the parser output. + * + * @since 5.0.0 + * + * @param string $filename The cleaned fixture name. + * @return array The input and expected output filenames for that fixture. + */ + protected function pass_parser_fixture_filenames( $filename ) { + return array( + "$filename.html", + "$filename.parsed.json", + ); + } + + /** + * Helper function to remove '\r' characters from a string. + * + * @since 5.0.0 + * + * @param string $input The string to remove '\r' from. + * @return string The input string, with '\r' characters removed. + */ + protected function strip_r( $input ) { + return str_replace( "\r", '', $input ); + } + +} diff --git a/tools/webpack/packages.js b/tools/webpack/packages.js index 3040d854d76e0..9376d37e1b832 100644 --- a/tools/webpack/packages.js +++ b/tools/webpack/packages.js @@ -116,6 +116,10 @@ module.exports = function( env = { environment: 'production', watch: false } ) { 'wp-polyfill-node-contains.min.js': 'polyfill-library/polyfills/Node/prototype/contains/polyfill.js', }; + const phpFiles = { + 'block-serialization-default-parser/parser.php': 'wp-includes/class-wp-block-parser.php', + }; + const externals = { react: 'React', 'react-dom': 'ReactDOM', @@ -164,6 +168,11 @@ module.exports = function( env = { environment: 'production', watch: false } ) { } } ) ); + const phpCopies = Object.keys( phpFiles ).map( ( filename ) => ( { + from: join( baseDir, `node_modules/@wordpress/${ filename }` ), + to: join( baseDir, `src/${ phpFiles[ filename ] }` ), + } ) ); + const config = { mode, @@ -232,6 +241,7 @@ module.exports = function( env = { environment: 'production', watch: false } ) { [ ...vendorCopies, ...cssCopies, + ...phpCopies, ], ), ], From 36cc615d1551010ee5254247f1eeaf91aebfa949 Mon Sep 17 00:00:00 2001 From: Gary Pendergast Date: Thu, 18 Oct 2018 11:53:49 +0000 Subject: [PATCH 457/537] Blocks: Parse blocks when displaying posts. Posts containing blocks are now correctly handled when displaying on the front end, including dynamic blocks and nested blocks. See #45109. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43752 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/blocks.php | 115 ++++++- src/wp-includes/blocks/archives.php | 143 ++++++++ src/wp-includes/blocks/block.php | 39 +++ src/wp-includes/blocks/categories.php | 103 ++++++ src/wp-includes/blocks/latest-comments.php | 182 +++++++++++ src/wp-includes/blocks/latest-posts.php | 125 +++++++ src/wp-includes/blocks/shortcode.php | 32 ++ src/wp-includes/class-wp-block-parser.php | 21 +- src/wp-includes/default-filters.php | 1 + src/wp-includes/formatting.php | 6 + src/wp-settings.php | 6 + .../data/blocks/do-blocks-expected.html | 5 + ...ore__4-invalid-starting-letter.server.html | 1 + .../fixtures/core__archives.server.html | 1 + ...core__archives__showPostCounts.server.html | 1 + .../blocks/fixtures/core__audio.server.html | 5 + .../blocks/fixtures/core__block.server.html | 1 + .../fixtures/core__button__center.server.html | 3 + .../fixtures/core__categories.server.html | 1 + .../blocks/fixtures/core__code.server.html | 5 + .../blocks/fixtures/core__column.parsed.json | 24 +- .../blocks/fixtures/core__column.server.html | 10 + .../blocks/fixtures/core__columns.parsed.json | 76 ++++- .../blocks/fixtures/core__columns.server.html | 24 ++ .../fixtures/core__cover-image.server.html | 5 + .../blocks/fixtures/core__embed.server.html | 8 + .../core__file__new-window.server.html | 3 + ...core__file__no-download-button.server.html | 3 + .../core__file__no-text-link.server.html | 3 + .../fixtures/core__freeform.server.html | 6 + .../core__freeform__undelimited.server.html | 4 + .../blocks/fixtures/core__gallery.server.html | 14 + .../core__gallery__columns.server.html | 14 + .../fixtures/core__heading__h2-em.server.html | 3 + .../fixtures/core__heading__h2.server.html | 3 + .../blocks/fixtures/core__html.server.html | 4 + .../blocks/fixtures/core__image.server.html | 3 + .../core__image__attachment-link.server.html | 3 + .../core__image__center-caption.server.html | 3 + .../core__image__custom-link.server.html | 3 + .../core__image__media-link.server.html | 3 + .../core__invalid-Capitals.server.html | 1 + .../core__invalid-special.server.html | 1 + .../core__latest-comments.server.html | 1 + .../fixtures/core__latest-posts.server.html | 1 + ..._latest-posts__displayPostDate.server.html | 1 + .../fixtures/core__list__ul.server.html | 3 + .../blocks/fixtures/core__missing.server.html | 6 + .../blocks/fixtures/core__more.server.html | 3 + ...core__more__custom-text-teaser.server.html | 4 + .../fixtures/core__nextpage.server.html | 3 + .../core__paragraph__align-right.server.html | 3 + .../core__paragraph__deprecated.server.html | 3 + .../fixtures/core__preformatted.server.html | 3 + .../fixtures/core__pullquote.server.html | 7 + ...re__pullquote__multi-paragraph.server.html | 9 + .../fixtures/core__quote__style-1.server.html | 3 + .../fixtures/core__quote__style-2.server.html | 3 + .../fixtures/core__separator.server.html | 3 + .../fixtures/core__shortcode.server.html | 2 + .../blocks/fixtures/core__spacer.server.html | 3 + .../blocks/fixtures/core__subhead.server.html | 3 + .../blocks/fixtures/core__table.server.html | 3 + .../fixtures/core__text-columns.server.html | 10 + ...e__text__converts-to-paragraph.server.html | 3 + .../blocks/fixtures/core__verse.server.html | 3 + .../blocks/fixtures/core__video.server.html | 3 + tests/phpunit/includes/functions.php | 14 + tests/phpunit/tests/blocks/block-parser.php | 3 +- tests/phpunit/tests/blocks/render.php | 308 ++++++++++++++++++ tools/webpack/packages.js | 9 +- 71 files changed, 1415 insertions(+), 22 deletions(-) create mode 100644 src/wp-includes/blocks/archives.php create mode 100644 src/wp-includes/blocks/block.php create mode 100644 src/wp-includes/blocks/categories.php create mode 100644 src/wp-includes/blocks/latest-comments.php create mode 100644 src/wp-includes/blocks/latest-posts.php create mode 100644 src/wp-includes/blocks/shortcode.php create mode 100644 tests/phpunit/data/blocks/fixtures/core__4-invalid-starting-letter.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__archives.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__archives__showPostCounts.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__audio.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__block.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__button__center.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__categories.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__code.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__column.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__columns.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__cover-image.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__embed.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__file__new-window.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__file__no-download-button.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__file__no-text-link.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__freeform.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__freeform__undelimited.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__gallery.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__gallery__columns.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__heading__h2-em.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__heading__h2.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__html.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__image.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__image__attachment-link.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__image__center-caption.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__image__custom-link.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__image__media-link.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__invalid-Capitals.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__invalid-special.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__latest-comments.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__latest-posts.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__latest-posts__displayPostDate.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__list__ul.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__missing.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__more.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__more__custom-text-teaser.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__nextpage.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__paragraph__align-right.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__paragraph__deprecated.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__preformatted.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__pullquote.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__pullquote__multi-paragraph.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__quote__style-1.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__quote__style-2.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__separator.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__shortcode.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__spacer.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__subhead.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__table.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__text-columns.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__text__converts-to-paragraph.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__verse.server.html create mode 100644 tests/phpunit/data/blocks/fixtures/core__video.server.html create mode 100644 tests/phpunit/tests/blocks/render.php diff --git a/src/wp-includes/blocks.php b/src/wp-includes/blocks.php index 98d8f10d5c847..0bbc6a345c1c5 100644 --- a/src/wp-includes/blocks.php +++ b/src/wp-includes/blocks.php @@ -113,6 +113,44 @@ function get_dynamic_block_names() { return $dynamic_block_names; } +/** + * Remove all dynamic blocks from the given content. + * + * @since 5.0.0 + * + * @param string $content Content of the current post. + * @return string + */ +function strip_dynamic_blocks( $content ) { + return _recurse_strip_dynamic_blocks( parse_blocks( $content ) ); +} + +/** + * Helper function for strip_dynamic_blocks(), to recurse through the block tree. + * + * @since 5.0.0 + * @access private + * + * @param array $blocks Array of blocks from parse_blocks(). + * @return string HTML from the non-dynamic blocks. + */ +function _recurse_strip_dynamic_blocks( $blocks ) { + $clean_content = ''; + $dynamic_blocks = get_dynamic_block_names(); + + foreach ( $blocks as $block ) { + if ( ! in_array( $block['blockName'], $dynamic_blocks ) ) { + if ( $block['innerBlocks'] ) { + $clean_content .= _recurse_strip_dynamic_blocks( $block['innerBlocks'] ); + } else { + $clean_content .= $block['innerHTML']; + } + } + } + + return $clean_content; +} + /** * Parses blocks out of a content string. * @@ -142,10 +180,85 @@ function parse_blocks( $content ) { * * @since 5.0.0 * - * @param string $parser_class Name of block parser class + * @param string $parser_class Name of block parser class. */ $parser_class = apply_filters( 'block_parser_class', 'WP_Block_Parser' ); $parser = new $parser_class(); return $parser->parse( $content ); } + +/** + * Parses dynamic blocks out of `post_content` and re-renders them. + * + * @since 5.0.0 + * @global WP_Post $post The post to edit. + * + * @param string $content Post content. + * @return string Updated post content. + */ +function do_blocks( $content ) { + $blocks = parse_blocks( $content ); + return _recurse_do_blocks( $blocks, $blocks ); +} + +/** + * Helper function for do_blocks(), to recurse through the block tree. + * + * @since 5.0.0 + * @access private + * + * @param array $blocks Array of blocks from parse_blocks(). + * @param array $all_blocks The top level array of blocks. + * @return string The block HTML. + */ +function _recurse_do_blocks( $blocks, $all_blocks ) { + global $post; + + /* + * Back up global post, to restore after render callback. + * Allows callbacks to run new WP_Query instances without breaking the global post. + */ + $global_post = $post; + + $rendered_content = ''; + $dynamic_blocks = get_dynamic_block_names(); + + foreach ( $blocks as $block ) { + $block = (array) $block; + if ( in_array( $block['blockName'], $dynamic_blocks ) ) { + // Find registered block type. We can assume it exists since we use the + // `get_dynamic_block_names` function as a source for pattern matching. + $block_type = WP_Block_Type_Registry::get_instance()->get_registered( $block['blockName'] ); + + // Replace dynamic block with server-rendered output. + $block_content = $block_type->render( (array) $block['attrs'], $block['innerHTML'] ); + } else if ( $block['innerBlocks'] ) { + $block_content = _recurse_do_blocks( $block['innerBlocks'], $blocks ); + } else { + $block_content = $block['innerHTML']; + } + + /** + * Filters the content of a single block. + * + * During the_content, each block is parsed and added to the output individually. This filter allows + * that content to be altered immediately before it's appended. + * + * @since 5.0.0 + * + * @param string $block_content The block content about to be appended. + * @param array $block The full block, including name and attributes. + * @param array $all_blocks The array of all blocks being processed. + */ + $rendered_content .= apply_filters( 'do_block', $block_content, $block, $all_blocks ); + + // Restore global $post. + $post = $global_post; + } + + // Strip remaining block comment demarcations. + $rendered_content = preg_replace( '//m', '', $rendered_content ); + + return $rendered_content; +} \ No newline at end of file diff --git a/src/wp-includes/blocks/archives.php b/src/wp-includes/blocks/archives.php new file mode 100644 index 0000000000000..adcc61c233b7a --- /dev/null +++ b/src/wp-includes/blocks/archives.php @@ -0,0 +1,143 @@ + 'monthly', + 'format' => 'option', + 'show_post_count' => $show_post_count, + ) + ); + + $dropdown_args['echo'] = 0; + + $archives = wp_get_archives( $dropdown_args ); + + switch ( $dropdown_args['type'] ) { + case 'yearly': + $label = __( 'Select Year', 'gutenberg' ); + break; + case 'monthly': + $label = __( 'Select Month', 'gutenberg' ); + break; + case 'daily': + $label = __( 'Select Day', 'gutenberg' ); + break; + case 'weekly': + $label = __( 'Select Week', 'gutenberg' ); + break; + default: + $label = __( 'Select Post', 'gutenberg' ); + break; + } + + $label = esc_attr( $label ); + + $block_content = ' + '; + + $block_content = sprintf( + '
    %2$s
    ', + esc_attr( $class ), + $block_content + ); + } else { + + /** This filter is documented in wp-includes/widgets/class-wp-widget-archives.php */ + $archives_args = apply_filters( + 'widget_archives_args', + array( + 'type' => 'monthly', + 'show_post_count' => $show_post_count, + ) + ); + + $archives_args['echo'] = 0; + + $archives = wp_get_archives( $archives_args ); + + $classnames = esc_attr( $class ); + + if ( empty( $archives ) ) { + + $block_content = sprintf( + '
    %2$s
    ', + $classnames, + __( 'No archives to show.', 'gutenberg' ) + ); + } else { + + $block_content = sprintf( + '
      %2$s
    ', + $classnames, + $archives + ); + } + } + + return $block_content; +} + +/** + * Register archives block. + */ +function register_block_core_archives() { + register_block_type( + 'core/archives', + array( + 'attributes' => array( + 'align' => array( + 'type' => 'string', + ), + 'className' => array( + 'type' => 'string', + ), + 'displayAsDropdown' => array( + 'type' => 'boolean', + 'default' => false, + ), + 'showPostCounts' => array( + 'type' => 'boolean', + 'default' => false, + ), + ), + 'render_callback' => 'render_block_core_archives', + ) + ); +} + +add_action( 'init', 'register_block_core_archives' ); diff --git a/src/wp-includes/blocks/block.php b/src/wp-includes/blocks/block.php new file mode 100644 index 0000000000000..bc33929ac517a --- /dev/null +++ b/src/wp-includes/blocks/block.php @@ -0,0 +1,39 @@ +post_type ) { + return ''; + } + + return do_blocks( $reusable_block->post_content ); +} + +register_block_type( + 'core/block', + array( + 'attributes' => array( + 'ref' => array( + 'type' => 'number', + ), + ), + + 'render_callback' => 'render_block_core_block', + ) +); diff --git a/src/wp-includes/blocks/categories.php b/src/wp-includes/blocks/categories.php new file mode 100644 index 0000000000000..bd1175733bd41 --- /dev/null +++ b/src/wp-includes/blocks/categories.php @@ -0,0 +1,103 @@ + false, + 'hierarchical' => ! empty( $attributes['showHierarchy'] ), + 'orderby' => 'name', + 'show_count' => ! empty( $attributes['showPostCounts'] ), + 'title_li' => '', + ); + + if ( ! empty( $attributes['displayAsDropdown'] ) ) { + $id = 'wp-block-categories-' . $block_id; + $args['id'] = $id; + $args['show_option_none'] = __( 'Select Category', 'gutenberg' ); + $wrapper_markup = '
    %2$s
    '; + $items_markup = wp_dropdown_categories( $args ); + $type = 'dropdown'; + + if ( ! is_admin() ) { + $wrapper_markup .= build_dropdown_script_block_core_categories( $id ); + } + } else { + $wrapper_markup = '
      %2$s
    '; + $items_markup = wp_list_categories( $args ); + $type = 'list'; + } + + $class = "wp-block-categories wp-block-categories-{$type} align{$align}"; + + if ( isset( $attributes['className'] ) ) { + $class .= ' ' . $attributes['className']; + } + + $block_content = sprintf( + $wrapper_markup, + esc_attr( $class ), + $items_markup + ); + + return $block_content; +} + +/** + * Generates the inline script for a categories dropdown field. + * + * @param string $dropdown_id ID of the dropdown field. + * + * @return string Returns the dropdown onChange redirection script. + */ +function build_dropdown_script_block_core_categories( $dropdown_id ) { + ob_start(); + ?> + + 'render_block_core_categories', + ) + ); +} + +add_action( 'init', 'register_block_core_categories' ); diff --git a/src/wp-includes/blocks/latest-comments.php b/src/wp-includes/blocks/latest-comments.php new file mode 100644 index 0000000000000..dd310028ce145 --- /dev/null +++ b/src/wp-includes/blocks/latest-comments.php @@ -0,0 +1,182 @@ + $attributes['commentsToShow'], + 'status' => 'approve', + 'post_status' => 'publish', + ) + ) + ); + + $list_items_markup = ''; + if ( ! empty( $comments ) ) { + // Prime the cache for associated posts. This is copied from \WP_Widget_Recent_Comments::widget(). + $post_ids = array_unique( wp_list_pluck( $comments, 'comment_post_ID' ) ); + _prime_post_caches( $post_ids, strpos( get_option( 'permalink_structure' ), '%category%' ), false ); + + foreach ( $comments as $comment ) { + $list_items_markup .= '
  • '; + if ( $attributes['displayAvatar'] ) { + $avatar = get_avatar( + $comment, + 48, + '', + '', + array( + 'class' => 'wp-block-latest-comments__comment-avatar', + ) + ); + if ( $avatar ) { + $list_items_markup .= $avatar; + } + } + + $list_items_markup .= '
    '; + $list_items_markup .= ''; + if ( $attributes['displayExcerpt'] ) { + $list_items_markup .= '
    ' . wpautop( get_comment_excerpt( $comment ) ) . '
    '; + } + $list_items_markup .= '
  • '; + } + } + + $class = 'wp-block-latest-comments'; + if ( $attributes['align'] ) { + $class .= " align{$attributes['align']}"; + } + if ( $attributes['displayAvatar'] ) { + $class .= ' has-avatars'; + } + if ( $attributes['displayDate'] ) { + $class .= ' has-dates'; + } + if ( $attributes['displayExcerpt'] ) { + $class .= ' has-excerpts'; + } + if ( empty( $comments ) ) { + $class .= ' no-comments'; + } + $classnames = esc_attr( $class ); + + $block_content = ! empty( $comments ) ? sprintf( + '
      %2$s
    ', + $classnames, + $list_items_markup + ) : sprintf( + '
    %2$s
    ', + $classnames, + __( 'No comments to show.', 'gutenberg' ) + ); + + return $block_content; +} + +register_block_type( + 'core/latest-comments', + array( + 'attributes' => array( + 'className' => array( + 'type' => 'string', + ), + 'commentsToShow' => array( + 'type' => 'number', + 'default' => 5, + 'minimum' => 1, + 'maximum' => 100, + ), + 'displayAvatar' => array( + 'type' => 'boolean', + 'default' => true, + ), + 'displayDate' => array( + 'type' => 'boolean', + 'default' => true, + ), + 'displayExcerpt' => array( + 'type' => 'boolean', + 'default' => true, + ), + 'align' => array( + 'type' => 'string', + 'enum' => array( 'center', 'left', 'right', 'wide', 'full', '' ), + ), + ), + 'render_callback' => 'gutenberg_render_block_core_latest_comments', + ) +); diff --git a/src/wp-includes/blocks/latest-posts.php b/src/wp-includes/blocks/latest-posts.php new file mode 100644 index 0000000000000..070abafeb4c75 --- /dev/null +++ b/src/wp-includes/blocks/latest-posts.php @@ -0,0 +1,125 @@ + $attributes['postsToShow'], + 'post_status' => 'publish', + 'order' => $attributes['order'], + 'orderby' => $attributes['orderBy'], + 'category' => $attributes['categories'], + ) + ); + + $list_items_markup = ''; + + foreach ( $recent_posts as $post ) { + $post_id = $post['ID']; + + $title = get_the_title( $post_id ); + if ( ! $title ) { + $title = __( '(Untitled)', 'gutenberg' ); + } + $list_items_markup .= sprintf( + '
  • %2$s', + esc_url( get_permalink( $post_id ) ), + esc_html( $title ) + ); + + if ( isset( $attributes['displayPostDate'] ) && $attributes['displayPostDate'] ) { + $list_items_markup .= sprintf( + '', + esc_attr( get_the_date( 'c', $post_id ) ), + esc_html( get_the_date( '', $post_id ) ) + ); + } + + $list_items_markup .= "
  • \n"; + } + + $class = 'wp-block-latest-posts'; + if ( isset( $attributes['align'] ) ) { + $class .= ' align' . $attributes['align']; + } + + if ( isset( $attributes['postLayout'] ) && 'grid' === $attributes['postLayout'] ) { + $class .= ' is-grid'; + } + + if ( isset( $attributes['columns'] ) && 'grid' === $attributes['postLayout'] ) { + $class .= ' columns-' . $attributes['columns']; + } + + if ( isset( $attributes['className'] ) ) { + $class .= ' ' . $attributes['className']; + } + + $block_content = sprintf( + '
      %2$s
    ', + esc_attr( $class ), + $list_items_markup + ); + + return $block_content; +} + +/** + * Registers the `core/latest-posts` block on server. + */ +function register_block_core_latest_posts() { + register_block_type( + 'core/latest-posts', + array( + 'attributes' => array( + 'categories' => array( + 'type' => 'string', + ), + 'className' => array( + 'type' => 'string', + ), + 'postsToShow' => array( + 'type' => 'number', + 'default' => 5, + ), + 'displayPostDate' => array( + 'type' => 'boolean', + 'default' => false, + ), + 'postLayout' => array( + 'type' => 'string', + 'default' => 'list', + ), + 'columns' => array( + 'type' => 'number', + 'default' => 3, + ), + 'align' => array( + 'type' => 'string', + ), + 'order' => array( + 'type' => 'string', + 'default' => 'desc', + ), + 'orderBy' => array( + 'type' => 'string', + 'default' => 'date', + ), + ), + 'render_callback' => 'render_block_core_latest_posts', + ) + ); +} + +add_action( 'init', 'register_block_core_latest_posts' ); diff --git a/src/wp-includes/blocks/shortcode.php b/src/wp-includes/blocks/shortcode.php new file mode 100644 index 0000000000000..d18dd4f5828b5 --- /dev/null +++ b/src/wp-includes/blocks/shortcode.php @@ -0,0 +1,32 @@ + 'render_block_core_shortcode', + ) + ); +} + +add_action( 'init', 'register_block_core_shortcode' ); diff --git a/src/wp-includes/class-wp-block-parser.php b/src/wp-includes/class-wp-block-parser.php index 78b6921787cc4..96f1c3a0e4900 100644 --- a/src/wp-includes/class-wp-block-parser.php +++ b/src/wp-includes/class-wp-block-parser.php @@ -306,7 +306,14 @@ function proceed() { * block and add it as a new innerBlock to the parent */ $stack_top = array_pop( $this->stack ); - $stack_top->block->innerHTML .= substr( $this->document, $stack_top->prev_offset, $start_offset - $stack_top->prev_offset ); + + $html = substr( $this->document, $stack_top->prev_offset, $start_offset - $stack_top->prev_offset ); + if ( $stack_top->block->innerBlocks ) { + $stack_top->block->innerBlocks[] = (array) $this->freeform( $html ); + } else { + $stack_top->block->innerHTML = $html; + } + $stack_top->prev_offset = $start_offset + $token_length; $this->add_inner_block( @@ -440,8 +447,8 @@ function add_freeform( $length = null ) { */ function add_inner_block( WP_Block_Parser_Block $block, $token_start, $token_length, $last_offset = null ) { $parent = $this->stack[ count( $this->stack ) - 1 ]; - $parent->block->innerBlocks[] = $block; - $parent->block->innerHTML .= substr( $this->document, $parent->prev_offset, $token_start - $parent->prev_offset ); + $parent->block->innerBlocks[] = (array) $this->freeform( substr( $this->document, $parent->prev_offset, $token_start - $parent->prev_offset ) ); + $parent->block->innerBlocks[] = (array) $block; $parent->prev_offset = $last_offset ? $last_offset : $token_start + $token_length; } @@ -456,10 +463,16 @@ function add_block_from_stack( $end_offset = null ) { $stack_top = array_pop( $this->stack ); $prev_offset = $stack_top->prev_offset; - $stack_top->block->innerHTML .= isset( $end_offset ) + $html = isset( $end_offset ) ? substr( $this->document, $prev_offset, $end_offset - $prev_offset ) : substr( $this->document, $prev_offset ); + if ( $stack_top->block->innerBlocks ) { + $stack_top->block->innerBlocks[] = (array) $this->freeform( $html ); + } else { + $stack_top->block->innerHTML = $html; + } + if ( isset( $stack_top->leading_html_start ) ) { $this->output[] = (array) self::freeform( substr( $this->document, diff --git a/src/wp-includes/default-filters.php b/src/wp-includes/default-filters.php index cec310b1757c4..db41957de05fc 100644 --- a/src/wp-includes/default-filters.php +++ b/src/wp-includes/default-filters.php @@ -171,6 +171,7 @@ add_filter( 'the_title', 'convert_chars' ); add_filter( 'the_title', 'trim' ); +add_filter( 'the_content', 'do_blocks', 9 ); add_filter( 'the_content', 'wptexturize' ); add_filter( 'the_content', 'convert_smilies', 20 ); add_filter( 'the_content', 'wpautop' ); diff --git a/src/wp-includes/formatting.php b/src/wp-includes/formatting.php index fa44d2d5e6c23..59b889bf25cab 100644 --- a/src/wp-includes/formatting.php +++ b/src/wp-includes/formatting.php @@ -442,6 +442,11 @@ function wpautop( $pee, $br = true ) { if ( trim($pee) === '' ) return ''; + // We don't need to autop posts with blocks in them. + if ( has_blocks( $pee ) ) { + return $pee; + } + // Just to make things a little easier, pad the end. $pee = $pee . "\n"; @@ -3371,6 +3376,7 @@ function wp_trim_excerpt( $text = '' ) { $text = get_the_content(''); $text = strip_shortcodes( $text ); + $text = strip_dynamic_blocks( $text ); /** This filter is documented in wp-includes/post-template.php */ $text = apply_filters( 'the_content', $text ); diff --git a/src/wp-settings.php b/src/wp-settings.php index 81cc3ccb4fcdc..c0f081613005c 100644 --- a/src/wp-settings.php +++ b/src/wp-settings.php @@ -247,6 +247,12 @@ require( ABSPATH . WPINC . '/class-wp-block-type-registry.php' ); require( ABSPATH . WPINC . '/class-wp-block-parser.php' ); require( ABSPATH . WPINC . '/blocks.php' ); +require( ABSPATH . WPINC . '/blocks/archives.php' ); +require( ABSPATH . WPINC . '/blocks/block.php' ); +require( ABSPATH . WPINC . '/blocks/categories.php' ); +require( ABSPATH . WPINC . '/blocks/latest-comments.php' ); +require( ABSPATH . WPINC . '/blocks/latest-posts.php' ); +require( ABSPATH . WPINC . '/blocks/shortcode.php' ); $GLOBALS['wp_embed'] = new WP_Embed(); diff --git a/tests/phpunit/data/blocks/do-blocks-expected.html b/tests/phpunit/data/blocks/do-blocks-expected.html index 4a3dc379ef48f..f413182051334 100644 --- a/tests/phpunit/data/blocks/do-blocks-expected.html +++ b/tests/phpunit/data/blocks/do-blocks-expected.html @@ -2,13 +2,18 @@ +

    First Gutenberg Paragraph

    +

    Second Auto Paragraph

    + +

    Third Gutenberg Paragraph

    +

    Third Auto Paragraph

    [someshortcode]

    diff --git a/tests/phpunit/data/blocks/fixtures/core__4-invalid-starting-letter.server.html b/tests/phpunit/data/blocks/fixtures/core__4-invalid-starting-letter.server.html new file mode 100644 index 0000000000000..8b137891791fe --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__4-invalid-starting-letter.server.html @@ -0,0 +1 @@ + diff --git a/tests/phpunit/data/blocks/fixtures/core__archives.server.html b/tests/phpunit/data/blocks/fixtures/core__archives.server.html new file mode 100644 index 0000000000000..fc1fd58758814 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__archives.server.html @@ -0,0 +1 @@ +
    No archives to show.
    \ No newline at end of file diff --git a/tests/phpunit/data/blocks/fixtures/core__archives__showPostCounts.server.html b/tests/phpunit/data/blocks/fixtures/core__archives__showPostCounts.server.html new file mode 100644 index 0000000000000..fc1fd58758814 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__archives__showPostCounts.server.html @@ -0,0 +1 @@ +
    No archives to show.
    \ No newline at end of file diff --git a/tests/phpunit/data/blocks/fixtures/core__audio.server.html b/tests/phpunit/data/blocks/fixtures/core__audio.server.html new file mode 100644 index 0000000000000..35d42b09c22ea --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__audio.server.html @@ -0,0 +1,5 @@ + +
    + +
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__block.server.html b/tests/phpunit/data/blocks/fixtures/core__block.server.html new file mode 100644 index 0000000000000..8b137891791fe --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__block.server.html @@ -0,0 +1 @@ + diff --git a/tests/phpunit/data/blocks/fixtures/core__button__center.server.html b/tests/phpunit/data/blocks/fixtures/core__button__center.server.html new file mode 100644 index 0000000000000..bbeb7ee0a1981 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__button__center.server.html @@ -0,0 +1,3 @@ + + + diff --git a/tests/phpunit/data/blocks/fixtures/core__categories.server.html b/tests/phpunit/data/blocks/fixtures/core__categories.server.html new file mode 100644 index 0000000000000..b6684f132ae39 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__categories.server.html @@ -0,0 +1 @@ +
    • No categories
    diff --git a/tests/phpunit/data/blocks/fixtures/core__code.server.html b/tests/phpunit/data/blocks/fixtures/core__code.server.html new file mode 100644 index 0000000000000..3f7d5f37910ee --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__code.server.html @@ -0,0 +1,5 @@ + +
    export default function MyButton() {
    +	return <Button>Click Me!</Button>;
    +}
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__column.parsed.json b/tests/phpunit/data/blocks/fixtures/core__column.parsed.json index 74b53bdf6ae96..53f60ddbae4e3 100644 --- a/tests/phpunit/data/blocks/fixtures/core__column.parsed.json +++ b/tests/phpunit/data/blocks/fixtures/core__column.parsed.json @@ -3,20 +3,38 @@ "blockName": "core/column", "attrs": {}, "innerBlocks": [ + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n
    \n\t" + }, { "blockName": "core/paragraph", "attrs": {}, "innerBlocks": [], "innerHTML": "\n\t

    Column One, Paragraph One

    \n\t" }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n\t" + }, { "blockName": "core/paragraph", "attrs": {}, "innerBlocks": [], "innerHTML": "\n\t

    Column One, Paragraph Two

    \n\t" - } - ], - "innerHTML": "\n
    \n\t\n\t\n
    \n" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n
    \n" + } + ], + "innerHTML": "" }, { "blockName": null, diff --git a/tests/phpunit/data/blocks/fixtures/core__column.server.html b/tests/phpunit/data/blocks/fixtures/core__column.server.html new file mode 100644 index 0000000000000..b40bed22d1432 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__column.server.html @@ -0,0 +1,10 @@ + +
    + +

    Column One, Paragraph One

    + + +

    Column One, Paragraph Two

    + +
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__columns.parsed.json b/tests/phpunit/data/blocks/fixtures/core__columns.parsed.json index 9ec5cef66ad23..111a378aa5580 100644 --- a/tests/phpunit/data/blocks/fixtures/core__columns.parsed.json +++ b/tests/phpunit/data/blocks/fixtures/core__columns.parsed.json @@ -5,46 +5,100 @@ "columns": 3 }, "innerBlocks": [ + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n
    \n\t" + }, { "blockName": "core/column", "attrs": {}, "innerBlocks": [ - { + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n\t
    \n\t\t" + }, + { "blockName": "core/paragraph", "attrs": {}, "innerBlocks": [], "innerHTML": "\n\t\t

    Column One, Paragraph One

    \n\t\t" }, - { + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n\t\t" + }, + { "blockName": "core/paragraph", "attrs": {}, "innerBlocks": [], "innerHTML": "\n\t\t

    Column One, Paragraph Two

    \n\t\t" - } + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n\t
    \n\t" + } ], - "innerHTML": "\n\t
    \n\t\t\n\t\t\n\t
    \n\t" + "innerHTML": "" }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n\t" + }, { "blockName": "core/column", "attrs": {}, - "innerBlocks": [ - { + "innerBlocks": [ + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n\t
    \n\t\t" + }, + { "blockName": "core/paragraph", "attrs": {}, "innerBlocks": [], "innerHTML": "\n\t\t

    Column Two, Paragraph One

    \n\t\t" }, - { + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n\t\t" + }, + { "blockName": "core/paragraph", "attrs": {}, "innerBlocks": [], "innerHTML": "\n\t\t

    Column Three, Paragraph One

    \n\t\t" - } + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n\t
    \n\t" + } ], - "innerHTML": "\n\t
    \n\t\t\n\t\t\n\t
    \n\t" - } + "innerHTML": "" + }, + { + "blockName": null, + "attrs": {}, + "innerBlocks": [], + "innerHTML": "\n
    \n" + } ], - "innerHTML": "\n
    \n\t\n\t\n
    \n" + "innerHTML": "" }, { "blockName": null, diff --git a/tests/phpunit/data/blocks/fixtures/core__columns.server.html b/tests/phpunit/data/blocks/fixtures/core__columns.server.html new file mode 100644 index 0000000000000..a3d2fd14381ce --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__columns.server.html @@ -0,0 +1,24 @@ + +
    + +
    + +

    Column One, Paragraph One

    + + +

    Column One, Paragraph Two

    + +
    + + +
    + +

    Column Two, Paragraph One

    + + +

    Column Three, Paragraph One

    + +
    + +
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__cover-image.server.html b/tests/phpunit/data/blocks/fixtures/core__cover-image.server.html new file mode 100644 index 0000000000000..e9d6aca0134c6 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__cover-image.server.html @@ -0,0 +1,5 @@ + +
    +

    Guten Berg!

    +
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__embed.server.html b/tests/phpunit/data/blocks/fixtures/core__embed.server.html new file mode 100644 index 0000000000000..6210367e789e3 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__embed.server.html @@ -0,0 +1,8 @@ + +
    +
    + https://example.com/ +
    +
    Embedded content from an example URL
    +
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__file__new-window.server.html b/tests/phpunit/data/blocks/fixtures/core__file__new-window.server.html new file mode 100644 index 0000000000000..b948a1d8c2655 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__file__new-window.server.html @@ -0,0 +1,3 @@ + + + diff --git a/tests/phpunit/data/blocks/fixtures/core__file__no-download-button.server.html b/tests/phpunit/data/blocks/fixtures/core__file__no-download-button.server.html new file mode 100644 index 0000000000000..ceaf094b39fab --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__file__no-download-button.server.html @@ -0,0 +1,3 @@ + + + diff --git a/tests/phpunit/data/blocks/fixtures/core__file__no-text-link.server.html b/tests/phpunit/data/blocks/fixtures/core__file__no-text-link.server.html new file mode 100644 index 0000000000000..0110c1ac8bcef --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__file__no-text-link.server.html @@ -0,0 +1,3 @@ + + + diff --git a/tests/phpunit/data/blocks/fixtures/core__freeform.server.html b/tests/phpunit/data/blocks/fixtures/core__freeform.server.html new file mode 100644 index 0000000000000..384bea05af603 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__freeform.server.html @@ -0,0 +1,6 @@ + +Testing freeform block with some +
    + HTML content +
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__freeform__undelimited.server.html b/tests/phpunit/data/blocks/fixtures/core__freeform__undelimited.server.html new file mode 100644 index 0000000000000..2c349303c54e0 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__freeform__undelimited.server.html @@ -0,0 +1,4 @@ +Testing freeform block with some +
    + HTML content +
    diff --git a/tests/phpunit/data/blocks/fixtures/core__gallery.server.html b/tests/phpunit/data/blocks/fixtures/core__gallery.server.html new file mode 100644 index 0000000000000..da1d17deab4ee --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__gallery.server.html @@ -0,0 +1,14 @@ + + + diff --git a/tests/phpunit/data/blocks/fixtures/core__gallery__columns.server.html b/tests/phpunit/data/blocks/fixtures/core__gallery__columns.server.html new file mode 100644 index 0000000000000..f801a973714bb --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__gallery__columns.server.html @@ -0,0 +1,14 @@ + + + diff --git a/tests/phpunit/data/blocks/fixtures/core__heading__h2-em.server.html b/tests/phpunit/data/blocks/fixtures/core__heading__h2-em.server.html new file mode 100644 index 0000000000000..b67b8225a5aa2 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__heading__h2-em.server.html @@ -0,0 +1,3 @@ + +

    The Inserter Tool

    + diff --git a/tests/phpunit/data/blocks/fixtures/core__heading__h2.server.html b/tests/phpunit/data/blocks/fixtures/core__heading__h2.server.html new file mode 100644 index 0000000000000..d0ea06ef06c62 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__heading__h2.server.html @@ -0,0 +1,3 @@ + +

    A picture is worth a thousand words, or so the saying goes

    + diff --git a/tests/phpunit/data/blocks/fixtures/core__html.server.html b/tests/phpunit/data/blocks/fixtures/core__html.server.html new file mode 100644 index 0000000000000..819264ffec3fa --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__html.server.html @@ -0,0 +1,4 @@ + +

    Some HTML code

    +This text will scroll from right to left + diff --git a/tests/phpunit/data/blocks/fixtures/core__image.server.html b/tests/phpunit/data/blocks/fixtures/core__image.server.html new file mode 100644 index 0000000000000..39d6cec9b9a80 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__image.server.html @@ -0,0 +1,3 @@ + +
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__image__attachment-link.server.html b/tests/phpunit/data/blocks/fixtures/core__image__attachment-link.server.html new file mode 100644 index 0000000000000..be53c433102f4 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__image__attachment-link.server.html @@ -0,0 +1,3 @@ + +
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__image__center-caption.server.html b/tests/phpunit/data/blocks/fixtures/core__image__center-caption.server.html new file mode 100644 index 0000000000000..4f62db196741b --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__image__center-caption.server.html @@ -0,0 +1,3 @@ + +
    Give it a try. Press the "really wide" button on the image toolbar.
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__image__custom-link.server.html b/tests/phpunit/data/blocks/fixtures/core__image__custom-link.server.html new file mode 100644 index 0000000000000..a4a580543b710 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__image__custom-link.server.html @@ -0,0 +1,3 @@ + +
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__image__media-link.server.html b/tests/phpunit/data/blocks/fixtures/core__image__media-link.server.html new file mode 100644 index 0000000000000..9ed77f1138ad2 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__image__media-link.server.html @@ -0,0 +1,3 @@ + +
    + diff --git a/tests/phpunit/data/blocks/fixtures/core__invalid-Capitals.server.html b/tests/phpunit/data/blocks/fixtures/core__invalid-Capitals.server.html new file mode 100644 index 0000000000000..8b137891791fe --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__invalid-Capitals.server.html @@ -0,0 +1 @@ + diff --git a/tests/phpunit/data/blocks/fixtures/core__invalid-special.server.html b/tests/phpunit/data/blocks/fixtures/core__invalid-special.server.html new file mode 100644 index 0000000000000..8b137891791fe --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__invalid-special.server.html @@ -0,0 +1 @@ + diff --git a/tests/phpunit/data/blocks/fixtures/core__latest-comments.server.html b/tests/phpunit/data/blocks/fixtures/core__latest-comments.server.html new file mode 100644 index 0000000000000..17ac04fb9fbc7 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__latest-comments.server.html @@ -0,0 +1 @@ +
    No comments to show.
    diff --git a/tests/phpunit/data/blocks/fixtures/core__latest-posts.server.html b/tests/phpunit/data/blocks/fixtures/core__latest-posts.server.html new file mode 100644 index 0000000000000..b671f3d6abbf6 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__latest-posts.server.html @@ -0,0 +1 @@ +
      diff --git a/tests/phpunit/data/blocks/fixtures/core__latest-posts__displayPostDate.server.html b/tests/phpunit/data/blocks/fixtures/core__latest-posts__displayPostDate.server.html new file mode 100644 index 0000000000000..b671f3d6abbf6 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__latest-posts__displayPostDate.server.html @@ -0,0 +1 @@ +
        diff --git a/tests/phpunit/data/blocks/fixtures/core__list__ul.server.html b/tests/phpunit/data/blocks/fixtures/core__list__ul.server.html new file mode 100644 index 0000000000000..0c558ef41357c --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__list__ul.server.html @@ -0,0 +1,3 @@ + +
        • Text & Headings
        • Images & Videos
        • Galleries
        • Embeds, like YouTube, Tweets, or other WordPress posts.
        • Layout blocks, like Buttons, Hero Images, Separators, etc.
        • And Lists like this one of course :)
        + diff --git a/tests/phpunit/data/blocks/fixtures/core__missing.server.html b/tests/phpunit/data/blocks/fixtures/core__missing.server.html new file mode 100644 index 0000000000000..7862abe71fd3a --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__missing.server.html @@ -0,0 +1,6 @@ + +

        Testing missing block with some

        +
        + HTML content +
        + diff --git a/tests/phpunit/data/blocks/fixtures/core__more.server.html b/tests/phpunit/data/blocks/fixtures/core__more.server.html new file mode 100644 index 0000000000000..cbba8ef27b2a6 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__more.server.html @@ -0,0 +1,3 @@ + + + diff --git a/tests/phpunit/data/blocks/fixtures/core__more__custom-text-teaser.server.html b/tests/phpunit/data/blocks/fixtures/core__more__custom-text-teaser.server.html new file mode 100644 index 0000000000000..65cd03d8d6322 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__more__custom-text-teaser.server.html @@ -0,0 +1,4 @@ + + + + diff --git a/tests/phpunit/data/blocks/fixtures/core__nextpage.server.html b/tests/phpunit/data/blocks/fixtures/core__nextpage.server.html new file mode 100644 index 0000000000000..69cf437029cdb --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__nextpage.server.html @@ -0,0 +1,3 @@ + + + diff --git a/tests/phpunit/data/blocks/fixtures/core__paragraph__align-right.server.html b/tests/phpunit/data/blocks/fixtures/core__paragraph__align-right.server.html new file mode 100644 index 0000000000000..1db164ca1fb5b --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__paragraph__align-right.server.html @@ -0,0 +1,3 @@ + +

        ... like this one, which is separate from the above and right aligned.

        + diff --git a/tests/phpunit/data/blocks/fixtures/core__paragraph__deprecated.server.html b/tests/phpunit/data/blocks/fixtures/core__paragraph__deprecated.server.html new file mode 100644 index 0000000000000..d029bd55a5ace --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__paragraph__deprecated.server.html @@ -0,0 +1,3 @@ + +Unwrapped is still valid. + diff --git a/tests/phpunit/data/blocks/fixtures/core__preformatted.server.html b/tests/phpunit/data/blocks/fixtures/core__preformatted.server.html new file mode 100644 index 0000000000000..438c162aacf65 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__preformatted.server.html @@ -0,0 +1,3 @@ + +
        Some preformatted text...
        And more!
        + diff --git a/tests/phpunit/data/blocks/fixtures/core__pullquote.server.html b/tests/phpunit/data/blocks/fixtures/core__pullquote.server.html new file mode 100644 index 0000000000000..8103cf6f39b95 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__pullquote.server.html @@ -0,0 +1,7 @@ + +
        +
        +

        Testing pullquote block...

        ...with a caption +
        +
        + diff --git a/tests/phpunit/data/blocks/fixtures/core__pullquote__multi-paragraph.server.html b/tests/phpunit/data/blocks/fixtures/core__pullquote__multi-paragraph.server.html new file mode 100644 index 0000000000000..b1d0053742507 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__pullquote__multi-paragraph.server.html @@ -0,0 +1,9 @@ + +
        +
        +

        Paragraph one

        +

        Paragraph two

        + by whomever +
        +
        + diff --git a/tests/phpunit/data/blocks/fixtures/core__quote__style-1.server.html b/tests/phpunit/data/blocks/fixtures/core__quote__style-1.server.html new file mode 100644 index 0000000000000..369cebb77dbee --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__quote__style-1.server.html @@ -0,0 +1,3 @@ + +

        The editor will endeavour to create a new page and post building experience that makes writing rich posts effortless, and has “blocks” to make it easy what today might take shortcodes, custom HTML, or “mystery meat” embed discovery.

        Matt Mullenweg, 2017
        + diff --git a/tests/phpunit/data/blocks/fixtures/core__quote__style-2.server.html b/tests/phpunit/data/blocks/fixtures/core__quote__style-2.server.html new file mode 100644 index 0000000000000..f75ac8088bedd --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__quote__style-2.server.html @@ -0,0 +1,3 @@ + +

        There is no greater agony than bearing an untold story inside you.

        Maya Angelou
        + diff --git a/tests/phpunit/data/blocks/fixtures/core__separator.server.html b/tests/phpunit/data/blocks/fixtures/core__separator.server.html new file mode 100644 index 0000000000000..3e79e2620f0bf --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__separator.server.html @@ -0,0 +1,3 @@ + +
        + diff --git a/tests/phpunit/data/blocks/fixtures/core__shortcode.server.html b/tests/phpunit/data/blocks/fixtures/core__shortcode.server.html new file mode 100644 index 0000000000000..eb3661f8113f2 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__shortcode.server.html @@ -0,0 +1,2 @@ +

        [gallery ids="238,338"]

        + diff --git a/tests/phpunit/data/blocks/fixtures/core__spacer.server.html b/tests/phpunit/data/blocks/fixtures/core__spacer.server.html new file mode 100644 index 0000000000000..e0302d2a895c1 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__spacer.server.html @@ -0,0 +1,3 @@ + + + diff --git a/tests/phpunit/data/blocks/fixtures/core__subhead.server.html b/tests/phpunit/data/blocks/fixtures/core__subhead.server.html new file mode 100644 index 0000000000000..bddf91f11ec1c --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__subhead.server.html @@ -0,0 +1,3 @@ + +

        This is a subhead.

        + diff --git a/tests/phpunit/data/blocks/fixtures/core__table.server.html b/tests/phpunit/data/blocks/fixtures/core__table.server.html new file mode 100644 index 0000000000000..561dde6adccd2 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__table.server.html @@ -0,0 +1,3 @@ + +
        VersionMusicianDate
        .70No musician chosen.May 27, 2003
        1.0Miles DavisJanuary 3, 2004
        Lots of versions skipped, see the full list
        4.4Clifford BrownDecember 8, 2015
        4.5Coleman HawkinsApril 12, 2016
        4.6Pepper AdamsAugust 16, 2016
        4.7Sarah VaughanDecember 6, 2016
        + diff --git a/tests/phpunit/data/blocks/fixtures/core__text-columns.server.html b/tests/phpunit/data/blocks/fixtures/core__text-columns.server.html new file mode 100644 index 0000000000000..3fcbb7df04631 --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__text-columns.server.html @@ -0,0 +1,10 @@ + +
        +
        +

        One

        +
        +
        +

        Two

        +
        +
        + diff --git a/tests/phpunit/data/blocks/fixtures/core__text__converts-to-paragraph.server.html b/tests/phpunit/data/blocks/fixtures/core__text__converts-to-paragraph.server.html new file mode 100644 index 0000000000000..2907dab577f6c --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__text__converts-to-paragraph.server.html @@ -0,0 +1,3 @@ + +

        This is an old-style text block. Changed to paragraph in #2135.

        + diff --git a/tests/phpunit/data/blocks/fixtures/core__verse.server.html b/tests/phpunit/data/blocks/fixtures/core__verse.server.html new file mode 100644 index 0000000000000..7903ff845d12e --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__verse.server.html @@ -0,0 +1,3 @@ + +
        A verse
        And more!
        + diff --git a/tests/phpunit/data/blocks/fixtures/core__video.server.html b/tests/phpunit/data/blocks/fixtures/core__video.server.html new file mode 100644 index 0000000000000..e46e3a2621aec --- /dev/null +++ b/tests/phpunit/data/blocks/fixtures/core__video.server.html @@ -0,0 +1,3 @@ + +
        + diff --git a/tests/phpunit/includes/functions.php b/tests/phpunit/includes/functions.php index 928fcd912fa16..c8b4dc0cfda58 100644 --- a/tests/phpunit/includes/functions.php +++ b/tests/phpunit/includes/functions.php @@ -182,3 +182,17 @@ function _upload_dir_https( $uploads ) { // Skip `setcookie` calls in auth_cookie functions due to warning: // Cannot modify header information - headers already sent by ... tests_add_filter( 'send_auth_cookies', '__return_false' ); + +/** + * After the init action has been run once, trying to re-register block types can cause + * _doing_it_wrong warnings. To avoid this, unhook the block registration functions. + * + * @since 5.0.0 + */ +function _unhook_block_registration() { + remove_action( 'init', 'register_block_core_archives' ); + remove_action( 'init', 'register_block_core_categories' ); + remove_action( 'init', 'register_block_core_latest_posts' ); + remove_action( 'init', 'register_block_core_shortcode' ); +} +tests_add_filter( 'init', '_unhook_block_registration', 1000 ); diff --git a/tests/phpunit/tests/blocks/block-parser.php b/tests/phpunit/tests/blocks/block-parser.php index 3818cd9816c55..8ab5b6b536ee0 100644 --- a/tests/phpunit/tests/blocks/block-parser.php +++ b/tests/phpunit/tests/blocks/block-parser.php @@ -59,7 +59,7 @@ public function test_default_parser_output( $html_filename, $parsed_json_filenam foreach ( array( $html_path, $parsed_json_path ) as $filename ) { if ( ! file_exists( $filename ) ) { - //throw new Exception( "Missing fixture file: '$filename'" ); + throw new Exception( "Missing fixture file: '$filename'" ); } } @@ -116,5 +116,4 @@ protected function pass_parser_fixture_filenames( $filename ) { protected function strip_r( $input ) { return str_replace( "\r", '', $input ); } - } diff --git a/tests/phpunit/tests/blocks/render.php b/tests/phpunit/tests/blocks/render.php new file mode 100644 index 0000000000000..86aedccba4307 --- /dev/null +++ b/tests/phpunit/tests/blocks/render.php @@ -0,0 +1,308 @@ +test_block_instance_number = 0; + + $registry = WP_Block_Type_Registry::get_instance(); + if ( $registry->is_registered( 'core/test' ) ) { + $registry->unregister( 'core/test' ); + } + } + + /** + * @ticket 45109 + */ + public function test_do_blocks_removes_comments() { + $original_html = file_get_contents( DIR_TESTDATA . '/blocks/do-blocks-original.html' ); + $expected_html = file_get_contents( DIR_TESTDATA . '/blocks/do-blocks-expected.html' ); + + $actual_html = do_blocks( $original_html ); + + $this->assertEquals( $expected_html, $actual_html ); + } + + /** + * @ticket 45109 + */ + public function test_the_content() { + add_shortcode( 'someshortcode', array( $this, 'handle_shortcode' ) ); + + $classic_content = "Foo\n\n[someshortcode]\n\nBar\n\n[/someshortcode]\n\nBaz"; + $block_content = "\n

        Foo

        \n\n\n[someshortcode]\n\nBar\n\n[/someshortcode]\n\n\n

        Baz

        \n"; + + $classic_filtered_content = apply_filters( 'the_content', $classic_content ); + $block_filtered_content = apply_filters( 'the_content', $block_content ); + + // Block rendering add some extra blank lines, but we're not worried about them. + $block_filtered_content = preg_replace( "/\n{2,}/", "\n", $block_filtered_content ); + + $this->assertEquals( $classic_filtered_content, $block_filtered_content ); + } + + function handle_shortcode( $atts, $content ) { + return $content; + } + + /** + * @ticket 45109 + */ + public function data_do_block_test_filenames() { + self::$fixtures_dir = DIR_TESTDATA . '/blocks/fixtures'; + + $fixture_filenames = array_merge( + glob( self::$fixtures_dir . '/*.json' ), + glob( self::$fixtures_dir . '/*.html' ) + ); + + $fixture_filenames = array_values( + array_unique( + array_map( + array( $this, 'clean_fixture_filename' ), + $fixture_filenames + ) + ) + ); + + return array_map( + array( $this, 'pass_parser_fixture_filenames' ), + $fixture_filenames + ); } + + /** + * @dataProvider data_do_block_test_filenames + * @ticket 45109 + */ + public function test_do_block_output( $html_filename, $server_html_filename ) { + $html_path = self::$fixtures_dir . '/' . $html_filename; + $server_html_path = self::$fixtures_dir . '/' . $server_html_filename; + + foreach ( array( $html_path, $server_html_path ) as $filename ) { + if ( ! file_exists( $filename ) ) { + throw new Exception( "Missing fixture file: '$filename'" ); + } + } + + $html = do_blocks( self::strip_r( file_get_contents( $html_path ) ) ); + $expected_html = self::strip_r( file_get_contents( $server_html_path ) ); + + $this->assertEquals( + $expected_html, + $html, + "File '$html_path' does not match expected value" + ); + } + + /** + * @ticket 45109 + */ + public function test_dynamic_block_rendering() { + $settings = array( + 'render_callback' => array( + $this, + 'render_test_block', + ), + ); + register_block_type( 'core/test', $settings ); + + // The duplicated dynamic blocks below are there to ensure that do_blocks() replaces each one-by-one. + $post_content = + 'before' . + '' . + '' . + 'between' . + '' . + '' . + 'after'; + + $updated_post_content = do_blocks( $post_content ); + $this->assertEquals( + $updated_post_content, + 'before' . + '1:b1' . + '2:b1' . + 'between' . + '3:b2' . + '4:b2' . + 'after' + ); + } + + /** + * @ticket 45109 + */ + public function test_global_post_persistence() { + global $post; + + register_block_type( + 'core/test', + array( + 'render_callback' => array( + $this, + 'render_test_block_wp_query', + ), + ) + ); + + $posts = self::factory()->post->create_many( 5 ); + $post = get_post( end( $posts ) ); + + $global_post = $post; + do_blocks( '' ); + + $this->assertEquals( $global_post, $post ); + } + + /** + * @ticket 45109 + */ + public function test_dynamic_block_renders_string() { + $settings = array( + 'render_callback' => array( + $this, + 'render_test_block_numeric', + ), + ); + + register_block_type( 'core/test', $settings ); + $block_type = new WP_Block_Type( 'core/test', $settings ); + + $rendered = $block_type->render(); + + $this->assertSame( '10', $rendered ); + $this->assertInternalType( 'string', $rendered ); + } + + /** + * Helper function to remove relative paths and extension from a filename, leaving just the fixture name. + * + * @since 5.0.0 + * + * @param string $filename The filename to clean. + * @return string The cleaned fixture name. + */ + protected function clean_fixture_filename( $filename ) { + $filename = basename( $filename ); + $filename = preg_replace( '/\..+$/', '', $filename ); + return $filename; + } + + /** + * Helper function to return the filenames needed to test the parser output. + * + * @since 5.0.0 + * + * @param string $filename The cleaned fixture name. + * @return array The input and expected output filenames for that fixture. + */ + protected function pass_parser_fixture_filenames( $filename ) { + return array( + "$filename.html", + "$filename.server.html", + ); + } + + /** + * Helper function to remove '\r' characters from a string. + * + * @since 5.0.0 + * + * @param string $input The string to remove '\r' from. + * @return string The input string, with '\r' characters removed. + */ + protected function strip_r( $input ) { + return str_replace( "\r", '', $input ); + } + + /** + * Test block rendering function. + * + * @since 5.0.0 + * + * @param array $attributes Block attributes. + * @return string Block output. + */ + public function render_test_block( $attributes ) { + $this->test_block_instance_number += 1; + return $this->test_block_instance_number . ':' . $attributes['value']; + } + + /** + * Test block rendering function, returning numeric value. + * + * @since 5.0.0 + * + * @return int Block output. + */ + public function render_test_block_numeric() { + return 10; + } + + /** + * Test block rendering function, creating a new WP_Query instance. + * + * @since 5.0.0 + * + * @return string Block output. + */ + public function render_test_block_wp_query() { + $content = ''; + $recent = new WP_Query( array( + 'numberposts' => 10, + 'orderby' => 'ID', + 'order' => 'DESC', + 'post_type' => 'post', + 'post_status' => 'draft, publish, future, pending, private', + 'suppress_filters' => true, + ) ); + + while ( $recent->have_posts() ) { + $recent->the_post(); + + $content .= get_the_title(); + } + + wp_reset_postdata(); + + return $content; + } + +} diff --git a/tools/webpack/packages.js b/tools/webpack/packages.js index 9376d37e1b832..c9842cb55cf27 100644 --- a/tools/webpack/packages.js +++ b/tools/webpack/packages.js @@ -117,7 +117,14 @@ module.exports = function( env = { environment: 'production', watch: false } ) { }; const phpFiles = { - 'block-serialization-default-parser/parser.php': 'wp-includes/class-wp-block-parser.php', + // Parser shouldn't be copied until nested block issues are resolved. + // 'block-serialization-default-parser/parser.php': 'wp-includes/class-wp-block-parser.php', + 'block-library/src/archives/index.php': 'wp-includes/blocks/archives.php', + 'block-library/src/block/index.php': 'wp-includes/blocks/block.php', + 'block-library/src/categories/index.php': 'wp-includes/blocks/categories.php', + 'block-library/src/latest-comments/index.php': 'wp-includes/blocks/latest-comments.php', + 'block-library/src/latest-posts/index.php': 'wp-includes/blocks/latest-posts.php', + 'block-library/src/shortcode/index.php': 'wp-includes/blocks/shortcode.php', }; const externals = { From 4a2af25a29ae2f8e3c285d5bc17a7409538fb059 Mon Sep 17 00:00:00 2001 From: Anton Timmermans Date: Thu, 18 Oct 2018 13:21:03 +0000 Subject: [PATCH 458/537] Script loading: Fix regression after [43738]. After [43738], TinyMCE would be loaded earlier than before, which makes filters run at a different time relative to the loading of TinyMCE. Fix this by calling `wp_print_scripts` at the location where TinyMCE would previously be inserted as a `\n"; } diff --git a/src/wp-includes/script-loader.php b/src/wp-includes/script-loader.php index fb6569a6366f7..109eea66f5377 100644 --- a/src/wp-includes/script-loader.php +++ b/src/wp-includes/script-loader.php @@ -670,7 +670,7 @@ function wp_default_scripts( &$scripts ) { $scripts->add( 'colorpicker', "/wp-includes/js/colorpicker$suffix.js", array('prototype'), '3517m' ); - $scripts->add( 'editor', "/wp-admin/js/editor$suffix.js", array('wp-tinymce','utils','jquery'), false, 1 ); + $scripts->add( 'editor', "/wp-admin/js/editor$suffix.js", array('utils','jquery'), false, 1 ); // Back-compat for old DFW. To-do: remove at the end of 2016. $scripts->add( 'wp-fullscreen-stub', "/wp-admin/js/wp-fullscreen-stub$suffix.js", array(), false, 1 ); From 617383707179c6371f33c20564da2defd0b8e4b8 Mon Sep 17 00:00:00 2001 From: Anton Timmermans Date: Thu, 18 Oct 2018 13:26:12 +0000 Subject: [PATCH 459/537] Script loading: Fix a PHP error introduced in [43753]. See #45065. Props swissspidy. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43754 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/class-wp-editor.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wp-includes/class-wp-editor.php b/src/wp-includes/class-wp-editor.php index 38117c4d71bb2..2de6e97a738d7 100644 --- a/src/wp-includes/class-wp-editor.php +++ b/src/wp-includes/class-wp-editor.php @@ -1425,7 +1425,7 @@ public static function print_tinymce_scripts() { script_concat_settings(); } - wp_print_scripts( [ 'wp-tinymce' ] ); + wp_print_scripts( array( 'wp-tinymce' ) ); echo "\n"; } From b11a2cf987ebf669108b0742de153116b6a9e73c Mon Sep 17 00:00:00 2001 From: Daniel Bachhuber Date: Thu, 18 Oct 2018 20:25:47 +0000 Subject: [PATCH 460/537] REST API: Fix permissions error message in post statuses controller. The permissions error message when a request tries to fetch post statuses unauthenticated is incorrect. It was a copy/paste from elsewhere, as indicated by the use of "in this post type" where this is no post type referenced. Props schlessera. Merges [42356] to the 5.0 branch. Fixes #42303. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43755 602fd350-edb4-49c9-b593-d223f7449a82 --- .../endpoints/class-wp-rest-post-statuses-controller.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php index afb57c801d7e7..4d26e27ea8e46 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php @@ -81,7 +81,7 @@ public function get_items_permissions_check( $request ) { return true; } } - return new WP_Error( 'rest_cannot_view', __( 'Sorry, you are not allowed to edit posts in this post type.' ), array( 'status' => rest_authorization_required_code() ) ); + return new WP_Error( 'rest_cannot_view', __( 'Sorry, you are not allowed to manage post statuses.' ), array( 'status' => rest_authorization_required_code() ) ); } return true; From 111a9eaaf9c3d981be97d203ffaecc4a8742ba72 Mon Sep 17 00:00:00 2001 From: Daniel Bachhuber Date: Thu, 18 Oct 2018 20:31:58 +0000 Subject: [PATCH 461/537] REST API: Correct HTTP status code in error for requests to create a duplicate term. The 409 error code is intended for situations where it is expected that the user will resolve the conflict and resubmit the same request. We use 400 error codes for other routes when a duplicate request is made. The 400 status code tells the user they need to modify their request for it to be successful. Props shooper. Merges [42354] to the 5.0 branch. Fixes #42781. See #41370. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43756 602fd350-edb4-49c9-b593-d223f7449a82 --- .../rest-api/endpoints/class-wp-rest-terms-controller.php | 2 +- tests/phpunit/tests/rest-api/rest-categories-controller.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php index a085b4b0369bc..c6d9da6d54230 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php @@ -418,7 +418,7 @@ public function create_item( $request ) { if ( $term_id = $term->get_error_data( 'term_exists' ) ) { $existing_term = get_term( $term_id, $this->taxonomy ); $term->add_data( $existing_term->term_id, 'term_exists' ); - $term->add_data( array( 'status' => 409, 'term_id' => $term_id ) ); + $term->add_data( array( 'status' => 400, 'term_id' => $term_id ) ); } return $term; diff --git a/tests/phpunit/tests/rest-api/rest-categories-controller.php b/tests/phpunit/tests/rest-api/rest-categories-controller.php index 43101a5e671c2..12fb35bec8669 100644 --- a/tests/phpunit/tests/rest-api/rest-categories-controller.php +++ b/tests/phpunit/tests/rest-api/rest-categories-controller.php @@ -697,7 +697,7 @@ public function test_create_item_term_already_exists() { $request->set_param( 'name', 'Existing' ); $response = $this->server->dispatch( $request ); - $this->assertEquals( 409, $response->get_status() ); + $this->assertEquals( 400, $response->get_status() ); $data = $response->get_data(); $this->assertEquals( 'term_exists', $data['code'] ); $this->assertEquals( $existing_id, (int) $data['data']['term_id'] ); From 93817f5e000672b047e571416a3c78ead721a96b Mon Sep 17 00:00:00 2001 From: Daniel Bachhuber Date: Thu, 18 Oct 2018 20:48:17 +0000 Subject: [PATCH 462/537] REST API: generate a valid fallback URI in wp.api.utils.getRootURL. When window.location.origin isn't set, correctly insert two slashes between the protocol and host when constructing the fallback URL. Props abdullahramzan. Merges [43566] into the 5.0 branch. Fixes #44764. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43757 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/js/wp-api.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wp-includes/js/wp-api.js b/src/wp-includes/js/wp-api.js index 5c8a90654b4ef..1986abfa85ed9 100644 --- a/src/wp-includes/js/wp-api.js +++ b/src/wp-includes/js/wp-api.js @@ -141,7 +141,7 @@ wp.api.utils.getRootUrl = function() { return window.location.origin ? window.location.origin + '/' : - window.location.protocol + '/' + window.location.host + '/'; + window.location.protocol + '//' + window.location.host + '/'; }; /** From fddc8d981869047a763106aa2feea56935d7736d Mon Sep 17 00:00:00 2001 From: Gary Pendergast Date: Fri, 19 Oct 2018 01:42:15 +0000 Subject: [PATCH 463/537] Classic Editor: Disable the wpautop TinyMCE plugin on block posts. As the block editor adds its own `

        ` tags, disabling the wpautop stops the classic editor from removing them. See #45113. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43758 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/class-wp-editor.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/wp-includes/class-wp-editor.php b/src/wp-includes/class-wp-editor.php index 2de6e97a738d7..b085592754f82 100644 --- a/src/wp-includes/class-wp-editor.php +++ b/src/wp-includes/class-wp-editor.php @@ -81,7 +81,8 @@ public static function parse_settings( $editor_id, $settings ) { $settings = apply_filters( 'wp_editor_settings', $settings, $editor_id ); $set = wp_parse_args( $settings, array( - 'wpautop' => true, + // Disable autop if the current post has blocks in it. + 'wpautop' => ! has_blocks(), 'media_buttons' => true, 'default_editor' => '', 'drag_drop_upload' => false, From d73d13e9a00c415a9295073165f0b594f8d124a6 Mon Sep 17 00:00:00 2001 From: Gary Pendergast Date: Fri, 19 Oct 2018 05:51:07 +0000 Subject: [PATCH 464/537] i18n: Add the `wp_get_jed_locale_data()` function. This function formats locale information to be used by Jed. Props desrosj. See #45111. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43759 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/l10n.php | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/wp-includes/l10n.php b/src/wp-includes/l10n.php index a273b0c6ddbaf..0ee9c46f2e0b5 100644 --- a/src/wp-includes/l10n.php +++ b/src/wp-includes/l10n.php @@ -1332,3 +1332,32 @@ function is_locale_switched() { return $wp_locale_switcher->is_switched(); } + +/** + * Returns Jed-formatted localization data. + * + * @since 5.0.0 + * + * @param string $domain Translation domain. + * @return array Jed-formatted localization data. + */ +function wp_get_jed_locale_data( $domain ) { + $translations = get_translations_for_domain( $domain ); + + $locale = array( + '' => array( + 'domain' => $domain, + 'lang' => is_admin() ? get_user_locale() : get_locale(), + ), + ); + + if ( ! empty( $translations->headers['Plural-Forms'] ) ) { + $locale['']['plural_forms'] = $translations->headers['Plural-Forms']; + } + + foreach ( $translations->entries as $msgid => $entry ) { + $locale[ $msgid ] = $entry->translations; + } + + return $locale; +} From fd21d0aa52c17abf3e8aecb3b45729df57538fec Mon Sep 17 00:00:00 2001 From: Gary Pendergast Date: Fri, 19 Oct 2018 06:05:13 +0000 Subject: [PATCH 465/537] Build Tools: Copy package JavaScript and CSS into `wp-includes`. - `grunt webpack:dev` now copies packages JS into `/src/wp-includes/js/dist`, and CSS into `/src/wp-includes/css/dist`. - `grunt webpack:prod` does the same, but into `/build` instead of `/src`. - `grunt build` now runs the `webpack:prod` task. Props atimmer, pento. Fixes #45119. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43760 602fd350-edb4-49c9-b593-d223f7449a82 --- .gitignore | 2 ++ Gruntfile.js | 1 + src/wp-includes/script-loader.php | 10 +++++----- tools/webpack/packages.js | 20 +++++++++++--------- 4 files changed, 19 insertions(+), 14 deletions(-) diff --git a/.gitignore b/.gitignore index 785ce9dd23477..8cb18f4d7b59c 100644 --- a/.gitignore +++ b/.gitignore @@ -18,6 +18,8 @@ wp-tests-config.php /wp-cli.local.yml /jsdoc /vendor +/src/wp-includes/js/dist +/src/wp-includes/css/dist # Files and folders that get created in wp-content /src/wp-content/blogs.dir diff --git a/Gruntfile.js b/Gruntfile.js index 721aee507e721..778addae15cb0 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -935,6 +935,7 @@ module.exports = function(grunt) { 'includes:emoji', 'includes:embed', 'usebanner', + 'webpack:prod', 'jsvalidate:build' ] ); diff --git a/src/wp-includes/script-loader.php b/src/wp-includes/script-loader.php index 109eea66f5377..dcc167e19f1aa 100644 --- a/src/wp-includes/script-loader.php +++ b/src/wp-includes/script-loader.php @@ -96,7 +96,7 @@ function wp_default_packages_vendor( &$scripts ) { $dependencies = array(); } - $path = "/js/dist/vendor/$handle$dev_suffix.js"; + $path = "/wp-includes/js/dist/vendor/$handle$dev_suffix.js"; $scripts->add( $handle, $path, $dependencies, false, 1 ); } @@ -337,7 +337,7 @@ function wp_default_packages_scripts( &$scripts ) { foreach ( $packages_dependencies as $package => $dependencies ) { $handle = 'wp-' . $package; - $path = "/js/dist/$package$suffix.js"; + $path = "/wp-includes/js/dist/$package$suffix.js"; $scripts->add( $handle, $path, $dependencies, false, 1 ); } @@ -1607,12 +1607,12 @@ function wp_default_styles( &$styles ) { } $styles->add( 'wp-editor-font', $fonts_url ); - $styles->add( 'wp-block-library-theme', '/styles/dist/block-library/theme.css' ); + $styles->add( 'wp-block-library-theme', '/wp-includes/css/dist/block-library/theme.css' ); $styles->add_data( 'wp-block-library-theme', 'rtl', 'replace' ); $styles->add( 'wp-edit-blocks', - '/styles/dist/block-library/editor.css', + '/wp-includes/css/dist/block-library/editor.css', array( 'wp-components', 'wp-editor', @@ -1633,7 +1633,7 @@ function wp_default_styles( &$styles ) { foreach ( $package_styles as $package => $dependencies ) { $handle = 'wp-' . $package; - $path = '/styles/dist/' . $package . '/style.css'; + $path = '/wp-includes/css/dist/' . $package . '/style.css'; $styles->add( $handle, $path, $dependencies ); $styles->add_data( $handle, 'rtl', 'replace' ); diff --git a/tools/webpack/packages.js b/tools/webpack/packages.js index c9842cb55cf27..4ed4bc23fe08b 100644 --- a/tools/webpack/packages.js +++ b/tools/webpack/packages.js @@ -37,20 +37,22 @@ function camelCaseDash( string ) { /** * Maps vendors to copy commands for the CopyWebpackPlugin. * - * @param {Object} vendors Vendors to include in the vendor folder. + * @param {Object} vendors Vendors to include in the vendor folder. + * @param {string} buildTarget The folder in which to build the packages. * * @return {Object[]} Copy object suitable for the CopyWebpackPlugin. */ -function mapVendorCopies( vendors ) { +function mapVendorCopies( vendors, buildTarget ) { return Object.keys( vendors ).map( ( filename ) => ( { from: join( baseDir, `node_modules/${ vendors[ filename ] }` ), - to: join( baseDir, `build/js/dist/vendor/${ filename }` ), + to: join( baseDir, `${ buildTarget }/js/dist/vendor/${ filename }` ), } ) ); } module.exports = function( env = { environment: 'production', watch: false } ) { const mode = env.environment; - const suffix = mode === 'production' ? '.min': ''; + const suffix = mode === 'production' ? '.min' : ''; + const buildTarget = ( mode === 'production' ? 'build' : 'src' ) + '/wp-includes'; const packages = [ 'api-fetch', @@ -143,9 +145,9 @@ module.exports = function( env = { environment: 'production', watch: false } ) { }; } ); - const developmentCopies = mapVendorCopies( vendors ); - const minifiedCopies = mapVendorCopies( minifiedVendors ); - const minifyCopies = mapVendorCopies( minifyVendors ).map( ( copyCommand ) => { + const developmentCopies = mapVendorCopies( vendors, buildTarget ); + const minifiedCopies = mapVendorCopies( minifiedVendors, buildTarget ); + const minifyCopies = mapVendorCopies( minifyVendors, buildTarget ).map( ( copyCommand ) => { return { ...copyCommand, transform: ( content ) => { @@ -158,7 +160,7 @@ module.exports = function( env = { environment: 'production', watch: false } ) { let cssCopies = packages.map( ( packageName ) => ( { from: join( baseDir, `node_modules/@wordpress/${ packageName }/build-style/*.css` ), - to: join( baseDir, `build/styles/dist/${ packageName }/` ), + to: join( baseDir, `${ buildTarget }/css/dist/${ packageName }/` ), flatten: true, transform: ( content ) => { if ( config.mode === 'production' ) { @@ -190,7 +192,7 @@ module.exports = function( env = { environment: 'production', watch: false } ) { }, {} ), output: { filename: `[basename]${ suffix }.js`, - path: join( baseDir, 'build/js/dist' ), + path: join( baseDir, `${ buildTarget }/js/dist` ), library: { root: [ 'wp', '[name]' ] }, From ca27574420ae3a33ef5df34191dc7937a89a87d7 Mon Sep 17 00:00:00 2001 From: Gary Pendergast Date: Fri, 19 Oct 2018 06:44:16 +0000 Subject: [PATCH 466/537] General: Extract the code editor settings from `wp_enqueue_code_editor()`. They're now returned by a new function, `wp_get_code_editor_settings()`, so they can be reused by the block editor. See #45127. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43761 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/general-template.php | 157 ++++++++++++++++----------- 1 file changed, 92 insertions(+), 65 deletions(-) diff --git a/src/wp-includes/general-template.php b/src/wp-includes/general-template.php index 33fcfbb675eac..63b85378e2348 100644 --- a/src/wp-includes/general-template.php +++ b/src/wp-includes/general-template.php @@ -3121,7 +3121,9 @@ function wp_enqueue_editor() { * @since 4.9.0 * * @see wp_enqueue_editor() + * @see wp_get_code_editor_settings(); * @see _WP_Editors::parse_settings() + * * @param array $args { * Args. * @@ -3134,13 +3136,100 @@ function wp_enqueue_editor() { * @type array $jshint JSHint rule overrides. * @type array $htmlhint JSHint rule overrides. * } - * @returns array|false Settings for the enqueued code editor, or false if the editor was not enqueued . + * @return array|false Settings for the enqueued code editor, or false if the editor was not enqueued. */ function wp_enqueue_code_editor( $args ) { if ( is_user_logged_in() && 'false' === wp_get_current_user()->syntax_highlighting ) { return false; } + $settings = wp_get_code_editor_settings( $args ); + + if ( empty( $settings ) || empty( $settings['codemirror'] ) ) { + return false; + } + + wp_enqueue_script( 'code-editor' ); + wp_enqueue_style( 'code-editor' ); + + if ( isset( $settings['codemirror']['mode'] ) ) { + $mode = $settings['codemirror']['mode']; + if ( is_string( $mode ) ) { + $mode = array( + 'name' => $mode, + ); + } + + if ( ! empty( $settings['codemirror']['lint'] ) ) { + switch ( $mode['name'] ) { + case 'css': + case 'text/css': + case 'text/x-scss': + case 'text/x-less': + wp_enqueue_script( 'csslint' ); + break; + case 'htmlmixed': + case 'text/html': + case 'php': + case 'application/x-httpd-php': + case 'text/x-php': + wp_enqueue_script( 'htmlhint' ); + wp_enqueue_script( 'csslint' ); + wp_enqueue_script( 'jshint' ); + if ( ! current_user_can( 'unfiltered_html' ) ) { + wp_enqueue_script( 'htmlhint-kses' ); + } + break; + case 'javascript': + case 'application/ecmascript': + case 'application/json': + case 'application/javascript': + case 'application/ld+json': + case 'text/typescript': + case 'application/typescript': + wp_enqueue_script( 'jshint' ); + wp_enqueue_script( 'jsonlint' ); + break; + } + } + } + + wp_add_inline_script( 'code-editor', sprintf( 'jQuery.extend( wp.codeEditor.defaultSettings, %s );', wp_json_encode( $settings ) ) ); + + /** + * Fires when scripts and styles are enqueued for the code editor. + * + * @since 4.9.0 + * + * @param array $settings Settings for the enqueued code editor. + */ + do_action( 'wp_enqueue_code_editor', $settings ); + + return $settings; +} + +/** + * Generate and return code editor settings. + * + * @since 5.0.0 + * + * @see wp_enqueue_code_editor() + * + * @param array $args { + * Args. + * + * @type string $type The MIME type of the file to be edited. + * @type string $file Filename to be edited. Extension is used to sniff the type. Can be supplied as alternative to `$type` param. + * @type WP_Theme $theme Theme being edited when on theme editor. + * @type string $plugin Plugin being edited when on plugin editor. + * @type array $codemirror Additional CodeMirror setting overrides. + * @type array $csslint CSSLint rule overrides. + * @type array $jshint JSHint rule overrides. + * @type array $htmlhint JSHint rule overrides. + * } + * @return array|false Settings for the code editor. + */ +function wp_get_code_editor_settings( $args ) { $settings = array( 'codemirror' => array( 'indentUnit' => 4, @@ -3431,7 +3520,7 @@ function wp_enqueue_code_editor( $args ) { * * @param array $settings The array of settings passed to the code editor. A falsey value disables the editor. * @param array $args { - * Args passed when calling `wp_enqueue_code_editor()`. + * Args passed when calling `get_code_editor_settings()`. * * @type string $type The MIME type of the file to be edited. * @type string $file Filename being edited. @@ -3443,69 +3532,7 @@ function wp_enqueue_code_editor( $args ) { * @type array $htmlhint JSHint rule overrides. * } */ - $settings = apply_filters( 'wp_code_editor_settings', $settings, $args ); - - if ( empty( $settings ) || empty( $settings['codemirror'] ) ) { - return false; - } - - wp_enqueue_script( 'code-editor' ); - wp_enqueue_style( 'code-editor' ); - - if ( isset( $settings['codemirror']['mode'] ) ) { - $mode = $settings['codemirror']['mode']; - if ( is_string( $mode ) ) { - $mode = array( - 'name' => $mode, - ); - } - - if ( ! empty( $settings['codemirror']['lint'] ) ) { - switch ( $mode['name'] ) { - case 'css': - case 'text/css': - case 'text/x-scss': - case 'text/x-less': - wp_enqueue_script( 'csslint' ); - break; - case 'htmlmixed': - case 'text/html': - case 'php': - case 'application/x-httpd-php': - case 'text/x-php': - wp_enqueue_script( 'htmlhint' ); - wp_enqueue_script( 'csslint' ); - wp_enqueue_script( 'jshint' ); - if ( ! current_user_can( 'unfiltered_html' ) ) { - wp_enqueue_script( 'htmlhint-kses' ); - } - break; - case 'javascript': - case 'application/ecmascript': - case 'application/json': - case 'application/javascript': - case 'application/ld+json': - case 'text/typescript': - case 'application/typescript': - wp_enqueue_script( 'jshint' ); - wp_enqueue_script( 'jsonlint' ); - break; - } - } - } - - wp_add_inline_script( 'code-editor', sprintf( 'jQuery.extend( wp.codeEditor.defaultSettings, %s );', wp_json_encode( $settings ) ) ); - - /** - * Fires when scripts and styles are enqueued for the code editor. - * - * @since 4.9.0 - * - * @param array $settings Settings for the enqueued code editor. - */ - do_action( 'wp_enqueue_code_editor', $settings ); - - return $settings; + return apply_filters( 'wp_code_editor_settings', $settings, $args ); } /** From 3ba1a2b33c71a5b8dfbc6ab728bcdbff30eb1880 Mon Sep 17 00:00:00 2001 From: Gary Pendergast Date: Fri, 19 Oct 2018 08:43:25 +0000 Subject: [PATCH 467/537] Block Editor: Add helper functions for displaying the editor. `use_block_editor_for_post()` and `use_block_editor_for_post_type()` determine if the block editor should be loaded. `get_block_categories()` and `get_block_editor_server_block_settings()` provide data be included while the block editor is loading. See #45110. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43762 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/post.php | 143 +++++++++++++++++++++ tests/phpunit/tests/admin/includesPost.php | 49 +++++++ 2 files changed, 192 insertions(+) diff --git a/src/wp-admin/includes/post.php b/src/wp-admin/includes/post.php index 7fe1b42d2de13..5b895c00c21be 100644 --- a/src/wp-admin/includes/post.php +++ b/src/wp-admin/includes/post.php @@ -1874,3 +1874,146 @@ function redirect_post($post_id = '') { wp_redirect( apply_filters( 'redirect_post_location', $location, $post_id ) ); exit; } + +/** + * Return whether the post can be edited in the block editor. + * + * @since 5.0.0 + * + * @param int|WP_Post $post Post ID or WP_Post object. + * @return bool Whether the post can be edited in the block editor. + */ +function use_block_editor_for_post( $post ) { + $post = get_post( $post ); + + if ( ! $post ) { + return false; + } + + $use_block_editor = use_block_editor_for_post_type( $post->post_type ); + + /** + * Filter whether a post is able to be edited in the block editor. + * + * @since 5.0.0 + * + * @param bool $use_block_editor Whether the post can be edited or not. + * @param WP_Post $post The post being checked. + */ + return apply_filters( 'use_block_editor_for_post', $use_block_editor, $post ); +} + +/** + * Return whether a post type is compatible with the block editor. + * + * The block editor depends on the REST API, and if the post type is not shown in the + * REST API, then it won't work with the block editor. + * + * @since 5.0.0 + * + * @param string $post_type The post type. + * @return bool Whether the post type can be edited with the block editor. + */ +function use_block_editor_for_post_type( $post_type ) { + if ( ! post_type_exists( $post_type ) ) { + return false; + } + + if ( ! post_type_supports( $post_type, 'editor' ) ) { + return false; + } + + $post_type_object = get_post_type_object( $post_type ); + if ( $post_type_object && ! $post_type_object->show_in_rest ) { + return false; + } + + /** + * Filter whether a post is able to be edited in the block editor. + * + * @since 5.0.0 + * + * @param bool $use_block_editor Whether the post type can be edited or not. Default true. + * @param string $post_type The post type being checked. + */ + return apply_filters( 'use_block_editor_for_post_type', true, $post_type ); +} + +/** + * Returns all the block categories that will be shown in the block editor. + * + * @since 5.0.0 + * + * @param WP_Post $post Post object. + * @return array Array of block categories. + */ +function get_block_categories( $post ) { + $default_categories = array( + array( + 'slug' => 'common', + 'title' => __( 'Common Blocks', 'gutenberg' ), + ), + array( + 'slug' => 'formatting', + 'title' => __( 'Formatting', 'gutenberg' ), + ), + array( + 'slug' => 'layout', + 'title' => __( 'Layout Elements', 'gutenberg' ), + ), + array( + 'slug' => 'widgets', + 'title' => __( 'Widgets', 'gutenberg' ), + ), + array( + 'slug' => 'embed', + 'title' => __( 'Embeds', 'gutenberg' ), + ), + array( + 'slug' => 'reusable', + 'title' => __( 'Reusable Blocks', 'gutenberg' ), + ), + ); + + /** + * Filter the default array of block categories. + * + * @since 5.0.0 + * + * @param array $default_categories Array of block categories. + * @param WP_Post $post Post being loaded. + */ + return apply_filters( 'block_categories', $default_categories, $post ); +} + +/** + * Prepares server-registered blocks for the block editor. + * + * Returns an associative array of registered block data keyed by block name. Data includes properties + * of a block relevant for client registration. + * + * @since 5.0.0 + * + * @return array An associative array of registered block data. + */ +function get_block_editor_server_block_settings() { + $block_registry = WP_Block_Type_Registry::get_instance(); + $blocks = array(); + $keys_to_pick = array( 'title', 'description', 'icon', 'category', 'keywords', 'supports', 'attributes' ); + + foreach ( $block_registry->get_all_registered() as $block_name => $block_type ) { + foreach ( $keys_to_pick as $key ) { + if ( ! isset( $block_type->{ $key } ) ) { + continue; + } + + if ( ! isset( $blocks[ $block_name ] ) ) { + $blocks[ $block_name ] = array(); + } + + $blocks[ $block_name ][ $key ] = $block_type->{ $key }; + } + } + + return $blocks; +} diff --git a/tests/phpunit/tests/admin/includesPost.php b/tests/phpunit/tests/admin/includesPost.php index f2df065e493ab..f57b27f203e07 100644 --- a/tests/phpunit/tests/admin/includesPost.php +++ b/tests/phpunit/tests/admin/includesPost.php @@ -658,4 +658,53 @@ public function test_post_exists_should_match_nonempty_title_content_and_date() $this->assertSame( $p, post_exists( $title, $content, $date ) ); } + function test_use_block_editor_for_post() { + $this->assertFalse( use_block_editor_for_post( -1 ) ); + $bogus_post_id = $this->factory()->post->create( + array( + 'post_type' => 'bogus', + ) + ); + $this->assertFalse( use_block_editor_for_post( $bogus_post_id ) ); + + register_post_type( + 'restless', + array( + 'show_in_rest' => false, + ) + ); + $restless_post_id = $this->factory()->post->create( + array( + 'post_type' => 'restless', + ) + ); + $this->assertFalse( use_block_editor_for_post( $restless_post_id ) ); + + $generic_post_id = $this->factory()->post->create(); + + add_filter( 'use_block_editor_for_post', '__return_false' ); + $this->assertFalse( use_block_editor_for_post( $generic_post_id ) ); + remove_filter( 'use_block_editor_for_post', '__return_false' ); + + add_filter( 'use_block_editor_for_post', '__return_true' ); + $this->assertTrue( use_block_editor_for_post( $restless_post_id ) ); + remove_filter( 'use_block_editor_for_post', '__return_true' ); + } + + function test_get_block_editor_server_block_settings() { + $name = 'core/test'; + $settings = array( + 'icon' => 'text', + 'render_callback' => 'foo', + ); + + register_block_type( $name, $settings ); + + $blocks = get_block_editor_server_block_settings(); + + unregister_block_type( $name ); + + $this->assertArrayHasKey( $name, $blocks ); + $this->assertSame( array( 'icon' => 'text' ), $blocks[ $name ] ); + } } From 88fbc8f35db248414570cddf5829838d86a16a62 Mon Sep 17 00:00:00 2001 From: Gary Pendergast Date: Fri, 19 Oct 2018 08:56:58 +0000 Subject: [PATCH 468/537] REST API: Introduce the `rest_preload_api_request()` function. This function helps perform multiple REST API requests, for the purpose of preloading data into a page. See #45110. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43763 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/rest-api.php | 53 ++++++++++++++++++++++++++++++++ tests/phpunit/tests/rest-api.php | 9 ++++++ 2 files changed, 62 insertions(+) diff --git a/src/wp-includes/rest-api.php b/src/wp-includes/rest-api.php index adcd8b957b6d2..9e7d37f2c773b 100644 --- a/src/wp-includes/rest-api.php +++ b/src/wp-includes/rest-api.php @@ -1311,3 +1311,56 @@ function rest_sanitize_value_from_schema( $value, $args ) { return $value; } + +/** + * Append result of internal request to REST API for purpose of preloading data to be attached to a page. + * Expected to be called in the context of `array_reduce`. + * + * @since 5.0.0 + * + * @param array $memo Reduce accumulator. + * @param string $path REST API path to preload. + * @return array Modified reduce accumulator. + */ +function rest_preload_api_request( $memo, $path ) { + // array_reduce() doesn't support passing an array in PHP 5.2, so we need to make sure we start with one. + if ( ! is_array( $memo ) ) { + $memo = array(); + } + + if ( empty( $path ) ) { + return $memo; + } + + $path_parts = parse_url( $path ); + if ( false === $path_parts ) { + return $memo; + } + + $request = new WP_REST_Request( 'GET', $path_parts['path'] ); + if ( ! empty( $path_parts['query'] ) ) { + parse_str( $path_parts['query'], $query_params ); + $request->set_query_params( $query_params ); + } + + $response = rest_do_request( $request ); + if ( 200 === $response->status ) { + $server = rest_get_server(); + $data = (array) $response->get_data(); + if ( method_exists( $server, 'get_compact_response_links' ) ) { + $links = call_user_func( array( $server, 'get_compact_response_links' ), $response ); + } else { + $links = call_user_func( array( $server, 'get_response_links' ), $response ); + } + if ( ! empty( $links ) ) { + $data['_links'] = $links; + } + + $memo[ $path ] = array( + 'body' => $data, + 'headers' => $response->headers, + ); + } + + return $memo; +} diff --git a/tests/phpunit/tests/rest-api.php b/tests/phpunit/tests/rest-api.php index 45c1ccef71de8..3495aefc0ceda 100644 --- a/tests/phpunit/tests/rest-api.php +++ b/tests/phpunit/tests/rest-api.php @@ -593,4 +593,13 @@ public function test_register_rest_route_without_server() { $routes = $GLOBALS['wp_rest_server']->get_routes(); $this->assertEquals( $routes['/test-ns/test'][0]['methods'], array( 'GET' => true ) ); } + + /** + * Ensure rest_preload_api_request() works without notices in PHP 5.2. + * + * The array_reduce() function only accepts mixed variables starting with PHP 5.3. + */ + function test_rest_preload_api_request_no_notices_php_52() { + $this->assertTrue( is_array( rest_preload_api_request( 0, '/' ) ) ); + } } From e746cb6ec94be3b0f3bbdee88bf254d13410ad53 Mon Sep 17 00:00:00 2001 From: Gary Pendergast Date: Fri, 19 Oct 2018 09:11:12 +0000 Subject: [PATCH 469/537] i18n: Remove some translation domains accidentally included in [43762]. See #45110. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43764 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/post.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/wp-admin/includes/post.php b/src/wp-admin/includes/post.php index 5b895c00c21be..c644ae3391ced 100644 --- a/src/wp-admin/includes/post.php +++ b/src/wp-admin/includes/post.php @@ -1951,27 +1951,27 @@ function get_block_categories( $post ) { $default_categories = array( array( 'slug' => 'common', - 'title' => __( 'Common Blocks', 'gutenberg' ), + 'title' => __( 'Common Blocks' ), ), array( 'slug' => 'formatting', - 'title' => __( 'Formatting', 'gutenberg' ), + 'title' => __( 'Formatting' ), ), array( 'slug' => 'layout', - 'title' => __( 'Layout Elements', 'gutenberg' ), + 'title' => __( 'Layout Elements' ), ), array( 'slug' => 'widgets', - 'title' => __( 'Widgets', 'gutenberg' ), + 'title' => __( 'Widgets' ), ), array( 'slug' => 'embed', - 'title' => __( 'Embeds', 'gutenberg' ), + 'title' => __( 'Embeds' ), ), array( 'slug' => 'reusable', - 'title' => __( 'Reusable Blocks', 'gutenberg' ), + 'title' => __( 'Reusable Blocks' ), ), ); From 583e4220ee2fb2f65419f48b5134c8fbd1aa3381 Mon Sep 17 00:00:00 2001 From: Miguel Fonseca Date: Fri, 19 Oct 2018 10:50:20 +0000 Subject: [PATCH 470/537] Deactivate Gutenberg plugin on update to 5.0. Fixes #45123. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43765 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/upgrade.php | 22 ++++++++++++++++++++++ src/wp-includes/version.php | 2 +- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/wp-admin/includes/upgrade.php b/src/wp-admin/includes/upgrade.php index 71c90e16de71a..bf3b7ddedede7 100644 --- a/src/wp-admin/includes/upgrade.php +++ b/src/wp-admin/includes/upgrade.php @@ -614,6 +614,9 @@ function upgrade_all() { if ( $wp_current_db_version < 37965 ) upgrade_460(); + if ( $wp_current_db_version < 43764 ) + upgrade_500(); + maybe_disable_link_manager(); maybe_disable_automattic_widgets(); @@ -1781,6 +1784,25 @@ function upgrade_460() { } } +/** + * Executes changes made in WordPress 5.0.0. + * + * @ignore + * @since 5.0.0 + * + * @global int $wp_current_db_version Current database version. + */ +function upgrade_500() { + global $wp_current_db_version; + if ( $wp_current_db_version < 43764 ) { + // Allow bypassing Gutenberg plugin deactivation. + if ( defined( 'GUTENBERG_USE_PLUGIN' ) && GUTENBERG_USE_PLUGIN ) { + return; + } + deactivate_plugins( array( 'gutenberg/gutenberg.php' ), true ); + } +} + /** * Executes network-level upgrade routines. * diff --git a/src/wp-includes/version.php b/src/wp-includes/version.php index 7063fbf7f9c0e..7550eb7ddb1f3 100644 --- a/src/wp-includes/version.php +++ b/src/wp-includes/version.php @@ -11,7 +11,7 @@ * * @global int $wp_db_version */ -$wp_db_version = 38590; +$wp_db_version = 43764; /** * Holds the TinyMCE version From 60b2d59358b3f9e6db85d61ec0dbf07d68e31ecc Mon Sep 17 00:00:00 2001 From: Daniel Bachhuber Date: Fri, 19 Oct 2018 11:13:57 +0000 Subject: [PATCH 471/537] REST API: Ensure rest_url() consistently has leading slash. `rest_url()` inconsistent addes slashes to the passed path depending on whether the site has pretty permalinks enabled. Apart from being inconsistent, this also caused the unit tests to fail when pretty permalinks are enabled. Props frank-klein. Merges [42250] to the 5.0 branch. Partially reverts [43720]. Fixes #42452. See #41451, #45017. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43766 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/rest-api.php | 6 ++--- .../includes/testcase-rest-controller.php | 2 +- tests/phpunit/tests/rest-api.php | 27 +++++++++++++++++++ 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/src/wp-includes/rest-api.php b/src/wp-includes/rest-api.php index 9e7d37f2c773b..72ee1b696e46e 100644 --- a/src/wp-includes/rest-api.php +++ b/src/wp-includes/rest-api.php @@ -325,6 +325,8 @@ function get_rest_url( $blog_id = null, $path = '/', $scheme = 'rest' ) { $path = '/'; } + $path = '/' . ltrim( $path, '/' ); + if ( is_multisite() && get_blog_option( $blog_id, 'permalink_structure' ) || get_option( 'permalink_structure' ) ) { global $wp_rewrite; @@ -334,7 +336,7 @@ function get_rest_url( $blog_id = null, $path = '/', $scheme = 'rest' ) { $url = get_home_url( $blog_id, rest_get_url_prefix(), $scheme ); } - $url .= '/' . ltrim( $path, '/' ); + $url .= $path; } else { $url = trailingslashit( get_home_url( $blog_id, '', $scheme ) ); // nginx only allows HTTP/1.0 methods when redirecting from / to /index.php @@ -343,8 +345,6 @@ function get_rest_url( $blog_id = null, $path = '/', $scheme = 'rest' ) { $url .= 'index.php'; } - $path = '/' . ltrim( $path, '/' ); - $url = add_query_arg( 'rest_route', $path, $url ); } diff --git a/tests/phpunit/includes/testcase-rest-controller.php b/tests/phpunit/includes/testcase-rest-controller.php index 3087bcd7b7506..04e1cf2f96f32 100644 --- a/tests/phpunit/includes/testcase-rest-controller.php +++ b/tests/phpunit/includes/testcase-rest-controller.php @@ -40,7 +40,7 @@ abstract public function test_prepare_item(); abstract public function test_get_item_schema(); public function filter_rest_url_for_leading_slash( $url, $path ) { - if ( is_multisite() || get_option( 'permalink_structure' ) ) { + if ( is_multisite() ) { return $url; } diff --git a/tests/phpunit/tests/rest-api.php b/tests/phpunit/tests/rest-api.php index 3495aefc0ceda..d30eb421c576b 100644 --- a/tests/phpunit/tests/rest-api.php +++ b/tests/phpunit/tests/rest-api.php @@ -488,6 +488,33 @@ public function test_rest_url_scheme() { } + /** + * @ticket 42452 + */ + public function test_always_prepend_path_with_slash_in_rest_url_filter() { + $filter = new MockAction(); + add_filter( 'rest_url', array( $filter, 'filter' ), 10, 2 ); + + // Passing no path should return a slash. + get_rest_url(); + $args = $filter->get_args(); + $this->assertEquals( '/', $args[0][1] ); + $filter->reset(); + + // Paths without a prepended slash should have one added. + get_rest_url( null, 'wp/media/' ); + $args = $filter->get_args(); + $this->assertEquals( '/wp/media/', $args[0][1] ); + $filter->reset(); + + // Do not modify paths with a prepended slash. + get_rest_url( null, '/wp/media/' ); + $args = $filter->get_args(); + $this->assertEquals( '/wp/media/', $args[0][1] ); + + unset( $filter ); + } + public function jsonp_callback_provider() { return array( // Standard names From e8eabb8583b32e1887e9e37f5626fe8b87e25c51 Mon Sep 17 00:00:00 2001 From: Daniel Bachhuber Date: Fri, 19 Oct 2018 11:56:20 +0000 Subject: [PATCH 472/537] REST API: Use a truly impossibly high number in User Controller tests. The `100` number could be valid in certain test run configurations. The `REST_TESTS_IMPOSSIBLY_HIGH_NUMBER` constant is impossibly high for this very reason. Fixes #45128. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43767 602fd350-edb4-49c9-b593-d223f7449a82 --- tests/phpunit/tests/rest-api/rest-users-controller.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/phpunit/tests/rest-api/rest-users-controller.php b/tests/phpunit/tests/rest-api/rest-users-controller.php index 1a71bf6ae34e7..551fd83514715 100644 --- a/tests/phpunit/tests/rest-api/rest-users-controller.php +++ b/tests/phpunit/tests/rest-api/rest-users-controller.php @@ -798,7 +798,7 @@ public function test_get_user_avatar_urls() { public function test_get_user_invalid_id() { wp_set_current_user( self::$user ); - $request = new WP_REST_Request( 'GET', '/wp/v2/users/100' ); + $request = new WP_REST_Request( 'GET', '/wp/v2/users/' . REST_TESTS_IMPOSSIBLY_HIGH_NUMBER ); $response = $this->server->dispatch( $request ); $this->assertErrorResponse( 'rest_user_invalid_id', $response, 404 ); @@ -2069,7 +2069,7 @@ public function test_delete_user_invalid_id() { $this->allow_user_to_manage_multisite(); wp_set_current_user( self::$user ); - $request = new WP_REST_Request( 'DELETE', '/wp/v2/users/100' ); + $request = new WP_REST_Request( 'DELETE', '/wp/v2/users/' . REST_TESTS_IMPOSSIBLY_HIGH_NUMBER ); $request['force'] = true; $request->set_param( 'reassign', false ); $response = $this->server->dispatch( $request ); @@ -2119,7 +2119,7 @@ public function test_delete_user_invalid_reassign_id() { $request = new WP_REST_Request( 'DELETE', sprintf( '/wp/v2/users/%d', $user_id ) ); $request['force'] = true; - $request->set_param( 'reassign', 100 ); + $request->set_param( 'reassign', REST_TESTS_IMPOSSIBLY_HIGH_NUMBER ); $response = $this->server->dispatch( $request ); // Not implemented in multisite. From ef67f4ad75abe051b5020517951fcc5a49675933 Mon Sep 17 00:00:00 2001 From: Daniel Bachhuber Date: Fri, 19 Oct 2018 13:48:42 +0000 Subject: [PATCH 473/537] REST API: Introduce Autosaves controller and endpoint. * Adds `WP_REST_Autosaves_Controller` which extends `WP_REST_Revisions_Controller`. * Autosaves endpoint is registered for all post types except `attachment` because even post types without revisions enabled are expected to autosave. * Because setting the `DOING_AUTOSAVE` constant pollutes the test suite, autosaves tests are run last. We may want to improve upon this later. Props adamsilverstein, aduth, azaozz, danielbachhuber, rmccue. Fixes #43316. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43768 602fd350-edb4-49c9-b593-d223f7449a82 --- phpunit.xml.dist | 7 +- src/wp-includes/rest-api.php | 6 + .../class-wp-rest-autosaves-controller.php | 392 ++++++++++++ src/wp-settings.php | 1 + tests/phpunit/multisite.xml | 7 +- .../rest-api/rest-autosaves-controller.php | 520 ++++++++++++++++ .../tests/rest-api/rest-schema-setup.php | 39 ++ tests/qunit/fixtures/wp-api-generated.js | 564 +++++++++++++++++- 8 files changed, 1530 insertions(+), 6 deletions(-) create mode 100644 src/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php create mode 100644 tests/phpunit/tests/rest-api/rest-autosaves-controller.php diff --git a/phpunit.xml.dist b/phpunit.xml.dist index f81a85e516631..1d894aaa8ff04 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -6,19 +6,24 @@ > - + tests/phpunit/tests tests/phpunit/tests/actions/closures.php tests/phpunit/tests/image/editor.php tests/phpunit/tests/image/editorGd.php tests/phpunit/tests/image/editorImagick.php tests/phpunit/tests/oembed/headers.php + tests/phpunit/tests/rest-api/rest-autosaves-controller.php tests/phpunit/tests/actions/closures.php tests/phpunit/tests/image/editor.php tests/phpunit/tests/image/editorGd.php tests/phpunit/tests/image/editorImagick.php tests/phpunit/tests/oembed/headers.php + + + tests/phpunit/tests/rest-api/rest-autosaves-controller.php + diff --git a/src/wp-includes/rest-api.php b/src/wp-includes/rest-api.php index 72ee1b696e46e..ebc3d9a053813 100644 --- a/src/wp-includes/rest-api.php +++ b/src/wp-includes/rest-api.php @@ -193,6 +193,12 @@ function create_initial_rest_routes() { $revisions_controller = new WP_REST_Revisions_Controller( $post_type->name ); $revisions_controller->register_routes(); } + + if ( 'attachment' !== $post_type->name ) { + $autosaves_controller = new WP_REST_Autosaves_Controller( $post_type->name ); + $autosaves_controller->register_routes(); + } + } // Post types. diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php new file mode 100644 index 0000000000000..79529213c3309 --- /dev/null +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php @@ -0,0 +1,392 @@ +parent_post_type = $parent_post_type; + $post_type_object = get_post_type_object( $parent_post_type ); + + // Ensure that post type-specific controller logic is available. + $parent_controller_class = ! empty( $post_type_object->rest_controller_class ) ? $post_type_object->rest_controller_class : 'WP_REST_Posts_Controller'; + + $this->parent_controller = new $parent_controller_class( $post_type_object->name ); + $this->revisions_controller = new WP_REST_Revisions_Controller( $parent_post_type ); + $this->rest_namespace = 'wp/v2'; + $this->rest_base = 'autosaves'; + $this->parent_base = ! empty( $post_type_object->rest_base ) ? $post_type_object->rest_base : $post_type_object->name; + } + + /** + * Registers routes for autosaves. + * + * @since 5.0.0 + * + * @see register_rest_route() + */ + public function register_routes() { + register_rest_route( + $this->rest_namespace, + '/' . $this->parent_base . '/(?P[\d]+)/' . $this->rest_base, + array( + 'args' => array( + 'parent' => array( + 'description' => __( 'The ID for the parent of the object.' ), + 'type' => 'integer', + ), + ), + array( + 'methods' => WP_REST_Server::READABLE, + 'callback' => array( $this, 'get_items' ), + 'permission_callback' => array( $this->revisions_controller, 'get_items_permissions_check' ), + 'args' => $this->get_collection_params(), + ), + array( + 'methods' => WP_REST_Server::CREATABLE, + 'callback' => array( $this, 'create_item' ), + 'permission_callback' => array( $this, 'create_item_permissions_check' ), + 'args' => $this->get_endpoint_args_for_item_schema( WP_REST_Server::CREATABLE ), + ), + 'schema' => array( $this, 'get_public_item_schema' ), + ) + ); + + register_rest_route( + $this->rest_namespace, + '/' . $this->parent_base . '/(?P[\d]+)/' . $this->rest_base . '/(?P[\d]+)', + array( + 'args' => array( + 'parent' => array( + 'description' => __( 'The ID for the parent of the object.' ), + 'type' => 'integer', + ), + 'id' => array( + 'description' => __( 'The ID for the object.' ), + 'type' => 'integer', + ), + ), + array( + 'methods' => WP_REST_Server::READABLE, + 'callback' => array( $this, 'get_item' ), + 'permission_callback' => array( $this->revisions_controller, 'get_item_permissions_check' ), + 'args' => array( + 'context' => $this->get_context_param( array( 'default' => 'view' ) ), + ), + ), + 'schema' => array( $this, 'get_public_item_schema' ), + ) + ); + + } + + /** + * Get the parent post. + * + * @since 5.0.0 + * + * @param int $parent_id Supplied ID. + * @return WP_Post|WP_Error Post object if ID is valid, WP_Error otherwise. + */ + protected function get_parent( $parent_id ) { + return $this->revisions_controller->get_parent( $parent_id ); + } + + /** + * Checks if a given request has access to create an autosave revision. + * + * Autosave revisions inherit permissions from the parent post, + * check if the current user has permission to edit the post. + * + * @since 5.0.0 + * + * @param WP_REST_Request $request Full details about the request. + * @return true|WP_Error True if the request has access to create the item, WP_Error object otherwise. + */ + public function create_item_permissions_check( $request ) { + $id = $request->get_param( 'id' ); + if ( empty( $id ) ) { + return new WP_Error( 'rest_post_invalid_id', __( 'Invalid item ID.' ), array( 'status' => 404 ) ); + } + + return $this->parent_controller->update_item_permissions_check( $request ); + } + + /** + * Creates, updates or deletes an autosave revision. + * + * @since 5.0.0 + * + * @param WP_REST_Request $request Full details about the request. + * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. + */ + public function create_item( $request ) { + + if ( ! defined( 'DOING_AUTOSAVE' ) ) { + define( 'DOING_AUTOSAVE', true ); + } + + $post = get_post( $request->get_param( 'id' ) ); + + if ( is_wp_error( $post ) ) { + return $post; + } + + $prepared_post = $this->parent_controller->prepare_item_for_database( $request ); + $prepared_post->ID = $post->ID; + $user_id = get_current_user_id(); + + if ( ( 'draft' === $post->post_status || 'auto-draft' === $post->post_status ) && $post->post_author == $user_id ) { + // Draft posts for the same author: autosaving updates the post and does not create a revision. + // Convert the post object to an array and add slashes, wp_update_post expects escaped array. + $autosave_id = wp_update_post( wp_slash( (array) $prepared_post ), true ); + } else { + // Non-draft posts: create or update the post autosave. + $autosave_id = $this->create_post_autosave( (array) $prepared_post ); + } + + if ( is_wp_error( $autosave_id ) ) { + return $autosave_id; + } + + $autosave = get_post( $autosave_id ); + $request->set_param( 'context', 'edit' ); + + $response = $this->prepare_item_for_response( $autosave, $request ); + $response = rest_ensure_response( $response ); + + return $response; + } + + /** + * Get the autosave, if the ID is valid. + * + * @since 5.0.0 + * + * @param WP_REST_Request $request Full data about the request. + * @return WP_Post|WP_Error Revision post object if ID is valid, WP_Error otherwise. + */ + public function get_item( $request ) { + $parent_id = (int) $request->get_param( 'parent' ); + + if ( $parent_id <= 0 ) { + return new WP_Error( 'rest_post_invalid_id', __( 'Invalid parent post ID.' ), array( 'status' => 404 ) ); + } + + $autosave = wp_get_post_autosave( $parent_id ); + + if ( ! $autosave ) { + return new WP_Error( 'rest_post_no_autosave', __( 'There is no autosave revision for this post.' ), array( 'status' => 404 ) ); + } + + $response = $this->prepare_item_for_response( $autosave, $request ); + return $response; + } + + /** + * Gets a collection of autosaves using wp_get_post_autosave. + * + * Contains the user's autosave, for empty if it doesn't exist. + * + * @since 5.0.0 + * + * @param WP_REST_Request $request Full data about the request. + * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. + */ + public function get_items( $request ) { + $parent = $this->get_parent( $request->get_param( 'parent' ) ); + if ( is_wp_error( $parent ) ) { + return $parent; + } + + $response = array(); + $parent_id = $parent->ID; + $revisions = wp_get_post_revisions( $parent_id, array( 'check_enabled' => false ) ); + + foreach ( $revisions as $revision ) { + if ( false !== strpos( $revision->post_name, "{$parent_id}-autosave" ) ) { + $data = $this->prepare_item_for_response( $revision, $request ); + $response[] = $this->prepare_response_for_collection( $data ); + } + } + + return rest_ensure_response( $response ); + } + + + /** + * Retrieves the autosave's schema, conforming to JSON Schema. + * + * @since 5.0.0 + * + * @return array Item schema data. + */ + public function get_item_schema() { + $schema = $this->revisions_controller->get_item_schema(); + + $schema['properties']['preview_link'] = array( + 'description' => __( 'Preview link for the post.' ), + 'type' => 'string', + 'format' => 'uri', + 'context' => array( 'edit' ), + 'readonly' => true, + ); + + return $schema; + } + + /** + * Creates autosave for the specified post. + * + * From wp-admin/post.php. + * + * @since 5.0.0 + * + * @param mixed $post_data Associative array containing the post data. + * @return mixed The autosave revision ID or WP_Error. + */ + public function create_post_autosave( $post_data ) { + + $post_id = (int) $post_data['ID']; + $post = get_post( $post_id ); + + if ( is_wp_error( $post ) ) { + return $post; + } + + $user_id = get_current_user_id(); + + // Store one autosave per author. If there is already an autosave, overwrite it. + $old_autosave = wp_get_post_autosave( $post_id, $user_id ); + + if ( $old_autosave ) { + $new_autosave = _wp_post_revision_data( $post_data, true ); + $new_autosave['ID'] = $old_autosave->ID; + $new_autosave['post_author'] = $user_id; + + // If the new autosave has the same content as the post, delete the autosave. + $autosave_is_different = false; + + foreach ( array_intersect( array_keys( $new_autosave ), array_keys( _wp_post_revision_fields( $post ) ) ) as $field ) { + if ( normalize_whitespace( $new_autosave[ $field ] ) != normalize_whitespace( $post->$field ) ) { + $autosave_is_different = true; + break; + } + } + + if ( ! $autosave_is_different ) { + wp_delete_post_revision( $old_autosave->ID ); + return new WP_Error( 'rest_autosave_no_changes', __( 'There is nothing to save. The autosave and the post content are the same.' ), array( 'status' => 400 ) ); + } + + /** + * This filter is documented in wp-admin/post.php. + */ + do_action( 'wp_creating_autosave', $new_autosave ); + + // wp_update_post expects escaped array. + return wp_update_post( wp_slash( $new_autosave ) ); + } + + // Create the new autosave as a special post revision. + return _wp_put_post_revision( $post_data, true ); + } + + /** + * Prepares the revision for the REST response. + * + * @since 5.0.0 + * + * @param WP_Post $post Post revision object. + * @param WP_REST_Request $request Request object. + * + * @return WP_REST_Response Response object. + */ + public function prepare_item_for_response( $post, $request ) { + + $response = $this->revisions_controller->prepare_item_for_response( $post, $request ); + + $fields = $this->get_fields_for_response( $request ); + + if ( in_array( 'preview_link', $fields, true ) ) { + $parent_id = wp_is_post_autosave( $post ); + $preview_post_id = false === $parent_id ? $post->ID : $parent_id; + $preview_query_args = array(); + + if ( false !== $parent_id ) { + $preview_query_args['preview_id'] = $parent_id; + $preview_query_args['preview_nonce'] = wp_create_nonce( 'post_preview_' . $parent_id ); + } + + $response->data['preview_link'] = get_preview_post_link( $preview_post_id, $preview_query_args ); + } + + $context = ! empty( $request['context'] ) ? $request['context'] : 'view'; + $response->data = $this->add_additional_fields_to_object( $response->data, $request ); + $response->data = $this->filter_response_by_context( $response->data, $context ); + + /** + * Filters a revision returned from the API. + * + * Allows modification of the revision right before it is returned. + * + * @since 5.0.0 + * + * @param WP_REST_Response $response The response object. + * @param WP_Post $post The original revision object. + * @param WP_REST_Request $request Request used to generate the response. + */ + return apply_filters( 'rest_prepare_autosave', $response, $post, $request ); + } +} diff --git a/src/wp-settings.php b/src/wp-settings.php index c0f081613005c..f711b9167b2de 100644 --- a/src/wp-settings.php +++ b/src/wp-settings.php @@ -229,6 +229,7 @@ require( ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-post-types-controller.php' ); require( ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-post-statuses-controller.php' ); require( ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-revisions-controller.php' ); +require( ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-autosaves-controller.php' ); require( ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-taxonomies-controller.php' ); require( ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-terms-controller.php' ); require( ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-users-controller.php' ); diff --git a/tests/phpunit/multisite.xml b/tests/phpunit/multisite.xml index 0d60efbe1c78c..df36aeea5af4b 100644 --- a/tests/phpunit/multisite.xml +++ b/tests/phpunit/multisite.xml @@ -9,17 +9,22 @@ - + tests tests/phpunit/tests/actions/closures.php tests/phpunit/tests/image/editor.php tests/phpunit/tests/image/editorGd.php tests/phpunit/tests/image/editorImagick.php + tests/rest-api/rest-autosaves-controller.php tests/phpunit/tests/actions/closures.php tests/phpunit/tests/image/editor.php tests/phpunit/tests/image/editorGd.php tests/phpunit/tests/image/editorImagick.php + + + tests/rest-api/rest-autosaves-controller.php + diff --git a/tests/phpunit/tests/rest-api/rest-autosaves-controller.php b/tests/phpunit/tests/rest-api/rest-autosaves-controller.php new file mode 100644 index 0000000000000..ede81c5f25e66 --- /dev/null +++ b/tests/phpunit/tests/rest-api/rest-autosaves-controller.php @@ -0,0 +1,520 @@ + 'Post Title', + 'content' => 'Post content', + 'excerpt' => 'Post excerpt', + 'name' => 'test', + 'author' => get_current_user_id(), + ); + + return wp_parse_args( $args, $defaults ); + } + + protected function check_create_autosave_response( $response ) { + $this->assertNotInstanceOf( 'WP_Error', $response ); + $response = rest_ensure_response( $response ); + $data = $response->get_data(); + + $this->assertArrayHasKey( 'content', $data ); + $this->assertArrayHasKey( 'excerpt', $data ); + $this->assertArrayHasKey( 'title', $data ); + } + + public static function wpSetUpBeforeClass( $factory ) { + self::$post_id = $factory->post->create(); + self::$page_id = $factory->post->create( array( 'post_type' => 'page' ) ); + + self::$editor_id = $factory->user->create( + array( + 'role' => 'editor', + ) + ); + self::$contributor_id = $factory->user->create( + array( + 'role' => 'contributor', + ) + ); + + wp_set_current_user( self::$editor_id ); + + // Create an autosave. + self::$autosave_post_id = wp_create_post_autosave( + array( + 'post_content' => 'This content is better.', + 'post_ID' => self::$post_id, + 'post_type' => 'post', + ) + ); + + self::$autosave_page_id = wp_create_post_autosave( + array( + 'post_content' => 'This content is better.', + 'post_ID' => self::$page_id, + 'post_type' => 'post', + ) + ); + + } + + public static function wpTearDownAfterClass() { + // Also deletes revisions. + wp_delete_post( self::$post_id, true ); + wp_delete_post( self::$page_id, true ); + + self::delete_user( self::$editor_id ); + self::delete_user( self::$contributor_id ); + } + + public function setUp() { + parent::setUp(); + wp_set_current_user( self::$editor_id ); + + $this->post_autosave = wp_get_post_autosave( self::$post_id ); + } + + public function test_register_routes() { + $routes = rest_get_server()->get_routes(); + $this->assertArrayHasKey( '/wp/v2/posts/(?P[\d]+)/autosaves', $routes ); + $this->assertArrayHasKey( '/wp/v2/posts/(?P[\d]+)/autosaves/(?P[\d]+)', $routes ); + $this->assertArrayHasKey( '/wp/v2/pages/(?P[\d]+)/autosaves', $routes ); + $this->assertArrayHasKey( '/wp/v2/pages/(?P[\d]+)/autosaves/(?P[\d]+)', $routes ); + } + + public function test_context_param() { + + // Collection. + $request = new WP_REST_Request( 'OPTIONS', '/wp/v2/posts/' . self::$post_id . '/autosaves' ); + $response = rest_get_server()->dispatch( $request ); + $data = $response->get_data(); + $this->assertEquals( 'view', $data['endpoints'][0]['args']['context']['default'] ); + $this->assertEqualSets( array( 'view', 'edit', 'embed' ), $data['endpoints'][0]['args']['context']['enum'] ); + + // Single. + $request = new WP_REST_Request( 'OPTIONS', '/wp/v2/posts/' . self::$post_id . '/autosaves/' . self::$autosave_post_id ); + $response = rest_get_server()->dispatch( $request ); + $data = $response->get_data(); + $this->assertEquals( 'view', $data['endpoints'][0]['args']['context']['default'] ); + $this->assertEqualSets( array( 'view', 'edit', 'embed' ), $data['endpoints'][0]['args']['context']['enum'] ); + } + + public function test_get_items() { + wp_set_current_user( self::$editor_id ); + $request = new WP_REST_Request( 'GET', '/wp/v2/posts/' . self::$post_id . '/autosaves' ); + $response = rest_get_server()->dispatch( $request ); + $data = $response->get_data(); + $this->assertEquals( 200, $response->get_status() ); + $this->assertCount( 1, $data ); + + $this->assertEquals( self::$autosave_post_id, $data[0]['id'] ); + + $this->check_get_autosave_response( $data[0], $this->post_autosave ); + } + + public function test_get_items_no_permission() { + wp_set_current_user( 0 ); + $request = new WP_REST_Request( 'GET', '/wp/v2/posts/' . self::$post_id . '/autosaves' ); + $response = rest_get_server()->dispatch( $request ); + $this->assertErrorResponse( 'rest_cannot_read', $response, 401 ); + wp_set_current_user( self::$contributor_id ); + $response = rest_get_server()->dispatch( $request ); + $this->assertErrorResponse( 'rest_cannot_read', $response, 403 ); + } + + public function test_get_items_missing_parent() { + wp_set_current_user( self::$editor_id ); + $request = new WP_REST_Request( 'GET', '/wp/v2/posts/' . REST_TESTS_IMPOSSIBLY_HIGH_NUMBER . '/autosaves' ); + $response = rest_get_server()->dispatch( $request ); + $this->assertErrorResponse( 'rest_post_invalid_parent', $response, 404 ); + } + + public function test_get_items_invalid_parent_post_type() { + wp_set_current_user( self::$editor_id ); + $request = new WP_REST_Request( 'GET', '/wp/v2/posts/' . self::$page_id . '/autosaves' ); + $response = rest_get_server()->dispatch( $request ); + $this->assertErrorResponse( 'rest_post_invalid_parent', $response, 404 ); + } + + public function test_get_item() { + wp_set_current_user( self::$editor_id ); + $request = new WP_REST_Request( 'GET', '/wp/v2/posts/' . self::$post_id . '/autosaves/' . self::$autosave_post_id ); + $response = rest_get_server()->dispatch( $request ); + $this->assertEquals( 200, $response->get_status() ); + $data = $response->get_data(); + + $this->check_get_autosave_response( $response, $this->post_autosave ); + $fields = array( + 'author', + 'date', + 'date_gmt', + 'modified', + 'modified_gmt', + 'guid', + 'id', + 'parent', + 'slug', + 'title', + 'excerpt', + 'content', + ); + $this->assertEqualSets( $fields, array_keys( $data ) ); + $this->assertSame( self::$editor_id, $data['author'] ); + } + + public function test_get_item_embed_context() { + wp_set_current_user( self::$editor_id ); + $request = new WP_REST_Request( 'GET', '/wp/v2/posts/' . self::$post_id . '/autosaves/' . self::$autosave_post_id ); + $request->set_param( 'context', 'embed' ); + $response = rest_get_server()->dispatch( $request ); + $fields = array( + 'author', + 'date', + 'id', + 'parent', + 'slug', + 'title', + 'excerpt', + ); + $data = $response->get_data(); + $this->assertEqualSets( $fields, array_keys( $data ) ); + } + + public function test_get_item_no_permission() { + $request = new WP_REST_Request( 'GET', '/wp/v2/posts/' . self::$post_id . '/autosaves/' . self::$autosave_post_id ); + wp_set_current_user( self::$contributor_id ); + $response = rest_get_server()->dispatch( $request ); + $this->assertErrorResponse( 'rest_cannot_read', $response, 403 ); + } + + public function test_get_item_missing_parent() { + wp_set_current_user( self::$editor_id ); + $request = new WP_REST_Request( 'GET', '/wp/v2/posts/' . REST_TESTS_IMPOSSIBLY_HIGH_NUMBER . '/autosaves/' . self::$autosave_post_id ); + $response = rest_get_server()->dispatch( $request ); + $this->assertErrorResponse( 'rest_post_invalid_parent', $response, 404 ); + + } + + public function test_get_item_invalid_parent_post_type() { + wp_set_current_user( self::$editor_id ); + $request = new WP_REST_Request( 'GET', '/wp/v2/posts/' . self::$page_id . '/autosaves' ); + $response = rest_get_server()->dispatch( $request ); + $this->assertErrorResponse( 'rest_post_invalid_parent', $response, 404 ); + } + + public function test_delete_item() { + // Doesn't exist. + } + + public function test_prepare_item() { + wp_set_current_user( self::$editor_id ); + $request = new WP_REST_Request( 'GET', '/wp/v2/posts/' . self::$post_id . '/autosaves/' . self::$autosave_post_id ); + $response = rest_get_server()->dispatch( $request ); + $this->assertEquals( 200, $response->get_status() ); + $this->check_get_autosave_response( $response, $this->post_autosave ); + } + + public function test_get_item_schema() { + $request = new WP_REST_Request( 'OPTIONS', '/wp/v2/posts/' . self::$post_id . '/autosaves' ); + $response = rest_get_server()->dispatch( $request ); + $data = $response->get_data(); + $properties = $data['schema']['properties']; + $this->assertEquals( 13, count( $properties ) ); + $this->assertArrayHasKey( 'author', $properties ); + $this->assertArrayHasKey( 'content', $properties ); + $this->assertArrayHasKey( 'date', $properties ); + $this->assertArrayHasKey( 'date_gmt', $properties ); + $this->assertArrayHasKey( 'excerpt', $properties ); + $this->assertArrayHasKey( 'guid', $properties ); + $this->assertArrayHasKey( 'id', $properties ); + $this->assertArrayHasKey( 'modified', $properties ); + $this->assertArrayHasKey( 'modified_gmt', $properties ); + $this->assertArrayHasKey( 'parent', $properties ); + $this->assertArrayHasKey( 'slug', $properties ); + $this->assertArrayHasKey( 'title', $properties ); + $this->assertArrayHasKey( 'preview_link', $properties ); + } + + public function test_create_item() { + wp_set_current_user( self::$editor_id ); + + $request = new WP_REST_Request( 'POST', '/wp/v2/posts/' . self::$post_id . '/autosaves' ); + $request->add_header( 'content-type', 'application/x-www-form-urlencoded' ); + + $params = $this->set_post_data( + array( + 'id' => self::$post_id, + ) + ); + $request->set_body_params( $params ); + $response = rest_get_server()->dispatch( $request ); + + $this->check_create_autosave_response( $response ); + } + + public function test_update_item() { + wp_set_current_user( self::$editor_id ); + $request = new WP_REST_Request( 'POST', '/wp/v2/posts/' . self::$post_id . '/autosaves' ); + $request->add_header( 'content-type', 'application/x-www-form-urlencoded' ); + + $params = $this->set_post_data( + array( + 'id' => self::$post_id, + 'author' => self::$contributor_id, + ) + ); + + $request->set_body_params( $params ); + $response = rest_get_server()->dispatch( $request ); + + $this->check_create_autosave_response( $response ); + } + + public function test_update_item_nopriv() { + wp_set_current_user( self::$contributor_id ); + + $request = new WP_REST_Request( 'POST', '/wp/v2/posts/' . self::$post_id . '/autosaves' ); + $request->add_header( 'content-type', 'application/x-www-form-urlencoded' ); + + $params = $this->set_post_data( + array( + 'id' => self::$post_id, + 'author' => self::$editor_id, + ) + ); + + $request->set_body_params( $params ); + $response = rest_get_server()->dispatch( $request ); + + $this->assertErrorResponse( 'rest_cannot_edit', $response, 403 ); + } + + public function test_rest_autosave_published_post() { + wp_set_current_user( self::$editor_id ); + + $request = new WP_REST_Request( 'POST', '/wp/v2/posts/' . self::$post_id . '/autosaves' ); + $request->add_header( 'content-type', 'application/json' ); + + $current_post = get_post( self::$post_id ); + + $autosave_data = $this->set_post_data( + array( + 'id' => self::$post_id, + 'content' => 'Updated post \ content', + 'excerpt' => $current_post->post_excerpt, + 'title' => $current_post->post_title, + ) + ); + + $request->set_body( wp_json_encode( $autosave_data ) ); + $response = rest_get_server()->dispatch( $request ); + $new_data = $response->get_data(); + + $this->assertEquals( $current_post->ID, $new_data['parent'] ); + $this->assertEquals( $current_post->post_title, $new_data['title']['raw'] ); + $this->assertEquals( $current_post->post_excerpt, $new_data['excerpt']['raw'] ); + + // Updated post_content. + $this->assertNotEquals( $current_post->post_content, $new_data['content']['raw'] ); + + $autosave_post = wp_get_post_autosave( self::$post_id ); + $this->assertEquals( $autosave_data['title'], $autosave_post->post_title ); + $this->assertEquals( $autosave_data['content'], $autosave_post->post_content ); + $this->assertEquals( $autosave_data['excerpt'], $autosave_post->post_excerpt ); + } + + public function test_rest_autosave_draft_post_same_author() { + wp_set_current_user( self::$editor_id ); + + $post_data = array( + 'post_content' => 'Test post content', + 'post_title' => 'Test post title', + 'post_excerpt' => 'Test post excerpt', + ); + $post_id = wp_insert_post( $post_data ); + + $autosave_data = array( + 'id' => $post_id, + 'content' => 'Updated post \ content', + 'title' => 'Updated post title', + ); + + $request = new WP_REST_Request( 'POST', '/wp/v2/posts/' . self::$post_id . '/autosaves' ); + $request->add_header( 'content-type', 'application/json' ); + $request->set_body( wp_json_encode( $autosave_data ) ); + + $response = rest_get_server()->dispatch( $request ); + $new_data = $response->get_data(); + $post = get_post( $post_id ); + + $this->assertEquals( $post_id, $new_data['id'] ); + // The draft post should be updated. + $this->assertEquals( $autosave_data['content'], $new_data['content']['raw'] ); + $this->assertEquals( $autosave_data['title'], $new_data['title']['raw'] ); + $this->assertEquals( $autosave_data['content'], $post->post_content ); + $this->assertEquals( $autosave_data['title'], $post->post_title ); + + // Not updated. + $this->assertEquals( $post_data['post_excerpt'], $post->post_excerpt ); + + wp_delete_post( $post_id ); + } + + public function test_rest_autosave_draft_post_different_author() { + wp_set_current_user( self::$editor_id ); + + $post_data = array( + 'post_content' => 'Test post content', + 'post_title' => 'Test post title', + 'post_excerpt' => 'Test post excerpt', + 'post_author' => self::$editor_id + 1, + ); + $post_id = wp_insert_post( $post_data ); + + $autosave_data = array( + 'id' => $post_id, + 'content' => 'Updated post content', + 'excerpt' => $post_data['post_excerpt'], + 'title' => $post_data['post_title'], + ); + + $request = new WP_REST_Request( 'POST', '/wp/v2/posts/' . self::$post_id . '/autosaves' ); + $request->add_header( 'content-type', 'application/json' ); + $request->set_body( wp_json_encode( $autosave_data ) ); + + $response = rest_get_server()->dispatch( $request ); + $new_data = $response->get_data(); + $current_post = get_post( $post_id ); + + $this->assertEquals( $current_post->ID, $new_data['parent'] ); + + // The draft post shouldn't change. + $this->assertEquals( $current_post->post_title, $post_data['post_title'] ); + $this->assertEquals( $current_post->post_content, $post_data['post_content'] ); + $this->assertEquals( $current_post->post_excerpt, $post_data['post_excerpt'] ); + + $autosave_post = wp_get_post_autosave( $post_id ); + + // No changes. + $this->assertEquals( $current_post->post_title, $autosave_post->post_title ); + $this->assertEquals( $current_post->post_excerpt, $autosave_post->post_excerpt ); + + // Has changes. + $this->assertEquals( $autosave_data['content'], $autosave_post->post_content ); + + wp_delete_post( $post_id ); + } + + public function test_get_additional_field_registration() { + $schema = array( + 'type' => 'integer', + 'description' => 'Some integer of mine', + 'enum' => array( 1, 2, 3, 4 ), + 'context' => array( 'view', 'edit' ), + ); + + register_rest_field( + 'post-revision', + 'my_custom_int', + array( + 'schema' => $schema, + 'get_callback' => array( $this, 'additional_field_get_callback' ), + 'update_callback' => array( $this, 'additional_field_update_callback' ), + ) + ); + + $request = new WP_REST_Request( 'OPTIONS', '/wp/v2/posts/' . self::$post_id . '/autosaves' ); + + $response = rest_get_server()->dispatch( $request ); + $data = $response->get_data(); + + $this->assertArrayHasKey( 'my_custom_int', $data['schema']['properties'] ); + $this->assertEquals( $schema, $data['schema']['properties']['my_custom_int'] ); + + wp_set_current_user( 1 ); + + $request = new WP_REST_Request( 'GET', '/wp/v2/posts/' . self::$post_id . '/autosaves/' . self::$autosave_post_id ); + + $response = rest_get_server()->dispatch( $request ); + $this->assertArrayHasKey( 'my_custom_int', $response->data ); + + global $wp_rest_additional_fields; + $wp_rest_additional_fields = array(); + } + + public function additional_field_get_callback( $object ) { + return get_post_meta( $object['id'], 'my_custom_int', true ); + } + + public function additional_field_update_callback( $value, $post ) { + update_post_meta( $post->ID, 'my_custom_int', $value ); + } + + protected function check_get_autosave_response( $response, $autosave ) { + if ( $response instanceof WP_REST_Response ) { + $links = $response->get_links(); + $response = $response->get_data(); + } else { + $this->assertArrayHasKey( '_links', $response ); + $links = $response['_links']; + } + + $this->assertEquals( $autosave->post_author, $response['author'] ); + + $rendered_content = apply_filters( 'the_content', $autosave->post_content ); + $this->assertEquals( $rendered_content, $response['content']['rendered'] ); + + $this->assertEquals( mysql_to_rfc3339( $autosave->post_date ), $response['date'] ); //@codingStandardsIgnoreLine + $this->assertEquals( mysql_to_rfc3339( $autosave->post_date_gmt ), $response['date_gmt'] ); //@codingStandardsIgnoreLine + + $rendered_guid = apply_filters( 'get_the_guid', $autosave->guid, $autosave->ID ); + $this->assertEquals( $rendered_guid, $response['guid']['rendered'] ); + + $this->assertEquals( $autosave->ID, $response['id'] ); + $this->assertEquals( mysql_to_rfc3339( $autosave->post_modified ), $response['modified'] ); //@codingStandardsIgnoreLine + $this->assertEquals( mysql_to_rfc3339( $autosave->post_modified_gmt ), $response['modified_gmt'] ); //@codingStandardsIgnoreLine + $this->assertEquals( $autosave->post_name, $response['slug'] ); + + $rendered_title = get_the_title( $autosave->ID ); + $this->assertEquals( $rendered_title, $response['title']['rendered'] ); + + $parent = get_post( $autosave->post_parent ); + $parent_controller = new WP_REST_Posts_Controller( $parent->post_type ); + $parent_object = get_post_type_object( $parent->post_type ); + $parent_base = ! empty( $parent_object->rest_base ) ? $parent_object->rest_base : $parent_object->name; + $this->assertEquals( rest_url( '/wp/v2/' . $parent_base . '/' . $autosave->post_parent ), $links['parent'][0]['href'] ); + } + + public function test_get_item_sets_up_postdata() { + wp_set_current_user( self::$editor_id ); + $request = new WP_REST_Request( 'GET', '/wp/v2/posts/' . self::$post_id . '/autosaves/' . self::$autosave_post_id ); + rest_get_server()->dispatch( $request ); + + $post = get_post(); + $parent_post_id = wp_is_post_revision( $post->ID ); + + $this->assertEquals( $post->ID, self::$autosave_post_id ); + $this->assertEquals( $parent_post_id, self::$post_id ); + } + +} diff --git a/tests/phpunit/tests/rest-api/rest-schema-setup.php b/tests/phpunit/tests/rest-api/rest-schema-setup.php index 1b868316f0692..70330b7f038ee 100644 --- a/tests/phpunit/tests/rest-api/rest-schema-setup.php +++ b/tests/phpunit/tests/rest-api/rest-schema-setup.php @@ -89,10 +89,14 @@ public function test_expected_routes_in_schema() { '/wp/v2/posts/(?P[\\d]+)', '/wp/v2/posts/(?P[\\d]+)/revisions', '/wp/v2/posts/(?P[\\d]+)/revisions/(?P[\\d]+)', + '/wp/v2/posts/(?P[\\d]+)/autosaves', + '/wp/v2/posts/(?P[\\d]+)/autosaves/(?P[\\d]+)', '/wp/v2/pages', '/wp/v2/pages/(?P[\\d]+)', '/wp/v2/pages/(?P[\\d]+)/revisions', '/wp/v2/pages/(?P[\\d]+)/revisions/(?P[\\d]+)', + '/wp/v2/pages/(?P[\\d]+)/autosaves', + '/wp/v2/pages/(?P[\\d]+)/autosaves/(?P[\\d]+)', '/wp/v2/media', '/wp/v2/media/(?P[\\d]+)', '/wp/v2/types', @@ -155,6 +159,16 @@ public function test_build_wp_api_client_fixtures() { $post_revisions = array_values( wp_get_post_revisions( $post_id ) ); $post_revision_id = $post_revisions[ count( $post_revisions ) - 1 ]->ID; + // Create an autosave. + wp_create_post_autosave( + array( + 'post_ID' => $post_id, + 'post_content' => 'Autosave post content.', + 'post_type' => 'post', + ) + ); + + $page_id = $this->factory->post->create( array( 'post_type' => 'page', 'post_name' => 'restapi-client-fixture-page', @@ -172,6 +186,15 @@ public function test_build_wp_api_client_fixtures() { $page_revisions = array_values( wp_get_post_revisions( $page_id ) ); $page_revision_id = $page_revisions[ count( $page_revisions ) - 1 ]->ID; + // Create an autosave. + wp_create_post_autosave( + array( + 'post_ID' => $page_id, + 'post_content' => 'Autosave page content.', + 'post_type' => 'page', + ) + ); + $tag_id = $this->factory->tag->create( array( 'name' => 'REST API Client Fixture: Tag', 'slug' => 'restapi-client-fixture-tag', @@ -257,6 +280,14 @@ public function test_build_wp_api_client_fixtures() { 'route' => '/wp/v2/posts/' . $post_id . '/revisions/' . $post_revision_id, 'name' => 'revision', ), + array( + 'route' => '/wp/v2/posts/' . $post_id . '/autosaves', + 'name' => 'postAutosaves', + ), + array( + 'route' => '/wp/v2/posts/' . $post_id . '/autosaves/' . $post_revision_id, + 'name' => 'autosave', + ), array( 'route' => '/wp/v2/pages', 'name' => 'PagesCollection', @@ -273,6 +304,14 @@ public function test_build_wp_api_client_fixtures() { 'route' => '/wp/v2/pages/'. $page_id . '/revisions/' . $page_revision_id, 'name' => 'pageRevision', ), + array( + 'route' => '/wp/v2/pages/' . $page_id . '/autosaves', + 'name' => 'pageAutosaves', + ), + array( + 'route' => '/wp/v2/pages/' . $page_id . '/autosaves/' . $page_revision_id, + 'name' => 'pageAutosave', + ), array( 'route' => '/wp/v2/media', 'name' => 'MediaCollection', diff --git a/tests/qunit/fixtures/wp-api-generated.js b/tests/qunit/fixtures/wp-api-generated.js index 5f3875ca04f10..42cd329df904a 100644 --- a/tests/qunit/fixtures/wp-api-generated.js +++ b/tests/qunit/fixtures/wp-api-generated.js @@ -850,6 +850,200 @@ mockedApiResponse.Schema = { } ] }, + "/wp/v2/posts/(?P[\\d]+)/autosaves": { + "namespace": "wp/v2", + "methods": [ + "GET", + "POST" + ], + "endpoints": [ + { + "methods": [ + "GET" + ], + "args": { + "parent": { + "required": false, + "description": "The ID for the parent of the object.", + "type": "integer" + }, + "context": { + "required": false, + "default": "view", + "enum": [ + "view", + "embed", + "edit" + ], + "description": "Scope under which the request is made; determines fields present in response.", + "type": "string" + }, + "page": { + "required": false, + "default": 1, + "description": "Current page of the collection.", + "type": "integer" + }, + "per_page": { + "required": false, + "description": "Maximum number of items to be returned in result set.", + "type": "integer" + }, + "search": { + "required": false, + "description": "Limit results to those matching a string.", + "type": "string" + }, + "exclude": { + "required": false, + "default": [], + "description": "Ensure result set excludes specific IDs.", + "type": "array", + "items": { + "type": "integer" + } + }, + "include": { + "required": false, + "default": [], + "description": "Limit result set to specific IDs.", + "type": "array", + "items": { + "type": "integer" + } + }, + "offset": { + "required": false, + "description": "Offset the result set by a specific number of items.", + "type": "integer" + }, + "order": { + "required": false, + "default": "desc", + "enum": [ + "asc", + "desc" + ], + "description": "Order sort attribute ascending or descending.", + "type": "string" + }, + "orderby": { + "required": false, + "default": "date", + "enum": [ + "date", + "id", + "include", + "relevance", + "slug", + "include_slugs", + "title" + ], + "description": "Sort collection by object attribute.", + "type": "string" + } + } + }, + { + "methods": [ + "POST" + ], + "args": { + "parent": { + "required": false, + "description": "The ID for the parent of the object.", + "type": "integer" + }, + "author": { + "required": false, + "description": "The ID for the author of the object.", + "type": "integer" + }, + "date": { + "required": false, + "description": "The date the object was published, in the site's timezone.", + "type": "string" + }, + "date_gmt": { + "required": false, + "description": "The date the object was published, as GMT.", + "type": "string" + }, + "id": { + "required": false, + "description": "Unique identifier for the object.", + "type": "integer" + }, + "modified": { + "required": false, + "description": "The date the object was last modified, in the site's timezone.", + "type": "string" + }, + "modified_gmt": { + "required": false, + "description": "The date the object was last modified, as GMT.", + "type": "string" + }, + "slug": { + "required": false, + "description": "An alphanumeric identifier for the object unique to its type.", + "type": "string" + }, + "title": { + "required": false, + "description": "The title for the object.", + "type": "object" + }, + "content": { + "required": false, + "description": "The content for the object.", + "type": "object" + }, + "excerpt": { + "required": false, + "description": "The excerpt for the object.", + "type": "object" + } + } + } + ] + }, + "/wp/v2/posts/(?P[\\d]+)/autosaves/(?P[\\d]+)": { + "namespace": "wp/v2", + "methods": [ + "GET" + ], + "endpoints": [ + { + "methods": [ + "GET" + ], + "args": { + "parent": { + "required": false, + "description": "The ID for the parent of the object.", + "type": "integer" + }, + "id": { + "required": false, + "description": "The ID for the object.", + "type": "integer" + }, + "context": { + "required": false, + "default": "view", + "enum": [ + "view", + "embed", + "edit" + ], + "description": "Scope under which the request is made; determines fields present in response.", + "type": "string" + } + } + } + ] + }, "/wp/v2/pages": { "namespace": "wp/v2", "methods": [ @@ -1456,6 +1650,200 @@ mockedApiResponse.Schema = { } ] }, + "/wp/v2/pages/(?P[\\d]+)/autosaves": { + "namespace": "wp/v2", + "methods": [ + "GET", + "POST" + ], + "endpoints": [ + { + "methods": [ + "GET" + ], + "args": { + "parent": { + "required": false, + "description": "The ID for the parent of the object.", + "type": "integer" + }, + "context": { + "required": false, + "default": "view", + "enum": [ + "view", + "embed", + "edit" + ], + "description": "Scope under which the request is made; determines fields present in response.", + "type": "string" + }, + "page": { + "required": false, + "default": 1, + "description": "Current page of the collection.", + "type": "integer" + }, + "per_page": { + "required": false, + "description": "Maximum number of items to be returned in result set.", + "type": "integer" + }, + "search": { + "required": false, + "description": "Limit results to those matching a string.", + "type": "string" + }, + "exclude": { + "required": false, + "default": [], + "description": "Ensure result set excludes specific IDs.", + "type": "array", + "items": { + "type": "integer" + } + }, + "include": { + "required": false, + "default": [], + "description": "Limit result set to specific IDs.", + "type": "array", + "items": { + "type": "integer" + } + }, + "offset": { + "required": false, + "description": "Offset the result set by a specific number of items.", + "type": "integer" + }, + "order": { + "required": false, + "default": "desc", + "enum": [ + "asc", + "desc" + ], + "description": "Order sort attribute ascending or descending.", + "type": "string" + }, + "orderby": { + "required": false, + "default": "date", + "enum": [ + "date", + "id", + "include", + "relevance", + "slug", + "include_slugs", + "title" + ], + "description": "Sort collection by object attribute.", + "type": "string" + } + } + }, + { + "methods": [ + "POST" + ], + "args": { + "parent": { + "required": false, + "description": "The ID for the parent of the object.", + "type": "integer" + }, + "author": { + "required": false, + "description": "The ID for the author of the object.", + "type": "integer" + }, + "date": { + "required": false, + "description": "The date the object was published, in the site's timezone.", + "type": "string" + }, + "date_gmt": { + "required": false, + "description": "The date the object was published, as GMT.", + "type": "string" + }, + "id": { + "required": false, + "description": "Unique identifier for the object.", + "type": "integer" + }, + "modified": { + "required": false, + "description": "The date the object was last modified, in the site's timezone.", + "type": "string" + }, + "modified_gmt": { + "required": false, + "description": "The date the object was last modified, as GMT.", + "type": "string" + }, + "slug": { + "required": false, + "description": "An alphanumeric identifier for the object unique to its type.", + "type": "string" + }, + "title": { + "required": false, + "description": "The title for the object.", + "type": "object" + }, + "content": { + "required": false, + "description": "The content for the object.", + "type": "object" + }, + "excerpt": { + "required": false, + "description": "The excerpt for the object.", + "type": "object" + } + } + } + ] + }, + "/wp/v2/pages/(?P[\\d]+)/autosaves/(?P[\\d]+)": { + "namespace": "wp/v2", + "methods": [ + "GET" + ], + "endpoints": [ + { + "methods": [ + "GET" + ], + "args": { + "parent": { + "required": false, + "description": "The ID for the parent of the object.", + "type": "integer" + }, + "id": { + "required": false, + "description": "The ID for the object.", + "type": "integer" + }, + "context": { + "required": false, + "default": "view", + "enum": [ + "view", + "embed", + "edit" + ], + "description": "Scope under which the request is made; determines fields present in response.", + "type": "string" + } + } + } + ] + }, "/wp/v2/media": { "namespace": "wp/v2", "methods": [ @@ -3842,7 +4230,7 @@ mockedApiResponse.PostsCollection = [ ], "version-history": [ { - "count": 1, + "count": 2, "href": "http://example.org/index.php?rest_route=/wp/v2/posts/4/revisions" } ], @@ -3933,6 +4321,35 @@ mockedApiResponse.postRevisions = [ "guid": { "rendered": "http://example.org/?p=5" }, + "title": { + "rendered": "" + }, + "content": { + "rendered": "

        Autosave post content.

        \n" + }, + "excerpt": { + "rendered": "" + }, + "_links": { + "parent": [ + { + "href": "http://example.org/index.php?rest_route=/wp/v2/posts/4" + } + ] + } + }, + { + "author": 389, + "date": "2017-02-14T00:00:00", + "date_gmt": "2017-02-14T00:00:00", + "id": 36707, + "modified": "2017-02-14T00:00:00", + "modified_gmt": "2017-02-14T00:00:00", + "parent": 36706, + "slug": "36706-revision-v1", + "guid": { + "rendered": "http://example.org/?p=36707" + }, "title": { "rendered": "REST API Client Fixture: Post" }, @@ -3945,7 +4362,7 @@ mockedApiResponse.postRevisions = [ "_links": { "parent": [ { - "href": "http://example.org/index.php?rest_route=/wp/v2/posts/4" + "href": "http://example.org/index.php?rest_route=/wp/v2/posts/36706" } ] } @@ -3975,6 +4392,61 @@ mockedApiResponse.revision = { } }; +mockedApiResponse.postAutosaves = [ + { + "author": 389, + "date": "2017-02-14T00:00:00", + "date_gmt": "2017-02-14T00:00:00", + "id": 36708, + "modified": "2017-02-14T00:00:00", + "modified_gmt": "2017-02-14T00:00:00", + "parent": 36706, + "slug": "36706-autosave-v1", + "guid": { + "rendered": "http://example.org/?p=36708" + }, + "title": { + "rendered": "" + }, + "content": { + "rendered": "

        Autosave post content.

        \n" + }, + "excerpt": { + "rendered": "" + }, + "_links": { + "parent": [ + { + "href": "http://example.org/index.php?rest_route=/wp/v2/posts/36706" + } + ] + } + } +]; + +mockedApiResponse.autosave = { + "author": 389, + "date": "2017-02-14T00:00:00", + "date_gmt": "2017-02-14T00:00:00", + "id": 36708, + "modified": "2017-02-14T00:00:00", + "modified_gmt": "2017-02-14T00:00:00", + "parent": 36706, + "slug": "36706-autosave-v1", + "guid": { + "rendered": "http://example.org/?p=36708" + }, + "title": { + "rendered": "" + }, + "content": { + "rendered": "

        Autosave post content.

        \n" + }, + "excerpt": { + "rendered": "" + } +}; + mockedApiResponse.PagesCollection = [ { "id": 6, @@ -4034,7 +4506,7 @@ mockedApiResponse.PagesCollection = [ ], "version-history": [ { - "count": 1, + "count": 2, "href": "http://example.org/index.php?rest_route=/wp/v2/pages/6/revisions" } ], @@ -4109,6 +4581,35 @@ mockedApiResponse.pageRevisions = [ "guid": { "rendered": "http://example.org/?p=7" }, + "title": { + "rendered": "" + }, + "content": { + "rendered": "

        Autosave page content.

        \n" + }, + "excerpt": { + "rendered": "" + }, + "_links": { + "parent": [ + { + "href": "http://example.org/index.php?rest_route=/wp/v2/pages/6" + } + ] + } + }, + { + "author": 389, + "date": "2017-02-14T00:00:00", + "date_gmt": "2017-02-14T00:00:00", + "id": 36710, + "modified": "2017-02-14T00:00:00", + "modified_gmt": "2017-02-14T00:00:00", + "parent": 36709, + "slug": "36709-revision-v1", + "guid": { + "rendered": "http://example.org/?p=36710" + }, "title": { "rendered": "REST API Client Fixture: Page" }, @@ -4121,7 +4622,7 @@ mockedApiResponse.pageRevisions = [ "_links": { "parent": [ { - "href": "http://example.org/index.php?rest_route=/wp/v2/pages/6" + "href": "http://example.org/index.php?rest_route=/wp/v2/pages/36709" } ] } @@ -4151,6 +4652,61 @@ mockedApiResponse.pageRevision = { } }; +mockedApiResponse.pageAutosaves = [ + { + "author": 389, + "date": "2017-02-14T00:00:00", + "date_gmt": "2017-02-14T00:00:00", + "id": 36711, + "modified": "2017-02-14T00:00:00", + "modified_gmt": "2017-02-14T00:00:00", + "parent": 36709, + "slug": "36709-autosave-v1", + "guid": { + "rendered": "http://example.org/?p=36711" + }, + "title": { + "rendered": "" + }, + "content": { + "rendered": "

        Autosave page content.

        \n" + }, + "excerpt": { + "rendered": "" + }, + "_links": { + "parent": [ + { + "href": "http://example.org/index.php?rest_route=/wp/v2/pages/36709" + } + ] + } + } +]; + +mockedApiResponse.pageAutosave = { + "author": 389, + "date": "2017-02-14T00:00:00", + "date_gmt": "2017-02-14T00:00:00", + "id": 36711, + "modified": "2017-02-14T00:00:00", + "modified_gmt": "2017-02-14T00:00:00", + "parent": 36709, + "slug": "36709-autosave-v1", + "guid": { + "rendered": "http://example.org/?p=36711" + }, + "title": { + "rendered": "" + }, + "content": { + "rendered": "

        Autosave page content.

        \n" + }, + "excerpt": { + "rendered": "" + } +}; + mockedApiResponse.MediaCollection = [ { "id": 8, From 523213aa06fe5033e6b55a3a2d1e83cf12df2b76 Mon Sep 17 00:00:00 2001 From: Daniel Bachhuber Date: Fri, 19 Oct 2018 14:08:12 +0000 Subject: [PATCH 474/537] REST API: Skip Autosaves controller test for multisite. There's some PHP 5.2 (cough, cough) edge case where paths calculated differently, possibly caused by differing version of PHPUnit. See #45132, #45131, #43316. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43769 602fd350-edb4-49c9-b593-d223f7449a82 --- tests/phpunit/multisite.xml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/tests/phpunit/multisite.xml b/tests/phpunit/multisite.xml index df36aeea5af4b..d8aa698e360a6 100644 --- a/tests/phpunit/multisite.xml +++ b/tests/phpunit/multisite.xml @@ -15,16 +15,15 @@ tests/phpunit/tests/image/editor.php tests/phpunit/tests/image/editorGd.php tests/phpunit/tests/image/editorImagick.php + + tests/rest-api/rest-autosaves-controller.php + tests/phpunit/tests/rest-api/rest-autosaves-controller.php tests/phpunit/tests/actions/closures.php tests/phpunit/tests/image/editor.php tests/phpunit/tests/image/editorGd.php tests/phpunit/tests/image/editorImagick.php - - - tests/rest-api/rest-autosaves-controller.php - From e9613346e66f4f638097f6d12e2a3b910dbe6e4c Mon Sep 17 00:00:00 2001 From: Daniel Bachhuber Date: Fri, 19 Oct 2018 17:57:38 +0000 Subject: [PATCH 475/537] REST API: Include `block_version` on Post `content` object. The `block_version` denotes which version of Blocks the `post_content` contains. Introduces new `block_version()` function for versioning Blocks. Props danielbachhuber, birgire. Fixes #43887. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43770 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/blocks.php | 16 ++++- .../class-wp-rest-posts-controller.php | 13 +++- tests/phpunit/tests/blocks/block-type.php | 43 ++++++++++++++ .../tests/rest-api/rest-posts-controller.php | 59 +++++++++++++++++++ tests/qunit/fixtures/wp-api-generated.js | 56 +++++++++--------- 5 files changed, 155 insertions(+), 32 deletions(-) diff --git a/src/wp-includes/blocks.php b/src/wp-includes/blocks.php index 0bbc6a345c1c5..4795631de7111 100644 --- a/src/wp-includes/blocks.php +++ b/src/wp-includes/blocks.php @@ -261,4 +261,18 @@ function _recurse_do_blocks( $blocks, $all_blocks ) { $rendered_content = preg_replace( '//m', '', $rendered_content ); return $rendered_content; -} \ No newline at end of file +} + +/** + * Returns the current version of the block format that the content string is using. + * + * If the string doesn't contain blocks, it returns 0. + * + * @since 5.0.0 + * + * @param string $content Content to test. + * @return int The block format version. + */ +function block_version( $content ) { + return has_blocks( $content ) ? 1 : 0; +} diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php index 3fbf169b767ff..c2b707dfa062b 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php @@ -1509,10 +1509,11 @@ public function prepare_item_for_response( $post, $request ) { if ( in_array( 'content', $fields, true ) ) { $data['content'] = array( - 'raw' => $post->post_content, + 'raw' => $post->post_content, /** This filter is documented in wp-includes/post-template.php */ - 'rendered' => post_password_required( $post ) ? '' : apply_filters( 'the_content', $post->post_content ), - 'protected' => (bool) $post->post_password, + 'rendered' => post_password_required( $post ) ? '' : apply_filters( 'the_content', $post->post_content ), + 'protected' => (bool) $post->post_password, + 'block_version' => block_version( $post->post_content ), ); } @@ -2062,6 +2063,12 @@ public function get_item_schema() { 'context' => array( 'view', 'edit' ), 'readonly' => true, ), + 'block_version' => array( + 'description' => __( 'Version of the content block format used by the object.' ), + 'type' => 'integer', + 'context' => array( 'edit' ), + 'readonly' => true, + ), 'protected' => array( 'description' => __( 'Whether the content is protected with a password.' ), 'type' => 'boolean', diff --git a/tests/phpunit/tests/blocks/block-type.php b/tests/phpunit/tests/blocks/block-type.php index 5eed28d0df241..ba80ab69a9101 100644 --- a/tests/phpunit/tests/blocks/block-type.php +++ b/tests/phpunit/tests/blocks/block-type.php @@ -310,4 +310,47 @@ public function render_fake_block_with_content( $attributes, $content ) { return json_encode( $attributes ); } + + /** + * Testing the block version. + * + * @ticket 43887 + * + * @dataProvider data_block_version + * + * @param string|null $content Content. + * @param int $expected Expected block version. + */ + public function test_block_version( $content, $expected ) { + $this->assertSame( $expected, block_version( $content ) ); + } + + /** + * Test cases for test_block_version(). + * + * @since 5.0.0 + * + * @return array { + * @type array { + * @type string|null Content. + * @type int Expected block version. + * } + * } + */ + public function data_block_version() { + return array( + // Null. + array( null, 0 ), + // Empty post content. + array( '', 0 ), + // Post content without blocks. + array( '
        ', 0 ), + // Post content with a block. + array( '', 1 ), + // Post content with a fake block. + array( '', 1 ), + // Post content with an invalid block. + array( '', 0 ), + ); + } } diff --git a/tests/phpunit/tests/rest-api/rest-posts-controller.php b/tests/phpunit/tests/rest-api/rest-posts-controller.php index 7969a84b45976..10f6a6eebc5c0 100644 --- a/tests/phpunit/tests/rest-api/rest-posts-controller.php +++ b/tests/phpunit/tests/rest-api/rest-posts-controller.php @@ -1332,6 +1332,65 @@ public function test_get_post_with_password_without_permission() { $this->assertTrue( $data['excerpt']['protected'] ); } + /** + * The post response should not have `block_version` when in view context. + * + * @ticket 43887 + */ + public function test_get_post_should_not_have_block_version_when_context_view() { + $post_id = $this->factory->post->create( + array( + 'post_content' => '', + ) + ); + + $request = new WP_REST_Request( 'GET', sprintf( '/wp/v2/posts/%d', $post_id ) ); + $response = rest_get_server()->dispatch( $request ); + $data = $response->get_data(); + $this->assertFalse( isset( $data['content']['block_version'] ) ); + } + + /** + * The post response should have `block_version` indicate that block content is present when in edit context. + * + * @ticket 43887 + */ + public function test_get_post_should_have_block_version_indicate_block_content_when_context_edit() { + wp_set_current_user( self::$editor_id ); + + $post_id = $this->factory->post->create( + array( + 'post_content' => '', + ) + ); + + $request = new WP_REST_Request( 'GET', sprintf( '/wp/v2/posts/%d', $post_id ) ); + $request->set_param( 'context', 'edit' ); + $response = rest_get_server()->dispatch( $request ); + $data = $response->get_data(); + $this->assertSame( 1, $data['content']['block_version'] ); + } + + /** + * The post response should have `block_version` indicate that no block content is present when in edit context. + * + * @ticket 43887 + */ + public function test_get_post_should_have_block_version_indicate_no_block_content_when_context_edit() { + wp_set_current_user( self::$editor_id ); + + $post_id = $this->factory->post->create( + array( + 'post_content' => '
        ', + ) + ); + $request = new WP_REST_Request( 'GET', sprintf( '/wp/v2/posts/%d', $post_id ) ); + $request->set_param( 'context', 'edit' ); + $response = rest_get_server()->dispatch( $request ); + $data = $response->get_data(); + $this->assertSame( 0, $data['content']['block_version'] ); + } + public function test_get_item_read_permission_custom_post_status_not_authenticated() { register_post_status( 'testpubstatus', array( 'public' => true ) ); register_post_status( 'testprivtatus', array( 'public' => false ) ); diff --git a/tests/qunit/fixtures/wp-api-generated.js b/tests/qunit/fixtures/wp-api-generated.js index 42cd329df904a..8a236da00ddef 100644 --- a/tests/qunit/fixtures/wp-api-generated.js +++ b/tests/qunit/fixtures/wp-api-generated.js @@ -4342,13 +4342,13 @@ mockedApiResponse.postRevisions = [ "author": 389, "date": "2017-02-14T00:00:00", "date_gmt": "2017-02-14T00:00:00", - "id": 36707, + "id": 36710, "modified": "2017-02-14T00:00:00", "modified_gmt": "2017-02-14T00:00:00", - "parent": 36706, - "slug": "36706-revision-v1", + "parent": 36709, + "slug": "36709-revision-v1", "guid": { - "rendered": "http://example.org/?p=36707" + "rendered": "http://example.org/?p=36710" }, "title": { "rendered": "REST API Client Fixture: Post" @@ -4362,7 +4362,7 @@ mockedApiResponse.postRevisions = [ "_links": { "parent": [ { - "href": "http://example.org/index.php?rest_route=/wp/v2/posts/36706" + "href": "http://example.org/index.php?rest_route=/wp/v2/posts/36709" } ] } @@ -4397,13 +4397,13 @@ mockedApiResponse.postAutosaves = [ "author": 389, "date": "2017-02-14T00:00:00", "date_gmt": "2017-02-14T00:00:00", - "id": 36708, + "id": 36711, "modified": "2017-02-14T00:00:00", "modified_gmt": "2017-02-14T00:00:00", - "parent": 36706, - "slug": "36706-autosave-v1", + "parent": 36709, + "slug": "36709-autosave-v1", "guid": { - "rendered": "http://example.org/?p=36708" + "rendered": "http://example.org/?p=36711" }, "title": { "rendered": "" @@ -4417,7 +4417,7 @@ mockedApiResponse.postAutosaves = [ "_links": { "parent": [ { - "href": "http://example.org/index.php?rest_route=/wp/v2/posts/36706" + "href": "http://example.org/index.php?rest_route=/wp/v2/posts/36709" } ] } @@ -4428,13 +4428,13 @@ mockedApiResponse.autosave = { "author": 389, "date": "2017-02-14T00:00:00", "date_gmt": "2017-02-14T00:00:00", - "id": 36708, + "id": 36711, "modified": "2017-02-14T00:00:00", "modified_gmt": "2017-02-14T00:00:00", - "parent": 36706, - "slug": "36706-autosave-v1", + "parent": 36709, + "slug": "36709-autosave-v1", "guid": { - "rendered": "http://example.org/?p=36708" + "rendered": "http://example.org/?p=36711" }, "title": { "rendered": "" @@ -4602,13 +4602,13 @@ mockedApiResponse.pageRevisions = [ "author": 389, "date": "2017-02-14T00:00:00", "date_gmt": "2017-02-14T00:00:00", - "id": 36710, + "id": 36713, "modified": "2017-02-14T00:00:00", "modified_gmt": "2017-02-14T00:00:00", - "parent": 36709, - "slug": "36709-revision-v1", + "parent": 36712, + "slug": "36712-revision-v1", "guid": { - "rendered": "http://example.org/?p=36710" + "rendered": "http://example.org/?p=36713" }, "title": { "rendered": "REST API Client Fixture: Page" @@ -4622,7 +4622,7 @@ mockedApiResponse.pageRevisions = [ "_links": { "parent": [ { - "href": "http://example.org/index.php?rest_route=/wp/v2/pages/36709" + "href": "http://example.org/index.php?rest_route=/wp/v2/pages/36712" } ] } @@ -4657,13 +4657,13 @@ mockedApiResponse.pageAutosaves = [ "author": 389, "date": "2017-02-14T00:00:00", "date_gmt": "2017-02-14T00:00:00", - "id": 36711, + "id": 36714, "modified": "2017-02-14T00:00:00", "modified_gmt": "2017-02-14T00:00:00", - "parent": 36709, - "slug": "36709-autosave-v1", + "parent": 36712, + "slug": "36712-autosave-v1", "guid": { - "rendered": "http://example.org/?p=36711" + "rendered": "http://example.org/?p=36714" }, "title": { "rendered": "" @@ -4677,7 +4677,7 @@ mockedApiResponse.pageAutosaves = [ "_links": { "parent": [ { - "href": "http://example.org/index.php?rest_route=/wp/v2/pages/36709" + "href": "http://example.org/index.php?rest_route=/wp/v2/pages/36712" } ] } @@ -4688,13 +4688,13 @@ mockedApiResponse.pageAutosave = { "author": 389, "date": "2017-02-14T00:00:00", "date_gmt": "2017-02-14T00:00:00", - "id": 36711, + "id": 36714, "modified": "2017-02-14T00:00:00", "modified_gmt": "2017-02-14T00:00:00", - "parent": 36709, - "slug": "36709-autosave-v1", + "parent": 36712, + "slug": "36712-autosave-v1", "guid": { - "rendered": "http://example.org/?p=36711" + "rendered": "http://example.org/?p=36714" }, "title": { "rendered": "" From 7eeb2e599e81406bbc8826668fb4d53d17d51172 Mon Sep 17 00:00:00 2001 From: Daniel Bachhuber Date: Fri, 19 Oct 2018 18:32:03 +0000 Subject: [PATCH 476/537] REST API: Handle api-request query parameters with plain permalinks. When constructing the request URL, ensure that `?` is replaced with `&` when the API root already contains a `?`. Fixes an issue where requests were broken when sites had permalinks set to plain. Props aduth. Merges [42965] to the 5.0 branch. Fixes #42382. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43771 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/js/api-request.js | 13 +++++++++++-- tests/qunit/wp-includes/js/api-request.js | 4 ++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/wp-includes/js/api-request.js b/src/wp-includes/js/api-request.js index f0a84ef48f2ca..4b299beb6961f 100644 --- a/src/wp-includes/js/api-request.js +++ b/src/wp-includes/js/api-request.js @@ -22,7 +22,7 @@ apiRequest.buildAjaxOptions = function( options ) { var url = options.url; var path = options.path; - var namespaceTrimmed, endpointTrimmed; + var namespaceTrimmed, endpointTrimmed, apiRoot; var headers, addNonceHeader, headerName; if ( @@ -38,7 +38,16 @@ } } if ( typeof path === 'string' ) { - url = wpApiSettings.root + path.replace( /^\//, '' ); + apiRoot = wpApiSettings.root; + path = path.replace( /^\//, '' ); + + // API root may already include query parameter prefix if site is + // configured to use plain permalinks. + if ( 'string' === typeof apiRoot && -1 !== apiRoot.indexOf( '?' ) ) { + path = path.replace( '?', '&' ); + } + + url = apiRoot + path; } // If ?_wpnonce=... is present, no need to add a nonce header. diff --git a/tests/qunit/wp-includes/js/api-request.js b/tests/qunit/wp-includes/js/api-request.js index 99a1213ea3891..86d0d72cda17a 100644 --- a/tests/qunit/wp-includes/js/api-request.js +++ b/tests/qunit/wp-includes/js/api-request.js @@ -140,9 +140,9 @@ window.wpApiSettings.root = 'http://localhost/index.php?rest_route=/'; assert.deepEqual( wp.apiRequest.buildAjaxOptions( { namespace: '/wp/v2/', - endpoint: '/posts' + endpoint: '/posts?orderby=title' } ), { - url: 'http://localhost/index.php?rest_route=/wp/v2/posts', + url: 'http://localhost/index.php?rest_route=/wp/v2/posts&orderby=title', headers: nonceHeader } ); } From 445e2ea59863e9966bcc8158fab9be12089c44bd Mon Sep 17 00:00:00 2001 From: Daniel Bachhuber Date: Fri, 19 Oct 2018 18:40:33 +0000 Subject: [PATCH 477/537] Help/About: Ensure the space after the period for the 4.9.8 changelog entry is preserved. Props chetan200891, burhandodhy, swissspidy. Merges [43622] to the 5.0 branch. See #44717. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43772 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/about.php | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/wp-admin/about.php b/src/wp-admin/about.php index 098cbc17be877..549cc13c3029f 100644 --- a/src/wp-admin/about.php +++ b/src/wp-admin/about.php @@ -45,12 +45,10 @@ '4.9.8', number_format_i18n( 46 ) ); - - printf( - /* translators: %s: Codex URL */ - __( 'For more information, see the release notes.' ), - 'https://codex.wordpress.org/Version_4.9.8' - ); + ?> + the release notes.' ), 'https://codex.wordpress.org/Version_4.9.8' ); ?>

        From de6ca79fca9494c1271be41f78e40b1905525f37 Mon Sep 17 00:00:00 2001 From: Daniel Bachhuber Date: Fri, 19 Oct 2018 18:52:31 +0000 Subject: [PATCH 478/537] REST API: Limit the scope of wp-admin files required in WP_REST_Attachments_Controller methods. Narrow the scope of the included wp-admin files loaded for `wp_generate_attachment_metadata()`, `wp_handle_upload()`, `wp_tempnam()`, and `wp_handle_sideload()`. Requires only `wp-admin/includes/file.php` and `wp-admin/includes/image.php` instead of `wp-admin/includes/admin.php`. Props ocean90, lonelyvegan, soulseekah, pratikthink. Merges [43589], [43604] to the 5.0 branch. Fixes #43757. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43773 602fd350-edb4-49c9-b593-d223f7449a82 --- .../class-wp-rest-attachments-controller.php | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php index 5d782b6b68be4..22e8fd65e88fc 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php @@ -122,6 +122,9 @@ public function create_item( $request ) { $type = $file['type']; $file = $file['file']; + // Include image functions to get access to wp_read_image_metadata(). + require_once ABSPATH . 'wp-admin/includes/image.php'; + // use image exif/iptc data for title and caption defaults if possible $image_meta = wp_read_image_metadata( $file ); @@ -169,8 +172,8 @@ public function create_item( $request ) { */ do_action( 'rest_insert_attachment', $attachment, $request, true ); - // Include admin functions to get access to wp_generate_attachment_metadata(). - require_once ABSPATH . 'wp-admin/includes/admin.php'; + // Include admin function to get access to wp_generate_attachment_metadata(). + require_once ABSPATH . 'wp-admin/includes/image.php'; wp_update_attachment_metadata( $id, wp_generate_attachment_metadata( $id, $file ) ); @@ -557,8 +560,8 @@ protected function upload_from_data( $data, $headers ) { // Get the content-type. $type = array_shift( $headers['content_type'] ); - /** Include admin functions to get access to wp_tempnam() and wp_handle_sideload() */ - require_once ABSPATH . 'wp-admin/includes/admin.php'; + /** Include admin functions to get access to wp_tempnam() and wp_handle_sideload(). */ + require_once ABSPATH . 'wp-admin/includes/file.php'; // Save the file. $tmpfname = wp_tempnam( $filename ); @@ -757,8 +760,8 @@ protected function upload_from_file( $files, $headers ) { return $size_check; } - /** Include admin functions to get access to wp_handle_upload() */ - require_once ABSPATH . 'wp-admin/includes/admin.php'; + /** Include admin function to get access to wp_handle_upload(). */ + require_once ABSPATH . 'wp-admin/includes/file.php'; $file = wp_handle_upload( $files['file'], $overrides ); From 48ae93d41ed2f7c8b0a6c4ec9f7b041b4ec95367 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Sat, 20 Oct 2018 04:20:58 +0000 Subject: [PATCH 479/537] REST API: Restore Autosaves controller test for multisite. PHPUnit 3.6.x requires `exclude` and `file` paths to be relative to the checkout root. PHPUnit 4.0.0+ requires the paths to be relative to the configuration file. See #45131. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43774 602fd350-edb4-49c9-b593-d223f7449a82 --- tests/phpunit/multisite.xml | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/tests/phpunit/multisite.xml b/tests/phpunit/multisite.xml index d8aa698e360a6..bcfc440a4a407 100644 --- a/tests/phpunit/multisite.xml +++ b/tests/phpunit/multisite.xml @@ -15,15 +15,22 @@ tests/phpunit/tests/image/editor.php tests/phpunit/tests/image/editorGd.php tests/phpunit/tests/image/editorImagick.php - - - tests/rest-api/rest-autosaves-controller.php + tests/phpunit/tests/rest-api/rest-autosaves-controller.php + + tests/rest-api/rest-autosaves-controller.php tests/phpunit/tests/actions/closures.php tests/phpunit/tests/image/editor.php tests/phpunit/tests/image/editorGd.php tests/phpunit/tests/image/editorImagick.php + + + + tests/phpunit/tests/rest-api/rest-autosaves-controller.php + + tests/rest-api/rest-autosaves-controller.php + From 709329b6dfa32432d27e6441d683aba5f0af0020 Mon Sep 17 00:00:00 2001 From: Gary Pendergast Date: Sat, 20 Oct 2018 08:35:41 +0000 Subject: [PATCH 480/537] Revisions: Improve performance of `WP_Text_Diff_Renderer_Table`. `WP_Text_Diff_Renderer_Table` is used to generate the diff view in revisions, but there were some cases that could cause it to take excessive amounts of time to run. Some noteable cases include: - When a large number of new lines were inserted in the middle of the post from one revision to the next. - When both revisions contain >100 lines. - When either revision contains a lot of long lines. In one extreme test case, the diff view took over a minute to generate. With this change, it now takes less than a second. See #35667. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43775 602fd350-edb4-49c9-b593-d223f7449a82 --- .../class-wp-text-diff-renderer-table.php | 52 +++++++++++++++---- 1 file changed, 41 insertions(+), 11 deletions(-) diff --git a/src/wp-includes/class-wp-text-diff-renderer-table.php b/src/wp-includes/class-wp-text-diff-renderer-table.php index 25ce839fafbef..47a3c9a99c100 100644 --- a/src/wp-includes/class-wp-text-diff-renderer-table.php +++ b/src/wp-includes/class-wp-text-diff-renderer-table.php @@ -55,6 +55,22 @@ class WP_Text_Diff_Renderer_Table extends Text_Diff_Renderer { protected $compat_fields = array( '_show_split_view', 'inline_diff_renderer', '_diff_threshold' ); + /** + * Caches the output of count_chars() in compute_string_distance() + * + * @var array + * @since 5.0.0 + */ + protected $count_cache = array(); + + /** + * Caches the difference calculation in compute_string_distance() + * + * @var array + * @since 5.0.0 + */ + protected $difference_cache = array(); + /** * Constructor - Call parent constructor with params array. * @@ -391,13 +407,11 @@ public function interleave_changed_lines( $orig, $final ) { if ( false === $final_pos ) { // This orig is paired with a blank final. array_splice( $final_rows, $orig_pos, 0, -1 ); } elseif ( $final_pos < $orig_pos ) { // This orig's match is up a ways. Pad final with blank rows. - $diff_pos = $final_pos - $orig_pos; - while ( $diff_pos < 0 ) - array_splice( $final_rows, $orig_pos, 0, $diff_pos++ ); + $diff_array = range( -1, $final_pos - $orig_pos ); + array_splice( $final_rows, $orig_pos, 0, $diff_array ); } elseif ( $final_pos > $orig_pos ) { // This orig's match is down a ways. Pad orig with blank rows. - $diff_pos = $orig_pos - $final_pos; - while ( $diff_pos < 0 ) - array_splice( $orig_rows, $orig_pos, 0, $diff_pos++ ); + $diff_array = range( -1, $orig_pos - $final_pos ); + array_splice( $orig_rows, $orig_pos, 0, $diff_array ); } } @@ -425,12 +439,28 @@ public function interleave_changed_lines( $orig, $final ) { * @return int */ public function compute_string_distance( $string1, $string2 ) { - // Vectors containing character frequency for all chars in each string - $chars1 = count_chars($string1); - $chars2 = count_chars($string2); + // Use an md5 hash of the strings for a count cache, as it's fast to generate, and collisions aren't a concern. + $count_key1 = md5( $string1 ); + $count_key2 = md5( $string2 ); + + // Cache vectors containing character frequency for all chars in each string. + if ( ! isset( $this->count_cache[ $count_key1 ] ) ) { + $this->count_cache[ $count_key1 ] = count_chars( $string1 ); + } + if ( ! isset( $this->count_cache[ $count_key2 ] ) ) { + $this->count_cache[ $count_key2 ] = count_chars( $string2 ); + } + + $chars1 = $this->count_cache[ $count_key1 ]; + $chars2 = $this->count_cache[ $count_key2 ]; + + $difference_key = md5( implode( ',', $chars1 ) . ':' . implode( ',', $chars2 ) ); + if ( ! isset( $this->difference_cache[ $difference_key ] ) ) { + // L1-norm of difference vector. + $this->difference_cache[ $difference_key ] = array_sum( array_map( array( $this, 'difference' ), $chars1, $chars2 ) ); + } - // L1-norm of difference vector. - $difference = array_sum( array_map( array($this, 'difference'), $chars1, $chars2 ) ); + $difference = $this->difference_cache[ $difference_key ]; // $string1 has zero length? Odd. Give huge penalty by not dividing. if ( !$string1 ) From a398d9963ab477a8d86e11c45c3e9d1777fc1055 Mon Sep 17 00:00:00 2001 From: Daniel Bachhuber Date: Sun, 21 Oct 2018 15:02:49 +0000 Subject: [PATCH 481/537] REST API: Render response in user locale with `?_locale=user`. Introduces new `determine_locale()` function for deciding the proper locale to use for a response. Default value is `get_user_locale()` in the admin, and `get_locale()` on the frontend. Because REST API requests are considered frontend requests, `?_locale=user` can be used to render the response in the user's locale. Also updates `wp-login.php?wp_lang` implementation to benefit from this abstraction. Props flixos90, mnelson4, swissspidy, TimothyBlynJacobs. Fixes #44758. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43776 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/class-wp-locale-switcher.php | 4 +- src/wp-includes/general-template.php | 2 +- src/wp-includes/l10n.php | 62 +++++++++++++++++--- src/wp-includes/script-loader.php | 2 +- src/wp-login.php | 27 --------- 5 files changed, 59 insertions(+), 38 deletions(-) diff --git a/src/wp-includes/class-wp-locale-switcher.php b/src/wp-includes/class-wp-locale-switcher.php index e111892871c16..aa74fb4f831cc 100644 --- a/src/wp-includes/class-wp-locale-switcher.php +++ b/src/wp-includes/class-wp-locale-switcher.php @@ -45,7 +45,7 @@ class WP_Locale_Switcher { * @since 4.7.0 */ public function __construct() { - $this->original_locale = is_admin() ? get_user_locale() : get_locale(); + $this->original_locale = determine_locale(); $this->available_languages = array_merge( array( 'en_US' ), get_available_languages() ); } @@ -67,7 +67,7 @@ public function init() { * @return bool True on success, false on failure. */ public function switch_to_locale( $locale ) { - $current_locale = is_admin() ? get_user_locale() : get_locale(); + $current_locale = determine_locale(); if ( $current_locale === $locale ) { return false; } diff --git a/src/wp-includes/general-template.php b/src/wp-includes/general-template.php index 63b85378e2348..c3eca6df89c48 100644 --- a/src/wp-includes/general-template.php +++ b/src/wp-includes/general-template.php @@ -703,7 +703,7 @@ function get_bloginfo( $show = '', $filter = 'raw' ) { */ $output = __( 'html_lang_attribute' ); if ( 'html_lang_attribute' === $output || preg_match( '/[^a-zA-Z0-9-]/', $output ) ) { - $output = is_admin() ? get_user_locale() : get_locale(); + $output = determine_locale(); $output = str_replace( '_', '-', $output ); } break; diff --git a/src/wp-includes/l10n.php b/src/wp-includes/l10n.php index 0ee9c46f2e0b5..b1aa6c553c95d 100644 --- a/src/wp-includes/l10n.php +++ b/src/wp-includes/l10n.php @@ -104,6 +104,54 @@ function get_user_locale( $user_id = 0 ) { return $locale ? $locale : get_locale(); } +/** + * Determine the current locale desired for the request. + * + * @since 5.0.0 + * + * @global string $pagenow + * + * @return string The determined locale. + */ +function determine_locale() { + /** + * Filters the locale for the current request prior to the default determination process. + * + * Using this filter allows to override the default logic, effectively short-circuiting the function. + * + * @since 5.0.0 + * + * @param string|null The locale to return and short-circuit, or null as default. + */ + $determined_locale = apply_filters( 'pre_determine_locale', null ); + if ( ! empty( $determined_locale ) && is_string( $determined_locale ) ) { + return $determined_locale; + } + + $determined_locale = get_locale(); + + if ( is_admin() ) { + $determined_locale = get_user_locale(); + } + + if ( isset( $_GET['_locale'] ) && 'user' === $_GET['_locale'] && wp_is_json_request() && is_user_logged_in() ) { + $determined_locale = get_user_locale(); + } + + if ( ! empty( $_GET['wp_lang'] ) && 'wp-login.php' === $GLOBALS['pagenow'] ) { + $determined_locale = sanitize_text_field( $_GET['wp_lang'] ); + } + + /** + * Filters the locale for the current request. + * + * @since 5.0.0 + * + * @param string $locale The locale. + */ + return apply_filters( 'determine_locale', $determined_locale ); +} + /** * Retrieve the translation of $text. * @@ -663,7 +711,7 @@ function unload_textdomain( $domain ) { */ function load_default_textdomain( $locale = null ) { if ( null === $locale ) { - $locale = is_admin() ? get_user_locale() : get_locale(); + $locale = determine_locale(); } // Unload previously loaded strings so we can switch translations. @@ -711,7 +759,7 @@ function load_plugin_textdomain( $domain, $deprecated = false, $plugin_rel_path * @param string $locale The plugin's current locale. * @param string $domain Text domain. Unique identifier for retrieving translated strings. */ - $locale = apply_filters( 'plugin_locale', is_admin() ? get_user_locale() : get_locale(), $domain ); + $locale = apply_filters( 'plugin_locale', determine_locale(), $domain ); $mofile = $domain . '-' . $locale . '.mo'; @@ -745,7 +793,7 @@ function load_plugin_textdomain( $domain, $deprecated = false, $plugin_rel_path */ function load_muplugin_textdomain( $domain, $mu_plugin_rel_path = '' ) { /** This filter is documented in wp-includes/l10n.php */ - $locale = apply_filters( 'plugin_locale', is_admin() ? get_user_locale() : get_locale(), $domain ); + $locale = apply_filters( 'plugin_locale', determine_locale(), $domain ); $mofile = $domain . '-' . $locale . '.mo'; @@ -784,7 +832,7 @@ function load_theme_textdomain( $domain, $path = false ) { * @param string $locale The theme's current locale. * @param string $domain Text domain. Unique identifier for retrieving translated strings. */ - $locale = apply_filters( 'theme_locale', is_admin() ? get_user_locale() : get_locale(), $domain ); + $locale = apply_filters( 'theme_locale', determine_locale(), $domain ); $mofile = $domain . '-' . $locale . '.mo'; @@ -915,7 +963,7 @@ function _get_path_to_translation_from_lang_dir( $domain ) { } } - $locale = is_admin() ? get_user_locale() : get_locale(); + $locale = determine_locale(); $mofile = "{$domain}-{$locale}.mo"; $path = WP_LANG_DIR . '/plugins/' . $mofile; @@ -1210,7 +1258,7 @@ function wp_dropdown_languages( $args = array() ) { selected( '', $parsed_args['selected'], false ) ); - // List installed languages. + // List installed languages. foreach ( $languages as $language ) { $structure[] = sprintf( '', @@ -1347,7 +1395,7 @@ function wp_get_jed_locale_data( $domain ) { $locale = array( '' => array( 'domain' => $domain, - 'lang' => is_admin() ? get_user_locale() : get_locale(), + 'lang' => determine_locale(), ), ); diff --git a/src/wp-includes/script-loader.php b/src/wp-includes/script-loader.php index dcc167e19f1aa..598e6dfac3bb0 100644 --- a/src/wp-includes/script-loader.php +++ b/src/wp-includes/script-loader.php @@ -905,7 +905,7 @@ function wp_default_scripts( &$scripts ) { $scripts->add( 'mediaelement-migrate', "/wp-includes/js/mediaelement/mediaelement-migrate$suffix.js", array(), false, 1); did_action( 'init' ) && $scripts->add_inline_script( 'mediaelement-core', sprintf( 'var mejsL10n = %s;', wp_json_encode( array( - 'language' => strtolower( strtok( is_admin() ? get_user_locale() : get_locale(), '_-' ) ), + 'language' => strtolower( strtok( determine_locale(), '_-' ) ), 'strings' => array( 'mejs.install-flash' => __( 'You are using a browser that does not have Flash player enabled or installed. Please turn on your Flash player plugin or download the latest version from https://get.adobe.com/flashplayer/' ), 'mejs.fullscreen-off' => __( 'Turn off Fullscreen' ), diff --git a/src/wp-login.php b/src/wp-login.php index ffd86c1e20825..fe9df8704b458 100644 --- a/src/wp-login.php +++ b/src/wp-login.php @@ -437,9 +437,6 @@ function retrieve_password() { if ( SITECOOKIEPATH != COOKIEPATH ) setcookie( TEST_COOKIE, 'WP Cookie check', 0, SITECOOKIEPATH, COOKIE_DOMAIN, $secure ); -$lang = ! empty( $_GET['wp_lang'] ) ? sanitize_text_field( $_GET['wp_lang'] ) : ''; -$switched_locale = switch_to_locale( $lang ); - /** * Fires when the login form is initialized. * @@ -500,10 +497,6 @@ function retrieve_password() { } setcookie( 'wp-postpass_' . COOKIEHASH, $hasher->HashPassword( wp_unslash( $_POST['post_password'] ) ), $expire, COOKIEPATH, COOKIE_DOMAIN, $secure ); - if ( $switched_locale ) { - restore_previous_locale(); - } - wp_safe_redirect( wp_get_referer() ); exit(); @@ -521,10 +514,6 @@ function retrieve_password() { $requested_redirect_to = ''; } - if ( $switched_locale ) { - restore_previous_locale(); - } - /** * Filters the log out redirect URL. * @@ -618,10 +607,6 @@ function retrieve_password() { Date: Mon, 22 Oct 2018 02:05:23 +0000 Subject: [PATCH 482/537] Block Editor: Add an `is_block_editor()` method to `WP_Screen`. This method allows checking (or setting) whether the block editor is loading on the current screen. See #45037. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43777 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/class-wp-screen.php | 24 +++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/wp-admin/includes/class-wp-screen.php b/src/wp-admin/includes/class-wp-screen.php index 84cbd9164fd54..6798b1c5cfb88 100644 --- a/src/wp-admin/includes/class-wp-screen.php +++ b/src/wp-admin/includes/class-wp-screen.php @@ -181,6 +181,14 @@ final class WP_Screen { */ private $_screen_settings; + /** + * Whether the screen is using the block editor. + * + * @since 5.0.0 + * @var bool + */ + public $is_block_editor = false; + /** * Fetches a screen object. * @@ -399,6 +407,22 @@ public function in_admin( $admin = null ) { return ( $admin == $this->in_admin ); } + /** + * Sets or returns whether the block editor is loading on the current screen. + * + * @since 5.0.0 + * + * @param bool $set Optional. Sets whether the block editor is loading on the current screen or not. + * @return bool True if the block editor is being loaded, false otherwise. + */ + public function is_block_editor( $set = null ) { + if ( $set !== null ) { + $this->is_block_editor = (bool) $set; + } + + return $this->is_block_editor; + } + /** * Sets the old string-based contextual help for the screen for backward compatibility. * From 0154e309d8c87644ea819c928a73bcef9f373977 Mon Sep 17 00:00:00 2001 From: Gary Pendergast Date: Mon, 22 Oct 2018 02:15:28 +0000 Subject: [PATCH 483/537] Block Editor: Add helper functions to collect meta box information. To allow the block editor to render meta boxes, it needs to collect information about how those meta boxes are registered, and format it for the block editor to make use of. See #45112. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43778 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/post.php | 141 +++++++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) diff --git a/src/wp-admin/includes/post.php b/src/wp-admin/includes/post.php index c644ae3391ced..e37050670b7d2 100644 --- a/src/wp-admin/includes/post.php +++ b/src/wp-admin/includes/post.php @@ -1890,6 +1890,12 @@ function use_block_editor_for_post( $post ) { return false; } + // We're in the meta box loader, so don't use the block editor. + if ( isset( $_GET['meta-box-loader'] ) ) { + check_admin_referer( 'meta-box-loader' ); + return false; + } + $use_block_editor = use_block_editor_for_post_type( $post->post_type ); /** @@ -2017,3 +2023,138 @@ function get_block_editor_server_block_settings() { return $blocks; } + +/** + * Renders the meta boxes forms. + * + * @since 5.0.0 + */ +function the_block_editor_meta_boxes() { + global $post, $current_screen, $wp_meta_boxes; + + // Handle meta box state. + $_original_meta_boxes = $wp_meta_boxes; + + /** + * Fires right before the meta boxes are rendered. + * + * This allows for the filtering of meta box data, that should already be + * present by this point. Do not use as a means of adding meta box data. + * + * @since 5.0.0 + * + * @param array $wp_meta_boxes Global meta box state. + */ + $wp_meta_boxes = apply_filters( 'filter_block_editor_meta_boxes', $wp_meta_boxes ); + $locations = array( 'side', 'normal', 'advanced' ); + $priorities = array( 'high', 'sorted', 'core', 'default', 'low' ); + + // Render meta boxes. + ?> +

        + +
        + +
        + +
        + + id ][ $location ] ) ) { + continue; + } + + foreach ( $priorities as $priority ) { + if ( ! isset( $wp_meta_boxes[ $current_screen->id ][ $location ][ $priority ] ) ) { + continue; + } + + $meta_boxes = (array) $wp_meta_boxes[ $current_screen->id ][ $location ][ $priority ]; + foreach ( $meta_boxes as $meta_box ) { + if ( ! empty( $meta_box['title'] ) ) { + $meta_boxes_per_location[ $location ][] = array( + 'id' => $meta_box['id'], + 'title' => $meta_box['title'], + ); + } + } + } + } + + /** + * Sadly we probably can not add this data directly into editor settings. + * + * Some meta boxes need admin_head to fire for meta box registry. + * admin_head fires after admin_enqueue_scripts, which is where we create our + * editor instance. + */ + $script = 'window._wpLoadBlockEditor.then( function() { + wp.data.dispatch( \'core/edit-post\' ).setAvailableMetaBoxesPerLocation( ' . wp_json_encode( $meta_boxes_per_location ) . ' ); + } );'; + + wp_add_inline_script( 'wp-edit-post', $script ); + + /** + * When `wp-edit-post` is output in the ``, the inline script needs to be manually printed. Otherwise, + * meta boxes will not display because inline scripts for `wp-edit-post` will not be printed again after this point. + */ + if ( wp_script_is( 'wp-edit-post', 'done' ) ) { + printf( "\n", trim( $script ) ); + } + + // Reset meta box data. + $wp_meta_boxes = $_original_meta_boxes; +} + +/** + * Renders the hidden form required for the meta boxes form. + * + * @since 5.0.0 + * + * @param WP_Post $post Current post object. + */ +function the_block_editor_meta_box_post_form_hidden_fields( $post ) { + $form_extra = ''; + if ( 'auto-draft' === $post->post_status ) { + $form_extra .= ""; + } + $form_action = 'editpost'; + $nonce_action = 'update-post_' . $post->ID; + $form_extra .= ""; + $referer = wp_get_referer(); + $current_user = wp_get_current_user(); + $user_id = $current_user->ID; + wp_nonce_field( $nonce_action ); + ?> + + + + + + + + Date: Mon, 22 Oct 2018 02:31:38 +0000 Subject: [PATCH 484/537] Meta Boxes: Add `__back_compat_meta_box` and `__block_editor_compatible_meta_box` flags to meta boxes. When meta boxes are registered, they can use the `__back_compat_meta_box` and `__block_editor_compatible_meta_box` flags, to show whether this registration just exists for if the classic editor is loaded, and whether this meta box is compatible with the block editor. When a meta box marks itself as incompatible with the block editor, and `WP_DEBUG` is enabled, a warning will show inside that meta box in the classic editor. As all core meta boxes have been recreated in the block editor, they can be marked with the `__back_compat_meta_box` flag. See #45112. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43779 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/edit-form-advanced.php | 32 ++++++++-------- src/wp-admin/includes/template.php | 58 +++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+), 16 deletions(-) diff --git a/src/wp-admin/edit-form-advanced.php b/src/wp-admin/edit-form-advanced.php index 2400521804260..9e8da8588d989 100644 --- a/src/wp-admin/edit-form-advanced.php +++ b/src/wp-admin/edit-form-advanced.php @@ -226,33 +226,33 @@ require_once( ABSPATH . 'wp-admin/includes/meta-boxes.php' ); -$publish_callback_args = null; +$publish_callback_args = array( '__back_compat_meta_box' => true ); if ( post_type_supports($post_type, 'revisions') && 'auto-draft' != $post->post_status ) { $revisions = wp_get_post_revisions( $post_ID ); // We should aim to show the revisions meta box only when there are revisions. if ( count( $revisions ) > 1 ) { reset( $revisions ); // Reset pointer for key() - $publish_callback_args = array( 'revisions_count' => count( $revisions ), 'revision_id' => key( $revisions ) ); - add_meta_box('revisionsdiv', __('Revisions'), 'post_revisions_meta_box', null, 'normal', 'core'); + $publish_callback_args = array( 'revisions_count' => count( $revisions ), 'revision_id' => key( $revisions ), '__back_compat_meta_box' => true ); + add_meta_box('revisionsdiv', __('Revisions'), 'post_revisions_meta_box', null, 'normal', 'core', array( '__back_compat_meta_box' => true ) ); } } if ( 'attachment' == $post_type ) { wp_enqueue_script( 'image-edit' ); wp_enqueue_style( 'imgareaselect' ); - add_meta_box( 'submitdiv', __('Save'), 'attachment_submit_meta_box', null, 'side', 'core' ); + add_meta_box( 'submitdiv', __('Save'), 'attachment_submit_meta_box', null, 'side', 'core', array( '__back_compat_meta_box' => true ) ); add_action( 'edit_form_after_title', 'edit_form_image_editor' ); if ( wp_attachment_is( 'audio', $post ) ) { - add_meta_box( 'attachment-id3', __( 'Metadata' ), 'attachment_id3_data_meta_box', null, 'normal', 'core' ); + add_meta_box( 'attachment-id3', __( 'Metadata' ), 'attachment_id3_data_meta_box', null, 'normal', 'core', array( '__back_compat_meta_box' => true ) ); } } else { add_meta_box( 'submitdiv', __( 'Publish' ), 'post_submit_meta_box', null, 'side', 'core', $publish_callback_args ); } if ( current_theme_supports( 'post-formats' ) && post_type_supports( $post_type, 'post-formats' ) ) - add_meta_box( 'formatdiv', _x( 'Format', 'post format' ), 'post_format_meta_box', null, 'side', 'core' ); + add_meta_box( 'formatdiv', _x( 'Format', 'post format' ), 'post_format_meta_box', null, 'side', 'core', array( '__back_compat_meta_box' => true ) ); // all taxonomies foreach ( get_object_taxonomies( $post ) as $tax_name ) { @@ -267,24 +267,24 @@ else $tax_meta_box_id = $tax_name . 'div'; - add_meta_box( $tax_meta_box_id, $label, $taxonomy->meta_box_cb, null, 'side', 'core', array( 'taxonomy' => $tax_name ) ); + add_meta_box( $tax_meta_box_id, $label, $taxonomy->meta_box_cb, null, 'side', 'core', array( 'taxonomy' => $tax_name, '__back_compat_meta_box' => true ) ); } if ( post_type_supports( $post_type, 'page-attributes' ) || count( get_page_templates( $post ) ) > 0 ) { - add_meta_box( 'pageparentdiv', $post_type_object->labels->attributes, 'page_attributes_meta_box', null, 'side', 'core' ); + add_meta_box( 'pageparentdiv', $post_type_object->labels->attributes, 'page_attributes_meta_box', null, 'side', 'core', array( '__back_compat_meta_box' => true ) ); } if ( $thumbnail_support && current_user_can( 'upload_files' ) ) - add_meta_box('postimagediv', esc_html( $post_type_object->labels->featured_image ), 'post_thumbnail_meta_box', null, 'side', 'low'); + add_meta_box('postimagediv', esc_html( $post_type_object->labels->featured_image ), 'post_thumbnail_meta_box', null, 'side', 'low', array( '__back_compat_meta_box' => true ) ); if ( post_type_supports($post_type, 'excerpt') ) - add_meta_box('postexcerpt', __('Excerpt'), 'post_excerpt_meta_box', null, 'normal', 'core'); + add_meta_box('postexcerpt', __('Excerpt'), 'post_excerpt_meta_box', null, 'normal', 'core', array( '__back_compat_meta_box' => true ) ); if ( post_type_supports($post_type, 'trackbacks') ) - add_meta_box('trackbacksdiv', __('Send Trackbacks'), 'post_trackback_meta_box', null, 'normal', 'core'); + add_meta_box('trackbacksdiv', __('Send Trackbacks'), 'post_trackback_meta_box', null, 'normal', 'core', array( '__back_compat_meta_box' => true ) ); if ( post_type_supports($post_type, 'custom-fields') ) - add_meta_box('postcustom', __('Custom Fields'), 'post_custom_meta_box', null, 'normal', 'core'); + add_meta_box('postcustom', __('Custom Fields'), 'post_custom_meta_box', null, 'normal', 'core', array( '__back_compat_meta_box' => true ) ); /** * Fires in the middle of built-in meta box registration. @@ -299,7 +299,7 @@ // Allow the Discussion meta box to show up if the post type supports comments, // or if comments or pings are open. if ( comments_open( $post ) || pings_open( $post ) || post_type_supports( $post_type, 'comments' ) ) { - add_meta_box( 'commentstatusdiv', __( 'Discussion' ), 'post_comment_status_meta_box', null, 'normal', 'core' ); + add_meta_box( 'commentstatusdiv', __( 'Discussion' ), 'post_comment_status_meta_box', null, 'normal', 'core', array( '__back_compat_meta_box' => true ) ); } $stati = get_post_stati( array( 'public' => true ) ); @@ -312,15 +312,15 @@ // If the post type support comments, or the post has comments, allow the // Comments meta box. if ( comments_open( $post ) || pings_open( $post ) || $post->comment_count > 0 || post_type_supports( $post_type, 'comments' ) ) { - add_meta_box( 'commentsdiv', __( 'Comments' ), 'post_comment_meta_box', null, 'normal', 'core' ); + add_meta_box( 'commentsdiv', __( 'Comments' ), 'post_comment_meta_box', null, 'normal', 'core', array( '__back_compat_meta_box' => true ) ); } } if ( ! ( 'pending' == get_post_status( $post ) && ! current_user_can( $post_type_object->cap->publish_posts ) ) ) - add_meta_box('slugdiv', __('Slug'), 'post_slug_meta_box', null, 'normal', 'core'); + add_meta_box('slugdiv', __('Slug'), 'post_slug_meta_box', null, 'normal', 'core', array( '__back_compat_meta_box' => true ) ); if ( post_type_supports( $post_type, 'author' ) && current_user_can( $post_type_object->cap->edit_others_posts ) ) { - add_meta_box( 'authordiv', __( 'Author' ), 'post_author_meta_box', null, 'normal', 'core' ); + add_meta_box( 'authordiv', __( 'Author' ), 'post_author_meta_box', null, 'normal', 'core', array( '__back_compat_meta_box' => true ) ); } /** diff --git a/src/wp-admin/includes/template.php b/src/wp-admin/includes/template.php index ca1121da821b1..9139246411dad 100644 --- a/src/wp-admin/includes/template.php +++ b/src/wp-admin/includes/template.php @@ -1051,6 +1051,28 @@ function do_meta_boxes( $screen, $context, $object ) { foreach ( (array) $wp_meta_boxes[ $page ][ $context ][ $priority ] as $box ) { if ( false == $box || ! $box['title'] ) continue; + + // Don't show boxes in the block editor, if they're just here for back compat. + if ( $screen->is_block_editor() && isset( $box['args']['__back_compat_meta_box'] ) && $box['args']['__back_compat_meta_box'] ) { + continue; + } + + // Don't show boxes in the block editor that aren't compatible with the block editor. + if ( $screen->is_block_editor() && isset( $box['args']['__block_editor_compatible_meta_box'] ) && ! $box['args']['__block_editor_compatible_meta_box'] ) { + continue; + } + + $block_compatible = true; + if ( isset( $box['args']['__block_editor_compatible_meta_box'] ) ) { + $block_compatible = (bool) $box['args']['__block_editor_compatible_meta_box']; + unset( $box['args']['__block_editor_compatible_meta_box'] ); + } + + if ( isset( $box['args']['__back_compat_meta_box'] ) ) { + $block_compatible |= (bool) $box['args']['__back_compat_meta_box']; + unset( $box['args']['__back_compat_meta_box'] ); + } + $i++; $hidden_class = in_array($box['id'], $hidden) ? ' hide-if-js' : ''; echo '
        ' . "\n"; @@ -1070,6 +1092,42 @@ function do_meta_boxes( $screen, $context, $object ) { } echo "

        {$box['title']}

        \n"; echo '
        ' . "\n"; + + if ( WP_DEBUG && ! $screen->is_block_editor() && ! isset( $_GET['meta-box-loader'] ) ) { + if ( is_array( $box['callback'] ) ) { + $reflection = new ReflectionMethod( $box['callback'][0], $box['callback'][1] ); + } else { + $reflection = new ReflectionFunction( $box['callback'] ); + } + + // Don't show an error if it's an internal PHP function. + if ( ! $reflection->isInternal() ) { + + // Only show errors if the meta box was registered by a plugin. + $filename = $reflection->getFileName(); + if ( strpos( $filename, WP_PLUGIN_DIR ) === 0 ) { + $filename = str_replace( WP_PLUGIN_DIR, '', $filename ); + $filename = preg_replace( '|^/([^/]*/).*$|', '\\1', $filename ); + + $plugins = get_plugins(); + foreach ( $plugins as $name => $plugin ) { + if ( strpos( $name, $filename ) === 0 ) { + ?> +
        +

        + {$plugin['Name']}" ); + ?> +

        +
        + \n"; echo "
        \n"; From b5c0d60b8b7cba594027be74d518771c3b00ecbe Mon Sep 17 00:00:00 2001 From: Gary Pendergast Date: Mon, 22 Oct 2018 03:13:09 +0000 Subject: [PATCH 485/537] Block Editor: Add extra body classes when the block editor is loaded. See #45037. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43780 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/admin-header.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/wp-admin/admin-header.php b/src/wp-admin/admin-header.php index d5ceeccd61bbc..158be6297bbbb 100644 --- a/src/wp-admin/admin-header.php +++ b/src/wp-admin/admin-header.php @@ -175,6 +175,15 @@ $admin_body_class .= ' no-customize-support no-svg'; +if ( $current_screen->is_block_editor() ) { + // Default to is-fullscreen-mode to avoid jumps in the UI. + $admin_body_class .= ' block-editor-page is-fullscreen-mode wp-embed-responsive'; + + if ( current_theme_supports( 'editor-styles' ) && current_theme_supports( 'dark-editor-style' ) ) { + $admin_body_class .= ' is-dark-theme'; + } +} + ?> Date: Mon, 22 Oct 2018 04:03:07 +0000 Subject: [PATCH 486/537] KSES: Allow `url()` to be used in inline CSS. The cover image block uses the `url()` function in its inline CSS, to show the cover image. KSES didn't allow this, causing the block to not save correctly for Author and Contributor users. As KSES does already check each attribute name against an allowed list, we're able to add an extra check for certain attributes to be able to use the `url()` function, too. Props peterwilsoncc, azaozz, pento, dd32. See #45067. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43781 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/kses.php | 86 ++++++++++++++--- tests/phpunit/tests/kses.php | 147 ++++++++++++++++++++++++++++++ tests/phpunit/tests/shortcode.php | 4 +- 3 files changed, 222 insertions(+), 15 deletions(-) diff --git a/src/wp-includes/kses.php b/src/wp-includes/kses.php index 99fdc6c9b1cf9..b5cedc6f85597 100644 --- a/src/wp-includes/kses.php +++ b/src/wp-includes/kses.php @@ -1707,14 +1707,14 @@ function kses_init() { * @return string Filtered string of CSS rules. */ function safecss_filter_attr( $css, $deprecated = '' ) { - if ( !empty( $deprecated ) ) + if ( ! empty( $deprecated ) ) { _deprecated_argument( __FUNCTION__, '2.8.1' ); // Never implemented + } - $css = wp_kses_no_null($css); - $css = str_replace(array("\n","\r","\t"), '', $css); + $css = wp_kses_no_null( $css ); + $css = str_replace( array( "\n", "\r", "\t" ), '', $css ); - if ( preg_match( '%[\\\\(&=}]|/\*%', $css ) ) // remove any inline css containing \ ( & } = or comments - return ''; + $allowed_protocols = wp_allowed_protocols(); $css_array = explode( ';', trim( $css ) ); @@ -1724,12 +1724,14 @@ function safecss_filter_attr( $css, $deprecated = '' ) { * @since 2.8.1 * @since 4.4.0 Added support for `min-height`, `max-height`, `min-width`, and `max-width`. * @since 4.6.0 Added support for `list-style-type`. + * @since 5.0.0 Added support for `background-image`. * * @param array $attr List of allowed CSS attributes. */ $allowed_attr = apply_filters( 'safe_style_css', array( 'background', 'background-color', + 'background-image', 'border', 'border-width', @@ -1798,25 +1800,83 @@ function safecss_filter_attr( $css, $deprecated = '' ) { 'list-style-type', ) ); - if ( empty($allowed_attr) ) + + /* + * CSS attributes that accept URL data types. + * + * This is in accordance to the CSS spec and unrelated to + * the sub-set of supported attributes above. + * + * See: https://developer.mozilla.org/en-US/docs/Web/CSS/url + */ + $css_url_data_types = array( + 'background', + 'background-image', + + 'cursor', + + 'list-style', + 'list-style-image', + ); + + if ( empty( $allowed_attr ) ) { return $css; + } $css = ''; foreach ( $css_array as $css_item ) { - if ( $css_item == '' ) + if ( $css_item == '' ) { continue; - $css_item = trim( $css_item ); - $found = false; + } + + $css_item = trim( $css_item ); + $css_test_string = $css_item; + $found = false; + $url_attr = false; + if ( strpos( $css_item, ':' ) === false ) { $found = true; } else { - $parts = explode( ':', $css_item ); - if ( in_array( trim( $parts[0] ), $allowed_attr ) ) + $parts = explode( ':', $css_item, 2 ); + $css_selector = trim( $parts[0] ); + + if ( in_array( $css_selector, $allowed_attr, true ) ) { $found = true; + $url_attr = in_array( $css_selector, $css_url_data_types, true ); + } + } + + if ( $found && $url_attr ) { + // Simplified: matches the sequence `url(*)`. + preg_match_all( '/url\([^)]+\)/', $parts[1], $url_matches ); + + foreach ( $url_matches[0] as $url_match ) { + // Clean up the URL from each of the matches above. + preg_match( '/^url\(\s*([\'\"]?)(.*)(\g1)\s*\)$/', $url_match, $url_pieces ); + + if ( empty( $url_pieces[2] ) ) { + $found = false; + break; + } + + $url = trim( $url_pieces[2] ); + + if ( empty( $url ) || $url !== wp_kses_bad_protocol( $url, $allowed_protocols ) ) { + $found = false; + break; + } else { + // Remove the whole `url(*)` bit that was matched above from the CSS. + $css_test_string = str_replace( $url_match, '', $css_test_string ); + } + } } - if ( $found ) { - if( $css != '' ) + + // Remove any CSS containing containing \ ( & } = or comments, except for url() useage checked above. + if ( $found && ! preg_match( '%[\\\(&=}]|/\*%', $css_test_string ) ) { + if ( $css != '' ) { $css .= ';'; + } + $css .= $css_item; } } diff --git a/tests/phpunit/tests/kses.php b/tests/phpunit/tests/kses.php index 2d9c28411fdf3..599c64d424531 100644 --- a/tests/phpunit/tests/kses.php +++ b/tests/phpunit/tests/kses.php @@ -813,4 +813,151 @@ function data_wildcard_attribute_prefixes() { array( 'data**', false ), ); } + + /** + * Test URL sanitization in the style tag. + * + * @dataProvider data_kses_style_attr_with_url + * + * @ticket 45067 + * + * @param $input string The style attribute saved in the editor. + * @param $expected string The sanitized style attribute. + */ + function test_kses_style_attr_with_url( $input, $expected ) { + $actual = safecss_filter_attr( $input ); + + $this->assertSame( $expected, $actual ); + } + + /** + * Data provider testing style attribute sanitization. + * + * @return array Nested array of input, expected pairs. + */ + function data_kses_style_attr_with_url() { + return array( + /* + * Valid use cases. + */ + + // Double quotes. + array( + 'background-image: url( "http://example.com/valid.gif" );', + 'background-image: url( "http://example.com/valid.gif" )', + ), + + // Single quotes. + array( + "background-image: url( 'http://example.com/valid.gif' );", + "background-image: url( 'http://example.com/valid.gif' )", + ), + + // No quotes. + array( + 'background-image: url( http://example.com/valid.gif );', + 'background-image: url( http://example.com/valid.gif )', + ), + + // Single quotes, extra spaces. + array( + "background-image: url( ' http://example.com/valid.gif ' );", + "background-image: url( ' http://example.com/valid.gif ' )", + ), + + // Line breaks, single quotes. + array( + "background-image: url(\n'http://example.com/valid.gif' );", + "background-image: url('http://example.com/valid.gif' )", + ), + + // Tabs not spaces, single quotes. + array( + "background-image: url(\t'http://example.com/valid.gif'\t\t);", + "background-image: url('http://example.com/valid.gif')", + ), + + // Single quotes, absolute path. + array( + "background: url('/valid.gif');", + "background: url('/valid.gif')", + ), + + // Single quotes, relative path. + array( + "background: url('../wp-content/uploads/2018/10/valid.gif');", + "background: url('../wp-content/uploads/2018/10/valid.gif')", + ), + + // Error check: valid property not containing a URL. + array( + "background: red", + "background: red", + ), + + /* + * Invalid use cases. + */ + + // Attribute doesn't support URL properties. + array( + 'color: url( "http://example.com/invalid.gif" );', + '', + ), + + // Mismatched quotes. + array( + 'background-image: url( "http://example.com/valid.gif\' );', + '', + ), + + // Bad protocol, double quotes. + array( + 'background-image: url( "bad://example.com/invalid.gif" );', + '', + ), + + // Bad protocol, single quotes. + array( + "background-image: url( 'bad://example.com/invalid.gif' );", + '', + ), + + // Bad protocol, single quotes. + array( + "background-image: url( 'bad://example.com/invalid.gif' );", + '', + ), + + // Bad protocol, single quotes, strange spacing. + array( + "background-image: url( ' \tbad://example.com/invalid.gif ' );", + '', + ), + + // Bad protocol, no quotes. + array( + 'background-image: url( bad://example.com/invalid.gif );', + '', + ), + + // No URL inside url(). + array( + 'background-image: url();', + '', + ), + + // Malformed, no closing `)`. + array( + 'background-image: url( "http://example.com" ;', + '', + ), + + // Malformed, no closing `"`. + array( + 'background-image: url( "http://example.com );', + '', + ), + ); + } } diff --git a/tests/phpunit/tests/shortcode.php b/tests/phpunit/tests/shortcode.php index 273d04d715cbf..30fdd5a5248ad 100644 --- a/tests/phpunit/tests/shortcode.php +++ b/tests/phpunit/tests/shortcode.php @@ -492,8 +492,8 @@ function data_escaping() { '<[gallery]>', ), array( - '
        ', - '
        ', + '
        ', + '
        ', ), array( '[gallery]
        Hello
        [/gallery]', From 34aa09d5b833f184e48b0af6721599d11873d3af Mon Sep 17 00:00:00 2001 From: Gary Pendergast Date: Mon, 22 Oct 2018 04:49:24 +0000 Subject: [PATCH 487/537] Build: Switch package.json to using tabs for indents. Merges [42460] to the 5.0 branch. Props netweb. Fixes #43075. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43782 602fd350-edb4-49c9-b593-d223f7449a82 --- .editorconfig | 2 +- package-lock.json | 56 +++++++------- package.json | 188 +++++++++++++++++++++++----------------------- 3 files changed, 123 insertions(+), 123 deletions(-) diff --git a/.editorconfig b/.editorconfig index cf39b910ba342..c6f3cf49588a3 100644 --- a/.editorconfig +++ b/.editorconfig @@ -13,7 +13,7 @@ insert_final_newline = true trim_trailing_whitespace = true indent_style = tab -[{package.json,*.yml}] +[*.yml] indent_style = space indent_size = 2 diff --git a/package-lock.json b/package-lock.json index 7a0f8235db93d..43f8908b5beef 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2210,7 +2210,7 @@ "dependencies": { "lodash": { "version": "3.10.1", - "resolved": "http://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", "dev": true } @@ -2434,7 +2434,7 @@ }, "async": { "version": "1.5.2", - "resolved": "http://registry.npmjs.org/async/-/async-1.5.2.tgz", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", "dev": true }, @@ -3466,7 +3466,7 @@ }, "browserify-rsa": { "version": "4.0.1", - "resolved": "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "dev": true, "requires": { @@ -4125,7 +4125,7 @@ }, "commander": { "version": "2.8.1", - "resolved": "http://registry.npmjs.org/commander/-/commander-2.8.1.tgz", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", "dev": true, "requires": { @@ -5563,7 +5563,7 @@ }, "eventemitter2": { "version": "0.4.14", - "resolved": "http://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", "dev": true }, @@ -5575,7 +5575,7 @@ }, "events": { "version": "1.1.1", - "resolved": "http://registry.npmjs.org/events/-/events-1.1.1.tgz", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", "dev": true }, @@ -5771,7 +5771,7 @@ }, "external-editor": { "version": "2.2.0", - "resolved": "http://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", "dev": true, "requires": { @@ -6008,7 +6008,7 @@ }, "commander": { "version": "2.1.0", - "resolved": "http://registry.npmjs.org/commander/-/commander-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.1.0.tgz", "integrity": "sha1-0SG7roYNmZKj1Re6lvVliOR8Z4E=", "dev": true } @@ -6795,7 +6795,7 @@ }, "get-stream": { "version": "3.0.0", - "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" }, "get-value": { @@ -7026,7 +7026,7 @@ }, "got": { "version": "5.7.1", - "resolved": "http://registry.npmjs.org/got/-/got-5.7.1.tgz", + "resolved": "https://registry.npmjs.org/got/-/got-5.7.1.tgz", "integrity": "sha1-X4FjWmHkplifGAVp6k44FoClHzU=", "dev": true, "requires": { @@ -7352,7 +7352,7 @@ }, "grunt-contrib-uglify": { "version": "2.0.0", - "resolved": "http://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-2.0.0.tgz", "integrity": "sha1-jJlw1pCTbN5tJaoRk1Sb2SkBaTA=", "dev": true, "requires": { @@ -8213,7 +8213,7 @@ }, "readable-stream": { "version": "1.1.14", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { @@ -8837,7 +8837,7 @@ }, "inquirer": { "version": "5.2.0", - "resolved": "http://registry.npmjs.org/inquirer/-/inquirer-5.2.0.tgz", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-5.2.0.tgz", "integrity": "sha512-E9BmnJbAKLPGonz0HeWHtbKf+EeSP93paWO3ZYoUpq/aowXvYGjjCSuashhXPpzbArIjBbji39THkxTz9ZeEUQ==", "dev": true, "requires": { @@ -8993,7 +8993,7 @@ }, "is-builtin-module": { "version": "1.0.0", - "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "dev": true, "requires": { @@ -9155,7 +9155,7 @@ }, "is-obj": { "version": "1.0.1", - "resolved": "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", "dev": true }, @@ -9523,12 +9523,12 @@ }, "json5": { "version": "0.5.1", - "resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" }, "jsonfile": { "version": "2.4.0", - "resolved": "http://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", "dev": true, "requires": { @@ -9628,7 +9628,7 @@ }, "load-json-file": { "version": "1.1.0", - "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { @@ -10563,7 +10563,7 @@ }, "minimist": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, @@ -10620,7 +10620,7 @@ }, "mkdirp": { "version": "0.5.1", - "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "requires": { "minimist": "0.0.8" @@ -10628,7 +10628,7 @@ "dependencies": { "minimist": { "version": "0.0.8", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" } } @@ -10712,7 +10712,7 @@ }, "readable-stream": { "version": "1.1.14", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { @@ -11344,7 +11344,7 @@ }, "os-locale": { "version": "1.4.0", - "resolved": "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", "dev": true, "requires": { @@ -14341,7 +14341,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { "ansi-regex": "^2.0.0" @@ -14368,7 +14368,7 @@ }, "strip-dirs": { "version": "1.1.1", - "resolved": "http://registry.npmjs.org/strip-dirs/-/strip-dirs-1.1.1.tgz", + "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-1.1.1.tgz", "integrity": "sha1-lgu9EoeETzl1pFWKoQOoJV4kVqA=", "dev": true, "requires": { @@ -14639,7 +14639,7 @@ }, "through": { "version": "2.3.8", - "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, @@ -14661,7 +14661,7 @@ }, "readable-stream": { "version": "1.0.34", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { @@ -16301,7 +16301,7 @@ }, "wrap-ansi": { "version": "2.1.0", - "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "requires": { "string-width": "^1.0.1", diff --git a/package.json b/package.json index 0ae30ee439b89..cc4a7ebf3528a 100644 --- a/package.json +++ b/package.json @@ -1,96 +1,96 @@ { - "name": "WordPress", - "version": "5.0.0", - "description": "WordPress is web software you can use to create a beautiful website or blog.", - "repository": { - "type": "svn", - "url": "https://develop.svn.wordpress.org/trunk" - }, - "engines": { - "node": "8.9.3", - "npm": "6.1.0" - }, - "author": "The WordPress Contributors", - "license": "GPL-2.0+", - "devDependencies": { - "@wordpress/custom-templated-path-webpack-plugin": "^1.1.5", - "@wordpress/library-export-default-webpack-plugin": "^1.0.4", - "autoprefixer": "^9.1.5", - "copy-webpack-plugin": "^4.5.2", - "cssnano": "^4.1.4", - "grunt": "~1.0.3", - "grunt-banner": "^0.6.0", - "grunt-contrib-clean": "~2.0.0", - "grunt-contrib-compress": "~1.4.3", - "grunt-contrib-concat": "~1.0.0", - "grunt-contrib-copy": "~1.0.0", - "grunt-contrib-cssmin": "~3.0.0", - "grunt-contrib-imagemin": "~2.0.1", - "grunt-contrib-jshint": "~2.0.0", - "grunt-contrib-qunit": "^1.2.0", - "grunt-contrib-uglify": "~2.0.0", - "grunt-contrib-watch": "~1.1.0", - "grunt-includes": "~1.1.0", - "grunt-jsdoc": "^2.1.0", - "grunt-jsvalidate": "~0.2.2", - "grunt-legacy-util": "^1.1.1", - "grunt-patch-wordpress": "~1.0.0", - "grunt-postcss": "~0.9.0", - "grunt-replace": "~1.0.1", - "grunt-rtlcss": "~2.0.1", - "grunt-sass": "~2.0.0", - "grunt-webpack": "^3.0.2", - "ink-docstrap": "^1.3.0", - "matchdep": "~2.0.0", - "source-map-loader": "^0.2.4", - "uglify-js": "^3.4.9", - "webpack": "^4.20.2", - "webpack-dev-server": "^3.1.9", - "webpack-livereload-plugin": "^2.1.1" - }, - "dependencies": { - "@babel/polyfill": "^7.0.0", - "@wordpress/a11y": "^2.0.2", - "@wordpress/api-fetch": "^2.0.2", - "@wordpress/autop": "^2.0.2", - "@wordpress/blob": "^2.0.2", - "@wordpress/block-library": "^2.1.0", - "@wordpress/block-serialization-default-parser": "^1.0.1", - "@wordpress/blocks": "^4.0.1", - "@wordpress/components": "^4.1.0", - "@wordpress/compose": "^2.0.2", - "@wordpress/core-data": "^2.0.2", - "@wordpress/data": "^2.1.1", - "@wordpress/date": "^2.0.2", - "@wordpress/deprecated": "^2.0.2", - "@wordpress/dom": "^2.0.2", - "@wordpress/dom-ready": "^2.0.2", - "@wordpress/edit-post": "^1.0.0", - "@wordpress/editor": "^4.0.1", - "@wordpress/element": "^2.1.1", - "@wordpress/escape-html": "^1.0.0-beta.1", - "@wordpress/hooks": "^2.0.2", - "@wordpress/html-entities": "^2.0.2", - "@wordpress/i18n": "^3.0.1", - "@wordpress/is-shallow-equal": "^1.1.4", - "@wordpress/keycodes": "^2.0.2", - "@wordpress/list-reusable-blocks": "^1.1.0", - "@wordpress/nux": "^2.0.1", - "@wordpress/plugins": "^2.0.2", - "@wordpress/redux-routine": "^3.0.1", - "@wordpress/rich-text": "^1.0.0-beta.1", - "@wordpress/shortcode": "^2.0.2", - "@wordpress/token-list": "^1.0.2", - "@wordpress/url": "^2.0.2", - "@wordpress/viewport": "^2.0.2", - "@wordpress/wordcount": "^2.0.2", - "element-closest": "^2.0.2", - "formdata-polyfill": "^3.0.12", - "lodash": "^4.17.11", - "moment": "^2.22.2", - "polyfill-library": "^3.26.0-0", - "react": "^16.5.2", - "react-dom": "^16.5.2", - "whatwg-fetch": "^3.0.0" - } + "name": "WordPress", + "version": "5.0.0", + "description": "WordPress is web software you can use to create a beautiful website or blog.", + "repository": { + "type": "svn", + "url": "https://develop.svn.wordpress.org/trunk" + }, + "engines": { + "node": "8.9.3", + "npm": "6.1.0" + }, + "author": "The WordPress Contributors", + "license": "GPL-2.0+", + "devDependencies": { + "@wordpress/custom-templated-path-webpack-plugin": "^1.1.5", + "@wordpress/library-export-default-webpack-plugin": "^1.0.4", + "autoprefixer": "^9.1.5", + "copy-webpack-plugin": "^4.5.2", + "cssnano": "^4.1.4", + "grunt": "~1.0.3", + "grunt-banner": "^0.6.0", + "grunt-contrib-clean": "~2.0.0", + "grunt-contrib-compress": "~1.4.3", + "grunt-contrib-concat": "~1.0.0", + "grunt-contrib-copy": "~1.0.0", + "grunt-contrib-cssmin": "~3.0.0", + "grunt-contrib-imagemin": "~2.0.1", + "grunt-contrib-jshint": "~2.0.0", + "grunt-contrib-qunit": "^1.2.0", + "grunt-contrib-uglify": "~2.0.0", + "grunt-contrib-watch": "~1.1.0", + "grunt-includes": "~1.1.0", + "grunt-jsdoc": "^2.1.0", + "grunt-jsvalidate": "~0.2.2", + "grunt-legacy-util": "^1.1.1", + "grunt-patch-wordpress": "~1.0.0", + "grunt-postcss": "~0.9.0", + "grunt-replace": "~1.0.1", + "grunt-rtlcss": "~2.0.1", + "grunt-sass": "~2.0.0", + "grunt-webpack": "^3.0.2", + "ink-docstrap": "^1.3.0", + "matchdep": "~2.0.0", + "source-map-loader": "^0.2.4", + "uglify-js": "^3.4.9", + "webpack": "^4.20.2", + "webpack-dev-server": "^3.1.9", + "webpack-livereload-plugin": "^2.1.1" + }, + "dependencies": { + "@babel/polyfill": "^7.0.0", + "@wordpress/a11y": "^2.0.2", + "@wordpress/api-fetch": "^2.0.2", + "@wordpress/autop": "^2.0.2", + "@wordpress/blob": "^2.0.2", + "@wordpress/block-library": "^2.1.0", + "@wordpress/block-serialization-default-parser": "^1.0.1", + "@wordpress/blocks": "^4.0.1", + "@wordpress/components": "^4.1.0", + "@wordpress/compose": "^2.0.2", + "@wordpress/core-data": "^2.0.2", + "@wordpress/data": "^2.1.1", + "@wordpress/date": "^2.0.2", + "@wordpress/deprecated": "^2.0.2", + "@wordpress/dom": "^2.0.2", + "@wordpress/dom-ready": "^2.0.2", + "@wordpress/edit-post": "^1.0.0", + "@wordpress/editor": "^4.0.1", + "@wordpress/element": "^2.1.1", + "@wordpress/escape-html": "^1.0.0-beta.1", + "@wordpress/hooks": "^2.0.2", + "@wordpress/html-entities": "^2.0.2", + "@wordpress/i18n": "^3.0.1", + "@wordpress/is-shallow-equal": "^1.1.4", + "@wordpress/keycodes": "^2.0.2", + "@wordpress/list-reusable-blocks": "^1.1.0", + "@wordpress/nux": "^2.0.1", + "@wordpress/plugins": "^2.0.2", + "@wordpress/redux-routine": "^3.0.1", + "@wordpress/rich-text": "^1.0.0-beta.1", + "@wordpress/shortcode": "^2.0.2", + "@wordpress/token-list": "^1.0.2", + "@wordpress/url": "^2.0.2", + "@wordpress/viewport": "^2.0.2", + "@wordpress/wordcount": "^2.0.2", + "element-closest": "^2.0.2", + "formdata-polyfill": "^3.0.12", + "lodash": "^4.17.11", + "moment": "^2.22.2", + "polyfill-library": "^3.26.0-0", + "react": "^16.5.2", + "react-dom": "^16.5.2", + "whatwg-fetch": "^3.0.0" + } } From ceaf09a5fbf92115d0a28732390c05e71ebf5eaf Mon Sep 17 00:00:00 2001 From: Gary Pendergast Date: Mon, 22 Oct 2018 04:53:49 +0000 Subject: [PATCH 488/537] Build: Ignore the vendor directory during the `jsvalidate:build` task. Props netweb. Fixes #45119. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43783 602fd350-edb4-49c9-b593-d223f7449a82 --- Gruntfile.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Gruntfile.js b/Gruntfile.js index 778addae15cb0..7bba49275b444 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -603,7 +603,8 @@ module.exports = function(grunt) { files: { src: [ BUILD_DIR + 'wp-{admin,includes}/**/*.js', - BUILD_DIR + 'wp-content/themes/twenty*/**/*.js' + BUILD_DIR + 'wp-content/themes/twenty*/**/*.js', + '!' + BUILD_DIR + 'wp-includes/js/dist/vendor/*.js' ] } } From 12a7cf790b17bb7de023b7de6ab3b022235407d7 Mon Sep 17 00:00:00 2001 From: Gary Pendergast Date: Mon, 22 Oct 2018 05:03:38 +0000 Subject: [PATCH 489/537] Build: Updated CSS vendor prefixes following [43684]. `autoprefixer` was updated, which included some vendor prefix changes. Those changes are now applied. Props netweb. See #45080. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43784 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/css/about.css | 15 ---- src/wp-admin/css/admin-menu.css | 4 -- src/wp-admin/css/color-picker.css | 1 - src/wp-admin/css/common.css | 5 -- src/wp-admin/css/customize-controls.css | 64 +---------------- src/wp-admin/css/edit.css | 6 -- src/wp-admin/css/forms.css | 16 ----- src/wp-admin/css/list-tables.css | 14 ---- src/wp-admin/css/media.css | 1 - src/wp-admin/css/revisions.css | 3 - src/wp-admin/css/themes.css | 8 --- src/wp-admin/css/widgets.css | 5 -- src/wp-includes/css/buttons.css | 2 - src/wp-includes/css/customize-preview.css | 86 ----------------------- src/wp-includes/css/editor.css | 2 - src/wp-includes/css/jquery-ui-dialog.css | 2 - src/wp-includes/css/media-views.css | 7 +- src/wp-includes/css/wp-auth-check.css | 1 - src/wp-includes/css/wp-embed-template.css | 2 - 19 files changed, 2 insertions(+), 242 deletions(-) diff --git a/src/wp-admin/css/about.css b/src/wp-admin/css/about.css index 5b6c501aeaa3c..9c4efec89b0d9 100644 --- a/src/wp-admin/css/about.css +++ b/src/wp-admin/css/about.css @@ -168,9 +168,7 @@ /* 1.2 - Structure */ .about-wrap [class$="-col"] { - display: -webkit-box; display: flex; - -webkit-box-pack: justify; justify-content: space-between; flex-wrap: wrap; } @@ -191,7 +189,6 @@ } .about-wrap [class$="-col"] .col { - -webkit-box-flex: 1; flex: 1; } @@ -201,7 +198,6 @@ } .about-wrap .three-col .col { - -webkit-align-self: flex-start; align-self: flex-start; min-width: 31%; max-width: 31%; @@ -259,9 +255,7 @@ } .about-wrap .two-col-text { - -webkit-column-count: 2; column-count: 2; - -webkit-column-gap: 40px; column-gap: 40px; } @@ -381,22 +375,15 @@ .about-wrap .floating-header-section .section-content { -ms-grid-column: 2; grid-column: 2; - display: -webkit-box; display: flex; - -webkit-box-pack: justify; justify-content: space-between; - -webkit-box-align: start; align-items: flex-start; - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; flex-flow: row wrap; - -webkit-box-flex: 2; flex-grow: 2; flex-shrink: 0; } .about-wrap .floating-header-section .section-item { - -webkit-box-flex: 1; flex-grow: 1; max-width: calc(50% - 30px); } @@ -425,7 +412,6 @@ } .about-wrap .floating-header-section.has-long-title .section-content { - -webkit-box-pack: start; justify-content: flex-start; } @@ -548,7 +534,6 @@ @media screen and (max-width: 782px) { .about-wrap .two-col-text { - -webkit-column-count: 1; column-count: 1; } diff --git a/src/wp-admin/css/admin-menu.css b/src/wp-admin/css/admin-menu.css index 9c09dacd069e8..f9153be70346a 100644 --- a/src/wp-admin/css/admin-menu.css +++ b/src/wp-admin/css/admin-menu.css @@ -597,12 +597,10 @@ ul#adminmenu > li.current > a.current:after { /* rtl:ignore */ .folded #collapse-button .collapse-button-icon:after, .rtl #collapse-button .collapse-button-icon:after { - -webkit-transform: rotate(180deg); transform: rotate(180deg); } .rtl.folded #collapse-button .collapse-button-icon:after { - -webkit-transform: none; transform: none; } @@ -728,12 +726,10 @@ li#wp-admin-bar-menu-toggle { /* rtl:ignore */ .auto-fold #collapse-button .collapse-button-icon:after { - -webkit-transform: rotate(180deg); transform: rotate(180deg); } .rtl.auto-fold #collapse-button .collapse-button-icon:after { - -webkit-transform: none; transform: none; } diff --git a/src/wp-admin/css/color-picker.css b/src/wp-admin/css/color-picker.css index 00d7caf85cd34..477562308f714 100644 --- a/src/wp-admin/css/color-picker.css +++ b/src/wp-admin/css/color-picker.css @@ -50,7 +50,6 @@ .wp-color-result:active { /* See Trac ticket #39662 */ - -webkit-transform: none !important; transform: none !important; } diff --git a/src/wp-admin/css/common.css b/src/wp-admin/css/common.css index 8613e822e751b..06b6c51921ebe 100644 --- a/src/wp-admin/css/common.css +++ b/src/wp-admin/css/common.css @@ -1117,7 +1117,6 @@ th.action-links { .wp-filter .button.drawer-toggle:active { background: transparent; box-shadow: none; - -webkit-transform: none; transform: none; } @@ -1508,7 +1507,6 @@ div.error { .import-php .updating-message:before, .button.updating-message:before, .button.installing:before { - -webkit-animation: rotation 2s infinite linear; animation: rotation 2s infinite linear; } @@ -1681,7 +1679,6 @@ form.upgrade .hint { #screen-meta-links .show-settings:active { box-shadow: none; - -webkit-transform: none; transform: none; } @@ -2470,7 +2467,6 @@ div.star-holder .star-rating { } .rtl .star-rating .star-half { - -webkit-transform: rotateY(180deg); transform: rotateY(180deg); } @@ -2919,7 +2915,6 @@ div.action-links { margin: -10px 0 0 -10px; background: #fcfcfc url(../images/spinner.gif) no-repeat center; background-size: 20px 20px; - -webkit-transform: translateZ(0); transform: translateZ(0); } diff --git a/src/wp-admin/css/customize-controls.css b/src/wp-admin/css/customize-controls.css index b595e2a8da6ed..a0f0612a51c1f 100644 --- a/src/wp-admin/css/customize-controls.css +++ b/src/wp-admin/css/customize-controls.css @@ -157,7 +157,6 @@ body:not(.ready) #customize-save-button-wrapper .save { font-size: 14px; width: 30px; float: left; - -webkit-transform: none; transform: none; margin-top: 0; } @@ -634,9 +633,7 @@ body.trashing #publish-settings { margin: 0; padding: 0; box-sizing: border-box; - transition: 0.18s -webkit-transform cubic-bezier(0.645, 0.045, 0.355, 1); - transition: 0.18s transform cubic-bezier(0.645, 0.045, 0.355, 1); - transition: 0.18s transform cubic-bezier(0.645, 0.045, 0.355, 1), 0.18s -webkit-transform cubic-bezier(0.645, 0.045, 0.355, 1); /* easeInOutCubic */ + transition: 0.18s transform cubic-bezier(0.645, 0.045, 0.355, 1); /* easeInOutCubic */ } #customize-theme-controls .customize-pane-child.skip-transition { @@ -650,7 +647,6 @@ body.trashing #publish-settings { height: auto; max-height: none; overflow: auto; - -webkit-transform: none; transform: none; } @@ -662,13 +658,11 @@ body.trashing #publish-settings { height: 0; max-height: none; overflow: hidden; - -webkit-transform: translateX(100%); transform: translateX(100%); } #customize-theme-controls .customize-pane-child.open, #customize-theme-controls .customize-pane-child.current-panel { - -webkit-transform: none; transform: none; } @@ -680,7 +674,6 @@ body.trashing #publish-settings { visibility: hidden; height: 0; overflow: hidden; - -webkit-transform: translateX(-100%); transform: translateX(-100%); } @@ -1075,7 +1068,6 @@ p.customize-section-description { bottom: 0; z-index: 10; background: #eee; - display: -webkit-box; display: flex; } @@ -1087,14 +1079,12 @@ p.customize-section-description { #available-menu-items .new-content-item .create-item-input, .customize-control-dropdown-pages .new-content-item .create-item-input { - -webkit-box-flex: 10; flex-grow: 10; } #available-menu-items .new-content-item .add-content, .customize-control-dropdown-pages .new-content-item .add-content { margin: 2px 0 2px 6px; - -webkit-box-flex: 10; flex-grow: 1; } @@ -1215,11 +1205,6 @@ p.customize-section-description { margin-top: 1px; } -@-webkit-keyframes customize-fade-in { - 0% { opacity: 0; } - 100% { opacity: 1; } -} - @keyframes customize-fade-in { 0% { opacity: 0; } 100% { opacity: 1; } @@ -1232,7 +1217,6 @@ p.customize-section-description { } #customize-controls .customize-control-notifications-container.has-overlay-notifications { - -webkit-animation: customize-fade-in 0.5s; animation: customize-fade-in 0.5s; z-index: 30; } @@ -1506,62 +1490,31 @@ p.customize-section-description { .customize-control-header .placeholder:hover .dice, .customize-control-header .header-view:hover > button.random .dice { - -webkit-animation: dice-color-change 3s infinite; animation: dice-color-change 3s infinite; } .button-see-me { - -webkit-animation: bounce .7s 1; animation: bounce .7s 1; - -webkit-transform-origin: center bottom; transform-origin: center bottom; } -@-webkit-keyframes bounce { - from, 20%, 53%, 80%, to { - -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); - -webkit-transform: translate3d(0,0,0); - } - - 40%, 43% { - -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); - -webkit-transform: translate3d(0, -12px, 0); - } - - 70% { - -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); - -webkit-transform: translate3d(0, -6px, 0); - } - - 90% { - -webkit-transform: translate3d(0,-1px,0); - } -} - @keyframes bounce { from, 20%, 53%, 80%, to { - -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); - -webkit-transform: translate3d(0,0,0); transform: translate3d(0,0,0); } 40%, 43% { - -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); - -webkit-transform: translate3d(0, -12px, 0); transform: translate3d(0, -12px, 0); } 70% { - -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); - -webkit-transform: translate3d(0, -6px, 0); transform: translate3d(0, -6px, 0); } 90% { - -webkit-transform: translate3d(0,-1px,0); transform: translate3d(0,-1px,0); } } @@ -1831,7 +1784,6 @@ p.customize-section-description { background: #eee; border-color: #999; box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 ); - -webkit-transform: translateY(1px); transform: translateY(1px); } @@ -1860,17 +1812,6 @@ p.customize-section-description { } /* Adds a delay before fading in to avoid it "jumping" */ -@-webkit-keyframes themes-fade-in { - 0% { - opacity: 0; - } - 50% { - opacity: 0; - } - 100% { - opacity: 1; - } -} @keyframes themes-fade-in { 0% { opacity: 0; @@ -1884,12 +1825,10 @@ p.customize-section-description { } .control-panel-themes .customize-themes-full-container.animate { - -webkit-animation: .6s themes-fade-in 1; animation: .6s themes-fade-in 1; } .in-themes-panel:not(.animating) .control-panel-themes .filter-themes-count { - -webkit-animation: .6s themes-fade-in 1; animation: .6s themes-fade-in 1; } @@ -2575,7 +2514,6 @@ body.adding-widget .add-new-widget:hover, body.adding-widget .add-new-widget:before, .adding-menu-items .add-new-menu-item:before, #accordion-section-add_menu .add-new-menu-item.open:before { - -webkit-transform: rotate(45deg); transform: rotate(45deg); } diff --git a/src/wp-admin/css/edit.css b/src/wp-admin/css/edit.css index 1c3f8b413af38..73b94cc59f0f2 100644 --- a/src/wp-admin/css/edit.css +++ b/src/wp-admin/css/edit.css @@ -1352,26 +1352,20 @@ table.links-table { .focus-on #adminmenuback, .focus-on #adminmenuwrap { transition-duration: 0.6s; - transition-property: -webkit-transform; transition-property: transform; - transition-property: transform, -webkit-transform; transition-timing-function: ease-in-out; } .focus-on #adminmenuback, .focus-on #adminmenuwrap { - -webkit-transform: translateX( -100% ); transform: translateX( -100% ); } .focus-off #adminmenuback, .focus-off #adminmenuwrap { - -webkit-transform: translateX( 0 ); transform: translateX( 0 ); transition-duration: 0.2s; - transition-property: -webkit-transform; transition-property: transform; - transition-property: transform, -webkit-transform; transition-timing-function: ease-in-out; } diff --git a/src/wp-admin/css/forms.css b/src/wp-admin/css/forms.css index 9b147518e409c..26fb35d8d10b4 100644 --- a/src/wp-admin/css/forms.css +++ b/src/wp-admin/css/forms.css @@ -834,13 +834,11 @@ table.form-table td .updated p { right: 10px; bottom: 9px; background: transparent; - -webkit-transform: skew(20deg) rotate(6deg); transform: skew(20deg) rotate(6deg); box-shadow: 0 10px 8px rgba(0, 0, 0, 0.6); } .pressthis-bookmarklet:hover:after { - -webkit-transform: skew(20deg) rotate(9deg); transform: skew(20deg) rotate(9deg); box-shadow: 0 10px 8px rgba(0, 0, 0, 0.7); } @@ -1204,7 +1202,6 @@ table.form-table td .updated p { .email-personal-data--sending::before { color: #f56e28; content: "\f463"; - -webkit-animation: rotation 2s infinite linear; animation: rotation 2s infinite linear; } @@ -1569,24 +1566,11 @@ table.form-table td .updated p { } } -@-webkit-keyframes rotation { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); - } -} - @keyframes rotation { 0% { - -webkit-transform: rotate(0deg); transform: rotate(0deg); } 100% { - -webkit-transform: rotate(359deg); transform: rotate(359deg); } } diff --git a/src/wp-admin/css/list-tables.css b/src/wp-admin/css/list-tables.css index 495c49b2fdf4a..73d5a733b75d7 100644 --- a/src/wp-admin/css/list-tables.css +++ b/src/wp-admin/css/list-tables.css @@ -1364,28 +1364,14 @@ ul.cat-checklist { .plugin-card .updating-message:before { content: "\f463"; - -webkit-animation: rotation 2s infinite linear; animation: rotation 2s infinite linear; } -@-webkit-keyframes rotation { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); - } -} - @keyframes rotation { 0% { - -webkit-transform: rotate(0deg); transform: rotate(0deg); } 100% { - -webkit-transform: rotate(359deg); transform: rotate(359deg); } } diff --git a/src/wp-admin/css/media.css b/src/wp-admin/css/media.css index f84741bc1d035..8c9b1cfa7c527 100644 --- a/src/wp-admin/css/media.css +++ b/src/wp-admin/css/media.css @@ -892,7 +892,6 @@ border color while dragging a file over the uploader drop area */ margin: -10px 0 0 -10px; background: transparent url(../images/spinner.gif) no-repeat center; background-size: 20px 20px; - -webkit-transform: translateZ(0); transform: translateZ(0); } diff --git a/src/wp-admin/css/revisions.css b/src/wp-admin/css/revisions.css index 236d76244afa1..c900a4998bc14 100644 --- a/src/wp-admin/css/revisions.css +++ b/src/wp-admin/css/revisions.css @@ -355,7 +355,6 @@ table.diff .diff-addedline ins { top: -20px; width: 25px; height: 25px; - -webkit-transform: rotate(45deg); transform: rotate(45deg); } @@ -417,7 +416,6 @@ table.diff .diff-addedline ins { top: -20px; width: 25px; height: 25px; - -webkit-transform: rotate(45deg); transform: rotate(45deg); } @@ -473,7 +471,6 @@ div.revisions-controls > .wp-slider > .ui-slider-handle { background: #eee; border-color: #999; box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 ); - -webkit-transform: translateY(1px); transform: translateY(1px); } diff --git a/src/wp-admin/css/themes.css b/src/wp-admin/css/themes.css index eece216a983d0..8d76be0df5491 100644 --- a/src/wp-admin/css/themes.css +++ b/src/wp-admin/css/themes.css @@ -230,7 +230,6 @@ body.js .theme-browser.search-loading { .theme-browser .theme .theme-actions { position: absolute; top: 50%; - -webkit-transform: translateY(-50%); transform: translateY(-50%); right: 0; padding: 10px 15px; @@ -1239,7 +1238,6 @@ div#custom-background-image img { } .background-position-control .button-group:first-child > label:first-child .dashicons { - -webkit-transform: rotate( 45deg ); transform: rotate( 45deg ); } @@ -1248,7 +1246,6 @@ div#custom-background-image img { } .background-position-control .button-group:first-child > label:last-child .dashicons { - -webkit-transform: rotate( -45deg ); transform: rotate( -45deg ); } @@ -1257,7 +1254,6 @@ div#custom-background-image img { } .background-position-control .button-group:last-child > label:first-child .dashicons { - -webkit-transform: rotate( -45deg ); transform: rotate( -45deg ); } @@ -1266,7 +1262,6 @@ div#custom-background-image img { } .background-position-control .button-group:last-child > label:last-child .dashicons { - -webkit-transform: rotate( 45deg ); transform: rotate( 45deg ); } @@ -1563,12 +1558,10 @@ body.full-overlay-active { /* rtl:ignore */ .wp-full-overlay.collapsed .collapse-sidebar-arrow:before, .rtl .wp-full-overlay .collapse-sidebar-arrow:before { - -webkit-transform: rotate(180.001deg); transform: rotate(180.001deg); /* Firefox: promoting to its own layer to trigger anti-aliasing */ } .rtl .wp-full-overlay.collapsed .collapse-sidebar-arrow:before { - -webkit-transform: none; transform: none; } @@ -1854,7 +1847,6 @@ body.full-overlay-active { top: 50%; z-index: -1; margin: -10px 0 0 -10px; - -webkit-transform: translateZ(0); transform: translateZ(0); background: transparent url(../images/spinner.gif) no-repeat center center; background-size: 20px 20px; diff --git a/src/wp-admin/css/widgets.css b/src/wp-admin/css/widgets.css index a4d314ab809d8..f8c1ad07e89f9 100644 --- a/src/wp-admin/css/widgets.css +++ b/src/wp-admin/css/widgets.css @@ -164,9 +164,7 @@ } .media-widget-gallery-preview { - display: -webkit-box; display: flex; - -webkit-box-pack: start; justify-content: flex-start; flex-wrap: wrap; margin: -1.79104477%; @@ -221,11 +219,8 @@ bottom: 0; width: 100%; box-sizing: border-box; - display: -webkit-box; display: flex; - -webkit-box-align: center; align-items: center; - -webkit-box-pack: center; justify-content: center; background-color: rgba( 0, 0, 0, .5 ); } diff --git a/src/wp-includes/css/buttons.css b/src/wp-includes/css/buttons.css index 9b78343d9aaf0..646f584ead0cd 100644 --- a/src/wp-includes/css/buttons.css +++ b/src/wp-includes/css/buttons.css @@ -156,7 +156,6 @@ TABLE OF CONTENTS: background: #eee; border-color: #999; box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 ); - -webkit-transform: translateY(1px); transform: translateY(1px); } @@ -180,7 +179,6 @@ TABLE OF CONTENTS: box-shadow: none !important; text-shadow: 0 1px 0 #fff !important; cursor: default; - -webkit-transform: none !important; transform: none !important; } diff --git a/src/wp-includes/css/customize-preview.css b/src/wp-includes/css/customize-preview.css index 26c4a72cd4fff..7f9b10b4407e3 100644 --- a/src/wp-includes/css/customize-preview.css +++ b/src/wp-includes/css/customize-preview.css @@ -52,9 +52,7 @@ cursor: pointer; box-sizing: border-box; padding: 3px; - -webkit-animation-fill-mode: both; animation-fill-mode: both; - -webkit-animation-duration: .4s; animation-duration: .4s; opacity: 0; pointer-events: none; @@ -85,12 +83,10 @@ } body.customize-partial-edit-shortcuts-shown .customize-partial-edit-shortcut button { - -webkit-animation-name: customize-partial-edit-shortcut-bounce-appear; animation-name: customize-partial-edit-shortcut-bounce-appear; pointer-events: auto; } body.customize-partial-edit-shortcuts-hidden .customize-partial-edit-shortcut button { - -webkit-animation-name: customize-partial-edit-shortcut-bounce-disappear; animation-name: customize-partial-edit-shortcut-bounce-disappear; pointer-events: none; } @@ -100,138 +96,56 @@ body.customize-partial-edit-shortcuts-hidden .customize-partial-edit-shortcut bu visibility: hidden; } -@-webkit-keyframes customize-partial-edit-shortcut-bounce-appear { - from, 20%, 40%, 60%, 80%, to { - -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); - animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); - } - 0% { - opacity: 0; - -webkit-transform: scale3d(.3, .3, .3); - transform: scale3d(.3, .3, .3); - } - 20% { - -webkit-transform: scale3d(1.1, 1.1, 1.1); - transform: scale3d(1.1, 1.1, 1.1); - } - 40% { - -webkit-transform: scale3d(.9, .9, .9); - transform: scale3d(.9, .9, .9); - } - 60% { - opacity: 1; - -webkit-transform: scale3d(1.03, 1.03, 1.03); - transform: scale3d(1.03, 1.03, 1.03); - } - 80% { - -webkit-transform: scale3d(.97, .97, .97); - transform: scale3d(.97, .97, .97); - } - to { - opacity: 1; - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } -} - @keyframes customize-partial-edit-shortcut-bounce-appear { from, 20%, 40%, 60%, 80%, to { - -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); } 0% { opacity: 0; - -webkit-transform: scale3d(.3, .3, .3); transform: scale3d(.3, .3, .3); } 20% { - -webkit-transform: scale3d(1.1, 1.1, 1.1); transform: scale3d(1.1, 1.1, 1.1); } 40% { - -webkit-transform: scale3d(.9, .9, .9); transform: scale3d(.9, .9, .9); } 60% { opacity: 1; - -webkit-transform: scale3d(1.03, 1.03, 1.03); transform: scale3d(1.03, 1.03, 1.03); } 80% { - -webkit-transform: scale3d(.97, .97, .97); transform: scale3d(.97, .97, .97); } to { opacity: 1; - -webkit-transform: scale3d(1, 1, 1); transform: scale3d(1, 1, 1); } } -@-webkit-keyframes customize-partial-edit-shortcut-bounce-disappear { - from, 20%, 40%, 60%, 80%, to { - -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); - animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); - } - 0% { - opacity: 1; - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } - 20% { - -webkit-transform: scale3d(.97, .97, .97); - transform: scale3d(.97, .97, .97); - } - 40% { - opacity: 1; - -webkit-transform: scale3d(1.03, 1.03, 1.03); - transform: scale3d(1.03, 1.03, 1.03); - } - 60% { - -webkit-transform: scale3d(.9, .9, .9); - transform: scale3d(.9, .9, .9); - } - 80% { - -webkit-transform: scale3d(1.1, 1.1, 1.1); - transform: scale3d(1.1, 1.1, 1.1); - } - to { - opacity: 0; - -webkit-transform: scale3d(.3, .3, .3); - transform: scale3d(.3, .3, .3); - } -} - @keyframes customize-partial-edit-shortcut-bounce-disappear { from, 20%, 40%, 60%, 80%, to { - -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); } 0% { opacity: 1; - -webkit-transform: scale3d(1, 1, 1); transform: scale3d(1, 1, 1); } 20% { - -webkit-transform: scale3d(.97, .97, .97); transform: scale3d(.97, .97, .97); } 40% { opacity: 1; - -webkit-transform: scale3d(1.03, 1.03, 1.03); transform: scale3d(1.03, 1.03, 1.03); } 60% { - -webkit-transform: scale3d(.9, .9, .9); transform: scale3d(.9, .9, .9); } 80% { - -webkit-transform: scale3d(1.1, 1.1, 1.1); transform: scale3d(1.1, 1.1, 1.1); } to { opacity: 0; - -webkit-transform: scale3d(.3, .3, .3); transform: scale3d(.3, .3, .3); } } diff --git a/src/wp-includes/css/editor.css b/src/wp-includes/css/editor.css index d8cba05b28db9..985571772b57a 100644 --- a/src/wp-includes/css/editor.css +++ b/src/wp-includes/css/editor.css @@ -693,7 +693,6 @@ div.mce-menu .mce-menu-item-sep, background: #eee; border-color: #999; box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 ); - -webkit-transform: translateY(1px); transform: translateY(1px); } @@ -704,7 +703,6 @@ div.mce-menu .mce-menu-item-sep, box-shadow: none !important; text-shadow: 0 1px 0 #fff !important; cursor: default; - -webkit-transform: none !important; transform: none !important; } diff --git a/src/wp-includes/css/jquery-ui-dialog.css b/src/wp-includes/css/jquery-ui-dialog.css index 0249f5100b5b9..5f67232887ba8 100644 --- a/src/wp-includes/css/jquery-ui-dialog.css +++ b/src/wp-includes/css/jquery-ui-dialog.css @@ -228,7 +228,6 @@ background: #eee; border-color: #999; box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 ); - -webkit-transform: translateY(1px); transform: translateY(1px); } @@ -240,7 +239,6 @@ box-shadow: none !important; text-shadow: 0 1px 0 #fff !important; cursor: default; - -webkit-transform: none !important; transform: none !important; } diff --git a/src/wp-includes/css/media-views.css b/src/wp-includes/css/media-views.css index d86c2bd95520b..a69b0e802ff62 100644 --- a/src/wp-includes/css/media-views.css +++ b/src/wp-includes/css/media-views.css @@ -911,18 +911,15 @@ top: 0; left: 0; width: 100%; - height: 100%; - -webkit-transform: translate( 50%, 50% ); /* Fails with spaces?? Weird! */ + height: 100%; /* Fails with spaces?? Weird! */ transform: translate( 50%, 50% ); } .wp-core-ui .attachment .thumbnail .centered img { - -webkit-transform: translate( -50%, -50% ); transform: translate( -50%, -50% ); } .wp-core-ui .attachments-browser .attachment .thumbnail .centered img.icon { - -webkit-transform: translate( -50%, -70% ); transform: translate( -50%, -70% ); } @@ -1292,7 +1289,6 @@ top: 50%; left: 0; right: 0; - -webkit-transform: translateY( -50% ); transform: translateY( -50% ); font-size: 40px; color: #fff; @@ -2129,7 +2125,6 @@ top: 50%; left: 0; right: 0; - -webkit-transform: translateY( -50% ); transform: translateY( -50% ); font-size: 3em; line-height: 1.3; diff --git a/src/wp-includes/css/wp-auth-check.css b/src/wp-includes/css/wp-auth-check.css index 7be3663da53a7..821417657282b 100644 --- a/src/wp-includes/css/wp-auth-check.css +++ b/src/wp-includes/css/wp-auth-check.css @@ -64,7 +64,6 @@ margin: -10px 0 0 -10px; background: url(../images/spinner.gif) no-repeat center; background-size: 20px 20px; - -webkit-transform: translateZ(0); transform: translateZ(0); } diff --git a/src/wp-includes/css/wp-embed-template.css b/src/wp-includes/css/wp-embed-template.css index b1fd593e741b8..6ef8fb3965e64 100644 --- a/src/wp-includes/css/wp-embed-template.css +++ b/src/wp-includes/css/wp-embed-template.css @@ -130,7 +130,6 @@ p.wp-embed-heading { position: absolute; top: 50%; left: 0; - -webkit-transform: translateY(-50%); transform: translateY(-50%); height: 25px; width: 25px; @@ -240,7 +239,6 @@ p.wp-embed-heading { .wp-embed-share-dialog-content { height: 100%; - -webkit-transform-style: preserve-3d; transform-style: preserve-3d; overflow: hidden; } From c6765044a1d351b5e9bac7eec20811ad41245c90 Mon Sep 17 00:00:00 2001 From: Gary Pendergast Date: Mon, 22 Oct 2018 05:06:00 +0000 Subject: [PATCH 490/537] Build: Update images following [43684]. `grunt-contrib-imagemin` was updated, which included some changes to image minification. Those changes are now applies. Props netweb. See #45080. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43785 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/images/bubble_bg-2x.gif | Bin 507 -> 424 bytes src/wp-admin/images/loading.gif | Bin 2254 -> 1376 bytes src/wp-admin/images/resize-2x.gif | Bin 234 -> 151 bytes src/wp-admin/images/resize-rtl-2x.gif | Bin 233 -> 150 bytes src/wp-admin/images/resize-rtl.gif | Bin 149 -> 70 bytes src/wp-admin/images/resize.gif | Bin 70 -> 64 bytes src/wp-admin/images/spinner-2x.gif | Bin 8536 -> 7536 bytes src/wp-admin/images/spinner.gif | Bin 4162 -> 3656 bytes src/wp-admin/images/wpspin_light-2x.gif | Bin 9133 -> 8875 bytes src/wp-admin/images/wpspin_light.gif | Bin 2209 -> 2052 bytes src/wp-includes/images/smilies/icon_cry.gif | Bin 490 -> 412 bytes src/wp-includes/images/smilies/icon_evil.gif | Bin 241 -> 193 bytes src/wp-includes/images/smilies/icon_lol.gif | Bin 333 -> 331 bytes .../images/smilies/icon_redface.gif | Bin 650 -> 639 bytes .../images/smilies/icon_rolleyes.gif | Bin 489 -> 471 bytes src/wp-includes/images/spinner-2x.gif | Bin 8536 -> 7536 bytes src/wp-includes/images/spinner.gif | Bin 4162 -> 3656 bytes src/wp-includes/images/wpspin-2x.gif | Bin 9133 -> 8875 bytes src/wp-includes/images/wpspin.gif | Bin 2209 -> 2052 bytes 19 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/wp-admin/images/bubble_bg-2x.gif b/src/wp-admin/images/bubble_bg-2x.gif index 77ac312180c227d318e19a4b3090bcc40094cb84..21302a34dc133911955009a529cb91171a6138ba 100644 GIT binary patch delta 56 zcmV-80LTCP1E>QKM@dFFIbkFK$N=*X0N7eEkq{&a`QqECwZQ-X|B;X&1Oa4eHj%V3 O0S1xgkpTdccmacT;})&} delta 139 zcmZ3%{F_<8-P6s&GEs%$1jAG*|LnBvnOCtj_ qH$y{Lqtv_19D)GxjO diff --git a/src/wp-admin/images/loading.gif b/src/wp-admin/images/loading.gif index 1e9dea9b456ec5bc8c3f9298a99739dadccfeb66..4712648e6abad89c17ea274163de6fb03967af07 100644 GIT binary patch literal 1376 zcmb`G|4$PK7{=fG+Pk)tE5oh94zIN+I93kC1hC*;zd&(-oj7H>MarrkgML#Ow z7HTUMW~WsY(GBN}%x%%cL`j+s(5NGtWn@`0)A?m=Gnrd5quVd+P#5+0y??;xectDJ z-ipfdqGBfl4BQ8Z#bP5PBcr3ElarHY&z_x{nwp-TzH#Hm%*@Qad-ul1#yUGYXJ=+9&~C@Cokhr@y(@I2qt)U<5bGM~@4Wy=9`%xD7lu@25|2z28)42sHb-UTfK)_C%b`9NC=-qs^*7O(U6{61qQ zTP!M!aXRD(Mz5q$5kr+Kv^!#G@kH@e7D~jkqa6#s%Y7Ivi|gmTIGj;A$^XhnOJ+GO?X~v3Mc@`a^CBvs9?}~9bx6PCFC@3 zYeu=FJ`T~i279jk8Oq@>uNYMDntW?T7hh-{NOX1ad@>+M(T+|l{aOGBG4Ko;kz7ax z3V_Xm{F1GOENOK~cUFUXJI!vlWwyjHRZh-Kuy3{@O2#4nnB58Y*>ixmMHsk^m zO_TL}Ddw6nOVu?V&q%3=JAldX_xc;zYx$5Yx91jjwq(5mY z)xv!)!+oj#^NPu1Q;)EZe*%%PsgH{0;(_JeoL_m-8)Q%>@bL@vTouwiK5uwUHkt6= zKgcq;+^J)?XC6$9%kb8>=J|5HnZnM0C{j(62&%$mbu6l0KrX2FuWntSj6k2ehGZKf zN?J{%4?pfp;YZBohf2j)qr?#uc3NkM|rL3+!^88=}`DH4ZX`R{G|CtnbyU& zQkt5GhIOpQ(-z@P>rrZ`@NN$N)NBCkabHM*k0&7;B6hEsZV!@`pfAYC(q3;a(Epb4 z)s>Sk?r?}N`v&aio8?!b;kw7OgbIoV)Is?-Z2SP~-Xz@5NkpVSQAw7Uux#cU-4Ja% z+*9P}f~qf;R*wp+rgp6Tl;7le_@lc_ow!}A?C{YD$NdGbTI2C_^>OS72q_3G{}<3> BfW80# literal 2254 zcmb`|{ZkWn9>DQ$vd_EU-G(%UkfJ6Vf+>TLV6fpq33)&a(uPM7u*HxH2#7qEodBE>&?`L=J$}}eLmjDU)0f2;rgx1#9;o;%)=g&`0PEJox&(6*+EiGNYe*M<1TX*i< zxqtuug9i^DJ$m$b_1V6Cds9%iqkc#E~<|{0-&qS?{L7vj6T5pApY_%J_{R_41C|FSUgT zW-LLFLyAHiC+bPZwj5akSxB*vj-_<&HZ|vbhCucyT~acp%@VeT15e5pj+e#-97z&nAs0*2 z6)@uOOot8Rz1#fQocTKmez>04x0jOaVHr(!n3Szyw;~B3-JsL61dhLwNEh(C)SNAq zpoVCirK)QHYv7szfz<0;`E(6ipjyuv2syLJC!LD}hR&eUN2&E;V%gL&?%_>Q_xqb) z0}{u?kOfYetTvf9-7IG>SGWrun)NgLkY4JmKq>L)E?qO*SJczMX(X7md zaU_n{wrxMHhJE@hwGkm%BK54GJP-&e8wF*ZzL_7m7tb2-1uaP-fvZ2CIgXp017ZVt<1%n8Yn>i!EVl7|MUUvN zvGGeB{nW}IlyGg6yWo$e|l>XKKP zkcxaaskTU9wt|w=v28KhqQZ5NZ$E{caTxB&x^BwJi&`}EpXO>Hn_5(QXJiJl-xFmG&h7-Yu|W_ap0Fja6)tNR$`SgcXaxas6lh>%6hnzR#@MNs>M z>*Ll#t8nhL3t*M}i~dm4W`$j$5U>TM;M4Nh&KT{{^{vBCS(o9U!MGYUjy6{WYC=}e z+})^cUEiv(Dhc!;B9DB|$)JVJrg6o-;5F4(S)Y$#qEEguhCg51pIh#t1S%cNbO=$m z9*lk6MT);`@<_gs@NhA>Vp2k>U3Jc(R5FO|vZp*w=35ef4P-J8(xap`W&)@K zsNsWZG0+!VMGV@R>+C-v%*?YkuQS>dG6`7QPo(xXOqd~t_x-u^2 zeE%*N&G!AvOx0UhBswg_EwwXzJ&tlMUG_Zq`jB9?6K6<-Zi7f=x$UhSczl>ZY5^ZM zeaaWYn&~VDebmhDfrSu$E>K_f@$SLbi`$1Yf6q3pTlI-C7_N@_spB0;Q}m4%jzv9oT0=IY0f9-462&MA zkr9@$QF|iU?f`)t1c)zY)Dg-`SQxS$&~KPIBoc$dB7mVk6|&cx&$TooeU3n87GUc$ HK{S$m4yII-3E^U delta 105 zcmbQv_==Io-P6s&GEs~{jNuc*L>{TY|J)J20SYdOC5b@V*}kG6F*!T6L?Ow@(ZEqj zp(3}y*VoE3uec;JFFDoI#a0O@qL-POVr5`p=wxYX?rdaWW?*ROYLuFnVyjf7WN$Z7 Gr5FH@)gNvE diff --git a/src/wp-admin/images/resize-rtl-2x.gif b/src/wp-admin/images/resize-rtl-2x.gif index 51edc79a820f50c4fe836c3be22a53e8ea366449..483c23dcbe5abd73e157056a2e00a6d779118578 100644 GIT binary patch delta 23 ecmaFKIE|6V-P6s&GEs~{jNudeL>{S$l?4Dyum+3( delta 105 zcmbQn_>z&w-P6s&GEs~{jNuc*L>{TY|J)J20SYdOC5b@V*}kG6F*!T6L?Ow@(ZEqj zp(3}y*VoE3uec;JFFDoI#a0O@qL-POVr5`p=wxYXVPIrnW?*ROYLuFnVyjf7WN$Z7 Gr3e6xiyv74 diff --git a/src/wp-admin/images/resize-rtl.gif b/src/wp-admin/images/resize-rtl.gif index 61afefe5220bc27602257acd82acbde0b6cf2701..82502954e11c9cdf98a0d7a638193ad551ea60e9 100644 GIT binary patch delta 36 ocmbQr=qBs#>1JV>$j!jb@R5mO+qP~0|NmzI1I3>#tP^uI0mjq|6951J literal 149 zcmZ?wbhEHbB5O();v#?C$X5eP{@SoxT|Nn;%AD$?w3jk}h3S8lXUlVv#?C$X5eP{$iVRb|Np~>4+BXC28M~kx&W-H3}XNQ diff --git a/src/wp-admin/images/spinner-2x.gif b/src/wp-admin/images/spinner-2x.gif index a4e161e1fe8f1cb6fd106a0ba9fa9f690b63c0f5..26e28e1760110daba07882f394958a3ff8089564 100644 GIT binary patch literal 7536 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 Q{Z3{xg2nZ3Ku*p78>bi5j{pDw diff --git a/src/wp-admin/images/spinner.gif b/src/wp-admin/images/spinner.gif index 209d10b6bb1a443fa7488d5238b32b93a2bd8b8d..88e8a9396fb4770977d24c7b45addbf5062bf72f 100644 GIT binary patch literal 3656 zcmbuCdr(t%7RT?sx#1xoA*8${)Py7ij7$(%g@sOl1OfyMqFZD`H)=$rm<`B^x^^d! zh&(ksmjKlg1SN=)C@zSyyd{Dz0!4h#<)H|rx=`93Z9C)MP-`9Mg4x~4Klh)^XTIlq zzUQ1@NNDgDpIroi0DNlK7BebFHfVNnPi%I<4K+ZhL($ zSvIxP{Yxvmyfl=RmAnn%fO<#@l#H866IFXKg3^Gdi-VcLTRn9L9J?mnbV=gU$m}9d zrI_9xzaIO{RMhHj*3@q9U&;xhkT#$yiPV?tZAd;+E3zq|Tp->*uY?JX((B3-W3xm^ zJPjl|RTd}f{M;%EY5U0I9qPaJM?Z~~mtBwM&1eo2aiK31s5(#)Q|JBfris+SRy!rY z;OoQWrw+&Fu+-_u1hew8u|6)nXa>b}`sh>BP?{aqDP z+`oj>iaQio;{~xSkafF3xlz{TG7_+@tt@voXp^(d1yR8-1$V^t`gA^v=n1w z(YI%J=zl3h&$x1TBn}j<731=<{*{KGqQIT3BDH^6|71KOM9?)>6KdTk5|r#uuR??v zJ@#0kvCs|CSL-$8l58CqAgXf+2pEL_&=usNo!>>4jVF+w@C8F-PhQ{=NTlvt`DX#w zRx)I{R=}=;v7hpj4#@kenzJ!nFUHv%j&I(5{qq?)~(MO|T5#Y8YC= zA6_jN2ATac#8gc4fjXM1n8#rwmqT-=D(#2iqw5F&@Ba??C0YI4o$uSY5@-8Fni@!- znBtc^WMnXN;*JhsO8N?G{CKMO1>Au2)&Jx9k9B8+3lDk0Ae4Sy)$BzJWTu31WKby& z+1zF2?@ONnL!=(*+Ef1w4orCxUja-8R@+5v-0=+=$;l0qaH9esZ{4ivz+#L|{ulSq zr@BFYJV&}p?rA?lt0?QNQ8gQxRflEg;MU58a;nS(dhkp5y04&zFWjJP+_Q|tZ5iX6 zTztgP#UB+CGg~5C8P-GKE*ug z`uZMsMMy+@p}!B+EOSP~aM+o>AN}GnDBf!=-5uF1zPbFS9cFVj!Sbd9)f$*8rk{~g z=NFgf$4)OczLAU?Z$r{oH!-CGCbhX^Hh=$XHk2GTMxR zc1gUlGDE=2*_Bb=#p51_LcfF=%8z$wg$YjmD)0!8VT#sLtGdB1`Y|!zgUzI z5tt0j+YFQ+$@){#2KcL68W7mzozK)IX_4#ppk77a+%qVy$%b_9c`@+_Ll}~{!Zn2& zK0Y9?rX35R;dl>;($>dU?IkJ#xb3xaSs zEuFR}7Z)v!MV=escCH)IkMwsTBA&eqQsvM!Byne2v61h=aZmy#PgWR3vM|0aurLW4vK&2!s0JiA$Iwtw(^@s1hYIO$knE*!XNmKc>mwM v)1bsTpwiEl$@SWj!*NWh79^H)vx_z(hBWOLVmY@{JU5~z5vA_Kfsenx@ literal 4162 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 LsoI7F?dpF4ttiU7 diff --git a/src/wp-admin/images/wpspin_light-2x.gif b/src/wp-admin/images/wpspin_light-2x.gif index 392e82ff71b8c22a401d7c6b85943c0adfe4a98a..261c819d56a1555c76aa5b66c4d41283ca1f64f4 100644 GIT binary patch literal 8875 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 diff --git a/src/wp-includes/images/smilies/icon_cry.gif b/src/wp-includes/images/smilies/icon_cry.gif index de5c1ac2d060744e32ddcde8fe802b7234b4a22b..03b2ffdc9631614637a5aa76a4de7448f6018fdb 100644 GIT binary patch literal 412 zcmZ?wbhEHbt$5ta3nF2Z(`&@-sNFgbH|cX3gEw zdUkgdM}vXOaY0WH)y_w|PA(2=y_^xfrcWv`Z{Gp+77vD6M^`TAjb~;|m1>??r6i*w z?4`D8rp=~{*O|5Y%-LAC&#)-rVV7ODX@&lw$sAytL>L$ubXXWz8Q6i4ftgoAWX~U- z9&?6061&}nz$&;PDmZ}hK<6>Bv@|iXLM50$T0t6_ff8&z@(jyQ1t3d-^gyK+X&;D1 smICQw0qWvB(!_k?tzr@n%uKLz$gvFM1vZe0J^Cw8KcBKewN2NU*bGfUA+70W%{|v*J${RyhU%1|5(=AZIwRMk%Ot zIY#!WFs;e)mS7Z-aXQWA?8C?W@ON`l-TUBh4;P=u{WouK30RQCxkq{_<|La9XMIreF1pojL04x9i000jF z4*);~Zs7Akq-c_mX#{~Fu@F2naBQ0$W`>ivWOJK{_k| R0!By*B@YLg2YM(W06VNPIkNx& literal 241 zcmZ?wbhEHbgxLc6$23bKgaO@B*VYC4FCTM|KGy!A1Lx~^8f$G|7kJ& z%VnN6ZQB2*4FCVX1}P;4DE?$&WMB|r&;e-z+3CQVr@-K_BxBNqOqNE44R5_=9GF#( zac@5uFuj>E(LzSVP1Eh*0)sUX2br8(gcV{ozRqEh*bwu8;b6PdOqZuu4t)tw5wg1| wwSmQ^{I2o>$>v1PDo$Mv4uck^=veD+zJ?e_D;+*2HxE??_L=Ne8j1|o068p1fB*mh diff --git a/src/wp-includes/images/smilies/icon_lol.gif b/src/wp-includes/images/smilies/icon_lol.gif index 5ecd845e47a3ebbbd8dcf57b46688c0be4037001..deff4ae117823385e43cb8f014859c29d4eb2912 100644 GIT binary patch literal 331 zcmZ?wbhEHb>`2TP6|NqDT zZviQT0LA~@ey$U}E5AU}s=p7WA<4x@d69 zQ+kDX%!;W37ui+7s<;>!8FW~IDp-Lk8JJjFbZ4?cC74hodU)XyICO{rO+YpZtiu`r DaJW`o literal 333 zcmZ?wbhEHbgxLc6$23b2ZD19|4%af-@@>3F2n!7!vFtG{{R2@|NpQ5 zKLsg(0LA~@ey$!Je*j4Dbq*gTdjIB+OH$1FW{p@&LDV1v^F?oUp) zF0onYU2$8bAjx9DHR(g@df$YK8GAjC9x$JyE{L#?iGhiMn}Ho@pYR4xmFN|VvSx0V wKg?E@(pj1=%m`M;1#%ZFPz@_ktpgLw6x*4sSS5ONaY(>*fW3%h6j+Bf0CMqJAOHXW diff --git a/src/wp-includes/images/smilies/icon_redface.gif b/src/wp-includes/images/smilies/icon_redface.gif index 9c1a29c59133e61a04f83d45b9419abbca704fe6..070cb357ada704bccc935ded9fd74dc549c86183 100644 GIT binary patch literal 639 zcmZ?wbhEHbY}z!Vhv7{{Nfo z>gvkC!0_*M^Z%zae;us;vn2C-U-Z9irT;IrKQH$B|Lf~b53~PIo;;3^|9|GpkA{Z- z+qeIlG2`d5Wxq2rfEpG5bNji51UowhxEkphFf)RLezLHNFmN*H0NFrC@H05D#2a|- z%$h4QwW!DZ$Tr=RiwxpVaj2;7`Cz>zghAni`k5({j5YW#C}>O&V|8Rdp&-Mi!*kSW za##)*>*`$$bAsAL*U#pzZ`$2;$dkdkdn)gix0WJoKOT3#Q#`T5L&?}g5NszG0~3P| zBLgD?FAy@Y1};$G3T0rpWHGJJcyEx&tV7w{8#%6go6EM2)1RZ8A!bpuFB7AUO7FcV zoQ*z8BCFpv_J(Lq^YCX{c0y@ld%%^33Rj_w^@7t6KK`-GD`f30S4FTbMnF#?+2Wy~ z&=r2N_r=uI=+l+SoLfvjOfrt0pEWywXSjdJ>_U_2e(u+U_&Qw$Gs7{2#K|NnmWcSgp)ZKdDmF#NyN{%1+%|LxoV z&6x4L*vr+`_5YJ6|9^e`f9A~pR}4QI8vg%z`Rh8vzsC$emo5AMNBH0A=KudDKaP*T z>0!pe!0`X+%wGqqfegj}+bO5W@wj1_$m_D+Bm! zL{7ShOz)Y=v;L04ouY}do9FiIUvxU?Saf6cYE|uoT0Id4_KtA-7Clj?oCqUl7e%nm zTp*hn85kLOfzW|9=z)6Oc^83WKUB|{DHtSeIb%@zLHzZn1!@Oc{8Jyj<*{oz-q3k) z+JXMYmq&csmq_!q$q4rNy=-p~ep}MUl5`;8xXl~KN5&Er0?IuFdb580b%t1Dgldf^ z(1U(Ed*&}$>a{u|JJ2HF_s;E`L{>cUwh7T}zg;UM)_rU3H9c z>Ngd9_bg<^5}&F1s)2nat;;pMma{u!^F#p9bYVw{$I}h&H|*&+Xmt3>Uimr4ooD^& zj9azkvSbxYKO=LsX1)C3O`Q|DJm=niZJ{JG`y&5CwM$QVIFB?;Y^%K1?2`S!vB$u1 zr^l)1+_)^M6P}oQ@CRd4flGnNmg9~wppaU~LDW-iqssX@|VmzRJpd@UC^Cez( m=RPC1=U*lt>@3@r@kD{aLi0^?h(~9Smeb0PQ_uOG8LR=K)(qeP diff --git a/src/wp-includes/images/smilies/icon_rolleyes.gif b/src/wp-includes/images/smilies/icon_rolleyes.gif index 46b737a1699c570b65c2a3ac8c9bf9fe0766d1d5..9f83242cd344feb8873d09f9bb1624f19bf260d4 100644 GIT binary patch literal 471 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 Q{Z3{xg2nZ3Ku*p78>bi5j{pDw diff --git a/src/wp-includes/images/spinner.gif b/src/wp-includes/images/spinner.gif index 209d10b6bb1a443fa7488d5238b32b93a2bd8b8d..88e8a9396fb4770977d24c7b45addbf5062bf72f 100644 GIT binary patch literal 3656 zcmbuCdr(t%7RT?sx#1xoA*8${)Py7ij7$(%g@sOl1OfyMqFZD`H)=$rm<`B^x^^d! zh&(ksmjKlg1SN=)C@zSyyd{Dz0!4h#<)H|rx=`93Z9C)MP-`9Mg4x~4Klh)^XTIlq zzUQ1@NNDgDpIroi0DNlK7BebFHfVNnPi%I<4K+ZhL($ zSvIxP{Yxvmyfl=RmAnn%fO<#@l#H866IFXKg3^Gdi-VcLTRn9L9J?mnbV=gU$m}9d zrI_9xzaIO{RMhHj*3@q9U&;xhkT#$yiPV?tZAd;+E3zq|Tp->*uY?JX((B3-W3xm^ zJPjl|RTd}f{M;%EY5U0I9qPaJM?Z~~mtBwM&1eo2aiK31s5(#)Q|JBfris+SRy!rY z;OoQWrw+&Fu+-_u1hew8u|6)nXa>b}`sh>BP?{aqDP z+`oj>iaQio;{~xSkafF3xlz{TG7_+@tt@voXp^(d1yR8-1$V^t`gA^v=n1w z(YI%J=zl3h&$x1TBn}j<731=<{*{KGqQIT3BDH^6|71KOM9?)>6KdTk5|r#uuR??v zJ@#0kvCs|CSL-$8l58CqAgXf+2pEL_&=usNo!>>4jVF+w@C8F-PhQ{=NTlvt`DX#w zRx)I{R=}=;v7hpj4#@kenzJ!nFUHv%j&I(5{qq?)~(MO|T5#Y8YC= zA6_jN2ATac#8gc4fjXM1n8#rwmqT-=D(#2iqw5F&@Ba??C0YI4o$uSY5@-8Fni@!- znBtc^WMnXN;*JhsO8N?G{CKMO1>Au2)&Jx9k9B8+3lDk0Ae4Sy)$BzJWTu31WKby& z+1zF2?@ONnL!=(*+Ef1w4orCxUja-8R@+5v-0=+=$;l0qaH9esZ{4ivz+#L|{ulSq zr@BFYJV&}p?rA?lt0?QNQ8gQxRflEg;MU58a;nS(dhkp5y04&zFWjJP+_Q|tZ5iX6 zTztgP#UB+CGg~5C8P-GKE*ug z`uZMsMMy+@p}!B+EOSP~aM+o>AN}GnDBf!=-5uF1zPbFS9cFVj!Sbd9)f$*8rk{~g z=NFgf$4)OczLAU?Z$r{oH!-CGCbhX^Hh=$XHk2GTMxR zc1gUlGDE=2*_Bb=#p51_LcfF=%8z$wg$YjmD)0!8VT#sLtGdB1`Y|!zgUzI z5tt0j+YFQ+$@){#2KcL68W7mzozK)IX_4#ppk77a+%qVy$%b_9c`@+_Ll}~{!Zn2& zK0Y9?rX35R;dl>;($>dU?IkJ#xb3xaSs zEuFR}7Z)v!MV=escCH)IkMwsTBA&eqQsvM!Byne2v61h=aZmy#PgWR3vM|0aurLW4vK&2!s0JiA$Iwtw(^@s1hYIO$knE*!XNmKc>mwM v)1bsTpwiEl$@SWj!*NWh79^H)vx_z(hBWOLVmY@{JU5~z5vA_Kfsenx@ literal 4162 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 LsoI7F?dpF4ttiU7 diff --git a/src/wp-includes/images/wpspin-2x.gif b/src/wp-includes/images/wpspin-2x.gif index 392e82ff71b8c22a401d7c6b85943c0adfe4a98a..261c819d56a1555c76aa5b66c4d41283ca1f64f4 100644 GIT binary patch literal 8875 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 From d94fa844cfa4b17548247975bc6227dcb008c2e6 Mon Sep 17 00:00:00 2001 From: Gary Pendergast Date: Mon, 22 Oct 2018 05:14:59 +0000 Subject: [PATCH 491/537] Build/Tools: Add PHPCS to the 5.0 branch. This allows us to apply WordPress Coding Standards rules to new files in the 5.0 branch. Props netweb. Fixes #44366. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43786 602fd350-edb4-49c9-b593-d223f7449a82 --- .gitignore | 2 + composer.json | 20 ++++++ composer.lock | 180 +++++++++++++++++++++++++++++++++++++++++++++++++ phpcs.xml.dist | 122 +++++++++++++++++++++++++++++++++ 4 files changed, 324 insertions(+) create mode 100644 composer.json create mode 100644 composer.lock create mode 100644 phpcs.xml.dist diff --git a/.gitignore b/.gitignore index 8cb18f4d7b59c..948c11f00eaa2 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,8 @@ wp-tests-config.php # Files and folders related to build/test tools /phpunit.xml +/.phpcs.xml +/phpcs.xml /tests/phpunit/data/plugins/wordpress-importer /tests/phpunit/data/.trac-ticket-cache* /tests/qunit/compiled.html diff --git a/composer.json b/composer.json new file mode 100644 index 0000000000000..3c9e021d66b86 --- /dev/null +++ b/composer.json @@ -0,0 +1,20 @@ +{ + "name": "wordpress/wordpress", + "license": "GPL-2.0-or-later", + "description": "WordPress is open source software you can use to create a beautiful website, blog, or app.", + "homepage": "https://wordpress.org", + "keywords": [ + "blog", "cms", "wordpress", "wp" + ], + "support": { + "issues": "https://core.trac.wordpress.org/" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "~0.4.4", + "wp-coding-standards/wpcs": "~1.0.0" + }, + "scripts": { + "format": "phpcbf --standard=phpcs.xml.dist --report-summary --report-source", + "lint": "phpcs --standard=phpcs.xml.dist --report-summary --report-source" + } +} diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000000000..73fe1cd7dc513 --- /dev/null +++ b/composer.lock @@ -0,0 +1,180 @@ +{ + "_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#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "525cadb533bc92cc922d79144b33b14a", + "packages": [], + "packages-dev": [ + { + "name": "dealerdirect/phpcodesniffer-composer-installer", + "version": "v0.4.4", + "source": { + "type": "git", + "url": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer.git", + "reference": "2e41850d5f7797cbb1af7b030d245b3b24e63a08" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Dealerdirect/phpcodesniffer-composer-installer/zipball/2e41850d5f7797cbb1af7b030d245b3b24e63a08", + "reference": "2e41850d5f7797cbb1af7b030d245b3b24e63a08", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0", + "php": "^5.3|^7", + "squizlabs/php_codesniffer": "*" + }, + "require-dev": { + "composer/composer": "*", + "wimg/php-compatibility": "^8.0" + }, + "suggest": { + "dealerdirect/qa-tools": "All the PHP QA tools you'll need" + }, + "type": "composer-plugin", + "extra": { + "class": "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin" + }, + "autoload": { + "psr-4": { + "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Franck Nijhof", + "email": "f.nijhof@dealerdirect.nl", + "homepage": "http://workingatdealerdirect.eu", + "role": "Developer" + } + ], + "description": "PHP_CodeSniffer Standards Composer Installer Plugin", + "homepage": "http://workingatdealerdirect.eu", + "keywords": [ + "PHPCodeSniffer", + "PHP_CodeSniffer", + "code quality", + "codesniffer", + "composer", + "installer", + "phpcs", + "plugin", + "qa", + "quality", + "standard", + "standards", + "style guide", + "stylecheck", + "tests" + ], + "time": "2017-12-06T16:27:17+00:00" + }, + { + "name": "squizlabs/php_codesniffer", + "version": "3.3.2", + "source": { + "type": "git", + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "6ad28354c04b364c3c71a34e4a18b629cc3b231e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/6ad28354c04b364c3c71a34e4a18b629cc3b231e", + "reference": "6ad28354c04b364c3c71a34e4a18b629cc3b231e", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" + }, + "bin": [ + "bin/phpcs", + "bin/phpcbf" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "lead" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "http://www.squizlabs.com/php-codesniffer", + "keywords": [ + "phpcs", + "standards" + ], + "time": "2018-09-23T23:08:17+00:00" + }, + { + "name": "wp-coding-standards/wpcs", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards.git", + "reference": "539c6d74e6207daa22b7ea754d6f103e9abb2755" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/WordPress-Coding-Standards/WordPress-Coding-Standards/zipball/539c6d74e6207daa22b7ea754d6f103e9abb2755", + "reference": "539c6d74e6207daa22b7ea754d6f103e9abb2755", + "shasum": "" + }, + "require": { + "php": ">=5.3", + "squizlabs/php_codesniffer": "^2.9.0 || ^3.0.2" + }, + "require-dev": { + "phpcompatibility/php-compatibility": "*" + }, + "suggest": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.4.3 || This Composer plugin will sort out the PHPCS 'installed_paths' automatically." + }, + "type": "phpcodesniffer-standard", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Contributors", + "homepage": "https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards/graphs/contributors" + } + ], + "description": "PHP_CodeSniffer rules (sniffs) to enforce WordPress coding conventions", + "keywords": [ + "phpcs", + "standards", + "wordpress" + ], + "time": "2018-07-25T18:10:35+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [] +} diff --git a/phpcs.xml.dist b/phpcs.xml.dist new file mode 100644 index 0000000000000..1bd55b6f4c80a --- /dev/null +++ b/phpcs.xml.dist @@ -0,0 +1,122 @@ + + + Apply WordPress Coding Standards to all Core files + + + + + + + + + + + + + + + + + + + + + + . + + + ^build/* + + + /node_modules/* + /vendor/* + + /src/wp-admin/includes/class-ftp* + /src/wp-admin/includes/class-pclzip\.php + /src/wp-admin/includes/deprecated\.php + /src/wp-admin/includes/ms-deprecated\.php + + /src/wp-includes/atomlib\.php + /src/wp-includes/class-IXR\.php + /src/wp-includes/class-json\.php + /src/wp-includes/class-phpass\.php + /src/wp-includes/class-phpmailer\.php + /src/wp-includes/class-pop3\.php + /src/wp-includes/class-requests\.php + /src/wp-includes/class-simplepie\.php + /src/wp-includes/class-smtp\.php + /src/wp-includes/class-snoopy\.php + /src/wp-includes/deprecated\.php + /src/wp-includes/ms-deprecated\.php + /src/wp-includes/pluggable-deprecated\.php + /src/wp-includes/rss\.php + + /src/wp-includes/ID3/* + /src/wp-includes/IXR/* + /src/wp-includes/random_compat/* + /src/wp-includes/Requests/* + /src/wp-includes/SimplePie/* + /src/wp-includes/Text/* + + + /tests/phpunit/build* + /tests/phpunit/data/* + + /tools/* + + + + /src/wp-includes/wp-db\.php + /tests/phpunit/tests/db/charset\.php + + + + + /tests/phpunit/tests/db\.php + + + /tests/phpunit/tests/db\.php + + + /tests/phpunit/tests/db\.php + + + /tests/phpunit/tests/admin/includesSchema\.php + /tests/phpunit/tests/multisite/site\.php + + + + + /src/wp-includes/l10n\.php + + + + /wp-config\.php + /wp-config-sample\.php + /wp-tests-config\.php + /wp-tests-config-sample\.php + + + + /wp-config\.php + /wp-config-sample\.php + + + + + + + + + + + + /tests/phpunit/tests/* + + + /tests/phpunit/tests/* + + + From 96a8987c885c865f8915f99468fe4bb26fedf84e Mon Sep 17 00:00:00 2001 From: Gary Pendergast Date: Mon, 22 Oct 2018 06:05:01 +0000 Subject: [PATCH 492/537] TinyMCE: remove stray CSS map reference from `skin.min.css`. Merges [43581] to the 5.0 branch. Props pross. Fixes #44785. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43787 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/js/tinymce/skins/lightgray/skin.min.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wp-includes/js/tinymce/skins/lightgray/skin.min.css b/src/wp-includes/js/tinymce/skins/lightgray/skin.min.css index ba5c691c79a66..c734b7d42191e 100644 --- a/src/wp-includes/js/tinymce/skins/lightgray/skin.min.css +++ b/src/wp-includes/js/tinymce/skins/lightgray/skin.min.css @@ -1 +1 @@ -.mce-container,.mce-container *,.mce-widget,.mce-widget *,.mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:#595959;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;-webkit-tap-highlight-color:transparent;line-height:normal;font-weight:normal;text-align:left;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-widget button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.mce-container *[unselectable]{-moz-user-select:none;-webkit-user-select:none;-o-user-select:none;user-select:none}.word-wrap{word-wrap:break-word;-ms-word-break:break-all;word-break:break-all;word-break:break-word;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto}.mce-fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.mce-fade.mce-in{opacity:1}.mce-tinymce{visibility:inherit !important;position:relative}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%;z-index:100}div.mce-fullscreen{position:fixed;top:0;left:0;width:100%;height:auto}.mce-tinymce{display:block;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);box-shadow:0 1px 2px rgba(0, 0, 0, 0.2)}.mce-statusbar>.mce-container-body{display:flex;padding-right:16px}.mce-statusbar>.mce-container-body .mce-path{flex:1}.mce-wordcount{font-size:inherit;text-transform:uppercase;padding:8px 0}div.mce-edit-area{background:#FFF;filter:none}.mce-statusbar{position:relative}.mce-statusbar .mce-container-body{position:relative;font-size:11px}.mce-fullscreen .mce-resizehandle{display:none}.mce-statusbar .mce-flow-layout-item{margin:0}.mce-charmap{border-collapse:collapse}.mce-charmap td{cursor:default;border:1px solid #c5c5c5;width:20px;height:20px;line-height:20px;text-align:center;vertical-align:middle;padding:2px}.mce-charmap td div{text-align:center}.mce-charmap td:hover{background:white}.mce-grid td.mce-grid-cell div{border:1px solid #c5c5c5;width:15px;height:15px;margin:0;cursor:pointer}.mce-grid td.mce-grid-cell div:focus{border-color:#91bbe9}.mce-grid td.mce-grid-cell div[disabled]{cursor:not-allowed}.mce-grid{border-spacing:2px;border-collapse:separate}.mce-grid a{display:block;border:1px solid transparent}.mce-grid a:hover,.mce-grid a:focus{border-color:#91bbe9}.mce-grid-border{margin:0 4px 0 4px}.mce-grid-border a{border-color:#c5c5c5;width:13px;height:13px}.mce-grid-border a:hover,.mce-grid-border a.mce-active{border-color:#91bbe9;background:#bdd6f2}.mce-text-center{text-align:center}div.mce-tinymce-inline{width:100%}.mce-colorbtn-trans div{text-align:center;vertical-align:middle;font-weight:bold;font-size:20px;line-height:16px;color:#8b8b8b}.mce-monospace{font-family:"Courier New",Courier,monospace}.mce-toolbar-grp .mce-flow-layout-item{margin-bottom:0}.mce-container b{font-weight:bold}.mce-container p{margin-bottom:5px}.mce-container a{cursor:pointer;color:#2276d2}.mce-container a:hover{text-decoration:underline}.mce-container ul{margin-left:15px}.mce-container .mce-table-striped{border-collapse:collapse;margin:10px}.mce-container .mce-table-striped thead>tr{background-color:#fafafa}.mce-container .mce-table-striped thead>tr th{font-weight:bold}.mce-container .mce-table-striped td,.mce-container .mce-table-striped th{padding:5px}.mce-container .mce-table-striped tr:nth-child(even){background-color:#fafafa}.mce-container .mce-table-striped tbody>tr:hover{background-color:#e1e1e1}.mce-branding{font-size:inherit;text-transform:uppercase;white-space:pre;padding:8px 0}.mce-branding a{font-size:inherit;color:inherit}.mce-top-part{position:relative}.mce-top-part::before{content:'';position:absolute;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);top:0;right:0;bottom:0;left:0;pointer-events:none}.mce-rtl .mce-wordcount{left:0;right:auto}.mce-rtl .mce-statusbar>.mce-container-body>*:last-child{padding-right:0;padding-left:10px}.mce-rtl .mce-path{text-align:right;padding-right:16px}.mce-croprect-container{position:absolute;top:0;left:0}.mce-croprect-handle{position:absolute;top:0;left:0;width:20px;height:20px;border:2px solid white}.mce-croprect-handle-nw{border-width:2px 0 0 2px;margin:-2px 0 0 -2px;cursor:nw-resize;top:100px;left:100px}.mce-croprect-handle-ne{border-width:2px 2px 0 0;margin:-2px 0 0 -20px;cursor:ne-resize;top:100px;left:200px}.mce-croprect-handle-sw{border-width:0 0 2px 2px;margin:-20px 2px 0 -2px;cursor:sw-resize;top:200px;left:100px}.mce-croprect-handle-se{border-width:0 2px 2px 0;margin:-20px 0 0 -20px;cursor:se-resize;top:200px;left:200px}.mce-croprect-handle-move{position:absolute;cursor:move;border:0}.mce-croprect-block{opacity:.5;filter:alpha(opacity=50);zoom:1;position:absolute;background:black}.mce-croprect-handle:focus{border-color:#2276d2}.mce-croprect-handle-move:focus{outline:1px solid #2276d2}.mce-imagepanel{overflow:auto;background:black}.mce-imagepanel-bg{position:absolute;background:url('data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==')}.mce-imagepanel img{position:absolute}.mce-imagetool.mce-btn .mce-ico{display:block;width:20px;height:20px;text-align:center;line-height:20px;font-size:20px;padding:5px}.mce-arrow-up{margin-top:12px}.mce-arrow-down{margin-top:-12px}.mce-arrow:before,.mce-arrow:after{position:absolute;left:50%;display:block;width:0;height:0;border-style:solid;border-color:transparent;content:""}.mce-arrow.mce-arrow-up:before{top:-9px;border-bottom-color:#c5c5c5;border-width:0 9px 9px;margin-left:-9px}.mce-arrow.mce-arrow-down:before{bottom:-9px;border-top-color:#c5c5c5;border-width:9px 9px 0;margin-left:-9px}.mce-arrow.mce-arrow-up:after{top:-8px;border-bottom-color:#fff;border-width:0 8px 8px;margin-left:-8px}.mce-arrow.mce-arrow-down:after{bottom:-8px;border-top-color:#fff;border-width:8px 8px 0;margin-left:-8px}.mce-arrow.mce-arrow-left:before,.mce-arrow.mce-arrow-left:after{margin:0}.mce-arrow.mce-arrow-left:before{left:8px}.mce-arrow.mce-arrow-left:after{left:9px}.mce-arrow.mce-arrow-right:before,.mce-arrow.mce-arrow-right:after{left:auto;margin:0}.mce-arrow.mce-arrow-right:before{right:8px}.mce-arrow.mce-arrow-right:after{right:9px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-left:before{left:-9px;top:50%;border-right-color:#c5c5c5;border-width:9px 9px 9px 0;margin-top:-9px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-left:after{left:-8px;top:50%;border-right-color:#fff;border-width:8px 8px 8px 0;margin-top:-8px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-left{margin-left:12px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-right:before{right:-9px;top:50%;border-left-color:#c5c5c5;border-width:9px 0 9px 9px;margin-top:-9px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-right:after{right:-8px;top:50%;border-left-color:#fff;border-width:8px 0 8px 8px;margin-top:-8px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-right{margin-left:-14px}.mce-edit-aria-container>.mce-container-body{display:flex}.mce-edit-aria-container>.mce-container-body .mce-edit-area{flex:1}.mce-edit-aria-container>.mce-container-body .mce-sidebar>.mce-container-body{display:flex;align-items:stretch;height:100%}.mce-edit-aria-container>.mce-container-body .mce-sidebar-panel{min-width:250px;max-width:250px;position:relative}.mce-edit-aria-container>.mce-container-body .mce-sidebar-panel>.mce-container-body{position:absolute;width:100%;height:100%;overflow:auto;top:0;left:0}.mce-sidebar-toolbar{border:0 solid #c5c5c5;border-left-width:1px}.mce-sidebar-toolbar .mce-btn{border-left:0;border-right:0}.mce-sidebar-toolbar .mce-btn.mce-active,.mce-sidebar-toolbar .mce-btn.mce-active:hover{background-color:#555c66}.mce-sidebar-toolbar .mce-btn.mce-active button,.mce-sidebar-toolbar .mce-btn.mce-active:hover button,.mce-sidebar-toolbar .mce-btn.mce-active button i,.mce-sidebar-toolbar .mce-btn.mce-active:hover button i{color:white;text-shadow:1px 1px none}.mce-sidebar-panel{border:0 solid #c5c5c5;border-left-width:1px}.mce-container,.mce-container-body{display:block}.mce-autoscroll{overflow:hidden}.mce-scrollbar{position:absolute;width:7px;height:100%;top:2px;right:2px;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-scrollbar-h{top:auto;right:auto;left:2px;bottom:2px;width:100%;height:7px}.mce-scrollbar-thumb{position:absolute;background-color:#000;border:1px solid #888;border-color:rgba(85,85,85,0.6);width:5px;height:100%}.mce-scrollbar-h .mce-scrollbar-thumb{width:100%;height:5px}.mce-scrollbar:hover,.mce-scrollbar.mce-active{background-color:#AAA;opacity:.6;filter:alpha(opacity=60);zoom:1}.mce-scroll{position:relative}.mce-panel{border:0 solid #f3f3f3;border:0 solid #c5c5c5;background-color:#fff}.mce-floatpanel{position:absolute;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);box-shadow:0 1px 2px rgba(0, 0, 0, 0.2)}.mce-floatpanel.mce-fixed{position:fixed}.mce-floatpanel .mce-arrow,.mce-floatpanel .mce-arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.mce-floatpanel .mce-arrow{border-width:11px}.mce-floatpanel .mce-arrow:after{border-width:10px;content:""}.mce-floatpanel.mce-popover{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);top:0;left:0;background:#FFF;border:1px solid #c5c5c5;border:1px solid rgba(0,0,0,0.25)}.mce-floatpanel.mce-popover.mce-bottom{margin-top:10px;*margin-top:0}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#c5c5c5;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#FFF}.mce-floatpanel.mce-popover.mce-top{margin-top:-10px;*margin-top:0}.mce-floatpanel.mce-popover.mce-top>.mce-arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#c5c5c5;top:auto;bottom:-11px}.mce-floatpanel.mce-popover.mce-top>.mce-arrow:after{bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#FFF}.mce-floatpanel.mce-popover.mce-bottom.mce-start,.mce-floatpanel.mce-popover.mce-top.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow,.mce-floatpanel.mce-popover.mce-top.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end,.mce-floatpanel.mce-popover.mce-top.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow,.mce-floatpanel.mce-popover.mce-top.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#FFF}#mce-modal-block.mce-in{opacity:.5;filter:alpha(opacity=50);zoom:1}.mce-window-move{cursor:move}.mce-window{-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#FFF;position:fixed;top:0;left:0;opacity:0;transform:scale(.1);transition:transform 100ms ease-in,opacity 150ms ease-in}.mce-window.mce-in{transform:scale(1);opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #c5c5c5;position:relative}.mce-window-head .mce-close{position:absolute;right:0;top:0;height:38px;width:38px;text-align:center;cursor:pointer}.mce-window-head .mce-close i{color:#9b9b9b}.mce-close:hover i{color:#bdbdbd}.mce-window-head .mce-title{line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:20px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:#FFF;border-top:1px solid #c5c5c5}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window-body .mce-listbox{border-color:#e2e4e7}.mce-window .mce-btn:hover{border-color:#c5c5c5}.mce-window .mce-btn:focus{border-color:#2276d2}.mce-window-body .mce-btn,.mce-foot .mce-btn{border-color:#c5c5c5}.mce-foot .mce-btn.mce-primary{border-color:transparent}.mce-rtl .mce-window-head .mce-close{position:absolute;right:auto;left:0}.mce-rtl .mce-window-head .mce-dragh{left:auto;right:0}.mce-rtl .mce-window-head .mce-title{direction:rtl;text-align:right;padding-right:0;padding-left:20px}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1;margin-top:1px}.mce-tooltip-inner{font-size:11px;background-color:#000;color:white;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-inner{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-ne,.mce-tooltip-se{margin-left:14px}.mce-tooltip-n .mce-tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}.mce-progress{display:inline-block;position:relative;height:20px}.mce-progress .mce-bar-container{display:inline-block;width:100px;height:100%;margin-right:8px;border:1px solid #ccc;overflow:hidden}.mce-progress .mce-text{display:inline-block;margin-top:auto;margin-bottom:auto;font-size:14px;width:40px;color:#595959}.mce-bar{display:block;width:0;height:100%;background-color:#dfdfdf;-webkit-transition:width .2s ease;transition:width .2s ease}.mce-notification{position:absolute;background-color:#fff;padding:5px;margin-top:5px;border-width:1px;border-style:solid;border-color:#c5c5c5;transition:transform 100ms ease-in,opacity 150ms ease-in;opacity:0;box-sizing:border-box}.mce-notification.mce-in{opacity:1}.mce-notification-success{background-color:#dff0d8;border-color:#d6e9c6}.mce-notification-info{background-color:#d9edf7;border-color:#779ECB}.mce-notification-warning{background-color:#fcf8e3;border-color:#faebcc}.mce-notification-error{background-color:#f2dede;border-color:#ebccd1}.mce-notification.mce-has-close{padding-right:15px}.mce-notification .mce-ico{margin-top:5px}.mce-notification-inner{word-wrap:break-word;-ms-word-break:break-all;word-break:break-all;word-break:break-word;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto;display:inline-block;font-size:14px;margin:5px 8px 4px 8px;text-align:center;white-space:normal;color:#31708f}.mce-notification-inner a{text-decoration:underline;cursor:pointer}.mce-notification .mce-progress{margin-right:8px}.mce-notification .mce-progress .mce-text{margin-top:5px}.mce-notification *,.mce-notification .mce-progress .mce-text{color:#595959}.mce-notification .mce-progress .mce-bar-container{border-color:#c5c5c5}.mce-notification .mce-progress .mce-bar-container .mce-bar{background-color:#595959}.mce-notification-success *,.mce-notification-success .mce-progress .mce-text{color:#3c763d}.mce-notification-success .mce-progress .mce-bar-container{border-color:#d6e9c6}.mce-notification-success .mce-progress .mce-bar-container .mce-bar{background-color:#3c763d}.mce-notification-info *,.mce-notification-info .mce-progress .mce-text{color:#31708f}.mce-notification-info .mce-progress .mce-bar-container{border-color:#779ECB}.mce-notification-info .mce-progress .mce-bar-container .mce-bar{background-color:#31708f}.mce-notification-warning *,.mce-notification-warning .mce-progress .mce-text{color:#8a6d3b}.mce-notification-warning .mce-progress .mce-bar-container{border-color:#faebcc}.mce-notification-warning .mce-progress .mce-bar-container .mce-bar{background-color:#8a6d3b}.mce-notification-error *,.mce-notification-error .mce-progress .mce-text{color:#a94442}.mce-notification-error .mce-progress .mce-bar-container{border-color:#ebccd1}.mce-notification-error .mce-progress .mce-bar-container .mce-bar{background-color:#a94442}.mce-notification .mce-close{position:absolute;top:6px;right:8px;font-size:20px;font-weight:bold;line-height:20px;color:#9b9b9b;cursor:pointer}.mce-abs-layout{position:relative}html .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-btn{border:1px solid #b3b3b3;border-color:transparent transparent transparent transparent;position:relative;text-shadow:0 1px 1px rgba(255,255,255,0.75);background:white;display:inline-block;*display:inline;*zoom:1;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-btn:hover,.mce-btn:active{background:white;color:#595959;border-color:#e2e4e7}.mce-btn:focus{background:white;color:#595959;border-color:#e2e4e7}.mce-btn.mce-disabled button,.mce-btn.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover,.mce-btn.mce-active:focus,.mce-btn.mce-active:active{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;background:#555c66;color:white;border-color:transparent}.mce-btn.mce-active button,.mce-btn.mce-active:hover button,.mce-btn.mce-active i,.mce-btn.mce-active:hover i{color:white}.mce-btn:hover .mce-caret{border-top-color:#b5bcc2}.mce-btn.mce-active .mce-caret,.mce-btn.mce-active:hover .mce-caret{border-top-color:white}.mce-btn button{padding:4px 6px;font-size:14px;line-height:20px;*line-height:16px;cursor:pointer;color:#595959;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px none}.mce-primary.mce-btn-has-text{min-width:50px}.mce-primary{color:white;border:1px solid transparent;border-color:transparent;background-color:#2276d2}.mce-primary:hover,.mce-primary:focus{background-color:#1e6abc;border-color:transparent}.mce-primary.mce-disabled button,.mce-primary.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-primary.mce-active,.mce-primary.mce-active:hover,.mce-primary:not(.mce-disabled):active{background-color:#1e6abc;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-primary button,.mce-primary button i{color:white;text-shadow:1px 1px none}.mce-btn .mce-txt{font-size:inherit;line-height:inherit;color:inherit}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:1px 5px;font-size:12px;*padding-bottom:2px}.mce-btn-small i{line-height:20px;vertical-align:top;*line-height:18px}.mce-btn .mce-caret{margin-top:8px;margin-left:0}.mce-btn-small .mce-caret{margin-top:8px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:0;height:0;vertical-align:top;border-top:4px solid #b5bcc2;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#aaa}.mce-caret.mce-up{border-bottom:4px solid #b5bcc2;border-top:0}.mce-btn-flat{border:0;background:transparent;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:none}.mce-btn-flat:hover,.mce-btn-flat.mce-active,.mce-btn-flat:focus,.mce-btn-flat:active{border:0;background:#e6e6e6;filter:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-btn-has-text .mce-ico{padding-right:5px}.mce-rtl .mce-btn button{direction:rtl}.mce-toolbar .mce-btn-group{margin:0;padding:2px 0}.mce-btn-group .mce-btn{border-width:1px;margin:0;margin-left:2px}.mce-btn-group:not(:first-child){border-left:1px solid #d9d9d9;padding-left:0;margin-left:2px}.mce-btn-group{margin-left:2px}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-rtl .mce-btn-group .mce-btn{margin-left:0;margin-right:2px}.mce-rtl .mce-btn-group .mce-first{margin-right:0}.mce-rtl .mce-btn-group:not(:first-child){border-left:none;border-right:1px solid #d9d9d9;padding-right:4px;margin-right:4px}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;background-color:white;text-indent:-10em;overflow:hidden}.mce-checked i.mce-i-checkbox{color:#595959;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox,.mce-checkbox.mce-focus i.mce-i-checkbox{border:1px solid #2276d2;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-checkbox.mce-disabled .mce-label,.mce-checkbox.mce-disabled i.mce-i-checkbox{color:#bdbdbd}.mce-checkbox .mce-label{vertical-align:middle}.mce-rtl .mce-checkbox{direction:rtl;text-align:right}.mce-rtl i.mce-i-checkbox{margin:0 0 0 3px}.mce-combobox{position:relative;display:inline-block;*display:inline;*zoom:1;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;*height:32px}.mce-combobox input{border:1px solid #c5c5c5;border-right-color:#c5c5c5;height:28px}.mce-combobox.mce-disabled input{color:#bdbdbd}.mce-combobox .mce-btn{border:1px solid #c5c5c5;border-left:0;margin:0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox.mce-disabled .mce-btn button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-combobox .mce-status{position:absolute;right:2px;top:50%;line-height:16px;margin-top:-8px;font-size:12px;width:15px;height:15px;text-align:center;cursor:pointer}.mce-combobox.mce-has-status input{padding-right:20px}.mce-combobox.mce-has-open .mce-status{right:37px}.mce-combobox .mce-status.mce-i-warning{color:#c09853}.mce-combobox .mce-status.mce-i-checkmark{color:#468847}.mce-menu.mce-combobox-menu{border-top:0;margin-top:0;max-height:200px}.mce-menu.mce-combobox-menu .mce-menu-item{padding:4px 6px 4px 4px;font-size:11px}.mce-menu.mce-combobox-menu .mce-menu-item-sep{padding:0}.mce-menu.mce-combobox-menu .mce-text,.mce-menu.mce-combobox-menu .mce-text b{font-size:11px}.mce-menu.mce-combobox-menu .mce-menu-item-link,.mce-menu.mce-combobox-menu .mce-menu-item-link b{font-size:11px}.mce-colorbox i{border:1px solid #c5c5c5;width:14px;height:14px}.mce-colorbutton .mce-ico{position:relative}.mce-colorbutton-grid{margin:4px}.mce-colorbutton .mce-preview{padding-right:3px;display:block;position:absolute;left:50%;top:50%;margin-left:-17px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-16px;padding-right:0;width:16px}.mce-rtl .mce-colorbutton{direction:rtl}.mce-rtl .mce-colorbutton .mce-preview{margin-left:0;padding-right:0;padding-left:3px}.mce-rtl .mce-colorbutton.mce-btn-small .mce-preview{margin-left:0;padding-right:0;padding-left:2px}.mce-rtl .mce-colorbutton .mce-open{padding-left:4px;padding-right:4px;border-left:0}.mce-colorpicker{position:relative;width:250px;height:220px}.mce-colorpicker-sv{position:absolute;top:0;left:0;width:90%;height:100%;border:1px solid #c5c5c5;cursor:crosshair;overflow:hidden}.mce-colorpicker-h-chunk{width:100%}.mce-colorpicker-overlay1,.mce-colorpicker-overlay2{width:100%;height:100%;position:absolute;top:0;left:0}.mce-colorpicker-overlay1{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr='#ffffff', endColorstr='#00ffffff');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=1,startColorstr='#ffffff', endColorstr='#00ffffff')";background:linear-gradient(to right, #fff, rgba(255,255,255,0))}.mce-colorpicker-overlay2{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#00000000', endColorstr='#000000');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#00000000', endColorstr='#000000')";background:linear-gradient(to bottom, rgba(0,0,0,0), #000)}.mce-colorpicker-selector1{background:none;position:absolute;width:12px;height:12px;margin:-8px 0 0 -8px;border:1px solid black;border-radius:50%}.mce-colorpicker-selector2{position:absolute;width:10px;height:10px;border:1px solid white;border-radius:50%}.mce-colorpicker-h{position:absolute;top:0;right:0;width:6.5%;height:100%;border:1px solid #c5c5c5;cursor:crosshair}.mce-colorpicker-h-marker{margin-top:-4px;position:absolute;top:0;left:-1px;width:100%;border:1px solid black;background:white;height:4px;z-index:100}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal;font-size:inherit}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#595959;font-size:inherit;text-transform:uppercase}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:#555c66;color:white}.mce-path .mce-divider{display:inline;font-size:inherit}.mce-disabled .mce-path-item{color:#aaa}.mce-rtl .mce-path{direction:rtl}.mce-fieldset{border:0 solid #9E9E9E}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-tinymce-inline .mce-flow-layout{white-space:nowrap}.mce-rtl .mce-flow-layout{text-align:right;direction:rtl}.mce-rtl .mce-flow-layout-item{margin:2px 2px 2px 0}.mce-rtl .mce-flow-layout-item.mce-last{margin-left:2px}.mce-iframe{border:0 solid #c5c5c5;width:100%;height:100%}.mce-infobox{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden;border:1px solid red}.mce-infobox div{display:block;margin:5px}.mce-infobox div button{position:absolute;top:50%;right:4px;cursor:pointer;margin-top:-8px;display:none}.mce-infobox div button:focus{outline:2px solid #e2e4e7}.mce-infobox.mce-has-help div{margin-right:25px}.mce-infobox.mce-has-help button{display:block}.mce-infobox.mce-success{background:#dff0d8;border-color:#d6e9c6}.mce-infobox.mce-success div{color:#3c763d}.mce-infobox.mce-warning{background:#fcf8e3;border-color:#faebcc}.mce-infobox.mce-warning div{color:#8a6d3b}.mce-infobox.mce-error{background:#f2dede;border-color:#ebccd1}.mce-infobox.mce-error div{color:#a94442}.mce-rtl .mce-infobox div{text-align:right;direction:rtl}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label.mce-disabled{color:#aaa}.mce-label.mce-multiline{white-space:pre-wrap}.mce-label.mce-success{color:#468847}.mce-label.mce-warning{color:#c09853}.mce-label.mce-error{color:#b94a48}.mce-rtl .mce-label{text-align:right;direction:rtl}.mce-menubar{border:1px solid #e2e4e7}.mce-menubar .mce-menubtn{border-color:transparent;background:transparent;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:none}.mce-menubar .mce-menubtn button span{color:#595959}.mce-menubar .mce-caret{border-top-color:#b5bcc2}.mce-menubar .mce-active .mce-caret,.mce-menubar .mce-menubtn:hover .mce-caret{border-top-color:#b5bcc2}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:#e2e4e7;background:white;filter:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-menubar .mce-menubtn.mce-active{border-bottom:none;z-index:65537}div.mce-menubtn.mce-opened{border-bottom-color:white;z-index:65537}.mce-menubtn button{color:#595959}.mce-menubtn.mce-btn-small span{font-size:12px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-menubtn .mce-caret{*margin-top:6px}.mce-rtl .mce-menubtn button{direction:rtl;text-align:right}.mce-rtl .mce-menubtn.mce-fixed-width span{direction:rtl;text-align:right}.mce-menu-item{display:block;padding:6px 4px 6px 4px;clear:both;font-weight:normal;line-height:20px;color:#595959;white-space:nowrap;cursor:pointer;line-height:normal;border-left:4px solid transparent;margin-bottom:1px}.mce-menu-item .mce-text,.mce-menu-item .mce-text b{line-height:1;vertical-align:initial}.mce-menu-item .mce-caret{margin-top:4px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #595959}.mce-menu-item .mce-menu-shortcut{display:inline-block;padding:0 10px 0 20px;color:#aaa}.mce-menu-item .mce-ico{padding-right:4px}.mce-menu-item:hover,.mce-menu-item:focus{background:#ededee}.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item:focus .mce-menu-shortcut{color:#aaa}.mce-menu-item:hover .mce-text,.mce-menu-item:focus .mce-text,.mce-menu-item:hover .mce-ico,.mce-menu-item:focus .mce-ico{color:#595959}.mce-menu-item.mce-selected{background:#ededee}.mce-menu-item.mce-selected .mce-text,.mce-menu-item.mce-selected .mce-ico{color:#595959}.mce-menu-item.mce-active.mce-menu-item-normal{background:#555c66}.mce-menu-item.mce-active.mce-menu-item-normal .mce-text,.mce-menu-item.mce-active.mce-menu-item-normal .mce-ico{color:white}.mce-menu-item.mce-active.mce-menu-item-checkbox .mce-ico{visibility:visible}.mce-menu-item.mce-disabled,.mce-menu-item.mce-disabled:hover{background:white}.mce-menu-item.mce-disabled:focus,.mce-menu-item.mce-disabled:hover:focus{background:#ededee}.mce-menu-item.mce-disabled .mce-text,.mce-menu-item.mce-disabled:hover .mce-text,.mce-menu-item.mce-disabled .mce-ico,.mce-menu-item.mce-disabled:hover .mce-ico{color:#aaa}.mce-menu-item.mce-menu-item-preview.mce-active{border-left:5px solid #555c66;background:white}.mce-menu-item.mce-menu-item-preview.mce-active .mce-text,.mce-menu-item.mce-menu-item-preview.mce-active .mce-ico{color:#595959}.mce-menu-item.mce-menu-item-preview.mce-active:hover{background:#ededee}.mce-menu-item-link{color:#093;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mce-menu-item-link b{color:#093}.mce-menu-item-ellipsis{display:block;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.mce-menu-item:hover *,.mce-menu-item.mce-selected *,.mce-menu-item:focus *{color:#595959}div.mce-menu .mce-menu-item-sep,.mce-menu-item-sep:hover{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:transparent;border-bottom:1px solid rgba(0,0,0,0.1);cursor:default;filter:none}div.mce-menu .mce-menu-item b{font-weight:bold}.mce-menu-item-indent-1{padding-left:20px}.mce-menu-item-indent-2{padding-left:35px}.mce-menu-item-indent-2{padding-left:35px}.mce-menu-item-indent-3{padding-left:40px}.mce-menu-item-indent-4{padding-left:45px}.mce-menu-item-indent-5{padding-left:50px}.mce-menu-item-indent-6{padding-left:55px}.mce-menu.mce-rtl{direction:rtl}.mce-rtl .mce-menu-item{text-align:right;direction:rtl;padding:6px 12px 6px 15px}.mce-rtl .mce-menu-item .mce-caret{margin-left:6px;margin-right:0;border-right:4px solid #595959;border-left:0}.mce-rtl .mce-menu-item.mce-selected .mce-caret,.mce-rtl .mce-menu-item:focus .mce-caret,.mce-rtl .mce-menu-item:hover .mce-caret{border-left-color:transparent;border-right-color:#595959}.mce-rtl .mce-menu-item .mce-ico{padding-right:0;padding-left:4px}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}.mce-throbber-inline{position:static;height:50px}.mce-menu .mce-throbber-inline{height:25px;background-size:contain}.mce-menu{position:absolute;left:0;top:0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:-1px 0 0;min-width:180px;background:white;border:1px solid #c5c9cf;border:1px solid #e2e4e7;z-index:1002;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);max-height:500px;overflow:auto;overflow-x:hidden}.mce-menu.mce-animate{opacity:.01;transform:rotateY(10deg) rotateX(-10deg);transform-origin:left top}.mce-menu.mce-menu-align .mce-menu-shortcut,.mce-menu.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block}.mce-menu.mce-in.mce-animate{opacity:1;transform:rotateY(0) rotateX(0);transition:opacity .075s ease,transform .1s ease}.mce-menu-sub-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}.mce-rtl .mce-menu-item .mce-ico{padding-right:0;padding-left:4px}.mce-rtl.mce-menu-align .mce-caret,.mce-rtl .mce-menu-shortcut{right:auto;left:0}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-rtl .mce-listbox .mce-caret{right:auto;left:8px}.mce-rtl .mce-listbox button{padding-right:10px;padding-left:20px}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#595959}.mce-selectbox{background:#fff;border:1px solid #c5c5c5}.mce-slider{border:1px solid #c5c5c5;background:#fff;width:100px;height:10px;position:relative;display:block}.mce-slider.mce-vertical{width:10px;height:100px}.mce-slider-handle{border:1px solid #c5c5c5;background:#e6e6e6;display:block;width:13px;height:13px;position:absolute;top:0;left:0;margin-left:-1px;margin-top:-2px}.mce-slider-handle:focus{border-color:#2276d2}.mce-spacer{visibility:hidden}.mce-splitbtn:hover .mce-open{border-left:1px solid #e2e4e7}.mce-splitbtn .mce-open{border-left:1px solid transparent;padding-right:4px;padding-left:4px}.mce-splitbtn .mce-open:focus{border-left:1px solid #e2e4e7}.mce-splitbtn .mce-open:hover,.mce-splitbtn .mce-open:active{border-left:1px solid #e2e4e7}.mce-splitbtn.mce-active:hover .mce-open{border-left:1px solid white}.mce-splitbtn.mce-opened{border-color:#e2e4e7}.mce-splitbtn.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-splitbtn{direction:rtl;text-align:right}.mce-rtl .mce-splitbtn button{padding-right:4px;padding-left:4px}.mce-rtl .mce-splitbtn .mce-open{border-left:0}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #c5c5c5}.mce-tabs,.mce-tabs+.mce-container-body{background:#fff}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #c5c5c5;border-width:0 1px 0 0;background:#fff;padding:8px 15px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#FDFDFD}.mce-tab.mce-active{background:#FDFDFD;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-tab:focus{color:#2276d2}.mce-rtl .mce-tabs{text-align:right;direction:rtl}.mce-rtl .mce-tab{border-width:0 0 0 1px}.mce-textbox{background:#fff;border:1px solid #c5c5c5;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;display:inline-block;-webkit-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#595959}.mce-textbox:focus,.mce-textbox.mce-focus{border-color:#2276d2;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px;height:auto}.mce-textbox.mce-disabled{color:#bdbdbd}.mce-rtl .mce-textbox{text-align:right;direction:rtl}.mce-dropzone{border:3px dashed gray;text-align:center}.mce-dropzone span{text-transform:uppercase;display:inline-block;vertical-align:middle}.mce-dropzone:after{content:"";height:100%;display:inline-block;vertical-align:middle}.mce-dropzone.mce-disabled{opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-dropzone.mce-disabled.mce-dragenter{cursor:not-allowed}.mce-browsebutton{position:relative;overflow:hidden}.mce-browsebutton button{position:relative;z-index:1}.mce-browsebutton input{opacity:0;filter:alpha(opacity=0);zoom:1;position:absolute;top:0;left:0;width:100%;height:100%;z-index:0}@font-face{font-family:'tinymce';src:url('fonts/tinymce.eot');src:url('fonts/tinymce.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce.woff') format('woff'),url('fonts/tinymce.ttf') format('truetype'),url('fonts/tinymce.svg#tinymce') format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'tinymce-small';src:url('fonts/tinymce-small.eot');src:url('fonts/tinymce-small.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce-small.woff') format('woff'),url('fonts/tinymce-small.ttf') format('truetype'),url('fonts/tinymce-small.svg#tinymce') format('svg');font-weight:normal;font-style:normal}.mce-ico{font-family:'tinymce',Arial;font-style:normal;font-weight:normal;font-variant:normal;font-size:16px;line-height:16px;speak:none;vertical-align:text-top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;background:transparent center center;background-size:cover;width:16px;height:16px;color:#595959}.mce-btn-small .mce-ico{font-family:'tinymce-small',Arial}.mce-i-save:before{content:"\e000"}.mce-i-newdocument:before{content:"\e001"}.mce-i-fullpage:before{content:"\e002"}.mce-i-alignleft:before{content:"\e003"}.mce-i-aligncenter:before{content:"\e004"}.mce-i-alignright:before{content:"\e005"}.mce-i-alignjustify:before{content:"\e006"}.mce-i-alignnone:before{content:"\e003"}.mce-i-cut:before{content:"\e007"}.mce-i-paste:before{content:"\e008"}.mce-i-searchreplace:before{content:"\e009"}.mce-i-bullist:before{content:"\e00a"}.mce-i-numlist:before{content:"\e00b"}.mce-i-indent:before{content:"\e00c"}.mce-i-outdent:before{content:"\e00d"}.mce-i-blockquote:before{content:"\e00e"}.mce-i-undo:before{content:"\e00f"}.mce-i-redo:before{content:"\e010"}.mce-i-link:before{content:"\e011"}.mce-i-unlink:before{content:"\e012"}.mce-i-anchor:before{content:"\e013"}.mce-i-image:before{content:"\e014"}.mce-i-media:before{content:"\e015"}.mce-i-help:before{content:"\e016"}.mce-i-code:before{content:"\e017"}.mce-i-insertdatetime:before{content:"\e018"}.mce-i-preview:before{content:"\e019"}.mce-i-forecolor:before{content:"\e01a"}.mce-i-backcolor:before{content:"\e01a"}.mce-i-table:before{content:"\e01b"}.mce-i-hr:before{content:"\e01c"}.mce-i-removeformat:before{content:"\e01d"}.mce-i-subscript:before{content:"\e01e"}.mce-i-superscript:before{content:"\e01f"}.mce-i-charmap:before{content:"\e020"}.mce-i-emoticons:before{content:"\e021"}.mce-i-print:before{content:"\e022"}.mce-i-fullscreen:before{content:"\e023"}.mce-i-spellchecker:before{content:"\e024"}.mce-i-nonbreaking:before{content:"\e025"}.mce-i-template:before{content:"\e026"}.mce-i-pagebreak:before{content:"\e027"}.mce-i-restoredraft:before{content:"\e028"}.mce-i-bold:before{content:"\e02a"}.mce-i-italic:before{content:"\e02b"}.mce-i-underline:before{content:"\e02c"}.mce-i-strikethrough:before{content:"\e02d"}.mce-i-visualchars:before{content:"\e02e"}.mce-i-visualblocks:before{content:"\e02e"}.mce-i-ltr:before{content:"\e02f"}.mce-i-rtl:before{content:"\e030"}.mce-i-copy:before{content:"\e031"}.mce-i-resize:before{content:"\e032"}.mce-i-browse:before{content:"\e034"}.mce-i-pastetext:before{content:"\e035"}.mce-i-rotateleft:before{content:"\eaa8"}.mce-i-rotateright:before{content:"\eaa9"}.mce-i-crop:before{content:"\ee78"}.mce-i-editimage:before{content:"\e915"}.mce-i-options:before{content:"\ec6a"}.mce-i-flipv:before{content:"\eaaa"}.mce-i-fliph:before{content:"\eaac"}.mce-i-zoomin:before{content:"\eb35"}.mce-i-zoomout:before{content:"\eb36"}.mce-i-sun:before{content:"\eccc"}.mce-i-moon:before{content:"\eccd"}.mce-i-arrowleft:before{content:"\edc0"}.mce-i-arrowright:before{content:"\e93c"}.mce-i-drop:before{content:"\e935"}.mce-i-contrast:before{content:"\ecd4"}.mce-i-sharpen:before{content:"\eba7"}.mce-i-resize2:before{content:"\edf9"}.mce-i-orientation:before{content:"\e601"}.mce-i-invert:before{content:"\e602"}.mce-i-gamma:before{content:"\e600"}.mce-i-remove:before{content:"\ed6a"}.mce-i-tablerowprops:before{content:"\e604"}.mce-i-tablecellprops:before{content:"\e605"}.mce-i-table2:before{content:"\e606"}.mce-i-tablemergecells:before{content:"\e607"}.mce-i-tableinsertcolbefore:before{content:"\e608"}.mce-i-tableinsertcolafter:before{content:"\e609"}.mce-i-tableinsertrowbefore:before{content:"\e60a"}.mce-i-tableinsertrowafter:before{content:"\e60b"}.mce-i-tablesplitcells:before{content:"\e60d"}.mce-i-tabledelete:before{content:"\e60e"}.mce-i-tableleftheader:before{content:"\e62a"}.mce-i-tabletopheader:before{content:"\e62b"}.mce-i-tabledeleterow:before{content:"\e800"}.mce-i-tabledeletecol:before{content:"\e801"}.mce-i-codesample:before{content:"\e603"}.mce-i-fill:before{content:"\e902"}.mce-i-borderwidth:before{content:"\e903"}.mce-i-line:before{content:"\e904"}.mce-i-count:before{content:"\e905"}.mce-i-translate:before{content:"\e907"}.mce-i-drag:before{content:"\e908"}.mce-i-home:before{content:"\e90b"}.mce-i-upload:before{content:"\e914"}.mce-i-bubble:before{content:"\e91c"}.mce-i-user:before{content:"\e91d"}.mce-i-lock:before{content:"\e926"}.mce-i-unlock:before{content:"\e927"}.mce-i-settings:before{content:"\e928"}.mce-i-remove2:before{content:"\e92a"}.mce-i-menu:before{content:"\e92d"}.mce-i-warning:before{content:"\e930"}.mce-i-question:before{content:"\e931"}.mce-i-pluscircle:before{content:"\e932"}.mce-i-info:before{content:"\e933"}.mce-i-notice:before{content:"\e934"}.mce-i-arrowup:before{content:"\e93b"}.mce-i-arrowdown:before{content:"\e93d"}.mce-i-arrowup2:before{content:"\e93f"}.mce-i-arrowdown2:before{content:"\e940"}.mce-i-menu2:before{content:"\e941"}.mce-i-newtab:before{content:"\e961"}.mce-i-a11y:before{content:"\e900"}.mce-i-plus:before{content:"\e93a"}.mce-i-insert:before{content:"\e93a"}.mce-i-minus:before{content:"\e939"}.mce-i-books:before{content:"\e911"}.mce-i-reload:before{content:"\e906"}.mce-i-toc:before{content:"\e901"}.mce-i-checkmark:before{content:"\e033"}.mce-i-checkbox:before,.mce-i-selected:before{content:"\e033"}.mce-i-insert{font-size:14px}.mce-i-selected{visibility:hidden}i.mce-i-backcolor{text-shadow:none;background:#BBB}.mce-rtl .mce-filepicker input{direction:ltr}/*# sourceMappingURL=skin.min.css.map */ \ No newline at end of file +.mce-container,.mce-container *,.mce-widget,.mce-widget *,.mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:#595959;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;-webkit-tap-highlight-color:transparent;line-height:normal;font-weight:normal;text-align:left;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-widget button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.mce-container *[unselectable]{-moz-user-select:none;-webkit-user-select:none;-o-user-select:none;user-select:none}.word-wrap{word-wrap:break-word;-ms-word-break:break-all;word-break:break-all;word-break:break-word;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto}.mce-fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.mce-fade.mce-in{opacity:1}.mce-tinymce{visibility:inherit !important;position:relative}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%;z-index:100}div.mce-fullscreen{position:fixed;top:0;left:0;width:100%;height:auto}.mce-tinymce{display:block;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);box-shadow:0 1px 2px rgba(0, 0, 0, 0.2)}.mce-statusbar>.mce-container-body{display:flex;padding-right:16px}.mce-statusbar>.mce-container-body .mce-path{flex:1}.mce-wordcount{font-size:inherit;text-transform:uppercase;padding:8px 0}div.mce-edit-area{background:#FFF;filter:none}.mce-statusbar{position:relative}.mce-statusbar .mce-container-body{position:relative;font-size:11px}.mce-fullscreen .mce-resizehandle{display:none}.mce-statusbar .mce-flow-layout-item{margin:0}.mce-charmap{border-collapse:collapse}.mce-charmap td{cursor:default;border:1px solid #c5c5c5;width:20px;height:20px;line-height:20px;text-align:center;vertical-align:middle;padding:2px}.mce-charmap td div{text-align:center}.mce-charmap td:hover{background:white}.mce-grid td.mce-grid-cell div{border:1px solid #c5c5c5;width:15px;height:15px;margin:0;cursor:pointer}.mce-grid td.mce-grid-cell div:focus{border-color:#91bbe9}.mce-grid td.mce-grid-cell div[disabled]{cursor:not-allowed}.mce-grid{border-spacing:2px;border-collapse:separate}.mce-grid a{display:block;border:1px solid transparent}.mce-grid a:hover,.mce-grid a:focus{border-color:#91bbe9}.mce-grid-border{margin:0 4px 0 4px}.mce-grid-border a{border-color:#c5c5c5;width:13px;height:13px}.mce-grid-border a:hover,.mce-grid-border a.mce-active{border-color:#91bbe9;background:#bdd6f2}.mce-text-center{text-align:center}div.mce-tinymce-inline{width:100%}.mce-colorbtn-trans div{text-align:center;vertical-align:middle;font-weight:bold;font-size:20px;line-height:16px;color:#8b8b8b}.mce-monospace{font-family:"Courier New",Courier,monospace}.mce-toolbar-grp .mce-flow-layout-item{margin-bottom:0}.mce-container b{font-weight:bold}.mce-container p{margin-bottom:5px}.mce-container a{cursor:pointer;color:#2276d2}.mce-container a:hover{text-decoration:underline}.mce-container ul{margin-left:15px}.mce-container .mce-table-striped{border-collapse:collapse;margin:10px}.mce-container .mce-table-striped thead>tr{background-color:#fafafa}.mce-container .mce-table-striped thead>tr th{font-weight:bold}.mce-container .mce-table-striped td,.mce-container .mce-table-striped th{padding:5px}.mce-container .mce-table-striped tr:nth-child(even){background-color:#fafafa}.mce-container .mce-table-striped tbody>tr:hover{background-color:#e1e1e1}.mce-branding{font-size:inherit;text-transform:uppercase;white-space:pre;padding:8px 0}.mce-branding a{font-size:inherit;color:inherit}.mce-top-part{position:relative}.mce-top-part::before{content:'';position:absolute;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);top:0;right:0;bottom:0;left:0;pointer-events:none}.mce-rtl .mce-wordcount{left:0;right:auto}.mce-rtl .mce-statusbar>.mce-container-body>*:last-child{padding-right:0;padding-left:10px}.mce-rtl .mce-path{text-align:right;padding-right:16px}.mce-croprect-container{position:absolute;top:0;left:0}.mce-croprect-handle{position:absolute;top:0;left:0;width:20px;height:20px;border:2px solid white}.mce-croprect-handle-nw{border-width:2px 0 0 2px;margin:-2px 0 0 -2px;cursor:nw-resize;top:100px;left:100px}.mce-croprect-handle-ne{border-width:2px 2px 0 0;margin:-2px 0 0 -20px;cursor:ne-resize;top:100px;left:200px}.mce-croprect-handle-sw{border-width:0 0 2px 2px;margin:-20px 2px 0 -2px;cursor:sw-resize;top:200px;left:100px}.mce-croprect-handle-se{border-width:0 2px 2px 0;margin:-20px 0 0 -20px;cursor:se-resize;top:200px;left:200px}.mce-croprect-handle-move{position:absolute;cursor:move;border:0}.mce-croprect-block{opacity:.5;filter:alpha(opacity=50);zoom:1;position:absolute;background:black}.mce-croprect-handle:focus{border-color:#2276d2}.mce-croprect-handle-move:focus{outline:1px solid #2276d2}.mce-imagepanel{overflow:auto;background:black}.mce-imagepanel-bg{position:absolute;background:url('data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==')}.mce-imagepanel img{position:absolute}.mce-imagetool.mce-btn .mce-ico{display:block;width:20px;height:20px;text-align:center;line-height:20px;font-size:20px;padding:5px}.mce-arrow-up{margin-top:12px}.mce-arrow-down{margin-top:-12px}.mce-arrow:before,.mce-arrow:after{position:absolute;left:50%;display:block;width:0;height:0;border-style:solid;border-color:transparent;content:""}.mce-arrow.mce-arrow-up:before{top:-9px;border-bottom-color:#c5c5c5;border-width:0 9px 9px;margin-left:-9px}.mce-arrow.mce-arrow-down:before{bottom:-9px;border-top-color:#c5c5c5;border-width:9px 9px 0;margin-left:-9px}.mce-arrow.mce-arrow-up:after{top:-8px;border-bottom-color:#fff;border-width:0 8px 8px;margin-left:-8px}.mce-arrow.mce-arrow-down:after{bottom:-8px;border-top-color:#fff;border-width:8px 8px 0;margin-left:-8px}.mce-arrow.mce-arrow-left:before,.mce-arrow.mce-arrow-left:after{margin:0}.mce-arrow.mce-arrow-left:before{left:8px}.mce-arrow.mce-arrow-left:after{left:9px}.mce-arrow.mce-arrow-right:before,.mce-arrow.mce-arrow-right:after{left:auto;margin:0}.mce-arrow.mce-arrow-right:before{right:8px}.mce-arrow.mce-arrow-right:after{right:9px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-left:before{left:-9px;top:50%;border-right-color:#c5c5c5;border-width:9px 9px 9px 0;margin-top:-9px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-left:after{left:-8px;top:50%;border-right-color:#fff;border-width:8px 8px 8px 0;margin-top:-8px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-left{margin-left:12px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-right:before{right:-9px;top:50%;border-left-color:#c5c5c5;border-width:9px 0 9px 9px;margin-top:-9px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-right:after{right:-8px;top:50%;border-left-color:#fff;border-width:8px 0 8px 8px;margin-top:-8px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-right{margin-left:-14px}.mce-edit-aria-container>.mce-container-body{display:flex}.mce-edit-aria-container>.mce-container-body .mce-edit-area{flex:1}.mce-edit-aria-container>.mce-container-body .mce-sidebar>.mce-container-body{display:flex;align-items:stretch;height:100%}.mce-edit-aria-container>.mce-container-body .mce-sidebar-panel{min-width:250px;max-width:250px;position:relative}.mce-edit-aria-container>.mce-container-body .mce-sidebar-panel>.mce-container-body{position:absolute;width:100%;height:100%;overflow:auto;top:0;left:0}.mce-sidebar-toolbar{border:0 solid #c5c5c5;border-left-width:1px}.mce-sidebar-toolbar .mce-btn{border-left:0;border-right:0}.mce-sidebar-toolbar .mce-btn.mce-active,.mce-sidebar-toolbar .mce-btn.mce-active:hover{background-color:#555c66}.mce-sidebar-toolbar .mce-btn.mce-active button,.mce-sidebar-toolbar .mce-btn.mce-active:hover button,.mce-sidebar-toolbar .mce-btn.mce-active button i,.mce-sidebar-toolbar .mce-btn.mce-active:hover button i{color:white;text-shadow:1px 1px none}.mce-sidebar-panel{border:0 solid #c5c5c5;border-left-width:1px}.mce-container,.mce-container-body{display:block}.mce-autoscroll{overflow:hidden}.mce-scrollbar{position:absolute;width:7px;height:100%;top:2px;right:2px;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-scrollbar-h{top:auto;right:auto;left:2px;bottom:2px;width:100%;height:7px}.mce-scrollbar-thumb{position:absolute;background-color:#000;border:1px solid #888;border-color:rgba(85,85,85,0.6);width:5px;height:100%}.mce-scrollbar-h .mce-scrollbar-thumb{width:100%;height:5px}.mce-scrollbar:hover,.mce-scrollbar.mce-active{background-color:#AAA;opacity:.6;filter:alpha(opacity=60);zoom:1}.mce-scroll{position:relative}.mce-panel{border:0 solid #f3f3f3;border:0 solid #c5c5c5;background-color:#fff}.mce-floatpanel{position:absolute;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);box-shadow:0 1px 2px rgba(0, 0, 0, 0.2)}.mce-floatpanel.mce-fixed{position:fixed}.mce-floatpanel .mce-arrow,.mce-floatpanel .mce-arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.mce-floatpanel .mce-arrow{border-width:11px}.mce-floatpanel .mce-arrow:after{border-width:10px;content:""}.mce-floatpanel.mce-popover{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);top:0;left:0;background:#FFF;border:1px solid #c5c5c5;border:1px solid rgba(0,0,0,0.25)}.mce-floatpanel.mce-popover.mce-bottom{margin-top:10px;*margin-top:0}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#c5c5c5;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#FFF}.mce-floatpanel.mce-popover.mce-top{margin-top:-10px;*margin-top:0}.mce-floatpanel.mce-popover.mce-top>.mce-arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#c5c5c5;top:auto;bottom:-11px}.mce-floatpanel.mce-popover.mce-top>.mce-arrow:after{bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#FFF}.mce-floatpanel.mce-popover.mce-bottom.mce-start,.mce-floatpanel.mce-popover.mce-top.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow,.mce-floatpanel.mce-popover.mce-top.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end,.mce-floatpanel.mce-popover.mce-top.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow,.mce-floatpanel.mce-popover.mce-top.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#FFF}#mce-modal-block.mce-in{opacity:.5;filter:alpha(opacity=50);zoom:1}.mce-window-move{cursor:move}.mce-window{-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#FFF;position:fixed;top:0;left:0;opacity:0;transform:scale(.1);transition:transform 100ms ease-in,opacity 150ms ease-in}.mce-window.mce-in{transform:scale(1);opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #c5c5c5;position:relative}.mce-window-head .mce-close{position:absolute;right:0;top:0;height:38px;width:38px;text-align:center;cursor:pointer}.mce-window-head .mce-close i{color:#9b9b9b}.mce-close:hover i{color:#bdbdbd}.mce-window-head .mce-title{line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:20px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:#FFF;border-top:1px solid #c5c5c5}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window-body .mce-listbox{border-color:#e2e4e7}.mce-window .mce-btn:hover{border-color:#c5c5c5}.mce-window .mce-btn:focus{border-color:#2276d2}.mce-window-body .mce-btn,.mce-foot .mce-btn{border-color:#c5c5c5}.mce-foot .mce-btn.mce-primary{border-color:transparent}.mce-rtl .mce-window-head .mce-close{position:absolute;right:auto;left:0}.mce-rtl .mce-window-head .mce-dragh{left:auto;right:0}.mce-rtl .mce-window-head .mce-title{direction:rtl;text-align:right;padding-right:0;padding-left:20px}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1;margin-top:1px}.mce-tooltip-inner{font-size:11px;background-color:#000;color:white;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-inner{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-ne,.mce-tooltip-se{margin-left:14px}.mce-tooltip-n .mce-tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}.mce-progress{display:inline-block;position:relative;height:20px}.mce-progress .mce-bar-container{display:inline-block;width:100px;height:100%;margin-right:8px;border:1px solid #ccc;overflow:hidden}.mce-progress .mce-text{display:inline-block;margin-top:auto;margin-bottom:auto;font-size:14px;width:40px;color:#595959}.mce-bar{display:block;width:0;height:100%;background-color:#dfdfdf;-webkit-transition:width .2s ease;transition:width .2s ease}.mce-notification{position:absolute;background-color:#fff;padding:5px;margin-top:5px;border-width:1px;border-style:solid;border-color:#c5c5c5;transition:transform 100ms ease-in,opacity 150ms ease-in;opacity:0;box-sizing:border-box}.mce-notification.mce-in{opacity:1}.mce-notification-success{background-color:#dff0d8;border-color:#d6e9c6}.mce-notification-info{background-color:#d9edf7;border-color:#779ECB}.mce-notification-warning{background-color:#fcf8e3;border-color:#faebcc}.mce-notification-error{background-color:#f2dede;border-color:#ebccd1}.mce-notification.mce-has-close{padding-right:15px}.mce-notification .mce-ico{margin-top:5px}.mce-notification-inner{word-wrap:break-word;-ms-word-break:break-all;word-break:break-all;word-break:break-word;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto;display:inline-block;font-size:14px;margin:5px 8px 4px 8px;text-align:center;white-space:normal;color:#31708f}.mce-notification-inner a{text-decoration:underline;cursor:pointer}.mce-notification .mce-progress{margin-right:8px}.mce-notification .mce-progress .mce-text{margin-top:5px}.mce-notification *,.mce-notification .mce-progress .mce-text{color:#595959}.mce-notification .mce-progress .mce-bar-container{border-color:#c5c5c5}.mce-notification .mce-progress .mce-bar-container .mce-bar{background-color:#595959}.mce-notification-success *,.mce-notification-success .mce-progress .mce-text{color:#3c763d}.mce-notification-success .mce-progress .mce-bar-container{border-color:#d6e9c6}.mce-notification-success .mce-progress .mce-bar-container .mce-bar{background-color:#3c763d}.mce-notification-info *,.mce-notification-info .mce-progress .mce-text{color:#31708f}.mce-notification-info .mce-progress .mce-bar-container{border-color:#779ECB}.mce-notification-info .mce-progress .mce-bar-container .mce-bar{background-color:#31708f}.mce-notification-warning *,.mce-notification-warning .mce-progress .mce-text{color:#8a6d3b}.mce-notification-warning .mce-progress .mce-bar-container{border-color:#faebcc}.mce-notification-warning .mce-progress .mce-bar-container .mce-bar{background-color:#8a6d3b}.mce-notification-error *,.mce-notification-error .mce-progress .mce-text{color:#a94442}.mce-notification-error .mce-progress .mce-bar-container{border-color:#ebccd1}.mce-notification-error .mce-progress .mce-bar-container .mce-bar{background-color:#a94442}.mce-notification .mce-close{position:absolute;top:6px;right:8px;font-size:20px;font-weight:bold;line-height:20px;color:#9b9b9b;cursor:pointer}.mce-abs-layout{position:relative}html .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-btn{border:1px solid #b3b3b3;border-color:transparent transparent transparent transparent;position:relative;text-shadow:0 1px 1px rgba(255,255,255,0.75);background:white;display:inline-block;*display:inline;*zoom:1;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-btn:hover,.mce-btn:active{background:white;color:#595959;border-color:#e2e4e7}.mce-btn:focus{background:white;color:#595959;border-color:#e2e4e7}.mce-btn.mce-disabled button,.mce-btn.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover,.mce-btn.mce-active:focus,.mce-btn.mce-active:active{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;background:#555c66;color:white;border-color:transparent}.mce-btn.mce-active button,.mce-btn.mce-active:hover button,.mce-btn.mce-active i,.mce-btn.mce-active:hover i{color:white}.mce-btn:hover .mce-caret{border-top-color:#b5bcc2}.mce-btn.mce-active .mce-caret,.mce-btn.mce-active:hover .mce-caret{border-top-color:white}.mce-btn button{padding:4px 6px;font-size:14px;line-height:20px;*line-height:16px;cursor:pointer;color:#595959;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px none}.mce-primary.mce-btn-has-text{min-width:50px}.mce-primary{color:white;border:1px solid transparent;border-color:transparent;background-color:#2276d2}.mce-primary:hover,.mce-primary:focus{background-color:#1e6abc;border-color:transparent}.mce-primary.mce-disabled button,.mce-primary.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-primary.mce-active,.mce-primary.mce-active:hover,.mce-primary:not(.mce-disabled):active{background-color:#1e6abc;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-primary button,.mce-primary button i{color:white;text-shadow:1px 1px none}.mce-btn .mce-txt{font-size:inherit;line-height:inherit;color:inherit}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:1px 5px;font-size:12px;*padding-bottom:2px}.mce-btn-small i{line-height:20px;vertical-align:top;*line-height:18px}.mce-btn .mce-caret{margin-top:8px;margin-left:0}.mce-btn-small .mce-caret{margin-top:8px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:0;height:0;vertical-align:top;border-top:4px solid #b5bcc2;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#aaa}.mce-caret.mce-up{border-bottom:4px solid #b5bcc2;border-top:0}.mce-btn-flat{border:0;background:transparent;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:none}.mce-btn-flat:hover,.mce-btn-flat.mce-active,.mce-btn-flat:focus,.mce-btn-flat:active{border:0;background:#e6e6e6;filter:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-btn-has-text .mce-ico{padding-right:5px}.mce-rtl .mce-btn button{direction:rtl}.mce-toolbar .mce-btn-group{margin:0;padding:2px 0}.mce-btn-group .mce-btn{border-width:1px;margin:0;margin-left:2px}.mce-btn-group:not(:first-child){border-left:1px solid #d9d9d9;padding-left:0;margin-left:2px}.mce-btn-group{margin-left:2px}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-rtl .mce-btn-group .mce-btn{margin-left:0;margin-right:2px}.mce-rtl .mce-btn-group .mce-first{margin-right:0}.mce-rtl .mce-btn-group:not(:first-child){border-left:none;border-right:1px solid #d9d9d9;padding-right:4px;margin-right:4px}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;background-color:white;text-indent:-10em;overflow:hidden}.mce-checked i.mce-i-checkbox{color:#595959;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox,.mce-checkbox.mce-focus i.mce-i-checkbox{border:1px solid #2276d2;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-checkbox.mce-disabled .mce-label,.mce-checkbox.mce-disabled i.mce-i-checkbox{color:#bdbdbd}.mce-checkbox .mce-label{vertical-align:middle}.mce-rtl .mce-checkbox{direction:rtl;text-align:right}.mce-rtl i.mce-i-checkbox{margin:0 0 0 3px}.mce-combobox{position:relative;display:inline-block;*display:inline;*zoom:1;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;*height:32px}.mce-combobox input{border:1px solid #c5c5c5;border-right-color:#c5c5c5;height:28px}.mce-combobox.mce-disabled input{color:#bdbdbd}.mce-combobox .mce-btn{border:1px solid #c5c5c5;border-left:0;margin:0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox.mce-disabled .mce-btn button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-combobox .mce-status{position:absolute;right:2px;top:50%;line-height:16px;margin-top:-8px;font-size:12px;width:15px;height:15px;text-align:center;cursor:pointer}.mce-combobox.mce-has-status input{padding-right:20px}.mce-combobox.mce-has-open .mce-status{right:37px}.mce-combobox .mce-status.mce-i-warning{color:#c09853}.mce-combobox .mce-status.mce-i-checkmark{color:#468847}.mce-menu.mce-combobox-menu{border-top:0;margin-top:0;max-height:200px}.mce-menu.mce-combobox-menu .mce-menu-item{padding:4px 6px 4px 4px;font-size:11px}.mce-menu.mce-combobox-menu .mce-menu-item-sep{padding:0}.mce-menu.mce-combobox-menu .mce-text,.mce-menu.mce-combobox-menu .mce-text b{font-size:11px}.mce-menu.mce-combobox-menu .mce-menu-item-link,.mce-menu.mce-combobox-menu .mce-menu-item-link b{font-size:11px}.mce-colorbox i{border:1px solid #c5c5c5;width:14px;height:14px}.mce-colorbutton .mce-ico{position:relative}.mce-colorbutton-grid{margin:4px}.mce-colorbutton .mce-preview{padding-right:3px;display:block;position:absolute;left:50%;top:50%;margin-left:-17px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-16px;padding-right:0;width:16px}.mce-rtl .mce-colorbutton{direction:rtl}.mce-rtl .mce-colorbutton .mce-preview{margin-left:0;padding-right:0;padding-left:3px}.mce-rtl .mce-colorbutton.mce-btn-small .mce-preview{margin-left:0;padding-right:0;padding-left:2px}.mce-rtl .mce-colorbutton .mce-open{padding-left:4px;padding-right:4px;border-left:0}.mce-colorpicker{position:relative;width:250px;height:220px}.mce-colorpicker-sv{position:absolute;top:0;left:0;width:90%;height:100%;border:1px solid #c5c5c5;cursor:crosshair;overflow:hidden}.mce-colorpicker-h-chunk{width:100%}.mce-colorpicker-overlay1,.mce-colorpicker-overlay2{width:100%;height:100%;position:absolute;top:0;left:0}.mce-colorpicker-overlay1{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr='#ffffff', endColorstr='#00ffffff');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=1,startColorstr='#ffffff', endColorstr='#00ffffff')";background:linear-gradient(to right, #fff, rgba(255,255,255,0))}.mce-colorpicker-overlay2{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#00000000', endColorstr='#000000');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#00000000', endColorstr='#000000')";background:linear-gradient(to bottom, rgba(0,0,0,0), #000)}.mce-colorpicker-selector1{background:none;position:absolute;width:12px;height:12px;margin:-8px 0 0 -8px;border:1px solid black;border-radius:50%}.mce-colorpicker-selector2{position:absolute;width:10px;height:10px;border:1px solid white;border-radius:50%}.mce-colorpicker-h{position:absolute;top:0;right:0;width:6.5%;height:100%;border:1px solid #c5c5c5;cursor:crosshair}.mce-colorpicker-h-marker{margin-top:-4px;position:absolute;top:0;left:-1px;width:100%;border:1px solid black;background:white;height:4px;z-index:100}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal;font-size:inherit}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#595959;font-size:inherit;text-transform:uppercase}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:#555c66;color:white}.mce-path .mce-divider{display:inline;font-size:inherit}.mce-disabled .mce-path-item{color:#aaa}.mce-rtl .mce-path{direction:rtl}.mce-fieldset{border:0 solid #9E9E9E}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-tinymce-inline .mce-flow-layout{white-space:nowrap}.mce-rtl .mce-flow-layout{text-align:right;direction:rtl}.mce-rtl .mce-flow-layout-item{margin:2px 2px 2px 0}.mce-rtl .mce-flow-layout-item.mce-last{margin-left:2px}.mce-iframe{border:0 solid #c5c5c5;width:100%;height:100%}.mce-infobox{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden;border:1px solid red}.mce-infobox div{display:block;margin:5px}.mce-infobox div button{position:absolute;top:50%;right:4px;cursor:pointer;margin-top:-8px;display:none}.mce-infobox div button:focus{outline:2px solid #e2e4e7}.mce-infobox.mce-has-help div{margin-right:25px}.mce-infobox.mce-has-help button{display:block}.mce-infobox.mce-success{background:#dff0d8;border-color:#d6e9c6}.mce-infobox.mce-success div{color:#3c763d}.mce-infobox.mce-warning{background:#fcf8e3;border-color:#faebcc}.mce-infobox.mce-warning div{color:#8a6d3b}.mce-infobox.mce-error{background:#f2dede;border-color:#ebccd1}.mce-infobox.mce-error div{color:#a94442}.mce-rtl .mce-infobox div{text-align:right;direction:rtl}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label.mce-disabled{color:#aaa}.mce-label.mce-multiline{white-space:pre-wrap}.mce-label.mce-success{color:#468847}.mce-label.mce-warning{color:#c09853}.mce-label.mce-error{color:#b94a48}.mce-rtl .mce-label{text-align:right;direction:rtl}.mce-menubar{border:1px solid #e2e4e7}.mce-menubar .mce-menubtn{border-color:transparent;background:transparent;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:none}.mce-menubar .mce-menubtn button span{color:#595959}.mce-menubar .mce-caret{border-top-color:#b5bcc2}.mce-menubar .mce-active .mce-caret,.mce-menubar .mce-menubtn:hover .mce-caret{border-top-color:#b5bcc2}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:#e2e4e7;background:white;filter:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-menubar .mce-menubtn.mce-active{border-bottom:none;z-index:65537}div.mce-menubtn.mce-opened{border-bottom-color:white;z-index:65537}.mce-menubtn button{color:#595959}.mce-menubtn.mce-btn-small span{font-size:12px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-menubtn .mce-caret{*margin-top:6px}.mce-rtl .mce-menubtn button{direction:rtl;text-align:right}.mce-rtl .mce-menubtn.mce-fixed-width span{direction:rtl;text-align:right}.mce-menu-item{display:block;padding:6px 4px 6px 4px;clear:both;font-weight:normal;line-height:20px;color:#595959;white-space:nowrap;cursor:pointer;line-height:normal;border-left:4px solid transparent;margin-bottom:1px}.mce-menu-item .mce-text,.mce-menu-item .mce-text b{line-height:1;vertical-align:initial}.mce-menu-item .mce-caret{margin-top:4px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #595959}.mce-menu-item .mce-menu-shortcut{display:inline-block;padding:0 10px 0 20px;color:#aaa}.mce-menu-item .mce-ico{padding-right:4px}.mce-menu-item:hover,.mce-menu-item:focus{background:#ededee}.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item:focus .mce-menu-shortcut{color:#aaa}.mce-menu-item:hover .mce-text,.mce-menu-item:focus .mce-text,.mce-menu-item:hover .mce-ico,.mce-menu-item:focus .mce-ico{color:#595959}.mce-menu-item.mce-selected{background:#ededee}.mce-menu-item.mce-selected .mce-text,.mce-menu-item.mce-selected .mce-ico{color:#595959}.mce-menu-item.mce-active.mce-menu-item-normal{background:#555c66}.mce-menu-item.mce-active.mce-menu-item-normal .mce-text,.mce-menu-item.mce-active.mce-menu-item-normal .mce-ico{color:white}.mce-menu-item.mce-active.mce-menu-item-checkbox .mce-ico{visibility:visible}.mce-menu-item.mce-disabled,.mce-menu-item.mce-disabled:hover{background:white}.mce-menu-item.mce-disabled:focus,.mce-menu-item.mce-disabled:hover:focus{background:#ededee}.mce-menu-item.mce-disabled .mce-text,.mce-menu-item.mce-disabled:hover .mce-text,.mce-menu-item.mce-disabled .mce-ico,.mce-menu-item.mce-disabled:hover .mce-ico{color:#aaa}.mce-menu-item.mce-menu-item-preview.mce-active{border-left:5px solid #555c66;background:white}.mce-menu-item.mce-menu-item-preview.mce-active .mce-text,.mce-menu-item.mce-menu-item-preview.mce-active .mce-ico{color:#595959}.mce-menu-item.mce-menu-item-preview.mce-active:hover{background:#ededee}.mce-menu-item-link{color:#093;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mce-menu-item-link b{color:#093}.mce-menu-item-ellipsis{display:block;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.mce-menu-item:hover *,.mce-menu-item.mce-selected *,.mce-menu-item:focus *{color:#595959}div.mce-menu .mce-menu-item-sep,.mce-menu-item-sep:hover{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:transparent;border-bottom:1px solid rgba(0,0,0,0.1);cursor:default;filter:none}div.mce-menu .mce-menu-item b{font-weight:bold}.mce-menu-item-indent-1{padding-left:20px}.mce-menu-item-indent-2{padding-left:35px}.mce-menu-item-indent-2{padding-left:35px}.mce-menu-item-indent-3{padding-left:40px}.mce-menu-item-indent-4{padding-left:45px}.mce-menu-item-indent-5{padding-left:50px}.mce-menu-item-indent-6{padding-left:55px}.mce-menu.mce-rtl{direction:rtl}.mce-rtl .mce-menu-item{text-align:right;direction:rtl;padding:6px 12px 6px 15px}.mce-rtl .mce-menu-item .mce-caret{margin-left:6px;margin-right:0;border-right:4px solid #595959;border-left:0}.mce-rtl .mce-menu-item.mce-selected .mce-caret,.mce-rtl .mce-menu-item:focus .mce-caret,.mce-rtl .mce-menu-item:hover .mce-caret{border-left-color:transparent;border-right-color:#595959}.mce-rtl .mce-menu-item .mce-ico{padding-right:0;padding-left:4px}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}.mce-throbber-inline{position:static;height:50px}.mce-menu .mce-throbber-inline{height:25px;background-size:contain}.mce-menu{position:absolute;left:0;top:0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:-1px 0 0;min-width:180px;background:white;border:1px solid #c5c9cf;border:1px solid #e2e4e7;z-index:1002;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);max-height:500px;overflow:auto;overflow-x:hidden}.mce-menu.mce-animate{opacity:.01;transform:rotateY(10deg) rotateX(-10deg);transform-origin:left top}.mce-menu.mce-menu-align .mce-menu-shortcut,.mce-menu.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block}.mce-menu.mce-in.mce-animate{opacity:1;transform:rotateY(0) rotateX(0);transition:opacity .075s ease,transform .1s ease}.mce-menu-sub-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}.mce-rtl .mce-menu-item .mce-ico{padding-right:0;padding-left:4px}.mce-rtl.mce-menu-align .mce-caret,.mce-rtl .mce-menu-shortcut{right:auto;left:0}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-rtl .mce-listbox .mce-caret{right:auto;left:8px}.mce-rtl .mce-listbox button{padding-right:10px;padding-left:20px}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#595959}.mce-selectbox{background:#fff;border:1px solid #c5c5c5}.mce-slider{border:1px solid #c5c5c5;background:#fff;width:100px;height:10px;position:relative;display:block}.mce-slider.mce-vertical{width:10px;height:100px}.mce-slider-handle{border:1px solid #c5c5c5;background:#e6e6e6;display:block;width:13px;height:13px;position:absolute;top:0;left:0;margin-left:-1px;margin-top:-2px}.mce-slider-handle:focus{border-color:#2276d2}.mce-spacer{visibility:hidden}.mce-splitbtn:hover .mce-open{border-left:1px solid #e2e4e7}.mce-splitbtn .mce-open{border-left:1px solid transparent;padding-right:4px;padding-left:4px}.mce-splitbtn .mce-open:focus{border-left:1px solid #e2e4e7}.mce-splitbtn .mce-open:hover,.mce-splitbtn .mce-open:active{border-left:1px solid #e2e4e7}.mce-splitbtn.mce-active:hover .mce-open{border-left:1px solid white}.mce-splitbtn.mce-opened{border-color:#e2e4e7}.mce-splitbtn.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-splitbtn{direction:rtl;text-align:right}.mce-rtl .mce-splitbtn button{padding-right:4px;padding-left:4px}.mce-rtl .mce-splitbtn .mce-open{border-left:0}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #c5c5c5}.mce-tabs,.mce-tabs+.mce-container-body{background:#fff}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #c5c5c5;border-width:0 1px 0 0;background:#fff;padding:8px 15px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#FDFDFD}.mce-tab.mce-active{background:#FDFDFD;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-tab:focus{color:#2276d2}.mce-rtl .mce-tabs{text-align:right;direction:rtl}.mce-rtl .mce-tab{border-width:0 0 0 1px}.mce-textbox{background:#fff;border:1px solid #c5c5c5;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;display:inline-block;-webkit-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#595959}.mce-textbox:focus,.mce-textbox.mce-focus{border-color:#2276d2;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px;height:auto}.mce-textbox.mce-disabled{color:#bdbdbd}.mce-rtl .mce-textbox{text-align:right;direction:rtl}.mce-dropzone{border:3px dashed gray;text-align:center}.mce-dropzone span{text-transform:uppercase;display:inline-block;vertical-align:middle}.mce-dropzone:after{content:"";height:100%;display:inline-block;vertical-align:middle}.mce-dropzone.mce-disabled{opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-dropzone.mce-disabled.mce-dragenter{cursor:not-allowed}.mce-browsebutton{position:relative;overflow:hidden}.mce-browsebutton button{position:relative;z-index:1}.mce-browsebutton input{opacity:0;filter:alpha(opacity=0);zoom:1;position:absolute;top:0;left:0;width:100%;height:100%;z-index:0}@font-face{font-family:'tinymce';src:url('fonts/tinymce.eot');src:url('fonts/tinymce.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce.woff') format('woff'),url('fonts/tinymce.ttf') format('truetype'),url('fonts/tinymce.svg#tinymce') format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'tinymce-small';src:url('fonts/tinymce-small.eot');src:url('fonts/tinymce-small.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce-small.woff') format('woff'),url('fonts/tinymce-small.ttf') format('truetype'),url('fonts/tinymce-small.svg#tinymce') format('svg');font-weight:normal;font-style:normal}.mce-ico{font-family:'tinymce',Arial;font-style:normal;font-weight:normal;font-variant:normal;font-size:16px;line-height:16px;speak:none;vertical-align:text-top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;background:transparent center center;background-size:cover;width:16px;height:16px;color:#595959}.mce-btn-small .mce-ico{font-family:'tinymce-small',Arial}.mce-i-save:before{content:"\e000"}.mce-i-newdocument:before{content:"\e001"}.mce-i-fullpage:before{content:"\e002"}.mce-i-alignleft:before{content:"\e003"}.mce-i-aligncenter:before{content:"\e004"}.mce-i-alignright:before{content:"\e005"}.mce-i-alignjustify:before{content:"\e006"}.mce-i-alignnone:before{content:"\e003"}.mce-i-cut:before{content:"\e007"}.mce-i-paste:before{content:"\e008"}.mce-i-searchreplace:before{content:"\e009"}.mce-i-bullist:before{content:"\e00a"}.mce-i-numlist:before{content:"\e00b"}.mce-i-indent:before{content:"\e00c"}.mce-i-outdent:before{content:"\e00d"}.mce-i-blockquote:before{content:"\e00e"}.mce-i-undo:before{content:"\e00f"}.mce-i-redo:before{content:"\e010"}.mce-i-link:before{content:"\e011"}.mce-i-unlink:before{content:"\e012"}.mce-i-anchor:before{content:"\e013"}.mce-i-image:before{content:"\e014"}.mce-i-media:before{content:"\e015"}.mce-i-help:before{content:"\e016"}.mce-i-code:before{content:"\e017"}.mce-i-insertdatetime:before{content:"\e018"}.mce-i-preview:before{content:"\e019"}.mce-i-forecolor:before{content:"\e01a"}.mce-i-backcolor:before{content:"\e01a"}.mce-i-table:before{content:"\e01b"}.mce-i-hr:before{content:"\e01c"}.mce-i-removeformat:before{content:"\e01d"}.mce-i-subscript:before{content:"\e01e"}.mce-i-superscript:before{content:"\e01f"}.mce-i-charmap:before{content:"\e020"}.mce-i-emoticons:before{content:"\e021"}.mce-i-print:before{content:"\e022"}.mce-i-fullscreen:before{content:"\e023"}.mce-i-spellchecker:before{content:"\e024"}.mce-i-nonbreaking:before{content:"\e025"}.mce-i-template:before{content:"\e026"}.mce-i-pagebreak:before{content:"\e027"}.mce-i-restoredraft:before{content:"\e028"}.mce-i-bold:before{content:"\e02a"}.mce-i-italic:before{content:"\e02b"}.mce-i-underline:before{content:"\e02c"}.mce-i-strikethrough:before{content:"\e02d"}.mce-i-visualchars:before{content:"\e02e"}.mce-i-visualblocks:before{content:"\e02e"}.mce-i-ltr:before{content:"\e02f"}.mce-i-rtl:before{content:"\e030"}.mce-i-copy:before{content:"\e031"}.mce-i-resize:before{content:"\e032"}.mce-i-browse:before{content:"\e034"}.mce-i-pastetext:before{content:"\e035"}.mce-i-rotateleft:before{content:"\eaa8"}.mce-i-rotateright:before{content:"\eaa9"}.mce-i-crop:before{content:"\ee78"}.mce-i-editimage:before{content:"\e915"}.mce-i-options:before{content:"\ec6a"}.mce-i-flipv:before{content:"\eaaa"}.mce-i-fliph:before{content:"\eaac"}.mce-i-zoomin:before{content:"\eb35"}.mce-i-zoomout:before{content:"\eb36"}.mce-i-sun:before{content:"\eccc"}.mce-i-moon:before{content:"\eccd"}.mce-i-arrowleft:before{content:"\edc0"}.mce-i-arrowright:before{content:"\e93c"}.mce-i-drop:before{content:"\e935"}.mce-i-contrast:before{content:"\ecd4"}.mce-i-sharpen:before{content:"\eba7"}.mce-i-resize2:before{content:"\edf9"}.mce-i-orientation:before{content:"\e601"}.mce-i-invert:before{content:"\e602"}.mce-i-gamma:before{content:"\e600"}.mce-i-remove:before{content:"\ed6a"}.mce-i-tablerowprops:before{content:"\e604"}.mce-i-tablecellprops:before{content:"\e605"}.mce-i-table2:before{content:"\e606"}.mce-i-tablemergecells:before{content:"\e607"}.mce-i-tableinsertcolbefore:before{content:"\e608"}.mce-i-tableinsertcolafter:before{content:"\e609"}.mce-i-tableinsertrowbefore:before{content:"\e60a"}.mce-i-tableinsertrowafter:before{content:"\e60b"}.mce-i-tablesplitcells:before{content:"\e60d"}.mce-i-tabledelete:before{content:"\e60e"}.mce-i-tableleftheader:before{content:"\e62a"}.mce-i-tabletopheader:before{content:"\e62b"}.mce-i-tabledeleterow:before{content:"\e800"}.mce-i-tabledeletecol:before{content:"\e801"}.mce-i-codesample:before{content:"\e603"}.mce-i-fill:before{content:"\e902"}.mce-i-borderwidth:before{content:"\e903"}.mce-i-line:before{content:"\e904"}.mce-i-count:before{content:"\e905"}.mce-i-translate:before{content:"\e907"}.mce-i-drag:before{content:"\e908"}.mce-i-home:before{content:"\e90b"}.mce-i-upload:before{content:"\e914"}.mce-i-bubble:before{content:"\e91c"}.mce-i-user:before{content:"\e91d"}.mce-i-lock:before{content:"\e926"}.mce-i-unlock:before{content:"\e927"}.mce-i-settings:before{content:"\e928"}.mce-i-remove2:before{content:"\e92a"}.mce-i-menu:before{content:"\e92d"}.mce-i-warning:before{content:"\e930"}.mce-i-question:before{content:"\e931"}.mce-i-pluscircle:before{content:"\e932"}.mce-i-info:before{content:"\e933"}.mce-i-notice:before{content:"\e934"}.mce-i-arrowup:before{content:"\e93b"}.mce-i-arrowdown:before{content:"\e93d"}.mce-i-arrowup2:before{content:"\e93f"}.mce-i-arrowdown2:before{content:"\e940"}.mce-i-menu2:before{content:"\e941"}.mce-i-newtab:before{content:"\e961"}.mce-i-a11y:before{content:"\e900"}.mce-i-plus:before{content:"\e93a"}.mce-i-insert:before{content:"\e93a"}.mce-i-minus:before{content:"\e939"}.mce-i-books:before{content:"\e911"}.mce-i-reload:before{content:"\e906"}.mce-i-toc:before{content:"\e901"}.mce-i-checkmark:before{content:"\e033"}.mce-i-checkbox:before,.mce-i-selected:before{content:"\e033"}.mce-i-insert{font-size:14px}.mce-i-selected{visibility:hidden}i.mce-i-backcolor{text-shadow:none;background:#BBB}.mce-rtl .mce-filepicker input{direction:ltr} From 91f1b57473d5afb5a789ea86a1b4b62ba47abfc6 Mon Sep 17 00:00:00 2001 From: Gary Pendergast Date: Mon, 22 Oct 2018 06:12:55 +0000 Subject: [PATCH 493/537] Script/Style Dependencies: Make sure that inline scripts for handles without a source are printed. See [36550] for `WP_Styles`. Merges [43565] to the 5.0 branch. Props bpayton. Fixes #44551. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43788 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/class.wp-scripts.php | 16 +++++++- tests/phpunit/tests/dependencies/scripts.php | 41 ++++++++++++++++++++ 2 files changed, 56 insertions(+), 1 deletion(-) diff --git a/src/wp-includes/class.wp-scripts.php b/src/wp-includes/class.wp-scripts.php index a9299f0b91802..6b29c81c39074 100644 --- a/src/wp-includes/class.wp-scripts.php +++ b/src/wp-includes/class.wp-scripts.php @@ -266,6 +266,12 @@ public function do_item( $handle, $group = false ) { $after_handle = sprintf( "\n", $after_handle ); } + if ( $before_handle || $after_handle ) { + $inline_script_tag = "{$cond_before}{$before_handle}{$after_handle}{$cond_after}"; + } else { + $inline_script_tag = ''; + } + if ( $this->do_concat ) { /** * Filters the script loader source. @@ -307,7 +313,15 @@ public function do_item( $handle, $group = false ) { } // A single item may alias a set of items, by having dependencies, but no source. - if ( ! $obj->src ) { + if ( ! $src ) { + if ( $inline_script_tag ) { + if ( $this->do_concat ) { + $this->print_html .= $inline_script_tag; + } else { + echo $inline_script_tag; + } + } + return true; } diff --git a/tests/phpunit/tests/dependencies/scripts.php b/tests/phpunit/tests/dependencies/scripts.php index 05cb723d17eab..6dfc1ee1cace9 100644 --- a/tests/phpunit/tests/dependencies/scripts.php +++ b/tests/phpunit/tests/dependencies/scripts.php @@ -400,6 +400,47 @@ function test_wp_add_inline_script_before_and_after() { $this->assertEquals( $expected, get_echo( 'wp_print_scripts' ) ); } + /** + * @ticket 44551 + */ + function test_wp_add_inline_script_before_for_handle_without_source() { + wp_register_script( 'test-example', '' ); + wp_enqueue_script( 'test-example' ); + wp_add_inline_script( 'test-example', 'console.log("before");', 'before' ); + + $expected = "\n"; + + $this->assertEquals( $expected, get_echo( 'wp_print_scripts' ) ); + } + + /** + * @ticket 44551 + */ + function test_wp_add_inline_script_after_for_handle_without_source() { + wp_register_script( 'test-example', '' ); + wp_enqueue_script( 'test-example' ); + wp_add_inline_script( 'test-example', 'console.log("after");' ); + + $expected = "\n"; + + $this->assertEquals( $expected, get_echo( 'wp_print_scripts' ) ); + } + + /** + * @ticket 44551 + */ + function test_wp_add_inline_script_before_and_after_for_handle_without_source() { + wp_register_script( 'test-example', '' ); + wp_enqueue_script( 'test-example' ); + wp_add_inline_script( 'test-example', 'console.log("before");', 'before' ); + wp_add_inline_script( 'test-example', 'console.log("after");' ); + + $expected = "\n"; + $expected .= "\n"; + + $this->assertEquals( $expected, get_echo( 'wp_print_scripts' ) ); + } + /** * @ticket 14853 */ From d45455e3bf759e3fa2ee312e92a560f0e43c6a79 Mon Sep 17 00:00:00 2001 From: Anton Timmermans Date: Mon, 22 Oct 2018 13:57:49 +0000 Subject: [PATCH 494/537] Build tools: Upgrade @wordpress packages. Generated using `npm update @wordpress/api-fetch @wordpress/blob @wordpress/block-library @wordpress/blocks @wordpress/components @wordpress/compose @wordpress/core-data @wordpress/data @wordpress/date @wordpress/dom @wordpress/edit-post @wordpress/editor @wordpress/element @wordpress/escape-html @wordpress/list-reusable-blocks @wordpress/nux @wordpress/plugins @wordpress/redux-routine @wordpress/rich-text @wordpress/url @wordpress/viewport`. See #45145. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43789 602fd350-edb4-49c9-b593-d223f7449a82 --- package-lock.json | 4759 +++++++++++++++++++++++++++++++++------------ package.json | 42 +- 2 files changed, 3567 insertions(+), 1234 deletions(-) diff --git a/package-lock.json b/package-lock.json index 43f8908b5beef..7b565f77cf638 100644 --- a/package-lock.json +++ b/package-lock.json @@ -220,13 +220,14 @@ } }, "@wordpress/api-fetch": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/api-fetch/-/api-fetch-2.0.2.tgz", - "integrity": "sha512-i+vDdoCxNAI9PpSLlLBg10JZq4cAJ3K/aVNxHUyK+Ps8cDUjEBITOV3A0+pnmumLCZgzs+LXIKq/kgNz+POqlA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/api-fetch/-/api-fetch-2.1.0.tgz", + "integrity": "sha512-Aa76Soaet8RGLDRuOBzbFyTVIBRDgytAO1EtEppvx444j3LHrgArQD5ViMmZTJB6NOY4wcLA6qmyCG3u+/Xxtg==", "requires": { "@babel/runtime": "^7.0.0", "@wordpress/hooks": "^2.0.2", - "@wordpress/i18n": "^3.0.1" + "@wordpress/i18n": "^3.0.1", + "@wordpress/url": "^2.1.0" } }, "@wordpress/autop": { @@ -238,33 +239,33 @@ } }, "@wordpress/blob": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/blob/-/blob-2.0.2.tgz", - "integrity": "sha512-zy4INlg/QYsqN5bRE1P2P/rPccR/3KXs4816RQYVCunAd8QrS1d9rvYcaFrXIKoXIZ6rz999EZN/E4wTfja0dg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/blob/-/blob-2.1.0.tgz", + "integrity": "sha512-2PBjKivnxVSFLn+askRHyYK61zTarNrpi3S8slC12xeFPXTecT+HBdYJVtk32GBFrQmyH7ZdpDrROhCmjXyiOw==", "requires": { "@babel/runtime": "^7.0.0" } }, "@wordpress/block-library": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@wordpress/block-library/-/block-library-2.1.0.tgz", - "integrity": "sha512-I3p+P2PA1s7zji6axN/BzKcxBl8bY6K9De0wAWV+426jDLIs4SW+80fUowbTqksI0NYE0AAqkjMduxCNvAwBwA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@wordpress/block-library/-/block-library-2.1.4.tgz", + "integrity": "sha512-gRCLt6bkAb9uBZHd+xczxj0bwHtnKfKMkSswyLkp4Nv/XQiA81aajKbaQ1el+xvIESOyCF5ThUc8RWW4dG4MxQ==", "requires": { "@babel/runtime": "^7.0.0", "@wordpress/autop": "^2.0.2", - "@wordpress/blob": "^2.0.2", - "@wordpress/blocks": "^4.0.1", - "@wordpress/components": "^4.1.0", - "@wordpress/compose": "^2.0.2", - "@wordpress/core-data": "^2.0.2", - "@wordpress/data": "^2.1.1", + "@wordpress/blob": "^2.1.0", + "@wordpress/blocks": "^4.0.4", + "@wordpress/components": "^4.2.1", + "@wordpress/compose": "^2.0.5", + "@wordpress/core-data": "^2.0.6", + "@wordpress/data": "^2.1.4", "@wordpress/deprecated": "^2.0.2", - "@wordpress/editor": "^4.0.1", - "@wordpress/element": "^2.1.1", + "@wordpress/editor": "^5.0.1", + "@wordpress/element": "^2.1.4", "@wordpress/html-entities": "^2.0.2", "@wordpress/i18n": "^3.0.1", "@wordpress/keycodes": "^2.0.2", - "@wordpress/viewport": "^2.0.2", + "@wordpress/viewport": "^2.0.5", "classnames": "^2.2.5", "lodash": "^4.17.10", "memize": "^1.0.5", @@ -274,219 +275,33 @@ "url": "^0.11.0" }, "dependencies": { - "@wordpress/a11y": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/a11y/-/a11y-2.0.2.tgz", - "integrity": "sha512-YtO4GG5XQX/y+y9/9nnO7IZfyLfgSLXyRgvt9Om4LTUULF4VClol+x00zuQHcHUdQwINMnAkcG51ni9dkXbxgg==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/dom-ready": "^2.0.2" - } - }, - "@wordpress/api-fetch": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/api-fetch/-/api-fetch-2.0.2.tgz", - "integrity": "sha512-i+vDdoCxNAI9PpSLlLBg10JZq4cAJ3K/aVNxHUyK+Ps8cDUjEBITOV3A0+pnmumLCZgzs+LXIKq/kgNz+POqlA==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/hooks": "^2.0.2", - "@wordpress/i18n": "^3.0.1" - } - }, - "@wordpress/autop": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/autop/-/autop-2.0.2.tgz", - "integrity": "sha512-YoaLK8TJVvD6e0t5VbiwPvkuIyBim5WyDXgE6Kg6T9xLWDEu+Azp1ljk/e+D6rPJoC895eBQZjCWxrch5WFvLw==", - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/blob": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/blob/-/blob-2.0.2.tgz", - "integrity": "sha512-zy4INlg/QYsqN5bRE1P2P/rPccR/3KXs4816RQYVCunAd8QrS1d9rvYcaFrXIKoXIZ6rz999EZN/E4wTfja0dg==", - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/block-serialization-default-parser": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@wordpress/block-serialization-default-parser/-/block-serialization-default-parser-1.0.1.tgz", - "integrity": "sha512-r3pi1GVDnxR4MEb8BcS2UX8BQcNHU/7PyueUihSWGbVJaCksSf+wyRKVTuZiOQKagO95fWy7Egc0JcWK6clmiQ==", - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/block-serialization-spec-parser": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@wordpress/block-serialization-spec-parser/-/block-serialization-spec-parser-1.0.3.tgz", - "integrity": "sha512-qteB0HjG6Kc2FHMPx3Q76iuUYLaj8R+FZD+WT5eXRHgm0o1iGAYjth2qyAjj0hQ/ij5pWYc3pdEjiwQOcSqnLQ==" - }, - "@wordpress/blocks": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@wordpress/blocks/-/blocks-4.0.1.tgz", - "integrity": "sha512-sLEDS5GnGGsQkOTUt9y7DvJAkryoAI4aIXN9YdovZxYqIgARqyAHxKZ/Ri7zNvNqZD31cX0DQyXkr8KNc/V4LA==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/autop": "^2.0.2", - "@wordpress/blob": "^2.0.2", - "@wordpress/block-serialization-default-parser": "^1.0.1", - "@wordpress/block-serialization-spec-parser": "^1.0.3", - "@wordpress/data": "^2.1.1", - "@wordpress/deprecated": "^2.0.2", - "@wordpress/dom": "^2.0.2", - "@wordpress/element": "^2.1.1", - "@wordpress/hooks": "^2.0.2", - "@wordpress/i18n": "^3.0.1", - "@wordpress/is-shallow-equal": "^1.1.4", - "@wordpress/shortcode": "^2.0.2", - "hpq": "^1.2.0", - "lodash": "^4.17.10", - "rememo": "^3.0.0", - "showdown": "^1.8.6", - "simple-html-tokenizer": "^0.4.1", - "tinycolor2": "^1.4.1", - "uuid": "^3.1.0" - } - }, - "@wordpress/components": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@wordpress/components/-/components-4.1.0.tgz", - "integrity": "sha512-MWWrdg1HOojJZEY9hgGTZrgbHzuk2F32/f4qBE0L6Q2wfP48tFjvO8952IJ2vxmtGrXK8PfDuvOGJy2K944LBA==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/a11y": "^2.0.2", - "@wordpress/api-fetch": "^2.0.2", - "@wordpress/compose": "^2.0.2", - "@wordpress/deprecated": "^2.0.2", - "@wordpress/dom": "^2.0.2", - "@wordpress/element": "^2.1.1", - "@wordpress/hooks": "^2.0.2", - "@wordpress/i18n": "^3.0.1", - "@wordpress/is-shallow-equal": "^1.1.4", - "@wordpress/keycodes": "^2.0.2", - "@wordpress/url": "^2.0.2", - "classnames": "^2.2.5", - "clipboard": "^1.7.1", - "diff": "^3.5.0", - "dom-scroll-into-view": "^1.2.1", - "lodash": "^4.17.10", - "memize": "^1.0.5", - "moment": "^2.22.1", - "mousetrap": "^1.6.2", - "re-resizable": "^4.7.1", - "react-click-outside": "^2.3.1", - "react-color": "^2.13.4", - "react-datepicker": "^1.4.1", - "rememo": "^3.0.0", - "uuid": "^3.1.0" - } - }, - "@wordpress/compose": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-2.0.2.tgz", - "integrity": "sha512-BBii0uIRHJ63Gu3zpPFjy6Qda+w/Ie4cHx5tN3hmFNWPENhSlosix1eXbxvE3lSEerW509A1Bt8Tn1XlePTElg==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/element": "^2.1.1", - "@wordpress/is-shallow-equal": "^1.1.4", - "lodash": "^4.17.10" - } - }, - "@wordpress/core-data": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/core-data/-/core-data-2.0.2.tgz", - "integrity": "sha512-ErZgGsKpImg6k2jQ4bWCwFBR6/LDqyLnR05/nDgT14HLvwc0vA9jnw5aPdA2UgqyczY5VuBIEocRQ7JMGxqYXQ==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/api-fetch": "^2.0.2", - "@wordpress/data": "^2.1.1", - "@wordpress/url": "^2.0.2", - "equivalent-key-map": "^0.2.1", - "lodash": "^4.17.10", - "rememo": "^3.0.0" - } - }, - "@wordpress/data": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@wordpress/data/-/data-2.1.1.tgz", - "integrity": "sha512-7GcID3ZRxIFq+7mFKRkbKZqpscUN3udYhhqiQeJQLd1HW/BmWWgQrug5LrUYeI85lQgtWmyxBEXkEZAFm6h8gA==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/compose": "^2.0.2", - "@wordpress/deprecated": "^2.0.2", - "@wordpress/element": "^2.1.1", - "@wordpress/is-shallow-equal": "^1.1.4", - "@wordpress/redux-routine": "^3.0.1", - "equivalent-key-map": "^0.2.0", - "is-promise": "^2.1.0", - "lodash": "^4.17.10", - "redux": "^4.0.0" - } - }, - "@wordpress/date": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/date/-/date-2.0.2.tgz", - "integrity": "sha512-SnEgDZVxVim7Oyokl1KLXAexT4YPoFJtqlomTNxtz208pzWU9MdVGAnF6wUr2D2ALeRccnrw8eImpkuKbs7MDA==", - "requires": { - "@babel/runtime": "^7.0.0", - "moment": "^2.22.1", - "moment-timezone": "^0.5.16" - } - }, - "@wordpress/deprecated": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/deprecated/-/deprecated-2.0.2.tgz", - "integrity": "sha512-5qNehHD7/duvouuGjMdGREQORs9LFMVkyFysfWvafZ919zAl0DAKEXsBoxcMSvvqBqCf5MKJBnQBVY4DeS6AEg==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/hooks": "^2.0.2" - } - }, - "@wordpress/dom": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/dom/-/dom-2.0.2.tgz", - "integrity": "sha512-lLpxqgGd/oo7J5pw+420DpLovTLZIljKlwWX9EXWvNeBEuWlHkfvVHDBSweUUJtnoD3vVxDE+QfCqfHcMqJT9g==", - "requires": { - "@babel/runtime": "^7.0.0", - "lodash": "^4.17.10" - } - }, - "@wordpress/dom-ready": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/dom-ready/-/dom-ready-2.0.2.tgz", - "integrity": "sha512-SENsbiIesC0Oz6qTLHpYxo6aW9/NgFYkXq4TGjUBA5LLNJmBf9AhPKX9rpgh8Y3+DKVobMdX8IKhfRrQYiqRiw==", - "requires": { - "@babel/runtime": "^7.0.0" - } - }, "@wordpress/editor": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@wordpress/editor/-/editor-4.0.1.tgz", - "integrity": "sha512-2bqB8TFiVGcGl71Fi9ZHcPg96aPgIzj0/VM4Pw7zcMLwrL+TAkCBX4rRc8xv7g1TL1dwXZhHbG4CAe3UCb7msw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@wordpress/editor/-/editor-5.0.1.tgz", + "integrity": "sha512-+654GVNUT5Rx0o5yBLwbpXD93B/YdBfH1oAS7mwKn1VCPtAZGGJuza28PFpEaJrHYtAXXbcETsH9GOV0ugOEXQ==", "requires": { "@babel/runtime": "^7.0.0", "@wordpress/a11y": "^2.0.2", - "@wordpress/api-fetch": "^2.0.2", - "@wordpress/blob": "^2.0.2", - "@wordpress/blocks": "^4.0.1", - "@wordpress/components": "^4.1.0", - "@wordpress/compose": "^2.0.2", - "@wordpress/core-data": "^2.0.2", - "@wordpress/data": "^2.1.1", - "@wordpress/date": "^2.0.2", + "@wordpress/api-fetch": "^2.1.0", + "@wordpress/blob": "^2.1.0", + "@wordpress/blocks": "^4.0.4", + "@wordpress/components": "^4.2.1", + "@wordpress/compose": "^2.0.5", + "@wordpress/core-data": "^2.0.6", + "@wordpress/data": "^2.1.4", + "@wordpress/date": "^2.0.3", "@wordpress/deprecated": "^2.0.2", - "@wordpress/dom": "^2.0.2", - "@wordpress/element": "^2.1.1", + "@wordpress/dom": "^2.0.4", + "@wordpress/element": "^2.1.4", "@wordpress/hooks": "^2.0.2", "@wordpress/html-entities": "^2.0.2", "@wordpress/i18n": "^3.0.1", "@wordpress/is-shallow-equal": "^1.1.4", "@wordpress/keycodes": "^2.0.2", - "@wordpress/nux": "^2.0.2", + "@wordpress/nux": "^2.0.6", "@wordpress/token-list": "^1.0.2", - "@wordpress/url": "^2.0.2", - "@wordpress/viewport": "^2.0.2", + "@wordpress/url": "^2.1.0", + "@wordpress/viewport": "^2.0.5", "@wordpress/wordcount": "^2.0.2", "classnames": "^2.2.5", "dom-scroll-into-view": "^1.2.1", @@ -505,147 +320,10 @@ "uuid": "^3.1.0" } }, - "@wordpress/element": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@wordpress/element/-/element-2.1.1.tgz", - "integrity": "sha512-npZP5oAhtG9qqsDNCulSn9jggw8g76Kfp5zmNy1uNfvY+gAhDSDqrO4MC7MCquWygiSxfFWob2ECSCbG4RMFSg==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/escape-html": "^1.0.0-beta.1", - "lodash": "^4.17.10", - "react": "^16.4.1", - "react-dom": "^16.4.1" - } - }, - "@wordpress/hooks": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-2.0.2.tgz", - "integrity": "sha512-yWdkjw6YP2kDF+cjjRfkI2cjTRiETaRFMwJpoqnQWxfay1oBtgvaGuRrYrm0rCxxOqCD/4/di2co5VHQxP9Rhw==", - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/html-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/html-entities/-/html-entities-2.0.2.tgz", - "integrity": "sha512-cxG7YjH9EMfZyeLJAd/Vc1nFJxitMSzybv71iMPP3Dqqgz3jixX6oSe4ukTqfoOKBaF7pY7LzS6eTKu7KAmyZw==", - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/i18n": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-3.0.1.tgz", - "integrity": "sha512-Ut6ihDjcZ7zpU44/WurZrFxrLcMl3Gq+hW8Hb6MTF6+X6Y2fd7QFu3lMvopYNwF8gxWtjvH5n3NIQ6B9DLt7Ng==", - "requires": { - "@babel/runtime": "^7.0.0", - "gettext-parser": "^1.3.1", - "jed": "^1.1.1", - "lodash": "^4.17.10", - "memize": "^1.0.5" - } - }, - "@wordpress/keycodes": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/keycodes/-/keycodes-2.0.2.tgz", - "integrity": "sha512-miMB6uvKZzZmgTb7qSr0NBOadWJ9Eb5Tak/+DRsVrgt9RP4zeCh9Le2T7hOWvNPU/54x2v1eHRrU0L+JDm2JAA==", - "requires": { - "@babel/runtime": "^7.0.0", - "lodash": "^4.17.10" - } - }, - "@wordpress/nux": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/nux/-/nux-2.0.2.tgz", - "integrity": "sha512-N8kUsNvULU/j7D0gIRmPxdC7TJiYwcRLUygI25qAZ/FHYDMiFrzR9ZWkm6rDyDG3i2H8++99Cnyq8L9kX6kDCg==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/components": "^4.1.0", - "@wordpress/compose": "^2.0.2", - "@wordpress/data": "^2.1.1", - "@wordpress/element": "^2.1.1", - "@wordpress/i18n": "^3.0.1", - "lodash": "^4.17.10", - "rememo": "^3.0.0" - } - }, - "@wordpress/redux-routine": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@wordpress/redux-routine/-/redux-routine-3.0.1.tgz", - "integrity": "sha512-BSg/0nrGy9u1ZFNNrsESo6KQYsIUBrlsTVi5gExta+o9uamHTXKAXhasq+wnjm4GqnPkdYck6zNQ/xbeqxNvgA==", - "requires": { - "@babel/runtime": "^7.0.0", - "is-promise": "^2.1.0", - "rungen": "^0.3.2" - } - }, - "@wordpress/shortcode": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/shortcode/-/shortcode-2.0.2.tgz", - "integrity": "sha512-mztQ5l7l1ULZ8rMqlOD/mrLSXXFvwDPdCBCBB+3YGl8zSnCZ1S9X1SIAjoVLpV9uRMm1CZL4w4hvhmi22F4Wiw==", - "requires": { - "@babel/runtime": "^7.0.0", - "lodash": "^4.17.10", - "memize": "^1.0.5" - } - }, - "@wordpress/token-list": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/token-list/-/token-list-1.0.2.tgz", - "integrity": "sha512-hyk3xsLB1OlS52kFlR9PcSzvD6fkB2uOG4Uchs1pd304M/G3WTdD6iPiRVZeMmpWbwMq9KFtu9f8hwUzQTrTow==", - "requires": { - "@babel/runtime": "^7.0.0", - "lodash": "^4.17.10" - } - }, - "@wordpress/url": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/url/-/url-2.0.2.tgz", - "integrity": "sha512-bGmhswKeTTmYIwjH4ekjSDkOTq/kzN4dXi41rXAcjPnO3utV5mEc9GBORGicZNOXv0CksOSP4Cez0vnAgfqRaQ==", - "requires": { - "@babel/runtime": "^7.0.0", - "qs": "^6.5.2" - } - }, - "@wordpress/viewport": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/viewport/-/viewport-2.0.2.tgz", - "integrity": "sha512-2NzlLfGiWdUCc3tAGEORZQqDmnaKqwtZVXaKRmF+6HpX8UlgkKDPqKQVcpq7DqxlcBNcL0GPwFYUaYQPChfUiw==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/compose": "^2.0.2", - "@wordpress/data": "^2.1.1", - "@wordpress/element": "^2.1.1", - "lodash": "^4.17.10" - } - }, - "@wordpress/wordcount": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/wordcount/-/wordcount-2.0.2.tgz", - "integrity": "sha512-FQ9mU/NsEB+IczD8roBGes9fJlZdTtdNhftdoCw32/lpUgP/bjA736NIPtNRedry+VBFykHqUf0CygJ0TgaOKA==", - "requires": { - "@babel/runtime": "^7.0.0", - "lodash": "^4.17.10" - } - }, "querystringify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-1.0.0.tgz", "integrity": "sha1-YoYkIRLFtxL6ZU5SZlK/ahP/Bcs=" - }, - "redux": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.0.tgz", - "integrity": "sha512-NnnHF0h0WVE/hXyrB6OlX67LYRuaf/rJcbWvnHHEPCF/Xa/AZpwhs/20WyqzQae5x4SD2F9nPObgBh2rxAgLiA==", - "requires": { - "loose-envify": "^1.1.0", - "symbol-observable": "^1.2.0" - } - }, - "symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" } } }, @@ -663,19 +341,19 @@ "integrity": "sha512-qteB0HjG6Kc2FHMPx3Q76iuUYLaj8R+FZD+WT5eXRHgm0o1iGAYjth2qyAjj0hQ/ij5pWYc3pdEjiwQOcSqnLQ==" }, "@wordpress/blocks": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@wordpress/blocks/-/blocks-4.0.1.tgz", - "integrity": "sha512-sLEDS5GnGGsQkOTUt9y7DvJAkryoAI4aIXN9YdovZxYqIgARqyAHxKZ/Ri7zNvNqZD31cX0DQyXkr8KNc/V4LA==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@wordpress/blocks/-/blocks-4.0.4.tgz", + "integrity": "sha512-sJRb4k+duD/tfBY6GBT6sw3NOaJ7jErhavR9hDOkJonBusoc6KFKUFQdt+NBWkwQB+/7QJcshFuChg3FRK6bKw==", "requires": { "@babel/runtime": "^7.0.0", "@wordpress/autop": "^2.0.2", - "@wordpress/blob": "^2.0.2", + "@wordpress/blob": "^2.1.0", "@wordpress/block-serialization-default-parser": "^1.0.1", "@wordpress/block-serialization-spec-parser": "^1.0.3", - "@wordpress/data": "^2.1.1", + "@wordpress/data": "^2.1.4", "@wordpress/deprecated": "^2.0.2", - "@wordpress/dom": "^2.0.2", - "@wordpress/element": "^2.1.1", + "@wordpress/dom": "^2.0.4", + "@wordpress/element": "^2.1.4", "@wordpress/hooks": "^2.0.2", "@wordpress/i18n": "^3.0.1", "@wordpress/is-shallow-equal": "^1.1.4", @@ -687,37 +365,27 @@ "simple-html-tokenizer": "^0.4.1", "tinycolor2": "^1.4.1", "uuid": "^3.1.0" - }, - "dependencies": { - "@wordpress/block-serialization-default-parser": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@wordpress/block-serialization-default-parser/-/block-serialization-default-parser-1.0.1.tgz", - "integrity": "sha512-r3pi1GVDnxR4MEb8BcS2UX8BQcNHU/7PyueUihSWGbVJaCksSf+wyRKVTuZiOQKagO95fWy7Egc0JcWK6clmiQ==", - "requires": { - "@babel/runtime": "^7.0.0" - } - } } }, "@wordpress/components": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@wordpress/components/-/components-4.1.0.tgz", - "integrity": "sha512-MWWrdg1HOojJZEY9hgGTZrgbHzuk2F32/f4qBE0L6Q2wfP48tFjvO8952IJ2vxmtGrXK8PfDuvOGJy2K944LBA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@wordpress/components/-/components-4.2.1.tgz", + "integrity": "sha512-RFH54uX2lci5uHpDCLGeTOHWJjM2dzb1ekhUpCDiDaAJatMLDtibXWbFH97SXqB5UVZxXu540SMwqNoxVikATw==", "requires": { "@babel/runtime": "^7.0.0", "@wordpress/a11y": "^2.0.2", - "@wordpress/api-fetch": "^2.0.2", - "@wordpress/compose": "^2.0.2", + "@wordpress/api-fetch": "^2.1.0", + "@wordpress/compose": "^2.0.5", "@wordpress/deprecated": "^2.0.2", - "@wordpress/dom": "^2.0.2", - "@wordpress/element": "^2.1.1", + "@wordpress/dom": "^2.0.4", + "@wordpress/element": "^2.1.4", "@wordpress/hooks": "^2.0.2", "@wordpress/i18n": "^3.0.1", "@wordpress/is-shallow-equal": "^1.1.4", "@wordpress/keycodes": "^2.0.2", - "@wordpress/url": "^2.0.2", + "@wordpress/url": "^2.1.0", "classnames": "^2.2.5", - "clipboard": "^1.7.1", + "clipboard": "^2.0.1", "diff": "^3.5.0", "dom-scroll-into-view": "^1.2.1", "lodash": "^4.17.10", @@ -726,68 +394,35 @@ "mousetrap": "^1.6.2", "re-resizable": "^4.7.1", "react-click-outside": "^2.3.1", - "react-color": "^2.13.4", - "react-datepicker": "^1.4.1", + "react-dates": "^17.1.1", "rememo": "^3.0.0", + "tinycolor2": "^1.4.1", "uuid": "^3.1.0" - }, - "dependencies": { - "@wordpress/compose": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-2.0.2.tgz", - "integrity": "sha512-BBii0uIRHJ63Gu3zpPFjy6Qda+w/Ie4cHx5tN3hmFNWPENhSlosix1eXbxvE3lSEerW509A1Bt8Tn1XlePTElg==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/element": "^2.1.1", - "@wordpress/is-shallow-equal": "^1.1.4", - "lodash": "^4.17.10" - } - }, - "@wordpress/url": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/url/-/url-2.0.2.tgz", - "integrity": "sha512-bGmhswKeTTmYIwjH4ekjSDkOTq/kzN4dXi41rXAcjPnO3utV5mEc9GBORGicZNOXv0CksOSP4Cez0vnAgfqRaQ==", - "requires": { - "@babel/runtime": "^7.0.0", - "qs": "^6.5.2" - } - } } }, "@wordpress/compose": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-2.0.2.tgz", - "integrity": "sha512-BBii0uIRHJ63Gu3zpPFjy6Qda+w/Ie4cHx5tN3hmFNWPENhSlosix1eXbxvE3lSEerW509A1Bt8Tn1XlePTElg==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-2.0.5.tgz", + "integrity": "sha512-bbf+4nph+/rFBou7PTUyx8rwHVR08ymBgxnmShGTTjuiVxcrz0Gu7Wu2wxulsZobOYaiqvQkCEHKceNsBxJwiA==", "requires": { "@babel/runtime": "^7.0.0", - "@wordpress/element": "^2.1.1", + "@wordpress/element": "^2.1.4", "@wordpress/is-shallow-equal": "^1.1.4", "lodash": "^4.17.10" } }, "@wordpress/core-data": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/core-data/-/core-data-2.0.2.tgz", - "integrity": "sha512-ErZgGsKpImg6k2jQ4bWCwFBR6/LDqyLnR05/nDgT14HLvwc0vA9jnw5aPdA2UgqyczY5VuBIEocRQ7JMGxqYXQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@wordpress/core-data/-/core-data-2.0.6.tgz", + "integrity": "sha512-7JzU9f+bCAg1oT0IYu7QPO+C5tP8rGN3BodZmbqJOut8DGiMSzDYdfVwwltKzKJmTBeuitYuSK48sXBLSoJb7Q==", "requires": { "@babel/runtime": "^7.0.0", - "@wordpress/api-fetch": "^2.0.2", - "@wordpress/data": "^2.1.1", - "@wordpress/url": "^2.0.2", + "@wordpress/api-fetch": "^2.1.0", + "@wordpress/data": "^2.1.4", + "@wordpress/url": "^2.1.0", "equivalent-key-map": "^0.2.1", "lodash": "^4.17.10", "rememo": "^3.0.0" - }, - "dependencies": { - "@wordpress/url": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/url/-/url-2.0.2.tgz", - "integrity": "sha512-bGmhswKeTTmYIwjH4ekjSDkOTq/kzN4dXi41rXAcjPnO3utV5mEc9GBORGicZNOXv0CksOSP4Cez0vnAgfqRaQ==", - "requires": { - "@babel/runtime": "^7.0.0", - "qs": "^6.5.2" - } - } } }, "@wordpress/custom-templated-path-webpack-plugin": { @@ -801,39 +436,26 @@ } }, "@wordpress/data": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@wordpress/data/-/data-2.1.1.tgz", - "integrity": "sha512-7GcID3ZRxIFq+7mFKRkbKZqpscUN3udYhhqiQeJQLd1HW/BmWWgQrug5LrUYeI85lQgtWmyxBEXkEZAFm6h8gA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@wordpress/data/-/data-2.1.4.tgz", + "integrity": "sha512-Emfhszi7huasdDhngwk9HvRLUiotCNo9mDDk2Q9VGpGb9SfpQp+84PvenhreiZtezUR+7nUnSQuAJ2d8rUP37Q==", "requires": { "@babel/runtime": "^7.0.0", - "@wordpress/compose": "^2.0.2", + "@wordpress/compose": "^2.0.5", "@wordpress/deprecated": "^2.0.2", - "@wordpress/element": "^2.1.1", + "@wordpress/element": "^2.1.4", "@wordpress/is-shallow-equal": "^1.1.4", - "@wordpress/redux-routine": "^3.0.1", + "@wordpress/redux-routine": "^3.0.3", "equivalent-key-map": "^0.2.0", "is-promise": "^2.1.0", "lodash": "^4.17.10", "redux": "^4.0.0" - }, - "dependencies": { - "@wordpress/compose": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-2.0.2.tgz", - "integrity": "sha512-BBii0uIRHJ63Gu3zpPFjy6Qda+w/Ie4cHx5tN3hmFNWPENhSlosix1eXbxvE3lSEerW509A1Bt8Tn1XlePTElg==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/element": "^2.1.1", - "@wordpress/is-shallow-equal": "^1.1.4", - "lodash": "^4.17.10" - } - } } }, "@wordpress/date": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/date/-/date-2.0.2.tgz", - "integrity": "sha512-SnEgDZVxVim7Oyokl1KLXAexT4YPoFJtqlomTNxtz208pzWU9MdVGAnF6wUr2D2ALeRccnrw8eImpkuKbs7MDA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/date/-/date-2.0.3.tgz", + "integrity": "sha512-ZnIEZT3sp+H2dr4apdoZnM9MhN6FpnMZ2zB+h8KuKExJufu9EUyW4grhEvgCTloJbzXNKCN5eolqeYq9I0pWog==", "requires": { "@babel/runtime": "^7.0.0", "moment": "^2.22.1", @@ -850,9 +472,9 @@ } }, "@wordpress/dom": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/dom/-/dom-2.0.2.tgz", - "integrity": "sha512-lLpxqgGd/oo7J5pw+420DpLovTLZIljKlwWX9EXWvNeBEuWlHkfvVHDBSweUUJtnoD3vVxDE+QfCqfHcMqJT9g==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@wordpress/dom/-/dom-2.0.4.tgz", + "integrity": "sha512-uW/yeWayoSu6uUA+xrM+yCbNJc3oQfga1Y1PUgXvowv0ydn5Qhgh2Dj07ANgg1AncZqFZsObPerBFNloaJhsvQ==", "requires": { "@babel/runtime": "^7.0.0", "lodash": "^4.17.10" @@ -867,96 +489,269 @@ } }, "@wordpress/edit-post": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@wordpress/edit-post/-/edit-post-1.0.0.tgz", - "integrity": "sha512-lqGpBi1K/ndW5Imn0cgEo1hryt3tkLMrAs4vdBaRbhsBIOXv57gPAjONSiaOYunNgH+JnFiLpHHOWC9BIcz97A==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@wordpress/edit-post/-/edit-post-1.0.4.tgz", + "integrity": "sha512-m+VR3S7rsRwQLze+gzmhWC2yWrVGo7bjb0eshsnZ+JiLSjj1/KeW7k0uvH5w8/Unv9/BHZAdbsiT9IEs42tLMQ==", "requires": { "@babel/runtime": "^7.0.0", "@wordpress/a11y": "^2.0.2", - "@wordpress/api-fetch": "^2.0.2", - "@wordpress/block-library": "^2.1.0", - "@wordpress/blocks": "^4.0.1", - "@wordpress/components": "^4.1.0", - "@wordpress/compose": "^2.0.2", - "@wordpress/core-data": "^2.0.2", - "@wordpress/data": "^2.1.1", + "@wordpress/api-fetch": "^2.1.0", + "@wordpress/block-library": "^2.1.4", + "@wordpress/blocks": "^4.0.4", + "@wordpress/components": "^4.2.1", + "@wordpress/compose": "^2.0.5", + "@wordpress/core-data": "^2.0.6", + "@wordpress/data": "^2.1.4", "@wordpress/deprecated": "^2.0.2", - "@wordpress/editor": "^4.0.1", - "@wordpress/element": "^2.1.1", + "@wordpress/editor": "^5.0.1", + "@wordpress/element": "^2.1.4", "@wordpress/hooks": "^2.0.2", "@wordpress/i18n": "^3.0.1", "@wordpress/keycodes": "^2.0.2", - "@wordpress/nux": "^2.0.2", - "@wordpress/plugins": "^2.0.2", - "@wordpress/url": "^2.0.2", - "@wordpress/viewport": "^2.0.2", + "@wordpress/nux": "^2.0.6", + "@wordpress/plugins": "^2.0.5", + "@wordpress/url": "^2.1.0", + "@wordpress/viewport": "^2.0.5", "classnames": "^2.2.5", "lodash": "^4.17.10", "refx": "^3.0.0" }, + "dependencies": { + "@wordpress/editor": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@wordpress/editor/-/editor-5.0.1.tgz", + "integrity": "sha512-+654GVNUT5Rx0o5yBLwbpXD93B/YdBfH1oAS7mwKn1VCPtAZGGJuza28PFpEaJrHYtAXXbcETsH9GOV0ugOEXQ==", + "requires": { + "@babel/runtime": "^7.0.0", + "@wordpress/a11y": "^2.0.2", + "@wordpress/api-fetch": "^2.1.0", + "@wordpress/blob": "^2.1.0", + "@wordpress/blocks": "^4.0.4", + "@wordpress/components": "^4.2.1", + "@wordpress/compose": "^2.0.5", + "@wordpress/core-data": "^2.0.6", + "@wordpress/data": "^2.1.4", + "@wordpress/date": "^2.0.3", + "@wordpress/deprecated": "^2.0.2", + "@wordpress/dom": "^2.0.4", + "@wordpress/element": "^2.1.4", + "@wordpress/hooks": "^2.0.2", + "@wordpress/html-entities": "^2.0.2", + "@wordpress/i18n": "^3.0.1", + "@wordpress/is-shallow-equal": "^1.1.4", + "@wordpress/keycodes": "^2.0.2", + "@wordpress/nux": "^2.0.6", + "@wordpress/token-list": "^1.0.2", + "@wordpress/url": "^2.1.0", + "@wordpress/viewport": "^2.0.5", + "@wordpress/wordcount": "^2.0.2", + "classnames": "^2.2.5", + "dom-scroll-into-view": "^1.2.1", + "inherits": "^2.0.3", + "jquery": "^3.3.1", + "lodash": "^4.17.10", + "memize": "^1.0.5", + "react-autosize-textarea": "^3.0.2", + "redux-multi": "^0.1.12", + "redux-optimist": "^1.0.0", + "refx": "^3.0.0", + "rememo": "^3.0.0", + "tinycolor2": "^1.4.1", + "tinymce": "^4.7.2", + "traverse": "^0.6.6", + "uuid": "^3.1.0" + } + } + } + }, + "@wordpress/editor": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/editor/-/editor-4.0.3.tgz", + "integrity": "sha512-KjiBDN8Eg+UDTc4CsRvCia5IRkeWIOpeaX+fk7VNBj6l9JSKmfiRU38sRmYLfsuR4pHZWPN98e9tBZyo9tZELg==", + "requires": { + "@babel/runtime": "^7.0.0", + "@wordpress/a11y": "file:node_modules/@wordpress/a11y", + "@wordpress/api-fetch": "file:node_modules/@wordpress/api-fetch", + "@wordpress/blob": "file:node_modules/@wordpress/blob", + "@wordpress/blocks": "file:node_modules/@wordpress/blocks", + "@wordpress/components": "file:node_modules/@wordpress/components", + "@wordpress/compose": "file:node_modules/@wordpress/compose", + "@wordpress/core-data": "file:node_modules/@wordpress/core-data", + "@wordpress/data": "file:node_modules/@wordpress/data", + "@wordpress/date": "file:node_modules/@wordpress/date", + "@wordpress/deprecated": "file:node_modules/@wordpress/deprecated", + "@wordpress/dom": "file:node_modules/@wordpress/dom", + "@wordpress/element": "file:node_modules/@wordpress/element", + "@wordpress/hooks": "file:node_modules/@wordpress/hooks", + "@wordpress/html-entities": "file:node_modules/@wordpress/html-entities", + "@wordpress/i18n": "file:node_modules/@wordpress/i18n", + "@wordpress/is-shallow-equal": "file:node_modules/@wordpress/is-shallow-equal", + "@wordpress/keycodes": "file:node_modules/@wordpress/keycodes", + "@wordpress/nux": "file:node_modules/@wordpress/nux", + "@wordpress/token-list": "file:node_modules/@wordpress/token-list", + "@wordpress/url": "file:node_modules/@wordpress/url", + "@wordpress/viewport": "file:node_modules/@wordpress/viewport", + "@wordpress/wordcount": "file:node_modules/@wordpress/wordcount", + "classnames": "^2.2.5", + "dom-scroll-into-view": "^1.2.1", + "inherits": "^2.0.3", + "jquery": "^3.3.1", + "lodash": "^4.17.10", + "memize": "^1.0.5", + "react-autosize-textarea": "^3.0.2", + "redux-multi": "^0.1.12", + "redux-optimist": "^1.0.0", + "refx": "^3.0.0", + "rememo": "^3.0.0", + "tinycolor2": "^1.4.1", + "tinymce": "^4.7.2", + "traverse": "^0.6.6", + "uuid": "^3.1.0" + }, "dependencies": { "@wordpress/a11y": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/a11y/-/a11y-2.0.2.tgz", + "version": "file:node_modules/@wordpress/a11y", "integrity": "sha512-YtO4GG5XQX/y+y9/9nnO7IZfyLfgSLXyRgvt9Om4LTUULF4VClol+x00zuQHcHUdQwINMnAkcG51ni9dkXbxgg==", "requires": { "@babel/runtime": "^7.0.0", "@wordpress/dom-ready": "^2.0.2" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.1.2", + "bundled": true, + "requires": { + "regenerator-runtime": "^0.12.0" + } + }, + "@wordpress/dom-ready": { + "version": "2.0.2", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "regenerator-runtime": { + "version": "0.12.1", + "bundled": true + } } }, "@wordpress/api-fetch": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/api-fetch/-/api-fetch-2.0.2.tgz", - "integrity": "sha512-i+vDdoCxNAI9PpSLlLBg10JZq4cAJ3K/aVNxHUyK+Ps8cDUjEBITOV3A0+pnmumLCZgzs+LXIKq/kgNz+POqlA==", + "version": "file:node_modules/@wordpress/api-fetch", + "integrity": "sha512-Aa76Soaet8RGLDRuOBzbFyTVIBRDgytAO1EtEppvx444j3LHrgArQD5ViMmZTJB6NOY4wcLA6qmyCG3u+/Xxtg==", "requires": { "@babel/runtime": "^7.0.0", "@wordpress/hooks": "^2.0.2", "@wordpress/i18n": "^3.0.1" - } - }, - "@wordpress/autop": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/autop/-/autop-2.0.2.tgz", - "integrity": "sha512-YoaLK8TJVvD6e0t5VbiwPvkuIyBim5WyDXgE6Kg6T9xLWDEu+Azp1ljk/e+D6rPJoC895eBQZjCWxrch5WFvLw==", - "requires": { - "@babel/runtime": "^7.0.0" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.1.2", + "bundled": true, + "requires": { + "regenerator-runtime": "^0.12.0" + } + }, + "@wordpress/hooks": { + "version": "2.0.2", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "@wordpress/i18n": { + "version": "3.0.1", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "gettext-parser": "^1.3.1", + "jed": "^1.1.1", + "lodash": "^4.17.10", + "memize": "^1.0.5" + } + }, + "encoding": { + "version": "0.1.12", + "bundled": true, + "requires": { + "iconv-lite": "~0.4.13" + } + }, + "gettext-parser": { + "version": "1.4.0", + "bundled": true, + "requires": { + "encoding": "^0.1.12", + "safe-buffer": "^5.1.1" + } + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "jed": { + "version": "1.1.1", + "bundled": true + }, + "lodash": { + "version": "4.17.11", + "bundled": true + }, + "memize": { + "version": "1.0.5", + "bundled": true + }, + "regenerator-runtime": { + "version": "0.12.1", + "bundled": true + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true + } } }, "@wordpress/blob": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/blob/-/blob-2.0.2.tgz", - "integrity": "sha512-zy4INlg/QYsqN5bRE1P2P/rPccR/3KXs4816RQYVCunAd8QrS1d9rvYcaFrXIKoXIZ6rz999EZN/E4wTfja0dg==", - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/block-serialization-default-parser": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@wordpress/block-serialization-default-parser/-/block-serialization-default-parser-1.0.1.tgz", - "integrity": "sha512-r3pi1GVDnxR4MEb8BcS2UX8BQcNHU/7PyueUihSWGbVJaCksSf+wyRKVTuZiOQKagO95fWy7Egc0JcWK6clmiQ==", + "version": "file:node_modules/@wordpress/blob", + "integrity": "sha512-2PBjKivnxVSFLn+askRHyYK61zTarNrpi3S8slC12xeFPXTecT+HBdYJVtk32GBFrQmyH7ZdpDrROhCmjXyiOw==", "requires": { "@babel/runtime": "^7.0.0" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.1.2", + "bundled": true, + "requires": { + "regenerator-runtime": "^0.12.0" + } + }, + "regenerator-runtime": { + "version": "0.12.1", + "bundled": true + } } }, - "@wordpress/block-serialization-spec-parser": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@wordpress/block-serialization-spec-parser/-/block-serialization-spec-parser-1.0.3.tgz", - "integrity": "sha512-qteB0HjG6Kc2FHMPx3Q76iuUYLaj8R+FZD+WT5eXRHgm0o1iGAYjth2qyAjj0hQ/ij5pWYc3pdEjiwQOcSqnLQ==" - }, "@wordpress/blocks": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@wordpress/blocks/-/blocks-4.0.1.tgz", - "integrity": "sha512-sLEDS5GnGGsQkOTUt9y7DvJAkryoAI4aIXN9YdovZxYqIgARqyAHxKZ/Ri7zNvNqZD31cX0DQyXkr8KNc/V4LA==", + "version": "file:node_modules/@wordpress/blocks", + "integrity": "sha512-sJRb4k+duD/tfBY6GBT6sw3NOaJ7jErhavR9hDOkJonBusoc6KFKUFQdt+NBWkwQB+/7QJcshFuChg3FRK6bKw==", "requires": { "@babel/runtime": "^7.0.0", "@wordpress/autop": "^2.0.2", - "@wordpress/blob": "^2.0.2", + "@wordpress/blob": "^2.1.0", "@wordpress/block-serialization-default-parser": "^1.0.1", "@wordpress/block-serialization-spec-parser": "^1.0.3", - "@wordpress/data": "^2.1.1", + "@wordpress/data": "^2.1.4", "@wordpress/deprecated": "^2.0.2", - "@wordpress/dom": "^2.0.2", - "@wordpress/element": "^2.1.1", + "@wordpress/dom": "^2.0.4", + "@wordpress/element": "^2.1.4", "@wordpress/hooks": "^2.0.2", "@wordpress/i18n": "^3.0.1", "@wordpress/is-shallow-equal": "^1.1.4", @@ -968,713 +763,3049 @@ "simple-html-tokenizer": "^0.4.1", "tinycolor2": "^1.4.1", "uuid": "^3.1.0" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.1.2", + "bundled": true, + "requires": { + "regenerator-runtime": "^0.12.0" + } + }, + "@wordpress/autop": { + "version": "2.0.2", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "@wordpress/blob": { + "version": "2.1.0", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "@wordpress/block-serialization-default-parser": { + "version": "1.0.1", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "@wordpress/block-serialization-spec-parser": { + "version": "1.0.3", + "bundled": true + }, + "@wordpress/compose": { + "version": "2.0.5", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "@wordpress/element": "^2.1.4", + "@wordpress/is-shallow-equal": "^1.1.4", + "lodash": "^4.17.10" + } + }, + "@wordpress/data": { + "version": "2.1.4", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "@wordpress/compose": "^2.0.5", + "@wordpress/deprecated": "^2.0.2", + "@wordpress/element": "^2.1.4", + "@wordpress/is-shallow-equal": "^1.1.4", + "@wordpress/redux-routine": "^3.0.3", + "equivalent-key-map": "^0.2.0", + "is-promise": "^2.1.0", + "lodash": "^4.17.10", + "redux": "^4.0.0" + } + }, + "@wordpress/deprecated": { + "version": "2.0.2", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "@wordpress/hooks": "^2.0.2" + } + }, + "@wordpress/dom": { + "version": "2.0.4", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "lodash": "^4.17.10" + } + }, + "@wordpress/element": { + "version": "2.1.4", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "@wordpress/escape-html": "^1.0.1", + "lodash": "^4.17.10", + "react": "^16.4.1", + "react-dom": "^16.4.1" + } + }, + "@wordpress/escape-html": { + "version": "1.0.1", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "@wordpress/hooks": { + "version": "2.0.2", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "@wordpress/i18n": { + "version": "3.0.1", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "gettext-parser": "^1.3.1", + "jed": "^1.1.1", + "lodash": "^4.17.10", + "memize": "^1.0.5" + } + }, + "@wordpress/is-shallow-equal": { + "version": "1.1.4", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "@wordpress/redux-routine": { + "version": "3.0.3", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "is-promise": "^2.1.0", + "rungen": "^0.3.2" + } + }, + "@wordpress/shortcode": { + "version": "2.0.2", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "lodash": "^4.17.10", + "memize": "^1.0.5" + } + }, + "ansi-regex": { + "version": "3.0.0", + "bundled": true + }, + "camelcase": { + "version": "4.1.0", + "bundled": true + }, + "cliui": { + "version": "4.1.0", + "bundled": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + } + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "cross-spawn": { + "version": "5.1.0", + "bundled": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "decamelize": { + "version": "1.2.0", + "bundled": true + }, + "encoding": { + "version": "0.1.12", + "bundled": true, + "requires": { + "iconv-lite": "~0.4.13" + } + }, + "equivalent-key-map": { + "version": "0.2.2", + "bundled": true + }, + "execa": { + "version": "0.7.0", + "bundled": true, + "requires": { + "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" + } + }, + "find-up": { + "version": "2.1.0", + "bundled": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "get-caller-file": { + "version": "1.0.3", + "bundled": true + }, + "get-stream": { + "version": "3.0.0", + "bundled": true + }, + "gettext-parser": { + "version": "1.4.0", + "bundled": true, + "requires": { + "encoding": "^0.1.12", + "safe-buffer": "^5.1.1" + } + }, + "hpq": { + "version": "1.2.0", + "bundled": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "invert-kv": { + "version": "1.0.0", + "bundled": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "bundled": true + }, + "is-promise": { + "version": "2.1.0", + "bundled": true + }, + "is-stream": { + "version": "1.1.0", + "bundled": true + }, + "isexe": { + "version": "2.0.0", + "bundled": true + }, + "jed": { + "version": "1.1.1", + "bundled": true + }, + "js-tokens": { + "version": "4.0.0", + "bundled": true + }, + "lcid": { + "version": "1.0.0", + "bundled": true, + "requires": { + "invert-kv": "^1.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "bundled": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.11", + "bundled": true + }, + "loose-envify": { + "version": "1.4.0", + "bundled": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lru-cache": { + "version": "4.1.3", + "bundled": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "mem": { + "version": "1.1.0", + "bundled": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "memize": { + "version": "1.0.5", + "bundled": true + }, + "mimic-fn": { + "version": "1.2.0", + "bundled": true + }, + "npm-run-path": { + "version": "2.0.2", + "bundled": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true + }, + "os-locale": { + "version": "2.1.0", + "bundled": true, + "requires": { + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + } + }, + "p-finally": { + "version": "1.0.0", + "bundled": true + }, + "p-limit": { + "version": "1.3.0", + "bundled": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "bundled": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "bundled": true + }, + "path-exists": { + "version": "3.0.0", + "bundled": true + }, + "path-key": { + "version": "2.0.1", + "bundled": true + }, + "prop-types": { + "version": "15.6.2", + "bundled": true, + "requires": { + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" + } + }, + "pseudomap": { + "version": "1.0.2", + "bundled": true + }, + "react": { + "version": "16.5.2", + "bundled": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "schedule": "^0.5.0" + } + }, + "react-dom": { + "version": "16.5.2", + "bundled": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "schedule": "^0.5.0" + } + }, + "redux": { + "version": "4.0.1", + "bundled": true, + "requires": { + "loose-envify": "^1.4.0", + "symbol-observable": "^1.2.0" + } + }, + "regenerator-runtime": { + "version": "0.12.1", + "bundled": true + }, + "rememo": { + "version": "3.0.0", + "bundled": true + }, + "require-directory": { + "version": "2.1.1", + "bundled": true + }, + "require-main-filename": { + "version": "1.0.1", + "bundled": true + }, + "rungen": { + "version": "0.3.2", + "bundled": true + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true + }, + "schedule": { + "version": "0.5.0", + "bundled": true, + "requires": { + "object-assign": "^4.1.1" + } + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true + }, + "shebang-command": { + "version": "1.2.0", + "bundled": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "bundled": true + }, + "showdown": { + "version": "1.8.7", + "bundled": true, + "requires": { + "yargs": "^10.0.3" + } + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true + }, + "simple-html-tokenizer": { + "version": "0.4.3", + "bundled": true + }, + "string-width": { + "version": "2.1.1", + "bundled": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "bundled": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "bundled": true + }, + "symbol-observable": { + "version": "1.2.0", + "bundled": true + }, + "tinycolor2": { + "version": "1.4.1", + "bundled": true + }, + "uuid": { + "version": "3.3.2", + "bundled": true + }, + "which": { + "version": "1.3.1", + "bundled": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "bundled": true + }, + "wrap-ansi": { + "version": "2.1.0", + "bundled": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "y18n": { + "version": "3.2.1", + "bundled": true + }, + "yallist": { + "version": "2.1.2", + "bundled": true + }, + "yargs": { + "version": "10.1.2", + "bundled": true, + "requires": { + "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": "^8.1.0" + } + }, + "yargs-parser": { + "version": "8.1.0", + "bundled": true, + "requires": { + "camelcase": "^4.1.0" + } + } } }, - "@wordpress/components": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@wordpress/components/-/components-4.1.0.tgz", - "integrity": "sha512-MWWrdg1HOojJZEY9hgGTZrgbHzuk2F32/f4qBE0L6Q2wfP48tFjvO8952IJ2vxmtGrXK8PfDuvOGJy2K944LBA==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/a11y": "^2.0.2", - "@wordpress/api-fetch": "^2.0.2", - "@wordpress/compose": "^2.0.2", - "@wordpress/deprecated": "^2.0.2", - "@wordpress/dom": "^2.0.2", - "@wordpress/element": "^2.1.1", - "@wordpress/hooks": "^2.0.2", - "@wordpress/i18n": "^3.0.1", - "@wordpress/is-shallow-equal": "^1.1.4", - "@wordpress/keycodes": "^2.0.2", - "@wordpress/url": "^2.0.2", - "classnames": "^2.2.5", - "clipboard": "^1.7.1", - "diff": "^3.5.0", - "dom-scroll-into-view": "^1.2.1", - "lodash": "^4.17.10", - "memize": "^1.0.5", - "moment": "^2.22.1", - "mousetrap": "^1.6.2", - "re-resizable": "^4.7.1", - "react-click-outside": "^2.3.1", - "react-color": "^2.13.4", - "react-datepicker": "^1.4.1", - "rememo": "^3.0.0", - "uuid": "^3.1.0" - } - }, - "@wordpress/compose": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-2.0.2.tgz", - "integrity": "sha512-BBii0uIRHJ63Gu3zpPFjy6Qda+w/Ie4cHx5tN3hmFNWPENhSlosix1eXbxvE3lSEerW509A1Bt8Tn1XlePTElg==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/element": "^2.1.1", - "@wordpress/is-shallow-equal": "^1.1.4", - "lodash": "^4.17.10" - } - }, - "@wordpress/core-data": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/core-data/-/core-data-2.0.2.tgz", - "integrity": "sha512-ErZgGsKpImg6k2jQ4bWCwFBR6/LDqyLnR05/nDgT14HLvwc0vA9jnw5aPdA2UgqyczY5VuBIEocRQ7JMGxqYXQ==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/api-fetch": "^2.0.2", - "@wordpress/data": "^2.1.1", - "@wordpress/url": "^2.0.2", - "equivalent-key-map": "^0.2.1", - "lodash": "^4.17.10", - "rememo": "^3.0.0" - } - }, - "@wordpress/data": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@wordpress/data/-/data-2.1.1.tgz", - "integrity": "sha512-7GcID3ZRxIFq+7mFKRkbKZqpscUN3udYhhqiQeJQLd1HW/BmWWgQrug5LrUYeI85lQgtWmyxBEXkEZAFm6h8gA==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/compose": "^2.0.2", - "@wordpress/deprecated": "^2.0.2", - "@wordpress/element": "^2.1.1", - "@wordpress/is-shallow-equal": "^1.1.4", - "@wordpress/redux-routine": "^3.0.1", - "equivalent-key-map": "^0.2.0", - "is-promise": "^2.1.0", - "lodash": "^4.17.10", - "redux": "^4.0.0" - } - }, - "@wordpress/date": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/date/-/date-2.0.2.tgz", - "integrity": "sha512-SnEgDZVxVim7Oyokl1KLXAexT4YPoFJtqlomTNxtz208pzWU9MdVGAnF6wUr2D2ALeRccnrw8eImpkuKbs7MDA==", - "requires": { - "@babel/runtime": "^7.0.0", - "moment": "^2.22.1", - "moment-timezone": "^0.5.16" - } - }, - "@wordpress/deprecated": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/deprecated/-/deprecated-2.0.2.tgz", - "integrity": "sha512-5qNehHD7/duvouuGjMdGREQORs9LFMVkyFysfWvafZ919zAl0DAKEXsBoxcMSvvqBqCf5MKJBnQBVY4DeS6AEg==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/hooks": "^2.0.2" - } - }, - "@wordpress/dom": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/dom/-/dom-2.0.2.tgz", - "integrity": "sha512-lLpxqgGd/oo7J5pw+420DpLovTLZIljKlwWX9EXWvNeBEuWlHkfvVHDBSweUUJtnoD3vVxDE+QfCqfHcMqJT9g==", - "requires": { - "@babel/runtime": "^7.0.0", - "lodash": "^4.17.10" - } - }, - "@wordpress/dom-ready": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/dom-ready/-/dom-ready-2.0.2.tgz", - "integrity": "sha512-SENsbiIesC0Oz6qTLHpYxo6aW9/NgFYkXq4TGjUBA5LLNJmBf9AhPKX9rpgh8Y3+DKVobMdX8IKhfRrQYiqRiw==", - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/editor": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@wordpress/editor/-/editor-4.0.1.tgz", - "integrity": "sha512-2bqB8TFiVGcGl71Fi9ZHcPg96aPgIzj0/VM4Pw7zcMLwrL+TAkCBX4rRc8xv7g1TL1dwXZhHbG4CAe3UCb7msw==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/a11y": "^2.0.2", - "@wordpress/api-fetch": "^2.0.2", - "@wordpress/blob": "^2.0.2", - "@wordpress/blocks": "^4.0.1", - "@wordpress/components": "^4.1.0", - "@wordpress/compose": "^2.0.2", - "@wordpress/core-data": "^2.0.2", - "@wordpress/data": "^2.1.1", - "@wordpress/date": "^2.0.2", - "@wordpress/deprecated": "^2.0.2", - "@wordpress/dom": "^2.0.2", - "@wordpress/element": "^2.1.1", - "@wordpress/hooks": "^2.0.2", - "@wordpress/html-entities": "^2.0.2", - "@wordpress/i18n": "^3.0.1", - "@wordpress/is-shallow-equal": "^1.1.4", - "@wordpress/keycodes": "^2.0.2", - "@wordpress/nux": "^2.0.2", - "@wordpress/token-list": "^1.0.2", - "@wordpress/url": "^2.0.2", - "@wordpress/viewport": "^2.0.2", - "@wordpress/wordcount": "^2.0.2", - "classnames": "^2.2.5", - "dom-scroll-into-view": "^1.2.1", - "inherits": "^2.0.3", - "jquery": "^3.3.1", - "lodash": "^4.17.10", - "memize": "^1.0.5", - "react-autosize-textarea": "^3.0.2", - "redux-multi": "^0.1.12", - "redux-optimist": "^1.0.0", - "refx": "^3.0.0", - "rememo": "^3.0.0", - "tinycolor2": "^1.4.1", - "tinymce": "^4.7.2", - "traverse": "^0.6.6", - "uuid": "^3.1.0" - } - }, - "@wordpress/element": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@wordpress/element/-/element-2.1.1.tgz", - "integrity": "sha512-npZP5oAhtG9qqsDNCulSn9jggw8g76Kfp5zmNy1uNfvY+gAhDSDqrO4MC7MCquWygiSxfFWob2ECSCbG4RMFSg==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/escape-html": "^1.0.0-beta.1", - "lodash": "^4.17.10", - "react": "^16.4.1", - "react-dom": "^16.4.1" - } - }, - "@wordpress/hooks": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-2.0.2.tgz", - "integrity": "sha512-yWdkjw6YP2kDF+cjjRfkI2cjTRiETaRFMwJpoqnQWxfay1oBtgvaGuRrYrm0rCxxOqCD/4/di2co5VHQxP9Rhw==", - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/html-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/html-entities/-/html-entities-2.0.2.tgz", - "integrity": "sha512-cxG7YjH9EMfZyeLJAd/Vc1nFJxitMSzybv71iMPP3Dqqgz3jixX6oSe4ukTqfoOKBaF7pY7LzS6eTKu7KAmyZw==", - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/i18n": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-3.0.1.tgz", - "integrity": "sha512-Ut6ihDjcZ7zpU44/WurZrFxrLcMl3Gq+hW8Hb6MTF6+X6Y2fd7QFu3lMvopYNwF8gxWtjvH5n3NIQ6B9DLt7Ng==", + "@wordpress/components": { + "version": "file:node_modules/@wordpress/components", + "integrity": "sha512-RFH54uX2lci5uHpDCLGeTOHWJjM2dzb1ekhUpCDiDaAJatMLDtibXWbFH97SXqB5UVZxXu540SMwqNoxVikATw==", "requires": { "@babel/runtime": "^7.0.0", - "gettext-parser": "^1.3.1", - "jed": "^1.1.1", + "@wordpress/a11y": "^2.0.2", + "@wordpress/api-fetch": "^2.1.0", + "@wordpress/deprecated": "^2.0.2", + "@wordpress/dom": "^2.0.4", + "@wordpress/element": "^2.1.4", + "@wordpress/hooks": "^2.0.2", + "@wordpress/i18n": "^3.0.1", + "@wordpress/is-shallow-equal": "^1.1.4", + "@wordpress/keycodes": "^2.0.2", + "classnames": "^2.2.5", + "diff": "^3.5.0", + "dom-scroll-into-view": "^1.2.1", "lodash": "^4.17.10", - "memize": "^1.0.5" + "memize": "^1.0.5", + "moment": "^2.22.1", + "mousetrap": "^1.6.2", + "re-resizable": "^4.7.1", + "react-click-outside": "^2.3.1", + "rememo": "^3.0.0", + "tinycolor2": "^1.4.1", + "uuid": "^3.1.0" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.1.2", + "bundled": true, + "requires": { + "regenerator-runtime": "^0.12.0" + } + }, + "@wordpress/a11y": { + "version": "2.0.2", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "@wordpress/dom-ready": "^2.0.2" + } + }, + "@wordpress/api-fetch": { + "version": "2.1.0", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "@wordpress/hooks": "^2.0.2", + "@wordpress/i18n": "^3.0.1", + "@wordpress/url": "^2.1.0" + }, + "dependencies": { + "@wordpress/url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/url/-/url-2.1.0.tgz", + "integrity": "sha512-MPWFszPleQ+ofDE8ZMpVLOwK/yAjf6L9f7F9wxE82rQjRzUSkrs+Z7Q9ShYiD5HT7o4J96PY9S0XnoHW/XKnDg==", + "requires": { + "@babel/runtime": "^7.0.0", + "qs": "^6.5.2" + } + } + } + }, + "@wordpress/compose": { + "version": "2.0.2", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "@wordpress/element": "^2.1.1", + "@wordpress/is-shallow-equal": "^1.1.4", + "lodash": "^4.17.10" + } + }, + "@wordpress/deprecated": { + "version": "2.0.2", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "@wordpress/hooks": "^2.0.2" + } + }, + "@wordpress/dom": { + "version": "2.0.4", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "lodash": "^4.17.10" + } + }, + "@wordpress/dom-ready": { + "version": "2.0.2", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "@wordpress/element": { + "version": "2.1.4", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "@wordpress/escape-html": "^1.0.1", + "lodash": "^4.17.10", + "react": "^16.4.1", + "react-dom": "^16.4.1" + } + }, + "@wordpress/escape-html": { + "version": "1.0.1", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "@wordpress/hooks": { + "version": "2.0.2", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "@wordpress/i18n": { + "version": "3.0.1", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "gettext-parser": "^1.3.1", + "jed": "^1.1.1", + "lodash": "^4.17.10", + "memize": "^1.0.5" + } + }, + "@wordpress/is-shallow-equal": { + "version": "1.1.4", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "@wordpress/keycodes": { + "version": "2.0.2", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "lodash": "^4.17.10" + } + }, + "@wordpress/url": { + "version": "2.0.2", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "qs": "^6.5.2" + } + }, + "asap": { + "version": "2.0.6", + "bundled": true + }, + "babel-runtime": { + "version": "6.26.0", + "bundled": true, + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + } + } + }, + "classnames": { + "version": "2.2.6", + "bundled": true + }, + "clipboard": { + "version": "1.7.1", + "bundled": true, + "requires": { + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" + } + }, + "core-js": { + "version": "2.5.7", + "bundled": true + }, + "create-react-context": { + "version": "0.2.3", + "bundled": true, + "requires": { + "fbjs": "^0.8.0", + "gud": "^1.0.0" + } + }, + "delegate": { + "version": "3.2.0", + "bundled": true + }, + "diff": { + "version": "3.5.0", + "bundled": true + }, + "dom-scroll-into-view": { + "version": "1.2.1", + "bundled": true + }, + "encoding": { + "version": "0.1.12", + "bundled": true, + "requires": { + "iconv-lite": "~0.4.13" + } + }, + "fbjs": { + "version": "0.8.17", + "bundled": true, + "requires": { + "core-js": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" + }, + "dependencies": { + "core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" + } + } + }, + "gettext-parser": { + "version": "1.4.0", + "bundled": true, + "requires": { + "encoding": "^0.1.12", + "safe-buffer": "^5.1.1" + } + }, + "good-listener": { + "version": "1.2.2", + "bundled": true, + "requires": { + "delegate": "^3.1.2" + } + }, + "gud": { + "version": "1.0.0", + "bundled": true + }, + "hoist-non-react-statics": { + "version": "1.2.0", + "bundled": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "is-stream": { + "version": "1.1.0", + "bundled": true + }, + "isomorphic-fetch": { + "version": "2.2.1", + "bundled": true, + "requires": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + } + }, + "jed": { + "version": "1.1.1", + "bundled": true + }, + "js-tokens": { + "version": "4.0.0", + "bundled": true + }, + "lodash": { + "version": "4.17.11", + "bundled": true + }, + "loose-envify": { + "version": "1.4.0", + "bundled": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "material-colors": { + "version": "1.2.6", + "bundled": true + }, + "memize": { + "version": "1.0.5", + "bundled": true + }, + "moment": { + "version": "2.22.2", + "bundled": true + }, + "mousetrap": { + "version": "1.6.2", + "bundled": true + }, + "node-fetch": { + "version": "1.7.3", + "bundled": true, + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, + "object-assign": { + "version": "4.1.1", + "bundled": true + }, + "popper.js": { + "version": "1.14.4", + "bundled": true + }, + "promise": { + "version": "7.3.1", + "bundled": true, + "requires": { + "asap": "~2.0.3" + } + }, + "prop-types": { + "version": "15.6.2", + "bundled": true, + "requires": { + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" + } + }, + "qs": { + "version": "6.5.2", + "bundled": true + }, + "re-resizable": { + "version": "4.9.1", + "bundled": true + }, + "react": { + "version": "16.5.2", + "bundled": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "schedule": "^0.5.0" + } + }, + "react-click-outside": { + "version": "2.3.1", + "bundled": true, + "requires": { + "hoist-non-react-statics": "^1.2.0" + } + }, + "react-color": { + "version": "2.14.1", + "bundled": true, + "requires": { + "lodash": "^4.0.1", + "material-colors": "^1.2.1", + "prop-types": "^15.5.10", + "reactcss": "^1.2.0", + "tinycolor2": "^1.4.1" + } + }, + "react-datepicker": { + "version": "1.7.0", + "bundled": true, + "requires": { + "classnames": "^2.2.5", + "prop-types": "^15.6.0", + "react-onclickoutside": "^6.7.1", + "react-popper": "^1.0.2" + } + }, + "react-dom": { + "version": "16.5.2", + "bundled": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "schedule": "^0.5.0" + } + }, + "react-onclickoutside": { + "version": "6.7.1", + "bundled": true + }, + "react-popper": { + "version": "1.0.2", + "bundled": true, + "requires": { + "babel-runtime": "6.x.x", + "create-react-context": "^0.2.1", + "popper.js": "^1.14.1", + "prop-types": "^15.6.1", + "typed-styles": "^0.0.5", + "warning": "^3.0.0" + } + }, + "reactcss": { + "version": "1.2.3", + "bundled": true, + "requires": { + "lodash": "^4.0.1" + } + }, + "regenerator-runtime": { + "version": "0.12.1", + "bundled": true + }, + "rememo": { + "version": "3.0.0", + "bundled": true + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true + }, + "schedule": { + "version": "0.5.0", + "bundled": true, + "requires": { + "object-assign": "^4.1.1" + } + }, + "select": { + "version": "1.1.2", + "bundled": true + }, + "setimmediate": { + "version": "1.0.5", + "bundled": true + }, + "tiny-emitter": { + "version": "2.0.2", + "bundled": true + }, + "tinycolor2": { + "version": "1.4.1", + "bundled": true + }, + "typed-styles": { + "version": "0.0.5", + "bundled": true + }, + "ua-parser-js": { + "version": "0.7.18", + "bundled": true + }, + "uuid": { + "version": "3.3.2", + "bundled": true + }, + "warning": { + "version": "3.0.0", + "bundled": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, + "whatwg-fetch": { + "version": "3.0.0", + "bundled": true + } } }, - "@wordpress/keycodes": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/keycodes/-/keycodes-2.0.2.tgz", - "integrity": "sha512-miMB6uvKZzZmgTb7qSr0NBOadWJ9Eb5Tak/+DRsVrgt9RP4zeCh9Le2T7hOWvNPU/54x2v1eHRrU0L+JDm2JAA==", + "@wordpress/compose": { + "version": "file:node_modules/@wordpress/compose", + "integrity": "sha512-bbf+4nph+/rFBou7PTUyx8rwHVR08ymBgxnmShGTTjuiVxcrz0Gu7Wu2wxulsZobOYaiqvQkCEHKceNsBxJwiA==", "requires": { "@babel/runtime": "^7.0.0", + "@wordpress/element": "^2.1.4", + "@wordpress/is-shallow-equal": "^1.1.4", "lodash": "^4.17.10" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.1.2", + "bundled": true, + "requires": { + "regenerator-runtime": "^0.12.0" + } + }, + "@wordpress/element": { + "version": "2.1.4", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "@wordpress/escape-html": "^1.0.1", + "lodash": "^4.17.10", + "react": "^16.4.1", + "react-dom": "^16.4.1" + } + }, + "@wordpress/escape-html": { + "version": "1.0.1", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "@wordpress/is-shallow-equal": { + "version": "1.1.4", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "js-tokens": { + "version": "4.0.0", + "bundled": true + }, + "lodash": { + "version": "4.17.11", + "bundled": true + }, + "loose-envify": { + "version": "1.4.0", + "bundled": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "object-assign": { + "version": "4.1.1", + "bundled": true + }, + "prop-types": { + "version": "15.6.2", + "bundled": true, + "requires": { + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" + } + }, + "react": { + "version": "16.5.2", + "bundled": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "schedule": "^0.5.0" + } + }, + "react-dom": { + "version": "16.5.2", + "bundled": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "schedule": "^0.5.0" + } + }, + "regenerator-runtime": { + "version": "0.12.1", + "bundled": true + }, + "schedule": { + "version": "0.5.0", + "bundled": true, + "requires": { + "object-assign": "^4.1.1" + } + } } }, - "@wordpress/nux": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/nux/-/nux-2.0.2.tgz", - "integrity": "sha512-N8kUsNvULU/j7D0gIRmPxdC7TJiYwcRLUygI25qAZ/FHYDMiFrzR9ZWkm6rDyDG3i2H8++99Cnyq8L9kX6kDCg==", + "@wordpress/core-data": { + "version": "file:node_modules/@wordpress/core-data", + "integrity": "sha512-7JzU9f+bCAg1oT0IYu7QPO+C5tP8rGN3BodZmbqJOut8DGiMSzDYdfVwwltKzKJmTBeuitYuSK48sXBLSoJb7Q==", "requires": { "@babel/runtime": "^7.0.0", - "@wordpress/components": "^4.1.0", - "@wordpress/compose": "^2.0.2", - "@wordpress/data": "^2.1.1", - "@wordpress/element": "^2.1.1", - "@wordpress/i18n": "^3.0.1", + "@wordpress/api-fetch": "^2.1.0", + "@wordpress/data": "^2.1.4", + "equivalent-key-map": "^0.2.1", "lodash": "^4.17.10", "rememo": "^3.0.0" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.1.2", + "bundled": true, + "requires": { + "regenerator-runtime": "^0.12.0" + } + }, + "@wordpress/api-fetch": { + "version": "2.1.0", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "@wordpress/hooks": "^2.0.2", + "@wordpress/i18n": "^3.0.1", + "@wordpress/url": "^2.1.0" + }, + "dependencies": { + "@wordpress/url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/url/-/url-2.1.0.tgz", + "integrity": "sha512-MPWFszPleQ+ofDE8ZMpVLOwK/yAjf6L9f7F9wxE82rQjRzUSkrs+Z7Q9ShYiD5HT7o4J96PY9S0XnoHW/XKnDg==", + "requires": { + "@babel/runtime": "^7.0.0", + "qs": "^6.5.2" + } + } + } + }, + "@wordpress/compose": { + "version": "2.0.5", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "@wordpress/element": "^2.1.4", + "@wordpress/is-shallow-equal": "^1.1.4", + "lodash": "^4.17.10" + } + }, + "@wordpress/data": { + "version": "2.1.4", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "@wordpress/compose": "^2.0.5", + "@wordpress/deprecated": "^2.0.2", + "@wordpress/element": "^2.1.4", + "@wordpress/is-shallow-equal": "^1.1.4", + "@wordpress/redux-routine": "^3.0.3", + "equivalent-key-map": "^0.2.0", + "is-promise": "^2.1.0", + "lodash": "^4.17.10", + "redux": "^4.0.0" + } + }, + "@wordpress/deprecated": { + "version": "2.0.2", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "@wordpress/hooks": "^2.0.2" + } + }, + "@wordpress/element": { + "version": "2.1.4", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "@wordpress/escape-html": "^1.0.1", + "lodash": "^4.17.10", + "react": "^16.4.1", + "react-dom": "^16.4.1" + } + }, + "@wordpress/escape-html": { + "version": "1.0.1", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "@wordpress/hooks": { + "version": "2.0.2", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "@wordpress/i18n": { + "version": "3.0.1", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "gettext-parser": "^1.3.1", + "jed": "^1.1.1", + "lodash": "^4.17.10", + "memize": "^1.0.5" + } + }, + "@wordpress/is-shallow-equal": { + "version": "1.1.4", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "@wordpress/redux-routine": { + "version": "3.0.3", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "is-promise": "^2.1.0", + "rungen": "^0.3.2" + } + }, + "@wordpress/url": { + "version": "2.0.2", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "qs": "^6.5.2" + } + }, + "encoding": { + "version": "0.1.12", + "bundled": true, + "requires": { + "iconv-lite": "~0.4.13" + } + }, + "equivalent-key-map": { + "version": "0.2.2", + "bundled": true + }, + "gettext-parser": { + "version": "1.4.0", + "bundled": true, + "requires": { + "encoding": "^0.1.12", + "safe-buffer": "^5.1.1" + } + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "is-promise": { + "version": "2.1.0", + "bundled": true + }, + "jed": { + "version": "1.1.1", + "bundled": true + }, + "js-tokens": { + "version": "4.0.0", + "bundled": true + }, + "lodash": { + "version": "4.17.11", + "bundled": true + }, + "loose-envify": { + "version": "1.4.0", + "bundled": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "memize": { + "version": "1.0.5", + "bundled": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true + }, + "prop-types": { + "version": "15.6.2", + "bundled": true, + "requires": { + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" + } + }, + "qs": { + "version": "6.5.2", + "bundled": true + }, + "react": { + "version": "16.5.2", + "bundled": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "schedule": "^0.5.0" + } + }, + "react-dom": { + "version": "16.5.2", + "bundled": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "schedule": "^0.5.0" + } + }, + "redux": { + "version": "4.0.1", + "bundled": true, + "requires": { + "loose-envify": "^1.4.0", + "symbol-observable": "^1.2.0" + } + }, + "regenerator-runtime": { + "version": "0.12.1", + "bundled": true + }, + "rememo": { + "version": "3.0.0", + "bundled": true + }, + "rungen": { + "version": "0.3.2", + "bundled": true + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true + }, + "schedule": { + "version": "0.5.0", + "bundled": true, + "requires": { + "object-assign": "^4.1.1" + } + }, + "symbol-observable": { + "version": "1.2.0", + "bundled": true + } } }, - "@wordpress/plugins": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/plugins/-/plugins-2.0.2.tgz", - "integrity": "sha512-j/2DjkxarAgbjFPUz+cniji16MQmYX/WietVTmjsQ4l+65wjZtvwMmgcJFw8P9t4P22MECeWuvxRmHI7RS/SLQ==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/compose": "^2.0.2", - "@wordpress/element": "^2.1.1", - "@wordpress/hooks": "^2.0.2", - "lodash": "^4.17.10" - } - }, - "@wordpress/redux-routine": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@wordpress/redux-routine/-/redux-routine-3.0.1.tgz", - "integrity": "sha512-BSg/0nrGy9u1ZFNNrsESo6KQYsIUBrlsTVi5gExta+o9uamHTXKAXhasq+wnjm4GqnPkdYck6zNQ/xbeqxNvgA==", + "@wordpress/data": { + "version": "file:node_modules/@wordpress/data", + "integrity": "sha512-Emfhszi7huasdDhngwk9HvRLUiotCNo9mDDk2Q9VGpGb9SfpQp+84PvenhreiZtezUR+7nUnSQuAJ2d8rUP37Q==", "requires": { "@babel/runtime": "^7.0.0", + "@wordpress/deprecated": "^2.0.2", + "@wordpress/element": "^2.1.4", + "@wordpress/is-shallow-equal": "^1.1.4", + "@wordpress/redux-routine": "^3.0.3", + "equivalent-key-map": "^0.2.0", "is-promise": "^2.1.0", - "rungen": "^0.3.2" - } - }, - "@wordpress/shortcode": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/shortcode/-/shortcode-2.0.2.tgz", - "integrity": "sha512-mztQ5l7l1ULZ8rMqlOD/mrLSXXFvwDPdCBCBB+3YGl8zSnCZ1S9X1SIAjoVLpV9uRMm1CZL4w4hvhmi22F4Wiw==", - "requires": { - "@babel/runtime": "^7.0.0", "lodash": "^4.17.10", - "memize": "^1.0.5" - } - }, - "@wordpress/token-list": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/token-list/-/token-list-1.0.2.tgz", - "integrity": "sha512-hyk3xsLB1OlS52kFlR9PcSzvD6fkB2uOG4Uchs1pd304M/G3WTdD6iPiRVZeMmpWbwMq9KFtu9f8hwUzQTrTow==", - "requires": { - "@babel/runtime": "^7.0.0", - "lodash": "^4.17.10" + "redux": "^4.0.0" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.1.2", + "bundled": true, + "requires": { + "regenerator-runtime": "^0.12.0" + } + }, + "@wordpress/compose": { + "version": "2.0.2", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "@wordpress/element": "^2.1.1", + "@wordpress/is-shallow-equal": "^1.1.4", + "lodash": "^4.17.10" + } + }, + "@wordpress/deprecated": { + "version": "2.0.2", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "@wordpress/hooks": "^2.0.2" + } + }, + "@wordpress/element": { + "version": "2.1.4", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "@wordpress/escape-html": "^1.0.1", + "lodash": "^4.17.10", + "react": "^16.4.1", + "react-dom": "^16.4.1" + } + }, + "@wordpress/escape-html": { + "version": "1.0.1", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "@wordpress/hooks": { + "version": "2.0.2", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "@wordpress/is-shallow-equal": { + "version": "1.1.4", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "@wordpress/redux-routine": { + "version": "3.0.3", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "is-promise": "^2.1.0", + "rungen": "^0.3.2" + } + }, + "equivalent-key-map": { + "version": "0.2.2", + "bundled": true + }, + "is-promise": { + "version": "2.1.0", + "bundled": true + }, + "js-tokens": { + "version": "4.0.0", + "bundled": true + }, + "lodash": { + "version": "4.17.11", + "bundled": true + }, + "loose-envify": { + "version": "1.4.0", + "bundled": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "object-assign": { + "version": "4.1.1", + "bundled": true + }, + "prop-types": { + "version": "15.6.2", + "bundled": true, + "requires": { + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" + } + }, + "react": { + "version": "16.5.2", + "bundled": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "schedule": "^0.5.0" + } + }, + "react-dom": { + "version": "16.5.2", + "bundled": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "schedule": "^0.5.0" + } + }, + "redux": { + "version": "4.0.1", + "bundled": true, + "requires": { + "loose-envify": "^1.4.0", + "symbol-observable": "^1.2.0" + } + }, + "regenerator-runtime": { + "version": "0.12.1", + "bundled": true + }, + "rungen": { + "version": "0.3.2", + "bundled": true + }, + "schedule": { + "version": "0.5.0", + "bundled": true, + "requires": { + "object-assign": "^4.1.1" + } + }, + "symbol-observable": { + "version": "1.2.0", + "bundled": true + } } }, - "@wordpress/url": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/url/-/url-2.0.2.tgz", - "integrity": "sha512-bGmhswKeTTmYIwjH4ekjSDkOTq/kzN4dXi41rXAcjPnO3utV5mEc9GBORGicZNOXv0CksOSP4Cez0vnAgfqRaQ==", + "@wordpress/date": { + "version": "file:node_modules/@wordpress/date", + "integrity": "sha512-ZnIEZT3sp+H2dr4apdoZnM9MhN6FpnMZ2zB+h8KuKExJufu9EUyW4grhEvgCTloJbzXNKCN5eolqeYq9I0pWog==", "requires": { "@babel/runtime": "^7.0.0", - "qs": "^6.5.2" + "moment": "^2.22.1", + "moment-timezone": "^0.5.16" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.1.2", + "bundled": true, + "requires": { + "regenerator-runtime": "^0.12.0" + } + }, + "moment": { + "version": "2.22.2", + "bundled": true + }, + "moment-timezone": { + "version": "0.5.21", + "bundled": true, + "requires": { + "moment": ">= 2.9.0" + } + }, + "regenerator-runtime": { + "version": "0.12.1", + "bundled": true + } } }, - "@wordpress/viewport": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/viewport/-/viewport-2.0.2.tgz", - "integrity": "sha512-2NzlLfGiWdUCc3tAGEORZQqDmnaKqwtZVXaKRmF+6HpX8UlgkKDPqKQVcpq7DqxlcBNcL0GPwFYUaYQPChfUiw==", + "@wordpress/deprecated": { + "version": "file:node_modules/@wordpress/deprecated", + "integrity": "sha512-5qNehHD7/duvouuGjMdGREQORs9LFMVkyFysfWvafZ919zAl0DAKEXsBoxcMSvvqBqCf5MKJBnQBVY4DeS6AEg==", "requires": { "@babel/runtime": "^7.0.0", - "@wordpress/compose": "^2.0.2", - "@wordpress/data": "^2.1.1", - "@wordpress/element": "^2.1.1", - "lodash": "^4.17.10" + "@wordpress/hooks": "^2.0.2" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.1.2", + "bundled": true, + "requires": { + "regenerator-runtime": "^0.12.0" + } + }, + "@wordpress/hooks": { + "version": "2.0.2", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "regenerator-runtime": { + "version": "0.12.1", + "bundled": true + } } }, - "@wordpress/wordcount": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/wordcount/-/wordcount-2.0.2.tgz", - "integrity": "sha512-FQ9mU/NsEB+IczD8roBGes9fJlZdTtdNhftdoCw32/lpUgP/bjA736NIPtNRedry+VBFykHqUf0CygJ0TgaOKA==", + "@wordpress/dom": { + "version": "file:node_modules/@wordpress/dom", + "integrity": "sha512-uW/yeWayoSu6uUA+xrM+yCbNJc3oQfga1Y1PUgXvowv0ydn5Qhgh2Dj07ANgg1AncZqFZsObPerBFNloaJhsvQ==", "requires": { "@babel/runtime": "^7.0.0", "lodash": "^4.17.10" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.1.2", + "bundled": true, + "requires": { + "regenerator-runtime": "^0.12.0" + } + }, + "lodash": { + "version": "4.17.11", + "bundled": true + }, + "regenerator-runtime": { + "version": "0.12.1", + "bundled": true + } } }, - "redux": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.0.tgz", - "integrity": "sha512-NnnHF0h0WVE/hXyrB6OlX67LYRuaf/rJcbWvnHHEPCF/Xa/AZpwhs/20WyqzQae5x4SD2F9nPObgBh2rxAgLiA==", - "requires": { - "loose-envify": "^1.1.0", - "symbol-observable": "^1.2.0" - } - }, - "symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" - } - } - }, - "@wordpress/editor": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@wordpress/editor/-/editor-4.0.1.tgz", - "integrity": "sha512-2bqB8TFiVGcGl71Fi9ZHcPg96aPgIzj0/VM4Pw7zcMLwrL+TAkCBX4rRc8xv7g1TL1dwXZhHbG4CAe3UCb7msw==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/a11y": "^2.0.2", - "@wordpress/api-fetch": "^2.0.2", - "@wordpress/blob": "^2.0.2", - "@wordpress/blocks": "^4.0.1", - "@wordpress/components": "^4.1.0", - "@wordpress/compose": "^2.0.2", - "@wordpress/core-data": "^2.0.2", - "@wordpress/data": "^2.1.1", - "@wordpress/date": "^2.0.2", - "@wordpress/deprecated": "^2.0.2", - "@wordpress/dom": "^2.0.2", - "@wordpress/element": "^2.1.1", - "@wordpress/hooks": "^2.0.2", - "@wordpress/html-entities": "^2.0.2", - "@wordpress/i18n": "^3.0.1", - "@wordpress/is-shallow-equal": "^1.1.4", - "@wordpress/keycodes": "^2.0.2", - "@wordpress/nux": "^2.0.2", - "@wordpress/token-list": "^1.0.2", - "@wordpress/url": "^2.0.2", - "@wordpress/viewport": "^2.0.2", - "@wordpress/wordcount": "^2.0.2", - "classnames": "^2.2.5", - "dom-scroll-into-view": "^1.2.1", - "inherits": "^2.0.3", - "jquery": "^3.3.1", - "lodash": "^4.17.10", - "memize": "^1.0.5", - "react-autosize-textarea": "^3.0.2", - "redux-multi": "^0.1.12", - "redux-optimist": "^1.0.0", - "refx": "^3.0.0", - "rememo": "^3.0.0", - "tinycolor2": "^1.4.1", - "tinymce": "^4.7.2", - "traverse": "^0.6.6", - "uuid": "^3.1.0" - }, - "dependencies": { - "@wordpress/components": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@wordpress/components/-/components-4.1.0.tgz", - "integrity": "sha512-MWWrdg1HOojJZEY9hgGTZrgbHzuk2F32/f4qBE0L6Q2wfP48tFjvO8952IJ2vxmtGrXK8PfDuvOGJy2K944LBA==", + "@wordpress/element": { + "version": "file:node_modules/@wordpress/element", + "integrity": "sha512-y/RpvYNd2VeLWXemxEXdMOnUa+HUC0sde2o7gEHKud0LB14xFU1ASif/pz/LP+vSvExcvhj8cu4Sq8tKDzRRPw==", "requires": { "@babel/runtime": "^7.0.0", - "@wordpress/a11y": "^2.0.2", - "@wordpress/api-fetch": "^2.0.2", - "@wordpress/compose": "^2.0.2", - "@wordpress/deprecated": "^2.0.2", - "@wordpress/dom": "^2.0.2", - "@wordpress/element": "^2.1.1", - "@wordpress/hooks": "^2.0.2", - "@wordpress/i18n": "^3.0.1", - "@wordpress/is-shallow-equal": "^1.1.4", - "@wordpress/keycodes": "^2.0.2", - "@wordpress/url": "^2.0.2", - "classnames": "^2.2.5", - "clipboard": "^1.7.1", - "diff": "^3.5.0", - "dom-scroll-into-view": "^1.2.1", + "@wordpress/escape-html": "^1.0.1", "lodash": "^4.17.10", - "memize": "^1.0.5", - "moment": "^2.22.1", - "mousetrap": "^1.6.2", - "re-resizable": "^4.7.1", - "react-click-outside": "^2.3.1", - "react-color": "^2.13.4", - "react-datepicker": "^1.4.1", - "rememo": "^3.0.0", - "uuid": "^3.1.0" + "react": "^16.4.1", + "react-dom": "^16.4.1" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.1.2", + "bundled": true, + "requires": { + "regenerator-runtime": "^0.12.0" + } + }, + "@wordpress/escape-html": { + "version": "1.0.1", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "js-tokens": { + "version": "4.0.0", + "bundled": true + }, + "lodash": { + "version": "4.17.11", + "bundled": true + }, + "loose-envify": { + "version": "1.4.0", + "bundled": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "object-assign": { + "version": "4.1.1", + "bundled": true + }, + "prop-types": { + "version": "15.6.2", + "bundled": true, + "requires": { + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" + } + }, + "react": { + "version": "16.5.2", + "bundled": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "schedule": "^0.5.0" + } + }, + "react-dom": { + "version": "16.5.2", + "bundled": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "schedule": "^0.5.0" + } + }, + "regenerator-runtime": { + "version": "0.12.1", + "bundled": true + }, + "schedule": { + "version": "0.5.0", + "bundled": true, + "requires": { + "object-assign": "^4.1.1" + } + } } }, - "@wordpress/compose": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-2.0.2.tgz", - "integrity": "sha512-BBii0uIRHJ63Gu3zpPFjy6Qda+w/Ie4cHx5tN3hmFNWPENhSlosix1eXbxvE3lSEerW509A1Bt8Tn1XlePTElg==", + "@wordpress/hooks": { + "version": "file:node_modules/@wordpress/hooks", + "integrity": "sha512-yWdkjw6YP2kDF+cjjRfkI2cjTRiETaRFMwJpoqnQWxfay1oBtgvaGuRrYrm0rCxxOqCD/4/di2co5VHQxP9Rhw==", "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/element": "^2.1.1", - "@wordpress/is-shallow-equal": "^1.1.4", - "lodash": "^4.17.10" + "@babel/runtime": "^7.0.0" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.1.2", + "bundled": true, + "requires": { + "regenerator-runtime": "^0.12.0" + } + }, + "regenerator-runtime": { + "version": "0.12.1", + "bundled": true + } } }, "@wordpress/html-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/html-entities/-/html-entities-2.0.2.tgz", + "version": "file:node_modules/@wordpress/html-entities", "integrity": "sha512-cxG7YjH9EMfZyeLJAd/Vc1nFJxitMSzybv71iMPP3Dqqgz3jixX6oSe4ukTqfoOKBaF7pY7LzS6eTKu7KAmyZw==", "requires": { "@babel/runtime": "^7.0.0" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.1.2", + "bundled": true, + "requires": { + "regenerator-runtime": "^0.12.0" + } + }, + "regenerator-runtime": { + "version": "0.12.1", + "bundled": true + } } }, - "@wordpress/nux": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/nux/-/nux-2.0.2.tgz", - "integrity": "sha512-N8kUsNvULU/j7D0gIRmPxdC7TJiYwcRLUygI25qAZ/FHYDMiFrzR9ZWkm6rDyDG3i2H8++99Cnyq8L9kX6kDCg==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/components": "^4.1.0", - "@wordpress/compose": "^2.0.2", - "@wordpress/data": "^2.1.1", - "@wordpress/element": "^2.1.1", - "@wordpress/i18n": "^3.0.1", - "lodash": "^4.17.10", - "rememo": "^3.0.0" - } - }, - "@wordpress/url": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/url/-/url-2.0.2.tgz", - "integrity": "sha512-bGmhswKeTTmYIwjH4ekjSDkOTq/kzN4dXi41rXAcjPnO3utV5mEc9GBORGicZNOXv0CksOSP4Cez0vnAgfqRaQ==", - "requires": { - "@babel/runtime": "^7.0.0", - "qs": "^6.5.2" - } - } - } - }, - "@wordpress/element": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@wordpress/element/-/element-2.1.1.tgz", - "integrity": "sha512-npZP5oAhtG9qqsDNCulSn9jggw8g76Kfp5zmNy1uNfvY+gAhDSDqrO4MC7MCquWygiSxfFWob2ECSCbG4RMFSg==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/escape-html": "^1.0.0-beta.1", - "lodash": "^4.17.10", - "react": "^16.4.1", - "react-dom": "^16.4.1" - } - }, - "@wordpress/escape-html": { - "version": "1.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@wordpress/escape-html/-/escape-html-1.0.0-beta.1.tgz", - "integrity": "sha512-1X5e3VUR0i81yE5G9gNAjXGSoaMIE0wHOJmNVE9EeroJDHPNLSU81kqwMDr/KYisvpD9qrgs74NI/w8U8Vuwiw==", - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/hooks": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-2.0.2.tgz", - "integrity": "sha512-yWdkjw6YP2kDF+cjjRfkI2cjTRiETaRFMwJpoqnQWxfay1oBtgvaGuRrYrm0rCxxOqCD/4/di2co5VHQxP9Rhw==", - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/html-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/html-entities/-/html-entities-2.0.2.tgz", - "integrity": "sha512-cxG7YjH9EMfZyeLJAd/Vc1nFJxitMSzybv71iMPP3Dqqgz3jixX6oSe4ukTqfoOKBaF7pY7LzS6eTKu7KAmyZw==", - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/i18n": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-3.0.1.tgz", - "integrity": "sha512-Ut6ihDjcZ7zpU44/WurZrFxrLcMl3Gq+hW8Hb6MTF6+X6Y2fd7QFu3lMvopYNwF8gxWtjvH5n3NIQ6B9DLt7Ng==", - "requires": { - "@babel/runtime": "^7.0.0", - "gettext-parser": "^1.3.1", - "jed": "^1.1.1", - "lodash": "^4.17.10", - "memize": "^1.0.5" - } - }, - "@wordpress/is-shallow-equal": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@wordpress/is-shallow-equal/-/is-shallow-equal-1.1.4.tgz", - "integrity": "sha512-ihJrYrW+G9GWtQjyB44DVKMCoiTTYPl5T/g1Ix9PMrKl2rk5uVbJw9yMmhik/jTIQqubpzhxGtrqsddwuUH1sw==", - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/keycodes": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/keycodes/-/keycodes-2.0.2.tgz", - "integrity": "sha512-miMB6uvKZzZmgTb7qSr0NBOadWJ9Eb5Tak/+DRsVrgt9RP4zeCh9Le2T7hOWvNPU/54x2v1eHRrU0L+JDm2JAA==", - "requires": { - "@babel/runtime": "^7.0.0", - "lodash": "^4.17.10" - } - }, - "@wordpress/library-export-default-webpack-plugin": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@wordpress/library-export-default-webpack-plugin/-/library-export-default-webpack-plugin-1.0.4.tgz", - "integrity": "sha512-7+Hjw/xqFKXkMKCMz2Yb5jkQW6hHkihfIw0qvHLUPvo5eWrha8l+gUYVgh2is9p/17tFlSvt0zUK4IhWomUwsw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.0.0", - "lodash": "^4.17.10", - "webpack-sources": "^1.1.0" - } - }, - "@wordpress/list-reusable-blocks": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@wordpress/list-reusable-blocks/-/list-reusable-blocks-1.1.0.tgz", - "integrity": "sha512-NqLSFpCt3r+ldV5B/xi4ZYhIfobXwJVFuhCaYBYIkf9xKZ5+Zv7pfiNzENEdJzh91Zu1b7wT6p45JGHTjB+S2Q==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/api-fetch": "^2.0.2", - "@wordpress/components": "^4.1.0", - "@wordpress/compose": "^2.0.2", - "@wordpress/element": "^2.1.1", - "@wordpress/i18n": "^3.0.1", - "lodash": "^4.17.10" - }, - "dependencies": { - "@wordpress/a11y": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/a11y/-/a11y-2.0.2.tgz", - "integrity": "sha512-YtO4GG5XQX/y+y9/9nnO7IZfyLfgSLXyRgvt9Om4LTUULF4VClol+x00zuQHcHUdQwINMnAkcG51ni9dkXbxgg==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/dom-ready": "^2.0.2" - } - }, - "@wordpress/api-fetch": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/api-fetch/-/api-fetch-2.0.2.tgz", - "integrity": "sha512-i+vDdoCxNAI9PpSLlLBg10JZq4cAJ3K/aVNxHUyK+Ps8cDUjEBITOV3A0+pnmumLCZgzs+LXIKq/kgNz+POqlA==", + "@wordpress/i18n": { + "version": "file:node_modules/@wordpress/i18n", + "integrity": "sha512-Ut6ihDjcZ7zpU44/WurZrFxrLcMl3Gq+hW8Hb6MTF6+X6Y2fd7QFu3lMvopYNwF8gxWtjvH5n3NIQ6B9DLt7Ng==", "requires": { "@babel/runtime": "^7.0.0", - "@wordpress/hooks": "^2.0.2", - "@wordpress/i18n": "^3.0.1" + "gettext-parser": "^1.3.1", + "jed": "^1.1.1", + "lodash": "^4.17.10", + "memize": "^1.0.5" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.1.2", + "bundled": true, + "requires": { + "regenerator-runtime": "^0.12.0" + } + }, + "encoding": { + "version": "0.1.12", + "bundled": true, + "requires": { + "iconv-lite": "~0.4.13" + } + }, + "gettext-parser": { + "version": "1.4.0", + "bundled": true, + "requires": { + "encoding": "^0.1.12", + "safe-buffer": "^5.1.1" + } + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "jed": { + "version": "1.1.1", + "bundled": true + }, + "lodash": { + "version": "4.17.11", + "bundled": true + }, + "memize": { + "version": "1.0.5", + "bundled": true + }, + "regenerator-runtime": { + "version": "0.12.1", + "bundled": true + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true + } } }, - "@wordpress/components": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@wordpress/components/-/components-4.1.0.tgz", - "integrity": "sha512-MWWrdg1HOojJZEY9hgGTZrgbHzuk2F32/f4qBE0L6Q2wfP48tFjvO8952IJ2vxmtGrXK8PfDuvOGJy2K944LBA==", + "@wordpress/is-shallow-equal": { + "version": "file:node_modules/@wordpress/is-shallow-equal", + "integrity": "sha512-ihJrYrW+G9GWtQjyB44DVKMCoiTTYPl5T/g1Ix9PMrKl2rk5uVbJw9yMmhik/jTIQqubpzhxGtrqsddwuUH1sw==", "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/a11y": "^2.0.2", - "@wordpress/api-fetch": "^2.0.2", - "@wordpress/compose": "^2.0.2", - "@wordpress/deprecated": "^2.0.2", - "@wordpress/dom": "^2.0.2", - "@wordpress/element": "^2.1.1", - "@wordpress/hooks": "^2.0.2", - "@wordpress/i18n": "^3.0.1", - "@wordpress/is-shallow-equal": "^1.1.4", - "@wordpress/keycodes": "^2.0.2", - "@wordpress/url": "^2.0.2", - "classnames": "^2.2.5", - "clipboard": "^1.7.1", - "diff": "^3.5.0", - "dom-scroll-into-view": "^1.2.1", - "lodash": "^4.17.10", - "memize": "^1.0.5", - "moment": "^2.22.1", - "mousetrap": "^1.6.2", - "re-resizable": "^4.7.1", - "react-click-outside": "^2.3.1", - "react-color": "^2.13.4", - "react-datepicker": "^1.4.1", - "rememo": "^3.0.0", - "uuid": "^3.1.0" + "@babel/runtime": "^7.0.0" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.1.2", + "bundled": true, + "requires": { + "regenerator-runtime": "^0.12.0" + } + }, + "regenerator-runtime": { + "version": "0.12.1", + "bundled": true + } } }, - "@wordpress/compose": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-2.0.2.tgz", - "integrity": "sha512-BBii0uIRHJ63Gu3zpPFjy6Qda+w/Ie4cHx5tN3hmFNWPENhSlosix1eXbxvE3lSEerW509A1Bt8Tn1XlePTElg==", + "@wordpress/keycodes": { + "version": "file:node_modules/@wordpress/keycodes", + "integrity": "sha512-miMB6uvKZzZmgTb7qSr0NBOadWJ9Eb5Tak/+DRsVrgt9RP4zeCh9Le2T7hOWvNPU/54x2v1eHRrU0L+JDm2JAA==", "requires": { "@babel/runtime": "^7.0.0", - "@wordpress/element": "^2.1.1", - "@wordpress/is-shallow-equal": "^1.1.4", "lodash": "^4.17.10" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.1.2", + "bundled": true, + "requires": { + "regenerator-runtime": "^0.12.0" + } + }, + "lodash": { + "version": "4.17.11", + "bundled": true + }, + "regenerator-runtime": { + "version": "0.12.1", + "bundled": true + } } }, - "@wordpress/deprecated": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/deprecated/-/deprecated-2.0.2.tgz", - "integrity": "sha512-5qNehHD7/duvouuGjMdGREQORs9LFMVkyFysfWvafZ919zAl0DAKEXsBoxcMSvvqBqCf5MKJBnQBVY4DeS6AEg==", + "@wordpress/nux": { + "version": "file:node_modules/@wordpress/nux", + "integrity": "sha512-22nYvccK0NPGZBegR55BTxbClXO8nSfHut+SSA1/CTPqX3yd//KPeAmGfgNCYH/lMz7RSRcj83oFEGpwrWWISQ==", "requires": { "@babel/runtime": "^7.0.0", - "@wordpress/hooks": "^2.0.2" + "@wordpress/components": "^4.2.1", + "@wordpress/compose": "^2.0.5", + "@wordpress/data": "^2.1.4", + "@wordpress/element": "^2.1.4", + "@wordpress/i18n": "^3.0.1", + "lodash": "^4.17.10", + "rememo": "^3.0.0" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.1.2", + "bundled": true, + "requires": { + "regenerator-runtime": "^0.12.0" + } + }, + "@wordpress/a11y": { + "version": "2.0.2", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "@wordpress/dom-ready": "^2.0.2" + } + }, + "@wordpress/api-fetch": { + "version": "2.1.0", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "@wordpress/hooks": "^2.0.2", + "@wordpress/i18n": "^3.0.1", + "@wordpress/url": "^2.1.0" + } + }, + "@wordpress/components": { + "version": "4.2.1", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "@wordpress/a11y": "^2.0.2", + "@wordpress/api-fetch": "^2.1.0", + "@wordpress/compose": "^2.0.5", + "@wordpress/deprecated": "^2.0.2", + "@wordpress/dom": "^2.0.4", + "@wordpress/element": "^2.1.4", + "@wordpress/hooks": "^2.0.2", + "@wordpress/i18n": "^3.0.1", + "@wordpress/is-shallow-equal": "^1.1.4", + "@wordpress/keycodes": "^2.0.2", + "@wordpress/url": "^2.1.0", + "classnames": "^2.2.5", + "clipboard": "^2.0.1", + "diff": "^3.5.0", + "dom-scroll-into-view": "^1.2.1", + "lodash": "^4.17.10", + "memize": "^1.0.5", + "moment": "^2.22.1", + "mousetrap": "^1.6.2", + "re-resizable": "^4.7.1", + "react-click-outside": "^2.3.1", + "react-dates": "^17.1.1", + "rememo": "^3.0.0", + "tinycolor2": "^1.4.1", + "uuid": "^3.1.0" + } + }, + "@wordpress/compose": { + "version": "2.0.5", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "@wordpress/element": "^2.1.4", + "@wordpress/is-shallow-equal": "^1.1.4", + "lodash": "^4.17.10" + } + }, + "@wordpress/data": { + "version": "2.1.4", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "@wordpress/compose": "^2.0.5", + "@wordpress/deprecated": "^2.0.2", + "@wordpress/element": "^2.1.4", + "@wordpress/is-shallow-equal": "^1.1.4", + "@wordpress/redux-routine": "^3.0.3", + "equivalent-key-map": "^0.2.0", + "is-promise": "^2.1.0", + "lodash": "^4.17.10", + "redux": "^4.0.0" + } + }, + "@wordpress/deprecated": { + "version": "2.0.2", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "@wordpress/hooks": "^2.0.2" + } + }, + "@wordpress/dom": { + "version": "2.0.4", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "lodash": "^4.17.10" + } + }, + "@wordpress/dom-ready": { + "version": "2.0.2", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "@wordpress/element": { + "version": "2.1.4", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "@wordpress/escape-html": "^1.0.1", + "lodash": "^4.17.10", + "react": "^16.4.1", + "react-dom": "^16.4.1" + } + }, + "@wordpress/escape-html": { + "version": "1.0.1", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "@wordpress/hooks": { + "version": "2.0.2", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "@wordpress/i18n": { + "version": "3.0.1", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "gettext-parser": "^1.3.1", + "jed": "^1.1.1", + "lodash": "^4.17.10", + "memize": "^1.0.5" + } + }, + "@wordpress/is-shallow-equal": { + "version": "1.1.4", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "@wordpress/keycodes": { + "version": "2.0.2", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "lodash": "^4.17.10" + } + }, + "@wordpress/redux-routine": { + "version": "3.0.3", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "is-promise": "^2.1.0", + "rungen": "^0.3.2" + } + }, + "@wordpress/url": { + "version": "2.1.0", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "qs": "^6.5.2" + } + }, + "airbnb-prop-types": { + "version": "2.11.0", + "bundled": true, + "requires": { + "array.prototype.find": "^2.0.4", + "function.prototype.name": "^1.1.0", + "has": "^1.0.3", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object.assign": "^4.1.0", + "object.entries": "^1.0.4", + "prop-types": "^15.6.2", + "prop-types-exact": "^1.2.0" + } + }, + "array.prototype.find": { + "version": "2.0.4", + "bundled": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.7.0" + } + }, + "array.prototype.flat": { + "version": "1.2.1", + "bundled": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.10.0", + "function-bind": "^1.1.1" + } + }, + "asap": { + "version": "2.0.6", + "bundled": true + }, + "brcast": { + "version": "2.0.2", + "bundled": true + }, + "classnames": { + "version": "2.2.6", + "bundled": true + }, + "clipboard": { + "version": "2.0.1", + "bundled": true, + "requires": { + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" + } + }, + "consolidated-events": { + "version": "2.0.2", + "bundled": true + }, + "core-js": { + "version": "1.2.7", + "bundled": true + }, + "deepmerge": { + "version": "1.5.2", + "bundled": true + }, + "define-properties": { + "version": "1.1.3", + "bundled": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "delegate": { + "version": "3.2.0", + "bundled": true + }, + "diff": { + "version": "3.5.0", + "bundled": true + }, + "direction": { + "version": "1.0.2", + "bundled": true + }, + "dom-scroll-into-view": { + "version": "1.2.1", + "bundled": true + }, + "encoding": { + "version": "0.1.12", + "bundled": true, + "requires": { + "iconv-lite": "~0.4.13" + } + }, + "equivalent-key-map": { + "version": "0.2.2", + "bundled": true + }, + "es-abstract": { + "version": "1.12.0", + "bundled": 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": { + "version": "1.2.0", + "bundled": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "fbjs": { + "version": "0.8.17", + "bundled": true, + "requires": { + "core-js": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" + } + }, + "function-bind": { + "version": "1.1.1", + "bundled": true + }, + "function.prototype.name": { + "version": "1.1.0", + "bundled": true, + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "is-callable": "^1.1.3" + } + }, + "gettext-parser": { + "version": "1.4.0", + "bundled": true, + "requires": { + "encoding": "^0.1.12", + "safe-buffer": "^5.1.1" + } + }, + "global-cache": { + "version": "1.2.1", + "bundled": true, + "requires": { + "define-properties": "^1.1.2", + "is-symbol": "^1.0.1" + } + }, + "good-listener": { + "version": "1.2.2", + "bundled": true, + "requires": { + "delegate": "^3.1.2" + } + }, + "has": { + "version": "1.0.3", + "bundled": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.0", + "bundled": true + }, + "hoist-non-react-statics": { + "version": "1.2.0", + "bundled": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "is-callable": { + "version": "1.1.4", + "bundled": true + }, + "is-date-object": { + "version": "1.0.1", + "bundled": true + }, + "is-promise": { + "version": "2.1.0", + "bundled": true + }, + "is-regex": { + "version": "1.0.4", + "bundled": true, + "requires": { + "has": "^1.0.1" + } + }, + "is-stream": { + "version": "1.1.0", + "bundled": true + }, + "is-symbol": { + "version": "1.0.2", + "bundled": true, + "requires": { + "has-symbols": "^1.0.0" + } + }, + "is-touch-device": { + "version": "1.0.1", + "bundled": true + }, + "isomorphic-fetch": { + "version": "2.2.1", + "bundled": true, + "requires": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + } + }, + "jed": { + "version": "1.1.1", + "bundled": true + }, + "js-tokens": { + "version": "4.0.0", + "bundled": true + }, + "lodash": { + "version": "4.17.11", + "bundled": true + }, + "loose-envify": { + "version": "1.4.0", + "bundled": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "memize": { + "version": "1.0.5", + "bundled": true + }, + "moment": { + "version": "2.22.2", + "bundled": true + }, + "mousetrap": { + "version": "1.6.2", + "bundled": true + }, + "node-fetch": { + "version": "1.7.3", + "bundled": true, + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, + "object-assign": { + "version": "4.1.1", + "bundled": true + }, + "object-is": { + "version": "1.0.1", + "bundled": true + }, + "object-keys": { + "version": "1.0.12", + "bundled": true + }, + "object.assign": { + "version": "4.1.0", + "bundled": true, + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.entries": { + "version": "1.0.4", + "bundled": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.6.1", + "function-bind": "^1.1.0", + "has": "^1.0.1" + } + }, + "object.values": { + "version": "1.0.4", + "bundled": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.6.1", + "function-bind": "^1.1.0", + "has": "^1.0.1" + } + }, + "promise": { + "version": "7.3.1", + "bundled": true, + "requires": { + "asap": "~2.0.3" + } + }, + "prop-types": { + "version": "15.6.2", + "bundled": true, + "requires": { + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" + } + }, + "prop-types-exact": { + "version": "1.2.0", + "bundled": true, + "requires": { + "has": "^1.0.3", + "object.assign": "^4.1.0", + "reflect.ownkeys": "^0.2.0" + } + }, + "qs": { + "version": "6.5.2", + "bundled": true + }, + "re-resizable": { + "version": "4.9.1", + "bundled": true + }, + "react": { + "version": "16.5.2", + "bundled": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "schedule": "^0.5.0" + } + }, + "react-addons-shallow-compare": { + "version": "15.6.2", + "bundled": true, + "requires": { + "fbjs": "^0.8.4", + "object-assign": "^4.1.0" + } + }, + "react-click-outside": { + "version": "2.3.1", + "bundled": true, + "requires": { + "hoist-non-react-statics": "^1.2.0" + } + }, + "react-dates": { + "version": "17.2.0", + "bundled": true, + "requires": { + "airbnb-prop-types": "^2.10.0", + "consolidated-events": "^1.1.1 || ^2.0.0", + "is-touch-device": "^1.0.1", + "lodash": "^4.1.1", + "object.assign": "^4.1.0", + "object.values": "^1.0.4", + "prop-types": "^15.6.1", + "react-addons-shallow-compare": "^15.6.2", + "react-moment-proptypes": "^1.6.0", + "react-outside-click-handler": "^1.2.0", + "react-portal": "^4.1.5", + "react-with-styles": "^3.2.0", + "react-with-styles-interface-css": "^4.0.2" + } + }, + "react-dom": { + "version": "16.5.2", + "bundled": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "schedule": "^0.5.0" + } + }, + "react-moment-proptypes": { + "version": "1.6.0", + "bundled": true, + "requires": { + "moment": ">=1.6.0" + } + }, + "react-outside-click-handler": { + "version": "1.2.2", + "bundled": true, + "requires": { + "airbnb-prop-types": "^2.10.0", + "consolidated-events": "^1.1.1 || ^2.0.0", + "object.values": "^1.0.4", + "prop-types": "^15.6.1" + } + }, + "react-portal": { + "version": "4.1.5", + "bundled": true, + "requires": { + "prop-types": "^15.5.8" + } + }, + "react-with-direction": { + "version": "1.3.0", + "bundled": true, + "requires": { + "airbnb-prop-types": "^2.8.1", + "brcast": "^2.0.2", + "deepmerge": "^1.5.1", + "direction": "^1.0.1", + "hoist-non-react-statics": "^2.3.1", + "object.assign": "^4.1.0", + "object.values": "^1.0.4", + "prop-types": "^15.6.0" + }, + "dependencies": { + "hoist-non-react-statics": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", + "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" + } + } + }, + "react-with-styles": { + "version": "3.2.1", + "bundled": true, + "requires": { + "deepmerge": "^1.5.2", + "hoist-non-react-statics": "^2.5.0", + "prop-types": "^15.6.1", + "react-with-direction": "^1.3.0" + }, + "dependencies": { + "hoist-non-react-statics": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", + "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" + } + } + }, + "react-with-styles-interface-css": { + "version": "4.0.3", + "bundled": true, + "requires": { + "array.prototype.flat": "^1.2.1", + "global-cache": "^1.2.1" + } + }, + "redux": { + "version": "4.0.1", + "bundled": true, + "requires": { + "loose-envify": "^1.4.0", + "symbol-observable": "^1.2.0" + } + }, + "reflect.ownkeys": { + "version": "0.2.0", + "bundled": true + }, + "regenerator-runtime": { + "version": "0.12.1", + "bundled": true + }, + "rememo": { + "version": "3.0.0", + "bundled": true + }, + "rungen": { + "version": "0.3.2", + "bundled": true + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true + }, + "schedule": { + "version": "0.5.0", + "bundled": true, + "requires": { + "object-assign": "^4.1.1" + } + }, + "select": { + "version": "1.1.2", + "bundled": true + }, + "setimmediate": { + "version": "1.0.5", + "bundled": true + }, + "symbol-observable": { + "version": "1.2.0", + "bundled": true + }, + "tiny-emitter": { + "version": "2.0.2", + "bundled": true + }, + "tinycolor2": { + "version": "1.4.1", + "bundled": true + }, + "ua-parser-js": { + "version": "0.7.18", + "bundled": true + }, + "uuid": { + "version": "3.3.2", + "bundled": true + }, + "whatwg-fetch": { + "version": "3.0.0", + "bundled": true + } } }, - "@wordpress/dom": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/dom/-/dom-2.0.2.tgz", - "integrity": "sha512-lLpxqgGd/oo7J5pw+420DpLovTLZIljKlwWX9EXWvNeBEuWlHkfvVHDBSweUUJtnoD3vVxDE+QfCqfHcMqJT9g==", + "@wordpress/token-list": { + "version": "file:node_modules/@wordpress/token-list", + "integrity": "sha512-hyk3xsLB1OlS52kFlR9PcSzvD6fkB2uOG4Uchs1pd304M/G3WTdD6iPiRVZeMmpWbwMq9KFtu9f8hwUzQTrTow==", "requires": { "@babel/runtime": "^7.0.0", "lodash": "^4.17.10" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.1.2", + "bundled": true, + "requires": { + "regenerator-runtime": "^0.12.0" + } + }, + "lodash": { + "version": "4.17.11", + "bundled": true + }, + "regenerator-runtime": { + "version": "0.12.1", + "bundled": true + } } }, - "@wordpress/dom-ready": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/dom-ready/-/dom-ready-2.0.2.tgz", - "integrity": "sha512-SENsbiIesC0Oz6qTLHpYxo6aW9/NgFYkXq4TGjUBA5LLNJmBf9AhPKX9rpgh8Y3+DKVobMdX8IKhfRrQYiqRiw==", - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/element": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@wordpress/element/-/element-2.1.1.tgz", - "integrity": "sha512-npZP5oAhtG9qqsDNCulSn9jggw8g76Kfp5zmNy1uNfvY+gAhDSDqrO4MC7MCquWygiSxfFWob2ECSCbG4RMFSg==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/escape-html": "^1.0.0-beta.1", - "lodash": "^4.17.10", - "react": "^16.4.1", - "react-dom": "^16.4.1" - } - }, - "@wordpress/hooks": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-2.0.2.tgz", - "integrity": "sha512-yWdkjw6YP2kDF+cjjRfkI2cjTRiETaRFMwJpoqnQWxfay1oBtgvaGuRrYrm0rCxxOqCD/4/di2co5VHQxP9Rhw==", - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/i18n": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-3.0.1.tgz", - "integrity": "sha512-Ut6ihDjcZ7zpU44/WurZrFxrLcMl3Gq+hW8Hb6MTF6+X6Y2fd7QFu3lMvopYNwF8gxWtjvH5n3NIQ6B9DLt7Ng==", + "@wordpress/url": { + "version": "file:node_modules/@wordpress/url", + "integrity": "sha512-MPWFszPleQ+ofDE8ZMpVLOwK/yAjf6L9f7F9wxE82rQjRzUSkrs+Z7Q9ShYiD5HT7o4J96PY9S0XnoHW/XKnDg==", "requires": { "@babel/runtime": "^7.0.0", - "gettext-parser": "^1.3.1", - "jed": "^1.1.1", - "lodash": "^4.17.10", - "memize": "^1.0.5" + "qs": "^6.5.2" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.1.2", + "bundled": true, + "requires": { + "regenerator-runtime": "^0.12.0" + } + }, + "qs": { + "version": "6.5.2", + "bundled": true + }, + "regenerator-runtime": { + "version": "0.12.1", + "bundled": true + } } }, - "@wordpress/keycodes": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/keycodes/-/keycodes-2.0.2.tgz", - "integrity": "sha512-miMB6uvKZzZmgTb7qSr0NBOadWJ9Eb5Tak/+DRsVrgt9RP4zeCh9Le2T7hOWvNPU/54x2v1eHRrU0L+JDm2JAA==", + "@wordpress/viewport": { + "version": "file:node_modules/@wordpress/viewport", + "integrity": "sha512-im0/L6+rwM8gtUuSRkzsPOH1pAwKWHLGfJXdnSuYSV1/K/e3szBLIlkHOK1q4YXkVzHxSSNDcnaHEuxbA/6rNA==", "requires": { "@babel/runtime": "^7.0.0", + "@wordpress/data": "^2.1.4", + "@wordpress/element": "^2.1.4", "lodash": "^4.17.10" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.1.2", + "bundled": true, + "requires": { + "regenerator-runtime": "^0.12.0" + } + }, + "@wordpress/compose": { + "version": "2.0.2", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "@wordpress/element": "^2.1.1", + "@wordpress/is-shallow-equal": "^1.1.4", + "lodash": "^4.17.10" + } + }, + "@wordpress/data": { + "version": "2.1.4", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "@wordpress/compose": "^2.0.5", + "@wordpress/deprecated": "^2.0.2", + "@wordpress/element": "^2.1.4", + "@wordpress/is-shallow-equal": "^1.1.4", + "@wordpress/redux-routine": "^3.0.3", + "equivalent-key-map": "^0.2.0", + "is-promise": "^2.1.0", + "lodash": "^4.17.10", + "redux": "^4.0.0" + }, + "dependencies": { + "@wordpress/compose": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-2.0.5.tgz", + "integrity": "sha512-bbf+4nph+/rFBou7PTUyx8rwHVR08ymBgxnmShGTTjuiVxcrz0Gu7Wu2wxulsZobOYaiqvQkCEHKceNsBxJwiA==", + "requires": { + "@babel/runtime": "^7.0.0", + "@wordpress/element": "^2.1.4", + "@wordpress/is-shallow-equal": "^1.1.4", + "lodash": "^4.17.10" + } + } + } + }, + "@wordpress/deprecated": { + "version": "2.0.2", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "@wordpress/hooks": "^2.0.2" + } + }, + "@wordpress/element": { + "version": "2.1.4", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "@wordpress/escape-html": "^1.0.1", + "lodash": "^4.17.10", + "react": "^16.4.1", + "react-dom": "^16.4.1" + } + }, + "@wordpress/escape-html": { + "version": "1.0.1", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "@wordpress/hooks": { + "version": "2.0.2", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "@wordpress/is-shallow-equal": { + "version": "1.1.4", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "@wordpress/redux-routine": { + "version": "3.0.3", + "bundled": true, + "requires": { + "@babel/runtime": "^7.0.0", + "is-promise": "^2.1.0", + "rungen": "^0.3.2" + } + }, + "equivalent-key-map": { + "version": "0.2.2", + "bundled": true + }, + "is-promise": { + "version": "2.1.0", + "bundled": true + }, + "js-tokens": { + "version": "4.0.0", + "bundled": true + }, + "lodash": { + "version": "4.17.11", + "bundled": true + }, + "loose-envify": { + "version": "1.4.0", + "bundled": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "object-assign": { + "version": "4.1.1", + "bundled": true + }, + "prop-types": { + "version": "15.6.2", + "bundled": true, + "requires": { + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" + } + }, + "react": { + "version": "16.5.2", + "bundled": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "schedule": "^0.5.0" + } + }, + "react-dom": { + "version": "16.5.2", + "bundled": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "schedule": "^0.5.0" + } + }, + "redux": { + "version": "4.0.1", + "bundled": true, + "requires": { + "loose-envify": "^1.4.0", + "symbol-observable": "^1.2.0" + } + }, + "regenerator-runtime": { + "version": "0.12.1", + "bundled": true + }, + "rungen": { + "version": "0.3.2", + "bundled": true + }, + "schedule": { + "version": "0.5.0", + "bundled": true, + "requires": { + "object-assign": "^4.1.1" + } + }, + "symbol-observable": { + "version": "1.2.0", + "bundled": true + } } }, - "@wordpress/url": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/url/-/url-2.0.2.tgz", - "integrity": "sha512-bGmhswKeTTmYIwjH4ekjSDkOTq/kzN4dXi41rXAcjPnO3utV5mEc9GBORGicZNOXv0CksOSP4Cez0vnAgfqRaQ==", + "@wordpress/wordcount": { + "version": "file:node_modules/@wordpress/wordcount", + "integrity": "sha512-FQ9mU/NsEB+IczD8roBGes9fJlZdTtdNhftdoCw32/lpUgP/bjA736NIPtNRedry+VBFykHqUf0CygJ0TgaOKA==", "requires": { "@babel/runtime": "^7.0.0", - "qs": "^6.5.2" + "lodash": "^4.17.10" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.1.2", + "bundled": true, + "requires": { + "regenerator-runtime": "^0.12.0" + } + }, + "lodash": { + "version": "4.17.11", + "bundled": true + }, + "regenerator-runtime": { + "version": "0.12.1", + "bundled": true + } } } } }, + "@wordpress/element": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@wordpress/element/-/element-2.1.4.tgz", + "integrity": "sha512-y/RpvYNd2VeLWXemxEXdMOnUa+HUC0sde2o7gEHKud0LB14xFU1ASif/pz/LP+vSvExcvhj8cu4Sq8tKDzRRPw==", + "requires": { + "@babel/runtime": "^7.0.0", + "@wordpress/escape-html": "^1.0.1", + "lodash": "^4.17.10", + "react": "^16.4.1", + "react-dom": "^16.4.1" + } + }, + "@wordpress/escape-html": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@wordpress/escape-html/-/escape-html-1.0.1.tgz", + "integrity": "sha512-ywRXV6WHbUWlqEDXQcWLmyG+/oBw8myTp+KTbkRRF2EJvx/cqL9XF55I2+aeZ5Q0VYRXXGHp6Tp1iRfJjr/rNQ==", + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "@wordpress/hooks": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-2.0.2.tgz", + "integrity": "sha512-yWdkjw6YP2kDF+cjjRfkI2cjTRiETaRFMwJpoqnQWxfay1oBtgvaGuRrYrm0rCxxOqCD/4/di2co5VHQxP9Rhw==", + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "@wordpress/html-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@wordpress/html-entities/-/html-entities-2.0.2.tgz", + "integrity": "sha512-cxG7YjH9EMfZyeLJAd/Vc1nFJxitMSzybv71iMPP3Dqqgz3jixX6oSe4ukTqfoOKBaF7pY7LzS6eTKu7KAmyZw==", + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "@wordpress/i18n": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-3.0.1.tgz", + "integrity": "sha512-Ut6ihDjcZ7zpU44/WurZrFxrLcMl3Gq+hW8Hb6MTF6+X6Y2fd7QFu3lMvopYNwF8gxWtjvH5n3NIQ6B9DLt7Ng==", + "requires": { + "@babel/runtime": "^7.0.0", + "gettext-parser": "^1.3.1", + "jed": "^1.1.1", + "lodash": "^4.17.10", + "memize": "^1.0.5" + } + }, + "@wordpress/is-shallow-equal": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@wordpress/is-shallow-equal/-/is-shallow-equal-1.1.4.tgz", + "integrity": "sha512-ihJrYrW+G9GWtQjyB44DVKMCoiTTYPl5T/g1Ix9PMrKl2rk5uVbJw9yMmhik/jTIQqubpzhxGtrqsddwuUH1sw==", + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "@wordpress/keycodes": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@wordpress/keycodes/-/keycodes-2.0.2.tgz", + "integrity": "sha512-miMB6uvKZzZmgTb7qSr0NBOadWJ9Eb5Tak/+DRsVrgt9RP4zeCh9Le2T7hOWvNPU/54x2v1eHRrU0L+JDm2JAA==", + "requires": { + "@babel/runtime": "^7.0.0", + "lodash": "^4.17.10" + } + }, + "@wordpress/library-export-default-webpack-plugin": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@wordpress/library-export-default-webpack-plugin/-/library-export-default-webpack-plugin-1.0.4.tgz", + "integrity": "sha512-7+Hjw/xqFKXkMKCMz2Yb5jkQW6hHkihfIw0qvHLUPvo5eWrha8l+gUYVgh2is9p/17tFlSvt0zUK4IhWomUwsw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.0.0", + "lodash": "^4.17.10", + "webpack-sources": "^1.1.0" + } + }, + "@wordpress/list-reusable-blocks": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@wordpress/list-reusable-blocks/-/list-reusable-blocks-1.1.4.tgz", + "integrity": "sha512-0UXYSHlVEa6VArSwtuZApv6+1cXv+CswEoEKd/sGMjpJS5vW8wgyV46ZTz4y3gKgvl1l6tIT32XArXLjvT+lXA==", + "requires": { + "@babel/runtime": "^7.0.0", + "@wordpress/api-fetch": "^2.1.0", + "@wordpress/components": "^4.2.1", + "@wordpress/compose": "^2.0.5", + "@wordpress/element": "^2.1.4", + "@wordpress/i18n": "^3.0.1", + "lodash": "^4.17.10" + } + }, "@wordpress/nux": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@wordpress/nux/-/nux-2.0.1.tgz", - "integrity": "sha512-4rvylvuGC0n7fgdK9O0zayutCzofOVcjMBkK1p9WqVFMlV/tTNrR/Z3j6d50uCeU4o/FIq9EKN+h2paTCqYm0Q==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@wordpress/nux/-/nux-2.0.6.tgz", + "integrity": "sha512-22nYvccK0NPGZBegR55BTxbClXO8nSfHut+SSA1/CTPqX3yd//KPeAmGfgNCYH/lMz7RSRcj83oFEGpwrWWISQ==", "requires": { "@babel/runtime": "^7.0.0", - "@wordpress/components": "^4.0.0", - "@wordpress/compose": "^2.0.1", - "@wordpress/data": "^2.1.0", - "@wordpress/element": "^2.1.0", - "@wordpress/i18n": "^3.0.0", + "@wordpress/components": "^4.2.1", + "@wordpress/compose": "^2.0.5", + "@wordpress/data": "^2.1.4", + "@wordpress/element": "^2.1.4", + "@wordpress/i18n": "^3.0.1", "lodash": "^4.17.10", "rememo": "^3.0.0" } }, "@wordpress/plugins": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/plugins/-/plugins-2.0.2.tgz", - "integrity": "sha512-j/2DjkxarAgbjFPUz+cniji16MQmYX/WietVTmjsQ4l+65wjZtvwMmgcJFw8P9t4P22MECeWuvxRmHI7RS/SLQ==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@wordpress/plugins/-/plugins-2.0.5.tgz", + "integrity": "sha512-fER2dJS9NbZPcEL0TEH30UsH2EXx/WSf3JDzJIK86eu33A34cDXv7CvplwLrsiaysOEiCyMvG9DDrCGdM4PVvA==", "requires": { "@babel/runtime": "^7.0.0", - "@wordpress/compose": "^2.0.2", - "@wordpress/element": "^2.1.1", + "@wordpress/compose": "^2.0.5", + "@wordpress/element": "^2.1.4", "@wordpress/hooks": "^2.0.2", "lodash": "^4.17.10" - }, - "dependencies": { - "@wordpress/compose": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-2.0.2.tgz", - "integrity": "sha512-BBii0uIRHJ63Gu3zpPFjy6Qda+w/Ie4cHx5tN3hmFNWPENhSlosix1eXbxvE3lSEerW509A1Bt8Tn1XlePTElg==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/element": "^2.1.1", - "@wordpress/is-shallow-equal": "^1.1.4", - "lodash": "^4.17.10" - } - } } }, "@wordpress/redux-routine": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@wordpress/redux-routine/-/redux-routine-3.0.1.tgz", - "integrity": "sha512-BSg/0nrGy9u1ZFNNrsESo6KQYsIUBrlsTVi5gExta+o9uamHTXKAXhasq+wnjm4GqnPkdYck6zNQ/xbeqxNvgA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@wordpress/redux-routine/-/redux-routine-3.0.3.tgz", + "integrity": "sha512-wT8GoG0qtwxq8J5g0uYxZYoNcnhQloFvMTkDQsaWWAvaO1wsTaamYbusHc6q7PS+EsS2TioQkZsxTtei6YwBBg==", "requires": { "@babel/runtime": "^7.0.0", "is-promise": "^2.1.0", @@ -1682,12 +3813,12 @@ } }, "@wordpress/rich-text": { - "version": "1.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@wordpress/rich-text/-/rich-text-1.0.0-beta.1.tgz", - "integrity": "sha512-6JbtB/773cjufd6JVyazr1lH54ThbmQCC/+11Pyza4Pq8NHe00InymLMGNpCAdGVr0fKCsBRz+AFcuwuEYHNAw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@wordpress/rich-text/-/rich-text-1.0.1.tgz", + "integrity": "sha512-+5PU77P8VqaM4tw8c8hDahBqJ3rqxxXlnn6H820Uai8xg+YHAA+Z5TmNMPqK4hCfX5jt/MSEkoKnzBfg1BouNA==", "requires": { "@babel/runtime": "^7.0.0", - "@wordpress/escape-html": "^1.0.0-beta.1", + "@wordpress/escape-html": "^1.0.1", "lodash": "^4.17.10" } }, @@ -1711,37 +3842,24 @@ } }, "@wordpress/url": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/url/-/url-2.0.2.tgz", - "integrity": "sha512-bGmhswKeTTmYIwjH4ekjSDkOTq/kzN4dXi41rXAcjPnO3utV5mEc9GBORGicZNOXv0CksOSP4Cez0vnAgfqRaQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/url/-/url-2.1.0.tgz", + "integrity": "sha512-MPWFszPleQ+ofDE8ZMpVLOwK/yAjf6L9f7F9wxE82rQjRzUSkrs+Z7Q9ShYiD5HT7o4J96PY9S0XnoHW/XKnDg==", "requires": { "@babel/runtime": "^7.0.0", "qs": "^6.5.2" } }, "@wordpress/viewport": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/viewport/-/viewport-2.0.2.tgz", - "integrity": "sha512-2NzlLfGiWdUCc3tAGEORZQqDmnaKqwtZVXaKRmF+6HpX8UlgkKDPqKQVcpq7DqxlcBNcL0GPwFYUaYQPChfUiw==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@wordpress/viewport/-/viewport-2.0.5.tgz", + "integrity": "sha512-im0/L6+rwM8gtUuSRkzsPOH1pAwKWHLGfJXdnSuYSV1/K/e3szBLIlkHOK1q4YXkVzHxSSNDcnaHEuxbA/6rNA==", "requires": { "@babel/runtime": "^7.0.0", - "@wordpress/compose": "^2.0.2", - "@wordpress/data": "^2.1.1", - "@wordpress/element": "^2.1.1", + "@wordpress/compose": "^2.0.5", + "@wordpress/data": "^2.1.4", + "@wordpress/element": "^2.1.4", "lodash": "^4.17.10" - }, - "dependencies": { - "@wordpress/compose": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-2.0.2.tgz", - "integrity": "sha512-BBii0uIRHJ63Gu3zpPFjy6Qda+w/Ie4cHx5tN3hmFNWPENhSlosix1eXbxvE3lSEerW509A1Bt8Tn1XlePTElg==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/element": "^2.1.1", - "@wordpress/is-shallow-equal": "^1.1.4", - "lodash": "^4.17.10" - } - } } }, "@wordpress/wordcount": { @@ -1796,6 +3914,22 @@ "acorn": "^5.0.0" } }, + "airbnb-prop-types": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/airbnb-prop-types/-/airbnb-prop-types-2.11.0.tgz", + "integrity": "sha512-Y46/0gNVDy5gpedxIaoKjigdes+TouqVg7GTYQr73PBfE/lTSvOR/WIgUib0Zonm3Hyvlcax0mHr+v4K8DfGGw==", + "requires": { + "array.prototype.find": "^2.0.4", + "function.prototype.name": "^1.1.0", + "has": "^1.0.3", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object.assign": "^4.1.0", + "object.entries": "^1.0.4", + "prop-types": "^15.6.2", + "prop-types-exact": "^1.2.0" + } + }, "ajv": { "version": "5.5.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", @@ -2368,12 +4502,36 @@ "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", "dev": true }, + "array.prototype.find": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.0.4.tgz", + "integrity": "sha1-VWpcU2LAhkgyPdrrnenRS8GGTJA=", + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.7.0" + } + }, + "array.prototype.flat": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.1.tgz", + "integrity": "sha512-rVqIs330nLJvfC7JqYvEWwqVr5QjYF1ib02i3YJtR/fICO6527Tjpc/e4Mvmxh3GIePPreRXMdaGyC99YphWEw==", + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.10.0", + "function-bind": "^1.1.1" + } + }, "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "dev": true }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", @@ -3421,6 +5579,11 @@ "repeat-element": "^1.1.2" } }, + "brcast": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brcast/-/brcast-2.0.2.tgz", + "integrity": "sha512-Tfn5JSE7hrUlFcOoaLzVvkbgIemIorMIyoMr3TgvszWW7jFt2C9PdeMLtysYD9RU0MmU17b69+XJG1eRY2OBRg==" + }, "brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", @@ -4018,9 +6181,9 @@ "dev": true }, "clipboard": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-1.7.1.tgz", - "integrity": "sha1-Ng1taUbpmnof7zleQrqStem1oWs=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.1.tgz", + "integrity": "sha512-7yhQBmtN+uYZmfRjjVjKa0dZdWuabzpSKGtyQZN+9C8xlC788SSJjOHWh7tzurfwTqTD5UDYAhIv5fRJg3sHjQ==", "requires": { "good-listener": "^1.2.2", "select": "^1.1.2", @@ -4238,6 +6401,11 @@ "dev": true, "optional": true }, + "consolidated-events": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/consolidated-events/-/consolidated-events-2.0.2.tgz", + "integrity": "sha512-2/uRVMdRypf5z/TW/ncD/66l75P5hH2vM/GR8Jf8HLc2xnfJtmina6F6du8+v4Z2vTrMo7jC+W1tmEEuuELgkQ==" + }, "constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", @@ -4958,6 +7126,11 @@ "lodash.isplainobject": "^4.0.6" } }, + "deepmerge": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz", + "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==" + }, "default-gateway": { "version": "2.7.2", "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-2.7.2.tgz", @@ -5008,7 +7181,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, "requires": { "object-keys": "^1.0.12" } @@ -5202,6 +7374,11 @@ } } }, + "direction": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/direction/-/direction-1.0.2.tgz", + "integrity": "sha512-hSKoz5FBn+zhP9vWKkVQaaxnRDg3/MoPdcg2au54HIUDR8MrP8Ah1jXSJwCXel6SV3Afh5DSzc8Uqv2r1UoQwQ==" + }, "dns-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", @@ -5482,7 +7659,6 @@ "version": "1.12.0", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", - "dev": true, "requires": { "es-to-primitive": "^1.1.1", "function-bind": "^1.1.1", @@ -5495,7 +7671,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", - "dev": true, "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -5874,6 +8049,27 @@ "websocket-driver": ">=0.5.1" } }, + "fbjs": { + "version": "0.8.17", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", + "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", + "requires": { + "core-js": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" + }, + "dependencies": { + "core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" + } + } + }, "fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -6745,8 +8941,17 @@ "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "function.prototype.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.0.tgz", + "integrity": "sha512-Bs0VRrTz4ghD8pTmbJQD1mZ8A/mN0ur/jGz+A6FBxPDUPkm1tNfF6bhTYPA7i7aF4lZJVr+OXTNNrnnIl58Wfg==", + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "is-callable": "^1.1.3" + } }, "gauge": { "version": "2.7.4", @@ -6938,6 +9143,15 @@ } } }, + "global-cache": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/global-cache/-/global-cache-1.2.1.tgz", + "integrity": "sha512-EOeUaup5DgWKlCMhA9YFqNRIlZwoxt731jCh47WBV9fQqHgXhr3Fa55hfgIUqilIcPsfdNKN7LHjrNY+Km40KA==", + "requires": { + "define-properties": "^1.1.2", + "is-symbol": "^1.0.1" + } + }, "global-modules": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", @@ -7969,7 +10183,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -8000,8 +10213,7 @@ "has-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", - "dev": true + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" }, "has-unicode": { "version": "2.0.1", @@ -9009,8 +11221,7 @@ "is-callable": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", - "dev": true + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" }, "is-color-stop": { "version": "1.1.0", @@ -9038,8 +11249,7 @@ "is-date-object": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" }, "is-descriptor": { "version": "0.1.6", @@ -9234,7 +11444,6 @@ "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" } @@ -9276,7 +11485,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", - "dev": true, "requires": { "has-symbols": "^1.0.0" } @@ -9287,6 +11495,11 @@ "integrity": "sha1-L2suF5LB9bs2UZrKqdZcDSb+hT0=", "dev": true }, + "is-touch-device": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-touch-device/-/is-touch-device-1.0.1.tgz", + "integrity": "sha512-LAYzo9kMT1b2p19L/1ATGt2XcSilnzNlyvq6c0pbPRVisLbAPpLqr53tIJS00kvrTkj0HtR8U7+u8X0yR8lPSw==" + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -9348,6 +11561,15 @@ "isarray": "1.0.0" } }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "requires": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + } + }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -10308,11 +12530,6 @@ } } }, - "material-colors": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/material-colors/-/material-colors-1.2.6.tgz", - "integrity": "sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==" - }, "math-random": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", @@ -10828,6 +13045,15 @@ "semver": "^5.4.1" } }, + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, "node-forge": { "version": "0.7.5", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz", @@ -11160,11 +13386,15 @@ } } }, + "object-is": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz", + "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=" + }, "object-keys": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", - "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", - "dev": true + "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==" }, "object-visit": { "version": "1.0.1", @@ -11183,6 +13413,28 @@ } } }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.entries": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.0.4.tgz", + "integrity": "sha1-G/mk3SKI9bM/Opk9JXZh8F0WGl8=", + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.6.1", + "function-bind": "^1.1.0", + "has": "^1.0.1" + } + }, "object.getownpropertydescriptors": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", @@ -11224,7 +13476,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.0.4.tgz", "integrity": "sha1-5STaCbT2b/Bd9FdUbscqyZ8TBpo=", - "dev": true, "requires": { "define-properties": "^1.1.2", "es-abstract": "^1.6.1", @@ -11695,11 +13946,6 @@ "useragent": "^2.1.12" } }, - "popper.js": { - "version": "1.14.4", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.14.4.tgz", - "integrity": "sha1-juwdj/AqWjoVLdQ0FKFce3n9abY=" - }, "portfinder": { "version": "1.0.17", "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.17.tgz", @@ -12253,6 +14499,14 @@ "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", "dev": true }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "requires": { + "asap": "~2.0.3" + } + }, "promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", @@ -12273,6 +14527,16 @@ "object-assign": "^4.1.1" } }, + "prop-types-exact": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/prop-types-exact/-/prop-types-exact-1.2.0.tgz", + "integrity": "sha512-K+Tk3Kd9V0odiXFP9fwDHUYRyvK3Nun3GVyPapSIs5OBkITAm15W0CPFD/YKTkMUAbc0b9CUwRQp2ybiBIq+eA==", + "requires": { + "has": "^1.0.3", + "object.assign": "^4.1.0", + "reflect.ownkeys": "^0.2.0" + } + }, "proxy-addr": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", @@ -12450,9 +14714,9 @@ } }, "re-resizable": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/re-resizable/-/re-resizable-4.9.0.tgz", - "integrity": "sha512-AkTHHC/I1+MUnabFu3/9ADwR5A+HyjiL3xgqlcgNKdyJZVb851I7sGre/4JIU7XfhaN5t+xZBvJPOuvEdvSMcw==" + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/re-resizable/-/re-resizable-4.9.1.tgz", + "integrity": "sha512-P5X7bBMnVkERL4HqjtVIGs2ABi8+DQBJPzvaEGJGRsPwLfO7FLdl13ZMRYmP1ywr2K7AUoHLqJXxQLvClQ3xjQ==" }, "react": { "version": "16.5.2", @@ -12465,6 +14729,15 @@ "schedule": "^0.5.0" } }, + "react-addons-shallow-compare": { + "version": "15.6.2", + "resolved": "https://registry.npmjs.org/react-addons-shallow-compare/-/react-addons-shallow-compare-15.6.2.tgz", + "integrity": "sha1-GYoAuR/DdiPbZKKP0XtZa6NicC8=", + "requires": { + "fbjs": "^0.8.4", + "object-assign": "^4.1.0" + } + }, "react-autosize-textarea": { "version": "3.0.3", "resolved": "http://registry.npmjs.org/react-autosize-textarea/-/react-autosize-textarea-3.0.3.tgz", @@ -12483,27 +14756,24 @@ "hoist-non-react-statics": "^1.2.0" } }, - "react-color": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/react-color/-/react-color-2.14.1.tgz", - "integrity": "sha512-ssv2ArSZdhTbIs29hyfw8JW+s3G4BCx/ILkwCajWZzrcx/2ZQfRpsaLVt38LAPbxe50LLszlmGtRerA14JzzRw==", - "requires": { - "lodash": "^4.0.1", - "material-colors": "^1.2.1", - "prop-types": "^15.5.10", - "reactcss": "^1.2.0", - "tinycolor2": "^1.4.1" - } - }, - "react-datepicker": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/react-datepicker/-/react-datepicker-1.6.0.tgz", - "integrity": "sha512-wfFfw3Tn+CCTtP7PPPhSAfkfVT3UTifFb8BmuhtwWKK3g4S83EEPRQE18XFtxd22dKGqp336NVtDTTyUJ1p9+g==", + "react-dates": { + "version": "17.2.0", + "resolved": "https://registry.npmjs.org/react-dates/-/react-dates-17.2.0.tgz", + "integrity": "sha512-RDlerU8DdRRrlYS0MQ7Z9igPWABGLDwz6+ykBNff67RM3Sset2TDqeuOr+R5o00Ggn5U47GeLsGcSDxlZd9cHw==", "requires": { - "classnames": "^2.2.5", - "prop-types": "^15.6.0", - "react-onclickoutside": "^6.7.1", - "react-popper": "^0.9.1" + "airbnb-prop-types": "^2.10.0", + "consolidated-events": "^1.1.1 || ^2.0.0", + "is-touch-device": "^1.0.1", + "lodash": "^4.1.1", + "object.assign": "^4.1.0", + "object.values": "^1.0.4", + "prop-types": "^15.6.1", + "react-addons-shallow-compare": "^15.6.2", + "react-moment-proptypes": "^1.6.0", + "react-outside-click-handler": "^1.2.0", + "react-portal": "^4.1.5", + "react-with-styles": "^3.2.0", + "react-with-styles-interface-css": "^4.0.2" } }, "react-dom": { @@ -12517,26 +14787,80 @@ "schedule": "^0.5.0" } }, - "react-onclickoutside": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/react-onclickoutside/-/react-onclickoutside-6.7.1.tgz", - "integrity": "sha512-p84kBqGaMoa7VYT0vZ/aOYRfJB+gw34yjpda1Z5KeLflg70HipZOT+MXQenEhdkPAABuE2Astq4zEPdMqUQxcg==" + "react-moment-proptypes": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/react-moment-proptypes/-/react-moment-proptypes-1.6.0.tgz", + "integrity": "sha512-4h7EuhDMTzQqZ+02KUUO+AVA7PqhbD88yXB740nFpNDyDS/bj9jiPyn2rwr9sa8oDyaE1ByFN9+t5XPyPTmN6g==", + "requires": { + "moment": ">=1.6.0" + } }, - "react-popper": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-0.9.5.tgz", - "integrity": "sha1-AqJO8+7DOvnlToNYq3DrDjMe3QU=", + "react-outside-click-handler": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/react-outside-click-handler/-/react-outside-click-handler-1.2.2.tgz", + "integrity": "sha512-MgCxmFARGN1VrZdwoLkER/y3So6mC/fSniXI4XcXcB+Jt05nw/k8a/R1hSoa7p414uZUZ8NfClN3eVmZm9bM5Q==", "requires": { - "popper.js": "^1.14.1", + "airbnb-prop-types": "^2.10.0", + "consolidated-events": "^1.1.1 || ^2.0.0", + "object.values": "^1.0.4", "prop-types": "^15.6.1" } }, - "reactcss": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/reactcss/-/reactcss-1.2.3.tgz", - "integrity": "sha512-KiwVUcFu1RErkI97ywr8nvx8dNOpT03rbnma0SSalTYjkrPYaEajR4a/MRt6DZ46K6arDRbWMNHF+xH7G7n/8A==", + "react-portal": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/react-portal/-/react-portal-4.1.5.tgz", + "integrity": "sha512-jJMy9DoVr4HRWPdO8IP/mDHP1Q972/aKkulVQeIrttOIyRNmCkR2IH7gK3HVjhzxy6M+k9TopSWN5q41wO/o6A==", + "requires": { + "prop-types": "^15.5.8" + } + }, + "react-with-direction": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/react-with-direction/-/react-with-direction-1.3.0.tgz", + "integrity": "sha512-2TflEebNckTNUybw3Rzqjg4BwM/H380ZL5lsbZ5f4UTY2JyE5uQdQZK5T2w+BDJSAMcqoA2RDJYa4e7Cl6C2Kg==", + "requires": { + "airbnb-prop-types": "^2.8.1", + "brcast": "^2.0.2", + "deepmerge": "^1.5.1", + "direction": "^1.0.1", + "hoist-non-react-statics": "^2.3.1", + "object.assign": "^4.1.0", + "object.values": "^1.0.4", + "prop-types": "^15.6.0" + }, + "dependencies": { + "hoist-non-react-statics": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", + "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" + } + } + }, + "react-with-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/react-with-styles/-/react-with-styles-3.2.1.tgz", + "integrity": "sha512-L+x/EDgrKkqV6pTfDtLMShf7Xs+bVQ+HAT5rByX88QYX+ft9t5Gn4PWMmg36Ur21IVEBMGjjQQIJGJpBrzbsyg==", + "requires": { + "deepmerge": "^1.5.2", + "hoist-non-react-statics": "^2.5.0", + "prop-types": "^15.6.1", + "react-with-direction": "^1.3.0" + }, + "dependencies": { + "hoist-non-react-statics": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", + "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" + } + } + }, + "react-with-styles-interface-css": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/react-with-styles-interface-css/-/react-with-styles-interface-css-4.0.3.tgz", + "integrity": "sha512-wE43PIyjal2dexxyyx4Lhbcb+E42amoYPnkunRZkb9WTA+Z+9LagbyxwsI352NqMdFmghR0opg29dzDO4/YXbw==", "requires": { - "lodash": "^4.0.1" + "array.prototype.flat": "^1.2.1", + "global-cache": "^1.2.1" } }, "read-all-stream": { @@ -12913,11 +15237,11 @@ } }, "redux": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.0.tgz", - "integrity": "sha512-NnnHF0h0WVE/hXyrB6OlX67LYRuaf/rJcbWvnHHEPCF/Xa/AZpwhs/20WyqzQae5x4SD2F9nPObgBh2rxAgLiA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.1.tgz", + "integrity": "sha512-R7bAtSkk7nY6O/OYMVR9RiBI+XghjF9rlbl5806HJbQph0LJVHZrU5oaO4q70eUKiqMRqm4y07KLTlMZ2BlVmg==", "requires": { - "loose-envify": "^1.1.0", + "loose-envify": "^1.4.0", "symbol-observable": "^1.2.0" }, "dependencies": { @@ -12938,6 +15262,11 @@ "resolved": "https://registry.npmjs.org/redux-optimist/-/redux-optimist-1.0.0.tgz", "integrity": "sha512-AG1v8o6UZcGXTEH2jVcWG6KD+gEix+Cj9JXAAzln9MPkauSVd98H7N7EOOyT/v4c9N1mJB4sm1zfspGlLDkUEw==" }, + "reflect.ownkeys": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz", + "integrity": "sha1-dJrO7H8/34tj+SegSAnpDFwLNGA=" + }, "refx": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/refx/-/refx-3.1.1.tgz", @@ -13592,8 +15921,7 @@ "setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" }, "setprototypeof": { "version": "1.1.0", @@ -13631,9 +15959,9 @@ "dev": true }, "showdown": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/showdown/-/showdown-1.8.6.tgz", - "integrity": "sha1-kepO47elRIqspoIKTifmkMatdxw=", + "version": "1.8.7", + "resolved": "https://registry.npmjs.org/showdown/-/showdown-1.8.7.tgz", + "integrity": "sha512-S1wyj80vu2lZZ7xm2ijr6e3VxHxPu8WfhTH7R6nelbIQeyl2g0ioEohS0YtFim8yAFMbQ8sQuXxiKvr10rKbTg==", "requires": { "yargs": "^10.0.3" }, @@ -14986,6 +17314,11 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, + "ua-parser-js": { + "version": "0.7.18", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.18.tgz", + "integrity": "sha512-LtzwHlVHwFGTptfNSgezHp7WUlwiqb0gA9AALRbKaERfxwJoiX0A73QbTToxteIAuIaFshhgIZfqK8s7clqgnA==" + }, "uglify-js": { "version": "3.4.9", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", diff --git a/package.json b/package.json index cc4a7ebf3528a..cf837d9fc2569 100644 --- a/package.json +++ b/package.json @@ -51,38 +51,38 @@ "dependencies": { "@babel/polyfill": "^7.0.0", "@wordpress/a11y": "^2.0.2", - "@wordpress/api-fetch": "^2.0.2", + "@wordpress/api-fetch": "^2.1.0", "@wordpress/autop": "^2.0.2", - "@wordpress/blob": "^2.0.2", - "@wordpress/block-library": "^2.1.0", + "@wordpress/blob": "^2.1.0", + "@wordpress/block-library": "^2.1.4", "@wordpress/block-serialization-default-parser": "^1.0.1", - "@wordpress/blocks": "^4.0.1", - "@wordpress/components": "^4.1.0", - "@wordpress/compose": "^2.0.2", - "@wordpress/core-data": "^2.0.2", - "@wordpress/data": "^2.1.1", - "@wordpress/date": "^2.0.2", + "@wordpress/blocks": "^4.0.4", + "@wordpress/components": "^4.2.1", + "@wordpress/compose": "^2.0.5", + "@wordpress/core-data": "^2.0.6", + "@wordpress/data": "^2.1.4", + "@wordpress/date": "^2.0.3", "@wordpress/deprecated": "^2.0.2", - "@wordpress/dom": "^2.0.2", + "@wordpress/dom": "^2.0.4", "@wordpress/dom-ready": "^2.0.2", - "@wordpress/edit-post": "^1.0.0", - "@wordpress/editor": "^4.0.1", - "@wordpress/element": "^2.1.1", - "@wordpress/escape-html": "^1.0.0-beta.1", + "@wordpress/edit-post": "^1.0.4", + "@wordpress/editor": "^4.0.3", + "@wordpress/element": "^2.1.4", + "@wordpress/escape-html": "^1.0.1", "@wordpress/hooks": "^2.0.2", "@wordpress/html-entities": "^2.0.2", "@wordpress/i18n": "^3.0.1", "@wordpress/is-shallow-equal": "^1.1.4", "@wordpress/keycodes": "^2.0.2", - "@wordpress/list-reusable-blocks": "^1.1.0", - "@wordpress/nux": "^2.0.1", - "@wordpress/plugins": "^2.0.2", - "@wordpress/redux-routine": "^3.0.1", - "@wordpress/rich-text": "^1.0.0-beta.1", + "@wordpress/list-reusable-blocks": "^1.1.4", + "@wordpress/nux": "^2.0.6", + "@wordpress/plugins": "^2.0.5", + "@wordpress/redux-routine": "^3.0.3", + "@wordpress/rich-text": "^1.0.1", "@wordpress/shortcode": "^2.0.2", "@wordpress/token-list": "^1.0.2", - "@wordpress/url": "^2.0.2", - "@wordpress/viewport": "^2.0.2", + "@wordpress/url": "^2.1.0", + "@wordpress/viewport": "^2.0.5", "@wordpress/wordcount": "^2.0.2", "element-closest": "^2.0.2", "formdata-polyfill": "^3.0.12", From 443771e51b6dac6aefc942c876a7068dc50ee841 Mon Sep 17 00:00:00 2001 From: Daniel Bachhuber Date: Mon, 22 Oct 2018 19:57:07 +0000 Subject: [PATCH 495/537] Themes: Introduce responsive embeds support. Responsive embeds is a way for a theme to opt in to WordPress dynamically scaling the width/height of an embed. When a theme supports responsive embeds, a `wp-embed-responsive` class is added to the `` tag. This information is also presented through the REST API for clients to respect. Props desrosj. Fixes #45125. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43790 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/post-template.php | 4 +++ .../class-wp-rest-themes-controller.php | 14 +++++--- src/wp-includes/theme.php | 4 ++- .../tests/rest-api/rest-themes-controller.php | 32 ++++++++++++++++++- tests/phpunit/tests/theme/support.php | 12 +++++++ 5 files changed, 60 insertions(+), 6 deletions(-) diff --git a/src/wp-includes/post-template.php b/src/wp-includes/post-template.php index b80ac4d4e42e0..9ff1d08ea4202 100644 --- a/src/wp-includes/post-template.php +++ b/src/wp-includes/post-template.php @@ -722,6 +722,10 @@ function get_body_class( $class = '' ) { $classes[] = 'wp-custom-logo'; } + if ( current_theme_supports( 'responsive-embeds' ) ) { + $classes[] = 'wp-embed-responsive'; + } + $page = $wp_query->get( 'page' ); if ( ! $page || $page < 2 ) diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php index 4aa7db4f6f02d..4c958f8f673ff 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php @@ -111,8 +111,9 @@ public function prepare_item_for_response( $theme, $request ) { $formats = array_merge( array( 'standard' ), $formats ); $data['theme_supports']['formats'] = $formats; - $data['theme_supports']['post-thumbnails'] = false; - $post_thumbnails = get_theme_support( 'post-thumbnails' ); + $data['theme_supports']['post-thumbnails'] = false; + $data['theme_supports']['responsive-embeds'] = (bool) get_theme_support( 'responsive-embeds' ); + $post_thumbnails = get_theme_support( 'post-thumbnails' ); if ( $post_thumbnails ) { // $post_thumbnails can contain a nested array of post types. @@ -156,16 +157,21 @@ public function get_item_schema() { 'type' => 'array', 'readonly' => true, 'properties' => array( - 'formats' => array( + 'formats' => array( 'description' => __( 'Post formats supported.' ), 'type' => 'array', 'readonly' => true, ), - 'post-thumbnails' => array( + 'post-thumbnails' => array( 'description' => __( 'Whether the theme supports post thumbnails.' ), 'type' => array( 'array', 'bool' ), 'readonly' => true, ), + 'responsive-embeds' => array( + 'description' => __( 'Whether the theme supports responsive embedded content.', 'gutenberg' ), + 'type' => 'bool', + 'readonly' => true, + ), ), ), ), diff --git a/src/wp-includes/theme.php b/src/wp-includes/theme.php index 947226c4d49e8..3a7a9e871db2c 100644 --- a/src/wp-includes/theme.php +++ b/src/wp-includes/theme.php @@ -2210,12 +2210,14 @@ function get_theme_starter_content() { * @since 4.1.0 The `title-tag` feature was added * @since 4.5.0 The `customize-selective-refresh-widgets` feature was added * @since 4.7.0 The `starter-content` feature was added + * @since 5.0.0 The `responsive-embeds` feature was added. * * @global array $_wp_theme_features * * @param string $feature The feature being added. Likely core values include 'post-formats', * 'post-thumbnails', 'html5', 'custom-logo', 'custom-header-uploads', - * 'custom-header', 'custom-background', 'title-tag', 'starter-content', etc. + * 'custom-header', 'custom-background', 'title-tag', 'starter-content', + * 'responsive-embeds/', etc. * @param mixed $args,... Optional extra arguments to pass along with certain features. * @return void|bool False on failure, void otherwise. */ diff --git a/tests/phpunit/tests/rest-api/rest-themes-controller.php b/tests/phpunit/tests/rest-api/rest-themes-controller.php index 590f91ec26725..520dbed9d0a8c 100644 --- a/tests/phpunit/tests/rest-api/rest-themes-controller.php +++ b/tests/phpunit/tests/rest-api/rest-themes-controller.php @@ -189,9 +189,10 @@ public function test_get_item_schema() { $this->assertEquals( 1, count( $properties ) ); $this->assertArrayHasKey( 'theme_supports', $properties ); - $this->assertEquals( 2, count( $properties['theme_supports']['properties'] ) ); + $this->assertEquals( 3, count( $properties['theme_supports']['properties'] ) ); $this->assertArrayHasKey( 'formats', $properties['theme_supports']['properties'] ); $this->assertArrayHasKey( 'post-thumbnails', $properties['theme_supports']['properties'] ); + $this->assertArrayHasKey( 'responsive-embeds', $properties['theme_supports']['properties'] ); } /** @@ -222,6 +223,35 @@ public function test_theme_supports_formats_non_default() { $this->assertSame( array( 'standard', 'aside', 'video' ), $result[0]['theme_supports']['formats'] ); } + /** + * Test when a theme does not support responsive embeds. + * + * @ticket 45016 + */ + public function test_theme_supports_responsive_embeds_false() { + remove_theme_support( 'responsive-embeds' ); + $response = self::perform_active_theme_request(); + + $result = $response->get_data(); + $this->assertTrue( isset( $result[0]['theme_supports'] ) ); + $this->assertTrue( isset( $result[0]['theme_supports']['responsive-embeds'] ) ); + $this->assertFalse( $result[0]['theme_supports']['responsive-embeds'] ); + } + + /** + * Test when a theme supports responsive embeds. + * + * @ticket 45016 + */ + public function test_theme_supports_responsive_embeds_true() { + remove_theme_support( 'responsive-embeds' ); + add_theme_support( 'responsive-embeds' ); + $response = self::perform_active_theme_request(); + $result = $response->get_data(); + $this->assertTrue( isset( $result[0]['theme_supports'] ) ); + $this->assertTrue( $result[0]['theme_supports']['responsive-embeds'] ); + } + /** * Test when a theme does not support post thumbnails. * diff --git a/tests/phpunit/tests/theme/support.php b/tests/phpunit/tests/theme/support.php index 9b7eb24ea3516..8b17b6b476d4d 100644 --- a/tests/phpunit/tests/theme/support.php +++ b/tests/phpunit/tests/theme/support.php @@ -191,4 +191,16 @@ function test_supports_menus() { $this->assertEmpty( get_registered_nav_menus() ); $this->assertFalse( current_theme_supports( 'menus' ) ); } + + /** + * @ticket 45125 + */ + function test_responsive_embeds() { + add_theme_support( 'responsive-embeds' ); + $this->assertTrue( current_theme_supports( 'responsive-embeds' ) ); + remove_theme_support( 'responsive-embeds' ); + $this->assertFalse( current_theme_supports( 'responsive-embeds' ) ); + add_theme_support( 'responsive-embeds' ); + $this->assertTrue( current_theme_supports( 'responsive-embeds' ) ); + } } From 1fc8a0622c68d9de2ed50e38178e00c91dcf09d1 Mon Sep 17 00:00:00 2001 From: "Dominik Schilling (ocean90)" Date: Mon, 22 Oct 2018 21:00:47 +0000 Subject: [PATCH 496/537] Themes: Remove a stray slash and `gutenberg` text domain. See #45125. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43791 602fd350-edb4-49c9-b593-d223f7449a82 --- .../rest-api/endpoints/class-wp-rest-themes-controller.php | 2 +- src/wp-includes/theme.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php index 4c958f8f673ff..dbfaa839cb2d6 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php @@ -168,7 +168,7 @@ public function get_item_schema() { 'readonly' => true, ), 'responsive-embeds' => array( - 'description' => __( 'Whether the theme supports responsive embedded content.', 'gutenberg' ), + 'description' => __( 'Whether the theme supports responsive embedded content.' ), 'type' => 'bool', 'readonly' => true, ), diff --git a/src/wp-includes/theme.php b/src/wp-includes/theme.php index 3a7a9e871db2c..8c97745a3abbb 100644 --- a/src/wp-includes/theme.php +++ b/src/wp-includes/theme.php @@ -2217,7 +2217,7 @@ function get_theme_starter_content() { * @param string $feature The feature being added. Likely core values include 'post-formats', * 'post-thumbnails', 'html5', 'custom-logo', 'custom-header-uploads', * 'custom-header', 'custom-background', 'title-tag', 'starter-content', - * 'responsive-embeds/', etc. + * 'responsive-embeds', etc. * @param mixed $args,... Optional extra arguments to pass along with certain features. * @return void|bool False on failure, void otherwise. */ From 9c4aff4f56e1436deb0d49b70a6c30fadd6e924f Mon Sep 17 00:00:00 2001 From: "Dominik Schilling (ocean90)" Date: Mon, 22 Oct 2018 21:26:20 +0000 Subject: [PATCH 497/537] Meta Boxes: Sync checks for valid meta boxes from `do_meta_boxes()` to `the_block_editor_meta_boxes()`. See #45112. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43792 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/post.php | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/wp-admin/includes/post.php b/src/wp-admin/includes/post.php index e37050670b7d2..015c7d32ec9fa 100644 --- a/src/wp-admin/includes/post.php +++ b/src/wp-admin/includes/post.php @@ -2086,12 +2086,14 @@ function the_block_editor_meta_boxes() { $meta_boxes = (array) $wp_meta_boxes[ $current_screen->id ][ $location ][ $priority ]; foreach ( $meta_boxes as $meta_box ) { - if ( ! empty( $meta_box['title'] ) ) { - $meta_boxes_per_location[ $location ][] = array( - 'id' => $meta_box['id'], - 'title' => $meta_box['title'], - ); + if ( false == $meta_box || ! $meta_box['title'] ) { + continue; } + + $meta_boxes_per_location[ $location ][] = array( + 'id' => $meta_box['id'], + 'title' => $meta_box['title'], + ); } } } From 06a77e8d548943c122d959c82119db9660ab6bb1 Mon Sep 17 00:00:00 2001 From: "David A. Kennedy" Date: Mon, 22 Oct 2018 22:37:18 +0000 Subject: [PATCH 498/537] Twenty Ten: Add styles and support for the new block-based editor. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This update adds styles and theme support related to the new block-based editor to enhance the experience of using it with Twenty Ten. These are the specific changes made to this theme: * Add blocks.css, to style blocks on the front end, to make sure they match the theme’s existing HTML element styles. * Add editor-blocks.css to style blocks in the editor, to make sure they match the theme’s existing HTML element styles. * Add theme support for `editor-styles`, to pull the existing editor stylesheet into the new editor. * Add theme support for `wp-block-styles`, to load the default block styles on the front end. * Add theme support for `editor-color-palette`, to load a color palette based on the theme’s color scheme into the block-based editor. Props nielslange, crunnells, laurelfulford. Fixes #45038. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43793 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-content/themes/twentyten/blocks.css | 248 +++++++++++++++ .../themes/twentyten/editor-blocks.css | 299 ++++++++++++++++++ src/wp-content/themes/twentyten/functions.php | 59 ++++ 3 files changed, 606 insertions(+) create mode 100644 src/wp-content/themes/twentyten/blocks.css create mode 100644 src/wp-content/themes/twentyten/editor-blocks.css diff --git a/src/wp-content/themes/twentyten/blocks.css b/src/wp-content/themes/twentyten/blocks.css new file mode 100644 index 0000000000000..ff6d16ab0494a --- /dev/null +++ b/src/wp-content/themes/twentyten/blocks.css @@ -0,0 +1,248 @@ +/* +Theme Name: Twenty Ten +Description: Used to style Gutenberg Blocks. +*/ + +/*-------------------------------------------------------------- +>>> TABLE OF CONTENTS: +---------------------------------------------------------------- +1.0 General Block Styles +2.0 Blocks - Common Blocks +3.0 Blocks - Formatting +4.0 Blocks - Layout Elements +5.0 Blocks - Widgets +6.0 Blocks - Colors +--------------------------------------------------------------*/ + +/*-------------------------------------------------------------- +1.0 General Block Styles +--------------------------------------------------------------*/ + +/* Captions */ + +[class^="wp-block-"]:not(.wp-block-gallery) figcaption { + color: #777; + font-family: "Helvetica Neue", Arial, Helvetica, "Nimbus Sans L", sans-serif; +} + +/* Alignments */ + +[class^="wp-block-"].alignleft, +[class^="wp-block-"] .alignleft { + margin-right: 24px; +} + +[class^="wp-block-"].alignright, +[class^="wp-block-"] .alignright { + margin-left: 24px; +} + +/*-------------------------------------------------------------- +2.0 Blocks - Common Blocks +--------------------------------------------------------------*/ + +/* Paragraph */ + +p.has-drop-cap:not(:focus)::first-letter { + font-size: 5em; + margin-top: 0.1em; +} + +/* Image */ + +.wp-block-image figure { + margin-bottom: 24px; +} + +.wp-block-image figcaption { + margin: -7px 0 20px;; + padding: 9px 9px 1.0em; + text-align: center; +} + +.wp-block-image.alignfull, +.wp-block-image.alignfull img { + margin: 0; +} + +/* Gallery */ + +.wp-block-gallery { + margin: 0 0 24px; +} + +.wp-block-gallery .blocks-gallery-image figcaption, +.wp-block-gallery .blocks-gallery-item figcaption { + font-family: "Helvetica Neue", Arial, Helvetica, "Nimbus Sans L", sans-serif; + left: 0; + right: 0; + width: auto; +} + +/* Quotes */ + +.wp-block-quote:not(.is-large):not(.is-style-large) { + border: none; + padding: 0 3em; +} + +.wp-block-quote cite { + color: inherit; + font-size: inherit; + font-weight: 600; +} + +/* Audio */ + +.wp-block-audio { + margin-left: 0; + margin-right: 0; +} + +.wp-block-audio audio { + display: block; + width: 100%; +} + +/* File */ + +.rtl .wp-block-file * + .wp-block-file__button { + margin: 0 0 0 0.75em; +} + +/*-------------------------------------------------------------- +3.0 Blocks - Formatting +--------------------------------------------------------------*/ + +/* Code */ + +.wp-block-code { + background-color: transparent; + border: 0; + padding: 0; +} + +/* Pullquote */ + +.wp-block-pullquote p { + font-size: 1.5em; +} + +.wp-block-pullquote__citation, +.wp-block-pullquote cite { + color: inherit; + font-size: inherit; + font-weight: 600; + text-transform: none; +} + +/* Table */ + +.wp-block-table td, +.wp-block-table th { + border: none; +} + +.wp-block-table td { + border-top: 1px solid #e7e7e7; +} + +.wp-block-table tr:nth-child(odd) td { + background: #f2f7fc; +} + +/*-------------------------------------------------------------- +4.0 Blocks - Layout Elements +--------------------------------------------------------------*/ + +/* Columns */ + +.wp-block-columns { + margin: 0 -0.5em; +} +.wp-block-column { + margin: 0 0.5em; +} + +/* Separator */ + +.wp-block-separator { + border: 0; +} + +/*-------------------------------------------------------------- +5.0 Blocks - Widgets +--------------------------------------------------------------*/ + +/* Archives, Categories & Latest Posts */ + +.wp-block-archives.aligncenter, +.wp-block-categories.aligncenter, +.wp-block-latest-posts.aligncenter { + margin-left: 20px; + text-align: center; +} + +.rtl .wp-block-archives.aligncenter, +.rtl .wp-block-categories.aligncenter, +.rtl .wp-block-latest-posts.aligncenter { + margin-left: 0; + margin-right: 20px; +} + +/* Latest Comments */ + +.wp-block-latest-comments { + margin: 0 0 24px; +} + +/* Latest Posts */ + +.wp-block-latest-posts.is-grid { + margin-left: 0; + margin-right: 0; +} + +/*-------------------------------------------------------------- +6.0 Blocks - Colors +--------------------------------------------------------------*/ + +.has-blue-color { + color: #0066cc; +} + +.has-blue-background-color { + background-color: #0066cc; +} + +.has-black-color { + color: #000; +} + +.has-black-background-color { + background-color: #000; +} + +.has-medium-gray-color { + color: #666; +} + +.has-medium-gray-background-color { + background-color: #666; +} + +.has-light-gray-color { + color: #f1f1f1; +} + +.has-light-gray-background-color { + background-color: #f1f1f1; +} + +.has-white-color { + color: #fff; +} + +.has-white-background-color { + background-color: #fff; +} diff --git a/src/wp-content/themes/twentyten/editor-blocks.css b/src/wp-content/themes/twentyten/editor-blocks.css new file mode 100644 index 0000000000000..c1fde50bb5cb3 --- /dev/null +++ b/src/wp-content/themes/twentyten/editor-blocks.css @@ -0,0 +1,299 @@ +/* +Theme Name: Twenty Ten +Description: Used to style Gutenberg Blocks in the editor. +*/ + +/*-------------------------------------------------------------- +>>> TABLE OF CONTENTS: +---------------------------------------------------------------- +1.0 General Typography +2.0 General Block Styles +3.0 Blocks - Common Blocks +4.0 Blocks - Formatting +5.0 Blocks - Widgets +--------------------------------------------------------------*/ + +/*-------------------------------------------------------------- +1.0 General Typography +--------------------------------------------------------------*/ + +.edit-post-visual-editor .editor-block-list__block .mce-content-body, +.wp-block-freeform.block-library-rich-text__tinymce p, +.wp-block-freeform.block-library-rich-text__tinymce li { + line-height: 1.5; +} + +.edit-post-visual-editor .editor-block-list__block { + color: #1a1a1a; +} + +.editor-post-title__block .editor-post-title__input { + color: #000; + font-family: "Helvetica Neue", Arial, Helvetica, "Nimbus Sans L", sans-serif; + font-size: 21px; + font-weight: bold; + line-height: 1.3em; +} + +.edit-post-visual-editor .editor-block-list__block h1 { + font-size: 32px; +} + +.edit-post-visual-editor .editor-block-list__block h2 { + font-size: 24px; +} + +.edit-post-visual-editor .editor-block-list__block h3 { + font-size: 19px; +} + +.edit-post-visual-editor .editor-block-list__block h4 { + font-size: 16px; +} + +.edit-post-visual-editor .editor-block-list__block h5 { + font-size: 13px; +} + +.edit-post-visual-editor .editor-block-list__block h6 { + font-size: 11px; +} + +/*-------------------------------------------------------------- +2.0 General Block Styles +--------------------------------------------------------------*/ + +/* Main column width */ + +body.gutenberg-editor-page .edit-post-visual-editor .editor-post-title__block, +body.gutenberg-editor-page .edit-post-visual-editor .editor-default-block-appender, +body.gutenberg-editor-page .edit-post-visual-editor .editor-block-list__block { + max-width: 670px; /* 640px + 30px for padding */ +} + +/* Link styles */ + +.edit-post-visual-editor a, +.editor-block-list__block a, +.wp-block-freeform.block-library-rich-text__tinymce a { + color: #0066cc; +} + +/* List styles */ + +.edit-post-visual-editor ul:not(.wp-block-gallery), +.editor-block-list__block ul:not(.wp-block-gallery), +.block-library-list ul, +.edit-post-visual-editor ol, +.editor-block-list__block ol, +.block-library-list ol.editor-rich-text__tinymce { + margin: 0 0 18px 1.5em; + padding: 0; +} + +.edit-post-visual-editor ul:not(.wp-block-gallery), +.editor-block-list__block ul:not(.wp-block-gallery), +.block-library-list ul { + list-style: square; +} + +.edit-post-visual-editor ol, +.editor-block-list__block ol, +.block-library-list ol { + list-style: decimal; + margin-left: 1.5em; +} + +.edit-post-visual-editor ul:not(.wp-block-gallery) li, +.editor-block-list__block ul:not(.wp-block-gallery) li, +.edit-post-visual-editor ol li, +.editor-block-list__block ol li, +.block-library-list li { + margin-bottom: 0; +} + +.edit-post-visual-editor ul:not(.wp-block-gallery) li > ul, +.editor-block-list__block ul:not(.wp-block-gallery) li > ul, +.block-library-list li > ul, +.edit-post-visual-editor li > ol, +.editor-block-list__block li > ol, +.block-library-list li > ol { + margin-bottom: 0; +} + +.rtl .edit-post-visual-editor ul:not(.wp-block-gallery), +.rtl .editor-block-list__block ul:not(.wp-block-gallery), +.rtl .block-library-list ul, +.rtl .edit-post-visual-editor ol, +.rtl .editor-block-list__block ol, +.rtl .block-library-list ol { + margin-left: 0; + margin-right: 1.25em; + padding: 0; +} + +/* Caption styles */ + +[class^="wp-block-"] figcaption { + color: #777; + font-family: "Helvetica Neue", Arial, Helvetica, "Nimbus Sans L", sans-serif; +} + +/* Code styles */ + +.wp-block-freeform.block-library-rich-text__tinymce code { + background: transparent; +} + +/* Quote styles */ + +.wp-block-freeform.block-library-rich-text__tinymce blockquote { + border: 0; + padding: 0 3em; +} + +/* Table styles */ + +.editor-block-list__block tr th, +.editor-block-list__block tr th a { + font-family: "Helvetica Neue", Arial, Helvetica, "Nimbus Sans L", sans-serif; +} + +/* Definition List styles */ + +.editor-block-list__block dd { + margin-left: 0; + margin-right: 0; +} + +/*-------------------------------------------------------------- +3.0 Blocks - Common Blocks +--------------------------------------------------------------*/ + +/* Paragraph */ + +p.has-drop-cap:not(:focus)::first-letter { + font-size: 5em; + margin-top: 0.1em; +} + +/* Image */ + +.wp-block-image { + margin-bottom: 20px; +} + +.wp-block-image figcaption { + display: block; + margin: -7px 0 0; + padding: 9px 9px 1.0em; + text-align: center; +} + +/* Gallery */ + +.editor-block-list__block .wp-block-gallery { + margin: 0 0 24px; +} + +/* Quote */ + +.wp-block-quote { + border: 0; + padding: 0 3em; +} + +.wp-block-quote:not(.is-large):not(.is-style-large) { + border: 0; + padding: 0 3em; +} + +.wp-block-quote .wp-block-quote__citation { + font-size: 16px; + font-weight: 600; +} + +.wp-block-quote.is-large .wp-block-quote__citation, +.wp-block-quote.is-style-large .wp-block-quote__citation { + font-size: 18px; +} + +/* Cover Image */ + +.wp-block-cover-image-text { + font-size: 32px; +} + +/* File */ + +.wp-block-file .wp-block-file__textlink .editor-rich-text__tinymce { + color: #0066cc; + font-size: 16px; + text-decoration: underline; +} + +/*-------------------------------------------------------------- +4.0 Blocks - Formatting +--------------------------------------------------------------*/ + +/* Code */ + +.wp-block-code { + border: 0; + padding: 0; +} + +/* Pullquote */ + +.wp-block-pullquote blockquote > .editor-rich-text p { + font-size: 1.5em; +} + +.wp-block-pullquote .wp-block-pullquote__citation { + color: inherit; + font-size: inherit; + font-weight: 600; + text-transform: none; +} + +/* Table */ + +.wp-block-table tr:nth-child(odd) td { + background: #f2f7fc; +} + +.wp-block-table th .wp-block-table__cell-content { + color: #777; + font-family: "Helvetica Neue", Arial, Helvetica, "Nimbus Sans L", sans-serif; +} + +.editor-block-list__block .wp-block-table tr td { + padding-bottom: 0; + padding-top: 0; +} + +/*-------------------------------------------------------------- +5.0 Blocks - Widgets +--------------------------------------------------------------*/ + +/* Latest Comments */ + +.editor-block-list__block .wp-block-latest-comments { + margin: 0 0 24px; +} + +.rtl .edit-post-visual-editor .wp-block-latest-comments { + margin-right: 0; +} + +/* Latest Posts */ + +.edit-post-visual-editor .editor-block-list__block .wp-block-latest-posts.is-grid { + list-style: none; + margin-left: 0; + margin-right: 0; +} + +.edit-post-visual-editor .wp-block-latest-posts.is-grid li { + margin-bottom: 1em; +} diff --git a/src/wp-content/themes/twentyten/functions.php b/src/wp-content/themes/twentyten/functions.php index 3db0ab0ed7f57..eea6777bb0beb 100644 --- a/src/wp-content/themes/twentyten/functions.php +++ b/src/wp-content/themes/twentyten/functions.php @@ -75,6 +75,41 @@ function twentyten_setup() { // This theme styles the visual editor with editor-style.css to match the theme style. add_editor_style(); + // Load regular editor styles into the new block-based editor. + add_theme_support( 'editor-styles' ); + + // Load default block styles. + add_theme_support( 'wp-block-styles' ); + + // Add support for custom color scheme. + add_theme_support( 'editor-color-palette', array( + array( + 'name' => __( 'Blue', 'twentyten' ), + 'slug' => 'blue', + 'color' => '#0066cc', + ), + array( + 'name' => __( 'Black', 'twentyten' ), + 'slug' => 'black', + 'color' => '#000', + ), + array( + 'name' => __( 'Medium Gray', 'twentyten' ), + 'slug' => 'medium-gray', + 'color' => '#666', + ), + array( + 'name' => __( 'Light Gray', 'twentyten' ), + 'slug' => 'light-gray', + 'color' => '#f1f1f1', + ), + array( + 'name' => __( 'White', 'twentyten' ), + 'slug' => 'white', + 'color' => '#fff', + ), + ) ); + // Post Format support. You can also use the legacy "gallery" or "asides" (note the plural) categories. add_theme_support( 'post-formats', array( 'aside', 'gallery' ) ); @@ -612,3 +647,27 @@ function twentyten_widget_tag_cloud_args( $args ) { return $args; } add_filter( 'widget_tag_cloud_args', 'twentyten_widget_tag_cloud_args' ); + +/** + * Enqueue scripts and styles for front end. + * + * @since Twenty Ten 2.6 + */ +function twentyten_scripts_styles() { + // Theme block stylesheet. + wp_enqueue_style( 'twentyten-block-style', get_template_directory_uri() . '/blocks.css', array(), '20181018' ); +} +add_action( 'wp_enqueue_scripts', 'twentyten_scripts_styles' ); + +/** + * Enqueue editor styles for Gutenberg + * + * @since Twenty Ten 2.6 + */ +function twentyten_block_editor_styles() { + // Block styles. + wp_enqueue_style( 'twentyten-block-editor-style', get_template_directory_uri() . '/editor-blocks.css' ); +} +add_action( 'enqueue_block_editor_assets', 'twentyten_block_editor_styles' ); + + From 44da7d65cada18862044c4ad9863aee2bec458c8 Mon Sep 17 00:00:00 2001 From: "David A. Kennedy" Date: Mon, 22 Oct 2018 23:02:44 +0000 Subject: [PATCH 499/537] Twenty Eleven: Add styles and support for the new block-based editor. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This update adds styles and theme support related to the new block-based editor to enhance the experience of using it with Twenty Eleven. These are the specific changes made to this theme: * Add blocks.css, to style blocks on the front end, to make sure they match the theme’s existing HTML element styles. * Add editor-blocks.css to style blocks in the editor, to make sure they match the theme’s existing HTML element styles. * Add theme support for `editor-styles`, to pull the existing editor stylesheet into the new editor. * Add theme support for `wp-block-styles`, to load the default block styles on the front end. * Add theme support for `editor-color-palette`, to load a color palette based on the theme’s color scheme into the block-based editor. Props ianbelanger, laurelfulford. Fixes #45039. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43794 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-content/themes/twentyeleven/blocks.css | 368 +++++++++++++++ .../themes/twentyeleven/editor-blocks.css | 443 ++++++++++++++++++ .../themes/twentyeleven/functions.php | 62 +++ 3 files changed, 873 insertions(+) create mode 100644 src/wp-content/themes/twentyeleven/blocks.css create mode 100644 src/wp-content/themes/twentyeleven/editor-blocks.css diff --git a/src/wp-content/themes/twentyeleven/blocks.css b/src/wp-content/themes/twentyeleven/blocks.css new file mode 100644 index 0000000000000..e448ddeaae7bd --- /dev/null +++ b/src/wp-content/themes/twentyeleven/blocks.css @@ -0,0 +1,368 @@ +/* +Theme Name: Twenty Eleven +Description: Used to style Gutenberg Blocks. +*/ + +/*-------------------------------------------------------------- +>>> TABLE OF CONTENTS: +---------------------------------------------------------------- +1.0 General Block Styles +2.0 Blocks - Common Blocks +3.0 Blocks - Formatting +4.0 Blocks - Layout Elements +5.0 Blocks - Widgets +6.0 Blocks - Colors +--------------------------------------------------------------*/ + +/*-------------------------------------------------------------- +1.0 General Block Styles +--------------------------------------------------------------*/ + +figure[class^="wp-block-"] { + margin-left: 0; + margin-right: 0; +} + +/* Captions */ + +[class^="wp-block-"] figcaption { + font-family: Georgia, serif; + font-size: 12px; +} + +[class^="wp-block-"]:not(.wp-block-gallery) figcaption { + color: #666; + margin-bottom: 1.625em; + max-width: 96%; + max-width: calc( 100% - 18px ); + padding: 3px 0 5px 40px; + position: relative; + text-align: left; +} + +[class^="wp-block-"]:not(.wp-block-gallery) figcaption:before { + color: #666; + content: '\2014'; + font-size: 14px; + font-style: normal; + font-weight: bold; + margin-right: 5px; + position: absolute; + left: 10px; + top: 0; +} + +.rtl [class^="wp-block-"]:not(.wp-block-gallery) figcaption { + padding-left: 0; + padding-right: 40px; + text-align: right; +} + +.rtl [class^="wp-block-"]:not(.wp-block-gallery) figcaption:before { + left: 0; + margin-left: 5px; + margin-right: 0; + right: 10px; +} + +/*-------------------------------------------------------------- +2.0 Blocks - Common Blocks +--------------------------------------------------------------*/ + +/* Paragraph */ + +p.has-drop-cap:not(:focus)::first-letter { + font-size: 5em; + margin-top: 0.1em; +} + +/* Gallery */ + +.wp-block-gallery { + margin: 0 0 1.625em; +} + +.wp-block-gallery .blocks-gallery-item figcaption { + margin-bottom: 0; + padding-left: 0; + padding-right: 0; +} + +.wp-block-gallery .blocks-gallery-item img { + border: 0; + padding: 0; +} + +/* Quote */ + +.wp-block-quote { + margin: 0 3em; +} + +.wp-block-quote:not(.is-large):not(.is-style-large) { + border: 0; + padding-left: 0; + padding-right: 0; +} + +.wp-block-quote.is-large p, +.wp-block-quote.is-style-large p { + font-size: 20px; +} + +.wp-block-quote cite { + color: #666; + font: 12px "Helvetica Neue", Helvetica, Arial, sans-serif; + font-weight: 300; + letter-spacing: 0.05em; + text-transform: uppercase; +} + +.wp-block-quote.is-large cite, +.wp-block-quote.is-style-large cite { + font-size: 16px; +} + +/* Audio */ + +.wp-block-audio audio { + display: block; + width: 100%; +} + +/* Cover Image */ + +.wp-block-cover-image.aligncenter { + clear: both; + display: flex; +} + +.wp-block-cover-image.alignleft { + margin-right: 1.625em; +} + +.wp-block-cover-image.alignright { + margin-left: 1.625em; +} + +/* File */ + +.wp-block-file .wp-block-file__button { + background: #222; + border: none; + -moz-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: 0px 1px 2px rgba(0,0,0,0.3); + -moz-box-shadow: 0px 1px 2px rgba(0,0,0,0.3); + box-shadow: 0px 1px 2px rgba(0,0,0,0.3); + color: #eee; + cursor: pointer; + font-size: 15px; + padding: 5px 22px; + text-shadow: 0 -1px 0 rgba(0,0,0,0.3); +} + +.wp-block-file .wp-block-file__button:active { + background: #1982d1; + color: #bfddf3; +} + +.rtl .wp-block-file * + .wp-block-file__button { + margin-left: 0.75em; + margin-right: 0; +} + +/*-------------------------------------------------------------- +3.0 Blocks - Formatting +--------------------------------------------------------------*/ + +/* Code */ + +.wp-block-code { + background-color: transparent; + border: 0; + padding: 0; +} + +/* Pullquote */ + +.wp-block-pullquote__citation, +.wp-block-pullquote cite, +.wp-block-pullquote footer { + color: #141412; +} + +.wp-block-pullquote.alignleft { + margin-right: 1.625em; +} + +.wp-block-pullquote.alignright { + margin-left: 1.625em; +} + +/* Table */ + +.wp-block-table { + border-bottom: 1px solid #ddd; + border-collapse: collapse; + border-spacing: 0; + width: 100%; +} + +.wp-block-table th { + border: 0; + font-weight: bold; + padding: 6px 10px 6px 0; + text-transform: uppercase; +} + +.wp-block-table td { + border: 0; + border-top: 1px solid #ddd; + padding: 6px 10px 6px 0; +} + +/*-------------------------------------------------------------- +4.0 Blocks - Layout Elements +--------------------------------------------------------------*/ + +/* Buttons */ + +.wp-block-button .wp-block-button__link { + background: #222; + border: none; + -moz-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: 0px 1px 2px rgba(0,0,0,0.3); + -moz-box-shadow: 0px 1px 2px rgba(0,0,0,0.3); + box-shadow: 0px 1px 2px rgba(0,0,0,0.3); + color: #eee; + cursor: pointer; + font-size: 15px; + margin: 20px 0; + padding: 5px 22px; + text-shadow: 0 -1px 0 rgba(0,0,0,0.3); +} + +.wp-block-button .wp-block-button__link:active { + background: #1982d1; + color: #bfddf3; +} + +/* Separator */ + +.wp-block-separator { + border: 0; + max-width: 100px; +} + +.wp-block-separator.is-style-wide { + max-width: 100%; +} + +/*-------------------------------------------------------------- +5.0 Blocks - Widgets +--------------------------------------------------------------*/ + +/* Latest Comments */ + +.wp-block-latest-comments { + margin: 0; + padding: 0; +} + +.wp-block-latest-comments .avatar, +.wp-block-latest-comments__comment-avatar { + -moz-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: 0 1px 2px #ccc; + -moz-box-shadow: 0 1px 2px #ccc; + box-shadow: 0 1px 2px #ccc; +} + +.wp-block-latest-comments__comment, +.wp-block-latest-comments__comment-excerpt, +.wp-block-latest-comments__comment-excerpt p { + font-size: 15px; +} + +.wp-block-latest-comments__comment-excerpt p:last-child { + margin-bottom: 0; +} + +.wp-block-latest-comments__comment-meta, +.wp-block-latest-comments__comment-date { + color: #666; + font-size: 12px; + line-height: 2.2em; +} + +.wp-block-latest-comments__comment-meta a { + font-weight: bold; +} + +.wp-block-latest-comments .wp-block-latest-comments__comment { + -moz-border-radius: 3px; + border-radius: 3px; + margin: 0 0 2.625em; + position: relative; +} + +/* Latest Posts */ + +.wp-block-latest-posts.is-grid { + margin-left: 0; + margin-right: 0; +} + +/*-------------------------------------------------------------- +6.0 Blocks - Colors +--------------------------------------------------------------*/ + +.has-blue-color { + color: #1982d1; +} + +.has-blue-background-color { + background-color: #1982d1; +} + +.has-black-color { + color: #000; +} + +.has-black-background-color { + background-color: #000; +} + +.has-dark-gray-color { + color: #373737; +} + +.has-dark-gray-background-color { + background-color: #373737; +} + +.has-medium-gray-color { + color: #666; +} + +.has-medium-gray-background-color { + background-color: #666; +} + +.has-light-gray-color { + color: #e2e2e2; +} + +.has-light-gray-background-color { + background-color: #e2e2e2; +} + +.has-white-color { + color: #fff; +} + +.has-white-background-color { + background-color: #fff; +} diff --git a/src/wp-content/themes/twentyeleven/editor-blocks.css b/src/wp-content/themes/twentyeleven/editor-blocks.css new file mode 100644 index 0000000000000..65ad9f1a57da4 --- /dev/null +++ b/src/wp-content/themes/twentyeleven/editor-blocks.css @@ -0,0 +1,443 @@ +/* +Theme Name: Twenty Eleven +Description: Used to style Gutenberg Blocks in the editor. +*/ + +/*-------------------------------------------------------------- +>>> TABLE OF CONTENTS: +---------------------------------------------------------------- +1.0 General Typography +2.0 General Block Styles +3.0 Blocks - Common Blocks +4.0 Blocks - Formatting +5.0 Blocks - Layout Elements +6.0 Blocks - Widgets +--------------------------------------------------------------*/ + +/*-------------------------------------------------------------- +1.0 General Typography +--------------------------------------------------------------*/ + +.edit-post-visual-editor .editor-block-list__block, +.edit-post-visual-editor .editor-block-list__block p, +.editor-default-block-appender input[type="text"].editor-default-block-appender__content { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 15px; + font-size: 300; + line-height: 1.625; +} + +.edit-post-visual-editor .editor-block-list__block { + color: #333; +} + +.editor-post-title__block .editor-post-title__input { + color: #000; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 36px; + line-height: 48px; +} + +.edit-post-visual-editor h1, +.wp-block-freeform.block-library-rich-text__tinymce h1, +.edit-post-visual-editor h2, +.wp-block-freeform.block-library-rich-text__tinymce h2 { + font-size: 15px; + margin: 0 0 0.8125em; +} + +.edit-post-visual-editor h3, +.wp-block-freeform.block-library-rich-text__tinymce h3 { + font-size: 10px; + font-weight: 300; + letter-spacing: 0.1em; + line-height: 2.6em; + text-transform: uppercase; +} + +.edit-post-visual-editor h4, +.wp-block-freeform.block-library-rich-text__tinymce h4, +.edit-post-visual-editor h5, +.wp-block-freeform.block-library-rich-text__tinymce h5, +.edit-post-visual-editor h6, +.wp-block-freeform.block-library-rich-text__tinymce h6 { + font-size: 15px; + font-weight: 300; + line-height: 1.625; +} + +/*-------------------------------------------------------------- +2.0 General Block Styles +--------------------------------------------------------------*/ + +/* Main column width */ + +body.gutenberg-editor-page .edit-post-visual-editor .editor-post-title__block, +body.gutenberg-editor-page .edit-post-visual-editor .editor-default-block-appender, +body.gutenberg-editor-page .edit-post-visual-editor .editor-block-list__block { + max-width: 614px; +} + +/* Link styles */ + +.edit-post-visual-editor a, +.editor-block-list__block a, +.wp-block-freeform.block-library-rich-text__tinymce a { + color: #1982d1; +} + +/* List styles */ + +.edit-post-visual-editor ul:not(.wp-block-gallery), +.editor-block-list__block ul:not(.wp-block-gallery), +.block-library-list ul.editor-rich-text__tinymce, +.edit-post-visual-editor ol, +.editor-block-list__block ol, +.block-library-list ol.editor-rich-text__tinymce { + margin: 0 0 1.625em 2.5em; + padding: 0; +} + +.block-library-list .editor-rich-text__tinymce { + padding: 0; +} + +.edit-post-visual-editor ul:not(.wp-block-gallery), +.edit-post-visual-editor .editor-block-list__block ul:not(.wp-block-gallery), +.block-library-list ul { + list-style-type: square; +} + +.edit-post-visual-editor ol, +.editor-block-list__block ol, +.block-library-list ol { + list-style: decimal; +} + +.edit-post-visual-editor ol ol, +.editor-block-list__block ol ol, +.block-library-list ol ol { + list-style: upper-alpha; +} + +.edit-post-visual-editor ol ol ol, +.editor-block-list__block ol ol ol, +.block-library-list ol ol ol { + list-style: lower-roman; +} + +.edit-post-visual-editor ol ol ol ol, +.editor-block-list__block ol ol ol ol, +.block-library-list ol ol ol ol { + list-style: lower-alpha; +} + +.edit-post-visual-editor ul:not(.wp-block-gallery) li > ul, +.editor-block-list__block ul:not(.wp-block-gallery) li > ul, +.block-library-list .editor-rich-text__tinymce li > ul, +.edit-post-visual-editor li > ol, +.editor-block-list__block li > ol, +.block-library-list .editor-rich-text__tinymce li > ol, +.wp-block-freeform.block-library-rich-text__tinymce li, +.editor-block-list__block li { + margin-bottom: 0; +} + +.rtl .edit-post-visual-editor ul:not(.wp-block-gallery), +.rtl .editor-block-list__block ul:not(.wp-block-gallery), +.rtl .block-library-list ul, +.rtl .edit-post-visual-editor ol, +.rtl .editor-block-list__block ol, +.rtl .block-library-list ol { + margin-left: 0; + margin-right: 1.3333em; +} + +/* Captions */ + +[class^="wp-block-"] figcaption { + font-family: Georgia, serif; + font-size: 12px; +} + +[class^="wp-block-"]:not(.wp-block-gallery) figcaption { + color: #666; + margin-bottom: 1.625em; + max-width: 96%; + max-width: calc( 100% - 18px ); + padding: 3px 0 5px 40px; + position: relative; + text-align: left; +} + +[class^="wp-block-"]:not(.wp-block-gallery) figcaption:before { + color: #666; + content: '\2014'; + font-size: 14px; + font-style: normal; + font-weight: bold; + margin-right: 5px; + position: absolute; + left: 10px; + top: 0; +} + +.rtl [class^="wp-block-"]:not(.wp-block-gallery) figcaption { + padding-left: 0; + padding-right: 40px; + text-align: right; +} + +.rtl [class^="wp-block-"]:not(.wp-block-gallery) figcaption:before { + left: 0; + margin-left: 5px; + margin-right: 0; + right: 10px; +} + +/* Quote */ + +.wp-block-freeform.block-library-rich-text__tinymce blockquote { + border: 0; + font-style: italic; + margin: 0 3em; + padding: 0; +} + +.wp-block-freeform.block-library-rich-text__tinymce blockquote p { + font-family: Georgia, "Bitstream Charter", serif; + font-size: 15px; + font-weight: normal; +} + +.wp-block-freeform.block-library-rich-text__tinymce blockquote cite { + color: #666; + font: 12px "Helvetica Neue", Helvetica, Arial, sans-serif; + font-weight: 300; + letter-spacing: 0.05em; + text-transform: uppercase; +} + +/* Code */ + +.wp-block-freeform.block-library-rich-text__tinymce code { + background: transparent; +} + +/*-------------------------------------------------------------- +3.0 Blocks - Common Blocks +--------------------------------------------------------------*/ + +/* Paragraph */ + +p.has-drop-cap:not(:focus)::first-letter { + font-size: 5em; + margin-top: 0.1em; +} + +/* Gallery */ + +.editor-block-list__block .wp-block-gallery { + margin: 0 0 1.625em; +} + +.wp-block-gallery figcaption { + margin-bottom: 0; + max-width: 100%; +} + +.wp-block-gallery .blocks-gallery-item img { + border: 0; + padding: 0; +} + +/* Quote */ + +.wp-block-quote { + font-style: italic; + font-weight: normal; + margin: 0 3em; + padding: 0; +} + +.edit-post-visual-editor .editor-block-list__block .wp-block-quote p { + font-family: Georgia, "Bitstream Charter", serif; +} + +.wp-block-quote:not(.is-large):not(.is-style-large) { + border: 0; + padding-left: 0; + padding-right: 0; +} + +.wp-block-quote .wp-block-quote__citation.editor-rich-text__tinymce.mce-content-body { + color: #666; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-weight: 300; + letter-spacing: 0.05em; + text-transform: uppercase; +} + +.wp-block-quote.is-large p, +.wp-block-quote.is-style-large p { + font-size: 20px; +} + +.wp-block-quote.is-large .wp-block-quote__citation, +.wp-block-quote.is-style-large .wp-block-quote__citation { + font-size: 16px; +} + + +/* Cover Image */ + +.edit-post-visual-editor .editor-block-list__block .wp-block-cover-image p.wp-block-cover-image-text { + font-size: 30px; + line-height: 37.5px; +} + +/* File */ + +.wp-block-file .wp-block-file__textlink { + color: #1982d1; +} + +.wp-block-file .wp-block-file__button { + background: #222; + border: none; + -moz-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: 0px 1px 2px rgba(0,0,0,0.3); + -moz-box-shadow: 0px 1px 2px rgba(0,0,0,0.3); + box-shadow: 0px 1px 2px rgba(0,0,0,0.3); + color: #eee; + cursor: pointer; + font-size: 15px; + line-height: 24px; + padding: 5px 22px; + text-shadow: 0 -1px 0 rgba(0,0,0,0.3); +} + +/*-------------------------------------------------------------- +4.0 Blocks - Formatting +--------------------------------------------------------------*/ + +/* Code */ + +.wp-block-code { + background: transparent; + border: 0; + padding: 0; +} + +/* Pullquote */ + +.edit-post-visual-editor .editor-block-list__block .wp-block-pullquote p { + font-family: Georgia, "Bitstream Charter", serif; + font-style: italic; + font-weight: normal; +} + +.wp-block-pullquote.alignleft blockquote > .editor-rich-text p, +.wp-block-pullquote.alignright blockquote > .editor-rich-text p { + font-size: 20px; +} + +/* Table */ + +.editor-block-list__block .wp-block-table th, +.editor-block-list__block .wp-block-table td { + padding: 0; +} + +.wp-block-table__cell-content { + padding: 6px; +} + +.rtl .editor-block-list__block .wp-block-table th, +.rtl .editor-block-list__block .wp-block-table td, +.rtl .editor-block-list__block th, +.rtl .editor-block-list__block td { + text-align: right; +} + + +/*-------------------------------------------------------------- +5.0 Blocks - Layout Elements +--------------------------------------------------------------*/ + +/* Buttons */ + +.wp-block-button .wp-block-button__link { + background: #222; + border: none; + -moz-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: 0px 1px 2px rgba(0,0,0,0.3); + -moz-box-shadow: 0px 1px 2px rgba(0,0,0,0.3); + box-shadow: 0px 1px 2px rgba(0,0,0,0.3); + color: #eee; + cursor: pointer; + font-size: 15px; + line-height: 24px; + margin: 20px 0; + padding: 5px 22px; + text-shadow: 0 -1px 0 rgba(0,0,0,0.3); +} + +/*-------------------------------------------------------------- +6.0 Blocks - Widgets +--------------------------------------------------------------*/ + +/* Latest Comments */ + +.wp-block-latest-comments { + margin: 0; + padding: 0; +} + +.wp-block-latest-comments .avatar, +.wp-block-latest-comments__comment-avatar { + -moz-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: 0 1px 2px #ccc; + -moz-box-shadow: 0 1px 2px #ccc; + box-shadow: 0 1px 2px #ccc; + padding: 0; +} + +.wp-block-latest-comments__comment, +.wp-block-latest-comments__comment-excerpt, +.wp-block-latest-comments__comment-excerpt p { + font-size: 15px; +} + +.wp-block-latest-comments__comment-excerpt p:last-child { + margin-bottom: 0; +} + +.wp-block-latest-comments__comment-meta, +.wp-block-latest-comments__comment-date { + color: #666; + font-size: 12px; + line-height: 2.2em; +} + +.wp-block-latest-comments__comment-meta a { + font-weight: bold; +} + +.wp-block-latest-comments .wp-block-latest-comments__comment { + -moz-border-radius: 3px; + border-radius: 3px; + margin: 0 0 2.625em; + position: relative; +} + +/* Latest Posts */ + +.edit-post-visual-editor .editor-block-list__block .wp-block-latest-posts.is-grid { + list-style: none; + margin-left: 0; + margin-right: 0; +} diff --git a/src/wp-content/themes/twentyeleven/functions.php b/src/wp-content/themes/twentyeleven/functions.php index 4d6ab74e9e6db..cc8f2ca464564 100644 --- a/src/wp-content/themes/twentyeleven/functions.php +++ b/src/wp-content/themes/twentyeleven/functions.php @@ -82,6 +82,46 @@ function twentyeleven_setup() { // This theme styles the visual editor with editor-style.css to match the theme style. add_editor_style(); + // Load regular editor styles into the new block-based editor. + add_theme_support( 'editor-styles' ); + + // Load default block styles. + add_theme_support( 'wp-block-styles' ); + + // Add support for custom color scheme. + add_theme_support( 'editor-color-palette', array( + array( + 'name' => __( 'Blue', 'twentyeleven' ), + 'slug' => 'blue', + 'color' => '#1982d1', + ), + array( + 'name' => __( 'Black', 'twentyeleven' ), + 'slug' => 'black', + 'color' => '#000', + ), + array( + 'name' => __( 'Dark Gray', 'twentyeleven' ), + 'slug' => 'dark-gray', + 'color' => '#373737', + ), + array( + 'name' => __( 'Medium Gray', 'twentyeleven' ), + 'slug' => 'medium-gray', + 'color' => '#666', + ), + array( + 'name' => __( 'Light Gray', 'twentyeleven' ), + 'slug' => 'light-gray', + 'color' => '#e2e2e2', + ), + array( + 'name' => __( 'White', 'twentyeleven' ), + 'slug' => 'white', + 'color' => '#fff', + ) + ) ); + // Load up our theme options page and related code. require( get_template_directory() . '/inc/theme-options.php' ); @@ -232,6 +272,28 @@ function twentyeleven_setup() { } endif; // twentyeleven_setup +/** + * Enqueue scripts and styles for front end. + * + * @since Twenty Eleven 2.9 + */ +function twentyeleven_scripts_styles() { + // Theme block stylesheet. + wp_enqueue_style( 'twentyeleven-block-style', get_template_directory_uri() . '/blocks.css', array(), '20181018' ); +} +add_action( 'wp_enqueue_scripts', 'twentyeleven_scripts_styles' ); + +/** + * Enqueue editor styles for Gutenberg + * + * @since Twenty Eleven 2.9 + */ +function twentyeleven_block_editor_styles() { + // Block styles. + wp_enqueue_style( 'twentyeleven-block-editor-style', get_template_directory_uri() . '/editor-blocks.css' ); +} +add_action( 'enqueue_block_editor_assets', 'twentyeleven_block_editor_styles' ); + if ( ! function_exists( 'twentyeleven_header_style' ) ) : /** * Styles the header image and text displayed on the blog. From fcabcf15d5f5c823984e3e130cfe86b9a45d3515 Mon Sep 17 00:00:00 2001 From: "David A. Kennedy" Date: Mon, 22 Oct 2018 23:17:55 +0000 Subject: [PATCH 500/537] Twenty Twelve: Add styles and support for the new block-based editor. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This update adds styles and theme support related to the new block-based editor to enhance the experience of using it with Twenty Twelve. These are the specific changes made to this theme: * Add blocks.css, to style blocks on the front end, to make sure they match the theme’s existing HTML element styles. * Add editor-blocks.css to style blocks in the editor, to make sure they match the theme’s existing HTML element styles. * Add theme support for `editor-styles`, to pull the existing editor stylesheet into the new editor. * Add theme support for `wp-block-styles`, to load the default block styles on the front end. * Add theme support for `editor-color-palette`, to load a color palette based on the theme’s color scheme into the block-based editor. Props ianbelanger, crunnells, laurelfulford. Fixes #45040. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43795 602fd350-edb4-49c9-b593-d223f7449a82 --- .../themes/twentytwelve/css/blocks.css | 387 ++++++++++++++++ .../themes/twentytwelve/css/editor-blocks.css | 424 ++++++++++++++++++ .../themes/twentytwelve/functions.php | 51 +++ 3 files changed, 862 insertions(+) create mode 100644 src/wp-content/themes/twentytwelve/css/blocks.css create mode 100644 src/wp-content/themes/twentytwelve/css/editor-blocks.css diff --git a/src/wp-content/themes/twentytwelve/css/blocks.css b/src/wp-content/themes/twentytwelve/css/blocks.css new file mode 100644 index 0000000000000..b3e3efb783385 --- /dev/null +++ b/src/wp-content/themes/twentytwelve/css/blocks.css @@ -0,0 +1,387 @@ +/* +Theme Name: Twenty Twelve +Description: Used to style Gutenberg Blocks. +*/ + +/*-------------------------------------------------------------- +>>> TABLE OF CONTENTS: +---------------------------------------------------------------- +1.0 General Block Styles +2.0 Blocks - Common Blocks +3.0 Blocks - Formatting +4.0 Blocks - Layout Elements +5.0 Blocks - Widgets +6.0 Blocks - Colors +--------------------------------------------------------------*/ + +/*-------------------------------------------------------------- +1.0 General Block Styles +--------------------------------------------------------------*/ + +/* Captions */ + +[class^="wp-block-"] figcaption { + color: #757575; + font-size: 12px; + font-size: 0.857142857rem; + line-height: 2; + font-style: italic; + text-align: left; +} + +[class^="wp-block-"].alignleft, +[class^="wp-block-"] .alignleft { + margin-right: 24px; +} + +[class^="wp-block-"].alignright, +[class^="wp-block-"] .alignright { + margin-left: 24px; +} + +.rtl [class^="wp-block-"] figcaption { + text-align: right; +} + +/*-------------------------------------------------------------- +2.0 Blocks - Common Blocks +--------------------------------------------------------------*/ + +/* Paragraph */ + +p.has-drop-cap:not(:focus)::first-letter { + font-size: 5em; + margin-top: 0.1em; +} + +/* Image */ + +.wp-block-image figure:not(.aligncenter) { + line-height: 0; + margin: 0 1.714285714rem; +} + +.wp-block-image figure.alignleft { + margin: 0.857142857rem 1.714285714rem 0.857142857rem 0; +} + +.wp-block-image figure.alignright { + margin: 0.857142857rem 0 0.857142857rem 1.714285714rem; +} + +.wp-block-image figcaption { + padding-top: 0.75em; +} + +[class^="wp-block-"].alignleft, +[class^="wp-block-"] .alignleft, +[class^="wp-block-"].alignright, +[class^="wp-block-"] .alignright { + +} + +/* Gallery */ + +.wp-block-gallery { + margin-bottom: 24px; + margin-bottom: 1.714285714rem; +} + +.wp-block-gallery .blocks-gallery-image figcaption, +.wp-block-gallery .blocks-gallery-item figcaption { + left: 0; + right: 0; + text-align: center; + width: auto; +} + +/* Quote */ + +.wp-block-quote:not(.is-large):not(.is-style-large) { + border: 0; + padding: 1.714285714rem; + padding: 24px; +} + +.wp-block-quote { + padding: 1.714285714rem; + padding: 24px; +} + +.wp-block-quote cite { + color: inherit; + font-size: inherit; + font-style: italic; +} + +.wp-block-quote.is-large p, +.wp-block-quote.is-style-large p { + font-size: 20px; +} + +/* Audio */ + +.wp-block-audio audio { + display: block; + margin-bottom: 1.714285714rem; + width: 100%; +} + +/* Cover Image */ + +.wp-block-cover-image.aligncenter { + display: flex; +} + +/* File */ + +.wp-block-file .wp-block-file__button { + background-color: #e6e6e6; + background-repeat: repeat-x; + background-image: -moz-linear-gradient(top, #f4f4f4, #e6e6e6); + background-image: -ms-linear-gradient(top, #f4f4f4, #e6e6e6); + background-image: -webkit-linear-gradient(top, #f4f4f4, #e6e6e6); + background-image: -o-linear-gradient(top, #f4f4f4, #e6e6e6); + background-image: linear-gradient(top, #f4f4f4, #e6e6e6); + border: 1px solid #d2d2d2; + border-radius: 3px; + box-shadow: 0 1px 2px rgba(64, 64, 64, 0.1); + color: #7c7c7c; + font-family: inherit; + font-size: 11px; + font-size: 0.785714286rem; + font-weight: normal; + line-height: 1.428571429; + padding: 6px 10px; + padding: 0.428571429rem 0.714285714rem; +} + +.wp-block-file .wp-block-file__button:hover, +.wp-block-file .wp-block-file__button:focus { + background-color: #ebebeb; + background-image: -moz-linear-gradient(top, #f9f9f9, #ebebeb); + background-image: -ms-linear-gradient(top, #f9f9f9, #ebebeb); + background-image: -webkit-linear-gradient(top, #f9f9f9, #ebebeb); + background-image: -o-linear-gradient(top, #f9f9f9, #ebebeb); + background-image: linear-gradient(top, #f9f9f9, #ebebeb); + background-repeat: repeat-x; + color: #5e5e5e; +} + +.wp-block-file .wp-block-file__button:focus { + background-color: #e1e1e1; + background-image: -moz-linear-gradient(top, #ebebeb, #e1e1e1); + background-image: -ms-linear-gradient(top, #ebebeb, #e1e1e1); + background-image: -webkit-linear-gradient(top, #ebebeb, #e1e1e1); + background-image: -o-linear-gradient(top, #ebebeb, #e1e1e1); + background-image: linear-gradient(top, #ebebeb, #e1e1e1); + background-repeat: repeat-x; + border-color: transparent; + box-shadow: inset 0 0 8px 2px #c6c6c6, 0 1px 0 0 #f4f4f4; + color: #757575; +} + +.rtl .wp-block-file * + .wp-block-file__button { + margin-left: 0.75em; + margin-right: 0; +} + +/* Video */ + +.wp-block-video video:not(:last-child) { + margin-bottom: 0; +} + +/*-------------------------------------------------------------- +3.0 Blocks - Formatting +--------------------------------------------------------------*/ + +/* Code */ + +pre.wp-block-code { + border: 0; + padding: 0; +} + +/* Pullquote */ + +.wp-block-pullquote__citation, +.wp-block-pullquote cite, +.wp-block-pullquote footer { + font-size: 14px; + text-transform: none; +} + +/* Table */ + +.wp-block-table { + border-bottom: 1px solid #ededed; + border-collapse: collapse; + border-spacing: 0; + font-size: 14px; + line-height: 2; + margin: 0 0 20px; + width: 100%; +} + +.wp-block-table th { + border: 0; + font-weight: bold; + padding: 6px 10px 6px 0; + text-transform: uppercase; +} + +.wp-block-table td { + border: 0; + border-top: 1px solid #ededed; + padding: 6px 10px 6px 0; +} + +/*-------------------------------------------------------------- +4.0 Blocks - Layout Elements +--------------------------------------------------------------*/ + +/* Buttons */ + +.wp-block-button .wp-block-button__link, +.wp-block-button .wp-block-button__link:visited { + background-color: #e6e6e6; + background-repeat: repeat-x; + background-image: -moz-linear-gradient(top, #f4f4f4, #e6e6e6); + background-image: -ms-linear-gradient(top, #f4f4f4, #e6e6e6); + background-image: -webkit-linear-gradient(top, #f4f4f4, #e6e6e6); + background-image: -o-linear-gradient(top, #f4f4f4, #e6e6e6); + background-image: linear-gradient(top, #f4f4f4, #e6e6e6); + border: 1px solid #d2d2d2; + border-radius: 3px; + box-shadow: 0 1px 2px rgba(64, 64, 64, 0.1); + color: #7c7c7c; + font-family: inherit; + font-size: 11px; + font-size: 0.785714286rem; + font-weight: normal; + line-height: 1.428571429; + padding: 6px 10px; + padding: 0.428571429rem 0.714285714rem; +} + +.wp-block-button .wp-block-button__link:hover, +.wp-block-button .wp-block-button__link:focus { + background-color: #ebebeb; + background-image: -moz-linear-gradient(top, #f9f9f9, #ebebeb); + background-image: -ms-linear-gradient(top, #f9f9f9, #ebebeb); + background-image: -webkit-linear-gradient(top, #f9f9f9, #ebebeb); + background-image: -o-linear-gradient(top, #f9f9f9, #ebebeb); + background-image: linear-gradient(top, #f9f9f9, #ebebeb); + background-repeat: repeat-x; + color: #5e5e5e; +} + +.wp-block-button .wp-block-button__link:active { + background-color: #e1e1e1; + background-image: -moz-linear-gradient(top, #ebebeb, #e1e1e1); + background-image: -ms-linear-gradient(top, #ebebeb, #e1e1e1); + background-image: -webkit-linear-gradient(top, #ebebeb, #e1e1e1); + background-image: -o-linear-gradient(top, #ebebeb, #e1e1e1); + background-image: linear-gradient(top, #ebebeb, #e1e1e1); + background-repeat: repeat-x; + border-color: transparent; + box-shadow: inset 0 0 8px 2px #c6c6c6, 0 1px 0 0 #f4f4f4; + color: #757575; +} + +/* Separator */ + +.wp-block-separator { + border: 0; +} + +/*-------------------------------------------------------------- +5.0 Blocks - Widgets +--------------------------------------------------------------*/ + +/* Latest Comments */ + +.wp-block-latest-comments { + margin: 0; + padding: 0; +} + +.wp-block-latest-comments .avatar, +.wp-block-latest-comments__comment-avatar { + border-radius: 0; + box-shadow: none; +} + +.has-avatars .wp-block-latest-comments__comment .wp-block-latest-comments__comment-excerpt, +.has-avatars .wp-block-latest-comments__comment .wp-block-latest-comments__comment-meta { + margin-left: 60px; +} + +.wp-block-latest-comments__comment, +.wp-block-latest-comments__comment-excerpt, +.wp-block-latest-comments__comment-excerpt p { + font-size: 14px; +} + +.wp-block-latest-comments__comment-excerpt p:last-child { + margin-bottom: 0; +} + +.wp-block-latest-comments__comment-date { + color: #5e5e5e; +} + +.wp-block-latest-comments .wp-block-latest-comments__comment { + margin: 0; + padding: 24px 0; + padding: 1.714285714rem 0 0; +} + +.wp-block-latest-comments article { + margin-bottom: 0; +} + +/*-------------------------------------------------------------- +6.0 Blocks - Colors +--------------------------------------------------------------*/ + +.has-blue-color { + color: #21759b; +} + +.has-blue-background-color { + background-color: #21759b; +} + +.has-dark-gray-color { + color: #373737; +} + +.has-dark-gray-background-color { + background-color: #373737; +} + +.has-medium-gray-color { + color: #9f9f9f; +} + +.has-medium-gray-background-color { + background-color: #9f9f9f; +} + +.has-light-gray-color { + color: #e6e6e6; +} + +.has-light-gray-background-color { + background-color: #e6e6e6; +} + +.has-white-color { + color: #fff; +} + +.has-white-background-color { + background-color: #fff; +} diff --git a/src/wp-content/themes/twentytwelve/css/editor-blocks.css b/src/wp-content/themes/twentytwelve/css/editor-blocks.css new file mode 100644 index 0000000000000..fc3cf223facb7 --- /dev/null +++ b/src/wp-content/themes/twentytwelve/css/editor-blocks.css @@ -0,0 +1,424 @@ +/* +Theme Name: Twenty Twelve +Description: Used to style Gutenberg Blocks in the editor. +*/ + +/*-------------------------------------------------------------- +>>> TABLE OF CONTENTS: +---------------------------------------------------------------- +1.0 General Typography +2.0 General Block Styles +3.0 Blocks - Common Blocks +4.0 Blocks - Formatting +5.0 Blocks - Layout Elements +6.0 Blocks - Widgets +--------------------------------------------------------------*/ + +/*-------------------------------------------------------------- +1.0 General Typography +--------------------------------------------------------------*/ + +.edit-post-visual-editor .editor-block-list__block, +.edit-post-visual-editor .editor-block-list__block p, +.editor-default-block-appender input[type="text"].editor-default-block-appender__content { + font-size: 14px; +} + +.edit-post-visual-editor .editor-block-list__block { + color: #444; +} + +.editor-post-title__block .editor-post-title__input { + font-family: "Open Sans", Helvetica, Arial, sans-serif; + font-size: 20px; + font-weight: 400; +} + +@media screen and (min-width: 600px) { + .editor-post-title__block .editor-post-title__input { + font-size: 22px; + } +} + +.wp-block-freeform.block-library-rich-text__tinymce h1 { + font-size: 21px; +} + +.wp-block-freeform.block-library-rich-text__tinymce h2 { + font-size: 18px; +} + +.wp-block-freeform.block-library-rich-text__tinymce h3 { + font-size: 16px; +} + +.wp-block-freeform.block-library-rich-text__tinymce h4 { + font-size: 14px; +} + +.wp-block-freeform.block-library-rich-text__tinymce h5 { + font-size: 13px; +} + +.wp-block-freeform.block-library-rich-text__tinymce h6 { + font-size: 12px; +} + +/*-------------------------------------------------------------- +2.0 General Block Styles +--------------------------------------------------------------*/ + +/* Main column width */ + +body.gutenberg-editor-page .edit-post-visual-editor .editor-post-title__block, +body.gutenberg-editor-page .edit-post-visual-editor .editor-default-block-appender, +body.gutenberg-editor-page .edit-post-visual-editor .editor-block-list__block { + max-width: 655px; +} + +/* Link styles */ + +.edit-post-visual-editor a, +.editor-block-list__block a, +.wp-block-freeform.block-library-rich-text__tinymce a { + color: #21759b; +} + +/* List styles */ + +.wp-block-freeform.block-library-rich-text__tinymce ol, +.wp-block-freeform.block-library-rich-text__tinymce ul:not(.wp-block-gallery), +.block-library-list ol.editor-rich-text__tinymce, +.block-library-list ul.editor-rich-text__tinymce:not(.wp-block-gallery) { + padding-left: 0; + padding-right: 0; +} + +/* Quote styles */ + +.wp-block-freeform.block-library-rich-text__tinymce blockquote { + border: 0; + font-style: italic; + padding: 24px; +} + +/* Table styles */ + +.wp-block-freeform.block-library-rich-text__tinymce th { + font-size: 11px; +} + +.wp-block-freeform.block-library-rich-text__tinymce td { + font-size: 12px; +} + +.wp-block-freeform.block-library-rich-text__tinymce th, +.wp-block-freeform.block-library-rich-text__tinymce td { + padding-left: 0; + padding-right: 0; +} + +.rtl .wp-block-freeform.block-library-rich-text__tinymce th, +.rtl .wp-block-freeform.block-library-rich-text__tinymce td { + text-align: right; +} + +/* Code styles */ + +.wp-block-freeform.block-library-rich-text__tinymce code { + background-color: transparent; + font-size: 12px; +} + +/* Pre styles */ + +.wp-block-freeform.block-library-rich-text__tinymce pre { + font-size: 12px; +} + +/* Captions */ + +[class^="wp-block-"] figcaption, +[class^="wp-block-"] figcaption.editor-rich-text__tinymce.mce-content-body { + color: #757575; + font-size: 12px; + line-height: 2; + font-style: italic; + text-align: left; +} + +.rtl [class^="wp-block-"] figcaption, +.rtl [class^="wp-block-"] figcaption.editor-rich-text__tinymce.mce-content-body { + text-align: right; +} + +/* Definition Lists */ + +.wp-block-freeform.block-library-rich-text__tinymce dt { + margin-bottom: 0; +} + +/*-------------------------------------------------------------- +3.0 Blocks - Common Blocks +--------------------------------------------------------------*/ + +/* Paragraph */ + +p.has-drop-cap:not(:focus)::first-letter { + font-size: 5em; + margin-top: 0.1em; +} + +/* Image */ + +.wp-block-image { + margin-left: 0; + margin-right: 0; +} + +/* Gallery */ + +.wp-block-gallery { + margin-bottom: 24px; +} + +.wp-block-gallery figcaption, +.wp-block-gallery figcaption.editor-rich-text__tinymce.mce-content-body { + color: #fff; + text-align: center; +} + +/* Quote */ + +.wp-block-quote, +.wp-block-quote:not(.is-large):not(.is-style-large) { + padding: 24px; +} + +.wp-block-quote p { + font-style: italic; +} + +.wp-block-quote:not(.is-large):not(.is-style-large) { + border: 0; +} + +.wp-block-quote.is-large p, +.wp-block-quote.is-style-large p { + font-size: 20px; +} + +.wp-block-quote .wp-block-quote__citation { + color: inherit; + font-style: italic; +} + +.wp-block-quote.is-large .wp-block-quote__citation, +.wp-block-quote.is-style-large .wp-block-quote__citation { + font-size: 18px; +} + +/* Cover Image */ + +.edit-post-visual-editor .editor-block-list__block .wp-block-cover-image p { + font-size: 28px; +} + +/* File */ + +.wp-block-file .wp-block-file__textlink { + color: #21759b; + text-decoration: underline; +} + +.wp-block-file .wp-block-file__button, +.wp-block-button .wp-block-button__link:hover { + background-color: #e6e6e6; + background-repeat: repeat-x; + background-image: -moz-linear-gradient(top, #f4f4f4, #e6e6e6); + background-image: -ms-linear-gradient(top, #f4f4f4, #e6e6e6); + background-image: -webkit-linear-gradient(top, #f4f4f4, #e6e6e6); + background-image: -o-linear-gradient(top, #f4f4f4, #e6e6e6); + background-image: linear-gradient(top, #f4f4f4, #e6e6e6); + border: 1px solid #d2d2d2; + border-radius: 3px; + box-shadow: 0 1px 2px rgba(64, 64, 64, 0.1); + color: #7c7c7c; + font-family: inherit; + font-size: 11px; + font-weight: normal; + line-height: 1.428571429; + padding: 6px 10px; +} + +/*-------------------------------------------------------------- +4.0 Blocks - Formatting +--------------------------------------------------------------*/ + +/* Verse */ + +.editor-block-list__block .wp-block-verse pre { + font-size: 12px; +} + +/* Code */ + +.wp-block-code { + border: 0; + font-size: 12px; + line-height: 2; + padding: 0; +} + +.wp-block-html .CodeMirror-sizer { + line-height: 1.7; +} + +/* Preformatted */ + +.editor-block-list__block .wp-block-preformatted pre { + font-size: 12px; +} + +/* Pullquote */ + +.wp-block-pullquote { + font-style: italic; +} + +.edit-post-visual-editor .wp-block-pullquote { + margin: 0; +} + +.wp-block-pullquote .wp-block-pullquote__citation, +.wp-block-pullquote cite { + font-size: 14px; + text-transform: none; +} + +/* Table */ + +.wp-block-table { + border-bottom: 1px solid #ededed; + border-collapse: collapse; + border-spacing: 0; + font-size: 14px; + line-height: 2; + margin: 0 0 20px; + width: 100%; +} + +.editor-block-list__block .wp-block-table th { + border: 0; + font-size: 11px; + font-weight: bold; + text-transform: uppercase; +} + +.editor-block-list__block .wp-block-table td { + border: 0; + border-top: 1px solid #ededed; + font-size: 12px; + padding: 0; +} + +.wp-block-table__cell-content { + padding: 6px 10px 6px 0; +} + +/*-------------------------------------------------------------- +5.0 Blocks - Layout Elements +--------------------------------------------------------------*/ + +/* Buttons */ + +.wp-block-button .wp-block-button__link, +.wp-block-button .wp-block-button__link:hover { + background-color: #e6e6e6; + background-repeat: repeat-x; + background-image: -moz-linear-gradient(top, #f4f4f4, #e6e6e6); + background-image: -ms-linear-gradient(top, #f4f4f4, #e6e6e6); + background-image: -webkit-linear-gradient(top, #f4f4f4, #e6e6e6); + background-image: -o-linear-gradient(top, #f4f4f4, #e6e6e6); + background-image: linear-gradient(top, #f4f4f4, #e6e6e6); + border: 1px solid #d2d2d2; + border-radius: 3px; + box-shadow: 0 1px 2px rgba(64, 64, 64, 0.1); + color: #7c7c7c; + font-family: inherit; + font-size: 11px; + font-weight: normal; + line-height: 1.428571429; + padding: 6px 10px; +} + +/* Separator */ + +.editor-block-list__block hr.wp-block-separator { + margin-left: auto; + margin-right: auto; +} + +/*-------------------------------------------------------------- +6.0 Blocks - Widgets +--------------------------------------------------------------*/ + +/* Archives */ +.gutenberg ul.wp-block-archives { + padding-left: 0; +} + +/* Categories */ + +.gutenberg .wp-block-categories ul { + padding-left: 0; +} + +/* Latest Comments */ + +.editor-block-list__block .wp-block-latest-comments { + margin: 0; + padding: 0; +} + +.wp-block-latest-comments .avatar, +.wp-block-latest-comments__comment-avatar { + border-radius: 0; + box-shadow: none; +} + +.has-avatars .wp-block-latest-comments__comment .wp-block-latest-comments__comment-excerpt, +.has-avatars .wp-block-latest-comments__comment .wp-block-latest-comments__comment-meta { + margin-left: 60px; +} + +.wp-block-latest-comments__comment, +.wp-block-latest-comments__comment-excerpt, +.wp-block-latest-comments__comment-excerpt p { + font-size: 14px; +} + +.wp-block-latest-comments__comment-excerpt p:last-child { + margin-bottom: 0; +} + +.wp-block-latest-comments__comment-date { + color: #5e5e5e; +} + +.wp-block-latest-comments .wp-block-latest-comments__comment { + margin: 0; + padding: 24px 0; +} + +.wp-block-latest-comments article { + border-bottom: 4px double #ededed; + padding-bottom: 2em; +} + +/* Latest Posts */ + +.gutenberg .wp-block-latest-posts { + padding-left: 0; + padding-right: 0; +} diff --git a/src/wp-content/themes/twentytwelve/functions.php b/src/wp-content/themes/twentytwelve/functions.php index 68d44aaed02ff..51c26754d3ae0 100644 --- a/src/wp-content/themes/twentytwelve/functions.php +++ b/src/wp-content/themes/twentytwelve/functions.php @@ -54,6 +54,41 @@ function twentytwelve_setup() { // This theme styles the visual editor with editor-style.css to match the theme style. add_editor_style(); + // Load regular editor styles into the new block-based editor. + add_theme_support( 'editor-styles' ); + + // Load default block styles. + add_theme_support( 'wp-block-styles' ); + + // Add support for custom color scheme. + add_theme_support( 'editor-color-palette', array( + array( + 'name' => __( 'Blue', 'twentytwelve' ), + 'slug' => 'blue', + 'color' => '#21759b', + ), + array( + 'name' => __( 'Dark Gray', 'twentytwelve' ), + 'slug' => 'dark-gray', + 'color' => '#444', + ), + array( + 'name' => __( 'Medium Gray', 'twentytwelve' ), + 'slug' => 'medium-gray', + 'color' => '#9f9f9f', + ), + array( + 'name' => __( 'Light Gray', 'twentytwelve' ), + 'slug' => 'light-gray', + 'color' => '#e6e6e6', + ), + array( + 'name' => __( 'White', 'twentytwelve' ), + 'slug' => 'white', + 'color' => '#fff', + ), + ) ); + // Adds RSS feed links to for posts and comments. add_theme_support( 'automatic-feed-links' ); @@ -151,12 +186,28 @@ function twentytwelve_scripts_styles() { // Loads our main stylesheet. wp_enqueue_style( 'twentytwelve-style', get_stylesheet_uri() ); + // Theme block stylesheet. + wp_enqueue_style( 'twentytwelve-block-style', get_template_directory_uri() . '/css/blocks.css', array( 'twentytwelve-style' ), '20181018' ); + // Loads the Internet Explorer specific stylesheet. wp_enqueue_style( 'twentytwelve-ie', get_template_directory_uri() . '/css/ie.css', array( 'twentytwelve-style' ), '20121010' ); $wp_styles->add_data( 'twentytwelve-ie', 'conditional', 'lt IE 9' ); } add_action( 'wp_enqueue_scripts', 'twentytwelve_scripts_styles' ); +/** + * Enqueue editor styles for Gutenberg + * + * @since Twenty Twelve 2.6 + */ +function twentytwelve_block_editor_styles() { + // Block styles. + wp_enqueue_style( 'twentytwelve-block-editor-style', get_template_directory_uri() . '/css/editor-blocks.css' ); + // Add custom fonts. + wp_enqueue_style( 'twentytwelve-fonts', twentytwelve_get_font_url(), array(), null ); +} +add_action( 'enqueue_block_editor_assets', 'twentytwelve_block_editor_styles' ); + /** * Add preconnect for Google Fonts. * From d5e7451cefd476af8a7136d075ec71ea5de4fe09 Mon Sep 17 00:00:00 2001 From: "David A. Kennedy" Date: Mon, 22 Oct 2018 23:43:55 +0000 Subject: [PATCH 501/537] Twenty Thirteen: Add styles and support for the new block-based editor. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This update adds styles and theme support related to the new block-based editor to enhance the experience of using it with Twenty Thirteen. These are the specific changes made to this theme: * Add blocks.css, to style blocks on the front end, to make sure they match the theme’s existing HTML element styles. * Add editor-blocks.css to style blocks in the editor, to make sure they match the theme’s existing HTML element styles. * Add theme support for `editor-styles`, to pull the existing editor stylesheet into the new editor. * Add theme support for `wp-block-styles`, to load the default block styles on the front end. * Add theme support for `editor-color-palette`, to load a color palette based on the theme’s color scheme into the block-based editor. * Add theme support and styles for `align-wide`, to allow wide and full alignment styles on the blocks. Props laurelfulford, ianbelanger. Fixes #45041. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43796 602fd350-edb4-49c9-b593-d223f7449a82 --- .../themes/twentythirteen/css/blocks.css | 448 ++++++++++++++++++ .../twentythirteen/css/editor-blocks.css | 388 +++++++++++++++ .../themes/twentythirteen/functions.php | 84 ++++ 3 files changed, 920 insertions(+) create mode 100644 src/wp-content/themes/twentythirteen/css/blocks.css create mode 100644 src/wp-content/themes/twentythirteen/css/editor-blocks.css diff --git a/src/wp-content/themes/twentythirteen/css/blocks.css b/src/wp-content/themes/twentythirteen/css/blocks.css new file mode 100644 index 0000000000000..357fbba74e412 --- /dev/null +++ b/src/wp-content/themes/twentythirteen/css/blocks.css @@ -0,0 +1,448 @@ +/* +Theme Name: Twenty Thirteen +Description: Used to style Gutenberg Blocks. +*/ + +/*-------------------------------------------------------------- +>>> TABLE OF CONTENTS: +---------------------------------------------------------------- +1.0 Block Alignments +2.0 General Block Styles +3.0 Blocks - Common Blocks +4.0 Blocks - Formatting +5.0 Blocks - Layout Elements +6.0 Blocks - Widgets +7.0 Blocks - Colors +--------------------------------------------------------------*/ + +/*-------------------------------------------------------------- +1.0 Block Alignments +--------------------------------------------------------------*/ + +.content-area { + overflow-x: hidden; /* prevents side-scrolling caused by use of vw */ +} + +[class^="wp-block-"].alignleft, +[class^="wp-block-"] .alignleft { + margin-right: 20px; +} + +[class^="wp-block-"].alignright, +[class^="wp-block-"] .alignright { + margin-left: 20px; +} + +.alignfull, +.alignwide { + clear: both; +} + +body:not(.sidebar) .alignwide { + margin-left: calc(25% - 25vw); + margin-right: calc(25% - 25vw); + width: auto; + max-width: 1600px; +} + +body:not(.sidebar) .alignfull { + margin-left: calc(50% - 50vw); + margin-right: calc(50% - 50vw); + width: auto; + max-width: 1600px; +} + +/* Make non image-based blocks a bit narrower, so they don't get cut off. */ +body:not(.sidebar) .wp-block-columns.alignfull, +body:not(.sidebar) .wp-block-audio.alignfull, +body:not(.sidebar) .wp-block-table.alignfull, +body:not(.sidebar) .wp-block-latest-comments.alignfull { + margin-left: calc(50% - 48vw); + margin-right: calc(50% - 48vw); +} + +@media (max-width: 999px) { + body.sidebar .alignwide { + margin-left: calc(25% - 25vw); + margin-right: calc(25% - 25vw); + width: auto; + max-width: 1600px; + } + + body.sidebar .alignfull { + margin-left: calc(50% - 50vw); + margin-right: calc(50% - 50vw); + width: auto; + max-width: 1600px; + } + + /* Make non image-based blocks a bit narrower, so they don't get cut off. */ + body.sidebar .wp-block-columns.alignfull, + body.sidebar .wp-block-audio.alignfull, + body.sidebar .wp-block-table.alignfull, + body.sidebar .wp-block-latest-comments.alignfull { + margin-left: calc(50% - 48vw); + margin-right: calc(50% - 48vw); + } +} + +/* Make sure the full and wide blocks still stay in Twenty Thirteen's wide container */ + +@media (min-width: 1600px) { + body:not(.sidebar) .alignfull { + margin-left: calc(50% - 800px); + margin-right: calc(50% - 800px); + width: auto; + max-width: 1000%; + } + + body:not(.sidebar) .wp-block-gallery.alignfull { + margin-left: calc(50% - 808px); /* Adjust for gallery margins */ + margin-right: calc(50% - 808px); + width: auto; + max-width: 1000%; + } +} + +/*-------------------------------------------------------------- +2.0 General Block Styles +--------------------------------------------------------------*/ + +/* Captions */ + +[class^="wp-block-"] figcaption, +[class^="wp-block-"] figcaption.editor-rich-text__tinymce.mce-content-body { + color: #220e10; + font-size: 18px; + font-style: italic; + font-weight: 300; + line-height: 1.5; + margin: 0 0 24px; +} + +/*-------------------------------------------------------------- +3.0 Blocks - Common Blocks +--------------------------------------------------------------*/ + +/* Paragraph */ + +p.has-drop-cap:not(:focus)::first-letter { + font-size: 5em; +} + +/* Gallery */ + +.wp-block-gallery { + margin-bottom: 24px; +} + +.wp-block-gallery figcaption { + margin-bottom: 0; +} + +/* Quote */ + +.wp-block-quote { + margin: 24px 40px; + padding: 0; +} + +.wp-block-quote:not(.is-large):not(.is-style-large) { + border-left: 0; + border-right: 0; + padding-left: 0; + padding-right: 0; +} + +.wp-block-quote.is-large p, +.wp-block-quote.is-style-large p { + font-size: 28px; +} + +.wp-block-quote cite { + color: inherit; + font-size: inherit; + font-style: italic; +} + +/* Audio */ + +.wp-block-audio audio { + display: block; + width: 100%; +} + +/* Cover Image */ + +.wp-block-cover-image.aligncenter { + clear: both; + display: flex; +} + +/* File */ + +.wp-block-file .wp-block-file__button { + background: #e05d22; /* Old browsers */ + background: -webkit-linear-gradient(top, #e05d22 0%, #d94412 100%); /* Chrome 10+, Safari 5.1+ */ + background: linear-gradient(to bottom, #e05d22 0%, #d94412 100%); /* W3C */ + border: none; + border-bottom: 3px solid #b93207; + border-radius: 2px; + color: #fff; + display: inline-block; + font-size: 16px; + padding: 11px 24px 10px; + text-decoration: none; +} + +.wp-block-file .wp-block-file__button:hover, +.wp-block-file .wp-block-file__button:focus { + background: #ed6a31; /* Old browsers */ + background: -webkit-linear-gradient(top, #ed6a31 0%, #e55627 100%); /* Chrome 10+, Safari 5.1+ */ + background: linear-gradient(to bottom, #ed6a31 0%, #e55627 100%); /* W3C */ + color: #fff; + outline: none; +} + +.wp-block-file .wp-block-file__button:active { + background: #d94412; /* Old browsers */ + background: -webkit-linear-gradient(top, #d94412 0%, #e05d22 100%); /* Chrome 10+, Safari 5.1+ */ + background: linear-gradient(to bottom, #d94412 0%, #e05d22 100%); /* W3C */ + border: none; + border-top: 3px solid #b93207; + padding: 10px 24px 11px; +} + +/*-------------------------------------------------------------- +4.0 Blocks - Formatting +--------------------------------------------------------------*/ + +/* Code */ + +.wp-block-code { + background-color: transparent; + border: 0; + padding: 0; +} + +/* Pullquote */ + +.wp-block-pullquote { + border: 0; + color: inherit; + padding: 0.5em 0; +} + +.wp-block-pullquote__citation, +.wp-block-pullquote cite, +.wp-block-pullquote footer { + color: inherit; +} + +/* Table */ + +.wp-block-table { + border-bottom: 1px solid #ededed; + border-collapse: collapse; + border-spacing: 0; + font-size: 14px; + line-height: 2; + margin: 0 0 20px; + width: 100%; +} + +.wp-block-table th { + border: 0; + font-weight: bold; + text-transform: uppercase; +} + +.wp-block-table td { + border: 0; + border-top: 1px solid #ededed; +} + +/*-------------------------------------------------------------- +5.0 Blocks - Layout Elements +--------------------------------------------------------------*/ + +/* Buttons */ + +.wp-block-button.alignleft { + margin-right: 20px; +} + +.wp-block-button.alignright { + margin-left: 20px; +} + +.wp-block-button .wp-block-button__link { + background: #e05d22; /* Old browsers */ + background: -webkit-linear-gradient(top, #e05d22 0%, #d94412 100%); /* Chrome 10+, Safari 5.1+ */ + background: linear-gradient(to bottom, #e05d22 0%, #d94412 100%); /* W3C */ + border: none; + border-bottom: 3px solid #b93207; + border-radius: 2px; + color: #fff; + display: inline-block; + font-size: 16px; + padding: 11px 24px 10px; + text-decoration: none; +} + +.wp-block-button .wp-block-button__link:hover, +.wp-block-button .wp-block-button__link:focus { + background: #ed6a31; /* Old browsers */ + background: -webkit-linear-gradient(top, #ed6a31 0%, #e55627 100%); /* Chrome 10+, Safari 5.1+ */ + background: linear-gradient(to bottom, #ed6a31 0%, #e55627 100%); /* W3C */ + color: #fff; + outline: none; +} + +.wp-block-button .wp-block-button__link:active { + background: #d94412; /* Old browsers */ + background: -webkit-linear-gradient(top, #d94412 0%, #e05d22 100%); /* Chrome 10+, Safari 5.1+ */ + background: linear-gradient(to bottom, #d94412 0%, #e05d22 100%); /* W3C */ + border: none; + border-top: 3px solid #b93207; + padding: 10px 24px 11px; +} + +/* Separator */ + +.wp-block-separator { + border: 0; + max-width: 100px; +} + +.wp-block-separator.is-style-wide { + max-width: 100%; +} + +/*-------------------------------------------------------------- +6.0 Blocks - Widgets +--------------------------------------------------------------*/ + +/* Latest Comments */ + +.wp-block-latest-comments { + margin: 0; + padding: 0; +} + +.wp-block-latest-comments .avatar, +.wp-block-latest-comments__comment-avatar { + border-radius: 0; +} + +.wp-block-latest-comments__comment, +.wp-block-latest-comments__comment-excerpt, +.wp-block-latest-comments__comment-excerpt p { + font-size: 16px; +} + +.wp-block-latest-comments__comment-excerpt p:last-child { + margin-bottom: 0; +} + +.wp-block-latest-comments__comment-date { + font-size: 16px; +} + +.wp-block-latest-comments .wp-block-latest-comments__comment { + background: url(../images/dotted-line.png) repeat-x left top; + margin-bottom: 0; + padding: 24px 0; +} + +/*-------------------------------------------------------------- +7.0 Blocks - Colors +--------------------------------------------------------------*/ + +.has-dark-gray-color { + color: #141412; +} + +.has-dark-gray-background-color { + background-color: #141412; +} + +.has-red-color { + color: #bc360a; +} + +.has-red-background-color { + background-color: #bc360a; +} + +.has-medium-orange-color { + color: #db572f; +} + +.has-medium-orange-background-color { + background-color: #db572f; +} + +.has-light-orange-color { + color: #ea9629; +} + +.has-light-orange-background-color { + background-color: #ea9629; +} + +.has-yellow-color { + color: #fbca3c; +} + +.has-yellow-background-color { + background-color: #fbca3c; +} + +.has-white-color { + color: #fff; +} + +.has-white-background-color { + background-color: #fff; +} + +.has-dark-brown-color { + color: #220e10; +} + +.has-dark-brown-background-color { + background-color: #220e10; +} + +.has-medium-brown-color { + color: #722d19; +} + +.has-medium-brown-background-color { + background-color: #722d19; +} + +.has-light-brown-color { + color: #eadaa6; +} + +.has-light-brown-background-color { + background-color: #eadaa6; +} + +.has-beige-color { + color: #e8e5ce; +} + +.has-brown-background-color { + background-color: #e8e5ce; +} + +.has-off-white-color { + color: #f7f5e7; +} + +.has-off-white-background-color { + background-color: #f7f5e7; +} diff --git a/src/wp-content/themes/twentythirteen/css/editor-blocks.css b/src/wp-content/themes/twentythirteen/css/editor-blocks.css new file mode 100644 index 0000000000000..3fb363db03b62 --- /dev/null +++ b/src/wp-content/themes/twentythirteen/css/editor-blocks.css @@ -0,0 +1,388 @@ +/* +Theme Name: Twenty Thirteen +Description: Used to style Gutenberg Blocks in the editor. +*/ + +/*-------------------------------------------------------------- +>>> TABLE OF CONTENTS: +---------------------------------------------------------------- +1.0 General Typography +2.0 General Block Styles +3.0 Blocks - Common Blocks +4.0 Blocks - Formatting +5.0 Blocks - Layout Elements +6.0 Blocks - Widgets +--------------------------------------------------------------*/ + +/*-------------------------------------------------------------- +1.0 Block Alignments +--------------------------------------------------------------*/ + +.editor-block-list__layout .editor-block-list__block[data-align="full"] > .editor-block-list__block-edit figure { + width: auto; +} + +/*-------------------------------------------------------------- +2.0 General Typography +--------------------------------------------------------------*/ + +.edit-post-visual-editor .editor-block-list__block, +.edit-post-visual-editor .editor-block-list__block p, +.editor-default-block-appender input[type="text"].editor-default-block-appender__content { + font-family: "Source Sans Pro", Helvetica, sans-serif; + font-size: 16px; + font-weight: 400; + line-height: 1.5; +} + +.edit-post-visual-editor .editor-block-list__block { + color: #141412; +} + +.editor-post-title__block .editor-post-title__input { + font-family: Bitter, Georgia, serif; + font-size: 48px; + font-weight: 300; + line-height: 1.0909090909; + margin-bottom: 12px; + margin: 0 0 12px 0; +} + +/*-------------------------------------------------------------- +3.0 General Block Styles +--------------------------------------------------------------*/ + +/* Main column width */ + +.edit-post-visual-editor .editor-post-title__block, +.edit-post-visual-editor .editor-default-block-appender, +.edit-post-visual-editor .editor-block-list__block { + max-width: 634px; /* 604 + 30 for editor block padding */ +} + +/* Link styles */ + +.edit-post-visual-editor a, +.editor-block-list__block a, +.wp-block-freeform.block-library-rich-text__tinymce a { + color: #bc360a; +} + +/* List styles */ + +.edit-post-visual-editor ul:not(.wp-block-gallery), +.editor-block-list__block ul:not(.wp-block-gallery), +.block-library-list ul, +.edit-post-visual-editor ol, +.editor-block-list__block ol, +.block-library-list ol { + margin: 16px 0; + padding: 0 0 0 40px; +} + +.block-library-list .editor-rich-text__tinymce { + padding: 0 0 0 40px; +} + +.edit-post-visual-editor ul:not(.wp-block-gallery), +.edit-post-visual-editor .editor-block-list__block ul:not(.wp-block-gallery), +.block-library-list ul { + list-style-type: square; +} + +.edit-post-visual-editor ol, +.editor-block-list__block ol, +.block-library-list ol { + list-style: decimal; +} + +.edit-post-visual-editor ul:not(.wp-block-gallery) li > ul, +.editor-block-list__block ul:not(.wp-block-gallery) li > ul, +.block-library-list li > ul, +.edit-post-visual-editor li > ol, +.editor-block-list__block li > ol, +.block-library-list li > ol { + margin: 0; +} + +.edit-post-visual-editor ul:not(.wp-block-gallery) li, +.editor-block-list__block ul:not(.wp-block-gallery) li, +.edit-post-visual-editor ol li, +.editor-block-list__block ol li, +.block-library-list li { + margin-bottom: 0; +} + +.rtl .edit-post-visual-editor ul:not(.wp-block-gallery), +.rtl .editor-block-list__block ul:not(.wp-block-gallery), +.rtl .block-library-list ul, +.rtl .edit-post-visual-editor ol, +.rtl .editor-block-list__block ol, +.rtl .block-library-list ol { + padding-left: 0; + padding-right: 40px; +} + +.rtl .block-library-list .editor-rich-text__tinymce { + padding-left: 0; + padding-right: 40px; +} + +/* Quote */ + +.wp-block-freeform.block-library-rich-text__tinymce blockquote { + border-left: 0; + border-right: 0; + font-style: italic; + margin: 24px 40px; + padding-left: 0; + padding-right: 0; +} + +.wp-block-freeform.block-library-rich-text__tinymce blockquote p { + font-size: 24px; + font-weight: 300; +} + +/* Table */ + +.rtl .editor-block-list__block table th, +.rtl .editor-block-list__block table td { + text-align: right; +} + +/* Code */ + +.wp-block-freeform.block-library-rich-text__tinymce code { + background: transparent; +} + +/* Captions */ + +[class^="wp-block-"] figcaption, +[class^="wp-block-"] figcaption.editor-rich-text__tinymce.mce-content-body { + color: #220e10; + font-size: 18px; + font-style: italic; + font-weight: 300; + line-height: 1.5; + margin: 0 0 24px; +} + +/*-------------------------------------------------------------- +4.0 Blocks - Common Blocks +--------------------------------------------------------------*/ + +/* Paragraph */ + +p.has-drop-cap:not(:focus)::first-letter { + font-size: 5em; +} + +/* Gallery */ + +.edit-post-visual-editor .wp-block-gallery { + margin-bottom: 24px; + padding: 0; +} + +.wp-block-gallery figcaption, +.wp-block-gallery figcaption.editor-rich-text__tinymce.mce-content-body { + color: #fff; + font-size: 13px; + margin-bottom: 0; +} + +/* Quote */ + +.wp-block-quote { + font-style: italic; + margin: 24px 40px; + padding: 0; +} + +.editor-block-list__block .wp-block-quote p { + font-size: 24px; + font-weight: 300; +} + +.wp-block-quote:not(.is-large):not(.is-style-large) { + border-left: 0; + border-right: 0; + padding-left: 0; + padding-right: 0; +} + +.wp-block-quote .wp-block-quote__citation.editor-rich-text__tinymce.mce-content-body { + color: inherit; + font-size: 16px; + font-style: italic; + text-transform: uppercase; +} + +.wp-block-quote.is-large p, +.wp-block-quote.is-style-large p { + font-size: 28px; +} + +.wp-block-quote.is-large .wp-block-quote__citation.editor-rich-text__tinymce.mce-content-body, +.wp-block-quote.is-style-large .wp-block-quote__citation.editor-rich-text__tinymce.mce-content-body { + font-size: 18px; +} + +/* Cover Image */ + +.edit-post-visual-editor .editor-block-list__block .wp-block-cover-image p.wp-block-cover-image-text { + font-size: 32px; + line-height: 1.25; +} + +/* File */ + +.wp-block-file .wp-block-file__textlink { + color: #bc360a; +} + +.wp-block-file .wp-block-file__button { + background: #e05d22; /* Old browsers */ + background: -webkit-linear-gradient(top, #e05d22 0%, #d94412 100%); /* Chrome 10+, Safari 5.1+ */ + background: linear-gradient(to bottom, #e05d22 0%, #d94412 100%); /* W3C */ + border: none; + border-bottom: 3px solid #b93207; + border-radius: 2px; + color: #fff; + display: inline-block; + font-size: 16px; + line-height: 24px; + padding: 11px 24px 10px; + text-decoration: none; +} + +/*-------------------------------------------------------------- +5.0 Blocks - Formatting +--------------------------------------------------------------*/ + +/* Code */ + +.wp-block-code { + border: 0; + padding: 0; +} + +/* Pullquote */ + +.edit-post-visual-editor .wp-block-pullquote { + border: 0; + padding: 0.5em 0; +} + +.edit-post-visual-editor .editor-block-list__block .wp-block-pullquote p { + font-weight: 300; +} + +.edit-post-visual-editor .wp-block-pullquote__citation, +.edit-post-visual-editor .wp-block-pullquote cite, +.edit-post-visual-editor .wp-block-pullquote footer { + color: #141412; + font-size: 16px; +} + +/* Table */ + +.wp-block-table { + border-bottom: 1px solid #ededed; + border-collapse: collapse; + border-spacing: 0; + font-size: 14px; + line-height: 2; + margin: 0 0 20px; + width: 100%; +} + +.wp-block-table th { + border: 0; + font-weight: bold; + text-transform: uppercase; +} + +.editor-block-list__block .wp-block-table td { + border: 0; + border-top: 1px solid #ededed; + padding: 0; +} + +/*-------------------------------------------------------------- +6.0 Blocks - Layout Elements +--------------------------------------------------------------*/ + +/* Buttons */ + +.wp-block-button .wp-block-button__link { + background: #e05d22; /* Old browsers */ + background: -webkit-linear-gradient(top, #e05d22 0%, #d94412 100%); /* Chrome 10+, Safari 5.1+ */ + background: linear-gradient(to bottom, #e05d22 0%, #d94412 100%); /* W3C */ + border: none; + border-bottom: 3px solid #b93207; + border-radius: 2px; + color: #fff; + display: inline-block; + font-size: 16px; + line-height: 24px; + padding: 11px 24px 10px; + text-decoration: none; +} + +/* Separator */ + +.editor-block-list__block hr.wp-block-separator { + margin-left: auto; + margin-right: auto; +} + +/*-------------------------------------------------------------- +7.0 Blocks - Widgets +--------------------------------------------------------------*/ + +/* Latest Comments */ + +.editor-block-list__block .wp-block-latest-comments { + margin: 0; + padding: 0; +} + +.wp-block-latest-comments .avatar, +.wp-block-latest-comments__comment-avatar { + border-radius: 0; +} + +.wp-block-latest-comments__comment, +.wp-block-latest-comments__comment-excerpt, +.wp-block-latest-comments__comment-excerpt p { + font-size: 16px; +} + +.wp-block-latest-comments__comment-excerpt p:last-child { + margin-bottom: 0; +} + +.wp-block-latest-comments__comment-date { + font-size: 16px; +} + +.wp-block-latest-comments .wp-block-latest-comments__comment { + background: url(../images/dotted-line.png) repeat-x left top; + margin-bottom: 0; + padding: 24px 0; +} + +/* Latest Posts */ + +.edit-post-visual-editor .editor-block-list__block .wp-block-latest-posts.is-grid { + list-style-type: none; + margin-left: 0; + margin-right: 0; +} + +.edit-post-visual-editor .wp-block-latest-posts.is-grid li { + margin-bottom: 1em; +} diff --git a/src/wp-content/themes/twentythirteen/functions.php b/src/wp-content/themes/twentythirteen/functions.php index 312dc63d75841..f86c3f788ccf0 100644 --- a/src/wp-content/themes/twentythirteen/functions.php +++ b/src/wp-content/themes/twentythirteen/functions.php @@ -74,6 +74,74 @@ function twentythirteen_setup() { */ add_editor_style( array( 'css/editor-style.css', 'genericons/genericons.css', twentythirteen_fonts_url() ) ); + // Load regular editor styles into the new block-based editor. + add_theme_support( 'editor-styles' ); + + // Load default block styles. + add_theme_support( 'wp-block-styles' ); + + // Add support for full and wide align images. + add_theme_support( 'align-wide' ); + + // Add support for custom color scheme. + add_theme_support( 'editor-color-palette', array( + array( + 'name' => __( 'Dark Gray', 'twentythirteen' ), + 'slug' => 'dark-gray', + 'color' => '#141412', + ), + array( + 'name' => __( 'Red', 'twentythirteen' ), + 'slug' => 'red', + 'color' => '#bc360a', + ), + array( + 'name' => __( 'Medium Orange', 'twentythirteen' ), + 'slug' => 'medium-orange', + 'color' => '#db572f', + ), + array( + 'name' => __( 'Light Orange', 'twentythirteen' ), + 'slug' => 'light-orange', + 'color' => '#ea9629', + ), + array( + 'name' => __( 'Yellow', 'twentythirteen' ), + 'slug' => 'yellow', + 'color' => '#fbca3c', + ), + array( + 'name' => __( 'White', 'twentythirteen' ), + 'slug' => 'white', + 'color' => '#fff', + ), + array( + 'name' => __( 'Dark Brown', 'twentythirteen' ), + 'slug' => 'dark-brown', + 'color' => '#220e10', + ), + array( + 'name' => __( 'Medium Brown', 'twentythirteen' ), + 'slug' => 'medium-brown', + 'color' => '#722d19', + ), + array( + 'name' => __( 'Light Brown', 'twentythirteen' ), + 'slug' => 'light-brown', + 'color' => '#eadaa6', + ), + array( + 'name' => __( 'Beige', 'twentythirteen' ), + 'slug' => 'beige', + 'color' => '#e8e5ce', + ), + array( + 'name' => __( 'Off-white', 'twentythirteen' ), + 'slug' => 'off-white', + 'color' => '#f7f5e7', + ), + ) ); + // Adds RSS feed links to for posts and comments. add_theme_support( 'automatic-feed-links' ); @@ -184,6 +252,9 @@ function twentythirteen_scripts_styles() { // Loads our main stylesheet. wp_enqueue_style( 'twentythirteen-style', get_stylesheet_uri(), array(), '2013-07-18' ); + // Theme block stylesheet. + wp_enqueue_style( 'twentythirteen-block-style', get_template_directory_uri() . '/css/blocks.css', array( 'twentythirteen-style' ), '2018-10-18' ); + // Loads the Internet Explorer specific stylesheet. wp_enqueue_style( 'twentythirteen-ie', get_template_directory_uri() . '/css/ie.css', array( 'twentythirteen-style' ), '2013-07-18' ); wp_style_add_data( 'twentythirteen-ie', 'conditional', 'lt IE 9' ); @@ -215,6 +286,19 @@ function twentythirteen_resource_hints( $urls, $relation_type ) { } add_filter( 'wp_resource_hints', 'twentythirteen_resource_hints', 10, 2 ); +/** + * Enqueue editor styles for Gutenberg + * + * @since Twenty Thirteen 2.5 + */ +function twentythirteen_block_editor_styles() { + // Block styles. + wp_enqueue_style( 'twentythirteen-block-editor-style', get_template_directory_uri() . '/css/editor-blocks.css' ); + // Add custom fonts. + wp_enqueue_style( 'twentythirteen-fonts', twentythirteen_fonts_url(), array(), null ); +} +add_action( 'enqueue_block_editor_assets', 'twentythirteen_block_editor_styles' ); + /** * Filter the page title. * From ae00fd945ac93bc3509f7158a171f2ad6877256c Mon Sep 17 00:00:00 2001 From: "David A. Kennedy" Date: Tue, 23 Oct 2018 00:10:28 +0000 Subject: [PATCH 502/537] Twenty Fourteen: Add styles and support for the new block-based editor. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This update adds styles and theme support related to the new block-based editor to enhance the experience of using it with Twenty Fourteen. These are the specific changes made to this theme: * Add blocks.css, to style blocks on the front end, to make sure they match the theme’s existing HTML element styles. * Add editor-blocks.css to style blocks in the editor, to make sure they match the theme’s existing HTML element styles. * Add theme support for `editor-styles`, to pull the existing editor stylesheet into the new editor. * Add theme support for `wp-block-styles`, to load the default block styles on the front end. * Add theme support for `editor-color-palette`, to load a color palette based on the theme’s color scheme into the block-based editor. Props laurelfulford, crunnells, ianbelanger. Fixes #45042. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43797 602fd350-edb4-49c9-b593-d223f7449a82 --- .../themes/twentyfourteen/css/blocks.css | 391 +++++++++++++++ .../twentyfourteen/css/editor-blocks.css | 463 ++++++++++++++++++ .../themes/twentyfourteen/functions.php | 56 +++ 3 files changed, 910 insertions(+) create mode 100644 src/wp-content/themes/twentyfourteen/css/blocks.css create mode 100644 src/wp-content/themes/twentyfourteen/css/editor-blocks.css diff --git a/src/wp-content/themes/twentyfourteen/css/blocks.css b/src/wp-content/themes/twentyfourteen/css/blocks.css new file mode 100644 index 0000000000000..a15b9a3979b09 --- /dev/null +++ b/src/wp-content/themes/twentyfourteen/css/blocks.css @@ -0,0 +1,391 @@ +/* +Theme Name: Twenty Fourteen +Description: Used to style Gutenberg Blocks. +*/ + +/*-------------------------------------------------------------- +>>> TABLE OF CONTENTS: +---------------------------------------------------------------- +1.0 General Block Styles +2.0 Blocks - Common Blocks +3.0 Blocks - Formatting +4.0 Blocks - Layout Elements +5.0 Blocks - Widgets +6.0 Blocks - Colors +--------------------------------------------------------------*/ + +/*-------------------------------------------------------------- +1.0 General Block Styles +--------------------------------------------------------------*/ + +[class^="wp-block-"] figcaption, +[class^="wp-block-"] figcaption.editor-rich-text__tinymce.mce-content-body { + font-size: 12px; + font-style: italic; + line-height: 1.5; + margin: 9px 0 0; +} + +/* Alignments */ + +[class^="wp-block-"].alignleft, +[class^="wp-block-"] .alignleft { + margin-right: 24px; +} + +[class^="wp-block-"].alignright, +[class^="wp-block-"] .alignright { + margin-left: 24px; +} + +/*-------------------------------------------------------------- +2.0 Blocks - Common Blocks +--------------------------------------------------------------*/ + +/* Paragraph */ + +p.has-drop-cap:not(:focus)::first-letter { + font-size: 5em; +} + +/* Image */ + +.wp-block-image { + margin-bottom: 24px; +} + +.wp-block-image figcaption { + text-align: left; +} + +@media screen and (min-width: 810px) { + .full-width .site-content .wp-block-image figure.alignleft { + margin-left: -168px; + } + + .full-width .site-content .wp-block-image figure.alignright { + margin-right: -168px; + } +} + +.rtl .wp-block-image figcaption { + text-align: right; +} + +/* Gallery */ + +.wp-block-gallery { + margin: 0 0 24px; +} + +.wp-block-gallery .blocks-gallery-image figcaption, +.wp-block-gallery .blocks-gallery-item figcaption { + left: 0; + right: 0; + width: auto; +} + +/* Quote */ + +.wp-block-quote:not(.is-large):not(.is-style-large) { + border-left: 0; + border-right: 0; + padding-left: 0; + padding-right: 0; +} + +.wp-block-quote.is-large, +.wp-block-quote.is-style-large { + padding: 0; +} + +.wp-block-quote cite { + color: #2b2b2b; + font-size: 16px; + font-weight: 400; +} + +.wp-block-quote.alignleft cite, +.wp-block-quote.alignright cite { + display: inline-block; + margin-bottom: 17px; + margin-top: 0; +} + +.rtl .wp-block-quote.alignleft { + margin-right: 24px; +} + +.rtl .wp-block-quote.alignright { + margin-left: 24px; +} + +/* Audio */ + +.wp-block-audio audio { + display: block; + width: 100%; +} + +/* Cover Image */ + +.wp-block-cover-image.aligncenter { + display: flex; +} + + +/* File */ + +.wp-block-file .wp-block-file__button { + background-color: #24890d; + border: 0; + border-radius: 2px; + color: #fff; + font-size: 12px; + font-weight: 700; + line-height: 15px; + padding: 10px 30px 11px; + text-transform: uppercase; + vertical-align: bottom; +} + +.wp-block-file .wp-block-file__button:hover, +.wp-block-file .wp-block-file__button:focus { + background-color: #41a62a; +} + +.wp-block-file .wp-block-file__button:active { + background-color: #55d737; +} + +/*-------------------------------------------------------------- +3.0 Blocks - Formatting +--------------------------------------------------------------*/ + +/* Code */ + +.wp-block-code { + border: 0; + padding: 0; +} + +/* Pullquote */ + +.wp-block-pullquote { + border: 0; + margin: 0; +} + +.wp-block-pullquote cite { + color: #2b2b2b; + font-size: 16px; + font-weight: 400; + margin-top: 0; + text-transform: none; +} + +.wp-block-pullquote.alignleft { + margin-right: 1em; +} + +.wp-block-pullquote.alignright { + margin-right: 1em; +} + +@media screen and (min-width: 810px) { + .full-width .site-content .wp-block-pullquote.alignleft { + margin-left: -168px; + } + + .full-width .site-content .wp-block-pullquote.alignright { + margin-right: -168px; + } +} + +/* Table */ + +.wp-block-table { + overflow-x: visible; +} + +.wp-block-table th, +.wp-block-table td { + border-color: rgba(0, 0, 0, 0.1); + border-width: 0 1px 1px 0; +} + +/*-------------------------------------------------------------- +4.0 Blocks - Layout Elements +--------------------------------------------------------------*/ + +/* Buttons */ + +.wp-block-button .wp-block-button__link { + background-color: #24890d; + border: 0; + border-radius: 2px; + color: #fff; + font-size: 12px; + font-weight: 700; + line-height: 15px; + padding: 10px 30px 11px; + text-transform: uppercase; + vertical-align: bottom; +} + +.wp-block-button .wp-block-button__link:hover, +.wp-block-button .wp-block-button__link:focus { + background-color: #41a62a; +} + +.wp-block-button .wp-block-button__link:active { + background-color: #55d737; +} + +/* Columns */ + +.wp-block-columns { + margin: 0 -0.5em; +} + +.wp-block-column { + margin: 0 0.5em; +} + +/* Separator */ + +.wp-block-separator { + border: 0; + max-width: 100px; +} + +.wp-block-separator.is-style-wide { + max-width: 100%; +} + +/*-------------------------------------------------------------- +5.0 Blocks - Widgets +--------------------------------------------------------------*/ + +/* Archives, Categories & Latest Posts */ + +.wp-block-archives.aligncenter, +.wp-block-categories.aligncenter, +.wp-block-latest-posts.aligncenter { + margin-left: 20px; + text-align: center; +} + +.rtl .wp-block-archives.aligncenter, +.rtl .wp-block-categories.aligncenter, +.rtl .wp-block-latest-posts.aligncenter { + margin-left: 0; + margin-right: 20px; +} + +/* Latest Comments */ + +.wp-block-latest-comments { + margin: 0; + padding: 0; +} + +.has-avatars .wp-block-latest-comments__comment .wp-block-latest-comments__comment-excerpt, +.has-avatars .wp-block-latest-comments__comment .wp-block-latest-comments__comment-meta { + margin-left: 60px; +} + +.wp-block-latest-comments .avatar, .wp-block-latest-comments__comment-avatar { + border-radius: 0; + border: 1px solid rgba(0, 0, 0, 0.1); + padding: 2px; +} + +.wp-block-latest-comments__comment, +.wp-block-latest-comments__comment-excerpt, +.wp-block-latest-comments__comment-excerpt p { + font-size: 16px; +} + +.wp-block-latest-comments__comment-meta a { + color: #2b2b2b; + font-weight: 900; + text-decoration: none; +} + +.wp-block-latest-comments_comment-meta a:hover, +.wp-block-latest-comments_comment-meta a:focus { + color: #41a62a; +} + +.wp-block-latest-comments__comment-excerpt p:last-child { +} + +.wp-block-latest-comments__comment-date { + text-transform: uppercase; +} + +.wp-block-latest-comments .wp-block-latest-comments__comment { + border-top: 1px solid rgba(0, 0, 0, 0.1); + margin-bottom: 24px; + padding-top: 24px; +} + +/* Latest Posts */ + +.wp-block-latest-posts.is-grid { + margin-left: 0; + margin-right: 0; +} + +/*-------------------------------------------------------------- +6.0 Blocks - Colors +--------------------------------------------------------------*/ + +.has-green-color { + color: #24890d; +} + +.has-green-background-color { + background-color: #24890d; +} + +.has-black-color { + color: #000; +} + +.has-black-background-color { + background-color: #000; +} + +.has-dark-gray-color { + color: #2b2b2b; +} + +.has-dark-gray-background-color { + background-color: #2b2b2b; +} + +.has-medium-gray-color { + color: #767676; +} + +.has-medium-gray-background-color { + background-color: #767676; +} + +.has-light-gray-color { + color: #f5f5f5; +} + +.has-light-gray-background-color { + background-color: #f5f5f5; +} + +.has-white-color { + color: #fff; +} + +.has-white-background-color { + background-color: #fff; +} diff --git a/src/wp-content/themes/twentyfourteen/css/editor-blocks.css b/src/wp-content/themes/twentyfourteen/css/editor-blocks.css new file mode 100644 index 0000000000000..5b89dd6995692 --- /dev/null +++ b/src/wp-content/themes/twentyfourteen/css/editor-blocks.css @@ -0,0 +1,463 @@ +/* +Theme Name: Twenty Fourteen +Description: Used to style Gutenberg Blocks in the editor. +*/ + +/*-------------------------------------------------------------- +>>> TABLE OF CONTENTS: +---------------------------------------------------------------- +1.0 General Typography +2.0 General Block Styles +3.0 Blocks - Common Blocks +4.0 Blocks - Formatting +5.0 Blocks - Layout Elements +6.0 Blocks - Widgets +--------------------------------------------------------------*/ + +/*-------------------------------------------------------------- +1.0 General Typography +--------------------------------------------------------------*/ + +.edit-post-visual-editor .editor-block-list__block, +.edit-post-visual-editor .editor-block-list__block p, +.editor-default-block-appender input[type="text"].editor-default-block-appender__content { + line-height: 1.5; +} + +.edit-post-visual-editor .editor-block-list__block { + color: #2b2b2b; +} + +.editor-post-title__block .editor-post-title__input { + font-family: Lato, sans-serif; + font-size: 33px; + font-weight: 300; + line-height: 1.0909090909; + text-transform: uppercase; +} + +/* Headers */ + +.wp-block-freeform.block-library-rich-text__tinymce h1 { + font-size: 26px; +} + +.wp-block-freeform.block-library-rich-text__tinymce h2 { + font-size: 24px; +} + +.wp-block-freeform.block-library-rich-text__tinymce h3 { + font-size: 22px; +} + +.wp-block-freeform.block-library-rich-text__tinymce h4 { + font-size: 20px; +} + +.wp-block-freeform.block-library-rich-text__tinymce h5 { + font-size: 18px; +} + +.wp-block-freeform.block-library-rich-text__tinymce h6 { + font-size: 16px; +} + +/*-------------------------------------------------------------- +2.0 General Block Styles +--------------------------------------------------------------*/ + +/* Main column width */ + +body.gutenberg-editor-page .edit-post-visual-editor .editor-post-title__block, +body.gutenberg-editor-page .edit-post-visual-editor .editor-default-block-appender, +body.gutenberg-editor-page .edit-post-visual-editor .editor-block-list__block { + max-width: 504px; /* 474 + 30 for editor block padding */ +} + +/* Link styles */ + +.edit-post-visual-editor a, +.editor-block-list__block a, +.wp-block-freeform.block-library-rich-text__tinymce a { + color: #24890d; +} + +/* List styles */ + +.wp-block-freeform.block-library-rich-text__tinymce li { + line-height: 1.5; +} + +.edit-post-visual-editor ul:not(.wp-block-gallery), +.editor-block-list__block ul:not(.wp-block-gallery), +.block-library-list ul, +.edit-post-visual-editor ol, +.editor-block-list__block ol, +.block-library-list ol { + margin: 0 0 1.6em 1.3333em; + padding: 0; +} + +.block-library-list .editor-rich-text__tinymce { + padding: 0; +} + +.edit-post-visual-editor ul:not(.wp-block-gallery), +.editor-block-list__block ul:not(.wp-block-gallery), +.block-library-list ul { + list-style: disc; +} + +.edit-post-visual-editor ol, +.editor-block-list__block ol, +.block-library-list ol { + list-style: decimal; +} + +.edit-post-visual-editor ul:not(.wp-block-gallery) li > ul, +.editor-block-list__block ul:not(.wp-block-gallery) li > ul, +.block-library-list li > ul, +.edit-post-visual-editor li > ol, +.editor-block-list__block li > ol, +.block-library-list li > ol { + margin-bottom: 0; +} + +.wp-block-freeform.block-library-rich-text__tinymce li, +.editor-block-list__block li { + margin-bottom: 0; +} + +.rtl .edit-post-visual-editor ul:not(.wp-block-gallery), +.rtl .editor-block-list__block ul:not(.wp-block-gallery), +.rtl .block-library-list ul, +.rtl .edit-post-visual-editor ol, +.rtl .editor-block-list__block ol, +.rtl .block-library-list ol { + margin-left: 0; + margin-right: 1.3333em; +} + +/* Code */ + +.wp-block-freeform.block-library-rich-text__tinymce code { + background: transparent; +} + + +/* Captions */ + +[class^="wp-block-"] figcaption, +[class^="wp-block-"] figcaption.editor-rich-text__tinymce.mce-content-body { + font-size: 12px; + font-style: italic; + line-height: 1.5; + margin: 9px 0 0; +} + +/* Tables */ + +.edit-post-visual-editor .editor-block-list__block table, +.edit-post-visual-editor .editor-block-list__block table th, +.edit-post-visual-editor .editor-block-list__block table td { + border: 1px solid rgba(0, 0, 0, 0.1); + font-size: 14px; + line-height: 1.2857142857; +} + +.edit-post-visual-editor .editor-block-list__block table { + border-collapse: separate; + border-spacing: 0; + border-width: 1px 0 0 1px; + margin-bottom: 24px; + width: 100%; +} + +.edit-post-visual-editor .editor-block-list__block table th { + border-width: 0 1px 1px 0; + font-weight: 700; + text-align: left; + text-transform: uppercase; +} + +.edit-post-visual-editor .editor-block-list__block table td { + border-width: 0 1px 1px 0; +} + +.rtl .edit-post-visual-editor .editor-block-list__block table th { + text-align: right; +} + +/* Quotes */ + +.wp-block-freeform.block-library-rich-text__tinymce blockquote { + border-left: 0; + border-right: 0; + padding-left: 0; + padding-right: 0; +} + +.wp-block-freeform.block-library-rich-text__tinymce blockquote p { + font-size: 19px; +} + +/* Tables */ + +.editor-block-list__block .wp-block-table th, +.editor-block-list__block .wp-block-table td { + padding: 0; +} + +/*-------------------------------------------------------------- +3.0 Blocks - Common Blocks +--------------------------------------------------------------*/ + +/* Paragraph */ + +p.has-drop-cap:not(:focus)::first-letter { + font-size: 5em; +} + +/* Image */ + +.wp-block-image { + margin-bottom: 24px; + max-width: 800px; +} + +.wp-block-image figcaption { + text-align: left; +} + +@media screen and (min-width: 810px) { + [data-type="core/image"][data-align="left"] .editor-block-list__block-edit { + clear: left; + margin-left: -198px; /* 30px wider than front-end, to account for editor tool spacing */ + } + + [data-type="core/image"][data-align="right"] .editor-block-list__block-edit { + clear: right; + margin-right: -198px; /* 30px wider than front-end, to account for editor tool spacing */ + } +} + +.rtl .wp-block-image figcaption { + text-align: right; +} + +/* Gallery */ + +.editor-block-list__block .wp-block-gallery { + margin-left: 0; + margin-right: 0; +} + +/* Quote */ + +.editor-block-list__block .wp-block-quote p { + font-size: 19px; +} + +.wp-block-quote:not(.is-large):not(.is-style-large) { + border-left: 0; + border-right: 0; + padding-left: 0; + padding-right: 0; +} + +.wp-block-quote.is-large, +.wp-block-quote.is-style-large { + padding: 0; +} + +.wp-block-quote.is-large p, +.wp-block-quote.is-style-large p { + font-size: 24px; + line-height: 1.6; +} + +.wp-block-quote .wp-block-quote__citation { + color: #2b2b2b; + font-size: 16px; + font-weight: 400; + margin-top: 0; +} + +.wp-block-quote.alignleft .wp-block-quote__citation, +.wp-block-quote.alignright .wp-block-quote__citation { + display: inline-block; + margin-bottom: 17px; +} + +@media screen and (min-width: 1200px) { + .editor-block-list__block .wp-block-quote.alignleft, + .editor-block-list__block .wp-block-quote.alignright { + width: -webkit-calc(50% + 130px); + width: calc(50% + 130px); + } + + .editor-block-list__block .wp-block-quote.alignleft { + clear: left; + margin-left: -168px; + } + + .editor-block-list__block .wp-block-quote.alignright { + clear: right; + margin-right: -168px; + } +} + +/* Cover Image */ + +.wp-block-cover-image.aligncenter { + display: flex; +} + +/* File */ + +.wp-block-file .wp-block-file__textlink { + color: #24890d; + text-decoration: underline; +} + +.wp-block-file .wp-block-file__button { + background-color: #24890d; + border: 0; + border-radius: 2px; + color: #fff; + font-size: 12px; + font-weight: 700; + line-height: normal; + padding: 10px 30px 11px; + text-transform: uppercase; + vertical-align: bottom; +} + +.editor-block-list__block .wp-block-file .wp-block-file__button.mce-content-body { + line-height: normal; +} + +/*-------------------------------------------------------------- +4.0 Blocks - Formatting +--------------------------------------------------------------*/ + +/* Code */ + +.wp-block-code { + border: 0; + padding: 0; +} + +/* Pullquote */ + +.wp-block-pullquote { + border: 0; + margin: 0; +} + +.wp-block-pullquote .wp-block-pullquote__citation { + color: #2b2b2b; + font-size: 16px; + font-weight: 400; + margin-top: 0; + text-transform: none; +} + +.wp-block-pullquote.alignleft blockquote > .editor-rich-text p, +.wp-block-pullquote.alignright blockquote > .editor-rich-text p { + font-size: 20px; +} + +@media screen and (min-width: 810px) { + .editor-block-list__block .wp-block-pullquote.alignleft { + margin-left: -168px; + } + + .editor-block-list__block .wp-block-pullquote.alignright { + margin-right: -168px; + } +} + +/*-------------------------------------------------------------- +5.0 Blocks - Layout Elements +--------------------------------------------------------------*/ + +/* Buttons */ + +.wp-block-button .wp-block-button__link { + background-color: #24890d; + border: 0; + border-radius: 2px; + color: #fff; + font-size: 12px; + font-weight: 700; + padding: 10px 30px 11px; + text-transform: uppercase; + vertical-align: bottom; +} + +.editor-block-list__block .wp-block-button .mce-content-body { + line-height: normal; +} + +/*-------------------------------------------------------------- +6.0 Blocks - Widgets +--------------------------------------------------------------*/ + +/* Archives, Categories & Latest Posts */ + +.wp-block-archives li a, +.wp-block-categories__list li a, +.wp-block-latest-posts li a { + text-decoration: underline; +} + +/* Latest Comments */ + +.editor-block-list__block ol.wp-block-latest-comments, +.rtl .editor-block-list__block ol.wp-block-latest-comments { + margin: 0; + padding: 0; +} + +.has-avatars .wp-block-latest-comments__comment .wp-block-latest-comments__comment-excerpt, +.has-avatars .wp-block-latest-comments__comment .wp-block-latest-comments__comment-meta { + margin-left: 60px; +} + +.wp-block-latest-comments .avatar, .wp-block-latest-comments__comment-avatar { + border-radius: 0; + border: 1px solid rgba(0, 0, 0, 0.1); + padding: 2px; +} + +.wp-block-latest-comments__comment, +.wp-block-latest-comments__comment-excerpt, +.wp-block-latest-comments__comment-excerpt p { + font-size: 16px; +} + +.editor-block-list__block .wp-block-latest-comments__comment-meta a, +.editor-block-list__block .wp-block-latest-comments__comment-meta a:visited { + color: #2b2b2b; + font-weight: 900; + text-decoration: none; +} + +.wp-block-latest-comments__comment-date { + text-transform: uppercase; +} + +.wp-block-latest-comments .wp-block-latest-comments__comment { + border-top: 1px solid rgba(0, 0, 0, 0.1); + margin-bottom: 24px; + padding-top: 24px; +} + +/* Latest Posts */ + +.edit-post-visual-editor .editor-block-list__block .wp-block-latest-posts.is-grid { + list-style: none; + margin-left: 0; + margin-right: 0; +} diff --git a/src/wp-content/themes/twentyfourteen/functions.php b/src/wp-content/themes/twentyfourteen/functions.php index 2946d19ddbad0..cb6a488690b81 100644 --- a/src/wp-content/themes/twentyfourteen/functions.php +++ b/src/wp-content/themes/twentyfourteen/functions.php @@ -70,6 +70,46 @@ function twentyfourteen_setup() { // This theme styles the visual editor to resemble the theme style. add_editor_style( array( 'css/editor-style.css', twentyfourteen_font_url(), 'genericons/genericons.css' ) ); + // Load regular editor styles into the new block-based editor. + add_theme_support( 'editor-styles' ); + + // Load default block styles. + add_theme_support( 'wp-block-styles' ); + + // Add support for custom color scheme. + add_theme_support( 'editor-color-palette', array( + array( + 'name' => __( 'Green', 'twentyfourteen' ), + 'slug' => 'green', + 'color' => '#24890d', + ), + array( + 'name' => __( 'Black', 'twentyfourteen' ), + 'slug' => 'black', + 'color' => '#000', + ), + array( + 'name' => __( 'Dark Gray', 'twentyfourteen' ), + 'slug' => 'dark-gray', + 'color' => '#2b2b2b', + ), + array( + 'name' => __( 'Medium Gray', 'twentyfourteen' ), + 'slug' => 'medium-gray', + 'color' => '#767676', + ), + array( + 'name' => __( 'Light Gray', 'twentyfourteen' ), + 'slug' => 'light-gray', + 'color' => '#f5f5f5', + ), + array( + 'name' => __( 'White', 'twentyfourteen' ), + 'slug' => 'white', + 'color' => '#fff', + ), + ) ); + // Add RSS feed links to for posts and comments. add_theme_support( 'automatic-feed-links' ); @@ -239,6 +279,9 @@ function twentyfourteen_scripts() { // Load our main stylesheet. wp_enqueue_style( 'twentyfourteen-style', get_stylesheet_uri() ); + // Theme block stylesheet. + wp_enqueue_style( 'twentyfourteen-block-style', get_template_directory_uri() . '/css/blocks.css', array( 'twentyfourteen-style' ), '20181018' ); + // Load the Internet Explorer specific stylesheet. wp_enqueue_style( 'twentyfourteen-ie', get_template_directory_uri() . '/css/ie.css', array( 'twentyfourteen-style' ), '20131205' ); wp_style_add_data( 'twentyfourteen-ie', 'conditional', 'lt IE 9' ); @@ -302,6 +345,19 @@ function twentyfourteen_resource_hints( $urls, $relation_type ) { } add_filter( 'wp_resource_hints', 'twentyfourteen_resource_hints', 10, 2 ); +/** + * Enqueue editor styles for Gutenberg + * + * @since Twenty Fourteen 2.3 + */ +function twentyfourteen_block_editor_styles() { + // Block styles. + wp_enqueue_style( 'twentyfourteen-block-editor-style', get_template_directory_uri() . '/css/editor-blocks.css' ); + // Add custom fonts. + wp_enqueue_style( 'twentyfourteen-fonts', twentyfourteen_font_url(), array(), null ); +} +add_action( 'enqueue_block_editor_assets', 'twentyfourteen_block_editor_styles' ); + if ( ! function_exists( 'twentyfourteen_the_attached_image' ) ) : /** * Print the attached image with a link to the next attached image. From b6023b4d7a6dcb24e99fe900b71189c68ba7db9c Mon Sep 17 00:00:00 2001 From: "David A. Kennedy" Date: Tue, 23 Oct 2018 00:35:37 +0000 Subject: [PATCH 503/537] Twenty Fifteen: Add styles and support for the new block-based editor. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This update adds styles and theme support related to the new block-based editor to enhance the experience of using it with Twenty Fifteen. These are the specific changes made to this theme: * Add blocks.css, to style blocks on the front end, to make sure they match the theme’s existing HTML element styles. * Add editor-blocks.css to style blocks in the editor, to make sure they match the theme’s existing HTML element styles. * Add theme support for `editor-styles`, to pull the existing editor stylesheet into the new editor. * Add theme support for `wp-block-styles`, to load the default block styles on the front end. * Add theme support for `editor-color-palette`, to load a color palette based on the theme’s color scheme into the block-based editor. Props laurelfulford. Fixes #45043. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43798 602fd350-edb4-49c9-b593-d223f7449a82 --- .../themes/twentyfifteen/css/blocks.css | 610 +++++++++++++ .../twentyfifteen/css/editor-blocks.css | 848 ++++++++++++++++++ .../themes/twentyfifteen/functions.php | 87 ++ 3 files changed, 1545 insertions(+) create mode 100644 src/wp-content/themes/twentyfifteen/css/blocks.css create mode 100644 src/wp-content/themes/twentyfifteen/css/editor-blocks.css diff --git a/src/wp-content/themes/twentyfifteen/css/blocks.css b/src/wp-content/themes/twentyfifteen/css/blocks.css new file mode 100644 index 0000000000000..d02c5d8fb0d32 --- /dev/null +++ b/src/wp-content/themes/twentyfifteen/css/blocks.css @@ -0,0 +1,610 @@ +/* +Theme Name: Twenty Fifteen +Description: Used to style Gutenberg Blocks. +*/ + +/*-------------------------------------------------------------- +>>> TABLE OF CONTENTS: +---------------------------------------------------------------- +1.0 General Block Styles +2.0 Blocks - Common Blocks +3.0 Blocks - Formatting +4.0 Blocks - Layout Elements +5.0 Blocks - Widgets +6.0 Blocks - Colors +--------------------------------------------------------------*/ + +/*-------------------------------------------------------------- +1.0 General Block Styles +--------------------------------------------------------------*/ + +/* Captions */ + +[class^="wp-block-"] figcaption { + color: #707070; + font-family: "Noto Sans", sans-serif; + font-size: 12px; + line-height: 1.5; + margin-bottom: 0; + padding: 0.5em 0; +} + +@media screen and (min-width: 46.25em) { + [class^="wp-block-"] figcaption { + font-size: 14px; + } +} + +@media screen and (min-width: 55em) { + [class^="wp-block-"] figcaption { + font-size: 16px; + } +} + +@media screen and (min-width: 59.6875em) { + [class^="wp-block-"] figcaption { + font-size: 12px; + } +} + +@media screen and (min-width: 68.75em) { + [class^="wp-block-"] figcaption { + font-size: 14px; + } +} + +@media screen and (min-width: 77.5em) { + [class^="wp-block-"] figcaption { + font-size: 16px; + } +} + +/*-------------------------------------------------------------- +2.0 Blocks - Common Blocks +--------------------------------------------------------------*/ + +/* Paragraph */ + +p.has-drop-cap:not(:focus)::first-letter { + font-size: 5em; +} + +/* Gallery */ + +.wp-block-gallery { + margin-bottom: 1.6em; +} + +/* Audio */ + +.wp-block-audio audio { + display: block; + width: 100%; +} + +/* Cover Image */ + +.wp-block-cover-image .wp-block-cover-image-text, +.wp-block-cover-image h2 { + font-size: 29px; + line-height: 1.2069; +} + +/* Quote */ + +.wp-block-quote, +.wp-block-quote:not(.is-large):not(.is-style-large), +[class^="wp-block-"] blockquote { + border-color: #707070; +} + +.wp-block-quote cite, +.wp-block-quote__citation { + color: #333; + font-family: "Noto Sans", sans-serif; + font-size: 15px; + font-style: normal; + line-height: 1.6; + text-transform: none; +} + +.wp-block-quote em, +.wp-block-quote i { + font-style: normal; +} + +.wp-block-quote strong, +.wp-block-quote b { + font-weight: 400; +} + + +@media screen and (min-width: 46.25em) { + .edit-post-visual-editor .wp-block-quote p { + font-size: 20px; + line-height: 1.75; + } + + .wp-block-quote cite, + .wp-block-quote__citation { + font-size: 17px; + line-height: 1.6471; + } +} + +@media screen and (min-width: 55em) { + .edit-post-visual-editor .wp-block-quote p { + font-size: 22px; + line-height: 1.8182; + } + + .wp-block-quote cite, + .wp-block-quote__citation { + font-size: 19px; + line-height: 1.6842; + } +} + +@media screen and (min-width: 59.6875em) { + .edit-post-visual-editor .wp-block-quote p { + font-size: 18px; + line-height: 1.6667; + } + + .wp-block-quote cite, + .wp-block-quote__citation { + font-size: 15px; + line-height: 1.6; + } +} + +@media screen and (min-width: 68.75em) { + .edit-post-visual-editor .wp-block-quote p { + font-size: 20px; + line-height: 1.75; + } + + .wp-block-quote cite, + .wp-block-quote__citation { + font-size: 17px; + line-height: 1.6471; + } +} + +@media screen and (min-width: 77.5em) { + .edit-post-visual-editor .wp-block-quote p { + font-size: 22px; + line-height: 1.8182; + } + + .wp-block-quote cite, + .wp-block-quote__citation { + font-size: 19px; + line-height: 1.6842; + } +} + +/* Cover Image */ + +.wp-block-cover-image.aligncenter, +.wp-block-cover-image.alignleft, +.wp-block-cover-image.alignright { + display: flex; +} + +/* File */ + +.wp-block-file a.wp-block-file__button { + background-color: #333; + border: 0; + border-radius: 0; + color: #fff; + cursor: pointer; + font-family: "Noto Sans", sans-serif; + font-size: 12px; + font-weight: 700; + line-height: 1.5; + padding: 0.7917em 1.5em; + text-transform: uppercase; + vertical-align: baseline; +} + +.wp-block-file a.wp-block-file__button:hover, +.wp-block-file a.wp-block-file__button:focus { + background-color: #707070; + background-color: rgba(51, 51, 51, 0.7); + outline: 0; +} + +.rtl .wp-block-file * + .wp-block-file__button { + margin-left: 0.75em; + margin-right: 0; +} + +@media screen and (min-width: 46.25em) { + .wp-block-file a.wp-block-file__button { + font-size: 14px; + font-size: 1.4rem; + padding: 0.8214em 1.6429em; + } +} + +@media screen and (min-width: 55em) { + .wp-block-file a.wp-block-file__button { + font-size: 16px; + font-size: 1.6rem; + padding: 0.8125em 1.625em; + } +} + +@media screen and (min-width: 59.6875em) { + .wp-block-file a.wp-block-file__button { + font-size: 12px; + font-size: 1.2rem; + padding: 0.7917em 1.5833em; + } +} + +@media screen and (min-width: 68.75em) { + .wp-block-file a.wp-block-file__button { + font-size: 14px; + font-size: 1.4rem; + padding: 0.8214em 1.5714em; + } +} + +@media screen and (min-width: 77.5em) { + .wp-block-file a.wp-block-file__button { + font-size: 16px; + font-size: 1.6rem; + padding: 0.8125em 1.625em; + } +} + +/*-------------------------------------------------------------- +3.0 Blocks - Formatting +--------------------------------------------------------------*/ + +/* Code */ + +.wp-block-code { + background-color: transparent; + border: 0; + padding: 0; +} + +.wp-block-code code { + font-family: Inconsolata, monospace; + font-size: inherit; +} + +/* Preformatted */ + +.wp-block-preformatted { + background-color: rgba(0, 0, 0, 0.01); + border: 1px solid #eaeaea; + line-height: 1.2; + margin-bottom: 1.6em; + max-width: 100%; + overflow: auto; + padding: 0.8em; + white-space: pre; + white-space: pre-wrap; + word-wrap: break-word; +} + +/* Pullquote */ + +.wp-block-pullquote { + border: 0; +} + +.wp-block-pullquote blockquote { + border: 0; + margin-left: 0; + margin-right: 0; + padding-left: 0; + padding-right: 0; +} + +.wp-block-pullquote cite { + color: #333; + font-family: "Noto Sans", sans-serif; + font-size: 15px; + font-style: normal; + line-height: 1.6; + text-transform: none; +} + +@media screen and (min-width: 46.25em) { + .wp-block-pullquote cite { + font-size: 17px; + line-height: 1.6471; + } +} + +@media screen and (min-width: 55em) { + .wp-block-pullquote cite { + font-size: 19px; + line-height: 1.6842; + } +} + +@media screen and (min-width: 59.6875em) { + .wp-block-pullquote cite { + font-size: 15px; + line-height: 1.6; + } +} + +@media screen and (min-width: 68.75em) { + .wp-block-pullquote cite { + font-size: 17px; + line-height: 1.6471; + } +} + +@media screen and (min-width: 77.5em) { + .wp-block-pullquote cite { + font-size: 19px; + line-height: 1.6842; + } +} + +/* Table */ + +.wp-block-table th, +.wp-block-table td { + border-color: #eaeaea; + border-width: 0 1px 1px 0; +} + +/*-------------------------------------------------------------- +4.0 Blocks - Layout Elements +--------------------------------------------------------------*/ + +/* Button */ + +.wp-block-button .wp-block-button__link { + background-color: #333; + border: 0; + border-radius: 0; + color: #fff; + cursor: pointer; + font-family: "Noto Sans", sans-serif; + font-size: 12px; + font-size: 1.2rem; + font-weight: 700; + line-height: 1.5; + padding: 0.7917em 1.5em; + text-transform: uppercase; + vertical-align: baseline; +} + +.wp-block-button .wp-block-button__link:hover, +.wp-block-button .wp-block-button__link:focus { + background-color: #707070; + background-color: rgba(51, 51, 51, 0.7); + outline: 0; +} + +@media screen and (min-width: 46.25em) { + .wp-block-button .wp-block-button__link { + font-size: 14px; + font-size: 1.4rem; + padding: 0.8214em 1.6429em; + } +} + +@media screen and (min-width: 55em) { + .wp-block-button .wp-block-button__link { + font-size: 16px; + font-size: 1.6rem; + padding: 0.8125em 1.625em; + } +} + +@media screen and (min-width: 59.6875em) { + .wp-block-button .wp-block-button__link { + font-size: 12px; + font-size: 1.2rem; + padding: 0.7917em 1.5833em; + } +} + +@media screen and (min-width: 68.75em) { + .wp-block-button .wp-block-button__link { + font-size: 14px; + font-size: 1.4rem; + padding: 0.8214em 1.5714em; + } +} + +@media screen and (min-width: 77.5em) { + .wp-block-button .wp-block-button__link { + font-size: 16px; + font-size: 1.6rem; + padding: 0.8125em 1.625em; + } +} + +/* Seperators */ + +.wp-block-separator { + border: 0; + max-width: 100px; +} + +.wp-block-separator.is-style-wide { + max-width: 100%; +} + +/*-------------------------------------------------------------- +5.0 Blocks - Widgets +--------------------------------------------------------------*/ + +/* Latest Comments */ + +.wp-block-latest-comments { + margin: 0; +} + +.wp-block-latest-comments__comment, +.wp-block-latest-comments__comment-excerpt, +.wp-block-latest-comments__comment-excerpt p { + font-size: inherit; +} + +.wp-block-latest-comments__comment-meta a { + border-bottom-color: transparent; + font-weight: 700; +} + +.wp-block-latest-comments__comment-excerpt p:last-child { + margin-bottom: 0; +} + +.wp-block-latest-comments__comment-date { + color: #707070; + font-family: "Noto Sans", sans-serif; + font-size: 12px; + line-height: 1.5; + margin-bottom: 1.6em; +} + +@media screen and (min-width: 46.25em) { + .wp-block-latest-comments__comment-date { + font-size: 14px; + } +} + +@media screen and (min-width: 55em) { + .wp-block-latest-comments__comment-date { + font-size: 16px; + } +} + +@media screen and (min-width: 59.6875em) { + .wp-block-latest-comments__comment-date { + font-size: 12px; + } +} + +@media screen and (min-width: 68.75em) { + .wp-block-latest-comments__comment-date { + font-size: 14px; + } +} + +@media screen and (min-width: 77.5em) { + .wp-block-latest-comments__comment-date { + font-size: 16px; + } +} + +.wp-block-latest-comments .wp-block-latest-comments__comment { + border-top: 1px solid #eaeaea; + border-top: 1px solid rgba(51, 51, 51, 0.1); + margin-bottom: 0; + padding: 1.6em 0; +} + +/*-------------------------------------------------------------- +6.0 Blocks - Colors +--------------------------------------------------------------*/ + +.has-dark-gray-color { + color: #111; +} + +.has-dark-gray-background-color { + background-color: #111; +} + +.has-light-gray-color { + color: #f1f1f1; +} + +.has-light-gray-background-color { + background-color: #f1f1f1; +} + +.has-white-color { + color: #fff; +} + +.has-white-background-color { + background-color: #fff; +} + +.has-yellow-color { + color: #f4ca16; +} + +.has-yellow-background-color { + background-color: #f4ca16; +} + +.has-dark-brown-color { + color: #352712; +} + +.has-dark-brown-background-color { + background-color: #352712; +} + +.has-medium-pink-color { + color: #e53b51; +} + +.has-medium-pink-background-color { + background-color: #e53b51; +} + +.has-light-pink-color { + color: #ffe5d1; +} + +.has-light-pink-background-color { + background-color: #ffe5d1; +} + +.has-dark-purple-color { + color: #2e2256; +} + +.has-dark-purple-background-color { + background-color: #2e2256; +} + +.has-purple-color { + color: #674970; +} + +.has-purple-background-color { + background-color: #674970; +} + +.has-blue-gray-color { + color: #22313f; +} + +.has-blue-gray-background-color { + background-color: #22313f; +} + +.has-bright-blue-color { + color: #55c3dc; +} + +.has-bright-blue-background-color { + background-color: #55c3dc; +} + +.has-light-blue-color { + color: #e9f2f9; +} + +.has-light-blue-background-color { + background-color: #e9f2f9; +} diff --git a/src/wp-content/themes/twentyfifteen/css/editor-blocks.css b/src/wp-content/themes/twentyfifteen/css/editor-blocks.css new file mode 100644 index 0000000000000..bd6c71856f573 --- /dev/null +++ b/src/wp-content/themes/twentyfifteen/css/editor-blocks.css @@ -0,0 +1,848 @@ +/* +Theme Name: Twenty Fifteen +Description: Used to style Gutenberg Blocks in the editor. +*/ + +/*-------------------------------------------------------------- +>>> TABLE OF CONTENTS: +---------------------------------------------------------------- +1.0 General Typography +2.0 General Block Styles +3.0 Blocks - Common Blocks +4.0 Blocks - Formatting +5.0 Blocks - Layout Elements +6.0 Blocks - Widgets +--------------------------------------------------------------*/ + +/*-------------------------------------------------------------- +1.0 General Typography +--------------------------------------------------------------*/ + +.edit-post-visual-editor .editor-block-list__block, +.edit-post-visual-editor .editor-block-list__block p, +.editor-default-block-appender input[type="text"].editor-default-block-appender__content { + font-size: 15px; + line-height: 1.6; +} + +.edit-post-visual-editor .editor-block-list__block { + color: #333; +} + +.editor-post-title__block .editor-post-title__input { + color: #333; + font-size: 26px; + line-height: 1.1538; +} + +.edit-post-visual-editor h1, +.edit-post-visual-editor h2, +.edit-post-visual-editor h3, +.edit-post-visual-editor h4, +.edit-post-visual-editor h5, +.edit-post-visual-editor h6 { + clear: both; + font-weight: 700; +} + +.edit-post-visual-editor .editor-block-list__block h1 { + font-size: 26px; + line-height: 1.1538; + padding: 0.9em 0 0.45em; +} + +.edit-post-visual-editor .editor-block-list__block h2 { + font-size: 22px; + line-height: 1.3636; + padding: 1em 0 0.5em; +} + +.edit-post-visual-editor .editor-block-list__block h3 { + font-size: 18px; + line-height: 1.3333; + padding: 1.3em 0 0.65em; +} + +.edit-post-visual-editor .editor-block-list__block h4, +.edit-post-visual-editor .editor-block-list__block h5, +.edit-post-visual-editor .editor-block-list__block h6 { + font-size: 15px; + line-height: 1.2; + padding: 0.8em 0 0.4em; +} + +.edit-post-visual-editor .editor-block-list__block h5, +.edit-post-visual-editor .editor-block-list__block h6 { + letter-spacing: 0.1em; + text-transform: uppercase; +} + +.edit-post-visual-editor > h1:first-child, +.edit-post-visual-editor > h2:first-child, +.edit-post-visual-editor > h3:first-child, +.edit-post-visual-editor > h4:first-child, +.edit-post-visual-editor > h5:first-child, +.edit-post-visual-editor > h6:first-child { + padding-top: 0; +} + +@media screen and (min-width: 46.25em) { + .edit-post-visual-editor .editor-block-list__block, + .edit-post-visual-editor .editor-block-list__block p, + .editor-default-block-appender input[type="text"].editor-default-block-appender__content { + font-size: 17px; + line-height: 1.6471; + } + + .editor-post-title__block .editor-post-title__input { + font-size: 35px; + line-height: 1.2; + } + + .edit-post-visual-editor .editor-block-list__block h1 { + font-size: 35px; + line-height: 1.2; + padding: 0.8em 0 0.4em; + } + + .edit-post-visual-editor .editor-block-list__block h2 { + font-size: 29px; + line-height: 1.2069; + padding: 1.0em 0 0.5em; + } + + .edit-post-visual-editor .editor-block-list__block h3 { + font-size: 24px; + line-height: 1.1667; + padding: 1.15em 0 0.6em; + } + + .edit-post-visual-editor .editor-block-list__block h4 { + font-size: 20px; + line-height: 1.4; + padding: .7em 0 0.35em; + } + + .edit-post-visual-editor .editor-block-list__block h5, + .edit-post-visual-editor .editor-block-list__block h6 { + font-size: 17px; + line-height: 1.2353; + padding: 0.8em 0 0.4em; + } +} + +@media screen and (min-width: 55em) { + .edit-post-visual-editor .editor-block-list__block, + .edit-post-visual-editor .editor-block-list__block p, + .editor-default-block-appender input[type="text"].editor-default-block-appender__content { + font-size: 19px; + line-height: 1.6842; + } + + .editor-post-title__block .editor-post-title__input { + font-size: 39px; + line-height: 1.2308; + } + + .edit-post-visual-editor .editor-block-list__block h1 { + font-size: 39px; + line-height: 1.2308; + padding: 0.8em 0 0.4em; + } + + .edit-post-visual-editor .editor-block-list__block h2 { + font-size: 32px; + line-height: 1.25; + padding: 1em 0 0.5em; + } + + .edit-post-visual-editor .editor-block-list__block h3 { + font-size: 27px; + line-height: 1.1852; + padding: 1.2em 0 0.6em; + } + + .edit-post-visual-editor .editor-block-list__block h4 { + font-size: 22px; + line-height: 1.4545; + padding: 0.75em 0 0.35em; + } + + .edit-post-visual-editor .editor-block-list__block h5, + .edit-post-visual-editor .editor-block-list__block h6 { + font-size: 19px; + line-height: 1.2632; + padding: 0.8em 0 0.4em; + } +} + +@media screen and (min-width: 59.6875em) { + .edit-post-visual-editor .editor-block-list__block, + .edit-post-visual-editor .editor-block-list__block p, + .editor-default-block-appender input[type="text"].editor-default-block-appender__content { + font-size: 15px; + line-height: 1.6; + } + + .editor-post-title__block .editor-post-title__input { + font-size: 31px; + line-height: 1.1613; + } + + .edit-post-visual-editor .editor-block-list__block h1 { + font-size: 31px; + line-height: 1.1613; + padding: 0.8em 0 0.4em; + } + + .edit-post-visual-editor .editor-block-list__block h2 { + font-size: 26px; + line-height: 1.3846; + padding: 0.9em 0 0.45em; + } + + .edit-post-visual-editor .editor-block-list__block h3 { + font-size: 22px; + line-height: 1.3636; + padding: 1.1em 0 0.55em; + } + + .edit-post-visual-editor .editor-block-list__block h4 { + font-size: 18px; + line-height: 1.3333; + padding: 0.65em 0 0.3em; + } + + .edit-post-visual-editor .editor-block-list__block h5, + .edit-post-visual-editor .editor-block-list__block h6 { + font-size: 15px; + line-height: 1.2; + padding: 0.8em 0 0.4em; + } +} + +@media screen and (min-width: 68.75em) { + .edit-post-visual-editor .editor-block-list__block, + .edit-post-visual-editor .editor-block-list__block p, + .editor-default-block-appender input[type="text"].editor-default-block-appender__content { + font-size: 17px; + line-height: 1.6471; + } + + .editor-post-title__block .editor-post-title__input { + font-size: 35px; + line-height: 1.2; + } + + .edit-post-visual-editor .editor-block-list__block h1 { + font-size: 35px; + line-height: 1.2; + padding: 0.8em 0 0.4em; + } + + .edit-post-visual-editor .editor-block-list__block h2 { + font-size: 29px; + line-height: 1.2069; + padding: 1.0em 0 0.5em; + } + + .edit-post-visual-editor .editor-block-list__block h3 { + font-size: 24px; + line-height: 1.1667; + padding: 1.2em 0 0.6em; + } + + .edit-post-visual-editor .editor-block-list__block h4 { + font-size: 20px; + line-height: 1.4; + padding: 0.7em 0 0.35em; + } + + .edit-post-visual-editor .editor-block-list__block h5, + .edit-post-visual-editor .editor-block-list__block h6 { + font-size: 17px; + line-height: 1.2353; + padding: 0.8em 0 0.4em; + } +} + +@media screen and (min-width: 77.5em) { + .edit-post-visual-editor .editor-block-list__block, + .edit-post-visual-editor .editor-block-list__block p, + .editor-default-block-appender input[type="text"].editor-default-block-appender__content { + font-size: 19px; + line-height: 1.6842; + } + + .editor-post-title__block .editor-post-title__input { + font-size: 39px; + line-height: 1.2308; + } + + .edit-post-visual-editor .editor-block-list__block h3 { + font-size: 27px; + line-height: 1.1852; + padding: 1.2em 0 0.6em; + } + + .edit-post-visual-editor .editor-block-list__block h4 { + font-size: 22px; + line-height: 1.4545; + padding: 0.75em 0 0.35em; + } + + .edit-post-visual-editor .editor-block-list__block h5, + .edit-post-visual-editor .editor-block-list__block h6 { + font-size: 19px; + line-height: 1.2632; + padding: 0.85em 0 0.45em; + } +} + +/*-------------------------------------------------------------- +2.0 General Block Styles +--------------------------------------------------------------*/ + +/* Main column width */ + +body.gutenberg-editor-page .edit-post-visual-editor .editor-post-title__block, +body.gutenberg-editor-page .edit-post-visual-editor .editor-default-block-appender, +body.gutenberg-editor-page .edit-post-visual-editor .editor-block-list__block { + max-width: 690px; /* 660px + 30px for the editor padding */ +} + +/* Link styles */ + +.edit-post-visual-editor a, +.editor-block-list__block a, +.wp-block-freeform.block-library-rich-text__tinymce a { + border-bottom: 1px solid #333; + color: #333; + text-decoration: none; +} + +/* List styles */ + +.edit-post-visual-editor ul:not(.wp-block-gallery), +.editor-block-list__block ul:not(.wp-block-gallery), +.block-library-list ul, +.edit-post-visual-editor ol, +.editor-block-list__block ol, +.block-library-list ol { + margin: 0 0 1.6em 1.3333em; + padding: 0; +} + +.block-library-list .editor-rich-text__tinymce { + padding: 0; +} + +.edit-post-visual-editor ul:not(.wp-block-gallery), +.editor-block-list__block ul:not(.wp-block-gallery), +.block-library-list ul { + list-style: disc; +} + +.edit-post-visual-editor ol, +.editor-block-list__block ol, +.block-library-list ol { + list-style: decimal; +} + +.edit-post-visual-editor ul:not(.wp-block-gallery) li > ul, +.editor-block-list__block ul:not(.wp-block-gallery) li > ul, +.block-library-list li > ul, +.edit-post-visual-editor li > ol, +.editor-block-list__block li > ol, +.block-library-list li > ol { + margin-bottom: 0; +} + +.wp-block-freeform.block-library-rich-text__tinymce li, +.editor-block-list__block li { + margin-bottom: 0; +} + +.rtl .edit-post-visual-editor ul:not(.wp-block-gallery), +.rtl .editor-block-list__block ul:not(.wp-block-gallery), +.rtl .block-library-list ul, +.rtl .edit-post-visual-editor ol, +.rtl .editor-block-list__block ol, +.rtl .block-library-list ol { + margin-left: 0; + margin-right: 1.3333em; +} + +/* Quote */ + +.rtl .editor-block-list__block blockquote { + border-left: 0; + padding-left: 0; +} + +/* Captions */ + +[class^="wp-block-"] figcaption { + color: #707070; + font-family: "Noto Sans", sans-serif; + font-size: 12px; + margin-bottom: 0; + padding: 0.5em 0; +} + +.editor-block-list__block [class^="wp-block-"] figcaption { + line-height: 1.5; +} + +@media screen and (min-width: 46.25em) { + [class^="wp-block-"] figcaption { + font-size: 14px; + } +} + +@media screen and (min-width: 55em) { + [class^="wp-block-"] figcaption { + font-size: 16px; + } +} + +@media screen and (min-width: 59.6875em) { + [class^="wp-block-"] figcaption { + font-size: 12px; + } +} + +@media screen and (min-width: 68.75em) { + [class^="wp-block-"] figcaption { + font-size: 14px; + } +} + +@media screen and (min-width: 77.5em) { + [class^="wp-block-"] figcaption { + font-size: 16px; + } +} + +/* Pre */ + +[class^="wp-block-"] pre { + font-size: inherit; +} + +/* Alignments */ + +.wp-block-quote.alignright, +.wp-block-freeform.block-library-rich-text__tinymce .alignright { + margin: 0.4211em 0 1.6842em 1.6842em; +} + +.wp-block-quote.alignleft, +.wp-block-freeform.block-library-rich-text__tinymce .alignleft { + margin: 0.4211em 1.6842em 1.6842em 0; +} + +/*-------------------------------------------------------------- +3.0 Blocks - Common Blocks +--------------------------------------------------------------*/ + +/* Paragraph */ + +p.has-drop-cap:not(:focus)::first-letter { + font-size: 5em; +} + +/* Quotes */ + +.wp-block-quote, +.wp-block-freeform.block-library-rich-text__tinymce blockquote { + color: #707070; + margin-bottom: 1.6667em; + padding-left: 0.7778em; +} + +.wp-block-quote:not(.is-large):not(.is-style-large), +.wp-block-freeform.block-library-rich-text__tinymce blockquote { + border-color: #707070; +} + +.edit-post-visual-editor .wp-block-quote p { + font-size: 18px; + font-style: italic; + line-height: 1.6667; + margin-bottom: 1.6667em; +} + +.edit-post-visual-editor .wp-block-quote > p:last-child { + margin-bottom: 0; +} + +.wp-block-quote__citation { + color: #333; + font-family: "Noto Sans", sans-serif; + font-size: 15px; + font-style: normal; + line-height: 1.6; + text-transform: none; +} + +.wp-block-quote em, +.wp-block-quote i { + font-style: normal; +} + +.wp-block-quote strong, +.wp-block-quote b { + font-weight: 400; +} + +@media screen and (min-width: 46.25em) { + .edit-post-visual-editor .wp-block-quote p { + font-size: 20px; + line-height: 1.75; + } + + .wp-block-quote__citation { + font-size: 17px; + line-height: 1.6471; + } +} + +@media screen and (min-width: 55em) { + .edit-post-visual-editor .wp-block-quote p { + font-size: 22px; + line-height: 1.8182; + } + + .wp-block-quote__citation { + font-size: 19px; + line-height: 1.6842; + } +} + +@media screen and (min-width: 59.6875em) { + .edit-post-visual-editor .wp-block-quote p { + font-size: 18px; + line-height: 1.6667; + } + + .wp-block-quote__citation { + font-size: 15px; + line-height: 1.6; + } +} + +@media screen and (min-width: 68.75em) { + .edit-post-visual-editor .wp-block-quote p { + font-size: 20px; + line-height: 1.75; + } + + .wp-block-quote__citation { + font-size: 17px; + line-height: 1.6471; + } +} + +@media screen and (min-width: 77.5em) { + .edit-post-visual-editor .wp-block-quote p { + font-size: 22px; + line-height: 1.8182; + } + + .wp-block-quote__citation { + font-size: 19px; + line-height: 1.6842; + } +} + +/* Cover Image */ + +.edit-post-visual-editor .editor-block-list__block .wp-block-cover-image p, +.wp-block-cover-image h2 { + font-size: 29px; + line-height: 1.2069; +} + + +/* File */ + +.wp-block-file .editor-rich-text__tinymce { + border-bottom: 1px solid #333; +} + +.wp-block-file .wp-block-file__button { + background-color: #333; + border: 0; + border-radius: 0; + color: #fff; + cursor: pointer; + font-family: "Noto Sans", sans-serif; + font-size: 12px; + font-weight: 700; + line-height: 1.5; + padding: 0.7917em 1.5em; + text-transform: uppercase; + vertical-align: baseline; +} + +@media screen and (min-width: 46.25em) { + .wp-block-file .wp-block-file__button { + font-size: 14px; + padding: 0.8214em 1.6429em; + } +} + +@media screen and (min-width: 55em) { + .wp-block-file .wp-block-file__button { + font-size: 16px; + padding: 0.8125em 1.625em; + } +} + +@media screen and (min-width: 59.6875em) { + .wp-block-file .wp-block-file__button { + font-size: 12px; + padding: 0.7917em 1.5833em; + } +} + +@media screen and (min-width: 68.75em) { + .wp-block-file .wp-block-file__button { + font-size: 14px; + padding: 0.8214em 1.5714em; + } +} + +@media screen and (min-width: 77.5em) { + .wp-block-file .wp-block-file__button { + font-size: 16px; + padding: 0.8125em 1.625em; + } +} + +/*-------------------------------------------------------------- +4.0 Blocks - Formatting +--------------------------------------------------------------*/ + +/* Code */ + +.wp-block-code, +.wp-block-freeform.block-library-rich-text__tinymce code { + background: transparent; + border: 0; + padding: 0; +} + +/* Pullquote */ + +.wp-block-pullquote, +.editor-block-list__block .wp-block-pullquote blockquote { + border: 0; + margin: 0; + padding-left: 0; +} + +.wp-block-pullquote .wp-block-pullquote__citation { + color: #333; + font-family: "Noto Sans", sans-serif; + font-size: 15px; + font-style: normal; + line-height: 1.6; + text-transform: none; +} + +@media screen and (min-width: 46.25em) { + .wp-block-pullquote .wp-block-pullquote__citation { + font-size: 17px; + line-height: 1.6471; + } +} + +@media screen and (min-width: 55em) { + .wp-block-pullquote .wp-block-pullquote__citation { + font-size: 19px; + line-height: 1.6842; + } +} + +@media screen and (min-width: 59.6875em) { + .wp-block-pullquote .wp-block-pullquote__citation { + font-size: 15px; + line-height: 1.6; + } +} + +@media screen and (min-width: 68.75em) { + .wp-block-pullquote .wp-block-pullquote__citation { + font-size: 17px; + line-height: 1.6471; + } +} + +@media screen and (min-width: 77.5em) { + .wp-block-pullquote .wp-block-pullquote__citation { + font-size: 19px; + line-height: 1.6842; + } +} + +/* Tables */ + +.editor-block-list__block .wp-block-table th, +.editor-block-list__block .wp-block-table td { + padding: 0; +} + +.rtl .editor-block-list__block .wp-block-table th { + text-align: right; +} + +/*-------------------------------------------------------------- +5.0 Blocks - Layout Elements +--------------------------------------------------------------*/ + +/* Button */ + +.wp-block-button .wp-block-button__link { + background-color: #333; + border: 0; + border-radius: 0; + color: #fff; + cursor: pointer; + font-family: "Noto Sans", sans-serif; + font-size: 12px; + font-weight: 700; + line-height: 1.5; + padding: 0.7917em 1.5em; + text-transform: uppercase; + vertical-align: baseline; +} + +@media screen and (min-width: 46.25em) { + .wp-block-button .wp-block-button__link { + font-size: 14px; + padding: 0.8214em 1.6429em; + } +} + +@media screen and (min-width: 55em) { + .wp-block-button .wp-block-button__link { + font-size: 16px; + padding: 0.8125em 1.625em; + } +} + +@media screen and (min-width: 59.6875em) { + .wp-block-button .wp-block-button__link { + font-size: 12px; + padding: 0.7917em 1.5833em; + } +} + +@media screen and (min-width: 68.75em) { + .wp-block-button .wp-block-button__link { + font-size: 14px; + padding: 0.8214em 1.5714em; + } +} + +@media screen and (min-width: 77.5em) { + .wp-block-button .wp-block-button__link { + font-size: 16px; + padding: 0.8125em 1.625em; + } +} + +/* Seperator */ + +.wp-block-separator { + max-width: 100px; +} + +.wp-block-separator.is-style-wide { + max-width: 100%; +} + + +/*-------------------------------------------------------------- +6.0 Blocks - Widgets +--------------------------------------------------------------*/ + +/* Latest Comments */ + +.wp-block-latest-comments { + margin: 0; +} + +.wp-block-latest-comments__comment, +.wp-block-latest-comments__comment-excerpt, +.wp-block-latest-comments__comment-excerpt p { + font-size: inherit; +} + +.wp-block-latest-comments__comment-meta a { + border-bottom-color: transparent; + font-weight: 700; +} + +.wp-block-latest-comments__comment-excerpt p:last-child { + margin-bottom: 0; +} + +.wp-block-latest-comments__comment-date { + color: #707070; + font-family: "Noto Sans", sans-serif; + font-size: 12px; + line-height: 1.5; + margin-bottom: 1.6em; +} + +@media screen and (min-width: 46.25em) { + .wp-block-latest-comments__comment-date { + font-size: 14px; + } +} + +@media screen and (min-width: 55em) { + .wp-block-latest-comments__comment-date { + font-size: 16px; + } +} + +@media screen and (min-width: 59.6875em) { + .wp-block-latest-comments__comment-date { + font-size: 12px; + } +} + +@media screen and (min-width: 68.75em) { + .wp-block-latest-comments__comment-date { + font-size: 14px; + } +} + +@media screen and (min-width: 77.5em) { + .wp-block-latest-comments__comment-date { + font-size: 16px; + } +} + +.wp-block-latest-comments .wp-block-latest-comments__comment { + border-top: 1px solid #eaeaea; + border-top: 1px solid rgba(51, 51, 51, 0.1); + margin-bottom: 0; + padding: 1.6em 0; +} + +/* Latest Posts */ + +.edit-post-visual-editor .wp-block-latest-posts.is-grid { + list-style: none; + margin-left: 0; + margin-right: 0; +} + +.edit-post-visual-editor .wp-block-latest-posts.is-grid li { + margin-bottom: 16px; +} diff --git a/src/wp-content/themes/twentyfifteen/functions.php b/src/wp-content/themes/twentyfifteen/functions.php index b6161927a1733..5f953e9d0a07f 100644 --- a/src/wp-content/themes/twentyfifteen/functions.php +++ b/src/wp-content/themes/twentyfifteen/functions.php @@ -142,6 +142,76 @@ function twentyfifteen_setup() { */ add_editor_style( array( 'css/editor-style.css', 'genericons/genericons.css', twentyfifteen_fonts_url() ) ); + // Load regular editor styles into the new block-based editor. + add_theme_support( 'editor-styles' ); + + // Load default block styles. + add_theme_support( 'wp-block-styles' ); + + // Add support for custom color scheme. + add_theme_support( 'editor-color-palette', array( + array( + 'name' => __( 'Dark Gray', 'twentyfifteen' ), + 'slug' => 'dark-gray', + 'color' => '#111', + ), + array( + 'name' => __( 'Light Gray', 'twentyfifteen' ), + 'slug' => 'light-gray', + 'color' => '#f1f1f1', + ), + array( + 'name' => __( 'White', 'twentyfifteen' ), + 'slug' => 'white', + 'color' => '#fff', + ), + array( + 'name' => __( 'Yellow', 'twentyfifteen' ), + 'slug' => 'yellow', + 'color' => '#f4ca16', + ), + array( + 'name' => __( 'Dark Brown', 'twentyfifteen' ), + 'slug' => 'dark-brown', + 'color' => '#352712', + ), + array( + 'name' => __( 'Medium Pink', 'twentyfifteen' ), + 'slug' => 'medium-pink', + 'color' => '#e53b51', + ), + array( + 'name' => __( 'Light Pink', 'twentyfifteen' ), + 'slug' => 'light-pink', + 'color' => '#ffe5d1', + ), + array( + 'name' => __( 'Dark Purple', 'twentyfifteen' ), + 'slug' => 'dark-purple', + 'color' => '#2e2256', + ), + array( + 'name' => __( 'Purple', 'twentyfifteen' ), + 'slug' => 'purple', + 'color' => '#674970', + ), + array( + 'name' => __( 'Blue Gray', 'twentyfifteen' ), + 'slug' => 'blue-gray', + 'color' => '#22313f', + ), + array( + 'name' => __( 'Bright Blue', 'twentyfifteen' ), + 'slug' => 'bright-blue', + 'color' => '#55c3dc', + ), + array( + 'name' => __( 'Light Blue', 'twentyfifteen' ), + 'slug' => 'light-blue', + 'color' => '#e9f2f9', + ), + ) ); + // Indicate widget sidebars can use selective refresh in the Customizer. add_theme_support( 'customize-selective-refresh-widgets' ); } @@ -259,6 +329,9 @@ function twentyfifteen_scripts() { // Load our main stylesheet. wp_enqueue_style( 'twentyfifteen-style', get_stylesheet_uri() ); + // Theme block stylesheet. + wp_enqueue_style( 'twentyfifteen-block-style', get_template_directory_uri() . '/css/blocks.css', array( 'twentyfifteen-style' ), '20181018' ); + // Load the Internet Explorer specific stylesheet. wp_enqueue_style( 'twentyfifteen-ie', get_template_directory_uri() . '/css/ie.css', array( 'twentyfifteen-style' ), '20141010' ); wp_style_add_data( 'twentyfifteen-ie', 'conditional', 'lt IE 9' ); @@ -285,6 +358,20 @@ function twentyfifteen_scripts() { } add_action( 'wp_enqueue_scripts', 'twentyfifteen_scripts' ); +/** + * Enqueue editor styles for Gutenberg + * + * @since Twenty Fifteen 2.1 + */ +function twentyfifteen_block_editor_styles() { + // Block styles. + wp_enqueue_style( 'twentyfifteen-block-editor-style', get_template_directory_uri() . '/css/editor-blocks.css' ); + // Add custom fonts. + wp_enqueue_style( 'twentyfifteen-fonts', twentyfifteen_fonts_url(), array(), null ); +} +add_action( 'enqueue_block_editor_assets', 'twentyfifteen_block_editor_styles' ); + + /** * Add preconnect for Google Fonts. * From 067529bd3fa65bf0a86e02a1cf124e1296217ba6 Mon Sep 17 00:00:00 2001 From: "David A. Kennedy" Date: Tue, 23 Oct 2018 01:03:09 +0000 Subject: [PATCH 504/537] Twenty Sixteen: Add styles and support for the new block-based editor. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This update adds styles and theme support related to the new block-based editor to enhance the experience of using it with Twenty Sixteen. These are the specific changes made to this theme: * Add blocks.css, to style blocks on the front end, to make sure they match the theme’s existing HTML element styles. * Add editor-blocks.css to style blocks in the editor, to make sure they match the theme’s existing HTML element styles. * Add theme support for `editor-styles`, to pull the existing editor stylesheet into the new editor. * Add theme support for `wp-block-styles`, to load the default block styles on the front end. * Add theme support for `editor-color-palette`, to load a color palette based on the theme’s color scheme into the block-based editor. Props laurelfulford. Fixes #45044. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43799 602fd350-edb4-49c9-b593-d223f7449a82 --- .../themes/twentysixteen/css/blocks.css | 370 +++++++++++ .../twentysixteen/css/editor-blocks.css | 591 ++++++++++++++++++ .../themes/twentysixteen/functions.php | 88 ++- 3 files changed, 1048 insertions(+), 1 deletion(-) create mode 100644 src/wp-content/themes/twentysixteen/css/blocks.css create mode 100644 src/wp-content/themes/twentysixteen/css/editor-blocks.css diff --git a/src/wp-content/themes/twentysixteen/css/blocks.css b/src/wp-content/themes/twentysixteen/css/blocks.css new file mode 100644 index 0000000000000..f72500d785e14 --- /dev/null +++ b/src/wp-content/themes/twentysixteen/css/blocks.css @@ -0,0 +1,370 @@ +/* +Theme Name: Twenty Sixteen +Description: Used to style Gutenberg Blocks. +*/ + +/*-------------------------------------------------------------- +>>> TABLE OF CONTENTS: +---------------------------------------------------------------- +1.0 General Block Styles +2.0 Blocks - Common Blocks +3.0 Blocks - Formatting +4.0 Blocks - Layout Elements +5.0 Blocks - Widgets +6.0 Blocks - Colors +--------------------------------------------------------------*/ + +/*-------------------------------------------------------------- +1.0 General Block Styles +--------------------------------------------------------------*/ + +/* Captions */ + +[class^="wp-block-"] figcaption { + color: #686868; + font-style: italic; + line-height: 1.6153846154; + padding-top: 0.5384615385em; +} + +/*-------------------------------------------------------------- +2.0 Blocks - Common Blocks +--------------------------------------------------------------*/ + +/* Paragraph */ + +p.has-drop-cap:not(:focus)::first-letter { + font-size: 5em; +} + +/* Gallery */ + +.wp-block-gallery { + margin-bottom: 1.75em; +} + +/* Quote */ + +.wp-block-quote:not(.is-large):not(.is-style-large).alignleft, +.wp-block-quote:not(.is-large):not(.is-style-large).alignright { + border-left: none; + padding-left: 0; +} + +.rtl .wp-block-quote:not(.is-large):not(.is-style-large).alignleft, +.rtl .wp-block-quote:not(.is-large):not(.is-style-large).alignright { + border-right: none; + padding-right: 0; +} + +.wp-block-quote cite { + color: #1a1a1a; + display: block; + font-size: 16px; + font-size: 1rem; + line-height: 1.75; +} + +.wp-block-quote cite:before { + content: "\2014\00a0"; +} + +/* Audio */ + +.wp-block-audio audio { + display: block; + width: 100%; +} + +/* File */ + +.wp-block-file .wp-block-file__button { + background: #1a1a1a; + border: 0; + border-radius: 2px; + color: #fff; + font-family: Montserrat, "Helvetica Neue", sans-serif; + font-weight: 700; + letter-spacing: 0.046875em; + line-height: 1; + padding: 0.84375em 0.875em 0.78125em; + text-transform: uppercase; +} + +.wp-block-file .wp-block-file__button:hover, +.wp-block-file .wp-block-file__button:focus { + background: #007acc; +} + +.wp-block-file .wp-block-file__button:focus { + outline: thin dotted; + outline-offset: -4px; +} + +.rtl .wp-block-file * + .wp-block-file__button { + margin-left: 0.75em; + margin-right: 0; +} + +/*-------------------------------------------------------------- +3.0 Blocks - Formatting Blocks +--------------------------------------------------------------*/ + +/* Code */ + +.wp-block-code { + border: 0; + font-family: Inconsolata, monospace; + font-size: 16px; + font-size: 1rem; + line-height: 1.75; + padding: 0; +} + +/* Pullquote */ + +.wp-block-pullquote { + border-width: 4px; +} + +.wp-block-pullquote blockquote { + border-left: 0; + margin: 0; + padding: 0; +} + +.rtl .wp-block-pullquote blockquote { + border-right: 0; +} + +.wp-block-pullquote p { + color: #686868; + font-size: 19px; + font-size: 1.1875rem; +} + +.wp-block-pullquote cite { + color: #1a1a1a; + display: block; + font-size: 16px; + font-size: 1rem; + font-style: none; + line-height: 1.75; + text-transform: none; +} + +.wp-block-pullquote cite:before { + content: "\2014\00a0"; +} + +/* Table */ + +.wp-block-table, +.wp-block-table th, +.wp-block-table td { + border: 1px solid #d1d1d1; +} + +.wp-block-table { + border-collapse: separate; + border-spacing: 0; + border-width: 1px 0 0 1px; + margin: 0 0 1.75em; + table-layout: fixed; + width: 100%; +} + +.wp-block-table th, +.wp-block-table td { + font-weight: normal; + padding: 0.4375em; + text-align: left; +} + +.wp-block-table th { + border-width: 0 1px 1px 0; + font-weight: 700; +} + +.wp-block-table td { + border-width: 0 1px 1px 0; +} + +.rtl .wp-block-table th, +.rtl .wp-block-table td { + text-align: right; +} + +/*-------------------------------------------------------------- +4.0 Blocks - Layout Elements +--------------------------------------------------------------*/ + +/* Buttons */ + +.wp-block-button .wp-block-button__link { + background: #1a1a1a; + border: 0; + border-radius: 2px; + color: #fff; + font-family: Montserrat, "Helvetica Neue", sans-serif; + font-weight: 700; + letter-spacing: 0.046875em; + line-height: 1; + padding: 0.84375em 0.875em 0.78125em; + text-transform: uppercase; +} + +.wp-block-button .wp-block-button__link:hover, +.wp-block-button .wp-block-button__link:focus { + background: #007acc; +} + +.wp-block-button .wp-block-button__link:focus { + outline: thin dotted; + outline-offset: -4px; +} + +/* Seperator */ + +hr.wp-block-separator { + border: 0; +} + +.wp-block-separator { + margin-left: auto; + margin-right: auto; + max-width: 100px; +} + +.wp-block-separator.is-style-wide { + max-width: 100%; +} + +/*-------------------------------------------------------------- +5.0 Blocks - Widget Blocks +--------------------------------------------------------------*/ + +/* Latest Comments */ + +.wp-block-latest-comments__comment-meta a { + box-shadow: none; + font-weight: 700; +} + +.wp-block-latest-comments__comment-date { + color: #686868; + font-family: Montserrat, "Helvetica Neue", sans-serif; + font-size: 13px; + font-size: 0.8125rem; + line-height: 1.6153846154; +} + +.wp-block-latest-comments .wp-block-latest-comments__comment { + border-top: 1px solid #d1d1d1; + margin-bottom: 0; + padding: 1.75em 0; +} + +.wp-block-latest-comments__comment-excerpt p:last-child { + margin-bottom: 0; +} + +/*-------------------------------------------------------------- +6.0 Blocks - Colors +--------------------------------------------------------------*/ + +.has-dark-gray-color { + color: #1a1a1a; +} + +.has-dark-gray-background-color { + background-color: #1a1a1a; +} + +.has-medium-gray-color { + color: #686868; +} + +.has-medium-gray-background-color { + background-color: #686868; +} + +.has-light-gray-color { + color: #e5e5e5; +} + +.has-light-gray-background-color { + background-color: #e5e5e5; +} + +.has-white-color { + color: #fff; +} + +.has-white-background-color { + background-color: #fff; +} + +.has-blue-gray-color { + color: #4d545c; +} + +.has-blue-gray-background-color { + background-color: #4d545c; +} + +.has-bright-blue-color { + color: #007acc; +} + +.has-bright-blue-background-color { + background-color: #007acc; +} + +.has-light-blue-color { + color: #9adffd; +} + +.has-light-blue-background-color { + background-color: #9adffd; +} + +.has-dark-brown-color { + color: #402b30; +} + +.has-dark-brown-background-color { + background-color: #402b30; +} + +.has-medium-brown-color { + color: #774e24; +} + +.has-medium-brown-background-color { + background-color: #774e24; +} + +.has-dark-red-color { + color: #640c1f; +} + +.has-dark-red-background-color { + background-color: #640c1f; +} + +.has-bright-red-color { + color: #ff675f; +} + +.has-bright-red-background-color { + background-color: #ff675f; +} + +.has-yellow-color { + color: #ffef8e; +} + +.has-yellow-background-color { + background-color: #ffef8e; +} diff --git a/src/wp-content/themes/twentysixteen/css/editor-blocks.css b/src/wp-content/themes/twentysixteen/css/editor-blocks.css new file mode 100644 index 0000000000000..cb3a4d0515640 --- /dev/null +++ b/src/wp-content/themes/twentysixteen/css/editor-blocks.css @@ -0,0 +1,591 @@ +/* +Theme Name: Twenty Sixteen +Description: Used to style Gutenberg Blocks in the editor. +*/ + +/*-------------------------------------------------------------- +>>> TABLE OF CONTENTS: +---------------------------------------------------------------- +1.0 General Typography +2.0 General Block Styles +3.0 Blocks - Common Blocks +4.0 Blocks - Formatting +5.0 Blocks - Layout Elements +6.0 Blocks - Widgets +--------------------------------------------------------------*/ + +/*-------------------------------------------------------------- +1.0 General Typography +--------------------------------------------------------------*/ + +.edit-post-visual-editor .editor-block-list__block, +.editor-default-block-appender input[type="text"].editor-default-block-appender__content { + color: #1a1a1a; + font-family: Merriweather, Georgia, serif; + font-size: 16px; + font-size: 1rem; + line-height: 1.75; +} + +.edit-post-visual-editor .editor-block-list__block { + color: #1a1a1a; +} + +.editor-post-title__block .editor-post-title__input { + font-family: Montserrat, "Helvetica Neue", sans-serif; + font-size: 28px; + font-size: 1.75rem; + font-weight: 700; + line-height: 1.25; + margin-bottom: 1em; +} + +.edit-post-visual-editor h1 { + font-size: 28px; + font-size: 1.75rem; + line-height: 1.25; + margin-top: 2em; + margin-bottom: 1em; +} + +.edit-post-visual-editor h2 { + font-size: 23px; + font-size: 1.4375rem; + line-height: 1.2173913043; + margin-top: 2.4347826087em; + margin-bottom: 1.2173913043em; +} + +.edit-post-visual-editor h3 { + font-size: 19px; + font-size: 1.1875rem; + line-height: 1.1052631579; + margin-top: 2.9473684211em; + margin-bottom: 1.4736842105em; +} + +.edit-post-visual-editor h4, +.edit-post-visual-editor h5, +.edit-post-visual-editor h6 { + font-size: 16px; + font-size: 1rem; + line-height: 1.3125; + margin-top: 3.5em; + margin-bottom: 1.75em; +} + +.edit-post-visual-editor h4 { + letter-spacing: 0.140625em; + text-transform: uppercase; +} + +.edit-post-visual-editor h6 { + font-style: italic; +} + +.edit-post-visual-editor h1, +.edit-post-visual-editor h2, +.edit-post-visual-editor h3, +.edit-post-visual-editor h4, +.edit-post-visual-editor h5, +.edit-post-visual-editor h6 { + font-weight: 900; +} + +@media screen and (min-width: 61.5625em) { + .edit-post-visual-editor h1 { + font-size: 33px; + font-size: 2.0625rem; + line-height: 1.2727272727; + margin-top: 1.696969697em; + margin-bottom: 0.8484848485em; + } + + .edit-post-visual-editor h2 { + font-size: 28px; + font-size: 1.75rem; + line-height: 1.25; + margin-top: 2em; + margin-bottom: 1em; + } + + .edit-post-visual-editor h3 { + font-size: 23px; + font-size: 1.4375rem; + line-height: 1.2173913043; + margin-top: 2.4347826087em; + margin-bottom: 1.2173913043em; + } + + .edit-post-visual-editor h4 { + letter-spacing: 0.131578947em; + } + + .edit-post-visual-editor h4, + .edit-post-visual-editor h5, + .edit-post-visual-editor h6 { + font-size: 19px; + font-size: 1.1875rem; + line-height: 1.1052631579; + margin-top: 2.9473684211em; + margin-bottom: 1.473684211em; + } +} + +.edit-post-visual-editor h1:first-child, +.edit-post-visual-editor h2:first-child, +.edit-post-visual-editor h3:first-child, +.edit-post-visual-editor h4:first-child, +.edit-post-visual-editor h5:first-child, +.edit-post-visual-editor h6:first-child { + margin-top: 0; +} + +.edit-post-visual-editor p { + margin: 0 0 1.75em; +} + +.edit-post-visual-editor blockquote p { + margin-bottom: 1.4736842105em; +} + +@media screen and (min-width: 44.375em) { + .editor-post-title__block .editor-post-title__input { + font-size: 33px; + font-size: 2.0625rem; + line-height: 1.2727272727; + margin-bottom: 0.8484848485em; + } +} + +@media screen and (min-width: 61.5625em) { + .editor-post-title__block .editor-post-title__input { + font-size: 40px; + font-size: 2.5rem; + line-height: 1.225; + margin-bottom: 1.05em; + } +} + +/*-------------------------------------------------------------- +2.0 General Block Styles +--------------------------------------------------------------*/ + +/* Main column width */ + +body.gutenberg-editor-page .edit-post-visual-editor .editor-post-title__block, +body.gutenberg-editor-page .edit-post-visual-editor .editor-default-block-appender, +body.gutenberg-editor-page .edit-post-visual-editor .editor-block-list__block { + max-width: 630px; /* 600px + 30px for padding; should be 840px for pages */ +} + +/* Link styles */ + +.edit-post-visual-editor a, +.editor-block-list__block a, +.wp-block-freeform.block-library-rich-text__tinymce a { + color: #007acc; +} + +/* List styles */ + +.edit-post-visual-editor ul:not(.wp-block-gallery), +.editor-block-list__block ul:not(.wp-block-gallery), +.block-library-list ul, +.edit-post-visual-editor ol, +.editor-block-list__block ol, +.block-library-list ol { + margin: 0 0 1.75em 1.25em; + padding: 0; +} + +.edit-post-visual-editor ul:not(.wp-block-gallery), +.editor-block-list__block ul:not(.wp-block-gallery), +.block-library-list ul { + list-style: disc; +} + +.edit-post-visual-editor ol, +.editor-block-list__block ol, +.block-library-list ol { + list-style: decimal; + margin-left: 1.5em; +} + +.edit-post-visual-editor ul:not(.wp-block-gallery) li, +.editor-block-list__block ul:not(.wp-block-gallery) li, +.edit-post-visual-editor ol li, +.editor-block-list__block ol li, +.block-library-list li { + margin-bottom: 0; +} + +.edit-post-visual-editor ul:not(.wp-block-gallery) li > ul, +.editor-block-list__block ul:not(.wp-block-gallery) li > ul, +.block-library-list li > ul, +.edit-post-visual-editor li > ol, +.editor-block-list__block li > ol, +.block-library-list li > ol { + margin-bottom: 0; +} + +.rtl .edit-post-visual-editor ul:not(.wp-block-gallery), +.rtl .editor-block-list__block ul:not(.wp-block-gallery), +.rtl .block-library-list ul, +.rtl .edit-post-visual-editor ol, +.rtl .editor-block-list__block ol, +.rtl .block-library-list ol { + margin-left: 0; + margin-right: 1.25em; + padding: 0; +} + +.rtl .edit-post-visual-editor ol, +.rtl .editor-block-list__block ol, +.rtl .block-library-list ol { + margin-left: 1.5em; + margin-right: 1.5em; +} + +/* Quotes */ + +.rtl .editor-block-list__block blockquote { + border-left: 0; + padding-left: 0; +} + +/* Captions */ + +[class^="wp-block-"] figcaption { + color: #686868; + font-style: italic; + line-height: 1.6153846154; + padding-top: 0.5384615385em; +} + +/*-------------------------------------------------------------- +3.0 Blocks - Common Blocks +--------------------------------------------------------------*/ + +/* Paragraph */ + +.wp-block-paragraph.has-drop-cap:not(:focus)::first-letter { + font-size: 5em; + line-height: 0.68; + margin: 0.05em 0.1em 0 0; + text-transform: uppercase; + font-style: normal; +} + +.rtl .wp-block-paragraph.has-drop-cap:not(:focus)::first-letter { + margin: 0.05em 0 0 0.1em; +} + +/* Quote */ + +.wp-block-quote { + border: 0 solid #1a1a1a; + border-left-width: 4px; + color: #686868; + font-style: italic; + line-height: 1.4736842105; + margin: 0 0 1.4736842105em; + overflow: hidden; + padding: 0 0 0 1.263157895em; +} + +.wp-block-quote:not(.is-large):not(.is-style-large).alignleft, +.wp-block-quote:not(.is-large):not(.is-style-large).alignright { + border-left: 0; + padding-left: 0; +} + +.editor-block-list__block .wp-block-quote p { + font-size: 19px; + font-size: 1.1875rem; + margin-bottom: 1.4736842105em; +} + +.wp-block-quote__citation { + color: #1a1a1a; + display: block; + font-size: 16px; + font-size: 1rem; + line-height: 1.75; +} + +.wp-block-quote__citation:before { + content: "\2014\00a0"; +} + +.wp-block-quote em, +.wp-block-quote i, +.wp-block-quote__citation:before { + font-style: normal; +} + +.wp-block-quote strong, +.wp-block-quote b { + font-weight: 400; +} + +.wp-block-quote > :last-child { + margin-bottom: 0; +} + +.wp-block-quote.alignleft { + margin: 0.3157894737em 1.4736842105em 1.473684211em 0; +} + +.wp-block-quote.alignright { + margin: 0.3157894737em 0 1.473684211em 1.4736842105em; +} + +.wp-block-quote.aligncenter { + margin-bottom: 1.473684211em; +} + +.rtl .wp-block-quote:not(.is-large):not(.is-style-large).alignleft, +.rtl .wp-block-quote:not(.is-large):not(.is-style-large).alignright { + border-right: 0; + padding-right: 0; +} + +@media screen and (min-width: 44.375em) { + .wp-block-quote.alignleft, + .wp-block-quote.alignright { + border-width: 4px 0 0 0; + padding: 0.9473684211em 0 0; + width: -webkit-calc(50% - 0.736842105em); + width: calc(50% - 0.736842105em); + } + + .wp-block-quote:not(.alignleft):not(.alignright) { + margin-left: -1.473684211em; + } + + .rtl .wp-block-quote:not(.alignleft):not(.alignright) { + margin-left: 0; + margin-right: -1.473684211em; + } +} + +@media screen and (min-width: 80em) { + .editor-block-list__block .wp-block-quote.alignleft { + margin-left: -40%; + width: -webkit-calc(60% - 1.4736842105em); + width: calc(60% - 1.4736842105em); + } +} + +/* File */ + +.wp-block-file__textlink { + box-shadow: 0 1px 0 0 currentColor; + color: #007acc; +} + +.wp-block-file .wp-block-file__button { + background: #1a1a1a; + border: 0; + border-radius: 2px; + color: #fff; + font-family: Montserrat, "Helvetica Neue", sans-serif; + font-weight: 700; + letter-spacing: 0.046875em; + line-height: 1; + padding: 0.84375em 0.875em 0.78125em; + text-transform: uppercase; +} + +/*-------------------------------------------------------------- +4.0 Blocks - Formatting +--------------------------------------------------------------*/ + +/* Code */ + +.wp-block-code { + border: 0; + padding: 0.125em 0.25em; +} + +/* Classic */ + +.wp-block-freeform.block-library-rich-text__tinymce blockquote { + border: 0 solid #1a1a1a; + border-left-width: 4px; + color: #686868; + font-style: italic; + line-height: 1.4736842105; + margin: 0 0 1.4736842105em; + overflow: hidden; + padding: 0 0 0 1.263157895em; +} + +.editor-block-list__block .wp-block-freeform.block-library-rich-text__tinymce blockquote:not(.alignleft):not(.alignright) { + margin-left: 0; +} + +.wp-block-freeform.block-library-rich-text__tinymce blockquote p { + font-size: 19px; + font-size: 1.1875rem; +} + +.wp-block-freeform.block-library-rich-text__tinymce blockquote cite { + color: #1a1a1a; + display: block; + font-size: 16px; + font-size: 1rem; + font-style: normal; + line-height: 1.75; +} + +.wp-block-freeform.block-library-rich-text__tinymce blockquote cite:before { + content: "\2014\00a0"; +} + +.wp-block-freeform.block-library-rich-text__tinymce blockquote.alignleft { + margin: 0.3157894737em 1.4736842105em 1.473684211em 0; +} + +.wp-block-freeform.block-library-rich-text__tinymce blockquote.alignright { + margin: 0.3157894737em 0 1.473684211em 1.4736842105em; +} + +.wp-block-freeform.block-library-rich-text__tinymce blockquote.aligncenter { + margin-bottom: 1.473684211em; +} + +@media screen and (min-width: 44.375em) { + .wp-block-freeform.block-library-rich-text__tinymce blockquote.alignleft, + .wp-block-freeform.block-library-rich-text__tinymce blockquote.alignright { + border-width: 4px 0 0 0; + padding: 0.9473684211em 0 0; + width: -webkit-calc(50% - 0.736842105em); + width: calc(50% - 0.736842105em); + } +} + +.rtl .wp-block-freeform.block-library-rich-text__tinymce blockquote { + border-left-width: 0; + border-right-width: 4px; + overflow: hidden; + padding-left: 0; + padding-right: 1.263157895em; +} + +.rtl .wp-block-freeform.block-library-rich-text__tinymce .alignleft { + float: left; +} + +.rtl .wp-block-freeform.block-library-rich-text__tinymce .alignright { + float: right; +} + +.rtl .wp-block-freeform.block-library-rich-text__tinymce blockquote.alignleft { + margin: 0.3157894737em 0 1.473684211em 1.4736842105em; +} + +.rtl .wp-block-freeform.block-library-rich-text__tinymce blockquote.alignright { + margin: 0.3157894737em 1.4736842105em 1.473684211em 0; +} + +/* Pullquote */ + +.editor-block-list__block .wp-block-pullquote blockquote { + border: 0; + margin: 0; + padding: 0; +} + +.wp-block-pullquote blockquote > .editor-rich-text p { + color: #686868; + font-size: 19px; + font-size: 1.1875rem; +} + +.wp-block-pullquote .wp-block-pullquote__citation { + color: #1a1a1a; + display: block; + font-size: 16px; + font-size: 1rem; + font-style: italic; + line-height: 1.75; + text-transform: none; +} + +.wp-block-pullquote .wp-block-pullquote__citation:before { + content: "\2014\00a0"; +} + +/* Table */ + +.editor-block-list__block table.wp-block-table th, +.editor-block-list__block table.wp-block-table td { + padding: 0; +} + +.rtl .wp-block-table th, +.rtl .wp-block-table td { + text-align: right; +} + +/*-------------------------------------------------------------- +5.0 Blocks - Layout Elements +--------------------------------------------------------------*/ + +/* Buttons */ +.wp-block-button .wp-block-button__link { + background: #1a1a1a; + border: 0; + border-radius: 2px; + color: #fff; + font-family: Montserrat, "Helvetica Neue", sans-serif; + font-weight: 700; + letter-spacing: 0.046875em; + line-height: 1; + padding: 0.84375em 0.875em 0.78125em; + text-transform: uppercase; +} + +/*-------------------------------------------------------------- +6.0 Blocks - Widgets +--------------------------------------------------------------*/ + +/* Latest Comments */ + +.editor-block-list__block .wp-block-latest-comments__comment-meta a { + box-shadow: none; + font-weight: 700; + text-decoration: none; +} + +.wp-block-latest-comments__comment-date { + color: #686868; + font-family: Montserrat, "Helvetica Neue", sans-serif; + font-size: 13px; + font-size: 0.8125rem; + line-height: 1.6153846154; +} + +.wp-block-latest-comments .wp-block-latest-comments__comment { + border-top: 1px solid #d1d1d1; + margin-bottom: 0; + padding: 1.75em 0; +} + +.wp-block-latest-comments__comment-excerpt p:last-child { + margin-bottom: 0; +} + +/* Latest Posts */ + +.edit-post-visual-editor .wp-block-latest-posts.is-grid { + list-style: none; + margin-left: 0; + margin-right: 0; +} + +.edit-post-visual-editor .wp-block-latest-posts.is-grid li { + margin-bottom: 16px; +} diff --git a/src/wp-content/themes/twentysixteen/functions.php b/src/wp-content/themes/twentysixteen/functions.php index d6e58e1a92e5d..f5e7e950a22ad 100644 --- a/src/wp-content/themes/twentysixteen/functions.php +++ b/src/wp-content/themes/twentysixteen/functions.php @@ -124,6 +124,76 @@ function twentysixteen_setup() { */ add_editor_style( array( 'css/editor-style.css', twentysixteen_fonts_url() ) ); + // Load regular editor styles into the new block-based editor. + add_theme_support( 'editor-styles' ); + + // Load default block styles. + add_theme_support( 'wp-block-styles' ); + + // Add support for custom color scheme. + add_theme_support( 'editor-color-palette', array( + array( + 'name' => __( 'Dark Gray', 'twentysixteen' ), + 'slug' => 'dark-gray', + 'color' => '#1a1a1a', + ), + array( + 'name' => __( 'Medium Gray', 'twentysixteen' ), + 'slug' => 'medium-gray', + 'color' => '#686868', + ), + array( + 'name' => __( 'Light Gray', 'twentysixteen' ), + 'slug' => 'light-gray', + 'color' => '#e5e5e5', + ), + array( + 'name' => __( 'White', 'twentysixteen' ), + 'slug' => 'white', + 'color' => '#fff', + ), + array( + 'name' => __( 'Blue Gray', 'twentysixteen' ), + 'slug' => 'blue-gray', + 'color' => '#4d545c', + ), + array( + 'name' => __( 'Bright Blue', 'twentysixteen' ), + 'slug' => 'bright-blue', + 'color' => '#007acc', + ), + array( + 'name' => __( 'Light Blue', 'twentysixteen' ), + 'slug' => 'light-blue', + 'color' => '#9adffd', + ), + array( + 'name' => __( 'Dark Brown', 'twentysixteen' ), + 'slug' => 'dark-brown', + 'color' => '#402b30', + ), + array( + 'name' => __( 'Medium Brown', 'twentysixteen' ), + 'slug' => 'medium-brown', + 'color' => '#774e24', + ), + array( + 'name' => __( 'Dark Red', 'twentysixteen' ), + 'slug' => 'dark-red', + 'color' => '#640c1f', + ), + array( + 'name' => __( 'Bright Red', 'twentysixteen' ), + 'slug' => 'bright-red', + 'color' => '#ff675f', + ), + array( + 'name' => __( 'Yellow', 'twentysixteen' ), + 'slug' => 'yellow', + 'color' => '#ffef8e', + ), + ) ); + // Indicate widget sidebars can use selective refresh in the Customizer. add_theme_support( 'customize-selective-refresh-widgets' ); } @@ -252,6 +322,9 @@ function twentysixteen_scripts() { // Theme stylesheet. wp_enqueue_style( 'twentysixteen-style', get_stylesheet_uri() ); + // Theme block stylesheet. + wp_enqueue_style( 'twentysixteen-block-style', get_template_directory_uri() . '/css/blocks.css', array( 'twentysixteen-style' ), '20181018' ); + // Load the Internet Explorer specific stylesheet. wp_enqueue_style( 'twentysixteen-ie', get_template_directory_uri() . '/css/ie.css', array( 'twentysixteen-style' ), '20160816' ); wp_style_add_data( 'twentysixteen-ie', 'conditional', 'lt IE 10' ); @@ -287,6 +360,19 @@ function twentysixteen_scripts() { } add_action( 'wp_enqueue_scripts', 'twentysixteen_scripts' ); +/** + * Enqueue editor styles for Gutenberg + * + * @since Twenty Sixteen 1.6 + */ +function twentysixteen_block_editor_styles() { + // Block styles. + wp_enqueue_style( 'twentysixteen-block-editor-style', get_template_directory_uri() . '/css/editor-blocks.css' ); + // Add custom fonts. + wp_enqueue_style( 'twentysixteen-fonts', twentysixteen_fonts_url(), array(), null ); +} +add_action( 'enqueue_block_editor_assets', 'twentysixteen_block_editor_styles' ); + /** * Adds custom classes to the array of body classes. * @@ -427,7 +513,7 @@ function twentysixteen_widget_tag_cloud_args( $args ) { $args['largest'] = 1; $args['smallest'] = 1; $args['unit'] = 'em'; - $args['format'] = 'list'; + $args['format'] = 'list'; return $args; } From 2d4c42871218887c5769cd205b04517e60af3683 Mon Sep 17 00:00:00 2001 From: "David A. Kennedy" Date: Tue, 23 Oct 2018 01:25:03 +0000 Subject: [PATCH 505/537] Twenty Seventeen: Add styles and support for the new block-based editor. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This update adds styles and theme support related to the new block-based editor to enhance the experience of using it with Twenty Seventeen. These are the specific changes made to this theme: * Add blocks.css, to style blocks on the front end, to make sure they match the theme’s existing HTML element styles. * Add editor-blocks.css to style blocks in the editor, to make sure they match the theme’s existing HTML element styles. * Add theme support for `editor-styles`, to pull the existing editor stylesheet into the new editor. * Add theme support for `wp-block-styles`, to load the default block styles on the front end. Props laurelfulford, ianbelanger, crunnells. Fixes #45045. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43800 602fd350-edb4-49c9-b593-d223f7449a82 --- .../twentyseventeen/assets/css/blocks.css | 275 +++++++ .../assets/css/editor-blocks.css | 776 ++++++++++++++++++ .../themes/twentyseventeen/functions.php | 22 + 3 files changed, 1073 insertions(+) create mode 100644 src/wp-content/themes/twentyseventeen/assets/css/blocks.css create mode 100644 src/wp-content/themes/twentyseventeen/assets/css/editor-blocks.css diff --git a/src/wp-content/themes/twentyseventeen/assets/css/blocks.css b/src/wp-content/themes/twentyseventeen/assets/css/blocks.css new file mode 100644 index 0000000000000..6a3518fa217a8 --- /dev/null +++ b/src/wp-content/themes/twentyseventeen/assets/css/blocks.css @@ -0,0 +1,275 @@ +/* +Theme Name: Twenty Seventeen +Description: Used to style Gutenberg Blocks. +*/ + +/*-------------------------------------------------------------- +>>> TABLE OF CONTENTS: +---------------------------------------------------------------- +1.0 Blocks - Common Blocks +2.0 Blocks - Formatting +3.0 Blocks - Layout Elements +4.0 Blocks - Widgets +--------------------------------------------------------------*/ + +/*-------------------------------------------------------------- +1.0 General Block Styles +--------------------------------------------------------------*/ + +/* Captions */ + +[class^="wp-block-"]:not(.wp-block-gallery) figcaption { + font-style: italic; + margin-bottom: 1.5em; + text-align: left; +} + +.rtl [class^="wp-block-"]:not(.wp-block-gallery) figcaption { + text-align: right; +} + +/*-------------------------------------------------------------- +2.0 Blocks - Common Blocks +--------------------------------------------------------------*/ + +/* Paragraph */ + +p.has-drop-cap:not(:focus)::first-letter { + font-size: 5em; + margin-top: 0.075em; +} + +/* Image */ + +.wp-block-image { + margin-bottom: 1.5em; +} + +.wp-block-image figure { + margin-bottom: 0; + margin-top: 0; +} + +.wp-block-image figure.alignleft { + margin-right: 1.5em; +} + +.wp-block-image figure.alignright { + margin-left: 1.5em; +} + +/* Gallery */ + +.wp-block-gallery { + margin-bottom: 1.5em; +} + +.wp-block-gallery figcaption { + font-style: italic; +} + +.wp-block-gallery.aligncenter { + display: flex; + margin: 0 -8px; +} + +/* Quote */ + +.wp-block-quote:not(.is-large):not(.is-style-large) { + border: 0; + padding: 0; +} + +.wp-block-quote.alignleft p:last-of-type, +.wp-block-quote.alignright p:last-of-type { + margin-bottom: 0; +} + +.wp-block-quote cite { + color: inherit; + font-size: inherit; +} + +/* Audio */ + +.wp-block-audio audio { + display: block; + width: 100%; +} + +/* Cover Image */ + +.wp-block-cover-image.alignright, +.wp-block-cover-image.alignleft, +.wp-block-cover-image.aligncenter { + display: flex; +} + +/* File */ + +.wp-block-file .wp-block-file__button { + background-color: #222; + -webkit-border-radius: 2px; + border-radius: 2px; + -webkit-box-shadow: none; + box-shadow: none; + color: #fff; + display: inline-block; + font-size: 14px; + font-size: 0.875rem; + font-weight: 800; + margin-top: 2em; + padding: 0.7em 2em; + -webkit-transition: background-color 0.2s ease-in-out; + transition: background-color 0.2s ease-in-out; + white-space: nowrap; +} + +.wp-block-file .wp-block-file__button:hover, +.wp-block-file .wp-block-file__button:focus { + background-color: #767676; + -webkit-box-shadow: none; + box-shadow: none; +} + +/*-------------------------------------------------------------- +3.0 Blocks - Formatting +--------------------------------------------------------------*/ + +/* Code */ + +.wp-block-code { + background: transparent; + border: 0; + padding: 0; +} + +/* Pullquote */ + +.wp-block-pullquote { + border: 0; +} + +.wp-block-pullquote__citation, +.wp-block-pullquote cite { + font-size: inherit; + text-transform: none; +} + +/* Table */ + +.wp-block-table thead th { + border-bottom: 2px solid #bbb; + padding-bottom: 0.5em; +} + +.wp-block-table tr { + border-bottom: 1px solid #eee; +} + +.wp-block-table th, +.wp-block-table td { + border: 0; +} + +.rtl .wp-block-table th, +.rtl .wp-block-table td { + text-align: right; +} + +/*-------------------------------------------------------------- +4.0 Blocks - Layout Elements +--------------------------------------------------------------*/ + +/* Buttons */ + +.wp-block-button .wp-block-button__link { + background-color: #222; + -webkit-border-radius: 2px; + border-radius: 2px; + -webkit-box-shadow: none; + box-shadow: none; + color: #fff; + display: inline-block; + font-size: 14px; + font-size: 0.875rem; + font-weight: 800; + line-height: 1.66; + margin-top: 2em; + padding: 0.7em 2em; + -webkit-transition: background-color 0.2s ease-in-out; + transition: background-color 0.2s ease-in-out; + white-space: nowrap; +} + +.wp-block-button .wp-block-button__link:hover, +.wp-block-button .wp-block-button__link:focus { + background-color: #767676; + -webkit-box-shadow: none; + box-shadow: none; +} + +/* Separator */ + +.wp-block-separator { + border: 0; +} + +.wp-block-separator:not(.is-style-wide):not(.is-style-dots) { + max-width: 100px; +} + +/*-------------------------------------------------------------- +5.0 Blocks - Widgets +--------------------------------------------------------------*/ + +/* Comments */ + +.wp-block-latest-comments article { + margin-bottom: 4em; +} + +.blog:not(.has-sidebar) #primary .wp-block-latest-comments article, +.archive:not(.page-one-column):not(.has-sidebar) #primary .wp-block-latest-comments article, +.search:not(.has-sidebar) #primary .wp-block-latest-comments article { + float: none; + width: 100%; +} + +.wp-block-latest-comments .avatar, +.wp-block-latest-comments__comment-avatar { + border-radius: 0; +} + +.wp-block-latest-comments a { + -webkit-box-shadow: inset 0 -1px 0 rgba(255, 255, 255, 1); + box-shadow: inset 0 -1px 0 rgba(255, 255, 255, 1); + +} + +.wp-block-latest-comments__comment-meta { + font-size: 16px; + font-size: 1rem; + margin-bottom: 0.4em; +} + +.wp-block-latest-comments__comment-author, +.wp-block-latest-comments__comment-link { + font-weight: 700; + text-decoration: none; +} + +.wp-block-latest-comments__comment-date { + color: #767676; + font-size: 10px; + font-size: 0.625rem; + font-weight: 800; + letter-spacing: 0.1818em; + margin-top: 0.4em; + text-transform: uppercase; +} + +.editor-block-list__block .wp-block-latest-comments__comment-excerpt p { + font-size: 14px; + font-size: 0.875rem; +} diff --git a/src/wp-content/themes/twentyseventeen/assets/css/editor-blocks.css b/src/wp-content/themes/twentyseventeen/assets/css/editor-blocks.css new file mode 100644 index 0000000000000..f9e3d66edda62 --- /dev/null +++ b/src/wp-content/themes/twentyseventeen/assets/css/editor-blocks.css @@ -0,0 +1,776 @@ +/* +Theme Name: Twenty Seventeen +Description: Used to style Gutenberg Blocks in the editor. +*/ + +/*-------------------------------------------------------------- +>>> TABLE OF CONTENTS: +---------------------------------------------------------------- +1.0 General Typography +2.0 General Block Settings +3.0 Blocks - Common Blocks +4.0 Blocks - Formatting +5.0 Blocks - Layout Elements +6.0 Blocks - Widgets + +--------------------------------------------------------------*/ + +/*-------------------------------------------------------------- +1.0 General Typography +--------------------------------------------------------------*/ + +.edit-post-visual-editor .editor-block-list__block, +.editor-default-block-appender input[type="text"].editor-default-block-appender__content { + font-size: 15px; + font-size: 0.9375rem; +} + +.edit-post-visual-editor .editor-block-list__block { + color: #333; +} + +.editor-post-title__block .editor-post-title__input { + color: #333; + font-family: "Libre Franklin", "Helvetica Neue", helvetica, arial, sans-serif; + font-size: 20px; + font-size: 1.25rem; + font-weight: 300; +} + +@media screen and (min-width: 30em) { + + .edit-post-visual-editor .editor-block-list__block { + font-size: 18px; + font-size: 1.125rem; + } + + .editor-post-title__block .editor-post-title__input { + font-size: 26px; + font-size: 1.625rem; + } + + .edit-post-visual-editor .editor-block-list__block h1 { + font-size: 30px; + font-size: 1.875rem; + } + + .edit-post-visual-editor .editor-block-list__block h2 { + font-size: 26px; + font-size: 1.625rem; + } + + .edit-post-visual-editor .editor-block-list__block h3 { + font-size: 22px; + font-size: 1.375rem; + } + + .edit-post-visual-editor .editor-block-list__block h4 { + font-size: 18px; + font-size: 1.125rem; + } + + .edit-post-visual-editor .editor-block-list__block h5 { + font-size: 13px; + font-size: 0.8125rem; + } + + .edit-post-visual-editor .editor-block-list__block h6 { + font-size: 16px; + font-size: 1rem; + } +} + +@media screen and (min-width: 48em) { + + .edit-post-visual-editor .editor-block-list__block { + font-size: 16px; + font-size: 1rem; + } + + .editor-rich-text__tinymce.mce-content-body { + line-height: 1.5; + } +} + +/* Typography for Arabic Font */ + +html[lang="ar"] .edit-post-visual-editor .editor-block-list__block, +html[lang="ary"] .edit-post-visual-editor .editor-block-list__block, +html[lang="azb"] .edit-post-visual-editor .editor-block-list__block, +html[lang="fa-IR"] .edit-post-visual-editor .editor-block-list__block, +html[lang="haz"] .edit-post-visual-editor .editor-block-list__block, +html[lang="ps"] .edit-post-visual-editor .editor-block-list__block, +html[lang="ur"] .edit-post-visual-editor .editor-block-list__block { + font-family: Tahoma, Arial, sans-serif; +} + +html[lang="ar"] .edit-post-visual-editor h1, +html[lang="ar"] .edit-post-visual-editor h2, +html[lang="ar"] .edit-post-visual-editor h3, +html[lang="ar"] .edit-post-visual-editor h4, +html[lang="ar"] .edit-post-visual-editor h5, +html[lang="ar"] .edit-post-visual-editor h6, +html[lang="ary"] .edit-post-visual-editor h1, +html[lang="ary"] .edit-post-visual-editor h2, +html[lang="ary"] .edit-post-visual-editor h3, +html[lang="ary"] .edit-post-visual-editor h4, +html[lang="ary"] .edit-post-visual-editor h5, +html[lang="ary"] .edit-post-visual-editor h6, +html[lang="azb"] .edit-post-visual-editor h1, +html[lang="azb"] .edit-post-visual-editor h2, +html[lang="azb"] .edit-post-visual-editor h3, +html[lang="azb"] .edit-post-visual-editor h4, +html[lang="azb"] .edit-post-visual-editor h5, +html[lang="azb"] .edit-post-visual-editor h6, +html[lang="fa-IR"] .edit-post-visual-editor h1, +html[lang="fa-IR"] .edit-post-visual-editor h2, +html[lang="fa-IR"] .edit-post-visual-editor h3, +html[lang="fa-IR"] .edit-post-visual-editor h4, +html[lang="fa-IR"] .edit-post-visual-editor h5, +html[lang="fa-IR"] .edit-post-visual-editor h6, +html[lang="haz"] .edit-post-visual-editor h1, +html[lang="haz"] .edit-post-visual-editor h2, +html[lang="haz"] .edit-post-visual-editor h3, +html[lang="haz"] .edit-post-visual-editor h4, +html[lang="haz"] .edit-post-visual-editor h5, +html[lang="haz"] .edit-post-visual-editor h6, +html[lang="ps"] .edit-post-visual-editor h1, +html[lang="ps"] .edit-post-visual-editor h2, +html[lang="ps"] .edit-post-visual-editor h3, +html[lang="ps"] .edit-post-visual-editor h4, +html[lang="ps"] .edit-post-visual-editor h5, +html[lang="ps"] .edit-post-visual-editor h6, +html[lang="ur"] .edit-post-visual-editor h1, +html[lang="ur"] .edit-post-visual-editor h2, +html[lang="ur"] .edit-post-visual-editor h3, +html[lang="ur"] .edit-post-visual-editor h4, +html[lang="ur"] .edit-post-visual-editor h5, +html[lang="ur"] .edit-post-visual-editor h6 { + font-weight: 700; +} + +/* Typography for Chinese Font */ + +html[lang^="zh-"] .edit-post-visual-editor .editor-block-list__block, +html[lang="zh-CN"] .edit-post-visual-editor .editor-block-list__block { + font-family: "PingFang TC", "Helvetica Neue", Helvetica, STHeitiTC-Light, Arial, sans-serif; +} + +html[lang^="zh-"] .edit-post-visual-editor h1, +html[lang^="zh-"] .edit-post-visual-editor h2, +html[lang^="zh-"] .edit-post-visual-editor h3, +html[lang^="zh-"] .edit-post-visual-editor h4, +html[lang^="zh-"] .edit-post-visual-editor h5, +html[lang^="zh-"] .edit-post-visual-editor h6 { + font-weight: 700; +} + +/* Typography for Cyrillic Font */ + +html[lang="bg-BG"] .edit-post-visual-editor .editor-block-list__block, +html[lang="ru-RU"] .edit-post-visual-editor .editor-block-list__block, +html[lang="uk"] .edit-post-visual-editor .editor-block-list__block { + font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, sans-serif; +} + +html[lang="bg-BG"] .edit-post-visual-editor h1, +html[lang="bg-BG"] .edit-post-visual-editor h2, +html[lang="bg-BG"] .edit-post-visual-editor h3, +html[lang="bg-BG"] .edit-post-visual-editor h4, +html[lang="bg-BG"] .edit-post-visual-editor h5, +html[lang="bg-BG"] .edit-post-visual-editor h6, +html[lang="ru-RU"] .edit-post-visual-editor h1, +html[lang="ru-RU"] .edit-post-visual-editor h2, +html[lang="ru-RU"] .edit-post-visual-editor h3, +html[lang="ru-RU"] .edit-post-visual-editor h4, +html[lang="ru-RU"] .edit-post-visual-editor h5, +html[lang="ru-RU"] .edit-post-visual-editor h6, +html[lang="uk"] .edit-post-visual-editor h1, +html[lang="uk"] .edit-post-visual-editor h2, +html[lang="uk"] .edit-post-visual-editor h3, +html[lang="uk"] .edit-post-visual-editor h4, +html[lang="uk"] .edit-post-visual-editor h5, +html[lang="uk"] .edit-post-visual-editor h6 { + font-weight: 700; + line-height: 1.2; +} + +/* Typography for Devanagari Font */ + +html[lang="bn-BD"] .edit-post-visual-editor .editor-block-list__block, +html[lang="hi-IN"] .edit-post-visual-editor .editor-block-list__block, +html[lang="mr-IN"] .edit-post-visual-editor .editor-block-list__block { + font-family: Arial, sans-serif; +} + +html[lang="bn-BD"] .edit-post-visual-editor h1, +html[lang="bn-BD"] .edit-post-visual-editor h2, +html[lang="bn-BD"] .edit-post-visual-editor h3, +html[lang="bn-BD"] .edit-post-visual-editor h4, +html[lang="bn-BD"] .edit-post-visual-editor h5, +html[lang="bn-BD"] .edit-post-visual-editor h6, +html[lang="hi-IN"] .edit-post-visual-editor h1, +html[lang="hi-IN"] .edit-post-visual-editor h2, +html[lang="hi-IN"] .edit-post-visual-editor h3, +html[lang="hi-IN"] .edit-post-visual-editor h4, +html[lang="hi-IN"] .edit-post-visual-editor h5, +html[lang="hi-IN"] .edit-post-visual-editor h6, +html[lang="mr-IN"] .edit-post-visual-editor h1, +html[lang="mr-IN"] .edit-post-visual-editor h2, +html[lang="mr-IN"] .edit-post-visual-editor h3, +html[lang="mr-IN"] .edit-post-visual-editor h4, +html[lang="mr-IN"] .edit-post-visual-editor h5, +html[lang="mr-IN"] .edit-post-visual-editor h6 { + font-weight: 700; +} + +/* Typography for Greek Font */ + +html[lang="el"] .edit-post-visual-editor .editor-block-list__block { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +} + +html[lang="el"] .edit-post-visual-editor h1, +html[lang="el"] .edit-post-visual-editor h2, +html[lang="el"] .edit-post-visual-editor h3, +html[lang="el"] .edit-post-visual-editor h4, +html[lang="el"] .edit-post-visual-editor h5, +html[lang="el"] .edit-post-visual-editor h6 { + font-weight: 700; + line-height: 1.3; +} + +/* Typography for Gujarati Font */ + +html[lang="gu-IN"] .edit-post-visual-editor .editor-block-list__block { + font-family: Arial, sans-serif; +} + +html[lang="gu-IN"] .edit-post-visual-editor h1, +html[lang="gu-IN"] .edit-post-visual-editor h2, +html[lang="gu-IN"] .edit-post-visual-editor h3, +html[lang="gu-IN"] .edit-post-visual-editor h4, +html[lang="gu-IN"] .edit-post-visual-editor h5, +html[lang="gu-IN"] .edit-post-visual-editor h6 { + font-weight: 700; +} + +/* Typography for Hebrew Font */ + +html[lang="he-IL"] .edit-post-visual-editor .editor-block-list__block { + font-family: "Arial Hebrew", Arial, sans-serif; +} + +html[lang="he-IL"] .edit-post-visual-editor h1, +html[lang="he-IL"] .edit-post-visual-editor h2, +html[lang="he-IL"] .edit-post-visual-editor h3, +html[lang="he-IL"] .edit-post-visual-editor h4, +html[lang="he-IL"] .edit-post-visual-editor h5, +html[lang="he-IL"] .edit-post-visual-editor h6 { + font-weight: 700; +} + +/* Typography for Japanese Font */ + +html[lang="ja"] .edit-post-visual-editor .editor-block-list__block { + font-family: "Hiragino Kaku Gothic Pro", Meiryo, sans-serif; +} + +html[lang="ja"] .edit-post-visual-editor h1, +html[lang="ja"] .edit-post-visual-editor h2, +html[lang="ja"] .edit-post-visual-editor h3, +html[lang="ja"] .edit-post-visual-editor h4, +html[lang="ja"] .edit-post-visual-editor h5, +html[lang="ja"] .edit-post-visual-editor h6 { + font-weight: 700; +} + +/* Typography for Korean font */ + +html[lang="ko-KR"] .edit-post-visual-editor .editor-block-list__block { + font-family: "Apple SD Gothic Neo", "Malgun Gothic", "Nanum Gothic", Dotum, sans-serif; +} + +html[lang="ko-KR"] .edit-post-visual-editor h1, +html[lang="ko-KR"] .edit-post-visual-editor h2, +html[lang="ko-KR"] .edit-post-visual-editor h3, +html[lang="ko-KR"] .edit-post-visual-editor h4, +html[lang="ko-KR"] .edit-post-visual-editor h5, +html[lang="ko-KR"] .edit-post-visual-editor h6 { + font-weight: 600; +} + +/* Typography for Thai Font */ + +html[lang="th"] .edit-post-visual-editor .editor-block-list__block { + line-height: 1.8; + font-family: "Sukhumvit Set", "Helvetica Neue", Helvetica, Arial, sans-serif; +} + +html[lang="th"] .edit-post-visual-editor h1, +html[lang="th"] .edit-post-visual-editor h2, +html[lang="th"] .edit-post-visual-editor h3, +html[lang="th"] .edit-post-visual-editor h4, +html[lang="th"] .edit-post-visual-editor h5, +html[lang="th"] .edit-post-visual-editor h6 { + line-height: 1.65; + font-family: "Sukhumvit Set", "Helvetica Neue", Helvetica, Arial, sans-serif; +} + +/* Remove letter-spacing for all non-latin alphabets */ + +html[lang="ar"] .edit-post-visual-editor *, +html[lang="ary"] .edit-post-visual-editor *, +html[lang="azb"] .edit-post-visual-editor *, +html[lang="haz"] .edit-post-visual-editor *, +html[lang="ps"] .edit-post-visual-editor *, +html[lang^="zh-"] .edit-post-visual-editor *, +html[lang="bg-BG"] .edit-post-visual-editor *, +html[lang="ru-RU"] .edit-post-visual-editor *, +html[lang="uk"] .edit-post-visual-editor *, +html[lang="bn-BD"] .edit-post-visual-editor *, +html[lang="hi-IN"] .edit-post-visual-editor *, +html[lang="mr-IN"] .edit-post-visual-editor *, +html[lang="el"] .edit-post-visual-editor *, +html[lang="gu-IN"] .edit-post-visual-editor *, +html[lang="he-IL"] .edit-post-visual-editor *, +html[lang="ja"] .edit-post-visual-editor *, +html[lang="ko-KR"] .edit-post-visual-editor *, +html[lang="th"] .edit-post-visual-editor * { + letter-spacing: 0 !important; +} + +/*-------------------------------------------------------------- +2.0 General Block Settings +--------------------------------------------------------------*/ + +/* Main column width */ + +body.gutenberg-editor-page .edit-post-visual-editor .editor-post-title__block, +body.gutenberg-editor-page .edit-post-visual-editor .editor-default-block-appender, +body.gutenberg-editor-page .edit-post-visual-editor .editor-block-list__block { + max-width: 740px; +} + +/* Background color */ + +.gutenberg-editor-page .editor-block-list__block { + background-color: transparent; +} + +/* Alignments */ + +.edit-post-visual-editor .alignleft { + margin-right: 1.5em; +} + +.edit-post-visual-editor .alignright { + margin-left: 1.5em; +} + +/* Link styles */ + +.edit-post-visual-editor a, +.editor-block-list__block a, +.wp-block-freeform.block-library-rich-text__tinymce a { + color: #222; +} + +/* List styles */ + +.edit-post-visual-editor ul:not(.wp-block-gallery), +.editor-block-list__block ul:not(.wp-block-gallery), +.block-library-list ul, +.edit-post-visual-editor ol, +.editor-block-list__block ol, +.block-library-list ol, +.block-library-list .editor-rich-text__tinymce { + margin: 0 0 1.5em 1.5em; + padding: 0; +} + +.edit-post-visual-editor ul:not(.wp-block-gallery), +.editor-block-list__block ul:not(.wp-block-gallery), +.block-library-list ul { + list-style: disc; +} + +.edit-post-visual-editor ol, +.editor-block-list__block ol, +.block-library-list ol { + list-style: decimal; +} + +.edit-post-visual-editor li > ul:not(.wp-block-gallery), +.editor-block-list__block li > ul:not(.wp-block-gallery), +.block-library-list li > ul:not(.wp-block-gallery), +.edit-post-visual-editor li > ol, +.editor-block-list__block li > ol, +.block-library-list li > ol { + margin-bottom: 0; + margin-left: 1.5em; +} + +.edit-post-visual-editor li, +.editor-block-list__block li, +.block-library-list li { + margin: 0; +} + +.rtl .edit-post-visual-editor ul:not(.wp-block-gallery), +.rtl .editor-block-list__block ul:not(.wp-block-gallery), +.rtl .block-library-list ul, +.rtl .edit-post-visual-editor ol, +.rtl .editor-block-list__block ol, +.rtl .block-library-list ol, +.rtl .block-library-list .editor-rich-text__tinymce, +.rtl .edit-post-visual-editor li > ul:not(.wp-block-gallery), +.rtl .editor-block-list__block li > ul:not(.wp-block-gallery), +.rtl .block-library-list li > ul:not(.wp-block-gallery), +.rtl .edit-post-visual-editor li > ol, +.rtl .editor-block-list__block li > ol, +.rtl .block-library-list li > ol { + margin-left: 1.5em; + margin-right: 1.5em; +} + +/* Quote styles */ + +.editor-block-list__block blockquote p { + font-size: 18px; + font-size: 1.125rem; +} + +.editor-block-list__block blockquote.alignright p, +.editor-block-list__block blockquote.alignleft p { + font-size: 13px; + font-size: 0.8125rem; +} + +.editor-block-list__block blockquote cite { + display: block; + font-style: normal; + font-weight: 600; + margin-top: 0.5em; +} + +/* Caption styles*/ + +[class^="wp-block-"]:not(.wp-block-gallery) figcaption { + font-style: italic; + margin-bottom: 1.5em; + text-align: left; +} + +.rtl [class^="wp-block-"]:not(.wp-block-gallery) figcaption { + text-align: right; +} + +/* Code styles */ + +.wp-block-freeform.block-library-rich-text__tinymce code { + background: transparent; +} + +/* Table styles */ + +.rtl .editor-block-list__block th { + text-align: right; +} + +/*-------------------------------------------------------------- +3.0 Blocks - Common Blocks +--------------------------------------------------------------*/ + +/* Paragraph */ + +.wp-block-paragraph.has-drop-cap:not(:focus)::first-letter { + font-size: 5em; + margin-top: 0.075em; +} + +/* Gallery */ + +.wp-block-gallery figcaption { + font-style: italic; +} + +/* Quote */ + +.wp-block-quote { + color: #666; + font-size: 18px; + font-size: 1.125rem; + font-style: italic; + line-height: 1.7; +} + +.wp-block-quote:not(.is-large):not(.is-style-large) { + border: 0; + padding: 0; +} + +.editor-block-list__block .wp-block-quote .wp-block-quote__citation { + color: inherit; + display: block; + font-size: inherit; + font-style: normal; + font-weight: 600; + margin-top: 0.5em; +} + +.wp-block-quote.alignleft, +.wp-block-quote.alignright { + color: #666; + width: 48%; +} + +.editor-block-list__block .wp-block-quote.alignleft p, +.editor-block-list__block .wp-block-quote.alignright p, +.editor-block-list__block .wp-block-quote.alignleft .wp-block-quote__citation, +.editor-block-list__block .wp-block-quote.alignright .wp-block-quote__citation { + font-size: 13px; + font-size: 0.8125rem; +} + +.editor-block-list__block .wp-block-quote.alignleft p:last-of-type, +.editor-block-list__block .wp-block-quote.alignright p:last-of-type { + margin-bottom: 0; +} + +.wp-block-quote.is-large .wp-block-quote__citation, +.wp-block-quote.is-style-large .wp-block-quote__citation { + text-align: right; +} + +.rtl .wp-block-quote.is-large .wp-block-quote__citation, +.rtl .wp-block-quote.is-style-large .wp-block-quote__citation { + text-align: left; +} + +@media screen and (min-width: 30em) { + .editor-block-list__block .wp-block-quote.alignleft p, + .editor-block-list__block .wp-block-quote.alignright p, + .editor-block-list__block .wp-block-quote.alignleft .wp-block-quote__citation, + .editor-block-list__block .wp-block-quote.alignright .wp-block-quote__citation, + .editor-block-list__block .wp-block-quote footer { + font-size: 14px; + font-size: 0.875rem; + } +} + +@media screen and (min-width: 48em) { + .editor-block-list__block .wp-block-quote.alignleft p, + .editor-block-list__block .wp-block-quote.alignright p, + .editor-block-list__block .wp-block-quote.alignleft .wp-block-quote__citation, + .editor-block-list__block .wp-block-quote.alignright .wp-block-quote__citation { + font-size: 13px; + font-size: 0.8125rem; + } + + .editor-block-list__block .wp-block-quote.alignleft { + margin-left: -17.5%; + width: 48%; + } + + .editor-block-list__block .wp-block-quote.alignright { + margin-right: -17.5%; + width: 48%; + } +} + +/* File */ + +.wp-block-file .wp-block-file__textlink { + -webkit-box-shadow: inset 0 0 0 rgba(0, 0, 0, 0), 0 1px 0 rgba(0, 0, 0, 1); + box-shadow: inset 0 0 0 rgba(0, 0, 0, 0), 0 1px 0 rgba(0, 0, 0, 1); +} + +.wp-block-file .wp-block-file__button { + background-color: #222; + -webkit-border-radius: 2px; + border-radius: 2px; + -webkit-box-shadow: none; + box-shadow: none; + color: #fff; + display: inline-block; + font-size: 14px; + font-size: 0.875rem; + font-weight: 800; + padding: 0.7em 2em; + -webkit-transition: background-color 0.2s ease-in-out; + transition: background-color 0.2s ease-in-out; + white-space: nowrap; +} + +/*-------------------------------------------------------------- +4.0 Blocks - Formatting +--------------------------------------------------------------*/ + +/* Code */ + +.wp-block-code { + border: 0; + padding: 0; +} + +/* Classic */ + +.wp-block-freeform.block-library-rich-text__tinymce li, +.wp-block-freeform.block-library-rich-text__tinymce p { + line-height: 1.5; +} + +.wp-block-freeform.block-library-rich-text__tinymce blockquote { + border: 0; + padding: 0; +} + +/* Pullquote */ + +.wp-block-pullquote { + border: 0; +} + +.wp-block-pullquote.alignleft blockquote > .editor-rich-text p, +.wp-block-pullquote.alignright blockquote > .editor-rich-text p { + font-size: 20px; +} + + +.wp-block-pullquote .wp-block-pullquote__citation { + font-size: inherit; + font-weight: 600; + text-transform: none; +} + +/* Table */ + +table.wp-block-table { + border-collapse: collapse; + margin: 0 0 1.5em; + width: 100%; +} + +table.wp-block-table thead th { + border: 0; + border-bottom: 2px solid #bbb; + padding-bottom: 0.5em; +} + +table.wp-block-table th { + padding: 0.4em; + text-align: left; +} + +table.wp-block-table tr { + border-bottom: 1px solid #eee; +} + +table.wp-block-table td { + border: 0; + padding: 0.4em; +} + +table.wp-block-table th:first-child, +table.wp-block-table td:first-child { + padding-left: 0; +} + +table.wp-block-table th:last-child, +table.wp-block-table td:last-child { + padding-right: 0; +} + +.wp-block-table__cell-content { + padding: 0; +} + +.rtl table.wp-block-table th, +.rtl table.wp-block-table td { + text-align: right; +} + +/*-------------------------------------------------------------- +5.0 Blocks - Layout Elements +--------------------------------------------------------------*/ + +/* Separators */ + +.edit-post-visual-editor .wp-block-separator { + border: 0; +} + +/* Buttons */ + +.wp-block-button .wp-block-button__link { + background-color: #222; + -webkit-border-radius: 2px; + border-radius: 2px; + -webkit-box-shadow: none; + box-shadow: none; + color: #fff; + display: inline-block; + font-size: 14px; + font-size: 0.875rem; + font-weight: 800; + line-height: 1.66; + margin-top: 2em; + padding: 0.7em 2em; + -webkit-transition: background-color 0.2s ease-in-out; + transition: background-color 0.2s ease-in-out; + white-space: nowrap; +} +/*-------------------------------------------------------------- +6.0 Blocks - Widgets +--------------------------------------------------------------*/ + +/* Latest Comments */ + +.editor-block-list__block ol.wp-block-latest-comments > li:before { + content: ''; +} + +.wp-block-latest-comments article { + margin-bottom: 4em; +} + +.wp-block-latest-comments .avatar, +.wp-block-latest-comments__comment-avatar { + border-radius: 0; +} + +.wp-block-latest-comments__comment-meta { + font-size: 16px; + font-size: 1rem; + margin-bottom: 0.4em; +} + +.editor-block-list__block .wp-block-latest-comments__comment-meta a { + -webkit-box-shadow: none; + box-shadow: none; + font-weight: 700; +} + +.wp-block-latest-comments__comment-date { + color: #767676; + font-size: 10px; + font-size: 0.625rem; + font-weight: 800; + letter-spacing: 0.1818em; + margin-top: 0.4em; + text-transform: uppercase; +} + +.editor-block-list__block .wp-block-latest-comments__comment-excerpt p { + font-size: 14px; + font-size: 0.875rem; +} + +/* Latest Posts */ + +.edit-post-visual-editor .wp-block-latest-posts.is-grid { + list-style: none; + margin-left: 0; + margin-right: 0; +} diff --git a/src/wp-content/themes/twentyseventeen/functions.php b/src/wp-content/themes/twentyseventeen/functions.php index 14e1a625daf1d..e4282e5fd353f 100644 --- a/src/wp-content/themes/twentyseventeen/functions.php +++ b/src/wp-content/themes/twentyseventeen/functions.php @@ -106,6 +106,12 @@ function twentyseventeen_setup() { */ add_editor_style( array( 'assets/css/editor-style.css', twentyseventeen_fonts_url() ) ); + // Load regular editor styles into the new block-based editor. + add_theme_support( 'editor-styles' ); + + // Load default block styles. + add_theme_support( 'wp-block-styles' ); + // Define and register starter content to showcase the theme on new sites. $starter_content = array( 'widgets' => array( @@ -415,6 +421,9 @@ function twentyseventeen_scripts() { // Theme stylesheet. wp_enqueue_style( 'twentyseventeen-style', get_stylesheet_uri() ); + // Theme block stylesheet. + wp_enqueue_style( 'twentyseventeen-block-style', get_theme_file_uri( '/assets/css/blocks.css' ), array( 'twentyseventeen-style' ), '1.0' ); + // Load the dark colorscheme. if ( 'dark' === get_theme_mod( 'colorscheme', 'light' ) || is_customize_preview() ) { wp_enqueue_style( 'twentyseventeen-colors-dark', get_theme_file_uri( '/assets/css/colors-dark.css' ), array( 'twentyseventeen-style' ), '1.0' ); @@ -459,6 +468,19 @@ function twentyseventeen_scripts() { } add_action( 'wp_enqueue_scripts', 'twentyseventeen_scripts' ); +/** + * Enqueue editor styles for Gutenberg + * + * @since Twenty Seventeen 1.8 + */ +function twentyseventeen_block_editor_styles() { + // Block styles. + wp_enqueue_style( 'twentyseventeen-block-editor-style', get_theme_file_uri( '/assets/css/editor-blocks.css' ) ); + // Add custom fonts. + wp_enqueue_style( 'twentyseventeen-fonts', twentyseventeen_fonts_url(), array(), null ); +} +add_action( 'enqueue_block_editor_assets', 'twentyseventeen_block_editor_styles' ); + /** * Add custom image sizes attribute to enhance responsive image functionality * for content images. From ff39bf3d68177df4b3a7f28daade33c8e78621db Mon Sep 17 00:00:00 2001 From: Gary Pendergast Date: Tue, 23 Oct 2018 05:34:43 +0000 Subject: [PATCH 506/537] Build: Update the `@wordpress/editor` package. The `@wordpress/editor` wasn't upgraded to the correct version in [43789]. This commit includes changes from the `@wordpress/block-library` upgrade in [43789], that weren't copied to the correct location in core. This also regenerates the `package-lock.json` in Linux, which the build server requires. See #45145. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43801 602fd350-edb4-49c9-b593-d223f7449a82 --- package-lock.json | 3188 +---------------- package.json | 2 +- src/wp-includes/blocks/categories.php | 13 +- src/wp-includes/blocks/latest-comments.php | 52 +- .../fixtures/core__categories.server.html | 2 +- 5 files changed, 98 insertions(+), 3159 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7b565f77cf638..2847b577c971a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -565,3124 +565,48 @@ } }, "@wordpress/editor": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@wordpress/editor/-/editor-4.0.3.tgz", - "integrity": "sha512-KjiBDN8Eg+UDTc4CsRvCia5IRkeWIOpeaX+fk7VNBj6l9JSKmfiRU38sRmYLfsuR4pHZWPN98e9tBZyo9tZELg==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/a11y": "file:node_modules/@wordpress/a11y", - "@wordpress/api-fetch": "file:node_modules/@wordpress/api-fetch", - "@wordpress/blob": "file:node_modules/@wordpress/blob", - "@wordpress/blocks": "file:node_modules/@wordpress/blocks", - "@wordpress/components": "file:node_modules/@wordpress/components", - "@wordpress/compose": "file:node_modules/@wordpress/compose", - "@wordpress/core-data": "file:node_modules/@wordpress/core-data", - "@wordpress/data": "file:node_modules/@wordpress/data", - "@wordpress/date": "file:node_modules/@wordpress/date", - "@wordpress/deprecated": "file:node_modules/@wordpress/deprecated", - "@wordpress/dom": "file:node_modules/@wordpress/dom", - "@wordpress/element": "file:node_modules/@wordpress/element", - "@wordpress/hooks": "file:node_modules/@wordpress/hooks", - "@wordpress/html-entities": "file:node_modules/@wordpress/html-entities", - "@wordpress/i18n": "file:node_modules/@wordpress/i18n", - "@wordpress/is-shallow-equal": "file:node_modules/@wordpress/is-shallow-equal", - "@wordpress/keycodes": "file:node_modules/@wordpress/keycodes", - "@wordpress/nux": "file:node_modules/@wordpress/nux", - "@wordpress/token-list": "file:node_modules/@wordpress/token-list", - "@wordpress/url": "file:node_modules/@wordpress/url", - "@wordpress/viewport": "file:node_modules/@wordpress/viewport", - "@wordpress/wordcount": "file:node_modules/@wordpress/wordcount", - "classnames": "^2.2.5", - "dom-scroll-into-view": "^1.2.1", - "inherits": "^2.0.3", - "jquery": "^3.3.1", - "lodash": "^4.17.10", - "memize": "^1.0.5", - "react-autosize-textarea": "^3.0.2", - "redux-multi": "^0.1.12", - "redux-optimist": "^1.0.0", - "refx": "^3.0.0", - "rememo": "^3.0.0", - "tinycolor2": "^1.4.1", - "tinymce": "^4.7.2", - "traverse": "^0.6.6", - "uuid": "^3.1.0" - }, - "dependencies": { - "@wordpress/a11y": { - "version": "file:node_modules/@wordpress/a11y", - "integrity": "sha512-YtO4GG5XQX/y+y9/9nnO7IZfyLfgSLXyRgvt9Om4LTUULF4VClol+x00zuQHcHUdQwINMnAkcG51ni9dkXbxgg==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/dom-ready": "^2.0.2" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.1.2", - "bundled": true, - "requires": { - "regenerator-runtime": "^0.12.0" - } - }, - "@wordpress/dom-ready": { - "version": "2.0.2", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "regenerator-runtime": { - "version": "0.12.1", - "bundled": true - } - } - }, - "@wordpress/api-fetch": { - "version": "file:node_modules/@wordpress/api-fetch", - "integrity": "sha512-Aa76Soaet8RGLDRuOBzbFyTVIBRDgytAO1EtEppvx444j3LHrgArQD5ViMmZTJB6NOY4wcLA6qmyCG3u+/Xxtg==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/hooks": "^2.0.2", - "@wordpress/i18n": "^3.0.1" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.1.2", - "bundled": true, - "requires": { - "regenerator-runtime": "^0.12.0" - } - }, - "@wordpress/hooks": { - "version": "2.0.2", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/i18n": { - "version": "3.0.1", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "gettext-parser": "^1.3.1", - "jed": "^1.1.1", - "lodash": "^4.17.10", - "memize": "^1.0.5" - } - }, - "encoding": { - "version": "0.1.12", - "bundled": true, - "requires": { - "iconv-lite": "~0.4.13" - } - }, - "gettext-parser": { - "version": "1.4.0", - "bundled": true, - "requires": { - "encoding": "^0.1.12", - "safe-buffer": "^5.1.1" - } - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "jed": { - "version": "1.1.1", - "bundled": true - }, - "lodash": { - "version": "4.17.11", - "bundled": true - }, - "memize": { - "version": "1.0.5", - "bundled": true - }, - "regenerator-runtime": { - "version": "0.12.1", - "bundled": true - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true - } - } - }, - "@wordpress/blob": { - "version": "file:node_modules/@wordpress/blob", - "integrity": "sha512-2PBjKivnxVSFLn+askRHyYK61zTarNrpi3S8slC12xeFPXTecT+HBdYJVtk32GBFrQmyH7ZdpDrROhCmjXyiOw==", - "requires": { - "@babel/runtime": "^7.0.0" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.1.2", - "bundled": true, - "requires": { - "regenerator-runtime": "^0.12.0" - } - }, - "regenerator-runtime": { - "version": "0.12.1", - "bundled": true - } - } - }, - "@wordpress/blocks": { - "version": "file:node_modules/@wordpress/blocks", - "integrity": "sha512-sJRb4k+duD/tfBY6GBT6sw3NOaJ7jErhavR9hDOkJonBusoc6KFKUFQdt+NBWkwQB+/7QJcshFuChg3FRK6bKw==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/autop": "^2.0.2", - "@wordpress/blob": "^2.1.0", - "@wordpress/block-serialization-default-parser": "^1.0.1", - "@wordpress/block-serialization-spec-parser": "^1.0.3", - "@wordpress/data": "^2.1.4", - "@wordpress/deprecated": "^2.0.2", - "@wordpress/dom": "^2.0.4", - "@wordpress/element": "^2.1.4", - "@wordpress/hooks": "^2.0.2", - "@wordpress/i18n": "^3.0.1", - "@wordpress/is-shallow-equal": "^1.1.4", - "@wordpress/shortcode": "^2.0.2", - "hpq": "^1.2.0", - "lodash": "^4.17.10", - "rememo": "^3.0.0", - "showdown": "^1.8.6", - "simple-html-tokenizer": "^0.4.1", - "tinycolor2": "^1.4.1", - "uuid": "^3.1.0" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.1.2", - "bundled": true, - "requires": { - "regenerator-runtime": "^0.12.0" - } - }, - "@wordpress/autop": { - "version": "2.0.2", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/blob": { - "version": "2.1.0", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/block-serialization-default-parser": { - "version": "1.0.1", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/block-serialization-spec-parser": { - "version": "1.0.3", - "bundled": true - }, - "@wordpress/compose": { - "version": "2.0.5", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/element": "^2.1.4", - "@wordpress/is-shallow-equal": "^1.1.4", - "lodash": "^4.17.10" - } - }, - "@wordpress/data": { - "version": "2.1.4", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/compose": "^2.0.5", - "@wordpress/deprecated": "^2.0.2", - "@wordpress/element": "^2.1.4", - "@wordpress/is-shallow-equal": "^1.1.4", - "@wordpress/redux-routine": "^3.0.3", - "equivalent-key-map": "^0.2.0", - "is-promise": "^2.1.0", - "lodash": "^4.17.10", - "redux": "^4.0.0" - } - }, - "@wordpress/deprecated": { - "version": "2.0.2", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/hooks": "^2.0.2" - } - }, - "@wordpress/dom": { - "version": "2.0.4", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "lodash": "^4.17.10" - } - }, - "@wordpress/element": { - "version": "2.1.4", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/escape-html": "^1.0.1", - "lodash": "^4.17.10", - "react": "^16.4.1", - "react-dom": "^16.4.1" - } - }, - "@wordpress/escape-html": { - "version": "1.0.1", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/hooks": { - "version": "2.0.2", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/i18n": { - "version": "3.0.1", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "gettext-parser": "^1.3.1", - "jed": "^1.1.1", - "lodash": "^4.17.10", - "memize": "^1.0.5" - } - }, - "@wordpress/is-shallow-equal": { - "version": "1.1.4", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/redux-routine": { - "version": "3.0.3", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "is-promise": "^2.1.0", - "rungen": "^0.3.2" - } - }, - "@wordpress/shortcode": { - "version": "2.0.2", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "lodash": "^4.17.10", - "memize": "^1.0.5" - } - }, - "ansi-regex": { - "version": "3.0.0", - "bundled": true - }, - "camelcase": { - "version": "4.1.0", - "bundled": true - }, - "cliui": { - "version": "4.1.0", - "bundled": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true - }, - "cross-spawn": { - "version": "5.1.0", - "bundled": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "decamelize": { - "version": "1.2.0", - "bundled": true - }, - "encoding": { - "version": "0.1.12", - "bundled": true, - "requires": { - "iconv-lite": "~0.4.13" - } - }, - "equivalent-key-map": { - "version": "0.2.2", - "bundled": true - }, - "execa": { - "version": "0.7.0", - "bundled": true, - "requires": { - "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" - } - }, - "find-up": { - "version": "2.1.0", - "bundled": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "get-caller-file": { - "version": "1.0.3", - "bundled": true - }, - "get-stream": { - "version": "3.0.0", - "bundled": true - }, - "gettext-parser": { - "version": "1.4.0", - "bundled": true, - "requires": { - "encoding": "^0.1.12", - "safe-buffer": "^5.1.1" - } - }, - "hpq": { - "version": "1.2.0", - "bundled": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "invert-kv": { - "version": "1.0.0", - "bundled": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "bundled": true - }, - "is-promise": { - "version": "2.1.0", - "bundled": true - }, - "is-stream": { - "version": "1.1.0", - "bundled": true - }, - "isexe": { - "version": "2.0.0", - "bundled": true - }, - "jed": { - "version": "1.1.1", - "bundled": true - }, - "js-tokens": { - "version": "4.0.0", - "bundled": true - }, - "lcid": { - "version": "1.0.0", - "bundled": true, - "requires": { - "invert-kv": "^1.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "bundled": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.11", - "bundled": true - }, - "loose-envify": { - "version": "1.4.0", - "bundled": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lru-cache": { - "version": "4.1.3", - "bundled": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "mem": { - "version": "1.1.0", - "bundled": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "memize": { - "version": "1.0.5", - "bundled": true - }, - "mimic-fn": { - "version": "1.2.0", - "bundled": true - }, - "npm-run-path": { - "version": "2.0.2", - "bundled": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true - }, - "os-locale": { - "version": "2.1.0", - "bundled": true, - "requires": { - "execa": "^0.7.0", - "lcid": "^1.0.0", - "mem": "^1.1.0" - } - }, - "p-finally": { - "version": "1.0.0", - "bundled": true - }, - "p-limit": { - "version": "1.3.0", - "bundled": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "bundled": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "bundled": true - }, - "path-exists": { - "version": "3.0.0", - "bundled": true - }, - "path-key": { - "version": "2.0.1", - "bundled": true - }, - "prop-types": { - "version": "15.6.2", - "bundled": true, - "requires": { - "loose-envify": "^1.3.1", - "object-assign": "^4.1.1" - } - }, - "pseudomap": { - "version": "1.0.2", - "bundled": true - }, - "react": { - "version": "16.5.2", - "bundled": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "schedule": "^0.5.0" - } - }, - "react-dom": { - "version": "16.5.2", - "bundled": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "schedule": "^0.5.0" - } - }, - "redux": { - "version": "4.0.1", - "bundled": true, - "requires": { - "loose-envify": "^1.4.0", - "symbol-observable": "^1.2.0" - } - }, - "regenerator-runtime": { - "version": "0.12.1", - "bundled": true - }, - "rememo": { - "version": "3.0.0", - "bundled": true - }, - "require-directory": { - "version": "2.1.1", - "bundled": true - }, - "require-main-filename": { - "version": "1.0.1", - "bundled": true - }, - "rungen": { - "version": "0.3.2", - "bundled": true - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true - }, - "schedule": { - "version": "0.5.0", - "bundled": true, - "requires": { - "object-assign": "^4.1.1" - } - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true - }, - "shebang-command": { - "version": "1.2.0", - "bundled": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "bundled": true - }, - "showdown": { - "version": "1.8.7", - "bundled": true, - "requires": { - "yargs": "^10.0.3" - } - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true - }, - "simple-html-tokenizer": { - "version": "0.4.3", - "bundled": true - }, - "string-width": { - "version": "2.1.1", - "bundled": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "bundled": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "strip-eof": { - "version": "1.0.0", - "bundled": true - }, - "symbol-observable": { - "version": "1.2.0", - "bundled": true - }, - "tinycolor2": { - "version": "1.4.1", - "bundled": true - }, - "uuid": { - "version": "3.3.2", - "bundled": true - }, - "which": { - "version": "1.3.1", - "bundled": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "bundled": true - }, - "wrap-ansi": { - "version": "2.1.0", - "bundled": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "y18n": { - "version": "3.2.1", - "bundled": true - }, - "yallist": { - "version": "2.1.2", - "bundled": true - }, - "yargs": { - "version": "10.1.2", - "bundled": true, - "requires": { - "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": "^8.1.0" - } - }, - "yargs-parser": { - "version": "8.1.0", - "bundled": true, - "requires": { - "camelcase": "^4.1.0" - } - } - } - }, - "@wordpress/components": { - "version": "file:node_modules/@wordpress/components", - "integrity": "sha512-RFH54uX2lci5uHpDCLGeTOHWJjM2dzb1ekhUpCDiDaAJatMLDtibXWbFH97SXqB5UVZxXu540SMwqNoxVikATw==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/a11y": "^2.0.2", - "@wordpress/api-fetch": "^2.1.0", - "@wordpress/deprecated": "^2.0.2", - "@wordpress/dom": "^2.0.4", - "@wordpress/element": "^2.1.4", - "@wordpress/hooks": "^2.0.2", - "@wordpress/i18n": "^3.0.1", - "@wordpress/is-shallow-equal": "^1.1.4", - "@wordpress/keycodes": "^2.0.2", - "classnames": "^2.2.5", - "diff": "^3.5.0", - "dom-scroll-into-view": "^1.2.1", - "lodash": "^4.17.10", - "memize": "^1.0.5", - "moment": "^2.22.1", - "mousetrap": "^1.6.2", - "re-resizable": "^4.7.1", - "react-click-outside": "^2.3.1", - "rememo": "^3.0.0", - "tinycolor2": "^1.4.1", - "uuid": "^3.1.0" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.1.2", - "bundled": true, - "requires": { - "regenerator-runtime": "^0.12.0" - } - }, - "@wordpress/a11y": { - "version": "2.0.2", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/dom-ready": "^2.0.2" - } - }, - "@wordpress/api-fetch": { - "version": "2.1.0", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/hooks": "^2.0.2", - "@wordpress/i18n": "^3.0.1", - "@wordpress/url": "^2.1.0" - }, - "dependencies": { - "@wordpress/url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@wordpress/url/-/url-2.1.0.tgz", - "integrity": "sha512-MPWFszPleQ+ofDE8ZMpVLOwK/yAjf6L9f7F9wxE82rQjRzUSkrs+Z7Q9ShYiD5HT7o4J96PY9S0XnoHW/XKnDg==", - "requires": { - "@babel/runtime": "^7.0.0", - "qs": "^6.5.2" - } - } - } - }, - "@wordpress/compose": { - "version": "2.0.2", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/element": "^2.1.1", - "@wordpress/is-shallow-equal": "^1.1.4", - "lodash": "^4.17.10" - } - }, - "@wordpress/deprecated": { - "version": "2.0.2", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/hooks": "^2.0.2" - } - }, - "@wordpress/dom": { - "version": "2.0.4", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "lodash": "^4.17.10" - } - }, - "@wordpress/dom-ready": { - "version": "2.0.2", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/element": { - "version": "2.1.4", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/escape-html": "^1.0.1", - "lodash": "^4.17.10", - "react": "^16.4.1", - "react-dom": "^16.4.1" - } - }, - "@wordpress/escape-html": { - "version": "1.0.1", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/hooks": { - "version": "2.0.2", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/i18n": { - "version": "3.0.1", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "gettext-parser": "^1.3.1", - "jed": "^1.1.1", - "lodash": "^4.17.10", - "memize": "^1.0.5" - } - }, - "@wordpress/is-shallow-equal": { - "version": "1.1.4", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/keycodes": { - "version": "2.0.2", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "lodash": "^4.17.10" - } - }, - "@wordpress/url": { - "version": "2.0.2", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "qs": "^6.5.2" - } - }, - "asap": { - "version": "2.0.6", - "bundled": true - }, - "babel-runtime": { - "version": "6.26.0", - "bundled": true, - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" - } - } - }, - "classnames": { - "version": "2.2.6", - "bundled": true - }, - "clipboard": { - "version": "1.7.1", - "bundled": true, - "requires": { - "good-listener": "^1.2.2", - "select": "^1.1.2", - "tiny-emitter": "^2.0.0" - } - }, - "core-js": { - "version": "2.5.7", - "bundled": true - }, - "create-react-context": { - "version": "0.2.3", - "bundled": true, - "requires": { - "fbjs": "^0.8.0", - "gud": "^1.0.0" - } - }, - "delegate": { - "version": "3.2.0", - "bundled": true - }, - "diff": { - "version": "3.5.0", - "bundled": true - }, - "dom-scroll-into-view": { - "version": "1.2.1", - "bundled": true - }, - "encoding": { - "version": "0.1.12", - "bundled": true, - "requires": { - "iconv-lite": "~0.4.13" - } - }, - "fbjs": { - "version": "0.8.17", - "bundled": true, - "requires": { - "core-js": "^1.0.0", - "isomorphic-fetch": "^2.1.1", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" - }, - "dependencies": { - "core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" - } - } - }, - "gettext-parser": { - "version": "1.4.0", - "bundled": true, - "requires": { - "encoding": "^0.1.12", - "safe-buffer": "^5.1.1" - } - }, - "good-listener": { - "version": "1.2.2", - "bundled": true, - "requires": { - "delegate": "^3.1.2" - } - }, - "gud": { - "version": "1.0.0", - "bundled": true - }, - "hoist-non-react-statics": { - "version": "1.2.0", - "bundled": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "is-stream": { - "version": "1.1.0", - "bundled": true - }, - "isomorphic-fetch": { - "version": "2.2.1", - "bundled": true, - "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - } - }, - "jed": { - "version": "1.1.1", - "bundled": true - }, - "js-tokens": { - "version": "4.0.0", - "bundled": true - }, - "lodash": { - "version": "4.17.11", - "bundled": true - }, - "loose-envify": { - "version": "1.4.0", - "bundled": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "material-colors": { - "version": "1.2.6", - "bundled": true - }, - "memize": { - "version": "1.0.5", - "bundled": true - }, - "moment": { - "version": "2.22.2", - "bundled": true - }, - "mousetrap": { - "version": "1.6.2", - "bundled": true - }, - "node-fetch": { - "version": "1.7.3", - "bundled": true, - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, - "object-assign": { - "version": "4.1.1", - "bundled": true - }, - "popper.js": { - "version": "1.14.4", - "bundled": true - }, - "promise": { - "version": "7.3.1", - "bundled": true, - "requires": { - "asap": "~2.0.3" - } - }, - "prop-types": { - "version": "15.6.2", - "bundled": true, - "requires": { - "loose-envify": "^1.3.1", - "object-assign": "^4.1.1" - } - }, - "qs": { - "version": "6.5.2", - "bundled": true - }, - "re-resizable": { - "version": "4.9.1", - "bundled": true - }, - "react": { - "version": "16.5.2", - "bundled": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "schedule": "^0.5.0" - } - }, - "react-click-outside": { - "version": "2.3.1", - "bundled": true, - "requires": { - "hoist-non-react-statics": "^1.2.0" - } - }, - "react-color": { - "version": "2.14.1", - "bundled": true, - "requires": { - "lodash": "^4.0.1", - "material-colors": "^1.2.1", - "prop-types": "^15.5.10", - "reactcss": "^1.2.0", - "tinycolor2": "^1.4.1" - } - }, - "react-datepicker": { - "version": "1.7.0", - "bundled": true, - "requires": { - "classnames": "^2.2.5", - "prop-types": "^15.6.0", - "react-onclickoutside": "^6.7.1", - "react-popper": "^1.0.2" - } - }, - "react-dom": { - "version": "16.5.2", - "bundled": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "schedule": "^0.5.0" - } - }, - "react-onclickoutside": { - "version": "6.7.1", - "bundled": true - }, - "react-popper": { - "version": "1.0.2", - "bundled": true, - "requires": { - "babel-runtime": "6.x.x", - "create-react-context": "^0.2.1", - "popper.js": "^1.14.1", - "prop-types": "^15.6.1", - "typed-styles": "^0.0.5", - "warning": "^3.0.0" - } - }, - "reactcss": { - "version": "1.2.3", - "bundled": true, - "requires": { - "lodash": "^4.0.1" - } - }, - "regenerator-runtime": { - "version": "0.12.1", - "bundled": true - }, - "rememo": { - "version": "3.0.0", - "bundled": true - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true - }, - "schedule": { - "version": "0.5.0", - "bundled": true, - "requires": { - "object-assign": "^4.1.1" - } - }, - "select": { - "version": "1.1.2", - "bundled": true - }, - "setimmediate": { - "version": "1.0.5", - "bundled": true - }, - "tiny-emitter": { - "version": "2.0.2", - "bundled": true - }, - "tinycolor2": { - "version": "1.4.1", - "bundled": true - }, - "typed-styles": { - "version": "0.0.5", - "bundled": true - }, - "ua-parser-js": { - "version": "0.7.18", - "bundled": true - }, - "uuid": { - "version": "3.3.2", - "bundled": true - }, - "warning": { - "version": "3.0.0", - "bundled": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, - "whatwg-fetch": { - "version": "3.0.0", - "bundled": true - } - } - }, - "@wordpress/compose": { - "version": "file:node_modules/@wordpress/compose", - "integrity": "sha512-bbf+4nph+/rFBou7PTUyx8rwHVR08ymBgxnmShGTTjuiVxcrz0Gu7Wu2wxulsZobOYaiqvQkCEHKceNsBxJwiA==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/element": "^2.1.4", - "@wordpress/is-shallow-equal": "^1.1.4", - "lodash": "^4.17.10" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.1.2", - "bundled": true, - "requires": { - "regenerator-runtime": "^0.12.0" - } - }, - "@wordpress/element": { - "version": "2.1.4", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/escape-html": "^1.0.1", - "lodash": "^4.17.10", - "react": "^16.4.1", - "react-dom": "^16.4.1" - } - }, - "@wordpress/escape-html": { - "version": "1.0.1", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/is-shallow-equal": { - "version": "1.1.4", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "js-tokens": { - "version": "4.0.0", - "bundled": true - }, - "lodash": { - "version": "4.17.11", - "bundled": true - }, - "loose-envify": { - "version": "1.4.0", - "bundled": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "object-assign": { - "version": "4.1.1", - "bundled": true - }, - "prop-types": { - "version": "15.6.2", - "bundled": true, - "requires": { - "loose-envify": "^1.3.1", - "object-assign": "^4.1.1" - } - }, - "react": { - "version": "16.5.2", - "bundled": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "schedule": "^0.5.0" - } - }, - "react-dom": { - "version": "16.5.2", - "bundled": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "schedule": "^0.5.0" - } - }, - "regenerator-runtime": { - "version": "0.12.1", - "bundled": true - }, - "schedule": { - "version": "0.5.0", - "bundled": true, - "requires": { - "object-assign": "^4.1.1" - } - } - } - }, - "@wordpress/core-data": { - "version": "file:node_modules/@wordpress/core-data", - "integrity": "sha512-7JzU9f+bCAg1oT0IYu7QPO+C5tP8rGN3BodZmbqJOut8DGiMSzDYdfVwwltKzKJmTBeuitYuSK48sXBLSoJb7Q==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/api-fetch": "^2.1.0", - "@wordpress/data": "^2.1.4", - "equivalent-key-map": "^0.2.1", - "lodash": "^4.17.10", - "rememo": "^3.0.0" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.1.2", - "bundled": true, - "requires": { - "regenerator-runtime": "^0.12.0" - } - }, - "@wordpress/api-fetch": { - "version": "2.1.0", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/hooks": "^2.0.2", - "@wordpress/i18n": "^3.0.1", - "@wordpress/url": "^2.1.0" - }, - "dependencies": { - "@wordpress/url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@wordpress/url/-/url-2.1.0.tgz", - "integrity": "sha512-MPWFszPleQ+ofDE8ZMpVLOwK/yAjf6L9f7F9wxE82rQjRzUSkrs+Z7Q9ShYiD5HT7o4J96PY9S0XnoHW/XKnDg==", - "requires": { - "@babel/runtime": "^7.0.0", - "qs": "^6.5.2" - } - } - } - }, - "@wordpress/compose": { - "version": "2.0.5", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/element": "^2.1.4", - "@wordpress/is-shallow-equal": "^1.1.4", - "lodash": "^4.17.10" - } - }, - "@wordpress/data": { - "version": "2.1.4", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/compose": "^2.0.5", - "@wordpress/deprecated": "^2.0.2", - "@wordpress/element": "^2.1.4", - "@wordpress/is-shallow-equal": "^1.1.4", - "@wordpress/redux-routine": "^3.0.3", - "equivalent-key-map": "^0.2.0", - "is-promise": "^2.1.0", - "lodash": "^4.17.10", - "redux": "^4.0.0" - } - }, - "@wordpress/deprecated": { - "version": "2.0.2", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/hooks": "^2.0.2" - } - }, - "@wordpress/element": { - "version": "2.1.4", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/escape-html": "^1.0.1", - "lodash": "^4.17.10", - "react": "^16.4.1", - "react-dom": "^16.4.1" - } - }, - "@wordpress/escape-html": { - "version": "1.0.1", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/hooks": { - "version": "2.0.2", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/i18n": { - "version": "3.0.1", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "gettext-parser": "^1.3.1", - "jed": "^1.1.1", - "lodash": "^4.17.10", - "memize": "^1.0.5" - } - }, - "@wordpress/is-shallow-equal": { - "version": "1.1.4", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/redux-routine": { - "version": "3.0.3", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "is-promise": "^2.1.0", - "rungen": "^0.3.2" - } - }, - "@wordpress/url": { - "version": "2.0.2", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "qs": "^6.5.2" - } - }, - "encoding": { - "version": "0.1.12", - "bundled": true, - "requires": { - "iconv-lite": "~0.4.13" - } - }, - "equivalent-key-map": { - "version": "0.2.2", - "bundled": true - }, - "gettext-parser": { - "version": "1.4.0", - "bundled": true, - "requires": { - "encoding": "^0.1.12", - "safe-buffer": "^5.1.1" - } - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "is-promise": { - "version": "2.1.0", - "bundled": true - }, - "jed": { - "version": "1.1.1", - "bundled": true - }, - "js-tokens": { - "version": "4.0.0", - "bundled": true - }, - "lodash": { - "version": "4.17.11", - "bundled": true - }, - "loose-envify": { - "version": "1.4.0", - "bundled": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "memize": { - "version": "1.0.5", - "bundled": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true - }, - "prop-types": { - "version": "15.6.2", - "bundled": true, - "requires": { - "loose-envify": "^1.3.1", - "object-assign": "^4.1.1" - } - }, - "qs": { - "version": "6.5.2", - "bundled": true - }, - "react": { - "version": "16.5.2", - "bundled": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "schedule": "^0.5.0" - } - }, - "react-dom": { - "version": "16.5.2", - "bundled": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "schedule": "^0.5.0" - } - }, - "redux": { - "version": "4.0.1", - "bundled": true, - "requires": { - "loose-envify": "^1.4.0", - "symbol-observable": "^1.2.0" - } - }, - "regenerator-runtime": { - "version": "0.12.1", - "bundled": true - }, - "rememo": { - "version": "3.0.0", - "bundled": true - }, - "rungen": { - "version": "0.3.2", - "bundled": true - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true - }, - "schedule": { - "version": "0.5.0", - "bundled": true, - "requires": { - "object-assign": "^4.1.1" - } - }, - "symbol-observable": { - "version": "1.2.0", - "bundled": true - } - } - }, - "@wordpress/data": { - "version": "file:node_modules/@wordpress/data", - "integrity": "sha512-Emfhszi7huasdDhngwk9HvRLUiotCNo9mDDk2Q9VGpGb9SfpQp+84PvenhreiZtezUR+7nUnSQuAJ2d8rUP37Q==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/deprecated": "^2.0.2", - "@wordpress/element": "^2.1.4", - "@wordpress/is-shallow-equal": "^1.1.4", - "@wordpress/redux-routine": "^3.0.3", - "equivalent-key-map": "^0.2.0", - "is-promise": "^2.1.0", - "lodash": "^4.17.10", - "redux": "^4.0.0" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.1.2", - "bundled": true, - "requires": { - "regenerator-runtime": "^0.12.0" - } - }, - "@wordpress/compose": { - "version": "2.0.2", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/element": "^2.1.1", - "@wordpress/is-shallow-equal": "^1.1.4", - "lodash": "^4.17.10" - } - }, - "@wordpress/deprecated": { - "version": "2.0.2", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/hooks": "^2.0.2" - } - }, - "@wordpress/element": { - "version": "2.1.4", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/escape-html": "^1.0.1", - "lodash": "^4.17.10", - "react": "^16.4.1", - "react-dom": "^16.4.1" - } - }, - "@wordpress/escape-html": { - "version": "1.0.1", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/hooks": { - "version": "2.0.2", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/is-shallow-equal": { - "version": "1.1.4", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/redux-routine": { - "version": "3.0.3", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "is-promise": "^2.1.0", - "rungen": "^0.3.2" - } - }, - "equivalent-key-map": { - "version": "0.2.2", - "bundled": true - }, - "is-promise": { - "version": "2.1.0", - "bundled": true - }, - "js-tokens": { - "version": "4.0.0", - "bundled": true - }, - "lodash": { - "version": "4.17.11", - "bundled": true - }, - "loose-envify": { - "version": "1.4.0", - "bundled": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "object-assign": { - "version": "4.1.1", - "bundled": true - }, - "prop-types": { - "version": "15.6.2", - "bundled": true, - "requires": { - "loose-envify": "^1.3.1", - "object-assign": "^4.1.1" - } - }, - "react": { - "version": "16.5.2", - "bundled": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "schedule": "^0.5.0" - } - }, - "react-dom": { - "version": "16.5.2", - "bundled": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "schedule": "^0.5.0" - } - }, - "redux": { - "version": "4.0.1", - "bundled": true, - "requires": { - "loose-envify": "^1.4.0", - "symbol-observable": "^1.2.0" - } - }, - "regenerator-runtime": { - "version": "0.12.1", - "bundled": true - }, - "rungen": { - "version": "0.3.2", - "bundled": true - }, - "schedule": { - "version": "0.5.0", - "bundled": true, - "requires": { - "object-assign": "^4.1.1" - } - }, - "symbol-observable": { - "version": "1.2.0", - "bundled": true - } - } - }, - "@wordpress/date": { - "version": "file:node_modules/@wordpress/date", - "integrity": "sha512-ZnIEZT3sp+H2dr4apdoZnM9MhN6FpnMZ2zB+h8KuKExJufu9EUyW4grhEvgCTloJbzXNKCN5eolqeYq9I0pWog==", - "requires": { - "@babel/runtime": "^7.0.0", - "moment": "^2.22.1", - "moment-timezone": "^0.5.16" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.1.2", - "bundled": true, - "requires": { - "regenerator-runtime": "^0.12.0" - } - }, - "moment": { - "version": "2.22.2", - "bundled": true - }, - "moment-timezone": { - "version": "0.5.21", - "bundled": true, - "requires": { - "moment": ">= 2.9.0" - } - }, - "regenerator-runtime": { - "version": "0.12.1", - "bundled": true - } - } - }, - "@wordpress/deprecated": { - "version": "file:node_modules/@wordpress/deprecated", - "integrity": "sha512-5qNehHD7/duvouuGjMdGREQORs9LFMVkyFysfWvafZ919zAl0DAKEXsBoxcMSvvqBqCf5MKJBnQBVY4DeS6AEg==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/hooks": "^2.0.2" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.1.2", - "bundled": true, - "requires": { - "regenerator-runtime": "^0.12.0" - } - }, - "@wordpress/hooks": { - "version": "2.0.2", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "regenerator-runtime": { - "version": "0.12.1", - "bundled": true - } - } - }, - "@wordpress/dom": { - "version": "file:node_modules/@wordpress/dom", - "integrity": "sha512-uW/yeWayoSu6uUA+xrM+yCbNJc3oQfga1Y1PUgXvowv0ydn5Qhgh2Dj07ANgg1AncZqFZsObPerBFNloaJhsvQ==", - "requires": { - "@babel/runtime": "^7.0.0", - "lodash": "^4.17.10" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.1.2", - "bundled": true, - "requires": { - "regenerator-runtime": "^0.12.0" - } - }, - "lodash": { - "version": "4.17.11", - "bundled": true - }, - "regenerator-runtime": { - "version": "0.12.1", - "bundled": true - } - } - }, - "@wordpress/element": { - "version": "file:node_modules/@wordpress/element", - "integrity": "sha512-y/RpvYNd2VeLWXemxEXdMOnUa+HUC0sde2o7gEHKud0LB14xFU1ASif/pz/LP+vSvExcvhj8cu4Sq8tKDzRRPw==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/escape-html": "^1.0.1", - "lodash": "^4.17.10", - "react": "^16.4.1", - "react-dom": "^16.4.1" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.1.2", - "bundled": true, - "requires": { - "regenerator-runtime": "^0.12.0" - } - }, - "@wordpress/escape-html": { - "version": "1.0.1", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "js-tokens": { - "version": "4.0.0", - "bundled": true - }, - "lodash": { - "version": "4.17.11", - "bundled": true - }, - "loose-envify": { - "version": "1.4.0", - "bundled": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "object-assign": { - "version": "4.1.1", - "bundled": true - }, - "prop-types": { - "version": "15.6.2", - "bundled": true, - "requires": { - "loose-envify": "^1.3.1", - "object-assign": "^4.1.1" - } - }, - "react": { - "version": "16.5.2", - "bundled": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "schedule": "^0.5.0" - } - }, - "react-dom": { - "version": "16.5.2", - "bundled": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "schedule": "^0.5.0" - } - }, - "regenerator-runtime": { - "version": "0.12.1", - "bundled": true - }, - "schedule": { - "version": "0.5.0", - "bundled": true, - "requires": { - "object-assign": "^4.1.1" - } - } - } - }, - "@wordpress/hooks": { - "version": "file:node_modules/@wordpress/hooks", - "integrity": "sha512-yWdkjw6YP2kDF+cjjRfkI2cjTRiETaRFMwJpoqnQWxfay1oBtgvaGuRrYrm0rCxxOqCD/4/di2co5VHQxP9Rhw==", - "requires": { - "@babel/runtime": "^7.0.0" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.1.2", - "bundled": true, - "requires": { - "regenerator-runtime": "^0.12.0" - } - }, - "regenerator-runtime": { - "version": "0.12.1", - "bundled": true - } - } - }, - "@wordpress/html-entities": { - "version": "file:node_modules/@wordpress/html-entities", - "integrity": "sha512-cxG7YjH9EMfZyeLJAd/Vc1nFJxitMSzybv71iMPP3Dqqgz3jixX6oSe4ukTqfoOKBaF7pY7LzS6eTKu7KAmyZw==", - "requires": { - "@babel/runtime": "^7.0.0" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.1.2", - "bundled": true, - "requires": { - "regenerator-runtime": "^0.12.0" - } - }, - "regenerator-runtime": { - "version": "0.12.1", - "bundled": true - } - } - }, - "@wordpress/i18n": { - "version": "file:node_modules/@wordpress/i18n", - "integrity": "sha512-Ut6ihDjcZ7zpU44/WurZrFxrLcMl3Gq+hW8Hb6MTF6+X6Y2fd7QFu3lMvopYNwF8gxWtjvH5n3NIQ6B9DLt7Ng==", - "requires": { - "@babel/runtime": "^7.0.0", - "gettext-parser": "^1.3.1", - "jed": "^1.1.1", - "lodash": "^4.17.10", - "memize": "^1.0.5" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.1.2", - "bundled": true, - "requires": { - "regenerator-runtime": "^0.12.0" - } - }, - "encoding": { - "version": "0.1.12", - "bundled": true, - "requires": { - "iconv-lite": "~0.4.13" - } - }, - "gettext-parser": { - "version": "1.4.0", - "bundled": true, - "requires": { - "encoding": "^0.1.12", - "safe-buffer": "^5.1.1" - } - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "jed": { - "version": "1.1.1", - "bundled": true - }, - "lodash": { - "version": "4.17.11", - "bundled": true - }, - "memize": { - "version": "1.0.5", - "bundled": true - }, - "regenerator-runtime": { - "version": "0.12.1", - "bundled": true - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true - } - } - }, - "@wordpress/is-shallow-equal": { - "version": "file:node_modules/@wordpress/is-shallow-equal", - "integrity": "sha512-ihJrYrW+G9GWtQjyB44DVKMCoiTTYPl5T/g1Ix9PMrKl2rk5uVbJw9yMmhik/jTIQqubpzhxGtrqsddwuUH1sw==", - "requires": { - "@babel/runtime": "^7.0.0" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.1.2", - "bundled": true, - "requires": { - "regenerator-runtime": "^0.12.0" - } - }, - "regenerator-runtime": { - "version": "0.12.1", - "bundled": true - } - } - }, - "@wordpress/keycodes": { - "version": "file:node_modules/@wordpress/keycodes", - "integrity": "sha512-miMB6uvKZzZmgTb7qSr0NBOadWJ9Eb5Tak/+DRsVrgt9RP4zeCh9Le2T7hOWvNPU/54x2v1eHRrU0L+JDm2JAA==", - "requires": { - "@babel/runtime": "^7.0.0", - "lodash": "^4.17.10" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.1.2", - "bundled": true, - "requires": { - "regenerator-runtime": "^0.12.0" - } - }, - "lodash": { - "version": "4.17.11", - "bundled": true - }, - "regenerator-runtime": { - "version": "0.12.1", - "bundled": true - } - } - }, - "@wordpress/nux": { - "version": "file:node_modules/@wordpress/nux", - "integrity": "sha512-22nYvccK0NPGZBegR55BTxbClXO8nSfHut+SSA1/CTPqX3yd//KPeAmGfgNCYH/lMz7RSRcj83oFEGpwrWWISQ==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/components": "^4.2.1", - "@wordpress/compose": "^2.0.5", - "@wordpress/data": "^2.1.4", - "@wordpress/element": "^2.1.4", - "@wordpress/i18n": "^3.0.1", - "lodash": "^4.17.10", - "rememo": "^3.0.0" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.1.2", - "bundled": true, - "requires": { - "regenerator-runtime": "^0.12.0" - } - }, - "@wordpress/a11y": { - "version": "2.0.2", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/dom-ready": "^2.0.2" - } - }, - "@wordpress/api-fetch": { - "version": "2.1.0", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/hooks": "^2.0.2", - "@wordpress/i18n": "^3.0.1", - "@wordpress/url": "^2.1.0" - } - }, - "@wordpress/components": { - "version": "4.2.1", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/a11y": "^2.0.2", - "@wordpress/api-fetch": "^2.1.0", - "@wordpress/compose": "^2.0.5", - "@wordpress/deprecated": "^2.0.2", - "@wordpress/dom": "^2.0.4", - "@wordpress/element": "^2.1.4", - "@wordpress/hooks": "^2.0.2", - "@wordpress/i18n": "^3.0.1", - "@wordpress/is-shallow-equal": "^1.1.4", - "@wordpress/keycodes": "^2.0.2", - "@wordpress/url": "^2.1.0", - "classnames": "^2.2.5", - "clipboard": "^2.0.1", - "diff": "^3.5.0", - "dom-scroll-into-view": "^1.2.1", - "lodash": "^4.17.10", - "memize": "^1.0.5", - "moment": "^2.22.1", - "mousetrap": "^1.6.2", - "re-resizable": "^4.7.1", - "react-click-outside": "^2.3.1", - "react-dates": "^17.1.1", - "rememo": "^3.0.0", - "tinycolor2": "^1.4.1", - "uuid": "^3.1.0" - } - }, - "@wordpress/compose": { - "version": "2.0.5", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/element": "^2.1.4", - "@wordpress/is-shallow-equal": "^1.1.4", - "lodash": "^4.17.10" - } - }, - "@wordpress/data": { - "version": "2.1.4", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/compose": "^2.0.5", - "@wordpress/deprecated": "^2.0.2", - "@wordpress/element": "^2.1.4", - "@wordpress/is-shallow-equal": "^1.1.4", - "@wordpress/redux-routine": "^3.0.3", - "equivalent-key-map": "^0.2.0", - "is-promise": "^2.1.0", - "lodash": "^4.17.10", - "redux": "^4.0.0" - } - }, - "@wordpress/deprecated": { - "version": "2.0.2", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/hooks": "^2.0.2" - } - }, - "@wordpress/dom": { - "version": "2.0.4", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "lodash": "^4.17.10" - } - }, - "@wordpress/dom-ready": { - "version": "2.0.2", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/element": { - "version": "2.1.4", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/escape-html": "^1.0.1", - "lodash": "^4.17.10", - "react": "^16.4.1", - "react-dom": "^16.4.1" - } - }, - "@wordpress/escape-html": { - "version": "1.0.1", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/hooks": { - "version": "2.0.2", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/i18n": { - "version": "3.0.1", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "gettext-parser": "^1.3.1", - "jed": "^1.1.1", - "lodash": "^4.17.10", - "memize": "^1.0.5" - } - }, - "@wordpress/is-shallow-equal": { - "version": "1.1.4", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/keycodes": { - "version": "2.0.2", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "lodash": "^4.17.10" - } - }, - "@wordpress/redux-routine": { - "version": "3.0.3", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "is-promise": "^2.1.0", - "rungen": "^0.3.2" - } - }, - "@wordpress/url": { - "version": "2.1.0", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "qs": "^6.5.2" - } - }, - "airbnb-prop-types": { - "version": "2.11.0", - "bundled": true, - "requires": { - "array.prototype.find": "^2.0.4", - "function.prototype.name": "^1.1.0", - "has": "^1.0.3", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object.assign": "^4.1.0", - "object.entries": "^1.0.4", - "prop-types": "^15.6.2", - "prop-types-exact": "^1.2.0" - } - }, - "array.prototype.find": { - "version": "2.0.4", - "bundled": true, - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.7.0" - } - }, - "array.prototype.flat": { - "version": "1.2.1", - "bundled": true, - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.10.0", - "function-bind": "^1.1.1" - } - }, - "asap": { - "version": "2.0.6", - "bundled": true - }, - "brcast": { - "version": "2.0.2", - "bundled": true - }, - "classnames": { - "version": "2.2.6", - "bundled": true - }, - "clipboard": { - "version": "2.0.1", - "bundled": true, - "requires": { - "good-listener": "^1.2.2", - "select": "^1.1.2", - "tiny-emitter": "^2.0.0" - } - }, - "consolidated-events": { - "version": "2.0.2", - "bundled": true - }, - "core-js": { - "version": "1.2.7", - "bundled": true - }, - "deepmerge": { - "version": "1.5.2", - "bundled": true - }, - "define-properties": { - "version": "1.1.3", - "bundled": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "delegate": { - "version": "3.2.0", - "bundled": true - }, - "diff": { - "version": "3.5.0", - "bundled": true - }, - "direction": { - "version": "1.0.2", - "bundled": true - }, - "dom-scroll-into-view": { - "version": "1.2.1", - "bundled": true - }, - "encoding": { - "version": "0.1.12", - "bundled": true, - "requires": { - "iconv-lite": "~0.4.13" - } - }, - "equivalent-key-map": { - "version": "0.2.2", - "bundled": true - }, - "es-abstract": { - "version": "1.12.0", - "bundled": 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": { - "version": "1.2.0", - "bundled": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "fbjs": { - "version": "0.8.17", - "bundled": true, - "requires": { - "core-js": "^1.0.0", - "isomorphic-fetch": "^2.1.1", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" - } - }, - "function-bind": { - "version": "1.1.1", - "bundled": true - }, - "function.prototype.name": { - "version": "1.1.0", - "bundled": true, - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "is-callable": "^1.1.3" - } - }, - "gettext-parser": { - "version": "1.4.0", - "bundled": true, - "requires": { - "encoding": "^0.1.12", - "safe-buffer": "^5.1.1" - } - }, - "global-cache": { - "version": "1.2.1", - "bundled": true, - "requires": { - "define-properties": "^1.1.2", - "is-symbol": "^1.0.1" - } - }, - "good-listener": { - "version": "1.2.2", - "bundled": true, - "requires": { - "delegate": "^3.1.2" - } - }, - "has": { - "version": "1.0.3", - "bundled": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.0", - "bundled": true - }, - "hoist-non-react-statics": { - "version": "1.2.0", - "bundled": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "is-callable": { - "version": "1.1.4", - "bundled": true - }, - "is-date-object": { - "version": "1.0.1", - "bundled": true - }, - "is-promise": { - "version": "2.1.0", - "bundled": true - }, - "is-regex": { - "version": "1.0.4", - "bundled": true, - "requires": { - "has": "^1.0.1" - } - }, - "is-stream": { - "version": "1.1.0", - "bundled": true - }, - "is-symbol": { - "version": "1.0.2", - "bundled": true, - "requires": { - "has-symbols": "^1.0.0" - } - }, - "is-touch-device": { - "version": "1.0.1", - "bundled": true - }, - "isomorphic-fetch": { - "version": "2.2.1", - "bundled": true, - "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - } - }, - "jed": { - "version": "1.1.1", - "bundled": true - }, - "js-tokens": { - "version": "4.0.0", - "bundled": true - }, - "lodash": { - "version": "4.17.11", - "bundled": true - }, - "loose-envify": { - "version": "1.4.0", - "bundled": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "memize": { - "version": "1.0.5", - "bundled": true - }, - "moment": { - "version": "2.22.2", - "bundled": true - }, - "mousetrap": { - "version": "1.6.2", - "bundled": true - }, - "node-fetch": { - "version": "1.7.3", - "bundled": true, - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, - "object-assign": { - "version": "4.1.1", - "bundled": true - }, - "object-is": { - "version": "1.0.1", - "bundled": true - }, - "object-keys": { - "version": "1.0.12", - "bundled": true - }, - "object.assign": { - "version": "4.1.0", - "bundled": true, - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, - "object.entries": { - "version": "1.0.4", - "bundled": true, - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.6.1", - "function-bind": "^1.1.0", - "has": "^1.0.1" - } - }, - "object.values": { - "version": "1.0.4", - "bundled": true, - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.6.1", - "function-bind": "^1.1.0", - "has": "^1.0.1" - } - }, - "promise": { - "version": "7.3.1", - "bundled": true, - "requires": { - "asap": "~2.0.3" - } - }, - "prop-types": { - "version": "15.6.2", - "bundled": true, - "requires": { - "loose-envify": "^1.3.1", - "object-assign": "^4.1.1" - } - }, - "prop-types-exact": { - "version": "1.2.0", - "bundled": true, - "requires": { - "has": "^1.0.3", - "object.assign": "^4.1.0", - "reflect.ownkeys": "^0.2.0" - } - }, - "qs": { - "version": "6.5.2", - "bundled": true - }, - "re-resizable": { - "version": "4.9.1", - "bundled": true - }, - "react": { - "version": "16.5.2", - "bundled": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "schedule": "^0.5.0" - } - }, - "react-addons-shallow-compare": { - "version": "15.6.2", - "bundled": true, - "requires": { - "fbjs": "^0.8.4", - "object-assign": "^4.1.0" - } - }, - "react-click-outside": { - "version": "2.3.1", - "bundled": true, - "requires": { - "hoist-non-react-statics": "^1.2.0" - } - }, - "react-dates": { - "version": "17.2.0", - "bundled": true, - "requires": { - "airbnb-prop-types": "^2.10.0", - "consolidated-events": "^1.1.1 || ^2.0.0", - "is-touch-device": "^1.0.1", - "lodash": "^4.1.1", - "object.assign": "^4.1.0", - "object.values": "^1.0.4", - "prop-types": "^15.6.1", - "react-addons-shallow-compare": "^15.6.2", - "react-moment-proptypes": "^1.6.0", - "react-outside-click-handler": "^1.2.0", - "react-portal": "^4.1.5", - "react-with-styles": "^3.2.0", - "react-with-styles-interface-css": "^4.0.2" - } - }, - "react-dom": { - "version": "16.5.2", - "bundled": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "schedule": "^0.5.0" - } - }, - "react-moment-proptypes": { - "version": "1.6.0", - "bundled": true, - "requires": { - "moment": ">=1.6.0" - } - }, - "react-outside-click-handler": { - "version": "1.2.2", - "bundled": true, - "requires": { - "airbnb-prop-types": "^2.10.0", - "consolidated-events": "^1.1.1 || ^2.0.0", - "object.values": "^1.0.4", - "prop-types": "^15.6.1" - } - }, - "react-portal": { - "version": "4.1.5", - "bundled": true, - "requires": { - "prop-types": "^15.5.8" - } - }, - "react-with-direction": { - "version": "1.3.0", - "bundled": true, - "requires": { - "airbnb-prop-types": "^2.8.1", - "brcast": "^2.0.2", - "deepmerge": "^1.5.1", - "direction": "^1.0.1", - "hoist-non-react-statics": "^2.3.1", - "object.assign": "^4.1.0", - "object.values": "^1.0.4", - "prop-types": "^15.6.0" - }, - "dependencies": { - "hoist-non-react-statics": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", - "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" - } - } - }, - "react-with-styles": { - "version": "3.2.1", - "bundled": true, - "requires": { - "deepmerge": "^1.5.2", - "hoist-non-react-statics": "^2.5.0", - "prop-types": "^15.6.1", - "react-with-direction": "^1.3.0" - }, - "dependencies": { - "hoist-non-react-statics": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", - "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" - } - } - }, - "react-with-styles-interface-css": { - "version": "4.0.3", - "bundled": true, - "requires": { - "array.prototype.flat": "^1.2.1", - "global-cache": "^1.2.1" - } - }, - "redux": { - "version": "4.0.1", - "bundled": true, - "requires": { - "loose-envify": "^1.4.0", - "symbol-observable": "^1.2.0" - } - }, - "reflect.ownkeys": { - "version": "0.2.0", - "bundled": true - }, - "regenerator-runtime": { - "version": "0.12.1", - "bundled": true - }, - "rememo": { - "version": "3.0.0", - "bundled": true - }, - "rungen": { - "version": "0.3.2", - "bundled": true - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true - }, - "schedule": { - "version": "0.5.0", - "bundled": true, - "requires": { - "object-assign": "^4.1.1" - } - }, - "select": { - "version": "1.1.2", - "bundled": true - }, - "setimmediate": { - "version": "1.0.5", - "bundled": true - }, - "symbol-observable": { - "version": "1.2.0", - "bundled": true - }, - "tiny-emitter": { - "version": "2.0.2", - "bundled": true - }, - "tinycolor2": { - "version": "1.4.1", - "bundled": true - }, - "ua-parser-js": { - "version": "0.7.18", - "bundled": true - }, - "uuid": { - "version": "3.3.2", - "bundled": true - }, - "whatwg-fetch": { - "version": "3.0.0", - "bundled": true - } - } - }, - "@wordpress/token-list": { - "version": "file:node_modules/@wordpress/token-list", - "integrity": "sha512-hyk3xsLB1OlS52kFlR9PcSzvD6fkB2uOG4Uchs1pd304M/G3WTdD6iPiRVZeMmpWbwMq9KFtu9f8hwUzQTrTow==", - "requires": { - "@babel/runtime": "^7.0.0", - "lodash": "^4.17.10" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.1.2", - "bundled": true, - "requires": { - "regenerator-runtime": "^0.12.0" - } - }, - "lodash": { - "version": "4.17.11", - "bundled": true - }, - "regenerator-runtime": { - "version": "0.12.1", - "bundled": true - } - } - }, - "@wordpress/url": { - "version": "file:node_modules/@wordpress/url", - "integrity": "sha512-MPWFszPleQ+ofDE8ZMpVLOwK/yAjf6L9f7F9wxE82rQjRzUSkrs+Z7Q9ShYiD5HT7o4J96PY9S0XnoHW/XKnDg==", - "requires": { - "@babel/runtime": "^7.0.0", - "qs": "^6.5.2" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.1.2", - "bundled": true, - "requires": { - "regenerator-runtime": "^0.12.0" - } - }, - "qs": { - "version": "6.5.2", - "bundled": true - }, - "regenerator-runtime": { - "version": "0.12.1", - "bundled": true - } - } - }, - "@wordpress/viewport": { - "version": "file:node_modules/@wordpress/viewport", - "integrity": "sha512-im0/L6+rwM8gtUuSRkzsPOH1pAwKWHLGfJXdnSuYSV1/K/e3szBLIlkHOK1q4YXkVzHxSSNDcnaHEuxbA/6rNA==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/data": "^2.1.4", - "@wordpress/element": "^2.1.4", - "lodash": "^4.17.10" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.1.2", - "bundled": true, - "requires": { - "regenerator-runtime": "^0.12.0" - } - }, - "@wordpress/compose": { - "version": "2.0.2", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/element": "^2.1.1", - "@wordpress/is-shallow-equal": "^1.1.4", - "lodash": "^4.17.10" - } - }, - "@wordpress/data": { - "version": "2.1.4", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/compose": "^2.0.5", - "@wordpress/deprecated": "^2.0.2", - "@wordpress/element": "^2.1.4", - "@wordpress/is-shallow-equal": "^1.1.4", - "@wordpress/redux-routine": "^3.0.3", - "equivalent-key-map": "^0.2.0", - "is-promise": "^2.1.0", - "lodash": "^4.17.10", - "redux": "^4.0.0" - }, - "dependencies": { - "@wordpress/compose": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-2.0.5.tgz", - "integrity": "sha512-bbf+4nph+/rFBou7PTUyx8rwHVR08ymBgxnmShGTTjuiVxcrz0Gu7Wu2wxulsZobOYaiqvQkCEHKceNsBxJwiA==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/element": "^2.1.4", - "@wordpress/is-shallow-equal": "^1.1.4", - "lodash": "^4.17.10" - } - } - } - }, - "@wordpress/deprecated": { - "version": "2.0.2", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/hooks": "^2.0.2" - } - }, - "@wordpress/element": { - "version": "2.1.4", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/escape-html": "^1.0.1", - "lodash": "^4.17.10", - "react": "^16.4.1", - "react-dom": "^16.4.1" - } - }, - "@wordpress/escape-html": { - "version": "1.0.1", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/hooks": { - "version": "2.0.2", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/is-shallow-equal": { - "version": "1.1.4", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/redux-routine": { - "version": "3.0.3", - "bundled": true, - "requires": { - "@babel/runtime": "^7.0.0", - "is-promise": "^2.1.0", - "rungen": "^0.3.2" - } - }, - "equivalent-key-map": { - "version": "0.2.2", - "bundled": true - }, - "is-promise": { - "version": "2.1.0", - "bundled": true - }, - "js-tokens": { - "version": "4.0.0", - "bundled": true - }, - "lodash": { - "version": "4.17.11", - "bundled": true - }, - "loose-envify": { - "version": "1.4.0", - "bundled": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "object-assign": { - "version": "4.1.1", - "bundled": true - }, - "prop-types": { - "version": "15.6.2", - "bundled": true, - "requires": { - "loose-envify": "^1.3.1", - "object-assign": "^4.1.1" - } - }, - "react": { - "version": "16.5.2", - "bundled": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "schedule": "^0.5.0" - } - }, - "react-dom": { - "version": "16.5.2", - "bundled": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "schedule": "^0.5.0" - } - }, - "redux": { - "version": "4.0.1", - "bundled": true, - "requires": { - "loose-envify": "^1.4.0", - "symbol-observable": "^1.2.0" - } - }, - "regenerator-runtime": { - "version": "0.12.1", - "bundled": true - }, - "rungen": { - "version": "0.3.2", - "bundled": true - }, - "schedule": { - "version": "0.5.0", - "bundled": true, - "requires": { - "object-assign": "^4.1.1" - } - }, - "symbol-observable": { - "version": "1.2.0", - "bundled": true - } - } - }, - "@wordpress/wordcount": { - "version": "file:node_modules/@wordpress/wordcount", - "integrity": "sha512-FQ9mU/NsEB+IczD8roBGes9fJlZdTtdNhftdoCw32/lpUgP/bjA736NIPtNRedry+VBFykHqUf0CygJ0TgaOKA==", - "requires": { - "@babel/runtime": "^7.0.0", - "lodash": "^4.17.10" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.1.2", - "bundled": true, - "requires": { - "regenerator-runtime": "^0.12.0" - } - }, - "lodash": { - "version": "4.17.11", - "bundled": true - }, - "regenerator-runtime": { - "version": "0.12.1", - "bundled": true - } - } - } + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@wordpress/editor/-/editor-5.0.1.tgz", + "integrity": "sha512-+654GVNUT5Rx0o5yBLwbpXD93B/YdBfH1oAS7mwKn1VCPtAZGGJuza28PFpEaJrHYtAXXbcETsH9GOV0ugOEXQ==", + "requires": { + "@babel/runtime": "^7.0.0", + "@wordpress/a11y": "^2.0.2", + "@wordpress/api-fetch": "^2.1.0", + "@wordpress/blob": "^2.1.0", + "@wordpress/blocks": "^4.0.4", + "@wordpress/components": "^4.2.1", + "@wordpress/compose": "^2.0.5", + "@wordpress/core-data": "^2.0.6", + "@wordpress/data": "^2.1.4", + "@wordpress/date": "^2.0.3", + "@wordpress/deprecated": "^2.0.2", + "@wordpress/dom": "^2.0.4", + "@wordpress/element": "^2.1.4", + "@wordpress/hooks": "^2.0.2", + "@wordpress/html-entities": "^2.0.2", + "@wordpress/i18n": "^3.0.1", + "@wordpress/is-shallow-equal": "^1.1.4", + "@wordpress/keycodes": "^2.0.2", + "@wordpress/nux": "^2.0.6", + "@wordpress/token-list": "^1.0.2", + "@wordpress/url": "^2.1.0", + "@wordpress/viewport": "^2.0.5", + "@wordpress/wordcount": "^2.0.2", + "classnames": "^2.2.5", + "dom-scroll-into-view": "^1.2.1", + "inherits": "^2.0.3", + "jquery": "^3.3.1", + "lodash": "^4.17.10", + "memize": "^1.0.5", + "react-autosize-textarea": "^3.0.2", + "redux-multi": "^0.1.12", + "redux-optimist": "^1.0.0", + "refx": "^3.0.0", + "rememo": "^3.0.0", + "tinycolor2": "^1.4.1", + "tinymce": "^4.7.2", + "traverse": "^0.6.6", + "uuid": "^3.1.0" } }, "@wordpress/element": { @@ -8438,12 +5362,14 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -8458,17 +5384,20 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -8585,7 +5514,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -8597,6 +5527,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -8611,6 +5542,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -8618,12 +5550,14 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.2.4", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.1", "yallist": "^3.0.0" @@ -8642,6 +5576,7 @@ "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -8722,7 +5657,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -8734,6 +5670,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -8855,6 +5792,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", diff --git a/package.json b/package.json index cf837d9fc2569..70537cc536672 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ "@wordpress/dom": "^2.0.4", "@wordpress/dom-ready": "^2.0.2", "@wordpress/edit-post": "^1.0.4", - "@wordpress/editor": "^4.0.3", + "@wordpress/editor": "^5.0.1", "@wordpress/element": "^2.1.4", "@wordpress/escape-html": "^1.0.1", "@wordpress/hooks": "^2.0.2", diff --git a/src/wp-includes/blocks/categories.php b/src/wp-includes/blocks/categories.php index bd1175733bd41..83bf1c9db2639 100644 --- a/src/wp-includes/blocks/categories.php +++ b/src/wp-includes/blocks/categories.php @@ -16,11 +16,6 @@ function render_block_core_categories( $attributes ) { static $block_id = 0; $block_id++; - $align = 'center'; - if ( isset( $attributes['align'] ) && in_array( $attributes['align'], array( 'left', 'right', 'full' ), true ) ) { - $align = $attributes['align']; - } - $args = array( 'echo' => false, 'hierarchical' => ! empty( $attributes['showHierarchy'] ), @@ -46,10 +41,14 @@ function render_block_core_categories( $attributes ) { $type = 'list'; } - $class = "wp-block-categories wp-block-categories-{$type} align{$align}"; + $class = "wp-block-categories wp-block-categories-{$type}"; + + if ( isset( $attributes['align'] ) ) { + $class .= " align{$attributes['align']}"; + } if ( isset( $attributes['className'] ) ) { - $class .= ' ' . $attributes['className']; + $class .= " {$attributes['className']}"; } $block_content = sprintf( diff --git a/src/wp-includes/blocks/latest-comments.php b/src/wp-includes/blocks/latest-comments.php index dd310028ce145..199a426a93ef6 100644 --- a/src/wp-includes/blocks/latest-comments.php +++ b/src/wp-includes/blocks/latest-comments.php @@ -5,32 +5,34 @@ * @package gutenberg */ -/** - * Get the post title. - * - * The post title is fetched and if it is blank then a default string is - * returned. - * - * Copied from `wp-admin/includes/template.php`, but we can't include that - * file because: - * - * 1. It causes bugs with test fixture generation and strange Docker 255 error - * codes. - * 2. It's in the admin; ideally we *shouldn't* be including files from the - * admin for a block's output. It's a very small/simple function as well, - * so duplicating it isn't too terrible. - * - * @since 3.3.0 - * - * @param int|WP_Post $post Optional. Post ID or WP_Post object. Default is global $post. - * @return string The post title if set; "(no title)" if no title is set. - */ -function gutenberg_draft_or_post_title( $post = 0 ) { - $title = get_the_title( $post ); - if ( empty( $title ) ) { - $title = __( '(no title)', 'gutenberg' ); +if ( ! function_exists( 'gutenberg_draft_or_post_title' ) ) { + /** + * Get the post title. + * + * The post title is fetched and if it is blank then a default string is + * returned. + * + * Copied from `wp-admin/includes/template.php`, but we can't include that + * file because: + * + * 1. It causes bugs with test fixture generation and strange Docker 255 error + * codes. + * 2. It's in the admin; ideally we *shouldn't* be including files from the + * admin for a block's output. It's a very small/simple function as well, + * so duplicating it isn't too terrible. + * + * @since 3.3.0 + * + * @param int|WP_Post $post Optional. Post ID or WP_Post object. Default is global $post. + * @return string The post title if set; "(no title)" if no title is set. + */ + function gutenberg_draft_or_post_title( $post = 0 ) { + $title = get_the_title( $post ); + if ( empty( $title ) ) { + $title = __( '(no title)', 'gutenberg' ); + } + return esc_html( $title ); } - return esc_html( $title ); } /** diff --git a/tests/phpunit/data/blocks/fixtures/core__categories.server.html b/tests/phpunit/data/blocks/fixtures/core__categories.server.html index b6684f132ae39..3314f1d1e7498 100644 --- a/tests/phpunit/data/blocks/fixtures/core__categories.server.html +++ b/tests/phpunit/data/blocks/fixtures/core__categories.server.html @@ -1 +1 @@ -

        • No categories
        +
        • No categories
        From cf0f8e82b5876579dba72a82e4bc3b2debbf83b7 Mon Sep 17 00:00:00 2001 From: Gary Pendergast Date: Tue, 23 Oct 2018 06:20:23 +0000 Subject: [PATCH 507/537] Script Loader: Fix metadata being registered as an inline script. [43723] included script metadata for the `wp-polyfill` script that was being registered as an inline script. See #45065. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43802 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/script-loader.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wp-includes/script-loader.php b/src/wp-includes/script-loader.php index 598e6dfac3bb0..8de2e5b971a77 100644 --- a/src/wp-includes/script-loader.php +++ b/src/wp-includes/script-loader.php @@ -102,7 +102,7 @@ function wp_default_packages_vendor( &$scripts ) { } $scripts->add( 'wp-polyfill', null, array( 'wp-polyfill-ecmascript' ) ); - did_action( 'init' ) && $scripts->add_inline_script( + did_action( 'init' ) && $scripts->add_data( 'wp-polyfill', 'data', wp_get_script_polyfill( From 4bdfa3d5ea19117f32d38adcb2cbe00643bd2ece Mon Sep 17 00:00:00 2001 From: Gary Pendergast Date: Tue, 23 Oct 2018 06:35:17 +0000 Subject: [PATCH 508/537] Scripts: `wp-url` is a dependency of `wp-api-fetch`. See #45065. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43803 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/script-loader.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wp-includes/script-loader.php b/src/wp-includes/script-loader.php index 8de2e5b971a77..b5f66b5cee194 100644 --- a/src/wp-includes/script-loader.php +++ b/src/wp-includes/script-loader.php @@ -166,7 +166,7 @@ function wp_default_packages_scripts( &$scripts ) { $suffix = wp_scripts_get_suffix(); $packages_dependencies = array( - 'api-fetch' => array( 'wp-polyfill', 'wp-hooks', 'wp-i18n' ), + 'api-fetch' => array( 'wp-polyfill', 'wp-hooks', 'wp-i18n', 'wp-url' ), 'a11y' => array( 'wp-dom-ready', 'wp-polyfill' ), 'autop' => array( 'wp-polyfill' ), 'blob' => array( 'wp-polyfill' ), From 2b18dcdecd9eef713c76663198cf1e3d9135f907 Mon Sep 17 00:00:00 2001 From: Gary Pendergast Date: Tue, 23 Oct 2018 06:52:03 +0000 Subject: [PATCH 509/537] Blocks: Add the reusable block post type, `wp_block`. See #45098. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43804 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/edit.php | 5 + src/wp-includes/capabilities.php | 17 +++ src/wp-includes/post.php | 33 ++++++ .../phpunit/tests/blocks/render-reusable.php | 102 ++++++++++++++++++ tests/phpunit/tests/user/capabilities.php | 89 +++++++++++++++ 5 files changed, 246 insertions(+) create mode 100644 tests/phpunit/tests/blocks/render-reusable.php diff --git a/src/wp-admin/edit.php b/src/wp-admin/edit.php index 258952ebf6d8e..d55c71c0e93cb 100644 --- a/src/wp-admin/edit.php +++ b/src/wp-admin/edit.php @@ -182,6 +182,11 @@ wp_enqueue_script('inline-edit-post'); wp_enqueue_script('heartbeat'); +if ( 'wp_block' === $post_type ) { + wp_enqueue_script( 'wp-list-reusable-blocks' ); + wp_enqueue_style( 'wp-list-reusable-blocks' ); +} + $title = $post_type_object->labels->name; if ( 'post' == $post_type ) { diff --git a/src/wp-includes/capabilities.php b/src/wp-includes/capabilities.php index 748d02907c661..38bb4c6c6de95 100644 --- a/src/wp-includes/capabilities.php +++ b/src/wp-includes/capabilities.php @@ -555,6 +555,23 @@ function map_meta_cap( $cap, $user_id ) { return call_user_func_array( 'map_meta_cap', $args ); } + // Block capabilities map to their post equivalent. + $block_caps = array( + 'edit_blocks', + 'edit_others_blocks', + 'publish_blocks', + 'read_private_blocks', + 'delete_blocks', + 'delete_private_blocks', + 'delete_published_blocks', + 'delete_others_blocks', + 'edit_private_blocks', + 'edit_published_blocks', + ); + if ( in_array( $cap, $block_caps, true ) ) { + $cap = str_replace( '_blocks', '_posts', $cap ); + } + // If no meta caps match, return the original cap. $caps[] = $cap; } diff --git a/src/wp-includes/post.php b/src/wp-includes/post.php index 2afe28bb96368..8e70573518e30 100644 --- a/src/wp-includes/post.php +++ b/src/wp-includes/post.php @@ -225,6 +225,39 @@ function create_initial_post_types() { 'supports' => array(), ) ); + register_post_type( + 'wp_block', + array( + 'labels' => array( + 'name' => __( 'Blocks'), + 'singular_name' => __( 'Block' ), + 'search_items' => __( 'Search Blocks' ), + ), + 'public' => false, + '_builtin' => true, /* internal use only. don't use this when registering your own post type. */ + 'show_ui' => true, + 'show_in_menu' => false, + 'rewrite' => false, + 'capability_type' => 'block', + 'capabilities' => array( + // You need to be able to edit posts, in order to read blocks in their raw form. + 'read' => 'edit_posts', + // You need to be able to publish posts, in order to create blocks. + 'create_posts' => 'publish_posts', + 'edit_published_posts' => 'edit_published_posts', + 'delete_published_posts' => 'delete_published_posts', + 'edit_others_posts' => 'edit_others_posts', + 'delete_others_posts' => 'delete_others_posts', + ), + 'map_meta_cap' => true, + 'supports' => array( + 'title', + 'editor', + ), + ) + ); + + register_post_status( 'publish', array( 'label' => _x( 'Published', 'post status' ), 'public' => true, diff --git a/tests/phpunit/tests/blocks/render-reusable.php b/tests/phpunit/tests/blocks/render-reusable.php new file mode 100644 index 0000000000000..7188e3a897e4d --- /dev/null +++ b/tests/phpunit/tests/blocks/render-reusable.php @@ -0,0 +1,102 @@ +user->create( + array( + 'role' => 'editor', + ) + ); + + self::$post_id = $factory->post->create( + array( + 'post_author' => self::$user_id, + 'post_type' => 'post', + 'post_status' => 'publish', + 'post_title' => 'Test Post', + 'post_content' => '

        Hello world!

        ', + ) + ); + + self::$block_id = $factory->post->create( + array( + 'post_author' => self::$user_id, + 'post_type' => 'wp_block', + 'post_status' => 'publish', + 'post_title' => 'Test Block', + 'post_content' => '

        Hello world!

        ', + ) + ); + } + + /** + * Delete fake data after tests run. + * + * @since 5.0.0 + */ + public static function wpTearDownAfterClass() { + wp_delete_post( self::$block_id, true ); + wp_delete_post( self::$post_id, true ); + self::delete_user( self::$user_id ); + } + + public function test_render() { + $block_type = WP_Block_Type_Registry::get_instance()->get_registered( 'core/block' ); + $output = $block_type->render( array( 'ref' => self::$block_id ) ); + $this->assertSame( '

        Hello world!

        ', $output ); + } + + public function test_ref_empty() { + $block_type = WP_Block_Type_Registry::get_instance()->get_registered( 'core/block' ); + $output = $block_type->render( array() ); + $this->assertSame( '', $output ); + } + + public function test_ref_wrong_post_type() { + $block_type = WP_Block_Type_Registry::get_instance()->get_registered( 'core/block' ); + $output = $block_type->render( array( 'ref' => self::$post_id ) ); + $this->assertSame( '', $output ); + } +} diff --git a/tests/phpunit/tests/user/capabilities.php b/tests/phpunit/tests/user/capabilities.php index 6d56b7e738f55..cfdf3901201a9 100644 --- a/tests/phpunit/tests/user/capabilities.php +++ b/tests/phpunit/tests/user/capabilities.php @@ -17,6 +17,8 @@ class Tests_User_Capabilities extends WP_UnitTestCase { ); protected static $super_admin = null; + protected static $block_id; + public static function wpSetUpBeforeClass( $factory ) { self::$users = array( 'administrator' => $factory->user->create_and_get( array( 'role' => 'administrator' ) ), @@ -27,6 +29,16 @@ public static function wpSetUpBeforeClass( $factory ) { ); self::$super_admin = $factory->user->create_and_get( array( 'role' => 'contributor' ) ); grant_super_admin( self::$super_admin->ID ); + + self::$block_id = $factory->post->create( + array( + 'post_author' => self::$users['administrator']->ID, + 'post_type' => 'wp_block', + 'post_status' => 'publish', + 'post_title' => 'Test Block', + 'post_content' => '

        Hello world!

        ', + ) + ); } function setUp() { @@ -36,6 +48,11 @@ function setUp() { } + public static function wpTearDownAfterClass() { + wp_delete_post( self::$block_id, true ); + } + + function _flush_roles() { // we want to make sure we're testing against the db, not just in-memory data // this will flush everything and reload it from the db @@ -2016,4 +2033,76 @@ function test_roles_get_site_id() { $this->assertSame( 333, $roles->get_site_id() ); } + + /** + * @dataProvider data_block_caps + */ + function test_block_caps( $role, $cap, $use_post, $expected ) { + if ( $use_post ) { + $this->assertEquals( $expected, self::$users[ $role ]->has_cap( $cap, self::$block_id ) ); + } else { + $this->assertEquals( $expected, self::$users[ $role ]->has_cap( $cap ) ); + } + } + + function data_block_caps() { + $post_caps = array( + 'edit_block', + 'read_block', + 'delete_block', + ); + + $all_caps = array( + 'edit_block', + 'read_block', + 'delete_block', + 'edit_blocks', + 'edit_others_blocks', + 'publish_blocks', + 'read_private_blocks', + 'delete_blocks', + 'delete_private_blocks', + 'delete_published_blocks', + 'delete_others_blocks', + 'edit_private_blocks', + 'edit_published_blocks', + ); + + $roles = array( + 'administrator' => $all_caps, + 'editor' => $all_caps, + 'author' => array( + 'read_block', + 'edit_blocks', + 'publish_blocks', + 'delete_blocks', + 'delete_published_blocks', + 'edit_published_blocks', + ), + 'contributor' => array( + 'read_block', + 'edit_blocks', + 'delete_blocks', + ), + 'subscriber' => array(), + ); + + $data = array(); + + foreach( $roles as $role => $caps ) { + foreach ( $caps as $cap ) { + $use_post = in_array( $cap, $post_caps, true ); + $data[] = array( $role, $cap, $use_post, true ); + } + + foreach ( $all_caps as $cap ) { + if ( ! in_array( $cap, $caps, true ) ) { + $use_post = in_array( $cap, $post_caps, true ); + $data[] = array( $role, $cap, $use_post, false ); + } + } + } + + return $data; + } } From 981143917246d7bc3818853dbb7317796c15e886 Mon Sep 17 00:00:00 2001 From: Gary Pendergast Date: Tue, 23 Oct 2018 07:03:47 +0000 Subject: [PATCH 510/537] REST API: Add endpoints for blocks. `WP_REST_Block_Renderer_Controller` allows rendering of server-side rendered blocks, whilst `WP_REST_Blocks_Controller` allows retrieving of reusable blocks. Props desrosj, danielbachhuber, pento. See #45065. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43805 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/post.php | 3 + src/wp-includes/rest-api.php | 5 + ...lass-wp-rest-block-renderer-controller.php | 177 ++++ .../class-wp-rest-blocks-controller.php | 39 + src/wp-settings.php | 2 + .../rest-block-renderer-controller.php | 529 +++++++++++ .../tests/rest-api/rest-blocks-controller.php | 204 +++++ .../tests/rest-api/rest-schema-setup.php | 10 + tests/qunit/fixtures/wp-api-generated.js | 831 +++++++++++++++++- 9 files changed, 1766 insertions(+), 34 deletions(-) create mode 100644 src/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php create mode 100644 src/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php create mode 100644 tests/phpunit/tests/rest-api/rest-block-renderer-controller.php create mode 100644 tests/phpunit/tests/rest-api/rest-blocks-controller.php diff --git a/src/wp-includes/post.php b/src/wp-includes/post.php index 8e70573518e30..302d2210d5cc9 100644 --- a/src/wp-includes/post.php +++ b/src/wp-includes/post.php @@ -238,6 +238,9 @@ function create_initial_post_types() { 'show_ui' => true, 'show_in_menu' => false, 'rewrite' => false, + 'show_in_rest' => true, + 'rest_base' => 'blocks', + 'rest_controller_class' => 'WP_REST_Blocks_Controller', 'capability_type' => 'block', 'capabilities' => array( // You need to be able to edit posts, in order to read blocks in their raw form. diff --git a/src/wp-includes/rest-api.php b/src/wp-includes/rest-api.php index ebc3d9a053813..e1d8919c8d68f 100644 --- a/src/wp-includes/rest-api.php +++ b/src/wp-includes/rest-api.php @@ -250,6 +250,10 @@ function create_initial_rest_routes() { $controller = new WP_REST_Search_Controller( $search_handlers ); $controller->register_routes(); + // Block Renderer. + $controller = new WP_REST_Block_Renderer_Controller; + $controller->register_routes(); + // Settings. $controller = new WP_REST_Settings_Controller; $controller->register_routes(); @@ -257,6 +261,7 @@ function create_initial_rest_routes() { // Themes. $controller = new WP_REST_Themes_Controller; $controller->register_routes(); + } /** diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php new file mode 100644 index 0000000000000..a4f17283c583a --- /dev/null +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php @@ -0,0 +1,177 @@ +namespace = 'wp/v2'; + $this->rest_base = 'block-renderer'; + } + + /** + * Registers the necessary REST API routes, one for each dynamic block. + * + * @since 5.0.0 + */ + public function register_routes() { + $block_types = WP_Block_Type_Registry::get_instance()->get_all_registered(); + + foreach ( $block_types as $block_type ) { + if ( ! $block_type->is_dynamic() ) { + continue; + } + + register_rest_route( + $this->namespace, + '/' . $this->rest_base . '/(?P' . $block_type->name . ')', + array( + 'args' => array( + 'name' => array( + 'description' => __( 'Unique registered name for the block.' ), + 'type' => 'string', + ), + ), + array( + 'methods' => WP_REST_Server::READABLE, + 'callback' => array( $this, 'get_item' ), + 'permission_callback' => array( $this, 'get_item_permissions_check' ), + 'args' => array( + 'context' => $this->get_context_param( array( 'default' => 'view' ) ), + 'attributes' => array( + /* translators: %s is the name of the block */ + 'description' => sprintf( __( 'Attributes for %s block' ), $block_type->name ), + 'type' => 'object', + 'additionalProperties' => false, + 'properties' => $block_type->get_attributes(), + ), + 'post_id' => array( + 'description' => __( 'ID of the post context.' ), + 'type' => 'integer', + ), + ), + ), + 'schema' => array( $this, 'get_public_item_schema' ), + ) + ); + } + } + + /** + * Checks if a given request has access to read blocks. + * + * @since 5.0.0 + * + * @param WP_REST_Request $request Request. + * @return true|WP_Error True if the request has read access, WP_Error object otherwise. + */ + public function get_item_permissions_check( $request ) { + global $post; + + $post_id = isset( $request['post_id'] ) ? intval( $request['post_id'] ) : 0; + + if ( 0 < $post_id ) { + $post = get_post( $post_id ); + + if ( ! $post || ! current_user_can( 'edit_post', $post->ID ) ) { + return new WP_Error( + 'block_cannot_read', + __( 'Sorry, you are not allowed to read blocks of this post' ), + array( + 'status' => rest_authorization_required_code(), + ) + ); + } + } else { + if ( ! current_user_can( 'edit_posts' ) ) { + return new WP_Error( + 'block_cannot_read', + __( 'Sorry, you are not allowed to read blocks as this user.' ), + array( + 'status' => rest_authorization_required_code(), + ) + ); + } + } + + return true; + } + + /** + * Returns block output from block's registered render_callback. + * + * @since 5.0.0 + * + * @param WP_REST_Request $request Full details about the request. + * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. + */ + public function get_item( $request ) { + global $post; + + $post_id = isset( $request['post_id'] ) ? intval( $request['post_id'] ) : 0; + + if ( 0 < $post_id ) { + $post = get_post( $post_id ); + + // Set up postdata since this will be needed if post_id was set. + setup_postdata( $post ); + } + $registry = WP_Block_Type_Registry::get_instance(); + $block = $registry->get_registered( $request['name'] ); + + if ( null === $block ) { + return new WP_Error( + 'block_invalid', + __( 'Invalid block.' ), + array( + 'status' => 404, + ) + ); + } + + $data = array( + 'rendered' => $block->render( $request->get_param( 'attributes' ) ), + ); + return rest_ensure_response( $data ); + } + + /** + * Retrieves block's output schema, conforming to JSON Schema. + * + * @since 5.0.0 + * + * @return array Item schema data. + */ + public function get_item_schema() { + return array( + '$schema' => 'http://json-schema.org/schema#', + 'title' => 'rendered-block', + 'type' => 'object', + 'properties' => array( + 'rendered' => array( + 'description' => __( 'The rendered block.' ), + 'type' => 'string', + 'required' => true, + 'context' => array( 'edit' ), + ), + ), + ); + } +} diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php new file mode 100644 index 0000000000000..66a2e7adad060 --- /dev/null +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php @@ -0,0 +1,39 @@ +post_type ); + if ( ! current_user_can( $post_type->cap->read_post, $post->ID ) ) { + return false; + } + + return parent::check_read_permission( $post ); + } +} diff --git a/src/wp-settings.php b/src/wp-settings.php index f711b9167b2de..efefa1b21485d 100644 --- a/src/wp-settings.php +++ b/src/wp-settings.php @@ -235,6 +235,8 @@ require( ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-users-controller.php' ); require( ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-comments-controller.php' ); require( ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-search-controller.php' ); +require( ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-blocks-controller.php' ); +require( ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-block-renderer-controller.php' ); require( ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-settings-controller.php' ); require( ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-themes-controller.php' ); require( ABSPATH . WPINC . '/rest-api/fields/class-wp-rest-meta-fields.php' ); diff --git a/tests/phpunit/tests/rest-api/rest-block-renderer-controller.php b/tests/phpunit/tests/rest-api/rest-block-renderer-controller.php new file mode 100644 index 0000000000000..472e448b10c0f --- /dev/null +++ b/tests/phpunit/tests/rest-api/rest-block-renderer-controller.php @@ -0,0 +1,529 @@ +user->create( + array( + 'role' => 'editor', + ) + ); + + self::$author_id = $factory->user->create( + array( + 'role' => 'author', + ) + ); + + self::$post_id = $factory->post->create( + array( + 'post_title' => 'Test Post', + ) + ); + } + + /** + * Delete test data after our tests run. + * + * @since 5.0.0 + */ + public static function wpTearDownAfterClass() { + self::delete_user( self::$user_id ); + } + + /** + * Set up each test method. + * + * @since 5.0.0 + */ + public function setUp() { + $this->register_test_block(); + $this->register_post_context_test_block(); + parent::setUp(); + } + + /** + * Tear down each test method. + * + * @since 5.0.0 + */ + public function tearDown() { + WP_Block_Type_Registry::get_instance()->unregister( self::$block_name ); + WP_Block_Type_Registry::get_instance()->unregister( self::$context_block_name ); + parent::tearDown(); + } + + /** + * Register test block. + * + * @since 5.0.0 + */ + public function register_test_block() { + register_block_type( + self::$block_name, + array( + 'attributes' => array( + 'some_string' => array( + 'type' => 'string', + 'default' => 'some_default', + ), + 'some_int' => array( + 'type' => 'integer', + ), + 'some_array' => array( + 'type' => 'array', + 'items' => array( + 'type' => 'integer', + ), + ), + ), + 'render_callback' => array( $this, 'render_test_block' ), + ) + ); + } + + /** + * Register test block with post_id as attribute for post context test. + * + * @since 5.0.0 + */ + public function register_post_context_test_block() { + register_block_type( + self::$context_block_name, + array( + 'attributes' => array(), + 'render_callback' => array( $this, 'render_post_context_test_block' ), + ) + ); + } + + /** + * Test render callback. + * + * @since 5.0.0 + * + * @param array $attributes Props. + * @return string Rendered attributes, which is here just JSON. + */ + public function render_test_block( $attributes ) { + return wp_json_encode( $attributes ); + } + + /** + * Test render callback for testing post context. + * + * @since 5.0.0 + * + * @return string + */ + public function render_post_context_test_block() { + return get_the_title(); + } + + /** + * Check that the route was registered properly. + * + * @ticket 45098 + * + * @covers WP_REST_Block_Renderer_Controller::register_routes() + */ + public function test_register_routes() { + $dynamic_block_names = get_dynamic_block_names(); + $this->assertContains( self::$block_name, $dynamic_block_names ); + + $routes = rest_get_server()->get_routes(); + foreach ( $dynamic_block_names as $dynamic_block_name ) { + $this->assertArrayHasKey( self::$rest_api_route . "(?P$dynamic_block_name)", $routes ); + } + } + + /** + * Test getting item without permissions. + * + * @ticket 45098 + * + * @covers WP_REST_Block_Renderer_Controller::get_item() + */ + public function test_get_item_without_permissions() { + wp_set_current_user( 0 ); + + $request = new WP_REST_Request( 'GET', self::$rest_api_route . self::$block_name ); + $request->set_param( 'context', 'edit' ); + + $response = rest_get_server()->dispatch( $request ); + + $this->assertErrorResponse( 'block_cannot_read', $response, rest_authorization_required_code() ); + } + + /** + * Test getting item without 'edit' context. + * + * @ticket 45098 + */ + public function test_get_item_with_invalid_context() { + wp_set_current_user( self::$user_id ); + + $request = new WP_REST_Request( 'GET', self::$rest_api_route . self::$block_name ); + $response = rest_get_server()->dispatch( $request ); + + $this->assertErrorResponse( 'rest_invalid_param', $response, 400 ); + } + + /** + * Test getting item with invalid block name. + * + * @ticket 45098 + * + * @covers WP_REST_Block_Renderer_Controller::get_item() + */ + public function test_get_item_invalid_block_name() { + wp_set_current_user( self::$user_id ); + $request = new WP_REST_Request( 'GET', self::$rest_api_route . 'core/123' ); + + $request->set_param( 'context', 'edit' ); + $response = rest_get_server()->dispatch( $request ); + + $this->assertErrorResponse( 'rest_no_route', $response, 404 ); + } + + /** + * Check getting item with an invalid param provided. + * + * @ticket 45098 + * + * @covers WP_REST_Block_Renderer_Controller::get_item() + */ + public function test_get_item_invalid_attribute() { + wp_set_current_user( self::$user_id ); + $request = new WP_REST_Request( 'GET', self::$rest_api_route . self::$block_name ); + $request->set_param( 'context', 'edit' ); + $request->set_param( + 'attributes', + array( + 'some_string' => array( 'no!' ), + ) + ); + $response = rest_get_server()->dispatch( $request ); + $this->assertEquals( 400, $response->get_status() ); + } + + /** + * Check getting item with an invalid param provided. + * + * @ticket 45098 + * + * @covers WP_REST_Block_Renderer_Controller::get_item() + */ + public function test_get_item_unrecognized_attribute() { + wp_set_current_user( self::$user_id ); + $request = new WP_REST_Request( 'GET', self::$rest_api_route . self::$block_name ); + $request->set_param( 'context', 'edit' ); + $request->set_param( + 'attributes', + array( + 'unrecognized' => 'yes', + ) + ); + $response = rest_get_server()->dispatch( $request ); + $this->assertEquals( 400, $response->get_status() ); + } + + /** + * Check getting item with default attributes provided. + * + * @ticket 45098 + * + * @covers WP_REST_Block_Renderer_Controller::get_item() + */ + public function test_get_item_default_attributes() { + wp_set_current_user( self::$user_id ); + + $block_type = WP_Block_Type_Registry::get_instance()->get_registered( self::$block_name ); + $defaults = array(); + foreach ( $block_type->attributes as $key => $attribute ) { + $defaults[ $key ] = isset( $attribute['default'] ) ? $attribute['default'] : null; + } + + $request = new WP_REST_Request( 'GET', self::$rest_api_route . self::$block_name ); + $request->set_param( 'context', 'edit' ); + $request->set_param( 'attributes', array() ); + $response = rest_get_server()->dispatch( $request ); + $this->assertEquals( 200, $response->get_status() ); + $data = $response->get_data(); + + $this->assertEquals( $defaults, json_decode( $data['rendered'], true ) ); + $this->assertEquals( + json_decode( $block_type->render( $defaults ) ), + json_decode( $data['rendered'] ) + ); + } + + /** + * Check getting item with attributes provided. + * + * @ticket 45098 + * + * @covers WP_REST_Block_Renderer_Controller::get_item() + */ + public function test_get_item() { + wp_set_current_user( self::$user_id ); + + $block_type = WP_Block_Type_Registry::get_instance()->get_registered( self::$block_name ); + $attributes = array( + 'some_int' => '123', + 'some_string' => 'foo', + 'some_array' => array( 1, '2', 3 ), + ); + + $expected_attributes = $attributes; + $expected_attributes['some_int'] = (int) $expected_attributes['some_int']; + $expected_attributes['some_array'] = array_map( 'intval', $expected_attributes['some_array'] ); + + $request = new WP_REST_Request( 'GET', self::$rest_api_route . self::$block_name ); + $request->set_param( 'context', 'edit' ); + $request->set_param( 'attributes', $attributes ); + $response = rest_get_server()->dispatch( $request ); + $this->assertEquals( 200, $response->get_status() ); + $data = $response->get_data(); + + $this->assertEquals( $expected_attributes, json_decode( $data['rendered'], true ) ); + $this->assertEquals( + json_decode( $block_type->render( $attributes ), true ), + json_decode( $data['rendered'], true ) + ); + } + + + + /** + * Check success response for getting item with layout attribute provided. + * + * @ticket 45098 + */ + public function test_get_item_with_layout() { + wp_set_current_user( self::$user_id ); + + $attributes = array( + 'layout' => 'foo', + ); + + $request = new WP_REST_Request( 'GET', self::$rest_api_route . self::$block_name ); + $request->set_param( 'context', 'edit' ); + $request->set_param( 'attributes', $attributes ); + $response = rest_get_server()->dispatch( $request ); + $this->assertEquals( 200, $response->get_status() ); + } + + /** + * Test getting item with post context. + * + * @ticket 45098 + */ + public function test_get_item_with_post_context() { + wp_set_current_user( self::$user_id ); + + $expected_title = 'Test Post'; + $request = new WP_REST_Request( 'GET', self::$rest_api_route . self::$context_block_name ); + $request->set_param( 'context', 'edit' ); + + // Test without post ID. + $response = rest_get_server()->dispatch( $request ); + + $this->assertEquals( 200, $response->get_status() ); + $data = $response->get_data(); + + $this->assertTrue( empty( $data['rendered'] ) ); + + // Now test with post ID. + $request->set_param( 'post_id', self::$post_id ); + $response = rest_get_server()->dispatch( $request ); + + $this->assertEquals( 200, $response->get_status() ); + $data = $response->get_data(); + + $this->assertEquals( $expected_title, $data['rendered'] ); + } + + /** + * Test getting item with invalid post ID. + * + * @ticket 45098 + */ + public function test_get_item_without_permissions_invalid_post() { + wp_set_current_user( self::$user_id ); + + $request = new WP_REST_Request( 'GET', self::$rest_api_route . self::$context_block_name ); + $request->set_param( 'context', 'edit' ); + + // Test with invalid post ID. + $request->set_param( 'post_id', PHP_INT_MAX ); + $response = rest_get_server()->dispatch( $request ); + + $this->assertErrorResponse( 'block_cannot_read', $response, 403 ); + } + + /** + * Test getting item without permissions to edit context post. + * + * @ticket 45098 + */ + public function test_get_item_without_permissions_cannot_edit_post() { + wp_set_current_user( self::$author_id ); + + $request = new WP_REST_Request( 'GET', self::$rest_api_route . self::$context_block_name ); + $request->set_param( 'context', 'edit' ); + + // Test with private post ID. + $request->set_param( 'post_id', self::$post_id ); + $response = rest_get_server()->dispatch( $request ); + + $this->assertErrorResponse( 'block_cannot_read', $response, 403 ); + } + + /** + * Get item schema. + * + * @ticket 45098 + * + * @covers WP_REST_Block_Renderer_Controller::get_item_schema() + */ + public function test_get_item_schema() { + $request = new WP_REST_Request( 'OPTIONS', self::$rest_api_route . self::$block_name ); + $response = rest_get_server()->dispatch( $request ); + $data = $response->get_data(); + + $this->assertEqualSets( array( 'GET' ), $data['endpoints'][0]['methods'] ); + $this->assertEqualSets( + array( 'name', 'context', 'attributes', 'post_id' ), + array_keys( $data['endpoints'][0]['args'] ) + ); + $this->assertEquals( 'object', $data['endpoints'][0]['args']['attributes']['type'] ); + + $this->assertArrayHasKey( 'schema', $data ); + $this->assertEquals( 'rendered-block', $data['schema']['title'] ); + $this->assertEquals( 'object', $data['schema']['type'] ); + $this->arrayHasKey( 'rendered', $data['schema']['properties'] ); + $this->arrayHasKey( 'string', $data['schema']['properties']['rendered']['type'] ); + $this->assertEquals( array( 'edit' ), $data['schema']['properties']['rendered']['context'] ); + } + + /** + * The update_item() method does not exist for block rendering. + */ + public function test_update_item() { + $this->markTestSkipped( 'Controller does not implement update_item().' ); + } + + /** + * The create_item() method does not exist for block rendering. + */ + public function test_create_item() { + $this->markTestSkipped( 'Controller does not implement create_item().' ); + } + + /** + * The delete_item() method does not exist for block rendering. + */ + public function test_delete_item() { + $this->markTestSkipped( 'Controller does not implement delete_item().' ); + } + + /** + * The get_items() method does not exist for block rendering. + */ + public function test_get_items() { + $this->markTestSkipped( 'Controller does not implement get_items().' ); + } + + /** + * The context_param() method does not exist for block rendering. + */ + public function test_context_param() { + $this->markTestSkipped( 'Controller does not implement context_param().' ); + } + + /** + * The prepare_item() method does not exist for block rendering. + */ + public function test_prepare_item() { + $this->markTestSkipped( 'Controller does not implement prepare_item().' ); + } +} diff --git a/tests/phpunit/tests/rest-api/rest-blocks-controller.php b/tests/phpunit/tests/rest-api/rest-blocks-controller.php new file mode 100644 index 0000000000000..70798b2756138 --- /dev/null +++ b/tests/phpunit/tests/rest-api/rest-blocks-controller.php @@ -0,0 +1,204 @@ + 'wp_block', + 'post_status' => 'publish', + 'post_title' => 'My cool block', + 'post_content' => '

        Hello!

        ', + ) + ); + + self::$user_id = $factory->user->create( + array( + 'role' => 'editor', + ) + ); + } + + /** + * Delete our fake data after our tests run. + * + * @since 5.0.0 + */ + public static function wpTearDownAfterClass() { + wp_delete_post( self::$post_id ); + + self::delete_user( self::$user_id ); + } + + /** + * Test cases for test_capabilities(). + * + * @since 5.0.0 + */ + public function data_capabilities() { + return array( + array( 'create', 'editor', 201 ), + array( 'create', 'author', 201 ), + array( 'create', 'contributor', 403 ), + array( 'create', null, 401 ), + + array( 'read', 'editor', 200 ), + array( 'read', 'author', 200 ), + array( 'read', 'contributor', 200 ), + array( 'read', null, 401 ), + + array( 'update_delete_own', 'editor', 200 ), + array( 'update_delete_own', 'author', 200 ), + array( 'update_delete_own', 'contributor', 403 ), + + array( 'update_delete_others', 'editor', 200 ), + array( 'update_delete_others', 'author', 403 ), + array( 'update_delete_others', 'contributor', 403 ), + array( 'update_delete_others', null, 401 ), + ); + } + + /** + * Exhaustively check that each role either can or cannot create, edit, + * update, and delete reusable blocks. + * + * @ticket 45098 + * + * @dataProvider data_capabilities + * + * @param string $action Action to perform in the test. + * @param string $role User role to test. + * @param int $expected_status Expected HTTP response status. + */ + public function test_capabilities( $action, $role, $expected_status ) { + if ( $role ) { + $user_id = $this->factory->user->create( array( 'role' => $role ) ); + wp_set_current_user( $user_id ); + } else { + wp_set_current_user( 0 ); + } + + switch ( $action ) { + case 'create': + $request = new WP_REST_Request( 'POST', '/wp/v2/blocks' ); + $request->set_body_params( + array( + 'title' => 'Test', + 'content' => '

        Test

        ', + ) + ); + + $response = rest_get_server()->dispatch( $request ); + $this->assertEquals( $expected_status, $response->get_status() ); + + break; + + case 'read': + $request = new WP_REST_Request( 'GET', '/wp/v2/blocks/' . self::$post_id ); + + $response = rest_get_server()->dispatch( $request ); + $this->assertEquals( $expected_status, $response->get_status() ); + + break; + + case 'update_delete_own': + $post_id = wp_insert_post( + array( + 'post_type' => 'wp_block', + 'post_status' => 'publish', + 'post_title' => 'My cool block', + 'post_content' => '

        Hello!

        ', + 'post_author' => $user_id, + ) + ); + + $request = new WP_REST_Request( 'PUT', '/wp/v2/blocks/' . $post_id ); + $request->set_body_params( + array( + 'title' => 'Test', + 'content' => '

        Test

        ', + ) + ); + + $response = rest_get_server()->dispatch( $request ); + $this->assertEquals( $expected_status, $response->get_status() ); + + $request = new WP_REST_Request( 'DELETE', '/wp/v2/blocks/' . $post_id ); + + $response = rest_get_server()->dispatch( $request ); + $this->assertEquals( $expected_status, $response->get_status() ); + + wp_delete_post( $post_id ); + + break; + + case 'update_delete_others': + $request = new WP_REST_Request( 'PUT', '/wp/v2/blocks/' . self::$post_id ); + $request->set_body_params( + array( + 'title' => 'Test', + 'content' => '

        Test

        ', + ) + ); + + $response = rest_get_server()->dispatch( $request ); + $this->assertEquals( $expected_status, $response->get_status() ); + + $request = new WP_REST_Request( 'DELETE', '/wp/v2/blocks/' . self::$post_id ); + + $response = rest_get_server()->dispatch( $request ); + $this->assertEquals( $expected_status, $response->get_status() ); + + break; + + default: + $this->fail( "'$action' is not a valid action." ); + } + + if ( isset( $user_id ) ) { + self::delete_user( $user_id ); + } + } +} diff --git a/tests/phpunit/tests/rest-api/rest-schema-setup.php b/tests/phpunit/tests/rest-api/rest-schema-setup.php index 70330b7f038ee..fecef1350040e 100644 --- a/tests/phpunit/tests/rest-api/rest-schema-setup.php +++ b/tests/phpunit/tests/rest-api/rest-schema-setup.php @@ -99,6 +99,10 @@ public function test_expected_routes_in_schema() { '/wp/v2/pages/(?P[\\d]+)/autosaves/(?P[\\d]+)', '/wp/v2/media', '/wp/v2/media/(?P[\\d]+)', + '/wp/v2/blocks', + '/wp/v2/blocks/(?P[\d]+)', + '/wp/v2/blocks/(?P[\d]+)/autosaves', + '/wp/v2/blocks/(?P[\d]+)/autosaves/(?P[\d]+)', '/wp/v2/types', '/wp/v2/types/(?P[\\w-]+)', '/wp/v2/statuses', @@ -115,6 +119,12 @@ public function test_expected_routes_in_schema() { '/wp/v2/comments', '/wp/v2/comments/(?P[\\d]+)', '/wp/v2/search', + '/wp/v2/block-renderer/(?Pcore/block)', + '/wp/v2/block-renderer/(?Pcore/latest-comments)', + '/wp/v2/block-renderer/(?Pcore/archives)', + '/wp/v2/block-renderer/(?Pcore/categories)', + '/wp/v2/block-renderer/(?Pcore/latest-posts)', + '/wp/v2/block-renderer/(?Pcore/shortcode)', '/wp/v2/settings', '/wp/v2/themes', ); diff --git a/tests/qunit/fixtures/wp-api-generated.js b/tests/qunit/fixtures/wp-api-generated.js index 8a236da00ddef..fe67f6bba4204 100644 --- a/tests/qunit/fixtures/wp-api-generated.js +++ b/tests/qunit/fixtures/wp-api-generated.js @@ -2271,6 +2271,508 @@ mockedApiResponse.Schema = { } ] }, + "/wp/v2/blocks": { + "namespace": "wp/v2", + "methods": [ + "GET", + "POST" + ], + "endpoints": [ + { + "methods": [ + "GET" + ], + "args": { + "context": { + "required": false, + "default": "view", + "enum": [ + "view", + "embed", + "edit" + ], + "description": "Scope under which the request is made; determines fields present in response.", + "type": "string" + }, + "page": { + "required": false, + "default": 1, + "description": "Current page of the collection.", + "type": "integer" + }, + "per_page": { + "required": false, + "default": 10, + "description": "Maximum number of items to be returned in result set.", + "type": "integer" + }, + "search": { + "required": false, + "description": "Limit results to those matching a string.", + "type": "string" + }, + "after": { + "required": false, + "description": "Limit response to posts published after a given ISO8601 compliant date.", + "type": "string" + }, + "before": { + "required": false, + "description": "Limit response to posts published before a given ISO8601 compliant date.", + "type": "string" + }, + "exclude": { + "required": false, + "default": [], + "description": "Ensure result set excludes specific IDs.", + "type": "array", + "items": { + "type": "integer" + } + }, + "include": { + "required": false, + "default": [], + "description": "Limit result set to specific IDs.", + "type": "array", + "items": { + "type": "integer" + } + }, + "offset": { + "required": false, + "description": "Offset the result set by a specific number of items.", + "type": "integer" + }, + "order": { + "required": false, + "default": "desc", + "enum": [ + "asc", + "desc" + ], + "description": "Order sort attribute ascending or descending.", + "type": "string" + }, + "orderby": { + "required": false, + "default": "date", + "enum": [ + "author", + "date", + "id", + "include", + "modified", + "parent", + "relevance", + "slug", + "include_slugs", + "title" + ], + "description": "Sort collection by object attribute.", + "type": "string" + }, + "slug": { + "required": false, + "description": "Limit result set to posts with one or more specific slugs.", + "type": "array", + "items": { + "type": "string" + } + }, + "status": { + "required": false, + "default": "publish", + "description": "Limit result set to posts assigned one or more statuses.", + "type": "array", + "items": { + "enum": [ + "publish", + "future", + "draft", + "pending", + "private", + "trash", + "auto-draft", + "inherit", + "request-pending", + "request-confirmed", + "request-failed", + "request-completed", + "any" + ], + "type": "string" + } + } + } + }, + { + "methods": [ + "POST" + ], + "args": { + "date": { + "required": false, + "description": "The date the object was published, in the site's timezone.", + "type": "string" + }, + "date_gmt": { + "required": false, + "description": "The date the object was published, as GMT.", + "type": "string" + }, + "slug": { + "required": false, + "description": "An alphanumeric identifier for the object unique to its type.", + "type": "string" + }, + "status": { + "required": false, + "enum": [ + "publish", + "future", + "draft", + "pending", + "private" + ], + "description": "A named status for the object.", + "type": "string" + }, + "password": { + "required": false, + "description": "A password to protect access to the content and excerpt.", + "type": "string" + }, + "title": { + "required": false, + "description": "The title for the object.", + "type": "object" + }, + "content": { + "required": false, + "description": "The content for the object.", + "type": "object" + }, + "template": { + "required": false, + "description": "The theme file to use to display the object.", + "type": "string" + } + } + } + ], + "_links": { + "self": "http://example.org/index.php?rest_route=/wp/v2/blocks" + } + }, + "/wp/v2/blocks/(?P[\\d]+)": { + "namespace": "wp/v2", + "methods": [ + "GET", + "POST", + "PUT", + "PATCH", + "DELETE" + ], + "endpoints": [ + { + "methods": [ + "GET" + ], + "args": { + "id": { + "required": false, + "description": "Unique identifier for the object.", + "type": "integer" + }, + "context": { + "required": false, + "default": "view", + "enum": [ + "view", + "embed", + "edit" + ], + "description": "Scope under which the request is made; determines fields present in response.", + "type": "string" + }, + "password": { + "required": false, + "description": "The password for the post if it is password protected.", + "type": "string" + } + } + }, + { + "methods": [ + "POST", + "PUT", + "PATCH" + ], + "args": { + "id": { + "required": false, + "description": "Unique identifier for the object.", + "type": "integer" + }, + "date": { + "required": false, + "description": "The date the object was published, in the site's timezone.", + "type": "string" + }, + "date_gmt": { + "required": false, + "description": "The date the object was published, as GMT.", + "type": "string" + }, + "slug": { + "required": false, + "description": "An alphanumeric identifier for the object unique to its type.", + "type": "string" + }, + "status": { + "required": false, + "enum": [ + "publish", + "future", + "draft", + "pending", + "private" + ], + "description": "A named status for the object.", + "type": "string" + }, + "password": { + "required": false, + "description": "A password to protect access to the content and excerpt.", + "type": "string" + }, + "title": { + "required": false, + "description": "The title for the object.", + "type": "object" + }, + "content": { + "required": false, + "description": "The content for the object.", + "type": "object" + }, + "template": { + "required": false, + "description": "The theme file to use to display the object.", + "type": "string" + } + } + }, + { + "methods": [ + "DELETE" + ], + "args": { + "id": { + "required": false, + "description": "Unique identifier for the object.", + "type": "integer" + }, + "force": { + "required": false, + "default": false, + "description": "Whether to bypass trash and force deletion.", + "type": "boolean" + } + } + } + ] + }, + "/wp/v2/blocks/(?P[\\d]+)/autosaves": { + "namespace": "wp/v2", + "methods": [ + "GET", + "POST" + ], + "endpoints": [ + { + "methods": [ + "GET" + ], + "args": { + "parent": { + "required": false, + "description": "The ID for the parent of the object.", + "type": "integer" + }, + "context": { + "required": false, + "default": "view", + "enum": [ + "view", + "embed", + "edit" + ], + "description": "Scope under which the request is made; determines fields present in response.", + "type": "string" + }, + "page": { + "required": false, + "default": 1, + "description": "Current page of the collection.", + "type": "integer" + }, + "per_page": { + "required": false, + "description": "Maximum number of items to be returned in result set.", + "type": "integer" + }, + "search": { + "required": false, + "description": "Limit results to those matching a string.", + "type": "string" + }, + "exclude": { + "required": false, + "default": [], + "description": "Ensure result set excludes specific IDs.", + "type": "array", + "items": { + "type": "integer" + } + }, + "include": { + "required": false, + "default": [], + "description": "Limit result set to specific IDs.", + "type": "array", + "items": { + "type": "integer" + } + }, + "offset": { + "required": false, + "description": "Offset the result set by a specific number of items.", + "type": "integer" + }, + "order": { + "required": false, + "default": "desc", + "enum": [ + "asc", + "desc" + ], + "description": "Order sort attribute ascending or descending.", + "type": "string" + }, + "orderby": { + "required": false, + "default": "date", + "enum": [ + "date", + "id", + "include", + "relevance", + "slug", + "include_slugs", + "title" + ], + "description": "Sort collection by object attribute.", + "type": "string" + } + } + }, + { + "methods": [ + "POST" + ], + "args": { + "parent": { + "required": false, + "description": "The ID for the parent of the object.", + "type": "integer" + }, + "author": { + "required": false, + "description": "The ID for the author of the object.", + "type": "integer" + }, + "date": { + "required": false, + "description": "The date the object was published, in the site's timezone.", + "type": "string" + }, + "date_gmt": { + "required": false, + "description": "The date the object was published, as GMT.", + "type": "string" + }, + "id": { + "required": false, + "description": "Unique identifier for the object.", + "type": "integer" + }, + "modified": { + "required": false, + "description": "The date the object was last modified, in the site's timezone.", + "type": "string" + }, + "modified_gmt": { + "required": false, + "description": "The date the object was last modified, as GMT.", + "type": "string" + }, + "slug": { + "required": false, + "description": "An alphanumeric identifier for the object unique to its type.", + "type": "string" + }, + "title": { + "required": false, + "description": "The title for the object.", + "type": "object" + }, + "content": { + "required": false, + "description": "The content for the object.", + "type": "object" + } + } + } + ] + }, + "/wp/v2/blocks/(?P[\\d]+)/autosaves/(?P[\\d]+)": { + "namespace": "wp/v2", + "methods": [ + "GET" + ], + "endpoints": [ + { + "methods": [ + "GET" + ], + "args": { + "parent": { + "required": false, + "description": "The ID for the parent of the object.", + "type": "integer" + }, + "id": { + "required": false, + "description": "The ID for the object.", + "type": "integer" + }, + "context": { + "required": false, + "default": "view", + "enum": [ + "view", + "embed", + "edit" + ], + "description": "Scope under which the request is made; determines fields present in response.", + "type": "string" + } + } + } + ] + }, "/wp/v2/types": { "namespace": "wp/v2", "methods": [ @@ -3862,6 +4364,240 @@ mockedApiResponse.Schema = { "self": "http://example.org/index.php?rest_route=/wp/v2/search" } }, + "/wp/v2/block-renderer/(?Pcore/block)": { + "namespace": "wp/v2", + "methods": [ + "GET" + ], + "endpoints": [ + { + "methods": [ + "GET" + ], + "args": { + "name": { + "required": false, + "description": "Unique registered name for the block.", + "type": "string" + }, + "context": { + "required": false, + "default": "view", + "enum": [ + "edit" + ], + "description": "Scope under which the request is made; determines fields present in response.", + "type": "string" + }, + "attributes": { + "required": false, + "description": "Attributes for core/block block", + "type": "object" + }, + "post_id": { + "required": false, + "description": "ID of the post context.", + "type": "integer" + } + } + } + ] + }, + "/wp/v2/block-renderer/(?Pcore/latest-comments)": { + "namespace": "wp/v2", + "methods": [ + "GET" + ], + "endpoints": [ + { + "methods": [ + "GET" + ], + "args": { + "name": { + "required": false, + "description": "Unique registered name for the block.", + "type": "string" + }, + "context": { + "required": false, + "default": "view", + "enum": [ + "edit" + ], + "description": "Scope under which the request is made; determines fields present in response.", + "type": "string" + }, + "attributes": { + "required": false, + "description": "Attributes for core/latest-comments block", + "type": "object" + }, + "post_id": { + "required": false, + "description": "ID of the post context.", + "type": "integer" + } + } + } + ] + }, + "/wp/v2/block-renderer/(?Pcore/archives)": { + "namespace": "wp/v2", + "methods": [ + "GET" + ], + "endpoints": [ + { + "methods": [ + "GET" + ], + "args": { + "name": { + "required": false, + "description": "Unique registered name for the block.", + "type": "string" + }, + "context": { + "required": false, + "default": "view", + "enum": [ + "edit" + ], + "description": "Scope under which the request is made; determines fields present in response.", + "type": "string" + }, + "attributes": { + "required": false, + "description": "Attributes for core/archives block", + "type": "object" + }, + "post_id": { + "required": false, + "description": "ID of the post context.", + "type": "integer" + } + } + } + ] + }, + "/wp/v2/block-renderer/(?Pcore/categories)": { + "namespace": "wp/v2", + "methods": [ + "GET" + ], + "endpoints": [ + { + "methods": [ + "GET" + ], + "args": { + "name": { + "required": false, + "description": "Unique registered name for the block.", + "type": "string" + }, + "context": { + "required": false, + "default": "view", + "enum": [ + "edit" + ], + "description": "Scope under which the request is made; determines fields present in response.", + "type": "string" + }, + "attributes": { + "required": false, + "description": "Attributes for core/categories block", + "type": "object" + }, + "post_id": { + "required": false, + "description": "ID of the post context.", + "type": "integer" + } + } + } + ] + }, + "/wp/v2/block-renderer/(?Pcore/latest-posts)": { + "namespace": "wp/v2", + "methods": [ + "GET" + ], + "endpoints": [ + { + "methods": [ + "GET" + ], + "args": { + "name": { + "required": false, + "description": "Unique registered name for the block.", + "type": "string" + }, + "context": { + "required": false, + "default": "view", + "enum": [ + "edit" + ], + "description": "Scope under which the request is made; determines fields present in response.", + "type": "string" + }, + "attributes": { + "required": false, + "description": "Attributes for core/latest-posts block", + "type": "object" + }, + "post_id": { + "required": false, + "description": "ID of the post context.", + "type": "integer" + } + } + } + ] + }, + "/wp/v2/block-renderer/(?Pcore/shortcode)": { + "namespace": "wp/v2", + "methods": [ + "GET" + ], + "endpoints": [ + { + "methods": [ + "GET" + ], + "args": { + "name": { + "required": false, + "description": "Unique registered name for the block.", + "type": "string" + }, + "context": { + "required": false, + "default": "view", + "enum": [ + "edit" + ], + "description": "Scope under which the request is made; determines fields present in response.", + "type": "string" + }, + "attributes": { + "required": false, + "description": "Attributes for core/shortcode block", + "type": "object" + }, + "post_id": { + "required": false, + "description": "ID of the post context.", + "type": "integer" + } + } + } + ] + }, "/wp/v2/settings": { "namespace": "wp/v2", "methods": [ @@ -4339,16 +5075,16 @@ mockedApiResponse.postRevisions = [ } }, { - "author": 389, + "author": 405, "date": "2017-02-14T00:00:00", "date_gmt": "2017-02-14T00:00:00", - "id": 36710, + "id": 1527, "modified": "2017-02-14T00:00:00", "modified_gmt": "2017-02-14T00:00:00", - "parent": 36709, - "slug": "36709-revision-v1", + "parent": 1526, + "slug": "1526-revision-v1", "guid": { - "rendered": "http://example.org/?p=36710" + "rendered": "http://example.org/?p=1527" }, "title": { "rendered": "REST API Client Fixture: Post" @@ -4362,7 +5098,7 @@ mockedApiResponse.postRevisions = [ "_links": { "parent": [ { - "href": "http://example.org/index.php?rest_route=/wp/v2/posts/36709" + "href": "http://example.org/index.php?rest_route=/wp/v2/posts/1526" } ] } @@ -4394,16 +5130,16 @@ mockedApiResponse.revision = { mockedApiResponse.postAutosaves = [ { - "author": 389, + "author": 405, "date": "2017-02-14T00:00:00", "date_gmt": "2017-02-14T00:00:00", - "id": 36711, + "id": 1528, "modified": "2017-02-14T00:00:00", "modified_gmt": "2017-02-14T00:00:00", - "parent": 36709, - "slug": "36709-autosave-v1", + "parent": 1526, + "slug": "1526-autosave-v1", "guid": { - "rendered": "http://example.org/?p=36711" + "rendered": "http://example.org/?p=1528" }, "title": { "rendered": "" @@ -4417,7 +5153,7 @@ mockedApiResponse.postAutosaves = [ "_links": { "parent": [ { - "href": "http://example.org/index.php?rest_route=/wp/v2/posts/36709" + "href": "http://example.org/index.php?rest_route=/wp/v2/posts/1526" } ] } @@ -4425,16 +5161,16 @@ mockedApiResponse.postAutosaves = [ ]; mockedApiResponse.autosave = { - "author": 389, + "author": 405, "date": "2017-02-14T00:00:00", "date_gmt": "2017-02-14T00:00:00", - "id": 36711, + "id": 1528, "modified": "2017-02-14T00:00:00", "modified_gmt": "2017-02-14T00:00:00", - "parent": 36709, - "slug": "36709-autosave-v1", + "parent": 1526, + "slug": "1526-autosave-v1", "guid": { - "rendered": "http://example.org/?p=36711" + "rendered": "http://example.org/?p=1528" }, "title": { "rendered": "" @@ -4599,16 +5335,16 @@ mockedApiResponse.pageRevisions = [ } }, { - "author": 389, + "author": 405, "date": "2017-02-14T00:00:00", "date_gmt": "2017-02-14T00:00:00", - "id": 36713, + "id": 1530, "modified": "2017-02-14T00:00:00", "modified_gmt": "2017-02-14T00:00:00", - "parent": 36712, - "slug": "36712-revision-v1", + "parent": 1529, + "slug": "1529-revision-v1", "guid": { - "rendered": "http://example.org/?p=36713" + "rendered": "http://example.org/?p=1530" }, "title": { "rendered": "REST API Client Fixture: Page" @@ -4622,7 +5358,7 @@ mockedApiResponse.pageRevisions = [ "_links": { "parent": [ { - "href": "http://example.org/index.php?rest_route=/wp/v2/pages/36712" + "href": "http://example.org/index.php?rest_route=/wp/v2/pages/1529" } ] } @@ -4654,16 +5390,16 @@ mockedApiResponse.pageRevision = { mockedApiResponse.pageAutosaves = [ { - "author": 389, + "author": 405, "date": "2017-02-14T00:00:00", "date_gmt": "2017-02-14T00:00:00", - "id": 36714, + "id": 1531, "modified": "2017-02-14T00:00:00", "modified_gmt": "2017-02-14T00:00:00", - "parent": 36712, - "slug": "36712-autosave-v1", + "parent": 1529, + "slug": "1529-autosave-v1", "guid": { - "rendered": "http://example.org/?p=36714" + "rendered": "http://example.org/?p=1531" }, "title": { "rendered": "" @@ -4677,7 +5413,7 @@ mockedApiResponse.pageAutosaves = [ "_links": { "parent": [ { - "href": "http://example.org/index.php?rest_route=/wp/v2/pages/36712" + "href": "http://example.org/index.php?rest_route=/wp/v2/pages/1529" } ] } @@ -4685,16 +5421,16 @@ mockedApiResponse.pageAutosaves = [ ]; mockedApiResponse.pageAutosave = { - "author": 389, + "author": 405, "date": "2017-02-14T00:00:00", "date_gmt": "2017-02-14T00:00:00", - "id": 36714, + "id": 1531, "modified": "2017-02-14T00:00:00", "modified_gmt": "2017-02-14T00:00:00", - "parent": 36712, - "slug": "36712-autosave-v1", + "parent": 1529, + "slug": "1529-autosave-v1", "guid": { - "rendered": "http://example.org/?p=36714" + "rendered": "http://example.org/?p=1531" }, "title": { "rendered": "" @@ -4890,6 +5626,33 @@ mockedApiResponse.TypesCollection = { } ] } + }, + "wp_block": { + "description": "", + "hierarchical": false, + "name": "Blocks", + "slug": "wp_block", + "taxonomies": [], + "rest_base": "blocks", + "_links": { + "collection": [ + { + "href": "http://example.org/index.php?rest_route=/wp/v2/types" + } + ], + "wp:items": [ + { + "href": "http://example.org/index.php?rest_route=/wp/v2/blocks" + } + ], + "curies": [ + { + "name": "wp", + "href": "https://api.w.org/{rel}", + "templated": true + } + ] + } } }; From e9abe64bdc3ac3367f46f6e4108016a21e6b6e01 Mon Sep 17 00:00:00 2001 From: Daniel Bachhuber Date: Tue, 23 Oct 2018 10:58:35 +0000 Subject: [PATCH 511/537] Blocks: Fix coding standards introduced in [43804]. Props Presskopp, swissspidy. See #45098 git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43806 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/post.php | 4 ++-- .../endpoints/class-wp-rest-block-renderer-controller.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/wp-includes/post.php b/src/wp-includes/post.php index 302d2210d5cc9..d040f442e28d6 100644 --- a/src/wp-includes/post.php +++ b/src/wp-includes/post.php @@ -229,7 +229,7 @@ function create_initial_post_types() { 'wp_block', array( 'labels' => array( - 'name' => __( 'Blocks'), + 'name' => __( 'Blocks' ), 'singular_name' => __( 'Block' ), 'search_items' => __( 'Search Blocks' ), ), @@ -242,7 +242,7 @@ function create_initial_post_types() { 'rest_base' => 'blocks', 'rest_controller_class' => 'WP_REST_Blocks_Controller', 'capability_type' => 'block', - 'capabilities' => array( + 'capabilities' => array( // You need to be able to edit posts, in order to read blocks in their raw form. 'read' => 'edit_posts', // You need to be able to publish posts, in order to create blocks. diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php index a4f17283c583a..f0e1e7db47f7e 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php @@ -93,7 +93,7 @@ public function get_item_permissions_check( $request ) { if ( ! $post || ! current_user_can( 'edit_post', $post->ID ) ) { return new WP_Error( 'block_cannot_read', - __( 'Sorry, you are not allowed to read blocks of this post' ), + __( 'Sorry, you are not allowed to read blocks of this post.' ), array( 'status' => rest_authorization_required_code(), ) From 838bad624ca4a9dba978e10e30d1eb2135a16249 Mon Sep 17 00:00:00 2001 From: Gary Pendergast Date: Tue, 23 Oct 2018 11:03:20 +0000 Subject: [PATCH 512/537] Dashboard: Remove the Try Gutenberg callout. Block or block not. There is no try. Props mukesh27. See #45063. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43807 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/admin-ajax.php | 1 - src/wp-admin/css/common.css | 1 - src/wp-admin/css/dashboard.css | 94 ++------------ src/wp-admin/includes/ajax-actions.php | 13 -- src/wp-admin/includes/class-wp-screen.php | 17 --- src/wp-admin/includes/dashboard.php | 149 ---------------------- src/wp-admin/index.php | 26 ---- src/wp-admin/js/dashboard.js | 43 ------- src/wp-admin/plugins.php | 6 - src/wp-includes/default-filters.php | 1 - 10 files changed, 12 insertions(+), 339 deletions(-) diff --git a/src/wp-admin/admin-ajax.php b/src/wp-admin/admin-ajax.php index fb92dbf0a9fbb..cbef0787dbc31 100644 --- a/src/wp-admin/admin-ajax.php +++ b/src/wp-admin/admin-ajax.php @@ -67,7 +67,6 @@ 'get-post-thumbnail-html', 'get-community-events', 'edit-theme-plugin-file', 'wp-privacy-export-personal-data', 'wp-privacy-erase-personal-data', - 'update-try-gutenberg-panel', ); // Deprecated diff --git a/src/wp-admin/css/common.css b/src/wp-admin/css/common.css index 06b6c51921ebe..1bfd133e4a396 100644 --- a/src/wp-admin/css/common.css +++ b/src/wp-admin/css/common.css @@ -764,7 +764,6 @@ img.emoji { /* @todo can we combine these into a class or use an existing dashicon one? */ .welcome-panel .welcome-panel-close:before, -.try-gutenberg-panel .try-gutenberg-panel-close:before, .tagchecklist .ntdelbutton .remove-tag-icon:before, #bulk-titles div a:before, .notice-dismiss:before { diff --git a/src/wp-admin/css/dashboard.css b/src/wp-admin/css/dashboard.css index 9e818420db707..14d6a36d3b096 100644 --- a/src/wp-admin/css/dashboard.css +++ b/src/wp-admin/css/dashboard.css @@ -98,8 +98,7 @@ } /* Welcome Panel */ -.welcome-panel, -.try-gutenberg-panel { +.welcome-panel { position: relative; overflow: auto; margin: 16px 0; @@ -111,8 +110,7 @@ line-height: 2.1em; } -.welcome-panel h2, -.try-gutenberg-panel h2 { +.welcome-panel h2 { margin: 0; font-size: 21px; font-weight: 400; @@ -124,41 +122,24 @@ font-size: 16px; } -.try-gutenberg-panel h3 { - margin: 17px 0 0; - font-size: 16px; - line-height: 1.4; -} - -.welcome-panel li, -.try-gutenberg-panel li { +.welcome-panel li { font-size: 14px; } -.welcome-panel p, -.try-gutenberg-panel p { +.welcome-panel p { color: #72777c; } -.welcome-panel a, -.try-gutenberg-action a { +.welcome-panel a { text-decoration: none; } -.welcome-panel .about-description, -.try-gutenberg-panel .about-description { +.welcome-panel .about-description { font-size: 16px; margin: 0; } -.try-gutenberg-panel-content hr { - margin: 20px -23px 0 -23px; - border-top: 1px solid #f3f4f5; - border-bottom: none; -} - -.welcome-panel .welcome-panel-close, -.try-gutenberg-panel .try-gutenberg-panel-close { +.welcome-panel .welcome-panel-close { position: absolute; z-index: 10; top: 10px; @@ -169,8 +150,7 @@ text-decoration: none; } -.welcome-panel .welcome-panel-close:before, -.try-gutenberg-panel .try-gutenberg-panel-close:before { +.welcome-panel .welcome-panel-close:before { position: absolute; top: 8px; left: 0; @@ -185,23 +165,11 @@ white-space: normal; } -.welcome-panel-content, -.try-gutenberg-panel-content { +.welcome-panel-content { margin: 0 13px; max-width: 1500px; } -.try-gutenberg-panel img { - margin-top: 23px; - width: calc( 100% - 40px ); - border: 1px solid #f3f4f5; -} - -.try-gutenberg-panel .install-now.updating-message:before, -.try-gutenberg-panel .install-now.updated-message:before { - margin-top: 11px; -} - .welcome-panel .welcome-panel-column-container { clear: both; position: relative; @@ -213,10 +181,6 @@ float: left; } -.try-gutenberg-panel .try-gutenberg-panel-column > * { - padding-right: 40px; -} - .ie8 .welcome-panel .welcome-panel-column { min-width: 230px; } @@ -225,27 +189,11 @@ width: 36%; } -.try-gutenberg-panel .try-gutenberg-panel-column-container { - display: -ms-grid; - display: grid; - -ms-grid-columns: 36% 32% 32%; - grid-template-columns: 36% 32% 32%; - margin-bottom: 13px; -} - -.try-gutenberg-panel .try-gutenberg-panel-column:not(.try-gutenberg-panel-image-column) { - display: -ms-grid; - display: grid; - -ms-grid-rows: auto 100px; - grid-template-rows: auto 100px; -} - .welcome-panel-column p.hide-if-no-customize { margin-top: 10px; } -.welcome-panel-column p, -.try-gutenberg-panel-column p { +.welcome-panel-column p { margin-top: 7px; color: #444; } @@ -1260,17 +1208,6 @@ a.rsswidget { } } -@media screen and (max-width: 1024px) { - .try-gutenberg-panel .try-gutenberg-panel-column-container { - -ms-grid-columns: 50% 50%; - grid-template-columns: 50% 50%; - } - - .try-gutenberg-panel .try-gutenberg-panel-image-column { - display: none; - } -} - @media screen and (max-width: 870px) { .welcome-panel .welcome-panel-column, .welcome-panel .welcome-panel-column:first-child { @@ -1279,11 +1216,6 @@ a.rsswidget { width: 100%; } - .try-gutenberg-panel .try-gutenberg-panel-column-container { - -ms-grid-columns: 100%; - grid-template-columns: 100%; - } - .welcome-panel .welcome-panel-column li { display: inline-block; margin-right: 13px; @@ -1334,8 +1266,7 @@ a.rsswidget { /* Smartphone */ @media screen and (max-width: 600px) { /* Keep the close icon from overlapping the Welcome text. */ - .welcome-panel .welcome-panel-close, - .try-gutenberg-panel .try-gutenberg-panel-close { + .welcome-panel .welcome-panel-close { overflow: hidden; text-indent: 40px; white-space: nowrap; @@ -1347,8 +1278,7 @@ a.rsswidget { } /* Make the close icon larger for tappability. */ - .welcome-panel .welcome-panel-close:before, - .try-gutenberg-panel .try-gutenberg-panel-close:before { + .welcome-panel .welcome-panel-close:before { font-size: 20px; top: 5px; left: -35px; diff --git a/src/wp-admin/includes/ajax-actions.php b/src/wp-admin/includes/ajax-actions.php index 60c5f207100cf..8fb348c6d3873 100644 --- a/src/wp-admin/includes/ajax-actions.php +++ b/src/wp-admin/includes/ajax-actions.php @@ -1484,19 +1484,6 @@ function wp_ajax_update_welcome_panel() { wp_die( 1 ); } -/** - * Ajax handler for updating whether to display the Try Gutenberg panel. - * - * @since 4.9.8 - */ -function wp_ajax_update_try_gutenberg_panel() { - check_ajax_referer( 'try-gutenberg-panel-nonce', 'trygutenbergpanelnonce' ); - - update_user_meta( get_current_user_id(), 'show_try_gutenberg_panel', empty( $_POST['visible'] ) ? 0 : 1 ); - - wp_die( 1 ); -} - /** * Ajax handler for retrieving menu meta boxes. * diff --git a/src/wp-admin/includes/class-wp-screen.php b/src/wp-admin/includes/class-wp-screen.php index 6798b1c5cfb88..84029aa906c49 100644 --- a/src/wp-admin/includes/class-wp-screen.php +++ b/src/wp-admin/includes/class-wp-screen.php @@ -1056,23 +1056,6 @@ public function render_meta_boxes_preferences() { echo _x( 'Welcome', 'Welcome panel' ) . "\n"; } - if ( 'dashboard' === $this->id && has_action( 'try_gutenberg_panel' ) ) { - if ( isset( $_GET['try_gutenberg'] ) ) { - $try_gutenberg_checked = empty( $_GET['try_gutenberg'] ) ? 0 : 1; - update_user_meta( get_current_user_id(), 'show_try_gutenberg_panel', $try_gutenberg_checked ); - } else { - $try_gutenberg_checked = get_user_meta( get_current_user_id(), 'show_try_gutenberg_panel', true ); - if ( '' === $try_gutenberg_checked ) { - $try_gutenberg_checked = '1'; - } - if ( '2' === $try_gutenberg_checked && wp_get_current_user()->user_email != get_option( 'admin_email' ) ) { - $try_gutenberg_checked = false; - } - } - echo '\n"; - } ?> -
        -

        - -

        - -
        - -
        -
        - - - <?php esc_attr_e( 'Screenshot from the Gutenberg interface' ); ?> - -
        -
        - -
        -

        - -

        - - testing, filing bugs, or contributing on the GitHub repository.' ), - 'https://make.wordpress.org/test/handbook/call-for-testing/gutenberg-testing/', - 'https://github.com/WordPress/gutenberg/issues', - 'https://github.com/WordPress/gutenberg/blob/master/CONTRIBUTING.md' - ); - ?> -

        -
        - -
        - -

        - - -

        - Learn more about Gutenberg' ), - __( 'https://wordpress.org/gutenberg/' ) - ); - - /** - * Filters the "Learn more" link in the Try Gutenberg panel. - * - * It allows hosts or site owners to change the link, to provide extra - * information about Gutenberg, specific to their service. - * - * WARNING: This filter will only exist in the 4.9.x series, it will not be - * added to WordPress 5.0 and later. - * - * @since 4.9.8 - */ - echo apply_filters( 'try_gutenberg_learn_more_link', $learnmore ); - ?> -

        -
        -
        - -
        - -
        -

        - -

        - - Classic Editor plugin to keep using the current editor until you’re ready to make the switch.' ), - __( 'https://wordpress.org/plugins/classic-editor' ) - ); - ?> -

        -
        - - -
        -

        -
        - -
        -
        -
        -

        -user_email !== get_option( 'admin_email' ) ); - if ( $hide ) - $classes .= ' hidden'; ?> - -
        - - - -
        - Date: Tue, 23 Oct 2018 15:52:15 +0000 Subject: [PATCH 513/537] Importing Twenty Nineteen, our new default theme for 2019, set for 5.0. Let Gutenberg shine with this simple, fast, and powerful theme. Initial development occurred on GitHub. See: https://github.com/WordPress/twentynineteen Props allancole, karmatosed, kjellr, yingling017, mrasharirfan, milana_cap, fabiankaegy, westonruter, aaronjorbin, netweb, b-07, khleomix, blowery, dereksmart, jasmussen, audrasjb, nielslange, mmaumio, dimadin, joyously, anevins12. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43808 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-content/themes/twentynineteen/404.php | 33 + .../themes/twentynineteen/archive.php | 55 + .../class-twentynineteen-svg-icons.php | 430 ++ .../class-twentynineteen-walker-comment.php | 104 + .../themes/twentynineteen/comments.php | 127 + .../themes/twentynineteen/footer.php | 36 + .../themes/twentynineteen/functions.php | 187 + .../themes/twentynineteen/header.php | 76 + .../themes/twentynineteen/inc/customizer.php | 62 + .../twentynineteen/inc/icon-functions.php | 51 + .../twentynineteen/inc/template-functions.php | 226 + .../twentynineteen/inc/template-tags.php | 247 + .../themes/twentynineteen/inc/ui-icons.php | 7 + .../themes/twentynineteen/index.php | 45 + .../themes/twentynineteen/js/customizer.js | 11 + .../twentynineteen/js/skip-link-focus-fix.js | 31 + .../themes/twentynineteen/languages/ip3.pot | 186 + .../themes/twentynineteen/package-lock.json | 4528 +++++++++++++++++ .../themes/twentynineteen/package.json | 43 + src/wp-content/themes/twentynineteen/page.php | 37 + .../themes/twentynineteen/postcss.config.js | 5 + .../themes/twentynineteen/print.css | 105 + .../themes/twentynineteen/print.scss | 128 + .../themes/twentynineteen/readme.txt | 65 + .../twentynineteen/sass/_normalize.scss | 341 ++ .../twentynineteen/sass/blocks/_blocks.scss | 631 +++ .../sass/elements/_elements.scss | 109 + .../twentynineteen/sass/elements/_lists.scss | 33 + .../twentynineteen/sass/elements/_tables.scss | 8 + .../twentynineteen/sass/forms/_buttons.scss | 33 + .../twentynineteen/sass/forms/_fields.scss | 49 + .../twentynineteen/sass/forms/_forms.scss | 3 + .../twentynineteen/sass/layout/_layout.scss | 11 + .../twentynineteen/sass/media/_captions.scss | 17 + .../twentynineteen/sass/media/_galleries.scss | 46 + .../twentynineteen/sass/media/_media.scss | 41 + .../sass/mixins/_mixins-master.scss | 85 + .../sass/mixins/_utilities.scss | 44 + .../sass/modules/_accessibility.scss | 38 + .../sass/modules/_alignments.scss | 14 + .../sass/modules/_clearings.scss | 23 + .../sass/navigation/_links.scss | 21 + .../sass/navigation/_menus.scss | 249 + .../sass/navigation/_navigation.scss | 14 + .../sass/navigation/_next-previous.scss | 177 + .../twentynineteen/sass/site/_site.scss | 27 + .../sass/site/footer/_site-footer.scss | 29 + .../site/header/_site-featured-image.scss | 181 + .../sass/site/header/_site-header.scss | 128 + .../sass/site/primary/_archives.scss | 65 + .../sass/site/primary/_comments.scss | 404 ++ .../sass/site/primary/_posts-and-pages.scss | 240 + .../sass/site/secondary/_widgets.scss | 8 + .../twentynineteen/sass/typography/_copy.scss | 61 + .../sass/typography/_headings.scss | 139 + .../sass/typography/_typography.scss | 32 + .../sass/variables-site/_colors.scss | 34 + .../sass/variables-site/_columns.scss | 16 + .../sass/variables-site/_fonts.scss | 23 + .../sass/variables-site/_structure.scss | 13 + .../sass/variables-site/_transitions.scss | 6 + .../sass/variables-site/_variables-site.scss | 5 + .../themes/twentynineteen/screenshot.png | Bin 0 -> 836593 bytes .../themes/twentynineteen/search.php | 56 + .../themes/twentynineteen/single.php | 60 + .../twentynineteen/style-editor-frame.css | 60 + .../twentynineteen/style-editor-frame.scss | 67 + .../themes/twentynineteen/style-editor.css | 552 ++ .../themes/twentynineteen/style-editor.scss | 524 ++ .../themes/twentynineteen/style-rtl.css | 3243 ++++++++++++ .../themes/twentynineteen/style.css | 3243 ++++++++++++ .../themes/twentynineteen/style.scss | 109 + .../template-parts/content/content-none.php | 52 + .../template-parts/content/content-page.php | 56 + .../template-parts/content/content-single.php | 87 + .../template-parts/content/content.php | 59 + .../template-parts/header/entry-header.php | 27 + .../template-parts/header/site-branding.php | 56 + .../template-parts/post/author-info.php | 21 + .../template-parts/post/discussion-meta.php | 42 + 80 files changed, 18537 insertions(+) create mode 100644 src/wp-content/themes/twentynineteen/404.php create mode 100644 src/wp-content/themes/twentynineteen/archive.php create mode 100644 src/wp-content/themes/twentynineteen/classes/class-twentynineteen-svg-icons.php create mode 100644 src/wp-content/themes/twentynineteen/classes/class-twentynineteen-walker-comment.php create mode 100644 src/wp-content/themes/twentynineteen/comments.php create mode 100644 src/wp-content/themes/twentynineteen/footer.php create mode 100644 src/wp-content/themes/twentynineteen/functions.php create mode 100644 src/wp-content/themes/twentynineteen/header.php create mode 100644 src/wp-content/themes/twentynineteen/inc/customizer.php create mode 100644 src/wp-content/themes/twentynineteen/inc/icon-functions.php create mode 100644 src/wp-content/themes/twentynineteen/inc/template-functions.php create mode 100644 src/wp-content/themes/twentynineteen/inc/template-tags.php create mode 100644 src/wp-content/themes/twentynineteen/inc/ui-icons.php create mode 100644 src/wp-content/themes/twentynineteen/index.php create mode 100644 src/wp-content/themes/twentynineteen/js/customizer.js create mode 100644 src/wp-content/themes/twentynineteen/js/skip-link-focus-fix.js create mode 100644 src/wp-content/themes/twentynineteen/languages/ip3.pot create mode 100644 src/wp-content/themes/twentynineteen/package-lock.json create mode 100644 src/wp-content/themes/twentynineteen/package.json create mode 100644 src/wp-content/themes/twentynineteen/page.php create mode 100644 src/wp-content/themes/twentynineteen/postcss.config.js create mode 100644 src/wp-content/themes/twentynineteen/print.css create mode 100644 src/wp-content/themes/twentynineteen/print.scss create mode 100644 src/wp-content/themes/twentynineteen/readme.txt create mode 100644 src/wp-content/themes/twentynineteen/sass/_normalize.scss create mode 100644 src/wp-content/themes/twentynineteen/sass/blocks/_blocks.scss create mode 100644 src/wp-content/themes/twentynineteen/sass/elements/_elements.scss create mode 100644 src/wp-content/themes/twentynineteen/sass/elements/_lists.scss create mode 100644 src/wp-content/themes/twentynineteen/sass/elements/_tables.scss create mode 100644 src/wp-content/themes/twentynineteen/sass/forms/_buttons.scss create mode 100644 src/wp-content/themes/twentynineteen/sass/forms/_fields.scss create mode 100644 src/wp-content/themes/twentynineteen/sass/forms/_forms.scss create mode 100644 src/wp-content/themes/twentynineteen/sass/layout/_layout.scss create mode 100644 src/wp-content/themes/twentynineteen/sass/media/_captions.scss create mode 100644 src/wp-content/themes/twentynineteen/sass/media/_galleries.scss create mode 100644 src/wp-content/themes/twentynineteen/sass/media/_media.scss create mode 100644 src/wp-content/themes/twentynineteen/sass/mixins/_mixins-master.scss create mode 100644 src/wp-content/themes/twentynineteen/sass/mixins/_utilities.scss create mode 100644 src/wp-content/themes/twentynineteen/sass/modules/_accessibility.scss create mode 100644 src/wp-content/themes/twentynineteen/sass/modules/_alignments.scss create mode 100644 src/wp-content/themes/twentynineteen/sass/modules/_clearings.scss create mode 100644 src/wp-content/themes/twentynineteen/sass/navigation/_links.scss create mode 100644 src/wp-content/themes/twentynineteen/sass/navigation/_menus.scss create mode 100644 src/wp-content/themes/twentynineteen/sass/navigation/_navigation.scss create mode 100644 src/wp-content/themes/twentynineteen/sass/navigation/_next-previous.scss create mode 100644 src/wp-content/themes/twentynineteen/sass/site/_site.scss create mode 100644 src/wp-content/themes/twentynineteen/sass/site/footer/_site-footer.scss create mode 100644 src/wp-content/themes/twentynineteen/sass/site/header/_site-featured-image.scss create mode 100644 src/wp-content/themes/twentynineteen/sass/site/header/_site-header.scss create mode 100644 src/wp-content/themes/twentynineteen/sass/site/primary/_archives.scss create mode 100644 src/wp-content/themes/twentynineteen/sass/site/primary/_comments.scss create mode 100644 src/wp-content/themes/twentynineteen/sass/site/primary/_posts-and-pages.scss create mode 100644 src/wp-content/themes/twentynineteen/sass/site/secondary/_widgets.scss create mode 100644 src/wp-content/themes/twentynineteen/sass/typography/_copy.scss create mode 100644 src/wp-content/themes/twentynineteen/sass/typography/_headings.scss create mode 100644 src/wp-content/themes/twentynineteen/sass/typography/_typography.scss create mode 100644 src/wp-content/themes/twentynineteen/sass/variables-site/_colors.scss create mode 100644 src/wp-content/themes/twentynineteen/sass/variables-site/_columns.scss create mode 100644 src/wp-content/themes/twentynineteen/sass/variables-site/_fonts.scss create mode 100644 src/wp-content/themes/twentynineteen/sass/variables-site/_structure.scss create mode 100644 src/wp-content/themes/twentynineteen/sass/variables-site/_transitions.scss create mode 100644 src/wp-content/themes/twentynineteen/sass/variables-site/_variables-site.scss create mode 100644 src/wp-content/themes/twentynineteen/screenshot.png create mode 100644 src/wp-content/themes/twentynineteen/search.php create mode 100644 src/wp-content/themes/twentynineteen/single.php create mode 100644 src/wp-content/themes/twentynineteen/style-editor-frame.css create mode 100644 src/wp-content/themes/twentynineteen/style-editor-frame.scss create mode 100644 src/wp-content/themes/twentynineteen/style-editor.css create mode 100644 src/wp-content/themes/twentynineteen/style-editor.scss create mode 100644 src/wp-content/themes/twentynineteen/style-rtl.css create mode 100644 src/wp-content/themes/twentynineteen/style.css create mode 100644 src/wp-content/themes/twentynineteen/style.scss create mode 100644 src/wp-content/themes/twentynineteen/template-parts/content/content-none.php create mode 100644 src/wp-content/themes/twentynineteen/template-parts/content/content-page.php create mode 100644 src/wp-content/themes/twentynineteen/template-parts/content/content-single.php create mode 100644 src/wp-content/themes/twentynineteen/template-parts/content/content.php create mode 100644 src/wp-content/themes/twentynineteen/template-parts/header/entry-header.php create mode 100644 src/wp-content/themes/twentynineteen/template-parts/header/site-branding.php create mode 100644 src/wp-content/themes/twentynineteen/template-parts/post/author-info.php create mode 100644 src/wp-content/themes/twentynineteen/template-parts/post/discussion-meta.php diff --git a/src/wp-content/themes/twentynineteen/404.php b/src/wp-content/themes/twentynineteen/404.php new file mode 100644 index 0000000000000..0c84bc037386e --- /dev/null +++ b/src/wp-content/themes/twentynineteen/404.php @@ -0,0 +1,33 @@ + + +
        +
        + +
        + + +
        +

        + + +
        +
        + +
        +
        + + + +
        +
        + + + + + + + +
        +
        + + source on its own array key, without adding the + * both `width` and `height` attributes, since these are added dnamically, + * before rendering the SVG code. + * + * All icons are assumed to have equal width and height, hence the option + * to only specify a `$size` parameter in the svg methods. + * + * @since 1.0.0 + */ +class TwentyNineteen_SVG_Icons { + + /** + * Gets the SVG code for a given icon. + */ + public static function get_svg( $group, $icon, $size ) { + if ( 'ui' == $group ) { + $arr = self::$ui_icons; + } elseif ( 'social' == $group ) { + $arr = self::$social_icons; + } else { + $arr = array(); + } + if ( array_key_exists( $icon, $arr ) ) { + $repl = sprintf( '\s*<', $svg ); // Remove white space between SVG tags. + return $svg; + } + return null; + } + + /** + * Detects the social network from a URL and returns the SVG code for its icon. + */ + public static function get_social_link_svg( $uri, $size ) { + static $regex_map; // Only compute regex map once, for performance. + if ( ! isset( $regex_map ) ) { + $regex_map = array(); + $map = &self::$social_icons_map; // Use reference instead of copy, to save memory. + foreach ( array_keys( self::$social_icons ) as $icon ) { + $domains = array_key_exists( $icon, $map ) ? $map[ $icon ] : array( sprintf( '%s.com', $icon ) ); + $domains = array_map( 'trim', $domains ); // Remove leading/trailing spaces, to prevent regex from failing to match. + $domains = array_map( 'preg_quote', $domains ); + $regex_map[ $icon ] = sprintf( '/(%s)/i', implode( '|', $domains ) ); + } + } + foreach ( $regex_map as $icon => $regex ) { + if ( preg_match( $regex, $uri ) ) { + return self::get_svg( 'social', $icon, $size ); + } + } + return null; + } + + /** + * User Interface icons – svg sources. + * + * @var array + */ + static $ui_icons = array( + 'link' => /* material-design – link */ ' + + + +', + + 'watch' => /* material-design – watch-later */ ' + + + + + + + + +', + + 'archive' => /* material-design – folder */ ' + + + +', + + 'tag' => /* material-design – local_offer */ ' + + + +', + + 'comment' => /* material-design – comment */ ' + + + +', + + 'person' => /* material-design – person */ ' + + + +', + + 'edit' => /* material-design – edit */ ' + + + +', + + 'chevron_left' => /* material-design – chevron_left */ ' + + + +', + + 'chevron_right' => /* material-design – chevron_right */ ' + + + +', + + 'check' => /* material-design – check */ ' + + + +', + + 'arrow_drop_down_circle' => /* material-design – arrow_drop_down_circle */ ' + + + +', + + 'keyboard_arrow_down' => /* material-design – keyboard_arrow_down */ ' + + + +', + + 'keyboard_arrow_right' => /* material-design – keyboard_arrow_right */ ' + + + +', + + ); + + /** + * Social Icons – domain mappings. + * + * By default, each Icon ID is matched against a .com TLD. To override this behavior, + * specify all the domains it covers (including the .com TLD too, if applicable). + * + * @var array + */ + static $social_icons_map = array( + 'amazon' => array( + 'amazon.com', + 'amazon.cn', + 'amazon.in', + 'amazon.fr', + 'amazon.de', + 'amazon.it', + 'amazon.nl', + 'amazon.es', + 'amazon.co', + 'amazon.ca', + ), + 'apple' => array( + 'apple.com', + 'itunes.com', + ), + 'behance' => array( + 'behance.net', + ), + 'codepen' => array( + 'codepen.io', + ), + 'facebook' => array( + 'facebook.com', + 'fb.me', + ), + 'google-plus' => array( + 'plus.google.com', + ), + 'slideshare' => array( + 'slideshare.net', + ), + 'pocket' => array( + 'getpocket.com', + ), + 'twitch' => array( + 'twitch.tv', + ), + 'wordpress' => array( + 'wordpress.com', + 'wordpress.org', + ), + ); + + /** + * Social Icons – svg sources. + * + * @var array + */ + static $social_icons = array( + '500px' => ' + + +', + + 'amazon' => ' + + +', + + 'apple' => ' + + +', + + 'bandcamp' => ' + + +', + + 'behance' => ' + + +', + + 'chain' => ' + + +', + + 'codepen' => ' + + +', + + 'deviantart' => ' + + +', + + 'digg' => ' + + +', + + 'dribbble' => ' + + +', + + 'dropbox' => ' + + +', + + 'etsy' => ' + + +', + + 'facebook' => ' + + +', + + 'feed' => ' + + +', + + 'flickr' => ' + + +', + + 'foursquare' => ' + + +', + + 'goodreads' => ' + + +', + + 'google-plus' => ' + + +', + + 'google' => ' + + +', + + 'github' => ' + + +', + + 'instagram' => ' + + +', + + 'linkedin' => ' + + +', + + 'mail' => ' + + +', + + 'meetup' => ' + + +', + + 'medium' => ' + + +', + + 'pinterest' => ' + + +', + + 'pocket' => ' + + +', + + 'reddit' => ' + + +', + + 'skype' => ' + + +', + + 'slideshare' => ' + + +', + + 'snapchat' => ' + + +', + + 'soundcloud' => ' + + +', + + 'spotify' => ' + + +', + + 'stumbleupon' => ' + + +', + + 'tumblr' => ' + + +', + + 'twitch' => ' + + +', + + 'twitter' => ' + + +', + + 'vimeo' => ' + + +', + + 'vk' => ' + + +', + + 'wordpress' => ' + + +', + + 'yelp' => ' + + +', + + 'youtube' => ' + + +', + + ); + +} diff --git a/src/wp-content/themes/twentynineteen/classes/class-twentynineteen-walker-comment.php b/src/wp-content/themes/twentynineteen/classes/class-twentynineteen-walker-comment.php new file mode 100644 index 0000000000000..ad86ea84f8b6a --- /dev/null +++ b/src/wp-content/themes/twentynineteen/classes/class-twentynineteen-walker-comment.php @@ -0,0 +1,104 @@ + + < id="comment-" has_children ? 'parent' : '', $comment ); ?>> +
        +
        +
        + [^<]+%s<', $avatar ), $comment_author_link ); + } + } + + /* + * Using the `check` icon instead of `check_circle`, since we can't add a + * fill color to the inner check shape when in circle form. + */ + if ( twentynineteen_is_comment_by_post_author( $comment ) ) { + /* translators: %s: SVG Icon */ + printf( '', twentynineteen_get_icon_svg( 'check', 24 ) ); + } + + /* translators: %s: comment author link */ + printf( + __( '%s says:' ), + sprintf( '%s', get_comment_author_link( $comment ) ) + ); + ?> +
        + + + + comment_approved ) : ?> +

        + +
        + +
        + +
        + +
        + + 'div-comment', + 'depth' => $depth, + 'max_depth' => $args['max_depth'], + 'before' => '
        ', + 'after' => '
        ', + ) + ) + ); + ?> + + +
        +
        +

        + +

        + +
        + +
          + new TwentyNineteen_Walker_Comment(), + 'avatar_size' => twentynineteen_get_avatar_size(), + 'short_ping' => true, + 'style' => 'ol', + ) + ); + ?> +
        + +
        + + + +
        + sprintf( '%s %s %s', $prev_icon, __( 'Previous', 'twentynineteen' ), __( 'Comments', 'twentynineteen' ) ), + 'next_text' => sprintf( '%s %s %s', __( 'Next', 'twentynineteen' ), __( 'Comments', 'twentynineteen' ), $next_icon ), + ) + ); + endif; + + // If comments are closed and there are comments, let's leave a little note, shall we? + if ( ! comments_open() ) : + ?> +

        + +

        + +
        diff --git a/src/wp-content/themes/twentynineteen/footer.php b/src/wp-content/themes/twentynineteen/footer.php new file mode 100644 index 0000000000000..ca06eda8a9f80 --- /dev/null +++ b/src/wp-content/themes/twentynineteen/footer.php @@ -0,0 +1,36 @@ + + +
        + +
        +
        + , + + . + + ' ); + } + ?> +
        +
        + +
        + + + + + diff --git a/src/wp-content/themes/twentynineteen/functions.php b/src/wp-content/themes/twentynineteen/functions.php new file mode 100644 index 0000000000000..6e5e86fe9b76c --- /dev/null +++ b/src/wp-content/themes/twentynineteen/functions.php @@ -0,0 +1,187 @@ + tag in the document head, and expect WordPress to + * provide it for us. + */ + add_theme_support( 'title-tag' ); + + /* + * Enable support for Post Thumbnails on posts and pages. + * + * @link https://developer.wordpress.org/themes/functionality/featured-images-post-thumbnails/ + */ + add_theme_support( 'post-thumbnails' ); + set_post_thumbnail_size( 1568, 9999 ); + + // This theme uses wp_nav_menu() in two locations. + register_nav_menus( + array( + 'menu-1' => esc_html__( 'Primary', 'twentynineteen' ), + 'social' => __( 'Social Links Menu', 'twentynineteen' ), + ) + ); + + /* + * Switch default core markup for search form, comment form, and comments + * to output valid HTML5. + */ + add_theme_support( + 'html5', + array( + 'search-form', + 'comment-form', + 'comment-list', + 'gallery', + 'caption', + ) + ); + + // Set up the WordPress core custom background feature. + add_theme_support( + 'custom-background', + apply_filters( + 'twentynineteen_custom_background_args', + array( + 'default-color' => 'ffffff', + 'default-image' => '', + ) + ) + ); + + /** + * Add support for core custom logo. + * + * @link https://codex.wordpress.org/Theme_Logo + */ + add_theme_support( + 'custom-logo', + array( + 'height' => 190, + 'width' => 190, + 'flex-width' => false, + 'flex-height' => false, + ) + ); + + // Add support for Block Styles + add_theme_support( 'wp-block-styles' ); + + // Add support for full and wide align images. + add_theme_support( 'align-wide' ); + + // Add support for editor styles + add_theme_support( 'editor-styles' ); + + // Enqueue editor styles + add_editor_style( 'style-editor.css' ); + + } +endif; +add_action( 'after_setup_theme', 'twentynineteen_setup' ); + +/** + * Set the content width in pixels, based on the theme's design and stylesheet. + * + * Priority 0 to make it available to lower priority callbacks. + * + * @global int $content_width + */ +function twentynineteen_content_width() { + // This variable is intended to be overruled from themes. + // Open WPCS issue: {@link https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards/issues/1043}. + // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedVariableFound + $GLOBALS['content_width'] = apply_filters( 'twentynineteen_content_width', 640 ); +} +add_action( 'after_setup_theme', 'twentynineteen_content_width', 0 ); + +/** + * Enqueue scripts and styles. + */ +function twentynineteen_scripts() { + wp_enqueue_style( 'twentynineteen-style', get_stylesheet_uri() ); + + wp_style_add_data( 'twentynineteen-style', 'rtl', 'replace' ); + + wp_enqueue_script( 'twentynineteen-skip-link-focus-fix', get_template_directory_uri() . '/js/skip-link-focus-fix.js', array(), '20151215', true ); + + wp_enqueue_style( 'twentynineteen-print-style', get_template_directory_uri() . '/print.css', array(), wp_get_theme()->get( 'Version' ), 'print' ); + + if ( is_singular() && twentynineteen_can_show_post_thumbnail() ) { + wp_add_inline_style( 'twentynineteen-style', twentynineteen_header_featured_image_css() ); + } + + if ( is_singular() && comments_open() && get_option( 'thread_comments' ) ) { + wp_enqueue_script( 'comment-reply' ); + } +} +add_action( 'wp_enqueue_scripts', 'twentynineteen_scripts' ); + +/** + * Enqueue supplemental block editor styles + */ +function twentynineteen_editor_frame_styles() { + wp_enqueue_style( 'twentynineteen-editor-frame-styles', get_theme_file_uri( '/style-editor-frame.css' ), false, '1.0', 'all' ); +} + +add_action( 'enqueue_block_editor_assets', 'twentynineteen_editor_frame_styles' ); + +/** + * SVG Icons class. + */ +require get_template_directory() . '/classes/class-twentynineteen-svg-icons.php'; + +/** + * Custom Comment Walker template. + */ +require get_template_directory() . '/classes/class-twentynineteen-walker-comment.php'; + +/** + * Enhance the theme by hooking into WordPress. + */ +require get_template_directory() . '/inc/template-functions.php'; + +/** + * SVG Icons related functions. + */ +require get_template_directory() . '/inc/icon-functions.php'; + +/** + * Custom template tags for the theme. + */ +require get_template_directory() . '/inc/template-tags.php'; + +/** + * Customizer additions. + */ +require get_template_directory() . '/inc/customizer.php'; diff --git a/src/wp-content/themes/twentynineteen/header.php b/src/wp-content/themes/twentynineteen/header.php new file mode 100644 index 0000000000000..33b9ab2be9449 --- /dev/null +++ b/src/wp-content/themes/twentynineteen/header.php @@ -0,0 +1,76 @@ + section and everything up until
        + * + * @link https://developer.wordpress.org/themes/basics/template-files/#template-partials + * + * @package WordPress + * @subpackage Twenty_Nineteen + */ +?> +> + + + + + + + +> +
        + + +
        +
        + +
        + + +
        + +
        + + + + ', '' ); ?> + +
        + + + + authors );} + ?> + + + %s', 'twentynineteen' ), + array( + 'span' => array( + 'class' => array(), + ), + ) + ), + get_the_title() + ), + '' . twentynineteen_get_icon_svg( 'edit', 16 ), + '' + ); + ?> +
        + +
        + +
        + +
        + +
        diff --git a/src/wp-content/themes/twentynineteen/inc/customizer.php b/src/wp-content/themes/twentynineteen/inc/customizer.php new file mode 100644 index 0000000000000..e520420f47cf6 --- /dev/null +++ b/src/wp-content/themes/twentynineteen/inc/customizer.php @@ -0,0 +1,62 @@ +get_setting( 'blogname' )->transport = 'postMessage'; + $wp_customize->get_setting( 'blogdescription' )->transport = 'postMessage'; + $wp_customize->get_setting( 'header_textcolor' )->transport = 'postMessage'; + + if ( isset( $wp_customize->selective_refresh ) ) { + $wp_customize->selective_refresh->add_partial( + 'blogname', + array( + 'selector' => '.site-title a', + 'render_callback' => 'twentynineteen_customize_partial_blogname', + ) + ); + $wp_customize->selective_refresh->add_partial( + 'blogdescription', + array( + 'selector' => '.site-description', + 'render_callback' => 'twentynineteen_customize_partial_blogdescription', + ) + ); + } +} +add_action( 'customize_register', 'twentynineteen_customize_register' ); + +/** + * Render the site title for the selective refresh partial. + * + * @return void + */ +function twentynineteen_customize_partial_blogname() { + bloginfo( 'name' ); +} + +/** + * Render the site tagline for the selective refresh partial. + * + * @return void + */ +function twentynineteen_customize_partial_blogdescription() { + bloginfo( 'description' ); +} + +/** + * Binds JS handlers to make Theme Customizer preview reload changes asynchronously. + */ +function twentynineteen_customize_preview_js() { + wp_enqueue_script( 'twentynineteen-customizer', get_template_directory_uri() . '/js/customizer.js', array( 'customize-preview' ), '20151215', true ); +} +add_action( 'customize_preview_init', 'twentynineteen_customize_preview_js' ); diff --git a/src/wp-content/themes/twentynineteen/inc/icon-functions.php b/src/wp-content/themes/twentynineteen/inc/icon-functions.php new file mode 100644 index 0000000000000..54d3cd3a9b9e5 --- /dev/null +++ b/src/wp-content/themes/twentynineteen/inc/icon-functions.php @@ -0,0 +1,51 @@ +theme_location ) { + $svg = twentynineteen_get_social_link_svg( $item->url, 26 ); + if ( empty( $svg ) ) { + $svg = twentynineteen_get_icon_svg( 'link' ); + } + $item_output = str_replace( $args->link_after, '' . $svg, $item_output ); + } + + return $item_output; +} +add_filter( 'walker_nav_menu_start_el', 'twentynineteen_nav_menu_social_icons', 10, 4 ); diff --git a/src/wp-content/themes/twentynineteen/inc/template-functions.php b/src/wp-content/themes/twentynineteen/inc/template-functions.php new file mode 100644 index 0000000000000..390362360dabc --- /dev/null +++ b/src/wp-content/themes/twentynineteen/inc/template-functions.php @@ -0,0 +1,226 @@ +'; + } +} +add_action( 'wp_head', 'twentynineteen_pingback_header' ); + +/** + * Changes comment form default fields. + */ +function twentynineteen_comment_form_defaults( $defaults ) { + $comment_field = $defaults['comment_field']; + + // Adjust height of comment form. + $defaults['comment_field'] = preg_replace( '/rows="\d+"/', 'rows="5"', $comment_field ); + + return $defaults; +} +add_filter( 'comment_form_defaults', 'twentynineteen_comment_form_defaults' ); + +/** + * Filters the default archive titles. + */ +function twentynineteen_get_the_archive_title() { + if ( is_category() ) { + $title = esc_html__( 'Category Archives:', 'twentynineteen' ); + } elseif ( is_tag() ) { + $title = esc_html__( 'Tag Archives:', 'twentynineteen' ); + } elseif ( is_author() ) { + $title = esc_html__( 'Author Archives:', 'twentynineteen' ); + } elseif ( is_year() ) { + $title = esc_html__( 'Yearly Archives:', 'twentynineteen' ); + } elseif ( is_month() ) { + $title = esc_html__( 'Monthly Archives:', 'twentynineteen' ); + } elseif ( is_day() ) { + $title = esc_html__( 'Daily Archives:', 'twentynineteen' ); + } elseif ( is_post_type_archive() ) { + $title = esc_html__( 'Post Type Archives:', 'twentynineteen' ); + } elseif ( is_tax() ) { + $tax = get_taxonomy( get_queried_object()->taxonomy ); + /* translators: 1: Taxonomy singular name */ + $title = sprintf( __( '%s Archives: ' ), $tax->labels->singular_name ); + } else { + $title = esc_html__( 'Archives:', 'twentynineteen' ); + } + return $title; +} +add_filter( 'get_the_archive_title', 'twentynineteen_get_the_archive_title' ); + +/** + * Filters the default archive descriptions. + */ +function twentynineteen_get_the_archive_description() { + if ( is_category() || is_tag() || is_tax() ) { + $description = single_term_title( '', false ); + } elseif ( is_author() ) { + $description = get_the_author_meta( 'display_name' ); + } elseif ( is_post_type_archive() ) { + $description = post_type_archive_title( '', false ); + } elseif ( is_year() ) { + $description = get_the_date( _x( 'Y', 'yearly archives date format', 'twentynineteen' ) ); + } elseif ( is_month() ) { + $description = get_the_date( _x( 'F Y', 'monthly archives date format', 'twentynineteen' ) ); + } elseif ( is_day() ) { + $description = get_the_date(); + } else { + $description = null; + } + return $description; +} +add_filter( 'get_the_archive_description', 'twentynineteen_get_the_archive_description' ); + +/** + * Determines if post thumbnail can be displayed. + */ +function twentynineteen_can_show_post_thumbnail() { + return ! post_password_required() && ! is_attachment() && has_post_thumbnail(); +} + +/** + * Returns true if image filters are enabled on the theme options. + */ +function twentynineteen_image_filters_enabled() { + return true; +} + +/** + * Returns the size for avatars used in the theme. + */ +function twentynineteen_get_avatar_size() { + return 60; +} + +/** + * Returns true if comment is by author of the post. + * + * @see get_comment_class() + */ +function twentynineteen_is_comment_by_post_author( $comment = null ) { + if ( is_object( $comment ) && $comment->user_id > 0 ) { + $user = get_userdata( $comment->user_id ); + $post = get_post( $comment->comment_post_ID ); + if ( ! empty( $user ) && ! empty( $post ) ) { + return $comment->user_id === $post->post_author; + } + } + return false; +} + +/** + * Returns information about the current post's discussion, with cache support. + */ +function twentynineteen_get_discussion_data() { + static $discussion, $post_id; + $current_post_id = get_the_ID(); + if ( $current_post_id === $post_id ) { /* If we have discussion information for post ID, return cached object */ + return $discussion; + } + $authors = array(); + $commenters = array(); + $user_id = is_user_logged_in() ? get_current_user_id() : -1; + $comments = get_comments( + array( + 'post_id' => $current_post_id, + 'orderby' => 'comment_date_gmt', + 'order' => get_option( 'comment_order', 'asc' ), /* Respect comment order from Settings » Discussion. */ + 'status' => 'approve', + ) + ); + foreach ( $comments as $comment ) { + $comment_user_id = (int) $comment->user_id; + if ( $comment_user_id !== $user_id ) { + $authors[] = ( $comment_user_id > 0 ) ? $comment_user_id : $comment->comment_author_email; + $commenters[] = $comment->comment_author_email; + } + } + $authors = array_unique( $authors ); + $responses = count( $commenters ); + $commenters = array_unique( $commenters ); + $post_id = $current_post_id; + $discussion = (object) array( + 'authors' => array_slice( $authors, 0, 6 ), /* Unique authors commenting on post (a subset of), excluding current user. */ + 'commenters' => count( $commenters ), /* Number of commenters involved in discussion, excluding current user. */ + 'responses' => $responses, /* Number of responses, excluding responses from current user. */ + ); + return $discussion; +} + +/** + * WCAG 2.0 Attributes for Dropdown Menus + * + * Adjustments to menu attributes tot support WCAG 2.0 recommendations + * for flyout and dropdown menus. + * + * @ref https://www.w3.org/WAI/tutorials/menus/flyout/ + */ +function twentynineteen_nav_menu_link_attributes( $atts, $item, $args, $depth ) { + + // Add [aria-haspopup] and [aria-expanded] to menu items that have children + $item_has_children = in_array( 'menu-item-has-children', $item->classes ); + if ( $item_has_children ) { + $atts['aria-haspopup'] = 'true'; + $atts['aria-expanded'] = 'false'; + } + + return $atts; +} +add_filter( 'nav_menu_link_attributes', 'twentynineteen_nav_menu_link_attributes', 10, 4 ); + +/** + * Add a dropdown icon to top-level menu items + */ +function twentynineteen_add_dropdown_icons( $output, $item, $depth, $args ) { + + // Only add class to 'top level' items on the 'primary' menu. + if ( 'menu-1' == $args->theme_location && 0 === $depth ) { + + if ( in_array( 'menu-item-has-children', $item->classes ) ) { + $output .= twentynineteen_get_icon_svg( 'arrow_drop_down_circle', 16 ); + } + } else if ( 'menu-1' == $args->theme_location && $depth >= 1 ) { + + if ( in_array( 'menu-item-has-children', $item->classes ) ) { + $output .= twentynineteen_get_icon_svg( 'keyboard_arrow_right', 24 ); + } + } + + return $output; +} +add_filter( 'walker_nav_menu_start_el', 'twentynineteen_add_dropdown_icons', 10, 4 ); diff --git a/src/wp-content/themes/twentynineteen/inc/template-tags.php b/src/wp-content/themes/twentynineteen/inc/template-tags.php new file mode 100644 index 0000000000000..b4242f5d05dd5 --- /dev/null +++ b/src/wp-content/themes/twentynineteen/inc/template-tags.php @@ -0,0 +1,247 @@ +%2$s'; + if ( get_the_time( 'U' ) !== get_the_modified_time( 'U' ) ) { + $time_string = ''; + } + + $time_string = sprintf( + $time_string, + esc_attr( get_the_date( DATE_W3C ) ), + esc_html( get_the_date() ), + esc_attr( get_the_modified_date( DATE_W3C ) ), + esc_html( get_the_modified_date() ) + ); + + printf( + '%1$s' . $time_string . '', + twentynineteen_get_icon_svg( 'watch', 16 ), + esc_url( get_permalink() ), + $time_string + ); + } +endif; + +if ( ! function_exists( 'twentynineteen_posted_by' ) ) : + /** + * Prints HTML with meta information about theme author. + */ + function twentynineteen_posted_by() { + printf( + '', + /* translators: 1: SVG icon. 2: post author, only visible to screen readers. 3: author link. */ + twentynineteen_get_icon_svg( 'person', 16 ), + esc_html__( 'Posted by', 'twentynineteen' ), + esc_url( get_author_posts_url( get_the_author_meta( 'ID' ) ) ), + esc_html( get_the_author() ) + ); + } +endif; + +if ( ! function_exists( 'twentynineteen_comment_count' ) ) : + /** + * Prints HTML with the comment count for the current post. + */ + function twentynineteen_comment_count() { + if ( ! post_password_required() && ( comments_open() || get_comments_number() ) ) { + echo ''; + echo twentynineteen_get_icon_svg( 'comment', 16 ); + + /* translators: %s: Name of current post. Only visible to screen readers. */ + comments_popup_link( sprintf( __( 'Leave a comment on %s', 'twentynineteen' ), get_the_title() ) ); + + echo ''; + } + } +endif; + +if ( ! function_exists( 'twentynineteen_entry_footer' ) ) : + /** + * Prints HTML with meta information for the categories, tags and comments. + */ + function twentynineteen_entry_footer() { + + // Posted by + twentynineteen_posted_by(); + + // Hide category and tag text for pages. + if ( 'post' === get_post_type() ) { + /* translators: used between list items, there is a space after the comma. */ + $categories_list = get_the_category_list( esc_html__( ', ', 'twentynineteen' ) ); + if ( $categories_list ) { + /* translators: 1: SVG icon. 2: posted in label, only visible to screen readers. 3: list of categories. */ + printf( + '%1$s%2$s%3$s', + twentynineteen_get_icon_svg( 'archive', 16 ), + esc_html__( 'Posted in', 'twentynineteen' ), + $categories_list + ); // WPCS: XSS OK. + } + + /* translators: used between list items, there is a space after the comma. */ + $tags_list = get_the_tag_list( '', esc_html__( ', ', 'twentynineteen' ) ); + if ( $tags_list ) { + /* translators: 1: SVG icon. 2: posted in label, only visible to screen readers. 3: list of tags. */ + printf( + '%1$s%2$s %3$s', + twentynineteen_get_icon_svg( 'tag', 16 ), + esc_html__( 'Tags:', 'twentynineteen' ), + $tags_list + ); // WPCS: XSS OK. + } + } + + // Comment count. + if ( ! is_singular() ) { + twentynineteen_comment_count(); + } + + // Edit post link. + edit_post_link( + sprintf( + wp_kses( + /* translators: %s: Name of current post. Only visible to screen readers. */ + __( 'Edit %s', 'twentynineteen' ), + array( + 'span' => array( + 'class' => array(), + ), + ) + ), + get_the_title() + ), + '' . twentynineteen_get_icon_svg( 'edit', 16 ), + '' + ); + } +endif; + +if ( ! function_exists( 'twentynineteen_post_thumbnail' ) ) : + /** + * Displays an optional post thumbnail. + * + * Wraps the post thumbnail in an anchor element on index views, or a div + * element when on single views. + */ + function twentynineteen_post_thumbnail() { + if ( ! twentynineteen_can_show_post_thumbnail() ) { + return; + } + + if ( is_singular() ) : + ?> + +
        + +
        + + + +
        + +
        + + %s
        ', get_avatar( $id_or_email, twentynineteen_get_avatar_size() ) ); + } +endif; + +if ( ! function_exists( 'twentynineteen_discussion_avatars_list' ) ) : + /** + * Displays a list of avatars involved in a discussion for a given post. + */ + function twentynineteen_discussion_avatars_list( $comment_authors ) { + if ( ! empty( $comment_authors ) ) { + $out = array( '
          ' ); + foreach ( $comment_authors as $id_or_email ) { + $out[] = sprintf( '
        1. %s
        2. ', twentynineteen_get_user_avatar_markup( $id_or_email ) ); + } + $out[] = '
        '; + echo implode( "\n", $out ); + } + return null; + } +endif; + +if ( ! function_exists( 'twentynineteen_comment_form' ) ) : + /** + * Documentation for function. + */ + function twentynineteen_comment_form( $order ) { + if ( true === $order || strtolower( $order ) === strtolower( get_option( 'comment_order', 'asc' ) ) ) { + comment_form( + array( + 'title_reply_before' => twentynineteen_get_user_avatar_markup(), + 'logged_in_as' => null, + 'title_reply' => null, + ) + ); + } + } +endif; + +if ( ! function_exists( 'twentynineteen_the_posts_navigation' ) ) : + /** + * Documentation for function. + */ + function twentynineteen_the_posts_navigation() { + $prev_icon = twentynineteen_get_icon_svg( 'chevron_left', 22 ); + $next_icon = twentynineteen_get_icon_svg( 'chevron_right', 22 ); + the_posts_pagination( + array( + 'mid_size' => 2, + 'prev_text' => sprintf( '%s %s', $prev_icon, __( 'Newer posts', 'twentynineteen' ) ), + 'next_text' => sprintf( '%s %s', __( 'Older posts', 'twentynineteen' ), $next_icon ), + ) + ); + } +endif; diff --git a/src/wp-content/themes/twentynineteen/inc/ui-icons.php b/src/wp-content/themes/twentynineteen/inc/ui-icons.php new file mode 100644 index 0000000000000..5a37f4e0f8361 --- /dev/null +++ b/src/wp-content/themes/twentynineteen/inc/ui-icons.php @@ -0,0 +1,7 @@ + + +
        +
        + + +
        +
        + +\n" +"X-Generator: grunt-wp-i18n 0.5.4\n" + +#: 404.php:17 +msgid "Oops! That page can’t be found." +msgstr "" + +#: 404.php:21 +msgid "" +"It looks like nothing was found at this location. Maybe try one of the " +"links below or a search?" +msgstr "" + +#: 404.php:30 +msgid "Most Used Categories" +msgstr "" + +#: 404.php:47 +#. translators: %1$s: smiley +msgid "Try looking in the monthly archives. %1$s" +msgstr "" + +#: comments.php:34 +#. translators: 1: title. +msgid "One thought on “%1$s”" +msgstr "" + +#: comments.php:67 +msgid "Comments are closed." +msgstr "" + +#: footer.php:18 +msgid "https://wordpress.org/" +msgstr "" + +#: footer.php:20 +#. translators: %s: CMS name, i.e. WordPress. +msgid "Proudly powered by %s" +msgstr "" + +#: footer.php:25 +#. translators: 1: Theme name, 2: Theme author. +msgid "Theme: %1$s by %2$s." +msgstr "" + +#: functions.php:47 +msgid "Primary" +msgstr "" + +#: functions.php:105 +msgid "Sidebar" +msgstr "" + +#: functions.php:107 +msgid "Add widgets here." +msgstr "" + +#: header.php:24 +msgid "Skip to content" +msgstr "" + +#: header.php:45 +msgid "Primary Menu" +msgstr "" + +#: inc/template-tags.php:52 +#. translators: used between list items, there is a space after the comma +msgid ", " +msgstr "" + +#: inc/template-tags.php:55 +#. translators: 1: list of categories. +msgid "Posted in %1$s" +msgstr "" + +#: inc/template-tags.php:62 +#. translators: 1: list of tags. +msgid "Tagged %1$s" +msgstr "" + +#: inc/template-tags.php:72 +#. translators: %s: post title +msgid "Leave a Comment on %s" +msgstr "" + +#: inc/template-tags.php:89 template-parts/content-page.php:35 +#. translators: %s: Name of current post. Only visible to screen readers +msgid "Edit %s" +msgstr "" + +#: search.php:21 +#. translators: %s: search query. +msgid "Search Results for: %s" +msgstr "" + +#: template-parts/content-none.php:14 +msgid "Nothing Found" +msgstr "" + +#: template-parts/content-none.php:25 +#. translators: 1: link to WP admin new post page. +msgid "Ready to publish your first post? Get started here." +msgstr "" + +#: template-parts/content-none.php:38 +msgid "" +"Sorry, but nothing matched your search terms. Please try again with some " +"different keywords." +msgstr "" + +#: template-parts/content-none.php:44 +msgid "" +"It seems we can’t find what you’re looking for. Perhaps " +"searching can help." +msgstr "" + +#: template-parts/content-page.php:22 template-parts/content.php:45 +msgid "Pages:" +msgstr "" + +#: template-parts/content.php:34 +#. translators: %s: Name of current post. Only visible to screen readers +msgid "Continue reading \"%s\"" +msgstr "" + +#. Theme Name of the plugin/theme +msgid "_s" +msgstr "" + +#. Theme URI of the plugin/theme +msgid "https://underscores.me/" +msgstr "" + +#. Description of the plugin/theme +msgid "" +"Hi. I'm a starter theme called _s, or underscores, if " +"you like. I'm a theme meant for hacking so don't use me as a Parent " +"Theme. Instead try turning me into the next, most awesome, WordPress " +"theme out there. That's what I'm here for." +msgstr "" + +#. Author of the plugin/theme +msgid "Automattic" +msgstr "" + +#. Author URI of the plugin/theme +msgid "https://automattic.com/" +msgstr "" + +#: comments.php:40 +#. translators: 1: comment count number, 2: title. +msgctxt "comments title" +msgid "%1$s thought on “%2$s”" +msgid_plural "%1$s thoughts on “%2$s”" +msgstr[0] "" +msgstr[1] "" + +#: inc/template-tags.php:29 +#. translators: %s: post date. +msgctxt "post date" +msgid "Posted on %s" +msgstr "" + +#: inc/template-tags.php:35 +#. translators: %s: post author. +msgctxt "post author" +msgid "by %s" +msgstr "" + +#: inc/template-tags.php:59 +#. translators: used between list items, there is a space after the comma +msgctxt "list item separator" +msgid ", " +msgstr "" diff --git a/src/wp-content/themes/twentynineteen/package-lock.json b/src/wp-content/themes/twentynineteen/package-lock.json new file mode 100644 index 0000000000000..0cce13fd9d738 --- /dev/null +++ b/src/wp-content/themes/twentynineteen/package-lock.json @@ -0,0 +1,4528 @@ +{ + "name": "twentynineteen", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", + "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", + "dev": true, + "requires": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + } + }, + "@nodelib/fs.stat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.2.tgz", + "integrity": "sha512-yprFYuno9FtNsSHVlSWd+nRlmGoAbqbeCwOryP6sC/zoCjhpArcRMYp19EvpSUSizJAlsXEwJv+wcWS9XaXdMw==", + "dev": true + }, + "@wordpress/browserslist-config": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-2.2.2.tgz", + "integrity": "sha512-RZ9XeDeXTc/l3RdSnfYYwcsylFPouV+2ZpQQaAgALSXthMWJT2wU61zD4mH9aMI5Oo6Z8OUVI2vOZM/7HObPxw==", + "dev": true + }, + "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 + }, + "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" + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "are-we-there-yet": { + "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.0.6" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-filter": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", + "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-map": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", + "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", + "dev": true + }, + "array-reduce": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", + "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.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 + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true + }, + "async-foreach": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", + "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "autoprefixer": { + "version": "9.1.5", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.1.5.tgz", + "integrity": "sha512-kk4Zb6RUc58ld7gdosERHMF3DzIYJc2fp5sX46qEsGXQQy5bXsu8qyLjoxuY1NuQ/cJuCYnx99BfjwnRggrYIw==", + "dev": true, + "requires": { + "browserslist": "^4.1.0", + "caniuse-lite": "^1.0.30000884", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.2", + "postcss-value-parser": "^3.2.3" + } + }, + "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 + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "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": { + "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.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" + } + } + } + }, + "bcrypt-pbkdf": { + "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.3" + } + }, + "binary-extensions": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz", + "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==", + "dev": true + }, + "block-stream": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "dev": true, + "requires": { + "inherits": "~2.0.0" + } + }, + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "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", + "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": { + "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.0" + } + } + } + }, + "browserslist": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.1.1.tgz", + "integrity": "sha512-VBorw+tgpOtZ1BYhrVSVTzTt/3+vSE3eFUh0N2GCFK1HffceOaf32YS/bs6WiFhjDAblAFrx85jMy3BG9fBK2Q==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30000884", + "electron-to-chromium": "^1.3.62", + "node-releases": "^1.0.0-alpha.11" + } + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "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" + } + }, + "call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", + "dev": true + }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "http://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + } + }, + "caniuse-lite": { + "version": "1.0.30000885", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000885.tgz", + "integrity": "sha512-cXKbYwpxBLd7qHyej16JazPoUacqoVuDhvR61U7Fr5vSxMUiodzcYa1rQYRYfZ5GexV03vGZHd722vNPLjPJGQ==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chokidar": { + "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.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" + } + }, + "chokidar-cli": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/chokidar-cli/-/chokidar-cli-1.2.1.tgz", + "integrity": "sha512-JIrV9Z/pT7KjBWp9u+Uba0utdl2rmNaTj6t4ucaFseYDQASHZnWXy6vJIufDX+4FVh081gQZ2odrqorMfQhn7w==", + "dev": true, + "requires": { + "bluebird": "3.5.1", + "chokidar": "2.0.4", + "lodash": "4.17.10", + "yargs": "12.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "decamelize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", + "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==", + "dev": true, + "requires": { + "xregexp": "4.0.0" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "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" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "lodash": { + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", + "dev": true + }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "dev": true, + "requires": { + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "yargs": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.1.tgz", + "integrity": "sha512-B0vRAp1hRX4jgIOWFtjfNjd9OA9RWYZ6tqGA9/I/IrTMsxmKvtWy+ersM+jzpQqbC3YfLzeABPdeTgcJ9eu1qQ==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^2.0.0", + "find-up": "^3.0.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 || ^4.0.0", + "yargs-parser": "^10.1.0" + } + }, + "yargs-parser": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "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.0" + } + } + } + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "colors": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", + "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=", + "dev": true + }, + "combined-stream": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", + "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.1.0", + "resolved": "http://registry.npmjs.org/commander/-/commander-2.1.0.tgz", + "integrity": "sha1-0SG7roYNmZKj1Re6lvVliOR8Z4E=", + "dev": true + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cosmiconfig": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-4.0.0.tgz", + "integrity": "sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==", + "dev": true, + "requires": { + "is-directory": "^0.3.1", + "js-yaml": "^3.9.0", + "parse-json": "^4.0.0", + "require-from-string": "^2.0.1" + }, + "dependencies": { + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + } + } + }, + "cross-spawn": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", + "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "^1.0.1" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "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" + } + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "dependency-graph": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.7.2.tgz", + "integrity": "sha512-KqtH4/EZdtdfWX0p6MGP9jljvxSY6msy/pRUD4jgNwVpv3v1QmNLlsB3LDSSUg79BRVSn7jI1QPRtArGABovAQ==", + "dev": true + }, + "dir-glob": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", + "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "path-type": "^3.0.0" + }, + "dependencies": { + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "duplexer": { + "version": "0.1.1", + "resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", + "dev": true + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "electron-to-chromium": { + "version": "1.3.70", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.70.tgz", + "integrity": "sha512-WYMjqCnPVS5JA+XvwEnpwucJpVi2+q9cdCFpbhxgWGsCtforFBEkuP9+nCyy/wnU/0SyLcLRIeZct9ayMGcXoQ==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", + "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", + "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": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "event-stream": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.6.tgz", + "integrity": "sha512-dGXNg4F/FgVzlApjzItL+7naHutA3fDqbV/zAZqDDlXTjiMnQmZKu+prImWKszeBM5UQeGvAl3u1wBiKeDh61g==", + "dev": true, + "requires": { + "duplexer": "^0.1.1", + "flatmap-stream": "^0.1.0", + "from": "^0.1.7", + "map-stream": "0.0.7", + "pause-stream": "^0.0.11", + "split": "^1.0.1", + "stream-combiner": "^0.2.2", + "through": "^2.3.8" + } + }, + "execa": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", + "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "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": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "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.2.9" + } + } + } + }, + "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.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": { + "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.0" + } + }, + "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.0" + } + } + } + }, + "extend": { + "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": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "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.0", + "snapdragon": "^0.8.1", + "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.0" + } + }, + "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.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" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, + "fast-glob": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.2.tgz", + "integrity": "sha512-TR6zxCKftDQnUAPvkrCWdBgDq/gbqx8A3ApnBrR5rMvpp6+KMJI0Igw7fkWPgeVK0uhRXTXdvO3O+YP0CaUX2g==", + "dev": true, + "requires": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.0.1", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.1", + "micromatch": "^3.1.10" + } + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "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.0" + }, + "dependencies": { + "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.0" + } + } + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "findup": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/findup/-/findup-0.1.5.tgz", + "integrity": "sha1-itkpozk7rGJ5V6fl3kYjsGsOLOs=", + "dev": true, + "requires": { + "colors": "~0.6.0-1", + "commander": "~2.1.0" + } + }, + "flatmap-stream": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/flatmap-stream/-/flatmap-stream-0.1.1.tgz", + "integrity": "sha512-lAq4tLbm3sidmdCN8G3ExaxH7cUCtP5mgDvrYowsx84dcYkJJ4I28N7gkxA6+YlSXzaGLJYIDEi9WGfXzMiXdw==", + "dev": true + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "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" + }, + "dependencies": { + "combined-stream": { + "version": "1.0.6", + "resolved": "http://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + } + } + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", + "dev": true + }, + "fs-extra": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.0.tgz", + "integrity": "sha512-EglNDLRpmaTWiD/qraZn6HREAEAHJcJOmxNEYwq6xeMKnVMAy3GUcFB+wXt2C6k4CNvB/mP1y/U3dzvKKj5OtQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "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.9.2", + "node-pre-gyp": "^0.10.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "2.6.9", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "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, + "optional": true, + "requires": { + "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": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.21", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "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.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "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, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.2.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "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": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "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": { + "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": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.5.1", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": 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" + } + }, + "rimraf": { + "version": "2.6.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.0.5" + } + }, + "safe-buffer": { + "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.5.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "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" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "yallist": { + "version": "3.0.2", + "bundled": true, + "dev": true + } + } + }, + "fstream": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "requires": { + "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.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "dev": true, + "requires": { + "globule": "^1.0.0" + } + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "requires": { + "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-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", + "dev": true + }, + "globby": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.1.tgz", + "integrity": "sha512-oMrYrJERnKBLXNLVTqhm3vPEdJ/b2ZE28xN4YARiix1NOIOBPEpOUnm844K1iu/BkphCaf2WNFwMszv8Soi1pw==", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "fast-glob": "^2.0.2", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "globule": { + "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.1", + "lodash": "~4.17.10", + "minimatch": "~3.0.2" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "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" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "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.5" + } + } + } + }, + "hosted-git-info": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "dev": true + }, + "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" + } + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true + }, + "import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "dev": true, + "requires": { + "import-from": "^2.1.0" + } + }, + "import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "in-publish": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", + "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", + "dev": true + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "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-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, + "requires": { + "builtin-modules": "^1.0.0" + } + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true + }, + "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-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, + "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.0.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-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "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.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-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "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" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "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", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "js-base64": { + "version": "2.4.9", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.9.tgz", + "integrity": "sha512-xcinL3AuDJk7VSzsHgb9DvvIXayBbadtMZ4HFPx8rUszbW1MuNMlwYVC4zzCZ6e1sqZpnNS5ZFYOhXqA39T7LQ==", + "dev": true + }, + "js-yaml": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", + "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": 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": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "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 + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "^1.0.0" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "dependencies": { + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } + } + }, + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "dev": true + }, + "lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", + "dev": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "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.mergewith": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz", + "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==", + "dev": true + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + } + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "lru-cache": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", + "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "map-age-cleaner": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.2.tgz", + "integrity": "sha512-UN1dNocxQq44IhJyMI4TU8phc2m9BddacHRPRjKGLYaF0jqd3xLz0jS0skpAU9WgYyoR4gHtUpzytNBS385FWQ==", + "dev": true, + "requires": { + "p-defer": "^1.0.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "map-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", + "integrity": "sha1-ih8HiW2CsQkmvTdEokIACfiJdKg=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "mem": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.0.0.tgz", + "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==", + "dev": true, + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^1.0.0", + "p-is-promise": "^1.1.0" + } + }, + "memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", + "dev": true + }, + "meow": { + "version": "3.7.0", + "resolved": "http://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "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" + } + }, + "merge2": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.2.tgz", + "integrity": "sha512-bgM8twH86rWni21thii6WCMQMRMmwqqdW3sGWi9IipnVAszdLXRjwDwAnyrVXo6DuP3AjRMMttZKUB48QWIFGg==", + "dev": true + }, + "micromatch": { + "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.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "mime-db": { + "version": "1.36.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.36.0.tgz", + "integrity": "sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw==", + "dev": true + }, + "mime-types": { + "version": "2.1.20", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.20.tgz", + "integrity": "sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==", + "dev": true, + "requires": { + "mime-db": "~1.36.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "mixin-deep": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "nan": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.0.tgz", + "integrity": "sha512-F4miItu2rGnV2ySkXOQoA8FKz/SR2Q2sWP0sbTxNxz/tuokeC8WxOhPMcwi0qIyGtVn/rrSeLbvVkznqCdwYnw==", + "dev": true + }, + "nanomatch": { + "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-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" + } + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node-gyp": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", + "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", + "dev": true, + "requires": { + "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.87.0", + "rimraf": "2", + "semver": "~5.3.0", + "tar": "^2.0.0", + "which": "1" + }, + "dependencies": { + "semver": { + "version": "5.3.0", + "resolved": "http://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true + } + } + }, + "node-releases": { + "version": "1.0.0-alpha.11", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.0.0-alpha.11.tgz", + "integrity": "sha512-CaViu+2FqTNYOYNihXa5uPS/zry92I3vPU4nCB6JB3OeZ2UGtOpF5gRwuN4+m3hbEcL47bOXyun1jX2iC+3uEQ==", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "node-sass": { + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.9.3.tgz", + "integrity": "sha512-XzXyGjO+84wxyH7fV6IwBOTrEBe2f0a6SBze9QWWYR/cL74AcQUks2AsqcCZenl/Fp/JVbuEaLpgrLtocwBUww==", + "dev": true, + "requires": { + "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.8.0", + "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": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "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" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "dev": true, + "requires": { + "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": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "npm-run-all": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.3.tgz", + "integrity": "sha512-aOG0N3Eo/WW+q6sUIdzcV2COS8VnTZCmdji0VQIAZF3b+a3YWb0AD0vFIyjKec18A7beLGbaQ5jFTNI2bPt9Cg==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.4", + "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": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "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.2.9" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "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.0" + } + }, + "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" + } + } + } + }, + "object-keys": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", + "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "1.4.0", + "resolved": "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "requires": { + "lcid": "^1.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-is-promise": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", + "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", + "dev": true + }, + "p-limit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz", + "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "dev": true + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pause-stream": { + "version": "0.0.11", + "resolved": "http://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", + "dev": true, + "requires": { + "through": "~2.3" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "postcss": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.2.tgz", + "integrity": "sha512-fmaUY5370keLUTx+CnwRxtGiuFTcNBLQBqr1oE3WZ/euIYmGAo0OAgOhVJ3ByDnVmOR3PK+0V9VebzfjRIUcqw==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "postcss-cli": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-6.0.0.tgz", + "integrity": "sha512-7DuxMn1Wj6dJKbjKpZXOdAc5nl5NfPXiJbg0m/+tdObPvgk1xv4+lZgNKD3jL/kCrDRPf1jgFlmq1cHh8lBR2w==", + "dev": true, + "requires": { + "chalk": "^2.1.0", + "chokidar": "^2.0.0", + "dependency-graph": "^0.7.0", + "fs-extra": "^7.0.0", + "get-stdin": "^6.0.0", + "globby": "^8.0.0", + "postcss": "^7.0.0", + "postcss-load-config": "^2.0.0", + "postcss-reporter": "^5.0.0", + "pretty-hrtime": "^1.0.3", + "read-cache": "^1.0.0", + "yargs": "^12.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + } + }, + "decamelize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", + "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==", + "dev": true, + "requires": { + "xregexp": "4.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "dev": true + }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "dev": true, + "requires": { + "invert-kv": "^2.0.0" + } + }, + "os-locale": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.0.1.tgz", + "integrity": "sha512-7g5e7dmXPtzcP4bgsZ8ixDVqA7oWYuEz4lOSujeWyliPai4gfVDiFIcwBg3aGCPnmSGfzOKTK3ccPn0CKv3DBw==", + "dev": true, + "requires": { + "execa": "^0.10.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "yargs": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.2.tgz", + "integrity": "sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^2.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.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 || ^4.0.0", + "yargs-parser": "^10.1.0" + } + }, + "yargs-parser": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "postcss-load-config": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.0.0.tgz", + "integrity": "sha512-V5JBLzw406BB8UIfsAWSK2KSwIJ5yoEIVFb4gVkXci0QdKgA24jLmHZ/ghe/GgX0lJ0/D1uUK1ejhzEY94MChQ==", + "dev": true, + "requires": { + "cosmiconfig": "^4.0.0", + "import-cwd": "^2.0.0" + } + }, + "postcss-reporter": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-5.0.0.tgz", + "integrity": "sha512-rBkDbaHAu5uywbCR2XE8a25tats3xSOsGNx6mppK6Q9kSFGKc/FyAzfci+fWM2l+K402p1D0pNcfDGxeje5IKg==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "lodash": "^4.17.4", + "log-symbols": "^2.0.0", + "postcss": "^6.0.8" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + } + } + }, + "postcss-value-parser": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", + "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=", + "dev": true + }, + "pretty-hrtime": { + "version": "1.0.3", + "resolved": "http://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", + "dev": true + }, + "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 + }, + "ps-tree": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.1.0.tgz", + "integrity": "sha1-tCGyQUDWID8e08dplrRCewjowBQ=", + "dev": true, + "requires": { + "event-stream": "~3.3.0" + } + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "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 + }, + "read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", + "dev": true, + "requires": { + "pify": "^2.3.0" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "http://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" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "^1.0.0" + } + }, + "request": { + "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.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" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "requires": { + "glob": "^7.0.5" + } + }, + "rtlcss": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-2.4.0.tgz", + "integrity": "sha512-hdjFhZ5FCI0ABOfyXOMOhBtwPWtANLCG7rOiOcRf+yi5eDdxmDjqBruWouEnwVdzfh/TWF6NNncIEsigOCFZOA==", + "dev": true, + "requires": { + "chalk": "^2.3.0", + "findup": "^0.1.5", + "mkdirp": "^0.5.1", + "postcss": "^6.0.14", + "strip-json-comments": "^2.0.0" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + } + } + }, + "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 + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "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.0.0", + "lodash": "^4.0.0", + "scss-tokenizer": "^0.2.3", + "yargs": "^7.0.0" + } + }, + "scss-tokenizer": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", + "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", + "dev": true, + "requires": { + "js-base64": "^2.1.8", + "source-map": "^0.4.2" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "semver": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", + "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==", + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-value": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "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.0" + } + } + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shell-quote": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", + "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", + "dev": true, + "requires": { + "array-filter": "~0.0.0", + "array-map": "~0.0.0", + "array-reduce": "~0.0.0", + "jsonify": "~0.0.0" + } + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "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": { + "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.0" + } + }, + "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.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^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.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" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "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" + } + } + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "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-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": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", + "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", + "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.1.tgz", + "integrity": "sha512-TfOfPcYGBB5sDuPn3deByxPhmfegAhpDYKSOXZQN81Oyrrif8ZCodOLzK3AesELnCx03kikhyDwh0pfvvQvF8w==", + "dev": true + }, + "split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "dev": true, + "requires": { + "through": "2" + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "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.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" + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "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.0" + } + } + } + }, + "stdout-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", + "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", + "dev": true, + "requires": { + "readable-stream": "^2.0.1" + } + }, + "stream-combiner": { + "version": "0.2.2", + "resolved": "http://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", + "integrity": "sha1-rsjLrBd7Vrb0+kec7YwZEs7lKFg=", + "dev": true, + "requires": { + "duplexer": "~0.1.1", + "through": "~2.3.4" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string.prototype.padend": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz", + "integrity": "sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.4.3", + "function-bind": "^1.0.2" + } + }, + "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" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "tar": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "dev": true, + "requires": { + "block-stream": "*", + "fstream": "^1.0.2", + "inherits": "2" + } + }, + "through": { + "version": "2.3.8", + "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "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" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "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" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "dev": true, + "requires": { + "punycode": "^1.4.1" + } + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "true-case-path": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", + "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", + "dev": true, + "requires": { + "glob": "^7.1.2" + } + }, + "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", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "optional": true + }, + "union-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", + "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" + }, + "dependencies": { + "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.0" + } + }, + "set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" + } + } + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "upath": { + "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 + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "use": { + "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-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "wide-align": { + "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 || 2" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "xregexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz", + "integrity": "sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==", + "dev": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yargs": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", + "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + } + } + }, + "yargs-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", + "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "dev": true, + "requires": { + "camelcase": "^3.0.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + } + } + } + } +} diff --git a/src/wp-content/themes/twentynineteen/package.json b/src/wp-content/themes/twentynineteen/package.json new file mode 100644 index 0000000000000..c74b36001c04a --- /dev/null +++ b/src/wp-content/themes/twentynineteen/package.json @@ -0,0 +1,43 @@ +{ + "name": "twentynineteen", + "version": "1.0.0", + "description": "Default WP Theme", + "bugs": { + "url": "https://github.com/WordPress/twentynineteen/issues" + }, + "homepage": "https://github.com/WordPress/twentynineteen#readme", + "devDependencies": { + "@wordpress/browserslist-config": "^2.2.2", + "autoprefixer": "^9.1.5", + "chokidar-cli": "^1.2.1", + "node-sass": "^4.9.3", + "postcss-cli": "^6.0.0", + "rtlcss": "^2.4.0", + "npm-run-all": "^4.1.3" + }, + "rtlcssConfig": { + "options": { + "autoRename": false, + "autoRenameStrict": false, + "blacklist": {}, + "clean": true, + "greedy": false, + "processUrls": false, + "stringMap": [] + }, + "plugins": [], + "map": false + }, + "browserslist": [ + "extends @wordpress/browserslist-config" + ], + "scripts": { + "build:style": "node-sass style.scss style.css --output-style expanded && postcss -r style.css", + "build:style-editor": "node-sass style-editor.scss style-editor.css --output-style expanded && postcss -r style-editor.css", + "build:style-editor-frame": "node-sass style-editor-frame.scss style-editor-frame.css --output-style expanded && postcss -r style-editor-frame.css", + "build:rtl": "rtlcss style.css style-rtl.css", + "build:print": "node-sass print.scss print.css --output-style expanded && postcss -r print.css", + "build": "run-p \"build:*\"", + "watch": "chokidar \"**/*.scss\" -c \"npm run build\" --initial" + } +} diff --git a/src/wp-content/themes/twentynineteen/page.php b/src/wp-content/themes/twentynineteen/page.php new file mode 100644 index 0000000000000..757b78f988974 --- /dev/null +++ b/src/wp-content/themes/twentynineteen/page.php @@ -0,0 +1,37 @@ + + +
        +
        + + + +
        +
        + +>> TABLE OF CONTENTS: +---------------------------------------------------------------- +# Margins +# Typography÷ +# Page breaks +# Links +# Visibility +--------------------------------------------------------------*/ +@media print { + /* Margins */ + @page { + margin: 2cm; + } + .hentry .entry-header, .site-footer .site-info { + margin: 0; + } + /* Fonts */ + body { + font: 13pt Georgia, "Times New Roman", Times, serif; + line-height: 1.3; + background: #fff !important; + color: #000; + } + h1 { + font-size: 24pt; + } + h2, + h3, + h4, + .has-regular-font-size, + .has-large-font-size, + h2.author-title, + p.author-bio, + .comments-title, h3 { + font-size: 14pt; + margin-top: 25px; + } + /* Page breaks */ + a { + page-break-inside: avoid; + } + blockquote { + page-break-inside: avoid; + } + h1, + h2, + h3, + h4, + h5, + h6 { + page-break-after: avoid; + page-break-inside: avoid; + } + img { + page-break-inside: avoid; + page-break-after: avoid; + } + table, pre { + page-break-inside: avoid; + } + ul, ol, dl { + page-break-before: avoid; + } + /* Links */ + a:link, a:visited, a { + background: transparent; + color: #520; + font-weight: bold; + text-decoration: underline; + text-align: left; + } + a { + page-break-inside: avoid; + } + a[href^=http]:after { + content: " < " attr(href) "> "; + } + a:after > img { + content: ""; + } + article a[href^="#"]:after { + content: ""; + } + a:not(:local-link):after { + content: " < " attr(href) "> "; + } + /* Visibility */ + .main-navigation, + .social-navigation, + .site-branding-container:before, + .hentry .entry-title:before, + .entry-meta, .entry-footer, + .author-description:before, + .post-navigation { + display: none; + } +} diff --git a/src/wp-content/themes/twentynineteen/print.scss b/src/wp-content/themes/twentynineteen/print.scss new file mode 100644 index 0000000000000..c465af71bf4ce --- /dev/null +++ b/src/wp-content/themes/twentynineteen/print.scss @@ -0,0 +1,128 @@ +/* +Theme Name: Twenty Nineteen + +Adding print support. The print styles are based on the the great work of +Andreas Hecht in https://www.jotform.com/blog/css-perfect-print-stylesheet-98272/. +*/ + +/*-------------------------------------------------------------- +>>> TABLE OF CONTENTS: +---------------------------------------------------------------- +# Margins +# Typography÷ +# Page breaks +# Links +# Visibility +--------------------------------------------------------------*/ + +@media print { + + /* Margins */ + + @page { + margin: 2cm; + } + + .hentry .entry-header, .site-footer .site-info { + margin: 0; + } + + /* Fonts */ + + body { + font: 13pt Georgia, "Times New Roman", Times, serif; + line-height: 1.3; + background: #fff !important; + color: #000; + } + + h1 { + font-size: 24pt; + } + + h2, + h3, + h4, + .has-regular-font-size, + .has-large-font-size, + h2.author-title, + p.author-bio, + .comments-title, h3 { + font-size: 14pt; + margin-top: 25px; + } + + /* Page breaks */ + + a { + page-break-inside: avoid + } + + blockquote { + page-break-inside: avoid; + } + + h1, + h2, + h3, + h4, + h5, + h6 { + page-break-after: avoid; + page-break-inside: avoid + } + + img { + page-break-inside: avoid; + page-break-after: avoid; + } + + table, pre { + page-break-inside: avoid; + } + + ul, ol, dl { + page-break-before: avoid; + } + + /* Links */ + + a:link, a:visited, a { + background: transparent; + color: #520; + font-weight: bold; + text-decoration: underline; + text-align: left; + } + + a { + page-break-inside: avoid + } + + a[href^=http]:after { + content: " < " attr(href) "> "; + } + + a:after > img { + content: ""; + } + + article a[href^="#"]:after { + content: ""; + } + + a:not(:local-link):after { + content: " < " attr(href) "> "; + } + + /* Visibility */ + .main-navigation, + .social-navigation, + .site-branding-container:before, + .hentry .entry-title:before, + .entry-meta, .entry-footer, + .author-description:before, + .post-navigation { + display: none; + } +} \ No newline at end of file diff --git a/src/wp-content/themes/twentynineteen/readme.txt b/src/wp-content/themes/twentynineteen/readme.txt new file mode 100644 index 0000000000000..d2c52d997588f --- /dev/null +++ b/src/wp-content/themes/twentynineteen/readme.txt @@ -0,0 +1,65 @@ +# Twenty Nineteen + +[![Build Status](https://travis-ci.org/WordPress/twentynineteen.svg?branch=master)](https://travis-ci.org/WordPress/twentynineteen) + +**Contributors:** the WordPress team +**Requires at least:** WordPress 4.9.6 +**Tested up to:** WordPress 4.9.8 +**Version:** 1.0 +**License:** GPLv2 or later +**License URI:** http://www.gnu.org/licenses/gpl-2.0.html +**Tags:** one-column, flexible-header, accessibility-ready, custom-colors, custom-menu, custom-logo, editor-style, featured-images, footer-widgets, rtl-language-support, sticky-post, theme-options, threaded-comments, translation-ready + + +## Description + +Twenty Nineteen is a Gutenberg-ready theme for WordPress. + +## Installation + +1. In your admin panel, go to Appearance -> Themes and click the 'Add New' button. +2. Type in Twenty Nineteen in the search form and press the 'Enter' key on your keyboard. +3. Click on the 'Activate' button to use your new theme right away. +4. Go to https://codex.wordpress.org/Twenty_Nineteen for a guide on how to customize this theme. +5. Navigate to Appearance > Customize in your admin panel and customize to taste. + + +## Copyright + +Twenty Nineteen WordPress Theme, Copyright 2018 WordPress.org +Twenty Nineteen is distributed under the terms of the GNU GPL + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +Twenty Nineteen bundles the following third-party resources: + +_s, Copyright 2015-2018 Automattic, Inc. +**License:** GPLv2 or later +Source: https://github.com/Automattic/_s/ + +normalize.css, Copyright 2012-2016 Nicolas Gallagher and Jonathan Neal +**License:** MIT +Source: https://necolas.github.io/normalize.css/ + +Bundled header image 1, Copyright XXXXX XXXXX +**License:** CC0 1.0 Universal (CC0 1.0) +Source: https://pexels.com/xxxxxxxxxx + +Bundled header image 2, Copyright XXXXX XXXXX +**License:** CC0 1.0 Universal (CC0 1.0) +Source: https://pexels.com/xxxxxxxxxx + +## Changelog + +### X.X +* Released: XX-XX-XXXX + +Initial release diff --git a/src/wp-content/themes/twentynineteen/sass/_normalize.scss b/src/wp-content/themes/twentynineteen/sass/_normalize.scss new file mode 100644 index 0000000000000..c5ad67a1af5fd --- /dev/null +++ b/src/wp-content/themes/twentynineteen/sass/_normalize.scss @@ -0,0 +1,341 @@ +/*! normalize.css v8.0.0 | MIT License | github.com/necolas/normalize.css */ + +/* Document + ========================================================================== */ + +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in iOS. + */ + +html { + line-height: 1.15; /* 1 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/* Sections + ========================================================================== */ + +/** + * Remove the margin in all browsers. + */ + +body { + margin: 0; +} + +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/* Grouping content + ========================================================================== */ + +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ + +hr { + box-sizing: content-box; /* 1 */ + height: 0; /* 1 */ + overflow: visible; /* 2 */ +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +pre { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/* Text-level semantics + ========================================================================== */ + +/** + * Remove the gray background on active links in IE 10. + */ + +a { + background-color: transparent; +} + +/** + * 1. Remove the bottom border in Chrome 57- + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ + +abbr[title] { + border-bottom: none; /* 1 */ + text-decoration: underline; /* 2 */ + text-decoration: underline dotted; /* 2 */ +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ + +b, +strong { + font-weight: bolder; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +code, +kbd, +samp { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/** + * Add the correct font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* Embedded content + ========================================================================== */ + +/** + * Remove the border on images inside links in IE 10. + */ + +img { + border-style: none; +} + +/* Forms + ========================================================================== */ + +/** + * 1. Change the font styles in all browsers. + * 2. Remove the margin in Firefox and Safari. + */ + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; /* 1 */ + font-size: 100%; /* 1 */ + line-height: 1.15; /* 1 */ + margin: 0; /* 2 */ +} + +/** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ + +button, +input { /* 1 */ + overflow: visible; +} + +/** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ + +button, +select { /* 1 */ + text-transform: none; +} + +/** + * Correct the inability to style clickable types in iOS and Safari. + */ + +button, +[type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} + +/** + * Remove the inner border and padding in Firefox. + */ + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +/** + * Restore the focus styles unset by the previous rule. + */ + +button:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +/** + * Correct the padding in Firefox. + */ + +fieldset { + padding: 0.35em 0.75em 0.625em; +} + +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ + +legend { + box-sizing: border-box; /* 1 */ + color: inherit; /* 2 */ + display: table; /* 1 */ + max-width: 100%; /* 1 */ + padding: 0; /* 3 */ + white-space: normal; /* 1 */ +} + +/** + * Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ + +progress { + vertical-align: baseline; +} + +/** + * Remove the default vertical scrollbar in IE 10+. + */ + +textarea { + overflow: auto; +} + +/** + * 1. Add the correct box sizing in IE 10. + * 2. Remove the padding in IE 10. + */ + +[type="checkbox"], +[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ + +[type="search"] { + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ +} + +/** + * Remove the inner padding in Chrome and Safari on macOS. + */ + +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ + +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ +} + +/* Interactive + ========================================================================== */ + +/* + * Add the correct display in Edge, IE 10+, and Firefox. + */ + +details { + display: block; +} + +/* + * Add the correct display in all browsers. + */ + +summary { + display: list-item; +} + +/* Misc + ========================================================================== */ + +/** + * Add the correct display in IE 10+. + */ + +template { + display: none; +} + +/** + * Add the correct display in IE 10. + */ + +[hidden] { + display: none; +} diff --git a/src/wp-content/themes/twentynineteen/sass/blocks/_blocks.scss b/src/wp-content/themes/twentynineteen/sass/blocks/_blocks.scss new file mode 100644 index 0000000000000..85ec52acaa4c5 --- /dev/null +++ b/src/wp-content/themes/twentynineteen/sass/blocks/_blocks.scss @@ -0,0 +1,631 @@ +/* !Block styles */ + +.entry-content > *, +.entry-summary > * { + + margin: 32px $size__spacing-unit; + max-width: calc(100vw - (2 * #{ $size__spacing-unit })); + + @include media(tablet) { + margin: 32px calc(2 * (100vw / 12)); + max-width: calc(8 * (100vw / 12)); + } + + @include media(desktop) { + max-width: calc(6 * (100vw / 12)); + } + +/* + // Set top margins for headings + & + h1:before, + & + h2:before, + & + h3, + & + h4, + & + h5, + & + h6 { + margin-top: calc(4 * #{ $size__spacing-unit}); + } +*/ + + > *:first-child { + margin-top: 0; + } + + > *:last-child { + margin-bottom: 0; + } + + &.alignwide { + + margin-left: auto; + margin-right: auto; + + @include media(tablet) { + margin-left: calc(1 * (100vw / 12)); + margin-right: calc(1 * (100vw / 12)); + max-width: calc(10 * (100vw / 12)); + } + } + + &.alignfull { + margin-top: calc(2 * #{$size__spacing-unit}); + margin-right: 0; + margin-bottom: calc(2 * #{$size__spacing-unit}); + margin-left: 0; + max-width: 100%; + } + + &.alignleft { + float: left; + max-width: calc(5 * (100vw / 12)); + margin-top: 0; + + @include media(tablet) { + max-width: calc(4 * (100vw / 12)); + margin-right: calc(2 * #{$size__spacing-unit}); + } + + @include media(desktop) { + max-width: calc(3 * (100vw / 12)); + } + } + + &.alignright { + float: right; + max-width: calc(5 * (100vw / 12)); + margin-top: 0; + margin-left: $size__spacing-unit; + margin-right: $size__spacing-unit; + + @include media(tablet) { + max-width: calc(4 * (100vw / 12)); + margin-left: calc(2 * #{$size__spacing-unit}); + margin-right: calc(2 * (100vw / 12)); + } + } +} + +.entry-content { + + //! Audio + .wp-block-audio { + + width: 100%; + + audio { + width: 100%; + } + + &.alignleft audio, + &.alignright audio { + + max-width: (0.5 * $mobile_width); + + @include media(tablet) { + max-width: (0.5 * $tablet_width); + } + + @include media(wide) { + max-width: (0.33 * $desktop_width); + } + } + } + + //! Video + .wp-block-video { + + video { + width: 100%; + } + } + + //! Button + .wp-block-button { + + .wp-block-button__link { + @include button-transition; + border: none; + background: $color__background-button; + font-size: $font__size-sm; + font-family: $font__heading; + line-height: $font__line-height-heading; + box-sizing: border-box; + font-weight: bold; + padding: ($size__spacing-unit * .66) $size__spacing-unit; + outline: none; + color: white; + outline: none; + + &:hover { + cursor: pointer; + } + + &:hover, &:focus { + background: $color__background-button-hover; + } + + &:focus { + outline: thin dotted; + outline-offset: -4px; + } + } + + &:not(.is-style-squared) .wp-block-button__link { + border-radius: 5px; + } + + &.is-style-outline .wp-block-button__link, + &.is-style-outline .wp-block-button__link:focus, + &.is-style-outline .wp-block-button__link:active { + + @include button-all-transition; + background: transparent; + border: 2px solid $color__background-button; + + &:not(.has-text-color) { + color: $color__background-button; + } + } + + &.is-style-outline .wp-block-button__link:hover { + border-color: $color__background-button-hover; + color: $color__background-button-hover; + } + } + + //! Latest posts, categories, archives + .wp-block-archives, + .wp-block-categories, + .wp-block-latest-posts { + padding: 0; + list-style: none; + + li { + color: $color__text-light; + font-family: $font__heading; + font-size: calc(#{$font__size_base} * #{$font__size-lg / 1em} ); + font-weight: bold; + line-height: $font__line-height-heading; + + a:after { + color: $color__text-light; + content: ","; + } + + &:last-child a:after { + color: $color__text-light; + content: "."; + } + } + } + + //! Latest posts grid view + .wp-block-latest-posts.is-grid { + li { + border-top: 2px solid $color__border; + padding-top: (1 * $size__spacing-unit); + margin-bottom: (2 * $size__spacing-unit); + a { + &:after { + content: ''; + } + } + &:last-child { + margin-bottom: auto; + a:after { + content: ''; + } + } + } + } + + //! Latest preformatted text + .wp-block-preformatted { + font-size: $font__size-xs; + line-height: 1.8; + padding: $size__spacing-unit; + } + + //! Verse + .wp-block-verse { + font-family: $font__body; + font-size: $font__size_base; + line-height: 1.8; + } + + // !Paragraphs + .has-drop-cap { + &:not(:focus):first-letter { + font-family: $font__heading; + font-size: $font__size-xxxl; + line-height: 1; + font-weight: bold; + margin: 0 0.25em 0 0; + } + } + + // !Pullquote + .wp-block-pullquote { + border: none; + padding: $size__spacing-unit; + + blockquote { + border: none; + padding-bottom: calc(2 * #{$size__spacing-unit}); + margin-right: 0; + } + + p { + font-size: $font__size-lg; + font-style: italic; + line-height: 1.3; + margin-bottom: 0.5em; + margin-top: 0.5em; + color: $color__text-main; + + em { + font-style: normal; + } + + @include media(tablet) { + font-size: $font__size-xl; + } + } + + cite { + display: inline-block; + font-family: $font__heading; + font-size: $font__size-xs; + line-height: 1.6; + text-transform: none; + color: $color__text-light; + } + + &.alignleft, + &.alignright { + padding: 0; + + blockquote { + margin-left: 0; + padding: 0; + text-align: left; + max-width: 100%; + } + } + + &.is-style-solid-color { + + p { + font-size: $font__size-lg; + line-height: 1.3; + margin-bottom: 0.5em; + margin-top: 0.5em; + + @include media(tablet) { + font-size: $font__size-xl; + } + } + + blockquote { + margin: 0 auto; + } + + blockquote:not(.has-text-color) p, + cite { + color: white; + } + + &:not(.has-background-color) { + background-color: $color__link; + } + + &.alignleft, + &.alignright { + padding: $size__spacing-unit $size__spacing-unit 0; + + blockquote { + padding: 0 0 calc( 1.5 * #{$size__spacing-unit} ); + margin-left: 0; + margin-top: 0; + } + + @include media(tablet) { + padding: calc( 2 * #{$size__spacing-unit} ) calc( 2 * #{$size__spacing-unit} ) $size__spacing-unit; + } + } + } + } + + //! Blockquote + .wp-block-quote { + + &:not(.is-large), + &:not(.is-style-large) { + border-left: 2px solid $color__link; + padding-top: 0; + padding-bottom: 0; + } + + p { + font-size: 1em; + font-style: normal; + line-height: 1.8; + } + + cite { + font-size: $font__size-xs; + } + + &.is-large, + &.is-style-large { + padding: $size__spacing-unit 0 ($size__spacing-unit) ($size__spacing-unit * 2); + margin: $size__spacing-unit 0; + border-left: none; + + p { + font-size: $font__size-lg; + line-height: 1.4; + font-style: italic; + } + + cite, + footer { + font-size: $font__size-xs; + } + + @include media(tablet) { + + margin: $size__spacing-unit calc(2 * (100vw / 12)); + max-width: calc(6 * (100vw / 12)); + + p { + font-size: $font__size-lg; + } + } + } + } + + //! Image + .wp-block-image { + + img { + display: block; + } + + &.alignleft, + &.alignright { + max-width: 100%; + } + + &.alignfull img { + width: 100vw; + margin-left: auto; + margin-right: auto; + } + } + + //! Cover Image + .wp-block-cover-image { + + .wp-block-cover-image-text, + h2 { + font-family: $font__heading; + font-size: $font__size-lg; + font-weight: bold; + + width: calc(100vw - (2 * #{ $size__spacing-unit })); + max-width: calc(100vw - (2 * #{ $size__spacing-unit })); + + @include media(tablet) { + font-size: $font__size-xl; + width: calc(8 * (100vw / 12)); + max-width: calc(8 * (100vw / 12)); + } + + @include media(desktop) { + width: calc(6 * (100vw / 12 )); + max-width: calc(6 * (100vw / 12 )); + } + } + + &.alignleft, + &.alignright, + &.aligncenter { + h2, + .wp-block-cover-image-text { + width: 100%; + z-index: 1; + left: 50%; + position: absolute; + transform: translate(-50%, -50%); + top: 50%; + } + } + + &.has-left-content { + justify-content: center; + + h2, + .wp-block-cover-image-text { + padding: $size__spacing-unit; + } + } + + &.has-right-content { + justify-content: center; + + h2, + .wp-block-cover-image-text { + padding: $size__spacing-unit; + } + } + } + + //! Galleries + .wp-block-gallery .blocks-gallery-image:last-child, + .wp-block-gallery .blocks-gallery-item:last-child { + margin-bottom: 16px; + } + + //! Captions + .wp-block-audio figcaption, + .wp-block-video figcaption, + .wp-block-image figcaption, + .wp-block-gallery .blocks-gallery-image figcaption, + .wp-block-gallery .blocks-gallery-item figcaption { + font-size: $font__size-xs; + font-family: $font__heading; + line-height: $font__line-height-pre; + margin: 0; + padding: ( $size__spacing-unit * .5 ); + text-align: left; + } + + //! Separator + .wp-block-separator, + hr { + margin-bottom: (2 * $size__spacing-unit); + margin-top: (2 * $size__spacing-unit); + + &:not(.is-style-dots) { + background-color: $color__text-light; + border: 0; + height: 2px; + } + + &:not(.is-style-wide):not(.is-style-dots) { + max-width: 2.25em; + } + + /* Remove duplicate rule-line when a separator + * is followed by an H1, or H2 */ + & + h1, + & + h2 { + + &:before { + display: none; + } + } + + &.is-style-dots:before { + color: $color__text-light; + font-size: $font__size-lg; + letter-spacing: $font__size-sm; + padding-left: $font__size-sm; + } + } + + //! Twitter Embed + .wp-block-embed-twitter { + overflow: hidden; + } + + //! Table + .wp-block-table { + + td, th { + border-color: $color__text-light; + } + } + + //! File + .wp-block-file { + font-family: $font__heading; + + .wp-block-file__button { + @include button-transition; + border: none; + border-radius: 5px; + background: $color__background-button; + font-size: $font__size-base; + font-family: $font__heading; + line-height: $font__line-height-heading; + font-weight: bold; + padding: ($size__spacing-unit * .75) $size__spacing-unit; + + @include media(desktop) { + font-size: $font__size-base; + padding: ($size__spacing-unit * .875) ($size__spacing-unit * 1.5); + } + + &:hover { + cursor: pointer; + } + + &:hover, &:focus { + background: $color__background-button-hover; + } + + &:focus { + outline: thin dotted; + outline-offset: -4px; + } + } + } + + //! Code + .wp-block-code { + border-radius: 0; + + code { + font-size: $font__size-md; + } + } + + //! Columns + .wp-block-columns { + + .wp-block-column > * { + + &:first-child { + margin-top: 0; + } + + &:last-child { + margin-bottom: 0; + } + } + + &[class*='has-'] > * { + margin-right: $size__spacing-unit; + + &:last-child { + margin-right: 0; + } + } + } + + //! Latest Comments + .wp-block-latest-comments { + + .wp-block-latest-comments__comment-meta { + font-family: $font__heading; + font-weight: bold; + + .wp-block-latest-comments__comment-date { + font-weight: normal; + } + } + + .wp-block-latest-comments__comment, + .wp-block-latest-comments__comment-date, + .wp-block-latest-comments__comment-excerpt p { + font-size: inherit; + } + + &.has-avatars { + + } + + &.has-dates { + + .wp-block-latest-comments__comment-date { + font-size: $font__size-xs; + } + } + + &.has-excerpts { + + } + } +} diff --git a/src/wp-content/themes/twentynineteen/sass/elements/_elements.scss b/src/wp-content/themes/twentynineteen/sass/elements/_elements.scss new file mode 100644 index 0000000000000..f0ffa3783c4a4 --- /dev/null +++ b/src/wp-content/themes/twentynineteen/sass/elements/_elements.scss @@ -0,0 +1,109 @@ +html { + box-sizing: border-box; +} + +::-moz-selection { + background: $color__background_selection; +} +::selection { + background: $color__background_selection; +} + +*, +*:before, +*:after { + box-sizing: inherit; +} + +body { + background: $color__background-body; +} + +a { + @include link-transition; + color: $color__link; +} + +a:visited { + +} + +a:hover, +a:active { + color: $color__link-hover; + outline: 0; + text-decoration: none; +} + +a:focus { + outline: 0; + text-decoration: underline; +} + +h1, h2, h3, h4, h5, h6 { + clear: both; + margin: $size__spacing-unit 0; +} + +h1:not(.site-title), h2 { + @include post-section-dash; +} + +hr { + background-color: $color__text-light; + border: 0; + height: 2px; +} + +@import "lists"; + +img { + height: auto; + max-width: 100%; + position: relative; + &:before { + background-color: $color__background-pre; + border: 1px dashed $color__background-hr; + border-radius: 3px; + content: " "; + display: block; + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; + } + + &:after { + color: $color__text-input; + content: "This image is broken :-/ ( "attr(alt)" )"; + display: block; + left: 50%; + position: absolute; + text-align: center; + top: 50%; + transform: translate(-50%, -50%); + width: 100%; + } +} + +figure { + margin: 0; +} + +blockquote { + + border-left: 2px solid $color__link; + margin-left: -($size__spacing-unit * 2); + padding: $size__spacing-unit 0 ($size__spacing-unit * .5) ($size__spacing-unit * 2); + + > p { + margin: 0 0 $size__spacing-unit; + } + + cite { + color: $color__text-light; + } +} + +@import "tables"; diff --git a/src/wp-content/themes/twentynineteen/sass/elements/_lists.scss b/src/wp-content/themes/twentynineteen/sass/elements/_lists.scss new file mode 100644 index 0000000000000..1db7633e1463d --- /dev/null +++ b/src/wp-content/themes/twentynineteen/sass/elements/_lists.scss @@ -0,0 +1,33 @@ +ul, +ol { + padding-left: ( 1 * $size__spacing-unit ); +} + +ul { + list-style: disc; + + ul { + list-style-type: circle; + } +} + +ol { + list-style: decimal; +} + +li { + line-height: $font__line-height-body; +} + +li > ul, +li > ol { + padding-left: ( 2 * $size__spacing-unit ); +} + +dt { + font-weight: bold; +} + +dd { + margin: 0 $size__spacing-unit $size__spacing-unit; +} diff --git a/src/wp-content/themes/twentynineteen/sass/elements/_tables.scss b/src/wp-content/themes/twentynineteen/sass/elements/_tables.scss new file mode 100644 index 0000000000000..7fffea3c9af7a --- /dev/null +++ b/src/wp-content/themes/twentynineteen/sass/elements/_tables.scss @@ -0,0 +1,8 @@ +table { + margin: 0 0 $size__spacing-unit; + width: 100%; + + td, th { + border-color: $color__text-light; + } +} diff --git a/src/wp-content/themes/twentynineteen/sass/forms/_buttons.scss b/src/wp-content/themes/twentynineteen/sass/forms/_buttons.scss new file mode 100644 index 0000000000000..50bce6acf257a --- /dev/null +++ b/src/wp-content/themes/twentynineteen/sass/forms/_buttons.scss @@ -0,0 +1,33 @@ +.button, +button, +input[type="button"], +input[type="reset"], +input[type="submit"] { + + @include button-transition; + background: $color__background-button; + border: none; + border-radius: 5px; + box-sizing: border-box; + color: white; + font-family: $font__heading; + font-size: $font__size-sm; + font-weight: 600; + line-height: $font__line-height-heading; + outline: none; + padding: ( $size__spacing-unit * .66 ) $size__spacing-unit; + + &:hover { + cursor: pointer; + } + + &:hover, + &:focus { + background: $color__background-button-hover; + } + + &:focus { + outline: thin dotted; + outline-offset: -4px; + } +} diff --git a/src/wp-content/themes/twentynineteen/sass/forms/_fields.scss b/src/wp-content/themes/twentynineteen/sass/forms/_fields.scss new file mode 100644 index 0000000000000..365d97770482d --- /dev/null +++ b/src/wp-content/themes/twentynineteen/sass/forms/_fields.scss @@ -0,0 +1,49 @@ +input[type="text"], +input[type="email"], +input[type="url"], +input[type="password"], +input[type="search"], +input[type="number"], +input[type="tel"], +input[type="range"], +input[type="date"], +input[type="month"], +input[type="week"], +input[type="time"], +input[type="datetime"], +input[type="datetime-local"], +input[type="color"], +textarea { + -webkit-backface-visibility: hidden; + background: $color__background-input; + border: solid 1px $color__border; + box-sizing: border-box; + outline: none; + padding: #{.5 * $size__spacing-unit} #{.66 * $size__spacing-unit}; + + &:focus { + border-color: $color__link; + outline: thin solid rgba( $color__link, 0.15 ); + outline-offset: -4px; + } +} + +select { + +} + +textarea { + box-sizing: border-box; + display: block; + width: 100%; + max-width: 100%; + resize: vertical; +} + +form { + + p { + margin: $size__spacing-unit 0; + } + +} \ No newline at end of file diff --git a/src/wp-content/themes/twentynineteen/sass/forms/_forms.scss b/src/wp-content/themes/twentynineteen/sass/forms/_forms.scss new file mode 100644 index 0000000000000..2036ef92c040e --- /dev/null +++ b/src/wp-content/themes/twentynineteen/sass/forms/_forms.scss @@ -0,0 +1,3 @@ +@import "buttons"; + +@import "fields"; diff --git a/src/wp-content/themes/twentynineteen/sass/layout/_layout.scss b/src/wp-content/themes/twentynineteen/sass/layout/_layout.scss new file mode 100644 index 0000000000000..e0e2c76143f1e --- /dev/null +++ b/src/wp-content/themes/twentynineteen/sass/layout/_layout.scss @@ -0,0 +1,11 @@ + +/** === Layout === */ + +#page { + width: 100%; +} + +.site-content { + overflow: hidden; +} + diff --git a/src/wp-content/themes/twentynineteen/sass/media/_captions.scss b/src/wp-content/themes/twentynineteen/sass/media/_captions.scss new file mode 100644 index 0000000000000..2ee771710ba7f --- /dev/null +++ b/src/wp-content/themes/twentynineteen/sass/media/_captions.scss @@ -0,0 +1,17 @@ +.wp-caption { + margin-bottom: calc(1.5 * #{$size__spacing-unit}); +} + +.wp-caption img[class*="wp-image-"] { + display: block; + margin-left: auto; + margin-right: auto; +} + +.wp-caption .wp-caption-text { + margin: calc(0.875 * #{$size__spacing-unit}) 0; +} + +.wp-caption-text { + text-align: center; +} diff --git a/src/wp-content/themes/twentynineteen/sass/media/_galleries.scss b/src/wp-content/themes/twentynineteen/sass/media/_galleries.scss new file mode 100644 index 0000000000000..1668f522185ab --- /dev/null +++ b/src/wp-content/themes/twentynineteen/sass/media/_galleries.scss @@ -0,0 +1,46 @@ +.gallery { + display: flex; + margin-bottom: calc(1.5 * #{$size__spacing-unit}); +} + +.gallery-item { + display: inline-block; + margin-right: $size__spacing-unit; + margin-bottom: $size__spacing-unit; + text-align: center; + vertical-align: top; + width: 100%; + + // Loops to enumerate the classes for gallery columns. + @for $i from 2 through 9 { + .gallery-columns-#{$i} & { + max-width: calc( ( 12 / #{$i} ) * (100% / 12) ); + } + } + + &:last-of-type { + margin-right: 0; + } +} + +.gallery-caption { + display: block; + font-size: $font__size-xs; + font-family: $font__heading; + line-height: $font__line-height-pre; + margin: 0; + padding: ( $size__spacing-unit * .5 ); +} + +.gallery-item > div > a { + display: block; + line-height: 0; + + // Accessibility + box-shadow: 0 0 0 0 transparent; + + &:focus { + box-shadow: 0 0 0 2px rgba( $color__link, 1 ); + } +} + diff --git a/src/wp-content/themes/twentynineteen/sass/media/_media.scss b/src/wp-content/themes/twentynineteen/sass/media/_media.scss new file mode 100644 index 0000000000000..3fba8c6472176 --- /dev/null +++ b/src/wp-content/themes/twentynineteen/sass/media/_media.scss @@ -0,0 +1,41 @@ +.page-content .wp-smiley, +.entry-content .wp-smiley, +.comment-content .wp-smiley { + border: none; + margin-bottom: 0; + margin-top: 0; + padding: 0; +} + +embed, +iframe, +object { + max-width: 100%; +} + +.custom-logo-link { + display: inline-block; +} + +.avatar { + border-radius: 100%; + display: block; + height: calc(2.25 * #{$size__spacing-unit}); + min-height: inherit; + width: calc(2.25 * #{$size__spacing-unit}); +} + +svg { + transition: fill $icon_transition ease-in-out; + fill: currentColor; +} + +/*-------------------------------------------------------------- +## Captions +--------------------------------------------------------------*/ +@import "captions"; + +/*-------------------------------------------------------------- +## Galleries +--------------------------------------------------------------*/ +@import "galleries"; diff --git a/src/wp-content/themes/twentynineteen/sass/mixins/_mixins-master.scss b/src/wp-content/themes/twentynineteen/sass/mixins/_mixins-master.scss new file mode 100644 index 0000000000000..08e57487a6bd3 --- /dev/null +++ b/src/wp-content/themes/twentynineteen/sass/mixins/_mixins-master.scss @@ -0,0 +1,85 @@ +// Rem output with px fallback +@mixin font-size($sizeValue: 1) { + font-size: ($sizeValue * 16) * 1px; + font-size: $sizeValue * 1rem; +} + +// Center block +@mixin center-block { + display: block; + margin-left: auto; + margin-right: auto; +} + +// Clearfix +@mixin clearfix() { + content: ""; + display: table; + table-layout: fixed; +} + +// Clear after (not all clearfix need this also) +@mixin clearfix-after() { + clear: both; +} + +// Column width with margin +@mixin column-width($numberColumns: 3) { + width: map-get($columns, $numberColumns) - (($columns__margin * ($numberColumns - 1)) / $numberColumns); +} + +@mixin filter-duotone { + + &:before { + background: $color__link; + mix-blend-mode: screen; + opacity: 0.1; + z-index: 2; + } + + &:after { + background: $color__link; + mix-blend-mode: multiply; + opacity: 1; + z-index: 3; + } +} + +@mixin filter-grayscale { + + position: relative; + filter: grayscale(100%); + z-index: 1; + + &:after { + display: block; + width: 100%; + height: 100%; + z-index: 10; + } +} + +@mixin post-section-dash { + + &:before { + background: $color__text-light; + content: "\020"; + display: block; + height: 2px; + margin: $size__spacing-unit 0; + width: 1em; + } +} + +/* If we add the border using a regular CSS border, it won't look good on non-retina devices, + * since its edges can look jagged due to lack of antialiasing. In this case, we are several + * layers of box-shadow to add the border visually, which will render the border smoother. */ + +@mixin box-shadow( $size ) { + box-shadow: + 0 0 0 $size $color__text-light inset, // Original border. + 0 0 0 ($size + 1px) $color__text-light inset, // Antialiasing, inner edge. + 0 0 1px 0 rgba( $color__text-light, 0.7 ); // Antialiasing, outer edge. +} + +@import "utilities"; diff --git a/src/wp-content/themes/twentynineteen/sass/mixins/_utilities.scss b/src/wp-content/themes/twentynineteen/sass/mixins/_utilities.scss new file mode 100644 index 0000000000000..4a81e192ab6fa --- /dev/null +++ b/src/wp-content/themes/twentynineteen/sass/mixins/_utilities.scss @@ -0,0 +1,44 @@ + +@mixin media( $res ) { + @if tablet == $res { + @media only screen and (min-width: $tablet_width) { + @content; + } + } + @if desktop == $res { + @media only screen and (min-width: $desktop_width) { + @content; + } + } + + @if wide == $res { + @media only screen and (min-width: $wide_width) { + @content; + } + } +} + +@mixin link-transition( $attr: color ) { + transition: $attr $link_transition ease-in-out; +} + +@mixin button-transition() { + transition: background $button_transition ease-in-out; +} + +@mixin button-all-transition() { + transition: all $button_transition ease-in-out; +} + +@mixin background-transition() { + transition: background $background_transition ease-in-out; +} + +@mixin selection { + ::-moz-selection { + @content; + } + ::selection { + @content; + } +} diff --git a/src/wp-content/themes/twentynineteen/sass/modules/_accessibility.scss b/src/wp-content/themes/twentynineteen/sass/modules/_accessibility.scss new file mode 100644 index 0000000000000..469887ccac5cb --- /dev/null +++ b/src/wp-content/themes/twentynineteen/sass/modules/_accessibility.scss @@ -0,0 +1,38 @@ +/* Text meant only for screen readers. */ +.screen-reader-text { + border: 0; + clip: rect(1px, 1px, 1px, 1px); + clip-path: inset(50%); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute !important; + width: 1px; + word-wrap: normal !important; /* Many screen reader and browser combinations announce broken words as they would appear visually. */ + + &:focus { + background-color: $color__background-screen; + border-radius: 3px; + box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.6); + clip: auto !important; + clip-path: none; + color: $color__text-screen; + display: block; + @include font-size(0.875); + font-weight: bold; + height: auto; + left: 5px; + line-height: normal; + padding: 15px 23px 14px; + text-decoration: none; + top: 5px; + width: auto; + z-index: 100000; /* Above WP toolbar. */ + } +} + +/* Do not show the outline on the skip link target. */ +#content[tabindex="-1"]:focus { + outline: 0; +} diff --git a/src/wp-content/themes/twentynineteen/sass/modules/_alignments.scss b/src/wp-content/themes/twentynineteen/sass/modules/_alignments.scss new file mode 100644 index 0000000000000..3e6c0f6691ec7 --- /dev/null +++ b/src/wp-content/themes/twentynineteen/sass/modules/_alignments.scss @@ -0,0 +1,14 @@ +.alignleft { + float: left; + margin-right: $size__spacing-unit; +} + +.alignright { + float: right; + margin-left: $size__spacing-unit; +} + +.aligncenter { + clear: both; + @include center-block; +} diff --git a/src/wp-content/themes/twentynineteen/sass/modules/_clearings.scss b/src/wp-content/themes/twentynineteen/sass/modules/_clearings.scss new file mode 100644 index 0000000000000..444b6b60679ac --- /dev/null +++ b/src/wp-content/themes/twentynineteen/sass/modules/_clearings.scss @@ -0,0 +1,23 @@ +.clear:before, +.clear:after, +.entry-content:before, +.entry-content:after, +.comment-content:before, +.comment-content:after, +.site-header:before, +.site-header:after, +.site-content:before, +.site-content:after, +.site-footer:before, +.site-footer:after { + @include clearfix; +} + +.clear:after, +.entry-content:after, +.comment-content:after, +.site-header:after, +.site-content:after, +.site-footer:after { + @include clearfix-after; +} diff --git a/src/wp-content/themes/twentynineteen/sass/navigation/_links.scss b/src/wp-content/themes/twentynineteen/sass/navigation/_links.scss new file mode 100644 index 0000000000000..6348aa588fbe7 --- /dev/null +++ b/src/wp-content/themes/twentynineteen/sass/navigation/_links.scss @@ -0,0 +1,21 @@ +a { + + @include link-transition; + color: $color__link; + + &:visited { + color: $color__link-visited; + } + + &:hover, + &:active { + color: $color__link-hover; + outline: 0; + text-decoration: none; + } + + &:focus { + outline: 0; + text-decoration: underline; + } +} diff --git a/src/wp-content/themes/twentynineteen/sass/navigation/_menus.scss b/src/wp-content/themes/twentynineteen/sass/navigation/_menus.scss new file mode 100644 index 0000000000000..a15612ad0f2ae --- /dev/null +++ b/src/wp-content/themes/twentynineteen/sass/navigation/_menus.scss @@ -0,0 +1,249 @@ +/** === Main menu === */ + +.main-navigation { + + display: inline; + + @include media(tablet) { + display: block; + } + + body.page & { + display: block; + } + + > div { + display: inline; + } + + .main-menu { + + display: inline; + margin: 0; + padding: 0; + + > li { + + display: inline; + + > a { + + font-weight: 700; + color: $color__link; + + + svg { + color: $color__link; + margin-right: #{-0.25 * $size__spacing-unit}; + } + + &:hover { + color: $color__link-hover; + + svg { + color: $color__link-hover; + } + } + + &:after { + content: ","; + display: inline; + color: $color__text-light; + } + } + + &.menu-item-has-children { + + &:after { + content: ","; + display: inline; + color: $color__text-light; + } + + & > a, + .menu-item-has-children > a { + + &:after { + content: ""; + display: none; + } + } + } + + &:last-child> a:after { + content: "."; + } + + &:last-child > a { + margin-right: 0; + } + } + } + + .sub-menu { + + background: $color__link; + color: $color__background-body; + list-style: none; + padding-left: 0; + + display: none; + float: left; + width: 100%; + position: absolute; + opacity: 0; + left: -999em; + z-index: 99999; + -webkit-transition: opacity 0.5s ease-in-out; + -moz-transition: opacity 0.5s ease-in-out; + transition: opacity 0.5s ease-in-out; + + @include media(tablet) { + max-width: calc(3 * (100vw / 12)); + } + + > li { + + clear: both; + display: block; + float: none; + position: relative; + word-break: break-word; + + &.menu-item-has-children { + + svg { + position: absolute; + right: #{0.5 * $size__spacing-unit}; + top: #{0.65 * $size__spacing-unit}; + } + + @include media(tablet) { + .menu-item-has-children > a { + + &:after { + content: "\203a"; + } + } + } + } + + > a { + color: $color__background-body; + display: block; + line-height: $font__line-height-heading; + padding: calc( .5 * #{$size__spacing-unit} ) $size__spacing-unit; + + &:hover, + &:focus { + background: $color__link-hover; + + &:after { + background: $color__link-hover; + } + } + } + } + } + + .main-menu .menu-item-has-children:hover > .sub-menu, + .main-menu .menu-item-has-children .sub-menu:hover { + display: block; + left: inherit; + margin-top: -2px; + opacity: 1; + + .sub-menu { + + margin-top: inherit; + position: relative; + padding-left: $size__spacing-unit; + + @include media(tablet) { + padding-left: 0; + position: absolute; + left: 100%; + top: 0; + } + } + } + + /* + * :focus-within needs its own selector so other similar + * selectors don’t get ignored if a browser doesn’t recognize it + */ + .main-menu .menu-item-has-children:focus-within > .sub-menu { + display: block; + left: inherit; + margin-top: -2px; + opacity: 1; + + .sub-menu { + + margin-top: inherit; + position: relative; + padding-left: $size__spacing-unit; + + @include media(tablet) { + padding-left: 0; + position: absolute; + left: 100%; + top: 0; + } + } + } +} + +/* Social menu */ + +.social-navigation { + margin-top: calc(#{$size__spacing-unit} / 2 ); + text-align: left; + + ul.social-links-menu { + @include clearfix; + + display: inline-block; + margin: 0; + padding: 0; + + li { + display: inline-block; + vertical-align: bottom; + vertical-align: -webkit-baseline-middle; + list-style: none; + + &:nth-child(n+2) { + margin-left: 0.1em; + } + + a { + border-bottom: 1px solid transparent; + display: block; + color: $color__text-main; + margin-bottom: -1px; + transition: opacity $link_transition ease-in-out; + + &:hover, + &:active { + color: $color__text-main; + opacity: 0.6; + } + + &:focus { + color: $color__text-main; + opacity: 1; + border-bottom: 1px solid $color__text-main; + } + + svg { + display: block; + width: 32px; + height: 32px; + + &#ui-icon-link { + transform: rotate(-45deg); + } + } + } + } + } +} diff --git a/src/wp-content/themes/twentynineteen/sass/navigation/_navigation.scss b/src/wp-content/themes/twentynineteen/sass/navigation/_navigation.scss new file mode 100644 index 0000000000000..2b18768c30e66 --- /dev/null +++ b/src/wp-content/themes/twentynineteen/sass/navigation/_navigation.scss @@ -0,0 +1,14 @@ +/*-------------------------------------------------------------- +## Links +--------------------------------------------------------------*/ +@import "links"; + +/*-------------------------------------------------------------- +## Menus +--------------------------------------------------------------*/ +@import "menus"; + +/*-------------------------------------------------------------- +## Next / Previous +--------------------------------------------------------------*/ +@import "next-previous"; diff --git a/src/wp-content/themes/twentynineteen/sass/navigation/_next-previous.scss b/src/wp-content/themes/twentynineteen/sass/navigation/_next-previous.scss new file mode 100644 index 0000000000000..92242a33799c8 --- /dev/null +++ b/src/wp-content/themes/twentynineteen/sass/navigation/_next-previous.scss @@ -0,0 +1,177 @@ +/* Next/Previous navigation */ + +// Singular navigation +.post-navigation { + + margin: calc(3 * 1rem) 0; + + .nav-links { + + margin: 0 $size__spacing-unit; + max-width: 100%; + display: flex; + flex-direction: column; + + @include media(desktop) { + flex-direction: row; + margin: 0 calc(2 * (100vw / 12)); + max-width: calc(8 * (100vw / 12)); + } + + a { + .meta-nav { + color: $color__text-light; + user-select: none; + + &:before, + &:after { + display: none; + content: "—"; + width: 2em; + color: $color__text-light; + height: 1em; + } + } + + .post-title { + hyphens: auto; + } + + &:hover { + color: $color__link-hover; + } + } + + .nav-previous, + .nav-next { + + @include media(desktop) { + min-width: calc(50% - 2 * #{$size__spacing-unit}); + } + } + + .nav-previous { + order: 2; + + @include media(desktop) { + order: 1; + } + + + .nav-next { + margin-bottom: $size__spacing-unit; + } + + .meta-nav { + &:before { + display: inline; + } + } + } + + .nav-next { + order: 1; + + @include media(desktop) { + order: 2; + } + + .meta-nav { + &:after { + display: inline; + } + } + } + } +} + +// Index/archive navigation +.pagination { + + .nav-links { + + display: flex; + flex-wrap: wrap; + padding: 0 calc(.5 * #{$size__spacing-unit}); + + + & > * { + padding: calc(.5 * #{$size__spacing-unit}); + + &.dots, + &.prev { + padding-left: 0; + } + + &.dots, + &.next { + padding-right: 0; + } + } + + .nav-next-text, + .nav-prev-text { + display: none; + } + + @include media(tablet) { + + margin-left: calc(2 * (100vw / 12) ); + padding: 0; + + .prev, + .next { + + & > * { + display: inline-block; + vertical-align: text-bottom; + } + } + + & > * { + padding: $size__spacing-unit; + } + } + } +} + +// Comments navigation +.comment-navigation { + + .nav-links { + + display: flex; + flex-direction: row; + } + + .nav-previous, + .nav-next { + min-width: 50%; + width: 100%; + + .secondary-text { + display: none; + + @include media(tablet) { + display: inline; + } + } + + svg { + vertical-align: middle; + position: relative; + margin: 0 -0.35em; + top: -1px; + } + + a { + + &:hover { + color: $color__link; + } + } + } + + .nav-next { + text-align: right; + } +} diff --git a/src/wp-content/themes/twentynineteen/sass/site/_site.scss b/src/wp-content/themes/twentynineteen/sass/site/_site.scss new file mode 100644 index 0000000000000..692244f5a31ea --- /dev/null +++ b/src/wp-content/themes/twentynineteen/sass/site/_site.scss @@ -0,0 +1,27 @@ + +/*-------------------------------------------------------------- +## Header +--------------------------------------------------------------*/ +@import "header/site-header"; +@import "header/site-featured-image"; + +/*-------------------------------------------------------------- +## Posts and pages +--------------------------------------------------------------*/ +@import "primary/posts-and-pages"; + +/*-------------------------------------------------------------- +## Comments +--------------------------------------------------------------*/ +@import "primary/comments"; + +/*-------------------------------------------------------------- +## Archives +--------------------------------------------------------------*/ +@import "primary/archives"; + +/*-------------------------------------------------------------- +## Footer +--------------------------------------------------------------*/ +@import "footer/site-footer"; + diff --git a/src/wp-content/themes/twentynineteen/sass/site/footer/_site-footer.scss b/src/wp-content/themes/twentynineteen/sass/site/footer/_site-footer.scss new file mode 100644 index 0000000000000..07cb56986f02d --- /dev/null +++ b/src/wp-content/themes/twentynineteen/sass/site/footer/_site-footer.scss @@ -0,0 +1,29 @@ +/* Site footer */ + +.site-footer { + + color: $color__text-light; + + .site-info { + + margin: calc(2 * #{$size__spacing-unit}) $size__spacing-unit; + + @include media(tablet) { + margin: calc(3 * #{$size__spacing-unit}) calc(2 * (100vw / 12)); + max-width: calc(8 * (100vw / 12)); + } + + .imprint { + margin-right: $size__spacing-unit; + } + } + + a { + color: inherit; + + &:hover { + text-decoration: none; + color: $color__link; + } + } +} \ No newline at end of file diff --git a/src/wp-content/themes/twentynineteen/sass/site/header/_site-featured-image.scss b/src/wp-content/themes/twentynineteen/sass/site/header/_site-featured-image.scss new file mode 100644 index 0000000000000..8419beacf3411 --- /dev/null +++ b/src/wp-content/themes/twentynineteen/sass/site/header/_site-featured-image.scss @@ -0,0 +1,181 @@ +// Featured image styles + +.site-header.featured-image { + + /* Need relative positioning to properly align layers. */ + position: relative; + + /* Add text shadow to text, to increase readability. */ + text-shadow: 0 1px 2px rgba(black, 0.35); + + /* Set white text color when featured image is set. */ + .site-branding .site-title, + .site-branding .site-description, + .main-navigation a:after, + .main-navigation .main-menu > li.menu-item-has-children:after, + .main-navigation li, + .social-navigation li, + .entry-meta, + .entry-title { + color: white; + } + + .main-navigation a, + .social-navigation a, + .site-title a, + .hentry a { + color: white; + transition: opacity $link_transition ease-in-out; + + &:hover, + &:active { + color: white; + opacity: 0.6; + } + + &:focus { + color: white; + } + } + + // add focus state to social media icons + .social-navigation a { + &:focus { + color: white; + opacity: 1; + border-bottom: 1px solid white; + } + } + + .social-navigation svg, + .hentry svg { + /* Use -webkit- only if supporting: Chrome < 54, iOS < 9.3, Android < 4.4.4 */ + -webkit-filter: drop-shadow(0 1px 2px rgba(black, 0.35) ); + filter: drop-shadow(0 1px 2px rgba(black, 0.35) ); + } + + /* Post header styles */ + .hentry .entry-header { + + margin-left: 0; + margin-right: 0; + + @include media (tablet) { + + margin-left: calc(2 * (100vw / 12)); + margin-right: calc(2 * (100vw / 12)); + } + + .entry-title { + + &:before { + background: white; + } + } + } + + /* Custom Logo Link */ + + .custom-logo-link { + + background: white; + box-shadow: 0 0 0 0 rgba(white, 0); + + &:hover, + &:active, + &:focus { + box-shadow: 0 0 0 2px rgba(white, 1); + } + } + + /* Make sure important elements are above pseudo elements used for effects. */ + .site-branding, + .hentry .entry-header { + z-index: 10; + } + + /* Set up image filter layer positioning */ + .site-branding-container:before, + .site-branding-container:after, + .hentry:before, + .hentry:after, + &:after { + display: block; + position: absolute; + top: 0; left: 0; + content: "\020"; + width: 100%; + height: 100%; + } + + /* Background & Effects */ + /* Shared background settings between pseudo elements. See .site-branding-container */ + background-position: center; + background-repeat: no-repeat; + background-size: cover; + + /* The intensity of each blend mode is controlled via layer opacity. */ + + /* First layer: grayscale. */ + .site-branding-container:before { + background-position: center; + background-repeat: no-repeat; + background-size: cover; + filter: grayscale(100%); + z-index: 1; + } + + /* Second layer: screen. */ + .hentry:before { + background: $color__link; + mix-blend-mode: screen; + opacity: 0.1; + z-index: 2; + } + + /* Third layer: multiply. */ + .hentry:after { + background: $color__link; + mix-blend-mode: multiply; + opacity: 1; + z-index: 3; + } + + /* Fourth layer: overlay. */ + .site-branding-container:after { + background: rgba(white, 0.35); + mix-blend-mode: overlay; + opacity: 0.5; + z-index: 4; + } + + /* Fifth layer: readability overlay */ + &:after { + background: mix($color__link, black, 12%); + + /** + * Add a transition to the readability overlay, to add a subtle + * but smooth effect when resizing the screen. + */ + transition: opacity 1200ms ease-in-out; + + z-index: 5; + opacity: 0.38; + + @include media(tablet) { + opacity: 0.18; + } + + @include media(desktop) { + opacity: 0.1; + } + } + + ::-moz-selection { + background: rgba(white, 0.17); + } + + ::selection { + background: rgba(white, 0.17); + } +} diff --git a/src/wp-content/themes/twentynineteen/sass/site/header/_site-header.scss b/src/wp-content/themes/twentynineteen/sass/site/header/_site-header.scss new file mode 100644 index 0000000000000..62fd0a56c4dcc --- /dev/null +++ b/src/wp-content/themes/twentynineteen/sass/site/header/_site-header.scss @@ -0,0 +1,128 @@ +// Site header + +.site-header { + + padding: 1em; + + @include media(tablet) { + margin: 0; + padding: 3rem 0; + + &.featured-image { + display: flex; + min-height: 100vh; + flex-direction: column; + justify-content: space-between; + margin-bottom: 3rem; + + .site-branding-container { + margin-bottom: auto; + } + } + } +} + +// Site branding + +.site-branding { + + color: $color__text-light; + position: relative; + + @include media(tablet) { + margin: 0 calc(2 * (100vw / 12)); + max-width: 22em; + } +} + +// Site logo + +.site-logo { + + position: relative; + z-index: 999; + margin-bottom: calc(.66 * #{$size__spacing-unit}); + + @include media(tablet) { + margin-bottom: 0; + position: absolute; + right: calc(100% + (0.5 * calc(100vw / 12))); + top: 4px; // Accounts for box-shadow widths + z-index: 999; + } + + .custom-logo-link { + border-radius: 100%; + box-sizing: content-box; + box-shadow: 0 0 0 0 rgba(black, 0); + display: block; + width: 32px; + height: 32px; + overflow: hidden; + transition: box-shadow $background_transition ease-in-out; + + .custom-logo { + min-height: inherit; + } + + &:hover, + &:active, + &:focus { + box-shadow: 0 0 0 2px rgba(black, 1); + } + + @include media(tablet) { + width: 64px; + height: 64px; + } + } +} + +// Site title + +.site-title { + + margin: auto; + display: inline; + color: $color__text-main; + + .featured-image & { + margin: 0; + + @include media(tablet) { + display: inline-block; + } + } + + /* When there is no description set, make sure navigation appears below title. */ + + .main-navigation { + display: block; + } + + a { + color: inherit; + + &:hover { + color: $color__text-hover; + } + } + + @include media(tablet) { + display: inline; + } +} + +// Site description + +.site-description { + + display: inline; + color: $color__text-light; + font-weight: normal; + margin: 0; + + &:not(:empty):before { + content: "\2014"; + margin: 0 .2em; + } +} diff --git a/src/wp-content/themes/twentynineteen/sass/site/primary/_archives.scss b/src/wp-content/themes/twentynineteen/sass/site/primary/_archives.scss new file mode 100644 index 0000000000000..fe598e74ac7e5 --- /dev/null +++ b/src/wp-content/themes/twentynineteen/sass/site/primary/_archives.scss @@ -0,0 +1,65 @@ +.archive .page-header, +.search .page-header, +.error404 .page-header { + + margin: $size__spacing-unit $size__spacing-unit calc(3 * #{$size__spacing-unit}); + + @include media(tablet) { + margin: 0 calc(2 * (100vw / 12)) calc(3 * #{$size__spacing-unit}); + max-width: calc(8 * (100vw / 12)); + } + + .page-title { + + color: $color__text-light; + display: inline; + letter-spacing: normal; + + &:before { + display: none; + } + } + + .search-term, + .page-description { + display: inherit; + clear: both; + + &:after { + content: "."; + font-weight: bold; + color: $color__text-light; + } + } +} + +.hfeed .hentry .entry-header { + + @include media(tablet) { + margin: calc(3 * #{$size__spacing-unit}) calc(2 * (100vw / 12)) calc(#{ $size__spacing-unit } / 2); + } +} + +/* 404 & Not found */ + +.error-404.not-found, +.no-results.not-found { + + .page-content { + + margin: calc(3 * #{$size__spacing-unit}) #{$size__spacing-unit}; + + @include media(tablet) { + margin: calc(3 * #{$size__spacing-unit}) calc(2 * (100vw / 12)) calc(#{ $size__spacing-unit } / 2); + } + } + + .search-submit { + vertical-align: middle; + margin: $size__spacing-unit 0; + } + + .search-field { + width: 100%; + } +} diff --git a/src/wp-content/themes/twentynineteen/sass/site/primary/_comments.scss b/src/wp-content/themes/twentynineteen/sass/site/primary/_comments.scss new file mode 100644 index 0000000000000..5be0941d41bca --- /dev/null +++ b/src/wp-content/themes/twentynineteen/sass/site/primary/_comments.scss @@ -0,0 +1,404 @@ +.comment-content a { + word-wrap: break-word; +} + +.bypostauthor { + display: block; +} + +.comments-area { + + /* Add extra margin when the comments section is located immediately after the + * post itself (this happens on pages). + */ + .hentry + & { + margin-top: calc(3 * #{$size__spacing-unit}); + } + + .comments-title-wrap, + .comment-list, + > .comment-respond, + .comment-form-flex, + .no-comments { + + margin: calc(2 * #{$size__spacing-unit}) $size__spacing-unit; + + @include media(tablet) { + margin: calc(3 * #{$size__spacing-unit}) calc(2 * (100vw / 12)); + max-width: calc(6 * (100vw / 12)); + } + } + + .comments-title-wrap { + + align-items: baseline; + display: flex; + justify-content: space-between; + + .comments-title { + @include post-section-dash; + margin: 0; + } + } +} + +#comment { + max-width: 100%; + box-sizing: border-box; +} + +#respond { + + position: relative; + + .comment-user-avatar { + display: none; + } + + .comment .comment-form { + padding-left: 0; + } + + > small { + display: block; + font-size: $font__size_base; + position: absolute; + left: calc(#{$size__spacing-unit} + 100%); + top: calc(-3.5 * #{$size__spacing-unit}); + width: calc(100vw / 12 ); + } +} + +#comments { + + > .comments-title:last-child { + display: none; + } + + > #respond { + @include media(desktop) { + + .comment-user-avatar { + position: absolute; + display: block; + top: 0; + left: 0; + + .avatar { + display: block; + } + } + } + } +} + +.comment-form-flex { + + display: flex; + flex-direction: column; + + .comments-title { + display: none; + margin: 0; + order: 1; + } + + #respond { + + order: 2; + + .comments-title { + display: block; + } + } +} + +.comment-list { + + list-style: none; + padding: 0; + + .children { + margin: 0; + padding: 0 0 0 $size__spacing-unit; + } + + > .comment:first-child { + margin-top: 0; + } + +} + +.comment-reply { + + left: calc(#{$size__spacing-unit} + 100%); + bottom: 0; + position: absolute; + + #respond + & { + display: none; + } + + .comment-reply-link { + display: inline-block; + } +} + +.comment { + + list-style: none; + position: relative; + + @include media(tablet) { + + padding-left: calc(.5 * (#{$size__spacing-unit} + calc(100vw / 12 ))); + + .children { + padding-left: 0; + } + } + + &:hover > .comment-body > .comment-meta > .comment-metadata { + > .edit-link-sep, + > .edit-link { + opacity: 1; + } + } + + .comment-body { + margin: calc(2 * #{$size__spacing-unit}) 0; + } + + .comment-meta { + position: relative; + } + + .comment-author { + + @include media(tablet) { + display: inline-block; + vertical-align: baseline; + } + + .avatar { + float: left; + margin-right: $size__spacing-unit; + position: relative; + + @include media(tablet) { + float: inherit; + margin-right: inherit; + position: absolute; + top: 0; + right: calc(100% + #{$size__spacing-unit}); + } + } + + .fn { + position: relative; + display: block; + + @include media(tablet) { + display: inline-block; + vertical-align: baseline; + } + + a { + color: inherit; + + &:hover { + color: $color__link-hover; + } + } + } + + .post-author-badge { + border-radius: 100%; + display: block; + height: 18px; + position: absolute; + background: lighten( $color__link, 8% ); + right: calc(100% + #{$size__spacing-unit * .25}); + top: -3px; + width: 18px; + + svg { + width: inherit; + height: inherit; + display: block; + fill: white; + transform: scale(0.875); + } + } + } + + .comment-metadata { + + @include media(tablet) { + display: inline-block; + margin-left: $size__spacing-unit; + position: relative; + vertical-align: baseline; + } + + > a, + .comment-edit-link { + display: inline-block; + font-weight: 500; + color: $color__text-light; + vertical-align: baseline; + + time { + vertical-align: baseline; + } + + &:hover { + color: $color__text-hover; + text-decoration: none; + } + } + + > * { + display: inline-block; + } + + .edit-link-sep { + color: $color__text-light; + margin: 0 0.2em; + opacity: 0; + transition: opacity 200ms ease-in-out; + vertical-align: baseline; + } + + .edit-link { + color: $color__text-light; + transition: opacity 200ms ease-in-out; + opacity: 0; + + svg { + transform: scale(0.8); + vertical-align: baseline; + margin-right: 0.1em; + } + } + + .comment-edit-link { + + position: relative; + padding-left: $size__spacing-unit; + margin-left: -#{$size__spacing-unit}; + z-index: 1; + + &:hover { + color: $color__link; + } + } + } + + .comment-content { + + margin: $size__spacing-unit 0; + + > *:first-child { + margin-top: 0; + } + + > *:last-child { + margin-bottom: 0; + } + + a { + text-decoration: underline; + + &:hover { + text-decoration: none; + } + } + } +} + +.comment-reply-link, +#cancel-comment-reply-link { + font-weight: 500; + + &:hover { + color: $color__link-hover; + } +} + +.discussion-avatar-list { + @include clearfix; + + margin: 0; + padding: 0; + + li { + position: relative; + list-style: none; + margin: 0 -8px 0 0; + padding: 0; + float: left; + } + + .comment-user-avatar { + + img { + height: calc(1.5 * #{$size__spacing-unit}); + width: calc(1.5 * #{$size__spacing-unit}); + } + + @include media(tablet) { + + } + } +} + +.discussion-meta { + + .discussion-avatar-list { + display: inline-block; + margin-right: 8px; + } + + .discussion-meta-info { + margin: 0; + + .svg-icon { + vertical-align: middle; + fill: currentColor; + transform: scale( 0.6 ) scaleX(-1) translateY(-0.1em); + margin-left: -#{.25 * $size__spacing-unit}; // Align icon with avatars above. + } + } + +} + +.comment-form { + + .comment-notes, + label { + font-family: $font__heading; + font-size: $font__size-xs; + color: $color__text-light; + } + + .comment-form-author, + .comment-form-email { + @include media(tablet) { + width: calc(50% - #{$size__spacing-unit / 2}); + float: left; + } + } + + .comment-form-email { + @include media(tablet) { + margin-left: $size__spacing-unit; + } + } + + input[name="author"], + input[name="email"], + input[name="url"] { + display: block; + width: 100%; + } +} diff --git a/src/wp-content/themes/twentynineteen/sass/site/primary/_posts-and-pages.scss b/src/wp-content/themes/twentynineteen/sass/site/primary/_posts-and-pages.scss new file mode 100644 index 0000000000000..4b4ae643c2a53 --- /dev/null +++ b/src/wp-content/themes/twentynineteen/sass/site/primary/_posts-and-pages.scss @@ -0,0 +1,240 @@ +.sticky { + display: block; +} + +.sticky-post { + background: $color__background-button; + color: #fff; + display: inline-block; + font-weight: bold; + line-height: 1; + padding: .25rem; + position: absolute; + text-transform: uppercase; + top: -$size__spacing-unit; + z-index: 1; +} + +.updated:not(.published) { + display: none; +} + +.page-links { + clear: both; + margin: 0 0 calc(1.5 * #{$size__spacing-unit}); +} + +.hentry { + + margin-top: calc(6 * #{$size__spacing-unit}); + + &:first-of-type { + margin-top: 0; + } + + .entry-header { + + margin: calc(3 * #{ $size__spacing-unit}) $size__spacing-unit $size__spacing-unit; + position: relative; + + @include media(tablet) { + margin: calc(3 * #{ $size__spacing-unit}) calc(2 * (100vw / 12 ) ) $size__spacing-unit; + + .featured-image & { + margin-bottom: 0; + } + } + } + + .entry-title { + + @include post-section-dash; + margin: 0; + + a { + color: inherit; + + &:hover { + color: $color__text-hover; + } + } + } + + .entry-meta, + .entry-footer { + + color: $color__text-light; + font-weight: 500; + + > span { + + margin-right: $size__spacing-unit; + + &:last-child { + margin-right: 0; + } + } + + a { + + @include link-transition; + color: currentColor; + + &:hover { + text-decoration: none; + color: $color__link; + } + } + + .svg-icon { + position: relative; + display: inline-block; + vertical-align: middle; + margin-right: 0.5em; + } + } + + .entry-meta { + + margin: $size__spacing-unit 0; + + &.has-discussion .comment-count { + + @include media(desktop) { + float: right; + position: relative; + } + + .discussion-avatar-list { + display: none; + + @include media(desktop) { + bottom: 100%; + display: block; + position: absolute; + } + } + } + } + + .entry-footer { + + margin: calc(2 * #{$size__spacing-unit}) $size__spacing-unit $size__spacing-unit; + + @include media(tablet) { + margin: calc(3 * #{$size__spacing-unit}) calc(2 * (100vw / 12)); + max-width: calc(8 * (100vw / 12)); + } + + @include media(tablet) { + max-width: calc(6 * (100vw / 12)); + } + } + + .post-thumbnail { + + margin: $size__spacing-unit; + + @include media(tablet) { + margin: $size__spacing-unit calc(2 * (100vw / 12)); + } + + &:focus { + outline: none; + } + + .post-thumbnail-inner { + display: block; + + img { + position: relative; + display: block; + width: 100%; + } + } + + } + + .image-filters-enabled & { + + .post-thumbnail { + position: relative; + display: block; + + .post-thumbnail-inner { + @include filter-grayscale; + } + + &:before, &:after { + position: absolute; + display: block; + width: 100%; + height: 100%; + top: 0; left: 0; + content: "\020"; + display: block; + pointer-events: none; + } + + @include filter-duotone; + + } + + } + + .entry-content { + + .more-link { + @include link-transition; + display: inline; + color: inherit; + + &:after { + content: "»"; + margin-left: 0.5em; + } + + &:hover { + color: $color__link; + text-decoration: none; + } + } + + a { + text-decoration: underline; + + &:hover { + text-decoration: none; + } + } + + // Overwrite iframe embeds that have inline styles. + > iframe[style] { + + margin: 32px $size__spacing-unit !important; + max-width: calc(100vw - (2 * #{ $size__spacing-unit })) !important; + + @include media(tablet) { + margin: 32px calc(2 * (100vw / 12)) !important; + max-width: calc(8 * (100vw / 12)) !important; + } + + @include media(desktop) { + max-width: calc(6 * (100vw / 12)) !important; + } + } + + // Classic editor audio embeds. + .wp-audio-shortcode { + max-width: calc(100vw - (2 * #{ $size__spacing-unit })); + + @include media(tablet) { + max-width: calc(8 * (100vw / 12)); + } + + @include media(desktop) { + max-width: calc(6 * (100vw / 12)); + } + } + } +} diff --git a/src/wp-content/themes/twentynineteen/sass/site/secondary/_widgets.scss b/src/wp-content/themes/twentynineteen/sass/site/secondary/_widgets.scss new file mode 100644 index 0000000000000..bf9ba2c62b248 --- /dev/null +++ b/src/wp-content/themes/twentynineteen/sass/site/secondary/_widgets.scss @@ -0,0 +1,8 @@ +.widget { + margin: 0 0 #{$size__spacing-unit}; + + /* Make sure select elements fit in widgets. */ + select { + max-width: 100%; + } +} diff --git a/src/wp-content/themes/twentynineteen/sass/typography/_copy.scss b/src/wp-content/themes/twentynineteen/sass/typography/_copy.scss new file mode 100644 index 0000000000000..3b4fc6a01da53 --- /dev/null +++ b/src/wp-content/themes/twentynineteen/sass/typography/_copy.scss @@ -0,0 +1,61 @@ +p { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +dfn, cite, em, i { + font-style: italic; +} + +blockquote { + + > p { + font-size: $font__size-lg; + font-style: italic; + line-height: $font__line-height-heading; + } + + cite { + font-size: $font__size-sm; + font-style: normal; + font-family: $font__heading; + } +} + +pre { + font-size: $font__size-sm; + font-family: $font__pre; + line-height: $font__line-height-body; + overflow: auto; +} + +code, kbd, tt, var { + font-size: $font__size-sm; + font-family: $font__code; +} + +abbr, acronym { + border-bottom: 1px dotted #666; + cursor: help; +} + +mark, ins { + background: #fff9c0; + text-decoration: none; +} + +big { + font-size: 125%; +} + +a { + text-decoration: none; + + &:hover { + text-decoration: none; + } + + &:focus { + text-decoration: underline; + } +} diff --git a/src/wp-content/themes/twentynineteen/sass/typography/_headings.scss b/src/wp-content/themes/twentynineteen/sass/typography/_headings.scss new file mode 100644 index 0000000000000..06bb1acf382c1 --- /dev/null +++ b/src/wp-content/themes/twentynineteen/sass/typography/_headings.scss @@ -0,0 +1,139 @@ +.main-navigation, +.page-description, +h2.author-title, +.not-found .page-title, +.error-404 .page-title, +.post-navigation .post-title, +.pagination .nav-links, +.comments-title, +.comment-author .fn, +.no-comments, +.site-title, +h1, h2, h3, h4, h5, h6 { + font-family: $font__heading; + font-weight: 700; + letter-spacing: -0.02em; + line-height: $font__line-height-heading; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.site-info, +.page-description, +.post-navigation .post-title, +.comment-metadata, +.discussion-meta-info, +.entry-meta, +.entry-footer, +.comment-reply-link, +#cancel-comment-reply-link, +img:after, +.page-links, +.sticky-post { + font-family: $font__heading; +} + +.page-title { + font-family: $font__body; +} + +.site-branding, +.main-navigation ul.main-menu > li, +.social-navigation, +.author-description p.author-bio, +.nav-links { + line-height: 1.25; +} + +h1 { + font-size: $font__size-xl; + + @include media(tablet) { + font-size: $font__size-xxl; + } +} + +.entry-title, +.not-found .page-title, +.error-404 .page-title, +.has-larger-font-size, +h2 { + font-size: $font__size-lg; + + @include media(tablet) { + font-size: $font__size-xl; + } +} + +.has-regular-font-size, +.has-large-font-size, +.comments-title, +h3 { + font-size: $font__size-lg; +} + +.site-title, +.site-description, +.main-navigation, +.nav-links, +.page-title, +.page-description, +.comment-author .fn, +.no-comments, +h2.author-title, +p.author-bio, +h4 { + font-size: $font__size-md; +} + +.pagination .nav-links, +.comment-content, +h5 { + font-size: $font__size-sm; +} + +.entry-meta, +.entry-footer, +.discussion-meta-info, +.site-info, +.has-small-font-size, +.comment-reply-link, +.comment-metadata, +.comment-notes, +.sticky-post, +#cancel-comment-reply-link, +img:after, +h6 { + font-size: $font__size-xs; +} + +.site-title, +.page-title { + font-weight: normal; +} + +.page-description, +.page-links a { + font-weight: bold; +} + +.site-description { + letter-spacing: -0.01em; +} + +.post-navigation .post-title, +.entry-title, +.not-found .page-title, +.error-404 .page-title, +.comments-title, +blockquote { + hyphens: auto; + word-break: break-word; +} + +/* Do not hyphenate entry title on tablet view and bigger. */ +.entry-title { + @include media(tablet) { + hyphens: none; + } +} diff --git a/src/wp-content/themes/twentynineteen/sass/typography/_typography.scss b/src/wp-content/themes/twentynineteen/sass/typography/_typography.scss new file mode 100644 index 0000000000000..565cdd5a6de45 --- /dev/null +++ b/src/wp-content/themes/twentynineteen/sass/typography/_typography.scss @@ -0,0 +1,32 @@ + +html { + font-size: $font__size_base; +} + +body { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + color: $color__text-main; + font-family: $font__body; + font-weight: 400; + font-size: 1em; + line-height: $font__line-height-body; + margin: 0; + text-rendering: optimizeLegibility; +} + +button, +input, +select, +optgroup, +textarea { + color: $color__text-main; + font-family: $font__body; + font-weight: 400; + line-height: $font__line-height-body; + text-rendering: optimizeLegibility; +} + +@import "headings"; + +@import "copy"; diff --git a/src/wp-content/themes/twentynineteen/sass/variables-site/_colors.scss b/src/wp-content/themes/twentynineteen/sass/variables-site/_colors.scss new file mode 100644 index 0000000000000..989daa0ca953e --- /dev/null +++ b/src/wp-content/themes/twentynineteen/sass/variables-site/_colors.scss @@ -0,0 +1,34 @@ + +// Backgrounds +$color__background-body: #fff; +$color__background-input: #fff; +$color__background-screen: #f1f1f1; +$color__background-hr: #ccc; +$color__background-button: #0073aa; +$color__background-button-hover: #111; +$color__background-pre: #eee; +$color__background-ins: #fff9c0; +$color__background_selection: mix( $color__background-body, $color__background-button, 75% ); // lighten( salmon, 22.5% ); // lighten( #0999d4, 48% ); + +// Text +$color__text-main: #111; +$color__text-light: #767676; +$color__text-hover: lighten( #111, 22.5% ); +$color__text-screen: #21759b; +$color__text-input: #666; +$color__text-input-focus: #111; + +// Links +$color__link: #0073aa; +$color__link-visited: #0073aa; +$color__link-hover: darken( $color__link, 10% ); + +// Borders +$color__border: #ccc; +$color__border-link: #0073aa; +$color__border-link-hover: darken( $color__link, 10% ); +$color__border-button: #ccc #ccc #bbb; +$color__border-button-hover: #ccc #bbb #aaa; +$color__border-button-focus: #aaa #bbb #bbb; +$color__border-input: $color__border; +$color__border-abbr: #666; diff --git a/src/wp-content/themes/twentynineteen/sass/variables-site/_columns.scss b/src/wp-content/themes/twentynineteen/sass/variables-site/_columns.scss new file mode 100644 index 0000000000000..6bd29bcc6dc1f --- /dev/null +++ b/src/wp-content/themes/twentynineteen/sass/variables-site/_columns.scss @@ -0,0 +1,16 @@ +$columns: ( + 1: calc(1 * (100vw / 12)), + 2: calc(2 * (100vw / 12)), + 3: calc(3 * (100vw / 12)), + 4: calc(4 * (100vw / 12)), + 5: calc(5 * (100vw / 12)), + 6: calc(6 * (100vw / 12)), + 7: calc(7 * (100vw / 12)), + 8: calc(8 * (100vw / 12)), + 9: calc(9 * (100vw / 12)), + 10: calc(10 * (100vw / 12)), + 11: calc(11 * (100vw / 12)), + 12: calc(12 * (100vw / 12)) +); + +$columns__margin: $size__spacing-unit; diff --git a/src/wp-content/themes/twentynineteen/sass/variables-site/_fonts.scss b/src/wp-content/themes/twentynineteen/sass/variables-site/_fonts.scss new file mode 100644 index 0000000000000..0b7bfa3e8dfd1 --- /dev/null +++ b/src/wp-content/themes/twentynineteen/sass/variables-site/_fonts.scss @@ -0,0 +1,23 @@ +// Font and typographic variables + +$font__body: "Hoefler Text", "Baskerville Old Face", Garamond, "Times New Roman", serif; +$font__heading: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; +$font__code: Menlo, monaco, Consolas, Lucida Console, monospace; +$font__pre: "Courier 10 Pitch", Courier, monospace; + +$font__size_base: 22px; +$font__size-ratio: 1.125; + +$font__size-xxs: 1em / (1.5 * $font__size-ratio); +$font__size-xs: 1em / (1.25 * $font__size-ratio); +$font__size-sm: 1em / (1 * $font__size-ratio); +$font__size-md: 1em * (1 * $font__size-ratio); +$font__size-lg: 1em * (1.5 * $font__size-ratio); +$font__size-xl: 1em * (2 * $font__size-ratio); +$font__size-xxl: 1em * (2.5 * $font__size-ratio); +$font__size-xxxl: 1em * (3 * $font__size-ratio); + +$font__line-height-body: 1.8; +$font__line-height-pre: 1.6; +$font__line-height-heading: 1.2; +$font__line-height-double: 2 * $font__line-height-heading; diff --git a/src/wp-content/themes/twentynineteen/sass/variables-site/_structure.scss b/src/wp-content/themes/twentynineteen/sass/variables-site/_structure.scss new file mode 100644 index 0000000000000..3819ae6b61963 --- /dev/null +++ b/src/wp-content/themes/twentynineteen/sass/variables-site/_structure.scss @@ -0,0 +1,13 @@ +// Responsive widths. + +$size__spacing-unit: 1rem; +$size__site-main: 100%; +$size__site-sidebar: 25%; + +// Responsive widths. + +$mobile_width: 380px; +$tablet_width: 768px; +$desktop_width: 1168px; +$wide_width: 1379px; + diff --git a/src/wp-content/themes/twentynineteen/sass/variables-site/_transitions.scss b/src/wp-content/themes/twentynineteen/sass/variables-site/_transitions.scss new file mode 100644 index 0000000000000..f0eebbd25384c --- /dev/null +++ b/src/wp-content/themes/twentynineteen/sass/variables-site/_transitions.scss @@ -0,0 +1,6 @@ +// Transition timeouts. + +$link_transition: 110ms; +$icon_transition: 120ms; +$button_transition: 150ms; +$background_transition: 200ms; \ No newline at end of file diff --git a/src/wp-content/themes/twentynineteen/sass/variables-site/_variables-site.scss b/src/wp-content/themes/twentynineteen/sass/variables-site/_variables-site.scss new file mode 100644 index 0000000000000..9d527f9fc9d6e --- /dev/null +++ b/src/wp-content/themes/twentynineteen/sass/variables-site/_variables-site.scss @@ -0,0 +1,5 @@ +@import "colors"; +@import "fonts"; +@import "structure"; +@import "columns"; +@import "transitions"; diff --git a/src/wp-content/themes/twentynineteen/screenshot.png b/src/wp-content/themes/twentynineteen/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..123d0d890bf7787ec86c70f18ebfa11075c1da9d GIT binary patch literal 836593 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 z
        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∓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 z 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

      • _d!tw|DC(N?QY5$F3A&Y!kR)(Bm98xl=gHhB zK`dekYsNBOyJM4Xe{(I8)!THH4b=4=9i4Z=^L9Mc)|7vh*Y3cQp-0N%`?uV}TrA*Z^UYmMtH5*HdhG}JdO8B}vz3SZdD zm8&mZKFPnr=D+s!;y-Lim!;%Z1`^SRaWJ3flcHJMm=K z^Ee`WBr9X%tZ?Qq=pqS3Nd!NoUwB*bD=cYg(uI_PAP!+0agn*-IF>TZunqT&8%!); zb*n%8p#5zwKk2s>V;CDcQo+Eo!A-tZB5!-;+0De4yVQjRitY^s`xCbtisnHjK`I3Y z1@|V5WeS7d85bpV#Kj#f3g7RFBp)E0SY!_r_LtF(mKPO9(?A*D9=TNfW=-qWV5}!@ z_BH@Q1?5Cs7n8u;4#3SEQ6*Q|!Aon5v_wZK)47o>1%KL8=8Ikl)jl-!$3)` z18)6A_%yk^bA8jDsfK(%H|4$Z>X1*f@0N^meOB)2imyyWh)-D44%H3*N8wJ-o8{!r zJ#Q_%6$O)UynZ*;8!@1sFCHU9GdQTgLtMj{~lvwUg4S&f+Gyz9iBRdQ&$Z{^+bM5{zkZO_lfJC64{2&UoB(4t1!5BpIcxGh}Qn+FMH14h;KbIIg4 z(e#MIEJodKre(n}T#H+6XLh2}gKR7|smKsr0ZioEs(a$BrkSyKzTp{DMq6(euI}_= zuf!g+-j8)p+N~(AUT7C_u-}bWH5#1^wGQB4nn|fS`;s^Y9)KKn%zT9NyA-NhAV^pD z*B31gZzhxW)u&EoaKWKhz#09{A(?t{2GmNo{NWz!54%-CqaTVJ^ig!3143&_A11$a z=YHX--o4m`T#lL$NfkRvx4In&ZDB-`QEA zfcfY6G-qHfb6pa%Z9nSV=ELl1Xt3pcicPxPZ)UKEruHD->c!KltB^`S|sJai3#8@^kl|yfSF;#EcP(wsBn0v64xk z-XP=9IlE5Ye9B@x2>6sY7U}(`$OauJ7U888xnPq_mpvMaz)m~(BD)RV)GagX6peuX zA56die2^`@xg@Udbg$sYRo~u)GE77G1w&*nr|sE}Y-|N@qEBy=Y=`{>dy%Fb@sI46 z@~VW<#g*UW4~3l+f{ExTg}Z)*w1O^B{amZjD7BA|4wS%0A>n>0tVmK0a@` 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 WOSjiB?l`9a0000 + +
        +
        + + + + + + +
        +
        + + + +
        +
        + + _x( 'Published in%title', 'Parent post link', 'twentynineteen' ), + ) + ); + } elseif ( is_singular( 'post' ) ) { + // Previous/next post navigation. + the_post_navigation( + array( + 'next_text' => ' ' . + '' . __( 'Next post:', 'twentynineteen' ) . '
        ' . + '%title', + 'prev_text' => ' ' . + '' . __( 'Previous post:', 'twentynineteen' ) . '
        ' . + '%title', + ) + ); + } + + // If comments are open or we have at least one comment, load up the comment template. + if ( comments_open() || get_comments_number() ) { + comments_template(); + } + + endwhile; // End of the loop. + ?> + +
        +
        + + + + .block-library-pullquote__content .editor-rich-text__tinymce[data-is-empty="true"]::before, +body[data-type="core/pullquote"] blockquote > .editor-rich-text p, +body[data-type="core/pullquote"] p, +body[data-type="core/pullquote"][data-align="left"] blockquote > .block-library-pullquote__content .editor-rich-text__tinymce[data-is-empty="true"]::before, +body[data-type="core/pullquote"][data-align="left"] blockquote > .editor-rich-text p, +body[data-type="core/pullquote"][data-align="left"] p, +body[data-type="core/pullquote"][data-align="right"] blockquote > .block-library-pullquote__content .editor-rich-text__tinymce[data-is-empty="true"]::before, +body[data-type="core/pullquote"][data-align="right"] blockquote > .editor-rich-text p, +body[data-type="core/pullquote"][data-align="right"] p { + font-size: 1.6875em; + font-style: italic; + line-height: 1.3; + margin-bottom: 0.5em; + margin-top: 0.5em; + color: #111; +} + +@media only screen and (min-width: 768px) { + body[data-type="core/pullquote"] blockquote > .block-library-pullquote__content .editor-rich-text__tinymce[data-is-empty="true"]::before, + body[data-type="core/pullquote"] blockquote > .editor-rich-text p, + body[data-type="core/pullquote"] p, + body[data-type="core/pullquote"][data-align="left"] blockquote > .block-library-pullquote__content .editor-rich-text__tinymce[data-is-empty="true"]::before, + body[data-type="core/pullquote"][data-align="left"] blockquote > .editor-rich-text p, + body[data-type="core/pullquote"][data-align="left"] p, + body[data-type="core/pullquote"][data-align="right"] blockquote > .block-library-pullquote__content .editor-rich-text__tinymce[data-is-empty="true"]::before, + body[data-type="core/pullquote"][data-align="right"] blockquote > .editor-rich-text p, + body[data-type="core/pullquote"][data-align="right"] p { + font-size: 2.25em; + } +} + +body[data-type="core/pullquote"] .wp-block-pullquote__citation, +body[data-type="core/pullquote"][data-align="left"] .wp-block-pullquote__citation, +body[data-type="core/pullquote"][data-align="right"] .wp-block-pullquote__citation { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-size: 0.71111em; + line-height: 1.6; + text-transform: none; + color: #767676; +} + +body[data-type="core/pullquote"] em, +body[data-type="core/pullquote"][data-align="left"] em, +body[data-type="core/pullquote"][data-align="right"] em { + font-style: normal; +} + +body[data-type="core/pullquote"][data-align="left"] .editor-block-list__block-edit, +body[data-type="core/pullquote"][data-align="right"] .editor-block-list__block-edit { + max-width: 50%; +} + +body[data-type="core/pullquote"][data-align="left"] .editor-block-list__block-edit .wp-block-pullquote:not(.is-style-solid-color), +body[data-type="core/pullquote"][data-align="right"] .editor-block-list__block-edit .wp-block-pullquote:not(.is-style-solid-color) { + padding: 0; +} + +body[data-type="core/pullquote"][data-align="left"] .editor-block-list__block-edit .wp-block-pullquote.is-style-solid-color, +body[data-type="core/pullquote"][data-align="right"] .editor-block-list__block-edit .wp-block-pullquote.is-style-solid-color { + padding: 1em; +} + +body[data-type="core/pullquote"][data-align="left"] .editor-block-list__block-edit .wp-block-pullquote.is-style-solid-color p, +body[data-type="core/pullquote"][data-align="left"] .editor-block-list__block-edit .wp-block-pullquote.is-style-solid-color .wp-block-pullquote__citation, +body[data-type="core/pullquote"][data-align="right"] .editor-block-list__block-edit .wp-block-pullquote.is-style-solid-color p, +body[data-type="core/pullquote"][data-align="right"] .editor-block-list__block-edit .wp-block-pullquote.is-style-solid-color .wp-block-pullquote__citation { + color: white; +} + +body[data-type="core/pullquote"][data-align="left"] blockquote > .block-library-pullquote__content .editor-rich-text__tinymce[data-is-empty="true"]::before, +body[data-type="core/pullquote"][data-align="left"] blockquote > .editor-rich-text p, +body[data-type="core/pullquote"][data-align="left"] p, +body[data-type="core/pullquote"][data-align="left"] .wp-block-pullquote__citation, +body[data-type="core/pullquote"][data-align="right"] blockquote > .block-library-pullquote__content .editor-rich-text__tinymce[data-is-empty="true"]::before, +body[data-type="core/pullquote"][data-align="right"] blockquote > .editor-rich-text p, +body[data-type="core/pullquote"][data-align="right"] p, +body[data-type="core/pullquote"][data-align="right"] .wp-block-pullquote__citation { + text-align: left; +} + +/** === File === */ +.wp-block-file { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; +} + +.wp-block-file .wp-block-file__button { + line-height: 1.8; + font-size: 0.88889em; + font-weight: bold; + background-color: #0073aa; + border-radius: 5px; +} + +/** === Verse === */ +.wp-block-verse, +.wp-block-verse pre { + padding: 0; +} + +/** === Code === */ +.wp-block-code { + border-radius: 0; +} + +/** === Table === */ +.wp-block-table td, .wp-block-table th { + border-color: #767676; +} + +/** === Separator === */ +.wp-block-separator:not(.is-style-dots) { + border-bottom: 2px solid #767676; +} + +.wp-block-separator:not(.is-style-wide):not(.is-style-dots) { + width: 2.25em; + margin-left: 0; +} + +.wp-block-separator.is-style-dots:before { + color: #767676; + font-size: 1.6875em; + letter-spacing: 0.88889em; +} + +/** === Latest Posts, Archives, Categories === */ +ul.wp-block-archives, +.wp-block-categories, +.wp-block-latest-posts { + padding: 0; + list-style-type: none; +} + +ul.wp-block-archives ul, +.wp-block-categories ul, +.wp-block-latest-posts ul { + padding: 0; + list-style-type: none; +} + +ul.wp-block-archives li, +.wp-block-categories li, +.wp-block-latest-posts li { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-size: 1.6875em; + font-weight: bold; + line-height: 1.2; +} + +ul.wp-block-archives li a, +.wp-block-categories li a, +.wp-block-latest-posts li a { + text-decoration: none; +} + +ul.wp-block-archives li a:after, +.wp-block-categories li a:after, +.wp-block-latest-posts li a:after { + color: #767676; + content: ","; +} + +ul.wp-block-archives li:last-child a:after, +.wp-block-categories li:last-child a:after, +.wp-block-latest-posts li:last-child a:after { + color: #767676; + content: "."; +} + +/** === Latest Posts grid view === */ +.wp-block-latest-posts.is-grid li { + border-top: 2px solid #ccc; + padding-top: 1rem; + margin-bottom: 2rem; +} + +.wp-block-latest-posts.is-grid li a:after { + content: ''; +} + +.wp-block-latest-posts.is-grid li:last-child { + margin-bottom: auto; +} + +.wp-block-latest-posts.is-grid li:last-child a:after { + content: ''; +} + +/** === Latest Comments === */ +.wp-block-latest-comments .wp-block-latest-comments__comment-meta { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-weight: bold; +} + +.wp-block-latest-comments .wp-block-latest-comments__comment-meta .wp-block-latest-comments__comment-date { + font-weight: normal; +} + +.wp-block-latest-comments .wp-block-latest-comments__comment, +.wp-block-latest-comments .wp-block-latest-comments__comment-date, +.wp-block-latest-comments .wp-block-latest-comments__comment-excerpt p { + font-size: inherit; +} + +.wp-block-latest-comments .wp-block-latest-comments__comment-date { + font-size: 0.71111em; +} + +/** === Classic Editor === */ +/* Properly center-align captions in the classic-editor block */ +.wp-caption dd { + text-align: center; + -webkit-margin-start: 0px; + margin-inline-start: 0px; +} + +.wp-block-freeform { + /* Add style for galleries in classic-editor block */ +} + +.wp-block-freeform .gallery { + display: flex; +} + +.wp-block-freeform .gallery .gallery-item { + padding: 0.5rem; + text-align: center; + vertical-align: top; + width: 100%; +} + +.wp-block-freeform .gallery .gallery-item .gallery-caption { + margin: 0; +} + +.wp-block-freeform .gallery.gallery-columns-2 .gallery-item { + max-width: calc( ( 12 / 2 ) * (100% / 12)); +} + +.wp-block-freeform .gallery.gallery-columns-3 .gallery-item { + max-width: calc( ( 12 / 3 ) * (100% / 12)); +} + +.wp-block-freeform .gallery.gallery-columns-4 .gallery-item { + max-width: calc( ( 12 / 4 ) * (100% / 12)); +} + +.wp-block-freeform .gallery.gallery-columns-5 .gallery-item { + max-width: calc( ( 12 / 5 ) * (100% / 12)); +} + +.wp-block-freeform .gallery.gallery-columns-6 .gallery-item { + max-width: calc( ( 12 / 6 ) * (100% / 12)); +} + +.wp-block-freeform .gallery.gallery-columns-7 .gallery-item { + max-width: calc( ( 12 / 7 ) * (100% / 12)); +} + +.wp-block-freeform .gallery.gallery-columns-8 .gallery-item { + max-width: calc( ( 12 / 8 ) * (100% / 12)); +} + +.wp-block-freeform .gallery.gallery-columns-9 .gallery-item { + max-width: calc( ( 12 / 9 ) * (100% / 12)); +} diff --git a/src/wp-content/themes/twentynineteen/style-editor.scss b/src/wp-content/themes/twentynineteen/style-editor.scss new file mode 100644 index 0000000000000..8beb322f461c6 --- /dev/null +++ b/src/wp-content/themes/twentynineteen/style-editor.scss @@ -0,0 +1,524 @@ +/*! +Twenty Nineteen Editor Styles + +NOTE: Styling alignment styles require use of [data-align] selectors. +This is not ideal, but it works. Styles using those selectors should be refactored +when Gutenberg supports styling those variations more intuitively. +*/ + +/** === Includes === */ + +@import "sass/variables-site/variables-site"; +@import "sass/variables-site/colors"; +@import "sass/mixins/mixins-master"; + +/** === Content Width === */ + +.wp-block { + width: calc(100vw - (2 * #{$size__spacing-unit})); + + @include media(tablet) { + width: calc(8 * (100vw / 12)); + } + + @include media(desktop) { + width: calc(6 * (100vw / 12 )); + } +} + +/** === Base Typography === */ + +body { + font-size: $font__size_base; + font-family: $font__body; + color: $color__text-main; +} + +p { + font-size: $font__size_base; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + font-family: $font__heading; +} + +h1 { + font-size: $font__size-xl; + @include post-section-dash; + + @include media(tablet) { + font-size: $font__size-xxl; + } +} + +h2 { + font-size: $font__size-lg; + @include post-section-dash; + + @include media(tablet) { + font-size: $font__size-xl; + } +} + +h3 { + font-size: $font__size-lg; +} + +h4 { + font-size: $font__size-md; +} + +h5 { + font-size: $font__size-sm; +} + +h6 { + font-size: $font__size-xs; +} + +a { + @include link-transition; + color: $color__link; + + *:visited { + + } + + &:hover, + &:active { + color: $color__link-hover; + outline: 0; + text-decoration: none; + } + + &:focus { + outline: 0; + text-decoration: underline; + } +} + +figcaption, +.gallery-caption { + font-family: $font__heading; + font-size: $font__size-xs; + line-height: 1.6; + color: $color__text-light; +} + +/** === Paragraph === */ + +.wp-block-paragraph { + + &.has-drop-cap:not(:focus)::first-letter { + font-family: $font__heading; + font-size: $font__size-xxxl; + line-height: 1; + font-weight: bold; + margin: 0 0.25em 0 0; + } +} + +/** === Cover Image === */ + +.wp-block-cover-image { + + h2, + .wp-block-cover-image-text { + font-family: $font__heading; + font-size: $font__size-xl; + font-weight: bold; + line-height: 1.4; + } + + &.has-left-content { + justify-content: center; + + h2, + .wp-block-cover-image-text { + padding: 1em; + } + } + + &.has-right-content { + justify-content: center; + + h2, + .wp-block-cover-image-text { + padding: 1em; + } + } +} + +body[data-type="core/cover-image"][data-align="left"], +body[data-type="core/cover-image"][data-align="right"] { + + h2, + .wp-block-cover-image-text { + width: 100%; + max-width: 305px; + } +} + +body[data-type="core/cover-image"][data-align="wide"], +body[data-type="core/cover-image"][data-align="full"] { + + @include media(desktop) { + h2, + .wp-block-cover-image-text { + padding: 0; + width: calc(6 * (100vw / 12)); + max-width: calc(6 * (100vw / 12)); + } + } +} + +/** === Gallery === */ + +.wp-block-gallery { + + .blocks-gallery-image figcaption, + .blocks-gallery-item figcaption, + .gallery-item .gallery-caption { + font-size: $font__size-xs; + line-height: 1.6; + } +} + +/** === Button === */ + +.wp-block-button { + + .wp-block-button__link { + line-height: 1.8; + font-family: $font__heading; + font-size: $font__size-sm; + font-weight: bold; + } + + .wp-block-button__link:not(.has-background), + .wp-block-button__link:not(.has-background) { + background: $color__background-button; + } + + &:not(.is-style-squared) .wp-block-button__link { + border-radius: 5px; + } + + &.is-style-outline .wp-block-button__link, + &.is-style-outline .wp-block-button__link:hover, + &.is-style-outline .wp-block-button__link:focus, + &.is-style-outline .wp-block-button__link:active { + background: transparent; + border-color: $color__background-button; + + &:not(.has-text-color) { + color: $color__background-button; + } + } +} + +/** === Blockquote === */ + +.wp-block-quote { + + &:not(.is-large):not(.is-style-large) { + border-left: 2px solid $color__link; + } + + &.is-large, + &.is-style-large { + margin-top: $font__size-xxl; + margin-bottom: $font__size-xxl; + } + + &.is-large p, + &.is-style-large p { + font-size: $font__size-lg; + line-height: 1.3; + margin-bottom: 0.5em; + margin-top: 0.5em; + } + + cite, + footer, + .wp-block-quote__citation { + font-family: $font__heading; + font-size: $font__size-xs; + line-height: 1.6; + color: $color__text-light; + } +} + +/** === Pullquote === */ + +.wp-block-pullquote { + border: none; + + &.is-style-solid-color { + + blockquote { + width: calc(100vw - (2 * #{ $size__spacing-unit})); + max-width: 80%; + + @include media(tablet) { + width: calc(8 * (100vw / 12)); + } + + @include media(desktop) { + width: calc(6 * (100vw / 12)); + } + } + + blockquote:not(.has-text-color) p, + .wp-block-pullquote__citation { + color: white; + } + + &:not(.has-background-color) { + background-color: $color__link; + } + } + + blockquote { + hyphens: auto; + word-break: break-word; + } +} + +body[data-type="core/pullquote"], +body[data-type="core/pullquote"][data-align="left"], +body[data-type="core/pullquote"][data-align="right"] { + + blockquote > .block-library-pullquote__content .editor-rich-text__tinymce[data-is-empty="true"]::before, + blockquote > .editor-rich-text p, + p { + font-size: $font__size-lg; + font-style: italic; + line-height: 1.3; + margin-bottom: 0.5em; + margin-top: 0.5em; + color: $color__text-main; + + @include media(tablet) { + font-size: $font__size-xl; + } + } + + .wp-block-pullquote__citation { + font-family: $font__heading; + font-size: $font__size-xs; + line-height: 1.6; + text-transform: none; + color: $color__text-light; + } + + em { + font-style: normal; + } +} + +body[data-type="core/pullquote"][data-align="left"], +body[data-type="core/pullquote"][data-align="right"] { + + .editor-block-list__block-edit { + max-width: 50%; + + .wp-block-pullquote:not(.is-style-solid-color) { + padding: 0; + } + + .wp-block-pullquote.is-style-solid-color { + padding: 1em; + + p, + .wp-block-pullquote__citation { + color: white; + } + } + } + + blockquote > .block-library-pullquote__content .editor-rich-text__tinymce[data-is-empty="true"]::before, + blockquote > .editor-rich-text p, + p, + .wp-block-pullquote__citation { + text-align: left; + } +} + +/** === File === */ + +.wp-block-file { + font-family: $font__heading; + + .wp-block-file__button { + line-height: 1.8; + font-size: $font__size-sm; + font-weight: bold; + background-color: $color__link; + border-radius: 5px; + } +} + +/** === Verse === */ + +.wp-block-verse, +.wp-block-verse pre { + padding: 0; +} + +/** === Code === */ + +.wp-block-code { + border-radius: 0; +} + +/** === Table === */ + +.wp-block-table { + + td, th { + border-color: $color__text-light; + } +} + +/** === Separator === */ + +.wp-block-separator { + + &:not(.is-style-dots) { + border-bottom: 2px solid $color__text-light; + } + + &:not(.is-style-wide):not(.is-style-dots) { + width: $font__size-xl; + margin-left: 0; + } + + &.is-style-dots:before { + color: $color__text-light; + font-size: $font__size-lg; + letter-spacing: $font__size-sm; + } +} + +/** === Latest Posts, Archives, Categories === */ + +ul.wp-block-archives, +.wp-block-categories, +.wp-block-latest-posts { + padding: 0; + list-style-type: none; + + ul { + padding: 0; + list-style-type: none; + } + + li { + font-family: $font__heading; + font-size: $font__size-lg; + font-weight: bold; + line-height: $font__line-height-heading; + + a { + text-decoration: none; + + &:after { + color: $color__text-light; + content: ","; + } + } + + &:last-child a:after { + color: $color__text-light; + content: "."; + } + } +} + +/** === Latest Posts grid view === */ +.wp-block-latest-posts.is-grid { + li { + border-top: 2px solid $color__border; + padding-top: (1 * $size__spacing-unit); + margin-bottom: (2 * $size__spacing-unit); + a { + &:after { + content: ''; + } + } + &:last-child { + margin-bottom: auto; + a:after { + content: ''; + } + } + } + } + +/** === Latest Comments === */ + +.wp-block-latest-comments { + + .wp-block-latest-comments__comment-meta { + font-family: $font__heading; + font-weight: bold; + + .wp-block-latest-comments__comment-date { + font-weight: normal; + } + } + + .wp-block-latest-comments__comment, + .wp-block-latest-comments__comment-date, + .wp-block-latest-comments__comment-excerpt p { + font-size: inherit; + } + + .wp-block-latest-comments__comment-date { + font-size: $font__size-xs; + } +} + +/** === Classic Editor === */ + +/* Properly center-align captions in the classic-editor block */ +.wp-caption { + dd { + text-align: center; + -webkit-margin-start: 0px; + margin-inline-start: 0px; + } +} + +.wp-block-freeform { + + /* Add style for galleries in classic-editor block */ + .gallery { + + display: flex; + + .gallery-item { + padding: ( $size__spacing-unit * .5 ); + text-align: center; + vertical-align: top; + width: 100%; + + .gallery-caption { + margin: 0; + } + } + + // Loops to enumerate the classes for gallery columns. + @for $i from 2 through 9 { + &.gallery-columns-#{$i} .gallery-item { + max-width: calc( ( 12 / #{$i} ) * (100% / 12) ); + } + } + } +} diff --git a/src/wp-content/themes/twentynineteen/style-rtl.css b/src/wp-content/themes/twentynineteen/style-rtl.css new file mode 100644 index 0000000000000..724f0fdc37346 --- /dev/null +++ b/src/wp-content/themes/twentynineteen/style-rtl.css @@ -0,0 +1,3243 @@ +@charset "UTF-8"; +/* +Theme Name: Twenty Nineteen +Theme URI: https://github.com/WordPress/twentynineteen +Author: the WordPress team +Author URI: https://wordpress.org/ +Description: A new Gutenberg-ready theme. +Requires at least: WordPress 4.9.6 +Version: 1.0 +License: GNU General Public License v2 or later +License URI: LICENSE +Text Domain: twentynineteen +Tags: custom-background, custom-logo, custom-menu, featured-images, threaded-comments, translation-ready + +This theme, like WordPress, is licensed under the GPL. +Use it to make something cool, have fun, and share what you've learned with others. + +Twenty Nineteen is based on Underscores https://underscores.me/, (C) 2012-2018 Automattic, Inc. +Underscores is distributed under the terms of the GNU GPL v2 or later. + +Normalizing styles have been helped along thanks to the fine work of +Nicolas Gallagher and Jonathan Neal https://necolas.github.io/normalize.css/ +*/ +/*-------------------------------------------------------------- +>>> TABLE OF CONTENTS: +---------------------------------------------------------------- +# Variables +# Normalize +# Typography + ## Headings + ## Copy +# Elements + ## Lists + ## Tables +# Forms + ## Buttons + ## Fields +# Navigation + ## Links + ## Menus + ## Next & Previous +# Accessibility +# Alignments +# Clearings +# Layout +# Widgets +# Content + ## Archives + ## Posts and pages + ## Comments +# Blocks +# Media + ## Captions + ## Galleries +--------------------------------------------------------------*/ +/* If we add the border using a regular CSS border, it won't look good on non-retina devices, + * since its edges can look jagged due to lack of antialiasing. In this case, we are several + * layers of box-shadow to add the border visually, which will render the border smoother. */ +/* Normalize */ +/*! normalize.css v8.0.0 | MIT License | github.com/necolas/normalize.css */ +/* Document + ========================================================================== */ +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in iOS. + */ +html { + line-height: 1.15; + /* 1 */ + -webkit-text-size-adjust: 100%; + /* 2 */ +} + +/* Sections + ========================================================================== */ +/** + * Remove the margin in all browsers. + */ +body { + margin: 0; +} + +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/* Grouping content + ========================================================================== */ +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ +hr { + box-sizing: content-box; + /* 1 */ + height: 0; + /* 1 */ + overflow: visible; + /* 2 */ +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ +pre { + font-family: monospace, monospace; + /* 1 */ + font-size: 1em; + /* 2 */ +} + +/* Text-level semantics + ========================================================================== */ +/** + * Remove the gray background on active links in IE 10. + */ +a { + background-color: transparent; +} + +/** + * 1. Remove the bottom border in Chrome 57- + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ +abbr[title] { + border-bottom: none; + /* 1 */ + text-decoration: underline; + /* 2 */ + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; + /* 2 */ +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ +b, +strong { + font-weight: bolder; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ +code, +kbd, +samp { + font-family: monospace, monospace; + /* 1 */ + font-size: 1em; + /* 2 */ +} + +/** + * Add the correct font size in all browsers. + */ +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* Embedded content + ========================================================================== */ +/** + * Remove the border on images inside links in IE 10. + */ +img { + border-style: none; +} + +/* Forms + ========================================================================== */ +/** + * 1. Change the font styles in all browsers. + * 2. Remove the margin in Firefox and Safari. + */ +button, +input, +optgroup, +select, +textarea { + font-family: inherit; + /* 1 */ + font-size: 100%; + /* 1 */ + line-height: 1.15; + /* 1 */ + margin: 0; + /* 2 */ +} + +/** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ +button, +input { + /* 1 */ + overflow: visible; +} + +/** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ +button, +select { + /* 1 */ + text-transform: none; +} + +/** + * Correct the inability to style clickable types in iOS and Safari. + */ +button, +[type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} + +/** + * Remove the inner border and padding in Firefox. + */ +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +/** + * Restore the focus styles unset by the previous rule. + */ +button:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +/** + * Correct the padding in Firefox. + */ +fieldset { + padding: 0.35em 0.75em 0.625em; +} + +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ +legend { + box-sizing: border-box; + /* 1 */ + color: inherit; + /* 2 */ + display: table; + /* 1 */ + max-width: 100%; + /* 1 */ + padding: 0; + /* 3 */ + white-space: normal; + /* 1 */ +} + +/** + * Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ +progress { + vertical-align: baseline; +} + +/** + * Remove the default vertical scrollbar in IE 10+. + */ +textarea { + overflow: auto; +} + +/** + * 1. Add the correct box sizing in IE 10. + * 2. Remove the padding in IE 10. + */ +[type="checkbox"], +[type="radio"] { + box-sizing: border-box; + /* 1 */ + padding: 0; + /* 2 */ +} + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ +[type="search"] { + -webkit-appearance: textfield; + /* 1 */ + outline-offset: -2px; + /* 2 */ +} + +/** + * Remove the inner padding in Chrome and Safari on macOS. + */ +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ +::-webkit-file-upload-button { + -webkit-appearance: button; + /* 1 */ + font: inherit; + /* 2 */ +} + +/* Interactive + ========================================================================== */ +/* + * Add the correct display in Edge, IE 10+, and Firefox. + */ +details { + display: block; +} + +/* + * Add the correct display in all browsers. + */ +summary { + display: list-item; +} + +/* Misc + ========================================================================== */ +/** + * Add the correct display in IE 10+. + */ +template { + display: none; +} + +/** + * Add the correct display in IE 10. + */ +[hidden] { + display: none; +} + +/* Typography */ +html { + font-size: 22px; +} + +body { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + color: #111; + font-family: "Hoefler Text", "Baskerville Old Face", Garamond, "Times New Roman", serif; + font-weight: 400; + font-size: 1em; + line-height: 1.8; + margin: 0; + text-rendering: optimizeLegibility; +} + +button, +input, +select, +optgroup, +textarea { + color: #111; + font-family: "Hoefler Text", "Baskerville Old Face", Garamond, "Times New Roman", serif; + font-weight: 400; + line-height: 1.8; + text-rendering: optimizeLegibility; +} + +.main-navigation, +.page-description, +h2.author-title, +.not-found .page-title, +.error-404 .page-title, +.post-navigation .post-title, +.pagination .nav-links, +.comments-title, +.comment-author .fn, +.no-comments, +.site-title, +h1, h2, h3, h4, h5, h6 { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-weight: 700; + letter-spacing: -0.02em; + line-height: 1.2; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.site-info, +.page-description, +.post-navigation .post-title, +.comment-metadata, +.discussion-meta-info, +.entry-meta, +.entry-footer, +.comment-reply-link, +#cancel-comment-reply-link, +img:after, +.page-links, +.sticky-post { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; +} + +.page-title { + font-family: "Hoefler Text", "Baskerville Old Face", Garamond, "Times New Roman", serif; +} + +.site-branding, +.main-navigation ul.main-menu > li, +.social-navigation, +.author-description p.author-bio, +.nav-links { + line-height: 1.25; +} + +h1 { + font-size: 2.25em; +} + +@media only screen and (min-width: 768px) { + h1 { + font-size: 2.8125em; + } +} + +.entry-title, +.not-found .page-title, +.error-404 .page-title, +.has-larger-font-size, +h2 { + font-size: 1.6875em; +} + +@media only screen and (min-width: 768px) { + .entry-title, + .not-found .page-title, + .error-404 .page-title, + .has-larger-font-size, + h2 { + font-size: 2.25em; + } +} + +.has-regular-font-size, +.has-large-font-size, +.comments-title, +h3 { + font-size: 1.6875em; +} + +.site-title, +.site-description, +.main-navigation, +.nav-links, +.page-title, +.page-description, +.comment-author .fn, +.no-comments, +h2.author-title, +p.author-bio, +h4 { + font-size: 1.125em; +} + +.pagination .nav-links, +.comment-content, +h5 { + font-size: 0.88889em; +} + +.entry-meta, +.entry-footer, +.discussion-meta-info, +.site-info, +.has-small-font-size, +.comment-reply-link, +.comment-metadata, +.comment-notes, +.sticky-post, +#cancel-comment-reply-link, +img:after, +h6 { + font-size: 0.71111em; +} + +.site-title, +.page-title { + font-weight: normal; +} + +.page-description, +.page-links a { + font-weight: bold; +} + +.site-description { + letter-spacing: -0.01em; +} + +.post-navigation .post-title, +.entry-title, +.not-found .page-title, +.error-404 .page-title, +.comments-title, +blockquote { + -webkit-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto; + word-break: break-word; +} + +/* Do not hyphenate entry title on tablet view and bigger. */ +@media only screen and (min-width: 768px) { + .entry-title { + -webkit-hyphens: none; + -ms-hyphens: none; + hyphens: none; + } +} + +p { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +dfn, cite, em, i { + font-style: italic; +} + +blockquote > p { + font-size: 1.6875em; + font-style: italic; + line-height: 1.2; +} + +blockquote cite { + font-size: 0.88889em; + font-style: normal; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; +} + +pre { + font-size: 0.88889em; + font-family: "Courier 10 Pitch", Courier, monospace; + line-height: 1.8; + overflow: auto; +} + +code, kbd, tt, var { + font-size: 0.88889em; + font-family: Menlo, monaco, Consolas, Lucida Console, monospace; +} + +abbr, acronym { + border-bottom: 1px dotted #666; + cursor: help; +} + +mark, ins { + background: #fff9c0; + text-decoration: none; +} + +big { + font-size: 125%; +} + +a { + text-decoration: none; +} + +a:hover { + text-decoration: none; +} + +a:focus { + text-decoration: underline; +} + +/* Elements */ +html { + box-sizing: border-box; +} + +::-moz-selection { + background: #bfdcea; +} + +::selection { + background: #bfdcea; +} + +*, +*:before, +*:after { + box-sizing: inherit; +} + +body { + background: #fff; +} + +a { + transition: color 110ms ease-in-out; + color: #0073aa; +} + +a:hover, +a:active { + color: #005177; + outline: 0; + text-decoration: none; +} + +a:focus { + outline: 0; + text-decoration: underline; +} + +h1, h2, h3, h4, h5, h6 { + clear: both; + margin: 1rem 0; +} + +h1:not(.site-title):before, h2:before { + background: #767676; + content: "\020"; + display: block; + height: 2px; + margin: 1rem 0; + width: 1em; +} + +hr { + background-color: #767676; + border: 0; + height: 2px; +} + +ul, +ol { + padding-right: 1rem; +} + +ul { + list-style: disc; +} + +ul ul { + list-style-type: circle; +} + +ol { + list-style: decimal; +} + +li { + line-height: 1.8; +} + +li > ul, +li > ol { + padding-right: 2rem; +} + +dt { + font-weight: bold; +} + +dd { + margin: 0 1rem 1rem; +} + +img { + height: auto; + max-width: 100%; + position: relative; +} + +img:before { + background-color: #eee; + border: 1px dashed #ccc; + border-radius: 3px; + content: " "; + display: block; + height: 100%; + right: 0; + position: absolute; + top: 0; + width: 100%; +} + +img:after { + color: #666; + content: "This image is broken :-/ ( " attr(alt) " )"; + display: block; + right: 50%; + position: absolute; + text-align: center; + top: 50%; + transform: translate(50%, -50%); + width: 100%; +} + +figure { + margin: 0; +} + +blockquote { + border-right: 2px solid #0073aa; + margin-right: -2rem; + padding: 1rem 2rem 0.5rem 0; +} + +blockquote > p { + margin: 0 0 1rem; +} + +blockquote cite { + color: #767676; +} + +table { + margin: 0 0 1rem; + width: 100%; +} + +table td, table th { + border-color: #767676; +} + +/* Forms */ +.button, +button, +input[type="button"], +input[type="reset"], +input[type="submit"] { + transition: background 150ms ease-in-out; + background: #0073aa; + border: none; + border-radius: 5px; + box-sizing: border-box; + color: white; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-size: 0.88889em; + font-weight: 600; + line-height: 1.2; + outline: none; + padding: 0.66rem 1rem; +} + +.button:hover, +button:hover, +input[type="button"]:hover, +input[type="reset"]:hover, +input[type="submit"]:hover { + cursor: pointer; +} + +.button:hover, .button:focus, +button:hover, +button:focus, +input[type="button"]:hover, +input[type="button"]:focus, +input[type="reset"]:hover, +input[type="reset"]:focus, +input[type="submit"]:hover, +input[type="submit"]:focus { + background: #111; +} + +.button:focus, +button:focus, +input[type="button"]:focus, +input[type="reset"]:focus, +input[type="submit"]:focus { + outline: thin dotted; + outline-offset: -4px; +} + +input[type="text"], +input[type="email"], +input[type="url"], +input[type="password"], +input[type="search"], +input[type="number"], +input[type="tel"], +input[type="range"], +input[type="date"], +input[type="month"], +input[type="week"], +input[type="time"], +input[type="datetime"], +input[type="datetime-local"], +input[type="color"], +textarea { + -webkit-backface-visibility: hidden; + background: #fff; + border: solid 1px #ccc; + box-sizing: border-box; + outline: none; + padding: 0.5rem 0.66rem; +} + +input[type="text"]:focus, +input[type="email"]:focus, +input[type="url"]:focus, +input[type="password"]:focus, +input[type="search"]:focus, +input[type="number"]:focus, +input[type="tel"]:focus, +input[type="range"]:focus, +input[type="date"]:focus, +input[type="month"]:focus, +input[type="week"]:focus, +input[type="time"]:focus, +input[type="datetime"]:focus, +input[type="datetime-local"]:focus, +input[type="color"]:focus, +textarea:focus { + border-color: #0073aa; + outline: thin solid rgba(0, 115, 170, 0.15); + outline-offset: -4px; +} + +textarea { + box-sizing: border-box; + display: block; + width: 100%; + max-width: 100%; + resize: vertical; +} + +form p { + margin: 1rem 0; +} + +/* Navigation */ +/*-------------------------------------------------------------- +## Links +--------------------------------------------------------------*/ +a { + transition: color 110ms ease-in-out; + color: #0073aa; +} + +a:visited { + color: #0073aa; +} + +a:hover, a:active { + color: #005177; + outline: 0; + text-decoration: none; +} + +a:focus { + outline: 0; + text-decoration: underline; +} + +/*-------------------------------------------------------------- +## Menus +--------------------------------------------------------------*/ +/** === Main menu === */ +.main-navigation { + display: inline; + /* + * :focus-within needs its own selector so other similar + * selectors don’t get ignored if a browser doesn’t recognize it + */ +} + +@media only screen and (min-width: 768px) { + .main-navigation { + display: block; + } +} + +body.page .main-navigation { + display: block; +} + +.main-navigation > div { + display: inline; +} + +.main-navigation .main-menu { + display: inline; + margin: 0; + padding: 0; +} + +.main-navigation .main-menu > li { + display: inline; +} + +.main-navigation .main-menu > li > a { + font-weight: 700; + color: #0073aa; +} + +.main-navigation .main-menu > li > a + svg { + color: #0073aa; + margin-left: -0.25rem; +} + +.main-navigation .main-menu > li > a:hover { + color: #005177; +} + +.main-navigation .main-menu > li > a:hover + svg { + color: #005177; +} + +.main-navigation .main-menu > li > a:after { + content: ","; + display: inline; + color: #767676; +} + +.main-navigation .main-menu > li.menu-item-has-children:after { + content: ","; + display: inline; + color: #767676; +} + +.main-navigation .main-menu > li.menu-item-has-children > a:after, +.main-navigation .main-menu > li.menu-item-has-children .menu-item-has-children > a:after { + content: ""; + display: none; +} + +.main-navigation .main-menu > li:last-child > a:after { + content: "."; +} + +.main-navigation .main-menu > li:last-child > a { + margin-left: 0; +} + +.main-navigation .sub-menu { + background: #0073aa; + color: #fff; + list-style: none; + padding-right: 0; + display: none; + float: right; + width: 100%; + position: absolute; + opacity: 0; + right: -999em; + z-index: 99999; + transition: opacity 0.5s ease-in-out; +} + +@media only screen and (min-width: 768px) { + .main-navigation .sub-menu { + max-width: calc(3 * (100vw / 12)); + } +} + +.main-navigation .sub-menu > li { + clear: both; + display: block; + float: none; + position: relative; + word-break: break-word; +} + +.main-navigation .sub-menu > li.menu-item-has-children svg { + position: absolute; + left: 0.5rem; + top: 0.65rem; +} + +@media only screen and (min-width: 768px) { + .main-navigation .sub-menu > li.menu-item-has-children .menu-item-has-children > a:after { + content: "\203a"; + } +} + +.main-navigation .sub-menu > li > a { + color: #fff; + display: block; + line-height: 1.2; + padding: calc( .5 * 1rem) 1rem; +} + +.main-navigation .sub-menu > li > a:hover, .main-navigation .sub-menu > li > a:focus { + background: #005177; +} + +.main-navigation .sub-menu > li > a:hover:after, .main-navigation .sub-menu > li > a:focus:after { + background: #005177; +} + +.main-navigation .main-menu .menu-item-has-children:hover > .sub-menu, +.main-navigation .main-menu .menu-item-has-children .sub-menu:hover { + display: block; + right: inherit; + margin-top: -2px; + opacity: 1; +} + +.main-navigation .main-menu .menu-item-has-children:hover > .sub-menu .sub-menu, +.main-navigation .main-menu .menu-item-has-children .sub-menu:hover .sub-menu { + margin-top: inherit; + position: relative; + padding-right: 1rem; +} + +@media only screen and (min-width: 768px) { + .main-navigation .main-menu .menu-item-has-children:hover > .sub-menu .sub-menu, + .main-navigation .main-menu .menu-item-has-children .sub-menu:hover .sub-menu { + padding-right: 0; + position: absolute; + right: 100%; + top: 0; + } +} + +.main-navigation .main-menu .menu-item-has-children:focus-within > .sub-menu { + display: block; + right: inherit; + margin-top: -2px; + opacity: 1; +} + +.main-navigation .main-menu .menu-item-has-children:focus-within > .sub-menu .sub-menu { + margin-top: inherit; + position: relative; + padding-right: 1rem; +} + +@media only screen and (min-width: 768px) { + .main-navigation .main-menu .menu-item-has-children:focus-within > .sub-menu .sub-menu { + padding-right: 0; + position: absolute; + right: 100%; + top: 0; + } +} + +/* Social menu */ +.social-navigation { + margin-top: calc(1rem / 2); + text-align: right; +} + +.social-navigation ul.social-links-menu { + content: ""; + display: table; + table-layout: fixed; + display: inline-block; + margin: 0; + padding: 0; +} + +.social-navigation ul.social-links-menu li { + display: inline-block; + vertical-align: bottom; + vertical-align: -webkit-baseline-middle; + list-style: none; +} + +.social-navigation ul.social-links-menu li:nth-child(n+2) { + margin-right: 0.1em; +} + +.social-navigation ul.social-links-menu li a { + border-bottom: 1px solid transparent; + display: block; + color: #111; + margin-bottom: -1px; + transition: opacity 110ms ease-in-out; +} + +.social-navigation ul.social-links-menu li a:hover, .social-navigation ul.social-links-menu li a:active { + color: #111; + opacity: 0.6; +} + +.social-navigation ul.social-links-menu li a:focus { + color: #111; + opacity: 1; + border-bottom: 1px solid #111; +} + +.social-navigation ul.social-links-menu li a svg { + display: block; + width: 32px; + height: 32px; +} + +.social-navigation ul.social-links-menu li a svg#ui-icon-link { + transform: rotate(45deg); +} + +/*-------------------------------------------------------------- +## Next / Previous +--------------------------------------------------------------*/ +/* Next/Previous navigation */ +.post-navigation { + margin: calc(3 * 1rem) 0; +} + +.post-navigation .nav-links { + margin: 0 1rem; + max-width: 100%; + display: flex; + flex-direction: column; +} + +@media only screen and (min-width: 1168px) { + .post-navigation .nav-links { + flex-direction: row; + margin: 0 calc(2 * (100vw / 12)); + max-width: calc(8 * (100vw / 12)); + } +} + +.post-navigation .nav-links a .meta-nav { + color: #767676; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.post-navigation .nav-links a .meta-nav:before, .post-navigation .nav-links a .meta-nav:after { + display: none; + content: "—"; + width: 2em; + color: #767676; + height: 1em; +} + +.post-navigation .nav-links a .post-title { + -webkit-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto; +} + +.post-navigation .nav-links a:hover { + color: #005177; +} + +@media only screen and (min-width: 1168px) { + .post-navigation .nav-links .nav-previous, + .post-navigation .nav-links .nav-next { + min-width: calc(50% - 2 * 1rem); + } +} + +.post-navigation .nav-links .nav-previous { + order: 2; +} + +@media only screen and (min-width: 1168px) { + .post-navigation .nav-links .nav-previous { + order: 1; + } +} + +.post-navigation .nav-links .nav-previous + .nav-next { + margin-bottom: 1rem; +} + +.post-navigation .nav-links .nav-previous .meta-nav:before { + display: inline; +} + +.post-navigation .nav-links .nav-next { + order: 1; +} + +@media only screen and (min-width: 1168px) { + .post-navigation .nav-links .nav-next { + order: 2; + } +} + +.post-navigation .nav-links .nav-next .meta-nav:after { + display: inline; +} + +.pagination .nav-links { + display: flex; + flex-wrap: wrap; + padding: 0 calc(.5 * 1rem); +} + +.pagination .nav-links > * { + padding: calc(.5 * 1rem); +} + +.pagination .nav-links > *.dots, .pagination .nav-links > *.prev { + padding-right: 0; +} + +.pagination .nav-links > *.dots, .pagination .nav-links > *.next { + padding-left: 0; +} + +.pagination .nav-links .nav-next-text, +.pagination .nav-links .nav-prev-text { + display: none; +} + +@media only screen and (min-width: 768px) { + .pagination .nav-links { + margin-right: calc(2 * (100vw / 12)); + padding: 0; + } + .pagination .nav-links .prev > *, + .pagination .nav-links .next > * { + display: inline-block; + vertical-align: text-bottom; + } + .pagination .nav-links > * { + padding: 1rem; + } +} + +.comment-navigation .nav-links { + display: flex; + flex-direction: row; +} + +.comment-navigation .nav-previous, +.comment-navigation .nav-next { + min-width: 50%; + width: 100%; +} + +.comment-navigation .nav-previous .secondary-text, +.comment-navigation .nav-next .secondary-text { + display: none; +} + +@media only screen and (min-width: 768px) { + .comment-navigation .nav-previous .secondary-text, + .comment-navigation .nav-next .secondary-text { + display: inline; + } +} + +.comment-navigation .nav-previous svg, +.comment-navigation .nav-next svg { + vertical-align: middle; + position: relative; + margin: 0 -0.35em; + top: -1px; +} + +.comment-navigation .nav-previous a:hover, +.comment-navigation .nav-next a:hover { + color: #0073aa; +} + +.comment-navigation .nav-next { + text-align: left; +} + +/* Accessibility */ +/* Text meant only for screen readers. */ +.screen-reader-text { + border: 0; + clip: rect(1px, 1px, 1px, 1px); + -webkit-clip-path: inset(50%); + clip-path: inset(50%); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute !important; + width: 1px; + word-wrap: normal !important; + /* Many screen reader and browser combinations announce broken words as they would appear visually. */ +} + +.screen-reader-text:focus { + background-color: #f1f1f1; + border-radius: 3px; + box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.6); + clip: auto !important; + -webkit-clip-path: none; + clip-path: none; + color: #21759b; + display: block; + font-size: 14px; + font-size: 0.875rem; + font-weight: bold; + height: auto; + right: 5px; + line-height: normal; + padding: 15px 23px 14px; + text-decoration: none; + top: 5px; + width: auto; + z-index: 100000; + /* Above WP toolbar. */ +} + +/* Do not show the outline on the skip link target. */ +#content[tabindex="-1"]:focus { + outline: 0; +} + +/* Alignments */ +.alignleft { + float: right; + margin-left: 1rem; +} + +.alignright { + float: left; + margin-right: 1rem; +} + +.aligncenter { + clear: both; + display: block; + margin-right: auto; + margin-left: auto; +} + +/* Clearings */ +.clear:before, +.clear:after, +.entry-content:before, +.entry-content:after, +.comment-content:before, +.comment-content:after, +.site-header:before, +.site-header:after, +.site-content:before, +.site-content:after, +.site-footer:before, +.site-footer:after { + content: ""; + display: table; + table-layout: fixed; +} + +.clear:after, +.entry-content:after, +.comment-content:after, +.site-header:after, +.site-content:after, +.site-footer:after { + clear: both; +} + +/* Layout */ +/** === Layout === */ +#page { + width: 100%; +} + +.site-content { + overflow: hidden; +} + +/* Content */ +/*-------------------------------------------------------------- +## Header +--------------------------------------------------------------*/ +.site-header { + padding: 1em; +} + +@media only screen and (min-width: 768px) { + .site-header { + margin: 0; + padding: 3rem 0; + } + .site-header.featured-image { + display: flex; + min-height: 100vh; + flex-direction: column; + justify-content: space-between; + margin-bottom: 3rem; + } + .site-header.featured-image .site-branding-container { + margin-bottom: auto; + } +} + +.site-branding { + color: #767676; + position: relative; +} + +@media only screen and (min-width: 768px) { + .site-branding { + margin: 0 calc(2 * (100vw / 12)); + max-width: 22em; + } +} + +.site-logo { + position: relative; + z-index: 999; + margin-bottom: calc(.66 * 1rem); +} + +@media only screen and (min-width: 768px) { + .site-logo { + margin-bottom: 0; + position: absolute; + left: calc(100% + (0.5 * calc(100vw / 12))); + top: 4px; + z-index: 999; + } +} + +.site-logo .custom-logo-link { + border-radius: 100%; + box-sizing: content-box; + box-shadow: 0 0 0 0 rgba(0, 0, 0, 0); + display: block; + width: 32px; + height: 32px; + overflow: hidden; + transition: box-shadow 200ms ease-in-out; +} + +.site-logo .custom-logo-link .custom-logo { + min-height: inherit; +} + +.site-logo .custom-logo-link:hover, .site-logo .custom-logo-link:active, .site-logo .custom-logo-link:focus { + box-shadow: 0 0 0 2px black; +} + +@media only screen and (min-width: 768px) { + .site-logo .custom-logo-link { + width: 64px; + height: 64px; + } +} + +.site-title { + margin: auto; + display: inline; + color: #111; + /* When there is no description set, make sure navigation appears below title. */ +} + +.featured-image .site-title { + margin: 0; +} + +@media only screen and (min-width: 768px) { + .featured-image .site-title { + display: inline-block; + } +} + +.site-title + .main-navigation { + display: block; +} + +.site-title a { + color: inherit; +} + +.site-title a:hover { + color: #4a4a4a; +} + +@media only screen and (min-width: 768px) { + .site-title { + display: inline; + } +} + +.site-description { + display: inline; + color: #767676; + font-weight: normal; + margin: 0; +} + +.site-description:not(:empty):before { + content: "\2014"; + margin: 0 .2em; +} + +.site-header.featured-image { + /* Need relative positioning to properly align layers. */ + position: relative; + /* Add text shadow to text, to increase readability. */ + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.35); + /* Set white text color when featured image is set. */ + /* Post header styles */ + /* Custom Logo Link */ + /* Make sure important elements are above pseudo elements used for effects. */ + /* Set up image filter layer positioning */ + /* Background & Effects */ + /* Shared background settings between pseudo elements. See .site-branding-container */ + background-position: center; + background-repeat: no-repeat; + background-size: cover; + /* The intensity of each blend mode is controlled via layer opacity. */ + /* First layer: grayscale. */ + /* Second layer: screen. */ + /* Third layer: multiply. */ + /* Fourth layer: overlay. */ + /* Fifth layer: readability overlay */ +} + +.site-header.featured-image .site-branding .site-title, +.site-header.featured-image .site-branding .site-description, +.site-header.featured-image .main-navigation a:after, +.site-header.featured-image .main-navigation .main-menu > li.menu-item-has-children:after, +.site-header.featured-image .main-navigation li, +.site-header.featured-image .social-navigation li, +.site-header.featured-image .entry-meta, +.site-header.featured-image .entry-title { + color: white; +} + +.site-header.featured-image .main-navigation a, +.site-header.featured-image .social-navigation a, +.site-header.featured-image .site-title a, +.site-header.featured-image .hentry a { + color: white; + transition: opacity 110ms ease-in-out; +} + +.site-header.featured-image .main-navigation a:hover, .site-header.featured-image .main-navigation a:active, +.site-header.featured-image .social-navigation a:hover, +.site-header.featured-image .social-navigation a:active, +.site-header.featured-image .site-title a:hover, +.site-header.featured-image .site-title a:active, +.site-header.featured-image .hentry a:hover, +.site-header.featured-image .hentry a:active { + color: white; + opacity: 0.6; +} + +.site-header.featured-image .main-navigation a:focus, +.site-header.featured-image .social-navigation a:focus, +.site-header.featured-image .site-title a:focus, +.site-header.featured-image .hentry a:focus { + color: white; +} + +.site-header.featured-image .social-navigation a:focus { + color: white; + opacity: 1; + border-bottom: 1px solid white; +} + +.site-header.featured-image .social-navigation svg, +.site-header.featured-image .hentry svg { + /* Use -webkit- only if supporting: Chrome < 54, iOS < 9.3, Android < 4.4.4 */ + filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.35)); +} + +.site-header.featured-image .hentry .entry-header { + margin-right: 0; + margin-left: 0; +} + +@media only screen and (min-width: 768px) { + .site-header.featured-image .hentry .entry-header { + margin-right: calc(2 * (100vw / 12)); + margin-left: calc(2 * (100vw / 12)); + } +} + +.site-header.featured-image .hentry .entry-header .entry-title:before { + background: white; +} + +.site-header.featured-image .custom-logo-link { + background: white; + box-shadow: 0 0 0 0 rgba(255, 255, 255, 0); +} + +.site-header.featured-image .custom-logo-link:hover, .site-header.featured-image .custom-logo-link:active, .site-header.featured-image .custom-logo-link:focus { + box-shadow: 0 0 0 2px white; +} + +.site-header.featured-image .site-branding, +.site-header.featured-image .hentry .entry-header { + z-index: 10; +} + +.site-header.featured-image .site-branding-container:before, +.site-header.featured-image .site-branding-container:after, +.site-header.featured-image .hentry:before, +.site-header.featured-image .hentry:after, .site-header.featured-image:after { + display: block; + position: absolute; + top: 0; + right: 0; + content: "\020"; + width: 100%; + height: 100%; +} + +.site-header.featured-image .site-branding-container:before { + background-position: center; + background-repeat: no-repeat; + background-size: cover; + filter: grayscale(100%); + z-index: 1; +} + +.site-header.featured-image .hentry:before { + background: #0073aa; + mix-blend-mode: screen; + opacity: 0.1; + z-index: 2; +} + +.site-header.featured-image .hentry:after { + background: #0073aa; + mix-blend-mode: multiply; + opacity: 1; + z-index: 3; +} + +.site-header.featured-image .site-branding-container:after { + background: rgba(255, 255, 255, 0.35); + mix-blend-mode: overlay; + opacity: 0.5; + z-index: 4; +} + +.site-header.featured-image:after { + background: #000e14; + /** + * Add a transition to the readability overlay, to add a subtle + * but smooth effect when resizing the screen. + */ + transition: opacity 1200ms ease-in-out; + z-index: 5; + opacity: 0.38; +} + +@media only screen and (min-width: 768px) { + .site-header.featured-image:after { + opacity: 0.18; + } +} + +@media only screen and (min-width: 1168px) { + .site-header.featured-image:after { + opacity: 0.1; + } +} + +.site-header.featured-image ::-moz-selection { + background: rgba(255, 255, 255, 0.17); +} + +.site-header.featured-image ::selection { + background: rgba(255, 255, 255, 0.17); +} + +/*-------------------------------------------------------------- +## Posts and pages +--------------------------------------------------------------*/ +.sticky { + display: block; +} + +.sticky-post { + background: #0073aa; + color: #fff; + display: inline-block; + font-weight: bold; + line-height: 1; + padding: .25rem; + position: absolute; + text-transform: uppercase; + top: -1rem; + z-index: 1; +} + +.updated:not(.published) { + display: none; +} + +.page-links { + clear: both; + margin: 0 0 calc(1.5 * 1rem); +} + +.hentry { + margin-top: calc(6 * 1rem); +} + +.hentry:first-of-type { + margin-top: 0; +} + +.hentry .entry-header { + margin: calc(3 * 1rem) 1rem 1rem; + position: relative; +} + +@media only screen and (min-width: 768px) { + .hentry .entry-header { + margin: calc(3 * 1rem) calc(2 * (100vw / 12 )) 1rem; + } + .featured-image .hentry .entry-header { + margin-bottom: 0; + } +} + +.hentry .entry-title { + margin: 0; +} + +.hentry .entry-title:before { + background: #767676; + content: "\020"; + display: block; + height: 2px; + margin: 1rem 0; + width: 1em; +} + +.hentry .entry-title a { + color: inherit; +} + +.hentry .entry-title a:hover { + color: #4a4a4a; +} + +.hentry .entry-meta, +.hentry .entry-footer { + color: #767676; + font-weight: 500; +} + +.hentry .entry-meta > span, +.hentry .entry-footer > span { + margin-left: 1rem; +} + +.hentry .entry-meta > span:last-child, +.hentry .entry-footer > span:last-child { + margin-left: 0; +} + +.hentry .entry-meta a, +.hentry .entry-footer a { + transition: color 110ms ease-in-out; + color: currentColor; +} + +.hentry .entry-meta a:hover, +.hentry .entry-footer a:hover { + text-decoration: none; + color: #0073aa; +} + +.hentry .entry-meta .svg-icon, +.hentry .entry-footer .svg-icon { + position: relative; + display: inline-block; + vertical-align: middle; + margin-left: 0.5em; +} + +.hentry .entry-meta { + margin: 1rem 0; +} + +@media only screen and (min-width: 1168px) { + .hentry .entry-meta.has-discussion .comment-count { + float: left; + position: relative; + } +} + +.hentry .entry-meta.has-discussion .comment-count .discussion-avatar-list { + display: none; +} + +@media only screen and (min-width: 1168px) { + .hentry .entry-meta.has-discussion .comment-count .discussion-avatar-list { + bottom: 100%; + display: block; + position: absolute; + } +} + +.hentry .entry-footer { + margin: calc(2 * 1rem) 1rem 1rem; +} + +@media only screen and (min-width: 768px) { + .hentry .entry-footer { + margin: calc(3 * 1rem) calc(2 * (100vw / 12)); + max-width: calc(8 * (100vw / 12)); + } +} + +@media only screen and (min-width: 768px) { + .hentry .entry-footer { + max-width: calc(6 * (100vw / 12)); + } +} + +.hentry .post-thumbnail { + margin: 1rem; +} + +@media only screen and (min-width: 768px) { + .hentry .post-thumbnail { + margin: 1rem calc(2 * (100vw / 12)); + } +} + +.hentry .post-thumbnail:focus { + outline: none; +} + +.hentry .post-thumbnail .post-thumbnail-inner { + display: block; +} + +.hentry .post-thumbnail .post-thumbnail-inner img { + position: relative; + display: block; + width: 100%; +} + +.image-filters-enabled .hentry .post-thumbnail { + position: relative; + display: block; +} + +.image-filters-enabled .hentry .post-thumbnail .post-thumbnail-inner { + position: relative; + filter: grayscale(100%); + z-index: 1; +} + +.image-filters-enabled .hentry .post-thumbnail .post-thumbnail-inner:after { + display: block; + width: 100%; + height: 100%; + z-index: 10; +} + +.image-filters-enabled .hentry .post-thumbnail:before, .image-filters-enabled .hentry .post-thumbnail:after { + position: absolute; + display: block; + width: 100%; + height: 100%; + top: 0; + right: 0; + content: "\020"; + display: block; + pointer-events: none; +} + +.image-filters-enabled .hentry .post-thumbnail:before { + background: #0073aa; + mix-blend-mode: screen; + opacity: 0.1; + z-index: 2; +} + +.image-filters-enabled .hentry .post-thumbnail:after { + background: #0073aa; + mix-blend-mode: multiply; + opacity: 1; + z-index: 3; +} + +.hentry .entry-content .more-link { + transition: color 110ms ease-in-out; + display: inline; + color: inherit; +} + +.hentry .entry-content .more-link:after { + content: "»"; + margin-right: 0.5em; +} + +.hentry .entry-content .more-link:hover { + color: #0073aa; + text-decoration: none; +} + +.hentry .entry-content a { + text-decoration: underline; +} + +.hentry .entry-content a:hover { + text-decoration: none; +} + +.hentry .entry-content > iframe[style] { + margin: 32px 1rem !important; + max-width: calc(100vw - (2 * 1rem)) !important; +} + +@media only screen and (min-width: 768px) { + .hentry .entry-content > iframe[style] { + margin: 32px calc(2 * (100vw / 12)) !important; + max-width: calc(8 * (100vw / 12)) !important; + } +} + +@media only screen and (min-width: 1168px) { + .hentry .entry-content > iframe[style] { + max-width: calc(6 * (100vw / 12)) !important; + } +} + +.hentry .entry-content .wp-audio-shortcode { + max-width: calc(100vw - (2 * 1rem)); +} + +@media only screen and (min-width: 768px) { + .hentry .entry-content .wp-audio-shortcode { + max-width: calc(8 * (100vw / 12)); + } +} + +@media only screen and (min-width: 1168px) { + .hentry .entry-content .wp-audio-shortcode { + max-width: calc(6 * (100vw / 12)); + } +} + +/*-------------------------------------------------------------- +## Comments +--------------------------------------------------------------*/ +.comment-content a { + word-wrap: break-word; +} + +.bypostauthor { + display: block; +} + +.comments-area { + /* Add extra margin when the comments section is located immediately after the + * post itself (this happens on pages). + */ +} + +.hentry + .comments-area { + margin-top: calc(3 * 1rem); +} + +.comments-area .comments-title-wrap, +.comments-area .comment-list, +.comments-area > .comment-respond, +.comments-area .comment-form-flex, +.comments-area .no-comments { + margin: calc(2 * 1rem) 1rem; +} + +@media only screen and (min-width: 768px) { + .comments-area .comments-title-wrap, + .comments-area .comment-list, + .comments-area > .comment-respond, + .comments-area .comment-form-flex, + .comments-area .no-comments { + margin: calc(3 * 1rem) calc(2 * (100vw / 12)); + max-width: calc(6 * (100vw / 12)); + } +} + +.comments-area .comments-title-wrap { + align-items: baseline; + display: flex; + justify-content: space-between; +} + +.comments-area .comments-title-wrap .comments-title { + margin: 0; +} + +.comments-area .comments-title-wrap .comments-title:before { + background: #767676; + content: "\020"; + display: block; + height: 2px; + margin: 1rem 0; + width: 1em; +} + +#comment { + max-width: 100%; + box-sizing: border-box; +} + +#respond { + position: relative; +} + +#respond .comment-user-avatar { + display: none; +} + +#respond .comment .comment-form { + padding-right: 0; +} + +#respond > small { + display: block; + font-size: 22px; + position: absolute; + right: calc(1rem + 100%); + top: calc(-3.5 * 1rem); + width: calc(100vw / 12); +} + +#comments > .comments-title:last-child { + display: none; +} + +@media only screen and (min-width: 1168px) { + #comments > #respond .comment-user-avatar { + position: absolute; + display: block; + top: 0; + right: 0; + } + #comments > #respond .comment-user-avatar .avatar { + display: block; + } +} + +.comment-form-flex { + display: flex; + flex-direction: column; +} + +.comment-form-flex .comments-title { + display: none; + margin: 0; + order: 1; +} + +.comment-form-flex #respond { + order: 2; +} + +.comment-form-flex #respond + .comments-title { + display: block; +} + +.comment-list { + list-style: none; + padding: 0; +} + +.comment-list .children { + margin: 0; + padding: 0 1rem 0 0; +} + +.comment-list > .comment:first-child { + margin-top: 0; +} + +.comment-reply { + right: calc(1rem + 100%); + bottom: 0; + position: absolute; +} + +#respond + .comment-reply { + display: none; +} + +.comment-reply .comment-reply-link { + display: inline-block; +} + +.comment { + list-style: none; + position: relative; +} + +@media only screen and (min-width: 768px) { + .comment { + padding-right: calc(.5 * (1rem + calc(100vw / 12 ))); + } + .comment .children { + padding-right: 0; + } +} + +.comment:hover > .comment-body > .comment-meta > .comment-metadata > .edit-link-sep, +.comment:hover > .comment-body > .comment-meta > .comment-metadata > .edit-link { + opacity: 1; +} + +.comment .comment-body { + margin: calc(2 * 1rem) 0; +} + +.comment .comment-meta { + position: relative; +} + +@media only screen and (min-width: 768px) { + .comment .comment-author { + display: inline-block; + vertical-align: baseline; + } +} + +.comment .comment-author .avatar { + float: right; + margin-left: 1rem; + position: relative; +} + +@media only screen and (min-width: 768px) { + .comment .comment-author .avatar { + float: inherit; + margin-left: inherit; + position: absolute; + top: 0; + left: calc(100% + 1rem); + } +} + +.comment .comment-author .fn { + position: relative; + display: block; +} + +@media only screen and (min-width: 768px) { + .comment .comment-author .fn { + display: inline-block; + vertical-align: baseline; + } +} + +.comment .comment-author .fn a { + color: inherit; +} + +.comment .comment-author .fn a:hover { + color: #005177; +} + +.comment .comment-author .post-author-badge { + border-radius: 100%; + display: block; + height: 18px; + position: absolute; + background: #008fd3; + left: calc(100% + 0.25rem); + top: -3px; + width: 18px; +} + +.comment .comment-author .post-author-badge svg { + width: inherit; + height: inherit; + display: block; + fill: white; + transform: scale(0.875); +} + +@media only screen and (min-width: 768px) { + .comment .comment-metadata { + display: inline-block; + margin-right: 1rem; + position: relative; + vertical-align: baseline; + } +} + +.comment .comment-metadata > a, +.comment .comment-metadata .comment-edit-link { + display: inline-block; + font-weight: 500; + color: #767676; + vertical-align: baseline; +} + +.comment .comment-metadata > a time, +.comment .comment-metadata .comment-edit-link time { + vertical-align: baseline; +} + +.comment .comment-metadata > a:hover, +.comment .comment-metadata .comment-edit-link:hover { + color: #4a4a4a; + text-decoration: none; +} + +.comment .comment-metadata > * { + display: inline-block; +} + +.comment .comment-metadata .edit-link-sep { + color: #767676; + margin: 0 0.2em; + opacity: 0; + transition: opacity 200ms ease-in-out; + vertical-align: baseline; +} + +.comment .comment-metadata .edit-link { + color: #767676; + transition: opacity 200ms ease-in-out; + opacity: 0; +} + +.comment .comment-metadata .edit-link svg { + transform: scale(0.8); + vertical-align: baseline; + margin-left: 0.1em; +} + +.comment .comment-metadata .comment-edit-link { + position: relative; + padding-right: 1rem; + margin-right: -1rem; + z-index: 1; +} + +.comment .comment-metadata .comment-edit-link:hover { + color: #0073aa; +} + +.comment .comment-content { + margin: 1rem 0; +} + +.comment .comment-content > *:first-child { + margin-top: 0; +} + +.comment .comment-content > *:last-child { + margin-bottom: 0; +} + +.comment .comment-content a { + text-decoration: underline; +} + +.comment .comment-content a:hover { + text-decoration: none; +} + +.comment-reply-link, +#cancel-comment-reply-link { + font-weight: 500; +} + +.comment-reply-link:hover, +#cancel-comment-reply-link:hover { + color: #005177; +} + +.discussion-avatar-list { + content: ""; + display: table; + table-layout: fixed; + margin: 0; + padding: 0; +} + +.discussion-avatar-list li { + position: relative; + list-style: none; + margin: 0 0 0 -8px; + padding: 0; + float: right; +} + +.discussion-avatar-list .comment-user-avatar img { + height: calc(1.5 * 1rem); + width: calc(1.5 * 1rem); +} + +.discussion-meta .discussion-avatar-list { + display: inline-block; + margin-left: 8px; +} + +.discussion-meta .discussion-meta-info { + margin: 0; +} + +.discussion-meta .discussion-meta-info .svg-icon { + vertical-align: middle; + fill: currentColor; + transform: scale(0.6) scaleX(-1) translateY(-0.1em); + margin-right: -0.25rem; +} + +.comment-form .comment-notes, +.comment-form label { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-size: 0.71111em; + color: #767676; +} + +@media only screen and (min-width: 768px) { + .comment-form .comment-form-author, + .comment-form .comment-form-email { + width: calc(50% - 0.5rem); + float: right; + } +} + +@media only screen and (min-width: 768px) { + .comment-form .comment-form-email { + margin-right: 1rem; + } +} + +.comment-form input[name="author"], +.comment-form input[name="email"], +.comment-form input[name="url"] { + display: block; + width: 100%; +} + +/*-------------------------------------------------------------- +## Archives +--------------------------------------------------------------*/ +.archive .page-header, +.search .page-header, +.error404 .page-header { + margin: 1rem 1rem calc(3 * 1rem); +} + +@media only screen and (min-width: 768px) { + .archive .page-header, + .search .page-header, + .error404 .page-header { + margin: 0 calc(2 * (100vw / 12)) calc(3 * 1rem); + max-width: calc(8 * (100vw / 12)); + } +} + +.archive .page-header .page-title, +.search .page-header .page-title, +.error404 .page-header .page-title { + color: #767676; + display: inline; + letter-spacing: normal; +} + +.archive .page-header .page-title:before, +.search .page-header .page-title:before, +.error404 .page-header .page-title:before { + display: none; +} + +.archive .page-header .search-term, +.archive .page-header .page-description, +.search .page-header .search-term, +.search .page-header .page-description, +.error404 .page-header .search-term, +.error404 .page-header .page-description { + display: inherit; + clear: both; +} + +.archive .page-header .search-term:after, +.archive .page-header .page-description:after, +.search .page-header .search-term:after, +.search .page-header .page-description:after, +.error404 .page-header .search-term:after, +.error404 .page-header .page-description:after { + content: "."; + font-weight: bold; + color: #767676; +} + +@media only screen and (min-width: 768px) { + .hfeed .hentry .entry-header { + margin: calc(3 * 1rem) calc(2 * (100vw / 12)) calc(1rem / 2); + } +} + +/* 404 & Not found */ +.error-404.not-found .page-content, +.no-results.not-found .page-content { + margin: calc(3 * 1rem) 1rem; +} + +@media only screen and (min-width: 768px) { + .error-404.not-found .page-content, + .no-results.not-found .page-content { + margin: calc(3 * 1rem) calc(2 * (100vw / 12)) calc(1rem / 2); + } +} + +.error-404.not-found .search-submit, +.no-results.not-found .search-submit { + vertical-align: middle; + margin: 1rem 0; +} + +.error-404.not-found .search-field, +.no-results.not-found .search-field { + width: 100%; +} + +/*-------------------------------------------------------------- +## Footer +--------------------------------------------------------------*/ +/* Site footer */ +.site-footer { + color: #767676; +} + +.site-footer .site-info { + margin: calc(2 * 1rem) 1rem; +} + +@media only screen and (min-width: 768px) { + .site-footer .site-info { + margin: calc(3 * 1rem) calc(2 * (100vw / 12)); + max-width: calc(8 * (100vw / 12)); + } +} + +.site-footer .site-info .imprint { + margin-left: 1rem; +} + +.site-footer a { + color: inherit; +} + +.site-footer a:hover { + text-decoration: none; + color: #0073aa; +} + +/* Widgets */ +.widget { + margin: 0 0 1rem; + /* Make sure select elements fit in widgets. */ +} + +.widget select { + max-width: 100%; +} + +/* Blocks */ +/* !Block styles */ +.entry-content > *, +.entry-summary > * { + margin: 32px 1rem; + max-width: calc(100vw - (2 * 1rem)); + /* + // Set top margins for headings + & + h1:before, + & + h2:before, + & + h3, + & + h4, + & + h5, + & + h6 { + margin-top: calc(4 * 1rem); + } +*/ +} + +@media only screen and (min-width: 768px) { + .entry-content > *, + .entry-summary > * { + margin: 32px calc(2 * (100vw / 12)); + max-width: calc(8 * (100vw / 12)); + } +} + +@media only screen and (min-width: 1168px) { + .entry-content > *, + .entry-summary > * { + max-width: calc(6 * (100vw / 12)); + } +} + +.entry-content > * > *:first-child, +.entry-summary > * > *:first-child { + margin-top: 0; +} + +.entry-content > * > *:last-child, +.entry-summary > * > *:last-child { + margin-bottom: 0; +} + +.entry-content > *.alignwide, +.entry-summary > *.alignwide { + margin-right: auto; + margin-left: auto; +} + +@media only screen and (min-width: 768px) { + .entry-content > *.alignwide, + .entry-summary > *.alignwide { + margin-right: calc(1 * (100vw / 12)); + margin-left: calc(1 * (100vw / 12)); + max-width: calc(10 * (100vw / 12)); + } +} + +.entry-content > *.alignfull, +.entry-summary > *.alignfull { + margin-top: calc(2 * 1rem); + margin-left: 0; + margin-bottom: calc(2 * 1rem); + margin-right: 0; + max-width: 100%; +} + +.entry-content > *.alignleft, +.entry-summary > *.alignleft { + float: right; + max-width: calc(5 * (100vw / 12)); + margin-top: 0; +} + +@media only screen and (min-width: 768px) { + .entry-content > *.alignleft, + .entry-summary > *.alignleft { + max-width: calc(4 * (100vw / 12)); + margin-left: calc(2 * 1rem); + } +} + +@media only screen and (min-width: 1168px) { + .entry-content > *.alignleft, + .entry-summary > *.alignleft { + max-width: calc(3 * (100vw / 12)); + } +} + +.entry-content > *.alignright, +.entry-summary > *.alignright { + float: left; + max-width: calc(5 * (100vw / 12)); + margin-top: 0; + margin-right: 1rem; + margin-left: 1rem; +} + +@media only screen and (min-width: 768px) { + .entry-content > *.alignright, + .entry-summary > *.alignright { + max-width: calc(4 * (100vw / 12)); + margin-right: calc(2 * 1rem); + margin-left: calc(2 * (100vw / 12)); + } +} + +.entry-content .wp-block-audio { + width: 100%; +} + +.entry-content .wp-block-audio audio { + width: 100%; +} + +.entry-content .wp-block-audio.alignleft audio, +.entry-content .wp-block-audio.alignright audio { + max-width: 190px; +} + +@media only screen and (min-width: 768px) { + .entry-content .wp-block-audio.alignleft audio, + .entry-content .wp-block-audio.alignright audio { + max-width: 384px; + } +} + +@media only screen and (min-width: 1379px) { + .entry-content .wp-block-audio.alignleft audio, + .entry-content .wp-block-audio.alignright audio { + max-width: 385.44px; + } +} + +.entry-content .wp-block-video video { + width: 100%; +} + +.entry-content .wp-block-button .wp-block-button__link { + transition: background 150ms ease-in-out; + border: none; + background: #0073aa; + font-size: 0.88889em; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + line-height: 1.2; + box-sizing: border-box; + font-weight: bold; + padding: 0.66rem 1rem; + outline: none; + color: white; + outline: none; +} + +.entry-content .wp-block-button .wp-block-button__link:hover { + cursor: pointer; +} + +.entry-content .wp-block-button .wp-block-button__link:hover, .entry-content .wp-block-button .wp-block-button__link:focus { + background: #111; +} + +.entry-content .wp-block-button .wp-block-button__link:focus { + outline: thin dotted; + outline-offset: -4px; +} + +.entry-content .wp-block-button:not(.is-style-squared) .wp-block-button__link { + border-radius: 5px; +} + +.entry-content .wp-block-button.is-style-outline .wp-block-button__link, +.entry-content .wp-block-button.is-style-outline .wp-block-button__link:focus, +.entry-content .wp-block-button.is-style-outline .wp-block-button__link:active { + transition: all 150ms ease-in-out; + background: transparent; + border: 2px solid #0073aa; +} + +.entry-content .wp-block-button.is-style-outline .wp-block-button__link:not(.has-text-color), +.entry-content .wp-block-button.is-style-outline .wp-block-button__link:focus:not(.has-text-color), +.entry-content .wp-block-button.is-style-outline .wp-block-button__link:active:not(.has-text-color) { + color: #0073aa; +} + +.entry-content .wp-block-button.is-style-outline .wp-block-button__link:hover { + border-color: #111; + color: #111; +} + +.entry-content .wp-block-archives, +.entry-content .wp-block-categories, +.entry-content .wp-block-latest-posts { + padding: 0; + list-style: none; +} + +.entry-content .wp-block-archives li, +.entry-content .wp-block-categories li, +.entry-content .wp-block-latest-posts li { + color: #767676; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-size: calc(22px * 1.6875); + font-weight: bold; + line-height: 1.2; +} + +.entry-content .wp-block-archives li a:after, +.entry-content .wp-block-categories li a:after, +.entry-content .wp-block-latest-posts li a:after { + color: #767676; + content: ","; +} + +.entry-content .wp-block-archives li:last-child a:after, +.entry-content .wp-block-categories li:last-child a:after, +.entry-content .wp-block-latest-posts li:last-child a:after { + color: #767676; + content: "."; +} + +.entry-content .wp-block-latest-posts.is-grid li { + border-top: 2px solid #ccc; + padding-top: 1rem; + margin-bottom: 2rem; +} + +.entry-content .wp-block-latest-posts.is-grid li a:after { + content: ''; +} + +.entry-content .wp-block-latest-posts.is-grid li:last-child { + margin-bottom: auto; +} + +.entry-content .wp-block-latest-posts.is-grid li:last-child a:after { + content: ''; +} + +.entry-content .wp-block-preformatted { + font-size: 0.71111em; + line-height: 1.8; + padding: 1rem; +} + +.entry-content .wp-block-verse { + font-family: "Hoefler Text", "Baskerville Old Face", Garamond, "Times New Roman", serif; + font-size: 22px; + line-height: 1.8; +} + +.entry-content .has-drop-cap:not(:focus):first-letter { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-size: 3.375em; + line-height: 1; + font-weight: bold; + margin: 0 0 0 0.25em; +} + +.entry-content .wp-block-pullquote { + border: none; + padding: 1rem; +} + +.entry-content .wp-block-pullquote blockquote { + border: none; + padding-bottom: calc(2 * 1rem); + margin-left: 0; +} + +.entry-content .wp-block-pullquote p { + font-size: 1.6875em; + font-style: italic; + line-height: 1.3; + margin-bottom: 0.5em; + margin-top: 0.5em; + color: #111; +} + +.entry-content .wp-block-pullquote p em { + font-style: normal; +} + +@media only screen and (min-width: 768px) { + .entry-content .wp-block-pullquote p { + font-size: 2.25em; + } +} + +.entry-content .wp-block-pullquote cite { + display: inline-block; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-size: 0.71111em; + line-height: 1.6; + text-transform: none; + color: #767676; +} + +.entry-content .wp-block-pullquote.alignleft, .entry-content .wp-block-pullquote.alignright { + padding: 0; +} + +.entry-content .wp-block-pullquote.alignleft blockquote, .entry-content .wp-block-pullquote.alignright blockquote { + margin-right: 0; + padding: 0; + text-align: right; + max-width: 100%; +} + +.entry-content .wp-block-pullquote.is-style-solid-color p { + font-size: 1.6875em; + line-height: 1.3; + margin-bottom: 0.5em; + margin-top: 0.5em; +} + +@media only screen and (min-width: 768px) { + .entry-content .wp-block-pullquote.is-style-solid-color p { + font-size: 2.25em; + } +} + +.entry-content .wp-block-pullquote.is-style-solid-color blockquote { + margin: 0 auto; +} + +.entry-content .wp-block-pullquote.is-style-solid-color blockquote:not(.has-text-color) p, +.entry-content .wp-block-pullquote.is-style-solid-color cite { + color: white; +} + +.entry-content .wp-block-pullquote.is-style-solid-color:not(.has-background-color) { + background-color: #0073aa; +} + +.entry-content .wp-block-pullquote.is-style-solid-color.alignleft, .entry-content .wp-block-pullquote.is-style-solid-color.alignright { + padding: 1rem 1rem 0; +} + +.entry-content .wp-block-pullquote.is-style-solid-color.alignleft blockquote, .entry-content .wp-block-pullquote.is-style-solid-color.alignright blockquote { + padding: 0 0 calc( 1.5 * 1rem); + margin-right: 0; + margin-top: 0; +} + +@media only screen and (min-width: 768px) { + .entry-content .wp-block-pullquote.is-style-solid-color.alignleft, .entry-content .wp-block-pullquote.is-style-solid-color.alignright { + padding: calc( 2 * 1rem) calc( 2 * 1rem) 1rem; + } +} + +.entry-content .wp-block-quote:not(.is-large), .entry-content .wp-block-quote:not(.is-style-large) { + border-right: 2px solid #0073aa; + padding-top: 0; + padding-bottom: 0; +} + +.entry-content .wp-block-quote p { + font-size: 1em; + font-style: normal; + line-height: 1.8; +} + +.entry-content .wp-block-quote cite { + font-size: 0.71111em; +} + +.entry-content .wp-block-quote.is-large, .entry-content .wp-block-quote.is-style-large { + padding: 1rem 2rem 1rem 0; + margin: 1rem 0; + border-right: none; +} + +.entry-content .wp-block-quote.is-large p, .entry-content .wp-block-quote.is-style-large p { + font-size: 1.6875em; + line-height: 1.4; + font-style: italic; +} + +.entry-content .wp-block-quote.is-large cite, +.entry-content .wp-block-quote.is-large footer, .entry-content .wp-block-quote.is-style-large cite, +.entry-content .wp-block-quote.is-style-large footer { + font-size: 0.71111em; +} + +@media only screen and (min-width: 768px) { + .entry-content .wp-block-quote.is-large, .entry-content .wp-block-quote.is-style-large { + margin: 1rem calc(2 * (100vw / 12)); + max-width: calc(6 * (100vw / 12)); + } + .entry-content .wp-block-quote.is-large p, .entry-content .wp-block-quote.is-style-large p { + font-size: 1.6875em; + } +} + +.entry-content .wp-block-image img { + display: block; +} + +.entry-content .wp-block-image.alignleft, .entry-content .wp-block-image.alignright { + max-width: 100%; +} + +.entry-content .wp-block-image.alignfull img { + width: 100vw; + margin-right: auto; + margin-left: auto; +} + +.entry-content .wp-block-cover-image .wp-block-cover-image-text, +.entry-content .wp-block-cover-image h2 { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-size: 1.6875em; + font-weight: bold; + width: calc(100vw - (2 * 1rem)); + max-width: calc(100vw - (2 * 1rem)); +} + +@media only screen and (min-width: 768px) { + .entry-content .wp-block-cover-image .wp-block-cover-image-text, + .entry-content .wp-block-cover-image h2 { + font-size: 2.25em; + width: calc(8 * (100vw / 12)); + max-width: calc(8 * (100vw / 12)); + } +} + +@media only screen and (min-width: 1168px) { + .entry-content .wp-block-cover-image .wp-block-cover-image-text, + .entry-content .wp-block-cover-image h2 { + width: calc(6 * (100vw / 12 )); + max-width: calc(6 * (100vw / 12 )); + } +} + +.entry-content .wp-block-cover-image.alignleft h2, +.entry-content .wp-block-cover-image.alignleft .wp-block-cover-image-text, .entry-content .wp-block-cover-image.alignright h2, +.entry-content .wp-block-cover-image.alignright .wp-block-cover-image-text, .entry-content .wp-block-cover-image.aligncenter h2, +.entry-content .wp-block-cover-image.aligncenter .wp-block-cover-image-text { + width: 100%; + z-index: 1; + right: 50%; + position: absolute; + transform: translate(50%, -50%); + top: 50%; +} + +.entry-content .wp-block-cover-image.has-left-content { + justify-content: center; +} + +.entry-content .wp-block-cover-image.has-left-content h2, +.entry-content .wp-block-cover-image.has-left-content .wp-block-cover-image-text { + padding: 1rem; +} + +.entry-content .wp-block-cover-image.has-right-content { + justify-content: center; +} + +.entry-content .wp-block-cover-image.has-right-content h2, +.entry-content .wp-block-cover-image.has-right-content .wp-block-cover-image-text { + padding: 1rem; +} + +.entry-content .wp-block-gallery .blocks-gallery-image:last-child, +.entry-content .wp-block-gallery .blocks-gallery-item:last-child { + margin-bottom: 16px; +} + +.entry-content .wp-block-audio figcaption, +.entry-content .wp-block-video figcaption, +.entry-content .wp-block-image figcaption, +.entry-content .wp-block-gallery .blocks-gallery-image figcaption, +.entry-content .wp-block-gallery .blocks-gallery-item figcaption { + font-size: 0.71111em; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + line-height: 1.6; + margin: 0; + padding: 0.5rem; + text-align: right; +} + +.entry-content .wp-block-separator, +.entry-content hr { + margin-bottom: 2rem; + margin-top: 2rem; + /* Remove duplicate rule-line when a separator + * is followed by an H1, or H2 */ +} + +.entry-content .wp-block-separator:not(.is-style-dots), +.entry-content hr:not(.is-style-dots) { + background-color: #767676; + border: 0; + height: 2px; +} + +.entry-content .wp-block-separator:not(.is-style-wide):not(.is-style-dots), +.entry-content hr:not(.is-style-wide):not(.is-style-dots) { + max-width: 2.25em; +} + +.entry-content .wp-block-separator + h1:before, +.entry-content .wp-block-separator + h2:before, +.entry-content hr + h1:before, +.entry-content hr + h2:before { + display: none; +} + +.entry-content .wp-block-separator.is-style-dots:before, +.entry-content hr.is-style-dots:before { + color: #767676; + font-size: 1.6875em; + letter-spacing: 0.88889em; + padding-right: 0.88889em; +} + +.entry-content .wp-block-embed-twitter { + overflow: hidden; +} + +.entry-content .wp-block-table td, .entry-content .wp-block-table th { + border-color: #767676; +} + +.entry-content .wp-block-file { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; +} + +.entry-content .wp-block-file .wp-block-file__button { + transition: background 150ms ease-in-out; + border: none; + border-radius: 5px; + background: #0073aa; + font-size: 22px; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + line-height: 1.2; + font-weight: bold; + padding: 0.75rem 1rem; +} + +@media only screen and (min-width: 1168px) { + .entry-content .wp-block-file .wp-block-file__button { + font-size: 22px; + padding: 0.875rem 1.5rem; + } +} + +.entry-content .wp-block-file .wp-block-file__button:hover { + cursor: pointer; +} + +.entry-content .wp-block-file .wp-block-file__button:hover, .entry-content .wp-block-file .wp-block-file__button:focus { + background: #111; +} + +.entry-content .wp-block-file .wp-block-file__button:focus { + outline: thin dotted; + outline-offset: -4px; +} + +.entry-content .wp-block-code { + border-radius: 0; +} + +.entry-content .wp-block-code code { + font-size: 1.125em; +} + +.entry-content .wp-block-columns .wp-block-column > *:first-child { + margin-top: 0; +} + +.entry-content .wp-block-columns .wp-block-column > *:last-child { + margin-bottom: 0; +} + +.entry-content .wp-block-columns[class*='has-'] > * { + margin-left: 1rem; +} + +.entry-content .wp-block-columns[class*='has-'] > *:last-child { + margin-left: 0; +} + +.entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-weight: bold; +} + +.entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta .wp-block-latest-comments__comment-date { + font-weight: normal; +} + +.entry-content .wp-block-latest-comments .wp-block-latest-comments__comment, +.entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-date, +.entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-excerpt p { + font-size: inherit; +} + +.entry-content .wp-block-latest-comments.has-dates .wp-block-latest-comments__comment-date { + font-size: 0.71111em; +} + +/* Media */ +.page-content .wp-smiley, +.entry-content .wp-smiley, +.comment-content .wp-smiley { + border: none; + margin-bottom: 0; + margin-top: 0; + padding: 0; +} + +embed, +iframe, +object { + max-width: 100%; +} + +.custom-logo-link { + display: inline-block; +} + +.avatar { + border-radius: 100%; + display: block; + height: calc(2.25 * 1rem); + min-height: inherit; + width: calc(2.25 * 1rem); +} + +svg { + transition: fill 120ms ease-in-out; + fill: currentColor; +} + +/*-------------------------------------------------------------- +## Captions +--------------------------------------------------------------*/ +.wp-caption { + margin-bottom: calc(1.5 * 1rem); +} + +.wp-caption img[class*="wp-image-"] { + display: block; + margin-right: auto; + margin-left: auto; +} + +.wp-caption .wp-caption-text { + margin: calc(0.875 * 1rem) 0; +} + +.wp-caption-text { + text-align: center; +} + +/*-------------------------------------------------------------- +## Galleries +--------------------------------------------------------------*/ +.gallery { + display: flex; + margin-bottom: calc(1.5 * 1rem); +} + +.gallery-item { + display: inline-block; + margin-left: 1rem; + margin-bottom: 1rem; + text-align: center; + vertical-align: top; + width: 100%; +} + +.gallery-columns-2 .gallery-item { + max-width: calc( ( 12 / 2 ) * (100% / 12)); +} + +.gallery-columns-3 .gallery-item { + max-width: calc( ( 12 / 3 ) * (100% / 12)); +} + +.gallery-columns-4 .gallery-item { + max-width: calc( ( 12 / 4 ) * (100% / 12)); +} + +.gallery-columns-5 .gallery-item { + max-width: calc( ( 12 / 5 ) * (100% / 12)); +} + +.gallery-columns-6 .gallery-item { + max-width: calc( ( 12 / 6 ) * (100% / 12)); +} + +.gallery-columns-7 .gallery-item { + max-width: calc( ( 12 / 7 ) * (100% / 12)); +} + +.gallery-columns-8 .gallery-item { + max-width: calc( ( 12 / 8 ) * (100% / 12)); +} + +.gallery-columns-9 .gallery-item { + max-width: calc( ( 12 / 9 ) * (100% / 12)); +} + +.gallery-item:last-of-type { + margin-left: 0; +} + +.gallery-caption { + display: block; + font-size: 0.71111em; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + line-height: 1.6; + margin: 0; + padding: 0.5rem; +} + +.gallery-item > div > a { + display: block; + line-height: 0; + box-shadow: 0 0 0 0 transparent; +} + +.gallery-item > div > a:focus { + box-shadow: 0 0 0 2px #0073aa; +} diff --git a/src/wp-content/themes/twentynineteen/style.css b/src/wp-content/themes/twentynineteen/style.css new file mode 100644 index 0000000000000..d2dead036e572 --- /dev/null +++ b/src/wp-content/themes/twentynineteen/style.css @@ -0,0 +1,3243 @@ +@charset "UTF-8"; +/* +Theme Name: Twenty Nineteen +Theme URI: https://github.com/WordPress/twentynineteen +Author: the WordPress team +Author URI: https://wordpress.org/ +Description: A new Gutenberg-ready theme. +Requires at least: WordPress 4.9.6 +Version: 1.0 +License: GNU General Public License v2 or later +License URI: LICENSE +Text Domain: twentynineteen +Tags: custom-background, custom-logo, custom-menu, featured-images, threaded-comments, translation-ready + +This theme, like WordPress, is licensed under the GPL. +Use it to make something cool, have fun, and share what you've learned with others. + +Twenty Nineteen is based on Underscores https://underscores.me/, (C) 2012-2018 Automattic, Inc. +Underscores is distributed under the terms of the GNU GPL v2 or later. + +Normalizing styles have been helped along thanks to the fine work of +Nicolas Gallagher and Jonathan Neal https://necolas.github.io/normalize.css/ +*/ +/*-------------------------------------------------------------- +>>> TABLE OF CONTENTS: +---------------------------------------------------------------- +# Variables +# Normalize +# Typography + ## Headings + ## Copy +# Elements + ## Lists + ## Tables +# Forms + ## Buttons + ## Fields +# Navigation + ## Links + ## Menus + ## Next & Previous +# Accessibility +# Alignments +# Clearings +# Layout +# Widgets +# Content + ## Archives + ## Posts and pages + ## Comments +# Blocks +# Media + ## Captions + ## Galleries +--------------------------------------------------------------*/ +/* If we add the border using a regular CSS border, it won't look good on non-retina devices, + * since its edges can look jagged due to lack of antialiasing. In this case, we are several + * layers of box-shadow to add the border visually, which will render the border smoother. */ +/* Normalize */ +/*! normalize.css v8.0.0 | MIT License | github.com/necolas/normalize.css */ +/* Document + ========================================================================== */ +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in iOS. + */ +html { + line-height: 1.15; + /* 1 */ + -webkit-text-size-adjust: 100%; + /* 2 */ +} + +/* Sections + ========================================================================== */ +/** + * Remove the margin in all browsers. + */ +body { + margin: 0; +} + +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/* Grouping content + ========================================================================== */ +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ +hr { + box-sizing: content-box; + /* 1 */ + height: 0; + /* 1 */ + overflow: visible; + /* 2 */ +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ +pre { + font-family: monospace, monospace; + /* 1 */ + font-size: 1em; + /* 2 */ +} + +/* Text-level semantics + ========================================================================== */ +/** + * Remove the gray background on active links in IE 10. + */ +a { + background-color: transparent; +} + +/** + * 1. Remove the bottom border in Chrome 57- + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ +abbr[title] { + border-bottom: none; + /* 1 */ + text-decoration: underline; + /* 2 */ + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; + /* 2 */ +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ +b, +strong { + font-weight: bolder; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ +code, +kbd, +samp { + font-family: monospace, monospace; + /* 1 */ + font-size: 1em; + /* 2 */ +} + +/** + * Add the correct font size in all browsers. + */ +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* Embedded content + ========================================================================== */ +/** + * Remove the border on images inside links in IE 10. + */ +img { + border-style: none; +} + +/* Forms + ========================================================================== */ +/** + * 1. Change the font styles in all browsers. + * 2. Remove the margin in Firefox and Safari. + */ +button, +input, +optgroup, +select, +textarea { + font-family: inherit; + /* 1 */ + font-size: 100%; + /* 1 */ + line-height: 1.15; + /* 1 */ + margin: 0; + /* 2 */ +} + +/** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ +button, +input { + /* 1 */ + overflow: visible; +} + +/** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ +button, +select { + /* 1 */ + text-transform: none; +} + +/** + * Correct the inability to style clickable types in iOS and Safari. + */ +button, +[type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} + +/** + * Remove the inner border and padding in Firefox. + */ +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +/** + * Restore the focus styles unset by the previous rule. + */ +button:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +/** + * Correct the padding in Firefox. + */ +fieldset { + padding: 0.35em 0.75em 0.625em; +} + +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ +legend { + box-sizing: border-box; + /* 1 */ + color: inherit; + /* 2 */ + display: table; + /* 1 */ + max-width: 100%; + /* 1 */ + padding: 0; + /* 3 */ + white-space: normal; + /* 1 */ +} + +/** + * Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ +progress { + vertical-align: baseline; +} + +/** + * Remove the default vertical scrollbar in IE 10+. + */ +textarea { + overflow: auto; +} + +/** + * 1. Add the correct box sizing in IE 10. + * 2. Remove the padding in IE 10. + */ +[type="checkbox"], +[type="radio"] { + box-sizing: border-box; + /* 1 */ + padding: 0; + /* 2 */ +} + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ +[type="search"] { + -webkit-appearance: textfield; + /* 1 */ + outline-offset: -2px; + /* 2 */ +} + +/** + * Remove the inner padding in Chrome and Safari on macOS. + */ +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ +::-webkit-file-upload-button { + -webkit-appearance: button; + /* 1 */ + font: inherit; + /* 2 */ +} + +/* Interactive + ========================================================================== */ +/* + * Add the correct display in Edge, IE 10+, and Firefox. + */ +details { + display: block; +} + +/* + * Add the correct display in all browsers. + */ +summary { + display: list-item; +} + +/* Misc + ========================================================================== */ +/** + * Add the correct display in IE 10+. + */ +template { + display: none; +} + +/** + * Add the correct display in IE 10. + */ +[hidden] { + display: none; +} + +/* Typography */ +html { + font-size: 22px; +} + +body { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + color: #111; + font-family: "Hoefler Text", "Baskerville Old Face", Garamond, "Times New Roman", serif; + font-weight: 400; + font-size: 1em; + line-height: 1.8; + margin: 0; + text-rendering: optimizeLegibility; +} + +button, +input, +select, +optgroup, +textarea { + color: #111; + font-family: "Hoefler Text", "Baskerville Old Face", Garamond, "Times New Roman", serif; + font-weight: 400; + line-height: 1.8; + text-rendering: optimizeLegibility; +} + +.main-navigation, +.page-description, +h2.author-title, +.not-found .page-title, +.error-404 .page-title, +.post-navigation .post-title, +.pagination .nav-links, +.comments-title, +.comment-author .fn, +.no-comments, +.site-title, +h1, h2, h3, h4, h5, h6 { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-weight: 700; + letter-spacing: -0.02em; + line-height: 1.2; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.site-info, +.page-description, +.post-navigation .post-title, +.comment-metadata, +.discussion-meta-info, +.entry-meta, +.entry-footer, +.comment-reply-link, +#cancel-comment-reply-link, +img:after, +.page-links, +.sticky-post { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; +} + +.page-title { + font-family: "Hoefler Text", "Baskerville Old Face", Garamond, "Times New Roman", serif; +} + +.site-branding, +.main-navigation ul.main-menu > li, +.social-navigation, +.author-description p.author-bio, +.nav-links { + line-height: 1.25; +} + +h1 { + font-size: 2.25em; +} + +@media only screen and (min-width: 768px) { + h1 { + font-size: 2.8125em; + } +} + +.entry-title, +.not-found .page-title, +.error-404 .page-title, +.has-larger-font-size, +h2 { + font-size: 1.6875em; +} + +@media only screen and (min-width: 768px) { + .entry-title, + .not-found .page-title, + .error-404 .page-title, + .has-larger-font-size, + h2 { + font-size: 2.25em; + } +} + +.has-regular-font-size, +.has-large-font-size, +.comments-title, +h3 { + font-size: 1.6875em; +} + +.site-title, +.site-description, +.main-navigation, +.nav-links, +.page-title, +.page-description, +.comment-author .fn, +.no-comments, +h2.author-title, +p.author-bio, +h4 { + font-size: 1.125em; +} + +.pagination .nav-links, +.comment-content, +h5 { + font-size: 0.88889em; +} + +.entry-meta, +.entry-footer, +.discussion-meta-info, +.site-info, +.has-small-font-size, +.comment-reply-link, +.comment-metadata, +.comment-notes, +.sticky-post, +#cancel-comment-reply-link, +img:after, +h6 { + font-size: 0.71111em; +} + +.site-title, +.page-title { + font-weight: normal; +} + +.page-description, +.page-links a { + font-weight: bold; +} + +.site-description { + letter-spacing: -0.01em; +} + +.post-navigation .post-title, +.entry-title, +.not-found .page-title, +.error-404 .page-title, +.comments-title, +blockquote { + -webkit-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto; + word-break: break-word; +} + +/* Do not hyphenate entry title on tablet view and bigger. */ +@media only screen and (min-width: 768px) { + .entry-title { + -webkit-hyphens: none; + -ms-hyphens: none; + hyphens: none; + } +} + +p { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +dfn, cite, em, i { + font-style: italic; +} + +blockquote > p { + font-size: 1.6875em; + font-style: italic; + line-height: 1.2; +} + +blockquote cite { + font-size: 0.88889em; + font-style: normal; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; +} + +pre { + font-size: 0.88889em; + font-family: "Courier 10 Pitch", Courier, monospace; + line-height: 1.8; + overflow: auto; +} + +code, kbd, tt, var { + font-size: 0.88889em; + font-family: Menlo, monaco, Consolas, Lucida Console, monospace; +} + +abbr, acronym { + border-bottom: 1px dotted #666; + cursor: help; +} + +mark, ins { + background: #fff9c0; + text-decoration: none; +} + +big { + font-size: 125%; +} + +a { + text-decoration: none; +} + +a:hover { + text-decoration: none; +} + +a:focus { + text-decoration: underline; +} + +/* Elements */ +html { + box-sizing: border-box; +} + +::-moz-selection { + background: #bfdcea; +} + +::selection { + background: #bfdcea; +} + +*, +*:before, +*:after { + box-sizing: inherit; +} + +body { + background: #fff; +} + +a { + transition: color 110ms ease-in-out; + color: #0073aa; +} + +a:hover, +a:active { + color: #005177; + outline: 0; + text-decoration: none; +} + +a:focus { + outline: 0; + text-decoration: underline; +} + +h1, h2, h3, h4, h5, h6 { + clear: both; + margin: 1rem 0; +} + +h1:not(.site-title):before, h2:before { + background: #767676; + content: "\020"; + display: block; + height: 2px; + margin: 1rem 0; + width: 1em; +} + +hr { + background-color: #767676; + border: 0; + height: 2px; +} + +ul, +ol { + padding-left: 1rem; +} + +ul { + list-style: disc; +} + +ul ul { + list-style-type: circle; +} + +ol { + list-style: decimal; +} + +li { + line-height: 1.8; +} + +li > ul, +li > ol { + padding-left: 2rem; +} + +dt { + font-weight: bold; +} + +dd { + margin: 0 1rem 1rem; +} + +img { + height: auto; + max-width: 100%; + position: relative; +} + +img:before { + background-color: #eee; + border: 1px dashed #ccc; + border-radius: 3px; + content: " "; + display: block; + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} + +img:after { + color: #666; + content: "This image is broken :-/ ( " attr(alt) " )"; + display: block; + left: 50%; + position: absolute; + text-align: center; + top: 50%; + transform: translate(-50%, -50%); + width: 100%; +} + +figure { + margin: 0; +} + +blockquote { + border-left: 2px solid #0073aa; + margin-left: -2rem; + padding: 1rem 0 0.5rem 2rem; +} + +blockquote > p { + margin: 0 0 1rem; +} + +blockquote cite { + color: #767676; +} + +table { + margin: 0 0 1rem; + width: 100%; +} + +table td, table th { + border-color: #767676; +} + +/* Forms */ +.button, +button, +input[type="button"], +input[type="reset"], +input[type="submit"] { + transition: background 150ms ease-in-out; + background: #0073aa; + border: none; + border-radius: 5px; + box-sizing: border-box; + color: white; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-size: 0.88889em; + font-weight: 600; + line-height: 1.2; + outline: none; + padding: 0.66rem 1rem; +} + +.button:hover, +button:hover, +input[type="button"]:hover, +input[type="reset"]:hover, +input[type="submit"]:hover { + cursor: pointer; +} + +.button:hover, .button:focus, +button:hover, +button:focus, +input[type="button"]:hover, +input[type="button"]:focus, +input[type="reset"]:hover, +input[type="reset"]:focus, +input[type="submit"]:hover, +input[type="submit"]:focus { + background: #111; +} + +.button:focus, +button:focus, +input[type="button"]:focus, +input[type="reset"]:focus, +input[type="submit"]:focus { + outline: thin dotted; + outline-offset: -4px; +} + +input[type="text"], +input[type="email"], +input[type="url"], +input[type="password"], +input[type="search"], +input[type="number"], +input[type="tel"], +input[type="range"], +input[type="date"], +input[type="month"], +input[type="week"], +input[type="time"], +input[type="datetime"], +input[type="datetime-local"], +input[type="color"], +textarea { + -webkit-backface-visibility: hidden; + background: #fff; + border: solid 1px #ccc; + box-sizing: border-box; + outline: none; + padding: 0.5rem 0.66rem; +} + +input[type="text"]:focus, +input[type="email"]:focus, +input[type="url"]:focus, +input[type="password"]:focus, +input[type="search"]:focus, +input[type="number"]:focus, +input[type="tel"]:focus, +input[type="range"]:focus, +input[type="date"]:focus, +input[type="month"]:focus, +input[type="week"]:focus, +input[type="time"]:focus, +input[type="datetime"]:focus, +input[type="datetime-local"]:focus, +input[type="color"]:focus, +textarea:focus { + border-color: #0073aa; + outline: thin solid rgba(0, 115, 170, 0.15); + outline-offset: -4px; +} + +textarea { + box-sizing: border-box; + display: block; + width: 100%; + max-width: 100%; + resize: vertical; +} + +form p { + margin: 1rem 0; +} + +/* Navigation */ +/*-------------------------------------------------------------- +## Links +--------------------------------------------------------------*/ +a { + transition: color 110ms ease-in-out; + color: #0073aa; +} + +a:visited { + color: #0073aa; +} + +a:hover, a:active { + color: #005177; + outline: 0; + text-decoration: none; +} + +a:focus { + outline: 0; + text-decoration: underline; +} + +/*-------------------------------------------------------------- +## Menus +--------------------------------------------------------------*/ +/** === Main menu === */ +.main-navigation { + display: inline; + /* + * :focus-within needs its own selector so other similar + * selectors don’t get ignored if a browser doesn’t recognize it + */ +} + +@media only screen and (min-width: 768px) { + .main-navigation { + display: block; + } +} + +body.page .main-navigation { + display: block; +} + +.main-navigation > div { + display: inline; +} + +.main-navigation .main-menu { + display: inline; + margin: 0; + padding: 0; +} + +.main-navigation .main-menu > li { + display: inline; +} + +.main-navigation .main-menu > li > a { + font-weight: 700; + color: #0073aa; +} + +.main-navigation .main-menu > li > a + svg { + color: #0073aa; + margin-right: -0.25rem; +} + +.main-navigation .main-menu > li > a:hover { + color: #005177; +} + +.main-navigation .main-menu > li > a:hover + svg { + color: #005177; +} + +.main-navigation .main-menu > li > a:after { + content: ","; + display: inline; + color: #767676; +} + +.main-navigation .main-menu > li.menu-item-has-children:after { + content: ","; + display: inline; + color: #767676; +} + +.main-navigation .main-menu > li.menu-item-has-children > a:after, +.main-navigation .main-menu > li.menu-item-has-children .menu-item-has-children > a:after { + content: ""; + display: none; +} + +.main-navigation .main-menu > li:last-child > a:after { + content: "."; +} + +.main-navigation .main-menu > li:last-child > a { + margin-right: 0; +} + +.main-navigation .sub-menu { + background: #0073aa; + color: #fff; + list-style: none; + padding-left: 0; + display: none; + float: left; + width: 100%; + position: absolute; + opacity: 0; + left: -999em; + z-index: 99999; + transition: opacity 0.5s ease-in-out; +} + +@media only screen and (min-width: 768px) { + .main-navigation .sub-menu { + max-width: calc(3 * (100vw / 12)); + } +} + +.main-navigation .sub-menu > li { + clear: both; + display: block; + float: none; + position: relative; + word-break: break-word; +} + +.main-navigation .sub-menu > li.menu-item-has-children svg { + position: absolute; + right: 0.5rem; + top: 0.65rem; +} + +@media only screen and (min-width: 768px) { + .main-navigation .sub-menu > li.menu-item-has-children .menu-item-has-children > a:after { + content: "\203a"; + } +} + +.main-navigation .sub-menu > li > a { + color: #fff; + display: block; + line-height: 1.2; + padding: calc( .5 * 1rem) 1rem; +} + +.main-navigation .sub-menu > li > a:hover, .main-navigation .sub-menu > li > a:focus { + background: #005177; +} + +.main-navigation .sub-menu > li > a:hover:after, .main-navigation .sub-menu > li > a:focus:after { + background: #005177; +} + +.main-navigation .main-menu .menu-item-has-children:hover > .sub-menu, +.main-navigation .main-menu .menu-item-has-children .sub-menu:hover { + display: block; + left: inherit; + margin-top: -2px; + opacity: 1; +} + +.main-navigation .main-menu .menu-item-has-children:hover > .sub-menu .sub-menu, +.main-navigation .main-menu .menu-item-has-children .sub-menu:hover .sub-menu { + margin-top: inherit; + position: relative; + padding-left: 1rem; +} + +@media only screen and (min-width: 768px) { + .main-navigation .main-menu .menu-item-has-children:hover > .sub-menu .sub-menu, + .main-navigation .main-menu .menu-item-has-children .sub-menu:hover .sub-menu { + padding-left: 0; + position: absolute; + left: 100%; + top: 0; + } +} + +.main-navigation .main-menu .menu-item-has-children:focus-within > .sub-menu { + display: block; + left: inherit; + margin-top: -2px; + opacity: 1; +} + +.main-navigation .main-menu .menu-item-has-children:focus-within > .sub-menu .sub-menu { + margin-top: inherit; + position: relative; + padding-left: 1rem; +} + +@media only screen and (min-width: 768px) { + .main-navigation .main-menu .menu-item-has-children:focus-within > .sub-menu .sub-menu { + padding-left: 0; + position: absolute; + left: 100%; + top: 0; + } +} + +/* Social menu */ +.social-navigation { + margin-top: calc(1rem / 2); + text-align: left; +} + +.social-navigation ul.social-links-menu { + content: ""; + display: table; + table-layout: fixed; + display: inline-block; + margin: 0; + padding: 0; +} + +.social-navigation ul.social-links-menu li { + display: inline-block; + vertical-align: bottom; + vertical-align: -webkit-baseline-middle; + list-style: none; +} + +.social-navigation ul.social-links-menu li:nth-child(n+2) { + margin-left: 0.1em; +} + +.social-navigation ul.social-links-menu li a { + border-bottom: 1px solid transparent; + display: block; + color: #111; + margin-bottom: -1px; + transition: opacity 110ms ease-in-out; +} + +.social-navigation ul.social-links-menu li a:hover, .social-navigation ul.social-links-menu li a:active { + color: #111; + opacity: 0.6; +} + +.social-navigation ul.social-links-menu li a:focus { + color: #111; + opacity: 1; + border-bottom: 1px solid #111; +} + +.social-navigation ul.social-links-menu li a svg { + display: block; + width: 32px; + height: 32px; +} + +.social-navigation ul.social-links-menu li a svg#ui-icon-link { + transform: rotate(-45deg); +} + +/*-------------------------------------------------------------- +## Next / Previous +--------------------------------------------------------------*/ +/* Next/Previous navigation */ +.post-navigation { + margin: calc(3 * 1rem) 0; +} + +.post-navigation .nav-links { + margin: 0 1rem; + max-width: 100%; + display: flex; + flex-direction: column; +} + +@media only screen and (min-width: 1168px) { + .post-navigation .nav-links { + flex-direction: row; + margin: 0 calc(2 * (100vw / 12)); + max-width: calc(8 * (100vw / 12)); + } +} + +.post-navigation .nav-links a .meta-nav { + color: #767676; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.post-navigation .nav-links a .meta-nav:before, .post-navigation .nav-links a .meta-nav:after { + display: none; + content: "—"; + width: 2em; + color: #767676; + height: 1em; +} + +.post-navigation .nav-links a .post-title { + -webkit-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto; +} + +.post-navigation .nav-links a:hover { + color: #005177; +} + +@media only screen and (min-width: 1168px) { + .post-navigation .nav-links .nav-previous, + .post-navigation .nav-links .nav-next { + min-width: calc(50% - 2 * 1rem); + } +} + +.post-navigation .nav-links .nav-previous { + order: 2; +} + +@media only screen and (min-width: 1168px) { + .post-navigation .nav-links .nav-previous { + order: 1; + } +} + +.post-navigation .nav-links .nav-previous + .nav-next { + margin-bottom: 1rem; +} + +.post-navigation .nav-links .nav-previous .meta-nav:before { + display: inline; +} + +.post-navigation .nav-links .nav-next { + order: 1; +} + +@media only screen and (min-width: 1168px) { + .post-navigation .nav-links .nav-next { + order: 2; + } +} + +.post-navigation .nav-links .nav-next .meta-nav:after { + display: inline; +} + +.pagination .nav-links { + display: flex; + flex-wrap: wrap; + padding: 0 calc(.5 * 1rem); +} + +.pagination .nav-links > * { + padding: calc(.5 * 1rem); +} + +.pagination .nav-links > *.dots, .pagination .nav-links > *.prev { + padding-left: 0; +} + +.pagination .nav-links > *.dots, .pagination .nav-links > *.next { + padding-right: 0; +} + +.pagination .nav-links .nav-next-text, +.pagination .nav-links .nav-prev-text { + display: none; +} + +@media only screen and (min-width: 768px) { + .pagination .nav-links { + margin-left: calc(2 * (100vw / 12)); + padding: 0; + } + .pagination .nav-links .prev > *, + .pagination .nav-links .next > * { + display: inline-block; + vertical-align: text-bottom; + } + .pagination .nav-links > * { + padding: 1rem; + } +} + +.comment-navigation .nav-links { + display: flex; + flex-direction: row; +} + +.comment-navigation .nav-previous, +.comment-navigation .nav-next { + min-width: 50%; + width: 100%; +} + +.comment-navigation .nav-previous .secondary-text, +.comment-navigation .nav-next .secondary-text { + display: none; +} + +@media only screen and (min-width: 768px) { + .comment-navigation .nav-previous .secondary-text, + .comment-navigation .nav-next .secondary-text { + display: inline; + } +} + +.comment-navigation .nav-previous svg, +.comment-navigation .nav-next svg { + vertical-align: middle; + position: relative; + margin: 0 -0.35em; + top: -1px; +} + +.comment-navigation .nav-previous a:hover, +.comment-navigation .nav-next a:hover { + color: #0073aa; +} + +.comment-navigation .nav-next { + text-align: right; +} + +/* Accessibility */ +/* Text meant only for screen readers. */ +.screen-reader-text { + border: 0; + clip: rect(1px, 1px, 1px, 1px); + -webkit-clip-path: inset(50%); + clip-path: inset(50%); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute !important; + width: 1px; + word-wrap: normal !important; + /* Many screen reader and browser combinations announce broken words as they would appear visually. */ +} + +.screen-reader-text:focus { + background-color: #f1f1f1; + border-radius: 3px; + box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.6); + clip: auto !important; + -webkit-clip-path: none; + clip-path: none; + color: #21759b; + display: block; + font-size: 14px; + font-size: 0.875rem; + font-weight: bold; + height: auto; + left: 5px; + line-height: normal; + padding: 15px 23px 14px; + text-decoration: none; + top: 5px; + width: auto; + z-index: 100000; + /* Above WP toolbar. */ +} + +/* Do not show the outline on the skip link target. */ +#content[tabindex="-1"]:focus { + outline: 0; +} + +/* Alignments */ +.alignleft { + float: left; + margin-right: 1rem; +} + +.alignright { + float: right; + margin-left: 1rem; +} + +.aligncenter { + clear: both; + display: block; + margin-left: auto; + margin-right: auto; +} + +/* Clearings */ +.clear:before, +.clear:after, +.entry-content:before, +.entry-content:after, +.comment-content:before, +.comment-content:after, +.site-header:before, +.site-header:after, +.site-content:before, +.site-content:after, +.site-footer:before, +.site-footer:after { + content: ""; + display: table; + table-layout: fixed; +} + +.clear:after, +.entry-content:after, +.comment-content:after, +.site-header:after, +.site-content:after, +.site-footer:after { + clear: both; +} + +/* Layout */ +/** === Layout === */ +#page { + width: 100%; +} + +.site-content { + overflow: hidden; +} + +/* Content */ +/*-------------------------------------------------------------- +## Header +--------------------------------------------------------------*/ +.site-header { + padding: 1em; +} + +@media only screen and (min-width: 768px) { + .site-header { + margin: 0; + padding: 3rem 0; + } + .site-header.featured-image { + display: flex; + min-height: 100vh; + flex-direction: column; + justify-content: space-between; + margin-bottom: 3rem; + } + .site-header.featured-image .site-branding-container { + margin-bottom: auto; + } +} + +.site-branding { + color: #767676; + position: relative; +} + +@media only screen and (min-width: 768px) { + .site-branding { + margin: 0 calc(2 * (100vw / 12)); + max-width: 22em; + } +} + +.site-logo { + position: relative; + z-index: 999; + margin-bottom: calc(.66 * 1rem); +} + +@media only screen and (min-width: 768px) { + .site-logo { + margin-bottom: 0; + position: absolute; + right: calc(100% + (0.5 * calc(100vw / 12))); + top: 4px; + z-index: 999; + } +} + +.site-logo .custom-logo-link { + border-radius: 100%; + box-sizing: content-box; + box-shadow: 0 0 0 0 rgba(0, 0, 0, 0); + display: block; + width: 32px; + height: 32px; + overflow: hidden; + transition: box-shadow 200ms ease-in-out; +} + +.site-logo .custom-logo-link .custom-logo { + min-height: inherit; +} + +.site-logo .custom-logo-link:hover, .site-logo .custom-logo-link:active, .site-logo .custom-logo-link:focus { + box-shadow: 0 0 0 2px black; +} + +@media only screen and (min-width: 768px) { + .site-logo .custom-logo-link { + width: 64px; + height: 64px; + } +} + +.site-title { + margin: auto; + display: inline; + color: #111; + /* When there is no description set, make sure navigation appears below title. */ +} + +.featured-image .site-title { + margin: 0; +} + +@media only screen and (min-width: 768px) { + .featured-image .site-title { + display: inline-block; + } +} + +.site-title + .main-navigation { + display: block; +} + +.site-title a { + color: inherit; +} + +.site-title a:hover { + color: #4a4a4a; +} + +@media only screen and (min-width: 768px) { + .site-title { + display: inline; + } +} + +.site-description { + display: inline; + color: #767676; + font-weight: normal; + margin: 0; +} + +.site-description:not(:empty):before { + content: "\2014"; + margin: 0 .2em; +} + +.site-header.featured-image { + /* Need relative positioning to properly align layers. */ + position: relative; + /* Add text shadow to text, to increase readability. */ + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.35); + /* Set white text color when featured image is set. */ + /* Post header styles */ + /* Custom Logo Link */ + /* Make sure important elements are above pseudo elements used for effects. */ + /* Set up image filter layer positioning */ + /* Background & Effects */ + /* Shared background settings between pseudo elements. See .site-branding-container */ + background-position: center; + background-repeat: no-repeat; + background-size: cover; + /* The intensity of each blend mode is controlled via layer opacity. */ + /* First layer: grayscale. */ + /* Second layer: screen. */ + /* Third layer: multiply. */ + /* Fourth layer: overlay. */ + /* Fifth layer: readability overlay */ +} + +.site-header.featured-image .site-branding .site-title, +.site-header.featured-image .site-branding .site-description, +.site-header.featured-image .main-navigation a:after, +.site-header.featured-image .main-navigation .main-menu > li.menu-item-has-children:after, +.site-header.featured-image .main-navigation li, +.site-header.featured-image .social-navigation li, +.site-header.featured-image .entry-meta, +.site-header.featured-image .entry-title { + color: white; +} + +.site-header.featured-image .main-navigation a, +.site-header.featured-image .social-navigation a, +.site-header.featured-image .site-title a, +.site-header.featured-image .hentry a { + color: white; + transition: opacity 110ms ease-in-out; +} + +.site-header.featured-image .main-navigation a:hover, .site-header.featured-image .main-navigation a:active, +.site-header.featured-image .social-navigation a:hover, +.site-header.featured-image .social-navigation a:active, +.site-header.featured-image .site-title a:hover, +.site-header.featured-image .site-title a:active, +.site-header.featured-image .hentry a:hover, +.site-header.featured-image .hentry a:active { + color: white; + opacity: 0.6; +} + +.site-header.featured-image .main-navigation a:focus, +.site-header.featured-image .social-navigation a:focus, +.site-header.featured-image .site-title a:focus, +.site-header.featured-image .hentry a:focus { + color: white; +} + +.site-header.featured-image .social-navigation a:focus { + color: white; + opacity: 1; + border-bottom: 1px solid white; +} + +.site-header.featured-image .social-navigation svg, +.site-header.featured-image .hentry svg { + /* Use -webkit- only if supporting: Chrome < 54, iOS < 9.3, Android < 4.4.4 */ + filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.35)); +} + +.site-header.featured-image .hentry .entry-header { + margin-left: 0; + margin-right: 0; +} + +@media only screen and (min-width: 768px) { + .site-header.featured-image .hentry .entry-header { + margin-left: calc(2 * (100vw / 12)); + margin-right: calc(2 * (100vw / 12)); + } +} + +.site-header.featured-image .hentry .entry-header .entry-title:before { + background: white; +} + +.site-header.featured-image .custom-logo-link { + background: white; + box-shadow: 0 0 0 0 rgba(255, 255, 255, 0); +} + +.site-header.featured-image .custom-logo-link:hover, .site-header.featured-image .custom-logo-link:active, .site-header.featured-image .custom-logo-link:focus { + box-shadow: 0 0 0 2px white; +} + +.site-header.featured-image .site-branding, +.site-header.featured-image .hentry .entry-header { + z-index: 10; +} + +.site-header.featured-image .site-branding-container:before, +.site-header.featured-image .site-branding-container:after, +.site-header.featured-image .hentry:before, +.site-header.featured-image .hentry:after, .site-header.featured-image:after { + display: block; + position: absolute; + top: 0; + left: 0; + content: "\020"; + width: 100%; + height: 100%; +} + +.site-header.featured-image .site-branding-container:before { + background-position: center; + background-repeat: no-repeat; + background-size: cover; + filter: grayscale(100%); + z-index: 1; +} + +.site-header.featured-image .hentry:before { + background: #0073aa; + mix-blend-mode: screen; + opacity: 0.1; + z-index: 2; +} + +.site-header.featured-image .hentry:after { + background: #0073aa; + mix-blend-mode: multiply; + opacity: 1; + z-index: 3; +} + +.site-header.featured-image .site-branding-container:after { + background: rgba(255, 255, 255, 0.35); + mix-blend-mode: overlay; + opacity: 0.5; + z-index: 4; +} + +.site-header.featured-image:after { + background: #000e14; + /** + * Add a transition to the readability overlay, to add a subtle + * but smooth effect when resizing the screen. + */ + transition: opacity 1200ms ease-in-out; + z-index: 5; + opacity: 0.38; +} + +@media only screen and (min-width: 768px) { + .site-header.featured-image:after { + opacity: 0.18; + } +} + +@media only screen and (min-width: 1168px) { + .site-header.featured-image:after { + opacity: 0.1; + } +} + +.site-header.featured-image ::-moz-selection { + background: rgba(255, 255, 255, 0.17); +} + +.site-header.featured-image ::selection { + background: rgba(255, 255, 255, 0.17); +} + +/*-------------------------------------------------------------- +## Posts and pages +--------------------------------------------------------------*/ +.sticky { + display: block; +} + +.sticky-post { + background: #0073aa; + color: #fff; + display: inline-block; + font-weight: bold; + line-height: 1; + padding: .25rem; + position: absolute; + text-transform: uppercase; + top: -1rem; + z-index: 1; +} + +.updated:not(.published) { + display: none; +} + +.page-links { + clear: both; + margin: 0 0 calc(1.5 * 1rem); +} + +.hentry { + margin-top: calc(6 * 1rem); +} + +.hentry:first-of-type { + margin-top: 0; +} + +.hentry .entry-header { + margin: calc(3 * 1rem) 1rem 1rem; + position: relative; +} + +@media only screen and (min-width: 768px) { + .hentry .entry-header { + margin: calc(3 * 1rem) calc(2 * (100vw / 12 )) 1rem; + } + .featured-image .hentry .entry-header { + margin-bottom: 0; + } +} + +.hentry .entry-title { + margin: 0; +} + +.hentry .entry-title:before { + background: #767676; + content: "\020"; + display: block; + height: 2px; + margin: 1rem 0; + width: 1em; +} + +.hentry .entry-title a { + color: inherit; +} + +.hentry .entry-title a:hover { + color: #4a4a4a; +} + +.hentry .entry-meta, +.hentry .entry-footer { + color: #767676; + font-weight: 500; +} + +.hentry .entry-meta > span, +.hentry .entry-footer > span { + margin-right: 1rem; +} + +.hentry .entry-meta > span:last-child, +.hentry .entry-footer > span:last-child { + margin-right: 0; +} + +.hentry .entry-meta a, +.hentry .entry-footer a { + transition: color 110ms ease-in-out; + color: currentColor; +} + +.hentry .entry-meta a:hover, +.hentry .entry-footer a:hover { + text-decoration: none; + color: #0073aa; +} + +.hentry .entry-meta .svg-icon, +.hentry .entry-footer .svg-icon { + position: relative; + display: inline-block; + vertical-align: middle; + margin-right: 0.5em; +} + +.hentry .entry-meta { + margin: 1rem 0; +} + +@media only screen and (min-width: 1168px) { + .hentry .entry-meta.has-discussion .comment-count { + float: right; + position: relative; + } +} + +.hentry .entry-meta.has-discussion .comment-count .discussion-avatar-list { + display: none; +} + +@media only screen and (min-width: 1168px) { + .hentry .entry-meta.has-discussion .comment-count .discussion-avatar-list { + bottom: 100%; + display: block; + position: absolute; + } +} + +.hentry .entry-footer { + margin: calc(2 * 1rem) 1rem 1rem; +} + +@media only screen and (min-width: 768px) { + .hentry .entry-footer { + margin: calc(3 * 1rem) calc(2 * (100vw / 12)); + max-width: calc(8 * (100vw / 12)); + } +} + +@media only screen and (min-width: 768px) { + .hentry .entry-footer { + max-width: calc(6 * (100vw / 12)); + } +} + +.hentry .post-thumbnail { + margin: 1rem; +} + +@media only screen and (min-width: 768px) { + .hentry .post-thumbnail { + margin: 1rem calc(2 * (100vw / 12)); + } +} + +.hentry .post-thumbnail:focus { + outline: none; +} + +.hentry .post-thumbnail .post-thumbnail-inner { + display: block; +} + +.hentry .post-thumbnail .post-thumbnail-inner img { + position: relative; + display: block; + width: 100%; +} + +.image-filters-enabled .hentry .post-thumbnail { + position: relative; + display: block; +} + +.image-filters-enabled .hentry .post-thumbnail .post-thumbnail-inner { + position: relative; + filter: grayscale(100%); + z-index: 1; +} + +.image-filters-enabled .hentry .post-thumbnail .post-thumbnail-inner:after { + display: block; + width: 100%; + height: 100%; + z-index: 10; +} + +.image-filters-enabled .hentry .post-thumbnail:before, .image-filters-enabled .hentry .post-thumbnail:after { + position: absolute; + display: block; + width: 100%; + height: 100%; + top: 0; + left: 0; + content: "\020"; + display: block; + pointer-events: none; +} + +.image-filters-enabled .hentry .post-thumbnail:before { + background: #0073aa; + mix-blend-mode: screen; + opacity: 0.1; + z-index: 2; +} + +.image-filters-enabled .hentry .post-thumbnail:after { + background: #0073aa; + mix-blend-mode: multiply; + opacity: 1; + z-index: 3; +} + +.hentry .entry-content .more-link { + transition: color 110ms ease-in-out; + display: inline; + color: inherit; +} + +.hentry .entry-content .more-link:after { + content: "»"; + margin-left: 0.5em; +} + +.hentry .entry-content .more-link:hover { + color: #0073aa; + text-decoration: none; +} + +.hentry .entry-content a { + text-decoration: underline; +} + +.hentry .entry-content a:hover { + text-decoration: none; +} + +.hentry .entry-content > iframe[style] { + margin: 32px 1rem !important; + max-width: calc(100vw - (2 * 1rem)) !important; +} + +@media only screen and (min-width: 768px) { + .hentry .entry-content > iframe[style] { + margin: 32px calc(2 * (100vw / 12)) !important; + max-width: calc(8 * (100vw / 12)) !important; + } +} + +@media only screen and (min-width: 1168px) { + .hentry .entry-content > iframe[style] { + max-width: calc(6 * (100vw / 12)) !important; + } +} + +.hentry .entry-content .wp-audio-shortcode { + max-width: calc(100vw - (2 * 1rem)); +} + +@media only screen and (min-width: 768px) { + .hentry .entry-content .wp-audio-shortcode { + max-width: calc(8 * (100vw / 12)); + } +} + +@media only screen and (min-width: 1168px) { + .hentry .entry-content .wp-audio-shortcode { + max-width: calc(6 * (100vw / 12)); + } +} + +/*-------------------------------------------------------------- +## Comments +--------------------------------------------------------------*/ +.comment-content a { + word-wrap: break-word; +} + +.bypostauthor { + display: block; +} + +.comments-area { + /* Add extra margin when the comments section is located immediately after the + * post itself (this happens on pages). + */ +} + +.hentry + .comments-area { + margin-top: calc(3 * 1rem); +} + +.comments-area .comments-title-wrap, +.comments-area .comment-list, +.comments-area > .comment-respond, +.comments-area .comment-form-flex, +.comments-area .no-comments { + margin: calc(2 * 1rem) 1rem; +} + +@media only screen and (min-width: 768px) { + .comments-area .comments-title-wrap, + .comments-area .comment-list, + .comments-area > .comment-respond, + .comments-area .comment-form-flex, + .comments-area .no-comments { + margin: calc(3 * 1rem) calc(2 * (100vw / 12)); + max-width: calc(6 * (100vw / 12)); + } +} + +.comments-area .comments-title-wrap { + align-items: baseline; + display: flex; + justify-content: space-between; +} + +.comments-area .comments-title-wrap .comments-title { + margin: 0; +} + +.comments-area .comments-title-wrap .comments-title:before { + background: #767676; + content: "\020"; + display: block; + height: 2px; + margin: 1rem 0; + width: 1em; +} + +#comment { + max-width: 100%; + box-sizing: border-box; +} + +#respond { + position: relative; +} + +#respond .comment-user-avatar { + display: none; +} + +#respond .comment .comment-form { + padding-left: 0; +} + +#respond > small { + display: block; + font-size: 22px; + position: absolute; + left: calc(1rem + 100%); + top: calc(-3.5 * 1rem); + width: calc(100vw / 12); +} + +#comments > .comments-title:last-child { + display: none; +} + +@media only screen and (min-width: 1168px) { + #comments > #respond .comment-user-avatar { + position: absolute; + display: block; + top: 0; + left: 0; + } + #comments > #respond .comment-user-avatar .avatar { + display: block; + } +} + +.comment-form-flex { + display: flex; + flex-direction: column; +} + +.comment-form-flex .comments-title { + display: none; + margin: 0; + order: 1; +} + +.comment-form-flex #respond { + order: 2; +} + +.comment-form-flex #respond + .comments-title { + display: block; +} + +.comment-list { + list-style: none; + padding: 0; +} + +.comment-list .children { + margin: 0; + padding: 0 0 0 1rem; +} + +.comment-list > .comment:first-child { + margin-top: 0; +} + +.comment-reply { + left: calc(1rem + 100%); + bottom: 0; + position: absolute; +} + +#respond + .comment-reply { + display: none; +} + +.comment-reply .comment-reply-link { + display: inline-block; +} + +.comment { + list-style: none; + position: relative; +} + +@media only screen and (min-width: 768px) { + .comment { + padding-left: calc(.5 * (1rem + calc(100vw / 12 ))); + } + .comment .children { + padding-left: 0; + } +} + +.comment:hover > .comment-body > .comment-meta > .comment-metadata > .edit-link-sep, +.comment:hover > .comment-body > .comment-meta > .comment-metadata > .edit-link { + opacity: 1; +} + +.comment .comment-body { + margin: calc(2 * 1rem) 0; +} + +.comment .comment-meta { + position: relative; +} + +@media only screen and (min-width: 768px) { + .comment .comment-author { + display: inline-block; + vertical-align: baseline; + } +} + +.comment .comment-author .avatar { + float: left; + margin-right: 1rem; + position: relative; +} + +@media only screen and (min-width: 768px) { + .comment .comment-author .avatar { + float: inherit; + margin-right: inherit; + position: absolute; + top: 0; + right: calc(100% + 1rem); + } +} + +.comment .comment-author .fn { + position: relative; + display: block; +} + +@media only screen and (min-width: 768px) { + .comment .comment-author .fn { + display: inline-block; + vertical-align: baseline; + } +} + +.comment .comment-author .fn a { + color: inherit; +} + +.comment .comment-author .fn a:hover { + color: #005177; +} + +.comment .comment-author .post-author-badge { + border-radius: 100%; + display: block; + height: 18px; + position: absolute; + background: #008fd3; + right: calc(100% + 0.25rem); + top: -3px; + width: 18px; +} + +.comment .comment-author .post-author-badge svg { + width: inherit; + height: inherit; + display: block; + fill: white; + transform: scale(0.875); +} + +@media only screen and (min-width: 768px) { + .comment .comment-metadata { + display: inline-block; + margin-left: 1rem; + position: relative; + vertical-align: baseline; + } +} + +.comment .comment-metadata > a, +.comment .comment-metadata .comment-edit-link { + display: inline-block; + font-weight: 500; + color: #767676; + vertical-align: baseline; +} + +.comment .comment-metadata > a time, +.comment .comment-metadata .comment-edit-link time { + vertical-align: baseline; +} + +.comment .comment-metadata > a:hover, +.comment .comment-metadata .comment-edit-link:hover { + color: #4a4a4a; + text-decoration: none; +} + +.comment .comment-metadata > * { + display: inline-block; +} + +.comment .comment-metadata .edit-link-sep { + color: #767676; + margin: 0 0.2em; + opacity: 0; + transition: opacity 200ms ease-in-out; + vertical-align: baseline; +} + +.comment .comment-metadata .edit-link { + color: #767676; + transition: opacity 200ms ease-in-out; + opacity: 0; +} + +.comment .comment-metadata .edit-link svg { + transform: scale(0.8); + vertical-align: baseline; + margin-right: 0.1em; +} + +.comment .comment-metadata .comment-edit-link { + position: relative; + padding-left: 1rem; + margin-left: -1rem; + z-index: 1; +} + +.comment .comment-metadata .comment-edit-link:hover { + color: #0073aa; +} + +.comment .comment-content { + margin: 1rem 0; +} + +.comment .comment-content > *:first-child { + margin-top: 0; +} + +.comment .comment-content > *:last-child { + margin-bottom: 0; +} + +.comment .comment-content a { + text-decoration: underline; +} + +.comment .comment-content a:hover { + text-decoration: none; +} + +.comment-reply-link, +#cancel-comment-reply-link { + font-weight: 500; +} + +.comment-reply-link:hover, +#cancel-comment-reply-link:hover { + color: #005177; +} + +.discussion-avatar-list { + content: ""; + display: table; + table-layout: fixed; + margin: 0; + padding: 0; +} + +.discussion-avatar-list li { + position: relative; + list-style: none; + margin: 0 -8px 0 0; + padding: 0; + float: left; +} + +.discussion-avatar-list .comment-user-avatar img { + height: calc(1.5 * 1rem); + width: calc(1.5 * 1rem); +} + +.discussion-meta .discussion-avatar-list { + display: inline-block; + margin-right: 8px; +} + +.discussion-meta .discussion-meta-info { + margin: 0; +} + +.discussion-meta .discussion-meta-info .svg-icon { + vertical-align: middle; + fill: currentColor; + transform: scale(0.6) scaleX(-1) translateY(-0.1em); + margin-left: -0.25rem; +} + +.comment-form .comment-notes, +.comment-form label { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-size: 0.71111em; + color: #767676; +} + +@media only screen and (min-width: 768px) { + .comment-form .comment-form-author, + .comment-form .comment-form-email { + width: calc(50% - 0.5rem); + float: left; + } +} + +@media only screen and (min-width: 768px) { + .comment-form .comment-form-email { + margin-left: 1rem; + } +} + +.comment-form input[name="author"], +.comment-form input[name="email"], +.comment-form input[name="url"] { + display: block; + width: 100%; +} + +/*-------------------------------------------------------------- +## Archives +--------------------------------------------------------------*/ +.archive .page-header, +.search .page-header, +.error404 .page-header { + margin: 1rem 1rem calc(3 * 1rem); +} + +@media only screen and (min-width: 768px) { + .archive .page-header, + .search .page-header, + .error404 .page-header { + margin: 0 calc(2 * (100vw / 12)) calc(3 * 1rem); + max-width: calc(8 * (100vw / 12)); + } +} + +.archive .page-header .page-title, +.search .page-header .page-title, +.error404 .page-header .page-title { + color: #767676; + display: inline; + letter-spacing: normal; +} + +.archive .page-header .page-title:before, +.search .page-header .page-title:before, +.error404 .page-header .page-title:before { + display: none; +} + +.archive .page-header .search-term, +.archive .page-header .page-description, +.search .page-header .search-term, +.search .page-header .page-description, +.error404 .page-header .search-term, +.error404 .page-header .page-description { + display: inherit; + clear: both; +} + +.archive .page-header .search-term:after, +.archive .page-header .page-description:after, +.search .page-header .search-term:after, +.search .page-header .page-description:after, +.error404 .page-header .search-term:after, +.error404 .page-header .page-description:after { + content: "."; + font-weight: bold; + color: #767676; +} + +@media only screen and (min-width: 768px) { + .hfeed .hentry .entry-header { + margin: calc(3 * 1rem) calc(2 * (100vw / 12)) calc(1rem / 2); + } +} + +/* 404 & Not found */ +.error-404.not-found .page-content, +.no-results.not-found .page-content { + margin: calc(3 * 1rem) 1rem; +} + +@media only screen and (min-width: 768px) { + .error-404.not-found .page-content, + .no-results.not-found .page-content { + margin: calc(3 * 1rem) calc(2 * (100vw / 12)) calc(1rem / 2); + } +} + +.error-404.not-found .search-submit, +.no-results.not-found .search-submit { + vertical-align: middle; + margin: 1rem 0; +} + +.error-404.not-found .search-field, +.no-results.not-found .search-field { + width: 100%; +} + +/*-------------------------------------------------------------- +## Footer +--------------------------------------------------------------*/ +/* Site footer */ +.site-footer { + color: #767676; +} + +.site-footer .site-info { + margin: calc(2 * 1rem) 1rem; +} + +@media only screen and (min-width: 768px) { + .site-footer .site-info { + margin: calc(3 * 1rem) calc(2 * (100vw / 12)); + max-width: calc(8 * (100vw / 12)); + } +} + +.site-footer .site-info .imprint { + margin-right: 1rem; +} + +.site-footer a { + color: inherit; +} + +.site-footer a:hover { + text-decoration: none; + color: #0073aa; +} + +/* Widgets */ +.widget { + margin: 0 0 1rem; + /* Make sure select elements fit in widgets. */ +} + +.widget select { + max-width: 100%; +} + +/* Blocks */ +/* !Block styles */ +.entry-content > *, +.entry-summary > * { + margin: 32px 1rem; + max-width: calc(100vw - (2 * 1rem)); + /* + // Set top margins for headings + & + h1:before, + & + h2:before, + & + h3, + & + h4, + & + h5, + & + h6 { + margin-top: calc(4 * 1rem); + } +*/ +} + +@media only screen and (min-width: 768px) { + .entry-content > *, + .entry-summary > * { + margin: 32px calc(2 * (100vw / 12)); + max-width: calc(8 * (100vw / 12)); + } +} + +@media only screen and (min-width: 1168px) { + .entry-content > *, + .entry-summary > * { + max-width: calc(6 * (100vw / 12)); + } +} + +.entry-content > * > *:first-child, +.entry-summary > * > *:first-child { + margin-top: 0; +} + +.entry-content > * > *:last-child, +.entry-summary > * > *:last-child { + margin-bottom: 0; +} + +.entry-content > *.alignwide, +.entry-summary > *.alignwide { + margin-left: auto; + margin-right: auto; +} + +@media only screen and (min-width: 768px) { + .entry-content > *.alignwide, + .entry-summary > *.alignwide { + margin-left: calc(1 * (100vw / 12)); + margin-right: calc(1 * (100vw / 12)); + max-width: calc(10 * (100vw / 12)); + } +} + +.entry-content > *.alignfull, +.entry-summary > *.alignfull { + margin-top: calc(2 * 1rem); + margin-right: 0; + margin-bottom: calc(2 * 1rem); + margin-left: 0; + max-width: 100%; +} + +.entry-content > *.alignleft, +.entry-summary > *.alignleft { + float: left; + max-width: calc(5 * (100vw / 12)); + margin-top: 0; +} + +@media only screen and (min-width: 768px) { + .entry-content > *.alignleft, + .entry-summary > *.alignleft { + max-width: calc(4 * (100vw / 12)); + margin-right: calc(2 * 1rem); + } +} + +@media only screen and (min-width: 1168px) { + .entry-content > *.alignleft, + .entry-summary > *.alignleft { + max-width: calc(3 * (100vw / 12)); + } +} + +.entry-content > *.alignright, +.entry-summary > *.alignright { + float: right; + max-width: calc(5 * (100vw / 12)); + margin-top: 0; + margin-left: 1rem; + margin-right: 1rem; +} + +@media only screen and (min-width: 768px) { + .entry-content > *.alignright, + .entry-summary > *.alignright { + max-width: calc(4 * (100vw / 12)); + margin-left: calc(2 * 1rem); + margin-right: calc(2 * (100vw / 12)); + } +} + +.entry-content .wp-block-audio { + width: 100%; +} + +.entry-content .wp-block-audio audio { + width: 100%; +} + +.entry-content .wp-block-audio.alignleft audio, +.entry-content .wp-block-audio.alignright audio { + max-width: 190px; +} + +@media only screen and (min-width: 768px) { + .entry-content .wp-block-audio.alignleft audio, + .entry-content .wp-block-audio.alignright audio { + max-width: 384px; + } +} + +@media only screen and (min-width: 1379px) { + .entry-content .wp-block-audio.alignleft audio, + .entry-content .wp-block-audio.alignright audio { + max-width: 385.44px; + } +} + +.entry-content .wp-block-video video { + width: 100%; +} + +.entry-content .wp-block-button .wp-block-button__link { + transition: background 150ms ease-in-out; + border: none; + background: #0073aa; + font-size: 0.88889em; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + line-height: 1.2; + box-sizing: border-box; + font-weight: bold; + padding: 0.66rem 1rem; + outline: none; + color: white; + outline: none; +} + +.entry-content .wp-block-button .wp-block-button__link:hover { + cursor: pointer; +} + +.entry-content .wp-block-button .wp-block-button__link:hover, .entry-content .wp-block-button .wp-block-button__link:focus { + background: #111; +} + +.entry-content .wp-block-button .wp-block-button__link:focus { + outline: thin dotted; + outline-offset: -4px; +} + +.entry-content .wp-block-button:not(.is-style-squared) .wp-block-button__link { + border-radius: 5px; +} + +.entry-content .wp-block-button.is-style-outline .wp-block-button__link, +.entry-content .wp-block-button.is-style-outline .wp-block-button__link:focus, +.entry-content .wp-block-button.is-style-outline .wp-block-button__link:active { + transition: all 150ms ease-in-out; + background: transparent; + border: 2px solid #0073aa; +} + +.entry-content .wp-block-button.is-style-outline .wp-block-button__link:not(.has-text-color), +.entry-content .wp-block-button.is-style-outline .wp-block-button__link:focus:not(.has-text-color), +.entry-content .wp-block-button.is-style-outline .wp-block-button__link:active:not(.has-text-color) { + color: #0073aa; +} + +.entry-content .wp-block-button.is-style-outline .wp-block-button__link:hover { + border-color: #111; + color: #111; +} + +.entry-content .wp-block-archives, +.entry-content .wp-block-categories, +.entry-content .wp-block-latest-posts { + padding: 0; + list-style: none; +} + +.entry-content .wp-block-archives li, +.entry-content .wp-block-categories li, +.entry-content .wp-block-latest-posts li { + color: #767676; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-size: calc(22px * 1.6875); + font-weight: bold; + line-height: 1.2; +} + +.entry-content .wp-block-archives li a:after, +.entry-content .wp-block-categories li a:after, +.entry-content .wp-block-latest-posts li a:after { + color: #767676; + content: ","; +} + +.entry-content .wp-block-archives li:last-child a:after, +.entry-content .wp-block-categories li:last-child a:after, +.entry-content .wp-block-latest-posts li:last-child a:after { + color: #767676; + content: "."; +} + +.entry-content .wp-block-latest-posts.is-grid li { + border-top: 2px solid #ccc; + padding-top: 1rem; + margin-bottom: 2rem; +} + +.entry-content .wp-block-latest-posts.is-grid li a:after { + content: ''; +} + +.entry-content .wp-block-latest-posts.is-grid li:last-child { + margin-bottom: auto; +} + +.entry-content .wp-block-latest-posts.is-grid li:last-child a:after { + content: ''; +} + +.entry-content .wp-block-preformatted { + font-size: 0.71111em; + line-height: 1.8; + padding: 1rem; +} + +.entry-content .wp-block-verse { + font-family: "Hoefler Text", "Baskerville Old Face", Garamond, "Times New Roman", serif; + font-size: 22px; + line-height: 1.8; +} + +.entry-content .has-drop-cap:not(:focus):first-letter { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-size: 3.375em; + line-height: 1; + font-weight: bold; + margin: 0 0.25em 0 0; +} + +.entry-content .wp-block-pullquote { + border: none; + padding: 1rem; +} + +.entry-content .wp-block-pullquote blockquote { + border: none; + padding-bottom: calc(2 * 1rem); + margin-right: 0; +} + +.entry-content .wp-block-pullquote p { + font-size: 1.6875em; + font-style: italic; + line-height: 1.3; + margin-bottom: 0.5em; + margin-top: 0.5em; + color: #111; +} + +.entry-content .wp-block-pullquote p em { + font-style: normal; +} + +@media only screen and (min-width: 768px) { + .entry-content .wp-block-pullquote p { + font-size: 2.25em; + } +} + +.entry-content .wp-block-pullquote cite { + display: inline-block; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-size: 0.71111em; + line-height: 1.6; + text-transform: none; + color: #767676; +} + +.entry-content .wp-block-pullquote.alignleft, .entry-content .wp-block-pullquote.alignright { + padding: 0; +} + +.entry-content .wp-block-pullquote.alignleft blockquote, .entry-content .wp-block-pullquote.alignright blockquote { + margin-left: 0; + padding: 0; + text-align: left; + max-width: 100%; +} + +.entry-content .wp-block-pullquote.is-style-solid-color p { + font-size: 1.6875em; + line-height: 1.3; + margin-bottom: 0.5em; + margin-top: 0.5em; +} + +@media only screen and (min-width: 768px) { + .entry-content .wp-block-pullquote.is-style-solid-color p { + font-size: 2.25em; + } +} + +.entry-content .wp-block-pullquote.is-style-solid-color blockquote { + margin: 0 auto; +} + +.entry-content .wp-block-pullquote.is-style-solid-color blockquote:not(.has-text-color) p, +.entry-content .wp-block-pullquote.is-style-solid-color cite { + color: white; +} + +.entry-content .wp-block-pullquote.is-style-solid-color:not(.has-background-color) { + background-color: #0073aa; +} + +.entry-content .wp-block-pullquote.is-style-solid-color.alignleft, .entry-content .wp-block-pullquote.is-style-solid-color.alignright { + padding: 1rem 1rem 0; +} + +.entry-content .wp-block-pullquote.is-style-solid-color.alignleft blockquote, .entry-content .wp-block-pullquote.is-style-solid-color.alignright blockquote { + padding: 0 0 calc( 1.5 * 1rem); + margin-left: 0; + margin-top: 0; +} + +@media only screen and (min-width: 768px) { + .entry-content .wp-block-pullquote.is-style-solid-color.alignleft, .entry-content .wp-block-pullquote.is-style-solid-color.alignright { + padding: calc( 2 * 1rem) calc( 2 * 1rem) 1rem; + } +} + +.entry-content .wp-block-quote:not(.is-large), .entry-content .wp-block-quote:not(.is-style-large) { + border-left: 2px solid #0073aa; + padding-top: 0; + padding-bottom: 0; +} + +.entry-content .wp-block-quote p { + font-size: 1em; + font-style: normal; + line-height: 1.8; +} + +.entry-content .wp-block-quote cite { + font-size: 0.71111em; +} + +.entry-content .wp-block-quote.is-large, .entry-content .wp-block-quote.is-style-large { + padding: 1rem 0 1rem 2rem; + margin: 1rem 0; + border-left: none; +} + +.entry-content .wp-block-quote.is-large p, .entry-content .wp-block-quote.is-style-large p { + font-size: 1.6875em; + line-height: 1.4; + font-style: italic; +} + +.entry-content .wp-block-quote.is-large cite, +.entry-content .wp-block-quote.is-large footer, .entry-content .wp-block-quote.is-style-large cite, +.entry-content .wp-block-quote.is-style-large footer { + font-size: 0.71111em; +} + +@media only screen and (min-width: 768px) { + .entry-content .wp-block-quote.is-large, .entry-content .wp-block-quote.is-style-large { + margin: 1rem calc(2 * (100vw / 12)); + max-width: calc(6 * (100vw / 12)); + } + .entry-content .wp-block-quote.is-large p, .entry-content .wp-block-quote.is-style-large p { + font-size: 1.6875em; + } +} + +.entry-content .wp-block-image img { + display: block; +} + +.entry-content .wp-block-image.alignleft, .entry-content .wp-block-image.alignright { + max-width: 100%; +} + +.entry-content .wp-block-image.alignfull img { + width: 100vw; + margin-left: auto; + margin-right: auto; +} + +.entry-content .wp-block-cover-image .wp-block-cover-image-text, +.entry-content .wp-block-cover-image h2 { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-size: 1.6875em; + font-weight: bold; + width: calc(100vw - (2 * 1rem)); + max-width: calc(100vw - (2 * 1rem)); +} + +@media only screen and (min-width: 768px) { + .entry-content .wp-block-cover-image .wp-block-cover-image-text, + .entry-content .wp-block-cover-image h2 { + font-size: 2.25em; + width: calc(8 * (100vw / 12)); + max-width: calc(8 * (100vw / 12)); + } +} + +@media only screen and (min-width: 1168px) { + .entry-content .wp-block-cover-image .wp-block-cover-image-text, + .entry-content .wp-block-cover-image h2 { + width: calc(6 * (100vw / 12 )); + max-width: calc(6 * (100vw / 12 )); + } +} + +.entry-content .wp-block-cover-image.alignleft h2, +.entry-content .wp-block-cover-image.alignleft .wp-block-cover-image-text, .entry-content .wp-block-cover-image.alignright h2, +.entry-content .wp-block-cover-image.alignright .wp-block-cover-image-text, .entry-content .wp-block-cover-image.aligncenter h2, +.entry-content .wp-block-cover-image.aligncenter .wp-block-cover-image-text { + width: 100%; + z-index: 1; + left: 50%; + position: absolute; + transform: translate(-50%, -50%); + top: 50%; +} + +.entry-content .wp-block-cover-image.has-left-content { + justify-content: center; +} + +.entry-content .wp-block-cover-image.has-left-content h2, +.entry-content .wp-block-cover-image.has-left-content .wp-block-cover-image-text { + padding: 1rem; +} + +.entry-content .wp-block-cover-image.has-right-content { + justify-content: center; +} + +.entry-content .wp-block-cover-image.has-right-content h2, +.entry-content .wp-block-cover-image.has-right-content .wp-block-cover-image-text { + padding: 1rem; +} + +.entry-content .wp-block-gallery .blocks-gallery-image:last-child, +.entry-content .wp-block-gallery .blocks-gallery-item:last-child { + margin-bottom: 16px; +} + +.entry-content .wp-block-audio figcaption, +.entry-content .wp-block-video figcaption, +.entry-content .wp-block-image figcaption, +.entry-content .wp-block-gallery .blocks-gallery-image figcaption, +.entry-content .wp-block-gallery .blocks-gallery-item figcaption { + font-size: 0.71111em; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + line-height: 1.6; + margin: 0; + padding: 0.5rem; + text-align: left; +} + +.entry-content .wp-block-separator, +.entry-content hr { + margin-bottom: 2rem; + margin-top: 2rem; + /* Remove duplicate rule-line when a separator + * is followed by an H1, or H2 */ +} + +.entry-content .wp-block-separator:not(.is-style-dots), +.entry-content hr:not(.is-style-dots) { + background-color: #767676; + border: 0; + height: 2px; +} + +.entry-content .wp-block-separator:not(.is-style-wide):not(.is-style-dots), +.entry-content hr:not(.is-style-wide):not(.is-style-dots) { + max-width: 2.25em; +} + +.entry-content .wp-block-separator + h1:before, +.entry-content .wp-block-separator + h2:before, +.entry-content hr + h1:before, +.entry-content hr + h2:before { + display: none; +} + +.entry-content .wp-block-separator.is-style-dots:before, +.entry-content hr.is-style-dots:before { + color: #767676; + font-size: 1.6875em; + letter-spacing: 0.88889em; + padding-left: 0.88889em; +} + +.entry-content .wp-block-embed-twitter { + overflow: hidden; +} + +.entry-content .wp-block-table td, .entry-content .wp-block-table th { + border-color: #767676; +} + +.entry-content .wp-block-file { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; +} + +.entry-content .wp-block-file .wp-block-file__button { + transition: background 150ms ease-in-out; + border: none; + border-radius: 5px; + background: #0073aa; + font-size: 22px; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + line-height: 1.2; + font-weight: bold; + padding: 0.75rem 1rem; +} + +@media only screen and (min-width: 1168px) { + .entry-content .wp-block-file .wp-block-file__button { + font-size: 22px; + padding: 0.875rem 1.5rem; + } +} + +.entry-content .wp-block-file .wp-block-file__button:hover { + cursor: pointer; +} + +.entry-content .wp-block-file .wp-block-file__button:hover, .entry-content .wp-block-file .wp-block-file__button:focus { + background: #111; +} + +.entry-content .wp-block-file .wp-block-file__button:focus { + outline: thin dotted; + outline-offset: -4px; +} + +.entry-content .wp-block-code { + border-radius: 0; +} + +.entry-content .wp-block-code code { + font-size: 1.125em; +} + +.entry-content .wp-block-columns .wp-block-column > *:first-child { + margin-top: 0; +} + +.entry-content .wp-block-columns .wp-block-column > *:last-child { + margin-bottom: 0; +} + +.entry-content .wp-block-columns[class*='has-'] > * { + margin-right: 1rem; +} + +.entry-content .wp-block-columns[class*='has-'] > *:last-child { + margin-right: 0; +} + +.entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-weight: bold; +} + +.entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-meta .wp-block-latest-comments__comment-date { + font-weight: normal; +} + +.entry-content .wp-block-latest-comments .wp-block-latest-comments__comment, +.entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-date, +.entry-content .wp-block-latest-comments .wp-block-latest-comments__comment-excerpt p { + font-size: inherit; +} + +.entry-content .wp-block-latest-comments.has-dates .wp-block-latest-comments__comment-date { + font-size: 0.71111em; +} + +/* Media */ +.page-content .wp-smiley, +.entry-content .wp-smiley, +.comment-content .wp-smiley { + border: none; + margin-bottom: 0; + margin-top: 0; + padding: 0; +} + +embed, +iframe, +object { + max-width: 100%; +} + +.custom-logo-link { + display: inline-block; +} + +.avatar { + border-radius: 100%; + display: block; + height: calc(2.25 * 1rem); + min-height: inherit; + width: calc(2.25 * 1rem); +} + +svg { + transition: fill 120ms ease-in-out; + fill: currentColor; +} + +/*-------------------------------------------------------------- +## Captions +--------------------------------------------------------------*/ +.wp-caption { + margin-bottom: calc(1.5 * 1rem); +} + +.wp-caption img[class*="wp-image-"] { + display: block; + margin-left: auto; + margin-right: auto; +} + +.wp-caption .wp-caption-text { + margin: calc(0.875 * 1rem) 0; +} + +.wp-caption-text { + text-align: center; +} + +/*-------------------------------------------------------------- +## Galleries +--------------------------------------------------------------*/ +.gallery { + display: flex; + margin-bottom: calc(1.5 * 1rem); +} + +.gallery-item { + display: inline-block; + margin-right: 1rem; + margin-bottom: 1rem; + text-align: center; + vertical-align: top; + width: 100%; +} + +.gallery-columns-2 .gallery-item { + max-width: calc( ( 12 / 2 ) * (100% / 12)); +} + +.gallery-columns-3 .gallery-item { + max-width: calc( ( 12 / 3 ) * (100% / 12)); +} + +.gallery-columns-4 .gallery-item { + max-width: calc( ( 12 / 4 ) * (100% / 12)); +} + +.gallery-columns-5 .gallery-item { + max-width: calc( ( 12 / 5 ) * (100% / 12)); +} + +.gallery-columns-6 .gallery-item { + max-width: calc( ( 12 / 6 ) * (100% / 12)); +} + +.gallery-columns-7 .gallery-item { + max-width: calc( ( 12 / 7 ) * (100% / 12)); +} + +.gallery-columns-8 .gallery-item { + max-width: calc( ( 12 / 8 ) * (100% / 12)); +} + +.gallery-columns-9 .gallery-item { + max-width: calc( ( 12 / 9 ) * (100% / 12)); +} + +.gallery-item:last-of-type { + margin-right: 0; +} + +.gallery-caption { + display: block; + font-size: 0.71111em; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + line-height: 1.6; + margin: 0; + padding: 0.5rem; +} + +.gallery-item > div > a { + display: block; + line-height: 0; + box-shadow: 0 0 0 0 transparent; +} + +.gallery-item > div > a:focus { + box-shadow: 0 0 0 2px #0073aa; +} diff --git a/src/wp-content/themes/twentynineteen/style.scss b/src/wp-content/themes/twentynineteen/style.scss new file mode 100644 index 0000000000000..8b35e8ecf7cd8 --- /dev/null +++ b/src/wp-content/themes/twentynineteen/style.scss @@ -0,0 +1,109 @@ +/* +Theme Name: Twenty Nineteen +Theme URI: https://github.com/WordPress/twentynineteen +Author: the WordPress team +Author URI: https://wordpress.org/ +Description: A new Gutenberg-ready theme. +Requires at least: WordPress 4.9.6 +Version: 1.0 +License: GNU General Public License v2 or later +License URI: LICENSE +Text Domain: twentynineteen +Tags: custom-background, custom-logo, custom-menu, featured-images, threaded-comments, translation-ready + +This theme, like WordPress, is licensed under the GPL. +Use it to make something cool, have fun, and share what you've learned with others. + +Twenty Nineteen is based on Underscores https://underscores.me/, (C) 2012-2018 Automattic, Inc. +Underscores is distributed under the terms of the GNU GPL v2 or later. + +Normalizing styles have been helped along thanks to the fine work of +Nicolas Gallagher and Jonathan Neal https://necolas.github.io/normalize.css/ +*/ + +/*-------------------------------------------------------------- +>>> TABLE OF CONTENTS: +---------------------------------------------------------------- +# Variables +# Normalize +# Typography + ## Headings + ## Copy +# Elements + ## Lists + ## Tables +# Forms + ## Buttons + ## Fields +# Navigation + ## Links + ## Menus + ## Next & Previous +# Accessibility +# Alignments +# Clearings +# Layout +# Widgets +# Content + ## Archives + ## Posts and pages + ## Comments +# Blocks +# Media + ## Captions + ## Galleries +--------------------------------------------------------------*/ +@import "sass/variables-site/variables-site"; +@import "sass/mixins/mixins-master"; + +/* Normalize */ + +@import "sass/normalize"; + +/* Typography */ + +@import "sass/typography/typography"; + +/* Elements */ + +@import "sass/elements/elements"; + +/* Forms */ + +@import "sass/forms/forms"; + +/* Navigation */ + +@import "sass/navigation/navigation"; + +/* Accessibility */ + +@import "sass/modules/accessibility"; + +/* Alignments */ + +@import "sass/modules/alignments"; + +/* Clearings */ + +@import "sass/modules/clearings"; + +/* Layout */ + +@import "sass/layout/layout"; + +/* Content */ + +@import "sass/site/site"; + +/* Widgets */ + +@import "sass/site/secondary/widgets"; + +/* Blocks */ + +@import "sass/blocks/blocks"; + +/* Media */ + +@import "sass/media/media"; diff --git a/src/wp-content/themes/twentynineteen/template-parts/content/content-none.php b/src/wp-content/themes/twentynineteen/template-parts/content/content-none.php new file mode 100644 index 0000000000000..52cbb716a1b68 --- /dev/null +++ b/src/wp-content/themes/twentynineteen/template-parts/content/content-none.php @@ -0,0 +1,52 @@ + + +
        diff --git a/src/wp-content/themes/twentynineteen/template-parts/content/content-page.php b/src/wp-content/themes/twentynineteen/template-parts/content/content-page.php new file mode 100644 index 0000000000000..152a79f7fb323 --- /dev/null +++ b/src/wp-content/themes/twentynineteen/template-parts/content/content-page.php @@ -0,0 +1,56 @@ + + +
        > +
        + +
        + +
        + '', + ) + ); + ?> +
        + + +
        + %s', 'twentynineteen' ), + array( + 'span' => array( + 'class' => array(), + ), + ) + ), + get_the_title() + ), + '', + '' + ); + ?> +
        + +
        diff --git a/src/wp-content/themes/twentynineteen/template-parts/content/content-single.php b/src/wp-content/themes/twentynineteen/template-parts/content/content-single.php new file mode 100644 index 0000000000000..bb18c9e1af92a --- /dev/null +++ b/src/wp-content/themes/twentynineteen/template-parts/content/content-single.php @@ -0,0 +1,87 @@ + + +
        > + +
        + + + + ', '' ); ?> + +
        + + + + authors );} + ?> + + + %s', 'twentynineteen' ), + array( + 'span' => array( + 'class' => array(), + ), + ) + ), + get_the_title() + ), + '' . twentynineteen_get_icon_svg( 'edit', 16 ), + '' + ); + ?> +
        + +
        + + +
        + "%s"', 'twentynineteen' ), + array( + 'span' => array( + 'class' => array(), + ), + ) + ), + get_the_title() + ) + ); + + wp_link_pages( + array( + 'before' => '', + ) + ); + ?> +
        + +
        + +
        + + + +
        diff --git a/src/wp-content/themes/twentynineteen/template-parts/content/content.php b/src/wp-content/themes/twentynineteen/template-parts/content/content.php new file mode 100644 index 0000000000000..0810a5d6a25af --- /dev/null +++ b/src/wp-content/themes/twentynineteen/template-parts/content/content.php @@ -0,0 +1,59 @@ + + +
        > +
        + %s', __( 'Featured', 'twentynineteen' ) ); + } + if ( is_singular() ) : + the_title( '

        ', '

        ' ); + else : + the_title( sprintf( '

        ', esc_url( get_permalink() ) ), '

        ' ); + endif; + ?> + +
        + + + +
        + "%s"', 'twentynineteen' ), + array( + 'span' => array( + 'class' => array(), + ), + ) + ), + get_the_title() + ) + ); + + wp_link_pages( + array( + 'before' => '', + ) + ); + ?> +
        + +
        + +
        +
        diff --git a/src/wp-content/themes/twentynineteen/template-parts/header/entry-header.php b/src/wp-content/themes/twentynineteen/template-parts/header/entry-header.php new file mode 100644 index 0000000000000..80591ebc542de --- /dev/null +++ b/src/wp-content/themes/twentynineteen/template-parts/header/entry-header.php @@ -0,0 +1,27 @@ + + + +', '' ); ?> + +
        + + + + authors );} + ?> + + +
        + diff --git a/src/wp-content/themes/twentynineteen/template-parts/header/site-branding.php b/src/wp-content/themes/twentynineteen/template-parts/header/site-branding.php new file mode 100644 index 0000000000000..66c141a885e00 --- /dev/null +++ b/src/wp-content/themes/twentynineteen/template-parts/header/site-branding.php @@ -0,0 +1,56 @@ + +
        + + + + + + +

        + +

        + + + +

        + +

        + + + + + + + +
        diff --git a/src/wp-content/themes/twentynineteen/template-parts/post/author-info.php b/src/wp-content/themes/twentynineteen/template-parts/post/author-info.php new file mode 100644 index 0000000000000..ccc4fa1d32f4d --- /dev/null +++ b/src/wp-content/themes/twentynineteen/template-parts/post/author-info.php @@ -0,0 +1,21 @@ + +
        +

        + +

        +

        + + +

        +
        + diff --git a/src/wp-content/themes/twentynineteen/template-parts/post/discussion-meta.php b/src/wp-content/themes/twentynineteen/template-parts/post/discussion-meta.php new file mode 100644 index 0000000000000..d5053830f6d95 --- /dev/null +++ b/src/wp-content/themes/twentynineteen/template-parts/post/discussion-meta.php @@ -0,0 +1,42 @@ +responses > 0; + +if ( $has_responses ) { + /* translators: %1(X responses)$s from %2(X others)$s */ + $meta_label = sprintf( + '%1$s from %2$s.', + sprintf( _n( '%d response', '%d responses', $discussion->responses, 'twentynineteen' ), $discussion->responses ), + sprintf( _n( '%d other', '%d others', $discussion->commenters, 'twentynineteen' ), $discussion->commenters ) + ); +} elseif ( $comments_number > 0 ) { + /* Show comment count if not enough discussion information */ + + $meta_label = sprintf( _n( '%d Comment', '%d Comments', $comments_number, 'twentynineteen' ), $comments_number ); +} else { + $meta_label = __( 'No comments', 'twentynineteen' ); +} + +?> + +
        + authors ); + } + ?> +

        + + +

        +
        From 51d04a18dcb13bb7c212cd8f8e13d34c9319b94b Mon Sep 17 00:00:00 2001 From: Aaron Jorbin Date: Tue, 23 Oct 2018 16:50:33 +0000 Subject: [PATCH 514/537] Bundled Theme: Make twentynineteen the default theme. After [43808], we can now make twentynineteen the default theme. Twentyseventeen has been a great default, but 5.0 and twentynineteen is guten. Fixes #45152. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43809 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/update-core.php | 1 + src/wp-includes/class-wp-theme.php | 1 + src/wp-includes/default-constants.php | 2 +- tests/phpunit/tests/theme.php | 1 + 4 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/wp-admin/includes/update-core.php b/src/wp-admin/includes/update-core.php index e60ec375299be..e0b05d6a6d7a7 100644 --- a/src/wp-admin/includes/update-core.php +++ b/src/wp-admin/includes/update-core.php @@ -814,6 +814,7 @@ 'themes/twentyfifteen/' => '4.1', 'themes/twentysixteen/' => '4.4', 'themes/twentyseventeen/' => '4.7', + 'themes/twentynineteen/' => '5.0', ); /** diff --git a/src/wp-includes/class-wp-theme.php b/src/wp-includes/class-wp-theme.php index b53bdcc54c8db..13ee4b65bbdc1 100644 --- a/src/wp-includes/class-wp-theme.php +++ b/src/wp-includes/class-wp-theme.php @@ -55,6 +55,7 @@ final class WP_Theme implements ArrayAccess { 'twentyfifteen' => 'Twenty Fifteen', 'twentysixteen' => 'Twenty Sixteen', 'twentyseventeen' => 'Twenty Seventeen', + 'twentynineteen' => 'Twenty Nineteen', ); /** diff --git a/src/wp-includes/default-constants.php b/src/wp-includes/default-constants.php index 94da94d2c3ad1..ba6db444be5fd 100644 --- a/src/wp-includes/default-constants.php +++ b/src/wp-includes/default-constants.php @@ -358,6 +358,6 @@ function wp_templating_constants() { * @see WP_Theme::get_core_default_theme() */ if ( !defined('WP_DEFAULT_THEME') ) - define( 'WP_DEFAULT_THEME', 'twentyseventeen' ); + define( 'WP_DEFAULT_THEME', 'twentynineteen' ); } diff --git a/tests/phpunit/tests/theme.php b/tests/phpunit/tests/theme.php index 141763179ef0a..2e67c9bb20741 100644 --- a/tests/phpunit/tests/theme.php +++ b/tests/phpunit/tests/theme.php @@ -11,6 +11,7 @@ class Tests_Theme extends WP_UnitTestCase { protected $default_themes = array( 'twentyten', 'twentyeleven', 'twentytwelve', 'twentythirteen', 'twentyfourteen', 'twentyfifteen', 'twentysixteen', 'twentyseventeen', + 'twentynineteen', ); function setUp() { From 8c0b678862fcb8131a334718fbf8eabbe498ad2a Mon Sep 17 00:00:00 2001 From: Daniel Bachhuber Date: Tue, 23 Oct 2018 17:47:28 +0000 Subject: [PATCH 515/537] Embeds: Filter HTML response in oEmbed proxy controller. Adapts the response from `WP_oEmbed_Controller::get_proxy_item()` so that the response is correctly filtered and embeds work properly in JavaSccript editors. Introduces new `get_oembed_response_data_for_url()` function for preparing internal oEmbed responses. Props danielbachhuber, imath, swissspidy. Fixes #45142. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43810 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/class-oembed.php | 6 +- .../class-wp-oembed-controller.php | 10 + src/wp-includes/embed.php | 122 +++++----- tests/phpunit/tests/oembed/controller.php | 208 +++++++++++++++++- tests/qunit/fixtures/wp-api-generated.js | 68 +++--- 5 files changed, 318 insertions(+), 96 deletions(-) diff --git a/src/wp-includes/class-oembed.php b/src/wp-includes/class-oembed.php index 359171e37d385..f27c085dc59d8 100644 --- a/src/wp-includes/class-oembed.php +++ b/src/wp-includes/class-oembed.php @@ -405,9 +405,9 @@ public function get_html( $url, $args = '' ) { * * @since 2.9.0 * - * @param string $data The returned oEmbed HTML. - * @param string $url URL of the content to be embedded. - * @param array $args Optional arguments, usually passed from a shortcode. + * @param string|false $data The returned oEmbed HTML (false if unsafe). + * @param string $url URL of the content to be embedded. + * @param array $args Optional arguments, usually passed from a shortcode. */ return apply_filters( 'oembed_result', $this->data2html( $data, $url ), $url, $args ); } diff --git a/src/wp-includes/class-wp-oembed-controller.php b/src/wp-includes/class-wp-oembed-controller.php index 7ee7950b071b4..9efeb54ed0215 100644 --- a/src/wp-includes/class-wp-oembed-controller.php +++ b/src/wp-includes/class-wp-oembed-controller.php @@ -173,12 +173,22 @@ public function get_proxy_item( $request ) { $args['height'] = $args['maxheight']; } + // Short-circuit process for URLs belonging to the current site. + $data = get_oembed_response_data_for_url( $url, $args ); + + if ( $data ) { + return $data; + } + $data = _wp_oembed_get_object()->get_data( $url, $args ); if ( false === $data ) { return new WP_Error( 'oembed_invalid_url', get_status_header_desc( 404 ), array( 'status' => 404 ) ); } + /** This filter is documented in wp-includes/class-oembed.php */ + $data->html = apply_filters( 'oembed_result', _wp_oembed_get_object()->data2html( (object) $data, $url ), $url, $args ); + /** * Filters the oEmbed TTL value (time to live). * diff --git a/src/wp-includes/embed.php b/src/wp-includes/embed.php index 176988057b557..efd991104a056 100644 --- a/src/wp-includes/embed.php +++ b/src/wp-includes/embed.php @@ -555,6 +555,71 @@ function get_oembed_response_data( $post, $width ) { return apply_filters( 'oembed_response_data', $data, $post, $width, $height ); } + +/** + * Retrieves the oEmbed response data for a given URL. + * + * @since 5.0.0 + * + * @param string $url The URL that should be inspected for discovery `` tags. + * @param array $args oEmbed remote get arguments. + * @return object|false oEmbed response data if the URL does belong to the current site. False otherwise. + */ +function get_oembed_response_data_for_url( $url, $args ) { + $switched_blog = false; + + if ( is_multisite() ) { + $url_parts = wp_parse_args( wp_parse_url( $url ), array( + 'host' => '', + 'path' => '/', + ) ); + + $qv = array( 'domain' => $url_parts['host'], 'path' => '/' ); + + // In case of subdirectory configs, set the path. + if ( ! is_subdomain_install() ) { + $path = explode( '/', ltrim( $url_parts['path'], '/' ) ); + $path = reset( $path ); + + if ( $path ) { + $qv['path'] = get_network()->path . $path . '/'; + } + } + + $sites = get_sites( $qv ); + $site = reset( $sites ); + + if ( $site && (int) $site->blog_id !== get_current_blog_id() ) { + switch_to_blog( $site->blog_id ); + $switched_blog = true; + } + } + + $post_id = url_to_postid( $url ); + + /** This filter is documented in wp-includes/class-wp-oembed-controller.php */ + $post_id = apply_filters( 'oembed_request_post_id', $post_id, $url ); + + if ( ! $post_id ) { + if ( $switched_blog ) { + restore_current_blog(); + } + + return false; + } + + $width = isset( $args['width'] ) ? $args['width'] : 0; + + $data = get_oembed_response_data( $post_id, $width ); + + if ( $switched_blog ) { + restore_current_blog(); + } + + return $data ? (object) $data : false; +} + + /** * Filters the oEmbed response data to return an iframe embed code. * @@ -1071,60 +1136,11 @@ function the_embed_site_title() { * Null if the URL does not belong to the current site. */ function wp_filter_pre_oembed_result( $result, $url, $args ) { - $switched_blog = false; - - if ( is_multisite() ) { - $url_parts = wp_parse_args( wp_parse_url( $url ), array( - 'host' => '', - 'path' => '/', - ) ); - - $qv = array( 'domain' => $url_parts['host'], 'path' => '/' ); - - // In case of subdirectory configs, set the path. - if ( ! is_subdomain_install() ) { - $path = explode( '/', ltrim( $url_parts['path'], '/' ) ); - $path = reset( $path ); - - if ( $path ) { - $qv['path'] = get_network()->path . $path . '/'; - } - } - - $sites = get_sites( $qv ); - $site = reset( $sites ); - - if ( $site && (int) $site->blog_id !== get_current_blog_id() ) { - switch_to_blog( $site->blog_id ); - $switched_blog = true; - } - } - - $post_id = url_to_postid( $url ); - - /** This filter is documented in wp-includes/class-wp-oembed-controller.php */ - $post_id = apply_filters( 'oembed_request_post_id', $post_id, $url ); - - if ( ! $post_id ) { - if ( $switched_blog ) { - restore_current_blog(); - } + $data = get_oembed_response_data_for_url( $url, $args ); - return $result; + if ( $data ) { + return _wp_oembed_get_object()->data2html( $data, $url ); } - $width = isset( $args['width'] ) ? $args['width'] : 0; - - $data = get_oembed_response_data( $post_id, $width ); - $data = _wp_oembed_get_object()->data2html( (object) $data, $url ); - - if ( $switched_blog ) { - restore_current_blog(); - } - - if ( ! $data ) { - return $result; - } - - return $data; + return $result; } diff --git a/tests/phpunit/tests/oembed/controller.php b/tests/phpunit/tests/oembed/controller.php index 9f9aa6dd46667..cae694835485e 100644 --- a/tests/phpunit/tests/oembed/controller.php +++ b/tests/phpunit/tests/oembed/controller.php @@ -14,6 +14,7 @@ class Test_oEmbed_Controller extends WP_UnitTestCase { protected static $subscriber; const YOUTUBE_VIDEO_ID = 'OQSNhk5ICTI'; const INVALID_OEMBED_URL = 'https://www.notreallyanoembedprovider.com/watch?v=awesome-cat-video'; + const UNTRUSTED_PROVIDER_URL = 'https://www.untrustedprovider.com'; public static function wpSetUpBeforeClass( $factory ) { self::$subscriber = $factory->user->create( array( @@ -43,13 +44,17 @@ public function setUp() { do_action( 'rest_api_init', $this->server ); add_filter( 'pre_http_request', array( $this, 'mock_embed_request' ), 10, 3 ); + add_filter( 'oembed_result', array( $this, 'filter_oembed_result' ), 10, 3 ); $this->request_count = 0; + + $this->oembed_result_filter_count = 0; } public function tearDown() { parent::tearDown(); remove_filter( 'pre_http_request', array( $this, 'mock_embed_request' ), 10 ); + remove_filter( 'oembed_result', array( $this, 'filter_oembed_result' ), 10 ); } /** @@ -59,6 +64,13 @@ public function tearDown() { */ public $request_count = 0; + /** + * Count of the number of times the oembed_result filter was called. + * + * @var int + */ + public $oembed_result_filter_count = 0; + /** * Intercept oEmbed requests and mock responses. * @@ -71,7 +83,8 @@ public function mock_embed_request( $preempt, $r, $url ) { unset( $preempt, $r ); $parsed_url = wp_parse_url( $url ); - parse_str( $parsed_url['query'], $query_params ); + $query = isset( $parsed_url['query'] ) ? $parsed_url['query'] : ''; + parse_str( $query, $query_params ); $this->request_count += 1; // Mock request to YouTube Embed. @@ -80,7 +93,7 @@ public function mock_embed_request( $preempt, $r, $url ) { 'response' => array( 'code' => 200, ), - 'body' => wp_json_encode( + 'body' => wp_json_encode( array( 'version' => '1.0', 'type' => 'video', @@ -90,20 +103,66 @@ public function mock_embed_request( $preempt, $r, $url ) { 'width' => $query_params['maxwidth'], 'thumbnail_height' => $query_params['maxheight'], 'height' => $query_params['maxheight'], - 'html' => '', + 'html' => 'Unfiltered', 'author_name' => 'Yosemitebear62', 'thumbnail_url' => 'https://i.ytimg.com/vi/' . self::YOUTUBE_VIDEO_ID . '/hqdefault.jpg', 'title' => 'Yosemitebear Mountain Double Rainbow 1-8-10', ) ), ); - } else { + } + + if ( $url === self::UNTRUSTED_PROVIDER_URL ) { + return array( + 'response' => array( + 'code' => 200, + ), + 'body' => '', + ); + } + + if ( ! empty( $query_params['url'] ) && false !== strpos( $query_params['url'], self::UNTRUSTED_PROVIDER_URL ) ) { return array( 'response' => array( - 'code' => 404, + 'code' => 200, + ), + 'body' => wp_json_encode( + array( + 'version' => '1.0', + 'type' => 'rich', + 'provider_name' => 'Untrusted', + 'provider_url' => self::UNTRUSTED_PROVIDER_URL, + 'html' => 'FilteredUnfiltered', + 'author_name' => 'Untrusted Embed Author', + 'title' => 'Untrusted Embed', + ) ), ); } + + return array( + 'response' => array( + 'code' => 404, + ), + ); + } + + /** + * Filters 'oembed_result' to ensure correct type. + * + * @param string|false $data The returned oEmbed HTML. + * @param string $url URL of the content to be embedded. + * @param array $args Optional arguments, usually passed from a shortcode. + * @return string + */ + public function filter_oembed_result( $data, $url, $args ) { + if ( ! is_string( $data ) && false !== $data ) { + $this->fail( 'Unexpected type for $data.' ); + } + $this->assertInternalType( 'string', $url ); + $this->assertInternalType( 'array', $args ); + $this->oembed_result_filter_count++; + return $data; } function test_wp_oembed_ensure_format() { @@ -510,7 +569,7 @@ public function test_proxy_with_valid_oembed_provider() { $data = $response->get_data(); $this->assertNotEmpty( $data ); - $this->assertTrue( is_object( $data ) ); + $this->assertInternalType( 'object', $data ); $this->assertEquals( 'YouTube', $data->provider_name ); $this->assertEquals( 'https://i.ytimg.com/vi/' . self::YOUTUBE_VIDEO_ID . '/hqdefault.jpg', $data->thumbnail_url ); $this->assertEquals( $data->width, $request['maxwidth'] ); @@ -552,4 +611,141 @@ public function test_proxy_with_invalid_discover_param() { $data = $response->get_data(); $this->assertEquals( $data['code'], 'rest_invalid_param' ); } + + /** + * @ticket 45142 + */ + function test_proxy_with_internal_url() { + wp_set_current_user( self::$editor ); + + $user = self::factory()->user->create_and_get( array( + 'display_name' => 'John Doe', + ) ); + $post = self::factory()->post->create_and_get( array( + 'post_author' => $user->ID, + 'post_title' => 'Hello World', + ) ); + + $request = new WP_REST_Request( 'GET', '/oembed/1.0/proxy' ); + $request->set_param( 'url', get_permalink( $post->ID ) ); + $request->set_param( 'maxwidth', 400 ); + + $response = $this->server->dispatch( $request ); + $data = $response->get_data(); + + $data = (array) $data; + + $this->assertNotEmpty( $data ); + + $this->assertArrayHasKey( 'version', $data ); + $this->assertArrayHasKey( 'provider_name', $data ); + $this->assertArrayHasKey( 'provider_url', $data ); + $this->assertArrayHasKey( 'author_name', $data ); + $this->assertArrayHasKey( 'author_url', $data ); + $this->assertArrayHasKey( 'title', $data ); + $this->assertArrayHasKey( 'type', $data ); + $this->assertArrayHasKey( 'width', $data ); + + $this->assertEquals( '1.0', $data['version'] ); + $this->assertEquals( get_bloginfo( 'name' ), $data['provider_name'] ); + $this->assertEquals( get_home_url(), $data['provider_url'] ); + $this->assertEquals( $user->display_name, $data['author_name'] ); + $this->assertEquals( get_author_posts_url( $user->ID, $user->user_nicename ), $data['author_url'] ); + $this->assertEquals( $post->post_title, $data['title'] ); + $this->assertEquals( 'rich', $data['type'] ); + $this->assertTrue( $data['width'] <= $request['maxwidth'] ); + } + + /** + * @ticket 45142 + */ + function test_proxy_with_static_front_page_url() { + wp_set_current_user( self::$editor ); + + $post = self::factory()->post->create_and_get( array( + 'post_title' => 'Front page', + 'post_type' => 'page', + 'post_author' => 0, + ) ); + + update_option( 'show_on_front', 'page' ); + update_option( 'page_on_front', $post->ID ); + + $request = new WP_REST_Request( 'GET', '/oembed/1.0/proxy' ); + $request->set_param( 'url', home_url() ); + $request->set_param( 'maxwidth', 400 ); + + $response = $this->server->dispatch( $request ); + $data = $response->get_data(); + + $this->assertInternalType( 'object', $data ); + + $data = (array) $data; + + $this->assertNotEmpty( $data ); + + $this->assertArrayHasKey( 'version', $data ); + $this->assertArrayHasKey( 'provider_name', $data ); + $this->assertArrayHasKey( 'provider_url', $data ); + $this->assertArrayHasKey( 'author_name', $data ); + $this->assertArrayHasKey( 'author_url', $data ); + $this->assertArrayHasKey( 'title', $data ); + $this->assertArrayHasKey( 'type', $data ); + $this->assertArrayHasKey( 'width', $data ); + + $this->assertEquals( '1.0', $data['version'] ); + $this->assertEquals( get_bloginfo( 'name' ), $data['provider_name'] ); + $this->assertEquals( get_home_url(), $data['provider_url'] ); + $this->assertEquals( get_bloginfo( 'name' ), $data['author_name'] ); + $this->assertEquals( get_home_url(), $data['author_url'] ); + $this->assertEquals( $post->post_title, $data['title'] ); + $this->assertEquals( 'rich', $data['type'] ); + $this->assertTrue( $data['width'] <= $request['maxwidth'] ); + + update_option( 'show_on_front', 'posts' ); + } + + /** + * @ticket 45142 + */ + public function test_proxy_filters_result_of_untrusted_oembed_provider() { + wp_set_current_user( self::$editor ); + + $request = new WP_REST_Request( 'GET', '/oembed/1.0/proxy' ); + $request->set_param( 'url', self::UNTRUSTED_PROVIDER_URL ); + $request->set_param( 'maxwidth', 456 ); + $request->set_param( 'maxheight', 789 ); + $request->set_param( '_wpnonce', wp_create_nonce( 'wp_rest' ) ); + + $response = $this->server->dispatch( $request ); + $data = $response->get_data(); + + $this->assertEquals( 1, $this->oembed_result_filter_count ); + $this->assertInternalType( 'object', $data ); + $this->assertEquals( 'Untrusted', $data->provider_name ); + $this->assertEquals( self::UNTRUSTED_PROVIDER_URL, $data->provider_url ); + $this->assertEquals( 'rich', $data->type ); + $this->assertFalse( $data->html ); + } + + /** + * @ticket 45142 + */ + public function test_proxy_does_not_filter_result_of_trusted_oembed_provider() { + wp_set_current_user( self::$editor ); + + $request = new WP_REST_Request( 'GET', '/oembed/1.0/proxy' ); + $request->set_param( 'url', 'https://www.youtube.com/watch?v=' . self::YOUTUBE_VIDEO_ID ); + $request->set_param( 'maxwidth', 456 ); + $request->set_param( 'maxheight', 789 ); + $request->set_param( '_wpnonce', wp_create_nonce( 'wp_rest' ) ); + + $response = $this->server->dispatch( $request ); + $data = $response->get_data(); + + $this->assertEquals( 1, $this->oembed_result_filter_count ); + $this->assertInternalType( 'object', $data ); + + $this->assertStringStartsWith( 'Unfiltered', $data->html ); + } } diff --git a/tests/qunit/fixtures/wp-api-generated.js b/tests/qunit/fixtures/wp-api-generated.js index fe67f6bba4204..d058ab0a750d6 100644 --- a/tests/qunit/fixtures/wp-api-generated.js +++ b/tests/qunit/fixtures/wp-api-generated.js @@ -5075,16 +5075,16 @@ mockedApiResponse.postRevisions = [ } }, { - "author": 405, + "author": 406, "date": "2017-02-14T00:00:00", "date_gmt": "2017-02-14T00:00:00", - "id": 1527, + "id": 36717, "modified": "2017-02-14T00:00:00", "modified_gmt": "2017-02-14T00:00:00", - "parent": 1526, - "slug": "1526-revision-v1", + "parent": 36716, + "slug": "36716-revision-v1", "guid": { - "rendered": "http://example.org/?p=1527" + "rendered": "http://example.org/?p=36717" }, "title": { "rendered": "REST API Client Fixture: Post" @@ -5098,7 +5098,7 @@ mockedApiResponse.postRevisions = [ "_links": { "parent": [ { - "href": "http://example.org/index.php?rest_route=/wp/v2/posts/1526" + "href": "http://example.org/index.php?rest_route=/wp/v2/posts/36716" } ] } @@ -5130,16 +5130,16 @@ mockedApiResponse.revision = { mockedApiResponse.postAutosaves = [ { - "author": 405, + "author": 406, "date": "2017-02-14T00:00:00", "date_gmt": "2017-02-14T00:00:00", - "id": 1528, + "id": 36718, "modified": "2017-02-14T00:00:00", "modified_gmt": "2017-02-14T00:00:00", - "parent": 1526, - "slug": "1526-autosave-v1", + "parent": 36716, + "slug": "36716-autosave-v1", "guid": { - "rendered": "http://example.org/?p=1528" + "rendered": "http://example.org/?p=36718" }, "title": { "rendered": "" @@ -5153,7 +5153,7 @@ mockedApiResponse.postAutosaves = [ "_links": { "parent": [ { - "href": "http://example.org/index.php?rest_route=/wp/v2/posts/1526" + "href": "http://example.org/index.php?rest_route=/wp/v2/posts/36716" } ] } @@ -5161,16 +5161,16 @@ mockedApiResponse.postAutosaves = [ ]; mockedApiResponse.autosave = { - "author": 405, + "author": 406, "date": "2017-02-14T00:00:00", "date_gmt": "2017-02-14T00:00:00", - "id": 1528, + "id": 36718, "modified": "2017-02-14T00:00:00", "modified_gmt": "2017-02-14T00:00:00", - "parent": 1526, - "slug": "1526-autosave-v1", + "parent": 36716, + "slug": "36716-autosave-v1", "guid": { - "rendered": "http://example.org/?p=1528" + "rendered": "http://example.org/?p=36718" }, "title": { "rendered": "" @@ -5335,16 +5335,16 @@ mockedApiResponse.pageRevisions = [ } }, { - "author": 405, + "author": 406, "date": "2017-02-14T00:00:00", "date_gmt": "2017-02-14T00:00:00", - "id": 1530, + "id": 36720, "modified": "2017-02-14T00:00:00", "modified_gmt": "2017-02-14T00:00:00", - "parent": 1529, - "slug": "1529-revision-v1", + "parent": 36719, + "slug": "36719-revision-v1", "guid": { - "rendered": "http://example.org/?p=1530" + "rendered": "http://example.org/?p=36720" }, "title": { "rendered": "REST API Client Fixture: Page" @@ -5358,7 +5358,7 @@ mockedApiResponse.pageRevisions = [ "_links": { "parent": [ { - "href": "http://example.org/index.php?rest_route=/wp/v2/pages/1529" + "href": "http://example.org/index.php?rest_route=/wp/v2/pages/36719" } ] } @@ -5390,16 +5390,16 @@ mockedApiResponse.pageRevision = { mockedApiResponse.pageAutosaves = [ { - "author": 405, + "author": 406, "date": "2017-02-14T00:00:00", "date_gmt": "2017-02-14T00:00:00", - "id": 1531, + "id": 36721, "modified": "2017-02-14T00:00:00", "modified_gmt": "2017-02-14T00:00:00", - "parent": 1529, - "slug": "1529-autosave-v1", + "parent": 36719, + "slug": "36719-autosave-v1", "guid": { - "rendered": "http://example.org/?p=1531" + "rendered": "http://example.org/?p=36721" }, "title": { "rendered": "" @@ -5413,7 +5413,7 @@ mockedApiResponse.pageAutosaves = [ "_links": { "parent": [ { - "href": "http://example.org/index.php?rest_route=/wp/v2/pages/1529" + "href": "http://example.org/index.php?rest_route=/wp/v2/pages/36719" } ] } @@ -5421,16 +5421,16 @@ mockedApiResponse.pageAutosaves = [ ]; mockedApiResponse.pageAutosave = { - "author": 405, + "author": 406, "date": "2017-02-14T00:00:00", "date_gmt": "2017-02-14T00:00:00", - "id": 1531, + "id": 36721, "modified": "2017-02-14T00:00:00", "modified_gmt": "2017-02-14T00:00:00", - "parent": 1529, - "slug": "1529-autosave-v1", + "parent": 36719, + "slug": "36719-autosave-v1", "guid": { - "rendered": "http://example.org/?p=1531" + "rendered": "http://example.org/?p=36721" }, "title": { "rendered": "" From dfbe885115b8c1f6dbbbf3e0bd19f9ddc7321895 Mon Sep 17 00:00:00 2001 From: Daniel Bachhuber Date: Tue, 23 Oct 2018 18:55:45 +0000 Subject: [PATCH 516/537] Meta: Allow empty strings to be set by Custom Fields meta box. Because the REST API allows meta keys to have empty values, the Custom Fields meta box should permit the same behavior. Props charlestonsw, soulseekah. Fixes #43559. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43811 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/ajax-actions.php | 2 - src/wp-admin/includes/post.php | 2 +- tests/phpunit/tests/admin/includesPost.php | 17 ++++++ tests/phpunit/tests/ajax/AddMeta.php | 71 ++++++++++++++++++++++ 4 files changed, 89 insertions(+), 3 deletions(-) create mode 100644 tests/phpunit/tests/ajax/AddMeta.php diff --git a/src/wp-admin/includes/ajax-actions.php b/src/wp-admin/includes/ajax-actions.php index 8fb348c6d3873..fcc67eba19442 100644 --- a/src/wp-admin/includes/ajax-actions.php +++ b/src/wp-admin/includes/ajax-actions.php @@ -1341,8 +1341,6 @@ function wp_ajax_add_meta() { $value = wp_unslash( $_POST['meta'][$mid]['value'] ); if ( '' == trim($key) ) wp_die( __( 'Please provide a custom field name.' ) ); - if ( '' == trim($value) ) - wp_die( __( 'Please provide a custom field value.' ) ); if ( ! $meta = get_metadata_by_mid( 'post', $mid ) ) wp_die( 0 ); // if meta doesn't exist if ( is_protected_meta( $meta->meta_key, 'post' ) || is_protected_meta( $key, 'post' ) || diff --git a/src/wp-admin/includes/post.php b/src/wp-admin/includes/post.php index 015c7d32ec9fa..a95ff78bc6967 100644 --- a/src/wp-admin/includes/post.php +++ b/src/wp-admin/includes/post.php @@ -814,7 +814,7 @@ function add_meta( $post_ID ) { if ( is_string( $metavalue ) ) $metavalue = trim( $metavalue ); - if ( ('0' === $metavalue || ! empty ( $metavalue ) ) && ( ( ( '#NONE#' != $metakeyselect ) && !empty ( $metakeyselect) ) || !empty ( $metakeyinput ) ) ) { + if ( ( ( '#NONE#' != $metakeyselect ) && ! empty( $metakeyselect ) ) || ! empty( $metakeyinput ) ) { /* * We have a key/value pair. If both the select and the input * for the key have data, the input takes precedence. diff --git a/tests/phpunit/tests/admin/includesPost.php b/tests/phpunit/tests/admin/includesPost.php index f57b27f203e07..3d782e2dba69e 100644 --- a/tests/phpunit/tests/admin/includesPost.php +++ b/tests/phpunit/tests/admin/includesPost.php @@ -707,4 +707,21 @@ function test_get_block_editor_server_block_settings() { $this->assertArrayHasKey( $name, $blocks ); $this->assertSame( array( 'icon' => 'text' ), $blocks[ $name ] ); } + + /** + * @ticket 43559 + */ + public function test_post_add_meta_empty_is_allowed() { + $p = self::factory()->post->create(); + + $_POST = array( + 'metakeyinput' => 'testkey', + 'metavalue' => '', + ); + + wp_set_current_user( self::$admin_id ); + + $this->assertNotFalse( add_meta( $p ) ); + $this->assertEquals( '', get_post_meta( $p, 'testkey', true ) ); + } } diff --git a/tests/phpunit/tests/ajax/AddMeta.php b/tests/phpunit/tests/ajax/AddMeta.php new file mode 100644 index 0000000000000..a20deede629c0 --- /dev/null +++ b/tests/phpunit/tests/ajax/AddMeta.php @@ -0,0 +1,71 @@ +post->create(); + + // Become an administrator. + $this->_setRole( 'administrator' ); + + $_POST = array( + 'post_id' => $p, + 'metakeyinput' => 'testkey', + 'metavalue' => '', + '_ajax_nonce-add-meta' => wp_create_nonce( 'add-meta' ), + ); + + // Make the request. + try { + $this->_handleAjax( 'add-meta' ); + } catch ( WPAjaxDieContinueException $e ) { + unset( $e ); + } + + $this->assertEquals( '', get_post_meta( $p, 'testkey', true ) ); + } + + /** + * @ticket 43559 + */ + public function test_post_update_meta_empty_is_allowed_ajax() { + $p = self::factory()->post->create(); + + $m = add_post_meta( $p, 'testkey', 'hello' ); + + // Become an administrator. + $this->_setRole( 'administrator' ); + + $_POST = array( + '_ajax_nonce-add-meta' => wp_create_nonce( 'add-meta' ), + 'post_id' => $p, + 'meta' => array( + $m => array( + 'key' => 'testkey', + 'value' => '', + ), + ), + ); + + // Make the request. + try { + $this->_handleAjax( 'add-meta' ); + } catch ( WPAjaxDieContinueException $e ) { + unset( $e ); + } + + $this->assertEquals( '', get_post_meta( $p, 'testkey', true ) ); + } +} From 2bfffb3e1c7242a475f11cff00fc5dd0a559b78e Mon Sep 17 00:00:00 2001 From: Gary Pendergast Date: Wed, 24 Oct 2018 00:35:51 +0000 Subject: [PATCH 517/537] Styles: Add helper functions for loading block styles. Blocks are able to register styles that used in the editor and the frontend, or only in the editor. These functions ensure the correct styles are loaded in the correct place. See #45065. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43812 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/default-filters.php | 4 + src/wp-includes/script-loader.php | 71 ++++++++++++++++ tests/phpunit/tests/dependencies/styles.php | 89 ++++++++++++++++++++- 3 files changed, 162 insertions(+), 2 deletions(-) diff --git a/src/wp-includes/default-filters.php b/src/wp-includes/default-filters.php index 56c9b6b75ccad..dfc0508f05192 100644 --- a/src/wp-includes/default-filters.php +++ b/src/wp-includes/default-filters.php @@ -495,6 +495,10 @@ add_action( 'wp_enqueue_scripts', 'wp_localize_jquery_ui_datepicker', 1000 ); add_action( 'admin_enqueue_scripts', 'wp_localize_jquery_ui_datepicker', 1000 ); +add_action( 'wp_enqueue_scripts', 'wp_common_block_scripts_and_styles' ); +add_action( 'admin_enqueue_scripts', 'wp_common_block_scripts_and_styles' ); +add_action( 'enqueue_block_assets', 'wp_enqueue_registered_block_scripts_and_styles' ); +add_action( 'enqueue_block_editor_assets', 'wp_enqueue_registered_block_scripts_and_styles' ); add_action( 'admin_print_scripts-index.php', 'wp_localize_community_events' ); add_filter( 'wp_print_scripts', 'wp_just_in_time_script_localization' ); add_filter( 'print_scripts_array', 'wp_prototype_before_jquery' ); diff --git a/src/wp-includes/script-loader.php b/src/wp-includes/script-loader.php index b5f66b5cee194..b1718c2602f45 100644 --- a/src/wp-includes/script-loader.php +++ b/src/wp-includes/script-loader.php @@ -2178,3 +2178,74 @@ function script_concat_settings() { $compress_css = false; } } + +/** + * Handles the enqueueing of block scripts and styles that are common to both + * the editor and the front-end. + * + * @since 5.0.0 + * + * @global WP_Screen $current_screen + */ +function wp_common_block_scripts_and_styles() { + global $current_screen; + + if ( is_admin() && ! $current_screen->is_block_editor() ) { + return; + } + + wp_enqueue_style( 'wp-block-library' ); + + if ( current_theme_supports( 'wp-block-styles' ) ) { + wp_enqueue_style( 'wp-block-library-theme' ); + } + + /** + * Fires after enqueuing block assets for both editor and front-end. + * + * Call `add_action` on any hook before 'wp_enqueue_scripts'. + * + * In the function call you supply, simply use `wp_enqueue_script` and + * `wp_enqueue_style` to add your functionality to the Gutenberg editor. + * + * @since 5.0.0 + */ + do_action( 'enqueue_block_assets' ); +} + +/** + * Enqueues registered block scripts and styles, depending on current rendered + * context (only enqueuing editor scripts while in context of the editor). + * + * @since 5.0.0 + * + * @global WP_Screen $current_screen + */ +function wp_enqueue_registered_block_scripts_and_styles() { + global $current_screen; + + $is_editor = ( is_admin() && $current_screen->is_block_editor() ); + + $block_registry = WP_Block_Type_Registry::get_instance(); + foreach ( $block_registry->get_all_registered() as $block_name => $block_type ) { + // Front-end styles. + if ( ! empty( $block_type->style ) ) { + wp_enqueue_style( $block_type->style ); + } + + // Front-end script. + if ( ! empty( $block_type->script ) ) { + wp_enqueue_script( $block_type->script ); + } + + // Editor styles. + if ( $is_editor && ! empty( $block_type->editor_style ) ) { + wp_enqueue_style( $block_type->editor_style ); + } + + // Editor script. + if ( $is_editor && ! empty( $block_type->editor_script ) ) { + wp_enqueue_script( $block_type->editor_script ); + } + } +} diff --git a/tests/phpunit/tests/dependencies/styles.php b/tests/phpunit/tests/dependencies/styles.php index 0994cb3d26b06..f6987c4161034 100644 --- a/tests/phpunit/tests/dependencies/styles.php +++ b/tests/phpunit/tests/dependencies/styles.php @@ -4,23 +4,45 @@ * @group scripts */ class Tests_Dependencies_Styles extends WP_UnitTestCase { - var $old_wp_styles; + private $old_wp_styles; + private $old_wp_scripts; function setUp() { parent::setUp(); - if ( empty( $GLOBALS['wp_styles'] ) ) + + if ( empty( $GLOBALS['wp_styles'] ) ) { $GLOBALS['wp_styles'] = null; + } + $this->old_wp_styles = $GLOBALS['wp_styles']; + + if ( empty( $GLOBALS['wp_scripts'] ) ) { + $GLOBALS['wp_scripts'] = null; + } + + $this->old_wp_styles = $GLOBALS['wp_scripts']; + remove_action( 'wp_default_styles', 'wp_default_styles' ); remove_action( 'wp_print_styles', 'print_emoji_styles' ); + $GLOBALS['wp_styles'] = new WP_Styles(); $GLOBALS['wp_styles']->default_version = get_bloginfo( 'version' ); + + $GLOBALS['wp_scripts'] = new WP_Scripts(); + $GLOBALS['wp_scripts']->default_version = get_bloginfo( 'version' ); } function tearDown() { $GLOBALS['wp_styles'] = $this->old_wp_styles; + $GLOBALS['wp_scripts'] = $this->old_wp_scripts; + add_action( 'wp_default_styles', 'wp_default_styles' ); add_action( 'wp_print_styles', 'print_emoji_styles' ); + + if ( current_theme_supports( 'wp-block-styles' ) ) { + remove_theme_support( 'wp-block-styles' ); + } + parent::tearDown(); } @@ -298,4 +320,67 @@ function data_styles_with_media() { ), ); } + + /** + * Tests that visual block styles are enqueued in the editor even when there is not theme support for 'wp-block-styles'. + * + * Visual block styles should always be enqueued when editing to avoid the appearance of a broken editor. + */ + function test_block_styles_for_editing_without_theme_support() { + // Confirm we are without theme support by default. + $this->assertFalse( current_theme_supports( 'wp-block-styles' ) ); + + wp_default_styles( $GLOBALS['wp_styles'] ); + + $this->assertFalse( wp_style_is( 'wp-block-library-theme' ) ); + wp_enqueue_style( 'wp-edit-blocks' ); + $this->assertTrue( wp_style_is( 'wp-block-library-theme' ) ); + } + + /** + * Tests that visual block styles are enqueued when there is theme support for 'wp-block-styles'. + * + * Visual block styles should always be enqueued when editing to avoid the appearance of a broken editor. + */ + function test_block_styles_for_editing_with_theme_support() { + add_theme_support( 'wp-block-styles' ); + + wp_default_styles( $GLOBALS['wp_styles'] ); + + $this->assertFalse( wp_style_is( 'wp-block-library-theme' ) ); + wp_common_block_scripts_and_styles(); + $this->assertTrue( wp_style_is( 'wp-block-library-theme' ) ); + } + + /** + * Tests that visual block styles are not enqueued for viewing when there is no theme support for 'wp-block-styles'. + * + * Visual block styles should not be enqueued unless a theme opts in. + * This way we avoid style conflicts with existing themes. + */ + function test_no_block_styles_for_viewing_without_theme_support() { + // Confirm we are without theme support by default. + $this->assertFalse( current_theme_supports( 'wp-block-styles' ) ); + + wp_default_styles( $GLOBALS['wp_styles'] ); + + $this->assertFalse( wp_style_is( 'wp-block-library-theme' ) ); + wp_enqueue_style( 'wp-block-library' ); + $this->assertFalse( wp_style_is( 'wp-block-library-theme' ) ); + } + + /** + * Tests that visual block styles are enqueued for viewing when there is theme support for 'wp-block-styles'. + * + * Visual block styles should be enqueued when a theme opts in. + */ + function test_block_styles_for_viewing_with_theme_support() { + add_theme_support( 'wp-block-styles' ); + + wp_default_styles( $GLOBALS['wp_styles'] ); + + $this->assertFalse( wp_style_is( 'wp-block-library-theme' ) ); + wp_common_block_scripts_and_styles(); + $this->assertTrue( wp_style_is( 'wp-block-library-theme' ) ); + } } From 52beb9c65d60e654be60c9067d4e21c35f08f182 Mon Sep 17 00:00:00 2001 From: Gary Pendergast Date: Wed, 24 Oct 2018 01:18:38 +0000 Subject: [PATCH 518/537] KSES: Allow the `download` attribute on `` tags. To avoid this being a vector for bypassing the filetypes that are allowed to be uploaded, this attribute is only allowed to be added without a value. Props kalpshit, arshidkv12, welcher, peterwilsoncc, marina_wp, pento. See #44724. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43813 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/kses.php | 3 +++ tests/phpunit/tests/kses.php | 11 +++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/wp-includes/kses.php b/src/wp-includes/kses.php index b5cedc6f85597..3083cc94f15e1 100644 --- a/src/wp-includes/kses.php +++ b/src/wp-includes/kses.php @@ -66,6 +66,9 @@ 'rev' => true, 'name' => true, 'target' => true, + 'download' => array( + 'valueless' => 'y', + ), ), 'abbr' => array(), 'acronym' => array(), diff --git a/tests/phpunit/tests/kses.php b/tests/phpunit/tests/kses.php index 599c64d424531..4ac0ec83adeda 100644 --- a/tests/phpunit/tests/kses.php +++ b/tests/phpunit/tests/kses.php @@ -46,11 +46,18 @@ function test_wp_filter_post_kses_a() { 'rev' => 'revision', 'name' => 'name', 'target' => '_blank', + 'download' => '', ); foreach ( $attributes as $name => $value ) { - $string = "I link this"; - $expect_string = "I link this"; + if ( $value ) { + $attr = "$name='$value'"; + $expected_attr = "$name='" . trim( $value, ';' ) . "'"; + } else { + $attr = $expected_attr = $name; + } + $string = "I link this"; + $expect_string = "I link this"; $this->assertEquals( $expect_string, wp_kses( $string, $allowedposttags ) ); } } From f488d429f2b65b30c75fc27d139af0f34c044e82 Mon Sep 17 00:00:00 2001 From: Gary Pendergast Date: Wed, 24 Oct 2018 04:15:27 +0000 Subject: [PATCH 519/537] Themes: Document the new theme features being added. The `add_theme_support()` inline docs now includes the features that the block editor adds. Props desrosj. See #45134. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43814 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/theme.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/wp-includes/theme.php b/src/wp-includes/theme.php index 8c97745a3abbb..4c0b8587cceb0 100644 --- a/src/wp-includes/theme.php +++ b/src/wp-includes/theme.php @@ -2210,7 +2210,9 @@ function get_theme_starter_content() { * @since 4.1.0 The `title-tag` feature was added * @since 4.5.0 The `customize-selective-refresh-widgets` feature was added * @since 4.7.0 The `starter-content` feature was added - * @since 5.0.0 The `responsive-embeds` feature was added. + * @since 5.0.0 The `responsive-embeds`, `align-wide`, `dark-editor-style`, `disable-custom-colors`, + * `disable-custom-font-sizes`, `editor-color-pallete`, `editor-font-sizes`, + * `editor-styles`, and `wp-block-styles` features were added. * * @global array $_wp_theme_features * From 3609a27bb85ac5f5a9dad9497218ca661655d02e Mon Sep 17 00:00:00 2001 From: Gary Pendergast Date: Wed, 24 Oct 2018 06:45:26 +0000 Subject: [PATCH 520/537] Editor: Minor bug fixes. Change the default layout slightly, and tweak the HTML stored in `post_content`. Props matveb, karmatosed, joen, youknowriad, aduth, iseulde, pento, EphoxJames, mkaz, jnylen0, notnownikki, lonelyvegan, chopinbach, njpanderson, mimo84, intronic, westonruter, mcsf, dmsnell, afercia, paulwilde, mitogh, codebykat, mrahmadawais, kopepasah, circlecube, adamsilverstein, timmydcrawford, ephox-mogran, nbachiyski, JDGrimes, laurelfulford, Soean, mapk, sirjonathan, j-falk, ryelle, helen, netweb, lamosty, willybahuaud, maurobringolf, jorbin, spocke, androb, annaharrison, Afraithe, georgeh, matt, melchoyce, nitrajka, sirreal, babbardel, arush, martinlugton, iandunn, oyously, rileybrook, azaozz, folletto, ianstewart, johnpixle, clorith, joedolson, ipstenu, mrwweb, diegoliv, jeffpaul, lukecavanagh, shaunandrews, hugobaeta, jjj, mizejewski, buzztone, jdembowski, webdevmattcrom, GaryJones, jasonagnew, dd32, ieatwebsites, gma992, swissspidy, dixitadusara, ameeker, stagger-lee, jblz, nicbertino, rahmohn, vladanost, gziolo, lancewillett, lynneux, betsela, fuyuko, msdesign21, thrijith, chanthaboune, Cloud887, hblackett, vishalkakadiya, c-shultz, nfmohit, noisysocks, omarreiss, hedgefield, hideokamoto, mirucon, nosolosw, DannyCooper, burhandodhy, zebulan, benjamin_zekavica, danielbachhuber, jorgefilipecosta, ajitbohra, bph, ChrisVanPatten, dixitadusara, antpb, mikehaydon, jahvi, floriansimeth, Mathiu, amedina, diegoreymendez, etoledom, caxco93, yoavf, welcher, bobbingwide, jonsurrell, notlaura, ocean90, eliorivero, wpscholar, Shelob9, travislopes, earnjam, designsimply, johnwatkins0, dfangstrom, igorsch, jaswrks, daniloercoli, rianrietveld, dimadin, SergioEstevao, dlocc, tinkerbelly, schlessera, sumobi, kjellr, ireneyoast, hypest, tfrommen, intronic, johnny5, samikeijonen, bpayton, atimmer, Rahmon, tg-ephox, nerrad, talldan, Xyfi. See #45037. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43815 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/edit-form-blocks.php | 368 ++++++++++++++++++++++++++++++ src/wp-admin/post-new.php | 8 +- src/wp-admin/post.php | 5 + 3 files changed, 379 insertions(+), 2 deletions(-) create mode 100644 src/wp-admin/edit-form-blocks.php diff --git a/src/wp-admin/edit-form-blocks.php b/src/wp-admin/edit-form-blocks.php new file mode 100644 index 0000000000000..0d606382c1cc8 --- /dev/null +++ b/src/wp-admin/edit-form-blocks.php @@ -0,0 +1,368 @@ +labels->edit_item; +} + +// Flag that we're loading the block editor. +$current_screen = get_current_screen(); +$current_screen->is_block_editor( true ); + +/* + * Emoji replacement is disabled for now, until it plays nicely with React. + */ +remove_action( 'admin_print_scripts', 'print_emoji_detection_script' ); + +wp_enqueue_script( 'heartbeat' ); +wp_enqueue_script( 'wp-edit-post' ); + +$rest_base = ! empty( $post_type_object->rest_base ) ? $post_type_object->rest_base : $post_type_object->name; + +// Preload common data. +$preload_paths = array( + '/', + '/wp/v2/types?context=edit', + '/wp/v2/taxonomies?per_page=-1&context=edit', + '/wp/v2/themes?status=active', + sprintf( '/wp/v2/%s/%s?context=edit', $rest_base, $post->ID ), + sprintf( '/wp/v2/types/%s?context=edit', $post_type ), + sprintf( '/wp/v2/users/me?post_type=%s&context=edit', $post_type ), +); + +/* + * Ensure the global $post remains the same after API data is preloaded. + * Because API preloading can call the_content and other filters, plugins + * can unexpectedly modify $post. + */ +$backup_global_post = $post; + +$preload_data = array_reduce( + $preload_paths, + 'rest_preload_api_request', + array() +); + +// Restore the global $post as it was before API preloading. +$post = $backup_global_post; + +wp_add_inline_script( + 'wp-api-fetch', + sprintf( 'wp.apiFetch.use( wp.apiFetch.createPreloadingMiddleware( %s ) );', wp_json_encode( $preload_data ) ), + 'after' +); + +wp_add_inline_script( + 'wp-blocks', + sprintf( 'wp.blocks.setCategories( %s );', wp_json_encode( get_block_categories( $post ) ) ), + 'after' +); + +/* + * Assign initial edits, if applicable. These are not initially assigned to the persisted post, + * but should be included in its save payload. + */ +$initial_edits = null; +$is_new_post = false; +if ( 'auto-draft' === $post->post_status ) { + $is_new_post = true; + // Override "(Auto Draft)" new post default title with empty string, or filtered value. + $initial_edits = array( + 'title' => array( + 'raw' => $post->post_title, + ), + 'content' => array( + 'raw' => $post->post_content, + ), + 'excerpt' => array( + 'raw' => $post->post_excerpt, + ), + ); +} + +// Prepare Jed locale data. +$locale_data = wp_get_jed_locale_data( 'default' ); +wp_add_inline_script( + 'wp-i18n', + 'wp.i18n.setLocaleData( ' . wp_json_encode( $locale_data ) . ' );' +); + +// Preload server-registered block schemas. +wp_add_inline_script( + 'wp-blocks', + 'wp.blocks.unstable__bootstrapServerSideBlockDefinitions(' . wp_json_encode( get_block_editor_server_block_settings() ) . ');' +); + +// Get admin url for handling meta boxes. +$meta_box_url = admin_url( 'post.php' ); +$meta_box_url = add_query_arg( + array( + 'post' => $post->ID, + 'action' => 'edit', + 'meta-box-loader' => true, + '_wpnonce' => wp_create_nonce( 'meta-box-loader' ), + ), + $meta_box_url +); +wp_localize_script( 'wp-editor', '_wpMetaBoxUrl', $meta_box_url ); + + +// Populate default code editor settings by short-circuiting wp_enqueue_code_editor. +wp_add_inline_script( + 'wp-editor', + sprintf( + 'window._wpGutenbergCodeEditorSettings = %s;', + wp_json_encode( wp_get_code_editor_settings( array( 'type' => 'text/html' ) ) ) + ) +); + +/* + * Initialize the editor. + */ + +$align_wide = get_theme_support( 'align-wide' ); +$color_palette = current( (array) get_theme_support( 'editor-color-palette' ) ); +$font_sizes = current( (array) get_theme_support( 'editor-font-sizes' ) ); + +/** + * Filters the allowed block types for the editor, defaulting to true (all + * block types supported). + * + * @since 5.0.0 + * + * @param bool|array $allowed_block_types Array of block type slugs, or + * boolean to enable/disable all. + * @param object $post The post resource data. + */ +$allowed_block_types = apply_filters( 'allowed_block_types', true, $post ); + +// Get all available templates for the post/page attributes meta-box. +// The "Default template" array element should only be added if the array is +// not empty so we do not trigger the template select element without any options +// besides the default value. +$available_templates = wp_get_theme()->get_page_templates( get_post( $post->ID ) ); +$available_templates = ! empty( $available_templates ) ? array_merge( + array( + /** This filter is documented in wp-admin/includes/meta-boxes.php */ + '' => apply_filters( 'default_page_template_title', __( 'Default template' ), 'rest-api' ), + ), + $available_templates +) : $available_templates; + +// Media settings. +$max_upload_size = wp_max_upload_size(); +if ( ! $max_upload_size ) { + $max_upload_size = 0; +} + +// Editor Styles. +$styles = array( + array( + 'css' => file_get_contents( + ABSPATH . WPINC . '/css/dist/editor/editor-styles.css' + ), + ), +); +if ( $editor_styles && current_theme_supports( 'editor-styles' ) ) { + foreach ( $editor_styles as $style ) { + if ( preg_match( '~^(https?:)?//~', $style ) ) { + //$response = wp_remote_get( $style ); + var_dump( $response ); + if ( ! is_wp_error( $response ) ) { + $styles[] = array( + 'css' => wp_remote_retrieve_body( $response ), + ); + } + } else { + $file = get_theme_file_path( $style ); + $styles[] = array( + 'css' => file_get_contents( get_theme_file_path( $style ) ), + 'baseURL' => get_theme_file_uri( $style ), + ); + } + } +} + +// Lock settings. +$user_id = wp_check_post_lock( $post->ID ); +if ( $user_id ) { + /** This filter is documented in wp-admin/includes/post.php */ + if ( apply_filters( 'show_post_locked_dialog', true, $post, $user_id ) ) { + $locked = true; + } + + $user_details = null; + if ( $locked ) { + $user = get_userdata( $user_id ); + $user_details = array( + 'name' => $user->display_name, + ); + $avatar = get_avatar_url( $user_id, array( 'size' => 64 ) ); + } + + $lock_details = array( + 'isLocked' => $locked, + 'user' => $user_details, + ); +} else { + // Lock the post. + $active_post_lock = wp_set_post_lock( $post->ID ); + $lock_details = array( + 'isLocked' => false, + 'activePostLock' => esc_attr( implode( ':', $active_post_lock ) ), + ); +} + +/** + * Filters the body placeholder text. + * + * @since 5.0.0 + * + * @param string $text Placeholder text. Default 'Write your story'. + * @param WP_Post $post Post object. + */ +$body_placeholder = apply_filters( 'write_your_story', __( 'Write your story' ), $post ); + +$editor_settings = array( + 'alignWide' => $align_wide, + 'availableTemplates' => $available_templates, + 'allowedBlockTypes' => $allowed_block_types, + 'disableCustomColors' => get_theme_support( 'disable-custom-colors' ), + 'disableCustomFontSizes' => get_theme_support( 'disable-custom-font-sizes' ), + 'disablePostFormats' => ! current_theme_supports( 'post-formats' ), + /** This filter is documented in wp-admin/edit-form-advanced.php */ + 'titlePlaceholder' => apply_filters( 'enter_title_here', __( 'Add title' ), $post ), + 'bodyPlaceholder' => $body_placeholder, + 'isRTL' => is_rtl(), + 'autosaveInterval' => 10, + 'maxUploadFileSize' => $max_upload_size, + 'allowedMimeTypes' => get_allowed_mime_types(), + 'styles' => $styles, + 'postLock' => $lock_details, + 'postLockUtils' => array( + 'nonce' => wp_create_nonce( 'lock-post_' . $post->ID ), + 'unlockNonce' => wp_create_nonce( 'update-post_' . $post->ID ), + 'ajaxUrl' => admin_url( 'admin-ajax.php' ), + ), +); + +$autosave = wp_get_post_autosave( $post_ID ); +if ( $autosave ) { + if ( mysql2date( 'U', $autosave->post_modified_gmt, false ) > mysql2date( 'U', $post->post_modified_gmt, false ) ) { + $editor_settings['autosave'] = array( + 'editLink' => get_edit_post_link( $autosave->ID ), + ); + } else { + wp_delete_post_revision( $autosave->ID ); + } +} + +if ( false !== $color_palette ) { + $editor_settings['colors'] = $color_palette; +} + +if ( ! empty( $font_sizes ) ) { + $editor_settings['fontSizes'] = $font_sizes; +} + +if ( ! empty( $post_type_object->template ) ) { + $editor_settings['template'] = $post_type_object->template; + $editor_settings['templateLock'] = ! empty( $post_type_object->template_lock ) ? $post_type_object->template_lock : false; +} + +// If there's no template set on a new post, use the post format, instead. +if ( $is_new_post && ! isset( $editor_settings['template'] ) && 'post' === $post->post_type ) { + $post_format = get_post_format( $post ); + if ( in_array( $post_format, array( 'audio', 'gallery', 'image', 'quote', 'video' ), true ) ) { + $editor_settings['template'] = array( array( "core/$post_format" ) ); + } +} + +$init_script = <<post_type, + $post->ID, + wp_json_encode( $editor_settings ), + wp_json_encode( $initial_edits ) +); +wp_add_inline_script( 'wp-edit-post', $script ); + +/** + * Scripts + */ +wp_enqueue_media( + array( + 'post' => $post->ID, + ) +); +wp_enqueue_editor(); + +/** + * Styles + */ +wp_enqueue_style( 'wp-edit-post' ); + +/** + * Fires after block assets have been enqueued for the editing interface. + * + * Call `add_action` on any hook before 'admin_enqueue_scripts'. + * + * In the function call you supply, simply use `wp_enqueue_script` and + * `wp_enqueue_style` to add your functionality to the block editor. + * + * @since 5.0.0 + */ +do_action( 'enqueue_block_editor_assets' ); + +require_once( ABSPATH . 'wp-admin/admin-header.php' ); +?> + +
        +

        labels->edit_item ); ?>

        +
        + +
        diff --git a/src/wp-admin/post-new.php b/src/wp-admin/post-new.php index 5eee06a66fd55..db523cf841bc5 100644 --- a/src/wp-admin/post-new.php +++ b/src/wp-admin/post-new.php @@ -72,8 +72,12 @@ /** This filter is documented in wp-admin/post.php */ if ( apply_filters( 'replace_editor', false, $post ) !== true ) { - wp_enqueue_script( 'autosave' ); - include( ABSPATH . 'wp-admin/edit-form-advanced.php' ); + if ( use_block_editor_for_post( $post ) ) { + include( ABSPATH . 'wp-admin/edit-form-blocks.php' ); + } else { + wp_enqueue_script( 'autosave' ); + include( ABSPATH . 'wp-admin/edit-form-advanced.php' ); + } } include( ABSPATH . 'wp-admin/admin-footer.php' ); diff --git a/src/wp-admin/post.php b/src/wp-admin/post.php index dbfb156430760..897ff1dd71672 100644 --- a/src/wp-admin/post.php +++ b/src/wp-admin/post.php @@ -156,6 +156,11 @@ break; } + if ( use_block_editor_for_post( $post ) ) { + include( ABSPATH . 'wp-admin/edit-form-blocks.php' ); + break; + } + if ( ! wp_check_post_lock( $post->ID ) ) { $active_post_lock = wp_set_post_lock( $post->ID ); From 9673e834e0b0cdb9c8c2c927cba2cf309edc9a71 Mon Sep 17 00:00:00 2001 From: Gary Pendergast Date: Wed, 24 Oct 2018 08:59:21 +0000 Subject: [PATCH 521/537] Block Editor: Remove some errant debugging included in [43815]. Props bordoni. See #45037. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43816 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/edit-form-blocks.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/wp-admin/edit-form-blocks.php b/src/wp-admin/edit-form-blocks.php index 0d606382c1cc8..d998a11dad4c4 100644 --- a/src/wp-admin/edit-form-blocks.php +++ b/src/wp-admin/edit-form-blocks.php @@ -187,8 +187,7 @@ if ( $editor_styles && current_theme_supports( 'editor-styles' ) ) { foreach ( $editor_styles as $style ) { if ( preg_match( '~^(https?:)?//~', $style ) ) { - //$response = wp_remote_get( $style ); - var_dump( $response ); + $response = wp_remote_get( $style ); if ( ! is_wp_error( $response ) ) { $styles[] = array( 'css' => wp_remote_retrieve_body( $response ), From c524dc9915f50608b2f6d2d76042912936bcc128 Mon Sep 17 00:00:00 2001 From: Anton Timmermans Date: Wed, 24 Oct 2018 09:56:30 +0000 Subject: [PATCH 522/537] Build tools: Build webpack dev in `grunt build`. For the WordPress zip we need both the minified and non-minified files. This is because of `SCRIPT_DEBUG`. So in `grunt build` we need to do both `grunt webpack:prod` and `grunt webpack:dev`. Props bordoni. Fixes #45156. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43817 602fd350-edb4-49c9-b593-d223f7449a82 --- Gruntfile.js | 1 + 1 file changed, 1 insertion(+) diff --git a/Gruntfile.js b/Gruntfile.js index 7bba49275b444..ad755c7aaab65 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -937,6 +937,7 @@ module.exports = function(grunt) { 'includes:embed', 'usebanner', 'webpack:prod', + 'webpack:dev', 'jsvalidate:build' ] ); From efce353424a1c04b605045998bf01f9b053c3e2c Mon Sep 17 00:00:00 2001 From: Gary Pendergast Date: Wed, 24 Oct 2018 11:47:56 +0000 Subject: [PATCH 523/537] Scripts: Add a missing date format to the `wp-date` config. `wp-date` recently added the `datetimeAbbreviated` format, but the config wasn't sending it on page load. Fixes #45158. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43818 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/script-loader.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/wp-includes/script-loader.php b/src/wp-includes/script-loader.php index b1718c2602f45..afe8c98c6a19a 100644 --- a/src/wp-includes/script-loader.php +++ b/src/wp-includes/script-loader.php @@ -408,9 +408,10 @@ function wp_default_packages_inline_scripts( &$scripts ) { ), ), 'formats' => array( - 'time' => get_option( 'time_format', __( 'g:i a', 'default' ) ), - 'date' => get_option( 'date_format', __( 'F j, Y', 'default' ) ), - 'datetime' => __( 'F j, Y g:i a', 'default' ), + 'time' => get_option( 'time_format', __( 'g:i a', 'default' ) ), + 'date' => get_option( 'date_format', __( 'F j, Y', 'default' ) ), + 'datetime' => __( 'F j, Y g:i a', 'default' ), + 'datetimeAbbreviated' => __( 'M j, Y g:i a', 'default' ), ), 'timezone' => array( 'offset' => get_option( 'gmt_offset', 0 ), From 5a3ad21aeb0c10d3ec3489d24e420ec6ed360aa0 Mon Sep 17 00:00:00 2001 From: Aaron Jorbin Date: Wed, 24 Oct 2018 16:32:29 +0000 Subject: [PATCH 524/537] php7.3 compatibility: Fix compact throwing notices In PHP 7.3, the compact() function has been changed to issue an E_NOTICE level error if a passed string refers to an unset variable. In previous versions of PHP, this notice was silently skipped. The full RFC can be viewed here: https://wiki.php.net/rfc/compact This fixes all unit tested code that uses compact. Props desrosj. Fixes #44416. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43819 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/class-wp-comment-query.php | 4 +- src/wp-includes/class-wp-xmlrpc-server.php | 69 ++++++++++++-------- src/wp-includes/comment.php | 2 +- src/wp-includes/post.php | 9 ++- tests/phpunit/tests/dependencies/scripts.php | 1 + 5 files changed, 56 insertions(+), 29 deletions(-) diff --git a/src/wp-includes/class-wp-comment-query.php b/src/wp-includes/class-wp-comment-query.php index d781b88a28c6d..78a8218cf4d18 100644 --- a/src/wp-includes/class-wp-comment-query.php +++ b/src/wp-includes/class-wp-comment-query.php @@ -633,6 +633,7 @@ protected function get_comment_ids() { $number = absint( $this->query_vars['number'] ); $offset = absint( $this->query_vars['offset'] ); $paged = absint( $this->query_vars['paged'] ); + $limits = ''; if ( ! empty( $number ) ) { if ( $offset ) { @@ -817,7 +818,8 @@ protected function get_comment_ids() { $this->sql_clauses['where']['post_author__not_in'] = 'post_author NOT IN ( ' . implode( ',', wp_parse_id_list( $this->query_vars['post_author__not_in'] ) ) . ' )'; } - $join = ''; + $join = ''; + $groupby = ''; if ( $join_posts_table ) { $join .= "JOIN $wpdb->posts ON $wpdb->posts.ID = $wpdb->comments.comment_post_ID"; diff --git a/src/wp-includes/class-wp-xmlrpc-server.php b/src/wp-includes/class-wp-xmlrpc-server.php index 826f2efdfed32..d4d7fc3980190 100644 --- a/src/wp-includes/class-wp-xmlrpc-server.php +++ b/src/wp-includes/class-wp-xmlrpc-server.php @@ -3517,6 +3517,10 @@ public function wp_editComment( $args ) { /** This action is documented in wp-includes/class-wp-xmlrpc-server.php */ do_action( 'xmlrpc_call', 'wp.editComment' ); + $comment = array( + 'comment_ID' => $comment_ID, + ); + if ( isset($content_struct['status']) ) { $statuses = get_comment_statuses(); @@ -3524,31 +3528,33 @@ public function wp_editComment( $args ) { if ( ! in_array($content_struct['status'], $statuses) ) return new IXR_Error( 401, __( 'Invalid comment status.' ) ); - $comment_approved = $content_struct['status']; + $comment['comment_approved'] = $content_struct['status']; } // Do some timestamp voodoo if ( !empty( $content_struct['date_created_gmt'] ) ) { // We know this is supposed to be GMT, so we're going to slap that Z on there by force - $dateCreated = rtrim( $content_struct['date_created_gmt']->getIso(), 'Z' ) . 'Z'; - $comment_date = get_date_from_gmt(iso8601_to_datetime($dateCreated)); - $comment_date_gmt = iso8601_to_datetime($dateCreated, 'GMT'); - } - if ( isset($content_struct['content']) ) - $comment_content = $content_struct['content']; + $dateCreated = rtrim( $content_struct['date_created_gmt']->getIso(), 'Z' ) . 'Z'; + $comment['comment_date'] = get_date_from_gmt( iso8601_to_datetime( $dateCreated ) ); + $comment['comment_date_gmt'] = iso8601_to_datetime( $dateCreated, 'GMT' ); + } - if ( isset($content_struct['author']) ) - $comment_author = $content_struct['author']; + if ( isset($content_struct['content']) ) { + $comment['comment_content'] = $content_struct['content']; + } - if ( isset($content_struct['author_url']) ) - $comment_author_url = $content_struct['author_url']; + if ( isset($content_struct['author']) ) { + $comment['comment_author'] = $content_struct['author']; + } - if ( isset($content_struct['author_email']) ) - $comment_author_email = $content_struct['author_email']; + if ( isset($content_struct['author_url']) ) { + $comment['comment_author_url'] = $content_struct['author_url']; + } - // We've got all the data -- post it: - $comment = compact('comment_ID', 'comment_content', 'comment_approved', 'comment_date', 'comment_date_gmt', 'comment_author', 'comment_author_email', 'comment_author_url'); + if ( isset($content_struct['author_email']) ) { + $comment['comment_author_email'] = $content_struct['author_email']; + } $result = wp_update_comment($comment); if ( is_wp_error( $result ) ) @@ -4989,16 +4995,25 @@ public function mw_newPost($args) { $post_name = $content_struct['wp_slug']; // Only use a password if one was given. - if ( isset($content_struct['wp_password']) ) + if ( isset($content_struct['wp_password']) ) { $post_password = $content_struct['wp_password']; + } else { + $post_password = ''; + } // Only set a post parent if one was provided. - if ( isset($content_struct['wp_page_parent_id']) ) + if ( isset($content_struct['wp_page_parent_id']) ) { $post_parent = $content_struct['wp_page_parent_id']; + } else { + $post_parent = 0; + } // Only set the menu_order if it was provided. - if ( isset($content_struct['wp_page_order']) ) + if ( isset($content_struct['wp_page_order']) ) { $menu_order = $content_struct['wp_page_order']; + } else { + $menu_order = 0; + } $post_author = $user->ID; @@ -5308,14 +5323,16 @@ public function mw_editPost( $args ) { $this->escape($postdata); - $ID = $postdata['ID']; - $post_content = $postdata['post_content']; - $post_title = $postdata['post_title']; - $post_excerpt = $postdata['post_excerpt']; - $post_password = $postdata['post_password']; - $post_parent = $postdata['post_parent']; - $post_type = $postdata['post_type']; - $menu_order = $postdata['menu_order']; + $ID = $postdata['ID']; + $post_content = $postdata['post_content']; + $post_title = $postdata['post_title']; + $post_excerpt = $postdata['post_excerpt']; + $post_password = $postdata['post_password']; + $post_parent = $postdata['post_parent']; + $post_type = $postdata['post_type']; + $menu_order = $postdata['menu_order']; + $ping_status = $postdata['ping_status']; + $comment_status = $postdata['comment_status']; // Let WordPress manage slug if none was provided. $post_name = $postdata['post_name']; diff --git a/src/wp-includes/comment.php b/src/wp-includes/comment.php index 2875dc6c2ba0c..97685711bfebb 100644 --- a/src/wp-includes/comment.php +++ b/src/wp-includes/comment.php @@ -2965,7 +2965,7 @@ function _close_comments_for_old_post( $open, $post_id ) { */ function wp_handle_comment_submission( $comment_data ) { - $comment_post_ID = $comment_parent = 0; + $comment_post_ID = $comment_parent = $user_ID = 0; $comment_author = $comment_author_email = $comment_author_url = $comment_content = null; if ( isset( $comment_data['comment_post_ID'] ) ) { diff --git a/src/wp-includes/post.php b/src/wp-includes/post.php index d040f442e28d6..89b76184c3309 100644 --- a/src/wp-includes/post.php +++ b/src/wp-includes/post.php @@ -3415,6 +3415,13 @@ function wp_insert_post( $postarr, $wp_error = false ) { $post_parent = 0; } + $new_postarr = array_merge( + array( + 'ID' => $post_ID, + ), + compact( array_diff( array_keys( $defaults ), array( 'context', 'filter' ) ) ) + ); + /** * Filters the post parent -- used to check for and prevent hierarchy loops. * @@ -3425,7 +3432,7 @@ function wp_insert_post( $postarr, $wp_error = false ) { * @param array $new_postarr Array of parsed post data. * @param array $postarr Array of sanitized, but otherwise unmodified post data. */ - $post_parent = apply_filters( 'wp_insert_post_parent', $post_parent, $post_ID, compact( array_keys( $postarr ) ), $postarr ); + $post_parent = apply_filters( 'wp_insert_post_parent', $post_parent, $post_ID, $new_postarr, $postarr ); /* * If the post is being untrashed and it has a desired slug stored in post meta, diff --git a/tests/phpunit/tests/dependencies/scripts.php b/tests/phpunit/tests/dependencies/scripts.php index 6dfc1ee1cace9..6007a2f402ef0 100644 --- a/tests/phpunit/tests/dependencies/scripts.php +++ b/tests/phpunit/tests/dependencies/scripts.php @@ -861,6 +861,7 @@ public function test_wp_enqueue_code_editor_when_php_file_will_be_passed() { * @covers wp_enqueue_code_editor() */ public function test_wp_enqueue_code_editor_when_generated_array_by_compact_will_be_passed() { + $file = ''; $wp_enqueue_code_editor = wp_enqueue_code_editor( compact( 'file' ) ); $this->assertNonEmptyMultidimensionalArray( $wp_enqueue_code_editor ); From 546e59fe336f2ca1610443a1794c6b3501699225 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Wed, 24 Oct 2018 18:50:35 +0000 Subject: [PATCH 525/537] Upgrade/Install: Convert `Sample Page`, `Hello World`, and `Privacy Policy` to block content. Props desrosj, garrett-eclipse, danielbachhuber. Fixes #45151. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43820 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/misc.php | 296 +++++++++++++++++------------- src/wp-admin/includes/upgrade.php | 28 ++- 2 files changed, 194 insertions(+), 130 deletions(-) diff --git a/src/wp-admin/includes/misc.php b/src/wp-admin/includes/misc.php index b2d7d3bd22c1d..3c414a857a567 100644 --- a/src/wp-admin/includes/misc.php +++ b/src/wp-admin/includes/misc.php @@ -1674,142 +1674,192 @@ public static function privacy_policy_guide() { * Return the default suggested privacy policy content. * * @since 4.9.6 + * @since 5.0.0 Added the `$blocks` parameter. * - * @param bool $descr Whether to include the descriptions under the section headings. Default false. + * @param bool $description Whether to include the descriptions under the section headings. Default false. + * @param bool $blocks Whether to format the content for the block editor. Default true. * @return string The default policy content. */ - public static function get_default_content( $descr = false ) { - $suggested_text = $descr ? '' . __( 'Suggested text:' ) . ' ' : ''; + public static function get_default_content( $description = false, $blocks = true ) { + $suggested_text = $description ? '' . __( 'Suggested text:' ) . ' ' : ''; $content = ''; + $strings = array(); // Start of the suggested privacy policy text. - $descr && $content .= - '
        '; - $content .= - '

        ' . __( 'Who we are' ) . '

        '; - $descr && $content .= - '

        ' . __( 'In this section you should note your site URL, as well as the name of the company, organization, or individual behind it, and some accurate contact information.' ) . '

        ' . - '

        ' . __( 'The amount of information you may be required to show will vary depending on your local or national business regulations. You may, for example, be required to display a physical address, a registered address, or your company registration number.' ) . '

        '; - $content .= - /* translators: %s Site URL */ - '

        ' . $suggested_text . sprintf( __( 'Our website address is: %s.' ), get_bloginfo( 'url', 'display' ) ) . '

        ' . - - '

        ' . __( 'What personal data we collect and why we collect it' ) . '

        '; - $descr && $content .= - '

        ' . __( 'In this section you should note what personal data you collect from users and site visitors. This may include personal data, such as name, email address, personal account preferences; transactional data, such as purchase information; and technical data, such as information about cookies.' ) . '

        ' . - '

        ' . __( 'You should also note any collection and retention of sensitive personal data, such as data concerning health.' ) . '

        ' . - '

        ' . __( 'In addition to listing what personal data you collect, you need to note why you collect it. These explanations must note either the legal basis for your data collection and retention or the active consent the user has given.' ) . '

        ' . - '

        ' . __( 'Personal data is not just created by a user’s interactions with your site. Personal data is also generated from technical processes such as contact forms, comments, cookies, analytics, and third party embeds.' ) . '

        ' . - '

        ' . __( 'By default WordPress does not collect any personal data about visitors, and only collects the data shown on the User Profile screen from registered users. However some of your plugins may collect personal data. You should add the relevant information below.' ) . '

        '; - - $content .= - '

        ' . __( 'Comments' ) . '

        '; - $descr && $content .= - '

        ' . __( 'In this subsection you should note what information is captured through comments. We have noted the data which WordPress collects by default.' ) . '

        '; - $content .= - '

        ' . $suggested_text . __( 'When visitors leave comments on the site we collect the data shown in the comments form, and also the visitor’s IP address and browser user agent string to help spam detection.' ) . '

        ' . - '

        ' . __( 'An anonymized string created from your email address (also called a hash) may be provided to the Gravatar service to see if you are using it. The Gravatar service privacy policy is available here: https://automattic.com/privacy/. After approval of your comment, your profile picture is visible to the public in the context of your comment.' ) . '

        ' . - - '

        ' . __( 'Media' ) . '

        '; - $descr && $content .= - '

        ' . __( 'In this subsection you should note what information may be disclosed by users who can upload media files. All uploaded files are usually publicly accessible.' ) . '

        '; - $content .= - '

        ' . $suggested_text . __( 'If you upload images to the website, you should avoid uploading images with embedded location data (EXIF GPS) included. Visitors to the website can download and extract any location data from images on the website.' ) . '

        ' . - - '

        ' . __( 'Contact forms' ) . '

        '; - $descr && $content .= - '

        ' . __( 'By default, WordPress does not include a contact form. If you use a contact form plugin, use this subsection to note what personal data is captured when someone submits a contact form, and how long you keep it. For example, you may note that you keep contact form submissions for a certain period for customer service purposes, but you do not use the information submitted through them for marketing purposes.' ) . '

        '; - - $content .= - '

        ' . __( 'Cookies' ) . '

        '; - $descr && $content .= - '

        ' . __( 'In this subsection you should list the cookies your web site uses, including those set by your plugins, social media, and analytics. We have provided the cookies which WordPress installs by default.' ) . '

        '; - $content .= - '

        ' . $suggested_text . __( 'If you leave a comment on our site you may opt-in to saving your name, email address and website in cookies. These are for your convenience so that you do not have to fill in your details again when you leave another comment. These cookies will last for one year.' ) . '

        ' . - '

        ' . __( 'If you have an account and you log in to this site, we will set a temporary cookie to determine if your browser accepts cookies. This cookie contains no personal data and is discarded when you close your browser.' ) . '

        ' . - '

        ' . __( 'When you log in, we will also set up several cookies to save your login information and your screen display choices. Login cookies last for two days, and screen options cookies last for a year. If you select "Remember Me", your login will persist for two weeks. If you log out of your account, the login cookies will be removed.' ) . '

        ' . - '

        ' . __( 'If you edit or publish an article, an additional cookie will be saved in your browser. This cookie includes no personal data and simply indicates the post ID of the article you just edited. It expires after 1 day.' ) . '

        ' . - - '

        ' . __( 'Embedded content from other websites' ) . '

        ' . - '

        ' . $suggested_text . __( 'Articles on this site may include embedded content (e.g. videos, images, articles, etc.). Embedded content from other websites behaves in the exact same way as if the visitor has visited the other website.' ) . '

        ' . - '

        ' . __( 'These websites may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with that embedded content, including tracking your interaction with the embedded content if you have an account and are logged in to that website.' ) . '

        ' . - - '

        ' . __( 'Analytics' ) . '

        '; - $descr && $content .= - '

        ' . __( 'In this subsection you should note what analytics package you use, how users can opt out of analytics tracking, and a link to your analytics provider’s privacy policy, if any.' ) . '

        ' . - '

        ' . __( 'By default WordPress does not collect any analytics data. However, many web hosting accounts collect some anonymous analytics data. You may also have installed a WordPress plugin that provides analytics services. In that case, add information from that plugin here.' ) . '

        '; - - $content .= - '

        ' . __( 'Who we share your data with' ) . '

        '; - $descr && $content .= - '

        ' . __( 'In this section you should name and list all third party providers with whom you share site data, including partners, cloud-based services, payment processors, and third party service providers, and note what data you share with them and why. Link to their own privacy policies if possible.' ) . '

        ' . - '

        ' . __( 'By default WordPress does not share any personal data with anyone.' ) . '

        '; - - $content .= - '

        ' . __( 'How long we retain your data' ) . '

        '; - $descr && $content .= - '

        ' . __( 'In this section you should explain how long you retain personal data collected or processed by the web site. While it is your responsibility to come up with the schedule of how long you keep each dataset for and why you keep it, that information does need to be listed here. For example, you may want to say that you keep contact form entries for six months, analytics records for a year, and customer purchase records for ten years.' ) . '

        '; - $content .= - '

        ' . $suggested_text . __( 'If you leave a comment, the comment and its metadata are retained indefinitely. This is so we can recognize and approve any follow-up comments automatically instead of holding them in a moderation queue.' ) . '

        ' . - '

        ' . __( 'For users that register on our website (if any), we also store the personal information they provide in their user profile. All users can see, edit, or delete their personal information at any time (except they cannot change their username). Website administrators can also see and edit that information.' ) . '

        ' . - - '

        ' . __( 'What rights you have over your data' ) . '

        '; - $descr && $content .= - '

        ' . __( 'In this section you should explain what rights your users have over their data and how they can invoke those rights.' ) . '

        '; - $content .= - '

        ' . $suggested_text . __( 'If you have an account on this site, or have left comments, you can request to receive an exported file of the personal data we hold about you, including any data you have provided to us. You can also request that we erase any personal data we hold about you. This does not include any data we are obliged to keep for administrative, legal, or security purposes.' ) . '

        ' . - - '

        ' . __( 'Where we send your data' ) . '

        '; - $descr && $content .= - '

        ' . __( 'In this section you should list all transfers of your site data outside the European Union and describe the means by which that data is safeguarded to European data protection standards. This could include your web hosting, cloud storage, or other third party services.' ) . '

        ' . - '

        ' . __( 'European data protection law requires data about European residents which is transferred outside the European Union to be safeguarded to the same standards as if the data was in Europe. So in addition to listing where data goes, you should describe how you ensure that these standards are met either by yourself or by your third party providers, whether that is through an agreement such as Privacy Shield, model clauses in your contracts, or binding corporate rules.' ) . '

        '; - $content .= - '

        ' . $suggested_text . __( 'Visitor comments may be checked through an automated spam detection service.' ) . '

        ' . - - '

        ' . __( 'Your contact information' ) . '

        '; - $descr && $content .= - '

        ' . __( 'In this section you should provide a contact method for privacy-specific concerns. If you are required to have a Data Protection Officer, list their name and full contact details here as well.' ) . '

        '; - - $content .= - '

        ' . __( 'Additional information' ) . '

        '; - $descr && $content .= - '

        ' . __( 'If you use your site for commercial purposes and you engage in more complex collection or processing of personal data, you should note the following information in your privacy policy in addition to the information we have already discussed.' ) . '

        '; - - $content .= - '

        ' . __( 'How we protect your data' ) . '

        '; - $descr && $content .= - '

        ' . __( 'In this section you should explain what measures you have taken to protect your users’ data. This could include technical measures such as encryption; security measures such as two factor authentication; and measures such as staff training in data protection. If you have carried out a Privacy Impact Assessment, you can mention it here too.' ) . '

        '; - - $content .= - '

        ' . __( 'What data breach procedures we have in place' ) . '

        '; - $descr && $content .= - '

        ' . __( 'In this section you should explain what procedures you have in place to deal with data breaches, either potential or real, such as internal reporting systems, contact mechanisms, or bug bounties.' ) . '

        '; - - $content .= - '

        ' . __( 'What third parties we receive data from' ) . '

        '; - $descr && $content .= - '

        ' . __( 'If your web site receives data about users from third parties, including advertisers, this information must be included within the section of your privacy policy dealing with third party data.' ) . '

        '; - - $content .= - '

        ' . __( 'What automated decision making and/or profiling we do with user data' ) . '

        '; - $descr && $content .= - '

        ' . __( 'If your web site provides a service which includes automated decision making - for example, allowing customers to apply for credit, or aggregating their data into an advertising profile - you must note that this is taking place, and include information about how that information is used, what decisions are made with that aggregated data, and what rights users have over decisions made without human intervention.' ) . '

        '; - - $content .= - '

        ' . __( 'Industry regulatory disclosure requirements' ) . '

        '; - $descr && $content .= - '

        ' . __( 'If you are a member of a regulated industry, or if you are subject to additional privacy laws, you may be required to disclose that information here.' ) . '

        ' . - '
        '; + if ( $description ) { + $strings[] = '
        '; + } + + $strings[] = '

        ' . __( 'Who we are' ) . '

        '; + + if ( $description ) { + $strings[] = '

        ' . __( 'In this section you should note your site URL, as well as the name of the company, organization, or individual behind it, and some accurate contact information.' ) . '

        '; + $strings[] = '

        ' . __( 'The amount of information you may be required to show will vary depending on your local or national business regulations. You may, for example, be required to display a physical address, a registered address, or your company registration number.' ) . '

        '; + } + + /* translators: %s Site URL */ + $strings[] = '

        ' . $suggested_text . sprintf( __( 'Our website address is: %s.' ), get_bloginfo( 'url', 'display' ) ) . '

        '; + + $strings[] = '

        ' . __( 'What personal data we collect and why we collect it' ) . '

        '; + + if ( $description ) { + $strings[] = '

        ' . __( 'In this section you should note what personal data you collect from users and site visitors. This may include personal data, such as name, email address, personal account preferences; transactional data, such as purchase information; and technical data, such as information about cookies.' ) . '

        '; + $strings[] = '

        ' . __( 'You should also note any collection and retention of sensitive personal data, such as data concerning health.' ) . '

        '; + $strings[] = '

        ' . __( 'In addition to listing what personal data you collect, you need to note why you collect it. These explanations must note either the legal basis for your data collection and retention or the active consent the user has given.' ) . '

        '; + $strings[] = '

        ' . __( 'Personal data is not just created by a user’s interactions with your site. Personal data is also generated from technical processes such as contact forms, comments, cookies, analytics, and third party embeds.' ) . '

        '; + $strings[] = '

        ' . __( 'By default WordPress does not collect any personal data about visitors, and only collects the data shown on the User Profile screen from registered users. However some of your plugins may collect personal data. You should add the relevant information below.' ) . '

        '; + } + + $strings[] = '

        ' . __( 'Comments' ) . '

        '; + + if ( $description ) { + $strings[] = '

        ' . __( 'In this subsection you should note what information is captured through comments. We have noted the data which WordPress collects by default.' ) . '

        '; + } + + $strings[] = '

        ' . $suggested_text . __( 'When visitors leave comments on the site we collect the data shown in the comments form, and also the visitor’s IP address and browser user agent string to help spam detection.' ) . '

        '; + $strings[] = '

        ' . __( 'An anonymized string created from your email address (also called a hash) may be provided to the Gravatar service to see if you are using it. The Gravatar service privacy policy is available here: https://automattic.com/privacy/. After approval of your comment, your profile picture is visible to the public in the context of your comment.' ) . '

        '; + $strings[] = '

        ' . __( 'Media' ) . '

        '; + + if ( $description ) { + $strings[] = '

        ' . __( 'In this subsection you should note what information may be disclosed by users who can upload media files. All uploaded files are usually publicly accessible.' ) . '

        '; + } + + $strings[] = '

        ' . $suggested_text . __( 'If you upload images to the website, you should avoid uploading images with embedded location data (EXIF GPS) included. Visitors to the website can download and extract any location data from images on the website.' ) . '

        '; + $strings[] = '

        ' . __( 'Contact forms' ) . '

        '; + + if ( $description ) { + $strings[] = '

        ' . __( 'By default, WordPress does not include a contact form. If you use a contact form plugin, use this subsection to note what personal data is captured when someone submits a contact form, and how long you keep it. For example, you may note that you keep contact form submissions for a certain period for customer service purposes, but you do not use the information submitted through them for marketing purposes.' ) . '

        '; + } + + $strings[] = '

        ' . __( 'Cookies' ) . '

        '; + + if ( $description ) { + $strings[] = '

        ' . __( 'In this subsection you should list the cookies your web site uses, including those set by your plugins, social media, and analytics. We have provided the cookies which WordPress installs by default.' ) . '

        '; + } + + $strings[] = '

        ' . $suggested_text . __( 'If you leave a comment on our site you may opt-in to saving your name, email address and website in cookies. These are for your convenience so that you do not have to fill in your details again when you leave another comment. These cookies will last for one year.' ) . '

        '; + $strings[] = '

        ' . __( 'If you have an account and you log in to this site, we will set a temporary cookie to determine if your browser accepts cookies. This cookie contains no personal data and is discarded when you close your browser.' ) . '

        '; + $strings[] = '

        ' . __( 'When you log in, we will also set up several cookies to save your login information and your screen display choices. Login cookies last for two days, and screen options cookies last for a year. If you select "Remember Me", your login will persist for two weeks. If you log out of your account, the login cookies will be removed.' ) . '

        '; + $strings[] = '

        ' . __( 'If you edit or publish an article, an additional cookie will be saved in your browser. This cookie includes no personal data and simply indicates the post ID of the article you just edited. It expires after 1 day.' ) . '

        '; + + $strings[] = '

        ' . __( 'Embedded content from other websites' ) . '

        '; + $strings[] = '

        ' . $suggested_text . __( 'Articles on this site may include embedded content (e.g. videos, images, articles, etc.). Embedded content from other websites behaves in the exact same way as if the visitor has visited the other website.' ) . '

        '; + $strings[] = '

        ' . __( 'These websites may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with that embedded content, including tracking your interaction with the embedded content if you have an account and are logged in to that website.' ) . '

        '; + + $strings[] = '

        ' . __( 'Analytics' ) . '

        '; + + if ( $description ) { + $strings[] = '

        ' . __( 'In this subsection you should note what analytics package you use, how users can opt out of analytics tracking, and a link to your analytics provider’s privacy policy, if any.' ) . '

        '; + $strings[] = '

        ' . __( 'By default WordPress does not collect any analytics data. However, many web hosting accounts collect some anonymous analytics data. You may also have installed a WordPress plugin that provides analytics services. In that case, add information from that plugin here.' ) . '

        '; + } + + $strings[] = '

        ' . __( 'Who we share your data with' ) . '

        '; + + if ( $description ) { + $strings[] = '

        ' . __( 'In this section you should name and list all third party providers with whom you share site data, including partners, cloud-based services, payment processors, and third party service providers, and note what data you share with them and why. Link to their own privacy policies if possible.' ) . '

        '; + $strings[] = '

        ' . __( 'By default WordPress does not share any personal data with anyone.' ) . '

        '; + } + + $strings[] = '

        ' . __( 'How long we retain your data' ) . '

        '; + + if ( $description ) { + $strings[] = '

        ' . __( 'In this section you should explain how long you retain personal data collected or processed by the web site. While it is your responsibility to come up with the schedule of how long you keep each dataset for and why you keep it, that information does need to be listed here. For example, you may want to say that you keep contact form entries for six months, analytics records for a year, and customer purchase records for ten years.' ) . '

        '; + } + + $strings[] = '

        ' . $suggested_text . __( 'If you leave a comment, the comment and its metadata are retained indefinitely. This is so we can recognize and approve any follow-up comments automatically instead of holding them in a moderation queue.' ) . '

        '; + $strings[] = '

        ' . __( 'For users that register on our website (if any), we also store the personal information they provide in their user profile. All users can see, edit, or delete their personal information at any time (except they cannot change their username). Website administrators can also see and edit that information.' ) . '

        '; + + $strings[] = '

        ' . __( 'What rights you have over your data' ) . '

        '; + + if ( $description ) { + $strings[] = '

        ' . __( 'In this section you should explain what rights your users have over their data and how they can invoke those rights.' ) . '

        '; + } + + $strings[] = '

        ' . $suggested_text . __( 'If you have an account on this site, or have left comments, you can request to receive an exported file of the personal data we hold about you, including any data you have provided to us. You can also request that we erase any personal data we hold about you. This does not include any data we are obliged to keep for administrative, legal, or security purposes.' ) . '

        '; + + $strings[] = '

        ' . __( 'Where we send your data' ) . '

        '; + + if ( $description ) { + $strings[] = '

        ' . __( 'In this section you should list all transfers of your site data outside the European Union and describe the means by which that data is safeguarded to European data protection standards. This could include your web hosting, cloud storage, or other third party services.' ) . '

        '; + $strings[] = '

        ' . __( 'European data protection law requires data about European residents which is transferred outside the European Union to be safeguarded to the same standards as if the data was in Europe. So in addition to listing where data goes, you should describe how you ensure that these standards are met either by yourself or by your third party providers, whether that is through an agreement such as Privacy Shield, model clauses in your contracts, or binding corporate rules.' ) . '

        '; + } + + $strings[] = '

        ' . $suggested_text . __( 'Visitor comments may be checked through an automated spam detection service.' ) . '

        '; + + $strings[] = '

        ' . __( 'Your contact information' ) . '

        '; + + if ( $description ) { + $strings[] = '

        ' . __( 'In this section you should provide a contact method for privacy-specific concerns. If you are required to have a Data Protection Officer, list their name and full contact details here as well.' ) . '

        '; + } + + $strings[] = '

        ' . __( 'Additional information' ) . '

        '; + + if ( $description ) { + $strings[] = '

        ' . __( 'If you use your site for commercial purposes and you engage in more complex collection or processing of personal data, you should note the following information in your privacy policy in addition to the information we have already discussed.' ) . '

        '; + } + + $strings[] = '

        ' . __( 'How we protect your data' ) . '

        '; + + if ( $description ) { + $strings[] = '

        ' . __( 'In this section you should explain what measures you have taken to protect your users’ data. This could include technical measures such as encryption; security measures such as two factor authentication; and measures such as staff training in data protection. If you have carried out a Privacy Impact Assessment, you can mention it here too.' ) . '

        '; + } + + $strings[] = '

        ' . __( 'What data breach procedures we have in place' ) . '

        '; + + if ( $description ) { + $strings[] = '

        ' . __( 'In this section you should explain what procedures you have in place to deal with data breaches, either potential or real, such as internal reporting systems, contact mechanisms, or bug bounties.' ) . '

        '; + } + + $strings[] = '

        ' . __( 'What third parties we receive data from' ) . '

        '; + + if ( $description ) { + $strings[] = '

        ' . __( 'If your web site receives data about users from third parties, including advertisers, this information must be included within the section of your privacy policy dealing with third party data.' ) . '

        '; + } + + $strings[] = '

        ' . __( 'What automated decision making and/or profiling we do with user data' ) . '

        '; + + if ( $description ) { + $strings[] = '

        ' . __( 'If your web site provides a service which includes automated decision making - for example, allowing customers to apply for credit, or aggregating their data into an advertising profile - you must note that this is taking place, and include information about how that information is used, what decisions are made with that aggregated data, and what rights users have over decisions made without human intervention.' ) . '

        '; + } + + $strings[] = '

        ' . __( 'Industry regulatory disclosure requirements' ) . '

        '; + + if ( $description ) { + $strings[] = '

        ' . __( 'If you are a member of a regulated industry, or if you are subject to additional privacy laws, you may be required to disclose that information here.' ) . '

        '; + $strings[] = '
        '; + } + + if ( $blocks ) { + foreach ( $strings as $key => $string ) { + if ( 0 === strpos( $string, '

        ' ) ) { + $strings[ $key ] = '' . $string . ''; + } + + if ( 0 === strpos( $string, '

        ' ) ) { + $strings[ $key ] = '' . $string . ''; + } + + if ( 0 === strpos( $string, '

        ' ) ) { + $strings[ $key ] = '' . $string . ''; + } + } + } + + $content = implode( '', $strings ); // End of the suggested privacy policy text. /** * Filters the default content suggested for inclusion in a privacy policy. * * @since 4.9.6 + * @since 5.0.0 Added the `$strings`, `$description`, and `$blocks` parameters. * - * @param $content string The default policy content. + * @param $content string The default policy content. + * @param $strings array An array of privacy policy content strings. + * @param $description bool Whether policy descriptions should be included. + * @param $blocks bool Whether the content should be formatted for the block editor. */ - return apply_filters( 'wp_get_default_privacy_policy_content', $content ); + return apply_filters( 'wp_get_default_privacy_policy_content', $content, $strings, $description, $blocks ); } /** @@ -1818,7 +1868,7 @@ public static function get_default_content( $descr = false ) { * @since 4.9.6 */ public static function add_suggested_content() { - $content = self::get_default_content( true ); + $content = self::get_default_content( true, false ); wp_add_privacy_policy_content( __( 'WordPress' ), $content ); } } diff --git a/src/wp-admin/includes/upgrade.php b/src/wp-admin/includes/upgrade.php index bf3b7ddedede7..f36d2d0c02714 100644 --- a/src/wp-admin/includes/upgrade.php +++ b/src/wp-admin/includes/upgrade.php @@ -160,7 +160,9 @@ function wp_install_defaults( $user_id ) { if ( ! $first_post ) { /* translators: %s: site link */ - $first_post = __( 'Welcome to %s. This is your first post. Edit or delete it, then start blogging!' ); + $first_post = __( ' +

        Welcome to %s. This is your first post. Edit or delete it, then start writing!

        +' ); } $first_post = sprintf( $first_post, @@ -171,7 +173,9 @@ function wp_install_defaults( $user_id ) { $first_post = str_replace( 'SITE_URL', esc_url( network_home_url() ), $first_post ); $first_post = str_replace( 'SITE_NAME', get_network()->site_name, $first_post ); } else { - $first_post = __( 'Welcome to WordPress. This is your first post. Edit or delete it, then start writing!' ); + $first_post = __( ' +

        Welcome to WordPress. This is your first post. Edit or delete it, then start writing!

        +' ); } $wpdb->insert( $wpdb->posts, array( @@ -221,15 +225,25 @@ function wp_install_defaults( $user_id ) { if ( is_multisite() ) $first_page = get_site_option( 'first_page' ); - $first_page = ! empty( $first_page ) ? $first_page : sprintf( __( "This is an example page. It's different from a blog post because it will stay in one place and will show up in your site navigation (in most themes). Most people start with an About page that introduces them to potential site visitors. It might say something like this: + $first_page = ! empty( $first_page ) ? $first_page : sprintf( __( " +

        This is an example page. It's different from a blog post because it will stay in one place and will show up in your site navigation (in most themes). Most people start with an About page that introduces them to potential site visitors. It might say something like this:

        + -
        Hi there! I'm a bike messenger by day, aspiring actor by night, and this is my website. I live in Los Angeles, have a great dog named Jack, and I like piña coladas. (And gettin' caught in the rain.)
        + +

        Hi there! I'm a bike messenger by day, aspiring actor by night, and this is my website. I live in Los Angeles, have a great dog named Jack, and I like piña coladas. (And gettin' caught in the rain.)

        + -...or something like this: + +

        ...or something like this:

        + -
        The XYZ Doohickey Company was founded in 1971, and has been providing quality doohickeys to the public ever since. Located in Gotham City, XYZ employs over 2,000 people and does all kinds of awesome things for the Gotham community.
        + +

        The XYZ Doohickey Company was founded in 1971, and has been providing quality doohickeys to the public ever since. Located in Gotham City, XYZ employs over 2,000 people and does all kinds of awesome things for the Gotham community.

        + -As a new WordPress user, you should go to your dashboard to delete this page and create new pages for your content. Have fun!" ), admin_url() ); + +

        As a new WordPress user, you should go to your dashboard to delete this page and create new pages for your content. Have fun!

        +" ), admin_url() ); $first_post_guid = get_option('home') . '/?page_id=2'; $wpdb->insert( $wpdb->posts, array( From 5cf0de4e92659341ac1373814e7dd10d742634ed Mon Sep 17 00:00:00 2001 From: "Dominik Schilling (ocean90)" Date: Wed, 24 Oct 2018 21:00:26 +0000 Subject: [PATCH 526/537] Bundled Themes: Remove languages folder with POT file from Twenty Nineteen. POT files are no longer required. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43821 602fd350-edb4-49c9-b593-d223f7449a82 --- .../themes/twentynineteen/languages/ip3.pot | 186 ------------------ 1 file changed, 186 deletions(-) delete mode 100644 src/wp-content/themes/twentynineteen/languages/ip3.pot diff --git a/src/wp-content/themes/twentynineteen/languages/ip3.pot b/src/wp-content/themes/twentynineteen/languages/ip3.pot deleted file mode 100644 index d8d292ff07558..0000000000000 --- a/src/wp-content/themes/twentynineteen/languages/ip3.pot +++ /dev/null @@ -1,186 +0,0 @@ -# Copyright (C) 2017 Automattic -# This file is distributed under the GNU General Public License v2 or later. -msgid "" -msgstr "" -"Project-Id-Version: _s 1.0\n" -"Report-Msgid-Bugs-To: https://wordpress.org/tags/_s\n" -"POT-Creation-Date: 2016-12-23 16:00+0100\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2017-MO-DA HO:MI+ZONE\n" -"Last-Translator:\n" -"Language-Team: LANGUAGE \n" -"X-Generator: grunt-wp-i18n 0.5.4\n" - -#: 404.php:17 -msgid "Oops! That page can’t be found." -msgstr "" - -#: 404.php:21 -msgid "" -"It looks like nothing was found at this location. Maybe try one of the " -"links below or a search?" -msgstr "" - -#: 404.php:30 -msgid "Most Used Categories" -msgstr "" - -#: 404.php:47 -#. translators: %1$s: smiley -msgid "Try looking in the monthly archives. %1$s" -msgstr "" - -#: comments.php:34 -#. translators: 1: title. -msgid "One thought on “%1$s”" -msgstr "" - -#: comments.php:67 -msgid "Comments are closed." -msgstr "" - -#: footer.php:18 -msgid "https://wordpress.org/" -msgstr "" - -#: footer.php:20 -#. translators: %s: CMS name, i.e. WordPress. -msgid "Proudly powered by %s" -msgstr "" - -#: footer.php:25 -#. translators: 1: Theme name, 2: Theme author. -msgid "Theme: %1$s by %2$s." -msgstr "" - -#: functions.php:47 -msgid "Primary" -msgstr "" - -#: functions.php:105 -msgid "Sidebar" -msgstr "" - -#: functions.php:107 -msgid "Add widgets here." -msgstr "" - -#: header.php:24 -msgid "Skip to content" -msgstr "" - -#: header.php:45 -msgid "Primary Menu" -msgstr "" - -#: inc/template-tags.php:52 -#. translators: used between list items, there is a space after the comma -msgid ", " -msgstr "" - -#: inc/template-tags.php:55 -#. translators: 1: list of categories. -msgid "Posted in %1$s" -msgstr "" - -#: inc/template-tags.php:62 -#. translators: 1: list of tags. -msgid "Tagged %1$s" -msgstr "" - -#: inc/template-tags.php:72 -#. translators: %s: post title -msgid "Leave a Comment on %s" -msgstr "" - -#: inc/template-tags.php:89 template-parts/content-page.php:35 -#. translators: %s: Name of current post. Only visible to screen readers -msgid "Edit %s" -msgstr "" - -#: search.php:21 -#. translators: %s: search query. -msgid "Search Results for: %s" -msgstr "" - -#: template-parts/content-none.php:14 -msgid "Nothing Found" -msgstr "" - -#: template-parts/content-none.php:25 -#. translators: 1: link to WP admin new post page. -msgid "Ready to publish your first post? Get started here." -msgstr "" - -#: template-parts/content-none.php:38 -msgid "" -"Sorry, but nothing matched your search terms. Please try again with some " -"different keywords." -msgstr "" - -#: template-parts/content-none.php:44 -msgid "" -"It seems we can’t find what you’re looking for. Perhaps " -"searching can help." -msgstr "" - -#: template-parts/content-page.php:22 template-parts/content.php:45 -msgid "Pages:" -msgstr "" - -#: template-parts/content.php:34 -#. translators: %s: Name of current post. Only visible to screen readers -msgid "Continue reading \"%s\"" -msgstr "" - -#. Theme Name of the plugin/theme -msgid "_s" -msgstr "" - -#. Theme URI of the plugin/theme -msgid "https://underscores.me/" -msgstr "" - -#. Description of the plugin/theme -msgid "" -"Hi. I'm a starter theme called _s, or underscores, if " -"you like. I'm a theme meant for hacking so don't use me as a Parent " -"Theme. Instead try turning me into the next, most awesome, WordPress " -"theme out there. That's what I'm here for." -msgstr "" - -#. Author of the plugin/theme -msgid "Automattic" -msgstr "" - -#. Author URI of the plugin/theme -msgid "https://automattic.com/" -msgstr "" - -#: comments.php:40 -#. translators: 1: comment count number, 2: title. -msgctxt "comments title" -msgid "%1$s thought on “%2$s”" -msgid_plural "%1$s thoughts on “%2$s”" -msgstr[0] "" -msgstr[1] "" - -#: inc/template-tags.php:29 -#. translators: %s: post date. -msgctxt "post date" -msgid "Posted on %s" -msgstr "" - -#: inc/template-tags.php:35 -#. translators: %s: post author. -msgctxt "post author" -msgid "by %s" -msgstr "" - -#: inc/template-tags.php:59 -#. translators: used between list items, there is a space after the comma -msgctxt "list item separator" -msgid ", " -msgstr "" From cef611a087129dbbee70f311818ada8459a8ad94 Mon Sep 17 00:00:00 2001 From: Gary Pendergast Date: Wed, 24 Oct 2018 21:37:45 +0000 Subject: [PATCH 527/537] WordPress 5.0 Beta 1. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43822 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/version.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wp-includes/version.php b/src/wp-includes/version.php index 7550eb7ddb1f3..b4a4910d81d75 100644 --- a/src/wp-includes/version.php +++ b/src/wp-includes/version.php @@ -4,7 +4,7 @@ * * @global string $wp_version */ -$wp_version = '5.0-alpha-43676-src'; +$wp_version = '5.0-beta1-src'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema. From 4452b29fb8bd668d6e580e98f8f0c48458e8313f Mon Sep 17 00:00:00 2001 From: Gary Pendergast Date: Wed, 24 Oct 2018 21:53:25 +0000 Subject: [PATCH 528/537] Post WordPress 5.0 Beta 1 version bump. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43823 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/version.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wp-includes/version.php b/src/wp-includes/version.php index b4a4910d81d75..2bab60503f867 100644 --- a/src/wp-includes/version.php +++ b/src/wp-includes/version.php @@ -4,7 +4,7 @@ * * @global string $wp_version */ -$wp_version = '5.0-beta1-src'; +$wp_version = '5.0-beta1-43823-src'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema. From 6da9e42b2639a6c0e427ccb625761927114ba14e Mon Sep 17 00:00:00 2001 From: Anton Timmermans Date: Thu, 25 Oct 2018 13:42:03 +0000 Subject: [PATCH 529/537] Build tools: Clone and build from packages repo. Instead of requiring the packages individually this commit changes it so the packages are used from the packages repository (gutenberg). This is a solution that makes updating the packages easier, as long as we don't have a monorepo to manage both WordPress & the JavaScript packages together. Props youknowriad, gziolo, omarreiss, herregroen. See #45145. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43824 602fd350-edb4-49c9-b593-d223f7449a82 --- .gitignore | 1 + Gruntfile.js | 21 + package-lock.json | 1325 +++---------------------------------- package.json | 40 +- tools/webpack/packages.js | 7 +- 5 files changed, 130 insertions(+), 1264 deletions(-) diff --git a/.gitignore b/.gitignore index 948c11f00eaa2..63a4054504b26 100644 --- a/.gitignore +++ b/.gitignore @@ -22,6 +22,7 @@ wp-tests-config.php /vendor /src/wp-includes/js/dist /src/wp-includes/css/dist +/packages # Files and folders that get created in wp-content /src/wp-content/blogs.dir diff --git a/Gruntfile.js b/Gruntfile.js index ad755c7aaab65..35ee220bde797 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1,6 +1,7 @@ /* jshint node:true */ /* globals Set */ var webpackConfig = require( './webpack.config' ); +const { execSync } = require( 'child_process' ); module.exports = function(grunt) { var path = require('path'), @@ -11,6 +12,8 @@ module.exports = function(grunt) { BANNER_TEXT = '/*! This file is auto-generated */', autoprefixer = require( 'autoprefixer' ); + const packageJson = grunt.file.readJSON( 'package.json' ); + // Load tasks. require('matchdep').filterDev(['grunt-*', '!grunt-legacy-util']).forEach( grunt.loadNpmTasks ); // Load legacy utils @@ -784,6 +787,24 @@ module.exports = function(grunt) { 'qunit:compiled' ] ); + grunt.registerTask( 'download-packages', function() { + const directory = 'packages'; + const version = packageJson.wordpress.packagesVersion; + + if ( ! grunt.file.exists( directory ) ) { + // Clone gutenberg + execSync( `git clone https://github.com/WordPress/gutenberg.git ${ directory }`, { stdio: 'inherit' } ); + } + + execSync( 'git fetch --tags', { cwd: directory, stdio: 'inherit' } ); + + // Make sure we are on the correct version of Gutenberg. + execSync( `git reset --hard ${ version }`, { cwd: directory, stdio: 'inherit' } ); + + // Install Gutenberg dependencies and build the packages. + execSync( 'npm install', { cwd: directory, stdio: 'inherit' } ); + } ); + grunt.renameTask( 'watch', '_watch' ); grunt.registerTask( 'watch', function() { diff --git a/package-lock.json b/package-lock.json index 2847b577c971a..91e202daddb78 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,6 +24,7 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.1.2.tgz", "integrity": "sha512-Y3SCjmhSupzFB6wcv1KmmFucH6gDVnI30WjOcicV10ju0cZjak3Jcs67YLIXBrmZYw1xCrVeJPbycFwrqNyxpg==", + "dev": true, "requires": { "regenerator-runtime": "^0.12.0" } @@ -200,231 +201,6 @@ "@xtuc/long": "4.2.1" } }, - "@wordpress/a11y": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/a11y/-/a11y-2.0.2.tgz", - "integrity": "sha512-YtO4GG5XQX/y+y9/9nnO7IZfyLfgSLXyRgvt9Om4LTUULF4VClol+x00zuQHcHUdQwINMnAkcG51ni9dkXbxgg==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/dom-ready": "^2.0.2" - }, - "dependencies": { - "@wordpress/dom-ready": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/dom-ready/-/dom-ready-2.0.2.tgz", - "integrity": "sha512-SENsbiIesC0Oz6qTLHpYxo6aW9/NgFYkXq4TGjUBA5LLNJmBf9AhPKX9rpgh8Y3+DKVobMdX8IKhfRrQYiqRiw==", - "requires": { - "@babel/runtime": "^7.0.0" - } - } - } - }, - "@wordpress/api-fetch": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@wordpress/api-fetch/-/api-fetch-2.1.0.tgz", - "integrity": "sha512-Aa76Soaet8RGLDRuOBzbFyTVIBRDgytAO1EtEppvx444j3LHrgArQD5ViMmZTJB6NOY4wcLA6qmyCG3u+/Xxtg==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/hooks": "^2.0.2", - "@wordpress/i18n": "^3.0.1", - "@wordpress/url": "^2.1.0" - } - }, - "@wordpress/autop": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/autop/-/autop-2.0.2.tgz", - "integrity": "sha512-YoaLK8TJVvD6e0t5VbiwPvkuIyBim5WyDXgE6Kg6T9xLWDEu+Azp1ljk/e+D6rPJoC895eBQZjCWxrch5WFvLw==", - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/blob": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@wordpress/blob/-/blob-2.1.0.tgz", - "integrity": "sha512-2PBjKivnxVSFLn+askRHyYK61zTarNrpi3S8slC12xeFPXTecT+HBdYJVtk32GBFrQmyH7ZdpDrROhCmjXyiOw==", - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/block-library": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@wordpress/block-library/-/block-library-2.1.4.tgz", - "integrity": "sha512-gRCLt6bkAb9uBZHd+xczxj0bwHtnKfKMkSswyLkp4Nv/XQiA81aajKbaQ1el+xvIESOyCF5ThUc8RWW4dG4MxQ==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/autop": "^2.0.2", - "@wordpress/blob": "^2.1.0", - "@wordpress/blocks": "^4.0.4", - "@wordpress/components": "^4.2.1", - "@wordpress/compose": "^2.0.5", - "@wordpress/core-data": "^2.0.6", - "@wordpress/data": "^2.1.4", - "@wordpress/deprecated": "^2.0.2", - "@wordpress/editor": "^5.0.1", - "@wordpress/element": "^2.1.4", - "@wordpress/html-entities": "^2.0.2", - "@wordpress/i18n": "^3.0.1", - "@wordpress/keycodes": "^2.0.2", - "@wordpress/viewport": "^2.0.5", - "classnames": "^2.2.5", - "lodash": "^4.17.10", - "memize": "^1.0.5", - "moment": "^2.22.1", - "querystring": "^0.2.0", - "querystringify": "^1.0.0", - "url": "^0.11.0" - }, - "dependencies": { - "@wordpress/editor": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@wordpress/editor/-/editor-5.0.1.tgz", - "integrity": "sha512-+654GVNUT5Rx0o5yBLwbpXD93B/YdBfH1oAS7mwKn1VCPtAZGGJuza28PFpEaJrHYtAXXbcETsH9GOV0ugOEXQ==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/a11y": "^2.0.2", - "@wordpress/api-fetch": "^2.1.0", - "@wordpress/blob": "^2.1.0", - "@wordpress/blocks": "^4.0.4", - "@wordpress/components": "^4.2.1", - "@wordpress/compose": "^2.0.5", - "@wordpress/core-data": "^2.0.6", - "@wordpress/data": "^2.1.4", - "@wordpress/date": "^2.0.3", - "@wordpress/deprecated": "^2.0.2", - "@wordpress/dom": "^2.0.4", - "@wordpress/element": "^2.1.4", - "@wordpress/hooks": "^2.0.2", - "@wordpress/html-entities": "^2.0.2", - "@wordpress/i18n": "^3.0.1", - "@wordpress/is-shallow-equal": "^1.1.4", - "@wordpress/keycodes": "^2.0.2", - "@wordpress/nux": "^2.0.6", - "@wordpress/token-list": "^1.0.2", - "@wordpress/url": "^2.1.0", - "@wordpress/viewport": "^2.0.5", - "@wordpress/wordcount": "^2.0.2", - "classnames": "^2.2.5", - "dom-scroll-into-view": "^1.2.1", - "inherits": "^2.0.3", - "jquery": "^3.3.1", - "lodash": "^4.17.10", - "memize": "^1.0.5", - "react-autosize-textarea": "^3.0.2", - "redux-multi": "^0.1.12", - "redux-optimist": "^1.0.0", - "refx": "^3.0.0", - "rememo": "^3.0.0", - "tinycolor2": "^1.4.1", - "tinymce": "^4.7.2", - "traverse": "^0.6.6", - "uuid": "^3.1.0" - } - }, - "querystringify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-1.0.0.tgz", - "integrity": "sha1-YoYkIRLFtxL6ZU5SZlK/ahP/Bcs=" - } - } - }, - "@wordpress/block-serialization-default-parser": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@wordpress/block-serialization-default-parser/-/block-serialization-default-parser-1.0.1.tgz", - "integrity": "sha512-r3pi1GVDnxR4MEb8BcS2UX8BQcNHU/7PyueUihSWGbVJaCksSf+wyRKVTuZiOQKagO95fWy7Egc0JcWK6clmiQ==", - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/block-serialization-spec-parser": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@wordpress/block-serialization-spec-parser/-/block-serialization-spec-parser-1.0.3.tgz", - "integrity": "sha512-qteB0HjG6Kc2FHMPx3Q76iuUYLaj8R+FZD+WT5eXRHgm0o1iGAYjth2qyAjj0hQ/ij5pWYc3pdEjiwQOcSqnLQ==" - }, - "@wordpress/blocks": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@wordpress/blocks/-/blocks-4.0.4.tgz", - "integrity": "sha512-sJRb4k+duD/tfBY6GBT6sw3NOaJ7jErhavR9hDOkJonBusoc6KFKUFQdt+NBWkwQB+/7QJcshFuChg3FRK6bKw==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/autop": "^2.0.2", - "@wordpress/blob": "^2.1.0", - "@wordpress/block-serialization-default-parser": "^1.0.1", - "@wordpress/block-serialization-spec-parser": "^1.0.3", - "@wordpress/data": "^2.1.4", - "@wordpress/deprecated": "^2.0.2", - "@wordpress/dom": "^2.0.4", - "@wordpress/element": "^2.1.4", - "@wordpress/hooks": "^2.0.2", - "@wordpress/i18n": "^3.0.1", - "@wordpress/is-shallow-equal": "^1.1.4", - "@wordpress/shortcode": "^2.0.2", - "hpq": "^1.2.0", - "lodash": "^4.17.10", - "rememo": "^3.0.0", - "showdown": "^1.8.6", - "simple-html-tokenizer": "^0.4.1", - "tinycolor2": "^1.4.1", - "uuid": "^3.1.0" - } - }, - "@wordpress/components": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@wordpress/components/-/components-4.2.1.tgz", - "integrity": "sha512-RFH54uX2lci5uHpDCLGeTOHWJjM2dzb1ekhUpCDiDaAJatMLDtibXWbFH97SXqB5UVZxXu540SMwqNoxVikATw==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/a11y": "^2.0.2", - "@wordpress/api-fetch": "^2.1.0", - "@wordpress/compose": "^2.0.5", - "@wordpress/deprecated": "^2.0.2", - "@wordpress/dom": "^2.0.4", - "@wordpress/element": "^2.1.4", - "@wordpress/hooks": "^2.0.2", - "@wordpress/i18n": "^3.0.1", - "@wordpress/is-shallow-equal": "^1.1.4", - "@wordpress/keycodes": "^2.0.2", - "@wordpress/url": "^2.1.0", - "classnames": "^2.2.5", - "clipboard": "^2.0.1", - "diff": "^3.5.0", - "dom-scroll-into-view": "^1.2.1", - "lodash": "^4.17.10", - "memize": "^1.0.5", - "moment": "^2.22.1", - "mousetrap": "^1.6.2", - "re-resizable": "^4.7.1", - "react-click-outside": "^2.3.1", - "react-dates": "^17.1.1", - "rememo": "^3.0.0", - "tinycolor2": "^1.4.1", - "uuid": "^3.1.0" - } - }, - "@wordpress/compose": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-2.0.5.tgz", - "integrity": "sha512-bbf+4nph+/rFBou7PTUyx8rwHVR08ymBgxnmShGTTjuiVxcrz0Gu7Wu2wxulsZobOYaiqvQkCEHKceNsBxJwiA==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/element": "^2.1.4", - "@wordpress/is-shallow-equal": "^1.1.4", - "lodash": "^4.17.10" - } - }, - "@wordpress/core-data": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@wordpress/core-data/-/core-data-2.0.6.tgz", - "integrity": "sha512-7JzU9f+bCAg1oT0IYu7QPO+C5tP8rGN3BodZmbqJOut8DGiMSzDYdfVwwltKzKJmTBeuitYuSK48sXBLSoJb7Q==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/api-fetch": "^2.1.0", - "@wordpress/data": "^2.1.4", - "@wordpress/url": "^2.1.0", - "equivalent-key-map": "^0.2.1", - "lodash": "^4.17.10", - "rememo": "^3.0.0" - } - }, "@wordpress/custom-templated-path-webpack-plugin": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/@wordpress/custom-templated-path-webpack-plugin/-/custom-templated-path-webpack-plugin-1.1.5.tgz", @@ -435,245 +211,6 @@ "escape-string-regexp": "^1.0.5" } }, - "@wordpress/data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@wordpress/data/-/data-2.1.4.tgz", - "integrity": "sha512-Emfhszi7huasdDhngwk9HvRLUiotCNo9mDDk2Q9VGpGb9SfpQp+84PvenhreiZtezUR+7nUnSQuAJ2d8rUP37Q==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/compose": "^2.0.5", - "@wordpress/deprecated": "^2.0.2", - "@wordpress/element": "^2.1.4", - "@wordpress/is-shallow-equal": "^1.1.4", - "@wordpress/redux-routine": "^3.0.3", - "equivalent-key-map": "^0.2.0", - "is-promise": "^2.1.0", - "lodash": "^4.17.10", - "redux": "^4.0.0" - } - }, - "@wordpress/date": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@wordpress/date/-/date-2.0.3.tgz", - "integrity": "sha512-ZnIEZT3sp+H2dr4apdoZnM9MhN6FpnMZ2zB+h8KuKExJufu9EUyW4grhEvgCTloJbzXNKCN5eolqeYq9I0pWog==", - "requires": { - "@babel/runtime": "^7.0.0", - "moment": "^2.22.1", - "moment-timezone": "^0.5.16" - } - }, - "@wordpress/deprecated": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/deprecated/-/deprecated-2.0.2.tgz", - "integrity": "sha512-5qNehHD7/duvouuGjMdGREQORs9LFMVkyFysfWvafZ919zAl0DAKEXsBoxcMSvvqBqCf5MKJBnQBVY4DeS6AEg==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/hooks": "^2.0.2" - } - }, - "@wordpress/dom": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@wordpress/dom/-/dom-2.0.4.tgz", - "integrity": "sha512-uW/yeWayoSu6uUA+xrM+yCbNJc3oQfga1Y1PUgXvowv0ydn5Qhgh2Dj07ANgg1AncZqFZsObPerBFNloaJhsvQ==", - "requires": { - "@babel/runtime": "^7.0.0", - "lodash": "^4.17.10" - } - }, - "@wordpress/dom-ready": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/dom-ready/-/dom-ready-2.0.2.tgz", - "integrity": "sha512-SENsbiIesC0Oz6qTLHpYxo6aW9/NgFYkXq4TGjUBA5LLNJmBf9AhPKX9rpgh8Y3+DKVobMdX8IKhfRrQYiqRiw==", - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/edit-post": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@wordpress/edit-post/-/edit-post-1.0.4.tgz", - "integrity": "sha512-m+VR3S7rsRwQLze+gzmhWC2yWrVGo7bjb0eshsnZ+JiLSjj1/KeW7k0uvH5w8/Unv9/BHZAdbsiT9IEs42tLMQ==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/a11y": "^2.0.2", - "@wordpress/api-fetch": "^2.1.0", - "@wordpress/block-library": "^2.1.4", - "@wordpress/blocks": "^4.0.4", - "@wordpress/components": "^4.2.1", - "@wordpress/compose": "^2.0.5", - "@wordpress/core-data": "^2.0.6", - "@wordpress/data": "^2.1.4", - "@wordpress/deprecated": "^2.0.2", - "@wordpress/editor": "^5.0.1", - "@wordpress/element": "^2.1.4", - "@wordpress/hooks": "^2.0.2", - "@wordpress/i18n": "^3.0.1", - "@wordpress/keycodes": "^2.0.2", - "@wordpress/nux": "^2.0.6", - "@wordpress/plugins": "^2.0.5", - "@wordpress/url": "^2.1.0", - "@wordpress/viewport": "^2.0.5", - "classnames": "^2.2.5", - "lodash": "^4.17.10", - "refx": "^3.0.0" - }, - "dependencies": { - "@wordpress/editor": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@wordpress/editor/-/editor-5.0.1.tgz", - "integrity": "sha512-+654GVNUT5Rx0o5yBLwbpXD93B/YdBfH1oAS7mwKn1VCPtAZGGJuza28PFpEaJrHYtAXXbcETsH9GOV0ugOEXQ==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/a11y": "^2.0.2", - "@wordpress/api-fetch": "^2.1.0", - "@wordpress/blob": "^2.1.0", - "@wordpress/blocks": "^4.0.4", - "@wordpress/components": "^4.2.1", - "@wordpress/compose": "^2.0.5", - "@wordpress/core-data": "^2.0.6", - "@wordpress/data": "^2.1.4", - "@wordpress/date": "^2.0.3", - "@wordpress/deprecated": "^2.0.2", - "@wordpress/dom": "^2.0.4", - "@wordpress/element": "^2.1.4", - "@wordpress/hooks": "^2.0.2", - "@wordpress/html-entities": "^2.0.2", - "@wordpress/i18n": "^3.0.1", - "@wordpress/is-shallow-equal": "^1.1.4", - "@wordpress/keycodes": "^2.0.2", - "@wordpress/nux": "^2.0.6", - "@wordpress/token-list": "^1.0.2", - "@wordpress/url": "^2.1.0", - "@wordpress/viewport": "^2.0.5", - "@wordpress/wordcount": "^2.0.2", - "classnames": "^2.2.5", - "dom-scroll-into-view": "^1.2.1", - "inherits": "^2.0.3", - "jquery": "^3.3.1", - "lodash": "^4.17.10", - "memize": "^1.0.5", - "react-autosize-textarea": "^3.0.2", - "redux-multi": "^0.1.12", - "redux-optimist": "^1.0.0", - "refx": "^3.0.0", - "rememo": "^3.0.0", - "tinycolor2": "^1.4.1", - "tinymce": "^4.7.2", - "traverse": "^0.6.6", - "uuid": "^3.1.0" - } - } - } - }, - "@wordpress/editor": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@wordpress/editor/-/editor-5.0.1.tgz", - "integrity": "sha512-+654GVNUT5Rx0o5yBLwbpXD93B/YdBfH1oAS7mwKn1VCPtAZGGJuza28PFpEaJrHYtAXXbcETsH9GOV0ugOEXQ==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/a11y": "^2.0.2", - "@wordpress/api-fetch": "^2.1.0", - "@wordpress/blob": "^2.1.0", - "@wordpress/blocks": "^4.0.4", - "@wordpress/components": "^4.2.1", - "@wordpress/compose": "^2.0.5", - "@wordpress/core-data": "^2.0.6", - "@wordpress/data": "^2.1.4", - "@wordpress/date": "^2.0.3", - "@wordpress/deprecated": "^2.0.2", - "@wordpress/dom": "^2.0.4", - "@wordpress/element": "^2.1.4", - "@wordpress/hooks": "^2.0.2", - "@wordpress/html-entities": "^2.0.2", - "@wordpress/i18n": "^3.0.1", - "@wordpress/is-shallow-equal": "^1.1.4", - "@wordpress/keycodes": "^2.0.2", - "@wordpress/nux": "^2.0.6", - "@wordpress/token-list": "^1.0.2", - "@wordpress/url": "^2.1.0", - "@wordpress/viewport": "^2.0.5", - "@wordpress/wordcount": "^2.0.2", - "classnames": "^2.2.5", - "dom-scroll-into-view": "^1.2.1", - "inherits": "^2.0.3", - "jquery": "^3.3.1", - "lodash": "^4.17.10", - "memize": "^1.0.5", - "react-autosize-textarea": "^3.0.2", - "redux-multi": "^0.1.12", - "redux-optimist": "^1.0.0", - "refx": "^3.0.0", - "rememo": "^3.0.0", - "tinycolor2": "^1.4.1", - "tinymce": "^4.7.2", - "traverse": "^0.6.6", - "uuid": "^3.1.0" - } - }, - "@wordpress/element": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@wordpress/element/-/element-2.1.4.tgz", - "integrity": "sha512-y/RpvYNd2VeLWXemxEXdMOnUa+HUC0sde2o7gEHKud0LB14xFU1ASif/pz/LP+vSvExcvhj8cu4Sq8tKDzRRPw==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/escape-html": "^1.0.1", - "lodash": "^4.17.10", - "react": "^16.4.1", - "react-dom": "^16.4.1" - } - }, - "@wordpress/escape-html": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@wordpress/escape-html/-/escape-html-1.0.1.tgz", - "integrity": "sha512-ywRXV6WHbUWlqEDXQcWLmyG+/oBw8myTp+KTbkRRF2EJvx/cqL9XF55I2+aeZ5Q0VYRXXGHp6Tp1iRfJjr/rNQ==", - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/hooks": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-2.0.2.tgz", - "integrity": "sha512-yWdkjw6YP2kDF+cjjRfkI2cjTRiETaRFMwJpoqnQWxfay1oBtgvaGuRrYrm0rCxxOqCD/4/di2co5VHQxP9Rhw==", - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/html-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/html-entities/-/html-entities-2.0.2.tgz", - "integrity": "sha512-cxG7YjH9EMfZyeLJAd/Vc1nFJxitMSzybv71iMPP3Dqqgz3jixX6oSe4ukTqfoOKBaF7pY7LzS6eTKu7KAmyZw==", - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/i18n": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-3.0.1.tgz", - "integrity": "sha512-Ut6ihDjcZ7zpU44/WurZrFxrLcMl3Gq+hW8Hb6MTF6+X6Y2fd7QFu3lMvopYNwF8gxWtjvH5n3NIQ6B9DLt7Ng==", - "requires": { - "@babel/runtime": "^7.0.0", - "gettext-parser": "^1.3.1", - "jed": "^1.1.1", - "lodash": "^4.17.10", - "memize": "^1.0.5" - } - }, - "@wordpress/is-shallow-equal": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@wordpress/is-shallow-equal/-/is-shallow-equal-1.1.4.tgz", - "integrity": "sha512-ihJrYrW+G9GWtQjyB44DVKMCoiTTYPl5T/g1Ix9PMrKl2rk5uVbJw9yMmhik/jTIQqubpzhxGtrqsddwuUH1sw==", - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@wordpress/keycodes": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/keycodes/-/keycodes-2.0.2.tgz", - "integrity": "sha512-miMB6uvKZzZmgTb7qSr0NBOadWJ9Eb5Tak/+DRsVrgt9RP4zeCh9Le2T7hOWvNPU/54x2v1eHRrU0L+JDm2JAA==", - "requires": { - "@babel/runtime": "^7.0.0", - "lodash": "^4.17.10" - } - }, "@wordpress/library-export-default-webpack-plugin": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@wordpress/library-export-default-webpack-plugin/-/library-export-default-webpack-plugin-1.0.4.tgz", @@ -685,116 +222,6 @@ "webpack-sources": "^1.1.0" } }, - "@wordpress/list-reusable-blocks": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@wordpress/list-reusable-blocks/-/list-reusable-blocks-1.1.4.tgz", - "integrity": "sha512-0UXYSHlVEa6VArSwtuZApv6+1cXv+CswEoEKd/sGMjpJS5vW8wgyV46ZTz4y3gKgvl1l6tIT32XArXLjvT+lXA==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/api-fetch": "^2.1.0", - "@wordpress/components": "^4.2.1", - "@wordpress/compose": "^2.0.5", - "@wordpress/element": "^2.1.4", - "@wordpress/i18n": "^3.0.1", - "lodash": "^4.17.10" - } - }, - "@wordpress/nux": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@wordpress/nux/-/nux-2.0.6.tgz", - "integrity": "sha512-22nYvccK0NPGZBegR55BTxbClXO8nSfHut+SSA1/CTPqX3yd//KPeAmGfgNCYH/lMz7RSRcj83oFEGpwrWWISQ==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/components": "^4.2.1", - "@wordpress/compose": "^2.0.5", - "@wordpress/data": "^2.1.4", - "@wordpress/element": "^2.1.4", - "@wordpress/i18n": "^3.0.1", - "lodash": "^4.17.10", - "rememo": "^3.0.0" - } - }, - "@wordpress/plugins": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@wordpress/plugins/-/plugins-2.0.5.tgz", - "integrity": "sha512-fER2dJS9NbZPcEL0TEH30UsH2EXx/WSf3JDzJIK86eu33A34cDXv7CvplwLrsiaysOEiCyMvG9DDrCGdM4PVvA==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/compose": "^2.0.5", - "@wordpress/element": "^2.1.4", - "@wordpress/hooks": "^2.0.2", - "lodash": "^4.17.10" - } - }, - "@wordpress/redux-routine": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@wordpress/redux-routine/-/redux-routine-3.0.3.tgz", - "integrity": "sha512-wT8GoG0qtwxq8J5g0uYxZYoNcnhQloFvMTkDQsaWWAvaO1wsTaamYbusHc6q7PS+EsS2TioQkZsxTtei6YwBBg==", - "requires": { - "@babel/runtime": "^7.0.0", - "is-promise": "^2.1.0", - "rungen": "^0.3.2" - } - }, - "@wordpress/rich-text": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@wordpress/rich-text/-/rich-text-1.0.1.tgz", - "integrity": "sha512-+5PU77P8VqaM4tw8c8hDahBqJ3rqxxXlnn6H820Uai8xg+YHAA+Z5TmNMPqK4hCfX5jt/MSEkoKnzBfg1BouNA==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/escape-html": "^1.0.1", - "lodash": "^4.17.10" - } - }, - "@wordpress/shortcode": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/shortcode/-/shortcode-2.0.2.tgz", - "integrity": "sha512-mztQ5l7l1ULZ8rMqlOD/mrLSXXFvwDPdCBCBB+3YGl8zSnCZ1S9X1SIAjoVLpV9uRMm1CZL4w4hvhmi22F4Wiw==", - "requires": { - "@babel/runtime": "^7.0.0", - "lodash": "^4.17.10", - "memize": "^1.0.5" - } - }, - "@wordpress/token-list": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/token-list/-/token-list-1.0.2.tgz", - "integrity": "sha512-hyk3xsLB1OlS52kFlR9PcSzvD6fkB2uOG4Uchs1pd304M/G3WTdD6iPiRVZeMmpWbwMq9KFtu9f8hwUzQTrTow==", - "requires": { - "@babel/runtime": "^7.0.0", - "lodash": "^4.17.10" - } - }, - "@wordpress/url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@wordpress/url/-/url-2.1.0.tgz", - "integrity": "sha512-MPWFszPleQ+ofDE8ZMpVLOwK/yAjf6L9f7F9wxE82rQjRzUSkrs+Z7Q9ShYiD5HT7o4J96PY9S0XnoHW/XKnDg==", - "requires": { - "@babel/runtime": "^7.0.0", - "qs": "^6.5.2" - } - }, - "@wordpress/viewport": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@wordpress/viewport/-/viewport-2.0.5.tgz", - "integrity": "sha512-im0/L6+rwM8gtUuSRkzsPOH1pAwKWHLGfJXdnSuYSV1/K/e3szBLIlkHOK1q4YXkVzHxSSNDcnaHEuxbA/6rNA==", - "requires": { - "@babel/runtime": "^7.0.0", - "@wordpress/compose": "^2.0.5", - "@wordpress/data": "^2.1.4", - "@wordpress/element": "^2.1.4", - "lodash": "^4.17.10" - } - }, - "@wordpress/wordcount": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/wordcount/-/wordcount-2.0.2.tgz", - "integrity": "sha512-FQ9mU/NsEB+IczD8roBGes9fJlZdTtdNhftdoCw32/lpUgP/bjA736NIPtNRedry+VBFykHqUf0CygJ0TgaOKA==", - "requires": { - "@babel/runtime": "^7.0.0", - "lodash": "^4.17.10" - } - }, "@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", @@ -838,22 +265,6 @@ "acorn": "^5.0.0" } }, - "airbnb-prop-types": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/airbnb-prop-types/-/airbnb-prop-types-2.11.0.tgz", - "integrity": "sha512-Y46/0gNVDy5gpedxIaoKjigdes+TouqVg7GTYQr73PBfE/lTSvOR/WIgUib0Zonm3Hyvlcax0mHr+v4K8DfGGw==", - "requires": { - "array.prototype.find": "^2.0.4", - "function.prototype.name": "^1.1.0", - "has": "^1.0.3", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object.assign": "^4.1.0", - "object.entries": "^1.0.4", - "prop-types": "^15.6.2", - "prop-types-exact": "^1.2.0" - } - }, "ajv": { "version": "5.5.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", @@ -1426,36 +837,12 @@ "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", "dev": true }, - "array.prototype.find": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.0.4.tgz", - "integrity": "sha1-VWpcU2LAhkgyPdrrnenRS8GGTJA=", - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.7.0" - } - }, - "array.prototype.flat": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.1.tgz", - "integrity": "sha512-rVqIs330nLJvfC7JqYvEWwqVr5QjYF1ib02i3YJtR/fICO6527Tjpc/e4Mvmxh3GIePPreRXMdaGyC99YphWEw==", - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.10.0", - "function-bind": "^1.1.1" - } - }, "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "dev": true }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" - }, "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", @@ -1565,11 +952,6 @@ "postcss-value-parser": "^3.2.3" } }, - "autosize": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/autosize/-/autosize-4.0.2.tgz", - "integrity": "sha512-jnSyH2d+qdfPGpWlcuhGiHmqBJ6g3X+8T+iRwFrHPLVcdoGJE/x6Qicm6aDHfTsbgZKxyV8UU/YB2p4cjKDRRA==" - }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -2503,11 +1885,6 @@ "repeat-element": "^1.1.2" } }, - "brcast": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brcast/-/brcast-2.0.2.tgz", - "integrity": "sha512-Tfn5JSE7hrUlFcOoaLzVvkbgIemIorMIyoMr3TgvszWW7jFt2C9PdeMLtysYD9RU0MmU17b69+XJG1eRY2OBRg==" - }, "brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", @@ -3049,11 +2426,6 @@ } } }, - "classnames": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", - "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" - }, "clean-css": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", @@ -3104,16 +2476,6 @@ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", "dev": true }, - "clipboard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.1.tgz", - "integrity": "sha512-7yhQBmtN+uYZmfRjjVjKa0dZdWuabzpSKGtyQZN+9C8xlC788SSJjOHWh7tzurfwTqTD5UDYAhIv5fRJg3sHjQ==", - "requires": { - "good-listener": "^1.2.2", - "select": "^1.1.2", - "tiny-emitter": "^2.0.0" - } - }, "cliui": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", @@ -3156,7 +2518,8 @@ "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true }, "coffeescript": { "version": "1.10.0", @@ -3275,11 +2638,6 @@ } } }, - "computed-style": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/computed-style/-/computed-style-0.1.4.tgz", - "integrity": "sha1-fzRP2FhLLkJb7cpKGvwOMAuwXXQ=" - }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -3325,11 +2683,6 @@ "dev": true, "optional": true }, - "consolidated-events": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/consolidated-events/-/consolidated-events-2.0.2.tgz", - "integrity": "sha512-2/uRVMdRypf5z/TW/ncD/66l75P5hH2vM/GR8Jf8HLc2xnfJtmina6F6du8+v4Z2vTrMo7jC+W1tmEEuuELgkQ==" - }, "constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", @@ -3573,6 +2926,8 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "optional": true, "requires": { "lru-cache": "^4.0.1", "shebang-command": "^1.2.0", @@ -3852,7 +3207,8 @@ "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true }, "decode-uri-component": { "version": "0.2.0", @@ -4050,11 +3406,6 @@ "lodash.isplainobject": "^4.0.6" } }, - "deepmerge": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz", - "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==" - }, "default-gateway": { "version": "2.7.2", "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-2.7.2.tgz", @@ -4105,6 +3456,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, "requires": { "object-keys": "^1.0.12" } @@ -4190,11 +3542,6 @@ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true }, - "delegate": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", - "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==" - }, "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", @@ -4258,7 +3605,8 @@ "diff": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true }, "diffie-hellman": { "version": "5.0.3", @@ -4298,11 +3646,6 @@ } } }, - "direction": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/direction/-/direction-1.0.2.tgz", - "integrity": "sha512-hSKoz5FBn+zhP9vWKkVQaaxnRDg3/MoPdcg2au54HIUDR8MrP8Ah1jXSJwCXel6SV3Afh5DSzc8Uqv2r1UoQwQ==" - }, "dns-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", @@ -4328,11 +3671,6 @@ "buffer-indexof": "^1.0.0" } }, - "dom-scroll-into-view": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/dom-scroll-into-view/-/dom-scroll-into-view-1.2.1.tgz", - "integrity": "sha1-6PNnMt0ImwIBqI14Fdw/iObWbH4=" - }, "dom-serializer": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", @@ -4512,14 +3850,6 @@ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", "dev": true }, - "encoding": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", - "requires": { - "iconv-lite": "~0.4.13" - } - }, "end-of-stream": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", @@ -4546,11 +3876,6 @@ "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", "dev": true }, - "equivalent-key-map": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/equivalent-key-map/-/equivalent-key-map-0.2.2.tgz", - "integrity": "sha512-xvHeyCDbZzkpN4VHQj/n+j2lOwL0VWszG30X4cOrc9Y7Tuo2qCdZK/0AMod23Z5dCtNUbaju6p0rwOhHUk05ew==" - }, "errno": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", @@ -4583,6 +3908,7 @@ "version": "1.12.0", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", + "dev": true, "requires": { "es-to-primitive": "^1.1.1", "function-bind": "^1.1.1", @@ -4595,6 +3921,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "dev": true, "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -4735,6 +4062,8 @@ "version": "0.7.0", "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "optional": true, "requires": { "cross-spawn": "^5.0.1", "get-stream": "^3.0.0", @@ -4973,27 +4302,6 @@ "websocket-driver": ">=0.5.1" } }, - "fbjs": { - "version": "0.8.17", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", - "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", - "requires": { - "core-js": "^1.0.0", - "isomorphic-fetch": "^2.1.1", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" - }, - "dependencies": { - "core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" - } - } - }, "fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -5362,14 +4670,12 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, - "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5384,20 +4690,17 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "core-util-is": { "version": "1.0.2", @@ -5514,8 +4817,7 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "ini": { "version": "1.3.5", @@ -5527,7 +4829,6 @@ "version": "1.0.0", "bundled": true, "dev": true, - "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -5542,7 +4843,6 @@ "version": "3.0.4", "bundled": true, "dev": true, - "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -5550,14 +4850,12 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "minipass": { "version": "2.2.4", "bundled": true, "dev": true, - "optional": true, "requires": { "safe-buffer": "^5.1.1", "yallist": "^3.0.0" @@ -5576,7 +4874,6 @@ "version": "0.5.1", "bundled": true, "dev": true, - "optional": true, "requires": { "minimist": "0.0.8" } @@ -5657,8 +4954,7 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "object-assign": { "version": "4.1.1", @@ -5670,7 +4966,6 @@ "version": "1.4.0", "bundled": true, "dev": true, - "optional": true, "requires": { "wrappy": "1" } @@ -5792,7 +5087,6 @@ "version": "1.0.2", "bundled": true, "dev": true, - "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -5879,17 +5173,8 @@ "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "function.prototype.name": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.0.tgz", - "integrity": "sha512-Bs0VRrTz4ghD8pTmbJQD1mZ8A/mN0ur/jGz+A6FBxPDUPkm1tNfF6bhTYPA7i7aF4lZJVr+OXTNNrnnIl58Wfg==", - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "is-callable": "^1.1.3" - } + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true }, "gauge": { "version": "2.7.4", @@ -5919,7 +5204,8 @@ "get-caller-file": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true }, "get-proxy": { "version": "1.1.0", @@ -5939,7 +5225,8 @@ "get-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true }, "get-value": { "version": "2.0.6", @@ -5962,15 +5249,6 @@ "assert-plus": "^1.0.0" } }, - "gettext-parser": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/gettext-parser/-/gettext-parser-1.4.0.tgz", - "integrity": "sha512-sedZYLHlHeBop/gZ1jdg59hlUEcpcZJofLq2JFwJT1zTqAU3l2wFv6IsuwFHGqbiT9DWzMUW4/em2+hspnmMMA==", - "requires": { - "encoding": "^0.1.12", - "safe-buffer": "^5.1.1" - } - }, "gifsicle": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/gifsicle/-/gifsicle-3.0.4.tgz", @@ -6078,16 +5356,7 @@ "once": "^1.3.0", "path-is-absolute": "^1.0.0" } - } - } - }, - "global-cache": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/global-cache/-/global-cache-1.2.1.tgz", - "integrity": "sha512-EOeUaup5DgWKlCMhA9YFqNRIlZwoxt731jCh47WBV9fQqHgXhr3Fa55hfgIUqilIcPsfdNKN7LHjrNY+Km40KA==", - "requires": { - "define-properties": "^1.1.2", - "is-symbol": "^1.0.1" + } } }, "global-modules": { @@ -6168,14 +5437,6 @@ "sparkles": "^1.0.0" } }, - "good-listener": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", - "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", - "requires": { - "delegate": "^3.1.2" - } - }, "got": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/got/-/got-5.7.1.tgz", @@ -7121,6 +6382,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -7151,7 +6413,8 @@ "has-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true }, "has-unicode": { "version": "2.0.1", @@ -7266,11 +6529,6 @@ "minimalistic-crypto-utils": "^1.0.1" } }, - "hoist-non-react-statics": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz", - "integrity": "sha1-qkSM8JhtVcxAdzsXF0t90GbLfPs=" - }, "home-or-tmp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", @@ -7313,11 +6571,6 @@ "wbuf": "^1.1.0" } }, - "hpq": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/hpq/-/hpq-1.2.0.tgz", - "integrity": "sha1-nGGLI5YqLXPW6Cugh0l4vLNov6I=" - }, "hsl-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", @@ -7755,6 +7008,7 @@ "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" } @@ -8069,7 +7323,8 @@ "invert-kv": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true }, "ip": { "version": "1.1.5", @@ -8159,7 +7414,8 @@ "is-callable": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true }, "is-color-stop": { "version": "1.1.0", @@ -8187,7 +7443,8 @@ "is-date-object": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true }, "is-descriptor": { "version": "0.1.6", @@ -8253,6 +7510,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, "requires": { "number-is-nan": "^1.0.0" } @@ -8370,7 +7628,8 @@ "is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true }, "is-redirect": { "version": "1.0.0", @@ -8382,6 +7641,7 @@ "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" } @@ -8407,7 +7667,8 @@ "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true }, "is-svg": { "version": "2.1.0", @@ -8423,6 +7684,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, "requires": { "has-symbols": "^1.0.0" } @@ -8433,11 +7695,6 @@ "integrity": "sha1-L2suF5LB9bs2UZrKqdZcDSb+hT0=", "dev": true }, - "is-touch-device": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-touch-device/-/is-touch-device-1.0.1.tgz", - "integrity": "sha512-LAYzo9kMT1b2p19L/1ATGt2XcSilnzNlyvq6c0pbPRVisLbAPpLqr53tIJS00kvrTkj0HtR8U7+u8X0yR8lPSw==" - }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -8488,7 +7745,8 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true }, "isobject": { "version": "2.1.0", @@ -8499,26 +7757,12 @@ "isarray": "1.0.0" } }, - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - } - }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true }, - "jed": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/jed/-/jed-1.1.1.tgz", - "integrity": "sha1-elSbvZ/+FYWwzQoZHiAwVb7ldLQ=" - }, "jpegtran-bin": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/jpegtran-bin/-/jpegtran-bin-3.2.0.tgz", @@ -8531,11 +7775,6 @@ "logalot": "^2.0.0" } }, - "jquery": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.3.1.tgz", - "integrity": "sha512-Ubldcmxp5np52/ENotGxlLe6aGMvmF4R8S6tZjsP6Knsaxd/xp3Zrh50cG93lR6nPXyUFwzN3ZSOQI0wRJNdGg==" - }, "js-base64": { "version": "2.4.9", "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.9.tgz", @@ -8768,18 +8007,11 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, "requires": { "invert-kv": "^1.0.0" } }, - "line-height": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/line-height/-/line-height-0.3.1.tgz", - "integrity": "sha1-SxIF7d4YKHKl76PI9iCzGHqcVMk=", - "requires": { - "computed-style": "~0.1.3" - } - }, "livereload-js": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.3.0.tgz", @@ -8820,6 +8052,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, "requires": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" @@ -8828,7 +8061,8 @@ "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true } } }, @@ -9556,11 +8790,6 @@ "p-is-promise": "^1.1.0" } }, - "memize": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/memize/-/memize-1.0.5.tgz", - "integrity": "sha512-Dm8Jhb5kiC4+ynYsVR4QDXKt+o2dfqGuY4hE2x+XlXZkdndlT80bJxfcMv5QGp/FCy6MhG7f5ElpmKPFKOSEpg==" - }, "memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", @@ -9687,7 +8916,8 @@ "mimic-fn": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true }, "mimic-response": { "version": "1.0.1", @@ -9793,19 +9023,6 @@ "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz", "integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y=" }, - "moment-timezone": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.21.tgz", - "integrity": "sha512-j96bAh4otsgj3lKydm3K7kdtA3iKf2m6MY2iSYCzCm5a1zmHo1g+aK3068dDEeocLZQIS9kU8bsdQHLqEvgW0A==", - "requires": { - "moment": ">= 2.9.0" - } - }, - "mousetrap": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/mousetrap/-/mousetrap-1.6.2.tgz", - "integrity": "sha512-jDjhi7wlHwdO6q6DS7YRmSHcuI+RVxadBkLt3KHrhd3C2b+w5pKefg3oj5beTcHZyVFA9Aksf+yEE1y5jxUjVA==" - }, "move-concurrently": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", @@ -9983,15 +9200,6 @@ "semver": "^5.4.1" } }, - "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, "node-forge": { "version": "0.7.5", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz", @@ -10255,6 +9463,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, "requires": { "path-key": "^2.0.0" } @@ -10324,15 +9533,11 @@ } } }, - "object-is": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz", - "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=" - }, "object-keys": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", - "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==" + "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", + "dev": true }, "object-visit": { "version": "1.0.1", @@ -10351,28 +9556,6 @@ } } }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, - "object.entries": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.0.4.tgz", - "integrity": "sha1-G/mk3SKI9bM/Opk9JXZh8F0WGl8=", - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.6.1", - "function-bind": "^1.1.0", - "has": "^1.0.1" - } - }, "object.getownpropertydescriptors": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", @@ -10414,6 +9597,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.0.4.tgz", "integrity": "sha1-5STaCbT2b/Bd9FdUbscqyZ8TBpo=", + "dev": true, "requires": { "define-properties": "^1.1.2", "es-abstract": "^1.6.1", @@ -10564,7 +9748,8 @@ "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true }, "p-is-promise": { "version": "1.1.0", @@ -10576,6 +9761,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, "requires": { "p-try": "^1.0.0" } @@ -10584,6 +9770,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, "requires": { "p-limit": "^1.1.0" } @@ -10603,7 +9790,8 @@ "p-try": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true }, "package": { "version": "1.0.1", @@ -10732,7 +9920,8 @@ "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true }, "path-parse": { "version": "1.0.6", @@ -11437,14 +10626,6 @@ "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", "dev": true }, - "promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "requires": { - "asap": "~2.0.3" - } - }, "promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", @@ -11465,16 +10646,6 @@ "object-assign": "^4.1.1" } }, - "prop-types-exact": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/prop-types-exact/-/prop-types-exact-1.2.0.tgz", - "integrity": "sha512-K+Tk3Kd9V0odiXFP9fwDHUYRyvK3Nun3GVyPapSIs5OBkITAm15W0CPFD/YKTkMUAbc0b9CUwRQp2ybiBIq+eA==", - "requires": { - "has": "^1.0.3", - "object.assign": "^4.1.0", - "reflect.ownkeys": "^0.2.0" - } - }, "proxy-addr": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", @@ -11552,12 +10723,14 @@ "qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true }, "querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true }, "querystring-es3": { "version": "0.2.1", @@ -11651,11 +10824,6 @@ "strip-json-comments": "~2.0.1" } }, - "re-resizable": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/re-resizable/-/re-resizable-4.9.1.tgz", - "integrity": "sha512-P5X7bBMnVkERL4HqjtVIGs2ABi8+DQBJPzvaEGJGRsPwLfO7FLdl13ZMRYmP1ywr2K7AUoHLqJXxQLvClQ3xjQ==" - }, "react": { "version": "16.5.2", "resolved": "https://registry.npmjs.org/react/-/react-16.5.2.tgz", @@ -11667,53 +10835,6 @@ "schedule": "^0.5.0" } }, - "react-addons-shallow-compare": { - "version": "15.6.2", - "resolved": "https://registry.npmjs.org/react-addons-shallow-compare/-/react-addons-shallow-compare-15.6.2.tgz", - "integrity": "sha1-GYoAuR/DdiPbZKKP0XtZa6NicC8=", - "requires": { - "fbjs": "^0.8.4", - "object-assign": "^4.1.0" - } - }, - "react-autosize-textarea": { - "version": "3.0.3", - "resolved": "http://registry.npmjs.org/react-autosize-textarea/-/react-autosize-textarea-3.0.3.tgz", - "integrity": "sha512-iOSZK7RUuJ+iEwkJ9rqYciqtjQgrG1CCRFL6h8Bk61kODnRyEq4tS74IgXpI1t4S6jBBZVm+6ugaU+tWTlVxXg==", - "requires": { - "autosize": "^4.0.0", - "line-height": "^0.3.1", - "prop-types": "^15.5.6" - } - }, - "react-click-outside": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/react-click-outside/-/react-click-outside-2.3.1.tgz", - "integrity": "sha1-MYc3698IGko7zUaCVmNnTL6YNus=", - "requires": { - "hoist-non-react-statics": "^1.2.0" - } - }, - "react-dates": { - "version": "17.2.0", - "resolved": "https://registry.npmjs.org/react-dates/-/react-dates-17.2.0.tgz", - "integrity": "sha512-RDlerU8DdRRrlYS0MQ7Z9igPWABGLDwz6+ykBNff67RM3Sset2TDqeuOr+R5o00Ggn5U47GeLsGcSDxlZd9cHw==", - "requires": { - "airbnb-prop-types": "^2.10.0", - "consolidated-events": "^1.1.1 || ^2.0.0", - "is-touch-device": "^1.0.1", - "lodash": "^4.1.1", - "object.assign": "^4.1.0", - "object.values": "^1.0.4", - "prop-types": "^15.6.1", - "react-addons-shallow-compare": "^15.6.2", - "react-moment-proptypes": "^1.6.0", - "react-outside-click-handler": "^1.2.0", - "react-portal": "^4.1.5", - "react-with-styles": "^3.2.0", - "react-with-styles-interface-css": "^4.0.2" - } - }, "react-dom": { "version": "16.5.2", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.5.2.tgz", @@ -11725,82 +10846,6 @@ "schedule": "^0.5.0" } }, - "react-moment-proptypes": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/react-moment-proptypes/-/react-moment-proptypes-1.6.0.tgz", - "integrity": "sha512-4h7EuhDMTzQqZ+02KUUO+AVA7PqhbD88yXB740nFpNDyDS/bj9jiPyn2rwr9sa8oDyaE1ByFN9+t5XPyPTmN6g==", - "requires": { - "moment": ">=1.6.0" - } - }, - "react-outside-click-handler": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/react-outside-click-handler/-/react-outside-click-handler-1.2.2.tgz", - "integrity": "sha512-MgCxmFARGN1VrZdwoLkER/y3So6mC/fSniXI4XcXcB+Jt05nw/k8a/R1hSoa7p414uZUZ8NfClN3eVmZm9bM5Q==", - "requires": { - "airbnb-prop-types": "^2.10.0", - "consolidated-events": "^1.1.1 || ^2.0.0", - "object.values": "^1.0.4", - "prop-types": "^15.6.1" - } - }, - "react-portal": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/react-portal/-/react-portal-4.1.5.tgz", - "integrity": "sha512-jJMy9DoVr4HRWPdO8IP/mDHP1Q972/aKkulVQeIrttOIyRNmCkR2IH7gK3HVjhzxy6M+k9TopSWN5q41wO/o6A==", - "requires": { - "prop-types": "^15.5.8" - } - }, - "react-with-direction": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/react-with-direction/-/react-with-direction-1.3.0.tgz", - "integrity": "sha512-2TflEebNckTNUybw3Rzqjg4BwM/H380ZL5lsbZ5f4UTY2JyE5uQdQZK5T2w+BDJSAMcqoA2RDJYa4e7Cl6C2Kg==", - "requires": { - "airbnb-prop-types": "^2.8.1", - "brcast": "^2.0.2", - "deepmerge": "^1.5.1", - "direction": "^1.0.1", - "hoist-non-react-statics": "^2.3.1", - "object.assign": "^4.1.0", - "object.values": "^1.0.4", - "prop-types": "^15.6.0" - }, - "dependencies": { - "hoist-non-react-statics": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", - "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" - } - } - }, - "react-with-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/react-with-styles/-/react-with-styles-3.2.1.tgz", - "integrity": "sha512-L+x/EDgrKkqV6pTfDtLMShf7Xs+bVQ+HAT5rByX88QYX+ft9t5Gn4PWMmg36Ur21IVEBMGjjQQIJGJpBrzbsyg==", - "requires": { - "deepmerge": "^1.5.2", - "hoist-non-react-statics": "^2.5.0", - "prop-types": "^15.6.1", - "react-with-direction": "^1.3.0" - }, - "dependencies": { - "hoist-non-react-statics": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", - "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" - } - } - }, - "react-with-styles-interface-css": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/react-with-styles-interface-css/-/react-with-styles-interface-css-4.0.3.tgz", - "integrity": "sha512-wE43PIyjal2dexxyyx4Lhbcb+E42amoYPnkunRZkb9WTA+Z+9LagbyxwsI352NqMdFmghR0opg29dzDO4/YXbw==", - "requires": { - "array.prototype.flat": "^1.2.1", - "global-cache": "^1.2.1" - } - }, "read-all-stream": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz", @@ -12174,42 +11219,6 @@ "postcss-value-parser": "^3.3.0" } }, - "redux": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.1.tgz", - "integrity": "sha512-R7bAtSkk7nY6O/OYMVR9RiBI+XghjF9rlbl5806HJbQph0LJVHZrU5oaO4q70eUKiqMRqm4y07KLTlMZ2BlVmg==", - "requires": { - "loose-envify": "^1.4.0", - "symbol-observable": "^1.2.0" - }, - "dependencies": { - "symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" - } - } - }, - "redux-multi": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/redux-multi/-/redux-multi-0.1.12.tgz", - "integrity": "sha1-KOH+XklnLLxb2KB/Cyrq8O+DVcI=" - }, - "redux-optimist": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redux-optimist/-/redux-optimist-1.0.0.tgz", - "integrity": "sha512-AG1v8o6UZcGXTEH2jVcWG6KD+gEix+Cj9JXAAzln9MPkauSVd98H7N7EOOyT/v4c9N1mJB4sm1zfspGlLDkUEw==" - }, - "reflect.ownkeys": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz", - "integrity": "sha1-dJrO7H8/34tj+SegSAnpDFwLNGA=" - }, - "refx": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/refx/-/refx-3.1.1.tgz", - "integrity": "sha512-lwN27W5iYyagpCxxYDYDl0IIiKh0Vgi3wvafqfthbzTfBgLOYAstcftp+G2X612xVaB8rhn5wDxd4er4KEeb8A==" - }, "regenerate": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", @@ -12218,7 +11227,8 @@ "regenerator-runtime": { "version": "0.12.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", - "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==" + "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==", + "dev": true }, "regenerator-transform": { "version": "0.10.1", @@ -12300,11 +11310,6 @@ } } }, - "rememo": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/rememo/-/rememo-3.0.0.tgz", - "integrity": "sha512-eWtut/7pqMRnSccbexb647iPjN7ir6Tmf4RG92ZVlykFEkHqGYy9tWnpHH3I+FS+WQ6lQ1i1iDgarYzGKgTcRQ==" - }, "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", @@ -12377,12 +11382,14 @@ "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true }, "require-main-filename": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true }, "requires-port": { "version": "1.0.0", @@ -12555,11 +11562,6 @@ "aproba": "^1.1.1" } }, - "rungen": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/rungen/-/rungen-0.3.2.tgz", - "integrity": "sha1-QAwJ6+kU57F+C27zJjQA/Cq8fLM=" - }, "rxjs": { "version": "5.5.12", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", @@ -12592,7 +11594,8 @@ "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true }, "sanitize-html": { "version": "1.19.1", @@ -12737,11 +11740,6 @@ "commander": "~2.8.1" } }, - "select": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", - "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=" - }, "select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", @@ -12836,7 +11834,8 @@ "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true }, "set-immediate-shim": { "version": "1.0.1", @@ -12859,7 +11858,8 @@ "setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true }, "setprototypeof": { "version": "1.1.0", @@ -12881,6 +11881,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, "requires": { "shebang-regex": "^1.0.0" } @@ -12888,7 +11889,8 @@ "shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true }, "shelljs": { "version": "0.3.0", @@ -12896,116 +11898,6 @@ "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=", "dev": true }, - "showdown": { - "version": "1.8.7", - "resolved": "https://registry.npmjs.org/showdown/-/showdown-1.8.7.tgz", - "integrity": "sha512-S1wyj80vu2lZZ7xm2ijr6e3VxHxPu8WfhTH7R6nelbIQeyl2g0ioEohS0YtFim8yAFMbQ8sQuXxiKvr10rKbTg==", - "requires": { - "yargs": "^10.0.3" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" - }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "requires": { - "locate-path": "^2.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "mem": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", - "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "os-locale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", - "requires": { - "execa": "^0.7.0", - "lcid": "^1.0.0", - "mem": "^1.1.0" - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - }, - "yargs": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz", - "integrity": "sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==", - "requires": { - "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": "^8.1.0" - } - }, - "yargs-parser": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.1.0.tgz", - "integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==", - "requires": { - "camelcase": "^4.1.0" - } - } - } - }, "shuffle-array": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/shuffle-array/-/shuffle-array-1.0.1.tgz", @@ -13014,7 +11906,8 @@ "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true }, "simple-concat": { "version": "1.0.0", @@ -13035,11 +11928,6 @@ "simple-concat": "^1.0.0" } }, - "simple-html-tokenizer": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/simple-html-tokenizer/-/simple-html-tokenizer-0.4.3.tgz", - "integrity": "sha512-OpUzgR+P/Qsu6ztZehr4PxvTbV4sDW91hAqc2tnz4fjuFTqErWIUdUMbnzX+19F4IEpSSfa0vCAz5xJSs0LpPw==" - }, "simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", @@ -13591,6 +12479,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -13676,7 +12565,8 @@ "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true }, "strip-indent": { "version": "1.0.1", @@ -14000,11 +12890,6 @@ "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", "dev": true }, - "tiny-emitter": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.0.2.tgz", - "integrity": "sha512-2NM0auVBGft5tee/OxP4PI3d8WItkDM+fPnaRAVo6xTDI2knbz9eC5ArWGqtGlYqiH3RU5yMpdyTTO7MguC4ow==" - }, "tiny-lr": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-1.1.1.tgz", @@ -14036,16 +12921,6 @@ } } }, - "tinycolor2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.1.tgz", - "integrity": "sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g=" - }, - "tinymce": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/tinymce/-/tinymce-4.8.3.tgz", - "integrity": "sha512-kNEsKTqUYZRG+GTZ7tcVAktUlDeApz6d3IqnNaZXNX0CP0BsK8NPC02FCJ0EVYxdNnq6fvvknWkItmbreXD9aA==" - }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -14153,11 +13028,6 @@ "punycode": "^1.4.1" } }, - "traverse": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", - "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=" - }, "trim-newlines": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", @@ -14252,11 +13122,6 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, - "ua-parser-js": { - "version": "0.7.18", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.18.tgz", - "integrity": "sha512-LtzwHlVHwFGTptfNSgezHp7WUlwiqb0gA9AALRbKaERfxwJoiX0A73QbTToxteIAuIaFshhgIZfqK8s7clqgnA==" - }, "uglify-js": { "version": "3.4.9", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", @@ -14523,6 +13388,7 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, "requires": { "punycode": "1.3.2", "querystring": "0.2.0" @@ -14531,7 +13397,8 @@ "punycode": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true } } }, @@ -14612,7 +13479,8 @@ "uuid": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true }, "vali-date": { "version": "1.0.0", @@ -15493,6 +14361,7 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, "requires": { "isexe": "^2.0.0" } @@ -15574,6 +14443,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1" @@ -15639,7 +14509,8 @@ "y18n": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true }, "yallist": { "version": "2.1.2", diff --git a/package.json b/package.json index 70537cc536672..5fe3c2398c632 100644 --- a/package.json +++ b/package.json @@ -50,40 +50,6 @@ }, "dependencies": { "@babel/polyfill": "^7.0.0", - "@wordpress/a11y": "^2.0.2", - "@wordpress/api-fetch": "^2.1.0", - "@wordpress/autop": "^2.0.2", - "@wordpress/blob": "^2.1.0", - "@wordpress/block-library": "^2.1.4", - "@wordpress/block-serialization-default-parser": "^1.0.1", - "@wordpress/blocks": "^4.0.4", - "@wordpress/components": "^4.2.1", - "@wordpress/compose": "^2.0.5", - "@wordpress/core-data": "^2.0.6", - "@wordpress/data": "^2.1.4", - "@wordpress/date": "^2.0.3", - "@wordpress/deprecated": "^2.0.2", - "@wordpress/dom": "^2.0.4", - "@wordpress/dom-ready": "^2.0.2", - "@wordpress/edit-post": "^1.0.4", - "@wordpress/editor": "^5.0.1", - "@wordpress/element": "^2.1.4", - "@wordpress/escape-html": "^1.0.1", - "@wordpress/hooks": "^2.0.2", - "@wordpress/html-entities": "^2.0.2", - "@wordpress/i18n": "^3.0.1", - "@wordpress/is-shallow-equal": "^1.1.4", - "@wordpress/keycodes": "^2.0.2", - "@wordpress/list-reusable-blocks": "^1.1.4", - "@wordpress/nux": "^2.0.6", - "@wordpress/plugins": "^2.0.5", - "@wordpress/redux-routine": "^3.0.3", - "@wordpress/rich-text": "^1.0.1", - "@wordpress/shortcode": "^2.0.2", - "@wordpress/token-list": "^1.0.2", - "@wordpress/url": "^2.1.0", - "@wordpress/viewport": "^2.0.5", - "@wordpress/wordcount": "^2.0.2", "element-closest": "^2.0.2", "formdata-polyfill": "^3.0.12", "lodash": "^4.17.11", @@ -92,5 +58,11 @@ "react": "^16.5.2", "react-dom": "^16.5.2", "whatwg-fetch": "^3.0.0" + }, + "scripts": { + "postinstall": "grunt download-packages" + }, + "wordpress": { + "packagesVersion": "v4.1.0" } } diff --git a/tools/webpack/packages.js b/tools/webpack/packages.js index 4ed4bc23fe08b..2fc0845f61645 100644 --- a/tools/webpack/packages.js +++ b/tools/webpack/packages.js @@ -16,6 +16,7 @@ const CustomTemplatedPathPlugin = require( '@wordpress/custom-templated-path-web const LibraryExportDefaultPlugin = require( '@wordpress/library-export-default-webpack-plugin' ); const baseDir = join( __dirname, '../../' ); +const PACKAGES_PATH = 'packages/packages'; /** * Given a string, returns a new string with dash separators converedd to @@ -159,7 +160,7 @@ module.exports = function( env = { environment: 'production', watch: false } ) { let vendorCopies = mode === "development" ? developmentCopies : [ ...minifiedCopies, ...minifyCopies ]; let cssCopies = packages.map( ( packageName ) => ( { - from: join( baseDir, `node_modules/@wordpress/${ packageName }/build-style/*.css` ), + from: join( baseDir, PACKAGES_PATH, `${ packageName }/build-style/*.css` ), to: join( baseDir, `${ buildTarget }/css/dist/${ packageName }/` ), flatten: true, transform: ( content ) => { @@ -178,7 +179,7 @@ module.exports = function( env = { environment: 'production', watch: false } ) { } ) ); const phpCopies = Object.keys( phpFiles ).map( ( filename ) => ( { - from: join( baseDir, `node_modules/@wordpress/${ filename }` ), + from: join( baseDir, PACKAGES_PATH, filename ), to: join( baseDir, `src/${ phpFiles[ filename ] }` ), } ) ); @@ -187,7 +188,7 @@ module.exports = function( env = { environment: 'production', watch: false } ) { entry: packages.reduce( ( memo, packageName ) => { const name = camelCaseDash( packageName ); - memo[ name ] = join( baseDir, `node_modules/@wordpress/${ packageName }` ); + memo[ name ] = join( baseDir, PACKAGES_PATH, packageName ); return memo; }, {} ), output: { From 4f05bb81f609559f865a85687166b9d7881639d2 Mon Sep 17 00:00:00 2001 From: herregroen Date: Thu, 25 Oct 2018 13:59:51 +0000 Subject: [PATCH 530/537] I18N: Add JavaScript translation support. Adds the `wp_set_script_translations` function which registers translations for a JavaScript file. This function takes a handle, domain and optionally a path and ensures JavaScript translation files are loaded if they exist. Props atimmer, omarreiss, nerrad, swissspidy, ocean90. Fixes #45103. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43825 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/class.wp-scripts.php | 35 ++++++++ src/wp-includes/functions.wp-scripts.php | 31 +++++++ src/wp-includes/l10n.php | 85 +++++++++++++++++++ ...n_US-813e104eb47e13dd4cc5af844c618754.json | 30 +++++++ tests/phpunit/tests/dependencies/scripts.php | 17 ++++ 5 files changed, 198 insertions(+) create mode 100644 tests/phpunit/data/languages/default-en_US-813e104eb47e13dd4cc5af844c618754.json diff --git a/src/wp-includes/class.wp-scripts.php b/src/wp-includes/class.wp-scripts.php index 6b29c81c39074..22469d83327d1 100644 --- a/src/wp-includes/class.wp-scripts.php +++ b/src/wp-includes/class.wp-scripts.php @@ -477,6 +477,41 @@ public function set_group( $handle, $recursion, $group = false ) { return parent::set_group( $handle, $recursion, $grp ); } + /** + * Register a translation textdomain. + * + * @since 5.0.0 + * + * @param string $handle Name of the script to register a translation domain to. + * @param string $domain The textdomain. + * @param string $path Optional. The full file path to the directory containing translation files. + * + * @return bool True if the textdomain was registered, false if not. + */ + public function set_translations( $handle, $domain, $path = null ) { + if ( ! isset( $this->registered[ $handle ] ) ) { + return false; + } + + $json_translations = load_script_textdomain( $handle, $domain, $path ); + + if ( ! $json_translations ) { + return false; + } + + /** @var \_WP_Dependency $obj */ + $obj = $this->registered[ $handle ]; + $obj->deps[] = 'wp-i18n'; + + return $this->add_inline_script( + $handle, + '(function( translations ){' . + 'wp.i18n.setLocaleData( translations.locale_data, "' . $domain . '" );' . + '})(' . $json_translations . ');', + 'before' + ); + } + /** * Determines script dependencies. * diff --git a/src/wp-includes/functions.wp-scripts.php b/src/wp-includes/functions.wp-scripts.php index dccaaf262a954..d7b5d1d0d6091 100644 --- a/src/wp-includes/functions.wp-scripts.php +++ b/src/wp-includes/functions.wp-scripts.php @@ -192,6 +192,37 @@ function wp_localize_script( $handle, $object_name, $l10n ) { return $wp_scripts->localize( $handle, $object_name, $l10n ); } +/** + * Register translated strings for a script. + * + * Works only if the script has already been added. + * + * @see WP_Scripts::set_translations() + * @link https://core.trac.wordpress.org/ticket/45103 + * @global WP_Scripts $wp_scripts The WP_Scripts object for printing scripts. + * + * @since 5.0.0 + * + * @param string $handle Script handle the textdomain will be attached to. + * @param string $domain The textdomain. + * @param string $path Optional. The full file path to the directory containing translation files. + * + * @return bool True if the textdomain was successfully localized, false otherwise. + */ +function wp_set_script_translations( $handle, $domain, $path = null ) { + global $wp_scripts; + if ( ! ( $wp_scripts instanceof WP_Scripts ) ) { + _wp_scripts_maybe_doing_it_wrong( __FUNCTION__ ); + return false; + } + + if ( ! wp_script_is( $handle, 'enqueued' ) ) { + _doing_it_wrong( __FUNCTION__, __( 'Script translations may only be set if the script is enqueued.' ), '5.0.0' ); + } + + return $wp_scripts->set_translations( $handle, $domain, $path ); +} + /** * Remove a registered script. * diff --git a/src/wp-includes/l10n.php b/src/wp-includes/l10n.php index b1aa6c553c95d..56996bdc94708 100644 --- a/src/wp-includes/l10n.php +++ b/src/wp-includes/l10n.php @@ -869,6 +869,91 @@ function load_child_theme_textdomain( $domain, $path = false ) { return load_theme_textdomain( $domain, $path ); } +/** + * Load the script translated strings. + * + * @see WP_Scripts::set_translations() + * @link https://core.trac.wordpress.org/ticket/45103 + * @global WP_Scripts $wp_scripts The WP_Scripts object for printing scripts. + * + * @param string $handle Name of the script to register a translation domain to. + * @param string $domain The textdomain. + * @param string $path Optional. The full file path to the directory containing translation files. + * + * @return false|string False if the script textdomain could not be loaded, the translated strings + * in JSON encoding otherwise. + */ +function load_script_textdomain( $handle, $domain, $path = null ) { + global $wp_scripts; + + $locale = is_admin() ? get_locale() : get_user_locale(); + + // If a path was given and the handle file exists simply return it. + $handle_filename = $domain . '-' . $locale . '-' . $handle . '.json'; + if ( $path && file_exists( $path . '/' . $handle_filename ) ) { + return file_get_contents( $path . '/' . $handle_filename ); + } + + $obj = $wp_scripts->registered[ $handle ]; + + /** This filter is documented in wp-includes/class.wp-scripts.php */ + $src = esc_url( apply_filters( 'script_loader_src', $obj->src, $handle ) ); + + $relative = false; + $languages_path = WP_LANG_DIR; + + $src_url = wp_parse_url( $src ); + $content_url = wp_parse_url( content_url() ); + $site_url = wp_parse_url( site_url() ); + + // If the host is the same or it's a relative URL. + if ( + strpos( $content_url['path'], $src_url['path'] ) === 0 && + ( ! isset( $src_url['host'] ) || $src_url['host'] !== $content_url['host'] ) + ) { + // Make the src relative the specific plugin or theme. + $relative = trim( substr( $src, strlen( $content_url['path'] ) ), '/' ); + $relative = explode( '/', $relative ); + + $languages_path = WP_LANG_DIR . '/' . $relative[0]; + + $relative = array_slice( $relative, 2 ); + $relative = implode( '/', $relative ); + } else if ( + ! isset( $site_url['path'] ) && + ( ! isset( $src_url['host'] ) || $src_url['host'] !== $site_url['host'] ) + ) { + $relative = trim( $src_url['path'], '/' ); + } else if ( + ( strpos( $site_url['path'], $src_url['path'] ) === 0 ) && + ( ! isset( $src_url['host'] ) || $src_url['host'] !== $site_url['host'] ) + ) { + // Make the src relative to the WP root. + $relative = substr( $src, strlen( $site_url['path'] ) ); + $relative = trim( $relative, '/' ); + } + + // If the source is not from WP. + if ( false === $relative ) { + return false; + } + + // Translations are always based on the unminified filename. + if ( substr( $relative, -7 ) === '.min.js' ) { + $relative = substr( $relative, 0, -7 ) . '.js'; + } + + $md5_filename = $domain . '-' . $locale . '-' . md5( $relative ) . '.json'; + if ( $path && file_exists( $path . '/' . $md5_filename ) ) { + return file_get_contents( $path . '/' . $md5_filename ); + } + if ( file_exists( $languages_path . '/' . $md5_filename ) ) { + return file_get_contents( $languages_path . '/' . $md5_filename ); + } + + return false; +} + /** * Loads plugin and theme textdomains just-in-time. * diff --git a/tests/phpunit/data/languages/default-en_US-813e104eb47e13dd4cc5af844c618754.json b/tests/phpunit/data/languages/default-en_US-813e104eb47e13dd4cc5af844c618754.json new file mode 100644 index 0000000000000..367f1390ea0ba --- /dev/null +++ b/tests/phpunit/data/languages/default-en_US-813e104eb47e13dd4cc5af844c618754.json @@ -0,0 +1,30 @@ +{ + "translation-revision-data": "+0000", + "generator": "GlotPress/2.3.0-alpha", + "domain": "messages", + "locale_data": { + "messages": { + "": { + "domain": "messages", + "plural-forms": "n != 1", + "lang": "en-gb" + }, + "This file is too big. Files must be less than %d KB in size.": [ + "This file is too big. Files must be less than %d KB in size." + ], + "%d Theme Update": [ + "%d Theme Update", + "%d Theme Updates" + ], + "password strength\u0004Medium": [ + "Medium" + ], + "taxonomy singular name\u0004Category": [ + "Category" + ], + "post type general name\u0004Pages": [ + "Pages" + ] + } + } +} diff --git a/tests/phpunit/tests/dependencies/scripts.php b/tests/phpunit/tests/dependencies/scripts.php index 6007a2f402ef0..a7310951d7ba9 100644 --- a/tests/phpunit/tests/dependencies/scripts.php +++ b/tests/phpunit/tests/dependencies/scripts.php @@ -767,6 +767,23 @@ public function test_wp_add_inline_script_before_third_core_script_prints_two_co $this->assertEquals( $expected, get_echo( 'wp_print_scripts' ) ); } + /** + * @ticket 45103 + */ + public function test_wp_set_script_translation() { + wp_register_script( 'wp-i18n', '/wp-includes/js/dist/wp-i18n.js', array(), null ); + wp_enqueue_script( 'test-example', '/wp-includes/js/script.js', array(), null ); + wp_set_script_translations( 'test-example', 'default', __DIR__ . '/../../data/languages/' ); + + $expected = ""; + $expected .= "\n\n"; + $expected .= "\n"; + + $this->assertEquals( $expected, get_echo( 'wp_print_scripts' ) ); + } + /** * Testing `wp_enqueue_code_editor` with file path. * From 2d74b7157cea3caa81691e7e547cb0821950278d Mon Sep 17 00:00:00 2001 From: Anton Timmermans Date: Thu, 25 Oct 2018 15:22:12 +0000 Subject: [PATCH 531/537] Build tools: Fix build after [43824]. Props omarreiss. See #45145. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43826 602fd350-edb4-49c9-b593-d223f7449a82 --- Gruntfile.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index 35ee220bde797..bf587bfdd5672 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1,7 +1,7 @@ /* jshint node:true */ /* globals Set */ var webpackConfig = require( './webpack.config' ); -const { execSync } = require( 'child_process' ); +var execSync = require( 'child_process' ).execSync; module.exports = function(grunt) { var path = require('path'), @@ -12,7 +12,7 @@ module.exports = function(grunt) { BANNER_TEXT = '/*! This file is auto-generated */', autoprefixer = require( 'autoprefixer' ); - const packageJson = grunt.file.readJSON( 'package.json' ); + var packageJson = grunt.file.readJSON( 'package.json' ); // Load tasks. require('matchdep').filterDev(['grunt-*', '!grunt-legacy-util']).forEach( grunt.loadNpmTasks ); @@ -788,18 +788,18 @@ module.exports = function(grunt) { ] ); grunt.registerTask( 'download-packages', function() { - const directory = 'packages'; - const version = packageJson.wordpress.packagesVersion; + var directory = 'packages'; + var version = packageJson.wordpress.packagesVersion; if ( ! grunt.file.exists( directory ) ) { // Clone gutenberg - execSync( `git clone https://github.com/WordPress/gutenberg.git ${ directory }`, { stdio: 'inherit' } ); + execSync( 'git clone https://github.com/WordPress/gutenberg.git ' + directory, { stdio: 'inherit' } ); } execSync( 'git fetch --tags', { cwd: directory, stdio: 'inherit' } ); // Make sure we are on the correct version of Gutenberg. - execSync( `git reset --hard ${ version }`, { cwd: directory, stdio: 'inherit' } ); + execSync( 'git reset --hard ' + version, { cwd: directory, stdio: 'inherit' } ); // Install Gutenberg dependencies and build the packages. execSync( 'npm install', { cwd: directory, stdio: 'inherit' } ); From ebcfbfe2867dc1cf9cfc5afff9a66f9cfb3ce520 Mon Sep 17 00:00:00 2001 From: Drew Jaynes Date: Fri, 26 Oct 2018 01:23:29 +0000 Subject: [PATCH 532/537] Docs: Link to the "Conditional Tags" article in the Theme Developer Handbook from the descriptions for a variety of core conditional tag functions. These notations largely serve to direct consumers (of both the source and the parsed code reference) to extended information on individual and related conditional tags throughout WordPress. The changeset also standardizes corresponding DocBlock summaries to use third-person singular verbs. Notations have been added for the following functions: * comments_open() * email exists() * has_excerpt() * has_post_thumbnail() * has_tag() * in_category() * in_the_loop() * is_404() * is_active_sidebar() * is_active_widget() * is_admin() * is_admin_bar_showing() * is_archive() * is_attachment() * is_author() * is_blog_installed() * is_category() * is_comments_popup() * is_date() * is_day() * is_dynamic_sidebar() * is_feed() * is_front_page() * is_home() * is_local_attachment() * is_main_query * is_month() * is_multi_author * is_new_day() * is_page() * is_page_template() * is_paged() * is_plugin_active() * is_plugin_active_for_network() * is_plugin_inactive() * is_plugin_page() * is_post_type_archive() * is_preview() * is_rtl() * is_search() * is_single() * is_singular() * is_sticky() * is_tag() * is_tax() * is_taxonomy_hierarchical() * is_time() * is_trackback() * is_user_logged_in() * is_year() * pings_open() * post_type_exists() * taxonomy_exists() * term_exists() * username exists() * wp_attachment_is_image() * wp_script_is() Merges [42710] to the 5.0 branch. Props janalwin. Fixes #43254. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43827 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/plugin.php | 26 ++- src/wp-includes/admin-bar.php | 8 +- src/wp-includes/author-template.php | 8 +- src/wp-includes/category-template.php | 12 +- src/wp-includes/comment-template.php | 14 +- src/wp-includes/deprecated.php | 16 +- src/wp-includes/functions.php | 16 +- src/wp-includes/functions.wp-scripts.php | 8 +- src/wp-includes/l10n.php | 6 +- src/wp-includes/load.php | 6 +- src/wp-includes/pluggable.php | 6 +- src/wp-includes/post-template.php | 14 +- src/wp-includes/post-thumbnail-template.php | 6 +- src/wp-includes/post.php | 28 ++- src/wp-includes/query.php | 188 +++++++++++++++----- src/wp-includes/taxonomy.php | 18 +- src/wp-includes/user.php | 12 +- src/wp-includes/widgets.php | 24 ++- 18 files changed, 322 insertions(+), 94 deletions(-) diff --git a/src/wp-admin/includes/plugin.php b/src/wp-admin/includes/plugin.php index 792b2a63d82af..2dd58b3354643 100644 --- a/src/wp-admin/includes/plugin.php +++ b/src/wp-admin/includes/plugin.php @@ -430,13 +430,17 @@ function _get_dropins() { } /** - * Check whether a plugin is active. + * Determines whether a plugin is active. * * Only plugins installed in the plugins/ folder can be active. * * Plugins in the mu-plugins/ folder can't be "activated," so this function will * return false for those plugins. - * + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. + * * @since 2.5.0 * * @param string $plugin Path to the main plugin file from plugins directory. @@ -447,10 +451,14 @@ function is_plugin_active( $plugin ) { } /** - * Check whether the plugin is inactive. + * Determines whether the plugin is inactive. * * Reverse of is_plugin_active(). Used as a callback. - * + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. + * * @since 3.1.0 * @see is_plugin_active() * @@ -462,17 +470,21 @@ function is_plugin_inactive( $plugin ) { } /** - * Check whether the plugin is active for the entire network. + * Determines whether the plugin is active for the entire network. * * Only plugins installed in the plugins/ folder can be active. * * Plugins in the mu-plugins/ folder can't be "activated," so this function will * return false for those plugins. - * + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. + * * @since 3.0.0 * * @param string $plugin Path to the main plugin file from plugins directory. - * @return bool True, if active for the network, otherwise false. + * @return bool True if active for the network, otherwise false. */ function is_plugin_active_for_network( $plugin ) { if ( !is_multisite() ) diff --git a/src/wp-includes/admin-bar.php b/src/wp-includes/admin-bar.php index 1be7034a40134..d2156e4cca028 100644 --- a/src/wp-includes/admin-bar.php +++ b/src/wp-includes/admin-bar.php @@ -985,8 +985,12 @@ function show_admin_bar( $show ) { } /** - * Determine whether the admin bar should be showing. - * + * Determines whether the admin bar should be showing. + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. + * * @since 3.1.0 * * @global bool $show_admin_bar diff --git a/src/wp-includes/author-template.php b/src/wp-includes/author-template.php index 4baf68147922e..f3efee133e000 100644 --- a/src/wp-includes/author-template.php +++ b/src/wp-includes/author-template.php @@ -503,10 +503,14 @@ function wp_list_authors( $args = '' ) { } /** - * Does this site have more than one author + * Determines whether this site has more than one author. * * Checks to see if more than one author has published posts. - * + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. + * * @since 3.2.0 * * @global wpdb $wpdb WordPress database abstraction object. diff --git a/src/wp-includes/category-template.php b/src/wp-includes/category-template.php index e090fac264173..83cb24c7e1ccc 100644 --- a/src/wp-includes/category-template.php +++ b/src/wp-includes/category-template.php @@ -212,7 +212,7 @@ function get_the_category_list( $separator = '', $parents = '', $post_id = false } /** - * Check if the current post is within any of the given categories. + * Checks if the current post is within any of the given categories. * * The given categories are checked against the post's categories' term_ids, names and slugs. * Categories given as integers will only be checked against the post's categories' term_ids. @@ -222,6 +222,10 @@ function get_the_category_list( $separator = '', $parents = '', $post_id = false * Prior to v2.7, only one category could be compared: in_category( $single_category ). * Prior to v2.7, this function could only be used in the WordPress Loop. * As of 2.7, the function can be used anywhere if it is provided a post ID or post object. + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. * * @since 1.2.0 * @@ -1367,7 +1371,7 @@ function has_category( $category = '', $post = null ) { } /** - * Check if the current post has any of given tags. + * Checks if the current post has any of given tags. * * The given tags are checked against the post's tags' term_ids, names and slugs. * Tags given as integers will only be checked against the post's tags' term_ids. @@ -1376,6 +1380,10 @@ function has_category( $category = '', $post = null ) { * Prior to v2.7 of WordPress, tags given as integers would also be checked against the post's tags' names and slugs (in addition to term_ids) * Prior to v2.7, this function could only be used in the WordPress Loop. * As of 2.7, the function can be used anywhere if it is provided a post ID or post object. + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. * * @since 2.6.0 * diff --git a/src/wp-includes/comment-template.php b/src/wp-includes/comment-template.php index 5bcbcd674ee06..c44514738cb43 100644 --- a/src/wp-includes/comment-template.php +++ b/src/wp-includes/comment-template.php @@ -1181,8 +1181,12 @@ function trackback_rdf( $deprecated = '' ) { } /** - * Whether the current post is open for comments. - * + * Determines whether the current post is open for comments. + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. + * * @since 1.5.0 * * @param int|WP_Post $post_id Post ID or WP_Post object. Default current post. @@ -1207,7 +1211,11 @@ function comments_open( $post_id = null ) { } /** - * Whether the current post is open for pings. + * Determines whether the current post is open for pings. + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. * * @since 1.5.0 * diff --git a/src/wp-includes/deprecated.php b/src/wp-includes/deprecated.php index 0b3ce28d33b8a..89203d764cfeb 100644 --- a/src/wp-includes/deprecated.php +++ b/src/wp-includes/deprecated.php @@ -2508,10 +2508,14 @@ function is_term( $term, $taxonomy = '', $parent = 0 ) { } /** - * Is the current admin page generated by a plugin? + * Determines whether the current admin page is generated by a plugin. * * Use global $plugin_page and/or get_plugin_page_hookname() hooks. - * + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. + * * @since 1.5.0 * @deprecated 3.1.0 * @@ -3713,8 +3717,12 @@ function get_comments_popup_template() { } /** - * Whether the current URL is within the comments popup window. - * + * Determines whether the current URL is within the comments popup window. + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. + * * @since 1.5.0 * @deprecated 4.5.0 * diff --git a/src/wp-includes/functions.php b/src/wp-includes/functions.php index e8751414e47ab..c44685e604ea5 100644 --- a/src/wp-includes/functions.php +++ b/src/wp-includes/functions.php @@ -654,9 +654,13 @@ function wp_get_http_headers( $url, $deprecated = false ) { } /** - * Whether the publish date of the current post in the loop is different from the - * publish date of the previous post in the loop. - * + * Determines whether the publish date of the current post in the loop is different + * from the publish date of the previous post in the loop. + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. + * * @since 0.71 * * @global string $currentday The day of the current post in the loop. @@ -1340,13 +1344,17 @@ function do_robots() { } /** - * Test whether WordPress is already installed. + * Determines whether WordPress is already installed. * * The cache will be checked first. If you have a cache plugin, which saves * the cache values, then this will work. If you use the default WordPress * cache, and the database goes away, then you might have problems. * * Checks for the 'siteurl' option for whether WordPress is installed. + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. * * @since 2.1.0 * diff --git a/src/wp-includes/functions.wp-scripts.php b/src/wp-includes/functions.wp-scripts.php index d7b5d1d0d6091..efe82d9774c80 100644 --- a/src/wp-includes/functions.wp-scripts.php +++ b/src/wp-includes/functions.wp-scripts.php @@ -329,8 +329,12 @@ function wp_dequeue_script( $handle ) { } /** - * Check whether a script has been added to the queue. - * + * Determines whether a script has been added to the queue. + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. + * * @since 2.8.0 * @since 3.5.0 'enqueued' added as an alias of the 'queue' list. * diff --git a/src/wp-includes/l10n.php b/src/wp-includes/l10n.php index 56996bdc94708..8df78717d52d6 100644 --- a/src/wp-includes/l10n.php +++ b/src/wp-includes/l10n.php @@ -1385,7 +1385,11 @@ function wp_dropdown_languages( $args = array() ) { } /** - * Checks if current locale is RTL. + * Determines whether the current locale is right-to-left (RTL). + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. * * @since 3.0.0 * diff --git a/src/wp-includes/load.php b/src/wp-includes/load.php index 3551daf6da996..64e4e447cbec2 100644 --- a/src/wp-includes/load.php +++ b/src/wp-includes/load.php @@ -701,11 +701,15 @@ function wp_clone( $object ) { } /** - * Whether the current request is for an administrative interface page. + * Determines whether the current request is for an administrative interface page. * * Does not check if the user is an administrator; current_user_can() * for checking roles and capabilities. * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. + * * @since 1.5.1 * * @global WP_Screen $current_screen diff --git a/src/wp-includes/pluggable.php b/src/wp-includes/pluggable.php index dda43ce6582d2..0fc242a6b7ffa 100644 --- a/src/wp-includes/pluggable.php +++ b/src/wp-includes/pluggable.php @@ -975,7 +975,11 @@ function wp_clear_auth_cookie() { if ( !function_exists('is_user_logged_in') ) : /** - * Checks if the current visitor is a logged in user. + * Determines whether the current visitor is a logged in user. + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. * * @since 2.0.0 * diff --git a/src/wp-includes/post-template.php b/src/wp-includes/post-template.php index 9ff1d08ea4202..91c2d8f660e2c 100644 --- a/src/wp-includes/post-template.php +++ b/src/wp-includes/post-template.php @@ -398,7 +398,11 @@ function get_the_excerpt( $post = null ) { } /** - * Whether the post has a custom excerpt. + * Determines whether the post has a custom excerpt. + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. * * @since 2.3.0 * @@ -1630,12 +1634,16 @@ function get_the_password_form( $post = 0 ) { } /** - * Whether currently in a page template. + * Determines whether currently in a page template. * * This template tag allows you to determine if you are in a page template. * You can optionally provide a template name or array of template names * and then the check will be specific to that template. - * + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. + * * @since 2.5.0 * @since 4.2.0 The `$template` parameter was changed to also accept an array of page templates. * @since 4.7.0 Now works with any post type, not just pages. diff --git a/src/wp-includes/post-thumbnail-template.php b/src/wp-includes/post-thumbnail-template.php index 0dbe74aad6f47..3e72bb1395698 100644 --- a/src/wp-includes/post-thumbnail-template.php +++ b/src/wp-includes/post-thumbnail-template.php @@ -10,7 +10,11 @@ */ /** - * Check if post has an image attached. + * Determines whether a post has an image attached. + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. * * @since 2.9.0 * @since 4.4.0 `$post` can be a post ID or WP_Post object. diff --git a/src/wp-includes/post.php b/src/wp-includes/post.php index 89b76184c3309..9f2a404b30fc6 100644 --- a/src/wp-includes/post.php +++ b/src/wp-includes/post.php @@ -999,7 +999,11 @@ function is_post_type_hierarchical( $post_type ) { } /** - * Check if a post type is registered. + * Determines whether a post type is registered. + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. * * @since 3.0.0 * @@ -2018,11 +2022,15 @@ function get_post_custom_values( $key = '', $post_id = 0 ) { } /** - * Check if post is sticky. + * Determines whether a post is sticky. * * Sticky posts should remain at the top of The Loop. If the post ID is not * given, then The Loop ID for the current post will be used. - * + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. + * * @since 2.7.0 * * @param int $post_id Optional. Post ID. Default is ID of the global $post. @@ -4990,8 +4998,12 @@ function get_pages( $args = array() ) { // /** - * Check if the attachment URI is local one and is really an attachment. - * + * Determines whether an attachment URI is local and really an attachment. + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. + * * @since 2.0.0 * * @param string $url URL to check @@ -5487,7 +5499,11 @@ function wp_attachment_is( $type, $post = null ) { } /** - * Checks if the attachment is an image. + * Determines whether an attachment is an image. + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. * * @since 2.1.0 * @since 4.2.0 Modified into wrapper for wp_attachment_is() and diff --git a/src/wp-includes/query.php b/src/wp-includes/query.php index 7df90a963ec55..8192090478983 100644 --- a/src/wp-includes/query.php +++ b/src/wp-includes/query.php @@ -136,10 +136,14 @@ function wp_reset_postdata() { */ /** - * Is the query for an existing archive page? + * Determines whether the query is for an existing archive page. * * Month, Year, Category, Author, Post Type archive... - * + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. + * * @since 1.5.0 * * @global WP_Query $wp_query Global WP_Query instance. @@ -158,8 +162,12 @@ function is_archive() { } /** - * Is the query for an existing post type archive page? - * + * Determines whether the query is for an existing post type archive page. + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. + * * @since 3.1.0 * * @global WP_Query $wp_query Global WP_Query instance. @@ -179,8 +187,12 @@ function is_post_type_archive( $post_types = '' ) { } /** - * Is the query for an existing attachment page? - * + * Determines whether the query is for an existing attachment page. + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. + * * @since 2.0.0 * * @global WP_Query $wp_query Global WP_Query instance. @@ -200,11 +212,15 @@ function is_attachment( $attachment = '' ) { } /** - * Is the query for an existing author archive page? + * Determines whether the query is for an existing author archive page. * * If the $author parameter is specified, this function will additionally * check if the query is for one of the authors specified. - * + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. + * * @since 1.5.0 * * @global WP_Query $wp_query Global WP_Query instance. @@ -224,11 +240,15 @@ function is_author( $author = '' ) { } /** - * Is the query for an existing category archive page? + * Determines whether the query is for an existing category archive page. * * If the $category parameter is specified, this function will additionally * check if the query is for one of the categories specified. - * + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. + * * @since 1.5.0 * * @global WP_Query $wp_query Global WP_Query instance. @@ -248,10 +268,14 @@ function is_category( $category = '' ) { } /** - * Is the query for an existing tag archive page? + * Determines whether the query is for an existing tag archive page. * * If the $tag parameter is specified, this function will additionally * check if the query is for one of the tags specified. + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. * * @since 2.3.0 * @@ -272,7 +296,7 @@ function is_tag( $tag = '' ) { } /** - * Is the query for an existing custom taxonomy archive page? + * Determines whether the query is for an existing custom taxonomy archive page. * * If the $taxonomy parameter is specified, this function will additionally * check if the query is for that specific $taxonomy. @@ -280,6 +304,10 @@ function is_tag( $tag = '' ) { * If the $term parameter is specified in addition to the $taxonomy parameter, * this function will additionally check if the query is for one of the terms * specified. + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. * * @since 2.5.0 * @@ -301,8 +329,12 @@ function is_tax( $taxonomy = '', $term = '' ) { } /** - * Is the query for an existing date archive? - * + * Determines whether the query is for an existing date archive. + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. + * * @since 1.5.0 * * @global WP_Query $wp_query Global WP_Query instance. @@ -321,7 +353,11 @@ function is_date() { } /** - * Is the query for an existing day archive? + * Determines whether the query is for an existing day archive. + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. * * @since 1.5.0 * @@ -341,8 +377,12 @@ function is_day() { } /** - * Is the query for a feed? - * + * Determines whether the query is for a feed. + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. + * * @since 1.5.0 * * @global WP_Query $wp_query Global WP_Query instance. @@ -382,7 +422,7 @@ function is_comment_feed() { } /** - * Is the query for the front page of the site? + * Determines whether the query is for the front page of the site. * * This is for what is displayed at your site's main URL. * @@ -392,7 +432,11 @@ function is_comment_feed() { * true when viewing that page. * * Otherwise the same as @see is_home() - * + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. + * * @since 2.5.0 * * @global WP_Query $wp_query Global WP_Query instance. @@ -411,7 +455,7 @@ function is_front_page() { } /** - * Determines if the query is for the blog homepage. + * Determines whether the query is for the blog homepage. * * The blog homepage is the page that shows the time-based blog content of the site. * @@ -420,7 +464,11 @@ function is_front_page() { * * If a static page is set for the front page of the site, this function will return true only * on the page you set as the "Posts page". - * + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. + * * @since 1.5.0 * * @see is_front_page() @@ -440,8 +488,12 @@ function is_home() { } /** - * Is the query for an existing month archive? - * + * Determines whether the query is for an existing month archive. + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. + * * @since 1.5.0 * * @global WP_Query $wp_query Global WP_Query instance. @@ -460,11 +512,15 @@ function is_month() { } /** - * Is the query for an existing single page? + * Determines whether the query is for an existing single page. * * If the $page parameter is specified, this function will additionally * check if the query is for one of the pages specified. - * + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. + * * @see is_single() * @see is_singular() * @@ -487,8 +543,12 @@ function is_page( $page = '' ) { } /** - * Is the query for paged result and not for the first page? - * + * Determines whether the query is for paged results and not for the first page. + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. + * * @since 1.5.0 * * @global WP_Query $wp_query Global WP_Query instance. @@ -507,8 +567,12 @@ function is_paged() { } /** - * Is the query for a post or page preview? - * + * Determines whether the query is for a post or page preview. + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. + * * @since 2.0.0 * * @global WP_Query $wp_query Global WP_Query instance. @@ -547,8 +611,12 @@ function is_robots() { } /** - * Is the query for a search? - * + * Determines whether the query is for a search. + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. + * * @since 1.5.0 * * @global WP_Query $wp_query Global WP_Query instance. @@ -567,13 +635,17 @@ function is_search() { } /** - * Is the query for an existing single post? + * Determines whether the query is for an existing single post. * * Works for any post type, except attachments and pages * * If the $post parameter is specified, this function will additionally * check if the query is for one of the Posts specified. - * + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. + * * @see is_page() * @see is_singular() * @@ -596,12 +668,16 @@ function is_single( $post = '' ) { } /** - * Is the query for an existing single post of any post type (post, attachment, page, - * custom post types)? + * Determines whether the query is for an existing single post of any post type + * (post, attachment, page, custom post types). * * If the $post_types parameter is specified, this function will additionally * check if the query is for one of the Posts Types specified. - * + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. + * * @see is_page() * @see is_single() * @@ -624,7 +700,11 @@ function is_singular( $post_types = '' ) { } /** - * Is the query for a specific time? + * Determines whether the query is for a specific time. + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. * * @since 1.5.0 * @@ -644,7 +724,11 @@ function is_time() { } /** - * Is the query for a trackback endpoint call? + * Determines whether the query is for a trackback endpoint call. + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. * * @since 1.5.0 * @@ -664,7 +748,11 @@ function is_trackback() { } /** - * Is the query for an existing year archive? + * Determines whether the query is for an existing year archive. + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. * * @since 1.5.0 * @@ -684,8 +772,12 @@ function is_year() { } /** - * Is the query a 404 (returns no results)? - * + * Determines whether the query has resulted in a 404 (returns no results). + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. + * * @since 1.5.0 * * @global WP_Query $wp_query Global WP_Query instance. @@ -724,8 +816,12 @@ function is_embed() { } /** - * Is the query the main query? - * + * Determines whether the query is the main query. + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. + * * @since 3.3.0 * * @global WP_Query $wp_query Global WP_Query instance. @@ -768,7 +864,11 @@ function have_posts() { } /** - * Whether the caller is in the Loop. + * Determines whether the caller is in the Loop. + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. * * @since 2.0.0 * diff --git a/src/wp-includes/taxonomy.php b/src/wp-includes/taxonomy.php index a612df26b4517..5bf03fcb35492 100644 --- a/src/wp-includes/taxonomy.php +++ b/src/wp-includes/taxonomy.php @@ -242,9 +242,13 @@ function get_taxonomy( $taxonomy ) { } /** - * Checks that the taxonomy name exists. + * Determines whether the taxonomy name exists. * * Formerly is_taxonomy(), introduced in 2.3.0. + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. * * @since 3.0.0 * @@ -260,12 +264,16 @@ function taxonomy_exists( $taxonomy ) { } /** - * Whether the taxonomy object is hierarchical. + * Determines whether the taxonomy object is hierarchical. * * Checks to make sure that the taxonomy is an object first. Then Gets the * object, and finally returns the hierarchical value in the object. * * A false return value might also mean that the taxonomy does not exist. + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. * * @since 2.3.0 * @@ -1265,9 +1273,13 @@ function unregister_term_meta( $taxonomy, $meta_key ) { } /** - * Check if Term exists. + * Determines whether a term exists. * * Formerly is_term(), introduced in 2.3.0. + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. * * @since 3.0.0 * diff --git a/src/wp-includes/user.php b/src/wp-includes/user.php index ef3bc57dead95..02f64eead5bf5 100644 --- a/src/wp-includes/user.php +++ b/src/wp-includes/user.php @@ -1314,7 +1314,11 @@ function clean_user_cache( $user ) { } /** - * Checks whether the given username exists. + * Determines whether the given username exists. + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. * * @since 2.0.0 * @@ -1340,7 +1344,11 @@ function username_exists( $username ) { } /** - * Checks whether the given email exists. + * Determines whether the given email exists. + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. * * @since 2.1.0 * diff --git a/src/wp-includes/widgets.php b/src/wp-includes/widgets.php index 683c7ab9136ad..c86de84cb7ab2 100644 --- a/src/wp-includes/widgets.php +++ b/src/wp-includes/widgets.php @@ -775,7 +775,7 @@ function dynamic_sidebar( $index = 1 ) { } /** - * Whether widget is displayed on the front end. + * Determines whether a given widget is displayed on the front end. * * Either $callback or $id_base can be used * $id_base is the first argument when extending WP_Widget class @@ -786,7 +786,11 @@ function dynamic_sidebar( $index = 1 ) { * * NOTE: $widget_id and $id_base are the same for single widgets. To be effective * this function has to run after widgets have initialized, at action {@see 'init'} or later. - * + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. + * * @since 2.2.0 * * @global array $wp_registered_widgets @@ -822,8 +826,12 @@ function is_active_widget( $callback = false, $widget_id = false, $id_base = fal } /** - * Whether the dynamic sidebar is enabled and used by theme. - * + * Determines whether the dynamic sidebar is enabled and used by the theme. + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. + * * @since 2.2.0 * * @global array $wp_registered_widgets @@ -845,8 +853,12 @@ function is_dynamic_sidebar() { } /** - * Whether a sidebar is in use. - * + * Determines whether a sidebar is in use. + * + * For more information on this and similar theme functions, check out + * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ + * Conditional Tags} article in the Theme Developer Handbook. + * * @since 2.8.0 * * @param string|int $index Sidebar name, id or number to check. From 845f569b46864c04bede31eb370609802d2ed0ed Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Fri, 26 Oct 2018 03:54:02 +0000 Subject: [PATCH 533/537] Tests: Use `DIR_TESTDATA` in `test_wp_set_script_translation()`. `__DIR__` is not available in PHP 5.2.x. See #45103. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43828 602fd350-edb4-49c9-b593-d223f7449a82 --- tests/phpunit/tests/dependencies/scripts.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/phpunit/tests/dependencies/scripts.php b/tests/phpunit/tests/dependencies/scripts.php index a7310951d7ba9..8944fe125a162 100644 --- a/tests/phpunit/tests/dependencies/scripts.php +++ b/tests/phpunit/tests/dependencies/scripts.php @@ -773,12 +773,12 @@ public function test_wp_add_inline_script_before_third_core_script_prints_two_co public function test_wp_set_script_translation() { wp_register_script( 'wp-i18n', '/wp-includes/js/dist/wp-i18n.js', array(), null ); wp_enqueue_script( 'test-example', '/wp-includes/js/script.js', array(), null ); - wp_set_script_translations( 'test-example', 'default', __DIR__ . '/../../data/languages/' ); + wp_set_script_translations( 'test-example', 'default', DIR_TESTDATA . '/languages/' ); $expected = ""; $expected .= "\n\n"; + "})(" . file_get_contents( DIR_TESTDATA . '/languages/default-en_US-813e104eb47e13dd4cc5af844c618754.json') . ");\n\n"; $expected .= "\n"; $this->assertEquals( $expected, get_echo( 'wp_print_scripts' ) ); From 9cd32b93da25c935fbc9dfc16c805445c16d37cf Mon Sep 17 00:00:00 2001 From: Gary Pendergast Date: Fri, 26 Oct 2018 07:13:25 +0000 Subject: [PATCH 534/537] Accessibility: Media: Improve the usage of a few label elements in the media templates. Label elements should only be used for labelable elements. - `Uploaded By` and `Uploaded To` aren't form controls and shouldn't be associated with labels - changes the labels for media source, alternate sources, poster image, and tracks to solve a layout issue and explicitly associate the labels to their form fields (previously, the labels were wrapping also the Remove buttons) Merges [42444] to the 5.0 branch. Props Presskopp, afercia. Fixes #38759, #40468. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43829 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/media-template.php | 67 +++++++++++++++--------------- 1 file changed, 33 insertions(+), 34 deletions(-) diff --git a/src/wp-includes/media-template.php b/src/wp-includes/media-template.php index c45f3f00a739e..190f9044d3c07 100644 --- a/src/wp-includes/media-template.php +++ b/src/wp-includes/media-template.php @@ -69,7 +69,7 @@ function wp_underscore_video_template() { h = Math.ceil( ( data.model.height * w ) / data.model.width ); } else { h = data.model.height; - } + } if ( w ) { w_rule = 'width: ' + w + 'px; '; @@ -103,8 +103,8 @@ class="wp-video-shortcode {{ classes.join( ' ' ) }}" endforeach; ?><# if ( ! _.isUndefined( data.model. ) && data.model. ) { - #> <# + ?> if ( ! _.isUndefined( data.model. ) && data.model. ) { + #> <# } #> > @@ -408,19 +408,19 @@ function wp_print_media_templates() { -

        @@ -1045,11 +1045,11 @@ function wp_print_media_templates() { delete html5types[ ext ]; } #> -
        @@ -1161,11 +1161,11 @@ function wp_print_media_templates() { <# } #> <# if ( ! _.isEmpty( data.model.poster ) ) { #> -
        + + +
        + ' . wp_kses( + /* translators: 1: link to WP admin new post page. */ + __( 'Ready to publish your first post? Get started here.', 'twentynineteen' ), + array( + 'a' => array( + 'href' => array(), + ), + ) + ) . '

        ', + esc_url( admin_url( 'post-new.php' ) ) + ); + + elseif ( is_search() ) : + ?> + +

        + + +

        + +
        +
      • From 0ba73f24baa55bb5ea8bae182d8c6b6563db8d8e Mon Sep 17 00:00:00 2001 From: Gary Pendergast Date: Fri, 26 Oct 2018 08:10:18 +0000 Subject: [PATCH 535/537] Meta Boxes: Fix error when a meta box is rendered with a static method callback. When `WP_DEBUG` is set, ensure that a static method callback is passed to `ReflectionMethod`, instead of `ReflectionFunction`. Props DrewAPicture. Fixes #45192. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43830 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/template.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/wp-admin/includes/template.php b/src/wp-admin/includes/template.php index 9139246411dad..e51903e442da3 100644 --- a/src/wp-admin/includes/template.php +++ b/src/wp-admin/includes/template.php @@ -1096,6 +1096,8 @@ function do_meta_boxes( $screen, $context, $object ) { if ( WP_DEBUG && ! $screen->is_block_editor() && ! isset( $_GET['meta-box-loader'] ) ) { if ( is_array( $box['callback'] ) ) { $reflection = new ReflectionMethod( $box['callback'][0], $box['callback'][1] ); + } elseif ( false !== strpos( $box['callback'], '::' ) ) { + $reflection = new ReflectionMethod( $box['callback'] ); } else { $reflection = new ReflectionFunction( $box['callback'] ); } From 8dbb161323540bcbcfb52245b73688db30829aac Mon Sep 17 00:00:00 2001 From: Gary Pendergast Date: Fri, 26 Oct 2018 08:14:49 +0000 Subject: [PATCH 536/537] Script Loader: Add translator comments and remove textdomains. The inline script for `wp-date` incorrectly included a textdomain, and lacked translator comments. Props mukesh27. Fixes #45191, #45162. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43831 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/script-loader.php | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/wp-includes/script-loader.php b/src/wp-includes/script-loader.php index afe8c98c6a19a..93783ebf6c36a 100644 --- a/src/wp-includes/script-loader.php +++ b/src/wp-includes/script-loader.php @@ -402,16 +402,20 @@ function wp_default_packages_inline_scripts( &$scripts ) { 'meridiem' => (object) $wp_locale->meridiem, 'relative' => array( /* translators: %s: duration */ - 'future' => __( '%s from now', 'default' ), + 'future' => __( '%s from now' ), /* translators: %s: duration */ - 'past' => __( '%s ago', 'default' ), + 'past' => __( '%s ago' ), ), ), 'formats' => array( - 'time' => get_option( 'time_format', __( 'g:i a', 'default' ) ), - 'date' => get_option( 'date_format', __( 'F j, Y', 'default' ) ), - 'datetime' => __( 'F j, Y g:i a', 'default' ), - 'datetimeAbbreviated' => __( 'M j, Y g:i a', 'default' ), + /* translators: Time format, see https://secure.php.net/date */ + 'time' => get_option( 'time_format', __( 'g:i a' ) ), + /* translators: Date format, see https://secure.php.net/date */ + 'date' => get_option( 'date_format', __( 'F j, Y' ) ), + /* translators: Date/Time format, see https://secure.php.net/date */ + 'datetime' => __( 'F j, Y g:i a' ), + /* translators: Abbreviated date/time format, see https://secure.php.net/date */ + 'datetimeAbbreviated' => __( 'M j, Y g:i a' ), ), 'timezone' => array( 'offset' => get_option( 'gmt_offset', 0 ), From 894e8472389547757c2c0698cc6f2f6d4ac2015a Mon Sep 17 00:00:00 2001 From: Aaron Jorbin Date: Fri, 26 Oct 2018 20:16:22 +0000 Subject: [PATCH 537/537] php7.3 compatibility: Fix compact throwing notices for multisite In PHP 7.3, the compact() function has been changed to issue an E_NOTICE level error if a passed string refers to an unset variable. In previous versions of PHP, this notice was silently skipped. The full RFC can be viewed here: https://wiki.php.net/rfc/compact By initializing these variables, they can be compacted. Previously [43819]. See #44416. Props desrosj. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43832 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/class-wp-network-query.php | 3 +++ src/wp-includes/class-wp-site-query.php | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/wp-includes/class-wp-network-query.php b/src/wp-includes/class-wp-network-query.php index f8ca48f452ab0..2b59e8a93b495 100644 --- a/src/wp-includes/class-wp-network-query.php +++ b/src/wp-includes/class-wp-network-query.php @@ -328,6 +328,7 @@ protected function get_network_ids() { $number = absint( $this->query_vars['number'] ); $offset = absint( $this->query_vars['offset'] ); + $limits = ''; if ( ! empty( $number ) ) { if ( $offset ) { @@ -393,6 +394,8 @@ protected function get_network_ids() { $where = implode( ' AND ', $this->sql_clauses['where'] ); + $groupby = ''; + $pieces = array( 'fields', 'join', 'where', 'orderby', 'limits', 'groupby' ); /** diff --git a/src/wp-includes/class-wp-site-query.php b/src/wp-includes/class-wp-site-query.php index cf2134d8a417f..78fc59f58e823 100644 --- a/src/wp-includes/class-wp-site-query.php +++ b/src/wp-includes/class-wp-site-query.php @@ -372,6 +372,7 @@ protected function get_site_ids() { $number = absint( $this->query_vars['number'] ); $offset = absint( $this->query_vars['offset'] ); + $limits = ''; if ( ! empty( $number ) ) { if ( $offset ) { @@ -525,6 +526,8 @@ protected function get_site_ids() { $where = implode( ' AND ', $this->sql_clauses['where'] ); + $groupby = ''; + $pieces = array( 'fields', 'join', 'where', 'orderby', 'limits', 'groupby' ); /**