( parentElement, config, loadAnalytics = false, disableImmediate = false )
| 18 | * @return {!Element} created analytics element |
| 19 | */ |
| 20 | export function insertAnalyticsElement( |
| 21 | parentElement, |
| 22 | config, |
| 23 | loadAnalytics = false, |
| 24 | disableImmediate = false |
| 25 | ) { |
| 26 | const doc = /** @type {!Document} */ (parentElement.ownerDocument); |
| 27 | const analyticsElem = createElementWithAttributes(doc, 'amp-analytics', { |
| 28 | 'sandbox': 'true', |
| 29 | 'trigger': disableImmediate ? '' : 'immediate', |
| 30 | }); |
| 31 | const scriptElem = createElementWithAttributes(doc, 'script', { |
| 32 | 'type': 'application/json', |
| 33 | }); |
| 34 | scriptElem.textContent = JSON.stringify(config); |
| 35 | analyticsElem.appendChild(scriptElem); |
| 36 | analyticsElem.CONFIG = config; |
| 37 | |
| 38 | // Force load analytics extension if script not included in page. |
| 39 | if (loadAnalytics) { |
| 40 | // Get Extensions service and force load analytics extension. |
| 41 | const extensions = Services.extensionsFor(getWin(parentElement)); |
| 42 | const ampdoc = Services.ampdoc(parentElement); |
| 43 | extensions./*OK*/ installExtensionForDoc(ampdoc, 'amp-analytics'); |
| 44 | } else { |
| 45 | Services.analyticsForDocOrNull(parentElement).then((analytics) => { |
| 46 | devAssert(analytics); |
| 47 | }); |
| 48 | } |
| 49 | parentElement.appendChild(analyticsElem); |
| 50 | return analyticsElem; |
| 51 | } |
| 52 | |
| 53 | /** |
| 54 | * A class that handles customEvent reporting of extension element through |
no test coverage detected