@microsoft/applicationinsights-clickanalytics-js 2.8.0-nightly.2202-06 → 2.8.0-nightly.2204-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 (80) hide show
  1. package/browser/ai.clck.2.8.0-nightly.2204-06.cjs.js +2890 -0
  2. package/browser/ai.clck.2.8.0-nightly.2204-06.cjs.js.map +1 -0
  3. package/browser/ai.clck.2.8.0-nightly.2204-06.cjs.min.js +6 -0
  4. package/browser/ai.clck.2.8.0-nightly.2204-06.cjs.min.js.map +1 -0
  5. package/browser/ai.clck.2.8.0-nightly.2204-06.gbl.js +2894 -0
  6. package/browser/ai.clck.2.8.0-nightly.2204-06.gbl.js.map +1 -0
  7. package/browser/ai.clck.2.8.0-nightly.2204-06.gbl.min.js +6 -0
  8. package/browser/ai.clck.2.8.0-nightly.2204-06.gbl.min.js.map +1 -0
  9. package/browser/ai.clck.2.8.0-nightly.2204-06.integrity.json +66 -0
  10. package/browser/ai.clck.2.8.0-nightly.2204-06.js +2896 -0
  11. package/browser/ai.clck.2.8.0-nightly.2204-06.js.map +1 -0
  12. package/browser/ai.clck.2.8.0-nightly.2204-06.min.js +6 -0
  13. package/browser/ai.clck.2.8.0-nightly.2204-06.min.js.map +1 -0
  14. package/browser/ai.clck.2.cjs.js +1689 -805
  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 +1689 -805
  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 +1689 -805
  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 +38 -13
  27. package/dist/applicationinsights-clickanalytics-js.api.md +1 -0
  28. package/dist/applicationinsights-clickanalytics-js.d.ts +2 -5
  29. package/dist/applicationinsights-clickanalytics-js.js +1689 -805
  30. package/dist/applicationinsights-clickanalytics-js.js.map +1 -1
  31. package/dist/applicationinsights-clickanalytics-js.min.js +2 -2
  32. package/dist/applicationinsights-clickanalytics-js.min.js.map +1 -1
  33. package/dist/applicationinsights-clickanalytics-js.rollup.d.ts +2 -5
  34. package/dist-esm/Behaviours.js +1 -1
  35. package/dist-esm/ClickAnalyticsPlugin.js +75 -51
  36. package/dist-esm/ClickAnalyticsPlugin.js.map +1 -1
  37. package/dist-esm/DataCollector.js +4 -2
  38. package/dist-esm/DataCollector.js.map +1 -1
  39. package/dist-esm/Enums.js +1 -1
  40. package/dist-esm/Interfaces/Datamodel.js +1 -1
  41. package/dist-esm/applicationinsights-clickanalytics-js.js +1 -1
  42. package/dist-esm/common/Utils.js +1 -1
  43. package/dist-esm/events/PageAction.js +130 -128
  44. package/dist-esm/events/PageAction.js.map +1 -1
  45. package/dist-esm/events/WebEvent.js +109 -94
  46. package/dist-esm/events/WebEvent.js.map +1 -1
  47. package/dist-esm/handlers/AutoCaptureHandler.js +85 -83
  48. package/dist-esm/handlers/AutoCaptureHandler.js.map +1 -1
  49. package/dist-esm/handlers/DomContentHandler.js +281 -278
  50. package/dist-esm/handlers/DomContentHandler.js.map +1 -1
  51. package/package.json +5 -5
  52. package/src/ClickAnalyticsPlugin.ts +94 -49
  53. package/src/DataCollector.ts +24 -22
  54. package/src/Interfaces/Datamodel.ts +20 -21
  55. package/src/common/Utils.ts +8 -8
  56. package/src/events/PageAction.ts +166 -132
  57. package/src/events/WebEvent.ts +147 -78
  58. package/src/handlers/AutoCaptureHandler.ts +92 -79
  59. package/src/handlers/DomContentHandler.ts +337 -304
  60. package/types/ClickAnalyticsPlugin.d.ts +1 -4
  61. package/types/Interfaces/Datamodel.d.ts +3 -2
  62. package/types/common/Utils.d.ts +79 -79
  63. package/types/events/PageAction.d.ts +6 -6
  64. package/types/events/WebEvent.d.ts +17 -17
  65. package/types/handlers/AutoCaptureHandler.d.ts +2 -10
  66. package/types/handlers/DomContentHandler.d.ts +3 -50
  67. package/types/tsdoc-metadata.json +1 -1
  68. package/browser/ai.clck.2.8.0-nightly.2202-06.cjs.js +0 -2006
  69. package/browser/ai.clck.2.8.0-nightly.2202-06.cjs.js.map +0 -1
  70. package/browser/ai.clck.2.8.0-nightly.2202-06.cjs.min.js +0 -6
  71. package/browser/ai.clck.2.8.0-nightly.2202-06.cjs.min.js.map +0 -1
  72. package/browser/ai.clck.2.8.0-nightly.2202-06.gbl.js +0 -2010
  73. package/browser/ai.clck.2.8.0-nightly.2202-06.gbl.js.map +0 -1
  74. package/browser/ai.clck.2.8.0-nightly.2202-06.gbl.min.js +0 -6
  75. package/browser/ai.clck.2.8.0-nightly.2202-06.gbl.min.js.map +0 -1
  76. package/browser/ai.clck.2.8.0-nightly.2202-06.integrity.json +0 -66
  77. package/browser/ai.clck.2.8.0-nightly.2202-06.js +0 -2012
  78. package/browser/ai.clck.2.8.0-nightly.2202-06.js.map +0 -1
  79. package/browser/ai.clck.2.8.0-nightly.2202-06.min.js +0 -6
  80. package/browser/ai.clck.2.8.0-nightly.2202-06.min.js.map +0 -1
