laipower/wp-content/plugins/w3-total-cache/PageSpeed_Page_View.js

252 lines
6.9 KiB
JavaScript

/**
* File: PageSpeed_Page_View.js
*
* JavaScript for the PageSpeed page.
*
* @since 2.3.0 Update to utilize OAuth2.0 and overhaul of feature.
*
* @global w3tcData Localized data.
*/
jQuery(document).ready(function ($) {
/**
* Analyze GPS page_post URL via AJAX to Google PageSpeed Insights.
*
* @since 2.3.0
*
* @param object page_post GPS page page_post object.
* @param boolean nocache Flag to enable/disable results cache.
*
* @return void
*/
function w3tcps_analyze(page_post, nocache) {
let page_post_id = page_post.find('.w3tcps_buttons').attr('page_post_id');
let page_post_url = page_post.find('.w3tcps_buttons').attr('page_post_url');
page_post.find('.page_post_psresults').fadeOut('fast');
page_post.find('.w3tcps_buttons').addClass('w3tc_none');
page_post.find('.w3tcps_loading').removeClass('w3tc_none').find('.spinner').addClass('is-active');
page_post.find('.w3tcps_error').addClass('w3tc_none');
$.ajax({
type: 'GET',
url: ajaxurl + '?action=w3tc_ajax&_wpnonce=' + w3tc_nonce + '&w3tc_action=pagespeed_data&url=' + encodeURIComponent(page_post_url) + (nocache ? '&cache=no' : ''),
dataType: 'json',
success: function (data) {
$('#' + page_post_id).prev().find('.w3tcps_loading').addClass('w3tc_none').find('.spinner').removeClass('is-active');
if (data.error) {
$('.w3tcps_buttons').removeClass('w3tc_none');
$('#' + page_post_id).prev().find('.w3tcps_error').html(w3tcData.lang.pagespeed_data_error + data.error);
$('#' + page_post_id).prev().find('.w3tcps_error').removeClass('w3tc_none');
return;
} else if (data.missing_token) {
$('.w3tcps_buttons').addClass('w3tc_none');
$('#' + page_post_id).prev().find('.w3tcps_missing_token').html(data.missing_token);
$('#' + page_post_id).prev().find('.w3tcps_missing_token').removeClass('w3tc_none');
return;
}
$('.w3tcps_timestamp').html(data.w3tcps_timestamp);
$('.w3tcps_buttons').removeClass('w3tc_none');
$('#' + page_post_id).html(data.w3tcps_content).fadeIn('slow');
$('.w3tcps_item_desciption a').attr('target', '_blank');
},
error: function (jqXHR, textStatus, errorThrown) {
$('.w3tcps_analyze').prop('disabled', false);
$('#' + page_post_id).prev().find('.w3tcps_error').html(w3tcData.lang.pagespeed_data_error + errorThrown);
$('#' + page_post_id).prev().find('.w3tcps_error').removeClass('w3tc_none');
$('#' + page_post_id).prev().find('.w3tcps_loading').addClass('w3tc_none').find('.spinner').removeClass('is-active');
},
async: true
});
}
/**
* Toggle breakdown accordion.
*
* @since 2.3.0
*
* @return void
*/
function w3tcps_breakdown_items_toggle() {
if (window.w3tc_ga) {
w3tc_ga(
'event',
'metric',
{
eventCategory: 'w3tc_pagespeed',
eventLabel: $(this).attr('gatitle')
}
);
}
$(this).find('.dashicons').toggleClass("dashicons-arrow-up-alt2 dashicons-arrow-down-alt2");
$(this).next().slideToggle();
}
/**
* View mobile tab.
*
* @since 2.3.0
*
* @return void
*/
function w3tcps_mobile_toggle() {
if (window.w3tc_ga) {
w3tc_ga(
'event',
'mobile_tab',
{
eventCategory: 'w3tc_pagespeed',
eventLabel: $('#w3tcps_control_mobile').text()
}
);
}
$('#w3tcps_control_desktop').removeClass('nav-tab-active');
$('#w3tcps_desktop').hide();
$('#w3tcps_control_mobile').addClass('nav-tab-active');
$('#w3tcps_mobile').show();
}
/**
* View desktop tab.
*
* @since 2.3.0
*
* @return void
*/
function w3tcps_desktop_toggle() {
if (window.w3tc_ga) {
w3tc_ga(
'event',
'desktop_tab',
{
eventCategory: 'w3tc_pagespeed',
eventLabel: $('#w3tcps_control_desktop').text()
}
);
}
$('#w3tcps_control_mobile').removeClass('nav-tab-active');
$('#w3tcps_mobile').hide();
$('#w3tcps_control_desktop').addClass('nav-tab-active');
$('#w3tcps_desktop').show();
}
/**
* View breakdown auidt type tab.
*
* @since 2.3.0
*
* @return void
*/
function w3tcps_audit_filter(event) {
event.preventDefault();
if (window.w3tc_ga) {
w3tc_ga(
'event',
'filter_tab',
{
eventCategory: 'w3tc_pagespeed',
eventLabel: $(this).text()
}
);
}
if ('ALL' === $(this).text()) {
$('.w3tcps_breakdown .audits').show();
} else if ($(this).text().trim) {
$('.w3tcps_breakdown .audits').hide();
$('.w3tcps_breakdown .' + $(this).text()).delay(200).show();
} else {
$('.w3tcps_breakdown .audits').show();
alert(w3tcData.lang.pagespeed_filter_error);
}
}
/**
* Copy full URL value.
*
* @since 2.3.0
*
* @return void
*/
function w3tcps_copyurl() {
var copyurl = $(this).attr('copyurl');
const message = document.createElement("span");
message.id = 'copyurl_result';
message.style.cssText = 'position:absolute;background:#ffffff;padding:0 5px;';
if (window.isSecureContext && navigator.clipboard) {
navigator.clipboard.writeText(copyurl).then(
function () {
message.style.cssText += 'border:2px solid #72aee6;';
message.textContent = "Coppied to clipboard";
},
function () {
message.style.cssText += 'border:2px solid #00a32a;';
message.textContent = 'Unable to copy to clipboard';
}
);
} else {
const textArea = document.createElement("textarea");
textArea.id = 'copyurl_fallback';
textArea.style.cssText = 'position:absolute;left:-10000px;';
textArea.value = copyurl;
$(this).append(textArea);
textArea.focus();
textArea.select();
try {
document.execCommand('copy');
message.style.cssText += 'border:2px solid #72aee6;';
message.textContent = "Coppied to clipboard";
} catch (err) {
console.error('Unable to copy to clipboard', err);
message.style.cssText += 'border:2px solid #00a32a;';
message.textContent = 'Unable to copy to clipboard';
}
$('#copyurl_fallback').remove();
}
$(this).parent().prepend(message);
setTimeout(
function () {
$('#copyurl_result').remove();
},
2000
);
}
function showSnackBar() {
var sb = document.getElementById("snackbar");
//this is where the class name will be added & removed to activate the css
sb.className = "show";
setTimeout(() => { sb.className = sb.className.replace("show", ""); }, 3000);
}
$(document).on('click', '.w3tcps_breakdown_items_toggle', w3tcps_breakdown_items_toggle);
$(document).on('click', '#w3tcps_control_mobile', w3tcps_mobile_toggle);
$(document).on('click', '#w3tcps_control_desktop', w3tcps_desktop_toggle);
$(document).on('click', '.w3tcps_audit_filter', w3tcps_audit_filter);
$(document).on('click', '.copyurl', w3tcps_copyurl);
$('.w3tcps_content').on('click', '.w3tcps_analyze', function () {
if (window.w3tc_ga) {
w3tc_ga(
'event',
're_analyze',
{
eventCategory: 'w3tc_pagespeed',
eventLabel: $(this).closest('.page_post').find('.w3tcps_buttons').attr('page_post_url')
}
);
}
w3tcps_analyze($(this).closest('.page_post'), true);
});
w3tcps_analyze($('#w3tcps_home .page_post'), false);
});