From 36fc58fb3fa812c27c1c6ff46d118ae4b8110f4c Mon Sep 17 00:00:00 2001 From: David Herrera Date: Thu, 29 Dec 2016 20:58:47 -0500 Subject: [PATCH 01/17] Try to copy-edit and add consistency to translated strings - Use sentence case and end strings with periods, with some exceptions like button labels. - Consistently capitalize labels (e.g. "Remove"). - Use Markdown for inline formatting (notably `code`). - Merge similar strings (e.g. "User cannot" vs. "Current user cannot"). - Use placeholders for previously untranslateable dynamic text. --- fieldmanager.php | 4 ++-- php/class-fieldmanager-autocomplete.php | 4 ++-- php/class-fieldmanager-checkbox.php | 2 +- php/class-fieldmanager-field.php | 18 +++++++-------- php/class-fieldmanager-group.php | 14 ++++++------ php/class-fieldmanager-media.php | 6 ++--- php/class-fieldmanager-options.php | 2 +- .../class-fieldmanager-context-page.php | 2 +- .../class-fieldmanager-context-post.php | 2 +- .../class-fieldmanager-context-quickedit.php | 2 +- .../class-fieldmanager-context-storable.php | 2 +- .../class-fieldmanager-context-submenu.php | 4 ++-- .../class-fieldmanager-context-term.php | 8 +++---- .../class-fieldmanager-context-user.php | 4 ++-- php/context/class-fieldmanager-context.php | 2 +- .../class-fieldmanager-datasource-post.php | 2 +- .../class-fieldmanager-datasource-user.php | 22 ++++++++++++++----- .../class-fieldmanager-datasource.php | 8 +++---- .../class-fieldmanager-util-validation.php | 4 ++-- 19 files changed, 61 insertions(+), 51 deletions(-) diff --git a/fieldmanager.php b/fieldmanager.php index 5216658668..142855b0f8 100644 --- a/fieldmanager.php +++ b/fieldmanager.php @@ -441,7 +441,7 @@ function fm_register_submenu_page( $group_name, $parent_slug, $page_title, $menu $submenus = array(); } if ( isset( $submenus[ $group_name ] ) ) { - throw new FM_Duplicate_Submenu_Name_Exception( sprintf( esc_html__( '%s is already in use as a submenu name', 'fieldmanager' ), $group_name ) ); + throw new FM_Duplicate_Submenu_Name_Exception( sprintf( esc_html__( '`%s` is already in use as a submenu name.', 'fieldmanager' ), $group_name ) ); } if ( !$menu_title ) { @@ -469,7 +469,7 @@ function fm_register_submenu_page( $group_name, $parent_slug, $page_title, $menu function _fm_submenu_render() { $context = _fieldmanager_registry( 'active_submenu' ); if ( !is_object( $context ) ) { - throw new FM_Submenu_Not_Initialized_Exception( esc_html__( 'The Fieldmanger context for this submenu was not initialized', 'fieldmanager' ) ); + throw new FM_Submenu_Not_Initialized_Exception( esc_html__( 'The Fieldmanger context for this submenu was not initialized.', 'fieldmanager' ) ); } $context->render_submenu_page(); } diff --git a/php/class-fieldmanager-autocomplete.php b/php/class-fieldmanager-autocomplete.php index eeee75047c..5aba46d69d 100644 --- a/php/class-fieldmanager-autocomplete.php +++ b/php/class-fieldmanager-autocomplete.php @@ -64,11 +64,11 @@ public function __construct( $label = '', $options = array() ) { fm_add_script( 'fm_autocomplete_js', 'js/fieldmanager-autocomplete.js', array( 'fieldmanager_script', 'jquery-ui-autocomplete' ), '1.0.6', false, 'fm_search', array( 'nonce' => wp_create_nonce( 'fm_search_nonce' ) ) ); if ( empty( $this->datasource ) ) { - $message = esc_html__( 'You must supply a datasource for the autocomplete field', 'fieldmanager' ); + $message = esc_html__( 'You must supply a datasource for the autocomplete field.', 'fieldmanager' ); if ( Fieldmanager_Field::$debug ) { throw new FM_Developer_Exception( $message ); } else { - wp_die( $message, esc_html__( 'No Datasource', 'fieldmanager' ) ); + wp_die( $message, esc_html__( 'No datasource.', 'fieldmanager' ) ); } } $this->datasource->allow_optgroups = False; diff --git a/php/class-fieldmanager-checkbox.php b/php/class-fieldmanager-checkbox.php index 456298d4b2..29f9d8a48b 100644 --- a/php/class-fieldmanager-checkbox.php +++ b/php/class-fieldmanager-checkbox.php @@ -66,7 +66,7 @@ public function presave( $value = NULL, $current_value = array() ) { return $this->unchecked_value; } else { - $this->_unauthorized_access( __( 'Saved a checkbox with a value that was not one of the options', 'fieldmanager' ) ); + $this->_unauthorized_access( __( 'Saved a checkbox with a value that was not one of the options.', 'fieldmanager' ) ); } } } diff --git a/php/class-fieldmanager-field.php b/php/class-fieldmanager-field.php index c35271525a..e7894fcc17 100644 --- a/php/class-fieldmanager-field.php +++ b/php/class-fieldmanager-field.php @@ -334,7 +334,7 @@ public function __construct( $label = '', $options = array() ) { // A post can only have one parent, so if this saves to post_parent and // it's repeatable, we're doing it wrong. if ( $this->datasource && ! empty( $this->datasource->save_to_post_parent ) && $this->is_repeatable() ) { - _doing_it_wrong( 'Fieldmanager_Datasource_Post::$save_to_post_parent', __( 'A post can only have one parent, therefore you cannot store to post_parent in repeatable fields.', 'fieldmanager' ), '1.0.0' ); + _doing_it_wrong( 'Fieldmanager_Datasource_Post::$save_to_post_parent', __( 'A post can only have one parent, therefore you cannot store to `post_parent` in repeatable fields.', 'fieldmanager' ), '1.0.0' ); $this->datasource->save_to_post_parent = false; $this->datasource->only_save_to_post_parent = false; } @@ -369,7 +369,7 @@ public function set_options( $label, $options ) { $this->$key = $value; } elseif ( self::$debug ) { $message = sprintf( - __( 'You attempted to set a property "%1$s" that is nonexistant or invalid for an instance of "%2$s" named "%3$s".', 'fieldmanager' ), + __( 'You attempted to set a property `%1$s` that is nonexistant or invalid for an instance of `%2$s` named `%3$s`.', 'fieldmanager' ), $key, get_class( $this ), !empty( $options['name'] ) ? $options['name'] : 'NULL' ); throw new FM_Developer_Exception( esc_html( $message ) ); @@ -383,7 +383,7 @@ public function set_options( $label, $options ) { // Cannot use serialize_data => false with index => true if ( ! $this->serialize_data && $this->index ) { - throw new FM_Developer_Exception( esc_html__( 'You cannot use `"serialize_data" => false` with `"index" => true`', 'fieldmanager' ) ); + throw new FM_Developer_Exception( esc_html__( 'You cannot use `"serialize_data" => false` with `"index" => true`.', 'fieldmanager' ) ); } } @@ -730,7 +730,7 @@ public function presave_all( $values, $current_values ) { return; } - $this->_unauthorized_access( sprintf( __( '$values should be an array because $limit is %d', 'fieldmanager' ), $this->limit ) ); + $this->_unauthorized_access( sprintf( __( '`$values` should be an array because `$limit` is %d.', 'fieldmanager' ), $this->limit ) ); } if ( empty( $values ) ) { @@ -745,7 +745,7 @@ public function presave_all( $values, $current_values ) { // If $this->limit is not 0 or 1, and $values has more than $limit, that could also be an attack... if ( $this->limit > 1 && count( $values ) > $this->limit ) { $this->_unauthorized_access( - sprintf( __( 'submitted %1$d values against a limit of %2$d', 'fieldmanager' ), count( $values ), $this->limit ) + sprintf( __( 'Submitted %1$d values against a limit of %2$d.', 'fieldmanager' ), count( $values ), $this->limit ) ); } @@ -863,12 +863,12 @@ public function presave( $value, $current_value = array() ) { // this point, but those elements must override this function. Let's // make sure we're dealing with one value here. if ( is_array( $value ) ) { - $this->_unauthorized_access( __( 'presave() in the base class should not get arrays, but did.', 'fieldmanager' ) ); + $this->_unauthorized_access( __( '`presave()` in the base class should not get arrays, but did.', 'fieldmanager' ) ); } foreach ( $this->validate as $func ) { if ( !call_user_func( $func, $value ) ) { $this->_failed_validation( sprintf( - __( 'Input "%1$s" is not valid for field "%2$s" ', 'fieldmanager' ), + __( 'Input `%1$s` is not valid for field `%2$s` ', 'fieldmanager' ), (string) $value, $this->label ) ); @@ -1035,7 +1035,7 @@ public function add_term_form( $title, $taxonomies, $show_on_add = true, $show_o public function add_term_meta_box( $title, $taxonomies, $show_on_add = true, $show_on_edit = true, $parent = '' ) { // Bail if term meta table is not installed. if ( get_option( 'db_version' ) < 34370 ) { - _doing_it_wrong( __METHOD__, esc_html__( 'This method requires WordPress 4.4 or above', 'fieldmanager' ), 'Fieldmanager-1.0.0-beta.3' ); + _doing_it_wrong( __METHOD__, esc_html__( 'This method requires WordPress 4.4 or above.', 'fieldmanager' ), 'Fieldmanager-1.0.0-beta.3' ); return false; } @@ -1105,7 +1105,7 @@ public function activate_submenu_page() { private function require_base() { if ( !empty( $this->parent ) ) { - throw new FM_Developer_Exception( esc_html__( 'You cannot use this method on a subgroup', 'fieldmanager' ) ); + throw new FM_Developer_Exception( esc_html__( 'You cannot use this method on a subgroup.', 'fieldmanager' ) ); } } diff --git a/php/class-fieldmanager-group.php b/php/class-fieldmanager-group.php index da036ecacd..5e3af99852 100644 --- a/php/class-fieldmanager-group.php +++ b/php/class-fieldmanager-group.php @@ -130,7 +130,7 @@ public function __construct( $label = '', $options = array() ) { // Repeatable groups cannot used unserialized data $is_repeatable = ( 1 != $this->limit ); if ( ! $this->serialize_data && $is_repeatable ) { - throw new FM_Developer_Exception( esc_html__( 'You cannot use `"serialize_data" => false` with repeating groups', 'fieldmanager' ) ); + throw new FM_Developer_Exception( esc_html__( 'You cannot use `"serialize_data" => false` with repeating groups.', 'fieldmanager' ) ); } // If this is collapsed, collapsibility is implied @@ -142,20 +142,20 @@ public function __construct( $label = '', $options = array() ) { foreach ( $this->children as $name => $element ) { // if the array key is not an int, and the name attr is set, and they don't match, we got a problem. if ( $element->name && !is_int( $name ) && $element->name != $name ) { - throw new FM_Developer_Exception( esc_html__( 'Group child name conflict: ', 'fieldmanager' ) . $name . ' / ' . $element->name ); + throw new FM_Developer_Exception( sprintf( esc_html__( 'Group child name conflict: `%1$s` / `%2$s`.', 'fieldmanager' ), $name, $element->name ) ); } elseif ( ! $element->name ) { $element->name = $name; } // Catch errors when using serialize_data => false and index => true if ( ! $this->serialize_data && $element->index ) { - throw new FM_Developer_Exception( esc_html__( 'You cannot use `serialize_data => false` with `index => true`', 'fieldmanager' ) ); + throw new FM_Developer_Exception( esc_html__( 'You cannot use `"serialize_data" => false` with `"index" => true`.', 'fieldmanager' ) ); } // A post can only have one parent, so if this saves to post_parent and // it's repeatable, we're doing it wrong. if ( $element->datasource && ! empty( $element->datasource->save_to_post_parent ) && $this->is_repeatable() ) { - _doing_it_wrong( 'Fieldmanager_Datasource_Post::$save_to_post_parent', __( 'A post can only have one parent, therefore you cannot store to post_parent in repeatable fields.', 'fieldmanager' ), '1.0.0' ); + _doing_it_wrong( 'Fieldmanager_Datasource_Post::$save_to_post_parent', __( 'A post can only have one parent, therefore you cannot store to `post_parent` in repeatable fields.', 'fieldmanager' ), '1.0.0' ); $element->datasource->save_to_post_parent = false; $element->datasource->only_save_to_post_parent = false; } @@ -171,7 +171,7 @@ public function __construct( $label = '', $options = array() ) { // Check for invalid usage of repeatables and serialize_data if ( $is_repeatable && $this->has_unserialized_descendants ) { - throw new FM_Developer_Exception( esc_html__( 'You cannot use `serialize_data => false` with repeating groups', 'fieldmanager' ) ); + throw new FM_Developer_Exception( esc_html__( 'You cannot use `"serialize_data" => false` with repeating groups.', 'fieldmanager' ) ); } // Add the tab JS and CSS if it is needed @@ -294,7 +294,7 @@ public function add_child( Fieldmanager_Field $child ) { // Catch errors when using serialize_data => false and index-> true if ( ! $this->serialize_data && $child->index ) { - throw new FM_Developer_Exception( esc_html__( 'You cannot use `serialize_data => false` with `index => true`', 'fieldmanager' ) ); + throw new FM_Developer_Exception( esc_html__( 'You cannot use `"serialize_data" => false` with `"index" => true`.', 'fieldmanager' ) ); } } @@ -310,7 +310,7 @@ public function presave( $values, $current_values = array() ) { if ( !isset( $this->children[$key] ) ) { // If we're here, it means that the input, generally $_POST, contains a value that doesn't belong, // and thus one which we cannot sanitize and must not save. This might be an attack. - $this->_unauthorized_access( sprintf( __( 'Found "%1$s" in data but not in children', 'fieldmanager' ), $key ) ); + $this->_unauthorized_access( sprintf( __( 'Found `%s` in data but not in children.', 'fieldmanager' ), $key ) ); } } } diff --git a/php/class-fieldmanager-media.php b/php/class-fieldmanager-media.php index 40798001c0..ed8f2b35fd 100644 --- a/php/class-fieldmanager-media.php +++ b/php/class-fieldmanager-media.php @@ -91,9 +91,9 @@ public function __construct( $label = '', $options = array() ) { $this->button_label = __( 'Attach a File', 'fieldmanager' ); $this->modal_button_label = __( 'Select Attachment', 'fieldmanager' ); $this->modal_title = __( 'Choose an Attachment', 'fieldmanager' ); - $this->selected_image_label = __( 'Uploaded image:', 'fieldmanager' ); - $this->selected_file_label = __( 'Uploaded file:', 'fieldmanager' ); - $this->remove_media_label = __( 'remove', 'fieldmanager' ); + $this->selected_image_label = __( 'Uploaded Image:', 'fieldmanager' ); + $this->selected_file_label = __( 'Uploaded File:', 'fieldmanager' ); + $this->remove_media_label = __( 'Remove', 'fieldmanager' ); if ( ! self::$has_registered_media ) { fm_add_script( 'fm_media', 'js/media/fieldmanager-media.js', array( 'jquery' ), '1.0.4' ); diff --git a/php/class-fieldmanager-options.php b/php/class-fieldmanager-options.php index baf529f62c..f7baeb5abb 100644 --- a/php/class-fieldmanager-options.php +++ b/php/class-fieldmanager-options.php @@ -213,7 +213,7 @@ public function presave( $value, $current_value = array() ) { foreach ( $this->validate as $func ) { if ( !call_user_func( $func, $value ) ) { $this->_failed_validation( sprintf( - __( 'Input "%1$s" is not valid for field "%2$s" ', 'fieldmanager' ), + __( 'Input `%1$s` is not valid for field `%2$s`.', 'fieldmanager' ), (string) $value, $this->label ) ); diff --git a/php/context/class-fieldmanager-context-page.php b/php/context/class-fieldmanager-context-page.php index 6d21e5be9a..50a1eaee73 100644 --- a/php/context/class-fieldmanager-context-page.php +++ b/php/context/class-fieldmanager-context-page.php @@ -41,7 +41,7 @@ public function __construct( $uniqid, $fm ) { */ public function save_page_form() { if( !wp_verify_nonce( $_POST['fieldmanager-' . $this->fm->name . '-nonce'], 'fieldmanager-save-' . $this->fm->name ) ) { - $this->fm->_unauthorized_access( __( 'Nonce validation failed', 'fieldmanager' ) ); + $this->fm->_unauthorized_access( __( 'Nonce validation failed.', 'fieldmanager' ) ); } $this->fm->data_id = $user_id; $value = isset( $_POST[ $this->fm->name ] ) ? $_POST[ $this->fm->name ] : ""; diff --git a/php/context/class-fieldmanager-context-post.php b/php/context/class-fieldmanager-context-post.php index 96e25522a1..a15bc63829 100644 --- a/php/context/class-fieldmanager-context-post.php +++ b/php/context/class-fieldmanager-context-post.php @@ -197,7 +197,7 @@ public function save_fields_for_post( $post_id ) { // Make sure the current user is authorized to save this post. if ( $_POST['post_type'] == 'post' ) { if ( ! current_user_can( 'edit_post', $post_id ) ) { - $this->fm->_unauthorized_access( __( 'User cannot edit this post', 'fieldmanager' ) ); + $this->fm->_unauthorized_access( __( 'Current user cannot edit this post.', 'fieldmanager' ) ); return; } } diff --git a/php/context/class-fieldmanager-context-quickedit.php b/php/context/class-fieldmanager-context-quickedit.php index 292bd86fc2..384ac1c022 100644 --- a/php/context/class-fieldmanager-context-quickedit.php +++ b/php/context/class-fieldmanager-context-quickedit.php @@ -193,7 +193,7 @@ public function save_fields_for_quickedit( $post_id ) { // Make sure the current user can save this post if( $_POST['post_type'] == 'post' ) { if( !current_user_can( 'edit_post', $post_id ) ) { - $this->fm->_unauthorized_access( __( 'User cannot edit this post', 'fieldmanager' ) ); + $this->fm->_unauthorized_access( __( 'Current user cannot edit this post.', 'fieldmanager' ) ); return; } } diff --git a/php/context/class-fieldmanager-context-storable.php b/php/context/class-fieldmanager-context-storable.php index 96256a3c6e..afe3cc2024 100644 --- a/php/context/class-fieldmanager-context-storable.php +++ b/php/context/class-fieldmanager-context-storable.php @@ -70,7 +70,7 @@ protected function save_field( $field, $data ) { $field->data_type = $this->fm->data_type; if ( isset( $this->save_keys[ $field->get_element_key() ] ) ) { - throw new FM_Developer_Exception( sprintf( esc_html__( 'You have two fields in this group saving to the same key: %s', 'fieldmanager' ), $field->get_element_key() ) ); + throw new FM_Developer_Exception( sprintf( esc_html__( 'You have two fields in this group saving to the same key: `%s`.', 'fieldmanager' ), $field->get_element_key() ) ); } else { $this->save_keys[ $field->get_element_key() ] = true; } diff --git a/php/context/class-fieldmanager-context-submenu.php b/php/context/class-fieldmanager-context-submenu.php index 8966b7abbc..46c17b45b1 100644 --- a/php/context/class-fieldmanager-context-submenu.php +++ b/php/context/class-fieldmanager-context-submenu.php @@ -74,7 +74,7 @@ public function __construct( $parent_slug, $page_title, $menu_title = Null, $cap $this->parent_slug = $parent_slug; $this->page_title = $page_title; $this->capability = $capability; - $this->updated_message = __( 'Options updated', 'fieldmanager' ); + $this->updated_message = __( 'Options updated.', 'fieldmanager' ); $this->uniqid = $this->fm->get_element_id() . '_form'; if ( ! $already_registered ) { add_action( 'admin_menu', array( $this, 'register_submenu_page' ) ); @@ -134,7 +134,7 @@ public function handle_submenu_save() { } if ( ! current_user_can( $this->capability ) ) { - $this->fm->_unauthorized_access( __( 'Current user cannot edit this page', 'fieldmanager' ) ); + $this->fm->_unauthorized_access( __( 'Current user cannot edit this page.', 'fieldmanager' ) ); return; } diff --git a/php/context/class-fieldmanager-context-term.php b/php/context/class-fieldmanager-context-term.php index a883371da8..4f55a3f07f 100644 --- a/php/context/class-fieldmanager-context-term.php +++ b/php/context/class-fieldmanager-context-term.php @@ -112,7 +112,7 @@ public function __construct( $args, $taxonomies = array(), $show_on_add = true, 'field' => null, ) ); if ( ! isset( $args['title'], $args['taxonomies'] ) ) { - throw new FM_Developer_Exception( esc_html__( '"title" and "taxonomies" are required values for Fieldmanager_Context_Term', 'fieldmanager' ) ); + throw new FM_Developer_Exception( esc_html__( '`title` and `taxonomies` are required values for `Fieldmanager_Context_Term`.', 'fieldmanager' ) ); } $this->title = $args['title']; @@ -123,7 +123,7 @@ public function __construct( $args, $taxonomies = array(), $show_on_add = true, $this->use_fm_meta = $args['use_fm_meta']; $this->fm = $args['field']; } elseif ( empty( $taxonomies ) ) { - throw new FM_Developer_Exception( esc_html__( '"title" and "taxonomies" are required values for Fieldmanager_Context_Term', 'fieldmanager' ) ); + throw new FM_Developer_Exception( esc_html__( '`title` and `taxonomies` are required values for `Fieldmanager_Context_Term`.', 'fieldmanager' ) ); } else { // Instantiating Fieldmanager_Context_Term using individual // arguments is deprecated as of Fieldmanager-1.0.0-beta.3; you @@ -217,7 +217,7 @@ public function edit_term_fields( $term, $taxonomy ) { public function term_fields( $html_template, $taxonomy, $term = null ) { // Make sure the user hasn't specified a field name we can't use if ( in_array( $this->fm->name, $this->reserved_fields ) ) { - $this->fm->_invalid_definition( sprintf( __( 'The field name "%s" is reserved for WordPress on the term form.', 'fieldmanager' ), $this->fm->name ) ); + $this->fm->_invalid_definition( sprintf( __( 'The field name `%s` is reserved for WordPress on the term form.', 'fieldmanager' ), $this->fm->name ) ); } // Set the data type and ID @@ -268,7 +268,7 @@ public function save_term_fields( $term_id, $tt_id, $taxonomy ) { // Make sure the current user can save this post $tax_obj = get_taxonomy( $taxonomy ); if ( ! current_user_can( $tax_obj->cap->manage_terms ) ) { - $this->fm->_unauthorized_access( __( 'User cannot edit this term', 'fieldmanager' ) ); + $this->fm->_unauthorized_access( __( 'Current user cannot edit this term.', 'fieldmanager' ) ); return; } diff --git a/php/context/class-fieldmanager-context-user.php b/php/context/class-fieldmanager-context-user.php index 6301888aee..bb6b98efcc 100644 --- a/php/context/class-fieldmanager-context-user.php +++ b/php/context/class-fieldmanager-context-user.php @@ -72,7 +72,7 @@ public function save_user_form( $user_id ) { } if ( ! current_user_can( 'edit_user', $user_id ) ) { - $this->fm->_unauthorized_access( __( 'Current user cannot edit this user', 'fieldmanager' ) ); + $this->fm->_unauthorized_access( __( 'Current user cannot edit this user.', 'fieldmanager' ) ); return; } @@ -201,4 +201,4 @@ protected function delete_data( $user_id, $meta_key, $meta_value = '' ) { $meta_value ); } -} \ No newline at end of file +} diff --git a/php/context/class-fieldmanager-context.php b/php/context/class-fieldmanager-context.php index 8ad9c4796e..7073edc330 100644 --- a/php/context/class-fieldmanager-context.php +++ b/php/context/class-fieldmanager-context.php @@ -40,7 +40,7 @@ protected function is_valid_nonce() { } if ( ! wp_verify_nonce( $_POST['fieldmanager-' . $this->fm->name . '-nonce'], 'fieldmanager-save-' . $this->fm->name ) ) { - $this->fm->_unauthorized_access( __( 'Nonce validation failed', 'fieldmanager' ) ); + $this->fm->_unauthorized_access( __( 'Nonce validation failed.', 'fieldmanager' ) ); } return true; diff --git a/php/datasource/class-fieldmanager-datasource-post.php b/php/datasource/class-fieldmanager-datasource-post.php index 4511ce50f1..b6ca8e8d80 100644 --- a/php/datasource/class-fieldmanager-datasource-post.php +++ b/php/datasource/class-fieldmanager-datasource-post.php @@ -217,7 +217,7 @@ public function presave( Fieldmanager_Field $field, $value, $current_value ) { if ( ! defined( 'DOING_CRON' ) || ! DOING_CRON ) { $post_type_obj = get_post_type_object( get_post_type( $value ) ); if ( empty( $post_type_obj->cap->edit_post ) || ! current_user_can( $post_type_obj->cap->edit_post, $value ) ) { - wp_die( esc_html( sprintf( __( 'Tried to alter %s %d through field "%s", which user is not permitted to edit.', 'fieldmanager' ), $post_type_obj->name, $value, $field->name ) ) ); + wp_die( esc_html( sprintf( __( 'Tried to alter `%1$s` %2$d through field `%3$s`, which current user cannot edit.', 'fieldmanager' ), $post_type_obj->name, $value, $field->name ) ) ); } } $this->presave_status_transition( $field, $value ); diff --git a/php/datasource/class-fieldmanager-datasource-user.php b/php/datasource/class-fieldmanager-datasource-user.php index 88b2298ac3..51d556de16 100644 --- a/php/datasource/class-fieldmanager-datasource-user.php +++ b/php/datasource/class-fieldmanager-datasource-user.php @@ -75,22 +75,32 @@ public function __construct( $options = array() ) { // Validate improper usage of store property if ( ! in_array( $this->store_property, $this->allowed_store_properties ) ) { throw new FM_Developer_Exception( sprintf( - __( 'Store property %s is invalid. Must be one of %s.', 'fieldmanager' ), + __( 'Store property `%1$s` is invalid. Must be one of %2$s.', 'fieldmanager' ), $this->store_property, - implode( ', ', $this->allowed_store_properties ) + implode( __( ', ', 'fieldmanager' ), array_map( + function ( $property ) { + return sprintf( _x( '`%s`', 'property name like `user_nicename`', 'fieldmanager' ), $property ); + }, + $this->allowed_store_properties + ) ) ) ); } if ( ! empty( $this->reciprocal ) && 'ID' != $this->store_property ) { - throw new FM_Developer_Exception( __( 'You cannot use reciprocal relationships with FM_Datasource_User if store_property is not set to ID.', 'fieldmanager' ) ); + throw new FM_Developer_Exception( __( 'You cannot use reciprocal relationships with `Fieldmanager_Datasource_User` if `store_property` is not set to `ID`.', 'fieldmanager' ) ); } // Validate improper usage of display property if ( ! in_array( $this->display_property, $this->allowed_display_properties ) ) { throw new FM_Developer_Exception( sprintf( - __( 'Display property %s is invalid. Must be one of %s.', 'fieldmanager' ), + __( 'Display property `%1$s` is invalid. Must be one of %2$s.', 'fieldmanager' ), $this->display_property, - implode( ', ', $this->allowed_display_properties ) + implode( __( ', ', 'fieldmanager' ), array_map( + function ( $property ) { + return sprintf( _x( '`%s`', 'property name like `user_nicename`', 'fieldmanager' ), $property ); + }, + $this->allowed_display_properties + ) ) ) ); } } @@ -203,7 +213,7 @@ public function presave( Fieldmanager_Field $field, $value, $current_value ) { foreach ( $value as $i => $v ) { $value[$i] = $this->sanitize_value( $v ); if( ! current_user_can( $this->capability, $v ) ) { - wp_die( esc_html( sprintf( __( 'Tried to refer to user "%s" which current user cannot edit.', 'fieldmanager' ), $v ) ) ); + wp_die( esc_html( sprintf( __( 'Tried to refer to user `%s` which current user cannot edit.', 'fieldmanager' ), $v ) ) ); } if ( $this->reciprocal && 'ID' == $this->store_property ) { add_user_meta( $v, $this->reciprocal, $field->data_id ); diff --git a/php/datasource/class-fieldmanager-datasource.php b/php/datasource/class-fieldmanager-datasource.php index ffac93ba16..f7433eb819 100644 --- a/php/datasource/class-fieldmanager-datasource.php +++ b/php/datasource/class-fieldmanager-datasource.php @@ -61,10 +61,10 @@ public function __construct( $options = array() ) { else throw new FM_Developer_Exception; // If the property isn't public, don't set it (rare) } catch ( Exception $e ) { $message = sprintf( - __( 'You attempted to set a property "%1$s" that is nonexistant or invalid for an instance of "%2$s" named "%3$s".', 'fieldmanager' ), + __( 'You attempted to set a property `%1$s` that is nonexistant or invalid for an instance of `%2$s` named `%3$s`.', 'fieldmanager' ), $k, __CLASS__, !empty( $options['name'] ) ? $options['name'] : 'NULL' ); - $title = esc_html__( 'Nonexistant or invalid option' ); + $title = esc_html__( 'Nonexistant or invalid option.' ); if ( !Fieldmanager_Field::$debug ) { wp_die( esc_html( $message ), $title ); } else { @@ -74,11 +74,11 @@ public function __construct( $options = array() ) { } if ( get_class( $this ) == __CLASS__ && empty( $options ) ) { - $message = esc_html__( 'Invalid options for Datasource; must use the options parameter to supply an array.', 'fieldmanager' ); + $message = esc_html__( 'Invalid datasource options; must use the `$options` parameter to supply an array.', 'fieldmanager' ); if ( Fieldmanager_Field::$debug ) { throw new FM_Developer_Exception( $message ); } else { - wp_die( $message, esc_html__( 'Invalid Datasource Options', 'fieldmanager' ) ); + wp_die( $message, esc_html__( 'Invalid datasource options.', 'fieldmanager' ) ); } } diff --git a/php/util/class-fieldmanager-util-validation.php b/php/util/class-fieldmanager-util-validation.php index e9108669b0..67e6079bcf 100644 --- a/php/util/class-fieldmanager-util-validation.php +++ b/php/util/class-fieldmanager-util-validation.php @@ -135,7 +135,7 @@ public function add_field( &$fm ) { if ( ! is_array( $fm->validation_rules ) ) { // If a string, the only acceptable value is "required". if ( ! is_string( $fm->validation_rules ) || $fm->validation_rules != 'required' ) - $fm->_invalid_definition( sprintf( __( 'The validation rule "%s" does not exist.', 'wordpress-fieldmanager' ), $fm->validation_rules ) ); + $fm->_invalid_definition( sprintf( __( 'The validation rule `%s` does not exist.', 'wordpress-fieldmanager' ), $fm->validation_rules ) ); // Convert the value to an array since we standardize the Javascript output on this format $fm->validation_rules = array( 'required' => true ); @@ -149,7 +149,7 @@ public function add_field( &$fm ) { foreach ( $fm->validation_rules as $validation_key => $validation_rule ) { if ( ! in_array( $validation_key, $this->valid_rules ) ) { // This is not a rule available in jQuery validation - $fm->_invalid_definition( sprintf( __( 'The validation rule "%s" does not exist.', 'wordpress-fieldmanager' ), $validation_key ) ); + $fm->_invalid_definition( sprintf( __( 'The validation rule `%s` does not exist.', 'wordpress-fieldmanager' ), $validation_key ) ); } else { // This rule is valid so check for any messages if ( isset( $fm->validation_messages[$validation_key] ) ) From a0642ba46e2d97cdce784d4b925ea592779b9332 Mon Sep 17 00:00:00 2001 From: David Herrera Date: Thu, 29 Dec 2016 21:22:29 -0500 Subject: [PATCH 02/17] Remove trailing space --- php/class-fieldmanager-field.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/php/class-fieldmanager-field.php b/php/class-fieldmanager-field.php index e7894fcc17..90dd4f94d1 100644 --- a/php/class-fieldmanager-field.php +++ b/php/class-fieldmanager-field.php @@ -868,7 +868,7 @@ public function presave( $value, $current_value = array() ) { foreach ( $this->validate as $func ) { if ( !call_user_func( $func, $value ) ) { $this->_failed_validation( sprintf( - __( 'Input `%1$s` is not valid for field `%2$s` ', 'fieldmanager' ), + __( 'Input `%1$s` is not valid for field `%2$s`', 'fieldmanager' ), (string) $value, $this->label ) ); From 9263d13d6fbd3aaea483144bfa1d01ef7756b5ad Mon Sep 17 00:00:00 2001 From: David Herrera Date: Thu, 29 Dec 2016 21:24:03 -0500 Subject: [PATCH 03/17] Fix missing period --- php/class-fieldmanager-field.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/php/class-fieldmanager-field.php b/php/class-fieldmanager-field.php index 90dd4f94d1..30f3306f18 100644 --- a/php/class-fieldmanager-field.php +++ b/php/class-fieldmanager-field.php @@ -868,7 +868,7 @@ public function presave( $value, $current_value = array() ) { foreach ( $this->validate as $func ) { if ( !call_user_func( $func, $value ) ) { $this->_failed_validation( sprintf( - __( 'Input `%1$s` is not valid for field `%2$s`', 'fieldmanager' ), + __( 'Input `%1$s` is not valid for field `%2$s`.', 'fieldmanager' ), (string) $value, $this->label ) ); From c7f2688d69a2e5639551321ae4de2966d4f9bb0b Mon Sep 17 00:00:00 2001 From: David Herrera Date: Thu, 29 Dec 2016 21:37:10 -0500 Subject: [PATCH 04/17] Add translator comments --- php/class-fieldmanager-field.php | 4 ++++ php/class-fieldmanager-group.php | 2 ++ php/class-fieldmanager-options.php | 1 + php/context/class-fieldmanager-context-storable.php | 1 + php/context/class-fieldmanager-context-term.php | 1 + php/datasource/class-fieldmanager-datasource-post.php | 1 + php/datasource/class-fieldmanager-datasource-user.php | 5 +++++ php/datasource/class-fieldmanager-datasource.php | 1 + php/util/class-fieldmanager-util-validation.php | 6 ++++-- 9 files changed, 20 insertions(+), 2 deletions(-) diff --git a/php/class-fieldmanager-field.php b/php/class-fieldmanager-field.php index 30f3306f18..1db230c773 100644 --- a/php/class-fieldmanager-field.php +++ b/php/class-fieldmanager-field.php @@ -369,6 +369,7 @@ public function set_options( $label, $options ) { $this->$key = $value; } elseif ( self::$debug ) { $message = sprintf( + /* translators: 1: property name, 2: class name, 3: field name */ __( 'You attempted to set a property `%1$s` that is nonexistant or invalid for an instance of `%2$s` named `%3$s`.', 'fieldmanager' ), $key, get_class( $this ), !empty( $options['name'] ) ? $options['name'] : 'NULL' ); @@ -730,6 +731,7 @@ public function presave_all( $values, $current_values ) { return; } + /* translators: %d: `limit` property value */ $this->_unauthorized_access( sprintf( __( '`$values` should be an array because `$limit` is %d.', 'fieldmanager' ), $this->limit ) ); } @@ -745,6 +747,7 @@ public function presave_all( $values, $current_values ) { // If $this->limit is not 0 or 1, and $values has more than $limit, that could also be an attack... if ( $this->limit > 1 && count( $values ) > $this->limit ) { $this->_unauthorized_access( + /* translators: 1: count of submitted values, 2: `limit` property value */ sprintf( __( 'Submitted %1$d values against a limit of %2$d.', 'fieldmanager' ), count( $values ), $this->limit ) ); } @@ -868,6 +871,7 @@ public function presave( $value, $current_value = array() ) { foreach ( $this->validate as $func ) { if ( !call_user_func( $func, $value ) ) { $this->_failed_validation( sprintf( + /* translators: 1: input name, 2: field label */ __( 'Input `%1$s` is not valid for field `%2$s`.', 'fieldmanager' ), (string) $value, $this->label diff --git a/php/class-fieldmanager-group.php b/php/class-fieldmanager-group.php index 5e3af99852..a7374e487f 100644 --- a/php/class-fieldmanager-group.php +++ b/php/class-fieldmanager-group.php @@ -142,6 +142,7 @@ public function __construct( $label = '', $options = array() ) { foreach ( $this->children as $name => $element ) { // if the array key is not an int, and the name attr is set, and they don't match, we got a problem. if ( $element->name && !is_int( $name ) && $element->name != $name ) { + /* translators: 1: group child name, 2: group child name */ throw new FM_Developer_Exception( sprintf( esc_html__( 'Group child name conflict: `%1$s` / `%2$s`.', 'fieldmanager' ), $name, $element->name ) ); } elseif ( ! $element->name ) { $element->name = $name; @@ -310,6 +311,7 @@ public function presave( $values, $current_values = array() ) { if ( !isset( $this->children[$key] ) ) { // If we're here, it means that the input, generally $_POST, contains a value that doesn't belong, // and thus one which we cannot sanitize and must not save. This might be an attack. + /* translators: %s: input name */ $this->_unauthorized_access( sprintf( __( 'Found `%s` in data but not in children.', 'fieldmanager' ), $key ) ); } } diff --git a/php/class-fieldmanager-options.php b/php/class-fieldmanager-options.php index f7baeb5abb..b45ad56051 100644 --- a/php/class-fieldmanager-options.php +++ b/php/class-fieldmanager-options.php @@ -213,6 +213,7 @@ public function presave( $value, $current_value = array() ) { foreach ( $this->validate as $func ) { if ( !call_user_func( $func, $value ) ) { $this->_failed_validation( sprintf( + /* translators: 1: input name, 2: field label */ __( 'Input `%1$s` is not valid for field `%2$s`.', 'fieldmanager' ), (string) $value, $this->label diff --git a/php/context/class-fieldmanager-context-storable.php b/php/context/class-fieldmanager-context-storable.php index afe3cc2024..a8b4f2b90f 100644 --- a/php/context/class-fieldmanager-context-storable.php +++ b/php/context/class-fieldmanager-context-storable.php @@ -70,6 +70,7 @@ protected function save_field( $field, $data ) { $field->data_type = $this->fm->data_type; if ( isset( $this->save_keys[ $field->get_element_key() ] ) ) { + /* translators: %s: field storage key */ throw new FM_Developer_Exception( sprintf( esc_html__( 'You have two fields in this group saving to the same key: `%s`.', 'fieldmanager' ), $field->get_element_key() ) ); } else { $this->save_keys[ $field->get_element_key() ] = true; diff --git a/php/context/class-fieldmanager-context-term.php b/php/context/class-fieldmanager-context-term.php index 4f55a3f07f..bd1dcc732d 100644 --- a/php/context/class-fieldmanager-context-term.php +++ b/php/context/class-fieldmanager-context-term.php @@ -217,6 +217,7 @@ public function edit_term_fields( $term, $taxonomy ) { public function term_fields( $html_template, $taxonomy, $term = null ) { // Make sure the user hasn't specified a field name we can't use if ( in_array( $this->fm->name, $this->reserved_fields ) ) { + /* translators: %s: field name */ $this->fm->_invalid_definition( sprintf( __( 'The field name `%s` is reserved for WordPress on the term form.', 'fieldmanager' ), $this->fm->name ) ); } diff --git a/php/datasource/class-fieldmanager-datasource-post.php b/php/datasource/class-fieldmanager-datasource-post.php index b6ca8e8d80..d1cfeb8195 100644 --- a/php/datasource/class-fieldmanager-datasource-post.php +++ b/php/datasource/class-fieldmanager-datasource-post.php @@ -217,6 +217,7 @@ public function presave( Fieldmanager_Field $field, $value, $current_value ) { if ( ! defined( 'DOING_CRON' ) || ! DOING_CRON ) { $post_type_obj = get_post_type_object( get_post_type( $value ) ); if ( empty( $post_type_obj->cap->edit_post ) || ! current_user_can( $post_type_obj->cap->edit_post, $value ) ) { + /* translators: 1: post type name, 2: post ID, 3: field name */ wp_die( esc_html( sprintf( __( 'Tried to alter `%1$s` %2$d through field `%3$s`, which current user cannot edit.', 'fieldmanager' ), $post_type_obj->name, $value, $field->name ) ) ); } } diff --git a/php/datasource/class-fieldmanager-datasource-user.php b/php/datasource/class-fieldmanager-datasource-user.php index 51d556de16..397eca40ba 100644 --- a/php/datasource/class-fieldmanager-datasource-user.php +++ b/php/datasource/class-fieldmanager-datasource-user.php @@ -75,8 +75,10 @@ public function __construct( $options = array() ) { // Validate improper usage of store property if ( ! in_array( $this->store_property, $this->allowed_store_properties ) ) { throw new FM_Developer_Exception( sprintf( + /* translators: 1: invalid property name, 2: list of valid property names */ __( 'Store property `%1$s` is invalid. Must be one of %2$s.', 'fieldmanager' ), $this->store_property, + /* translators: used between list items, there is a space after the comma */ implode( __( ', ', 'fieldmanager' ), array_map( function ( $property ) { return sprintf( _x( '`%s`', 'property name like `user_nicename`', 'fieldmanager' ), $property ); @@ -93,8 +95,10 @@ function ( $property ) { // Validate improper usage of display property if ( ! in_array( $this->display_property, $this->allowed_display_properties ) ) { throw new FM_Developer_Exception( sprintf( + /* translators: 1: invalid property name, 2: list of valid property names */ __( 'Display property `%1$s` is invalid. Must be one of %2$s.', 'fieldmanager' ), $this->display_property, + /* translators: used between list items, there is a space after the comma */ implode( __( ', ', 'fieldmanager' ), array_map( function ( $property ) { return sprintf( _x( '`%s`', 'property name like `user_nicename`', 'fieldmanager' ), $property ); @@ -213,6 +217,7 @@ public function presave( Fieldmanager_Field $field, $value, $current_value ) { foreach ( $value as $i => $v ) { $value[$i] = $this->sanitize_value( $v ); if( ! current_user_can( $this->capability, $v ) ) { + /* translators: %s: property name */ wp_die( esc_html( sprintf( __( 'Tried to refer to user `%s` which current user cannot edit.', 'fieldmanager' ), $v ) ) ); } if ( $this->reciprocal && 'ID' == $this->store_property ) { diff --git a/php/datasource/class-fieldmanager-datasource.php b/php/datasource/class-fieldmanager-datasource.php index f7433eb819..1bd33c1ee2 100644 --- a/php/datasource/class-fieldmanager-datasource.php +++ b/php/datasource/class-fieldmanager-datasource.php @@ -61,6 +61,7 @@ public function __construct( $options = array() ) { else throw new FM_Developer_Exception; // If the property isn't public, don't set it (rare) } catch ( Exception $e ) { $message = sprintf( + /* translators: 1: property name, 2: class name, 3: field name */ __( 'You attempted to set a property `%1$s` that is nonexistant or invalid for an instance of `%2$s` named `%3$s`.', 'fieldmanager' ), $k, __CLASS__, !empty( $options['name'] ) ? $options['name'] : 'NULL' ); diff --git a/php/util/class-fieldmanager-util-validation.php b/php/util/class-fieldmanager-util-validation.php index 67e6079bcf..6979ca0bb3 100644 --- a/php/util/class-fieldmanager-util-validation.php +++ b/php/util/class-fieldmanager-util-validation.php @@ -135,7 +135,8 @@ public function add_field( &$fm ) { if ( ! is_array( $fm->validation_rules ) ) { // If a string, the only acceptable value is "required". if ( ! is_string( $fm->validation_rules ) || $fm->validation_rules != 'required' ) - $fm->_invalid_definition( sprintf( __( 'The validation rule `%s` does not exist.', 'wordpress-fieldmanager' ), $fm->validation_rules ) ); + /* translators: %s: validation rule name */ + $fm->_invalid_definition( sprintf( __( 'The validation rule `%s` does not exist.', 'fieldmanager' ), $fm->validation_rules ) ); // Convert the value to an array since we standardize the Javascript output on this format $fm->validation_rules = array( 'required' => true ); @@ -149,7 +150,8 @@ public function add_field( &$fm ) { foreach ( $fm->validation_rules as $validation_key => $validation_rule ) { if ( ! in_array( $validation_key, $this->valid_rules ) ) { // This is not a rule available in jQuery validation - $fm->_invalid_definition( sprintf( __( 'The validation rule `%s` does not exist.', 'wordpress-fieldmanager' ), $validation_key ) ); + /* translators: %s: validation rule name */ + $fm->_invalid_definition( sprintf( __( 'The validation rule `%s` does not exist.', 'fieldmanager' ), $validation_key ) ); } else { // This rule is valid so check for any messages if ( isset( $fm->validation_messages[$validation_key] ) ) From a132972116909c19484e3d6bd7a656866b47a94a Mon Sep 17 00:00:00 2001 From: David Herrera Date: Thu, 29 Dec 2016 21:38:28 -0500 Subject: [PATCH 05/17] Add translator comment --- fieldmanager.php | 1 + 1 file changed, 1 insertion(+) diff --git a/fieldmanager.php b/fieldmanager.php index 142855b0f8..8c969f7197 100644 --- a/fieldmanager.php +++ b/fieldmanager.php @@ -441,6 +441,7 @@ function fm_register_submenu_page( $group_name, $parent_slug, $page_title, $menu $submenus = array(); } if ( isset( $submenus[ $group_name ] ) ) { + /* translators: %s: submenu group name */ throw new FM_Duplicate_Submenu_Name_Exception( sprintf( esc_html__( '`%s` is already in use as a submenu name.', 'fieldmanager' ), $group_name ) ); } From c138f476c66fc742d90c9af44d8d451359939654 Mon Sep 17 00:00:00 2001 From: David Herrera Date: Sat, 31 Dec 2016 01:56:49 -0500 Subject: [PATCH 06/17] Use placeholders for untranslateable strings --- fieldmanager.php | 2 +- php/class-fieldmanager-field.php | 30 ++++++++++++----- php/class-fieldmanager-group.php | 33 +++++++++++++++---- php/class-fieldmanager-options.php | 4 +-- .../class-fieldmanager-context-storable.php | 2 +- .../class-fieldmanager-context-term.php | 18 ++++++++-- .../class-fieldmanager-datasource-post.php | 2 +- .../class-fieldmanager-datasource-user.php | 18 ++++++---- .../class-fieldmanager-datasource.php | 10 ++++-- .../class-fieldmanager-util-validation.php | 4 +-- 10 files changed, 88 insertions(+), 35 deletions(-) diff --git a/fieldmanager.php b/fieldmanager.php index 8c969f7197..a3c3cb99f4 100644 --- a/fieldmanager.php +++ b/fieldmanager.php @@ -442,7 +442,7 @@ function fm_register_submenu_page( $group_name, $parent_slug, $page_title, $menu } if ( isset( $submenus[ $group_name ] ) ) { /* translators: %s: submenu group name */ - throw new FM_Duplicate_Submenu_Name_Exception( sprintf( esc_html__( '`%s` is already in use as a submenu name.', 'fieldmanager' ), $group_name ) ); + throw new FM_Duplicate_Submenu_Name_Exception( sprintf( esc_html__( '%s is already in use as a submenu name.', 'fieldmanager' ), "`{$group_name}`" ) ); } if ( !$menu_title ) { diff --git a/php/class-fieldmanager-field.php b/php/class-fieldmanager-field.php index 1db230c773..040e45987e 100644 --- a/php/class-fieldmanager-field.php +++ b/php/class-fieldmanager-field.php @@ -334,7 +334,8 @@ public function __construct( $label = '', $options = array() ) { // A post can only have one parent, so if this saves to post_parent and // it's repeatable, we're doing it wrong. if ( $this->datasource && ! empty( $this->datasource->save_to_post_parent ) && $this->is_repeatable() ) { - _doing_it_wrong( 'Fieldmanager_Datasource_Post::$save_to_post_parent', __( 'A post can only have one parent, therefore you cannot store to `post_parent` in repeatable fields.', 'fieldmanager' ), '1.0.0' ); + /* translators: %s: `post_parent` */ + _doing_it_wrong( 'Fieldmanager_Datasource_Post::$save_to_post_parent', sprintf( __( 'A post can only have one parent, therefore you cannot store to %s in repeatable fields.', 'fieldmanager' ), '`post_parent`' ), '1.0.0' ); $this->datasource->save_to_post_parent = false; $this->datasource->only_save_to_post_parent = false; } @@ -370,8 +371,8 @@ public function set_options( $label, $options ) { } elseif ( self::$debug ) { $message = sprintf( /* translators: 1: property name, 2: class name, 3: field name */ - __( 'You attempted to set a property `%1$s` that is nonexistant or invalid for an instance of `%2$s` named `%3$s`.', 'fieldmanager' ), - $key, get_class( $this ), !empty( $options['name'] ) ? $options['name'] : 'NULL' + __( 'You attempted to set a property %1$s that is nonexistant or invalid for an instance of %2$s named %3$s.', 'fieldmanager' ), + "`{$key}`", '`' . get_class( $this ) . '`', ! empty( $options['name'] ) ? "`{$options['name']}`" : '`NULL`' ); throw new FM_Developer_Exception( esc_html( $message ) ); } @@ -384,7 +385,12 @@ public function set_options( $label, $options ) { // Cannot use serialize_data => false with index => true if ( ! $this->serialize_data && $this->index ) { - throw new FM_Developer_Exception( esc_html__( 'You cannot use `"serialize_data" => false` with `"index" => true`.', 'fieldmanager' ) ); + throw new FM_Developer_Exception( esc_html( sprintf( + /* translators: 1: `'serialize_data' => false`, 2: `'index' => true` */ + __( 'You cannot use %1$s with %2$s.', 'fieldmanager' ), + "`'serialize_data' => false`", + "`'index' => true`" + ) ) ); } } @@ -731,8 +737,13 @@ public function presave_all( $values, $current_values ) { return; } - /* translators: %d: `limit` property value */ - $this->_unauthorized_access( sprintf( __( '`$values` should be an array because `$limit` is %d.', 'fieldmanager' ), $this->limit ) ); + /* translators: 1: `$values`, 2: `$limit`, 3: `limit` property value */ + $this->_unauthorized_access( sprintf( + __( '%1$s should be an array because %2$s is %3$d.', 'fieldmanager' ), + '`$values`', + '`$limit`', + $this->limit + ) ); } if ( empty( $values ) ) { @@ -866,14 +877,15 @@ public function presave( $value, $current_value = array() ) { // this point, but those elements must override this function. Let's // make sure we're dealing with one value here. if ( is_array( $value ) ) { - $this->_unauthorized_access( __( '`presave()` in the base class should not get arrays, but did.', 'fieldmanager' ) ); + /* translators: %s: `presave()` */ + $this->_unauthorized_access( sprintf( __( '%s in the base class should not get arrays, but did.', 'fieldmanager' ), '`presave()`' ) ); } foreach ( $this->validate as $func ) { if ( !call_user_func( $func, $value ) ) { $this->_failed_validation( sprintf( /* translators: 1: input name, 2: field label */ - __( 'Input `%1$s` is not valid for field `%2$s`.', 'fieldmanager' ), - (string) $value, + __( 'Input %1$s is not valid for field "%2$s".', 'fieldmanager' ), + '`' . (string) $value . '`', $this->label ) ); } diff --git a/php/class-fieldmanager-group.php b/php/class-fieldmanager-group.php index a7374e487f..4b96c5d122 100644 --- a/php/class-fieldmanager-group.php +++ b/php/class-fieldmanager-group.php @@ -130,7 +130,11 @@ public function __construct( $label = '', $options = array() ) { // Repeatable groups cannot used unserialized data $is_repeatable = ( 1 != $this->limit ); if ( ! $this->serialize_data && $is_repeatable ) { - throw new FM_Developer_Exception( esc_html__( 'You cannot use `"serialize_data" => false` with repeating groups.', 'fieldmanager' ) ); + throw new FM_Developer_Exception( esc_html( sprintf( + /* translators: %s: `'serialize_data' => false` */ + __( 'You cannot use %s with repeating groups.', 'fieldmanager' ), + "`'serialize_data' => false`" + ) ) ); } // If this is collapsed, collapsibility is implied @@ -143,20 +147,26 @@ public function __construct( $label = '', $options = array() ) { // if the array key is not an int, and the name attr is set, and they don't match, we got a problem. if ( $element->name && !is_int( $name ) && $element->name != $name ) { /* translators: 1: group child name, 2: group child name */ - throw new FM_Developer_Exception( sprintf( esc_html__( 'Group child name conflict: `%1$s` / `%2$s`.', 'fieldmanager' ), $name, $element->name ) ); + throw new FM_Developer_Exception( sprintf( esc_html__( 'Group child name conflict: %1$s / %2$s.', 'fieldmanager' ), "`{$name}`", "`{$element->name}`" ) ); } elseif ( ! $element->name ) { $element->name = $name; } // Catch errors when using serialize_data => false and index => true if ( ! $this->serialize_data && $element->index ) { - throw new FM_Developer_Exception( esc_html__( 'You cannot use `"serialize_data" => false` with `"index" => true`.', 'fieldmanager' ) ); + throw new FM_Developer_Exception( esc_html( sprintf( + /* translators: 1: `'serialize_data' => false`, 2: `'index' => true` */ + __( 'You cannot use %1$s with %2$s.', 'fieldmanager' ), + "`'serialize_data' => false`", + "`'index' => true`" + ) ) ); } // A post can only have one parent, so if this saves to post_parent and // it's repeatable, we're doing it wrong. if ( $element->datasource && ! empty( $element->datasource->save_to_post_parent ) && $this->is_repeatable() ) { - _doing_it_wrong( 'Fieldmanager_Datasource_Post::$save_to_post_parent', __( 'A post can only have one parent, therefore you cannot store to `post_parent` in repeatable fields.', 'fieldmanager' ), '1.0.0' ); + /* translators: %s: `post_parent` */ + _doing_it_wrong( 'Fieldmanager_Datasource_Post::$save_to_post_parent', sprintf( __( 'A post can only have one parent, therefore you cannot store to %s in repeatable fields.', 'fieldmanager' ), '`post_parent`' ), '1.0.0' ); $element->datasource->save_to_post_parent = false; $element->datasource->only_save_to_post_parent = false; } @@ -172,7 +182,11 @@ public function __construct( $label = '', $options = array() ) { // Check for invalid usage of repeatables and serialize_data if ( $is_repeatable && $this->has_unserialized_descendants ) { - throw new FM_Developer_Exception( esc_html__( 'You cannot use `"serialize_data" => false` with repeating groups.', 'fieldmanager' ) ); + throw new FM_Developer_Exception( esc_html( sprintf( + /* translators: %s: `'serialize_data' => false` */ + __( 'You cannot use %s with repeating groups.', 'fieldmanager' ), + "`'serialize_data' => false`" + ) ) ); } // Add the tab JS and CSS if it is needed @@ -295,7 +309,12 @@ public function add_child( Fieldmanager_Field $child ) { // Catch errors when using serialize_data => false and index-> true if ( ! $this->serialize_data && $child->index ) { - throw new FM_Developer_Exception( esc_html__( 'You cannot use `"serialize_data" => false` with `"index" => true`.', 'fieldmanager' ) ); + throw new FM_Developer_Exception( esc_html( sprintf( + /* translators: 1: `'serialize_data' => false`, 2: `'index' => true` */ + __( 'You cannot use %1$s with %2$s.', 'fieldmanager' ), + "`'serialize_data' => false`", + "`'index' => true`" + ) ) ); } } @@ -312,7 +331,7 @@ public function presave( $values, $current_values = array() ) { // If we're here, it means that the input, generally $_POST, contains a value that doesn't belong, // and thus one which we cannot sanitize and must not save. This might be an attack. /* translators: %s: input name */ - $this->_unauthorized_access( sprintf( __( 'Found `%s` in data but not in children.', 'fieldmanager' ), $key ) ); + $this->_unauthorized_access( sprintf( __( 'Found %s in data but not in children.', 'fieldmanager' ), "`{$key}`" ) ); } } } diff --git a/php/class-fieldmanager-options.php b/php/class-fieldmanager-options.php index b45ad56051..d76049b77b 100644 --- a/php/class-fieldmanager-options.php +++ b/php/class-fieldmanager-options.php @@ -214,8 +214,8 @@ public function presave( $value, $current_value = array() ) { if ( !call_user_func( $func, $value ) ) { $this->_failed_validation( sprintf( /* translators: 1: input name, 2: field label */ - __( 'Input `%1$s` is not valid for field `%2$s`.', 'fieldmanager' ), - (string) $value, + __( 'Input %1$s is not valid for field "%2$s".', 'fieldmanager' ), + '`' . (string) $value . '`', $this->label ) ); } diff --git a/php/context/class-fieldmanager-context-storable.php b/php/context/class-fieldmanager-context-storable.php index a8b4f2b90f..82f50ca832 100644 --- a/php/context/class-fieldmanager-context-storable.php +++ b/php/context/class-fieldmanager-context-storable.php @@ -71,7 +71,7 @@ protected function save_field( $field, $data ) { if ( isset( $this->save_keys[ $field->get_element_key() ] ) ) { /* translators: %s: field storage key */ - throw new FM_Developer_Exception( sprintf( esc_html__( 'You have two fields in this group saving to the same key: `%s`.', 'fieldmanager' ), $field->get_element_key() ) ); + throw new FM_Developer_Exception( sprintf( esc_html__( 'You have two fields in this group saving to the same key: %s.', 'fieldmanager' ), "`{$field->get_element_key()}`" ) ); } else { $this->save_keys[ $field->get_element_key() ] = true; } diff --git a/php/context/class-fieldmanager-context-term.php b/php/context/class-fieldmanager-context-term.php index bd1dcc732d..bb51c80f00 100644 --- a/php/context/class-fieldmanager-context-term.php +++ b/php/context/class-fieldmanager-context-term.php @@ -112,7 +112,13 @@ public function __construct( $args, $taxonomies = array(), $show_on_add = true, 'field' => null, ) ); if ( ! isset( $args['title'], $args['taxonomies'] ) ) { - throw new FM_Developer_Exception( esc_html__( '`title` and `taxonomies` are required values for `Fieldmanager_Context_Term`.', 'fieldmanager' ) ); + throw new FM_Developer_Exception( esc_html( sprintf( + /* translators: 1: `title`, 2: `taxonomies`, 3: `Fieldmanager_Context_Term` */ + __( '%1$s and %2$s are required values for %3$s.', 'fieldmanager' ), + '`title`', + '`taxonomies`', + '`Fieldmanager_Context_Term`' + ) ) ); } $this->title = $args['title']; @@ -123,7 +129,13 @@ public function __construct( $args, $taxonomies = array(), $show_on_add = true, $this->use_fm_meta = $args['use_fm_meta']; $this->fm = $args['field']; } elseif ( empty( $taxonomies ) ) { - throw new FM_Developer_Exception( esc_html__( '`title` and `taxonomies` are required values for `Fieldmanager_Context_Term`.', 'fieldmanager' ) ); + throw new FM_Developer_Exception( esc_html( sprintf( + /* translators: 1: `title`, 2: `taxonomies`, 3: `Fieldmanager_Context_Term` */ + __( '%1$s and %2$s are required values for %3$s.', 'fieldmanager' ), + '`title`', + '`taxonomies`', + '`Fieldmanager_Context_Term`' + ) ) ); } else { // Instantiating Fieldmanager_Context_Term using individual // arguments is deprecated as of Fieldmanager-1.0.0-beta.3; you @@ -218,7 +230,7 @@ public function term_fields( $html_template, $taxonomy, $term = null ) { // Make sure the user hasn't specified a field name we can't use if ( in_array( $this->fm->name, $this->reserved_fields ) ) { /* translators: %s: field name */ - $this->fm->_invalid_definition( sprintf( __( 'The field name `%s` is reserved for WordPress on the term form.', 'fieldmanager' ), $this->fm->name ) ); + $this->fm->_invalid_definition( sprintf( __( 'The field name %s is reserved for WordPress on the term form.', 'fieldmanager' ), "`{$this->fm->name}`" ) ); } // Set the data type and ID diff --git a/php/datasource/class-fieldmanager-datasource-post.php b/php/datasource/class-fieldmanager-datasource-post.php index d1cfeb8195..698c06c0c9 100644 --- a/php/datasource/class-fieldmanager-datasource-post.php +++ b/php/datasource/class-fieldmanager-datasource-post.php @@ -218,7 +218,7 @@ public function presave( Fieldmanager_Field $field, $value, $current_value ) { $post_type_obj = get_post_type_object( get_post_type( $value ) ); if ( empty( $post_type_obj->cap->edit_post ) || ! current_user_can( $post_type_obj->cap->edit_post, $value ) ) { /* translators: 1: post type name, 2: post ID, 3: field name */ - wp_die( esc_html( sprintf( __( 'Tried to alter `%1$s` %2$d through field `%3$s`, which current user cannot edit.', 'fieldmanager' ), $post_type_obj->name, $value, $field->name ) ) ); + wp_die( esc_html( sprintf( __( 'Tried to alter %1$s %2$d through field %3$s, which current user cannot edit.', 'fieldmanager' ), "`{$post_type_obj->name}`", $value, "`{$field->name}`" ) ) ); } } $this->presave_status_transition( $field, $value ); diff --git a/php/datasource/class-fieldmanager-datasource-user.php b/php/datasource/class-fieldmanager-datasource-user.php index 397eca40ba..326899b680 100644 --- a/php/datasource/class-fieldmanager-datasource-user.php +++ b/php/datasource/class-fieldmanager-datasource-user.php @@ -76,8 +76,8 @@ public function __construct( $options = array() ) { if ( ! in_array( $this->store_property, $this->allowed_store_properties ) ) { throw new FM_Developer_Exception( sprintf( /* translators: 1: invalid property name, 2: list of valid property names */ - __( 'Store property `%1$s` is invalid. Must be one of %2$s.', 'fieldmanager' ), - $this->store_property, + __( 'Store property %1$s is invalid. Must be one of %2$s.', 'fieldmanager' ), + "`{$this->store_property}`", /* translators: used between list items, there is a space after the comma */ implode( __( ', ', 'fieldmanager' ), array_map( function ( $property ) { @@ -89,15 +89,21 @@ function ( $property ) { } if ( ! empty( $this->reciprocal ) && 'ID' != $this->store_property ) { - throw new FM_Developer_Exception( __( 'You cannot use reciprocal relationships with `Fieldmanager_Datasource_User` if `store_property` is not set to `ID`.', 'fieldmanager' ) ); + throw new FM_Developer_Exception( sprintf( + /* translators: 1: `Fieldmanager_Datasource_User`, 2: `store_property`, 3: `ID` */ + __( 'You cannot use reciprocal relationships with %1$s if %2$s is not set to %3$s.', 'fieldmanager' ), + '`Fieldmanager_Datasource_User`', + '`store_property`', + '`ID`' + ) ); } // Validate improper usage of display property if ( ! in_array( $this->display_property, $this->allowed_display_properties ) ) { throw new FM_Developer_Exception( sprintf( /* translators: 1: invalid property name, 2: list of valid property names */ - __( 'Display property `%1$s` is invalid. Must be one of %2$s.', 'fieldmanager' ), - $this->display_property, + __( 'Display property %1$s is invalid. Must be one of %2$s.', 'fieldmanager' ), + "`{$this->display_property}`", /* translators: used between list items, there is a space after the comma */ implode( __( ', ', 'fieldmanager' ), array_map( function ( $property ) { @@ -218,7 +224,7 @@ public function presave( Fieldmanager_Field $field, $value, $current_value ) { $value[$i] = $this->sanitize_value( $v ); if( ! current_user_can( $this->capability, $v ) ) { /* translators: %s: property name */ - wp_die( esc_html( sprintf( __( 'Tried to refer to user `%s` which current user cannot edit.', 'fieldmanager' ), $v ) ) ); + wp_die( esc_html( sprintf( __( 'Tried to refer to user %s which current user cannot edit.', 'fieldmanager' ), "`{$v}`" ) ) ); } if ( $this->reciprocal && 'ID' == $this->store_property ) { add_user_meta( $v, $this->reciprocal, $field->data_id ); diff --git a/php/datasource/class-fieldmanager-datasource.php b/php/datasource/class-fieldmanager-datasource.php index 1bd33c1ee2..58668933e9 100644 --- a/php/datasource/class-fieldmanager-datasource.php +++ b/php/datasource/class-fieldmanager-datasource.php @@ -62,8 +62,8 @@ public function __construct( $options = array() ) { } catch ( Exception $e ) { $message = sprintf( /* translators: 1: property name, 2: class name, 3: field name */ - __( 'You attempted to set a property `%1$s` that is nonexistant or invalid for an instance of `%2$s` named `%3$s`.', 'fieldmanager' ), - $k, __CLASS__, !empty( $options['name'] ) ? $options['name'] : 'NULL' + __( 'You attempted to set a property %1$s that is nonexistant or invalid for an instance of %2$s named %3$s.', 'fieldmanager' ), + "`{$k}`", '`' . __CLASS__ . '`', ! empty( $options['name'] ) ? "`{$options['name']}`" : '`NULL`' ); $title = esc_html__( 'Nonexistant or invalid option.' ); if ( !Fieldmanager_Field::$debug ) { @@ -75,7 +75,11 @@ public function __construct( $options = array() ) { } if ( get_class( $this ) == __CLASS__ && empty( $options ) ) { - $message = esc_html__( 'Invalid datasource options; must use the `$options` parameter to supply an array.', 'fieldmanager' ); + $message = esc_html( sprintf( + /* translators: %s: `$options` */ + __( 'Invalid datasource options; must use the %s parameter to supply an array.', 'fieldmanager' ), + '`$options`' + ) ); if ( Fieldmanager_Field::$debug ) { throw new FM_Developer_Exception( $message ); } else { diff --git a/php/util/class-fieldmanager-util-validation.php b/php/util/class-fieldmanager-util-validation.php index 6979ca0bb3..426517939a 100644 --- a/php/util/class-fieldmanager-util-validation.php +++ b/php/util/class-fieldmanager-util-validation.php @@ -136,7 +136,7 @@ public function add_field( &$fm ) { // If a string, the only acceptable value is "required". if ( ! is_string( $fm->validation_rules ) || $fm->validation_rules != 'required' ) /* translators: %s: validation rule name */ - $fm->_invalid_definition( sprintf( __( 'The validation rule `%s` does not exist.', 'fieldmanager' ), $fm->validation_rules ) ); + $fm->_invalid_definition( sprintf( __( 'The validation rule %s does not exist.', 'fieldmanager' ), "`{$fm->validation_rules}`" ) ); // Convert the value to an array since we standardize the Javascript output on this format $fm->validation_rules = array( 'required' => true ); @@ -151,7 +151,7 @@ public function add_field( &$fm ) { if ( ! in_array( $validation_key, $this->valid_rules ) ) { // This is not a rule available in jQuery validation /* translators: %s: validation rule name */ - $fm->_invalid_definition( sprintf( __( 'The validation rule `%s` does not exist.', 'fieldmanager' ), $validation_key ) ); + $fm->_invalid_definition( sprintf( __( 'The validation rule %s does not exist.', 'fieldmanager' ), "`{$validation_key}`" ) ); } else { // This rule is valid so check for any messages if ( isset( $fm->validation_messages[$validation_key] ) ) From 1d071265fe897b3e168b94872f14be6382f6db9b Mon Sep 17 00:00:00 2001 From: David Herrera Date: Sat, 31 Dec 2016 02:01:13 -0500 Subject: [PATCH 07/17] Generate a POT file via `grunt-wp-i18n` --- Gruntfile.js | 21 ++- languages/fieldmanager.pot | 327 +++++++++++++++++++++++++++++++++++++ package.json | 3 +- 3 files changed, 347 insertions(+), 4 deletions(-) create mode 100644 languages/fieldmanager.pot diff --git a/Gruntfile.js b/Gruntfile.js index a63d8d938f..215c5f4ce7 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -35,6 +35,21 @@ module.exports = function( grunt ) { } } }, + makepot: { + target: { + options: { + domainPath: '/languages', + mainFile: 'fieldmanager.php', + potFilename: 'fieldmanager.pot', + potHeaders: { + poedit: true, + 'x-poedit-keywordslist': true + }, + type: 'wp-plugin', + updateTimestamp: true + } + } + }, phpcs: { plugin: {}, options: { @@ -51,8 +66,8 @@ module.exports = function( grunt ) { grunt.loadNpmTasks( 'grunt-contrib-connect' ); grunt.loadNpmTasks( 'grunt-contrib-qunit' ); grunt.loadNpmTasks( 'grunt-phpcs' ); + grunt.loadNpmTasks( 'grunt-wp-i18n' ); - grunt.task.run( 'connect' ); - - grunt.registerTask( 'default', ['qunit:latest'] ); + grunt.registerTask( 'default', [ 'connect', 'qunit:latest' ] ); + grunt.registerTask( 'i18n', [ 'makepot' ] ); }; diff --git a/languages/fieldmanager.pot b/languages/fieldmanager.pot new file mode 100644 index 0000000000..c5beed4457 --- /dev/null +++ b/languages/fieldmanager.pot @@ -0,0 +1,327 @@ +# Copyright (C) 2016 Austin Smith, Matthew Boynes +# This file is distributed under the same license as the Fieldmanager package. +msgid "" +msgstr "" +"Project-Id-Version: Fieldmanager 1.1.0-beta.1\n" +"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/fieldmanager\n" +"POT-Creation-Date: 2016-12-31 06:54:43+00:00\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"PO-Revision-Date: 2016-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"X-Generator: grunt-wp-i18n 0.5.4\n" +"X-Poedit-KeywordsList: " +"__;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_" +"attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c;\n" +"Language: en\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Poedit-Country: United States\n" +"X-Poedit-SourceCharset: UTF-8\n" +"X-Poedit-Basepath: ../\n" +"X-Poedit-SearchPath-0: .\n" +"X-Poedit-Bookmarks: \n" +"X-Textdomain-Support: yes\n" + +#: fieldmanager.php:457 +#. translators: %s: submenu group name +msgid "%s is already in use as a submenu name." +msgstr "" + +#: fieldmanager.php:485 +msgid "The Fieldmanger context for this submenu was not initialized." +msgstr "" + +#: php/class-fieldmanager-autocomplete.php:67 +msgid "You must supply a datasource for the autocomplete field." +msgstr "" + +#: php/class-fieldmanager-autocomplete.php:71 +msgid "No datasource." +msgstr "" + +#: php/class-fieldmanager-checkbox.php:69 +msgid "Saved a checkbox with a value that was not one of the options." +msgstr "" + +#: php/class-fieldmanager-draggablepost.php:130 +msgid "drop posts here" +msgstr "" + +#: php/class-fieldmanager-draggablepost.php:168 +msgid "(no authors)" +msgstr "" + +#: php/class-fieldmanager-field.php:338 php/class-fieldmanager-group.php:169 +#. translators: %s: `post_parent` +msgid "" +"A post can only have one parent, therefore you cannot store to %s in " +"repeatable fields." +msgstr "" + +#: php/class-fieldmanager-field.php:374 +#: php/datasource/class-fieldmanager-datasource.php:65 +#. translators: 1: property name, 2: class name, 3: field name +msgid "" +"You attempted to set a property %1$s that is nonexistant or invalid for an " +"instance of %2$s named %3$s." +msgstr "" + +#: php/class-fieldmanager-field.php:390 php/class-fieldmanager-group.php:159 +#: php/class-fieldmanager-group.php:314 +#. translators: 1: `'serialize_data' => false`, 2: `'index' => true` +msgid "You cannot use %1$s with %2$s." +msgstr "" + +#: php/class-fieldmanager-field.php:742 +#. translators: 1: `$values`, 2: `$limit`, 3: `limit` property value +msgid "%1$s should be an array because %2$s is %3$d." +msgstr "" + +#: php/class-fieldmanager-field.php:762 +#. translators: 1: count of submitted values, 2: `limit` property value +msgid "Submitted %1$d values against a limit of %2$d." +msgstr "" + +#: php/class-fieldmanager-field.php:770 +msgid "Use of a non-numeric key suggests that something is wrong with this group." +msgstr "" + +#: php/class-fieldmanager-field.php:881 +#. translators: %s: `presave()` +msgid "%s in the base class should not get arrays, but did." +msgstr "" + +#: php/class-fieldmanager-field.php:887 php/class-fieldmanager-options.php:217 +#. translators: 1: input name, 2: field label +msgid "Input %1$s is not valid for field \"%2$s\"." +msgstr "" + +#: php/class-fieldmanager-field.php:945 +msgid "Add group" +msgstr "" + +#: php/class-fieldmanager-field.php:945 +msgid "Add field" +msgstr "" + +#: php/class-fieldmanager-field.php:967 +msgid "Move" +msgstr "" + +#: php/class-fieldmanager-field.php:975 php/class-fieldmanager-media.php:96 +msgid "Remove" +msgstr "" + +#: php/class-fieldmanager-field.php:1054 +msgid "This method requires WordPress 4.4 or above." +msgstr "" + +#: php/class-fieldmanager-field.php:1124 +msgid "You cannot use this method on a subgroup." +msgstr "" + +#: php/class-fieldmanager-field.php:1138 +msgid "Sorry, you're not supposed to do that..." +msgstr "" + +#: php/class-fieldmanager-field.php:1154 +msgid "You may be able to use your browser's back button to resolve this error." +msgstr "" + +#: php/class-fieldmanager-field.php:1168 +msgid "" +"Sorry, you've created an invalid field definition. Please check your code " +"and try again." +msgstr "" + +#: php/class-fieldmanager-grid.php:76 +msgid "Show Data Grid" +msgstr "" + +#: php/class-fieldmanager-grid.php:77 +msgid "Hide Data Grid" +msgstr "" + +#: php/class-fieldmanager-group.php:135 php/class-fieldmanager-group.php:187 +#. translators: %s: `'serialize_data' => false` +msgid "You cannot use %s with repeating groups." +msgstr "" + +#: php/class-fieldmanager-group.php:150 +#. translators: 1: group child name, 2: group child name +msgid "Group child name conflict: %1$s / %2$s." +msgstr "" + +#: php/class-fieldmanager-group.php:249 +msgid "More..." +msgstr "" + +#: php/class-fieldmanager-group.php:334 +#. translators: %s: input name +msgid "Found %s in data but not in children." +msgstr "" + +#: php/class-fieldmanager-media.php:91 +msgid "Attach a File" +msgstr "" + +#: php/class-fieldmanager-media.php:92 +msgid "Select Attachment" +msgstr "" + +#: php/class-fieldmanager-media.php:93 +msgid "Choose an Attachment" +msgstr "" + +#: php/class-fieldmanager-media.php:94 +msgid "Uploaded Image:" +msgstr "" + +#: php/class-fieldmanager-media.php:95 +msgid "Uploaded File:" +msgstr "" + +#: php/context/class-fieldmanager-context-page.php:44 +#: php/context/class-fieldmanager-context.php:43 +msgid "Nonce validation failed." +msgstr "" + +#: php/context/class-fieldmanager-context-page.php:70 +msgid "Save Options" +msgstr "" + +#: php/context/class-fieldmanager-context-post.php:200 +#: php/context/class-fieldmanager-context-quickedit.php:196 +msgid "Current user cannot edit this post." +msgstr "" + +#: php/context/class-fieldmanager-context-quickedit.php:55 +msgid "You must set a valid column display callback." +msgstr "" + +#: php/context/class-fieldmanager-context-storable.php:74 +#. translators: %s: field storage key +msgid "You have two fields in this group saving to the same key: %s." +msgstr "" + +#: php/context/class-fieldmanager-context-submenu.php:77 +msgid "Options updated." +msgstr "" + +#: php/context/class-fieldmanager-context-submenu.php:137 +msgid "Current user cannot edit this page." +msgstr "" + +#: php/context/class-fieldmanager-context-term.php:117 +#: php/context/class-fieldmanager-context-term.php:134 +#. translators: 1: `title`, 2: `taxonomies`, 3: `Fieldmanager_Context_Term` +msgid "%1$s and %2$s are required values for %3$s." +msgstr "" + +#: php/context/class-fieldmanager-context-term.php:233 +#. translators: %s: field name +msgid "The field name %s is reserved for WordPress on the term form." +msgstr "" + +#: php/context/class-fieldmanager-context-term.php:284 +msgid "Current user cannot edit this term." +msgstr "" + +#: php/context/class-fieldmanager-context-user.php:75 +msgid "Current user cannot edit this user." +msgstr "" + +#: php/datasource/class-fieldmanager-datasource-post.php:221 +#. translators: 1: post type name, 2: post ID, 3: field name +msgid "Tried to alter %1$s %2$d through field %3$s, which current user cannot edit." +msgstr "" + +#: php/datasource/class-fieldmanager-datasource-post.php:289 +#: php/datasource/class-fieldmanager-datasource-term.php:371 +msgid "View" +msgstr "" + +#: php/datasource/class-fieldmanager-datasource-post.php:303 +#: php/datasource/class-fieldmanager-datasource-term.php:386 +#: php/datasource/class-fieldmanager-datasource-user.php:256 +msgid "Edit" +msgstr "" + +#: php/datasource/class-fieldmanager-datasource-user.php:79 +#. translators: 1: invalid property name, 2: list of valid property names +msgid "Store property %1$s is invalid. Must be one of %2$s." +msgstr "" + +#: php/datasource/class-fieldmanager-datasource-user.php:82 +#: php/datasource/class-fieldmanager-datasource-user.php:108 +#. translators: used between list items, there is a space after the comma +msgid ", " +msgstr "" + +#: php/datasource/class-fieldmanager-datasource-user.php:94 +#. translators: 1: `Fieldmanager_Datasource_User`, 2: `store_property`, 3: `ID` +msgid "" +"You cannot use reciprocal relationships with %1$s if %2$s is not set to " +"%3$s." +msgstr "" + +#: php/datasource/class-fieldmanager-datasource-user.php:105 +#. translators: 1: invalid property name, 2: list of valid property names +msgid "Display property %1$s is invalid. Must be one of %2$s." +msgstr "" + +#: php/datasource/class-fieldmanager-datasource-user.php:227 +#. translators: %s: property name +msgid "Tried to refer to user %s which current user cannot edit." +msgstr "" + +#: php/datasource/class-fieldmanager-datasource.php:68 +msgid "Nonexistant or invalid option." +msgstr "" + +#: php/datasource/class-fieldmanager-datasource.php:80 +#. translators: %s: `$options` +msgid "Invalid datasource options; must use the %s parameter to supply an array." +msgstr "" + +#: php/datasource/class-fieldmanager-datasource.php:86 +msgid "Invalid datasource options." +msgstr "" + +#: php/util/class-fieldmanager-util-term-meta.php:69 +msgid "Fieldmanager Term Metadata" +msgstr "" + +#: php/util/class-fieldmanager-util-validation.php:139 +#: php/util/class-fieldmanager-util-validation.php:154 +#. translators: %s: validation rule name +msgid "The validation rule %s does not exist." +msgstr "" + +#. Plugin Name of the plugin/theme +msgid "Fieldmanager" +msgstr "" + +#. Plugin URI of the plugin/theme +msgid "https://github.com/alleyinteractive/wordpress-fieldmanager" +msgstr "" + +#. Description of the plugin/theme +msgid "Add fields to content types programatically." +msgstr "" + +#. Author of the plugin/theme +msgid "Austin Smith, Matthew Boynes" +msgstr "" + +#. Author URI of the plugin/theme +msgid "http://www.alleyinteractive.com/" +msgstr "" + +#: php/datasource/class-fieldmanager-datasource-user.php:84 +#: php/datasource/class-fieldmanager-datasource-user.php:110 +msgctxt "property name like `user_nicename`" +msgid "`%s`" +msgstr "" \ No newline at end of file diff --git a/package.json b/package.json index 61a0bb19ce..865df1ecc5 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "grunt": "^0.4.5", "grunt-contrib-connect": "~0.11.0", "grunt-contrib-qunit": "~0.7.0", - "grunt-phpcs": "^0.4.0" + "grunt-phpcs": "^0.4.0", + "grunt-wp-i18n": "~0.5.0" } } From cef2b3f819e0610827809a440d358e0f4778ac00 Mon Sep 17 00:00:00 2001 From: David Herrera Date: Sat, 31 Dec 2016 02:08:14 -0500 Subject: [PATCH 08/17] Load translated strings --- fieldmanager.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/fieldmanager.php b/fieldmanager.php index a3c3cb99f4..06d2f8dc98 100644 --- a/fieldmanager.php +++ b/fieldmanager.php @@ -13,6 +13,8 @@ Author: Austin Smith, Matthew Boynes Version: 1.1.0-beta.1 Author URI: http://www.alleyinteractive.com/ +Text Domain: fieldmanager +Domain Path: /languages */ /** @@ -139,6 +141,16 @@ function fieldmanager_get_template( $tpl_slug ) { return plugin_dir_path( __FILE__ ) . 'templates/' . $tpl_slug . '.php'; } +/** + * Load Fieldmanager's translated strings. + * + * @return bool @see load_plugin_textdomain(). + */ +function fm_load_textdomain() { + return load_plugin_textdomain( 'fieldmanager', false, plugin_basename( FM_BASE_DIR ) . '/languages/' ); +} +add_action( 'init', 'fm_load_textdomain' ); + /** * Enqueue a script, optionally localizing data to it. * From 68946e6140cfd288eab7087510f141a24bc6f68d Mon Sep 17 00:00:00 2001 From: David Herrera Date: Sat, 31 Dec 2016 02:11:16 -0500 Subject: [PATCH 09/17] Fix inconsistent spacing --- php/datasource/class-fieldmanager-datasource-post.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/php/datasource/class-fieldmanager-datasource-post.php b/php/datasource/class-fieldmanager-datasource-post.php index 698c06c0c9..d571134201 100644 --- a/php/datasource/class-fieldmanager-datasource-post.php +++ b/php/datasource/class-fieldmanager-datasource-post.php @@ -217,7 +217,7 @@ public function presave( Fieldmanager_Field $field, $value, $current_value ) { if ( ! defined( 'DOING_CRON' ) || ! DOING_CRON ) { $post_type_obj = get_post_type_object( get_post_type( $value ) ); if ( empty( $post_type_obj->cap->edit_post ) || ! current_user_can( $post_type_obj->cap->edit_post, $value ) ) { - /* translators: 1: post type name, 2: post ID, 3: field name */ + /* translators: 1: post type name, 2: post ID, 3: field name */ wp_die( esc_html( sprintf( __( 'Tried to alter %1$s %2$d through field %3$s, which current user cannot edit.', 'fieldmanager' ), "`{$post_type_obj->name}`", $value, "`{$field->name}`" ) ) ); } } From d93ccc20c343e9babbd14367fed47dd7522c129a Mon Sep 17 00:00:00 2001 From: David Herrera Date: Sat, 31 Dec 2016 16:50:09 -0500 Subject: [PATCH 10/17] Always run Grunt connect server for Qunit; remove redundant aliases --- Gruntfile.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index 215c5f4ce7..9d83eb41ec 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -68,6 +68,6 @@ module.exports = function( grunt ) { grunt.loadNpmTasks( 'grunt-phpcs' ); grunt.loadNpmTasks( 'grunt-wp-i18n' ); - grunt.registerTask( 'default', [ 'connect', 'qunit:latest' ] ); - grunt.registerTask( 'i18n', [ 'makepot' ] ); + // Run server for QUnit. + grunt.task.run( 'connect' ); }; From cba41231d29605a535e9965d4d74b6aa3e4105ff Mon Sep 17 00:00:00 2001 From: David Herrera Date: Sun, 1 Jan 2017 09:59:20 -0500 Subject: [PATCH 11/17] Update expected exception message --- tests/php/test_fieldmanager_field.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/php/test_fieldmanager_field.php b/tests/php/test_fieldmanager_field.php index de5df32f73..ecc4434dec 100644 --- a/tests/php/test_fieldmanager_field.php +++ b/tests/php/test_fieldmanager_field.php @@ -761,7 +761,7 @@ public function test_extra_elements_and_minimum_counts() { /** * @expectedException FM_Exception - * @expectedExceptionMessage submitted 5 values against a limit of 3 + * @expectedExceptionMessage Submitted 5 values against a limit of 3. */ public function test_limit_exceeded_exceptions() { $test_data_too_many = array( From 78e9d0209fd444a814642d30803263024d1a936b Mon Sep 17 00:00:00 2001 From: David Herrera Date: Sat, 25 Feb 2017 14:04:52 -0500 Subject: [PATCH 12/17] Fix tabbing --- tests/php/test_fieldmanager_field.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/php/test_fieldmanager_field.php b/tests/php/test_fieldmanager_field.php index ecc4434dec..2fd65cfa53 100644 --- a/tests/php/test_fieldmanager_field.php +++ b/tests/php/test_fieldmanager_field.php @@ -761,7 +761,7 @@ public function test_extra_elements_and_minimum_counts() { /** * @expectedException FM_Exception - * @expectedExceptionMessage Submitted 5 values against a limit of 3. + * @expectedExceptionMessage Submitted 5 values against a limit of 3. */ public function test_limit_exceeded_exceptions() { $test_data_too_many = array( From c0a5081f2d1488f628fbf7bcffb025aaa3b407c8 Mon Sep 17 00:00:00 2001 From: David Herrera Date: Sat, 25 Feb 2017 14:05:10 -0500 Subject: [PATCH 13/17] Bump dates in .pot file --- languages/fieldmanager.pot | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/languages/fieldmanager.pot b/languages/fieldmanager.pot index c5beed4457..b981ae555d 100644 --- a/languages/fieldmanager.pot +++ b/languages/fieldmanager.pot @@ -1,14 +1,14 @@ -# Copyright (C) 2016 Austin Smith, Matthew Boynes +# Copyright (C) 2017 Austin Smith, Matthew Boynes # This file is distributed under the same license as the Fieldmanager package. msgid "" msgstr "" "Project-Id-Version: Fieldmanager 1.1.0-beta.1\n" "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/fieldmanager\n" -"POT-Creation-Date: 2016-12-31 06:54:43+00:00\n" +"POT-Creation-Date: 2017-02-25 19:05:01+00:00\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2016-MO-DA HO:MI+ZONE\n" +"PO-Revision-Date: 2017-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "X-Generator: grunt-wp-i18n 0.5.4\n" From f4b3e3ed4134026c5fe98b4ac412769d1e7abf98 Mon Sep 17 00:00:00 2001 From: David Herrera Date: Thu, 23 Nov 2017 22:12:56 -0500 Subject: [PATCH 14/17] Fix location of "translators" comment --- php/class-fieldmanager-field.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/php/class-fieldmanager-field.php b/php/class-fieldmanager-field.php index 09d3e8713d..1435c29b31 100644 --- a/php/class-fieldmanager-field.php +++ b/php/class-fieldmanager-field.php @@ -882,8 +882,8 @@ public function presave_all( $values, $current_values ) { return; } - /* translators: 1: `$values`, 2: `$limit`, 3: `limit` property value */ $this->_unauthorized_access( sprintf( + /* translators: 1: `$values`, 2: `$limit`, 3: `limit` property value */ __( '%1$s should be an array because %2$s is %3$d.', 'fieldmanager' ), '`$values`', '`$limit`', From 1a813cba740c3b4795bf6780b1bb7b01cef3d518 Mon Sep 17 00:00:00 2001 From: David Herrera Date: Thu, 23 Nov 2017 22:13:09 -0500 Subject: [PATCH 15/17] Remove unnecessary translations --- php/datasource/class-fieldmanager-datasource-user.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/php/datasource/class-fieldmanager-datasource-user.php b/php/datasource/class-fieldmanager-datasource-user.php index 53510514ae..cfeb193b57 100644 --- a/php/datasource/class-fieldmanager-datasource-user.php +++ b/php/datasource/class-fieldmanager-datasource-user.php @@ -101,7 +101,7 @@ public function __construct( $options = array() ) { /* translators: used between list items, there is a space after the comma */ implode( __( ', ', 'fieldmanager' ), array_map( function ( $property ) { - return sprintf( _x( '`%s`', 'property name like `user_nicename`', 'fieldmanager' ), $property ); + return "`{$property}`"; }, $this->allowed_store_properties ) ) @@ -127,7 +127,7 @@ function ( $property ) { /* translators: used between list items, there is a space after the comma */ implode( __( ', ', 'fieldmanager' ), array_map( function ( $property ) { - return sprintf( _x( '`%s`', 'property name like `user_nicename`', 'fieldmanager' ), $property ); + return "`{$property}`"; }, $this->allowed_display_properties ) ) From f90579fc87fef09c2a92f098813ec8be5f7979c0 Mon Sep 17 00:00:00 2001 From: David Herrera Date: Thu, 23 Nov 2017 22:15:37 -0500 Subject: [PATCH 16/17] `grunt makepot` --- languages/fieldmanager.pot | 164 ++++++++++++++++++------------------- package.json | 6 +- 2 files changed, 82 insertions(+), 88 deletions(-) diff --git a/languages/fieldmanager.pot b/languages/fieldmanager.pot index b981ae555d..9a7cc90985 100644 --- a/languages/fieldmanager.pot +++ b/languages/fieldmanager.pot @@ -1,10 +1,10 @@ -# Copyright (C) 2017 Austin Smith, Matthew Boynes +# Copyright (C) 2017 Alley Interactive # This file is distributed under the same license as the Fieldmanager package. msgid "" msgstr "" -"Project-Id-Version: Fieldmanager 1.1.0-beta.1\n" +"Project-Id-Version: Fieldmanager 1.2.0-alpha\n" "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/fieldmanager\n" -"POT-Creation-Date: 2017-02-25 19:05:01+00:00\n" +"POT-Creation-Date: 2017-11-24 03:14:50+00:00\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -24,278 +24,278 @@ msgstr "" "X-Poedit-Bookmarks: \n" "X-Textdomain-Support: yes\n" -#: fieldmanager.php:457 -#. translators: %s: submenu group name +#: fieldmanager.php:473 +#. translators: %s: group name msgid "%s is already in use as a submenu name." msgstr "" -#: fieldmanager.php:485 +#: fieldmanager.php:501 msgid "The Fieldmanger context for this submenu was not initialized." msgstr "" -#: php/class-fieldmanager-autocomplete.php:67 +#: php/class-fieldmanager-autocomplete.php:90 msgid "You must supply a datasource for the autocomplete field." msgstr "" -#: php/class-fieldmanager-autocomplete.php:71 +#: php/class-fieldmanager-autocomplete.php:94 msgid "No datasource." msgstr "" -#: php/class-fieldmanager-checkbox.php:69 +#: php/class-fieldmanager-checkbox.php:82 msgid "Saved a checkbox with a value that was not one of the options." msgstr "" -#: php/class-fieldmanager-draggablepost.php:130 +#: php/class-fieldmanager-draggablepost.php:142 msgid "drop posts here" msgstr "" -#: php/class-fieldmanager-draggablepost.php:168 +#: php/class-fieldmanager-draggablepost.php:184 msgid "(no authors)" msgstr "" -#: php/class-fieldmanager-field.php:338 php/class-fieldmanager-group.php:169 +#: php/class-fieldmanager-field.php:406 php/class-fieldmanager-group.php:188 #. translators: %s: `post_parent` msgid "" "A post can only have one parent, therefore you cannot store to %s in " "repeatable fields." msgstr "" -#: php/class-fieldmanager-field.php:374 -#: php/datasource/class-fieldmanager-datasource.php:65 +#: php/class-fieldmanager-field.php:444 +#: php/datasource/class-fieldmanager-datasource.php:87 #. translators: 1: property name, 2: class name, 3: field name msgid "" "You attempted to set a property %1$s that is nonexistant or invalid for an " "instance of %2$s named %3$s." msgstr "" -#: php/class-fieldmanager-field.php:390 php/class-fieldmanager-group.php:159 -#: php/class-fieldmanager-group.php:314 +#: php/class-fieldmanager-field.php:462 php/class-fieldmanager-group.php:178 +#: php/class-fieldmanager-group.php:346 #. translators: 1: `'serialize_data' => false`, 2: `'index' => true` msgid "You cannot use %1$s with %2$s." msgstr "" -#: php/class-fieldmanager-field.php:742 +#: php/class-fieldmanager-field.php:887 #. translators: 1: `$values`, 2: `$limit`, 3: `limit` property value msgid "%1$s should be an array because %2$s is %3$d." msgstr "" -#: php/class-fieldmanager-field.php:762 +#: php/class-fieldmanager-field.php:907 #. translators: 1: count of submitted values, 2: `limit` property value msgid "Submitted %1$d values against a limit of %2$d." msgstr "" -#: php/class-fieldmanager-field.php:770 +#: php/class-fieldmanager-field.php:915 msgid "Use of a non-numeric key suggests that something is wrong with this group." msgstr "" -#: php/class-fieldmanager-field.php:881 +#: php/class-fieldmanager-field.php:1047 #. translators: %s: `presave()` msgid "%s in the base class should not get arrays, but did." msgstr "" -#: php/class-fieldmanager-field.php:887 php/class-fieldmanager-options.php:217 -#. translators: 1: input name, 2: field label +#: php/class-fieldmanager-field.php:1053 php/class-fieldmanager-options.php:251 +#. translators: 1: field value, 2: field label msgid "Input %1$s is not valid for field \"%2$s\"." msgstr "" -#: php/class-fieldmanager-field.php:945 +#: php/class-fieldmanager-field.php:1114 msgid "Add group" msgstr "" -#: php/class-fieldmanager-field.php:945 +#: php/class-fieldmanager-field.php:1114 msgid "Add field" msgstr "" -#: php/class-fieldmanager-field.php:967 +#: php/class-fieldmanager-field.php:1137 msgid "Move" msgstr "" -#: php/class-fieldmanager-field.php:975 php/class-fieldmanager-media.php:96 +#: php/class-fieldmanager-field.php:1146 php/class-fieldmanager-media.php:107 msgid "Remove" msgstr "" -#: php/class-fieldmanager-field.php:1054 +#: php/class-fieldmanager-field.php:1232 msgid "This method requires WordPress 4.4 or above." msgstr "" -#: php/class-fieldmanager-field.php:1124 +#: php/class-fieldmanager-field.php:1315 msgid "You cannot use this method on a subgroup." msgstr "" -#: php/class-fieldmanager-field.php:1138 +#: php/class-fieldmanager-field.php:1330 msgid "Sorry, you're not supposed to do that..." msgstr "" -#: php/class-fieldmanager-field.php:1154 +#: php/class-fieldmanager-field.php:1347 msgid "You may be able to use your browser's back button to resolve this error." msgstr "" -#: php/class-fieldmanager-field.php:1168 +#: php/class-fieldmanager-field.php:1363 msgid "" "Sorry, you've created an invalid field definition. Please check your code " "and try again." msgstr "" -#: php/class-fieldmanager-grid.php:76 +#: php/class-fieldmanager-grid.php:84 msgid "Show Data Grid" msgstr "" -#: php/class-fieldmanager-grid.php:77 +#: php/class-fieldmanager-grid.php:85 msgid "Hide Data Grid" msgstr "" -#: php/class-fieldmanager-group.php:135 php/class-fieldmanager-group.php:187 +#: php/class-fieldmanager-group.php:154 php/class-fieldmanager-group.php:206 #. translators: %s: `'serialize_data' => false` msgid "You cannot use %s with repeating groups." msgstr "" -#: php/class-fieldmanager-group.php:150 +#: php/class-fieldmanager-group.php:169 #. translators: 1: group child name, 2: group child name msgid "Group child name conflict: %1$s / %2$s." msgstr "" -#: php/class-fieldmanager-group.php:249 +#: php/class-fieldmanager-group.php:270 msgid "More..." msgstr "" -#: php/class-fieldmanager-group.php:334 -#. translators: %s: input name +#: php/class-fieldmanager-group.php:368 +#. translators: %s: key attempting to be saved msgid "Found %s in data but not in children." msgstr "" -#: php/class-fieldmanager-media.php:91 +#: php/class-fieldmanager-media.php:102 msgid "Attach a File" msgstr "" -#: php/class-fieldmanager-media.php:92 +#: php/class-fieldmanager-media.php:103 msgid "Select Attachment" msgstr "" -#: php/class-fieldmanager-media.php:93 +#: php/class-fieldmanager-media.php:104 msgid "Choose an Attachment" msgstr "" -#: php/class-fieldmanager-media.php:94 +#: php/class-fieldmanager-media.php:105 msgid "Uploaded Image:" msgstr "" -#: php/class-fieldmanager-media.php:95 +#: php/class-fieldmanager-media.php:106 msgid "Uploaded File:" msgstr "" -#: php/context/class-fieldmanager-context-page.php:44 -#: php/context/class-fieldmanager-context.php:43 +#: php/context/class-fieldmanager-context-page.php:58 +#: php/context/class-fieldmanager-context.php:49 msgid "Nonce validation failed." msgstr "" -#: php/context/class-fieldmanager-context-page.php:70 +#: php/context/class-fieldmanager-context-page.php:89 msgid "Save Options" msgstr "" -#: php/context/class-fieldmanager-context-post.php:200 -#: php/context/class-fieldmanager-context-quickedit.php:196 +#: php/context/class-fieldmanager-context-post.php:215 +#: php/context/class-fieldmanager-context-quickedit.php:222 msgid "Current user cannot edit this post." msgstr "" -#: php/context/class-fieldmanager-context-quickedit.php:55 +#: php/context/class-fieldmanager-context-quickedit.php:68 msgid "You must set a valid column display callback." msgstr "" -#: php/context/class-fieldmanager-context-storable.php:74 -#. translators: %s: field storage key +#: php/context/class-fieldmanager-context-storable.php:81 +#. translators: %s: element key for the field msgid "You have two fields in this group saving to the same key: %s." msgstr "" -#: php/context/class-fieldmanager-context-submenu.php:77 +#: php/context/class-fieldmanager-context-submenu.php:89 msgid "Options updated." msgstr "" -#: php/context/class-fieldmanager-context-submenu.php:137 +#: php/context/class-fieldmanager-context-submenu.php:152 msgid "Current user cannot edit this page." msgstr "" -#: php/context/class-fieldmanager-context-term.php:117 -#: php/context/class-fieldmanager-context-term.php:134 +#: php/context/class-fieldmanager-context-term.php:129 +#: php/context/class-fieldmanager-context-term.php:146 #. translators: 1: `title`, 2: `taxonomies`, 3: `Fieldmanager_Context_Term` msgid "%1$s and %2$s are required values for %3$s." msgstr "" -#: php/context/class-fieldmanager-context-term.php:233 +#: php/context/class-fieldmanager-context-term.php:251 #. translators: %s: field name msgid "The field name %s is reserved for WordPress on the term form." msgstr "" -#: php/context/class-fieldmanager-context-term.php:284 +#: php/context/class-fieldmanager-context-term.php:305 msgid "Current user cannot edit this term." msgstr "" -#: php/context/class-fieldmanager-context-user.php:75 +#: php/context/class-fieldmanager-context-user.php:81 msgid "Current user cannot edit this user." msgstr "" -#: php/datasource/class-fieldmanager-datasource-post.php:221 +#: php/datasource/class-fieldmanager-datasource-post.php:251 #. translators: 1: post type name, 2: post ID, 3: field name msgid "Tried to alter %1$s %2$d through field %3$s, which current user cannot edit." msgstr "" -#: php/datasource/class-fieldmanager-datasource-post.php:289 -#: php/datasource/class-fieldmanager-datasource-term.php:371 +#: php/datasource/class-fieldmanager-datasource-post.php:324 +#: php/datasource/class-fieldmanager-datasource-term.php:460 msgid "View" msgstr "" -#: php/datasource/class-fieldmanager-datasource-post.php:303 -#: php/datasource/class-fieldmanager-datasource-term.php:386 -#: php/datasource/class-fieldmanager-datasource-user.php:256 +#: php/datasource/class-fieldmanager-datasource-post.php:339 +#: php/datasource/class-fieldmanager-datasource-term.php:478 +#: php/datasource/class-fieldmanager-datasource-user.php:326 msgid "Edit" msgstr "" -#: php/datasource/class-fieldmanager-datasource-user.php:79 +#: php/datasource/class-fieldmanager-datasource-user.php:99 #. translators: 1: invalid property name, 2: list of valid property names msgid "Store property %1$s is invalid. Must be one of %2$s." msgstr "" -#: php/datasource/class-fieldmanager-datasource-user.php:82 -#: php/datasource/class-fieldmanager-datasource-user.php:108 +#: php/datasource/class-fieldmanager-datasource-user.php:102 +#: php/datasource/class-fieldmanager-datasource-user.php:128 #. translators: used between list items, there is a space after the comma msgid ", " msgstr "" -#: php/datasource/class-fieldmanager-datasource-user.php:94 +#: php/datasource/class-fieldmanager-datasource-user.php:114 #. translators: 1: `Fieldmanager_Datasource_User`, 2: `store_property`, 3: `ID` msgid "" "You cannot use reciprocal relationships with %1$s if %2$s is not set to " "%3$s." msgstr "" -#: php/datasource/class-fieldmanager-datasource-user.php:105 +#: php/datasource/class-fieldmanager-datasource-user.php:125 #. translators: 1: invalid property name, 2: list of valid property names msgid "Display property %1$s is invalid. Must be one of %2$s." msgstr "" -#: php/datasource/class-fieldmanager-datasource-user.php:227 +#: php/datasource/class-fieldmanager-datasource-user.php:275 #. translators: %s: property name msgid "Tried to refer to user %s which current user cannot edit." msgstr "" -#: php/datasource/class-fieldmanager-datasource.php:68 +#: php/datasource/class-fieldmanager-datasource.php:93 msgid "Nonexistant or invalid option." msgstr "" -#: php/datasource/class-fieldmanager-datasource.php:80 +#: php/datasource/class-fieldmanager-datasource.php:103 #. translators: %s: `$options` msgid "Invalid datasource options; must use the %s parameter to supply an array." msgstr "" -#: php/datasource/class-fieldmanager-datasource.php:86 +#: php/datasource/class-fieldmanager-datasource.php:109 msgid "Invalid datasource options." msgstr "" -#: php/util/class-fieldmanager-util-term-meta.php:69 +#: php/util/class-fieldmanager-util-term-meta.php:64 msgid "Fieldmanager Term Metadata" msgstr "" -#: php/util/class-fieldmanager-util-validation.php:139 -#: php/util/class-fieldmanager-util-validation.php:154 +#: php/util/class-fieldmanager-util-validation.php:150 +#: php/util/class-fieldmanager-util-validation.php:168 #. translators: %s: validation rule name msgid "The validation rule %s does not exist." msgstr "" @@ -309,19 +309,13 @@ msgid "https://github.com/alleyinteractive/wordpress-fieldmanager" msgstr "" #. Description of the plugin/theme -msgid "Add fields to content types programatically." +msgid "Add fields to WordPress programatically." msgstr "" #. Author of the plugin/theme -msgid "Austin Smith, Matthew Boynes" +msgid "Alley Interactive" msgstr "" #. Author URI of the plugin/theme -msgid "http://www.alleyinteractive.com/" -msgstr "" - -#: php/datasource/class-fieldmanager-datasource-user.php:84 -#: php/datasource/class-fieldmanager-datasource-user.php:110 -msgctxt "property name like `user_nicename`" -msgid "`%s`" +msgid "https://www.alleyinteractive.com/" msgstr "" \ No newline at end of file diff --git a/package.json b/package.json index 80c3d15744..cbc52e43d3 100644 --- a/package.json +++ b/package.json @@ -2,9 +2,9 @@ "name": "Fieldmanager", "description": "Fieldmanager is a comprehensive toolkit for building forms, metaboxes, and custom admin screens for WordPress.", "version": "1.2.0-alpha", - "repository" : { - "type" : "git", - "url" : "https://github.com/alleyinteractive/wordpress-fieldmanager" + "repository": { + "type": "git", + "url": "https://github.com/alleyinteractive/wordpress-fieldmanager" }, "license": "GPL-2.0", "devDependencies": { From 3649d64c95e81ff071d2349d838ba55214f7e0f4 Mon Sep 17 00:00:00 2001 From: Linnea Huxford <7308162+mslinnea@users.noreply.github.com> Date: Thu, 11 Feb 2021 08:49:02 -0800 Subject: [PATCH 17/17] Updates Gruntfile, npm dependencies, and builds new pot file --- Gruntfile.js | 75 +- languages/fieldmanager.pot | 102 +- package-lock.json | 1908 ++++++++++++++++++++++++++++++++++++ package.json | 37 +- 4 files changed, 2015 insertions(+), 107 deletions(-) create mode 100644 package-lock.json diff --git a/Gruntfile.js b/Gruntfile.js index c63b983039..a96789fdad 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1,44 +1,37 @@ module.exports = function( grunt ) { - if ( ! grunt.option( 'wp' ) ) { - grunt.option( 'wp', 'master' ); - } - grunt.initConfig({ - connect: { - server: { - options: { - base: '.' - } - } - }, - qunit: { + 'use strict'; + + // Project configuration + grunt.initConfig( { + + pkg: grunt.file.readJSON( 'package.json' ), + + addtextdomain: { options: { - timeout: 7000 + textdomain: 'fieldmanager', }, - latest: { + update_all_domains: { options: { - urls: ['http://localhost:8000/tests/js/index.html'] - } - }, - recent: { - options: { - urls: [ - 'http://localhost:8000/tests/js/index.html', - 'http://localhost:8000/tests/js/index.html?wp=4.9', - 'http://localhost:8000/tests/js/index.html?wp=4.8' - ] + updateDomains: true + }, + src: [ '*.php', '**/*.php', '!\.git/**/*', '!bin/**/*', '!node_modules/**/*', '!tests/**/*' ] + } + }, + + wp_readme_to_markdown: { + your_target: { + files: { + 'README.md': 'readme.txt' } }, - specific: { - options: { - urls: [ 'http://localhost:8000/tests/js/index.html?wp=' + grunt.option( 'wp' ) ] - } - } }, + makepot: { target: { options: { domainPath: '/languages', + exclude: [ '\.git/*', 'bin/*', 'node_modules/*', 'tests/*' ], mainFile: 'fieldmanager.php', potFilename: 'fieldmanager.pot', potHeaders: { @@ -50,24 +43,14 @@ module.exports = function( grunt ) { } } }, - phpcs: { - plugin: {}, - options: { - bin: "vendor/bin/phpcs", - showSniffCodes: true, - standard: "phpcs.ruleset.xml", - verbose: true, - warningSeverity: 0, - } - }, - }); + } ); - - grunt.loadNpmTasks( 'grunt-contrib-connect' ); - grunt.loadNpmTasks( 'grunt-contrib-qunit' ); - grunt.loadNpmTasks( 'grunt-phpcs' ); grunt.loadNpmTasks( 'grunt-wp-i18n' ); + grunt.loadNpmTasks( 'grunt-wp-readme-to-markdown' ); + grunt.registerTask( 'default', [ 'i18n','readme' ] ); + grunt.registerTask( 'i18n', ['addtextdomain', 'makepot'] ); + grunt.registerTask( 'readme', ['wp_readme_to_markdown'] ); + + grunt.util.linefeed = '\n'; - // Run server for QUnit. - grunt.task.run( 'connect' ); }; diff --git a/languages/fieldmanager.pot b/languages/fieldmanager.pot index 9a7cc90985..cec175f0df 100644 --- a/languages/fieldmanager.pot +++ b/languages/fieldmanager.pot @@ -1,35 +1,36 @@ -# Copyright (C) 2017 Alley Interactive +# Copyright (C) 2021 Alley # This file is distributed under the same license as the Fieldmanager package. msgid "" msgstr "" -"Project-Id-Version: Fieldmanager 1.2.0-alpha\n" -"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/fieldmanager\n" -"POT-Creation-Date: 2017-11-24 03:14:50+00:00\n" +"Project-Id-Version: Fieldmanager 1.3.0\n" +"Report-Msgid-Bugs-To: " +"https://wordpress.org/support/plugin/wordpress-fieldmanager\n" +"POT-Creation-Date: 2021-02-11 16:43:08+00:00\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" +"PO-Revision-Date: 2021-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" -"X-Generator: grunt-wp-i18n 0.5.4\n" -"X-Poedit-KeywordsList: " -"__;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_" -"attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c;\n" "Language: en\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Poedit-Country: United States\n" "X-Poedit-SourceCharset: UTF-8\n" +"X-Poedit-KeywordsList: " +"__;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_" +"attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c;\n" "X-Poedit-Basepath: ../\n" "X-Poedit-SearchPath-0: .\n" "X-Poedit-Bookmarks: \n" "X-Textdomain-Support: yes\n" +"X-Generator: grunt-wp-i18n 1.0.3\n" -#: fieldmanager.php:473 +#: fieldmanager.php:488 #. translators: %s: group name msgid "%s is already in use as a submenu name." msgstr "" -#: fieldmanager.php:501 +#: fieldmanager.php:516 msgid "The Fieldmanger context for this submenu was not initialized." msgstr "" @@ -49,7 +50,7 @@ msgstr "" msgid "drop posts here" msgstr "" -#: php/class-fieldmanager-draggablepost.php:184 +#: php/class-fieldmanager-draggablepost.php:185 msgid "(no authors)" msgstr "" @@ -69,68 +70,68 @@ msgid "" msgstr "" #: php/class-fieldmanager-field.php:462 php/class-fieldmanager-group.php:178 -#: php/class-fieldmanager-group.php:346 +#: php/class-fieldmanager-group.php:350 #. translators: 1: `'serialize_data' => false`, 2: `'index' => true` msgid "You cannot use %1$s with %2$s." msgstr "" -#: php/class-fieldmanager-field.php:887 +#: php/class-fieldmanager-field.php:903 #. translators: 1: `$values`, 2: `$limit`, 3: `limit` property value msgid "%1$s should be an array because %2$s is %3$d." msgstr "" -#: php/class-fieldmanager-field.php:907 +#: php/class-fieldmanager-field.php:923 #. translators: 1: count of submitted values, 2: `limit` property value msgid "Submitted %1$d values against a limit of %2$d." msgstr "" -#: php/class-fieldmanager-field.php:915 +#: php/class-fieldmanager-field.php:931 msgid "Use of a non-numeric key suggests that something is wrong with this group." msgstr "" -#: php/class-fieldmanager-field.php:1047 +#: php/class-fieldmanager-field.php:1066 #. translators: %s: `presave()` msgid "%s in the base class should not get arrays, but did." msgstr "" -#: php/class-fieldmanager-field.php:1053 php/class-fieldmanager-options.php:251 +#: php/class-fieldmanager-field.php:1073 #. translators: 1: field value, 2: field label -msgid "Input %1$s is not valid for field \"%2$s\"." +msgid "Input \"%1$s\" is not valid for field \"%2$s\" " msgstr "" -#: php/class-fieldmanager-field.php:1114 +#: php/class-fieldmanager-field.php:1135 msgid "Add group" msgstr "" -#: php/class-fieldmanager-field.php:1114 +#: php/class-fieldmanager-field.php:1135 msgid "Add field" msgstr "" -#: php/class-fieldmanager-field.php:1137 +#: php/class-fieldmanager-field.php:1158 msgid "Move" msgstr "" -#: php/class-fieldmanager-field.php:1146 php/class-fieldmanager-media.php:107 +#: php/class-fieldmanager-field.php:1167 php/class-fieldmanager-media.php:107 msgid "Remove" msgstr "" -#: php/class-fieldmanager-field.php:1232 +#: php/class-fieldmanager-field.php:1255 msgid "This method requires WordPress 4.4 or above." msgstr "" -#: php/class-fieldmanager-field.php:1315 +#: php/class-fieldmanager-field.php:1348 msgid "You cannot use this method on a subgroup." msgstr "" -#: php/class-fieldmanager-field.php:1330 +#: php/class-fieldmanager-field.php:1363 msgid "Sorry, you're not supposed to do that..." msgstr "" -#: php/class-fieldmanager-field.php:1347 +#: php/class-fieldmanager-field.php:1381 msgid "You may be able to use your browser's back button to resolve this error." msgstr "" -#: php/class-fieldmanager-field.php:1363 +#: php/class-fieldmanager-field.php:1398 msgid "" "Sorry, you've created an invalid field definition. Please check your code " "and try again." @@ -154,11 +155,11 @@ msgstr "" msgid "Group child name conflict: %1$s / %2$s." msgstr "" -#: php/class-fieldmanager-group.php:270 +#: php/class-fieldmanager-group.php:273 msgid "More..." msgstr "" -#: php/class-fieldmanager-group.php:368 +#: php/class-fieldmanager-group.php:372 #. translators: %s: key attempting to be saved msgid "Found %s in data but not in children." msgstr "" @@ -183,6 +184,15 @@ msgstr "" msgid "Uploaded File:" msgstr "" +#: php/class-fieldmanager-options.php:252 +#. translators: 1: Invalid value, 2: field label +msgid "Input \"%1$s\" is not valid for field \"%2$s\"." +msgstr "" + +#: php/context/class-fieldmanager-context-menuitem.php:131 +msgid "User cannot edit this menu item" +msgstr "" + #: php/context/class-fieldmanager-context-page.php:58 #: php/context/class-fieldmanager-context.php:49 msgid "Nonce validation failed." @@ -193,7 +203,7 @@ msgid "Save Options" msgstr "" #: php/context/class-fieldmanager-context-post.php:215 -#: php/context/class-fieldmanager-context-quickedit.php:222 +#: php/context/class-fieldmanager-context-quickedit.php:224 msgid "Current user cannot edit this post." msgstr "" @@ -210,22 +220,22 @@ msgstr "" msgid "Options updated." msgstr "" -#: php/context/class-fieldmanager-context-submenu.php:152 +#: php/context/class-fieldmanager-context-submenu.php:154 msgid "Current user cannot edit this page." msgstr "" -#: php/context/class-fieldmanager-context-term.php:129 -#: php/context/class-fieldmanager-context-term.php:146 +#: php/context/class-fieldmanager-context-term.php:132 +#: php/context/class-fieldmanager-context-term.php:149 #. translators: 1: `title`, 2: `taxonomies`, 3: `Fieldmanager_Context_Term` msgid "%1$s and %2$s are required values for %3$s." msgstr "" -#: php/context/class-fieldmanager-context-term.php:251 +#: php/context/class-fieldmanager-context-term.php:254 #. translators: %s: field name msgid "The field name %s is reserved for WordPress on the term form." msgstr "" -#: php/context/class-fieldmanager-context-term.php:305 +#: php/context/class-fieldmanager-context-term.php:310 msgid "Current user cannot edit this term." msgstr "" @@ -233,18 +243,18 @@ msgstr "" msgid "Current user cannot edit this user." msgstr "" -#: php/datasource/class-fieldmanager-datasource-post.php:251 +#: php/datasource/class-fieldmanager-datasource-post.php:250 #. translators: 1: post type name, 2: post ID, 3: field name msgid "Tried to alter %1$s %2$d through field %3$s, which current user cannot edit." msgstr "" -#: php/datasource/class-fieldmanager-datasource-post.php:324 -#: php/datasource/class-fieldmanager-datasource-term.php:460 +#: php/datasource/class-fieldmanager-datasource-post.php:325 +#: php/datasource/class-fieldmanager-datasource-term.php:470 msgid "View" msgstr "" -#: php/datasource/class-fieldmanager-datasource-post.php:339 -#: php/datasource/class-fieldmanager-datasource-term.php:478 +#: php/datasource/class-fieldmanager-datasource-post.php:340 +#: php/datasource/class-fieldmanager-datasource-term.php:488 #: php/datasource/class-fieldmanager-datasource-user.php:326 msgid "Edit" msgstr "" @@ -273,8 +283,8 @@ msgid "Display property %1$s is invalid. Must be one of %2$s." msgstr "" #: php/datasource/class-fieldmanager-datasource-user.php:275 -#. translators: %s: property name -msgid "Tried to refer to user %s which current user cannot edit." +#. translators: %s: user id +msgid "Tried to refer to user \"%s\" which current user cannot edit." msgstr "" #: php/datasource/class-fieldmanager-datasource.php:93 @@ -290,7 +300,7 @@ msgstr "" msgid "Invalid datasource options." msgstr "" -#: php/util/class-fieldmanager-util-term-meta.php:64 +#: php/util/class-fieldmanager-util-term-meta.php:66 msgid "Fieldmanager Term Metadata" msgstr "" @@ -313,9 +323,9 @@ msgid "Add fields to WordPress programatically." msgstr "" #. Author of the plugin/theme -msgid "Alley Interactive" +msgid "Alley" msgstr "" #. Author URI of the plugin/theme -msgid "https://www.alleyinteractive.com/" +msgid "https://www.alley.co/" msgstr "" \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000000..f0f71377ff --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1908 @@ +{ + "name": "Fieldmanager", + "version": "1.3.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 + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "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" + }, + "dependencies": { + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + } + } + }, + "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-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", + "dev": true + }, + "array-slice": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", + "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 + }, + "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": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "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 + }, + "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" + } + } + } + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "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" + } + } + } + }, + "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" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.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" + } + } + } + }, + "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": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "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 + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "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" + } + }, + "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-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" + } + } + } + }, + "detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "dev": true + }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "requires": { + "iconv-lite": "^0.6.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", + "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "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 + }, + "eventemitter2": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", + "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", + "dev": true + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "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" + } + } + } + }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "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" + } + } + } + }, + "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" + } + } + } + }, + "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.0" + }, + "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.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "fined": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", + "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", + "dev": true, + "requires": { + "expand-tilde": "^2.0.2", + "is-plain-object": "^2.0.3", + "object.defaults": "^1.1.0", + "object.pick": "^1.2.0", + "parse-filepath": "^1.0.1" + } + }, + "flagged-respawn": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", + "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", + "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": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + }, + "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" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "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 + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getobject": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", + "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=", + "dev": true + }, + "gettext-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/gettext-parser/-/gettext-parser-3.1.1.tgz", + "integrity": "sha512-vNhWcqXEtZPs5Ft1ReA34g7ByWotpcOIeJvXVy2jF3/G2U9v6W0wG4Z4hXzcU8R//jArqkgHcVCGgGqa4vxVlQ==", + "dev": true, + "requires": { + "encoding": "^0.1.12", + "readable-stream": "^3.2.0", + "safe-buffer": "^5.1.2" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "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" + } + }, + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + } + }, + "grunt": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.3.0.tgz", + "integrity": "sha512-6ILlMXv11/4cxuhSMfSU+SfvbxrPuqZrAtLN64+tZpQ3DAKfSQPQHRbTjSbdtxfyQhGZPtN0bDZJ/LdCM5WXXA==", + "dev": true, + "requires": { + "dateformat": "~3.0.3", + "eventemitter2": "~0.4.13", + "exit": "~0.1.2", + "findup-sync": "~0.3.0", + "glob": "~7.1.6", + "grunt-cli": "~1.3.2", + "grunt-known-options": "~1.1.0", + "grunt-legacy-log": "~3.0.0", + "grunt-legacy-util": "~2.0.0", + "iconv-lite": "~0.4.13", + "js-yaml": "~3.14.0", + "minimatch": "~3.0.4", + "mkdirp": "~1.0.4", + "nopt": "~3.0.6", + "rimraf": "~3.0.2" + }, + "dependencies": { + "grunt-cli": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.3.2.tgz", + "integrity": "sha512-8OHDiZZkcptxVXtMfDxJvmN7MVJNE8L/yIcPb4HB7TlyFD1kDvjHrb62uhySsU14wJx9ORMnTuhRMQ40lH/orQ==", + "dev": true, + "requires": { + "grunt-known-options": "~1.1.0", + "interpret": "~1.1.0", + "liftoff": "~2.5.0", + "nopt": "~4.0.1", + "v8flags": "~3.1.1" + }, + "dependencies": { + "nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "dev": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + } + } + } + } + }, + "grunt-known-options": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.1.tgz", + "integrity": "sha512-cHwsLqoighpu7TuYj5RonnEuxGVFnztcUqTqp5rXFGYL4OuPFofwC4Ycg7n9fYwvK6F5WbYgeVOwph9Crs2fsQ==", + "dev": true + }, + "grunt-legacy-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-3.0.0.tgz", + "integrity": "sha512-GHZQzZmhyq0u3hr7aHW4qUH0xDzwp2YXldLPZTCjlOeGscAOWWPftZG3XioW8MasGp+OBRIu39LFx14SLjXRcA==", + "dev": true, + "requires": { + "colors": "~1.1.2", + "grunt-legacy-log-utils": "~2.1.0", + "hooker": "~0.2.3", + "lodash": "~4.17.19" + } + }, + "grunt-legacy-log-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.1.0.tgz", + "integrity": "sha512-lwquaPXJtKQk0rUM1IQAop5noEpwFqOXasVoedLeNzaibf/OPWjKYvvdqnEHNmU+0T0CaReAXIbGo747ZD+Aaw==", + "dev": true, + "requires": { + "chalk": "~4.1.0", + "lodash": "~4.17.19" + } + }, + "grunt-legacy-util": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-2.0.0.tgz", + "integrity": "sha512-ZEmYFB44bblwPE2oz3q3ygfF6hseQja9tx8I3UZIwbUik32FMWewA+d1qSFicMFB+8dNXDkh35HcDCWlpRsGlA==", + "dev": true, + "requires": { + "async": "~1.5.2", + "exit": "~0.1.1", + "getobject": "~0.1.0", + "hooker": "~0.2.3", + "lodash": "~4.17.20", + "underscore.string": "~3.3.5", + "which": "~1.3.0" + } + }, + "grunt-wp-i18n": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/grunt-wp-i18n/-/grunt-wp-i18n-1.0.3.tgz", + "integrity": "sha512-CJNbEKeBeOSAPeaJ9B8iCgSwtaG63UR9/uT46a4OsIqnFhOJpeAi138JTlvjfIbnDVoBrzvdrKJe1svveLjUtA==", + "dev": true, + "requires": { + "grunt": "^1.0.3", + "node-wp-i18n": "^1.2.2" + } + }, + "grunt-wp-readme-to-markdown": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/grunt-wp-readme-to-markdown/-/grunt-wp-readme-to-markdown-1.0.0.tgz", + "integrity": "sha1-dJ/9gDtYTVC9ZOc6ehqRhz6djPs=", + "dev": true + }, + "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-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "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" + } + } + } + }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "requires": { + "parse-passwd": "^1.0.0" + } + }, + "hooker": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", + "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=", + "dev": true + }, + "iconv-lite": { + "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" + } + }, + "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.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "interpret": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", + "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", + "dev": true + }, + "is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "dev": true, + "requires": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + } + }, + "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-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-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "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-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-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" + } + }, + "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-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "dev": true, + "requires": { + "is-unc-path": "^1.0.0" + } + }, + "is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "dev": true, + "requires": { + "unc-path-regex": "^0.1.2" + } + }, + "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 + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "liftoff": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz", + "integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=", + "dev": true, + "requires": { + "extend": "^3.0.0", + "findup-sync": "^2.0.0", + "fined": "^1.0.1", + "flagged-respawn": "^1.0.0", + "is-plain-object": "^2.0.4", + "object.map": "^1.0.0", + "rechoir": "^0.6.2", + "resolve": "^1.1.7" + }, + "dependencies": { + "findup-sync": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "dev": true, + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + } + } + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + }, + "make-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "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-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" + } + }, + "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" + } + }, + "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.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "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": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "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" + } + }, + "node-wp-i18n": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/node-wp-i18n/-/node-wp-i18n-1.2.5.tgz", + "integrity": "sha512-XX6GanJ+Ta5Wc/oNkhVrV+lGrhLe0zFx2pNb2diHF/DwDnwCVRHn6NSSyoU/mgTcVf4B/jtdoQ2CzWN/Q63MhA==", + "dev": true, + "requires": { + "bluebird": "^3.4.1", + "gettext-parser": "^3.1.0", + "glob": "^7.0.5", + "lodash": "^4.14.2", + "minimist": "^1.2.5", + "mkdirp": "^1.0.4", + "tmp": "^0.2.1" + } + }, + "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" + } + }, + "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-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.defaults": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", + "dev": true, + "requires": { + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "object.map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", + "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", + "dev": true, + "requires": { + "for-own": "^1.0.0", + "make-iterator": "^1.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-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" + } + }, + "parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", + "dev": true, + "requires": { + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" + } + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "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-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "dev": true, + "requires": { + "path-root-regex": "^0.1.0" + } + }, + "path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", + "dev": true + }, + "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 + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "requires": { + "resolve": "^1.1.6" + } + }, + "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" + } + }, + "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 + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + } + }, + "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": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "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 + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "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" + } + } + } + }, + "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" + } + } + } + }, + "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.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "requires": { + "atob": "^2.1.2", + "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.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "dev": true + }, + "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.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", + "dev": true + }, + "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" + } + } + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "requires": { + "rimraf": "^3.0.0" + } + }, + "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" + } + }, + "unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", + "dev": true + }, + "underscore.string": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.5.tgz", + "integrity": "sha512-g+dpmgn+XBneLmXXo+sGlW5xQEt4ErkS3mgeN2GFbremYeMBSJKr9Wf2KJplQVaiPY/f7FN6atosWYNm9ovrYg==", + "dev": true, + "requires": { + "sprintf-js": "^1.0.3", + "util-deprecate": "^1.0.2" + } + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "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 + } + } + }, + "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 + }, + "v8flags": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.1.3.tgz", + "integrity": "sha512-amh9CCg3ZxkzQ48Mhcb8iX7xpAfYJgePHxWMQCBWECpOSqJUXgY26ncA61UTV0BkPqfhcy6mzwCIoP4ygxpW8w==", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "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" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + } + } +} diff --git a/package.json b/package.json index 4d5abcc9af..4687107aec 100644 --- a/package.json +++ b/package.json @@ -1,17 +1,24 @@ { - "name": "Fieldmanager", - "description": "Fieldmanager is a comprehensive toolkit for building forms, metaboxes, and custom admin screens for WordPress.", - "version": "1.3.0", - "repository": { - "type": "git", - "url": "https://github.com/alleyinteractive/wordpress-fieldmanager" - }, - "license": "GPL-2.0", - "devDependencies": { - "grunt": "^0.4.5", - "grunt-contrib-connect": "~0.11.0", - "grunt-contrib-qunit": "~0.7.0", - "grunt-phpcs": "^0.4.0", - "grunt-wp-i18n": "~0.5.0" - } + "name": "Fieldmanager", + "description": "Fieldmanager is a comprehensive toolkit for building forms, metaboxes, and custom admin screens for WordPress.", + "version": "1.3.0", + "repository": { + "type": "git", + "url": "https://github.com/alleyinteractive/wordpress-fieldmanager" + }, + "scripts": { + "start": "grunt default", + "readme": "grunt readme", + "i18n": "grunt i18n" + }, + "license": "GPL-2.0", + "devDependencies": { + "grunt": "^1.3.0", + "grunt-wp-i18n": "^1.0.3", + "grunt-wp-readme-to-markdown": "~1.0.0" + }, + "engines": { + "node": "^12.19.0", + "npm": "^6.14.11" + } }