@adobe/helix-rum-enhancer 1.1.4 → 1.3.0

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/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ # [1.3.0](https://github.com/adobe/helix-rum-enhancer/compare/v1.2.0...v1.3.0) (2023-08-24)
2
+
3
+
4
+ ### Features
5
+
6
+ * **forms:** improve form instrumentation ([86ecbf5](https://github.com/adobe/helix-rum-enhancer/commit/86ecbf564fe6c04e1d566ac4eeb446d3e6670171))
7
+
8
+ # [1.2.0](https://github.com/adobe/helix-rum-enhancer/compare/v1.1.4...v1.2.0) (2023-08-18)
9
+
10
+
11
+ ### Features
12
+
13
+ * **checkpoints:** introduce new checkpoint `enter` that gets triggered when a page is first loaded (not refreshed) ([16c3381](https://github.com/adobe/helix-rum-enhancer/commit/16c3381ee564de17fbd6ab8d14a717f9773ca5f6)), closes [#62](https://github.com/adobe/helix-rum-enhancer/issues/62)
14
+
1
15
  ## [1.1.4](https://github.com/adobe/helix-rum-enhancer/compare/v1.1.3...v1.1.4) (2023-05-16)
2
16
 
3
17
 
package/README.md CHANGED
@@ -20,6 +20,7 @@ It will add following new checkpoints:
20
20
  - `click`: A click anywhere in the document
21
21
  - `viewblock`: A Helix block has been scrolled into the viewport
22
22
  - `viewmedia`: An image or viedo hosted by Helix Media Bus has been scrolled into the viewport
23
+ - `enter`: when page loads and the referrer is different than the current page.
23
24
 
24
25
  ## Development
25
26
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adobe/helix-rum-enhancer",
3
- "version": "1.1.4",
3
+ "version": "1.3.0",
4
4
  "description": "Helix RUM Enhancer",
5
5
  "main": "src/index.js",
6
6
  "type": "module",
@@ -28,22 +28,22 @@
28
28
  "reporter-options": "configFile=.mocha-multi.json"
29
29
  },
30
30
  "devDependencies": {
31
- "@adobe/eslint-config-helix": "2.0.2",
31
+ "@adobe/eslint-config-helix": "2.0.3",
32
32
  "@semantic-release/changelog": "6.0.3",
33
33
  "@semantic-release/git": "10.0.1",
34
- "@semantic-release/npm": "10.0.3",
35
- "c8": "7.13.0",
34
+ "@semantic-release/npm": "10.0.5",
35
+ "c8": "8.0.1",
36
36
  "codecov": "3.8.3",
37
- "eslint": "8.40.0",
37
+ "eslint": "8.47.0",
38
38
  "eslint-plugin-header": "3.1.1",
39
- "eslint-plugin-import": "2.27.5",
39
+ "eslint-plugin-import": "2.28.1",
40
40
  "husky": "8.0.3",
41
41
  "jsdoc-to-markdown": "8.0.0",
42
42
  "junit-report-builder": "3.0.1",
43
- "lint-staged": "13.2.2",
43
+ "lint-staged": "14.0.0",
44
44
  "mocha": "10.2.0",
45
45
  "mocha-multi-reporters": "1.5.1",
46
- "semantic-release": "21.0.2"
46
+ "semantic-release": "21.0.7"
47
47
  },
48
48
  "lint-staged": {
49
49
  "*.js": "eslint",
package/src/index.js CHANGED
@@ -46,8 +46,14 @@ sampleRUM.drain('observe', ((elements) => {
46
46
  });
47
47
  }));
48
48
 
49
+ // enter checkpoint when referrer is not the current page url
50
+ if (!!document.referrer && (document.referrer !== window.location.href)) {
51
+ sampleRUM('enter', { target: undefined, source: document.referrer });
52
+ }
53
+
49
54
  sampleRUM.targetselector = (element) => {
50
- let value = element.getAttribute('href') || element.currentSrc || element.getAttribute('src');
55
+ let value = element.getAttribute('href') || element.currentSrc || element.getAttribute('src')
56
+ || element.dataset.action || element.action;
51
57
  if (value && value.startsWith('https://')) {
52
58
  // resolve relative links
53
59
  value = new URL(value, window.location).href;
@@ -85,9 +91,19 @@ sampleRUM.sourceselector = (element) => {
85
91
  if (element === document.body || element === document.documentElement || !element) {
86
92
  return undefined;
87
93
  }
88
- if (element.id) {
89
- return `#${element.id}`;
94
+
95
+ const form = element.closest('form');
96
+ let formElementSelector = '';
97
+ if (form && Array.from(form.elements).includes(element)) {
98
+ formElementSelector = element.tagName === 'INPUT' ? `form input[type='${element.getAttribute('type')}']` : `form ${element.tagName.toLowerCase()}`;
99
+ }
100
+
101
+ if (element.id || formElementSelector) {
102
+ const blockName = element.closest('.block') ? element.closest('.block').getAttribute('data-block-name') : '';
103
+ const id = element.id ? `#${element.id}` : '';
104
+ return blockName ? `.${blockName} ${formElementSelector}${id}` : `${formElementSelector}${id}`;
90
105
  }
106
+
91
107
  if (element.getAttribute('data-block-name')) {
92
108
  return `.${element.getAttribute('data-block-name')}`;
93
109
  }
@@ -97,3 +113,10 @@ sampleRUM.sourceselector = (element) => {
97
113
  document.addEventListener('click', (event) => {
98
114
  sampleRUM('click', { target: sampleRUM.targetselector(event.target), source: sampleRUM.sourceselector(event.target) });
99
115
  });
116
+
117
+ // Track form submissions
118
+ document.querySelectorAll('form').forEach((form) => {
119
+ form.addEventListener('submit', (event) => {
120
+ sampleRUM('formsubmit', { target: sampleRUM.targetselector(event.target), source: sampleRUM.sourceselector(event.target) });
121
+ });
122
+ });