diff --git a/src/wp-admin/includes/class-wp-plugin-install-list-table.php b/src/wp-admin/includes/class-wp-plugin-install-list-table.php index 99aad1210b..6e389b1a2e 100644 --- a/src/wp-admin/includes/class-wp-plugin-install-list-table.php +++ b/src/wp-admin/includes/class-wp-plugin-install-list-table.php @@ -476,6 +476,8 @@ class WP_Plugin_Install_List_Table extends WP_List_Table { $action_links[] = ''; } elseif ( current_user_can( 'activate_plugins' ) ) { $button_text = __( 'Activate' ); + /* translators: %s: Plugin name */ + $button_label = _x( 'Activate %s', 'plugin' ); $activate_url = add_query_arg( array( '_wpnonce' => wp_create_nonce( 'activate-plugin_' . $status['file'] ), 'action' => 'activate', @@ -484,14 +486,15 @@ class WP_Plugin_Install_List_Table extends WP_List_Table { if ( is_network_admin() ) { $button_text = __( 'Network Activate' ); + /* translators: %s: Plugin name */ + $button_label = _x( 'Network Activate %s', 'plugin' ); $activate_url = add_query_arg( array( 'networkwide' => 1 ), $activate_url ); } $action_links[] = sprintf( '%3$s', esc_url( $activate_url ), - /* translators: %s: Plugin name */ - esc_attr( sprintf( _x( 'Activate %s', 'plugin' ), $plugin['name'] ) ), + esc_attr( sprintf( $button_label, $plugin['name'] ) ), $button_text ); } else { diff --git a/src/wp-admin/js/updates.js b/src/wp-admin/js/updates.js index 688ddb1f05..9c932056e9 100644 --- a/src/wp-admin/js/updates.js +++ b/src/wp-admin/js/updates.js @@ -523,11 +523,14 @@ $message = $( '[data-slug="' + args.slug + '"]' ); } - $message.text( wp.updates.l10n.installing ); + if ( $message.html() !== wp.updates.l10n.installing ) { + $message.data( 'originaltext', $message.html() ); + } $message .addClass( 'updating-message' ) - .attr( 'aria-label', wp.updates.l10n.pluginInstallingLabel.replace( '%s', $message.data( 'name' ) ) ); + .attr( 'aria-label', wp.updates.l10n.pluginInstallingLabel.replace( '%s', $message.data( 'name' ) ) ) + .text( wp.updates.l10n.installing ); wp.a11y.speak( wp.updates.l10n.installingMsg, 'polite' ); @@ -1505,7 +1508,7 @@ // Restore callbacks. response = wp.updates._addCallbacks( response, action ); - wp.updates.queue.push( { + wp.updates.queue.unshift( { action: action, /* @@ -1708,13 +1711,11 @@ $updatingMessage.removeClass( 'updating-message' ); } else if ( 'plugins' === pagenow || 'plugins-network' === pagenow ) { $message = $( 'tr[data-plugin="' + job.data.plugin + '"]' ).find( '.update-message' ); - } else if ( 'plugin-install' === pagenow || 'plugin-install-network' === pagenow ) { - $message = $( '.update-now.updating-message' ); } else { $message = $updatingMessage; } - if ( $message ) { + if ( $message && $message.hasClass( 'updating-message' ) ) { originalText = $message.data( 'originaltext' ); if ( 'undefined' === typeof originalText ) { @@ -1724,6 +1725,14 @@ $message .removeClass( 'updating-message' ) .html( originalText ); + + if ( 'plugin-install' === pagenow || 'plugin-install-network' === pagenow ) { + if ( 'update-plugin' === job.action ) { + $message.attr( 'aria-label', wp.updates.l10n.updateNowLabel.replace( '%s', $message.data( 'name' ) ) ); + } else if ( 'install-plugin' === job.action ) { + $message.attr( 'aria-label', wp.updates.l10n.installNowLabel.replace( '%s', $message.data( 'name' ) ) ); + } + } } wp.a11y.speak( wp.updates.l10n.updateCancel, 'polite' ); @@ -1999,14 +2008,14 @@ // Find all the checkboxes which have been checked. itemsSelected.each( function( index, element ) { - var $checkbox = $( element ), + var $checkbox = $( element ), $itemRow = $checkbox.parents( 'tr' ); - // Un-check the box. - $checkbox.prop( 'checked', false ); - // Only add update-able items to the update queue. if ( 'update-selected' === bulkAction && ( ! $itemRow.hasClass( 'update' ) || $itemRow.find( 'notice-error' ).length ) ) { + + // Un-check the box. + $checkbox.prop( 'checked', false ); return; } @@ -2022,17 +2031,20 @@ // Display bulk notification for updates of any kind. $document.on( 'wp-plugin-update-success wp-plugin-update-error wp-theme-update-success wp-theme-update-error', function( event, response ) { - var $bulkActionNotice, itemName; + var $itemRow = $( '[data-slug="' + response.slug + '"]' ), + $bulkActionNotice, itemName; if ( 'wp-' + response.update + '-update-success' === event.type ) { success++; } else { - itemName = response.pluginName ? response.pluginName : $( '[data-slug="' + response.slug + '"]' ).find( '.column-primary strong' ).text(); + itemName = response.pluginName ? response.pluginName : $itemRow.find( '.column-primary strong' ).text(); error++; errorMessages.push( itemName + ': ' + response.errorMessage ); } + $itemRow.find( 'input[name="checked[]"]:checked' ).prop( 'checked', false ); + wp.updates.adminNotice = wp.template( 'wp-bulk-updates-admin-notice' ); wp.updates.addAdminNotice( { diff --git a/src/wp-includes/script-loader.php b/src/wp-includes/script-loader.php index 3a1ec18e7b..b2008230b7 100644 --- a/src/wp-includes/script-loader.php +++ b/src/wp-includes/script-loader.php @@ -616,6 +616,8 @@ function wp_default_scripts( &$scripts ) { 'updated' => __( 'Updated!' ), 'update' => __( 'Update' ), 'updateNow' => __( 'Update Now' ), + /* translators: %s: Plugin name and version */ + 'updateNowLabel' => __( 'Update %s now' ), 'updateFailedShort' => __( 'Update Failed!' ), /* translators: %s: Error string for a failed update */ 'updateFailed' => __( 'Update Failed: %s' ), @@ -634,7 +636,7 @@ function wp_default_scripts( &$scripts ) { 'beforeunload' => __( 'Updates may not complete if you navigate away from this page.' ), 'installNow' => __( 'Install Now' ), /* translators: %s: Plugin name */ - 'installNowLabel' => __( 'Install %s' ), + 'installNowLabel' => __( 'Install %s now' ), 'installing' => __( 'Installing...' ), 'installed' => __( 'Installed!' ), 'installFailedShort' => __( 'Install Failed!' ), diff --git a/tests/qunit/fixtures/updates.js b/tests/qunit/fixtures/updates.js index 013536c2b5..1d318d89b6 100644 --- a/tests/qunit/fixtures/updates.js +++ b/tests/qunit/fixtures/updates.js @@ -9,6 +9,7 @@ window._wpUpdatesSettings = { 'updated': 'Updated!', 'update': 'Update', 'updateNow': 'Update Now', + 'updateNowLabel': 'Update %s now', 'updateFailedShort': 'Update Failed!', 'updateFailed': 'Update Failed: %s', 'updatingLabel': 'Updating %s...', @@ -19,6 +20,7 @@ window._wpUpdatesSettings = { 'updateCancel': 'Update canceled.', 'beforeunload': 'Updates may not complete if you navigate away from this page.', 'installNow': 'Install Now', + 'installNowLabel': 'Install %s now', 'installing': 'Installing...', 'installed': 'Installed!', 'installFailedShort': 'Install Failed!',