@salesforcedevs/docs-components 1.3.13 → 1.3.18
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@salesforcedevs/docs-components",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.18",
|
|
4
4
|
"description": "Docs Lightning web components for DSC",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "index.js",
|
|
@@ -24,5 +24,5 @@
|
|
|
24
24
|
"@types/lodash.orderby": "^4.6.7",
|
|
25
25
|
"@types/lodash.uniqby": "^4.7.7"
|
|
26
26
|
},
|
|
27
|
-
"gitHead": "
|
|
27
|
+
"gitHead": "a45e1a97eefa6646c36a6fa5d24ad6c10a775d04"
|
|
28
28
|
}
|
|
@@ -17,11 +17,9 @@ const CONSTANTS = {
|
|
|
17
17
|
dropdownWidth: 32
|
|
18
18
|
};
|
|
19
19
|
|
|
20
|
-
export const ANALYTICS_EVENT_NAME = "
|
|
20
|
+
export const ANALYTICS_EVENT_NAME = "custEv_breadcrumbNavClick";
|
|
21
21
|
export const ANALYTICS_BASE_PAYLOAD = {
|
|
22
|
-
|
|
23
|
-
locationOnPage: "breadcrumb",
|
|
24
|
-
ctaClick: true
|
|
22
|
+
navType: "breadcrumb"
|
|
25
23
|
};
|
|
26
24
|
|
|
27
25
|
export default class Breadcrumbs extends LightningElement {
|
|
@@ -111,7 +109,7 @@ export default class Breadcrumbs extends LightningElement {
|
|
|
111
109
|
private get analyticsBasePayload() {
|
|
112
110
|
return {
|
|
113
111
|
...ANALYTICS_BASE_PAYLOAD,
|
|
114
|
-
|
|
112
|
+
navItem: this.breadcrumbs.map((crumb) => crumb.label).join("/")
|
|
115
113
|
};
|
|
116
114
|
}
|
|
117
115
|
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
trees={sidebarContent}
|
|
7
7
|
value={sidebarValue}
|
|
8
8
|
header={sidebarHeader}
|
|
9
|
+
onsidebarclick={onSidebarClick}
|
|
9
10
|
>
|
|
10
11
|
<slot name="sidebar-header" slot="header"></slot>
|
|
11
12
|
</dx-sidebar-old>
|
|
@@ -20,6 +21,7 @@
|
|
|
20
21
|
coveo-public-access-token={coveoPublicAccessToken}
|
|
21
22
|
coveo-search-hub={coveoSearchHub}
|
|
22
23
|
coveo-advanced-query-config={coveoAdvancedQueryConfig}
|
|
24
|
+
onsidebarclick={onSidebarClick}
|
|
23
25
|
>
|
|
24
26
|
<slot name="sidebar-header" slot="header"></slot>
|
|
25
27
|
</dx-sidebar>
|
|
@@ -3,6 +3,7 @@ import { closest } from "kagekiri";
|
|
|
3
3
|
import { toJson } from "dxUtils/normalizers";
|
|
4
4
|
import { highlightTerms } from "dxUtils/highlight";
|
|
5
5
|
import { SearchSyncer } from "docUtils/SearchSyncer";
|
|
6
|
+
import { track as sendGtm } from "dxUtils/analytics";
|
|
6
7
|
|
|
7
8
|
type AnchorMap = { [key: string]: { intersect: boolean; id: string } };
|
|
8
9
|
|
|
@@ -101,6 +102,12 @@ export default class ContentLayout extends LightningElement {
|
|
|
101
102
|
private observerTimerId = null;
|
|
102
103
|
private didScrollToSelectedHash = false;
|
|
103
104
|
private _scrollInterval = 0;
|
|
105
|
+
private scrollPosition = 0;
|
|
106
|
+
|
|
107
|
+
private scrolledTwentyFivePercent = false;
|
|
108
|
+
private scrolledFiftyPercent = false;
|
|
109
|
+
private scrolledSevenFivePercent = false;
|
|
110
|
+
private scrolledOneHundredPercent = false;
|
|
104
111
|
|
|
105
112
|
get showToc(): boolean {
|
|
106
113
|
return this.tocOptions && this.tocOptions.length > 0;
|
|
@@ -137,6 +144,11 @@ export default class ContentLayout extends LightningElement {
|
|
|
137
144
|
this._scrollInterval = window.setInterval(() => {
|
|
138
145
|
this.saveScroll();
|
|
139
146
|
}, 1000);
|
|
147
|
+
|
|
148
|
+
document.addEventListener(
|
|
149
|
+
"scroll",
|
|
150
|
+
this.scrollThresholdHandler.bind(this)
|
|
151
|
+
);
|
|
140
152
|
}
|
|
141
153
|
|
|
142
154
|
renderedCallback(): void {
|
|
@@ -165,6 +177,8 @@ export default class ContentLayout extends LightningElement {
|
|
|
165
177
|
this.clearRenderObserverTimer();
|
|
166
178
|
|
|
167
179
|
window.clearInterval(this._scrollInterval);
|
|
180
|
+
|
|
181
|
+
document.removeEventListener("scroll", this.scrollThresholdHandler);
|
|
168
182
|
}
|
|
169
183
|
|
|
170
184
|
saveScroll() {
|
|
@@ -224,6 +238,48 @@ export default class ContentLayout extends LightningElement {
|
|
|
224
238
|
}
|
|
225
239
|
};
|
|
226
240
|
|
|
241
|
+
onSidebarClick() {
|
|
242
|
+
this.resetScrollThreshold();
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
sendGtmScrollThresholdEvent(threshold: "25" | "50" | "75" | "100") {
|
|
246
|
+
sendGtm(document.body, "custEv_scroll", {
|
|
247
|
+
scrollDepth: threshold
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
resetScrollThreshold() {
|
|
252
|
+
this.scrolledTwentyFivePercent = false;
|
|
253
|
+
this.scrolledFiftyPercent = false;
|
|
254
|
+
this.scrolledSevenFivePercent = false;
|
|
255
|
+
this.scrolledOneHundredPercent = false;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
scrollThresholdHandler() {
|
|
259
|
+
this.scrollPosition =
|
|
260
|
+
((document.documentElement.scrollTop + document.body.scrollTop) /
|
|
261
|
+
(document.documentElement.scrollHeight -
|
|
262
|
+
document.documentElement.clientHeight)) *
|
|
263
|
+
100;
|
|
264
|
+
|
|
265
|
+
if (this.scrollPosition > 25 && !this.scrolledTwentyFivePercent) {
|
|
266
|
+
this.scrolledTwentyFivePercent = true;
|
|
267
|
+
this.sendGtmScrollThresholdEvent("25");
|
|
268
|
+
} else if (this.scrollPosition > 50 && !this.scrolledFiftyPercent) {
|
|
269
|
+
this.scrolledFiftyPercent = true;
|
|
270
|
+
this.sendGtmScrollThresholdEvent("50");
|
|
271
|
+
} else if (this.scrollPosition > 75 && !this.scrolledSevenFivePercent) {
|
|
272
|
+
this.scrolledSevenFivePercent = true;
|
|
273
|
+
this.sendGtmScrollThresholdEvent("75");
|
|
274
|
+
} else if (
|
|
275
|
+
this.scrollPosition === 100 &&
|
|
276
|
+
!this.scrolledOneHundredPercent
|
|
277
|
+
) {
|
|
278
|
+
this.scrolledOneHundredPercent = true;
|
|
279
|
+
this.sendGtmScrollThresholdEvent("100");
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
|
|
227
283
|
onSlotChange(event: Event): void {
|
|
228
284
|
const slotElements = (
|
|
229
285
|
event.target as HTMLSlotElement
|
|
@@ -235,6 +291,28 @@ export default class ContentLayout extends LightningElement {
|
|
|
235
291
|
slotContentElement.ownerDocument?.getElementsByTagName(
|
|
236
292
|
TOC_HEADER_TAG
|
|
237
293
|
);
|
|
294
|
+
|
|
295
|
+
const docContentEl = slotElements.find(
|
|
296
|
+
(el) => el.tagName === "DOC-CONTENT"
|
|
297
|
+
);
|
|
298
|
+
const topicTitleEl =
|
|
299
|
+
docContentEl?.shadowRoot?.getElementById("topic-title");
|
|
300
|
+
const anchorElements =
|
|
301
|
+
docContentEl?.shadowRoot?.querySelectorAll("a[href]");
|
|
302
|
+
|
|
303
|
+
// Attach click listeners to all anchor elements for analytics
|
|
304
|
+
anchorElements?.forEach((anchorElement) => {
|
|
305
|
+
anchorElement.addEventListener("click", () => {
|
|
306
|
+
sendGtm(anchorElement, "custEv_docContentClick", {
|
|
307
|
+
clickText: anchorElement.textContent,
|
|
308
|
+
clickUrl: anchorElement.getAttribute("href"),
|
|
309
|
+
elementType: "link",
|
|
310
|
+
locationOnPage: "docContent",
|
|
311
|
+
itemTitle: topicTitleEl?.textContent
|
|
312
|
+
});
|
|
313
|
+
});
|
|
314
|
+
});
|
|
315
|
+
|
|
238
316
|
for (const headingElement of headingElements) {
|
|
239
317
|
// Sometimes elements hash is not being set when slot content is wrapped with div
|
|
240
318
|
headingElement.hash = headingElement.attributes.hash?.nodeValue;
|
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
<dx-brand-theme-provider brand={brand}>
|
|
3
3
|
<header class={className}>
|
|
4
4
|
<dx-skip-nav-link></dx-skip-nav-link>
|
|
5
|
+
<dx-banner
|
|
6
|
+
if:true={showBanner}
|
|
7
|
+
banner-markup={bannerMarkup}
|
|
8
|
+
></dx-banner>
|
|
5
9
|
<div class="header_l1">
|
|
6
10
|
<div if:true={showMenuButton} class="nav_menu-ctas">
|
|
7
11
|
<dx-button
|