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-conte.../plugins/wp-smush.../_src/js/smush
File: product-analytics.js
import tracker from '../utils/tracker';
[0] Fix | Delete
[1] Fix | Delete
class ProductAnalytics {
[2] Fix | Delete
troubleshootClicked = false;
[3] Fix | Delete
resumeBulkSmushCount = 0;
[4] Fix | Delete
missedEventsKey = 'wp_smush_missed_events';
[5] Fix | Delete
[6] Fix | Delete
init() {
[7] Fix | Delete
if ( ! tracker.allowToTrack() ) {
[8] Fix | Delete
return;
[9] Fix | Delete
}
[10] Fix | Delete
[11] Fix | Delete
this.trackUltraLinks();
[12] Fix | Delete
this.trackUpsellLinks();
[13] Fix | Delete
[14] Fix | Delete
this.registerTroubleshootClickEvent();
[15] Fix | Delete
[16] Fix | Delete
// Scan Interrupted Event from Scan Modal.
[17] Fix | Delete
this.trackScanInterruptedEventOnStopScanningModal();
[18] Fix | Delete
this.trackScanInterruptedEventOnRetryScanModal();
[19] Fix | Delete
[20] Fix | Delete
// Bulk Smush Interrupted Event from Bulk Smush Modal.
[21] Fix | Delete
this.trackBulkSmushInterruptedEventOnStopBulkSmushModal();
[22] Fix | Delete
this.trackBulkSmushInterruptedEventOnRetryBulkSmushModal();
[23] Fix | Delete
this.registerBulkSmushResumeClickEvent();
[24] Fix | Delete
[25] Fix | Delete
// Bulk Smush Interrupted Event when exit ajax bulk smush.
[26] Fix | Delete
this.trackBulkSmushInterruptedEventWhenExitingAjaxBulkSmush();
[27] Fix | Delete
[28] Fix | Delete
// Interrupted Event from Inline Notice.
[29] Fix | Delete
this.trackInterruptedEventFromInlineNotice();
[30] Fix | Delete
[31] Fix | Delete
// Interrupted Event from Loopback Error Modal.
[32] Fix | Delete
this.trackInterruptedEventFromLoopbackErrorModal();
[33] Fix | Delete
[34] Fix | Delete
this.maybeTrackMissedEventsOnLoad();
[35] Fix | Delete
}
[36] Fix | Delete
[37] Fix | Delete
trackUltraLinks() {
[38] Fix | Delete
const ultraUpsellLinks = document.querySelectorAll( '.wp-smush-upsell-ultra-compression' );
[39] Fix | Delete
if ( ! ultraUpsellLinks ) {
[40] Fix | Delete
return;
[41] Fix | Delete
}
[42] Fix | Delete
const getLocation = ( ultraLink ) => {
[43] Fix | Delete
const locations = {
[44] Fix | Delete
settings: 'bulksmush_settings',
[45] Fix | Delete
dashboard: 'dash_summary',
[46] Fix | Delete
bulk: 'bulksmush_summary',
[47] Fix | Delete
directory: 'directory_summary',
[48] Fix | Delete
'lazy-load': 'lazy_summary',
[49] Fix | Delete
cdn: 'cdn_summary',
[50] Fix | Delete
webp: 'webp_summary',
[51] Fix | Delete
};
[52] Fix | Delete
const locationId = ultraLink.classList.contains( 'wp-smush-ultra-compression-link' ) ? 'settings' : this.getCurrentPageSlug();
[53] Fix | Delete
return locations[ locationId ] || 'bulksmush_settings';
[54] Fix | Delete
};
[55] Fix | Delete
[56] Fix | Delete
ultraUpsellLinks.forEach( ( ultraLink ) => {
[57] Fix | Delete
const eventName = 'ultra_upsell_modal';
[58] Fix | Delete
ultraLink.addEventListener( 'click', ( e ) => {
[59] Fix | Delete
tracker.track( eventName, {
[60] Fix | Delete
Location: getLocation( e.target ),
[61] Fix | Delete
'Modal Action': 'direct_cta',
[62] Fix | Delete
} );
[63] Fix | Delete
} );
[64] Fix | Delete
} );
[65] Fix | Delete
}
[66] Fix | Delete
[67] Fix | Delete
trackUpsellLinks() {
[68] Fix | Delete
const upsellLinks = document.querySelectorAll( '[href*="utm_source=smush"]' );
[69] Fix | Delete
if ( ! upsellLinks ) {
[70] Fix | Delete
return;
[71] Fix | Delete
}
[72] Fix | Delete
upsellLinks.forEach( ( upsellLink ) => {
[73] Fix | Delete
upsellLink.addEventListener( 'click', ( e ) => {
[74] Fix | Delete
const params = new URL( e.target.href ).searchParams;
[75] Fix | Delete
if ( ! params ) {
[76] Fix | Delete
return;
[77] Fix | Delete
}
[78] Fix | Delete
[79] Fix | Delete
const campaign = params.get( 'utm_campaign' );
[80] Fix | Delete
const upsellLocations = {
[81] Fix | Delete
// CDN.
[82] Fix | Delete
summary_cdn: 'dash_summary',
[83] Fix | Delete
'smush-dashboard-cdn-upsell': 'dash_widget',
[84] Fix | Delete
smush_bulksmush_cdn: 'bulk_smush_progress',
[85] Fix | Delete
smush_cdn_upgrade_button: 'cdn_page',
[86] Fix | Delete
smush_bulksmush_library_gif_cdn: 'media_library',
[87] Fix | Delete
smush_bulk_smush_complete_global: 'bulk_smush_complete',
[88] Fix | Delete
[89] Fix | Delete
// Local WebP.
[90] Fix | Delete
summary_local_webp: 'dash_summary',
[91] Fix | Delete
'smush-dashboard-local-webp-upsell': 'dash_widget',
[92] Fix | Delete
// smush_webp_upgrade_button: 'webp_page',// Handled inside React WebP - free-content.jsx
[93] Fix | Delete
};
[94] Fix | Delete
[95] Fix | Delete
if ( ! ( campaign in upsellLocations ) ) {
[96] Fix | Delete
return;
[97] Fix | Delete
}
[98] Fix | Delete
[99] Fix | Delete
const Location = upsellLocations[ campaign ];
[100] Fix | Delete
const matches = campaign.match( /(cdn|webp)/i );
[101] Fix | Delete
const upsellModule = matches && matches[ 0 ];
[102] Fix | Delete
[103] Fix | Delete
const eventName = 'webp' === upsellModule ? 'local_webp_upsell' : 'cdn_upsell';
[104] Fix | Delete
tracker.track( eventName, { Location } );
[105] Fix | Delete
} );
[106] Fix | Delete
} );
[107] Fix | Delete
}
[108] Fix | Delete
[109] Fix | Delete
trackScanInterruptedEventOnStopScanningModal() {
[110] Fix | Delete
const stopScanningModal = document.getElementById( 'smush-stop-scanning-dialog' );
[111] Fix | Delete
if ( ! stopScanningModal ) {
[112] Fix | Delete
return;
[113] Fix | Delete
}
[114] Fix | Delete
[115] Fix | Delete
const closeButtons = stopScanningModal.querySelectorAll( '[data-modal-close]' );
[116] Fix | Delete
closeButtons.forEach( ( closeButton ) => {
[117] Fix | Delete
closeButton.addEventListener( 'click', ( e ) => {
[118] Fix | Delete
const action = e.target.dataset?.action || 'Close';
[119] Fix | Delete
this.trackScanInterruptedEvent( {
[120] Fix | Delete
Trigger: 'cancel_in_progress',
[121] Fix | Delete
'Modal Action': action,
[122] Fix | Delete
} );
[123] Fix | Delete
} );
[124] Fix | Delete
} );
[125] Fix | Delete
}
[126] Fix | Delete
[127] Fix | Delete
trackBulkSmushInterruptedEventOnStopBulkSmushModal() {
[128] Fix | Delete
const stopBulkSmushModal = document.getElementById( 'smush-stop-bulk-smush-modal' );
[129] Fix | Delete
if ( ! stopBulkSmushModal ) {
[130] Fix | Delete
return;
[131] Fix | Delete
}
[132] Fix | Delete
const closeButtons = stopBulkSmushModal.querySelectorAll( '[data-modal-close]' );
[133] Fix | Delete
closeButtons.forEach( ( closeButton ) => {
[134] Fix | Delete
closeButton.addEventListener( 'click', ( e ) => {
[135] Fix | Delete
const action = e.target.dataset?.action || 'Close';
[136] Fix | Delete
this.trackBulkSmushInterruptedEvent( {
[137] Fix | Delete
Trigger: 'cancel_in_progress',
[138] Fix | Delete
'Modal Action': action,
[139] Fix | Delete
} );
[140] Fix | Delete
} );
[141] Fix | Delete
} );
[142] Fix | Delete
}
[143] Fix | Delete
[144] Fix | Delete
trackScanInterruptedEventOnRetryScanModal() {
[145] Fix | Delete
const retryScanModal = document.getElementById( 'smush-retry-scan-notice' );
[146] Fix | Delete
if ( ! retryScanModal ) {
[147] Fix | Delete
return;
[148] Fix | Delete
}
[149] Fix | Delete
const retryButton = retryScanModal.querySelector( '.smush-retry-scan-notice-button' );
[150] Fix | Delete
if ( retryButton ) {
[151] Fix | Delete
retryButton.addEventListener( 'click', ( e ) => {
[152] Fix | Delete
const recheckImagesBtn = document.querySelector( '.wp-smush-scan' );
[153] Fix | Delete
if ( recheckImagesBtn ) {
[154] Fix | Delete
this.trackScanInterruptedEvent( {
[155] Fix | Delete
Trigger: 'failed_modal',
[156] Fix | Delete
'Modal Action': 'Retry',
[157] Fix | Delete
} );
[158] Fix | Delete
return;
[159] Fix | Delete
}
[160] Fix | Delete
e.preventDefault();
[161] Fix | Delete
[162] Fix | Delete
const event = 'Scan Interrupted';
[163] Fix | Delete
const properties = this.getScanInterruptedEventProperties( {
[164] Fix | Delete
Trigger: 'failed_modal',
[165] Fix | Delete
'Modal Action': 'Retry',
[166] Fix | Delete
} );
[167] Fix | Delete
[168] Fix | Delete
tracker.track( event, properties ).catch( () => {
[169] Fix | Delete
this.cacheMissedEvent( {
[170] Fix | Delete
event,
[171] Fix | Delete
properties,
[172] Fix | Delete
} );
[173] Fix | Delete
} ).finally( () => {
[174] Fix | Delete
window.location.href = e.target.href;
[175] Fix | Delete
} );
[176] Fix | Delete
} );
[177] Fix | Delete
}
[178] Fix | Delete
const closeButtons = retryScanModal.querySelectorAll( '[data-modal-close]' );
[179] Fix | Delete
closeButtons.forEach( ( closeButton ) => {
[180] Fix | Delete
closeButton.addEventListener( 'click', ( e ) => {
[181] Fix | Delete
const action = e.target.dataset?.action || 'Close';
[182] Fix | Delete
this.trackScanInterruptedEvent( {
[183] Fix | Delete
Trigger: 'failed_modal',
[184] Fix | Delete
'Modal Action': action,
[185] Fix | Delete
} );
[186] Fix | Delete
} );
[187] Fix | Delete
} );
[188] Fix | Delete
}
[189] Fix | Delete
[190] Fix | Delete
trackBulkSmushInterruptedEventOnRetryBulkSmushModal() {
[191] Fix | Delete
const retryBulkModal = document.getElementById( 'smush-retry-bulk-smush-notice' );
[192] Fix | Delete
if ( ! retryBulkModal ) {
[193] Fix | Delete
return;
[194] Fix | Delete
}
[195] Fix | Delete
[196] Fix | Delete
const retryButton = retryBulkModal.querySelector( '.smush-retry-bulk-smush-notice-button' );
[197] Fix | Delete
if ( retryButton ) {
[198] Fix | Delete
retryButton.addEventListener( 'click', () => {
[199] Fix | Delete
this.trackBulkSmushInterruptedEvent( {
[200] Fix | Delete
Trigger: 'failed_modal',
[201] Fix | Delete
'Modal Action': 'Retry',
[202] Fix | Delete
} );
[203] Fix | Delete
} );
[204] Fix | Delete
}
[205] Fix | Delete
[206] Fix | Delete
const closeButtons = retryBulkModal.querySelectorAll( '[data-modal-close]' );
[207] Fix | Delete
closeButtons.forEach( ( closeButton ) => {
[208] Fix | Delete
closeButton.addEventListener( 'click', ( e ) => {
[209] Fix | Delete
const action = e.target.dataset?.action || 'Close';
[210] Fix | Delete
this.trackBulkSmushInterruptedEvent( {
[211] Fix | Delete
Trigger: 'failed_modal',
[212] Fix | Delete
'Modal Action': action,
[213] Fix | Delete
} );
[214] Fix | Delete
} );
[215] Fix | Delete
} );
[216] Fix | Delete
}
[217] Fix | Delete
[218] Fix | Delete
trackScanInterruptedEvent( properties ) {
[219] Fix | Delete
return tracker.track( 'Scan Interrupted', this.getScanInterruptedEventProperties( properties ) );
[220] Fix | Delete
}
[221] Fix | Delete
[222] Fix | Delete
getScanInterruptedEventProperties( properties ) {
[223] Fix | Delete
return Object.assign( {
[224] Fix | Delete
Troubleshoot: this.troubleshootClicked ? 'Yes' : 'No',
[225] Fix | Delete
}, properties );
[226] Fix | Delete
}
[227] Fix | Delete
[228] Fix | Delete
trackBulkSmushInterruptedEventWhenExitingAjaxBulkSmush() {
[229] Fix | Delete
if ( this.canUseBackgroundOptimization() ) {
[230] Fix | Delete
return;
[231] Fix | Delete
}
[232] Fix | Delete
[233] Fix | Delete
const progressBar = document.querySelector( '.wp-smush-bulk-progress-bar-wrapper' );
[234] Fix | Delete
if ( ! progressBar ) {
[235] Fix | Delete
return;
[236] Fix | Delete
}
[237] Fix | Delete
[238] Fix | Delete
window.addEventListener( 'beforeunload', () => {
[239] Fix | Delete
const ajaxBulkSmushObject = window.WP_Smush?.bulk?.bulkSmush;
[240] Fix | Delete
const isBulkSmushInProgressing = ajaxBulkSmushObject && ajaxBulkSmushObject.ids.length > 0 && ! progressBar.classList.contains( 'sui-hidden' );
[241] Fix | Delete
if ( ! isBulkSmushInProgressing ) {
[242] Fix | Delete
return;
[243] Fix | Delete
}
[244] Fix | Delete
[245] Fix | Delete
const isFreeExceeded = progressBar.classList.contains( 'wp-smush-exceed-limit' );
[246] Fix | Delete
[247] Fix | Delete
const event = 'Bulk Smush Interrupted';
[248] Fix | Delete
const properties = this.getBulkSmushInterruptedEventProperties(
[249] Fix | Delete
{
[250] Fix | Delete
Trigger: isFreeExceeded ? 'exit_50_limit' : 'exit_in_progress',
[251] Fix | Delete
'Modal Action': 'Exit',
[252] Fix | Delete
'Retry Attempts': this.resumeBulkSmushCount,
[253] Fix | Delete
}
[254] Fix | Delete
);
[255] Fix | Delete
[256] Fix | Delete
tracker.track( event, properties ).catch( () => {
[257] Fix | Delete
this.cacheMissedEvent( {
[258] Fix | Delete
event,
[259] Fix | Delete
properties,
[260] Fix | Delete
} );
[261] Fix | Delete
} );
[262] Fix | Delete
} );
[263] Fix | Delete
}
[264] Fix | Delete
[265] Fix | Delete
cacheMissedEvent( eventData ) {
[266] Fix | Delete
if ( window.localStorage ) {
[267] Fix | Delete
// As now we only use it for one event, so let's keep it as a simple array.
[268] Fix | Delete
window.localStorage.setItem( this.missedEventsKey, JSON.stringify( [ eventData ] ) );
[269] Fix | Delete
}
[270] Fix | Delete
}
[271] Fix | Delete
[272] Fix | Delete
getMissedEvents() {
[273] Fix | Delete
if ( ! window.localStorage ) {
[274] Fix | Delete
return [];
[275] Fix | Delete
}
[276] Fix | Delete
[277] Fix | Delete
const properties = window.localStorage.getItem( this.missedEventsKey );
[278] Fix | Delete
if ( ! properties ) {
[279] Fix | Delete
return [];
[280] Fix | Delete
}
[281] Fix | Delete
[282] Fix | Delete
return JSON.parse( properties );
[283] Fix | Delete
}
[284] Fix | Delete
[285] Fix | Delete
clearMissedEvents() {
[286] Fix | Delete
if ( window.localStorage ) {
[287] Fix | Delete
window.localStorage.removeItem( this.missedEventsKey );
[288] Fix | Delete
}
[289] Fix | Delete
}
[290] Fix | Delete
[291] Fix | Delete
canUseBackgroundOptimization() {
[292] Fix | Delete
return 'undefined' !== typeof window.wp_smushit_data?.bo_stats;
[293] Fix | Delete
}
[294] Fix | Delete
[295] Fix | Delete
trackBulkSmushInterruptedEvent( properties ) {
[296] Fix | Delete
return tracker.track( 'Bulk Smush Interrupted', this.getBulkSmushInterruptedEventProperties( properties ) );
[297] Fix | Delete
}
[298] Fix | Delete
[299] Fix | Delete
getBulkSmushInterruptedEventProperties( properties ) {
[300] Fix | Delete
return Object.assign(
[301] Fix | Delete
{
[302] Fix | Delete
Troubleshoot: this.troubleshootClicked ? 'Yes' : 'No',
[303] Fix | Delete
},
[304] Fix | Delete
this.getBulkSmushProcessStats(),
[305] Fix | Delete
properties
[306] Fix | Delete
);
[307] Fix | Delete
}
[308] Fix | Delete
[309] Fix | Delete
getBulkSmushProcessStats() {
[310] Fix | Delete
if ( this.canUseBackgroundOptimization() ) {
[311] Fix | Delete
// Handled it via PHP.
[312] Fix | Delete
return {};
[313] Fix | Delete
}
[314] Fix | Delete
const ajaxBulkSmushObject = window.WP_Smush?.bulk?.bulkSmush;
[315] Fix | Delete
const totalEnqueuedImages = ajaxBulkSmushObject?.total || 0;
[316] Fix | Delete
const processedImages = ajaxBulkSmushObject?.smushed + ajaxBulkSmushObject?.errors.length;
[317] Fix | Delete
const completionPercentage = totalEnqueuedImages > 0 ? Math.ceil( processedImages * 100 / totalEnqueuedImages ) : 0;
[318] Fix | Delete
[319] Fix | Delete
return {
[320] Fix | Delete
'Retry Attempts': this.resumeBulkSmushCount,
[321] Fix | Delete
'Total Enqueued Images': totalEnqueuedImages,
[322] Fix | Delete
'Completion Percentage': completionPercentage,
[323] Fix | Delete
};
[324] Fix | Delete
}
[325] Fix | Delete
[326] Fix | Delete
trackInterruptedEventFromInlineNotice() {
[327] Fix | Delete
this.trackInterruptedEventFromInlineNoticeOnDashboard();
[328] Fix | Delete
this.trackBulkSmushInterruptedEventFromInlineNoticeOnBulkSmush();
[329] Fix | Delete
this.trackScanInterruptedEventFromInlineNoticeOnBulkSmush();
[330] Fix | Delete
}
[331] Fix | Delete
[332] Fix | Delete
trackInterruptedEventFromInlineNoticeOnDashboard() {
[333] Fix | Delete
const dashboardBulkElement = document.getElementById( 'smush-box-dashboard-bulk' );
[334] Fix | Delete
if ( ! dashboardBulkElement ) {
[335] Fix | Delete
return;
[336] Fix | Delete
}
[337] Fix | Delete
this.trackBulkSmushInterruptedEventFromInlineNoticeOnDashboard( dashboardBulkElement );
[338] Fix | Delete
this.trackScanInterruptedEventFromInlineNoticeOnDashboard( dashboardBulkElement );
[339] Fix | Delete
}
[340] Fix | Delete
[341] Fix | Delete
trackBulkSmushInterruptedEventFromInlineNoticeOnDashboard( dashboardBulkElement ) {
[342] Fix | Delete
const triggerBulkSmushButton = dashboardBulkElement.querySelector( '.wp-smush-retry-bulk-smush-link' );
[343] Fix | Delete
if ( ! triggerBulkSmushButton ) {
[344] Fix | Delete
return;
[345] Fix | Delete
}
[346] Fix | Delete
triggerBulkSmushButton.addEventListener( 'click', ( e ) => {
[347] Fix | Delete
e.preventDefault();
[348] Fix | Delete
[349] Fix | Delete
const event = 'Bulk Smush Interrupted';
[350] Fix | Delete
const properties = this.getBulkSmushInterruptedEventProperties(
[351] Fix | Delete
{
[352] Fix | Delete
Trigger: 'failed_notice',
[353] Fix | Delete
'Modal Action': 'Retry',
[354] Fix | Delete
}
[355] Fix | Delete
);
[356] Fix | Delete
[357] Fix | Delete
tracker.track( event, properties ).catch( () => {
[358] Fix | Delete
this.cacheMissedEvent( {
[359] Fix | Delete
event,
[360] Fix | Delete
properties,
[361] Fix | Delete
} );
[362] Fix | Delete
} ).finally( () => {
[363] Fix | Delete
window.location.href = e.target.href;
[364] Fix | Delete
} );
[365] Fix | Delete
} );
[366] Fix | Delete
}
[367] Fix | Delete
[368] Fix | Delete
trackBulkSmushInterruptedInlineNoticeEvent() {
[369] Fix | Delete
return this.trackBulkSmushInterruptedEvent( {
[370] Fix | Delete
Trigger: 'failed_notice',
[371] Fix | Delete
'Modal Action': 'Retry',
[372] Fix | Delete
} );
[373] Fix | Delete
}
[374] Fix | Delete
[375] Fix | Delete
trackBulkSmushInterruptedEventFromInlineNoticeOnBulkSmush() {
[376] Fix | Delete
const triggerBulkSmushButton = document.querySelector( '.wp-smush-inline-retry-bulk-smush-notice .wp-smush-trigger-bulk-smush' );
[377] Fix | Delete
if ( ! triggerBulkSmushButton ) {
[378] Fix | Delete
return;
[379] Fix | Delete
}
[380] Fix | Delete
[381] Fix | Delete
triggerBulkSmushButton.addEventListener( 'click', () => {
[382] Fix | Delete
this.trackBulkSmushInterruptedInlineNoticeEvent();
[383] Fix | Delete
} );
[384] Fix | Delete
}
[385] Fix | Delete
[386] Fix | Delete
trackScanInterruptedEventFromInlineNoticeOnDashboard( dashboardBulkElement ) {
[387] Fix | Delete
const triggerScanButton = dashboardBulkElement.querySelector( '.wp-smush-retry-scan-link' );
[388] Fix | Delete
if ( ! triggerScanButton ) {
[389] Fix | Delete
return;
[390] Fix | Delete
}
[391] Fix | Delete
[392] Fix | Delete
triggerScanButton.addEventListener( 'click', ( e ) => {
[393] Fix | Delete
e.preventDefault();
[394] Fix | Delete
[395] Fix | Delete
const event = 'Scan Interrupted';
[396] Fix | Delete
const properties = this.getScanInterruptedEventProperties( {
[397] Fix | Delete
Trigger: 'failed_notice',
[398] Fix | Delete
'Modal Action': 'Retry',
[399] Fix | Delete
} );
[400] Fix | Delete
[401] Fix | Delete
tracker.track( event, properties ).catch( () => {
[402] Fix | Delete
this.cacheMissedEvent( {
[403] Fix | Delete
event,
[404] Fix | Delete
properties,
[405] Fix | Delete
} );
[406] Fix | Delete
} ).finally( () => {
[407] Fix | Delete
window.location.href = e.target.href;
[408] Fix | Delete
} );
[409] Fix | Delete
} );
[410] Fix | Delete
}
[411] Fix | Delete
[412] Fix | Delete
trackScanInterruptedEventFromInlineNoticeOnBulkSmush() {
[413] Fix | Delete
const recheckImagesNotice = document.querySelector( '.wp-smush-recheck-images-notice-box' );
[414] Fix | Delete
if ( ! recheckImagesNotice ) {
[415] Fix | Delete
return;
[416] Fix | Delete
}
[417] Fix | Delete
const triggerBackgroundScanImagesLink = recheckImagesNotice.querySelector( '.wp-smush-trigger-background-scan' );
[418] Fix | Delete
if ( triggerBackgroundScanImagesLink ) {
[419] Fix | Delete
triggerBackgroundScanImagesLink.addEventListener( 'click', () => {
[420] Fix | Delete
// We are using the same frame for failed scan notice and generic required scan notice,
[421] Fix | Delete
// so we need to verify the failed notice before tracking the event.
[422] Fix | Delete
const containTroubleshootingLink = triggerBackgroundScanImagesLink?.previousElementSibling?.querySelector( 'a' );
[423] Fix | Delete
if ( ! containTroubleshootingLink ) {
[424] Fix | Delete
return;
[425] Fix | Delete
}
[426] Fix | Delete
this.trackScanInterruptedEvent( {
[427] Fix | Delete
Trigger: 'failed_notice',
[428] Fix | Delete
'Modal Action': 'Retry',
[429] Fix | Delete
} );
[430] Fix | Delete
} );
[431] Fix | Delete
}
[432] Fix | Delete
}
[433] Fix | Delete
[434] Fix | Delete
trackInterruptedEventFromLoopbackErrorModal() {
[435] Fix | Delete
const loopbackErrorModal = document.getElementById( 'smush-loopback-error-dialog' );
[436] Fix | Delete
if ( ! loopbackErrorModal ) {
[437] Fix | Delete
return;
[438] Fix | Delete
}
[439] Fix | Delete
[440] Fix | Delete
const loopbackErrorDocsLink = loopbackErrorModal.querySelector( 'a[href*="#loopback-request-issue"]' );
[441] Fix | Delete
let isTroubleshootClicked = false;
[442] Fix | Delete
if ( loopbackErrorDocsLink ) {
[443] Fix | Delete
loopbackErrorDocsLink.addEventListener( 'click', () => {
[444] Fix | Delete
isTroubleshootClicked = true;
[445] Fix | Delete
}, { once: true } );
[446] Fix | Delete
}
[447] Fix | Delete
[448] Fix | Delete
const trackLoopbackErrorEvent = ( action, processType ) => {
[449] Fix | Delete
const properties = {
[450] Fix | Delete
Trigger: 'loopback_error',
[451] Fix | Delete
'Modal Action': action,
[452] Fix | Delete
Troubleshoot: isTroubleshootClicked ? 'Yes' : 'No',
[453] Fix | Delete
};
[454] Fix | Delete
[455] Fix | Delete
if ( 'scan' === processType ) {
[456] Fix | Delete
this.trackScanInterruptedEvent( properties );
[457] Fix | Delete
} else {
[458] Fix | Delete
this.trackBulkSmushInterruptedEvent( properties );
[459] Fix | Delete
}
[460] Fix | Delete
};
[461] Fix | Delete
[462] Fix | Delete
const closeButtons = loopbackErrorModal.querySelectorAll( '[data-modal-close]' );
[463] Fix | Delete
closeButtons.forEach( ( closeButton ) => {
[464] Fix | Delete
closeButton.addEventListener( 'click', ( e ) => {
[465] Fix | Delete
const action = e.target.dataset?.action || 'Close';
[466] Fix | Delete
const processType = loopbackErrorModal.dataset?.processType || 'scan';
[467] Fix | Delete
trackLoopbackErrorEvent( action, processType );
[468] Fix | Delete
} );
[469] Fix | Delete
} );
[470] Fix | Delete
}
[471] Fix | Delete
[472] Fix | Delete
registerTroubleshootClickEvent() {
[473] Fix | Delete
const troubleshootLinks = document.querySelectorAll( 'a[href*="#troubleshooting-guide"]' );
[474] Fix | Delete
if ( ! troubleshootLinks ) {
[475] Fix | Delete
return;
[476] Fix | Delete
}
[477] Fix | Delete
[478] Fix | Delete
troubleshootLinks.forEach( ( troubleshootLink ) => {
[479] Fix | Delete
troubleshootLink.addEventListener( 'click', () => {
[480] Fix | Delete
this.troubleshootClicked = true;
[481] Fix | Delete
}, { once: true } );
[482] Fix | Delete
} );
[483] Fix | Delete
}
[484] Fix | Delete
[485] Fix | Delete
maybeTrackMissedEventsOnLoad() {
[486] Fix | Delete
window.addEventListener( 'load', () => {
[487] Fix | Delete
const missedEvents = this.getMissedEvents();
[488] Fix | Delete
if ( 0 === missedEvents.length ) {
[489] Fix | Delete
return;
[490] Fix | Delete
}
[491] Fix | Delete
[492] Fix | Delete
this.clearMissedEvents();
[493] Fix | Delete
[494] Fix | Delete
missedEvents.forEach( ( missedEvent ) => {
[495] Fix | Delete
tracker.track( missedEvent.event, missedEvent.properties );
[496] Fix | Delete
} );
[497] Fix | Delete
} );
[498] Fix | Delete
}
[499] Fix | Delete
12
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function