@@ -2,7 +2,11 @@
2
2
  * @copyright Microsoft 2020
3
3
  */
4
4
 
5
- import { IDiagnosticLogger, _InternalMessageId, getWindow, getDocument, isNullOrUndefined, attachEvent } from "@microsoft/applicationinsights-core-js";
5
+ import dynamicProto from "@microsoft/dynamicproto-js";
6
+ import {
7
+ IDiagnosticLogger, getWindow, getDocument, isNullOrUndefined, IProcessTelemetryUnloadContext, ITelemetryUnloadState,
8
+ mergeEvtNamespace, createUniqueNamespace, eventOn, eventOff
9
+ } from "@microsoft/applicationinsights-core-js";
6
10
  import { IAutoCaptureHandler, IPageActionOverrideValues, IClickAnalyticsConfiguration } from "../Interfaces/Datamodel"
7
11
  import { isRightClick, isLeftClick, isKeyboardEnter, isKeyboardSpace, isMiddleClick, isElementDnt } from "../common/Utils";
8
12
  import { ActionType } from "../Enums";
@@ -12,97 +16,106 @@ import { PageAction } from "../events/PageAction";
12
16
  const clickCaptureInputTypes = { BUTTON: true, CHECKBOX: true, RADIO: true, RESET: true, SUBMIT: true };
13
17
 
