// Global variable to store polling interval if (typeof window.wpRocketIntervalId === 'undefined') { window.wpRocketIntervalId = null; } if (typeof window.wpRocketAddonIntervalId === 'undefined') { window.wpRocketAddonIntervalId = null; } jQuery(document).ready(function () { // Disable premium fields for non-premium (or downgraded package) jQuery(".oc-non-premium #dev_mode_duration").prop('disabled', true); jQuery(".oc-non-premium #oc_dev_duration_save").prop('disabled', true); jQuery(".oc-non-premium #exclude_cdn_data").prop('disabled', true); jQuery(".oc-non-premium .oc_cdn_data_save").prop('disabled', true); // enable disable save button based on cdn switches state // oc_cdn_save_state_change(); jQuery('#pc_enable').change(function () { ocSetVCState(); }); jQuery('.oc_ttl_save').click(function(){ if (oc_validate_ttl()) { oc_update_ttl(); } }); jQuery('.oc_cdn_data_save').click(function(){ if (oc_validate_cdn_data()) { oc_update_cdn_data(); } }); jQuery("#pc_enable_settings .oc_vcache_ttl").keypress(function(event) { jQuery(this).removeClass('oc_error'); jQuery('#pc_enable_settings .oc-ttl-error-msg').hide(); }); jQuery("#dev_mode_enable_settings #dev_mode_duration").keypress(function(event) { jQuery(this).removeClass('oc_error'); jQuery('#dev_mode_enable_settings .oc-ttl-error-msg').hide(); }); jQuery("#exclude_cdn_enable_settings #exclude_cdn_data").keypress(function(event) { jQuery(this).removeClass('oc_error'); jQuery('#exclude_cdn_enable_settings .oc-ttl-error-msg').hide(); }); /*jQuery('.oc-activate-wp-rocket-btn').click(function(){ oc_activate_wp_rocket(); });*/ jQuery('#cdn_enable').change(function (){ ocSetCdnState(); }); jQuery('#dev_mode_enable').change(function (){ jQuery('#dev_mode_duration').removeClass('oc_error'); ocSetDevMode(); }); jQuery('#exclude_cdn_enable').change(function (){ jQuery('#exclude_cdn_data').removeClass('oc_error'); ocExcludeCDNState(); }); // disable all submit buttons until form changed jQuery('#pc_enable_settings form button.oc_ttl_save').attr('disabled', true); // Enable save button when form changed let settingsForm = jQuery('#pc_enable_settings form'); settingsForm.each(function () { jQuery(this).data('serialized', jQuery(this).serialize()); }).on('change keyup paste', function () { jQuery(this) .find('button.oc_ttl_save') .attr('disabled', jQuery(this).serialize() == jQuery(this).data('serialized')); }) // disable CDN setting submit button until form changed jQuery('#cdn_settings button.oc_cdn_data_save').attr('disabled', true); // Enable save button when form changed let cdnSettingsForm = jQuery('#cdn_settings form'); cdnSettingsForm.each(function () { jQuery(this).data('cdnSerialized', jQuery(this).serialize()); }).on('change keyup paste', function () { jQuery(this) .find('button.oc_cdn_data_save') .attr('disabled', jQuery(this).serialize() == jQuery(this).data('cdnSerialized')); }) }); function oc_toggle_state(element) { var current_icon = element.attr('src'); var new_icon = element.attr('data-alt-image'); element.attr({ 'src': new_icon, 'data-alt-image': current_icon }); } function oc_change_cdn_icon(){ if (jQuery('#cdn_enable').prop('checked')) { jQuery('#oc-cdn-icon-active').show(); jQuery('#oc-cdn-icon').hide(); jQuery('.oc-cdn-feature-box').show(); // Remove sub features success classes else spinner animate on each switch jQuery('.oc-cdn-feature-box .oc_cb_spinner').removeClass('success'); } else { jQuery('#oc-cdn-icon').show(); jQuery('#oc-cdn-icon-active').hide(); jQuery('.oc-cdn-feature-box').hide(); // Remove sub features success classes else spinner animate on each switch jQuery('.oc-cdn-feature-box .oc_cb_spinner').removeClass('success'); } } // activate wp rocket button action /*function oc_activate_wp_rocket(){ jQuery('.oc_activate_wp_rocket_spinner').removeClass('success').addClass('is_active'); jQuery.post(ajaxurl, { action: 'oc_activate_wp_rocket' }, function(response){ jQuery('.oc_activate_wp_rocket_spinner').removeClass('is_active'); if (response.status === true) { jQuery('.oc_activate_wp_rocket_spinner').addClass('success'); window.location.href = "options-general.php?page=wprocket"; } else { console.log("Error: Could not activate plugin") } }); }*/ function oc_show_more_less(){ if (jQuery(".oc-hidden-content").css('display') === 'none') { jQuery(".oc-show-hide a").text("Show less"); jQuery(".oc-hidden-content").show(); } else { jQuery(".oc-show-hide a").text("Show more"); jQuery(".oc-hidden-content").hide(); } } //WP Rocket addon activation and purchase status check polling jQuery(document).ready(function () { //check plugin activation in progress on reload: //different ajax action onclick and onload //only enqueue on the wp-rocket page if(!window.wpenqueued) { jQuery.post(ajaxurl, { action: 'on_reload_plugin_activate', addon_slug: 'wp-rocket' }, function (response) { handle_plugin_activation_response(response, window.wpRocketIntervalId); // If queue in progress, start polling if (response.status === 'already_in_queue') { console.log("Polling on reload"); oc_plugin_status_polling(); } }); //check addon purchase status in progress on reload: //different ajax action onclick and onload //only enqueue on the wp-rocket page jQuery.post(ajaxurl, { action: 'check_addon_purchase_status_onload', addon_slug: 'wp-rocket' }, function (response) { handle_addon_purchase_response(response, window.wpRocketAddonIntervalId); // If queue in progress, start polling if (response.status === 'already_in_queue') { console.log("Polling on reload"); oc_addon_status_polling(); } }); } //hide notice on close jQuery('.wpr-container .gv-notice-close').click(function(){ jQuery(this).parent().addClass('gv-hidden'); }); //on the button click check plugin activation jQuery('.oc-activate-wp-rocket-btn').click(function(){ oc_activate_wp_plugin(); }); //on the button click check addon status jQuery('.gv-button.get-wpr-btn').click(function(){ oc_addon_purchase_status(); }); }); // Common function to poll plugin activation status function oc_plugin_status_polling(addon_slug = 'wp-rocket') { // If already polling, do nothing if (window.wpRocketIntervalId) return; // Define the polling function function pollStatus() { jQuery.post(ajaxurl, { action: 'activate_onclick_wp_plugin', addon_slug: addon_slug }, function(response){ handle_plugin_activation_response(response, window.wpRocketIntervalId); }); } // Call immediately at once pollStatus(); //Then schedule it to repeat every 20 seconds window.wpRocketIntervalId = setInterval(pollStatus, 5000); } // Common function to poll addon activation status //call on a twenty-seconds interval function oc_addon_status_polling(addon_slug = 'wp-rocket') { // If already polling, do nothing if (window.wpRocketAddonIntervalId) return; // Define the polling function function pollAddonStatus() { jQuery.post(ajaxurl, { action: 'check_addon_purchase_status', addon_slug: addon_slug }, function(response){ handle_addon_purchase_response(response, window.wpRocketAddonIntervalId); }); } // Call immediately at once pollAddonStatus(); //Then schedule it to repeat every 20 seconds window.wpRocketAddonIntervalId = setInterval(pollAddonStatus, 25000); } function stop_polling(intervalId, type) { if (intervalId) clearInterval(intervalId); if (type === 'plugin') { window.wpRocketIntervalId = null; } else if (type === 'addon') { window.wpRocketAddonIntervalId = null; } } // Common function to handle AJAX response function handle_plugin_activation_response(response, intervalId = null) { if (response.status === 'normal_reload') { //do nothing on normal reload return false; } if (response.status === 'added_to_queue') { // Push stats let args = { 'event_action': 'click_wp_activate_button', 'item_category': 'plugin', 'item_name': 'wp_rocket' }; oc_push_stats_by_js(args); jQuery('.gv-notice.gv-notice-warning.wpr-notice').removeClass('gv-hidden'); } else if (response.status === 'already_in_queue') { // Queue in progress → keep polling jQuery('.gv-notice.wpr-notice').addClass('gv-hidden'); jQuery('.gv-notice.gv-notice-warning.wpr-notice').removeClass('gv-hidden'); } else if (response.status === 'activated') { stop_polling(intervalId, 'plugin'); let btn = ''+response.btn_text+''; let insertAfter = '
'+btn+'
'; //append or add HTML for the go-to button (jQuery('.gv-bottom.wpr-pricing').length) ? jQuery('.gv-bottom.wpr-pricing').html(btn) : jQuery(insertAfter).insertAfter('.gv-content.wpr-pricing-content'); console.log("WP Rocket activated successfully."); jQuery('.gv-notice.gv-notice-warning.wpr-notice').addClass('gv-hidden'); jQuery('.gv-notice.gv-notice-success.wpr-notice').removeClass('gv-hidden'); } else if (response.status === 'expired_queue' || response.status === 'activation_failed') { stop_polling(intervalId, 'plugin'); console.log("Activation queue status: "+response.status); jQuery('.gv-notice.gv-notice-warning.wpr-notice').addClass('gv-hidden'); jQuery('.gv-notice.gv-notice-alert.wpr-notice').removeClass('gv-hidden'); } else if(response.status === 'addon_not_subscribed'){ //special case very rare to exist stop_polling(intervalId, 'plugin'); } else { stop_polling(intervalId, 'plugin'); jQuery('.gv-notice.gv-notice-warning.wpr-notice').addClass('gv-hidden'); jQuery('.gv-notice.gv-notice-alert.wpr-notice').removeClass('gv-hidden'); console.log("Error: Could not activate plugin"); } } // Common function to handle AJAX response for addon purchase status function handle_addon_purchase_response(response, intervalId = null) { if (response.status === 'normal_reload') { //do nothing on normal reload return false; } if (response.status === 'already_in_queue' || response.status === 'added_in_queue') { // Queue in progress → keep polling } else if (response.status === 'addon_purchased') { stop_polling(intervalId, 'addon'); // Push stats let args = { 'event_action': 'wpr_addon_purchased', 'item_category': 'plugin', 'item_name': 'wp_rocket' }; oc_push_stats_by_js(args); // reload the page location.reload(); console.log("WP Rocket addon purchased successfully."); } else if (response.status === 'already_plugin_active' ) { stop_polling(intervalId, 'addon'); console.log("Already plugin activated."); }else if (response.status === 'expired_queue' || response.status === 'addon_not_purchased') { stop_polling(intervalId, 'addon'); console.log("Activation queue expired or not purchased."+response.status); } else { stop_polling(intervalId, 'addon'); console.log("Error: Could not activate plugin"); } } // On the button click → start polling function oc_activate_wp_plugin() { jQuery('.gv-notice.gv-notice-alert.wpr-notice').addClass('gv-hidden'); jQuery('.gv-notice.gv-notice-info.wpr-notice').addClass('gv-hidden'); jQuery('.gv-notice.gv-notice-warning.wpr-notice').removeClass('gv-hidden'); oc_plugin_status_polling('wp-rocket'); } function oc_addon_purchase_status() { oc_addon_status_polling('wp-rocket'); }