WordPress.org

Make WordPress Core

Ticket #42852: 42852.3.patch

File 42852.3.patch, 11.4 KB (added by bookdude13, 5 months ago)

Refreshed patch

  • src/js/_enqueues/admin/user-profile.js

    diff --git src/js/_enqueues/admin/user-profile.js src/js/_enqueues/admin/user-profile.js
    index ff4830242c..117fe5247d 100644
     
    1414                $toggleButton,
    1515                $submitButtons,
    1616                $submitButton,
    17                 currentPass;
     17                currentPass,
     18                $passwordWrapper;
    1819
    1920        function generatePassword() {
    2021                if ( typeof zxcvbn !== 'function' ) {
    2122                        setTimeout( generatePassword, 50 );
    2223                        return;
    23                 } else if ( ! $pass1.val() ) {
     24                } else if ( ! $pass1.val() || $passwordWrapper.hasClass( 'is-open' ) ) {
    2425                        // zxcvbn loaded before user entered password.
    2526                        $pass1.val( $pass1.data( 'pw' ) );
    2627                        $pass1.trigger( 'pwupdate' );
    2728                        showOrHideWeakPasswordCheckbox();
    28                 }
    29                 else {
     29                } else {
    3030                        // zxcvbn loaded after the user entered password, check strength.
    3131                        check_pass_strength();
    3232                        showOrHideWeakPasswordCheckbox();
    3333                }
    3434
     35                // Install screen
    3536                if ( 1 !== parseInt( $toggleButton.data( 'start-masked' ), 10 ) ) {
     37                         // Show the password not masked if admin_password hasn't been posted yet.
    3638                        $pass1.attr( 'type', 'text' );
    3739                } else {
     40                        // Otherwise, mask the password.
    3841                        $toggleButton.trigger( 'click' );
    3942                }
    4043
     
    7578        }
    7679
    7780        function bindToggleButton() {
    78                 $toggleButton = $pass1Row.find('.wp-hide-pw');
     81                $toggleButton = $pass1Row.find( '.wp-hide-pw' );
    7982                $toggleButton.show().on( 'click', function () {
    8083                        if ( 'password' === $pass1.attr( 'type' ) ) {
    8184                                $pass1.attr( 'type', 'text' );
     
    8487                                $pass1.attr( 'type', 'password' );
    8588                                resetToggle( true );
    8689                        }
    87 
    88                         $pass1.focus();
    89 
    90                         if ( ! _.isUndefined( $pass1[0].setSelectionRange ) ) {
    91                                 $pass1[0].setSelectionRange( 0, 100 );
    92                         }
    9390                });
    9491        }
    9592
    9693        function bindPasswordForm() {
    97                 var $passwordWrapper,
    98                         $generateButton,
     94                var $generateButton,
    9995                        $cancelButton;
    10096
    10197                $pass1Row = $( '.user-pass1-wrap, .user-pass-wrap' );
    10298
    10399                // Hide the confirm password field when JavaScript support is enabled.
    104                 $('.user-pass2-wrap').hide();
     100                $( '.user-pass2-wrap' ).hide();
    105101
    106102                $submitButton = $( '#submit, #wp-submit' ).on( 'click', function () {
    107103                        updateLock = false;
     
    115111                        $submitButtons.prop( 'disabled', ! $weakCheckbox.prop( 'checked' ) );
    116112                } );
    117113
    118                 $pass1 = $('#pass1');
     114                $pass1 = $( '#pass1' );
    119115                if ( $pass1.length ) {
    120116                        bindPass1();
    121117                } else {
     
    123119                        $pass1 = $( '#user_pass' );
    124120                }
    125121
    126                 /**
     122                /*
    127123                 * Fix a LastPass mismatch issue, LastPass only changes pass2.
    128124                 *
    129125                 * This fixes the issue by copying any changes from the hidden
     
    149145
    150146                bindToggleButton();
    151147
    152                 if ( $generateButton.length ) {
    153                         $passwordWrapper.hide();
    154                 }
    155 
    156                 $generateButton.show();
    157148                $generateButton.on( 'click', function () {
    158149                        updateLock = true;
    159150
    160                         $generateButton.hide();
    161                         $passwordWrapper.show();
     151                        $generateButton.attr( 'aria-expanded', 'true' );
     152
     153                        $passwordWrapper
     154                                .show()
     155                                .addClass( 'is-open' );
    162156
    163157                        // Enable the inputs when showing.
    164158                        $pass1.attr( 'disabled', false );
    165159                        $pass2.attr( 'disabled', false );
    166160
    167                         if ( $pass1.val().length === 0 ) {
    168                                 generatePassword();
    169                         }
     161                        // Always generate a password when clicking the button.
     162                        wp.ajax.post( 'generate-password' )
     163                                .done( function( data ) {
     164                                        $pass1.data( 'pw', data );
     165                                        generatePassword();
     166                                        resetToggle();
     167                                } );
    170168                } );
    171169
    172170                $cancelButton = $pass1Row.find( 'button.wp-cancel-pw' );
     
    174172                        updateLock = false;
    175173
    176174                        // Clear any entered password.
    177                         $pass1.val( '' );
    178 
    179                         // Generate a new password.
    180                         wp.ajax.post( 'generate-password' )
    181                                 .done( function( data ) {
    182                                         $pass1.data( 'pw', data );
    183                                 } );
    184 
    185                         $generateButton.show().focus();
    186                         $passwordWrapper.hide();
    187 
    188                         $weakRow.hide( 0, function () {
    189                                 $weakCheckbox.removeProp( 'checked' );
    190                         } );
    191 
    192                         // Disable the inputs when hiding to prevent autofill and submission.
    193                         $pass1.prop( 'disabled', true );
    194                         $pass2.prop( 'disabled', true );
    195 
    196                         resetToggle( false );
    197 
    198                         if ( $pass1Row.closest( 'form' ).is( '#your-profile' ) ) {
    199                                 // Clear password field to prevent update.
    200                                 $pass1.val( '' ).trigger( 'pwupdate' );
    201                                 $submitButtons.prop( 'disabled', false );
    202                         }
     175                        $pass1.val( '' ).trigger( 'pwupdate' );
    203176                } );
    204177
    205178                $pass1Row.closest( 'form' ).on( 'submit', function () {
     
    313286                        });
    314287
    315288                        /**
    316                          * Replaces "Howdy, *" in the admin toolbar whenever the display name dropdown is updated for one's own profile.
     289                         * Replaces "Howdy, *" in the admin toolbar whenever the display name
     290                         dropdown is updated for one's own profile.
    317291                         */
    318292                        select.on( 'change', function() {
    319293                                if ( user_id !== current_user_id ) {
     
    399373
    400374        window.generatePassword = generatePassword;
    401375
    402         /* Warn the user if password was generated but not saved */
     376        // Warn the user if password was generated but not saved.
    403377        $( window ).on( 'beforeunload', function () {
    404378                if ( true === updateLock ) {
    405379                        return userProfileL10n.warn;
  • src/wp-admin/css/forms.css

    diff --git src/wp-admin/css/forms.css src/wp-admin/css/forms.css
    index c364ca403d..6b27c0d4b1 100644
    fieldset label, 
    589589        padding-top: 8px;
    590590}
    591591
     592.wp-generate-pw + .wp-pwd {
     593        margin-top: 1em;
     594}
     595
    592596.wp-pwd [type="text"],
    593597.wp-pwd [type="password"] {
    594598        margin-bottom: 0;
  • src/wp-admin/css/login.css

    diff --git src/wp-admin/css/login.css src/wp-admin/css/login.css
    index d5c60f117a..77b2828175 100644
    p { 
    7979        margin-bottom: 15px;
    8080}
    8181
     82.login .wp-hide-pw-wrapper {
     83        display: table-cell;
     84        vertical-align: top;
     85}
     86
     87.login .button.button-secondary {
     88        height: 36px;
     89        margin: 0;
     90        border-radius: 0;
     91        line-height: normal;
     92}
     93
     94.xxlogin .xxwp-hide-pw .xxdashicons {
     95        position: static;
     96}
     97
    8298.login .button.wp-hide-pw {
    8399        background: transparent;
    84100        border: 1px solid transparent;
  • src/wp-admin/user-edit.php

    diff --git src/wp-admin/user-edit.php src/wp-admin/user-edit.php
    index de5131af24..73efdc0e1e 100644
    endif; 
    628628        <th><label for="pass1"><?php _e( 'New Password' ); ?></label></th>
    629629        <td>
    630630                <input class="hidden" value=" " /><!-- #24364 workaround -->
    631                 <button type="button" class="button wp-generate-pw hide-if-no-js"><?php _e( 'Generate Password' ); ?></button>
     631                <button type="button" class="button wp-generate-pw hide-if-no-js" aria-expanded="false"><?php _e( 'Set New Password' ); ?></button>
    632632                <div class="wp-pwd hide-if-js">
    633633                        <span class="password-input-wrapper">
    634634                                <input type="password" name="pass1" id="pass1" class="regular-text" value="" autocomplete="off" data-pw="<?php echo esc_attr( wp_generate_password( 24 ) ); ?>" aria-describedby="pass-strength-result" />
    endif; 
    637637                                <span class="dashicons dashicons-hidden" aria-hidden="true"></span>
    638638                                <span class="text"><?php _e( 'Hide' ); ?></span>
    639639                        </button>
    640                         <button type="button" class="button wp-cancel-pw hide-if-no-js" data-toggle="0" aria-label="<?php esc_attr_e( 'Cancel password change' ); ?>">
     640                        <button type="button" class="button wp-cancel-pw hide-if-no-js" data-toggle="0" aria-label="<?php esc_attr_e( 'Cancel' ); ?>">
    641641                                <span class="dashicons dashicons-no" aria-hidden="true"></span>
    642642                                <span class="text"><?php _e( 'Cancel' ); ?></span>
    643643                        </button>
    endif; 
    648648<tr class="user-pass2-wrap hide-if-js">
    649649        <th scope="row"><label for="pass2"><?php _e( 'Repeat New Password' ); ?></label></th>
    650650        <td>
    651         <input name="pass2" type="password" id="pass2" class="regular-text" value="" autocomplete="off" />
    652         <p class="description"><?php _e( 'Type your new password again.' ); ?></p>
     651        <input name="pass2" type="password" id="pass2" class="regular-text" value="" autocomplete="off" aria-describedby="pass2-desc" />
     652        <?php if ( IS_PROFILE_PAGE ) : ?>
     653                <p class="description"><?php _e( 'Type your new password again.' ); ?></p>
     654        <?php else : ?>
     655                <p class="description"><?php _e( 'Type the new password again.' ); ?></p>
     656        <?php endif; ?>
    653657        </td>
    654658</tr>
    655659<tr class="pw-weak">
    endif; 
    657661        <td>
    658662                <label>
    659663                        <input type="checkbox" name="pw_weak" class="pw-checkbox" />
    660                         <span id="pw-weak-text-label"><?php _e( 'Confirm use of potentially weak password' ); ?></span>
     664                        <span id="pw-weak-text-label"><?php _e( 'Confirm use of weak password' ); ?></span>
    661665                </label>
    662666        </td>
    663667</tr>
  • src/wp-admin/user-new.php

    diff --git src/wp-admin/user-new.php src/wp-admin/user-new.php
    index dff49fecf0..583324cb4d 100644
    if ( current_user_can( 'create_users' ) ) { 
    507507                </th>
    508508                <td>
    509509                        <input class="hidden" value=" " /><!-- #24364 workaround -->
    510                         <button type="button" class="button wp-generate-pw hide-if-no-js"><?php _e( 'Show password' ); ?></button>
     510                        <button type="button" class="button wp-generate-pw hide-if-no-js" aria-expanded="false"><?php _e( 'Set New Password' ); ?></button>
    511511                        <div class="wp-pwd hide-if-js">
    512512                                <?php $initial_password = wp_generate_password( 24 ); ?>
    513513                                <span class="password-input-wrapper">
    if ( current_user_can( 'create_users' ) ) { 
    517517                                        <span class="dashicons dashicons-hidden" aria-hidden="true"></span>
    518518                                        <span class="text"><?php _e( 'Hide' ); ?></span>
    519519                                </button>
    520                                 <button type="button" class="button wp-cancel-pw hide-if-no-js" data-toggle="0" aria-label="<?php esc_attr_e( 'Cancel password change' ); ?>">
     520                                <button type="button" class="button wp-cancel-pw hide-if-no-js" data-toggle="0" aria-label="<?php esc_attr_e( 'Cancel' ); ?>">
    521521                                        <span class="dashicons dashicons-no" aria-hidden="true"></span>
    522522                                        <span class="text"><?php _e( 'Cancel' ); ?></span>
    523523                                </button>
    if ( current_user_can( 'create_users' ) ) { 
    528528        <tr class="form-field form-required user-pass2-wrap hide-if-js">
    529529                <th scope="row"><label for="pass2"><?php _e( 'Repeat Password' ); ?> <span class="description"><?php _e( '(required)' ); ?></span></label></th>
    530530                <td>
    531                 <input name="pass2" type="password" id="pass2" autocomplete="off" />
     531                <input name="pass2" type="password" id="pass2" autocomplete="off" aria-describedby="pass2-desc" />
     532                <p class="description" id="pass2-desc"><?php _e( 'Type the password again.' ); ?></p>
    532533                </td>
    533534        </tr>
    534535        <tr class="pw-weak">
  • src/wp-login.php

    diff --git src/wp-login.php src/wp-login.php
    index 597725e11d..3e50d2d211 100644
    switch ( $action ) { 
    970970                                        <label for="pass1"><?php _e( 'New password' ); ?></label>
    971971                                </p>
    972972
    973                                 <div class="wp-pwd">
     973                                <div class="login-wp-pwd">
    974974                                        <input type="password" data-reveal="1" data-pw="<?php echo esc_attr( wp_generate_password( 16 ) ); ?>" name="pass1" id="pass1" class="input password-input" size="24" value="" autocomplete="off" aria-describedby="pass-strength-result" />
    975975
    976                                         <button type="button" class="button button-secondary wp-hide-pw hide-if-no-js" data-toggle="0" aria-label="<?php esc_attr_e( 'Hide password' ); ?>">
    977                                                 <span class="dashicons dashicons-hidden" aria-hidden="true"></span>
    978                                         </button>
     976                                        <span class="wp-hide-pw-wrapper">
     977                                                <button type="button" class="button button-secondary wp-hide-pw hide-if-no-js" data-toggle="0" aria-label="<?php esc_attr_e( 'Hide password' ); ?>">
     978                                                        <span class="dashicons dashicons-hidden" aria-hidden="true"></span>
     979                                                </button>
     980                                        </span>
    979981                                        <div id="pass-strength-result" class="hide-if-no-js" aria-live="polite"><?php _e( 'Strength indicator' ); ?></div>
    980982                                </div>
    981983                                <div class="pw-weak">