@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.
- package/browser/ai.clck.2.8.0-nightly.2204-06.cjs.js +2890 -0
- package/browser/ai.clck.2.8.0-nightly.2204-06.cjs.js.map +1 -0
- package/browser/ai.clck.2.8.0-nightly.2204-06.cjs.min.js +6 -0
- package/browser/ai.clck.2.8.0-nightly.2204-06.cjs.min.js.map +1 -0
- package/browser/ai.clck.2.8.0-nightly.2204-06.gbl.js +2894 -0
- package/browser/ai.clck.2.8.0-nightly.2204-06.gbl.js.map +1 -0
- package/browser/ai.clck.2.8.0-nightly.2204-06.gbl.min.js +6 -0
- package/browser/ai.clck.2.8.0-nightly.2204-06.gbl.min.js.map +1 -0
- package/browser/ai.clck.2.8.0-nightly.2204-06.integrity.json +66 -0
- package/browser/ai.clck.2.8.0-nightly.2204-06.js +2896 -0
- package/browser/ai.clck.2.8.0-nightly.2204-06.js.map +1 -0
- package/browser/ai.clck.2.8.0-nightly.2204-06.min.js +6 -0
- package/browser/ai.clck.2.8.0-nightly.2204-06.min.js.map +1 -0
- package/browser/ai.clck.2.cjs.js +1689 -805
- package/browser/ai.clck.2.cjs.js.map +1 -1
- package/browser/ai.clck.2.cjs.min.js +2 -2
- package/browser/ai.clck.2.cjs.min.js.map +1 -1
- package/browser/ai.clck.2.gbl.js +1689 -805
- package/browser/ai.clck.2.gbl.js.map +1 -1
- package/browser/ai.clck.2.gbl.min.js +2 -2
- package/browser/ai.clck.2.gbl.min.js.map +1 -1
- package/browser/ai.clck.2.js +1689 -805
- package/browser/ai.clck.2.js.map +1 -1
- package/browser/ai.clck.2.min.js +2 -2
- package/browser/ai.clck.2.min.js.map +1 -1
- package/dist/applicationinsights-clickanalytics-js.api.json +38 -13
- package/dist/applicationinsights-clickanalytics-js.api.md +1 -0
- package/dist/applicationinsights-clickanalytics-js.d.ts +2 -5
- package/dist/applicationinsights-clickanalytics-js.js +1689 -805
- package/dist/applicationinsights-clickanalytics-js.js.map +1 -1
- package/dist/applicationinsights-clickanalytics-js.min.js +2 -2
- package/dist/applicationinsights-clickanalytics-js.min.js.map +1 -1
- package/dist/applicationinsights-clickanalytics-js.rollup.d.ts +2 -5
- package/dist-esm/Behaviours.js +1 -1
- package/dist-esm/ClickAnalyticsPlugin.js +75 -51
- package/dist-esm/ClickAnalyticsPlugin.js.map +1 -1
- package/dist-esm/DataCollector.js +4 -2
- package/dist-esm/DataCollector.js.map +1 -1
- package/dist-esm/Enums.js +1 -1
- package/dist-esm/Interfaces/Datamodel.js +1 -1
- package/dist-esm/applicationinsights-clickanalytics-js.js +1 -1
- package/dist-esm/common/Utils.js +1 -1
- package/dist-esm/events/PageAction.js +130 -128
- package/dist-esm/events/PageAction.js.map +1 -1
- package/dist-esm/events/WebEvent.js +109 -94
- package/dist-esm/events/WebEvent.js.map +1 -1
- package/dist-esm/handlers/AutoCaptureHandler.js +85 -83
- package/dist-esm/handlers/AutoCaptureHandler.js.map +1 -1
- package/dist-esm/handlers/DomContentHandler.js +281 -278
- package/dist-esm/handlers/DomContentHandler.js.map +1 -1
- package/package.json +5 -5
- package/src/ClickAnalyticsPlugin.ts +94 -49
- package/src/DataCollector.ts +24 -22
- package/src/Interfaces/Datamodel.ts +20 -21
- package/src/common/Utils.ts +8 -8
- package/src/events/PageAction.ts +166 -132
- package/src/events/WebEvent.ts +147 -78
- package/src/handlers/AutoCaptureHandler.ts +92 -79
- package/src/handlers/DomContentHandler.ts +337 -304
- package/types/ClickAnalyticsPlugin.d.ts +1 -4
- package/types/Interfaces/Datamodel.d.ts +3 -2
- package/types/common/Utils.d.ts +79 -79
- package/types/events/PageAction.d.ts +6 -6
- package/types/events/WebEvent.d.ts +17 -17
- package/types/handlers/AutoCaptureHandler.d.ts +2 -10
- package/types/handlers/DomContentHandler.d.ts +3 -50
- package/types/tsdoc-metadata.json +1 -1
- package/browser/ai.clck.2.8.0-nightly.2202-06.cjs.js +0 -2006
- package/browser/ai.clck.2.8.0-nightly.2202-06.cjs.js.map +0 -1
- package/browser/ai.clck.2.8.0-nightly.2202-06.cjs.min.js +0 -6
- package/browser/ai.clck.2.8.0-nightly.2202-06.cjs.min.js.map +0 -1
- package/browser/ai.clck.2.8.0-nightly.2202-06.gbl.js +0 -2010
- package/browser/ai.clck.2.8.0-nightly.2202-06.gbl.js.map +0 -1
- package/browser/ai.clck.2.8.0-nightly.2202-06.gbl.min.js +0 -6
- package/browser/ai.clck.2.8.0-nightly.2202-06.gbl.min.js.map +0 -1
- package/browser/ai.clck.2.8.0-nightly.2202-06.integrity.json +0 -66
- package/browser/ai.clck.2.8.0-nightly.2202-06.js +0 -2012
- package/browser/ai.clck.2.8.0-nightly.2202-06.js.map +0 -1
- package/browser/ai.clck.2.8.0-nightly.2202-06.min.js +0 -6
- 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
|
|
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
|
-
|
|
21
|
-
|
|
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
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
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
|
-
|
|
67
|
-
|
|
68
|
-
|
|
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
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
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
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
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
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
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
|
}
|