oont-contents/plugins/wp-rocket/assets/js/wpr-cpcss.js
2025-02-08 15:10:23 +01:00

150 lines
5 KiB
JavaScript

let checkCPCSSGenerationCall;
let checkCPCSSMobileGenerationCall;
let cpcsssGenerationPending = 0;
let cpcsssMobileGenerationPending = 0;
const rocketDeleteCPCSSbtn = document.getElementById( 'rocket-delete-post-cpss' );
const rocketGenerateCPCSSbtn = document.getElementById( 'rocket-generate-post-cpss' );
const rocketCPCSSGenerate = document.querySelectorAll( '.cpcss_generate' );
const rocketCPCSSReGenerate = document.querySelectorAll( '.cpcss_regenerate' );
if ( null !== rocketDeleteCPCSSbtn ) {
rocketDeleteCPCSSbtn.addEventListener( 'click', e => {
e.preventDefault();
deleteCPCSS();
} );
}
if ( null !== rocketGenerateCPCSSbtn ) {
rocketGenerateCPCSSbtn.addEventListener( 'click', e => {
e.preventDefault();
rocketGenerateCPCSSbtn.disabled = true;
checkCPCSSGeneration( null, false );
if ( rocket_cpcss.wprMobileCpcssEnabled ) {
checkCPCSSGeneration( null, true );
}
} );
}
const checkCPCSSGeneration = ( timeout = null, is_mobile = false ) => {
const spinner = rocketGenerateCPCSSbtn.querySelector( '.spinner' );
spinner.style.display = 'block';
spinner.style.visibility = 'visible';
const xhttp = new XMLHttpRequest();
xhttp.onload = () => {
if ( 200 !== xhttp.status ) {
return;
}
const cpcss_response = JSON.parse( xhttp.response );
if ( 200 !== cpcss_response.data.status ) {
stopCPCSSGeneration( spinner );
if ( ! is_mobile ) {
cpcssNotice( cpcss_response.message, 'error' );
}
rocketGenerateCPCSSbtn.disabled = false;
return;
}
if ( 200 === cpcss_response.data.status &&
'cpcss_generation_pending' !== cpcss_response.code ) {
stopCPCSSGeneration( spinner, is_mobile );
if ( ! is_mobile ) {
cpcssNotice( cpcss_response.message, 'success' );
}
// Revert view to Regenerate.
rocketGenerateCPCSSbtn.querySelector( '.rocket-generate-post-cpss-btn-txt' ).innerHTML = rocket_cpcss.regenerate_btn;
rocketDeleteCPCSSbtn.style.display = 'block';
rocketGenerateCPCSSbtn.disabled = false;
rocketCPCSSGenerate.forEach( item => item.style.display = 'none' );
rocketCPCSSReGenerate.forEach( item => item.style.display = 'block' );
return;
}
if ( is_mobile ) {
cpcsssMobileGenerationPending++;
if ( cpcsssMobileGenerationPending > 10 ) {
stopCPCSSGeneration( spinner, is_mobile );
cpcsssMobileGenerationPending = 0;
checkCPCSSGeneration( true, true );
return;
}
checkCPCSSMobileGenerationCall = setTimeout( () => {
checkCPCSSGeneration( null, true );
}, 3000 );
} else {
cpcsssGenerationPending++;
if ( cpcsssGenerationPending > 10 ) {
stopCPCSSGeneration( spinner, is_mobile );
cpcsssGenerationPending = 0;
checkCPCSSGeneration( true, false );
return;
}
checkCPCSSGenerationCall = setTimeout( () => {
checkCPCSSGeneration( null, false );
}, 3000 );
}
};
xhttp.open( 'POST', rocket_cpcss.rest_url, true );
xhttp.setRequestHeader( 'Content-Type', 'application/json' );
xhttp.setRequestHeader( 'X-WP-Nonce', rocket_cpcss.rest_nonce );
xhttp.send( JSON.stringify( { timeout: timeout, is_mobile: is_mobile } ) );
}
const stopCPCSSGeneration = ( spinner, is_mobile ) => {
spinner.style.display = 'none';
if ( is_mobile ) {
clearTimeout( checkCPCSSMobileGenerationCall );
} else {
clearTimeout( checkCPCSSGenerationCall );
}
}
const deleteCPCSS = () => {
rocketDeleteCPCSSbtn.disabled = true;
const xhttp = new XMLHttpRequest();
xhttp.onload = () => {
if ( 200 !== xhttp.status ) {
return;
}
rocketDeleteCPCSSbtn.disabled = false;
const cpcss_response = JSON.parse( xhttp.response );
if ( 200 !== cpcss_response.data.status ) {
cpcssNotice( cpcss_response.message, 'error' );
return;
}
cpcssNotice( cpcss_response.message, 'success' );
// Revert view to Generate.
rocketGenerateCPCSSbtn.querySelector( '.rocket-generate-post-cpss-btn-txt' ).innerHTML = rocket_cpcss.generate_btn;
rocketDeleteCPCSSbtn.style.display = 'none';
rocketCPCSSReGenerate.forEach( item => item.style.display = 'none' );
rocketCPCSSGenerate.forEach( item => item.style.display = 'block' );
};
xhttp.open( 'DELETE', rocket_cpcss.rest_url, true );
xhttp.setRequestHeader( 'Content-Type', 'application/json' );
xhttp.setRequestHeader( 'X-WP-Nonce', rocket_cpcss.rest_nonce );
xhttp.send();
}
const cpcssNotice = ( msg, type ) => {
/* Add notice class */
const cpcssNotice = document.getElementById( 'cpcss_response_notice' );
cpcssNotice.innerHTML = '';
cpcssNotice.classList.remove( 'hidden', 'notice', 'is-warning', 'notice-error', 'notice-success', 'is-error', 'is-success' );
cpcssNotice.classList.add( 'notice', 'notice-' + type, 'is-' + type );
/* create paragraph element to hold message */
const p = document.createElement( 'p' );
p.appendChild( document.createTextNode( msg ) );
/* Add the whole message to notice div */
cpcssNotice.appendChild( p );
}