75 lines
2.0 KiB
JavaScript
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(); |