@pendo/agent 2.303.0 → 2.305.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/dist/dom.esm.js +38 -39
- package/dist/pendo.module.js +158 -89
- package/dist/pendo.module.min.js +9 -9
- package/dist/servers.json +7 -7
- package/package.json +1 -1
package/dist/dom.esm.js
CHANGED
|
@@ -7359,7 +7359,7 @@ function getScreenPosition(element) {
|
|
|
7359
7359
|
};
|
|
7360
7360
|
}
|
|
7361
7361
|
|
|
7362
|
-
var VERSION = '2.
|
|
7362
|
+
var VERSION = '2.305.0_';
|
|
7363
7363
|
|
|
7364
7364
|
var decodeURIComponent = _.isFunction(window.decodeURIComponent) ? window.decodeURIComponent : _.identity;
|
|
7365
7365
|
|
|
@@ -9255,50 +9255,49 @@ function isElementVisible(element, overflowPattern) {
|
|
|
9255
9255
|
// *Probably* visible...
|
|
9256
9256
|
return true;
|
|
9257
9257
|
}
|
|
9258
|
+
function scrollElementIntoParentRect(element, scrollParent) {
|
|
9259
|
+
var clientRect = getClientRect(element);
|
|
9260
|
+
var scrollRect = getClientRect(scrollParent);
|
|
9261
|
+
var yScrollAmount = 0;
|
|
9262
|
+
var xScrollAmount = 0;
|
|
9263
|
+
var diff;
|
|
9264
|
+
if (clientRect.bottom > scrollRect.bottom) {
|
|
9265
|
+
yScrollAmount += clientRect.bottom - scrollRect.bottom;
|
|
9266
|
+
clientRect.top -= yScrollAmount;
|
|
9267
|
+
clientRect.bottom -= yScrollAmount;
|
|
9268
|
+
}
|
|
9269
|
+
if (clientRect.top < scrollRect.top) {
|
|
9270
|
+
diff = scrollRect.top - clientRect.top;
|
|
9271
|
+
yScrollAmount -= diff;
|
|
9272
|
+
clientRect.top += diff;
|
|
9273
|
+
clientRect.bottom += diff;
|
|
9274
|
+
}
|
|
9275
|
+
if (clientRect.right > scrollRect.right) {
|
|
9276
|
+
xScrollAmount += clientRect.right - scrollRect.right;
|
|
9277
|
+
clientRect.left -= xScrollAmount;
|
|
9278
|
+
clientRect.right -= xScrollAmount;
|
|
9279
|
+
}
|
|
9280
|
+
if (clientRect.left < scrollRect.left) {
|
|
9281
|
+
diff = scrollRect.left - clientRect.left;
|
|
9282
|
+
xScrollAmount -= diff;
|
|
9283
|
+
clientRect.left += diff;
|
|
9284
|
+
clientRect.right += diff;
|
|
9285
|
+
}
|
|
9286
|
+
if (_.isFunction(scrollParent.scrollBy)) {
|
|
9287
|
+
scrollParent.scrollBy(xScrollAmount, yScrollAmount);
|
|
9288
|
+
}
|
|
9289
|
+
else {
|
|
9290
|
+
scrollParent.scrollTop += yScrollAmount;
|
|
9291
|
+
scrollParent.scrollLeft += xScrollAmount;
|
|
9292
|
+
}
|
|
9293
|
+
}
|
|
9258
9294
|
function scrollIntoView(element) {
|
|
9259
9295
|
var overflowScroll = /(auto|scroll)/;
|
|
9260
|
-
var clientRect;
|
|
9261
9296
|
var scrollParent;
|
|
9262
|
-
var scrollRect;
|
|
9263
|
-
var yScrollAmount;
|
|
9264
|
-
var xScrollAmount;
|
|
9265
|
-
var diff;
|
|
9266
9297
|
var pbody = getBody();
|
|
9267
9298
|
scrollParent = getScrollParent(element, overflowScroll);
|
|
9268
9299
|
while (scrollParent && scrollParent !== pbody) {
|
|
9269
|
-
|
|
9270
|
-
scrollRect = getClientRect(scrollParent);
|
|
9271
|
-
yScrollAmount = 0;
|
|
9272
|
-
xScrollAmount = 0;
|
|
9273
|
-
if (clientRect.bottom > scrollRect.bottom) {
|
|
9274
|
-
yScrollAmount += clientRect.bottom - scrollRect.bottom;
|
|
9275
|
-
clientRect.top -= yScrollAmount;
|
|
9276
|
-
clientRect.bottom -= yScrollAmount;
|
|
9277
|
-
}
|
|
9278
|
-
if (clientRect.top < scrollRect.top) {
|
|
9279
|
-
diff = scrollRect.top - clientRect.top;
|
|
9280
|
-
yScrollAmount -= diff;
|
|
9281
|
-
clientRect.top += diff;
|
|
9282
|
-
clientRect.bottom += diff;
|
|
9283
|
-
}
|
|
9284
|
-
if (clientRect.right > scrollRect.right) {
|
|
9285
|
-
xScrollAmount += clientRect.right - scrollRect.right;
|
|
9286
|
-
clientRect.left -= xScrollAmount;
|
|
9287
|
-
clientRect.right -= xScrollAmount;
|
|
9288
|
-
}
|
|
9289
|
-
if (clientRect.left < scrollRect.left) {
|
|
9290
|
-
diff = scrollRect.left - clientRect.left;
|
|
9291
|
-
xScrollAmount -= diff;
|
|
9292
|
-
clientRect.left += diff;
|
|
9293
|
-
clientRect.right += diff;
|
|
9294
|
-
}
|
|
9295
|
-
if (_.isFunction(scrollParent.scrollBy)) {
|
|
9296
|
-
scrollParent.scrollBy(xScrollAmount, yScrollAmount);
|
|
9297
|
-
}
|
|
9298
|
-
else {
|
|
9299
|
-
scrollParent.scrollTop += yScrollAmount;
|
|
9300
|
-
scrollParent.scrollLeft += xScrollAmount;
|
|
9301
|
-
}
|
|
9300
|
+
scrollElementIntoParentRect(element, scrollParent);
|
|
9302
9301
|
scrollParent = getScrollParent(scrollParent, overflowScroll);
|
|
9303
9302
|
}
|
|
9304
9303
|
}
|
package/dist/pendo.module.js
CHANGED
|
@@ -3904,8 +3904,8 @@ let SERVER = '';
|
|
|
3904
3904
|
let ASSET_HOST = '';
|
|
3905
3905
|
let ASSET_PATH = '';
|
|
3906
3906
|
let DESIGNER_SERVER = '';
|
|
3907
|
-
let VERSION = '2.
|
|
3908
|
-
let PACKAGE_VERSION = '2.
|
|
3907
|
+
let VERSION = '2.305.0_';
|
|
3908
|
+
let PACKAGE_VERSION = '2.305.0';
|
|
3909
3909
|
let LOADER = 'xhr';
|
|
3910
3910
|
/* eslint-enable agent-eslint-rules/no-gulp-env-references */
|
|
3911
3911
|
/**
|
|
@@ -10744,50 +10744,49 @@ function wouldBeVisibleAfterAutoScroll(element) {
|
|
|
10744
10744
|
}
|
|
10745
10745
|
return true;
|
|
10746
10746
|
}
|
|
10747
|
+
function scrollElementIntoParentRect(element, scrollParent) {
|
|
10748
|
+
var clientRect = getClientRect(element);
|
|
10749
|
+
var scrollRect = getClientRect(scrollParent);
|
|
10750
|
+
var yScrollAmount = 0;
|
|
10751
|
+
var xScrollAmount = 0;
|
|
10752
|
+
var diff;
|
|
10753
|
+
if (clientRect.bottom > scrollRect.bottom) {
|
|
10754
|
+
yScrollAmount += clientRect.bottom - scrollRect.bottom;
|
|
10755
|
+
clientRect.top -= yScrollAmount;
|
|
10756
|
+
clientRect.bottom -= yScrollAmount;
|
|
10757
|
+
}
|
|
10758
|
+
if (clientRect.top < scrollRect.top) {
|
|
10759
|
+
diff = scrollRect.top - clientRect.top;
|
|
10760
|
+
yScrollAmount -= diff;
|
|
10761
|
+
clientRect.top += diff;
|
|
10762
|
+
clientRect.bottom += diff;
|
|
10763
|
+
}
|
|
10764
|
+
if (clientRect.right > scrollRect.right) {
|
|
10765
|
+
xScrollAmount += clientRect.right - scrollRect.right;
|
|
10766
|
+
clientRect.left -= xScrollAmount;
|
|
10767
|
+
clientRect.right -= xScrollAmount;
|
|
10768
|
+
}
|
|
10769
|
+
if (clientRect.left < scrollRect.left) {
|
|
10770
|
+
diff = scrollRect.left - clientRect.left;
|
|
10771
|
+
xScrollAmount -= diff;
|
|
10772
|
+
clientRect.left += diff;
|
|
10773
|
+
clientRect.right += diff;
|
|
10774
|
+
}
|
|
10775
|
+
if (_.isFunction(scrollParent.scrollBy)) {
|
|
10776
|
+
scrollParent.scrollBy(xScrollAmount, yScrollAmount);
|
|
10777
|
+
}
|
|
10778
|
+
else {
|
|
10779
|
+
scrollParent.scrollTop += yScrollAmount;
|
|
10780
|
+
scrollParent.scrollLeft += xScrollAmount;
|
|
10781
|
+
}
|
|
10782
|
+
}
|
|
10747
10783
|
function scrollIntoView(element) {
|
|
10748
10784
|
var overflowScroll = /(auto|scroll)/;
|
|
10749
|
-
var clientRect;
|
|
10750
10785
|
var scrollParent;
|
|
10751
|
-
var scrollRect;
|
|
10752
|
-
var yScrollAmount;
|
|
10753
|
-
var xScrollAmount;
|
|
10754
|
-
var diff;
|
|
10755
10786
|
var pbody = getBody();
|
|
10756
10787
|
scrollParent = getScrollParent(element, overflowScroll);
|
|
10757
10788
|
while (scrollParent && scrollParent !== pbody) {
|
|
10758
|
-
|
|
10759
|
-
scrollRect = getClientRect(scrollParent);
|
|
10760
|
-
yScrollAmount = 0;
|
|
10761
|
-
xScrollAmount = 0;
|
|
10762
|
-
if (clientRect.bottom > scrollRect.bottom) {
|
|
10763
|
-
yScrollAmount += clientRect.bottom - scrollRect.bottom;
|
|
10764
|
-
clientRect.top -= yScrollAmount;
|
|
10765
|
-
clientRect.bottom -= yScrollAmount;
|
|
10766
|
-
}
|
|
10767
|
-
if (clientRect.top < scrollRect.top) {
|
|
10768
|
-
diff = scrollRect.top - clientRect.top;
|
|
10769
|
-
yScrollAmount -= diff;
|
|
10770
|
-
clientRect.top += diff;
|
|
10771
|
-
clientRect.bottom += diff;
|
|
10772
|
-
}
|
|
10773
|
-
if (clientRect.right > scrollRect.right) {
|
|
10774
|
-
xScrollAmount += clientRect.right - scrollRect.right;
|
|
10775
|
-
clientRect.left -= xScrollAmount;
|
|
10776
|
-
clientRect.right -= xScrollAmount;
|
|
10777
|
-
}
|
|
10778
|
-
if (clientRect.left < scrollRect.left) {
|
|
10779
|
-
diff = scrollRect.left - clientRect.left;
|
|
10780
|
-
xScrollAmount -= diff;
|
|
10781
|
-
clientRect.left += diff;
|
|
10782
|
-
clientRect.right += diff;
|
|
10783
|
-
}
|
|
10784
|
-
if (_.isFunction(scrollParent.scrollBy)) {
|
|
10785
|
-
scrollParent.scrollBy(xScrollAmount, yScrollAmount);
|
|
10786
|
-
}
|
|
10787
|
-
else {
|
|
10788
|
-
scrollParent.scrollTop += yScrollAmount;
|
|
10789
|
-
scrollParent.scrollLeft += xScrollAmount;
|
|
10790
|
-
}
|
|
10789
|
+
scrollElementIntoParentRect(element, scrollParent);
|
|
10791
10790
|
scrollParent = getScrollParent(scrollParent, overflowScroll);
|
|
10792
10791
|
}
|
|
10793
10792
|
}
|
|
@@ -11541,9 +11540,33 @@ function hasHashedAllowedOriginServers() {
|
|
|
11541
11540
|
function parseUrl(url) {
|
|
11542
11541
|
if (!_.isString(url))
|
|
11543
11542
|
return;
|
|
11543
|
+
try {
|
|
11544
|
+
const urlObj = new URL(url);
|
|
11545
|
+
const filename = _.last(urlObj.pathname.split('/'));
|
|
11546
|
+
const splitFilename = filename.split('.');
|
|
11547
|
+
const result = {
|
|
11548
|
+
filename: _.first(splitFilename),
|
|
11549
|
+
extension: splitFilename.slice(1).join('.'),
|
|
11550
|
+
query: {}
|
|
11551
|
+
};
|
|
11552
|
+
if (urlObj.search.length) {
|
|
11553
|
+
result.query = queryStringToObject(urlObj.search.substring(1));
|
|
11554
|
+
}
|
|
11555
|
+
if (urlObj.hash.length) {
|
|
11556
|
+
const fragQueryStart = urlObj.hash.indexOf('?');
|
|
11557
|
+
if (fragQueryStart >= 0) {
|
|
11558
|
+
const fragmentQuery = urlObj.hash.substring(fragQueryStart + 1);
|
|
11559
|
+
result.fragmentQuery = queryStringToObject(fragmentQuery);
|
|
11560
|
+
}
|
|
11561
|
+
}
|
|
11562
|
+
return result;
|
|
11563
|
+
}
|
|
11564
|
+
catch (e) {
|
|
11565
|
+
}
|
|
11566
|
+
// original implementation, if URL object fails
|
|
11544
11567
|
var queryString = parseQueryString(url).substring(1);
|
|
11545
11568
|
var query = queryString && queryString.length ? queryStringToObject(queryString) : {};
|
|
11546
|
-
var filename = _.last(_.first(url.split(
|
|
11569
|
+
var filename = _.last(_.first(url.split(/[?#]/)).split('/'));
|
|
11547
11570
|
var splitFilename = filename.split('.');
|
|
11548
11571
|
return {
|
|
11549
11572
|
filename: _.first(splitFilename),
|
|
@@ -16506,7 +16529,7 @@ var BuildingBlockTooltips = (function () {
|
|
|
16506
16529
|
attachBBAdvanceActions,
|
|
16507
16530
|
attachScrollHandlers,
|
|
16508
16531
|
isBuildingBlockGuideRelativeToElement,
|
|
16509
|
-
|
|
16532
|
+
positionStepForGuide,
|
|
16510
16533
|
patchGuideContainerWidthForResponsiveTooltips
|
|
16511
16534
|
};
|
|
16512
16535
|
function patchGuideContainerWidthForResponsiveTooltips(step, providedGuideContainer, json) {
|
|
@@ -16525,12 +16548,19 @@ var BuildingBlockTooltips = (function () {
|
|
|
16525
16548
|
return;
|
|
16526
16549
|
calculateVwRelativeToLayoutDir(guideContainer, tooltipContext);
|
|
16527
16550
|
}
|
|
16528
|
-
function
|
|
16529
|
-
|
|
16530
|
-
|
|
16531
|
-
|
|
16551
|
+
function positionStepForGuide(step, json, guideContainerEle) {
|
|
16552
|
+
if (step.attributes && step.attributes.calculatedType === 'tooltip') {
|
|
16553
|
+
// This directly modifies step.guideElement object
|
|
16554
|
+
createBBTooltip(json, step.element, step, guideContainerEle);
|
|
16555
|
+
if (!step.hasBeenScrolledTo) {
|
|
16556
|
+
scrollIntoView(step.element);
|
|
16557
|
+
scrollToTooltip(step.element, guideContainerEle, step.attributes.layoutDir);
|
|
16558
|
+
step.hasBeenScrolledTo = true;
|
|
16559
|
+
}
|
|
16560
|
+
}
|
|
16561
|
+
else if (step.element && !step.hasBeenScrolledTo) {
|
|
16532
16562
|
scrollIntoView(step.element);
|
|
16533
|
-
|
|
16563
|
+
scrollElementIntoParentRect(step.element, window);
|
|
16534
16564
|
step.hasBeenScrolledTo = true;
|
|
16535
16565
|
}
|
|
16536
16566
|
}
|
|
@@ -18383,9 +18413,7 @@ function recalculateGuideHeightOnImgLoad(node, step) {
|
|
|
18383
18413
|
FlexboxPolyfill.flexAllThings(step.containerId, step);
|
|
18384
18414
|
}
|
|
18385
18415
|
}
|
|
18386
|
-
|
|
18387
|
-
BuildingBlockTooltips.positionStepForTooltip(step, step.domJson, guideContainer);
|
|
18388
|
-
}
|
|
18416
|
+
BuildingBlockTooltips.positionStepForGuide(step, step.domJson, guideContainer);
|
|
18389
18417
|
guideContainer.style.visibility = 'visible';
|
|
18390
18418
|
guideContainer.parentNode.style.visibility = 'visible';
|
|
18391
18419
|
dom.event.dispatch(guideContainer, {
|
|
@@ -18401,9 +18429,7 @@ function recalculateGuideHeightOnImgLoad(node, step) {
|
|
|
18401
18429
|
log.info('Failed to find guideContainer for id: ' + step.containerId);
|
|
18402
18430
|
return;
|
|
18403
18431
|
}
|
|
18404
|
-
|
|
18405
|
-
BuildingBlockTooltips.positionStepForTooltip(step, step.domJson, guideContainer);
|
|
18406
|
-
}
|
|
18432
|
+
BuildingBlockTooltips.positionStepForGuide(step, step.domJson, guideContainer);
|
|
18407
18433
|
guideContainer.style.visibility = 'visible';
|
|
18408
18434
|
guideContainer.parentNode.style.visibility = 'visible';
|
|
18409
18435
|
FlexboxPolyfill.flexAllThings(step.containerId, step);
|
|
@@ -18832,6 +18858,30 @@ var addExtension = (function setupExtensionService(ExtService) {
|
|
|
18832
18858
|
return addExtensionPublic;
|
|
18833
18859
|
})(ExtensionService);
|
|
18834
18860
|
|
|
18861
|
+
function syncColorMode(step, rerender = false) {
|
|
18862
|
+
const darkModeSelector = _.get(step, 'attributes.darkMode.selector', '');
|
|
18863
|
+
if (!darkModeSelector)
|
|
18864
|
+
return;
|
|
18865
|
+
// Determine the target dark mode state
|
|
18866
|
+
let targetDarkMode;
|
|
18867
|
+
if (pendo$1.designerEnabled && _.has(step, 'attributes.darkMode.override')) {
|
|
18868
|
+
// In designer mode, use the override value
|
|
18869
|
+
targetDarkMode = step.attributes.darkMode.override;
|
|
18870
|
+
}
|
|
18871
|
+
else {
|
|
18872
|
+
// In client mode, detect based on selector
|
|
18873
|
+
targetDarkMode = pendo$1.Sizzle(darkModeSelector).length > 0;
|
|
18874
|
+
}
|
|
18875
|
+
// Update and rerender if the state changed
|
|
18876
|
+
if (step.isDarkMode !== targetDarkMode) {
|
|
18877
|
+
step.isDarkMode = targetDarkMode;
|
|
18878
|
+
if (rerender) {
|
|
18879
|
+
step.hide();
|
|
18880
|
+
step.show(step.seenReason);
|
|
18881
|
+
}
|
|
18882
|
+
}
|
|
18883
|
+
}
|
|
18884
|
+
|
|
18835
18885
|
var BuildingBlockResourceCenter = (function () {
|
|
18836
18886
|
return {
|
|
18837
18887
|
initializeResourceCenter,
|
|
@@ -19079,6 +19129,9 @@ var BuildingBlockResourceCenter = (function () {
|
|
|
19079
19129
|
if (isSupportedNativeIntegration(integrationProvider))
|
|
19080
19130
|
renderNativeIntegration(integrationProvider);
|
|
19081
19131
|
var step = module.steps[0];
|
|
19132
|
+
if (step.isDarkMode === undefined) {
|
|
19133
|
+
syncColorMode(step);
|
|
19134
|
+
}
|
|
19082
19135
|
var domJsonToRender = updatePseudoStyleSelectors(step.domJson);
|
|
19083
19136
|
domJsonToRender.props['data-pendo-guide-id'] = module.id;
|
|
19084
19137
|
var renderedGuide = buildNodeFromJSON(domJsonToRender, step);
|
|
@@ -20962,30 +21015,6 @@ class AutoDisplayPhase {
|
|
|
20962
21015
|
}
|
|
20963
21016
|
}
|
|
20964
21017
|
|
|
20965
|
-
function syncColorMode(step, rerender = false) {
|
|
20966
|
-
const darkModeSelector = _.get(step, 'attributes.darkMode.selector', '');
|
|
20967
|
-
if (!darkModeSelector)
|
|
20968
|
-
return;
|
|
20969
|
-
// Determine the target dark mode state
|
|
20970
|
-
let targetDarkMode;
|
|
20971
|
-
if (pendo$1.designerEnabled && _.has(step, 'attributes.darkMode.override')) {
|
|
20972
|
-
// In designer mode, use the override value
|
|
20973
|
-
targetDarkMode = step.attributes.darkMode.override;
|
|
20974
|
-
}
|
|
20975
|
-
else {
|
|
20976
|
-
// In client mode, detect based on selector
|
|
20977
|
-
targetDarkMode = pendo$1.Sizzle(darkModeSelector).length > 0;
|
|
20978
|
-
}
|
|
20979
|
-
// Update and rerender if the state changed
|
|
20980
|
-
if (step.isDarkMode !== targetDarkMode) {
|
|
20981
|
-
step.isDarkMode = targetDarkMode;
|
|
20982
|
-
if (rerender) {
|
|
20983
|
-
step.hide();
|
|
20984
|
-
step.show(step.seenReason);
|
|
20985
|
-
}
|
|
20986
|
-
}
|
|
20987
|
-
}
|
|
20988
|
-
|
|
20989
21018
|
/*
|
|
20990
21019
|
* Guide Loop
|
|
20991
21020
|
*
|
|
@@ -26743,9 +26772,13 @@ class NetworkRequestIntercept {
|
|
|
26743
26772
|
const contentLengthHeader = config.headers.get('content-length');
|
|
26744
26773
|
// Check if content type is readable (text or JSON)
|
|
26745
26774
|
const isReadableContent = contentType.indexOf('text/') !== -1 || contentType.indexOf('application/json') !== -1;
|
|
26775
|
+
const isEventStream = contentType.indexOf('text/event-stream') !== -1;
|
|
26776
|
+
// Cannot read event stream content as text or else it will block the consumer from receiving the event stream messages
|
|
26777
|
+
if (isEventStream) {
|
|
26778
|
+
return '[Event stream content]';
|
|
26779
|
+
}
|
|
26746
26780
|
if (!isReadableContent) {
|
|
26747
|
-
|
|
26748
|
-
return `[Binary content: ${typeDisplay}]`;
|
|
26781
|
+
return `[Binary content: ${contentType}]`;
|
|
26749
26782
|
}
|
|
26750
26783
|
if (contentLengthHeader) {
|
|
26751
26784
|
const size = parseInt(contentLengthHeader, 10);
|
|
@@ -28761,7 +28794,7 @@ var BuildingBlockGuides = (function () {
|
|
|
28761
28794
|
adjustGuideContentWidth,
|
|
28762
28795
|
findDomBlockInDomJson,
|
|
28763
28796
|
isElementHiddenInGuide: FlexboxPolyfill.isElementHiddenInGuide,
|
|
28764
|
-
positionStepForTooltip: BuildingBlockTooltips.
|
|
28797
|
+
positionStepForTooltip: BuildingBlockTooltips.positionStepForGuide,
|
|
28765
28798
|
flexAllThings: FlexboxPolyfill.flexAllThings,
|
|
28766
28799
|
flexElement: FlexboxPolyfill.flexElement,
|
|
28767
28800
|
findTopLevelContainer,
|
|
@@ -28913,8 +28946,8 @@ var BuildingBlockGuides = (function () {
|
|
|
28913
28946
|
else {
|
|
28914
28947
|
BuildingBlockTooltips.attachBBAdvanceActions(step);
|
|
28915
28948
|
}
|
|
28916
|
-
if (
|
|
28917
|
-
BuildingBlockTooltips.
|
|
28949
|
+
if (!hasImageCount) {
|
|
28950
|
+
BuildingBlockTooltips.positionStepForGuide(step, modifiableJSON, guideContainer[0]);
|
|
28918
28951
|
}
|
|
28919
28952
|
if (isResourceCenter) {
|
|
28920
28953
|
BuildingBlockResourceCenter.showHomeViewOrEmptyState(guide);
|
|
@@ -38041,7 +38074,7 @@ const FrustrationEvent = (function () {
|
|
|
38041
38074
|
deadClickTimeouts = {};
|
|
38042
38075
|
}
|
|
38043
38076
|
function handleClickEvent(eventData, browserEvent) {
|
|
38044
|
-
const isHyperlinked = browserEvent.target && browserEvent.target.tagName === 'A' && browserEvent.target.hasAttribute('href');
|
|
38077
|
+
const isHyperlinked = browserEvent.target && browserEvent.target.tagName === 'A' && _.isFunction(browserEvent.target.hasAttribute) && browserEvent.target.hasAttribute('href');
|
|
38045
38078
|
const isDeadClickEligibleTag = browserEvent.target && !_.contains(deadClickIneligibleTags, browserEvent.target.tagName);
|
|
38046
38079
|
if (canQueueDeadClicks && !hasHighlightedText && isDeadClickEligibleTag && !isHyperlinked) {
|
|
38047
38080
|
queueDeadClick(eventData);
|
|
@@ -38966,7 +38999,7 @@ class WebAnalytics {
|
|
|
38966
38999
|
const parsedUrl = this.api.util.parseUrl(url);
|
|
38967
39000
|
if (!parsedUrl)
|
|
38968
39001
|
return {};
|
|
38969
|
-
const
|
|
39002
|
+
const query = this.pendo._.extend({}, parsedUrl.fragmentQuery, parsedUrl.query);
|
|
38970
39003
|
const source = query.utm_source;
|
|
38971
39004
|
const medium = query.utm_medium;
|
|
38972
39005
|
const campaign = query.utm_campaign;
|
|
@@ -43635,6 +43668,7 @@ function serializeNode(n2, options) {
|
|
|
43635
43668
|
mirror: mirror2,
|
|
43636
43669
|
blockClass,
|
|
43637
43670
|
blockSelector,
|
|
43671
|
+
hideSelector,
|
|
43638
43672
|
needsMask,
|
|
43639
43673
|
inlineStylesheet,
|
|
43640
43674
|
maskInputOptions = {},
|
|
@@ -43676,6 +43710,7 @@ function serializeNode(n2, options) {
|
|
|
43676
43710
|
doc,
|
|
43677
43711
|
blockClass,
|
|
43678
43712
|
blockSelector,
|
|
43713
|
+
hideSelector,
|
|
43679
43714
|
inlineStylesheet,
|
|
43680
43715
|
maskInputOptions,
|
|
43681
43716
|
maskInputFn,
|
|
@@ -43774,6 +43809,7 @@ function serializeElementNode(n2, options) {
|
|
|
43774
43809
|
doc,
|
|
43775
43810
|
blockClass,
|
|
43776
43811
|
blockSelector,
|
|
43812
|
+
hideSelector,
|
|
43777
43813
|
inlineStylesheet,
|
|
43778
43814
|
maskInputOptions = {},
|
|
43779
43815
|
maskInputFn,
|
|
@@ -43786,6 +43822,7 @@ function serializeElementNode(n2, options) {
|
|
|
43786
43822
|
needsMask
|
|
43787
43823
|
} = options;
|
|
43788
43824
|
const needBlock = _isBlockedElement(n2, blockClass, blockSelector);
|
|
43825
|
+
const needHide = needBlock && hideSelector ? _isBlockedElement(n2, "", hideSelector) : false;
|
|
43789
43826
|
const tagName = getValidTagName$1(n2);
|
|
43790
43827
|
let attributes = {};
|
|
43791
43828
|
const len = n2.attributes.length;
|
|
@@ -43932,7 +43969,12 @@ function serializeElementNode(n2, options) {
|
|
|
43932
43969
|
attributes.rr_scrollTop = n2.scrollTop;
|
|
43933
43970
|
}
|
|
43934
43971
|
}
|
|
43935
|
-
if (
|
|
43972
|
+
if (needHide) {
|
|
43973
|
+
attributes = {
|
|
43974
|
+
class: attributes.class,
|
|
43975
|
+
rr_display: "none"
|
|
43976
|
+
};
|
|
43977
|
+
} else if (needBlock) {
|
|
43936
43978
|
const { width, height } = n2.getBoundingClientRect();
|
|
43937
43979
|
attributes = {
|
|
43938
43980
|
class: attributes.class,
|
|
@@ -44007,6 +44049,7 @@ function serializeNodeWithId(n2, options) {
|
|
|
44007
44049
|
mirror: mirror2,
|
|
44008
44050
|
blockClass,
|
|
44009
44051
|
blockSelector,
|
|
44052
|
+
hideSelector,
|
|
44010
44053
|
maskTextClass,
|
|
44011
44054
|
maskTextSelector,
|
|
44012
44055
|
skipChild = false,
|
|
@@ -44043,6 +44086,7 @@ function serializeNodeWithId(n2, options) {
|
|
|
44043
44086
|
mirror: mirror2,
|
|
44044
44087
|
blockClass,
|
|
44045
44088
|
blockSelector,
|
|
44089
|
+
hideSelector,
|
|
44046
44090
|
needsMask,
|
|
44047
44091
|
inlineStylesheet,
|
|
44048
44092
|
maskInputOptions,
|
|
@@ -44092,6 +44136,7 @@ function serializeNodeWithId(n2, options) {
|
|
|
44092
44136
|
mirror: mirror2,
|
|
44093
44137
|
blockClass,
|
|
44094
44138
|
blockSelector,
|
|
44139
|
+
hideSelector,
|
|
44095
44140
|
needsMask,
|
|
44096
44141
|
maskTextClass,
|
|
44097
44142
|
maskTextSelector,
|
|
@@ -44151,6 +44196,7 @@ function serializeNodeWithId(n2, options) {
|
|
|
44151
44196
|
mirror: mirror2,
|
|
44152
44197
|
blockClass,
|
|
44153
44198
|
blockSelector,
|
|
44199
|
+
hideSelector,
|
|
44154
44200
|
needsMask,
|
|
44155
44201
|
maskTextClass,
|
|
44156
44202
|
maskTextSelector,
|
|
@@ -44192,6 +44238,7 @@ function serializeNodeWithId(n2, options) {
|
|
|
44192
44238
|
mirror: mirror2,
|
|
44193
44239
|
blockClass,
|
|
44194
44240
|
blockSelector,
|
|
44241
|
+
hideSelector,
|
|
44195
44242
|
needsMask,
|
|
44196
44243
|
maskTextClass,
|
|
44197
44244
|
maskTextSelector,
|
|
@@ -44230,6 +44277,7 @@ function snapshot(n2, options) {
|
|
|
44230
44277
|
mirror: mirror2 = new Mirror(),
|
|
44231
44278
|
blockClass = "rr-block",
|
|
44232
44279
|
blockSelector = null,
|
|
44280
|
+
hideSelector = null,
|
|
44233
44281
|
maskTextClass = "rr-mask",
|
|
44234
44282
|
maskTextSelector = null,
|
|
44235
44283
|
inlineStylesheet = true,
|
|
@@ -44289,6 +44337,7 @@ function snapshot(n2, options) {
|
|
|
44289
44337
|
mirror: mirror2,
|
|
44290
44338
|
blockClass,
|
|
44291
44339
|
blockSelector,
|
|
44340
|
+
hideSelector,
|
|
44292
44341
|
maskTextClass,
|
|
44293
44342
|
maskTextSelector,
|
|
44294
44343
|
skipChild: false,
|
|
@@ -45005,6 +45054,7 @@ class MutationBuffer {
|
|
|
45005
45054
|
__publicField(this, "mutationCb");
|
|
45006
45055
|
__publicField(this, "blockClass");
|
|
45007
45056
|
__publicField(this, "blockSelector");
|
|
45057
|
+
__publicField(this, "hideSelector");
|
|
45008
45058
|
__publicField(this, "maskTextClass");
|
|
45009
45059
|
__publicField(this, "maskTextSelector");
|
|
45010
45060
|
__publicField(this, "inlineStylesheet");
|
|
@@ -45068,6 +45118,7 @@ class MutationBuffer {
|
|
|
45068
45118
|
mirror: this.mirror,
|
|
45069
45119
|
blockClass: this.blockClass,
|
|
45070
45120
|
blockSelector: this.blockSelector,
|
|
45121
|
+
hideSelector: this.hideSelector,
|
|
45071
45122
|
maskTextClass: this.maskTextClass,
|
|
45072
45123
|
maskTextSelector: this.maskTextSelector,
|
|
45073
45124
|
skipChild: true,
|
|
@@ -45245,7 +45296,12 @@ class MutationBuffer {
|
|
|
45245
45296
|
index.childNodes(textarea),
|
|
45246
45297
|
(cn) => index.textContent(cn) || ""
|
|
45247
45298
|
).join("");
|
|
45248
|
-
const needsMask = needMaskingText(
|
|
45299
|
+
const needsMask = needMaskingText(
|
|
45300
|
+
textarea,
|
|
45301
|
+
this.maskTextClass,
|
|
45302
|
+
this.maskTextSelector,
|
|
45303
|
+
true
|
|
45304
|
+
);
|
|
45249
45305
|
item.attributes.value = maskInputValue({
|
|
45250
45306
|
element: textarea,
|
|
45251
45307
|
maskInputOptions: this.maskInputOptions,
|
|
@@ -45440,6 +45496,7 @@ class MutationBuffer {
|
|
|
45440
45496
|
"mutationCb",
|
|
45441
45497
|
"blockClass",
|
|
45442
45498
|
"blockSelector",
|
|
45499
|
+
"hideSelector",
|
|
45443
45500
|
"maskTextClass",
|
|
45444
45501
|
"maskTextSelector",
|
|
45445
45502
|
"inlineStylesheet",
|
|
@@ -47637,6 +47694,7 @@ function record(options = {}) {
|
|
|
47637
47694
|
checkoutEveryNth,
|
|
47638
47695
|
blockClass = "rr-block",
|
|
47639
47696
|
blockSelector = null,
|
|
47697
|
+
hideSelector = null,
|
|
47640
47698
|
ignoreClass = "rr-ignore",
|
|
47641
47699
|
ignoreSelector = null,
|
|
47642
47700
|
maskTextClass = "rr-mask",
|
|
@@ -47835,6 +47893,7 @@ function record(options = {}) {
|
|
|
47835
47893
|
bypassOptions: {
|
|
47836
47894
|
blockClass,
|
|
47837
47895
|
blockSelector,
|
|
47896
|
+
hideSelector,
|
|
47838
47897
|
maskTextClass,
|
|
47839
47898
|
maskTextSelector,
|
|
47840
47899
|
inlineStylesheet,
|
|
@@ -47876,6 +47935,7 @@ function record(options = {}) {
|
|
|
47876
47935
|
mirror,
|
|
47877
47936
|
blockClass,
|
|
47878
47937
|
blockSelector,
|
|
47938
|
+
hideSelector,
|
|
47879
47939
|
maskTextClass,
|
|
47880
47940
|
maskTextSelector,
|
|
47881
47941
|
inlineStylesheet,
|
|
@@ -48029,6 +48089,7 @@ function record(options = {}) {
|
|
|
48029
48089
|
maskTextFn,
|
|
48030
48090
|
keepIframeSrcFn,
|
|
48031
48091
|
blockSelector,
|
|
48092
|
+
hideSelector,
|
|
48032
48093
|
slimDOMOptions,
|
|
48033
48094
|
dataURLOptions,
|
|
48034
48095
|
mirror,
|
|
@@ -48310,7 +48371,7 @@ typeof SuppressedError === "function" ? SuppressedError : function (error, suppr
|
|
|
48310
48371
|
};
|
|
48311
48372
|
|
|
48312
48373
|
const RECORDING_CONFIG_WORKERURL$1 = 'recording.workerUrl';
|
|
48313
|
-
const MAX_SIZE =
|
|
48374
|
+
const MAX_SIZE = 2000000;
|
|
48314
48375
|
const RESOURCE_CACHING$1 = 'resourceCaching';
|
|
48315
48376
|
class Transport {
|
|
48316
48377
|
constructor(WorkerClass, pendo, api) {
|
|
@@ -48374,6 +48435,10 @@ class Transport {
|
|
|
48374
48435
|
if (strPayload.length > this.maxSize) {
|
|
48375
48436
|
const error = new Error('maximum recording payload size exceeded');
|
|
48376
48437
|
error.reason = 'HEAVY_EVENT';
|
|
48438
|
+
error.context = {
|
|
48439
|
+
size: strPayload.length,
|
|
48440
|
+
count: payload === null || payload === void 0 ? void 0 : payload.recordingPayloadCount
|
|
48441
|
+
};
|
|
48377
48442
|
throw error;
|
|
48378
48443
|
}
|
|
48379
48444
|
envelope.body = this.pendo.compress(strPayload, 'binary');
|
|
@@ -53621,6 +53686,8 @@ class SessionRecorder {
|
|
|
53621
53686
|
password: true,
|
|
53622
53687
|
tel: true
|
|
53623
53688
|
});
|
|
53689
|
+
const blockedSelectors = ['.pendo-ignore', '.pendo-sr-ignore'].concat(recordingOptions.blockedSelectors || []);
|
|
53690
|
+
const hiddenSelectors = ['.pendo-sr-hide'].concat(recordingOptions.hiddenSelectors || []);
|
|
53624
53691
|
const config = {
|
|
53625
53692
|
maskInputFn: this.pendo._.partial(maskInput, maskOptions),
|
|
53626
53693
|
maskTextFn: this.pendo._.partial(maskText, maskOptions),
|
|
@@ -53628,7 +53695,9 @@ class SessionRecorder {
|
|
|
53628
53695
|
maskTextClass: null,
|
|
53629
53696
|
maskInputOptions: maskOptions.maskInputOptions,
|
|
53630
53697
|
blockClass: null,
|
|
53631
|
-
|
|
53698
|
+
// we need to concat hidden selectors to re-use block selector logic
|
|
53699
|
+
blockSelector: blockedSelectors.concat(hiddenSelectors).join(','),
|
|
53700
|
+
hideSelector: hiddenSelectors.join(','),
|
|
53632
53701
|
recordCrossOriginIframes: recordingOptions.recordCrossOriginIframes != null ? recordingOptions.recordCrossOriginIframes : true
|
|
53633
53702
|
};
|
|
53634
53703
|
return config;
|
|
@@ -54088,7 +54157,7 @@ class SessionRecorder {
|
|
|
54088
54157
|
}
|
|
54089
54158
|
catch (e) {
|
|
54090
54159
|
if (e.reason) {
|
|
54091
|
-
this.logStopReason(e.reason);
|
|
54160
|
+
this.logStopReason(e.reason, e.context);
|
|
54092
54161
|
}
|
|
54093
54162
|
else {
|
|
54094
54163
|
this.logStopReason('SEND_QUEUE_ERROR', e);
|