mixpanel-browser 2.67.0 → 2.68.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +5 -0
- package/dist/mixpanel-core.cjs.js +115 -4
- package/dist/mixpanel-recorder.js +1 -1
- package/dist/mixpanel-recorder.min.js +1 -1
- package/dist/mixpanel-recorder.min.js.map +1 -1
- package/dist/mixpanel-with-async-recorder.cjs.js +115 -4
- package/dist/mixpanel-with-recorder.js +115 -4
- package/dist/mixpanel-with-recorder.min.js +1 -1
- package/dist/mixpanel.amd.js +115 -4
- package/dist/mixpanel.cjs.js +115 -4
- package/dist/mixpanel.globals.js +115 -4
- package/dist/mixpanel.min.js +148 -146
- package/dist/mixpanel.module.js +115 -4
- package/dist/mixpanel.umd.js +115 -4
- package/package.json +1 -1
- package/src/autocapture/index.js +59 -1
- package/src/autocapture/rageclick.js +38 -0
- package/src/config.js +1 -1
- package/src/flags/index.js +22 -1
- package/src/index.d.ts +18 -0
- package/src/mixpanel-core.js +2 -1
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var Config = {
|
|
4
4
|
DEBUG: false,
|
|
5
|
-
LIB_VERSION: '2.
|
|
5
|
+
LIB_VERSION: '2.68.0'
|
|
6
6
|
};
|
|
7
7
|
|
|
8
8
|
// since es6 imports are static and we run unit tests from the console, window won't be defined when importing this file
|
|
@@ -2654,6 +2654,38 @@ function shouldTrackValue(value) {
|
|
|
2654
2654
|
return true;
|
|
2655
2655
|
}
|
|
2656
2656
|
|
|
2657
|
+
/** @const */ var DEFAULT_RAGE_CLICK_THRESHOLD_PX = 30;
|
|
2658
|
+
/** @const */ var DEFAULT_RAGE_CLICK_TIMEOUT_MS = 1000;
|
|
2659
|
+
/** @const */ var DEFAULT_RAGE_CLICK_CLICK_COUNT = 4;
|
|
2660
|
+
|
|
2661
|
+
function RageClickTracker() {
|
|
2662
|
+
this.clicks = [];
|
|
2663
|
+
}
|
|
2664
|
+
|
|
2665
|
+
RageClickTracker.prototype.isRageClick = function(x, y, options) {
|
|
2666
|
+
options = options || {};
|
|
2667
|
+
var thresholdPx = options['threshold_px'] || DEFAULT_RAGE_CLICK_THRESHOLD_PX;
|
|
2668
|
+
var timeoutMs = options['timeout_ms'] || DEFAULT_RAGE_CLICK_TIMEOUT_MS;
|
|
2669
|
+
var clickCount = options['click_count'] || DEFAULT_RAGE_CLICK_CLICK_COUNT;
|
|
2670
|
+
var timestamp = Date.now();
|
|
2671
|
+
|
|
2672
|
+
var lastClick = this.clicks[this.clicks.length - 1];
|
|
2673
|
+
if (
|
|
2674
|
+
lastClick &&
|
|
2675
|
+
timestamp - lastClick.timestamp < timeoutMs &&
|
|
2676
|
+
Math.sqrt(Math.pow(x - lastClick.x, 2) + Math.pow(y - lastClick.y, 2)) < thresholdPx
|
|
2677
|
+
) {
|
|
2678
|
+
this.clicks.push({ x: x, y: y, timestamp: timestamp });
|
|
2679
|
+
if (this.clicks.length >= clickCount) {
|
|
2680
|
+
this.clicks = [];
|
|
2681
|
+
return true;
|
|
2682
|
+
}
|
|
2683
|
+
} else {
|
|
2684
|
+
this.clicks = [{ x: x, y: y, timestamp: timestamp }];
|
|
2685
|
+
}
|
|
2686
|
+
return false;
|
|
2687
|
+
};
|
|
2688
|
+
|
|
2657
2689
|
var AUTOCAPTURE_CONFIG_KEY = 'autocapture';
|
|
2658
2690
|
var LEGACY_PAGEVIEW_CONFIG_KEY = 'track_pageview';
|
|
2659
2691
|
|
|
@@ -2675,6 +2707,7 @@ var CONFIG_SCROLL_CHECKPOINTS = 'scroll_depth_percent_checkpoints';
|
|
|
2675
2707
|
var CONFIG_TRACK_CLICK = 'click';
|
|
2676
2708
|
var CONFIG_TRACK_INPUT = 'input';
|
|
2677
2709
|
var CONFIG_TRACK_PAGEVIEW = 'pageview';
|
|
2710
|
+
var CONFIG_TRACK_RAGE_CLICK = 'rage_click';
|
|
2678
2711
|
var CONFIG_TRACK_SCROLL = 'scroll';
|
|
2679
2712
|
var CONFIG_TRACK_SUBMIT = 'submit';
|
|
2680
2713
|
|
|
@@ -2692,6 +2725,7 @@ CONFIG_DEFAULTS$1[CONFIG_SCROLL_CHECKPOINTS] = [25, 50, 75, 100];
|
|
|
2692
2725
|
CONFIG_DEFAULTS$1[CONFIG_TRACK_CLICK] = true;
|
|
2693
2726
|
CONFIG_DEFAULTS$1[CONFIG_TRACK_INPUT] = true;
|
|
2694
2727
|
CONFIG_DEFAULTS$1[CONFIG_TRACK_PAGEVIEW] = PAGEVIEW_OPTION_FULL_URL;
|
|
2728
|
+
CONFIG_DEFAULTS$1[CONFIG_TRACK_RAGE_CLICK] = true;
|
|
2695
2729
|
CONFIG_DEFAULTS$1[CONFIG_TRACK_SCROLL] = true;
|
|
2696
2730
|
CONFIG_DEFAULTS$1[CONFIG_TRACK_SUBMIT] = true;
|
|
2697
2731
|
|
|
@@ -2701,6 +2735,7 @@ var DEFAULT_PROPS = {
|
|
|
2701
2735
|
|
|
2702
2736
|
var MP_EV_CLICK = '$mp_click';
|
|
2703
2737
|
var MP_EV_INPUT = '$mp_input_change';
|
|
2738
|
+
var MP_EV_RAGE_CLICK = '$mp_rage_click';
|
|
2704
2739
|
var MP_EV_SCROLL = '$mp_scroll';
|
|
2705
2740
|
var MP_EV_SUBMIT = '$mp_submit';
|
|
2706
2741
|
|
|
@@ -2723,6 +2758,7 @@ Autocapture.prototype.init = function() {
|
|
|
2723
2758
|
this.initInputTracking();
|
|
2724
2759
|
this.initScrollTracking();
|
|
2725
2760
|
this.initSubmitTracking();
|
|
2761
|
+
this.initRageClickTracking();
|
|
2726
2762
|
};
|
|
2727
2763
|
|
|
2728
2764
|
Autocapture.prototype.getFullConfig = function() {
|
|
@@ -2801,6 +2837,11 @@ Autocapture.prototype.trackDomEvent = function(ev, mpEventName) {
|
|
|
2801
2837
|
return;
|
|
2802
2838
|
}
|
|
2803
2839
|
|
|
2840
|
+
var isCapturedForHeatMap = this.mp.is_recording_heatmap_data() && (
|
|
2841
|
+
(mpEventName === MP_EV_CLICK && !this.getConfig(CONFIG_TRACK_CLICK)) ||
|
|
2842
|
+
(mpEventName === MP_EV_RAGE_CLICK && !this._getRageClickConfig())
|
|
2843
|
+
);
|
|
2844
|
+
|
|
2804
2845
|
var props = getPropsForDOMEvent(ev, {
|
|
2805
2846
|
allowElementCallback: this.getConfig(CONFIG_ALLOW_ELEMENT_CALLBACK),
|
|
2806
2847
|
allowSelectors: this.getConfig(CONFIG_ALLOW_SELECTORS),
|
|
@@ -2809,7 +2850,7 @@ Autocapture.prototype.trackDomEvent = function(ev, mpEventName) {
|
|
|
2809
2850
|
blockSelectors: this.getConfig(CONFIG_BLOCK_SELECTORS),
|
|
2810
2851
|
captureExtraAttrs: this.getConfig(CONFIG_CAPTURE_EXTRA_ATTRS),
|
|
2811
2852
|
captureTextContent: this.getConfig(CONFIG_CAPTURE_TEXT_CONTENT),
|
|
2812
|
-
capturedForHeatMap:
|
|
2853
|
+
capturedForHeatMap: isCapturedForHeatMap,
|
|
2813
2854
|
});
|
|
2814
2855
|
if (props) {
|
|
2815
2856
|
_.extend(props, DEFAULT_PROPS);
|
|
@@ -2817,6 +2858,24 @@ Autocapture.prototype.trackDomEvent = function(ev, mpEventName) {
|
|
|
2817
2858
|
}
|
|
2818
2859
|
};
|
|
2819
2860
|
|
|
2861
|
+
Autocapture.prototype._getRageClickConfig = function() {
|
|
2862
|
+
var config = this.getConfig(CONFIG_TRACK_RAGE_CLICK);
|
|
2863
|
+
|
|
2864
|
+
if (!config) {
|
|
2865
|
+
return null; // rage click tracking disabled
|
|
2866
|
+
}
|
|
2867
|
+
|
|
2868
|
+
if (config === true) {
|
|
2869
|
+
return {}; // use defaults
|
|
2870
|
+
}
|
|
2871
|
+
|
|
2872
|
+
if (typeof config === 'object') {
|
|
2873
|
+
return config; // use custom configuration
|
|
2874
|
+
}
|
|
2875
|
+
|
|
2876
|
+
return {}; // fallback to defaults for any other truthy value
|
|
2877
|
+
};
|
|
2878
|
+
|
|
2820
2879
|
Autocapture.prototype.initClickTracking = function() {
|
|
2821
2880
|
win.removeEventListener(EV_CLICK, this.listenerClick);
|
|
2822
2881
|
|
|
@@ -2918,6 +2977,36 @@ Autocapture.prototype.initPageviewTracking = function() {
|
|
|
2918
2977
|
}.bind(this)));
|
|
2919
2978
|
};
|
|
2920
2979
|
|
|
2980
|
+
Autocapture.prototype.initRageClickTracking = function() {
|
|
2981
|
+
win.removeEventListener(EV_CLICK, this.listenerRageClick);
|
|
2982
|
+
|
|
2983
|
+
var rageClickConfig = this._getRageClickConfig();
|
|
2984
|
+
if (!rageClickConfig && !this.mp.get_config('record_heatmap_data')) {
|
|
2985
|
+
return;
|
|
2986
|
+
}
|
|
2987
|
+
|
|
2988
|
+
logger$4.log('Initializing rage click tracking');
|
|
2989
|
+
if (!this._rageClickTracker) {
|
|
2990
|
+
this._rageClickTracker = new RageClickTracker();
|
|
2991
|
+
}
|
|
2992
|
+
|
|
2993
|
+
this.listenerRageClick = function(ev) {
|
|
2994
|
+
var currentRageClickConfig = this._getRageClickConfig();
|
|
2995
|
+
if (!currentRageClickConfig && !this.mp.is_recording_heatmap_data()) {
|
|
2996
|
+
return;
|
|
2997
|
+
}
|
|
2998
|
+
|
|
2999
|
+
if (this.currentUrlBlocked()) {
|
|
3000
|
+
return;
|
|
3001
|
+
}
|
|
3002
|
+
|
|
3003
|
+
if (this._rageClickTracker.isRageClick(ev['pageX'], ev['pageY'], currentRageClickConfig)) {
|
|
3004
|
+
this.trackDomEvent(ev, MP_EV_RAGE_CLICK);
|
|
3005
|
+
}
|
|
3006
|
+
}.bind(this);
|
|
3007
|
+
win.addEventListener(EV_CLICK, this.listenerRageClick);
|
|
3008
|
+
};
|
|
3009
|
+
|
|
2921
3010
|
Autocapture.prototype.initScrollTracking = function() {
|
|
2922
3011
|
win.removeEventListener(EV_SCROLLEND, this.listenerScroll);
|
|
2923
3012
|
|
|
@@ -3004,6 +3093,7 @@ CONFIG_DEFAULTS[CONFIG_CONTEXT] = {};
|
|
|
3004
3093
|
var FeatureFlagManager = function(initOptions) {
|
|
3005
3094
|
this.getFullApiRoute = initOptions.getFullApiRoute;
|
|
3006
3095
|
this.getMpConfig = initOptions.getConfigFunc;
|
|
3096
|
+
this.setMpConfig = initOptions.setConfigFunc;
|
|
3007
3097
|
this.getMpProperty = initOptions.getPropertyFunc;
|
|
3008
3098
|
this.track = initOptions.trackingFunc;
|
|
3009
3099
|
};
|
|
@@ -3041,6 +3131,23 @@ FeatureFlagManager.prototype.isSystemEnabled = function() {
|
|
|
3041
3131
|
return !!this.getMpConfig(FLAGS_CONFIG_KEY);
|
|
3042
3132
|
};
|
|
3043
3133
|
|
|
3134
|
+
FeatureFlagManager.prototype.updateContext = function(newContext, options) {
|
|
3135
|
+
if (!this.isSystemEnabled()) {
|
|
3136
|
+
logger$3.critical('Feature Flags not enabled, cannot update context');
|
|
3137
|
+
return Promise.resolve();
|
|
3138
|
+
}
|
|
3139
|
+
|
|
3140
|
+
var ffConfig = this.getMpConfig(FLAGS_CONFIG_KEY);
|
|
3141
|
+
if (!_.isObject(ffConfig)) {
|
|
3142
|
+
ffConfig = {};
|
|
3143
|
+
}
|
|
3144
|
+
var oldContext = (options && options['replace']) ? {} : this.getConfig(CONFIG_CONTEXT);
|
|
3145
|
+
ffConfig[CONFIG_CONTEXT] = _.extend({}, oldContext, newContext);
|
|
3146
|
+
|
|
3147
|
+
this.setMpConfig(FLAGS_CONFIG_KEY, ffConfig);
|
|
3148
|
+
return this.fetchFlags();
|
|
3149
|
+
};
|
|
3150
|
+
|
|
3044
3151
|
FeatureFlagManager.prototype.areFlagsReady = function() {
|
|
3045
3152
|
if (!this.isSystemEnabled()) {
|
|
3046
3153
|
logger$3.error('Feature Flags not enabled');
|
|
@@ -3050,7 +3157,7 @@ FeatureFlagManager.prototype.areFlagsReady = function() {
|
|
|
3050
3157
|
|
|
3051
3158
|
FeatureFlagManager.prototype.fetchFlags = function() {
|
|
3052
3159
|
if (!this.isSystemEnabled()) {
|
|
3053
|
-
return;
|
|
3160
|
+
return Promise.resolve();
|
|
3054
3161
|
}
|
|
3055
3162
|
|
|
3056
3163
|
var distinctId = this.getMpProperty('distinct_id');
|
|
@@ -3090,6 +3197,8 @@ FeatureFlagManager.prototype.fetchFlags = function() {
|
|
|
3090
3197
|
this.markFetchComplete();
|
|
3091
3198
|
logger$3.error(error);
|
|
3092
3199
|
}.bind(this));
|
|
3200
|
+
|
|
3201
|
+
return this.fetchPromise;
|
|
3093
3202
|
};
|
|
3094
3203
|
|
|
3095
3204
|
FeatureFlagManager.prototype.markFetchComplete = function() {
|
|
@@ -3202,6 +3311,7 @@ FeatureFlagManager.prototype['get_variant_value'] = FeatureFlagManager.prototype
|
|
|
3202
3311
|
FeatureFlagManager.prototype['get_variant_value_sync'] = FeatureFlagManager.prototype.getVariantValueSync;
|
|
3203
3312
|
FeatureFlagManager.prototype['is_enabled'] = FeatureFlagManager.prototype.isEnabled;
|
|
3204
3313
|
FeatureFlagManager.prototype['is_enabled_sync'] = FeatureFlagManager.prototype.isEnabledSync;
|
|
3314
|
+
FeatureFlagManager.prototype['update_context'] = FeatureFlagManager.prototype.updateContext;
|
|
3205
3315
|
|
|
3206
3316
|
// Deprecated method
|
|
3207
3317
|
FeatureFlagManager.prototype['get_feature_data'] = FeatureFlagManager.prototype.getFeatureData;
|
|
@@ -5973,7 +6083,7 @@ var DEFAULT_CONFIG = {
|
|
|
5973
6083
|
'batch_autostart': true,
|
|
5974
6084
|
'hooks': {},
|
|
5975
6085
|
'record_block_class': new RegExp('^(mp-block|fs-exclude|amp-block|rr-block|ph-no-capture)$'),
|
|
5976
|
-
'record_block_selector': 'img, video',
|
|
6086
|
+
'record_block_selector': 'img, video, audio',
|
|
5977
6087
|
'record_canvas': false,
|
|
5978
6088
|
'record_collect_fonts': false,
|
|
5979
6089
|
'record_heatmap_data': false,
|
|
@@ -6197,6 +6307,7 @@ MixpanelLib.prototype._init = function(token, config, name) {
|
|
|
6197
6307
|
return this.get_api_host('flags') + '/' + this.get_config('api_routes')['flags'];
|
|
6198
6308
|
}, this),
|
|
6199
6309
|
getConfigFunc: _.bind(this.get_config, this),
|
|
6310
|
+
setConfigFunc: _.bind(this.set_config, this),
|
|
6200
6311
|
getPropertyFunc: _.bind(this.get_property, this),
|
|
6201
6312
|
trackingFunc: _.bind(this.track, this)
|
|
6202
6313
|
});
|
|
@@ -13945,7 +13945,7 @@
|
|
|
13945
13945
|
|
|
13946
13946
|
var Config = {
|
|
13947
13947
|
DEBUG: false,
|
|
13948
|
-
LIB_VERSION: '2.
|
|
13948
|
+
LIB_VERSION: '2.68.0'
|
|
13949
13949
|
};
|
|
13950
13950
|
|
|
13951
13951
|
/* eslint camelcase: "off", eqeqeq: "off" */
|
|
@@ -18230,6 +18230,38 @@
|
|
|
18230
18230
|
return true;
|
|
18231
18231
|
}
|
|
18232
18232
|
|
|
18233
|
+
/** @const */ var DEFAULT_RAGE_CLICK_THRESHOLD_PX = 30;
|
|
18234
|
+
/** @const */ var DEFAULT_RAGE_CLICK_TIMEOUT_MS = 1000;
|
|
18235
|
+
/** @const */ var DEFAULT_RAGE_CLICK_CLICK_COUNT = 4;
|
|
18236
|
+
|
|
18237
|
+
function RageClickTracker() {
|
|
18238
|
+
this.clicks = [];
|
|
18239
|
+
}
|
|
18240
|
+
|
|
18241
|
+
RageClickTracker.prototype.isRageClick = function(x, y, options) {
|
|
18242
|
+
options = options || {};
|
|
18243
|
+
var thresholdPx = options['threshold_px'] || DEFAULT_RAGE_CLICK_THRESHOLD_PX;
|
|
18244
|
+
var timeoutMs = options['timeout_ms'] || DEFAULT_RAGE_CLICK_TIMEOUT_MS;
|
|
18245
|
+
var clickCount = options['click_count'] || DEFAULT_RAGE_CLICK_CLICK_COUNT;
|
|
18246
|
+
var timestamp = Date.now();
|
|
18247
|
+
|
|
18248
|
+
var lastClick = this.clicks[this.clicks.length - 1];
|
|
18249
|
+
if (
|
|
18250
|
+
lastClick &&
|
|
18251
|
+
timestamp - lastClick.timestamp < timeoutMs &&
|
|
18252
|
+
Math.sqrt(Math.pow(x - lastClick.x, 2) + Math.pow(y - lastClick.y, 2)) < thresholdPx
|
|
18253
|
+
) {
|
|
18254
|
+
this.clicks.push({ x: x, y: y, timestamp: timestamp });
|
|
18255
|
+
if (this.clicks.length >= clickCount) {
|
|
18256
|
+
this.clicks = [];
|
|
18257
|
+
return true;
|
|
18258
|
+
}
|
|
18259
|
+
} else {
|
|
18260
|
+
this.clicks = [{ x: x, y: y, timestamp: timestamp }];
|
|
18261
|
+
}
|
|
18262
|
+
return false;
|
|
18263
|
+
};
|
|
18264
|
+
|
|
18233
18265
|
var AUTOCAPTURE_CONFIG_KEY = 'autocapture';
|
|
18234
18266
|
var LEGACY_PAGEVIEW_CONFIG_KEY = 'track_pageview';
|
|
18235
18267
|
|
|
@@ -18251,6 +18283,7 @@
|
|
|
18251
18283
|
var CONFIG_TRACK_CLICK = 'click';
|
|
18252
18284
|
var CONFIG_TRACK_INPUT = 'input';
|
|
18253
18285
|
var CONFIG_TRACK_PAGEVIEW = 'pageview';
|
|
18286
|
+
var CONFIG_TRACK_RAGE_CLICK = 'rage_click';
|
|
18254
18287
|
var CONFIG_TRACK_SCROLL = 'scroll';
|
|
18255
18288
|
var CONFIG_TRACK_SUBMIT = 'submit';
|
|
18256
18289
|
|
|
@@ -18268,6 +18301,7 @@
|
|
|
18268
18301
|
CONFIG_DEFAULTS$1[CONFIG_TRACK_CLICK] = true;
|
|
18269
18302
|
CONFIG_DEFAULTS$1[CONFIG_TRACK_INPUT] = true;
|
|
18270
18303
|
CONFIG_DEFAULTS$1[CONFIG_TRACK_PAGEVIEW] = PAGEVIEW_OPTION_FULL_URL;
|
|
18304
|
+
CONFIG_DEFAULTS$1[CONFIG_TRACK_RAGE_CLICK] = true;
|
|
18271
18305
|
CONFIG_DEFAULTS$1[CONFIG_TRACK_SCROLL] = true;
|
|
18272
18306
|
CONFIG_DEFAULTS$1[CONFIG_TRACK_SUBMIT] = true;
|
|
18273
18307
|
|
|
@@ -18277,6 +18311,7 @@
|
|
|
18277
18311
|
|
|
18278
18312
|
var MP_EV_CLICK = '$mp_click';
|
|
18279
18313
|
var MP_EV_INPUT = '$mp_input_change';
|
|
18314
|
+
var MP_EV_RAGE_CLICK = '$mp_rage_click';
|
|
18280
18315
|
var MP_EV_SCROLL = '$mp_scroll';
|
|
18281
18316
|
var MP_EV_SUBMIT = '$mp_submit';
|
|
18282
18317
|
|
|
@@ -18299,6 +18334,7 @@
|
|
|
18299
18334
|
this.initInputTracking();
|
|
18300
18335
|
this.initScrollTracking();
|
|
18301
18336
|
this.initSubmitTracking();
|
|
18337
|
+
this.initRageClickTracking();
|
|
18302
18338
|
};
|
|
18303
18339
|
|
|
18304
18340
|
Autocapture.prototype.getFullConfig = function() {
|
|
@@ -18377,6 +18413,11 @@
|
|
|
18377
18413
|
return;
|
|
18378
18414
|
}
|
|
18379
18415
|
|
|
18416
|
+
var isCapturedForHeatMap = this.mp.is_recording_heatmap_data() && (
|
|
18417
|
+
(mpEventName === MP_EV_CLICK && !this.getConfig(CONFIG_TRACK_CLICK)) ||
|
|
18418
|
+
(mpEventName === MP_EV_RAGE_CLICK && !this._getRageClickConfig())
|
|
18419
|
+
);
|
|
18420
|
+
|
|
18380
18421
|
var props = getPropsForDOMEvent(ev, {
|
|
18381
18422
|
allowElementCallback: this.getConfig(CONFIG_ALLOW_ELEMENT_CALLBACK),
|
|
18382
18423
|
allowSelectors: this.getConfig(CONFIG_ALLOW_SELECTORS),
|
|
@@ -18385,7 +18426,7 @@
|
|
|
18385
18426
|
blockSelectors: this.getConfig(CONFIG_BLOCK_SELECTORS),
|
|
18386
18427
|
captureExtraAttrs: this.getConfig(CONFIG_CAPTURE_EXTRA_ATTRS),
|
|
18387
18428
|
captureTextContent: this.getConfig(CONFIG_CAPTURE_TEXT_CONTENT),
|
|
18388
|
-
capturedForHeatMap:
|
|
18429
|
+
capturedForHeatMap: isCapturedForHeatMap,
|
|
18389
18430
|
});
|
|
18390
18431
|
if (props) {
|
|
18391
18432
|
_.extend(props, DEFAULT_PROPS);
|
|
@@ -18393,6 +18434,24 @@
|
|
|
18393
18434
|
}
|
|
18394
18435
|
};
|
|
18395
18436
|
|
|
18437
|
+
Autocapture.prototype._getRageClickConfig = function() {
|
|
18438
|
+
var config = this.getConfig(CONFIG_TRACK_RAGE_CLICK);
|
|
18439
|
+
|
|
18440
|
+
if (!config) {
|
|
18441
|
+
return null; // rage click tracking disabled
|
|
18442
|
+
}
|
|
18443
|
+
|
|
18444
|
+
if (config === true) {
|
|
18445
|
+
return {}; // use defaults
|
|
18446
|
+
}
|
|
18447
|
+
|
|
18448
|
+
if (typeof config === 'object') {
|
|
18449
|
+
return config; // use custom configuration
|
|
18450
|
+
}
|
|
18451
|
+
|
|
18452
|
+
return {}; // fallback to defaults for any other truthy value
|
|
18453
|
+
};
|
|
18454
|
+
|
|
18396
18455
|
Autocapture.prototype.initClickTracking = function() {
|
|
18397
18456
|
win.removeEventListener(EV_CLICK, this.listenerClick);
|
|
18398
18457
|
|
|
@@ -18494,6 +18553,36 @@
|
|
|
18494
18553
|
}.bind(this)));
|
|
18495
18554
|
};
|
|
18496
18555
|
|
|
18556
|
+
Autocapture.prototype.initRageClickTracking = function() {
|
|
18557
|
+
win.removeEventListener(EV_CLICK, this.listenerRageClick);
|
|
18558
|
+
|
|
18559
|
+
var rageClickConfig = this._getRageClickConfig();
|
|
18560
|
+
if (!rageClickConfig && !this.mp.get_config('record_heatmap_data')) {
|
|
18561
|
+
return;
|
|
18562
|
+
}
|
|
18563
|
+
|
|
18564
|
+
logger$1.log('Initializing rage click tracking');
|
|
18565
|
+
if (!this._rageClickTracker) {
|
|
18566
|
+
this._rageClickTracker = new RageClickTracker();
|
|
18567
|
+
}
|
|
18568
|
+
|
|
18569
|
+
this.listenerRageClick = function(ev) {
|
|
18570
|
+
var currentRageClickConfig = this._getRageClickConfig();
|
|
18571
|
+
if (!currentRageClickConfig && !this.mp.is_recording_heatmap_data()) {
|
|
18572
|
+
return;
|
|
18573
|
+
}
|
|
18574
|
+
|
|
18575
|
+
if (this.currentUrlBlocked()) {
|
|
18576
|
+
return;
|
|
18577
|
+
}
|
|
18578
|
+
|
|
18579
|
+
if (this._rageClickTracker.isRageClick(ev['pageX'], ev['pageY'], currentRageClickConfig)) {
|
|
18580
|
+
this.trackDomEvent(ev, MP_EV_RAGE_CLICK);
|
|
18581
|
+
}
|
|
18582
|
+
}.bind(this);
|
|
18583
|
+
win.addEventListener(EV_CLICK, this.listenerRageClick);
|
|
18584
|
+
};
|
|
18585
|
+
|
|
18497
18586
|
Autocapture.prototype.initScrollTracking = function() {
|
|
18498
18587
|
win.removeEventListener(EV_SCROLLEND, this.listenerScroll);
|
|
18499
18588
|
|
|
@@ -18580,6 +18669,7 @@
|
|
|
18580
18669
|
var FeatureFlagManager = function(initOptions) {
|
|
18581
18670
|
this.getFullApiRoute = initOptions.getFullApiRoute;
|
|
18582
18671
|
this.getMpConfig = initOptions.getConfigFunc;
|
|
18672
|
+
this.setMpConfig = initOptions.setConfigFunc;
|
|
18583
18673
|
this.getMpProperty = initOptions.getPropertyFunc;
|
|
18584
18674
|
this.track = initOptions.trackingFunc;
|
|
18585
18675
|
};
|
|
@@ -18617,6 +18707,23 @@
|
|
|
18617
18707
|
return !!this.getMpConfig(FLAGS_CONFIG_KEY);
|
|
18618
18708
|
};
|
|
18619
18709
|
|
|
18710
|
+
FeatureFlagManager.prototype.updateContext = function(newContext, options) {
|
|
18711
|
+
if (!this.isSystemEnabled()) {
|
|
18712
|
+
logger.critical('Feature Flags not enabled, cannot update context');
|
|
18713
|
+
return Promise.resolve();
|
|
18714
|
+
}
|
|
18715
|
+
|
|
18716
|
+
var ffConfig = this.getMpConfig(FLAGS_CONFIG_KEY);
|
|
18717
|
+
if (!_.isObject(ffConfig)) {
|
|
18718
|
+
ffConfig = {};
|
|
18719
|
+
}
|
|
18720
|
+
var oldContext = (options && options['replace']) ? {} : this.getConfig(CONFIG_CONTEXT);
|
|
18721
|
+
ffConfig[CONFIG_CONTEXT] = _.extend({}, oldContext, newContext);
|
|
18722
|
+
|
|
18723
|
+
this.setMpConfig(FLAGS_CONFIG_KEY, ffConfig);
|
|
18724
|
+
return this.fetchFlags();
|
|
18725
|
+
};
|
|
18726
|
+
|
|
18620
18727
|
FeatureFlagManager.prototype.areFlagsReady = function() {
|
|
18621
18728
|
if (!this.isSystemEnabled()) {
|
|
18622
18729
|
logger.error('Feature Flags not enabled');
|
|
@@ -18626,7 +18733,7 @@
|
|
|
18626
18733
|
|
|
18627
18734
|
FeatureFlagManager.prototype.fetchFlags = function() {
|
|
18628
18735
|
if (!this.isSystemEnabled()) {
|
|
18629
|
-
return;
|
|
18736
|
+
return Promise.resolve();
|
|
18630
18737
|
}
|
|
18631
18738
|
|
|
18632
18739
|
var distinctId = this.getMpProperty('distinct_id');
|
|
@@ -18666,6 +18773,8 @@
|
|
|
18666
18773
|
this.markFetchComplete();
|
|
18667
18774
|
logger.error(error);
|
|
18668
18775
|
}.bind(this));
|
|
18776
|
+
|
|
18777
|
+
return this.fetchPromise;
|
|
18669
18778
|
};
|
|
18670
18779
|
|
|
18671
18780
|
FeatureFlagManager.prototype.markFetchComplete = function() {
|
|
@@ -18778,6 +18887,7 @@
|
|
|
18778
18887
|
FeatureFlagManager.prototype['get_variant_value_sync'] = FeatureFlagManager.prototype.getVariantValueSync;
|
|
18779
18888
|
FeatureFlagManager.prototype['is_enabled'] = FeatureFlagManager.prototype.isEnabled;
|
|
18780
18889
|
FeatureFlagManager.prototype['is_enabled_sync'] = FeatureFlagManager.prototype.isEnabledSync;
|
|
18890
|
+
FeatureFlagManager.prototype['update_context'] = FeatureFlagManager.prototype.updateContext;
|
|
18781
18891
|
|
|
18782
18892
|
// Deprecated method
|
|
18783
18893
|
FeatureFlagManager.prototype['get_feature_data'] = FeatureFlagManager.prototype.getFeatureData;
|
|
@@ -20238,7 +20348,7 @@
|
|
|
20238
20348
|
'batch_autostart': true,
|
|
20239
20349
|
'hooks': {},
|
|
20240
20350
|
'record_block_class': new RegExp('^(mp-block|fs-exclude|amp-block|rr-block|ph-no-capture)$'),
|
|
20241
|
-
'record_block_selector': 'img, video',
|
|
20351
|
+
'record_block_selector': 'img, video, audio',
|
|
20242
20352
|
'record_canvas': false,
|
|
20243
20353
|
'record_collect_fonts': false,
|
|
20244
20354
|
'record_heatmap_data': false,
|
|
@@ -20462,6 +20572,7 @@
|
|
|
20462
20572
|
return this.get_api_host('flags') + '/' + this.get_config('api_routes')['flags'];
|
|
20463
20573
|
}, this),
|
|
20464
20574
|
getConfigFunc: _.bind(this.get_config, this),
|
|
20575
|
+
setConfigFunc: _.bind(this.set_config, this),
|
|
20465
20576
|
getPropertyFunc: _.bind(this.get_property, this),
|
|
20466
20577
|
trackingFunc: _.bind(this.track, this)
|
|
20467
20578
|
});
|