@microsoft/applicationinsights-clickanalytics-js 2.8.5-nightly.2206-02 → 2.8.5-nightly.2206-06

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.
Files changed (81) hide show
  1. package/browser/{ai.clck.2.8.5-nightly.2206-02.cjs.js → ai.clck.2.8.5-nightly.2206-06.cjs.js} +664 -566
  2. package/browser/ai.clck.2.8.5-nightly.2206-06.cjs.js.map +1 -0
  3. package/browser/ai.clck.2.8.5-nightly.2206-06.cjs.min.js +6 -0
  4. package/browser/ai.clck.2.8.5-nightly.2206-06.cjs.min.js.map +1 -0
  5. package/browser/{ai.clck.2.8.5-nightly.2206-02.gbl.js → ai.clck.2.8.5-nightly.2206-06.gbl.js} +664 -566
  6. package/browser/ai.clck.2.8.5-nightly.2206-06.gbl.js.map +1 -0
  7. package/browser/ai.clck.2.8.5-nightly.2206-06.gbl.min.js +6 -0
  8. package/browser/ai.clck.2.8.5-nightly.2206-06.gbl.min.js.map +1 -0
  9. package/browser/ai.clck.2.8.5-nightly.2206-06.integrity.json +66 -0
  10. package/browser/{ai.clck.2.8.5-nightly.2206-02.js → ai.clck.2.8.5-nightly.2206-06.js} +664 -566
  11. package/browser/ai.clck.2.8.5-nightly.2206-06.js.map +1 -0
  12. package/browser/ai.clck.2.8.5-nightly.2206-06.min.js +6 -0
  13. package/browser/ai.clck.2.8.5-nightly.2206-06.min.js.map +1 -0
  14. package/browser/ai.clck.2.cjs.js +663 -565
  15. package/browser/ai.clck.2.cjs.js.map +1 -1
  16. package/browser/ai.clck.2.cjs.min.js +2 -2
  17. package/browser/ai.clck.2.cjs.min.js.map +1 -1
  18. package/browser/ai.clck.2.gbl.js +663 -565
  19. package/browser/ai.clck.2.gbl.js.map +1 -1
  20. package/browser/ai.clck.2.gbl.min.js +2 -2
  21. package/browser/ai.clck.2.gbl.min.js.map +1 -1
  22. package/browser/ai.clck.2.js +663 -565
  23. package/browser/ai.clck.2.js.map +1 -1
  24. package/browser/ai.clck.2.min.js +2 -2
  25. package/browser/ai.clck.2.min.js.map +1 -1
  26. package/dist/applicationinsights-clickanalytics-js.api.json +21 -8
  27. package/dist/applicationinsights-clickanalytics-js.d.ts +1 -1
  28. package/dist/applicationinsights-clickanalytics-js.js +663 -565
  29. package/dist/applicationinsights-clickanalytics-js.js.map +1 -1
  30. package/dist/applicationinsights-clickanalytics-js.min.js +2 -2
  31. package/dist/applicationinsights-clickanalytics-js.min.js.map +1 -1
  32. package/dist/applicationinsights-clickanalytics-js.rollup.d.ts +1 -1
  33. package/dist-esm/Behaviours.js +1 -1
  34. package/dist-esm/ClickAnalyticsPlugin.js +13 -12
  35. package/dist-esm/ClickAnalyticsPlugin.js.map +1 -1
  36. package/dist-esm/DataCollector.js +21 -20
  37. package/dist-esm/DataCollector.js.map +1 -1
  38. package/dist-esm/Enums.js +1 -1
  39. package/dist-esm/Interfaces/Datamodel.js +1 -1
  40. package/dist-esm/__DynamicConstants.js +62 -0
  41. package/dist-esm/__DynamicConstants.js.map +1 -0
  42. package/dist-esm/applicationinsights-clickanalytics-js.js +1 -1
  43. package/dist-esm/common/Utils.js +45 -82
  44. package/dist-esm/common/Utils.js.map +1 -1
  45. package/dist-esm/events/PageAction.js +55 -49
  46. package/dist-esm/events/PageAction.js.map +1 -1
  47. package/dist-esm/events/WebEvent.js +45 -39
  48. package/dist-esm/events/WebEvent.js.map +1 -1
  49. package/dist-esm/handlers/AutoCaptureHandler.js +29 -22
  50. package/dist-esm/handlers/AutoCaptureHandler.js.map +1 -1
  51. package/dist-esm/handlers/DomContentHandler.js +66 -60
  52. package/dist-esm/handlers/DomContentHandler.js.map +1 -1
  53. package/package.json +8 -5
  54. package/src/ClickAnalyticsPlugin.ts +20 -27
  55. package/src/DataCollector.ts +9 -12
  56. package/src/Interfaces/Datamodel.ts +1 -1
  57. package/src/__DynamicConstants.ts +60 -0
  58. package/src/common/Utils.ts +28 -69
  59. package/src/events/PageAction.ts +19 -16
  60. package/src/events/WebEvent.ts +20 -18
  61. package/src/handlers/AutoCaptureHandler.ts +16 -16
  62. package/src/handlers/DomContentHandler.ts +15 -17
  63. package/types/ClickAnalyticsPlugin.d.ts +4 -4
  64. package/types/DataCollector.d.ts +2 -2
  65. package/types/__DynamicConstants.d.ts +48 -0
  66. package/types/common/Utils.d.ts +94 -96
  67. package/types/events/PageAction.d.ts +4 -4
  68. package/types/events/WebEvent.d.ts +4 -4
  69. package/types/handlers/AutoCaptureHandler.d.ts +3 -3
  70. package/types/handlers/DomContentHandler.d.ts +2 -2
  71. package/types/tsdoc-metadata.json +1 -1
  72. package/browser/ai.clck.2.8.5-nightly.2206-02.cjs.js.map +0 -1
  73. package/browser/ai.clck.2.8.5-nightly.2206-02.cjs.min.js +0 -6
  74. package/browser/ai.clck.2.8.5-nightly.2206-02.cjs.min.js.map +0 -1
  75. package/browser/ai.clck.2.8.5-nightly.2206-02.gbl.js.map +0 -1
  76. package/browser/ai.clck.2.8.5-nightly.2206-02.gbl.min.js +0 -6
  77. package/browser/ai.clck.2.8.5-nightly.2206-02.gbl.min.js.map +0 -1
  78. package/browser/ai.clck.2.8.5-nightly.2206-02.integrity.json +0 -66
  79. package/browser/ai.clck.2.8.5-nightly.2206-02.js.map +0 -1
  80. package/browser/ai.clck.2.8.5-nightly.2206-02.min.js +0 -6
  81. package/browser/ai.clck.2.8.5-nightly.2206-02.min.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"AutoCaptureHandler.js.map","sources":["AutoCaptureHandler.js"],"sourcesContent":["/**\r\n * @copyright Microsoft 2020\r\n */\r\nimport dynamicProto from \"@microsoft/dynamicproto-js\";\r\nimport { getWindow, getDocument, isNullOrUndefined, mergeEvtNamespace, createUniqueNamespace, eventOn, eventOff } from \"@microsoft/applicationinsights-core-js\";\r\nimport { isRightClick, isLeftClick, isKeyboardEnter, isKeyboardSpace, isMiddleClick, isElementDnt } from \"../common/Utils\";\r\nimport { ActionType } from \"../Enums\";\r\nvar clickCaptureInputTypes = { BUTTON: true, CHECKBOX: true, RADIO: true, RESET: true, SUBMIT: true };\r\nvar AutoCaptureHandler = /** @class */ (function () {\r\n /**\r\n * @param analyticsPlugin - WebAnalytics plugin\r\n * @param traceLogger - Trace logger to log to console.\r\n */\r\n function AutoCaptureHandler(_analyticsPlugin, _config, _pageAction, _traceLogger) {\r\n this._analyticsPlugin = _analyticsPlugin;\r\n this._config = _config;\r\n this._pageAction = _pageAction;\r\n this._traceLogger = _traceLogger;\r\n var _evtNamespace = mergeEvtNamespace(createUniqueNamespace(\"AutoCaptureHandler\"), _analyticsPlugin._evtNamespace);\r\n dynamicProto(AutoCaptureHandler, this, function (_self) {\r\n _self.click = function () {\r\n var win = getWindow();\r\n var doc = getDocument();\r\n if (win) {\r\n // IE9 onwards addEventListener is available, 'click' event captures mouse click. mousedown works on other browsers\r\n var event_1 = (navigator.appVersion.indexOf(\"MSIE\") !== -1) ? \"click\" : \"mousedown\";\r\n eventOn(win, event_1, _processClick, _evtNamespace);\r\n eventOn(win, \"keyup\", _processClick, _evtNamespace);\r\n }\r\n else if (doc) {\r\n // IE8 and below doesn't have addEventListener so it will use attachEvent\r\n // attaching to window does not work in IE8\r\n eventOn(doc, \"click\", _processClick, _evtNamespace);\r\n eventOn(doc, \"keyup\", _processClick, _evtNamespace);\r\n }\r\n };\r\n _self._doUnload = function (unloadCtx, unloadState, asyncCallback) {\r\n eventOff(getWindow(), null, null, _evtNamespace);\r\n eventOff(getDocument(), null, null, _evtNamespace);\r\n };\r\n function _capturePageAction(element, overrideValues, customProperties, isRightClick) {\r\n var donotTrackTag = _self._config.dataTags.customDataPrefix + _self._config.dataTags.dntDataTag;\r\n if (!isElementDnt(element, donotTrackTag)) {\r\n _self._pageAction.capturePageAction(element, overrideValues, customProperties, isRightClick);\r\n }\r\n }\r\n // Process click event\r\n function _processClick(clickEvent) {\r\n var clickCaptureElements = { A: true, BUTTON: true, AREA: true, INPUT: true };\r\n var win = getWindow();\r\n if (isNullOrUndefined(clickEvent) && win) {\r\n clickEvent = win.event; // IE 8 does not pass the event\r\n }\r\n if (clickEvent) {\r\n var element = clickEvent.srcElement || clickEvent.target;\r\n // populate overrideValues\r\n var overrideValues = {\r\n clickCoordinateX: clickEvent.pageX,\r\n clickCoordinateY: clickEvent.pageY\r\n };\r\n var isRightClickObj = isRightClick(clickEvent);\r\n if (isRightClickObj) {\r\n overrideValues.actionType = ActionType.CLICKRIGHT;\r\n }\r\n else if (isLeftClick(clickEvent)) {\r\n overrideValues.actionType = ActionType.CLICKLEFT;\r\n }\r\n else if (isKeyboardEnter(clickEvent)) {\r\n overrideValues.actionType = ActionType.KEYBOARDENTER;\r\n }\r\n else if (isKeyboardSpace(clickEvent)) {\r\n overrideValues.actionType = ActionType.KEYBOARDSPACE;\r\n }\r\n else if (isMiddleClick(clickEvent)) {\r\n overrideValues.actionType = ActionType.CLICKMIDDLE;\r\n }\r\n else {\r\n return;\r\n }\r\n while (element && element.tagName) {\r\n // control property will be available for <label> elements with 'for' attribute, only use it when is a\r\n // valid JSLL capture element to avoid infinite loops\r\n if (element.control && clickCaptureElements[element.control.tagName.toUpperCase()]) {\r\n element = element.control;\r\n }\r\n var tagNameUpperCased = element.tagName.toUpperCase();\r\n if (!clickCaptureElements[tagNameUpperCased]) {\r\n element = element.parentElement || element.parentNode;\r\n continue;\r\n }\r\n else {\r\n // Check allowed INPUT types\r\n var sendEvent = tagNameUpperCased === \"INPUT\" ? clickCaptureInputTypes[element.type.toUpperCase()] : true;\r\n if (sendEvent) {\r\n _capturePageAction(element, overrideValues, {}, isRightClickObj);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n // handle automatic event firing on user click\r\n AutoCaptureHandler.prototype.click = function () {\r\n // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging\r\n };\r\n AutoCaptureHandler.prototype._doUnload = function (unloadCtx, unloadState, asyncCallback) {\r\n // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging\r\n };\r\n return AutoCaptureHandler;\r\n}());\r\nexport { AutoCaptureHandler };\r\n//# sourceMappingURL=AutoCaptureHandler.js.map"],"names":[],"mappings":";;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;2DAKM;AACN;AACA;AACA;AACA"}
