Skip to content

Commit 89fae95

Browse files
authored
Merge branch 'master' into joepeeples/10684-pr-gates
2 parents 03d9c1c + 171dd50 commit 89fae95

File tree

352 files changed

+23808
-8387
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

352 files changed

+23808
-8387
lines changed

.apigentools-info

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44
"spec_versions": {
55
"v1": {
66
"apigentools_version": "1.6.6",
7-
"regenerated": "2025-07-24 19:59:19.182981",
8-
"spec_repo_commit": "c09ac236"
7+
"regenerated": "2025-07-31 10:47:25.546698",
8+
"spec_repo_commit": "b75095c8"
99
},
1010
"v2": {
1111
"apigentools_version": "1.6.6",
12-
"regenerated": "2025-07-24 19:59:28.761694",
13-
"spec_repo_commit": "c09ac236"
12+
"regenerated": "2025-07-31 10:47:35.648177",
13+
"spec_repo_commit": "b75095c8"
1414
}
1515
}
1616
}

.github/CODEOWNERS

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ static/resources/yaml/observability_pipelines/ @DataDog/observa
152152

153153
content/en/synthetics/*.md @Datadog/synthetics-app @Datadog/documentation
154154
content/en/continuous_testing/*.md @Datadog/synthetics-ct @Datadog/documentation
155-
content/en/mobile_app_testing/*.md @Datadog/synthetics-mobile @Datadog/documentation
155+
content/en/mobile_app_testing/*.md @Datadog/synthetics-executing-mobile @Datadog/documentation
156156

157157
# Software Delivery
158158

assets/scripts/build-api-pages.js

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ const marked = require('marked');
66
const slugify = require('slugify');
77
const $RefParser = require('@apidevtools/json-schema-ref-parser');
88
const safeJsonStringify = require('safe-json-stringify');
9+
const oneOfLimit = 50;
910

1011
const supportedLangs = ['en'];
1112

@@ -303,7 +304,7 @@ const filterJson = (actionType, data, parentExample = null, requiredKeys = [], l
303304
}
304305

305306
// for items -> oneOf
306-
if (value.items.oneOf && value.items.oneOf instanceof Array && value.items.oneOf.length < 20) {
307+
if (value.items.oneOf && value.items.oneOf instanceof Array && value.items.oneOf.length < oneOfLimit) {
307308
// if we have an example use that otherwise choose the first one oneof
308309
if(!parentExample) {
309310
if (Object.keys(value.items.oneOf).length !== 0) {
@@ -445,7 +446,7 @@ const outputValue = (value, trailingComma = false) => {
445446
out = `${value}`;
446447
break;
447448
case "string":
448-
out = `"${value.replace(/\r?\n|\r/g, '\\n')}"`;
449+
out = `"${value.replace(/\r?\n|\r/g, '\\n').replace(/^\[|\]$/g, '').replace(/^"|"$/g, '')}"`;
449450
break;
450451
default:
451452
out = `"${value}"`;
@@ -608,7 +609,8 @@ const filterExampleJson = (actionType, data) => {
608609
const requiredKeys = getInitialRequiredData(data);
609610

610611
// just return the example in additionalProperties cases with example
611-
if(data.additionalProperties && data.example) {
612+
// just return the example if theres a top-level example and its response
613+
if(data.additionalProperties && data.example || data.example && actionType === 'response') {
612614
return data.example;
613615
}
614616

@@ -771,7 +773,7 @@ const rowRecursive = (tableType, data, isNested, requiredFields=[], level = 0, p
771773
newRequiredFields = (value.items.required) ? value.items.required : [];
772774
}
773775
// for items -> oneOf
774-
if (value.items.oneOf && value.items.oneOf instanceof Array && value.items.oneOf.length < 20) {
776+
if (value.items.oneOf && value.items.oneOf instanceof Array && value.items.oneOf.length < oneOfLimit) {
775777
childData = value.items.oneOf
776778
.map((obj, indx) => {
777779
return {[`Option ${indx + 1}`]: value.items.oneOf[indx]}
@@ -794,7 +796,7 @@ const rowRecursive = (tableType, data, isNested, requiredFields=[], level = 0, p
794796
}
795797
} else if (typeof value === 'object' && "oneOf" in value) {
796798
// for properties -> oneOf
797-
if(value.oneOf instanceof Array && value.oneOf.length < 20) {
799+
if(value.oneOf instanceof Array && value.oneOf.length < oneOfLimit) {
798800
childData = value.oneOf
799801
.map((obj, indx) => {
800802
return {[`Option ${indx + 1}`]: value.oneOf[indx]}

assets/scripts/components/tooltip.js

Lines changed: 56 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
document.addEventListener('DOMContentLoaded', () => {
1+
function initializeTooltips() {
22
const tooltipContainers = document.querySelectorAll('.tooltip-container');
33
let activeTooltip = null;
44
let hideTimeout = null;
@@ -62,7 +62,7 @@ document.addEventListener('DOMContentLoaded', () => {
6262
positionTooltip(tooltip, trigger);
6363
activeTooltip = tooltip;
6464
}
65-
65+
6666
function setHideTimeout(tooltip) {
6767
hideTimeout = setTimeout(() => {
6868
hideTooltip(tooltip);
@@ -84,12 +84,16 @@ document.addEventListener('DOMContentLoaded', () => {
8484
activeTooltip = null;
8585
}
8686

87-
tooltipContainers.forEach((container) => {
87+
function attachTooltipListeners(container) {
8888
const trigger = container.querySelector('.tooltip-trigger');
8989
const tooltip = container.querySelector('.tooltip-content');
90-
90+
9191
if (!trigger || !tooltip) return;
9292

93+
// Skip if already initialized (check for a data attribute)
94+
if (trigger.hasAttribute('data-tooltip-initialized')) return;
95+
trigger.setAttribute('data-tooltip-initialized', 'true');
96+
9397
trigger.addEventListener('mouseenter', () => showTooltip(tooltip, trigger));
9498
trigger.addEventListener('mouseleave', () => setHideTimeout(tooltip));
9599

@@ -106,6 +110,34 @@ document.addEventListener('DOMContentLoaded', () => {
106110
showTooltip(tooltip, trigger);
107111
}
108112
}, { passive: false });
113+
}
114+
115+
// Initialize existing tooltips
116+
tooltipContainers.forEach(attachTooltipListeners);
117+
118+
// Watch for new tooltips being added to the DOM
119+
const observer = new MutationObserver((mutations) => {
120+
mutations.forEach((mutation) => {
121+
mutation.addedNodes.forEach((node) => {
122+
if (node.nodeType === Node.ELEMENT_NODE) {
123+
// Check if the node itself is a tooltip container
124+
if (node.classList && node.classList.contains('tooltip-container')) {
125+
attachTooltipListeners(node);
126+
}
127+
// Check for tooltip containers within the added node
128+
const newTooltips = node.querySelectorAll && node.querySelectorAll('.tooltip-container');
129+
if (newTooltips) {
130+
newTooltips.forEach(attachTooltipListeners);
131+
}
132+
}
133+
});
134+
});
135+
});
136+
137+
// Start observing
138+
observer.observe(document.body, {
139+
childList: true,
140+
subtree: true
109141
});
110142

111143
// Close tooltip when tapping outside
@@ -122,4 +154,23 @@ document.addEventListener('DOMContentLoaded', () => {
122154
positionTooltip(activeTooltip, trigger);
123155
}
124156
});
125-
});
157+
}
158+
159+
// Initialize tooltips when DOM is ready
160+
if (document.readyState === 'loading') {
161+
document.addEventListener('DOMContentLoaded', initializeTooltips);
162+
} else {
163+
// DOM already loaded, initialize immediately
164+
initializeTooltips();
165+
}
166+
167+
// Also reinitialize after a short delay to catch any tooltips that might be processed later
168+
setTimeout(() => {
169+
const uninitializedTooltips = document.querySelectorAll('.tooltip-container .tooltip-trigger:not([data-tooltip-initialized])');
170+
uninitializedTooltips.forEach(trigger => {
171+
const container = trigger.closest('.tooltip-container');
172+
if (container) {
173+
attachTooltipListeners(container);
174+
}
175+
});
176+
}, 500); // 500ms delay to catch late-rendered tooltips

0 commit comments

Comments
 (0)