WordPress.org

Making WordPress.org

Ticket #3572: 3572.patch

File 3572.patch, 117.2 KB (added by keesiemeijer, 20 months ago)

Add ability for user to edit their own user contibuted notes

  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/comments-edit.php

     
     1<?php namespace DevHub;
     2/**
     3 * The Template for editing user contributed notes.
     4 *
     5 * @package wporg-developer
     6 */
     7
     8        get_header();
     9
     10        $comment_id = get_query_var( 'feedback_id' );
     11        $comment    = get_comment( $comment_id );
     12        $is_parent  = $comment->comment_parent ?  true : false;
     13        $post       = get_queried_object();
     14        $post_id    = get_queried_object_id();
     15        $post_url   = get_permalink( $post_id );
     16        $post_title = single_post_title( '', false );
     17        $post_link  = "<a href='{$post_url}'>{$post_title}</a>";
     18        $note_link  = "<a href='{$post_url}#comment-{$comment_id}'>note {$comment_id}</a>";
     19
     20        add_filter( 'breadcrumb_trail_items', function($items) use ( $post_link, $note_link  ) {
     21                $items[] = $post_link;
     22                $items[] = $note_link;
     23                return $items;
     24        } );
     25?>
     26
     27        <div id="content-area" <?php body_class( 'code-reference' ); ?>>
     28
     29                <?php breadcrumb_trail( array( 'show_title' => false ) ); ?>
     30
     31                <main id="main" class="site-main" role="main">
     32
     33                        <h1><?php printf( __( 'Edit Note %d', 'wporg' ), $comment_id ); ?></h1>
     34
     35                        <p>
     36                                <?php if( $is_parent ) : ?>
     37                                        <?php printf( __( 'This is a feedback note added to a note for %s.', 'wporg' ), $post_link ); ?>
     38                                <?php else : ?>
     39                                        <?php printf( __( 'This is a note added to %s.', 'wporg' ), $post_link ); ?>
     40                                <?php endif; ?>
     41
     42                                <?php echo ' ' . __( "You can edit this note as long as it's in moderation.", 'wporg' ); ?>
     43                        </p>
     44                        <?php
     45                                if( \DevHub\can_user_edit_note( $comment_id ) ) {
     46
     47                                        if( $is_parent ) {
     48                                                echo \DevHub_User_Submitted_Content::wp_editor_feedback( $comment, 'show', true );
     49                                        } else {
     50                                                $args = \DevHub_User_Submitted_Content::comment_form_args( $comment, 'edit');
     51                                                comment_form( $args );
     52                                        }
     53                                }
     54                        ?>
     55
     56                </main><!-- #main -->
     57        </div><!-- #primary -->
     58<?php get_footer(); ?>
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/comments.php

     
    6464
    6565        <?php if ( \DevHub\is_parsed_post_type() && DevHub\can_user_post_note( true, get_the_ID() ) ) : ?>
    6666
    67                 <?php $add_note_style = empty( $feedback_editor ) ? 'display:none;' : ''; ?>
    68                 <p id="add-user-note" style="<?php echo $add_note_style; ?>"><a href="<?php echo user_trailingslashit( get_permalink() ) . '#respond'; ?>"><?php _e( 'Have a note or feedback to contribute?', 'wporg' ); ?></a></p>
     67                <p id="add-user-note"><a href="<?php echo user_trailingslashit( get_permalink() ) . '#respond'; ?>"><?php _e( 'Have a note or feedback to contribute?', 'wporg' ); ?></a></p>
    6968
    7069                <?php
    71                 $args = array(
    72                         'logged_in_as'        => '<p class="logged-in-as">'
    73                                 . sprintf(
    74                                         /* translators: 1: user profile link, 2: accessibility text, 3: user name, 4: logout URL */
    75                                         __( '<a href="%1$s" aria-label="%2$s">Logged in as %3$s</a>. <a href="%4$s">Log out?</a>' ),
    76                                         'https://profiles.wordpress.org/' . esc_attr( wp_get_current_user()->user_nicename ),
    77                                         /* translators: %s: user name */
    78                                         esc_attr( sprintf( __( 'Logged in as %s. Edit your profile.' ), $user_identity ) ),
    79                                         $user_identity,
    80                                         wp_logout_url( apply_filters( 'the_permalink', get_permalink() ) )
    81                                 )
    82                                 . '</p><p><ul><li>'
    83                                 . __( 'Notes should supplement code reference entries, for example examples, tips, explanations, use-cases, and best practices.', 'wporg' )
    84                                 . '</li><li>'
    85                                 . __( 'Feedback can be to report errors or omissions with the documentation on this page. Such feedback will not be publicly posted.', 'wporg' )
    86                                 . '</li><li>'
    87                                 /* translators: 1: php button, 2: js button, 3: inline code button */
    88                                 . sprintf(
    89                                         __( 'You can enter text and code. Use the %1$s, %2$s, or %3$s buttons to wrap code snippets.', 'wporg' ),
    90                                         '<span class="text-button">php</span>',
    91                                         '<span class="text-button">js</span>',
    92                                         '<span class="text-button">' . __( 'inline code', 'wporg' ) . '</span>'
    93                                 )
    94                                 . '</li></ul></p>',
    95                         'comment_notes_after' => '<p>'
    96                                 . __( 'Submission Notes:', 'wporg' )
    97                                 . '<ul><li>'
    98                                 . __( 'This form is not for support requests, discussions, spam, bug reports, complaints, or self-promotion. Entries of this nature will be deleted.', 'wporg' )
    99                                 . '</li><li>'
    100                                 . __( 'In the editing area the Tab key enters a tab character. To move below this area by pressing Tab, press the Esc key followed by the Tab key. In some cases the Esc key will need to be pressed twice before the Tab key will allow you to continue.', 'wporg' )
    101                                 . '</li><li class="user-notes-are-gpl">'
    102                                 . sprintf(
    103                                         /* translators: 1: GFDL link */
    104                                         __( '<strong>NOTE:</strong> All contributions are licensed under %s and are moderated before appearing on the site.', 'wporg' ),
    105                                         '<a href="https://gnu.org/licenses/fdl.html">GFDL</a>'
    106                                 )
    107                                 . '</li></ul></p>',
    108                         'label_submit'        => __( 'Add Note or Feedback', 'wporg' ),
    109                         'cancel_reply_link'   => '',
    110                         'must_log_in'         => '<p>' . sprintf(
    111                                 __( 'You must <a href="%s">log in</a> before being able to contribute a note or feedback.', 'wporg' ),
    112                                 'https://login.wordpress.org/?redirect_to=' . urlencode( get_comments_link() )
    113                         ) . '</p>',
    114                         'title_reply'         => '', //'Add Example'
    115                         'title_reply_to'      => '',
    116                 );
    117 
    118                 if ( class_exists( 'DevHub_Note_Preview' ) ) {
    119                         $args['comment_notes_after'] = DevHub_Note_Preview::comment_preview() . $args['comment_notes_after'];
    120                         $args['class_form']          = 'comment-form tab-container';
    121                 }
    122 
    123                 if ( class_exists( 'DevHub_User_Submitted_Content' ) ) {
    124                         $args['comment_field'] = DevHub_User_Submitted_Content::wp_editor_comments();
    125                 }
    126 
    12770                // Insert comment form if feedback form is not already used.
    128                 if ( empty( $feedback_editor ) ) {
     71                if ( empty( $feedback_editor ) && class_exists( 'DevHub_User_Submitted_Content' ) )  {
     72                        $args = \DevHub_User_Submitted_Content::comment_form_args();
    12973                        comment_form( $args );
    13074                }
    13175                ?>
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/functions.php

     
    5656require __DIR__ . '/inc/user-content-voting.php';
    5757
    5858/**
     59 * Editing for user-submitted content.
     60 */
     61require __DIR__ . '/inc/user-content-edit.php';
     62
     63/**
    5964 * CLI commands custom post type and importer.
    6065 */
    6166require __DIR__ . '/inc/cli.php';
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/inc/template-tags.php

     
    202202                                // Feedback links to log in, add feedback or show feedback.
    203203                                echo "<footer class='feedback-links' >\n";
    204204                                if ( $can_user_post_note ) {
    205                                         echo "EEE";
    206205                                        $feedback_link = trailingslashit( get_permalink() ) . "?replytocom={$comment_id}#feedback-editor-{$comment_id}";
    207206                                        $display       = '';
    208207                                        $aria          = '';
     
    245244                        $is_voting      = class_exists( 'DevHub_User_Contributed_Notes_Voting' );
    246245                        $count          = $is_voting ? (int)  DevHub_User_Contributed_Notes_Voting::count_votes( $comment->comment_ID, 'difference' ) : 0;
    247246                        $curr_user_note = $is_voting ? (bool) DevHub_User_Contributed_Notes_Voting::is_current_user_note( $comment->comment_ID ) : false;
     247                        $user_can_edit  = current_user_can( 'edit_comment', $comment->comment_ID );
    248248
    249249                        // Classes
    250250                        $comment_class = array();
     
    311311                                                        </time>
    312312                                                </a>
    313313                                                <?php edit_comment_link( __( 'Edit', 'wporg' ), '<span class="edit-link">&mdash; ', '</span>' ); ?>
     314                                                <?php if ( ! $user_can_edit && \DevHub\can_user_edit_note( $comment->comment_ID ) ) : ?>
     315                                                        &mdash; <span class="comment-author-edit-link">
     316                                                                <a class="comment-edit-link" href="<?php echo site_url( "/reference/comment/edit/{$comment->comment_ID}" ); ?>"><?php _e( 'Edit', 'wporg' ); ?></a>
     317                                                        </span>
     318                                                <?php endif; ?>
    314319                                                <?php if ( ! $approved ) : ?>
    315320                                                        &mdash; <span class="comment-awaiting-moderation"><?php _e( 'awaiting moderation', 'wporg' ); ?></span>
    316321                                                <?php endif; ?>
     
    329334                                        $text .= ' <a href="'. esc_url( get_comment_link( $comment->comment_ID ) ) . '">';
    330335                                        $text .= '<time datetime="' . get_comment_time( 'c' ) . '">' . $date . '</time></a>';
    331336
    332                                         if ( current_user_can( 'edit_comment', $comment->comment_ID ) ) {
     337                                        if ( $user_can_edit ) {
    333338                                                $text .= ' &mdash; <a class="comment-edit-link" href="' . get_edit_comment_link( $comment->comment_ID ) .'">';
    334339                                                $text .= __( 'Edit', 'wporg' ) . '</a>';
     340                                        } elseif ( \DevHub\can_user_edit_note( $comment->comment_ID ) ) {
     341                                                $text .= ' &mdash; <a class="comment-edit-link" href="' . site_url( "/reference/comment/edit/{$comment->comment_ID}" ) . '">';
     342                                                $text .= __( 'Edit', 'wporg' ) . '</a>';
    335343                                        }
    336344
    337345                                        if ( ! $approved ) {
     
    13971405        }
    13981406
    13991407        /**
     1408         * Indicates if the current user can edit a user contibuted note.
     1409         *
     1410         * A user can edit a note if the note is from a parsed post type, and
     1411         *     the note is from the current user and it's not yet approved.
     1412         *     Or if the user has the 'edit_comment' capability.
     1413         *
     1414         * @param integer $note_id Note ID.
     1415         * @return bool True if the current user can edit the note.
     1416         */
     1417        function can_user_edit_note( $note_id = 0 ) {
     1418                $user = get_current_user_id();
     1419                $note = get_comment( $note_id );
     1420                if ( ! $user || ! $note ) {
     1421                        return false;
     1422                }
     1423
     1424                $post_id        = isset( $note->comment_post_ID ) ? (int) $note->comment_post_ID : 0;
     1425                $is_note_author = isset( $note->user_id ) && ( (int) $note->user_id === $user );
     1426                $is_approved    = isset( $note->comment_approved ) && ( 0 < (int) $note->comment_approved );
     1427                $can_edit_notes = isset( $note->comment_ID ) && current_user_can( 'edit_comment', $note->comment_ID );
     1428                $is_parsed_type = is_parsed_post_type( get_post_type( $post_id ) );
     1429
     1430                if ( $is_parsed_type && ( $can_edit_notes || ( $is_note_author && ! $is_approved ) ) ) {
     1431                        return true;
     1432                }
     1433
     1434                return false;
     1435        }
     1436
     1437        /**
    14001438         * Gets the summary.
    14011439         *
    14021440         * The summary (aka short description) is stored in the 'post_excerpt' field.
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/inc/user-content-edit.php

     
     1<?php
     2/**
     3 * Code Reference edit user submitted content (comments, notes, etc).
     4 *
     5 * @package wporg-developer
     6 */
     7
     8/**
     9 * Class to handle editing user submitted content.
     10 */
     11class DevHub_User_Content_Edit {
     12
     13        /**
     14         * Initializer
     15         */
     16        public static function init() {
     17                add_action( 'init', array( __CLASS__, 'do_init' ) );
     18        }
     19
     20        /**
     21         * Handles adding/removing hooks to enable editing comments.
     22         * Adds rewrite rules for editing comments in the front end.
     23         */
     24        public static function do_init() {
     25                // Add the edit comment rewrite rule
     26                add_rewrite_rule( 'reference/comment/edit/([0-9]{1,})/?$', 'index.php?feedback_id=$matches[1]', 'top' );
     27
     28                // Add feedback_id query var for editing.
     29                add_filter( 'query_vars',                      array( __CLASS__, 'comment_query_var' ) );
     30
     31                // Redirect to home page is the edit request is invalid.
     32                add_action( 'template_redirect',               array( __CLASS__, 'redirect_invalid_edit_request' ) );
     33
     34                // Include the edit template.
     35                add_filter( 'template_include',                array( __CLASS__, 'template_include' ) );
     36
     37                // Set the post_type and post for the edit request.
     38                add_action( 'pre_get_posts',                   array( __CLASS__, 'pre_get_posts' ) );
     39
     40                // Updates the comment.
     41                add_action( 'wp', array( __CLASS__, 'update_comment' ) );
     42        }
     43
     44        /**
     45         * Add feedback_id to the public query vars.
     46         *
     47         * @param array $query_vars Array with public query vars.
     48         * @return array Public query vars.
     49         */
     50        public static function comment_query_var( $query_vars ) {
     51                $query_vars[] = 'feedback_id';
     52                return $query_vars;
     53        }
     54
     55        /**
     56         * Update a comment after editing.
     57         *
     58         */
     59        public static function update_comment() {
     60                if ( ! is_single() || ( 'POST' !== $_SERVER['REQUEST_METHOD'] ) ) {
     61                        return;
     62                }
     63
     64                $update       = true;
     65                $comment_data = wp_unslash( $_POST );
     66
     67                $defaults = array(
     68                        'edit_note_feedback',
     69                        'comment_ID',
     70                        'comment',
     71                        'comment_parent',
     72                        'comment_post_ID'
     73                );
     74
     75                foreach ( $defaults as $value ) {
     76                        if ( ! isset( $comment_data[ $value ] ) ) {
     77                                $update = false;
     78                                break;
     79                        }
     80                }
     81
     82                if ( $update && DevHub\can_user_edit_note( (int) $comment_data['comment_ID'] ) ) {
     83                        $comment_data['comment_content'] = $comment_data['comment'];
     84                        wp_update_comment( $comment_data );
     85                }
     86        }
     87
     88        /**
     89         * Use the 'comments-edit.php' template for editing comments.
     90         *
     91         * @param string $template Template to include.
     92         * @return string           Template to include.
     93         */
     94        public static function template_include( $template ) {
     95                $comment = get_query_var( 'feedback_id' );
     96                if ( ! $comment ) {
     97                        return $template;
     98                }
     99
     100                $comment_template = get_query_template( "comments-edit" );
     101                if ( $comment_template ) {
     102                        $template = $comment_template;
     103                }
     104                return $template;
     105        }
     106
     107        /**
     108         * Redirects to the home page if the edit request is invalid for the current user.
     109         *
     110         * Redirects if the current user is not the comment author.
     111         * Redirects if the comment doesn't exist.
     112         * Redirects if the comment is not for a parsed post type.
     113         * Redirects if a comment is already approved.
     114         *
     115         * Doesn't redirect for users with the edit_comment capability.
     116         */
     117        public static function redirect_invalid_edit_request() {
     118                $comment_id = absint( get_query_var( 'feedback_id' ) );
     119                if ( ! $comment_id ) {
     120                        return;
     121                }
     122
     123                if ( !  DevHub\can_user_edit_note( $comment_id ) ) {
     124                        // Redirect if you're not the comment author.
     125                        wp_redirect( home_url() );
     126                        exit();
     127                }
     128        }
     129
     130        /**
     131         * Set's the post and post type for the edit request.
     132         *
     133         * Trows a 404 if the current user can't edit the requested note.
     134         *
     135         * @param WP_Query $query The WP_Query instance (passed by reference)
     136         */
     137        public static function pre_get_posts( $query ) {
     138                if ( ! ( $query->is_main_query() && $query->get( 'feedback_id' ) ) ) {
     139                        // Not a query for editing a note.
     140                        return;
     141                }
     142
     143                $comment_id = $query->get( 'feedback_id' );
     144
     145                if (  DevHub\can_user_edit_note( $comment_id ) ) {
     146                        $comment = get_comment( $comment_id );
     147                        if ( isset( $comment->comment_post_ID ) ) {
     148                                $query->is_singular = true;
     149                                $query->is_single = true;
     150                                $query->set( 'post_type', get_post_type( $comment->comment_post_ID ) );
     151                                $query->set( 'p', $comment->comment_post_ID );
     152                        }
     153                } else {
     154                        $query->set_404();
     155                }
     156        }
     157
     158} // DevHub_User_Content_Edit
     159
     160DevHub_User_Content_Edit::init();
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/inc/user-content.php

     
    5050                remove_filter( 'comment_text',                 'capital_P_dangit',   31 );
    5151
    5252                // Enable shortcodes for comments
    53                 add_filter( 'comment_text',                    'do_shortcode');
     53                add_filter( 'comment_text',                    'do_shortcode' );
    5454
    5555                // Customize allowed tags
    5656                add_filter( 'wp_kses_allowed_html',            array( __CLASS__, 'wp_kses_allowed_html' ), 10, 2 );
     
    6767                // Allowed HTML for an edited child comment (There is no decent hook to filter child comments only)
    6868                add_action( 'edit_comment',                    array( __CLASS__, 'comment_edit_allowed_html' ) );
    6969
     70                // Adds hidden fields for editing to a comment form
     71                add_filter( 'comment_form_submit_field',       array( __CLASS__, 'add_hidden_fields' ), 10, 2 );
    7072        }
    7173
    7274        /**
     
    167169                        wp_enqueue_script( 'wporg-developer-user-notes', get_template_directory_uri() . '/js/user-notes.js', array( 'jquery', 'quicktags' ), '20180323', true );
    168170                        wp_enqueue_script( 'wporg-developer-user-notes-feedback', get_template_directory_uri() . '/js/user-notes-feedback.js', array( 'jquery', 'quicktags' ), '20180323', true );
    169171                        wp_localize_script( 'wporg-developer-user-notes-feedback', 'wporg_note_feedback', array(
    170                                 'show' => __( 'Show Feedback', 'wporg' ),
    171                                 'hide' => __( 'Hide Feedback', 'wporg' ),
    172                         ) );
     172                                        'show' => __( 'Show Feedback', 'wporg' ),
     173                                        'hide' => __( 'Hide Feedback', 'wporg' ),
     174                                ) );
    173175                }
    174176        }
    175177
     
    176178        /**
    177179         * Sets the default language for SyntaxHighlighter shortcode.
    178180         *
    179          * @param  array $atts Shortcode attributes.
     181         * @param array $atts Shortcode attributes.
    180182         * @return array
    181183         */
    182184        public static function syntaxhighlighter_shortcodeatts( $atts ) {
     
    187189        /**
    188190         * Subverts capital_P_dangit for SyntaxHighlighter shortcode.
    189191         *
    190          * @param  string $code
     192         * @param string $code
    191193         * @return string
    192194         */
    193195        public static function syntaxhighlighter_precode( $code ) {
     
    195197        }
    196198
    197199        /**
     200         * Add hidden fields to the comment form if the context is 'edit'
     201         *
     202         * @param string $submit_field HTML string with the submit button fields.
     203         * @param array  $args         Arguments for the comment form.
     204         * @return HTML string with the submit button fields.
     205         */
     206        public static function add_hidden_fields( $submit_field, $args ) {
     207                $context = isset( $args['context'] ) ? $args['context'] : '';
     208                $comment = isset( $args['comment_edit'] ) ? $args['comment_edit'] : false;
     209                if ( ! ( $comment && ( 'edit' === $context ) ) ) {
     210                        return $submit_field;
     211                }
     212
     213                $comment_id = isset( $comment->comment_ID ) ? $comment->comment_ID : 0;
     214
     215                return $submit_field . self::get_edit_fields( $comment_id, $instance = 0 );
     216        }
     217
     218        /**
     219         * Get the comment form arguments by context.
     220         *
     221         * @param WP_Comment|false $comment Comment object or false. Default false.
     222         * @param string           $context Context of arguments. Accepts 'edit' or empty string.
     223         * @return array Array with comment form arguments.
     224         */
     225        public static function comment_form_args( $comment = false, $context = '' ) {
     226                $label = _x( 'Add Note or Feedback', 'noun', 'wporg' );
     227                if ( 'edit' === $context ) {
     228                        $label = _x( 'Edit Note', 'noun', 'wporg' );
     229                }
     230
     231                $args = array(
     232                        'logged_in_as'        => '<p class="logged-in-as">'
     233                        . sprintf(
     234                                /* translators: 1: user profile link, 2: accessibility text, 3: user name, 4: logout URL */
     235                                __( '<a href="%1$s" aria-label="%2$s">Logged in as %3$s</a>. <a href="%4$s">Log out?</a>' ),
     236                                'https://profiles.wordpress.org/' . esc_attr( wp_get_current_user()->user_nicename ),
     237                                /* translators: %s: user name */
     238                                esc_attr( sprintf( __( 'Logged in as %s. Edit your profile.' ), $user_identity ) ),
     239                                $user_identity,
     240                                wp_logout_url( apply_filters( 'the_permalink', get_permalink() ) )
     241                        )
     242                        . '</p><p><ul><li>'
     243                        . __( 'Notes should supplement code reference entries, for example examples, tips, explanations, use-cases, and best practices.', 'wporg' )
     244                        . '</li><li>'
     245                        . __( 'Feedback can be to report errors or omissions with the documentation on this page. Such feedback will not be publicly posted.', 'wporg' )
     246                        . '</li><li>'
     247                        /* translators: 1: php button, 2: js button, 3: inline code button */
     248                        . sprintf(
     249                                __( 'You can enter text and code. Use the %1$s, %2$s, or %3$s buttons to wrap code snippets.', 'wporg' ),
     250                                '<span class="text-button">php</span>',
     251                                '<span class="text-button">js</span>',
     252                                '<span class="text-button">' . __( 'inline code', 'wporg' ) . '</span>'
     253                        )
     254                        . '</li></ul></p>',
     255                        'comment_notes_after' => '<p>' . __( 'Submission Notes:', 'wporg' ) . '</p>' . self::get_editor_rules(),
     256                        'label_submit'        => $label,
     257                        'cancel_reply_link'   => '',
     258                        'must_log_in'         => '<p>' . sprintf(
     259                                __( 'You must <a href="%s">log in</a> before being able to contribute a note or feedback.', 'wporg' ),
     260                                'https://login.wordpress.org/?redirect_to=' . urlencode( get_comments_link() )
     261                        ) . '</p>',
     262                        'title_reply'         => '', //'Add Example'
     263                        'title_reply_to'      => '',
     264                );
     265
     266                if ( class_exists( 'DevHub_Note_Preview' ) ) {
     267                        $args['comment_notes_after'] = DevHub_Note_Preview::comment_preview() . $args['comment_notes_after'];
     268                        $args['class_form']          = "comment-form tab-container";
     269                }
     270
     271                $args['comment_field'] = self::wp_editor_comments( $label, $comment );
     272                $args['context'] = $context;
     273                $args['comment_edit'] = $comment;
     274
     275                if ( $comment && ( 'edit' === $context ) ) {
     276                        $comment_id = isset( $comment->comment_ID ) ? $comment->comment_ID : 0;
     277                        $post_id    = isset( $comment->comment_post_ID ) ? $comment->comment_post_ID : 0;
     278
     279                        $args['action'] = get_permalink( $post_id ) . '#comment-' . $comment_id;
     280                }
     281
     282                return $args;
     283        }
     284
     285        /**
    198286         * Capture an {@see wp_editor()} instance as the 'User Contributed Notes' comment form.
    199287         *
    200288         * Uses output buffering to capture the editor instance for use with the {@see comments_form()}.
    201289         *
     290         * @param string           $label   Label used for the editor.
     291         * @param WP_Comment|false $comment Comment object or false. Default false.
    202292         * @return string HTML output for the wp_editor-ized comment form.
    203293         */
    204         public static function wp_editor_comments() {
     294        public static function wp_editor_comments( $label, $comment = false ) {
     295                $content = isset( $comment->comment_content ) ? $comment->comment_content : '';
     296
    205297                ob_start();
    206                 echo '<h3><label for="comment">' . _x( 'Add Note or Feedback', 'noun', 'wporg' ) . '</label></h3>';
     298                echo '<h3><label for="comment">' . $label . '</label></h3>';
    207299
    208300                if ( class_exists( 'DevHub_Note_Preview' ) ) {
    209                         echo '<ul class="tablist" style="display:none;">';
     301                        echo "<ul class='tablist' style='display: none;'>";
    210302                        echo '<li><a href="#comment-form-comment">' . __( 'Write', 'wporg' ) . '</a></li>';
    211303                        echo '<li><a href="#comment-preview">' . __( 'Preview', 'wporg' ) . '</a></li></ul>';
    212304                }
    213305
    214                 $style = '<style type="text/css">';
    215                 ob_start();
    216                 include get_stylesheet_directory() . '/stylesheets/editor-style.css';
    217                 $style .= ob_get_clean();
    218                 $style .=' </style>';
    219 
    220306                echo '<div class="comment-form-comment tab-section" id="comment-form-comment">';
    221                 wp_editor( '', 'comment', array(
    222                         'media_buttons' => false,
    223                         'editor_css'    => $style,
    224                         'textarea_name' => 'comment',
    225                         'textarea_rows' => 8,
    226                         'quicktags'     => array(
    227                                 'buttons' => 'strong,em,ul,ol,li'
    228                         ),
    229                         'teeny'         => true,
    230                         'tinymce'       => false,
    231                 ) );
     307                wp_editor( $content, 'comment', array(
     308                                'media_buttons' => false,
     309                                'editor_css'    => self::get_editor_style(),
     310                                'textarea_name' => 'comment',
     311                                'textarea_rows' => 8,
     312                                'quicktags'     => array(
     313                                        'buttons' => 'strong,em,ul,ol,li'
     314                                ),
     315                                'teeny'         => true,
     316                                'tinymce'       => false,
     317                        ) );
    232318                echo '</div>';
    233319                return ob_get_clean();
    234320        }
     
    238324         *
    239325         * Uses output buffering to capture the editor instance.
    240326         *
     327         * @param WP_Comment|false $comment Comment object or false. Default false.
     328         * @param string           $display Display the editor. Default 'show'.
     329         * @param bool             $edit    True if the editor used for editing a note. Default false.
    241330         * @return string HTML output for the wp_editor-ized feedback form.
    242331         */
    243         public static function wp_editor_feedback( $comment, $display = 'show', $content = '' ) {
     332        public static function wp_editor_feedback( $comment, $display = 'show', $edit = false ) {
    244333
    245334                if ( ! ( isset( $comment->comment_ID ) && absint( $comment->comment_ID ) ) ) {
    246335                        return '';
     
    252341                $instance++;
    253342
    254343                $display     = ( 'hide' === $display ) ? ' style="display: none;"' : '';
     344                $parent      = $comment_id;
     345                $action      = site_url( '/wp-comments-post.php' );
     346                $content     = '';
    255347                $title       = __( 'Add feedback to this note', 'wporg' );
    256348                $form_type   = '';
    257349                $button_text = __( 'Add Feedback', 'wporg' );
    258 
    259                 if ( $content ) {
     350                $post_id     = isset( $comment->comment_post_ID ) ? $comment->comment_post_ID : get_the_ID();
     351                if ( $edit ) {
     352                        $parent      = isset( $comment->comment_parent ) ? $comment->comment_parent : 0;
     353                        $content     = isset( $comment->comment_content ) ? $comment->comment_content : '';
    260354                        $title       = __( 'Edit feedback', 'wporg' );
    261355                        $form_type   = '-edit';
    262                         $button_text = __( 'Edit Feedback', 'wporg' );
     356                        $button_text = __( 'Edit Note', 'wporg' );
     357                        $action      = get_permalink( $post_id ) . '#comment-' . $comment_id;
    263358                }
    264359
    265360                $allowed_tags = '';
     
    269364
    270365                ob_start();
    271366                echo "<div id='feedback-editor-{$comment_id}' class='feedback-editor'{$display}>\n";
    272                 echo "<p class='feedback-editor-title'>{$title}</p>\n";
    273                 echo '<form id="feedback-form-' . $instance . $form_type . '" class="feedback-form" method="post" action="' . site_url( '/wp-comments-post.php' ) . '" name="feedback-form-' . $instance ."\">\n";
     367                if ( ! $edit ) {
     368                        echo "<p class='feedback-editor-title'>{$title}</p>\n";
     369                }
    274370
    275                 wp_editor( '', 'feedback-' . $instance, array(
    276                         'media_buttons' => false,
    277                         'textarea_name' => 'comment',
    278                         'textarea_rows' => 3,
    279                         'quicktags'     => array(
    280                                 'buttons' => 'strong,em'
    281                         ),
    282                         'teeny'         => true,
    283                         'tinymce'       => false,
    284                 ) );
     371                echo "<form id='feedback-form-{$instance}{$form_type}' class='feedback-form' method='post' action='{$action}' name='feedback-form-{$instance}'>\n";
     372                echo self::get_editor_rules( 'feedback' );
     373                wp_editor( $content, 'feedback-' . $instance, array(
     374                                'media_buttons' => false,
     375                                'textarea_name' => 'comment',
     376                                'textarea_rows' => 3,
     377                                'quicktags'     => array(
     378                                        'buttons' => 'strong,em'
     379                                ),
     380                                'editor_css'    => self::get_editor_style(),
     381                                'teeny'         => true,
     382                                'tinymce'       => false,
     383                        ) );
    285384
    286385                echo '<p><strong>' . __( 'Note', 'wporg' ) . '</strong>: ' . __( 'No newlines allowed', 'wporg' ) . '. ';
    287386                printf( __( 'Allowed tags: %s', 'wporg' ), trim( $allowed_tags, ', ' ) ) . "</p>\n";
    288                 echo "<p><input id='submit-{$instance}' class='submit' type='submit' value='Add Feedback' name='submit-{$instance}'>\n";
    289                 echo "<input type='hidden' name='comment_post_ID' value='" . get_the_ID() . "' id='comment_post_ID-{$instance}' />\n";
    290                 echo "<input type='hidden' name='comment_parent' id='comment_parent-{$instance}' value='{$comment_id}' />\n";
     387                echo "<p><input id='submit-{$instance}' class='submit' type='submit' value='{$button_text}' name='submit-{$instance}'>\n";
     388                echo "<input type='hidden' name='comment_post_ID' value='{$post_id}' id='comment_post_ID-{$instance}' />\n";
     389                echo "<input type='hidden' name='comment_parent' id='comment_parent-{$instance}' value='{$parent}' />\n";
     390                if ( $edit ) {
     391                        echo self::get_edit_fields( $comment_id, $instance );
     392                }
     393
    291394                echo "</p>\n</form>\n</div><!-- #feedback-editor-{$comment_id} -->\n";
    292395                return ob_get_clean();
    293396        }
    294397
     398        /**
     399         * Get the rules list for the comment form.
     400         *
     401         * @param string $context Accepts 'feedback' or empty sring
     402         * @return string Editor rules.
     403         */
     404        function get_editor_rules( $context = '' ) {
     405                if ( 'feedback' === $context ) {
     406                        return '<ul><li>'
     407                                . __( 'This form is not for support requests, spam, bug reports, complaints, or self-promotion. Entries of this nature will be deleted.', 'wporg' )
     408                                . '</li><li class="user-notes-are-gpl">'
     409
     410                                . sprintf(
     411                                /* translators: 1: GFDL link */
     412                                __( '<strong>NOTE:</strong> All contributions are licensed under %s and are moderated before appearing on the site.', 'wporg' ),
     413                                '<a href="https://gnu.org/licenses/fdl.html">GFDL</a>'
     414                        )
     415                                . '</li></ul>';
     416                }
     417
     418                return '<ul><li>'
     419                        . __( 'This form is not for support requests, discussions, spam, bug reports, complaints, or self-promotion. Entries of this nature will be deleted.', 'wporg' )
     420                        . '</li><li>'
     421                        . __( 'In the editing area the Tab key enters a tab character. To move below this area by pressing Tab, press the Esc key followed by the Tab key. In some cases the Esc key will need to be pressed twice before the Tab key will allow you to continue.', 'wporg' )
     422                        . '</li><li class="user-notes-are-gpl">'
     423                        . sprintf(
     424                        /* translators: 1: GFDL link */
     425                        __( '<strong>NOTE:</strong> All contributions are licensed under %s and are moderated before appearing on the site.', 'wporg' ),
     426                        '<a href="https://gnu.org/licenses/fdl.html">GFDL</a>'
     427                )
     428                        . '</li></ul>';
     429
     430        }
     431
     432        /**
     433         * Get the editor styles.
     434         *
     435         * @return string Editor styles.
     436         */
     437        function get_editor_style() {
     438                $style = '<style type="text/css">';
     439                ob_start();
     440                include get_stylesheet_directory() . '/stylesheets/editor-style.css';
     441                $style .= ob_get_clean();
     442                $style .= ' </style>';
     443                return $style;
     444        }
     445
     446        /**
     447         * Get the hidden input fields HTML used when editing.
     448         *
     449         * @param int     $comment_id Comment ID.
     450         * @param integer $instance   Comment form instance number used in HTML id's.
     451         * @return string Hidden input fields HTML.
     452         */
     453        function get_edit_fields( $comment_id, $instance = 0 ) {
     454                $fields = "<input type='hidden' name='comment_ID' id='comment_ID-{$instance}' value='{$comment_id}' />\n";
     455                $fields .= "<input type='hidden' name='edit_note_feedback' id='edit_note_feedback-{$instance}' value='1' />\n";
     456
     457                return $fields;
     458        }
     459
    295460} // DevHub_User_Submitted_Content
    296461
    297462DevHub_User_Submitted_Content::init();
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/js/user-notes-preview.js

     
    2020                text = '';
    2121                processing = false;
    2222
     23                // Show tabs with Javascript.
     24                $( '#commentform .tablist').show();
     25
    2326                if ( textarea.length && preview.length && tabs.length ) {
    2427
    2528                        // Append spinner to preview tab
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/js/user-notes.js

     
    1212        }
    1313
    1414        function showCommentForm() {
     15                $( '#add-user-note' ).hide();
    1516                $( '#respond' ).show();
    16                 $( '#add-user-note' ).hide();
    1717
    1818                var wpAdminBar = $( '#page.admin-bar' ).length ? 32 : 0;
    1919                var target     = $( '#commentform #add-note-or-feedback' );
     
    2828                }
    2929        }
    3030
    31         $( '#respond, #add-user-note' ).toggle();
     31        if( $('#add-user-note').length ) {
     32                // Hide by default if #add-user-note exists
     33                $( '#respond' ).hide();
     34        }
     35
     36
    3237        $( '#add-user-note, .table-of-contents a[href="#add-note-or-feedback"]' ).click( function( e ) {
    3338                e.preventDefault();
    3439
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/package-lock.json

     
     1{
     2    "name": "wporg-developer",
     3    "requires": true,
     4    "lockfileVersion": 1,
     5    "dependencies": {
     6        "abbrev": {
     7            "version": "1.1.1",
     8            "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
     9            "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
     10            "dev": true
     11        },
     12        "ajv": {
     13            "version": "5.5.2",
     14            "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
     15            "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
     16            "dev": true,
     17            "requires": {
     18                "co": "4.6.0",
     19                "fast-deep-equal": "1.1.0",
     20                "fast-json-stable-stringify": "2.0.0",
     21                "json-schema-traverse": "0.3.1"
     22            }
     23        },
     24        "amdefine": {
     25            "version": "1.0.1",
     26            "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
     27            "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
     28            "dev": true
     29        },
     30        "ansi-regex": {
     31            "version": "2.1.1",
     32            "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
     33            "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
     34            "dev": true
     35        },
     36        "ansi-styles": {
     37            "version": "2.2.1",
     38            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
     39            "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
     40            "dev": true
     41        },
     42        "aproba": {
     43            "version": "1.2.0",
     44            "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
     45            "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
     46            "dev": true
     47        },
     48        "are-we-there-yet": {
     49            "version": "1.1.4",
     50            "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz",
     51            "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=",
     52            "dev": true,
     53            "requires": {
     54                "delegates": "1.0.0",
     55                "readable-stream": "2.3.6"
     56            }
     57        },
     58        "argparse": {
     59            "version": "0.1.16",
     60            "resolved": "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz",
     61            "integrity": "sha1-z9AeD7uj1srtBJ+9dY1A9lGW9Xw=",
     62            "dev": true,
     63            "requires": {
     64                "underscore": "1.7.0",
     65                "underscore.string": "2.4.0"
     66            },
     67            "dependencies": {
     68                "underscore.string": {
     69                    "version": "2.4.0",
     70                    "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz",
     71                    "integrity": "sha1-jN2PusTi0uoefi6Al8QvRCKA+Fs=",
     72                    "dev": true
     73                }
     74            }
     75        },
     76        "array-find-index": {
     77            "version": "1.0.2",
     78            "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
     79            "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
     80            "dev": true
     81        },
     82        "asn1": {
     83            "version": "0.2.3",
     84            "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
     85            "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=",
     86            "dev": true
     87        },
     88        "assert-plus": {
     89            "version": "1.0.0",
     90            "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
     91            "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
     92            "dev": true
     93        },
     94        "async": {
     95            "version": "0.1.22",
     96            "resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz",
     97            "integrity": "sha1-D8GqoIig4+8Ovi2IMbqw3PiEUGE=",
     98            "dev": true
     99        },
     100        "async-foreach": {
     101            "version": "0.1.3",
     102            "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz",
     103            "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=",
     104            "dev": true
     105        },
     106        "asynckit": {
     107            "version": "0.4.0",
     108            "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
     109            "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
     110            "dev": true
     111        },
     112        "aws-sign2": {
     113            "version": "0.7.0",
     114            "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
     115            "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
     116            "dev": true
     117        },
     118        "aws4": {
     119            "version": "1.7.0",
     120            "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz",
     121            "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==",
     122            "dev": true
     123        },
     124        "balanced-match": {
     125            "version": "1.0.0",
     126            "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
     127            "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
     128            "dev": true
     129        },
     130        "bcrypt-pbkdf": {
     131            "version": "1.0.1",
     132            "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
     133            "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
     134            "dev": true,
     135            "optional": true,
     136            "requires": {
     137                "tweetnacl": "0.14.5"
     138            }
     139        },
     140        "block-stream": {
     141            "version": "0.0.9",
     142            "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
     143            "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
     144            "dev": true,
     145            "requires": {
     146                "inherits": "2.0.3"
     147            }
     148        },
     149        "boom": {
     150            "version": "4.3.1",
     151            "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz",
     152            "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=",
     153            "dev": true,
     154            "requires": {
     155                "hoek": "4.2.1"
     156            }
     157        },
     158        "brace-expansion": {
     159            "version": "1.1.11",
     160            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
     161            "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
     162            "dev": true,
     163            "requires": {
     164                "balanced-match": "1.0.0",
     165                "concat-map": "0.0.1"
     166            }
     167        },
     168        "builtin-modules": {
     169            "version": "1.1.1",
     170            "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
     171            "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
     172            "dev": true
     173        },
     174        "camelcase": {
     175            "version": "2.1.1",
     176            "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
     177            "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
     178            "dev": true
     179        },
     180        "camelcase-keys": {
     181            "version": "2.1.0",
     182            "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
     183            "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
     184            "dev": true,
     185            "requires": {
     186                "camelcase": "2.1.1",
     187                "map-obj": "1.0.1"
     188            }
     189        },
     190        "caseless": {
     191            "version": "0.12.0",
     192            "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
     193            "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
     194            "dev": true
     195        },
     196        "chalk": {
     197            "version": "1.1.3",
     198            "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
     199            "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
     200            "dev": true,
     201            "requires": {
     202                "ansi-styles": "2.2.1",
     203                "escape-string-regexp": "1.0.5",
     204                "has-ansi": "2.0.0",
     205                "strip-ansi": "3.0.1",
     206                "supports-color": "2.0.0"
     207            }
     208        },
     209        "cliui": {
     210            "version": "3.2.0",
     211            "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
     212            "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
     213            "dev": true,
     214            "requires": {
     215                "string-width": "1.0.2",
     216                "strip-ansi": "3.0.1",
     217                "wrap-ansi": "2.1.0"
     218            }
     219        },
     220        "co": {
     221            "version": "4.6.0",
     222            "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
     223            "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
     224            "dev": true
     225        },
     226        "code-point-at": {
     227            "version": "1.1.0",
     228            "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
     229            "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
     230            "dev": true
     231        },
     232        "coffee-script": {
     233            "version": "1.3.3",
     234            "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz",
     235            "integrity": "sha1-FQ1rTLUiiUNp7+1qIQHCC8f0pPQ=",
     236            "dev": true
     237        },
     238        "colors": {
     239            "version": "0.6.2",
     240            "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz",
     241            "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=",
     242            "dev": true
     243        },
     244        "combined-stream": {
     245            "version": "1.0.6",
     246            "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
     247            "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
     248            "dev": true,
     249            "requires": {
     250                "delayed-stream": "1.0.0"
     251            }
     252        },
     253        "concat-map": {
     254            "version": "0.0.1",
     255            "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
     256            "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
     257            "dev": true
     258        },
     259        "console-control-strings": {
     260            "version": "1.1.0",
     261            "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
     262            "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
     263            "dev": true
     264        },
     265        "core-util-is": {
     266            "version": "1.0.2",
     267            "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
     268            "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
     269            "dev": true
     270        },
     271        "cross-spawn": {
     272            "version": "3.0.1",
     273            "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz",
     274            "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=",
     275            "dev": true,
     276            "requires": {
     277                "lru-cache": "4.1.2",
     278                "which": "1.3.0"
     279            },
     280            "dependencies": {
     281                "lru-cache": {
     282                    "version": "4.1.2",
     283                    "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.2.tgz",
     284                    "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==",
     285                    "dev": true,
     286                    "requires": {
     287                        "pseudomap": "1.0.2",
     288                        "yallist": "2.1.2"
     289                    }
     290                },
     291                "which": {
     292                    "version": "1.3.0",
     293                    "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz",
     294                    "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==",
     295                    "dev": true,
     296                    "requires": {
     297                        "isexe": "2.0.0"
     298                    }
     299                }
     300            }
     301        },
     302        "cryptiles": {
     303            "version": "3.1.2",
     304            "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz",
     305            "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=",
     306            "dev": true,
     307            "requires": {
     308                "boom": "5.2.0"
     309            },
     310            "dependencies": {
     311                "boom": {
     312                    "version": "5.2.0",
     313                    "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz",
     314                    "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
     315                    "dev": true,
     316                    "requires": {
     317                        "hoek": "4.2.1"
     318                    }
     319                }
     320            }
     321        },
     322        "currently-unhandled": {
     323            "version": "0.4.1",
     324            "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
     325            "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
     326            "dev": true,
     327            "requires": {
     328                "array-find-index": "1.0.2"
     329            }
     330        },
     331        "dashdash": {
     332            "version": "1.14.1",
     333            "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
     334            "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
     335            "dev": true,
     336            "requires": {
     337                "assert-plus": "1.0.0"
     338            }
     339        },
     340        "dateformat": {
     341            "version": "1.0.2-1.2.3",
     342            "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz",
     343            "integrity": "sha1-sCIMAt6YYXQztyhRz0fePfLNvuk=",
     344            "dev": true
     345        },
     346        "debug": {
     347            "version": "0.7.4",
     348            "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz",
     349            "integrity": "sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk=",
     350            "dev": true
     351        },
     352        "decamelize": {
     353            "version": "1.2.0",
     354            "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
     355            "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
     356            "dev": true
     357        },
     358        "delayed-stream": {
     359            "version": "1.0.0",
     360            "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
     361            "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
     362            "dev": true
     363        },
     364        "delegates": {
     365            "version": "1.0.0",
     366            "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
     367            "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
     368            "dev": true
     369        },
     370        "each-async": {
     371            "version": "1.1.1",
     372            "resolved": "https://registry.npmjs.org/each-async/-/each-async-1.1.1.tgz",
     373            "integrity": "sha1-3uUim98KtrogEqOV4bhpq/iBNHM=",
     374            "dev": true,
     375            "requires": {
     376                "onetime": "1.1.0",
     377                "set-immediate-shim": "1.0.1"
     378            }
     379        },
     380        "ecc-jsbn": {
     381            "version": "0.1.1",
     382            "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
     383            "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
     384            "dev": true,
     385            "optional": true,
     386            "requires": {
     387                "jsbn": "0.1.1"
     388            }
     389        },
     390        "error-ex": {
     391            "version": "1.3.1",
     392            "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz",
     393            "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=",
     394            "dev": true,
     395            "requires": {
     396                "is-arrayish": "0.2.1"
     397            }
     398        },
     399        "escape-string-regexp": {
     400            "version": "1.0.5",
     401            "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
     402            "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
     403            "dev": true
     404        },
     405        "esprima": {
     406            "version": "1.0.4",
     407            "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz",
     408            "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=",
     409            "dev": true
     410        },
     411        "eventemitter2": {
     412            "version": "0.4.14",
     413            "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz",
     414            "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=",
     415            "dev": true
     416        },
     417        "exit": {
     418            "version": "0.1.2",
     419            "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
     420            "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
     421            "dev": true
     422        },
     423        "extend": {
     424            "version": "3.0.1",
     425            "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
     426            "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=",
     427            "dev": true
     428        },
     429        "extsprintf": {
     430            "version": "1.3.0",
     431            "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
     432            "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
     433            "dev": true
     434        },
     435        "fast-deep-equal": {
     436            "version": "1.1.0",
     437            "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
     438            "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
     439            "dev": true
     440        },
     441        "fast-json-stable-stringify": {
     442            "version": "2.0.0",
     443            "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
     444            "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
     445            "dev": true
     446        },
     447        "faye-websocket": {
     448            "version": "0.4.4",
     449            "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.4.4.tgz",
     450            "integrity": "sha1-wUxbO/FNdBf/v9mQwKdJXNnzN7w=",
     451            "dev": true
     452        },
     453        "find-up": {
     454            "version": "1.1.2",
     455            "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
     456            "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
     457            "dev": true,
     458            "requires": {
     459                "path-exists": "2.1.0",
     460                "pinkie-promise": "2.0.1"
     461            }
     462        },
     463        "findup-sync": {
     464            "version": "0.1.3",
     465            "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz",
     466            "integrity": "sha1-fz56l7gjksZTvwZYm9hRkOk8NoM=",
     467            "dev": true,
     468            "requires": {
     469                "glob": "3.2.11",
     470                "lodash": "2.4.2"
     471            },
     472            "dependencies": {
     473                "glob": {
     474                    "version": "3.2.11",
     475                    "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz",
     476                    "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=",
     477                    "dev": true,
     478                    "requires": {
     479                        "inherits": "2.0.3",
     480                        "minimatch": "0.3.0"
     481                    }
     482                },
     483                "lodash": {
     484                    "version": "2.4.2",
     485                    "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
     486                    "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=",
     487                    "dev": true
     488                },
     489                "minimatch": {
     490                    "version": "0.3.0",
     491                    "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz",
     492                    "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=",
     493                    "dev": true,
     494                    "requires": {
     495                        "lru-cache": "2.7.3",
     496                        "sigmund": "1.0.1"
     497                    }
     498                }
     499            }
     500        },
     501        "forever-agent": {
     502            "version": "0.6.1",
     503            "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
     504            "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
     505            "dev": true
     506        },
     507        "form-data": {
     508            "version": "2.3.2",
     509            "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
     510            "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
     511            "dev": true,
     512            "requires": {
     513                "asynckit": "0.4.0",
     514                "combined-stream": "1.0.6",
     515                "mime-types": "2.1.18"
     516            }
     517        },
     518        "fs.realpath": {
     519            "version": "1.0.0",
     520            "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
     521            "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
     522            "dev": true
     523        },
     524        "fstream": {
     525            "version": "1.0.11",
     526            "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
     527            "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",
     528            "dev": true,
     529            "requires": {
     530                "graceful-fs": "4.1.11",
     531                "inherits": "2.0.3",
     532                "mkdirp": "0.5.1",
     533                "rimraf": "2.2.8"
     534            },
     535            "dependencies": {
     536                "graceful-fs": {
     537                    "version": "4.1.11",
     538                    "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
     539                    "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
     540                    "dev": true
     541                }
     542            }
     543        },
     544        "gauge": {
     545            "version": "2.7.4",
     546            "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
     547            "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
     548            "dev": true,
     549            "requires": {
     550                "aproba": "1.2.0",
     551                "console-control-strings": "1.1.0",
     552                "has-unicode": "2.0.1",
     553                "object-assign": "4.1.1",
     554                "signal-exit": "3.0.2",
     555                "string-width": "1.0.2",
     556                "strip-ansi": "3.0.1",
     557                "wide-align": "1.1.2"
     558            },
     559            "dependencies": {
     560                "object-assign": {
     561                    "version": "4.1.1",
     562                    "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
     563                    "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
     564                    "dev": true
     565                }
     566            }
     567        },
     568        "gaze": {
     569            "version": "0.5.2",
     570            "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz",
     571            "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=",
     572            "dev": true,
     573            "requires": {
     574                "globule": "0.1.0"
     575            }
     576        },
     577        "get-caller-file": {
     578            "version": "1.0.2",
     579            "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz",
     580            "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=",
     581            "dev": true
     582        },
     583        "get-stdin": {
     584            "version": "4.0.1",
     585            "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
     586            "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
     587            "dev": true
     588        },
     589        "getobject": {
     590            "version": "0.1.0",
     591            "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz",
     592            "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=",
     593            "dev": true
     594        },
     595        "getpass": {
     596            "version": "0.1.7",
     597            "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
     598            "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
     599            "dev": true,
     600            "requires": {
     601                "assert-plus": "1.0.0"
     602            }
     603        },
     604        "glob": {
     605            "version": "3.1.21",
     606            "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz",
     607            "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=",
     608            "dev": true,
     609            "requires": {
     610                "graceful-fs": "1.2.3",
     611                "inherits": "1.0.2",
     612                "minimatch": "0.2.14"
     613            },
     614            "dependencies": {
     615                "inherits": {
     616                    "version": "1.0.2",
     617                    "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz",
     618                    "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=",
     619                    "dev": true
     620                }
     621            }
     622        },
     623        "globule": {
     624            "version": "0.1.0",
     625            "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz",
     626            "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=",
     627            "dev": true,
     628            "requires": {
     629                "glob": "3.1.21",
     630                "lodash": "1.0.2",
     631                "minimatch": "0.2.14"
     632            },
     633            "dependencies": {
     634                "lodash": {
     635                    "version": "1.0.2",
     636                    "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz",
     637                    "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=",
     638                    "dev": true
     639                }
     640            }
     641        },
     642        "graceful-fs": {
     643            "version": "1.2.3",
     644            "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz",
     645            "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=",
     646            "dev": true
     647        },
     648        "grunt": {
     649            "version": "0.4.5",
     650            "resolved": "https://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz",
     651            "integrity": "sha1-VpN81RlDJK3/bSB2MYMqnWuk5/A=",
     652            "dev": true,
     653            "requires": {
     654                "async": "0.1.22",
     655                "coffee-script": "1.3.3",
     656                "colors": "0.6.2",
     657                "dateformat": "1.0.2-1.2.3",
     658                "eventemitter2": "0.4.14",
     659                "exit": "0.1.2",
     660                "findup-sync": "0.1.3",
     661                "getobject": "0.1.0",
     662                "glob": "3.1.21",
     663                "grunt-legacy-log": "0.1.3",
     664                "grunt-legacy-util": "0.2.0",
     665                "hooker": "0.2.3",
     666                "iconv-lite": "0.2.11",
     667                "js-yaml": "2.0.5",
     668                "lodash": "0.9.2",
     669                "minimatch": "0.2.14",
     670                "nopt": "1.0.10",
     671                "rimraf": "2.2.8",
     672                "underscore.string": "2.2.1",
     673                "which": "1.0.9"
     674            }
     675        },
     676        "grunt-contrib-watch": {
     677            "version": "0.6.1",
     678            "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-0.6.1.tgz",
     679            "integrity": "sha1-ZP3LolpjX1tNobbOb5DaCutuPxU=",
     680            "dev": true,
     681            "requires": {
     682                "async": "0.2.10",
     683                "gaze": "0.5.2",
     684                "lodash": "2.4.2",
     685                "tiny-lr-fork": "0.0.5"
     686            },
     687            "dependencies": {
     688                "async": {
     689                    "version": "0.2.10",
     690                    "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
     691                    "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=",
     692                    "dev": true
     693                },
     694                "lodash": {
     695                    "version": "2.4.2",
     696                    "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
     697                    "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=",
     698                    "dev": true
     699                }
     700            }
     701        },
     702        "grunt-legacy-log": {
     703            "version": "0.1.3",
     704            "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-0.1.3.tgz",
     705            "integrity": "sha1-7ClCboAwIa9ZAp+H0vnNczWgVTE=",
     706            "dev": true,
     707            "requires": {
     708                "colors": "0.6.2",
     709                "grunt-legacy-log-utils": "0.1.1",
     710                "hooker": "0.2.3",
     711                "lodash": "2.4.2",
     712                "underscore.string": "2.3.3"
     713            },
     714            "dependencies": {
     715                "lodash": {
     716                    "version": "2.4.2",
     717                    "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
     718                    "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=",
     719                    "dev": true
     720                },
     721                "underscore.string": {
     722                    "version": "2.3.3",
     723                    "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz",
     724                    "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=",
     725                    "dev": true
     726                }
     727            }
     728        },
     729        "grunt-legacy-log-utils": {
     730            "version": "0.1.1",
     731            "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-0.1.1.tgz",
     732            "integrity": "sha1-wHBrndkGThFvNvI/5OawSGcsD34=",
     733            "dev": true,
     734            "requires": {
     735                "colors": "0.6.2",
     736                "lodash": "2.4.2",
     737                "underscore.string": "2.3.3"
     738            },
     739            "dependencies": {
     740                "lodash": {
     741                    "version": "2.4.2",
     742                    "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
     743                    "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=",
     744                    "dev": true
     745                },
     746                "underscore.string": {
     747                    "version": "2.3.3",
     748                    "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz",
     749                    "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=",
     750                    "dev": true
     751                }
     752            }
     753        },
     754        "grunt-legacy-util": {
     755            "version": "0.2.0",
     756            "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz",
     757            "integrity": "sha1-kzJIhNv343qf98Am3/RR2UqeVUs=",
     758            "dev": true,
     759            "requires": {
     760                "async": "0.1.22",
     761                "exit": "0.1.2",
     762                "getobject": "0.1.0",
     763                "hooker": "0.2.3",
     764                "lodash": "0.9.2",
     765                "underscore.string": "2.2.1",
     766                "which": "1.0.9"
     767            }
     768        },
     769        "grunt-sass": {
     770            "version": "1.0.0",
     771            "resolved": "https://registry.npmjs.org/grunt-sass/-/grunt-sass-1.0.0.tgz",
     772            "integrity": "sha1-hGAqmrD8sP40BzdhKkulbMNhu8Q=",
     773            "dev": true,
     774            "requires": {
     775                "each-async": "1.1.1",
     776                "node-sass": "3.13.1",
     777                "object-assign": "2.1.1"
     778            }
     779        },
     780        "har-schema": {
     781            "version": "2.0.0",
     782            "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
     783            "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
     784            "dev": true
     785        },
     786        "har-validator": {
     787            "version": "5.0.3",
     788            "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz",
     789            "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
     790            "dev": true,
     791            "requires": {
     792                "ajv": "5.5.2",
     793                "har-schema": "2.0.0"
     794            }
     795        },
     796        "has-ansi": {
     797            "version": "2.0.0",
     798            "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
     799            "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
     800            "dev": true,
     801            "requires": {
     802                "ansi-regex": "2.1.1"
     803            }
     804        },
     805        "has-unicode": {
     806            "version": "2.0.1",
     807            "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
     808            "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
     809            "dev": true
     810        },
     811        "hawk": {
     812            "version": "6.0.2",
     813            "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz",
     814            "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==",
     815            "dev": true,
     816            "requires": {
     817                "boom": "4.3.1",
     818                "cryptiles": "3.1.2",
     819                "hoek": "4.2.1",
     820                "sntp": "2.1.0"
     821            }
     822        },
     823        "hoek": {
     824            "version": "4.2.1",
     825            "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
     826            "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==",
     827            "dev": true
     828        },
     829        "hooker": {
     830            "version": "0.2.3",
     831            "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz",
     832            "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=",
     833            "dev": true
     834        },
     835        "hosted-git-info": {
     836            "version": "2.6.0",
     837            "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz",
     838            "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==",
     839            "dev": true
     840        },
     841        "http-signature": {
     842            "version": "1.2.0",
     843            "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
     844            "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
     845            "dev": true,
     846            "requires": {
     847                "assert-plus": "1.0.0",
     848                "jsprim": "1.4.1",
     849                "sshpk": "1.14.1"
     850            }
     851        },
     852        "iconv-lite": {
     853            "version": "0.2.11",
     854            "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz",
     855            "integrity": "sha1-HOYKOleGSiktEyH/RgnKS7llrcg=",
     856            "dev": true
     857        },
     858        "in-publish": {
     859            "version": "2.0.0",
     860            "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz",
     861            "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=",
     862            "dev": true
     863        },
     864        "indent-string": {
     865            "version": "2.1.0",
     866            "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
     867            "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
     868            "dev": true,
     869            "requires": {
     870                "repeating": "2.0.1"
     871            }
     872        },
     873        "inflight": {
     874            "version": "1.0.6",
     875            "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
     876            "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
     877            "dev": true,
     878            "requires": {
     879                "once": "1.4.0",
     880                "wrappy": "1.0.2"
     881            }
     882        },
     883        "inherits": {
     884            "version": "2.0.3",
     885            "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
     886            "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
     887            "dev": true
     888        },
     889        "invert-kv": {
     890            "version": "1.0.0",
     891            "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
     892            "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
     893            "dev": true
     894        },
     895        "is-arrayish": {
     896            "version": "0.2.1",
     897            "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
     898            "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
     899            "dev": true
     900        },
     901        "is-builtin-module": {
     902            "version": "1.0.0",
     903            "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
     904            "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
     905            "dev": true,
     906            "requires": {
     907                "builtin-modules": "1.1.1"
     908            }
     909        },
     910        "is-finite": {
     911            "version": "1.0.2",
     912            "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
     913            "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
     914            "dev": true,
     915            "requires": {
     916                "number-is-nan": "1.0.1"
     917            }
     918        },
     919        "is-fullwidth-code-point": {
     920            "version": "1.0.0",
     921            "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
     922            "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
     923            "dev": true,
     924            "requires": {
     925                "number-is-nan": "1.0.1"
     926            }
     927        },
     928        "is-typedarray": {
     929            "version": "1.0.0",
     930            "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
     931            "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
     932            "dev": true
     933        },
     934        "is-utf8": {
     935            "version": "0.2.1",
     936            "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
     937            "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
     938            "dev": true
     939        },
     940        "isarray": {
     941            "version": "1.0.0",
     942            "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
     943            "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
     944            "dev": true
     945        },
     946        "isexe": {
     947            "version": "2.0.0",
     948            "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
     949            "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
     950            "dev": true
     951        },
     952        "isstream": {
     953            "version": "0.1.2",
     954            "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
     955            "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
     956            "dev": true
     957        },
     958        "js-base64": {
     959            "version": "2.4.3",
     960            "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.3.tgz",
     961            "integrity": "sha512-H7ErYLM34CvDMto3GbD6xD0JLUGYXR3QTcH6B/tr4Hi/QpSThnCsIp+Sy5FRTw3B0d6py4HcNkW7nO/wdtGWEw==",
     962            "dev": true
     963        },
     964        "js-yaml": {
     965            "version": "2.0.5",
     966            "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-2.0.5.tgz",
     967            "integrity": "sha1-olrmUJmZ6X3yeMZxnaEb0Gh3Q6g=",
     968            "dev": true,
     969            "requires": {
     970                "argparse": "0.1.16",
     971                "esprima": "1.0.4"
     972            }
     973        },
     974        "jsbn": {
     975            "version": "0.1.1",
     976            "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
     977            "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
     978            "dev": true,
     979            "optional": true
     980        },
     981        "json-schema": {
     982            "version": "0.2.3",
     983            "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
     984            "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
     985            "dev": true
     986        },
     987        "json-schema-traverse": {
     988            "version": "0.3.1",
     989            "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
     990            "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
     991            "dev": true
     992        },
     993        "json-stringify-safe": {
     994            "version": "5.0.1",
     995            "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
     996            "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
     997            "dev": true
     998        },
     999        "jsprim": {
     1000            "version": "1.4.1",
     1001            "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
     1002            "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
     1003            "dev": true,
     1004            "requires": {
     1005                "assert-plus": "1.0.0",
     1006                "extsprintf": "1.3.0",
     1007                "json-schema": "0.2.3",
     1008                "verror": "1.10.0"
     1009            }
     1010        },
     1011        "lcid": {
     1012            "version": "1.0.0",
     1013            "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
     1014            "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
     1015            "dev": true,
     1016            "requires": {
     1017                "invert-kv": "1.0.0"
     1018            }
     1019        },
     1020        "load-json-file": {
     1021            "version": "1.1.0",
     1022            "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
     1023            "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
     1024            "dev": true,
     1025            "requires": {
     1026                "graceful-fs": "4.1.11",
     1027                "parse-json": "2.2.0",
     1028                "pify": "2.3.0",
     1029                "pinkie-promise": "2.0.1",
     1030                "strip-bom": "2.0.0"
     1031            },
     1032            "dependencies": {
     1033                "graceful-fs": {
     1034                    "version": "4.1.11",
     1035                    "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
     1036                    "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
     1037                    "dev": true
     1038                }
     1039            }
     1040        },
     1041        "lodash": {
     1042            "version": "0.9.2",
     1043            "resolved": "https://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz",
     1044            "integrity": "sha1-jzSZxSRdNG1oLlsNO0B2fgnxqSw=",
     1045            "dev": true
     1046        },
     1047        "lodash.assign": {
     1048            "version": "4.2.0",
     1049            "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz",
     1050            "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=",
     1051            "dev": true
     1052        },
     1053        "lodash.clonedeep": {
     1054            "version": "4.5.0",
     1055            "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
     1056            "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
     1057            "dev": true
     1058        },
     1059        "loud-rejection": {
     1060            "version": "1.6.0",
     1061            "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
     1062            "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
     1063            "dev": true,
     1064            "requires": {
     1065                "currently-unhandled": "0.4.1",
     1066                "signal-exit": "3.0.2"
     1067            }
     1068        },
     1069        "lru-cache": {
     1070            "version": "2.7.3",
     1071            "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
     1072            "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=",
     1073            "dev": true
     1074        },
     1075        "map-obj": {
     1076            "version": "1.0.1",
     1077            "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
     1078            "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
     1079            "dev": true
     1080        },
     1081        "matchdep": {
     1082            "version": "0.3.0",
     1083            "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-0.3.0.tgz",
     1084            "integrity": "sha1-Qo5knOXCgY0iDgRj7/XA3p5Z1S4=",
     1085            "dev": true,
     1086            "requires": {
     1087                "findup-sync": "0.1.3",
     1088                "globule": "0.1.0",
     1089                "resolve": "0.5.1",
     1090                "stack-trace": "0.0.7"
     1091            }
     1092        },
     1093        "meow": {
     1094            "version": "3.7.0",
     1095            "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
     1096            "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
     1097            "dev": true,
     1098            "requires": {
     1099                "camelcase-keys": "2.1.0",
     1100                "decamelize": "1.2.0",
     1101                "loud-rejection": "1.6.0",
     1102                "map-obj": "1.0.1",
     1103                "minimist": "1.2.0",
     1104                "normalize-package-data": "2.4.0",
     1105                "object-assign": "4.1.1",
     1106                "read-pkg-up": "1.0.1",
     1107                "redent": "1.0.0",
     1108                "trim-newlines": "1.0.0"
     1109            },
     1110            "dependencies": {
     1111                "object-assign": {
     1112                    "version": "4.1.1",
     1113                    "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
     1114                    "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
     1115                    "dev": true
     1116                }
     1117            }
     1118        },
     1119        "mime-db": {
     1120            "version": "1.33.0",
     1121            "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz",
     1122            "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==",
     1123            "dev": true
     1124        },
     1125        "mime-types": {
     1126            "version": "2.1.18",
     1127            "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz",
     1128            "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==",
     1129            "dev": true,
     1130            "requires": {
     1131                "mime-db": "1.33.0"
     1132            }
     1133        },
     1134        "minimatch": {
     1135            "version": "0.2.14",
     1136            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz",
     1137            "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=",
     1138            "dev": true,
     1139            "requires": {
     1140                "lru-cache": "2.7.3",
     1141                "sigmund": "1.0.1"
     1142            }
     1143        },
     1144        "minimist": {
     1145            "version": "1.2.0",
     1146            "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
     1147            "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
     1148            "dev": true
     1149        },
     1150        "mkdirp": {
     1151            "version": "0.5.1",
     1152            "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
     1153            "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
     1154            "dev": true,
     1155            "requires": {
     1156                "minimist": "0.0.8"
     1157            },
     1158            "dependencies": {
     1159                "minimist": {
     1160                    "version": "0.0.8",
     1161                    "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
     1162                    "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
     1163                    "dev": true
     1164                }
     1165            }
     1166        },
     1167        "nan": {
     1168            "version": "2.10.0",
     1169            "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz",
     1170            "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==",
     1171            "dev": true
     1172        },
     1173        "node-gyp": {
     1174            "version": "3.6.2",
     1175            "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz",
     1176            "integrity": "sha1-m/vlRWIoYoSDjnUOrAUpWFP6HGA=",
     1177            "dev": true,
     1178            "requires": {
     1179                "fstream": "1.0.11",
     1180                "glob": "7.1.2",
     1181                "graceful-fs": "4.1.11",
     1182                "minimatch": "3.0.4",
     1183                "mkdirp": "0.5.1",
     1184                "nopt": "3.0.6",
     1185                "npmlog": "4.1.2",
     1186                "osenv": "0.1.5",
     1187                "request": "2.85.0",
     1188                "rimraf": "2.2.8",
     1189                "semver": "5.3.0",
     1190                "tar": "2.2.1",
     1191                "which": "1.0.9"
     1192            },
     1193            "dependencies": {
     1194                "glob": {
     1195                    "version": "7.1.2",
     1196                    "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
     1197                    "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
     1198                    "dev": true,
     1199                    "requires": {
     1200                        "fs.realpath": "1.0.0",
     1201                        "inflight": "1.0.6",
     1202                        "inherits": "2.0.3",
     1203                        "minimatch": "3.0.4",
     1204                        "once": "1.4.0",
     1205                        "path-is-absolute": "1.0.1"
     1206                    }
     1207                },
     1208                "graceful-fs": {
     1209                    "version": "4.1.11",
     1210                    "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
     1211                    "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
     1212                    "dev": true
     1213                },
     1214                "minimatch": {
     1215                    "version": "3.0.4",
     1216                    "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
     1217                    "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
     1218                    "dev": true,
     1219                    "requires": {
     1220                        "brace-expansion": "1.1.11"
     1221                    }
     1222                },
     1223                "nopt": {
     1224                    "version": "3.0.6",
     1225                    "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
     1226                    "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
     1227                    "dev": true,
     1228                    "requires": {
     1229                        "abbrev": "1.1.1"
     1230                    }
     1231                },
     1232                "semver": {
     1233                    "version": "5.3.0",
     1234                    "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
     1235                    "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
     1236                    "dev": true
     1237                }
     1238            }
     1239        },
     1240        "node-sass": {
     1241            "version": "3.13.1",
     1242            "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-3.13.1.tgz",
     1243            "integrity": "sha1-ckD7v/I5YwS0IjUn7TAgWJwAT8I=",
     1244            "dev": true,
     1245            "requires": {
     1246                "async-foreach": "0.1.3",
     1247                "chalk": "1.1.3",
     1248                "cross-spawn": "3.0.1",
     1249                "gaze": "1.1.2",
     1250                "get-stdin": "4.0.1",
     1251                "glob": "7.1.2",
     1252                "in-publish": "2.0.0",
     1253                "lodash.assign": "4.2.0",
     1254                "lodash.clonedeep": "4.5.0",
     1255                "meow": "3.7.0",
     1256                "mkdirp": "0.5.1",
     1257                "nan": "2.10.0",
     1258                "node-gyp": "3.6.2",
     1259                "npmlog": "4.1.2",
     1260                "request": "2.85.0",
     1261                "sass-graph": "2.2.4"
     1262            },
     1263            "dependencies": {
     1264                "gaze": {
     1265                    "version": "1.1.2",
     1266                    "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz",
     1267                    "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=",
     1268                    "dev": true,
     1269                    "requires": {
     1270                        "globule": "1.2.0"
     1271                    }
     1272                },
     1273                "glob": {
     1274                    "version": "7.1.2",
     1275                    "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
     1276                    "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
     1277                    "dev": true,
     1278                    "requires": {
     1279                        "fs.realpath": "1.0.0",
     1280                        "inflight": "1.0.6",
     1281                        "inherits": "2.0.3",
     1282                        "minimatch": "3.0.4",
     1283                        "once": "1.4.0",
     1284                        "path-is-absolute": "1.0.1"
     1285                    }
     1286                },
     1287                "globule": {
     1288                    "version": "1.2.0",
     1289                    "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.0.tgz",
     1290                    "integrity": "sha1-HcScaCLdnoovoAuiopUAboZkvQk=",
     1291                    "dev": true,
     1292                    "requires": {
     1293                        "glob": "7.1.2",
     1294                        "lodash": "4.17.5",
     1295                        "minimatch": "3.0.4"
     1296                    }
     1297                },
     1298                "lodash": {
     1299                    "version": "4.17.5",
     1300                    "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
     1301                    "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
     1302                    "dev": true
     1303                },
     1304                "minimatch": {
     1305                    "version": "3.0.4",
     1306                    "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
     1307                    "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
     1308                    "dev": true,
     1309                    "requires": {
     1310                        "brace-expansion": "1.1.11"
     1311                    }
     1312                }
     1313            }
     1314        },
     1315        "nopt": {
     1316            "version": "1.0.10",
     1317            "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
     1318            "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=",
     1319            "dev": true,
     1320            "requires": {
     1321                "abbrev": "1.1.1"
     1322            }
     1323        },
     1324        "noptify": {
     1325            "version": "0.0.3",
     1326            "resolved": "https://registry.npmjs.org/noptify/-/noptify-0.0.3.tgz",
     1327            "integrity": "sha1-WPZUpz2XU98MUdlobckhBKZ/S7s=",
     1328            "dev": true,
     1329            "requires": {
     1330                "nopt": "2.0.0"
     1331            },
     1332            "dependencies": {
     1333                "nopt": {
     1334                    "version": "2.0.0",
     1335                    "resolved": "https://registry.npmjs.org/nopt/-/nopt-2.0.0.tgz",
     1336                    "integrity": "sha1-ynQW8gpeP5w7hhgPlilfo9C1Lg0=",
     1337                    "dev": true,
     1338                    "requires": {
     1339                        "abbrev": "1.1.1"
     1340                    }
     1341                }
     1342            }
     1343        },
     1344        "normalize-package-data": {
     1345            "version": "2.4.0",
     1346            "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
     1347            "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
     1348            "dev": true,
     1349            "requires": {
     1350                "hosted-git-info": "2.6.0",
     1351                "is-builtin-module": "1.0.0",
     1352                "semver": "5.5.0",
     1353                "validate-npm-package-license": "3.0.3"
     1354            }
     1355        },
     1356        "npmlog": {
     1357            "version": "4.1.2",
     1358            "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
     1359            "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
     1360            "dev": true,
     1361            "requires": {
     1362                "are-we-there-yet": "1.1.4",
     1363                "console-control-strings": "1.1.0",
     1364                "gauge": "2.7.4",
     1365                "set-blocking": "2.0.0"
     1366            }
     1367        },
     1368        "number-is-nan": {
     1369            "version": "1.0.1",
     1370            "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
     1371            "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
     1372            "dev": true
     1373        },
     1374        "oauth-sign": {
     1375            "version": "0.8.2",
     1376            "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
     1377            "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
     1378            "dev": true
     1379        },
     1380        "object-assign": {
     1381            "version": "2.1.1",
     1382            "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz",
     1383            "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=",
     1384            "dev": true
     1385        },
     1386        "once": {
     1387            "version": "1.4.0",
     1388            "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
     1389            "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
     1390            "dev": true,
     1391            "requires": {
     1392                "wrappy": "1.0.2"
     1393            }
     1394        },
     1395        "onetime": {
     1396            "version": "1.1.0",
     1397            "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
     1398            "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=",
     1399            "dev": true
     1400        },
     1401        "os-homedir": {
     1402            "version": "1.0.2",
     1403            "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
     1404            "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
     1405            "dev": true
     1406        },
     1407        "os-locale": {
     1408            "version": "1.4.0",
     1409            "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
     1410            "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
     1411            "dev": true,
     1412            "requires": {
     1413                "lcid": "1.0.0"
     1414            }
     1415        },
     1416        "os-tmpdir": {
     1417            "version": "1.0.2",
     1418            "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
     1419            "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
     1420            "dev": true
     1421        },
     1422        "osenv": {
     1423            "version": "0.1.5",
     1424            "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
     1425            "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
     1426            "dev": true,
     1427            "requires": {
     1428                "os-homedir": "1.0.2",
     1429                "os-tmpdir": "1.0.2"
     1430            }
     1431        },
     1432        "parse-json": {
     1433            "version": "2.2.0",
     1434            "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
     1435            "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
     1436            "dev": true,
     1437            "requires": {
     1438                "error-ex": "1.3.1"
     1439            }
     1440        },
     1441        "path-exists": {
     1442            "version": "2.1.0",
     1443            "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
     1444            "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
     1445            "dev": true,
     1446            "requires": {
     1447                "pinkie-promise": "2.0.1"
     1448            }
     1449        },
     1450        "path-is-absolute": {
     1451            "version": "1.0.1",
     1452            "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
     1453            "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
     1454            "dev": true
     1455        },
     1456        "path-type": {
     1457            "version": "1.1.0",
     1458            "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
     1459            "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
     1460            "dev": true,
     1461            "requires": {
     1462                "graceful-fs": "4.1.11",
     1463                "pify": "2.3.0",
     1464                "pinkie-promise": "2.0.1"
     1465            },
     1466            "dependencies": {
     1467                "graceful-fs": {
     1468                    "version": "4.1.11",
     1469                    "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
     1470                    "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
     1471                    "dev": true
     1472                }
     1473            }
     1474        },
     1475        "performance-now": {
     1476            "version": "2.1.0",
     1477            "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
     1478            "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
     1479            "dev": true
     1480        },
     1481        "pify": {
     1482            "version": "2.3.0",
     1483            "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
     1484            "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
     1485            "dev": true
     1486        },
     1487        "pinkie": {
     1488            "version": "2.0.4",
     1489            "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
     1490            "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
     1491            "dev": true
     1492        },
     1493        "pinkie-promise": {
     1494            "version": "2.0.1",
     1495            "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
     1496            "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
     1497            "dev": true,
     1498            "requires": {
     1499                "pinkie": "2.0.4"
     1500            }
     1501        },
     1502        "process-nextick-args": {
     1503            "version": "2.0.0",
     1504            "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
     1505            "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
     1506            "dev": true
     1507        },
     1508        "pseudomap": {
     1509            "version": "1.0.2",
     1510            "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
     1511            "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
     1512            "dev": true
     1513        },
     1514        "punycode": {
     1515            "version": "1.4.1",
     1516            "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
     1517            "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
     1518            "dev": true
     1519        },
     1520        "qs": {
     1521            "version": "0.5.6",
     1522            "resolved": "https://registry.npmjs.org/qs/-/qs-0.5.6.tgz",
     1523            "integrity": "sha1-MbGtBYVnZRxSaSFQa5qHk5EaA4Q=",
     1524            "dev": true
     1525        },
     1526        "read-pkg": {
     1527            "version": "1.1.0",
     1528            "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
     1529            "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
     1530            "dev": true,
     1531            "requires": {
     1532                "load-json-file": "1.1.0",
     1533                "normalize-package-data": "2.4.0",
     1534                "path-type": "1.1.0"
     1535            }
     1536        },
     1537        "read-pkg-up": {
     1538            "version": "1.0.1",
     1539            "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
     1540            "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
     1541            "dev": true,
     1542            "requires": {
     1543                "find-up": "1.1.2",
     1544                "read-pkg": "1.1.0"
     1545            }
     1546        },
     1547        "readable-stream": {
     1548            "version": "2.3.6",
     1549            "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
     1550            "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
     1551            "dev": true,
     1552            "requires": {
     1553                "core-util-is": "1.0.2",
     1554                "inherits": "2.0.3",
     1555                "isarray": "1.0.0",
     1556                "process-nextick-args": "2.0.0",
     1557                "safe-buffer": "5.1.1",
     1558                "string_decoder": "1.1.1",
     1559                "util-deprecate": "1.0.2"
     1560            }
     1561        },
     1562        "redent": {
     1563            "version": "1.0.0",
     1564            "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
     1565            "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
     1566            "dev": true,
     1567            "requires": {
     1568                "indent-string": "2.1.0",
     1569                "strip-indent": "1.0.1"
     1570            }
     1571        },
     1572        "repeating": {
     1573            "version": "2.0.1",
     1574            "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
     1575            "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
     1576            "dev": true,
     1577            "requires": {
     1578                "is-finite": "1.0.2"
     1579            }
     1580        },
     1581        "request": {
     1582            "version": "2.85.0",
     1583            "resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz",
     1584            "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==",
     1585            "dev": true,
     1586            "requires": {
     1587                "aws-sign2": "0.7.0",
     1588                "aws4": "1.7.0",
     1589                "caseless": "0.12.0",
     1590                "combined-stream": "1.0.6",
     1591                "extend": "3.0.1",
     1592                "forever-agent": "0.6.1",
     1593                "form-data": "2.3.2",
     1594                "har-validator": "5.0.3",
     1595                "hawk": "6.0.2",
     1596                "http-signature": "1.2.0",
     1597                "is-typedarray": "1.0.0",
     1598                "isstream": "0.1.2",
     1599                "json-stringify-safe": "5.0.1",
     1600                "mime-types": "2.1.18",
     1601                "oauth-sign": "0.8.2",
     1602                "performance-now": "2.1.0",
     1603                "qs": "6.5.1",
     1604                "safe-buffer": "5.1.1",
     1605                "stringstream": "0.0.5",
     1606                "tough-cookie": "2.3.4",
     1607                "tunnel-agent": "0.6.0",
     1608                "uuid": "3.2.1"
     1609            },
     1610            "dependencies": {
     1611                "qs": {
     1612                    "version": "6.5.1",
     1613                    "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",
     1614                    "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==",
     1615                    "dev": true
     1616                }
     1617            }
     1618        },
     1619        "require-directory": {
     1620            "version": "2.1.1",
     1621            "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
     1622            "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
     1623            "dev": true
     1624        },
     1625        "require-main-filename": {
     1626            "version": "1.0.1",
     1627            "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
     1628            "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
     1629            "dev": true
     1630        },
     1631        "resolve": {
     1632            "version": "0.5.1",
     1633            "resolved": "https://registry.npmjs.org/resolve/-/resolve-0.5.1.tgz",
     1634            "integrity": "sha1-FeSiIsQja81M+FRUQSwtD7ZSRXY=",
     1635            "dev": true
     1636        },
     1637        "rimraf": {
     1638            "version": "2.2.8",
     1639            "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz",
     1640            "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=",
     1641            "dev": true
     1642        },
     1643        "safe-buffer": {
     1644            "version": "5.1.1",
     1645            "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
     1646            "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
     1647            "dev": true
     1648        },
     1649        "sass-graph": {
     1650            "version": "2.2.4",
     1651            "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz",
     1652            "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=",
     1653            "dev": true,
     1654            "requires": {
     1655                "glob": "7.1.2",
     1656                "lodash": "4.17.5",
     1657                "scss-tokenizer": "0.2.3",
     1658                "yargs": "7.1.0"
     1659            },
     1660            "dependencies": {
     1661                "glob": {
     1662                    "version": "7.1.2",
     1663                    "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
     1664                    "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
     1665                    "dev": true,
     1666                    "requires": {
     1667                        "fs.realpath": "1.0.0",
     1668                        "inflight": "1.0.6",
     1669                        "inherits": "2.0.3",
     1670                        "minimatch": "3.0.4",
     1671                        "once": "1.4.0",
     1672                        "path-is-absolute": "1.0.1"
     1673                    }
     1674                },
     1675                "lodash": {
     1676                    "version": "4.17.5",
     1677                    "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
     1678                    "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
     1679                    "dev": true
     1680                },
     1681                "minimatch": {
     1682                    "version": "3.0.4",
     1683                    "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
     1684                    "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
     1685                    "dev": true,
     1686                    "requires": {
     1687                        "brace-expansion": "1.1.11"
     1688                    }
     1689                }
     1690            }
     1691        },
     1692        "scss-tokenizer": {
     1693            "version": "0.2.3",
     1694            "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz",
     1695            "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=",
     1696            "dev": true,
     1697            "requires": {
     1698                "js-base64": "2.4.3",
     1699                "source-map": "0.4.4"
     1700            }
     1701        },
     1702        "semver": {
     1703            "version": "5.5.0",
     1704            "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
     1705            "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
     1706            "dev": true
     1707        },
     1708        "set-blocking": {
     1709            "version": "2.0.0",
     1710            "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
     1711            "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
     1712            "dev": true
     1713        },
     1714        "set-immediate-shim": {
     1715            "version": "1.0.1",
     1716            "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
     1717            "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=",
     1718            "dev": true
     1719        },
     1720        "sigmund": {
     1721            "version": "1.0.1",
     1722            "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
     1723            "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=",
     1724            "dev": true
     1725        },
     1726        "signal-exit": {
     1727            "version": "3.0.2",
     1728            "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
     1729            "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
     1730            "dev": true
     1731        },
     1732        "sntp": {
     1733            "version": "2.1.0",
     1734            "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz",
     1735            "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==",
     1736            "dev": true,
     1737            "requires": {
     1738                "hoek": "4.2.1"
     1739            }
     1740        },
     1741        "source-map": {
     1742            "version": "0.4.4",
     1743            "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
     1744            "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
     1745            "dev": true,
     1746            "requires": {
     1747                "amdefine": "1.0.1"
     1748            }
     1749        },
     1750        "spdx-correct": {
     1751            "version": "3.0.0",
     1752            "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
     1753            "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",
     1754            "dev": true,
     1755            "requires": {
     1756                "spdx-expression-parse": "3.0.0",
     1757                "spdx-license-ids": "3.0.0"
     1758            }
     1759        },
     1760        "spdx-exceptions": {
     1761            "version": "2.1.0",
     1762            "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz",
     1763            "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==",
     1764            "dev": true
     1765        },
     1766        "spdx-expression-parse": {
     1767            "version": "3.0.0",
     1768            "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
     1769            "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
     1770            "dev": true,
     1771            "requires": {
     1772                "spdx-exceptions": "2.1.0",
     1773                "spdx-license-ids": "3.0.0"
     1774            }
     1775        },
     1776        "spdx-license-ids": {
     1777            "version": "3.0.0",
     1778            "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz",
     1779            "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==",
     1780            "dev": true
     1781        },
     1782        "sshpk": {
     1783            "version": "1.14.1",
     1784            "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz",
     1785            "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=",
     1786            "dev": true,
     1787            "requires": {
     1788                "asn1": "0.2.3",
     1789                "assert-plus": "1.0.0",
     1790                "bcrypt-pbkdf": "1.0.1",
     1791                "dashdash": "1.14.1",
     1792                "ecc-jsbn": "0.1.1",
     1793                "getpass": "0.1.7",
     1794                "jsbn": "0.1.1",
     1795                "tweetnacl": "0.14.5"
     1796            }
     1797        },
     1798        "stack-trace": {
     1799            "version": "0.0.7",
     1800            "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.7.tgz",
     1801            "integrity": "sha1-xy4Il0T8Nln1CM3ONiGvVjTsD/8=",
     1802            "dev": true
     1803        },
     1804        "string-width": {
     1805            "version": "1.0.2",
     1806            "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
     1807            "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
     1808            "dev": true,
     1809            "requires": {
     1810                "code-point-at": "1.1.0",
     1811                "is-fullwidth-code-point": "1.0.0",
     1812                "strip-ansi": "3.0.1"
     1813            }
     1814        },
     1815        "string_decoder": {
     1816            "version": "1.1.1",
     1817            "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
     1818            "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
     1819            "dev": true,
     1820            "requires": {
     1821                "safe-buffer": "5.1.1"
     1822            }
     1823        },
     1824        "stringstream": {
     1825            "version": "0.0.5",
     1826            "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
     1827            "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=",
     1828            "dev": true
     1829        },
     1830        "strip-ansi": {
     1831            "version": "3.0.1",
     1832            "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
     1833            "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
     1834            "dev": true,
     1835            "requires": {
     1836                "ansi-regex": "2.1.1"
     1837            }
     1838        },
     1839        "strip-bom": {
     1840            "version": "2.0.0",
     1841            "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
     1842            "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
     1843            "dev": true,
     1844            "requires": {
     1845                "is-utf8": "0.2.1"
     1846            }
     1847        },
     1848        "strip-indent": {
     1849            "version": "1.0.1",
     1850            "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
     1851            "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
     1852            "dev": true,
     1853            "requires": {
     1854                "get-stdin": "4.0.1"
     1855            }
     1856        },
     1857        "supports-color": {
     1858            "version": "2.0.0",
     1859            "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
     1860            "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
     1861            "dev": true
     1862        },
     1863        "tar": {
     1864            "version": "2.2.1",
     1865            "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
     1866            "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=",
     1867            "dev": true,
     1868            "requires": {
     1869                "block-stream": "0.0.9",
     1870                "fstream": "1.0.11",
     1871                "inherits": "2.0.3"
     1872            }
     1873        },
     1874        "tiny-lr-fork": {
     1875            "version": "0.0.5",
     1876            "resolved": "https://registry.npmjs.org/tiny-lr-fork/-/tiny-lr-fork-0.0.5.tgz",
     1877            "integrity": "sha1-Hpnh4qhGm3NquX2X7vqYxx927Qo=",
     1878            "dev": true,
     1879            "requires": {
     1880                "debug": "0.7.4",
     1881                "faye-websocket": "0.4.4",
     1882                "noptify": "0.0.3",
     1883                "qs": "0.5.6"
     1884            }
     1885        },
     1886        "tough-cookie": {
     1887            "version": "2.3.4",
     1888            "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
     1889            "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
     1890            "dev": true,
     1891            "requires": {
     1892                "punycode": "1.4.1"
     1893            }
     1894        },
     1895        "trim-newlines": {
     1896            "version": "1.0.0",
     1897            "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
     1898            "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
     1899            "dev": true
     1900        },
     1901        "tunnel-agent": {
     1902            "version": "0.6.0",
     1903            "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
     1904            "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
     1905            "dev": true,
     1906            "requires": {
     1907                "safe-buffer": "5.1.1"
     1908            }
     1909        },
     1910        "tweetnacl": {
     1911            "version": "0.14.5",
     1912            "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
     1913            "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
     1914            "dev": true,
     1915            "optional": true
     1916        },
     1917        "underscore": {
     1918            "version": "1.7.0",
     1919            "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz",
     1920            "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=",
     1921            "dev": true
     1922        },
     1923        "underscore.string": {
     1924            "version": "2.2.1",
     1925            "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz",
     1926            "integrity": "sha1-18D6KvXVoaZ/QlPa7pgTLnM/Dxk=",
     1927            "dev": true
     1928        },
     1929        "util-deprecate": {
     1930            "version": "1.0.2",
     1931            "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
     1932            "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
     1933            "dev": true
     1934        },
     1935        "uuid": {
     1936            "version": "3.2.1",
     1937            "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz",
     1938            "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==",
     1939            "dev": true
     1940        },
     1941        "validate-npm-package-license": {
     1942            "version": "3.0.3",
     1943            "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz",
     1944            "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==",
     1945            "dev": true,
     1946            "requires": {
     1947                "spdx-correct": "3.0.0",
     1948                "spdx-expression-parse": "3.0.0"
     1949            }
     1950        },
     1951        "verror": {
     1952            "version": "1.10.0",
     1953            "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
     1954            "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
     1955            "dev": true,
     1956            "requires": {
     1957                "assert-plus": "1.0.0",
     1958                "core-util-is": "1.0.2",
     1959                "extsprintf": "1.3.0"
     1960            }
     1961        },
     1962        "which": {
     1963            "version": "1.0.9",
     1964            "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz",
     1965            "integrity": "sha1-RgwdoPgQED0DIam2M6+eV15kSG8=",
     1966            "dev": true
     1967        },
     1968        "which-module": {
     1969            "version": "1.0.0",
     1970            "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
     1971            "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=",
     1972            "dev": true
     1973        },
     1974        "wide-align": {
     1975            "version": "1.1.2",
     1976            "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz",
     1977            "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==",
     1978            "dev": true,
     1979            "requires": {
     1980                "string-width": "1.0.2"
     1981            }
     1982        },
     1983        "wrap-ansi": {
     1984            "version": "2.1.0",
     1985            "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
     1986            "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
     1987            "dev": true,
     1988            "requires": {
     1989                "string-width": "1.0.2",
     1990                "strip-ansi": "3.0.1"
     1991            }
     1992        },
     1993        "wrappy": {
     1994            "version": "1.0.2",
     1995            "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
     1996            "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
     1997            "dev": true
     1998        },
     1999        "y18n": {
     2000            "version": "3.2.1",
     2001            "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
     2002            "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
     2003            "dev": true
     2004        },
     2005        "yallist": {
     2006            "version": "2.1.2",
     2007            "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
     2008            "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
     2009            "dev": true
     2010        },
     2011        "yargs": {
     2012            "version": "7.1.0",
     2013            "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz",
     2014            "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=",
     2015            "dev": true,
     2016            "requires": {
     2017                "camelcase": "3.0.0",
     2018                "cliui": "3.2.0",
     2019                "decamelize": "1.2.0",
     2020                "get-caller-file": "1.0.2",
     2021                "os-locale": "1.4.0",
     2022                "read-pkg-up": "1.0.1",
     2023                "require-directory": "2.1.1",
     2024                "require-main-filename": "1.0.1",
     2025                "set-blocking": "2.0.0",
     2026                "string-width": "1.0.2",
     2027                "which-module": "1.0.0",
     2028                "y18n": "3.2.1",
     2029                "yargs-parser": "5.0.0"
     2030            },
     2031            "dependencies": {
     2032                "camelcase": {
     2033                    "version": "3.0.0",
     2034                    "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
     2035                    "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
     2036                    "dev": true
     2037                }
     2038            }
     2039        },
     2040        "yargs-parser": {
     2041            "version": "5.0.0",
     2042            "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz",
     2043            "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=",
     2044            "dev": true,
     2045            "requires": {
     2046                "camelcase": "3.0.0"
     2047            },
     2048            "dependencies": {
     2049                "camelcase": {
     2050                    "version": "3.0.0",
     2051                    "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
     2052                    "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
     2053                    "dev": true
     2054                }
     2055            }
     2056        }
     2057    }
     2058}
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/package.json

     
    1414        "matchdep": "~0.3.0"
    1515    }
    1616}
    17 
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/scss/main.scss

     
    11701170                .comment-list li.depth-1,
    11711171                #comment-preview {
    11721172                        border: 1px solid #dfdfdf;
    1173                         border-radius: 2px;
     1173                        border-radius: 2px;     
     1174                        width: 100%;
    11741175                }
    11751176
    11761177                // Feedback
     
    13621363                        padding: 0 5px;
    13631364                }
    13641365
    1365                 .comment-form ul {
     1366                .comment-form ul, .feedback-form ul {
    13661367                        margin-left: 1.5em;
    13671368                }
     1369
     1370                .feedback-form ul li {
     1371                        margin: 0;
     1372                        overflow: visible;
     1373                }
    13681374        }
    13691375
    13701376        &.single-post {
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/stylesheets/main.css

     
    15611561.devhub-wrap .single-wp-parser-class #comment-preview {
    15621562  border: 1px solid #dfdfdf;
    15631563  border-radius: 2px;
     1564  width: 100%;
    15641565}
    15651566
    15661567.devhub-wrap .single-wp-parser-function .comment-list li.depth-2, .devhub-wrap .single-wp-parser-method .comment-list li.depth-2, .devhub-wrap .single-wp-parser-hook .comment-list li.depth-2, .devhub-wrap .single-wp-parser-class .comment-list li.depth-2 {
     
    17351736  padding: 0 5px;
    17361737}
    17371738
    1738 .devhub-wrap .single-wp-parser-function .comment-form ul, .devhub-wrap .single-wp-parser-method .comment-form ul, .devhub-wrap .single-wp-parser-hook .comment-form ul, .devhub-wrap .single-wp-parser-class .comment-form ul {
     1739.devhub-wrap .single-wp-parser-function .comment-form ul, .devhub-wrap .single-wp-parser-function .feedback-form ul, .devhub-wrap .single-wp-parser-method .comment-form ul, .devhub-wrap .single-wp-parser-method .feedback-form ul, .devhub-wrap .single-wp-parser-hook .comment-form ul, .devhub-wrap .single-wp-parser-hook .feedback-form ul, .devhub-wrap .single-wp-parser-class .comment-form ul, .devhub-wrap .single-wp-parser-class .feedback-form ul {
    17391740  margin-left: 1.5em;
    17401741}
    17411742
     1743.devhub-wrap .single-wp-parser-function .feedback-form ul li, .devhub-wrap .single-wp-parser-method .feedback-form ul li, .devhub-wrap .single-wp-parser-hook .feedback-form ul li, .devhub-wrap .single-wp-parser-class .feedback-form ul li {
     1744  margin: 0;
     1745  overflow: visible;
     1746}
     1747
    17421748.devhub-wrap.single-post .comment-list,
    17431749.devhub-wrap.single-post .comment-list ol {
    17441750  list-style: none;