1
+ {"version":3,"file":"AutoCaptureHandler.js.map","sources":["AutoCaptureHandler.js"],"sourcesContent":["/**\r\n* @copyright Microsoft 2020\r\n*/\r\nimport dynamicProto from \"@microsoft/dynamicproto-js\";\r\nimport { createUniqueNamespace, eventOff, eventOn, getDocument, getWindow, isNullOrUndefined, mergeEvtNamespace } from \"@microsoft/applicationinsights-core-js\";\r\nimport { ActionType } from \"../Enums\";\r\nimport { _DYN_ACTION_TYPE, _DYN_CAPTURE_PAGE_ACTION, _DYN_CLICK_COORDINATE_X, _DYN_CLICK_COORDINATE_Y, _DYN_CUSTOM_DATA_PREFIX, _DYN_DATA_TAGS, _DYN_INDEX_OF, _DYN_PARENT_NODE, _DYN_TAG_NAME, _DYN_TO_UPPER_CASE, _DYN__CONFIG } from \"../__DynamicConstants\";\r\nimport { isElementDnt, isKeyboardEnter, isKeyboardSpace, isLeftClick, isMiddleClick, isRightClick } from \"../common/Utils\";\r\nvar clickCaptureInputTypes = { BUTTON: true, CHECKBOX: true, RADIO: true, RESET: true, SUBMIT: true };\r\nvar AutoCaptureHandler = /** @class */ (function () {\r\n /**\r\n * @param analyticsPlugin - WebAnalytics plugin\r\n * @param traceLogger - Trace logger to log to console.\r\n */\r\n function AutoCaptureHandler(_analyticsPlugin, _config, _pageAction, _traceLogger) {\r\n this._analyticsPlugin = _analyticsPlugin;\r\n this._config = _config;\r\n this._pageAction = _pageAction;\r\n this._traceLogger = _traceLogger;\r\n var _evtNamespace = mergeEvtNamespace(createUniqueNamespace(\"AutoCaptureHandler\"), _analyticsPlugin._evtNamespace);\r\n dynamicProto(AutoCaptureHandler, this, function (_self) {\r\n _self.click = function () {\r\n var win = getWindow();\r\n var doc = getDocument();\r\n if (win) {\r\n // IE9 onwards addEventListener is available, 'click' event captures mouse click. mousedown works on other browsers\r\n var event_1 = (navigator.appVersion[_DYN_INDEX_OF /* @min:%2eindexOf */](\"MSIE\") !== -1) ? \"click\" : \"mousedown\";\r\n eventOn(win, event_1, _processClick, _evtNamespace);\r\n eventOn(win, \"keyup\", _processClick, _evtNamespace);\r\n }\r\n else if (doc) {\r\n // IE8 and below doesn't have addEventListener so it will use attachEvent\r\n // attaching to window does not work in IE8\r\n eventOn(doc, \"click\", _processClick, _evtNamespace);\r\n eventOn(doc, \"keyup\", _processClick, _evtNamespace);\r\n }\r\n };\r\n _self._doUnload = function (unloadCtx, unloadState, asyncCallback) {\r\n eventOff(getWindow(), null, null, _evtNamespace);\r\n eventOff(getDocument(), null, null, _evtNamespace);\r\n };\r\n function _capturePageAction(element, overrideValues, customProperties, isRightClick) {\r\n var donotTrackTag = _self._config.dataTags[_DYN_CUSTOM_DATA_PREFIX /* @min:%2ecustomDataPrefix */] + _self[_DYN__CONFIG /* @min:%2e_config */][_DYN_DATA_TAGS /* @min:%2edataTags */].dntDataTag;\r\n if (!isElementDnt(element, donotTrackTag)) {\r\n _self._pageAction[_DYN_CAPTURE_PAGE_ACTION /* @min:%2ecapturePageAction */](element, overrideValues, customProperties, isRightClick);\r\n }\r\n }\r\n // Process click event\r\n function _processClick(clickEvent) {\r\n var _a;\r\n var clickCaptureElements = { A: true, BUTTON: true, AREA: true, INPUT: true };\r\n var win = getWindow();\r\n if (isNullOrUndefined(clickEvent) && win) {\r\n clickEvent = win.event; // IE 8 does not pass the event\r\n }\r\n if (clickEvent) {\r\n var element = clickEvent.srcElement || clickEvent.target;\r\n // populate overrideValues\r\n var overrideValues = (_a = {},\r\n _a[_DYN_CLICK_COORDINATE_X /* @min:clickCoordinateX */] = clickEvent.pageX,\r\n _a[_DYN_CLICK_COORDINATE_Y /* @min:clickCoordinateY */] = clickEvent.pageY,\r\n _a);\r\n var isRightClickObj = isRightClick(clickEvent);\r\n if (isRightClickObj) {\r\n overrideValues[_DYN_ACTION_TYPE /* @min:%2eactionType */] = ActionType.CLICKRIGHT;\r\n }\r\n else if (isLeftClick(clickEvent)) {\r\n overrideValues[_DYN_ACTION_TYPE /* @min:%2eactionType */] = ActionType.CLICKLEFT;\r\n }\r\n else if (isKeyboardEnter(clickEvent)) {\r\n overrideValues[_DYN_ACTION_TYPE /* @min:%2eactionType */] = ActionType.KEYBOARDENTER;\r\n }\r\n else if (isKeyboardSpace(clickEvent)) {\r\n overrideValues[_DYN_ACTION_TYPE /* @min:%2eactionType */] = ActionType.KEYBOARDSPACE;\r\n }\r\n else if (isMiddleClick(clickEvent)) {\r\n overrideValues[_DYN_ACTION_TYPE /* @min:%2eactionType */] = ActionType.CLICKMIDDLE;\r\n }\r\n else {\r\n return;\r\n }\r\n while (element && element[_DYN_TAG_NAME /* @min:%2etagName */]) {\r\n // control property will be available for <label> elements with 'for' attribute, only use it when is a\r\n // valid JSLL capture element to avoid infinite loops\r\n if (element.control && clickCaptureElements[element.control[_DYN_TAG_NAME /* @min:%2etagName */][_DYN_TO_UPPER_CASE /* @min:%2etoUpperCase */]()]) {\r\n element = element.control;\r\n }\r\n var tagNameUpperCased = element[_DYN_TAG_NAME /* @min:%2etagName */][_DYN_TO_UPPER_CASE /* @min:%2etoUpperCase */]();\r\n if (!clickCaptureElements[tagNameUpperCased]) {\r\n element = element.parentElement || element[_DYN_PARENT_NODE /* @min:%2eparentNode */];\r\n continue;\r\n }\r\n else {\r\n // Check allowed INPUT types\r\n var sendEvent = tagNameUpperCased === \"INPUT\" ? clickCaptureInputTypes[element.type[_DYN_TO_UPPER_CASE /* @min:%2etoUpperCase */]()] : true;\r\n if (sendEvent) {\r\n _capturePageAction(element, overrideValues, {}, isRightClickObj);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n // handle automatic event firing on user click\r\n AutoCaptureHandler.prototype.click = function () {\r\n // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging\r\n };\r\n AutoCaptureHandler.prototype._doUnload = function (unloadCtx, unloadState, asyncCallback) {\r\n // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging\r\n };\r\n return AutoCaptureHandler;\r\n}());\r\nexport { AutoCaptureHandler };\r\n//# sourceMappingURL=AutoCaptureHandler.js.map"],"names":[],"mappings":";;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;2DAKM,CAAC;;;;;;8BACuB;AAC9B;AACA;AACA"}
@@ -1,13 +1,14 @@
1
1
  /*
2
- * Application Insights JavaScript SDK - Click Analytics, 2.8.5-nightly.2206-02
2
+ * Application Insights JavaScript SDK - Click Analytics, 2.8.5-nightly.2206-06
3
3
  * Copyright (c) Microsoft and contributors. All rights reserved.
4
4
  */
5
5
  /**
6
- * @copyright Microsoft 2020
7
- */
6
+ * @copyright Microsoft 2020
7
+ */
8
8
  import dynamicProto from "@microsoft/dynamicproto-js";
9
- import { removeInvalidElements, walkUpDomChainWithElementValidation, extend, isValueAssigned } from "../common/Utils";
10
- import { getDocument, isNullOrUndefined, hasDocument, _throwInternal } from "@microsoft/applicationinsights-core-js";
9
+ import { _throwInternal, getDocument, hasDocument, isNullOrUndefined, objExtend } from "@microsoft/applicationinsights-core-js";
10
+ import { _DYN_AI_BLOB_ATTRIBUTE_TA2, _DYN_ATTRIBUTES, _DYN_CAPTURE_ALL_META_DAT3, _DYN_CONTENT, _DYN_CONTENT_NAME, _DYN_CUSTOM_DATA_PREFIX, _DYN_DATA_TAGS, _DYN_GET_ATTRIBUTE, _DYN_GET_ELEMENT_CONTENT, _DYN_INDEX_OF, _DYN_LENGTH, _DYN_NAME, _DYN_PARENT_DATA_TAG, _DYN_PARENT_ELEMENT, _DYN_PARENT_NODE, _DYN_TAG_NAME, _DYN_USE_DEFAULT_CONTENT_1, _DYN__CONFIG, _DYN__TRACE_LOGGER } from "../__DynamicConstants";
11
+ import { isValueAssigned, removeInvalidElements, walkUpDomChainWithElementValidation } from "../common/Utils";
11
12
  var MAX_CONTENTNAME_LENGTH = 200;
