Skip to content
8 changes: 6 additions & 2 deletions src/js/_enqueues/wp/updates.js
Original file line number Diff line number Diff line change
Expand Up @@ -356,13 +356,17 @@
/**
* Refreshes update counts everywhere on the screen.
*
* Top-level menu items repeat their count in the submenu header,
* which is shown when the admin menu is folded.
*
* @since 4.7.0
* @since 7.2.0 Also refreshes the counts in folded menu submenu headers.
*/
wp.updates.refreshCount = function() {
var $adminBarUpdates = $( '#wp-admin-bar-updates' ),
$dashboardNavMenuUpdateCount = $( 'a[href="update-core.php"] .update-plugins' ),
$pluginsNavMenuUpdateCount = $( 'a[href="plugins.php"] .update-plugins' ),
$appearanceNavMenuUpdateCount = $( 'a[href="themes.php"] .update-plugins' ),
$pluginsNavMenuUpdateCount = $( 'a[href="plugins.php"] .update-plugins, #menu-plugins .wp-submenu-head .update-plugins' ),
$appearanceNavMenuUpdateCount = $( 'a[href="themes.php"] .update-plugins, #menu-appearance .wp-submenu-head .update-plugins' ),
itemCount;

$adminBarUpdates.find( '.ab-label' ).text( settings.totals.counts.total );
Expand Down
10 changes: 10 additions & 0 deletions tests/qunit/wp-admin/js/updates.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,22 +15,32 @@ jQuery( function( $ ) {
var menuItemCount = $( '#menu-plugins' ).find( '.plugin-count' ).eq( 0 ).text();
var screenReaderItemCount = $( '#wp-admin-bar-updates' ).find( '.screen-reader-text' ).text();
var adminItemCount = $( '#wp-admin-bar-updates' ).find( '.ab-label' ).text();
var submenuHeadCount = $( '#menu-plugins .wp-submenu-head' ).find( '.plugin-count' ).text();
assert.equal( menuItemCount, 2, 'Initial value is correct' );
assert.equal( screenReaderItemCount, '2 Plugin Updates', 'Initial value is correct' );
assert.equal( adminItemCount, 2, 'Initial value is correct' );
assert.equal( submenuHeadCount, 2, 'Initial submenu header value is correct' );

wp.updates.decrementCount( 'plugin' );

// Re-read these values.
menuItemCount = $( '#menu-plugins' ).find( '.plugin-count' ).eq( 0 ).text();
screenReaderItemCount = $( '#wp-admin-bar-updates' ).find( '.screen-reader-text' ).text();
adminItemCount = $( '#wp-admin-bar-updates' ).find( '.ab-label' ).text();
submenuHeadCount = $( '#menu-plugins .wp-submenu-head' ).find( '.plugin-count' ).text();
assert.equal( menuItemCount, 1 );

// @todo: Update screen reader count.
// Should the screenReader count change? Is that announced to the user?
// assert.equal( screenReaderItemCount, '1 Plugin Update' );
assert.equal( adminItemCount, 1 );

// The submenu header shows the count when the admin menu is folded.
assert.equal( submenuHeadCount, 1, 'Submenu header count is updated' );

// With no updates left, the count is removed from the menu item and its submenu header.
wp.updates.decrementCount( 'plugin' );
assert.equal( $( '#menu-plugins' ).find( '.plugin-count' ).length, 0, 'Both counts are removed when no updates remain' );
});

QUnit.test( '`beforeunload` should only fire when locked', function( assert ) {
Expand Down
Loading