@salesforcedevs/docs-components 0.7.0 → 0.7.59-sppage-alpha1
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/lwc.config.json +17 -3
- package/package.json +16 -6
- package/src/modules/README.md +41 -0
- package/src/modules/doc/amfModelParser/amfModelParser.ts +674 -0
- package/src/modules/doc/amfReference/amfReference.css +25 -0
- package/src/modules/doc/amfReference/amfReference.html +60 -0
- package/src/modules/doc/amfReference/amfReference.ts +1494 -0
- package/src/modules/doc/amfReference/constants.ts +76 -0
- package/src/modules/doc/amfReference/types.ts +125 -0
- package/src/modules/doc/amfTopic/amfTopic.css +21 -0
- package/src/modules/doc/amfTopic/amfTopic.html +3 -0
- package/src/modules/doc/amfTopic/amfTopic.ts +111 -0
- package/src/modules/doc/amfTopic/types.ts +56 -0
- package/src/modules/doc/amfTopic/utils.ts +136 -0
- package/src/modules/doc/breadcrumbItem/breadcrumbItem.css +51 -0
- package/src/modules/doc/breadcrumbItem/breadcrumbItem.html +5 -0
- package/src/modules/doc/breadcrumbItem/breadcrumbItem.ts +71 -0
- package/src/modules/doc/breadcrumbs/breadcrumbs.css +27 -0
- package/src/modules/doc/breadcrumbs/breadcrumbs.html +58 -0
- package/src/modules/doc/breadcrumbs/breadcrumbs.ts +192 -0
- package/src/modules/doc/content/content.css +94 -70
- package/src/modules/doc/content/content.ts +233 -169
- package/src/modules/doc/contentCallout/contentCallout.css +17 -23
- package/src/modules/doc/contentCallout/contentCallout.html +13 -4
- package/src/modules/doc/contentCallout/contentCallout.ts +16 -3
- package/src/modules/doc/contentLayout/contentLayout.css +131 -0
- package/src/modules/doc/contentLayout/contentLayout.html +64 -0
- package/src/modules/doc/contentLayout/contentLayout.ts +610 -0
- package/src/modules/doc/doDont/doDont.css +47 -0
- package/src/modules/doc/doDont/doDont.html +27 -0
- package/src/modules/doc/doDont/doDont.ts +17 -0
- package/src/modules/doc/header/header.css +70 -37
- package/src/modules/doc/header/header.html +40 -135
- package/src/modules/doc/header/header.ts +29 -78
- package/src/modules/doc/heading/heading.css +33 -0
- package/src/modules/doc/heading/heading.html +14 -0
- package/src/modules/doc/heading/heading.ts +67 -0
- package/src/modules/doc/headingAnchor/headingAnchor.css +33 -0
- package/src/modules/doc/headingAnchor/headingAnchor.html +19 -0
- package/src/modules/doc/headingAnchor/headingAnchor.ts +43 -0
- package/src/modules/doc/headingContent/headingContent.css +53 -0
- package/src/modules/doc/headingContent/headingContent.html +13 -0
- package/src/modules/doc/headingContent/headingContent.ts +30 -0
- package/src/modules/doc/overview/overview.css +40 -0
- package/src/modules/doc/overview/overview.html +34 -0
- package/src/modules/doc/overview/overview.ts +12 -0
- package/src/modules/doc/phase/phase.css +70 -0
- package/src/modules/doc/phase/phase.html +38 -0
- package/src/modules/doc/phase/phase.ts +93 -0
- package/src/modules/doc/specificationContent/specificationContent.css +3 -0
- package/src/modules/doc/specificationContent/specificationContent.html +99 -0
- package/src/modules/doc/specificationContent/specificationContent.ts +56 -0
- package/src/modules/doc/sprigSurvey/sprigSurvey.html +20 -0
- package/src/modules/doc/sprigSurvey/sprigSurvey.scoped.css +16 -0
- package/src/modules/doc/sprigSurvey/sprigSurvey.ts +16 -0
- package/src/modules/doc/toc/toc.ts +1 -1
- package/src/modules/doc/versionPicker/versionPicker.css +64 -0
- package/src/modules/doc/versionPicker/versionPicker.html +38 -0
- package/src/modules/doc/versionPicker/versionPicker.ts +65 -0
- package/src/modules/doc/xmlContent/types.ts +120 -0
- package/src/modules/doc/xmlContent/utils.ts +163 -0
- package/src/modules/doc/xmlContent/xmlContent.css +54 -0
- package/src/modules/doc/xmlContent/xmlContent.html +52 -0
- package/src/modules/doc/xmlContent/xmlContent.ts +780 -0
- package/src/modules/docHelpers/amfStyle/amfStyle.css +355 -0
- package/src/modules/docHelpers/imgStyle/imgStyle.css +59 -0
- package/src/modules/docHelpers/status/status.css +22 -0
- package/src/modules/docUtils/searchSyncer/searchSyncer.ts +86 -0
- package/src/modules/docUtils/utils/utils.ts +32 -0
- package/LICENSE +0 -12
- package/src/modules/doc/content/__tests__/content.test.ts +0 -120
- package/src/modules/doc/content/__tests__/mockDocContent.ts +0 -292
- package/src/modules/doc/content/__tests__/mockPageReference.ts +0 -8
- package/src/modules/doc/content/content.stories.ts +0 -108
- package/src/modules/doc/contentCallout/__tests__/contentCallout.test.ts +0 -80
- package/src/modules/doc/contentCallout/__tests__/mockProps.ts +0 -14
- package/src/modules/doc/contentCallout/contentCallout.stories.ts +0 -29
- package/src/modules/doc/contentMedia/__tests__/contentMedia.test.ts +0 -97
- package/src/modules/doc/contentMedia/contentMedia.stories.ts +0 -113
- package/src/modules/doc/header/__tests__/coveoConfig.ts +0 -12
- package/src/modules/doc/header/__tests__/header.test.ts +0 -434
- package/src/modules/doc/header/__tests__/mockNavDevelopers.ts +0 -427
- package/src/modules/doc/header/__tests__/mockNavs.ts +0 -115
- package/src/modules/doc/header/__tests__/mockProps.ts +0 -149
- package/src/modules/doc/header/header.stories.ts +0 -160
- package/src/modules/doc/nav/__tests__/mockAvailableLanguages.ts +0 -8
- package/src/modules/doc/nav/__tests__/mockAvailableVersions.ts +0 -122
- package/src/modules/doc/nav/__tests__/mockPageReference.ts +0 -8
- package/src/modules/doc/nav/__tests__/mockPdfUrl.ts +0 -1
- package/src/modules/doc/nav/__tests__/mockSelectedLanguage.ts +0 -8
- package/src/modules/doc/nav/__tests__/mockSelectedVersion.ts +0 -8
- package/src/modules/doc/nav/__tests__/mockToc.ts +0 -146
- package/src/modules/doc/nav/__tests__/nav.test.ts +0 -58
- package/src/modules/doc/toc/__tests__/mockPageReference.ts +0 -8
- package/src/modules/doc/toc/__tests__/mockToc.ts +0 -146
- package/src/modules/doc/toc/__tests__/toc.test.ts +0 -29
- package/src/modules/doc/toolbar/__tests__/mockAvailableLanguages.ts +0 -8
- package/src/modules/doc/toolbar/__tests__/mockAvailableVersions.ts +0 -122
- package/src/modules/doc/toolbar/__tests__/mockPdfUrl.ts +0 -1
- package/src/modules/doc/toolbar/__tests__/mockSelectedLanguage.ts +0 -8
- package/src/modules/doc/toolbar/__tests__/mockSelectedVersion.ts +0 -8
- package/src/modules/doc/toolbar/__tests__/toolbar.test.ts +0 -44
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
@import "dxHelpers/reset";
|
|
2
|
+
|
|
3
|
+
/* NOTE: doc-version-picker-width width variable is used by both dx-button and dx-dropdown to maintain a consistent width. */
|
|
4
|
+
:host {
|
|
5
|
+
--dx-c-dropdown-option-font-weight: normal;
|
|
6
|
+
--dx-c-dropdown-option-label-color: var(--dx-g-gray-10);
|
|
7
|
+
--popover-container-open-transform: translateY(4px);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.version-picker-container {
|
|
11
|
+
padding: 8px var(--dx-g-spacing-lg) 8px
|
|
12
|
+
var(--dx-g-global-header-padding-horizontal);
|
|
13
|
+
border-top: 1px solid var(--dx-g-gray-90);
|
|
14
|
+
border-bottom: 1px solid var(--dx-g-gray-90);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.version-picker-button {
|
|
18
|
+
display: flex;
|
|
19
|
+
width: var(--doc-version-picker-width, 296px);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.version-picker-button:hover,
|
|
23
|
+
.version-picker-button:active,
|
|
24
|
+
.version-picker-button:focus {
|
|
25
|
+
--dx-c-button-secondary-color-hover: var(--dx-g-cloud-blue-vibrant-95);
|
|
26
|
+
--dx-c-button-primary-color: var(--dx-g-blue-vibrant-40);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* NOTE: This CSS ensures the span inside the button stays within the parent's width, avoiding overflow.
|
|
31
|
+
* Not keeping this in common component to ensure that existing functionality works as it is.
|
|
32
|
+
*/
|
|
33
|
+
dx-button::part(content) {
|
|
34
|
+
width: inherit;
|
|
35
|
+
overflow: hidden;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.selected-version {
|
|
39
|
+
display: flex;
|
|
40
|
+
flex-direction: row;
|
|
41
|
+
align-items: center;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.selected-version-label {
|
|
45
|
+
flex: 1;
|
|
46
|
+
overflow: hidden;
|
|
47
|
+
text-align: left;
|
|
48
|
+
text-overflow: ellipsis;
|
|
49
|
+
white-space: nowrap;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
dx-type-badge.latest-badge {
|
|
53
|
+
--dx-c-type-badge-color: var(--dx-g-green-vibrant-40);
|
|
54
|
+
--dx-c-type-badge-background: var(--dx-g-green-vibrant-95);
|
|
55
|
+
|
|
56
|
+
margin-left: var(--dx-g-spacing-sm);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
dx-type-badge.not-latest-badge {
|
|
60
|
+
--dx-c-type-badge-color: var(--dx-g-red-vibrant-40);
|
|
61
|
+
--dx-c-type-badge-background: var(--dx-g-red-vibrant-95);
|
|
62
|
+
|
|
63
|
+
margin-left: var(--dx-g-spacing-sm);
|
|
64
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div lwc:if={showVersionPicker} class="version-picker-container">
|
|
3
|
+
<dx-dropdown
|
|
4
|
+
options={versions}
|
|
5
|
+
value={selectedVersion.id}
|
|
6
|
+
width="var(--doc-version-picker-width)"
|
|
7
|
+
onchange={onVersionChange}
|
|
8
|
+
>
|
|
9
|
+
<dx-button
|
|
10
|
+
class="version-picker-button"
|
|
11
|
+
variant="tertiary"
|
|
12
|
+
size="small"
|
|
13
|
+
icon-symbol="chevrondown"
|
|
14
|
+
icon-size="medium"
|
|
15
|
+
>
|
|
16
|
+
<div class="selected-version">
|
|
17
|
+
<p class="selected-version-label">
|
|
18
|
+
{selectedVersion.label}
|
|
19
|
+
</p>
|
|
20
|
+
<template lwc:if={showLatestTag}>
|
|
21
|
+
<dx-type-badge
|
|
22
|
+
class="latest-badge"
|
|
23
|
+
lwc:if={latestVersion}
|
|
24
|
+
value="Latest"
|
|
25
|
+
size="small"
|
|
26
|
+
></dx-type-badge>
|
|
27
|
+
<dx-type-badge
|
|
28
|
+
class="not-latest-badge"
|
|
29
|
+
lwc:else
|
|
30
|
+
value="Not Latest"
|
|
31
|
+
size="small"
|
|
32
|
+
></dx-type-badge>
|
|
33
|
+
</template>
|
|
34
|
+
</div>
|
|
35
|
+
</dx-button>
|
|
36
|
+
</dx-dropdown>
|
|
37
|
+
</div>
|
|
38
|
+
</template>
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { LightningElement, api, track } from "lwc";
|
|
2
|
+
|
|
3
|
+
import { AnalyticsPayload, OptionWithNested } from "typings/custom";
|
|
4
|
+
|
|
5
|
+
import { toJson, normalizeBoolean } from "dxUtils/normalizers";
|
|
6
|
+
|
|
7
|
+
export default class VersionPicker extends LightningElement {
|
|
8
|
+
@api analyticsEvent?: string;
|
|
9
|
+
@api analyticsPayload?: AnalyticsPayload;
|
|
10
|
+
|
|
11
|
+
@track private _versions!: OptionWithNested[];
|
|
12
|
+
private _selectedVersion?: OptionWithNested;
|
|
13
|
+
private _latestVersion: boolean = false;
|
|
14
|
+
private _hideBadge: boolean = false;
|
|
15
|
+
|
|
16
|
+
@api
|
|
17
|
+
get versions() {
|
|
18
|
+
return this._versions;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
set versions(value: OptionWithNested[]) {
|
|
22
|
+
this._versions = toJson(value);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
@api
|
|
26
|
+
get selectedVersion(): OptionWithNested | undefined {
|
|
27
|
+
return this._selectedVersion || this.versions[0];
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
set selectedVersion(value: OptionWithNested) {
|
|
31
|
+
if (value) {
|
|
32
|
+
this._selectedVersion = toJson(value);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
@api
|
|
37
|
+
get latestVersion() {
|
|
38
|
+
return this._latestVersion;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
set latestVersion(value) {
|
|
42
|
+
this._latestVersion = normalizeBoolean(value);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
@api
|
|
46
|
+
get hideBadge() {
|
|
47
|
+
return this._hideBadge;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
set hideBadge(value) {
|
|
51
|
+
this._hideBadge = normalizeBoolean(value);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
private get showVersionPicker() {
|
|
55
|
+
return this._versions && this._versions.length !== 0;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
private get showLatestTag(): boolean {
|
|
59
|
+
return !this.hideBadge;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
private onVersionChange(e: CustomEvent) {
|
|
63
|
+
this.dispatchEvent(new CustomEvent("change", { detail: e.detail }));
|
|
64
|
+
}
|
|
65
|
+
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
export type CoveoAdvancedQueryXMLConfig = {
|
|
2
|
+
locale?: string;
|
|
3
|
+
version?: string;
|
|
4
|
+
topicid?: string;
|
|
5
|
+
};
|
|
6
|
+
|
|
7
|
+
export type PageReference = {
|
|
8
|
+
domain?: string;
|
|
9
|
+
page?: string;
|
|
10
|
+
docId?: string;
|
|
11
|
+
deliverable?: string;
|
|
12
|
+
contentDocumentId?: string;
|
|
13
|
+
hash?: string;
|
|
14
|
+
search?: string;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export enum HistoryState {
|
|
18
|
+
PUSH_STATE = "pushState",
|
|
19
|
+
REPLACE_STATE = "replaceState"
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export type TreeNode = {
|
|
23
|
+
label: string;
|
|
24
|
+
name: string;
|
|
25
|
+
children?: Array<TreeNode>;
|
|
26
|
+
isExpanded?: boolean;
|
|
27
|
+
parent?: TreeNode;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
type DropdownOption = {
|
|
31
|
+
id: string;
|
|
32
|
+
label: string;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
export type DocVersion = DropdownOption & {
|
|
36
|
+
releaseVersion: string;
|
|
37
|
+
url: string;
|
|
38
|
+
link?: {
|
|
39
|
+
href: string;
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export type DocLanguage = DropdownOption & {
|
|
44
|
+
code: string;
|
|
45
|
+
url: string;
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
export type ApiDocVersion = {
|
|
49
|
+
version_text: string;
|
|
50
|
+
release_version: string;
|
|
51
|
+
doc_version: string;
|
|
52
|
+
version_url: string;
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
export type ApiDocLanguage = {
|
|
56
|
+
code: string;
|
|
57
|
+
label: string;
|
|
58
|
+
locale: string;
|
|
59
|
+
url: string;
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
export interface Header extends Element {
|
|
63
|
+
subtitle: string;
|
|
64
|
+
headerHref: string;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export type SiderbarFooter = {
|
|
68
|
+
bailHref: string;
|
|
69
|
+
bailLabel: string;
|
|
70
|
+
languages: Array<DocLanguage>;
|
|
71
|
+
language?: string;
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
export type ApiNavItem = {
|
|
75
|
+
children: Array<ApiNavItem>;
|
|
76
|
+
text: string;
|
|
77
|
+
a_attr: {
|
|
78
|
+
href: string;
|
|
79
|
+
};
|
|
80
|
+
id: string;
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
export type ApiDocData = {
|
|
84
|
+
available_languages: Array<ApiDocLanguage>;
|
|
85
|
+
available_versions: Array<ApiDocVersion>;
|
|
86
|
+
content: string;
|
|
87
|
+
content_document_id: string;
|
|
88
|
+
deliverable: string;
|
|
89
|
+
doc_title: string;
|
|
90
|
+
language: ApiDocLanguage;
|
|
91
|
+
title: string;
|
|
92
|
+
toc: Array<ApiNavItem>;
|
|
93
|
+
version: ApiDocVersion;
|
|
94
|
+
pdf_url: string;
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
export type ContentData = {
|
|
98
|
+
content: string;
|
|
99
|
+
id: string;
|
|
100
|
+
title: string;
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
export type DocumentData = ContentData & {
|
|
104
|
+
availableLanguages: Array<DocLanguage>;
|
|
105
|
+
availableVersions: Array<DocVersion>;
|
|
106
|
+
deliverable: string;
|
|
107
|
+
docTitle: string;
|
|
108
|
+
language: DocLanguage;
|
|
109
|
+
toc: Array<TreeNode>;
|
|
110
|
+
tocMap: { [key: string]: TreeNode };
|
|
111
|
+
version: DocVersion;
|
|
112
|
+
pdfUrl: string;
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
export type ContentApiOptions = {
|
|
116
|
+
version: string;
|
|
117
|
+
language: string;
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
export type TocMap = { [key: string]: TreeNode };
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ApiDocData,
|
|
3
|
+
ApiDocLanguage,
|
|
4
|
+
ApiDocVersion,
|
|
5
|
+
ApiNavItem,
|
|
6
|
+
ContentApiOptions,
|
|
7
|
+
ContentData,
|
|
8
|
+
DocumentData,
|
|
9
|
+
DocLanguage,
|
|
10
|
+
DocVersion,
|
|
11
|
+
TreeNode,
|
|
12
|
+
TocMap
|
|
13
|
+
} from "./types";
|
|
14
|
+
import { Language } from "typings/custom";
|
|
15
|
+
import { getLanguageDisplayTextById } from "dxUtils/language";
|
|
16
|
+
|
|
17
|
+
export class FetchContent {
|
|
18
|
+
private apiDomain: string;
|
|
19
|
+
private languages: Array<Language> = [];
|
|
20
|
+
|
|
21
|
+
constructor(apiDomain: string, languages: Array<Language>) {
|
|
22
|
+
this.apiDomain = apiDomain;
|
|
23
|
+
this.languages = languages;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
async fetchDocumentData(docId: string): Promise<DocumentData | null> {
|
|
27
|
+
try {
|
|
28
|
+
const {
|
|
29
|
+
available_languages,
|
|
30
|
+
available_versions,
|
|
31
|
+
toc,
|
|
32
|
+
content,
|
|
33
|
+
version,
|
|
34
|
+
language,
|
|
35
|
+
content_document_id,
|
|
36
|
+
title,
|
|
37
|
+
doc_title,
|
|
38
|
+
pdf_url,
|
|
39
|
+
deliverable
|
|
40
|
+
} = await this.fetchResource<ApiDocData>(
|
|
41
|
+
`${this.apiDomain}/docs/get_document/${docId}`
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
const { normalizedToc, tocMap } = this.normalizeToc(toc);
|
|
45
|
+
return {
|
|
46
|
+
availableLanguages:
|
|
47
|
+
available_languages &&
|
|
48
|
+
available_languages.map(this.normalizeLanguage.bind(this)),
|
|
49
|
+
availableVersions:
|
|
50
|
+
available_versions &&
|
|
51
|
+
available_versions.map(this.normalizeVersion.bind(this)),
|
|
52
|
+
content,
|
|
53
|
+
version: this.normalizeVersion(version),
|
|
54
|
+
id: content_document_id,
|
|
55
|
+
language: this.normalizeLanguage(language),
|
|
56
|
+
title,
|
|
57
|
+
toc: normalizedToc,
|
|
58
|
+
tocMap,
|
|
59
|
+
docTitle: doc_title,
|
|
60
|
+
pdfUrl: pdf_url,
|
|
61
|
+
deliverable
|
|
62
|
+
};
|
|
63
|
+
} catch (error) {
|
|
64
|
+
console.log(error);
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
fetchContent(
|
|
70
|
+
deliverable: string,
|
|
71
|
+
contentId: string,
|
|
72
|
+
options: ContentApiOptions
|
|
73
|
+
): Promise<ContentData> {
|
|
74
|
+
return this.fetchResource<ContentData>(
|
|
75
|
+
`${this.apiDomain}/docs/get_document_content/${deliverable}/${contentId}/${options.language}/${options.version}`
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
private async fetchResource<T>(url: string): Promise<T> {
|
|
80
|
+
const response = await fetch(url);
|
|
81
|
+
if (!response.ok) {
|
|
82
|
+
throw new Error(response.statusText);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const json = await response.json();
|
|
86
|
+
|
|
87
|
+
return json;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
private normalizeToc(
|
|
91
|
+
apiToc: Array<ApiNavItem>
|
|
92
|
+
): {
|
|
93
|
+
tocMap: { [key: string]: TreeNode };
|
|
94
|
+
normalizedToc: Array<TreeNode>;
|
|
95
|
+
} {
|
|
96
|
+
const tocMap = {};
|
|
97
|
+
const normalizedToc =
|
|
98
|
+
apiToc &&
|
|
99
|
+
apiToc.map((navItem) => this.normalizeNavItem(navItem, tocMap));
|
|
100
|
+
|
|
101
|
+
return { normalizedToc, tocMap };
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
private normalizeNavItem(
|
|
105
|
+
navItem: ApiNavItem,
|
|
106
|
+
tocMap: TocMap,
|
|
107
|
+
parentNavItem?: TreeNode
|
|
108
|
+
): TreeNode {
|
|
109
|
+
const name = this.calculateNavItemName(navItem, tocMap);
|
|
110
|
+
const node: TreeNode = {
|
|
111
|
+
label: navItem.text,
|
|
112
|
+
name,
|
|
113
|
+
parent: parentNavItem
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
if (name) {
|
|
117
|
+
tocMap[name] = node;
|
|
118
|
+
}
|
|
119
|
+
node.children = navItem.children?.map((child) =>
|
|
120
|
+
this.normalizeNavItem(child, tocMap, node)
|
|
121
|
+
);
|
|
122
|
+
return node;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
private calculateNavItemName(navItem: ApiNavItem, tocMap: TocMap): string {
|
|
126
|
+
let href = navItem.a_attr?.href || "";
|
|
127
|
+
if (href.includes("#")) {
|
|
128
|
+
const [pathUrl] = href.split("#");
|
|
129
|
+
href = pathUrl in tocMap ? href : pathUrl;
|
|
130
|
+
}
|
|
131
|
+
return href || navItem.id;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
private normalizeVersion(version: ApiDocVersion): DocVersion {
|
|
135
|
+
return (
|
|
136
|
+
version && {
|
|
137
|
+
label: version.version_text,
|
|
138
|
+
releaseVersion:
|
|
139
|
+
version.release_version &&
|
|
140
|
+
!version.release_version.startsWith("v")
|
|
141
|
+
? `v${version.release_version}`
|
|
142
|
+
: version.release_version,
|
|
143
|
+
id: version.doc_version,
|
|
144
|
+
url: version.version_url
|
|
145
|
+
}
|
|
146
|
+
);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
private normalizeLanguage(language: ApiDocLanguage): DocLanguage {
|
|
150
|
+
return (
|
|
151
|
+
language && {
|
|
152
|
+
label:
|
|
153
|
+
getLanguageDisplayTextById(
|
|
154
|
+
this.languages,
|
|
155
|
+
language.locale
|
|
156
|
+
) || language.label,
|
|
157
|
+
id: language.locale,
|
|
158
|
+
code: language.code,
|
|
159
|
+
url: language.url
|
|
160
|
+
}
|
|
161
|
+
);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
:host {
|
|
2
|
+
--button-primary-color: var(--dx-g-blue-vibrant-50);
|
|
3
|
+
--button-primary-color-hover: var(--dx-g-blue-vibrant-40);
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
doc-content-layout {
|
|
7
|
+
--dx-c-content-sidebar-sticky-top: var(--dx-g-global-header-height);
|
|
8
|
+
--dx-c-sidebar-height: calc(100vh - var(--dx-g-global-header-height));
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
doc-breadcrumbs {
|
|
12
|
+
--dx-c-popover-z-index: 5;
|
|
13
|
+
|
|
14
|
+
display: block;
|
|
15
|
+
margin-bottom: var(--dx-g-spacing-md);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
dx-dropdown {
|
|
19
|
+
--dx-c-dropdown-option-font-size: var(--dx-g-text-sm);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
dx-dropdown > dx-button {
|
|
23
|
+
--dx-c-button-primary-color: var(--button-primary-color);
|
|
24
|
+
--dx-c-button-primary-color-hover: var(--button-primary-color-hover);
|
|
25
|
+
--border-color: var(--button-primary-color);
|
|
26
|
+
|
|
27
|
+
border-bottom: 1px dashed var(--border-color);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
dx-dropdown > dx-button:hover {
|
|
31
|
+
--border-color: var(--button-primary-color-hover);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
doc-phase {
|
|
35
|
+
--doc-c-phase-top: var(--dx-g-global-header-height);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
@media screen and (max-width: 768px) {
|
|
39
|
+
doc-content-layout {
|
|
40
|
+
--dx-g-doc-header-main-nav-height: 41px;
|
|
41
|
+
--dx-g-doc-header-height: calc(
|
|
42
|
+
var(--dx-g-doc-header-main-nav-height) + 40px
|
|
43
|
+
);
|
|
44
|
+
--dx-c-content-sidebar-sticky-top: calc(
|
|
45
|
+
var(--dx-g-global-header-height) + var(--dx-g-doc-header-height)
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
doc-phase {
|
|
50
|
+
--doc-c-phase-top: calc(
|
|
51
|
+
var(--dx-g-global-header-height) + var(--dx-g-doc-header-height)
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<doc-content-layout
|
|
3
|
+
lwc:if={loaded}
|
|
4
|
+
lwc:ref="docContentLayout"
|
|
5
|
+
coveo-organization-id={coveoOrganizationId}
|
|
6
|
+
coveo-public-access-token={coveoPublicAccessToken}
|
|
7
|
+
coveo-analytics-token={coveoAnalyticsToken}
|
|
8
|
+
coveo-search-hub={coveoSearchHub}
|
|
9
|
+
coveo-advanced-query-config={coveoAdvancedQueryConfig}
|
|
10
|
+
sidebar-header={docTitle}
|
|
11
|
+
sidebar-content={sidebarContent}
|
|
12
|
+
sidebar-value={sidebarValue}
|
|
13
|
+
onselect={handleSelect}
|
|
14
|
+
use-old-sidebar={useOldSidebar}
|
|
15
|
+
onlangchange={handleLanguageChange}
|
|
16
|
+
languages={sidebarFooterContent.languages}
|
|
17
|
+
language={sidebarFooterContent.language}
|
|
18
|
+
bail-href={sidebarFooterContent.bailHref}
|
|
19
|
+
bail-label={sidebarFooterContent.bailLabel}
|
|
20
|
+
show-footer={enableFooter}
|
|
21
|
+
>
|
|
22
|
+
<doc-phase
|
|
23
|
+
slot="version-banner"
|
|
24
|
+
lwc:if={showVersionBanner}
|
|
25
|
+
doc-phase-info={oldVersionInfo}
|
|
26
|
+
icon-name="warning"
|
|
27
|
+
dismissible="true"
|
|
28
|
+
ondismissphase={handleDismissVersionBanner}
|
|
29
|
+
></doc-phase>
|
|
30
|
+
<div lwc:if={showVersionPicker} slot="sidebar-header">
|
|
31
|
+
<doc-version-picker
|
|
32
|
+
data-type="version"
|
|
33
|
+
analytics-event="custEv_ctaLinkClick"
|
|
34
|
+
analytics-payload={ANALYTICS_PAYLOAD}
|
|
35
|
+
versions={versionOptions}
|
|
36
|
+
selected-version={version}
|
|
37
|
+
latest-version={latestVersion}
|
|
38
|
+
hide-badge={previewVersion}
|
|
39
|
+
></doc-version-picker>
|
|
40
|
+
</div>
|
|
41
|
+
<doc-breadcrumbs
|
|
42
|
+
lwc:if={showBreadcrumbs}
|
|
43
|
+
breadcrumbs={breadcrumbs}
|
|
44
|
+
pixel-per-character={breadcrumbPixelPerCharacter}
|
|
45
|
+
></doc-breadcrumbs>
|
|
46
|
+
<doc-content
|
|
47
|
+
docs-data={docContent}
|
|
48
|
+
page-reference={pageReference}
|
|
49
|
+
onnavclick={handleNavClick}
|
|
50
|
+
></doc-content>
|
|
51
|
+
</doc-content-layout>
|
|
52
|
+
</template>
|