12
13
  var DomContentHandler = /** @class */ (function () {
13
14
  /**
@@ -19,50 +20,50 @@ var DomContentHandler = /** @class */ (function () {
19
20
  this._traceLogger = _traceLogger;
20
21
  dynamicProto(DomContentHandler, this, function (_self) {
21
22
  _self.getMetadata = function () {
22
- var dataTags = (_self._config || {}).dataTags;
23
+ var dataTags = (_self._config || {})[_DYN_DATA_TAGS /* @min:%2edataTags */];
23
24
  var metaTags = {};
24
25
  if (hasDocument) {
25
- metaTags = isValueAssigned(dataTags.metaDataPrefix) ? _getMetaDataFromDOM(dataTags.captureAllMetaDataContent, dataTags.metaDataPrefix, false) :
26
- _getMetaDataFromDOM(dataTags.captureAllMetaDataContent, "", false);
26
+ metaTags = isValueAssigned(dataTags.metaDataPrefix) ? _getMetaDataFromDOM(dataTags[_DYN_CAPTURE_ALL_META_DAT3 /* @min:%2ecaptureAllMetaDataContent */], dataTags.metaDataPrefix, false) :
27
+ _getMetaDataFromDOM(dataTags[_DYN_CAPTURE_ALL_META_DAT3 /* @min:%2ecaptureAllMetaDataContent */], "", false);
27
28
  }
28
29
  return metaTags;
29
30
  };
30
- _self.getElementContent = function (element) {
31
+ _self[_DYN_GET_ELEMENT_CONTENT /* @min:%2egetElementContent */] = function (element) {
31
32
  if (!element) {
32
33
  return {};
33
34
  }
34
- var dataTags = (_self._config || {}).dataTags;
35
+ var dataTags = (_self._config || {})[_DYN_DATA_TAGS /* @min:%2edataTags */];
35
36
  var elementContent = {};
36
37
  var biBlobValue;
37
38
  var parentDataTagPrefix;
38
- var dataTagPrefix = dataTags.customDataPrefix;
39
- var aiBlobAttributeTag = dataTagPrefix + dataTags.aiBlobAttributeTag;
40
- if (isValueAssigned(dataTags.parentDataTag)) {
41
- parentDataTagPrefix = dataTagPrefix + dataTags.parentDataTag;
39
+ var dataTagPrefix = dataTags[_DYN_CUSTOM_DATA_PREFIX /* @min:%2ecustomDataPrefix */];
40
+ var aiBlobAttributeTag = dataTagPrefix + dataTags[_DYN_AI_BLOB_ATTRIBUTE_TA2 /* @min:%2eaiBlobAttributeTag */];
41
+ if (isValueAssigned(dataTags[_DYN_PARENT_DATA_TAG /* @min:%2eparentDataTag */])) {
42
+ parentDataTagPrefix = dataTagPrefix + dataTags[_DYN_PARENT_DATA_TAG /* @min:%2eparentDataTag */];
42
43
  }
43
44
  if (!_isTracked(element, dataTagPrefix, aiBlobAttributeTag)) {
44
45
  // capture blob from element or hierarchy
45
- biBlobValue = element.getAttribute(aiBlobAttributeTag);
46
+ biBlobValue = element[_DYN_GET_ATTRIBUTE /* @min:%2egetAttribute */](aiBlobAttributeTag);
46
47
  if (biBlobValue) {
47
48
  try {
48
49
  elementContent = JSON.parse(biBlobValue);
49
50
  }
50
51
  catch (e) {
51
- _throwInternal(_self._traceLogger, 1 /* eLoggingSeverity.CRITICAL */, 101 /* _eInternalMessageId.CannotParseAiBlobValue */, "Can not parse " + biBlobValue);
52
+ _throwInternal(_self[_DYN__TRACE_LOGGER /* @min:%2e_traceLogger */], 1 /* eLoggingSeverity.CRITICAL */, 101 /* _eInternalMessageId.CannotParseAiBlobValue */, "Can not parse " + biBlobValue);
52
53
  }
53
54
  }
54
55
  else {
55
56
  // traverse up the DOM to find the closest parent with data-* tag defined
56
57
  //contentElement = walkUpDomChainWithElementValidation(element, _self._isTracked, dataTagPrefix);
57
- elementContent = extend(elementContent, _populateElementContent(element, dataTagPrefix, parentDataTagPrefix, aiBlobAttributeTag));
58
+ elementContent = objExtend(elementContent, _populateElementContent(element, dataTagPrefix, parentDataTagPrefix, aiBlobAttributeTag));
58
59
  }
59
60
  }
60
61
  else {
61
- elementContent = extend(elementContent, _populateElementContentwithDataTag(element, dataTagPrefix, parentDataTagPrefix, aiBlobAttributeTag));
62
+ elementContent = objExtend(elementContent, _populateElementContentwithDataTag(element, dataTagPrefix, parentDataTagPrefix, aiBlobAttributeTag));
62
63
  }
63
64
  removeInvalidElements(elementContent);
64
65
  if (parentDataTagPrefix) {
65
- elementContent = extend(elementContent, _getParentDetails(element, elementContent, dataTagPrefix, aiBlobAttributeTag));
66
+ elementContent = objExtend(elementContent, _getParentDetails(element, elementContent, dataTagPrefix, aiBlobAttributeTag));
66
67
  }
67
68
  return elementContent;
68
69
  };
@@ -70,12 +71,12 @@ var DomContentHandler = /** @class */ (function () {
70
71
  * Capture current level Element content
71
72
  */
72
73
  function _captureElementContentWithDataTag(contentElement, elementContent, dataTagPrefix) {
73
- for (var i = 0, attrib; i < contentElement.attributes.length; i++) {
74
- attrib = contentElement.attributes[i];
75
- if (attrib.name.indexOf(dataTagPrefix) !== 0) {
74
+ for (var i = 0, attrib; i < contentElement.attributes[_DYN_LENGTH /* @min:%2elength */]; i++) {
75
+ attrib = contentElement[_DYN_ATTRIBUTES /* @min:%2eattributes */][i];
76
+ if (attrib.name[_DYN_INDEX_OF /* @min:%2eindexOf */](dataTagPrefix) !== 0) {
76
77
  continue;
77
78
  }
78
- var attribName = attrib.name.replace(dataTagPrefix, "");
79
+ var attribName = attrib[_DYN_NAME /* @min:%2ename */].replace(dataTagPrefix, "");
79
80
  elementContent[attribName] = attrib.value;
80
81
  }
81
82
  }
@@ -86,21 +87,21 @@ var DomContentHandler = /** @class */ (function () {
86
87
  var element = el;
87
88
  var parentDataTagFound = false;
88
89
  var elementLevelFlag = false; // Use this flag to capture 'id' only at the incoming html element level.
89
- while (!isNullOrUndefined(element) && !isNullOrUndefined(element.attributes)) {
90
- var attributes = element.attributes;
91
- for (var i = 0; i < attributes.length; i++) {
90
+ while (!isNullOrUndefined(element) && !isNullOrUndefined(element[_DYN_ATTRIBUTES /* @min:%2eattributes */])) {
91
+ var attributes = element[_DYN_ATTRIBUTES /* @min:%2eattributes */];
92
+ for (var i = 0; i < attributes[_DYN_LENGTH /* @min:%2elength */]; i++) {
92
93
  var attrib = attributes[i];
93
- if (attrib.name.indexOf(dataTagPrefix) !== 0) {
94
+ if (attrib.name[_DYN_INDEX_OF /* @min:%2eindexOf */](dataTagPrefix) !== 0) {
94
95
  continue;
95
96
  }
96
- if (attrib.name.indexOf(parentDataTagPrefix) === 0) {
97
+ if (attrib.name[_DYN_INDEX_OF /* @min:%2eindexOf */](parentDataTagPrefix) === 0) {
97
98
  parentDataTagFound = true;
98
99
  }
99
100
  // Todo handle blob data
100
- if (attrib.name.indexOf(aiBlobAttributeTag) === 0) {
101
+ if (attrib.name[_DYN_INDEX_OF /* @min:%2eindexOf */](aiBlobAttributeTag) === 0) {
101
102
  continue;
102
103
  }
103
- var attribName = attrib.name.replace(dataTagPrefix, "");
104
+ var attribName = attrib[_DYN_NAME /* @min:%2ename */].replace(dataTagPrefix, "");
104
105
  if (elementLevelFlag && attribName === "id") {
105
106
  continue; // skip capturing id if not at the first level.
106
107
  }
@@ -113,7 +114,7 @@ var DomContentHandler = /** @class */ (function () {
113
114
  break;
114
115
  }
115
116
  elementLevelFlag = true; // after the initial level set this flag to true.
116
- element = element.parentNode;
117
+ element = element[_DYN_PARENT_NODE /* @min:%2eparentNode */];
117
118
  }
118
119
  }
119
120
  /**
@@ -127,7 +128,7 @@ var DomContentHandler = /** @class */ (function () {
127
128
  var htmlContent = _getHtmlIdAndContentName(element);
128
129
  elementContent = {
129
130
  id: htmlContent.id || "",
130
- contentName: htmlContent.contentName || ""
131
+ contentName: htmlContent[_DYN_CONTENT_NAME /* @min:%2econtentName */] || ""
131
132
  };
132
133
  if (isValueAssigned(parentDataTagPrefix)) {
133
134
  _walkUpDomChainCaptureData(element, elementContent, dataTagPrefix, parentDataTagPrefix, aiBlobAttributeTag);
@@ -136,7 +137,7 @@ var DomContentHandler = /** @class */ (function () {
136
137
  // The content schema defines id, aN and sN as required fields. However,
137
138
  // requiring these fields would result in majority of adopter's content from being collected.
138
139
  // Just throw a warning and continue collection.
139
- if (!elementContent.id && !elementContent.contentName) {
140
+ if (!elementContent.id && !elementContent[_DYN_CONTENT_NAME /* @min:%2econtentName */]) {
140
141
  _throwInternal(_traceLogger, 2 /* eLoggingSeverity.WARNING */, 102 /* _eInternalMessageId.InvalidContentBlob */, "Invalid content blob. Missing required attributes (id, contentName. " +
141
142
  " Content information will still be collected!");
142
143
  }
@@ -146,7 +147,7 @@ var DomContentHandler = /** @class */ (function () {
146
147
  * Capture Element content along with Data Tag attributes and values
147
148
  */
148
149
  function _populateElementContentwithDataTag(element, dataTagPrefix, parentDataTagPrefix, aiBlobAttributeTag) {
149
- var dataTags = (_self._config || {}).dataTags;
150
+ var dataTags = (_self._config || {})[_DYN_DATA_TAGS /* @min:%2edataTags */];
150
151
  var elementContent = {};
151
152
  if (!element) {
152
153
  return elementContent;
@@ -158,17 +159,17 @@ var DomContentHandler = /** @class */ (function () {
158
159
  else {
159
160
  _captureElementContentWithDataTag(element, elementContent, dataTagPrefix);
160
161
  }
161
- if (dataTags.useDefaultContentNameOrId) {
162
+ if (dataTags[_DYN_USE_DEFAULT_CONTENT_1 /* @min:%2euseDefaultContentNameOrId */]) {
162
163
  if (!isValueAssigned(elementContent.id)) {
163
164
  elementContent.id = htmlContent.id || "";
164
165
  }
165
- elementContent.contentName = htmlContent.contentName || "";
166
+ elementContent[_DYN_CONTENT_NAME /* @min:%2econtentName */] = htmlContent[_DYN_CONTENT_NAME /* @min:%2econtentName */] || "";
166
167
  }
167
168
  // Validate to ensure the minimum required field 'id' or 'contentName' is present.
168
169
  // The content schema defines id, aN and sN as required fields. However,
169
170
  // requiring these fields would result in majority of adopter's content from being collected.
170
171
  // Just throw a warning and continue collection.
171
- if (!elementContent.id && !elementContent.contentName) {
172
+ if (!elementContent.id && !elementContent[_DYN_CONTENT_NAME /* @min:%2econtentName */]) {
172
173
  _throwInternal(_traceLogger, 2 /* eLoggingSeverity.WARNING */, 102 /* _eInternalMessageId.InvalidContentBlob */, "Invalid content blob. Missing required attributes (id, contentName. " +
173
174
  " Content information will still be collected!");
174
175
  }
@@ -186,12 +187,12 @@ var DomContentHandler = /** @class */ (function () {
186
187
  var metaData = {};
187
188
  if (hasDocument) {
188
189
  metaElements = document.querySelectorAll("meta");
189
- for (var i = 0; i < metaElements.length; i++) {
190
+ for (var i = 0; i < metaElements[_DYN_LENGTH /* @min:%2elength */]; i++) {
190
191
  var meta = metaElements[i];
191
- if (meta.name) {
192
- if (captureAllMetaDataContent || meta.name.indexOf(prefix) === 0) {
193
- var name_1 = removePrefix ? meta.name.replace(prefix, "") : meta.name;
194
- metaData[name_1] = meta.content;
192
+ if (meta[_DYN_NAME /* @min:%2ename */]) {
193
+ if (captureAllMetaDataContent || meta.name[_DYN_INDEX_OF /* @min:%2eindexOf */](prefix) === 0) {
194
+ var name_1 = removePrefix ? meta[_DYN_NAME /* @min:%2ename */].replace(prefix, "") : meta[_DYN_NAME /* @min:%2ename */];
195
+ metaData[name_1] = meta[_DYN_CONTENT /* @min:%2econtent */];
195
196
  }
196
197
  }
197
198
  }
@@ -205,12 +206,12 @@ var DomContentHandler = /** @class */ (function () {
205
206
  * @returns Content name
206
207
  */
207
208
  function _getDefaultContentName(element, useDefaultContentName) {
208
- if (useDefaultContentName === false || !element.tagName) {
209
+ if (useDefaultContentName === false || !element[_DYN_TAG_NAME /* @min:%2etagName */]) {
209
210
  return "";
210
211
  }
211
212
  var doc = getDocument() || {};
212
213
  var contentName;
213
- switch (element.tagName) {
214
+ switch (element[_DYN_TAG_NAME /* @min:%2etagName */]) {
214
215
  case "A":
215
216
  contentName = doc.all ? element.innerText || element.innerHTML : element.text || element.innerHTML;
216
217
  break;
@@ -219,7 +220,7 @@ var DomContentHandler = /** @class */ (function () {
219
220
  contentName = element.alt;
220
221
  break;
221
222
  default:
222
- contentName = element.value || element.name || element.alt || element.innerText || element.id;
223
+ contentName = element.value || element[_DYN_NAME /* @min:%2ename */] || element.alt || element.innerText || element.id;
223
224
  }
224
225
  return contentName.substring(0, MAX_CONTENTNAME_LENGTH);
225
226
  }
@@ -229,33 +230,33 @@ var DomContentHandler = /** @class */ (function () {
229
230
  * @returns true if any data-* exist, otherwise return false
230
231
  */
231
232
  function _isTracked(element, dataTag, aiBlobAttributeTag) {
232
- var attrs = element.attributes;
233
+ var attrs = element[_DYN_ATTRIBUTES /* @min:%2eattributes */];
233
234
  var dataTagFound = false;
234
- for (var i = 0; i < attrs.length; i++) {
235
- var attributeName = attrs[i].name;
235
+ for (var i = 0; i < attrs[_DYN_LENGTH /* @min:%2elength */]; i++) {
236
+ var attributeName = attrs[i][_DYN_NAME /* @min:%2ename */];
236
237
  if (attributeName === aiBlobAttributeTag) {
237
238
  // ignore if the attribute name is equal to aiBlobAttributeTag
238
239
  return false;
239
240
  }
240
- else if (attributeName.indexOf(dataTag) === 0) {
241
+ else if (attributeName[_DYN_INDEX_OF /* @min:%2eindexOf */](dataTag) === 0) {
241
242
  dataTagFound = true;
242
243
  }
243
244
  }
244
245
  return dataTagFound;
245
246
  }
246
247
  function _getHtmlIdAndContentName(element) {
247
- var dataTags = (_self._config || {}).dataTags;
248
- var callback = (_self._config || {}).callback;
248
+ var dataTags = (_self._config || {})[_DYN_DATA_TAGS /* @min:%2edataTags */];
249
+ var callback = (_self[_DYN__CONFIG /* @min:%2e_config */] || {}).callback;
249
250
  var htmlContent = {};
250
251
  if (!element) {
251
252
  return htmlContent;
252
253
  }
253
- if (dataTags.useDefaultContentNameOrId) {
254
- var customizedContentName = callback.contentName ? callback.contentName(element, dataTags.useDefaultContentNameOrId) : "";
255
- var defaultContentName = _getDefaultContentName(element, dataTags.useDefaultContentNameOrId);
254
+ if (dataTags[_DYN_USE_DEFAULT_CONTENT_1 /* @min:%2euseDefaultContentNameOrId */]) {
255
+ var customizedContentName = callback.contentName ? callback.contentName(element, dataTags[_DYN_USE_DEFAULT_CONTENT_1 /* @min:%2euseDefaultContentNameOrId */]) : "";
256
+ var defaultContentName = _getDefaultContentName(element, dataTags[_DYN_USE_DEFAULT_CONTENT_1 /* @min:%2euseDefaultContentNameOrId */]);
256
257
  htmlContent = {
257
258
  id: element.id,
258
- contentName: customizedContentName || defaultContentName || element.getAttribute("alt")
259
+ contentName: customizedContentName || defaultContentName || element[_DYN_GET_ATTRIBUTE /* @min:%2egetAttribute */]("alt")
259
260
  };
260
261
  }
261
262
  return htmlContent;
@@ -283,9 +284,9 @@ var DomContentHandler = /** @class */ (function () {
283
284
  var parentInfo = {};
284
285
  var parentId;
285
286
  // if the user does not set up parent info, walk to the DOM, find the closest parent element (with tags) and populate the info
286
- var closestParentElement = walkUpDomChainWithElementValidation(element.parentElement, _isTracked, dataTagPrefix);
287
+ var closestParentElement = walkUpDomChainWithElementValidation(element[_DYN_PARENT_ELEMENT /* @min:%2eparentElement */], _isTracked, dataTagPrefix);
287
288
  if (closestParentElement) {
288
- var dataAttr = closestParentElement.getAttribute(aiBlobAttributeTag) || element[aiBlobAttributeTag];
289
+ var dataAttr = closestParentElement[_DYN_GET_ATTRIBUTE /* @min:%2egetAttribute */](aiBlobAttributeTag) || element[aiBlobAttributeTag];
289
290
  if (dataAttr) {
290
291
  try {
291
292
  var telemetryObject = JSON.parse(dataAttr);
@@ -298,16 +299,16 @@ var DomContentHandler = /** @class */ (function () {
298
299
  }
299
300
  }
300
301
  else {
301
- parentId = closestParentElement.getAttribute(dataTagPrefix + "id");
302
+ parentId = closestParentElement[_DYN_GET_ATTRIBUTE /* @min:%2egetAttribute */](dataTagPrefix + "id");
302
303
  }
303
304
  }
304
305
  if (parentId) {
305
306
  parentInfo["parentid"] = parentId;
306
307
  }
307
308
  else {
308
- var htmlContent = _getHtmlIdAndContentName(element.parentElement);
309
+ var htmlContent = _getHtmlIdAndContentName(element[_DYN_PARENT_ELEMENT /* @min:%2eparentElement */]);
309
310
  parentInfo["parentid"] = htmlContent.id;
310
- parentInfo["parentname"] = htmlContent.contentName;
311
+ parentInfo["parentname"] = htmlContent[_DYN_CONTENT_NAME /* @min:%2econtentName */];
311
312
  }
312
313
  return parentInfo;
313
314
  }
@@ -315,6 +316,11 @@ var DomContentHandler = /** @class */ (function () {
315
316
  }
316
317
  // Removed Stub for DomContentHandler.prototype.getMetadata.
317
318
  // Removed Stub for DomContentHandler.prototype.getElementContent.
319
+ // This is a workaround for an IE8 bug when using dynamicProto() with classes that don't have any
320
+ // non-dynamic functions or static properties/functions when using uglify-js to minify the resulting code.
321
+ // this will be removed when ES3 support is dropped.
322
+ DomContentHandler.__ieDyn=1;
323
+
318
324
  return DomContentHandler;
319
325
  }());
320
326
  export { DomContentHandler };
@@ -1 +1 @@
1
- {"version":3,"file":"DomContentHandler.js.map","sources":["DomContentHandler.js"],"sourcesContent":["/**\r\n * @copyright Microsoft 2020\r\n */\r\nimport dynamicProto from \"@microsoft/dynamicproto-js\";\r\nimport { removeInvalidElements, walkUpDomChainWithElementValidation, extend, isValueAssigned } from \"../common/Utils\";\r\nimport { getDocument, isNullOrUndefined, hasDocument, _throwInternal } from \"@microsoft/applicationinsights-core-js\";\r\nvar MAX_CONTENTNAME_LENGTH = 200;\r\nvar DomContentHandler = /** @class */ (function () {\r\n /**\r\n * @param config - ClickAnalytics configuration object\r\n * @param traceLogger - Trace logger to log to console.\r\n */\r\n function DomContentHandler(_config, _traceLogger) {\r\n this._config = _config;\r\n this._traceLogger = _traceLogger;\r\n dynamicProto(DomContentHandler, this, function (_self) {\r\n _self.getMetadata = function () {\r\n var dataTags = (_self._config || {}).dataTags;\r\n var metaTags = {};\r\n if (hasDocument) {\r\n metaTags = isValueAssigned(dataTags.metaDataPrefix) ? _getMetaDataFromDOM(dataTags.captureAllMetaDataContent, dataTags.metaDataPrefix, false) :\r\n _getMetaDataFromDOM(dataTags.captureAllMetaDataContent, \"\", false);\r\n }\r\n return metaTags;\r\n };\r\n _self.getElementContent = function (element) {\r\n if (!element) {\r\n return {};\r\n }\r\n var dataTags = (_self._config || {}).dataTags;\r\n var elementContent = {};\r\n var biBlobValue;\r\n var parentDataTagPrefix;\r\n var dataTagPrefix = dataTags.customDataPrefix;\r\n var aiBlobAttributeTag = dataTagPrefix + dataTags.aiBlobAttributeTag;\r\n if (isValueAssigned(dataTags.parentDataTag)) {\r\n parentDataTagPrefix = dataTagPrefix + dataTags.parentDataTag;\r\n }\r\n if (!_isTracked(element, dataTagPrefix, aiBlobAttributeTag)) {\r\n // capture blob from element or hierarchy\r\n biBlobValue = element.getAttribute(aiBlobAttributeTag);\r\n if (biBlobValue) {\r\n try {\r\n elementContent = JSON.parse(biBlobValue);\r\n }\r\n catch (e) {\r\n _throwInternal(_self._traceLogger, 1 /* eLoggingSeverity.CRITICAL */, 101 /* _eInternalMessageId.CannotParseAiBlobValue */, \"Can not parse \" + biBlobValue);\r\n }\r\n }\r\n else {\r\n // traverse up the DOM to find the closest parent with data-* tag defined\r\n //contentElement = walkUpDomChainWithElementValidation(element, _self._isTracked, dataTagPrefix);\r\n elementContent = extend(elementContent, _populateElementContent(element, dataTagPrefix, parentDataTagPrefix, aiBlobAttributeTag));\r\n }\r\n }\r\n else {\r\n elementContent = extend(elementContent, _populateElementContentwithDataTag(element, dataTagPrefix, parentDataTagPrefix, aiBlobAttributeTag));\r\n }\r\n removeInvalidElements(elementContent);\r\n if (parentDataTagPrefix) {\r\n elementContent = extend(elementContent, _getParentDetails(element, elementContent, dataTagPrefix, aiBlobAttributeTag));\r\n }\r\n return elementContent;\r\n };\r\n /**\r\n * Capture current level Element content\r\n */\r\n function _captureElementContentWithDataTag(contentElement, elementContent, dataTagPrefix) {\r\n for (var i = 0, attrib; i < contentElement.attributes.length; i++) {\r\n attrib = contentElement.attributes[i];\r\n if (attrib.name.indexOf(dataTagPrefix) !== 0) {\r\n continue;\r\n }\r\n var attribName = attrib.name.replace(dataTagPrefix, \"\");\r\n elementContent[attribName] = attrib.value;\r\n }\r\n }\r\n /**\r\n * Walk Up the DOM to capture Element content\r\n */\r\n function _walkUpDomChainCaptureData(el, elementContent, dataTagPrefix, parentDataTagPrefix, aiBlobAttributeTag) {\r\n var element = el;\r\n var parentDataTagFound = false;\r\n var elementLevelFlag = false; // Use this flag to capture 'id' only at the incoming html element level.\r\n while (!isNullOrUndefined(element) && !isNullOrUndefined(element.attributes)) {\r\n var attributes = element.attributes;\r\n for (var i = 0; i < attributes.length; i++) {\r\n var attrib = attributes[i];\r\n if (attrib.name.indexOf(dataTagPrefix) !== 0) {\r\n continue;\r\n }\r\n if (attrib.name.indexOf(parentDataTagPrefix) === 0) {\r\n parentDataTagFound = true;\r\n }\r\n // Todo handle blob data\r\n if (attrib.name.indexOf(aiBlobAttributeTag) === 0) {\r\n continue;\r\n }\r\n var attribName = attrib.name.replace(dataTagPrefix, \"\");\r\n if (elementLevelFlag && attribName === \"id\") {\r\n continue; // skip capturing id if not at the first level.\r\n }\r\n if (!isValueAssigned(elementContent[attribName])) {\r\n elementContent[attribName] = attrib.value;\r\n }\r\n }\r\n // break after current level;\r\n if (parentDataTagFound) {\r\n break;\r\n }\r\n elementLevelFlag = true; // after the initial level set this flag to true.\r\n element = element.parentNode;\r\n }\r\n }\r\n /**\r\n * Capture Element content along with Data Tag attributes and values\r\n */\r\n function _populateElementContent(element, dataTagPrefix, parentDataTagPrefix, aiBlobAttributeTag) {\r\n var elementContent = {};\r\n if (!element) {\r\n return elementContent;\r\n }\r\n var htmlContent = _getHtmlIdAndContentName(element);\r\n elementContent = {\r\n id: htmlContent.id || \"\",\r\n contentName: htmlContent.contentName || \"\"\r\n };\r\n if (isValueAssigned(parentDataTagPrefix)) {\r\n _walkUpDomChainCaptureData(element, elementContent, dataTagPrefix, parentDataTagPrefix, aiBlobAttributeTag);\r\n }\r\n // Validate to ensure the minimum required field 'id' or 'contentName' is present.\r\n // The content schema defines id, aN and sN as required fields. However,\r\n // requiring these fields would result in majority of adopter's content from being collected.\r\n // Just throw a warning and continue collection.\r\n if (!elementContent.id && !elementContent.contentName) {\r\n _throwInternal(_traceLogger, 2 /* eLoggingSeverity.WARNING */, 102 /* _eInternalMessageId.InvalidContentBlob */, \"Invalid content blob. Missing required attributes (id, contentName. \" +\r\n \" Content information will still be collected!\");\r\n }\r\n return elementContent;\r\n }\r\n /**\r\n * Capture Element content along with Data Tag attributes and values\r\n */\r\n function _populateElementContentwithDataTag(element, dataTagPrefix, parentDataTagPrefix, aiBlobAttributeTag) {\r\n var dataTags = (_self._config || {}).dataTags;\r\n var elementContent = {};\r\n if (!element) {\r\n return elementContent;\r\n }\r\n var htmlContent = _getHtmlIdAndContentName(element);\r\n if (isValueAssigned(parentDataTagPrefix)) {\r\n _walkUpDomChainCaptureData(element, elementContent, dataTagPrefix, parentDataTagPrefix, aiBlobAttributeTag);\r\n }\r\n else {\r\n _captureElementContentWithDataTag(element, elementContent, dataTagPrefix);\r\n }\r\n if (dataTags.useDefaultContentNameOrId) {\r\n if (!isValueAssigned(elementContent.id)) {\r\n elementContent.id = htmlContent.id || \"\";\r\n }\r\n elementContent.contentName = htmlContent.contentName || \"\";\r\n }\r\n // Validate to ensure the minimum required field 'id' or 'contentName' is present.\r\n // The content schema defines id, aN and sN as required fields. However,\r\n // requiring these fields would result in majority of adopter's content from being collected.\r\n // Just throw a warning and continue collection.\r\n if (!elementContent.id && !elementContent.contentName) {\r\n _throwInternal(_traceLogger, 2 /* eLoggingSeverity.WARNING */, 102 /* _eInternalMessageId.InvalidContentBlob */, \"Invalid content blob. Missing required attributes (id, contentName. \" +\r\n \" Content information will still be collected!\");\r\n }\r\n return elementContent;\r\n }\r\n /**\r\n * Retrieve a specified metadata tag value from the DOM.\r\n * @param captureAllMetaDataContent - Flag to capture all metadata content\r\n * @param prefix - Prefix to search the metatags with.\r\n * @param removePrefix - Specifies if the prefix must be excluded from key names in the returned collection.\r\n * @returns Metadata collection/property bag\r\n */\r\n function _getMetaDataFromDOM(captureAllMetaDataContent, prefix, removePrefix) {\r\n var metaElements;\r\n var metaData = {};\r\n if (hasDocument) {\r\n metaElements = document.querySelectorAll(\"meta\");\r\n for (var i = 0; i < metaElements.length; i++) {\r\n var meta = metaElements[i];\r\n if (meta.name) {\r\n if (captureAllMetaDataContent || meta.name.indexOf(prefix) === 0) {\r\n var name_1 = removePrefix ? meta.name.replace(prefix, \"\") : meta.name;\r\n metaData[name_1] = meta.content;\r\n }\r\n }\r\n }\r\n }\r\n return metaData;\r\n }\r\n /**\r\n * Gets the default content name.\r\n * @param element - An html element\r\n * @param useDefaultContentNameOrId -Flag indicating if an element is market PII.\r\n * @returns Content name\r\n */\r\n function _getDefaultContentName(element, useDefaultContentName) {\r\n if (useDefaultContentName === false || !element.tagName) {\r\n return \"\";\r\n }\r\n var doc = getDocument() || {};\r\n var contentName;\r\n switch (element.tagName) {\r\n case \"A\":\r\n contentName = doc.all ? element.innerText || element.innerHTML : element.text || element.innerHTML;\r\n break;\r\n case \"IMG\":\r\n case \"AREA\":\r\n contentName = element.alt;\r\n break;\r\n default:\r\n contentName = element.value || element.name || element.alt || element.innerText || element.id;\r\n }\r\n return contentName.substring(0, MAX_CONTENTNAME_LENGTH);\r\n }\r\n /**\r\n * Check if the user wants to track the element, which means if the element has any tags with data-* or customDataPrefix\r\n * @param element - An html element\r\n * @returns true if any data-* exist, otherwise return false\r\n */\r\n function _isTracked(element, dataTag, aiBlobAttributeTag) {\r\n var attrs = element.attributes;\r\n var dataTagFound = false;\r\n for (var i = 0; i < attrs.length; i++) {\r\n var attributeName = attrs[i].name;\r\n if (attributeName === aiBlobAttributeTag) {\r\n // ignore if the attribute name is equal to aiBlobAttributeTag\r\n return false;\r\n }\r\n else if (attributeName.indexOf(dataTag) === 0) {\r\n dataTagFound = true;\r\n }\r\n }\r\n return dataTagFound;\r\n }\r\n function _getHtmlIdAndContentName(element) {\r\n var dataTags = (_self._config || {}).dataTags;\r\n var callback = (_self._config || {}).callback;\r\n var htmlContent = {};\r\n if (!element) {\r\n return htmlContent;\r\n }\r\n if (dataTags.useDefaultContentNameOrId) {\r\n var customizedContentName = callback.contentName ? callback.contentName(element, dataTags.useDefaultContentNameOrId) : \"\";\r\n var defaultContentName = _getDefaultContentName(element, dataTags.useDefaultContentNameOrId);\r\n htmlContent = {\r\n id: element.id,\r\n contentName: customizedContentName || defaultContentName || element.getAttribute(\"alt\")\r\n };\r\n }\r\n return htmlContent;\r\n }\r\n /**\r\n * Computes the parentId of a given element.\r\n * @param element - An html element\r\n * @returns An object containing the closest parentId , can be empty if nothing was found\r\n */\r\n function _getParentDetails(element, elementContent, dataTagPrefix, aiBlobAttributeTag) {\r\n var parentId = elementContent[\"parentid\"];\r\n var parentName = elementContent[\"parentname\"];\r\n var parentInfo = {};\r\n if (parentId || parentName || !element) {\r\n return parentInfo;\r\n }\r\n return _populateParentInfo(element, dataTagPrefix, aiBlobAttributeTag);\r\n }\r\n /**\r\n * Check if parent info already set up, if so take and put into content, if not walk up the DOM to find correct info\r\n * @param element - An html element that the user wants to track\r\n * @returns An object containing the parent info, can be empty if nothing was found\r\n */\r\n function _populateParentInfo(element, dataTagPrefix, aiBlobAttributeTag) {\r\n var parentInfo = {};\r\n var parentId;\r\n // if the user does not set up parent info, walk to the DOM, find the closest parent element (with tags) and populate the info\r\n var closestParentElement = walkUpDomChainWithElementValidation(element.parentElement, _isTracked, dataTagPrefix);\r\n if (closestParentElement) {\r\n var dataAttr = closestParentElement.getAttribute(aiBlobAttributeTag) || element[aiBlobAttributeTag];\r\n if (dataAttr) {\r\n try {\r\n var telemetryObject = JSON.parse(dataAttr);\r\n }\r\n catch (e) {\r\n _throwInternal(_traceLogger, 1 /* eLoggingSeverity.CRITICAL */, 101 /* _eInternalMessageId.CannotParseAiBlobValue */, \"Can not parse \" + dataAttr);\r\n }\r\n if (telemetryObject) {\r\n parentId = telemetryObject.id;\r\n }\r\n }\r\n else {\r\n parentId = closestParentElement.getAttribute(dataTagPrefix + \"id\");\r\n }\r\n }\r\n if (parentId) {\r\n parentInfo[\"parentid\"] = parentId;\r\n }\r\n else {\r\n var htmlContent = _getHtmlIdAndContentName(element.parentElement);\r\n parentInfo[\"parentid\"] = htmlContent.id;\r\n parentInfo[\"parentname\"] = htmlContent.contentName;\r\n }\r\n return parentInfo;\r\n }\r\n });\r\n }\r\n /**\r\n * Collect metatags from DOM.\r\n * Collect data from meta tags.\r\n * @returns {object} - Metatags collection/property bag\r\n */\r\n DomContentHandler.prototype.getMetadata = function () {\r\n // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging\r\n return null;\r\n };\r\n /**\r\n * Collect data-* attributes for the given element.\r\n * All attributes with data-* prefix or user provided customDataPrefix are collected.'data-*' prefix is removed from the key name.\r\n * @param element - The element from which attributes need to be collected.\r\n * @returns String representation of the Json array of element attributes\r\n */\r\n DomContentHandler.prototype.getElementContent = function (element) {\r\n // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging\r\n return null;\r\n };\r\n return DomContentHandler;\r\n}());\r\nexport { DomContentHandler };\r\n//# sourceMappingURL=DomContentHandler.js.map"],"names":[],"mappings":";;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;kEAkBM;AACN;AACA;AACA;AACA"}
1
+ {"version":3,"file":"DomContentHandler.js.map","sources":["DomContentHandler.js"],"sourcesContent":["/**\r\n* @copyright Microsoft 2020\r\n*/\r\nimport dynamicProto from \"@microsoft/dynamicproto-js\";\r\nimport { _throwInternal, getDocument, hasDocument, isNullOrUndefined, objExtend } from \"@microsoft/applicationinsights-core-js\";\r\nimport { _DYN_AI_BLOB_ATTRIBUTE_TA2, _DYN_ATTRIBUTES, _DYN_CAPTURE_ALL_META_DAT3, _DYN_CONTENT, _DYN_CONTENT_NAME, _DYN_CUSTOM_DATA_PREFIX, _DYN_DATA_TAGS, _DYN_GET_ATTRIBUTE, _DYN_GET_ELEMENT_CONTENT, _DYN_INDEX_OF, _DYN_LENGTH, _DYN_NAME, _DYN_PARENT_DATA_TAG, _DYN_PARENT_ELEMENT, _DYN_PARENT_NODE, _DYN_TAG_NAME, _DYN_USE_DEFAULT_CONTENT_1, _DYN__CONFIG, _DYN__TRACE_LOGGER } from \"../__DynamicConstants\";\r\nimport { isValueAssigned, removeInvalidElements, walkUpDomChainWithElementValidation } from \"../common/Utils\";\r\nvar MAX_CONTENTNAME_LENGTH = 200;\r\nvar DomContentHandler = /** @class */ (function () {\r\n /**\r\n * @param config - ClickAnalytics configuration object\r\n * @param traceLogger - Trace logger to log to console.\r\n */\r\n function DomContentHandler(_config, _traceLogger) {\r\n this._config = _config;\r\n this._traceLogger = _traceLogger;\r\n dynamicProto(DomContentHandler, this, function (_self) {\r\n _self.getMetadata = function () {\r\n var dataTags = (_self._config || {})[_DYN_DATA_TAGS /* @min:%2edataTags */];\r\n var metaTags = {};\r\n if (hasDocument) {\r\n metaTags = isValueAssigned(dataTags.metaDataPrefix) ? _getMetaDataFromDOM(dataTags[_DYN_CAPTURE_ALL_META_DAT3 /* @min:%2ecaptureAllMetaDataContent */], dataTags.metaDataPrefix, false) :\r\n _getMetaDataFromDOM(dataTags[_DYN_CAPTURE_ALL_META_DAT3 /* @min:%2ecaptureAllMetaDataContent */], \"\", false);\r\n }\r\n return metaTags;\r\n };\r\n _self[_DYN_GET_ELEMENT_CONTENT /* @min:%2egetElementContent */] = function (element) {\r\n if (!element) {\r\n return {};\r\n }\r\n var dataTags = (_self._config || {})[_DYN_DATA_TAGS /* @min:%2edataTags */];\r\n var elementContent = {};\r\n var biBlobValue;\r\n var parentDataTagPrefix;\r\n var dataTagPrefix = dataTags[_DYN_CUSTOM_DATA_PREFIX /* @min:%2ecustomDataPrefix */];\r\n var aiBlobAttributeTag = dataTagPrefix + dataTags[_DYN_AI_BLOB_ATTRIBUTE_TA2 /* @min:%2eaiBlobAttributeTag */];\r\n if (isValueAssigned(dataTags[_DYN_PARENT_DATA_TAG /* @min:%2eparentDataTag */])) {\r\n parentDataTagPrefix = dataTagPrefix + dataTags[_DYN_PARENT_DATA_TAG /* @min:%2eparentDataTag */];\r\n }\r\n if (!_isTracked(element, dataTagPrefix, aiBlobAttributeTag)) {\r\n // capture blob from element or hierarchy\r\n biBlobValue = element[_DYN_GET_ATTRIBUTE /* @min:%2egetAttribute */](aiBlobAttributeTag);\r\n if (biBlobValue) {\r\n try {\r\n elementContent = JSON.parse(biBlobValue);\r\n }\r\n catch (e) {\r\n _throwInternal(_self[_DYN__TRACE_LOGGER /* @min:%2e_traceLogger */], 1 /* eLoggingSeverity.CRITICAL */, 101 /* _eInternalMessageId.CannotParseAiBlobValue */, \"Can not parse \" + biBlobValue);\r\n }\r\n }\r\n else {\r\n // traverse up the DOM to find the closest parent with data-* tag defined\r\n //contentElement = walkUpDomChainWithElementValidation(element, _self._isTracked, dataTagPrefix);\r\n elementContent = objExtend(elementContent, _populateElementContent(element, dataTagPrefix, parentDataTagPrefix, aiBlobAttributeTag));\r\n }\r\n }\r\n else {\r\n elementContent = objExtend(elementContent, _populateElementContentwithDataTag(element, dataTagPrefix, parentDataTagPrefix, aiBlobAttributeTag));\r\n }\r\n removeInvalidElements(elementContent);\r\n if (parentDataTagPrefix) {\r\n elementContent = objExtend(elementContent, _getParentDetails(element, elementContent, dataTagPrefix, aiBlobAttributeTag));\r\n }\r\n return elementContent;\r\n };\r\n /**\r\n * Capture current level Element content\r\n */\r\n function _captureElementContentWithDataTag(contentElement, elementContent, dataTagPrefix) {\r\n for (var i = 0, attrib; i < contentElement.attributes[_DYN_LENGTH /* @min:%2elength */]; i++) {\r\n attrib = contentElement[_DYN_ATTRIBUTES /* @min:%2eattributes */][i];\r\n if (attrib.name[_DYN_INDEX_OF /* @min:%2eindexOf */](dataTagPrefix) !== 0) {\r\n continue;\r\n }\r\n var attribName = attrib[_DYN_NAME /* @min:%2ename */].replace(dataTagPrefix, \"\");\r\n elementContent[attribName] = attrib.value;\r\n }\r\n }\r\n /**\r\n * Walk Up the DOM to capture Element content\r\n */\r\n function _walkUpDomChainCaptureData(el, elementContent, dataTagPrefix, parentDataTagPrefix, aiBlobAttributeTag) {\r\n var element = el;\r\n var parentDataTagFound = false;\r\n var elementLevelFlag = false; // Use this flag to capture 'id' only at the incoming html element level.\r\n while (!isNullOrUndefined(element) && !isNullOrUndefined(element[_DYN_ATTRIBUTES /* @min:%2eattributes */])) {\r\n var attributes = element[_DYN_ATTRIBUTES /* @min:%2eattributes */];\r\n for (var i = 0; i < attributes[_DYN_LENGTH /* @min:%2elength */]; i++) {\r\n var attrib = attributes[i];\r\n if (attrib.name[_DYN_INDEX_OF /* @min:%2eindexOf */](dataTagPrefix) !== 0) {\r\n continue;\r\n }\r\n if (attrib.name[_DYN_INDEX_OF /* @min:%2eindexOf */](parentDataTagPrefix) === 0) {\r\n parentDataTagFound = true;\r\n }\r\n // Todo handle blob data\r\n if (attrib.name[_DYN_INDEX_OF /* @min:%2eindexOf */](aiBlobAttributeTag) === 0) {\r\n continue;\r\n }\r\n var attribName = attrib[_DYN_NAME /* @min:%2ename */].replace(dataTagPrefix, \"\");\r\n if (elementLevelFlag && attribName === \"id\") {\r\n continue; // skip capturing id if not at the first level.\r\n }\r\n if (!isValueAssigned(elementContent[attribName])) {\r\n elementContent[attribName] = attrib.value;\r\n }\r\n }\r\n // break after current level;\r\n if (parentDataTagFound) {\r\n break;\r\n }\r\n elementLevelFlag = true; // after the initial level set this flag to true.\r\n element = element[_DYN_PARENT_NODE /* @min:%2eparentNode */];\r\n }\r\n }\r\n /**\r\n * Capture Element content along with Data Tag attributes and values\r\n */\r\n function _populateElementContent(element, dataTagPrefix, parentDataTagPrefix, aiBlobAttributeTag) {\r\n var elementContent = {};\r\n if (!element) {\r\n return elementContent;\r\n }\r\n var htmlContent = _getHtmlIdAndContentName(element);\r\n elementContent = {\r\n id: htmlContent.id || \"\",\r\n contentName: htmlContent[_DYN_CONTENT_NAME /* @min:%2econtentName */] || \"\"\r\n };\r\n if (isValueAssigned(parentDataTagPrefix)) {\r\n _walkUpDomChainCaptureData(element, elementContent, dataTagPrefix, parentDataTagPrefix, aiBlobAttributeTag);\r\n }\r\n // Validate to ensure the minimum required field 'id' or 'contentName' is present.\r\n // The content schema defines id, aN and sN as required fields. However,\r\n // requiring these fields would result in majority of adopter's content from being collected.\r\n // Just throw a warning and continue collection.\r\n if (!elementContent.id && !elementContent[_DYN_CONTENT_NAME /* @min:%2econtentName */]) {\r\n _throwInternal(_traceLogger, 2 /* eLoggingSeverity.WARNING */, 102 /* _eInternalMessageId.InvalidContentBlob */, \"Invalid content blob. Missing required attributes (id, contentName. \" +\r\n \" Content information will still be collected!\");\r\n }\r\n return elementContent;\r\n }\r\n /**\r\n * Capture Element content along with Data Tag attributes and values\r\n */\r\n function _populateElementContentwithDataTag(element, dataTagPrefix, parentDataTagPrefix, aiBlobAttributeTag) {\r\n var dataTags = (_self._config || {})[_DYN_DATA_TAGS /* @min:%2edataTags */];\r\n var elementContent = {};\r\n if (!element) {\r\n return elementContent;\r\n }\r\n var htmlContent = _getHtmlIdAndContentName(element);\r\n if (isValueAssigned(parentDataTagPrefix)) {\r\n _walkUpDomChainCaptureData(element, elementContent, dataTagPrefix, parentDataTagPrefix, aiBlobAttributeTag);\r\n }\r\n else {\r\n _captureElementContentWithDataTag(element, elementContent, dataTagPrefix);\r\n }\r\n if (dataTags[_DYN_USE_DEFAULT_CONTENT_1 /* @min:%2euseDefaultContentNameOrId */]) {\r\n if (!isValueAssigned(elementContent.id)) {\r\n elementContent.id = htmlContent.id || \"\";\r\n }\r\n elementContent[_DYN_CONTENT_NAME /* @min:%2econtentName */] = htmlContent[_DYN_CONTENT_NAME /* @min:%2econtentName */] || \"\";\r\n }\r\n // Validate to ensure the minimum required field 'id' or 'contentName' is present.\r\n // The content schema defines id, aN and sN as required fields. However,\r\n // requiring these fields would result in majority of adopter's content from being collected.\r\n // Just throw a warning and continue collection.\r\n if (!elementContent.id && !elementContent[_DYN_CONTENT_NAME /* @min:%2econtentName */]) {\r\n _throwInternal(_traceLogger, 2 /* eLoggingSeverity.WARNING */, 102 /* _eInternalMessageId.InvalidContentBlob */, \"Invalid content blob. Missing required attributes (id, contentName. \" +\r\n \" Content information will still be collected!\");\r\n }\r\n return elementContent;\r\n }\r\n /**\r\n * Retrieve a specified metadata tag value from the DOM.\r\n * @param captureAllMetaDataContent - Flag to capture all metadata content\r\n * @param prefix - Prefix to search the metatags with.\r\n * @param removePrefix - Specifies if the prefix must be excluded from key names in the returned collection.\r\n * @returns Metadata collection/property bag\r\n */\r\n function _getMetaDataFromDOM(captureAllMetaDataContent, prefix, removePrefix) {\r\n var metaElements;\r\n var metaData = {};\r\n if (hasDocument) {\r\n metaElements = document.querySelectorAll(\"meta\");\r\n for (var i = 0; i < metaElements[_DYN_LENGTH /* @min:%2elength */]; i++) {\r\n var meta = metaElements[i];\r\n if (meta[_DYN_NAME /* @min:%2ename */]) {\r\n if (captureAllMetaDataContent || meta.name[_DYN_INDEX_OF /* @min:%2eindexOf */](prefix) === 0) {\r\n var name_1 = removePrefix ? meta[_DYN_NAME /* @min:%2ename */].replace(prefix, \"\") : meta[_DYN_NAME /* @min:%2ename */];\r\n metaData[name_1] = meta[_DYN_CONTENT /* @min:%2econtent */];\r\n }\r\n }\r\n }\r\n }\r\n return metaData;\r\n }\r\n /**\r\n * Gets the default content name.\r\n * @param element - An html element\r\n * @param useDefaultContentNameOrId -Flag indicating if an element is market PII.\r\n * @returns Content name\r\n */\r\n function _getDefaultContentName(element, useDefaultContentName) {\r\n if (useDefaultContentName === false || !element[_DYN_TAG_NAME /* @min:%2etagName */]) {\r\n return \"\";\r\n }\r\n var doc = getDocument() || {};\r\n var contentName;\r\n switch (element[_DYN_TAG_NAME /* @min:%2etagName */]) {\r\n case \"A\":\r\n contentName = doc.all ? element.innerText || element.innerHTML : element.text || element.innerHTML;\r\n break;\r\n case \"IMG\":\r\n case \"AREA\":\r\n contentName = element.alt;\r\n break;\r\n default:\r\n contentName = element.value || element[_DYN_NAME /* @min:%2ename */] || element.alt || element.innerText || element.id;\r\n }\r\n return contentName.substring(0, MAX_CONTENTNAME_LENGTH);\r\n }\r\n /**\r\n * Check if the user wants to track the element, which means if the element has any tags with data-* or customDataPrefix\r\n * @param element - An html element\r\n * @returns true if any data-* exist, otherwise return false\r\n */\r\n function _isTracked(element, dataTag, aiBlobAttributeTag) {\r\n var attrs = element[_DYN_ATTRIBUTES /* @min:%2eattributes */];\r\n var dataTagFound = false;\r\n for (var i = 0; i < attrs[_DYN_LENGTH /* @min:%2elength */]; i++) {\r\n var attributeName = attrs[i][_DYN_NAME /* @min:%2ename */];\r\n if (attributeName === aiBlobAttributeTag) {\r\n // ignore if the attribute name is equal to aiBlobAttributeTag\r\n return false;\r\n }\r\n else if (attributeName[_DYN_INDEX_OF /* @min:%2eindexOf */](dataTag) === 0) {\r\n dataTagFound = true;\r\n }\r\n }\r\n return dataTagFound;\r\n }\r\n function _getHtmlIdAndContentName(element) {\r\n var dataTags = (_self._config || {})[_DYN_DATA_TAGS /* @min:%2edataTags */];\r\n var callback = (_self[_DYN__CONFIG /* @min:%2e_config */] || {}).callback;\r\n var htmlContent = {};\r\n if (!element) {\r\n return htmlContent;\r\n }\r\n if (dataTags[_DYN_USE_DEFAULT_CONTENT_1 /* @min:%2euseDefaultContentNameOrId */]) {\r\n var customizedContentName = callback.contentName ? callback.contentName(element, dataTags[_DYN_USE_DEFAULT_CONTENT_1 /* @min:%2euseDefaultContentNameOrId */]) : \"\";\r\n var defaultContentName = _getDefaultContentName(element, dataTags[_DYN_USE_DEFAULT_CONTENT_1 /* @min:%2euseDefaultContentNameOrId */]);\r\n htmlContent = {\r\n id: element.id,\r\n contentName: customizedContentName || defaultContentName || element[_DYN_GET_ATTRIBUTE /* @min:%2egetAttribute */](\"alt\")\r\n };\r\n }\r\n return htmlContent;\r\n }\r\n /**\r\n * Computes the parentId of a given element.\r\n * @param element - An html element\r\n * @returns An object containing the closest parentId , can be empty if nothing was found\r\n */\r\n function _getParentDetails(element, elementContent, dataTagPrefix, aiBlobAttributeTag) {\r\n var parentId = elementContent[\"parentid\"];\r\n var parentName = elementContent[\"parentname\"];\r\n var parentInfo = {};\r\n if (parentId || parentName || !element) {\r\n return parentInfo;\r\n }\r\n return _populateParentInfo(element, dataTagPrefix, aiBlobAttributeTag);\r\n }\r\n /**\r\n * Check if parent info already set up, if so take and put into content, if not walk up the DOM to find correct info\r\n * @param element - An html element that the user wants to track\r\n * @returns An object containing the parent info, can be empty if nothing was found\r\n */\r\n function _populateParentInfo(element, dataTagPrefix, aiBlobAttributeTag) {\r\n var parentInfo = {};\r\n var parentId;\r\n // if the user does not set up parent info, walk to the DOM, find the closest parent element (with tags) and populate the info\r\n var closestParentElement = walkUpDomChainWithElementValidation(element[_DYN_PARENT_ELEMENT /* @min:%2eparentElement */], _isTracked, dataTagPrefix);\r\n if (closestParentElement) {\r\n var dataAttr = closestParentElement[_DYN_GET_ATTRIBUTE /* @min:%2egetAttribute */](aiBlobAttributeTag) || element[aiBlobAttributeTag];\r\n if (dataAttr) {\r\n try {\r\n var telemetryObject = JSON.parse(dataAttr);\r\n }\r\n catch (e) {\r\n _throwInternal(_traceLogger, 1 /* eLoggingSeverity.CRITICAL */, 101 /* _eInternalMessageId.CannotParseAiBlobValue */, \"Can not parse \" + dataAttr);\r\n }\r\n if (telemetryObject) {\r\n parentId = telemetryObject.id;\r\n }\r\n }\r\n else {\r\n parentId = closestParentElement[_DYN_GET_ATTRIBUTE /* @min:%2egetAttribute */](dataTagPrefix + \"id\");\r\n }\r\n }\r\n if (parentId) {\r\n parentInfo[\"parentid\"] = parentId;\r\n }\r\n else {\r\n var htmlContent = _getHtmlIdAndContentName(element[_DYN_PARENT_ELEMENT /* @min:%2eparentElement */]);\r\n parentInfo[\"parentid\"] = htmlContent.id;\r\n parentInfo[\"parentname\"] = htmlContent[_DYN_CONTENT_NAME /* @min:%2econtentName */];\r\n }\r\n return parentInfo;\r\n }\r\n });\r\n }\r\n /**\r\n * Collect metatags from DOM.\r\n * Collect data from meta tags.\r\n * @returns {object} - Metatags collection/property bag\r\n */\r\n DomContentHandler.prototype.getMetadata = function () {\r\n // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging\r\n return null;\r\n };\r\n /**\r\n * Collect data-* attributes for the given element.\r\n * All attributes with data-* prefix or user provided customDataPrefix are collected.'data-*' prefix is removed from the key name.\r\n * @param element - The element from which attributes need to be collected.\r\n * @returns String representation of the Json array of element attributes\r\n */\r\n DomContentHandler.prototype.getElementContent = function (element) {\r\n // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging\r\n return null;\r\n };\r\n return DomContentHandler;\r\n}());\r\nexport { DomContentHandler };\r\n//# sourceMappingURL=DomContentHandler.js.map"],"names":[],"mappings":";;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;kEAkBM,CAAC;;;;;;6BACsB;AAC7B;AACA;AACA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@microsoft/applicationinsights-clickanalytics-js",
3
- "version": "2.8.5-nightly.2206-02",
3
+ "version": "2.8.5-nightly.2206-06",
4
4
  "description": "Microsoft Application Insights Click Analytics extension",
5
5
  "homepage": "https://github.com/microsoft/ApplicationInsights-JS#readme",
6
6
  "author": "Microsoft Application Insights Team",
@@ -14,9 +14,12 @@
14
14
  "build:browser": "rollup -c",
15
15
  "rebuild": "npm run build",
16
16
  "test": "grunt clickanalyticstests",
17
+ "mintest": "grunt clickanalytics-mintests",
17
18
  "lint": "tslint -p tsconfig.json",
18
19
  "dtsgen": "api-extractor run --local && node ../../scripts/dtsgen.js 'Microsoft.ApplicationInsights'",
19
- "sri": "node ../../tools/subResourceIntegrity/generateIntegrityFile.js"
20
+ "sri": "node ../../tools/subResourceIntegrity/generateIntegrityFile.js",
21
+ "ai-min": "grunt clickanalytics-min",
22
+ "ai-restore": "grunt clickanalytics-restore"
20
23
  },
21
24
  "devDependencies": {
22
25
  "@microsoft/ai-test-framework": "0.0.1",
@@ -44,9 +47,9 @@
44
47
  "dependencies": {
45
48
  "@microsoft/dynamicproto-js": "^1.1.6",
46
49
  "@microsoft/applicationinsights-shims": "2.0.1",
47
- "@microsoft/applicationinsights-core-js": "2.8.5-nightly.2206-02",
48
- "@microsoft/applicationinsights-common": "2.8.5-nightly.2206-02",
49
- "@microsoft/applicationinsights-properties-js": "2.8.5-nightly.2206-02"
50
+ "@microsoft/applicationinsights-core-js": "2.8.5-nightly.2206-06",
51
+ "@microsoft/applicationinsights-common": "2.8.5-nightly.2206-06",
52
+ "@microsoft/applicationinsights-properties-js": "2.8.5-nightly.2206-06"
50
53
  },
51
54
  "repository": {
52
55
  "type": "git",
@@ -1,34 +1,27 @@
1
- /**
2
- * @copyright Microsoft 2020
3
- */
4
-
5
- import dynamicProto from "@microsoft/dynamicproto-js";
6
- import {
7
- IPlugin, IConfiguration, IAppInsightsCore,
8
- BaseTelemetryPlugin, isNullOrUndefined, ITelemetryItem,
9
- IProcessTelemetryContext, ITelemetryPluginChain,
10
- _eInternalMessageId, ICustomProperties,
11
- eLoggingSeverity, arrForEach, dumpObj, getExceptionName, throwError, _throwInternal, IProcessTelemetryUnloadContext, ITelemetryUnloadState, unloadComponents
12
- } from "@microsoft/applicationinsights-core-js";
13
- import { IConfig, IPropertiesPlugin, PropertiesPluginIdentifier } from "@microsoft/applicationinsights-common";
14
- import {
15
- IClickAnalyticsConfiguration, IContentHandler,
16
- IAutoCaptureHandler, IPageActionTelemetry
17
- } from "./Interfaces/Datamodel";
18
- import {
19
- mergeConfig, BehaviorMapValidator,
20
- BehaviorValueValidator, BehaviorEnumValidator
21
- } from "./common/Utils";
22
- import { PageAction } from "./events/PageAction";
23
- import { AutoCaptureHandler } from "./handlers/AutoCaptureHandler";
24
- import { DomContentHandler } from "./handlers/DomContentHandler";
25
- import { PropertiesPlugin } from "@microsoft/applicationinsights-properties-js";
1
+ /**
2
+ * @copyright Microsoft 2020
3
+ */
4
+
5
+ import dynamicProto from "@microsoft/dynamicproto-js";
6
+ import { IConfig, IPropertiesPlugin, PropertiesPluginIdentifier } from "@microsoft/applicationinsights-common";
7
+ import {
8
+ BaseTelemetryPlugin, IAppInsightsCore, IConfiguration, ICustomProperties, IPlugin, IProcessTelemetryContext,
9
+ IProcessTelemetryUnloadContext, ITelemetryItem, ITelemetryPluginChain, ITelemetryUnloadState, _eInternalMessageId, _throwInternal,
10
+ arrForEach, dumpObj, eLoggingSeverity, getExceptionName, isNullOrUndefined, throwError, unloadComponents
11
+ } from "@microsoft/applicationinsights-core-js";
12
+ import { PropertiesPlugin } from "@microsoft/applicationinsights-properties-js";
13
+ import { IAutoCaptureHandler, IClickAnalyticsConfiguration, IContentHandler, IPageActionTelemetry } from "./Interfaces/Datamodel";
14
+ import { BehaviorEnumValidator, BehaviorMapValidator, BehaviorValueValidator, mergeConfig } from "./common/Utils";
15
+ import { PageAction } from "./events/PageAction";
16
+ import { AutoCaptureHandler } from "./handlers/AutoCaptureHandler";
17
+ import { DomContentHandler } from "./handlers/DomContentHandler";
18
+
26
19
  export { BehaviorMapValidator, BehaviorValueValidator, BehaviorEnumValidator }
27
20
 
28
21
  export class ClickAnalyticsPlugin extends BaseTelemetryPlugin {
29
22
  public identifier: string = "ClickAnalyticsPlugin";
30
23
  public priority: number = 181;
31
- public static Version = "2.8.5-nightly.2206-02";
24
+ public static Version = "#version#";
32
25
 
33
26
  constructor() {
34
27
  super();
@@ -132,4 +125,4 @@ export class ClickAnalyticsPlugin extends BaseTelemetryPlugin {
132
125
  public trackPageAction(pageAction?: IPageActionTelemetry, customProperties?: ICustomProperties) {
133
126
  // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging
134
127
  }
135
- }
128
+ }
@@ -1,14 +1,11 @@
1
- /**
2
- * @copyright Microsoft 2020
3
- */
4
-
5
- import {
6
- getLocation, getDocument, getWindow, hasDocument, isFunction
7
- } from "@microsoft/applicationinsights-core-js";
8
- import { findClosestAnchor, isValueAssigned } from "./common/Utils";
9
- import { IClickAnalyticsConfiguration, IOverrideValues } from "./Interfaces/Datamodel";
10
-
11
-
1
+ /**
2
+ * @copyright Microsoft 2020
3
+ */
4
+
5
+ import { getDocument, getLocation, getWindow, hasDocument, isFunction } from "@microsoft/applicationinsights-core-js";
6
+ import { IClickAnalyticsConfiguration, IOverrideValues } from "./Interfaces/Datamodel";
7
+ import { findClosestAnchor, isValueAssigned } from "./common/Utils";
8
+
12
9
  var clickCaptureInputTypes = { BUTTON: true, CHECKBOX: true, RADIO: true, RESET: true, SUBMIT: true };
13
10
 
14
11
 
@@ -149,4 +146,4 @@ export function getUri(config: IClickAnalyticsConfiguration, location: any): str
149
146
  return config.coreData.requestUri;
150
147
  }
151
148
  return sanitizeUrl(config, location);
152
- }
149
+ }
@@ -289,4 +289,4 @@ export interface IPageActionTelemetry extends IEventTelemetry {
289
289
  * Content Id (Parent Id) of the parent in which the content was located;
290
290
  */
291
291
  parentId?: string;
292
- }
292
+ }