14
18
  export class AutoCaptureHandler implements IAutoCaptureHandler {
15
-
19
+
16
20
  /**
17
21
  * @param analyticsPlugin - WebAnalytics plugin
18
22
  * @param traceLogger - Trace logger to log to console.
19
23
  */
20
- constructor(protected _analyticsPlugin: ClickAnalyticsPlugin, protected _config: IClickAnalyticsConfiguration, protected _pageAction: PageAction,
21
- protected _traceLogger: IDiagnosticLogger) {
22
-
23
- }
24
- // handle automatic event firing on user click
25
- public click() {
26
- let win = getWindow();
27
- let doc = getDocument();
28
- if (win) {
29
- // IE9 onwards addEventListener is available, 'click' event captures mouse click. mousedown works on other browsers
30
- const event = (navigator.appVersion.indexOf("MSIE") !== -1) ? "click" : "mousedown";
31
- attachEvent(win, event , (evt:any) => { this._processClick(evt); });
32
- attachEvent(win, "keyup" , (evt:any) => { this._processClick(evt); });
33
- } else if (doc) {
34
- // IE8 and below doesn't have addEventListener so it will use attachEvent
35
- // attaching to window does not work in IE8
36
- attachEvent(doc, "click" , (evt:any) => { this._processClick(evt); });
37
- attachEvent(doc, "keyup" , (evt:any) => { this._processClick(evt); });
38
- }
39
- }
24
+ constructor(protected _analyticsPlugin: ClickAnalyticsPlugin, protected _config: IClickAnalyticsConfiguration, protected _pageAction: PageAction,
25
+ protected _traceLogger: IDiagnosticLogger) {
40
26
 
41
- /**
42
- * API to create and send a populated PageAction event
43
- * @param element - DOM element
44
- * @param overrideValues - PageAction overrides
45
- * @param customProperties - Custom properties(Part C)
46
- * @param isRightClick - Flag for mouse right clicks
47
- */
48
- private capturePageAction(element: Element, overrideValues?: IPageActionOverrideValues, customProperties?: { [name: string]: string | number | boolean | string[] | number[] | boolean[] | object }, isRightClick?: boolean): void {
49
- const donotTrackTag = this._config.dataTags.customDataPrefix + this._config.dataTags.dntDataTag;
50
- if (!isElementDnt(element, donotTrackTag)) {
51
- this._pageAction.capturePageAction(element, overrideValues, customProperties, isRightClick);
52
- }
27
+ let _evtNamespace = mergeEvtNamespace(createUniqueNamespace("AutoCaptureHandler"), (_analyticsPlugin as any)._evtNamespace);
53
28
 
54
- }
29
+ dynamicProto(AutoCaptureHandler, this, (_self) => {
55
30
 
56
- // Process click event
57
- private _processClick(clickEvent: any) {
58
- var clickCaptureElements = { A: true, BUTTON: true, AREA: true, INPUT: true };
59
- let win = getWindow();
60
- if(isNullOrUndefined(clickEvent) && win) {
61
- clickEvent = win.event; // IE 8 does not pass the event
62
- }
63
- if(clickEvent) {
64
- let element = clickEvent.srcElement || clickEvent.target;
31
+ _self.click = () => {
32
+ let win = getWindow();
33
+ let doc = getDocument();
34
+ if (win) {
35
+ // IE9 onwards addEventListener is available, 'click' event captures mouse click. mousedown works on other browsers
36
+ const event = (navigator.appVersion.indexOf("MSIE") !== -1) ? "click" : "mousedown";
37
+ eventOn(win, event, _processClick, _evtNamespace);
38
+ eventOn(win, "keyup", _processClick, _evtNamespace);
39
+ } else if (doc) {
40
+ // IE8 and below doesn't have addEventListener so it will use attachEvent
41
+ // attaching to window does not work in IE8
42
+ eventOn(doc, "click", _processClick, _evtNamespace);
43
+ eventOn(doc, "keyup", _processClick, _evtNamespace);
44
+ }
45
+ };
65
46
 
66
- // populate overrideValues
67
- var overrideValues: IPageActionOverrideValues = {
68
- clickCoordinateX: clickEvent.pageX,
69
- clickCoordinateY: clickEvent.pageY
47
+ _self._doUnload = (unloadCtx?: IProcessTelemetryUnloadContext, unloadState?: ITelemetryUnloadState, asyncCallback?: () => void): void | boolean => {
48
+ eventOff(getWindow(), null, null, _evtNamespace);
49
+ eventOff(getDocument(), null, null, _evtNamespace);
70
50
  };
71
- var isRightClickObj = isRightClick(clickEvent as MouseEvent);
72
- if (isRightClickObj) {
73
- overrideValues.actionType = ActionType.CLICKRIGHT;
74
- } else if (isLeftClick(clickEvent as MouseEvent)) {
75
- overrideValues.actionType = ActionType.CLICKLEFT;
76
- } else if (isKeyboardEnter(clickEvent as KeyboardEvent)) {
77
- overrideValues.actionType = ActionType.KEYBOARDENTER;
78
- } else if (isKeyboardSpace(clickEvent as KeyboardEvent)) {
79
- overrideValues.actionType = ActionType.KEYBOARDSPACE;
80
- } else if (isMiddleClick(clickEvent as MouseEvent)) {
81
- overrideValues.actionType = ActionType.CLICKMIDDLE;
82
- } else {
83
- return;
51
+
52
+ function _capturePageAction(element: Element, overrideValues?: IPageActionOverrideValues, customProperties?: { [name: string]: string | number | boolean | string[] | number[] | boolean[] | object }, isRightClick?: boolean): void {
53
+ const donotTrackTag = _self._config.dataTags.customDataPrefix + _self._config.dataTags.dntDataTag;
54
+ if (!isElementDnt(element, donotTrackTag)) {
55
+ _self._pageAction.capturePageAction(element, overrideValues, customProperties, isRightClick);
56
+ }
84
57
  }
85
-
86
- while (element && element.tagName) {
87
- // control property will be available for <label> elements with 'for' attribute, only use it when is a
88
- // valid JSLL capture element to avoid infinite loops
89
- if (element.control && clickCaptureElements[element.control.tagName.toUpperCase()]) {
90
- element = element.control;
58
+
59
+ // Process click event
60
+ function _processClick(clickEvent: any) {
61
+ var clickCaptureElements = { A: true, BUTTON: true, AREA: true, INPUT: true };
62
+ let win = getWindow();
63
+ if (isNullOrUndefined(clickEvent) && win) {
64
+ clickEvent = win.event; // IE 8 does not pass the event
91
65
  }
92
- const tagNameUpperCased = element.tagName.toUpperCase();
93
- if (!clickCaptureElements[tagNameUpperCased]) {
94
- element = element.parentElement || element.parentNode;
95
- continue;
96
- } else {
97
- // Check allowed INPUT types
98
- var sendEvent = tagNameUpperCased === "INPUT" ? clickCaptureInputTypes[element.type.toUpperCase()] : true;
99
- if (sendEvent) {
100
- this.capturePageAction(element, overrideValues, {}, isRightClickObj);
66
+ if (clickEvent) {
67
+ let element = clickEvent.srcElement || clickEvent.target;
68
+
69
+ // populate overrideValues
70
+ var overrideValues: IPageActionOverrideValues = {
71
+ clickCoordinateX: clickEvent.pageX,
72
+ clickCoordinateY: clickEvent.pageY
73
+ };
74
+ var isRightClickObj = isRightClick(clickEvent as MouseEvent);
75
+ if (isRightClickObj) {
76
+ overrideValues.actionType = ActionType.CLICKRIGHT;
77
+ } else if (isLeftClick(clickEvent as MouseEvent)) {
78
+ overrideValues.actionType = ActionType.CLICKLEFT;
79
+ } else if (isKeyboardEnter(clickEvent as KeyboardEvent)) {
80
+ overrideValues.actionType = ActionType.KEYBOARDENTER;
81
+ } else if (isKeyboardSpace(clickEvent as KeyboardEvent)) {
82
+ overrideValues.actionType = ActionType.KEYBOARDSPACE;
83
+ } else if (isMiddleClick(clickEvent as MouseEvent)) {
84
+ overrideValues.actionType = ActionType.CLICKMIDDLE;
85
+ } else {
86
+ return;
87
+ }
88
+
89
+ while (element && element.tagName) {
90
+ // control property will be available for <label> elements with 'for' attribute, only use it when is a
91
+ // valid JSLL capture element to avoid infinite loops
92
+ if (element.control && clickCaptureElements[element.control.tagName.toUpperCase()]) {
93
+ element = element.control;
94
+ }
95
+ const tagNameUpperCased = element.tagName.toUpperCase();
96
+ if (!clickCaptureElements[tagNameUpperCased]) {
97
+ element = element.parentElement || element.parentNode;
98
+ continue;
99
+ } else {
100
+ // Check allowed INPUT types
101
+ var sendEvent = tagNameUpperCased === "INPUT" ? clickCaptureInputTypes[element.type.toUpperCase()] : true;
102
+ if (sendEvent) {
103
+ _capturePageAction(element, overrideValues, {}, isRightClickObj);
104
+ }
105
+ break;
106
+ }
101
107
  }
102
- break;
103
108
  }
104
109
  }
105
- }
106
-
110
+ });
111
+ }
112
+
113
+ // handle automatic event firing on user click
114
+ public click() {
115
+ // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging
116
+ }
117
+
118
+ public _doUnload(unloadCtx?: IProcessTelemetryUnloadContext, unloadState?: ITelemetryUnloadState, asyncCallback?: () => void): void | boolean {
119
+ // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging
107
120
  }
108
121
  }