@salesforcedevs/docs-components 0.3.12 → 0.3.14-banner-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 +12 -3
- package/package.json +17 -7
- package/src/modules/README.md +41 -0
- package/src/modules/doc/amfReference/amfReference.css +5 -0
- package/src/modules/doc/amfReference/amfReference.html +47 -0
- package/src/modules/doc/amfReference/amfReference.ts +1361 -0
- package/src/modules/doc/amfReference/constants.ts +76 -0
- package/src/modules/doc/amfReference/types.ts +133 -0
- package/src/modules/doc/amfReference/utils.ts +669 -0
- package/src/modules/doc/amfTopic/amfTopic.css +1 -0
- package/src/modules/doc/amfTopic/amfTopic.html +3 -0
- package/src/modules/doc/amfTopic/amfTopic.ts +94 -0
- package/src/modules/doc/amfTopic/types.ts +54 -0
- package/src/modules/doc/amfTopic/utils.ts +130 -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 +64 -0
- package/src/modules/doc/breadcrumbs/breadcrumbs.css +27 -0
- package/src/modules/doc/breadcrumbs/breadcrumbs.html +60 -0
- package/src/modules/doc/breadcrumbs/breadcrumbs.ts +187 -0
- package/src/modules/doc/content/content.css +58 -103
- package/src/modules/doc/content/content.ts +261 -174
- package/src/modules/doc/contentCallout/contentCallout.css +7 -24
- package/src/modules/doc/contentCallout/contentCallout.html +4 -2
- package/src/modules/doc/contentCallout/contentCallout.ts +8 -2
- package/src/modules/doc/contentLayout/contentLayout.css +98 -0
- package/src/modules/doc/contentLayout/contentLayout.html +51 -0
- package/src/modules/doc/contentLayout/contentLayout.ts +322 -0
- package/src/modules/doc/header/header.css +103 -0
- package/src/modules/doc/header/header.html +160 -0
- package/src/modules/doc/header/header.ts +146 -0
- package/src/modules/doc/heading/heading.css +54 -0
- package/src/modules/doc/heading/heading.html +14 -0
- package/src/modules/doc/heading/heading.ts +65 -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/phase/phase.css +55 -0
- package/src/modules/doc/phase/phase.html +28 -0
- package/src/modules/doc/phase/phase.ts +57 -0
- package/src/modules/doc/sprigSurvey/sprigSurvey.html +20 -0
- package/src/modules/doc/sprigSurvey/sprigSurvey.scoped.css +12 -0
- package/src/modules/doc/sprigSurvey/sprigSurvey.ts +16 -0
- package/src/modules/doc/toc/toc.html +3 -1
- package/src/modules/doc/toolbar/toolbar.ts +6 -6
- package/src/modules/doc/xmlContent/types.ts +114 -0
- package/src/modules/doc/xmlContent/utils.ts +161 -0
- package/src/modules/doc/xmlContent/xmlContent.css +32 -0
- package/src/modules/doc/xmlContent/xmlContent.html +40 -0
- package/src/modules/doc/xmlContent/xmlContent.ts +677 -0
- package/src/modules/docBaseElements/lightningElementWithState/lightningElementWithState.ts +93 -0
- package/src/modules/docHelpers/amfStyle/amfStyle.css +355 -0
- package/src/modules/docHelpers/phaseContentLayout/phaseContentLayout.css +39 -0
- package/src/modules/docHelpers/status/status.css +22 -0
- package/src/modules/docUtils/SearchSyncer/SearchSyncer.ts +85 -0
- package/LICENSE +0 -12
- package/src/modules/doc/container/__benchmarks__/container.benchmark.js +0 -43
- package/src/modules/doc/container/__mocks__/mockAvailableLanguages.js +0 -8
- package/src/modules/doc/container/__mocks__/mockAvailableVersions.js +0 -122
- package/src/modules/doc/container/__mocks__/mockContentFetchResponse.json +0 -5
- package/src/modules/doc/container/__mocks__/mockDocContent.js +0 -29
- package/src/modules/doc/container/__mocks__/mockNavigationFetchResponse.json +0 -4061
- package/src/modules/doc/container/__mocks__/mockPageReference.js +0 -8
- package/src/modules/doc/container/__mocks__/mockPdfUrl.js +0 -1
- package/src/modules/doc/container/__mocks__/mockSelectedLanguage.js +0 -8
- package/src/modules/doc/container/__mocks__/mockSelectedVersion.js +0 -8
- package/src/modules/doc/container/__mocks__/mockToc.js +0 -146
- package/src/modules/doc/container/__tests__/container.test.ts +0 -117
- package/src/modules/doc/container/container.css +0 -37
- package/src/modules/doc/container/container.html +0 -28
- package/src/modules/doc/container/container.stories.ts +0 -44
- package/src/modules/doc/container/container.ts +0 -367
- package/src/modules/doc/content/__tests__/content.test.ts +0 -99
- package/src/modules/doc/content/__tests__/mockDocContent.ts +0 -258
- package/src/modules/doc/content/__tests__/mockPageReference.ts +0 -8
- package/src/modules/doc/content/content.stories.ts +0 -82
- 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/landing/__tests__/landing.test.ts +0 -60
- package/src/modules/doc/landing/__tests__/mockFetch.json +0 -370
- package/src/modules/doc/landing/landing.css +0 -63
- package/src/modules/doc/landing/landing.html +0 -122
- package/src/modules/doc/landing/landing.stories.ts +0 -21
- package/src/modules/doc/landing/landing.ts +0 -222
- 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,28 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class={className} part="container">
|
|
3
|
+
<div class="doc-phase-title-container">
|
|
4
|
+
<dx-icon
|
|
5
|
+
class="doc-status-icon doc-phase-icon"
|
|
6
|
+
symbol="recipe"
|
|
7
|
+
size="large"
|
|
8
|
+
color="status-icon-color"
|
|
9
|
+
></dx-icon>
|
|
10
|
+
<p class="doc-status-title doc-phase-title dx-text-body-3">
|
|
11
|
+
{docPhaseTitle}
|
|
12
|
+
</p>
|
|
13
|
+
<dx-button
|
|
14
|
+
variant="inline"
|
|
15
|
+
onclick={onButtonClick}
|
|
16
|
+
aria-label={hideBodyText}
|
|
17
|
+
>
|
|
18
|
+
{hideBodyText}
|
|
19
|
+
</dx-button>
|
|
20
|
+
</div>
|
|
21
|
+
<!--
|
|
22
|
+
NOTE: Here we are rendering mark up using lwc:dom & innerHTML
|
|
23
|
+
option instead of slots because the html markup will come as a
|
|
24
|
+
property to the component from a configuration
|
|
25
|
+
-->
|
|
26
|
+
<span lwc:dom="manual" class={bodyClassName}></span>
|
|
27
|
+
</div>
|
|
28
|
+
</template>
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { LightningElement, api } from "lwc";
|
|
2
|
+
import cx from "classnames";
|
|
3
|
+
|
|
4
|
+
import { DocPhaseInfo } from "typings/custom";
|
|
5
|
+
import { toJson } from "dxUtils/normalizers";
|
|
6
|
+
|
|
7
|
+
export default class Phase extends LightningElement {
|
|
8
|
+
_docPhaseInfo: DocPhaseInfo | null = null;
|
|
9
|
+
|
|
10
|
+
isBodyHidden = false;
|
|
11
|
+
|
|
12
|
+
get docPhaseTitle() {
|
|
13
|
+
return this.docPhaseInfo?.title;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
@api
|
|
17
|
+
get docPhaseInfo(): DocPhaseInfo | null {
|
|
18
|
+
return this._docPhaseInfo;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
set docPhaseInfo(value) {
|
|
22
|
+
this._docPhaseInfo = toJson(value);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
get hideBodyText() {
|
|
26
|
+
return this.isBodyHidden ? "Show" : "Hide";
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
get className() {
|
|
30
|
+
return cx(
|
|
31
|
+
"doc-status-base",
|
|
32
|
+
"doc-status-container",
|
|
33
|
+
"doc-phase-container"
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
get bodyClassName() {
|
|
38
|
+
return cx(
|
|
39
|
+
"doc-phase-body",
|
|
40
|
+
"dx-text-body-3",
|
|
41
|
+
this.isBodyHidden && "doc-phase-body-hidden"
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
renderedCallback() {
|
|
46
|
+
const phaseBodyContainer =
|
|
47
|
+
this.template.querySelector(".doc-phase-body");
|
|
48
|
+
if (phaseBodyContainer && this.docPhaseInfo) {
|
|
49
|
+
// eslint-disable-next-line @lwc/lwc/no-inner-html
|
|
50
|
+
phaseBodyContainer.innerHTML = this.docPhaseInfo.body;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
onButtonClick() {
|
|
55
|
+
this.isBodyHidden = !this.isBodyHidden;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<template lwc:render-mode="light">
|
|
2
|
+
<hr />
|
|
3
|
+
<div class="survey-container">
|
|
4
|
+
<div class="text-container">
|
|
5
|
+
<b>DID THIS ARTICLE SOLVE YOUR ISSUE?</b>
|
|
6
|
+
<br />
|
|
7
|
+
Let us know so we can improve!
|
|
8
|
+
</div>
|
|
9
|
+
<div class="btn-container">
|
|
10
|
+
<dx-button
|
|
11
|
+
variant="secondary"
|
|
12
|
+
aria-label="Share Your Feedback"
|
|
13
|
+
onclick={openSurvey}
|
|
14
|
+
>
|
|
15
|
+
Share your feedback
|
|
16
|
+
</dx-button>
|
|
17
|
+
</div>
|
|
18
|
+
</div>
|
|
19
|
+
<hr />
|
|
20
|
+
</template>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { LightningElement } from "lwc";
|
|
2
|
+
import cx from "classnames";
|
|
3
|
+
|
|
4
|
+
declare const Sprig: (eventType: string, eventNme: string) => void;
|
|
5
|
+
|
|
6
|
+
export default class Phase extends LightningElement {
|
|
7
|
+
static renderMode = "light";
|
|
8
|
+
|
|
9
|
+
get className() {
|
|
10
|
+
return cx("container");
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
openSurvey() {
|
|
14
|
+
Sprig("track", "ProvideFeedback");
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -40,9 +40,9 @@ export default class Toolbar extends LightningElement {
|
|
|
40
40
|
"select[name=languages]"
|
|
41
41
|
) as HTMLSelectElement;
|
|
42
42
|
if (languageEl) {
|
|
43
|
-
const languageValue = (
|
|
44
|
-
languageEl.selectedIndex
|
|
45
|
-
|
|
43
|
+
const languageValue = (
|
|
44
|
+
languageEl[languageEl.selectedIndex] as HTMLOptionElement
|
|
45
|
+
).value;
|
|
46
46
|
this.dispatchEvent(
|
|
47
47
|
new CustomEvent("languageselected", {
|
|
48
48
|
detail: {
|
|
@@ -61,9 +61,9 @@ export default class Toolbar extends LightningElement {
|
|
|
61
61
|
"select[name=versions]"
|
|
62
62
|
) as HTMLSelectElement;
|
|
63
63
|
if (versionEl) {
|
|
64
|
-
const versionValue = (
|
|
65
|
-
versionEl.selectedIndex
|
|
66
|
-
|
|
64
|
+
const versionValue = (
|
|
65
|
+
versionEl[versionEl.selectedIndex] as HTMLOptionElement
|
|
66
|
+
).value;
|
|
67
67
|
this.dispatchEvent(
|
|
68
68
|
new CustomEvent("versionselected", {
|
|
69
69
|
detail: {
|
|
@@ -0,0 +1,114 @@
|
|
|
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
|
+
};
|
|
39
|
+
|
|
40
|
+
export type DocLanguage = DropdownOption & {
|
|
41
|
+
code: string;
|
|
42
|
+
url: string;
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
export type ApiDocVersion = {
|
|
46
|
+
version_text: string;
|
|
47
|
+
release_version: string;
|
|
48
|
+
doc_version: string;
|
|
49
|
+
version_url: string;
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
export type ApiDocLanguage = {
|
|
53
|
+
code: string;
|
|
54
|
+
label: string;
|
|
55
|
+
locale: string;
|
|
56
|
+
url: string;
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
export interface Header extends Element {
|
|
60
|
+
subtitle: string;
|
|
61
|
+
bailHref: string;
|
|
62
|
+
bailLabel: string;
|
|
63
|
+
languages: Array<DocLanguage>;
|
|
64
|
+
language: string;
|
|
65
|
+
headerHref: string;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export type ApiNavItem = {
|
|
69
|
+
children: Array<ApiNavItem>;
|
|
70
|
+
text: string;
|
|
71
|
+
a_attr: {
|
|
72
|
+
href: string;
|
|
73
|
+
};
|
|
74
|
+
id: string;
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
export type ApiDocData = {
|
|
78
|
+
available_languages: Array<ApiDocLanguage>;
|
|
79
|
+
available_versions: Array<ApiDocVersion>;
|
|
80
|
+
content: string;
|
|
81
|
+
content_document_id: string;
|
|
82
|
+
deliverable: string;
|
|
83
|
+
doc_title: string;
|
|
84
|
+
language: ApiDocLanguage;
|
|
85
|
+
title: string;
|
|
86
|
+
toc: Array<ApiNavItem>;
|
|
87
|
+
version: ApiDocVersion;
|
|
88
|
+
pdf_url: string;
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
export type ContentData = {
|
|
92
|
+
content: string;
|
|
93
|
+
id: string;
|
|
94
|
+
title: string;
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
export type DocumentData = ContentData & {
|
|
98
|
+
availableLanguages: Array<DocLanguage>;
|
|
99
|
+
availableVersions: Array<DocVersion>;
|
|
100
|
+
deliverable: string;
|
|
101
|
+
docTitle: string;
|
|
102
|
+
language: DocLanguage;
|
|
103
|
+
toc: Array<TreeNode>;
|
|
104
|
+
tocMap: { [key: string]: TreeNode };
|
|
105
|
+
version: DocVersion;
|
|
106
|
+
pdfUrl: string;
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
export type ContentApiOptions = {
|
|
110
|
+
version: string;
|
|
111
|
+
language: string;
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
export type TocMap = { [key: string]: TreeNode };
|
|
@@ -0,0 +1,161 @@
|
|
|
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(apiToc: Array<ApiNavItem>): {
|
|
91
|
+
tocMap: { [key: string]: TreeNode };
|
|
92
|
+
normalizedToc: Array<TreeNode>;
|
|
93
|
+
} {
|
|
94
|
+
const tocMap = {};
|
|
95
|
+
const normalizedToc =
|
|
96
|
+
apiToc &&
|
|
97
|
+
apiToc.map((navItem) => this.normalizeNavItem(navItem, tocMap));
|
|
98
|
+
|
|
99
|
+
return { normalizedToc, tocMap };
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
private normalizeNavItem(
|
|
103
|
+
navItem: ApiNavItem,
|
|
104
|
+
tocMap: TocMap,
|
|
105
|
+
parentNavItem?: TreeNode
|
|
106
|
+
): TreeNode {
|
|
107
|
+
const name = this.calculateNavItemName(navItem, tocMap);
|
|
108
|
+
const node: TreeNode = {
|
|
109
|
+
label: navItem.text,
|
|
110
|
+
name,
|
|
111
|
+
parent: parentNavItem
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
if (name) {
|
|
115
|
+
tocMap[name] = node;
|
|
116
|
+
}
|
|
117
|
+
node.children = navItem.children?.map((child) =>
|
|
118
|
+
this.normalizeNavItem(child, tocMap, node)
|
|
119
|
+
);
|
|
120
|
+
return node;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
private calculateNavItemName(navItem: ApiNavItem, tocMap: TocMap): string {
|
|
124
|
+
let href = navItem.a_attr?.href || "";
|
|
125
|
+
if (href.includes("#")) {
|
|
126
|
+
const [pathUrl] = href.split("#");
|
|
127
|
+
href = pathUrl in tocMap ? href : pathUrl;
|
|
128
|
+
}
|
|
129
|
+
return href || navItem.id;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
private normalizeVersion(version: ApiDocVersion): DocVersion {
|
|
133
|
+
return (
|
|
134
|
+
version && {
|
|
135
|
+
label: version.version_text,
|
|
136
|
+
releaseVersion:
|
|
137
|
+
version.release_version &&
|
|
138
|
+
!version.release_version.startsWith("v")
|
|
139
|
+
? `v${version.release_version}`
|
|
140
|
+
: version.release_version,
|
|
141
|
+
id: version.doc_version,
|
|
142
|
+
url: version.version_url
|
|
143
|
+
}
|
|
144
|
+
);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
private normalizeLanguage(language: ApiDocLanguage): DocLanguage {
|
|
148
|
+
return (
|
|
149
|
+
language && {
|
|
150
|
+
label:
|
|
151
|
+
getLanguageDisplayTextById(
|
|
152
|
+
this.languages,
|
|
153
|
+
language.locale
|
|
154
|
+
) || language.label,
|
|
155
|
+
id: language.locale,
|
|
156
|
+
code: language.code,
|
|
157
|
+
url: language.url
|
|
158
|
+
}
|
|
159
|
+
);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
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-breadcrumbs {
|
|
7
|
+
--dx-c-popover-z-index: 5;
|
|
8
|
+
|
|
9
|
+
display: block;
|
|
10
|
+
margin-bottom: var(--dx-g-spacing-md);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
dx-dropdown {
|
|
14
|
+
--dx-c-dropdown-option-font-size: var(--dx-g-text-sm);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
dx-dropdown > dx-button {
|
|
18
|
+
--dx-c-button-primary-color: var(--button-primary-color);
|
|
19
|
+
--dx-c-button-primary-color-hover: var(--button-primary-color-hover);
|
|
20
|
+
--border-color: var(--button-primary-color);
|
|
21
|
+
|
|
22
|
+
border-bottom: 1px dashed var(--border-color);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
dx-dropdown > dx-button:hover {
|
|
26
|
+
--border-color: var(--button-primary-color-hover);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.document-pickers {
|
|
30
|
+
margin-left: auto;
|
|
31
|
+
margin-right: var(--dx-g-spacing-sm);
|
|
32
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<doc-content-layout
|
|
3
|
+
if:true={loaded}
|
|
4
|
+
coveo-organization-id={coveoOrganizationId}
|
|
5
|
+
coveo-public-access-token={coveoPublicAccessToken}
|
|
6
|
+
coveo-search-hub="Developer_Docs_SS"
|
|
7
|
+
coveo-advanced-query-config={coveoAdvancedQueryConfig}
|
|
8
|
+
sidebar-header="Pages"
|
|
9
|
+
sidebar-content={sidebarContent}
|
|
10
|
+
sidebar-value={sidebarValue}
|
|
11
|
+
onselect={handleSelect}
|
|
12
|
+
use-old-sidebar={useOldSidebar}
|
|
13
|
+
>
|
|
14
|
+
<div slot="sidebar-header" class="document-pickers">
|
|
15
|
+
<dx-dropdown
|
|
16
|
+
data-type="version"
|
|
17
|
+
suppress-gtm-nav-headings
|
|
18
|
+
analytics-event={analyticsEvent}
|
|
19
|
+
options={versionOptions}
|
|
20
|
+
value={version.id}
|
|
21
|
+
width="290px"
|
|
22
|
+
>
|
|
23
|
+
<dx-button variant="inline" disabled={disableVersion}>
|
|
24
|
+
{version.releaseVersion}
|
|
25
|
+
</dx-button>
|
|
26
|
+
</dx-dropdown>
|
|
27
|
+
</div>
|
|
28
|
+
<doc-breadcrumbs
|
|
29
|
+
if:true={showBreadcrumbs}
|
|
30
|
+
breadcrumbs={breadcrumbs}
|
|
31
|
+
pixel-per-character={breadcrumbPixelPerCharacter}
|
|
32
|
+
></doc-breadcrumbs>
|
|
33
|
+
<doc-content
|
|
34
|
+
docs-data={docContent}
|
|
35
|
+
page-reference={pageReference}
|
|
36
|
+
onnavclick={handleNavClick}
|
|
37
|
+
style={docContentStyle}
|
|
38
|
+
></doc-content>
|
|
39
|
+
</doc-content-layout>
|
|
40
|
+
</template>
|