Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93
/home/sportsfe.../httpdocs/clone/wp-admin/js
File: site-health.js
/**
[0] Fix | Delete
* Interactions used by the Site Health modules in WordPress.
[1] Fix | Delete
*
[2] Fix | Delete
* @output wp-admin/js/site-health.js
[3] Fix | Delete
*/
[4] Fix | Delete
[5] Fix | Delete
/* global ajaxurl, ClipboardJS, SiteHealth, wp */
[6] Fix | Delete
[7] Fix | Delete
jQuery( function( $ ) {
[8] Fix | Delete
[9] Fix | Delete
var __ = wp.i18n.__,
[10] Fix | Delete
_n = wp.i18n._n,
[11] Fix | Delete
sprintf = wp.i18n.sprintf,
[12] Fix | Delete
clipboard = new ClipboardJS( '.site-health-copy-buttons .copy-button' ),
[13] Fix | Delete
isStatusTab = $( '.health-check-body.health-check-status-tab' ).length,
[14] Fix | Delete
isDebugTab = $( '.health-check-body.health-check-debug-tab' ).length,
[15] Fix | Delete
pathsSizesSection = $( '#health-check-accordion-block-wp-paths-sizes' ),
[16] Fix | Delete
menuCounterWrapper = $( '#adminmenu .site-health-counter' ),
[17] Fix | Delete
menuCounter = $( '#adminmenu .site-health-counter .count' ),
[18] Fix | Delete
successTimeout;
[19] Fix | Delete
[20] Fix | Delete
// Debug information copy section.
[21] Fix | Delete
clipboard.on( 'success', function( e ) {
[22] Fix | Delete
var triggerElement = $( e.trigger ),
[23] Fix | Delete
successElement = $( '.success', triggerElement.closest( 'div' ) );
[24] Fix | Delete
[25] Fix | Delete
// Clear the selection and move focus back to the trigger.
[26] Fix | Delete
e.clearSelection();
[27] Fix | Delete
[28] Fix | Delete
// Show success visual feedback.
[29] Fix | Delete
clearTimeout( successTimeout );
[30] Fix | Delete
successElement.removeClass( 'hidden' );
[31] Fix | Delete
[32] Fix | Delete
// Hide success visual feedback after 3 seconds since last success.
[33] Fix | Delete
successTimeout = setTimeout( function() {
[34] Fix | Delete
successElement.addClass( 'hidden' );
[35] Fix | Delete
}, 3000 );
[36] Fix | Delete
[37] Fix | Delete
// Handle success audible feedback.
[38] Fix | Delete
wp.a11y.speak( __( 'Site information has been copied to your clipboard.' ) );
[39] Fix | Delete
} );
[40] Fix | Delete
[41] Fix | Delete
// Accordion handling in various areas.
[42] Fix | Delete
$( '.health-check-accordion' ).on( 'click', '.health-check-accordion-trigger', function() {
[43] Fix | Delete
var isExpanded = ( 'true' === $( this ).attr( 'aria-expanded' ) );
[44] Fix | Delete
[45] Fix | Delete
if ( isExpanded ) {
[46] Fix | Delete
$( this ).attr( 'aria-expanded', 'false' );
[47] Fix | Delete
$( '#' + $( this ).attr( 'aria-controls' ) ).attr( 'hidden', true );
[48] Fix | Delete
} else {
[49] Fix | Delete
$( this ).attr( 'aria-expanded', 'true' );
[50] Fix | Delete
$( '#' + $( this ).attr( 'aria-controls' ) ).attr( 'hidden', false );
[51] Fix | Delete
}
[52] Fix | Delete
} );
[53] Fix | Delete
[54] Fix | Delete
// Site Health test handling.
[55] Fix | Delete
[56] Fix | Delete
$( '.site-health-view-passed' ).on( 'click', function() {
[57] Fix | Delete
var goodIssuesWrapper = $( '#health-check-issues-good' );
[58] Fix | Delete
[59] Fix | Delete
goodIssuesWrapper.toggleClass( 'hidden' );
[60] Fix | Delete
$( this ).attr( 'aria-expanded', ! goodIssuesWrapper.hasClass( 'hidden' ) );
[61] Fix | Delete
} );
[62] Fix | Delete
[63] Fix | Delete
/**
[64] Fix | Delete
* Validates the Site Health test result format.
[65] Fix | Delete
*
[66] Fix | Delete
* @since 5.6.0
[67] Fix | Delete
*
[68] Fix | Delete
* @param {Object} issue
[69] Fix | Delete
*
[70] Fix | Delete
* @return {boolean}
[71] Fix | Delete
*/
[72] Fix | Delete
function validateIssueData( issue ) {
[73] Fix | Delete
// Expected minimum format of a valid SiteHealth test response.
[74] Fix | Delete
var minimumExpected = {
[75] Fix | Delete
test: 'string',
[76] Fix | Delete
label: 'string',
[77] Fix | Delete
description: 'string'
[78] Fix | Delete
},
[79] Fix | Delete
passed = true,
[80] Fix | Delete
key, value, subKey, subValue;
[81] Fix | Delete
[82] Fix | Delete
// If the issue passed is not an object, return a `false` state early.
[83] Fix | Delete
if ( 'object' !== typeof( issue ) ) {
[84] Fix | Delete
return false;
[85] Fix | Delete
}
[86] Fix | Delete
[87] Fix | Delete
// Loop over expected data and match the data types.
[88] Fix | Delete
for ( key in minimumExpected ) {
[89] Fix | Delete
value = minimumExpected[ key ];
[90] Fix | Delete
[91] Fix | Delete
if ( 'object' === typeof( value ) ) {
[92] Fix | Delete
for ( subKey in value ) {
[93] Fix | Delete
subValue = value[ subKey ];
[94] Fix | Delete
[95] Fix | Delete
if ( 'undefined' === typeof( issue[ key ] ) ||
[96] Fix | Delete
'undefined' === typeof( issue[ key ][ subKey ] ) ||
[97] Fix | Delete
subValue !== typeof( issue[ key ][ subKey ] )
[98] Fix | Delete
) {
[99] Fix | Delete
passed = false;
[100] Fix | Delete
}
[101] Fix | Delete
}
[102] Fix | Delete
} else {
[103] Fix | Delete
if ( 'undefined' === typeof( issue[ key ] ) ||
[104] Fix | Delete
value !== typeof( issue[ key ] )
[105] Fix | Delete
) {
[106] Fix | Delete
passed = false;
[107] Fix | Delete
}
[108] Fix | Delete
}
[109] Fix | Delete
}
[110] Fix | Delete
[111] Fix | Delete
return passed;
[112] Fix | Delete
}
[113] Fix | Delete
[114] Fix | Delete
/**
[115] Fix | Delete
* Appends a new issue to the issue list.
[116] Fix | Delete
*
[117] Fix | Delete
* @since 5.2.0
[118] Fix | Delete
*
[119] Fix | Delete
* @param {Object} issue The issue data.
[120] Fix | Delete
*/
[121] Fix | Delete
function appendIssue( issue ) {
[122] Fix | Delete
var template = wp.template( 'health-check-issue' ),
[123] Fix | Delete
issueWrapper = $( '#health-check-issues-' + issue.status ),
[124] Fix | Delete
heading,
[125] Fix | Delete
count;
[126] Fix | Delete
[127] Fix | Delete
/*
[128] Fix | Delete
* Validate the issue data format before using it.
[129] Fix | Delete
* If the output is invalid, discard it.
[130] Fix | Delete
*/
[131] Fix | Delete
if ( ! validateIssueData( issue ) ) {
[132] Fix | Delete
return false;
[133] Fix | Delete
}
[134] Fix | Delete
[135] Fix | Delete
SiteHealth.site_status.issues[ issue.status ]++;
[136] Fix | Delete
[137] Fix | Delete
count = SiteHealth.site_status.issues[ issue.status ];
[138] Fix | Delete
[139] Fix | Delete
// If no test name is supplied, append a placeholder for markup references.
[140] Fix | Delete
if ( typeof issue.test === 'undefined' ) {
[141] Fix | Delete
issue.test = issue.status + count;
[142] Fix | Delete
}
[143] Fix | Delete
[144] Fix | Delete
if ( 'critical' === issue.status ) {
[145] Fix | Delete
heading = sprintf(
[146] Fix | Delete
_n( '%s critical issue', '%s critical issues', count ),
[147] Fix | Delete
'<span class="issue-count">' + count + '</span>'
[148] Fix | Delete
);
[149] Fix | Delete
} else if ( 'recommended' === issue.status ) {
[150] Fix | Delete
heading = sprintf(
[151] Fix | Delete
_n( '%s recommended improvement', '%s recommended improvements', count ),
[152] Fix | Delete
'<span class="issue-count">' + count + '</span>'
[153] Fix | Delete
);
[154] Fix | Delete
} else if ( 'good' === issue.status ) {
[155] Fix | Delete
heading = sprintf(
[156] Fix | Delete
_n( '%s item with no issues detected', '%s items with no issues detected', count ),
[157] Fix | Delete
'<span class="issue-count">' + count + '</span>'
[158] Fix | Delete
);
[159] Fix | Delete
}
[160] Fix | Delete
[161] Fix | Delete
if ( heading ) {
[162] Fix | Delete
$( '.site-health-issue-count-title', issueWrapper ).html( heading );
[163] Fix | Delete
}
[164] Fix | Delete
[165] Fix | Delete
menuCounter.text( SiteHealth.site_status.issues.critical );
[166] Fix | Delete
[167] Fix | Delete
if ( 0 < parseInt( SiteHealth.site_status.issues.critical, 0 ) ) {
[168] Fix | Delete
$( '#health-check-issues-critical' ).removeClass( 'hidden' );
[169] Fix | Delete
[170] Fix | Delete
menuCounterWrapper.removeClass( 'count-0' );
[171] Fix | Delete
} else {
[172] Fix | Delete
menuCounterWrapper.addClass( 'count-0' );
[173] Fix | Delete
}
[174] Fix | Delete
if ( 0 < parseInt( SiteHealth.site_status.issues.recommended, 0 ) ) {
[175] Fix | Delete
$( '#health-check-issues-recommended' ).removeClass( 'hidden' );
[176] Fix | Delete
}
[177] Fix | Delete
[178] Fix | Delete
$( '.issues', '#health-check-issues-' + issue.status ).append( template( issue ) );
[179] Fix | Delete
}
[180] Fix | Delete
[181] Fix | Delete
/**
[182] Fix | Delete
* Updates site health status indicator as asynchronous tests are run and returned.
[183] Fix | Delete
*
[184] Fix | Delete
* @since 5.2.0
[185] Fix | Delete
*/
[186] Fix | Delete
function recalculateProgression() {
[187] Fix | Delete
var r, c, pct;
[188] Fix | Delete
var $progress = $( '.site-health-progress' );
[189] Fix | Delete
var $wrapper = $progress.closest( '.site-health-progress-wrapper' );
[190] Fix | Delete
var $progressLabel = $( '.site-health-progress-label', $wrapper );
[191] Fix | Delete
var $circle = $( '.site-health-progress svg #bar' );
[192] Fix | Delete
var totalTests = parseInt( SiteHealth.site_status.issues.good, 0 ) +
[193] Fix | Delete
parseInt( SiteHealth.site_status.issues.recommended, 0 ) +
[194] Fix | Delete
( parseInt( SiteHealth.site_status.issues.critical, 0 ) * 1.5 );
[195] Fix | Delete
var failedTests = ( parseInt( SiteHealth.site_status.issues.recommended, 0 ) * 0.5 ) +
[196] Fix | Delete
( parseInt( SiteHealth.site_status.issues.critical, 0 ) * 1.5 );
[197] Fix | Delete
var val = 100 - Math.ceil( ( failedTests / totalTests ) * 100 );
[198] Fix | Delete
[199] Fix | Delete
if ( 0 === totalTests ) {
[200] Fix | Delete
$progress.addClass( 'hidden' );
[201] Fix | Delete
return;
[202] Fix | Delete
}
[203] Fix | Delete
[204] Fix | Delete
$wrapper.removeClass( 'loading' );
[205] Fix | Delete
[206] Fix | Delete
r = $circle.attr( 'r' );
[207] Fix | Delete
c = Math.PI * ( r * 2 );
[208] Fix | Delete
[209] Fix | Delete
if ( 0 > val ) {
[210] Fix | Delete
val = 0;
[211] Fix | Delete
}
[212] Fix | Delete
if ( 100 < val ) {
[213] Fix | Delete
val = 100;
[214] Fix | Delete
}
[215] Fix | Delete
[216] Fix | Delete
pct = ( ( 100 - val ) / 100 ) * c + 'px';
[217] Fix | Delete
[218] Fix | Delete
$circle.css( { strokeDashoffset: pct } );
[219] Fix | Delete
[220] Fix | Delete
if ( 80 <= val && 0 === parseInt( SiteHealth.site_status.issues.critical, 0 ) ) {
[221] Fix | Delete
$wrapper.addClass( 'green' ).removeClass( 'orange' );
[222] Fix | Delete
[223] Fix | Delete
$progressLabel.text( __( 'Good' ) );
[224] Fix | Delete
announceTestsProgression( 'good' );
[225] Fix | Delete
} else {
[226] Fix | Delete
$wrapper.addClass( 'orange' ).removeClass( 'green' );
[227] Fix | Delete
[228] Fix | Delete
$progressLabel.text( __( 'Should be improved' ) );
[229] Fix | Delete
announceTestsProgression( 'improvable' );
[230] Fix | Delete
}
[231] Fix | Delete
[232] Fix | Delete
if ( isStatusTab ) {
[233] Fix | Delete
$.post(
[234] Fix | Delete
ajaxurl,
[235] Fix | Delete
{
[236] Fix | Delete
'action': 'health-check-site-status-result',
[237] Fix | Delete
'_wpnonce': SiteHealth.nonce.site_status_result,
[238] Fix | Delete
'counts': SiteHealth.site_status.issues
[239] Fix | Delete
}
[240] Fix | Delete
);
[241] Fix | Delete
[242] Fix | Delete
if ( 100 === val ) {
[243] Fix | Delete
$( '.site-status-all-clear' ).removeClass( 'hide' );
[244] Fix | Delete
$( '.site-status-has-issues' ).addClass( 'hide' );
[245] Fix | Delete
}
[246] Fix | Delete
}
[247] Fix | Delete
}
[248] Fix | Delete
[249] Fix | Delete
/**
[250] Fix | Delete
* Queues the next asynchronous test when we're ready to run it.
[251] Fix | Delete
*
[252] Fix | Delete
* @since 5.2.0
[253] Fix | Delete
*/
[254] Fix | Delete
function maybeRunNextAsyncTest() {
[255] Fix | Delete
var doCalculation = true;
[256] Fix | Delete
[257] Fix | Delete
if ( 1 <= SiteHealth.site_status.async.length ) {
[258] Fix | Delete
$.each( SiteHealth.site_status.async, function() {
[259] Fix | Delete
var data = {
[260] Fix | Delete
'action': 'health-check-' + this.test.replace( '_', '-' ),
[261] Fix | Delete
'_wpnonce': SiteHealth.nonce.site_status
[262] Fix | Delete
};
[263] Fix | Delete
[264] Fix | Delete
if ( this.completed ) {
[265] Fix | Delete
return true;
[266] Fix | Delete
}
[267] Fix | Delete
[268] Fix | Delete
doCalculation = false;
[269] Fix | Delete
[270] Fix | Delete
this.completed = true;
[271] Fix | Delete
[272] Fix | Delete
if ( 'undefined' !== typeof( this.has_rest ) && this.has_rest ) {
[273] Fix | Delete
wp.apiRequest( {
[274] Fix | Delete
url: wp.url.addQueryArgs( this.test, { _locale: 'user' } ),
[275] Fix | Delete
headers: this.headers
[276] Fix | Delete
} )
[277] Fix | Delete
.done( function( response ) {
[278] Fix | Delete
/** This filter is documented in wp-admin/includes/class-wp-site-health.php */
[279] Fix | Delete
appendIssue( wp.hooks.applyFilters( 'site_status_test_result', response ) );
[280] Fix | Delete
} )
[281] Fix | Delete
.fail( function( response ) {
[282] Fix | Delete
var description;
[283] Fix | Delete
[284] Fix | Delete
if ( 'undefined' !== typeof( response.responseJSON ) && 'undefined' !== typeof( response.responseJSON.message ) ) {
[285] Fix | Delete
description = response.responseJSON.message;
[286] Fix | Delete
} else {
[287] Fix | Delete
description = __( 'No details available' );
[288] Fix | Delete
}
[289] Fix | Delete
[290] Fix | Delete
addFailedSiteHealthCheckNotice( this.url, description );
[291] Fix | Delete
} )
[292] Fix | Delete
.always( function() {
[293] Fix | Delete
maybeRunNextAsyncTest();
[294] Fix | Delete
} );
[295] Fix | Delete
} else {
[296] Fix | Delete
$.post(
[297] Fix | Delete
ajaxurl,
[298] Fix | Delete
data
[299] Fix | Delete
).done( function( response ) {
[300] Fix | Delete
/** This filter is documented in wp-admin/includes/class-wp-site-health.php */
[301] Fix | Delete
appendIssue( wp.hooks.applyFilters( 'site_status_test_result', response.data ) );
[302] Fix | Delete
} ).fail( function( response ) {
[303] Fix | Delete
var description;
[304] Fix | Delete
[305] Fix | Delete
if ( 'undefined' !== typeof( response.responseJSON ) && 'undefined' !== typeof( response.responseJSON.message ) ) {
[306] Fix | Delete
description = response.responseJSON.message;
[307] Fix | Delete
} else {
[308] Fix | Delete
description = __( 'No details available' );
[309] Fix | Delete
}
[310] Fix | Delete
[311] Fix | Delete
addFailedSiteHealthCheckNotice( this.url, description );
[312] Fix | Delete
} ).always( function() {
[313] Fix | Delete
maybeRunNextAsyncTest();
[314] Fix | Delete
} );
[315] Fix | Delete
}
[316] Fix | Delete
[317] Fix | Delete
return false;
[318] Fix | Delete
} );
[319] Fix | Delete
}
[320] Fix | Delete
[321] Fix | Delete
if ( doCalculation ) {
[322] Fix | Delete
recalculateProgression();
[323] Fix | Delete
}
[324] Fix | Delete
}
[325] Fix | Delete
[326] Fix | Delete
/**
[327] Fix | Delete
* Add the details of a failed asynchronous test to the list of test results.
[328] Fix | Delete
*
[329] Fix | Delete
* @since 5.6.0
[330] Fix | Delete
*/
[331] Fix | Delete
function addFailedSiteHealthCheckNotice( url, description ) {
[332] Fix | Delete
var issue;
[333] Fix | Delete
[334] Fix | Delete
issue = {
[335] Fix | Delete
'status': 'recommended',
[336] Fix | Delete
'label': __( 'A test is unavailable' ),
[337] Fix | Delete
'badge': {
[338] Fix | Delete
'color': 'red',
[339] Fix | Delete
'label': __( 'Unavailable' )
[340] Fix | Delete
},
[341] Fix | Delete
'description': '<p>' + url + '</p><p>' + description + '</p>',
[342] Fix | Delete
'actions': ''
[343] Fix | Delete
};
[344] Fix | Delete
[345] Fix | Delete
/** This filter is documented in wp-admin/includes/class-wp-site-health.php */
[346] Fix | Delete
appendIssue( wp.hooks.applyFilters( 'site_status_test_result', issue ) );
[347] Fix | Delete
}
[348] Fix | Delete
[349] Fix | Delete
if ( 'undefined' !== typeof SiteHealth ) {
[350] Fix | Delete
if ( 0 === SiteHealth.site_status.direct.length && 0 === SiteHealth.site_status.async.length ) {
[351] Fix | Delete
recalculateProgression();
[352] Fix | Delete
} else {
[353] Fix | Delete
SiteHealth.site_status.issues = {
[354] Fix | Delete
'good': 0,
[355] Fix | Delete
'recommended': 0,
[356] Fix | Delete
'critical': 0
[357] Fix | Delete
};
[358] Fix | Delete
}
[359] Fix | Delete
[360] Fix | Delete
if ( 0 < SiteHealth.site_status.direct.length ) {
[361] Fix | Delete
$.each( SiteHealth.site_status.direct, function() {
[362] Fix | Delete
appendIssue( this );
[363] Fix | Delete
} );
[364] Fix | Delete
}
[365] Fix | Delete
[366] Fix | Delete
if ( 0 < SiteHealth.site_status.async.length ) {
[367] Fix | Delete
maybeRunNextAsyncTest();
[368] Fix | Delete
} else {
[369] Fix | Delete
recalculateProgression();
[370] Fix | Delete
}
[371] Fix | Delete
}
[372] Fix | Delete
[373] Fix | Delete
function getDirectorySizes() {
[374] Fix | Delete
var timestamp = ( new Date().getTime() );
[375] Fix | Delete
[376] Fix | Delete
// After 3 seconds announce that we're still waiting for directory sizes.
[377] Fix | Delete
var timeout = window.setTimeout( function() {
[378] Fix | Delete
announceTestsProgression( 'waiting-for-directory-sizes' );
[379] Fix | Delete
}, 3000 );
[380] Fix | Delete
[381] Fix | Delete
wp.apiRequest( {
[382] Fix | Delete
path: '/wp-site-health/v1/directory-sizes'
[383] Fix | Delete
} ).done( function( response ) {
[384] Fix | Delete
updateDirSizes( response || {} );
[385] Fix | Delete
} ).always( function() {
[386] Fix | Delete
var delay = ( new Date().getTime() ) - timestamp;
[387] Fix | Delete
[388] Fix | Delete
$( '.health-check-wp-paths-sizes.spinner' ).css( 'visibility', 'hidden' );
[389] Fix | Delete
[390] Fix | Delete
if ( delay > 3000 ) {
[391] Fix | Delete
/*
[392] Fix | Delete
* We have announced that we're waiting.
[393] Fix | Delete
* Announce that we're ready after giving at least 3 seconds
[394] Fix | Delete
* for the first announcement to be read out, or the two may collide.
[395] Fix | Delete
*/
[396] Fix | Delete
if ( delay > 6000 ) {
[397] Fix | Delete
delay = 0;
[398] Fix | Delete
} else {
[399] Fix | Delete
delay = 6500 - delay;
[400] Fix | Delete
}
[401] Fix | Delete
[402] Fix | Delete
window.setTimeout( function() {
[403] Fix | Delete
recalculateProgression();
[404] Fix | Delete
}, delay );
[405] Fix | Delete
} else {
[406] Fix | Delete
// Cancel the announcement.
[407] Fix | Delete
window.clearTimeout( timeout );
[408] Fix | Delete
}
[409] Fix | Delete
[410] Fix | Delete
$( document ).trigger( 'site-health-info-dirsizes-done' );
[411] Fix | Delete
} );
[412] Fix | Delete
}
[413] Fix | Delete
[414] Fix | Delete
function updateDirSizes( data ) {
[415] Fix | Delete
var copyButton = $( 'button.button.copy-button' );
[416] Fix | Delete
var clipboardText = copyButton.attr( 'data-clipboard-text' );
[417] Fix | Delete
[418] Fix | Delete
$.each( data, function( name, value ) {
[419] Fix | Delete
var text = value.debug || value.size;
[420] Fix | Delete
[421] Fix | Delete
if ( typeof text !== 'undefined' ) {
[422] Fix | Delete
clipboardText = clipboardText.replace( name + ': loading...', name + ': ' + text );
[423] Fix | Delete
}
[424] Fix | Delete
} );
[425] Fix | Delete
[426] Fix | Delete
copyButton.attr( 'data-clipboard-text', clipboardText );
[427] Fix | Delete
[428] Fix | Delete
pathsSizesSection.find( 'td[class]' ).each( function( i, element ) {
[429] Fix | Delete
var td = $( element );
[430] Fix | Delete
var name = td.attr( 'class' );
[431] Fix | Delete
[432] Fix | Delete
if ( data.hasOwnProperty( name ) && data[ name ].size ) {
[433] Fix | Delete
td.text( data[ name ].size );
[434] Fix | Delete
}
[435] Fix | Delete
} );
[436] Fix | Delete
}
[437] Fix | Delete
[438] Fix | Delete
if ( isDebugTab ) {
[439] Fix | Delete
if ( pathsSizesSection.length ) {
[440] Fix | Delete
getDirectorySizes();
[441] Fix | Delete
} else {
[442] Fix | Delete
recalculateProgression();
[443] Fix | Delete
}
[444] Fix | Delete
}
[445] Fix | Delete
[446] Fix | Delete
// Trigger a class toggle when the extended menu button is clicked.
[447] Fix | Delete
$( '.health-check-offscreen-nav-wrapper' ).on( 'click', function() {
[448] Fix | Delete
$( this ).toggleClass( 'visible' );
[449] Fix | Delete
} );
[450] Fix | Delete
[451] Fix | Delete
/**
[452] Fix | Delete
* Announces to assistive technologies the tests progression status.
[453] Fix | Delete
*
[454] Fix | Delete
* @since 6.4.0
[455] Fix | Delete
*
[456] Fix | Delete
* @param {string} type The type of message to be announced.
[457] Fix | Delete
*
[458] Fix | Delete
* @return {void}
[459] Fix | Delete
*/
[460] Fix | Delete
function announceTestsProgression( type ) {
[461] Fix | Delete
// Only announce the messages in the Site Health pages.
[462] Fix | Delete
if ( 'site-health' !== SiteHealth.screen ) {
[463] Fix | Delete
return;
[464] Fix | Delete
}
[465] Fix | Delete
[466] Fix | Delete
switch ( type ) {
[467] Fix | Delete
case 'good':
[468] Fix | Delete
wp.a11y.speak( __( 'All site health tests have finished running. Your site is looking good.' ) );
[469] Fix | Delete
break;
[470] Fix | Delete
case 'improvable':
[471] Fix | Delete
wp.a11y.speak( __( 'All site health tests have finished running. There are items that should be addressed.' ) );
[472] Fix | Delete
break;
[473] Fix | Delete
case 'waiting-for-directory-sizes':
[474] Fix | Delete
wp.a11y.speak( __( 'Running additional tests... please wait.' ) );
[475] Fix | Delete
break;
[476] Fix | Delete
default:
[477] Fix | Delete
return;
[478] Fix | Delete
}
[479] Fix | Delete
}
[480] Fix | Delete
} );
[481] Fix | Delete
[482] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function