wp_back/wp-content/plugins/wp-smushit/_src/js/mixpanel.js
2024-05-20 15:37:46 +03:00

75 lines
2.0 KiB
JavaScript

/* global wp_smush_mixpanel */
import mixpanel from "mixpanel-browser";
class MixPanel {
constructor() {
// Opt out event is not triggered via js so only initial mixpanel when it's enabled.
this.mixpanelInstance = this.allowToTrack() && mixpanel.init(wp_smush_mixpanel.token, {
opt_out_tracking_by_default: ! this.allowToTrack(),
loaded: (mixpanel) => {
mixpanel.identify(wp_smush_mixpanel.unique_id);
mixpanel.register(wp_smush_mixpanel.super_properties);
if (mixpanel.has_opted_in_tracking() !== this.allowToTrack()) {
// The status cached by MixPanel in the local storage is different from the settings. Clear the cache.
mixpanel.clear_opt_in_out_tracking();
}
}
}, 'smush');
}
allowToTrack() {
return !! wp_smush_mixpanel.opt_in;
}
track(event, properties = {}) {
if ( wp_smush_mixpanel.debug ) {
console.log( 'Event:', event, properties );
}
this.mixpanelInstance && this.mixpanelInstance.track(event, properties);
}
trackBulkSmushCompleted( globalStats ) {
const {
savings_bytes,
count_images,
percent_optimized,
savings_percent,
count_resize,
savings_resize
} = globalStats;
this.track('Bulk Smush Completed', {
'Total Savings': this.convertToMegabytes( savings_bytes ),
'Total Images': count_images,
'Media Optimization Percentage': parseFloat( percent_optimized ),
'Percentage of Savings': parseFloat( savings_percent ),
'Images Resized': count_resize,
'Resize Savings': this.convertToMegabytes( savings_resize )
});
}
trackBulkSmushCancel() {
this.track('Bulk Smush Cancelled');
}
convertToMegabytes( sizeInBytes ) {
const unitMB = Math.pow( 1024, 2 );
const sizeInMegabytes = sizeInBytes/unitMB;
return sizeInMegabytes && parseFloat(sizeInMegabytes.toFixed(2)) || 0;
}
}
const mixPanelInstance = () => {
let instance;
return {
getInstance: () => {
if ( ! instance ) {
instance = new MixPanel();
}
return instance;
}
}
}
export default mixPanelInstance();