@salesforcedevs/docs-components 0.57.0-alpha-1 → 0.57.1-callout-fix2
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 +1 -1
- package/src/modules/doc/breadcrumbItem/breadcrumbItem.css +1 -2
- package/src/modules/doc/breadcrumbs/breadcrumbs.css +0 -2
- package/src/modules/doc/breadcrumbs/breadcrumbs.html +1 -1
- package/src/modules/doc/breadcrumbs/breadcrumbs.ts +6 -31
- package/src/modules/doc/content/content.ts +2 -2
- package/src/modules/doc/contentLayout/contentLayout.css +5 -1
- package/src/modules/doc/contentLayout/contentLayout.html +9 -2
- package/src/modules/doc/xmlContent/types.ts +0 -3
- package/src/modules/doc/xmlContent/utils.ts +11 -14
- package/src/modules/doc/xmlContent/xmlContent.css +0 -5
- package/src/modules/doc/xmlContent/xmlContent.html +0 -5
- package/src/modules/doc/xmlContent/xmlContent.ts +15 -64
package/package.json
CHANGED
|
@@ -4,13 +4,12 @@
|
|
|
4
4
|
:host {
|
|
5
5
|
display: flex;
|
|
6
6
|
align-items: center;
|
|
7
|
-
justify-content: center;
|
|
8
7
|
width: fit-content;
|
|
9
8
|
}
|
|
10
9
|
|
|
11
10
|
:host(.breadcrumb_long) {
|
|
12
11
|
/* ensure 30 character min-width */
|
|
13
|
-
min-width:
|
|
12
|
+
min-width: 245px;
|
|
14
13
|
}
|
|
15
14
|
|
|
16
15
|
:host(.breadcrumb_back-arrow) {
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
analytics-event={analyticsEventName}
|
|
37
37
|
analytics-base-payload={analyticsBasePayload}
|
|
38
38
|
href={breadcrumb.href}
|
|
39
|
-
key={breadcrumb.
|
|
39
|
+
key={breadcrumb.label}
|
|
40
40
|
label={breadcrumb.label}
|
|
41
41
|
></doc-breadcrumb-item>
|
|
42
42
|
<span class="breadcrumb-item_slash" key={breadcrumb.label}>
|
|
@@ -8,12 +8,10 @@ type BreadcrumbConfig = {
|
|
|
8
8
|
};
|
|
9
9
|
|
|
10
10
|
const GAP = 8;
|
|
11
|
-
|
|
12
|
-
// Unit in pixels based on Salesforce Sans font-family.
|
|
13
11
|
const CONSTANTS = {
|
|
14
|
-
pixelPerCharacter: 7.
|
|
15
|
-
pixelPerCrumbSpace: GAP * 2 +
|
|
16
|
-
minWidthPerCrumb:
|
|
12
|
+
pixelPerCharacter: 7.2,
|
|
13
|
+
pixelPerCrumbSpace: GAP * 2 + 4.6,
|
|
14
|
+
minWidthPerCrumb: 245,
|
|
17
15
|
dropdownWidth: 32
|
|
18
16
|
};
|
|
19
17
|
|
|
@@ -31,26 +29,15 @@ export default class Breadcrumbs extends LightningElement {
|
|
|
31
29
|
get breadcrumbs(): Breadcrumb[] {
|
|
32
30
|
return this._breadcrumbs;
|
|
33
31
|
}
|
|
34
|
-
|
|
35
32
|
set breadcrumbs(value) {
|
|
36
|
-
this.
|
|
33
|
+
this._breadcrumbs = toJson(value) || [];
|
|
37
34
|
this.calculateBreadcrumbsConfigs();
|
|
38
35
|
if (this.observer) {
|
|
39
36
|
this.updateDropdownOptionAmount();
|
|
40
37
|
}
|
|
41
38
|
}
|
|
42
39
|
|
|
43
|
-
@api
|
|
44
|
-
get pixelPerCharacter(): number {
|
|
45
|
-
return this._pixelPerCharacter;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
set pixelPerCharacter(value: number | string) {
|
|
49
|
-
this._pixelPerCharacter = +value;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
40
|
private _breadcrumbs: Breadcrumb[] = [];
|
|
53
|
-
private _pixelPerCharacter = CONSTANTS.pixelPerCharacter;
|
|
54
41
|
private navWidth = 0;
|
|
55
42
|
private observer: ResizeObserver | null = null;
|
|
56
43
|
private breadcrumbConfigs: BreadcrumbConfig[] = [];
|
|
@@ -85,7 +72,7 @@ export default class Breadcrumbs extends LightningElement {
|
|
|
85
72
|
private get dropdownOptions(): OptionWithLink[] {
|
|
86
73
|
return this.breadcrumbs!.slice(1, this.dropdownOptionAmount! + 1).map(
|
|
87
74
|
(link) => ({
|
|
88
|
-
id: link.
|
|
75
|
+
id: link.href!,
|
|
89
76
|
label: link.label,
|
|
90
77
|
link: { href: link.href! }
|
|
91
78
|
})
|
|
@@ -131,17 +118,6 @@ export default class Breadcrumbs extends LightningElement {
|
|
|
131
118
|
this.observer?.disconnect();
|
|
132
119
|
}
|
|
133
120
|
|
|
134
|
-
private normalizeAndAssignBreadcrumbs(breadcrumbs?: Breadcrumb[] | string) {
|
|
135
|
-
if (!breadcrumbs) {
|
|
136
|
-
return;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
this._breadcrumbs = toJson(breadcrumbs).map((crumb: Breadcrumb) => ({
|
|
140
|
-
...crumb,
|
|
141
|
-
id: crumb.id || crumb.href
|
|
142
|
-
}));
|
|
143
|
-
}
|
|
144
|
-
|
|
145
121
|
private updateDropdownOptionAmount(): void {
|
|
146
122
|
this.dropdownOptionAmount = this.breadcrumbConfigs.find(
|
|
147
123
|
({ minWidth }) => minWidth <= this.navWidth
|
|
@@ -174,8 +150,7 @@ export default class Breadcrumbs extends LightningElement {
|
|
|
174
150
|
(previousValue, element) =>
|
|
175
151
|
previousValue +
|
|
176
152
|
Math.min(
|
|
177
|
-
element.label.length *
|
|
178
|
-
(this.pixelPerCharacter || CONSTANTS.pixelPerCharacter),
|
|
153
|
+
element.label.length * CONSTANTS.pixelPerCharacter,
|
|
179
154
|
CONSTANTS.minWidthPerCrumb
|
|
180
155
|
),
|
|
181
156
|
(breadcrumbs.length - 1) * CONSTANTS.pixelPerCrumbSpace + offset
|
|
@@ -150,7 +150,7 @@ export default class Content extends LightningElement {
|
|
|
150
150
|
is: ContentCallout
|
|
151
151
|
});
|
|
152
152
|
const detailEls = calloutEl.querySelectorAll(
|
|
153
|
-
"p, div.data, ol, ul, p+.codeSection, .mediaBd > span.ph"
|
|
153
|
+
"p, .p, div.data, ol, ul, p+.codeSection, p~.codeSection, div >.codeSection, .mediaBd > span.ph"
|
|
154
154
|
);
|
|
155
155
|
detailEls.forEach((detailEl) => {
|
|
156
156
|
if (detailEl.innerHTML.trim() !== "") {
|
|
@@ -159,7 +159,7 @@ export default class Content extends LightningElement {
|
|
|
159
159
|
});
|
|
160
160
|
|
|
161
161
|
let flag = 1;
|
|
162
|
-
for (let i = 0; i < detailEls.length; i++) {
|
|
162
|
+
for (let i: number = 0; i < detailEls.length; i++) {
|
|
163
163
|
flag &= detailEls[i].innerHTML.trim() === "";
|
|
164
164
|
}
|
|
165
165
|
|
|
@@ -56,7 +56,7 @@ dx-toc {
|
|
|
56
56
|
max-width: 275px;
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
-
|
|
59
|
+
dx-breadcrumbs {
|
|
60
60
|
display: block;
|
|
61
61
|
margin-bottom: var(--dx-g-spacing-2xl);
|
|
62
62
|
}
|
|
@@ -68,6 +68,10 @@ doc-breadcrumbs {
|
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
@media screen and (max-width: 800px) {
|
|
71
|
+
dx-breadcrumbs {
|
|
72
|
+
display: none;
|
|
73
|
+
}
|
|
74
|
+
|
|
71
75
|
.content-body {
|
|
72
76
|
margin-top: var(--dx-c-content-vertical-spacing);
|
|
73
77
|
}
|
|
@@ -28,10 +28,17 @@
|
|
|
28
28
|
<slot name="doc-phase"></slot>
|
|
29
29
|
<div class="content-body-container">
|
|
30
30
|
<div class="content-body">
|
|
31
|
-
<
|
|
31
|
+
<dx-breadcrumbs
|
|
32
32
|
if:true={breadcrumbs}
|
|
33
33
|
breadcrumbs={breadcrumbs}
|
|
34
|
-
|
|
34
|
+
truncate
|
|
35
|
+
hide-current-location
|
|
36
|
+
></dx-breadcrumbs>
|
|
37
|
+
<dx-breadcrumbs
|
|
38
|
+
if:false={breadcrumbs}
|
|
39
|
+
pathname={pathname}
|
|
40
|
+
hide-current-location
|
|
41
|
+
></dx-breadcrumbs>
|
|
35
42
|
<slot onslotchange={onSlotChange}></slot>
|
|
36
43
|
</div>
|
|
37
44
|
<div class="right-nav-bar is-sticky">
|
|
@@ -24,7 +24,6 @@ export type TreeNode = {
|
|
|
24
24
|
name: string;
|
|
25
25
|
children?: Array<TreeNode>;
|
|
26
26
|
isExpanded?: boolean;
|
|
27
|
-
parent?: TreeNode;
|
|
28
27
|
};
|
|
29
28
|
|
|
30
29
|
type DropdownOption = {
|
|
@@ -110,5 +109,3 @@ export type ContentApiOptions = {
|
|
|
110
109
|
version: string;
|
|
111
110
|
language: string;
|
|
112
111
|
};
|
|
113
|
-
|
|
114
|
-
export type TocMap = { [key: string]: TreeNode };
|
|
@@ -8,8 +8,7 @@ import {
|
|
|
8
8
|
DocumentData,
|
|
9
9
|
DocLanguage,
|
|
10
10
|
DocVersion,
|
|
11
|
-
TreeNode
|
|
12
|
-
TocMap
|
|
11
|
+
TreeNode
|
|
13
12
|
} from "./types";
|
|
14
13
|
import { Language } from "typings/custom";
|
|
15
14
|
import { getLanguageDisplayTextById } from "dxUtils/language";
|
|
@@ -101,26 +100,26 @@ export class FetchContent {
|
|
|
101
100
|
|
|
102
101
|
private normalizeNavItem(
|
|
103
102
|
navItem: ApiNavItem,
|
|
104
|
-
tocMap:
|
|
105
|
-
parentNavItem?: TreeNode
|
|
103
|
+
tocMap: { [key: string]: TreeNode }
|
|
106
104
|
): TreeNode {
|
|
107
105
|
const name = this.calculateNavItemName(navItem, tocMap);
|
|
108
106
|
const node: TreeNode = {
|
|
109
107
|
label: navItem.text,
|
|
110
|
-
name
|
|
111
|
-
parent: parentNavItem
|
|
108
|
+
name
|
|
112
109
|
};
|
|
113
|
-
|
|
114
110
|
if (name) {
|
|
115
111
|
tocMap[name] = node;
|
|
116
112
|
}
|
|
117
113
|
node.children = navItem.children?.map((child) =>
|
|
118
|
-
this.normalizeNavItem(child, tocMap
|
|
114
|
+
this.normalizeNavItem(child, tocMap)
|
|
119
115
|
);
|
|
120
116
|
return node;
|
|
121
117
|
}
|
|
122
118
|
|
|
123
|
-
private calculateNavItemName(
|
|
119
|
+
private calculateNavItemName(
|
|
120
|
+
navItem: ApiNavItem,
|
|
121
|
+
tocMap: { [key: string]: TreeNode }
|
|
122
|
+
): string {
|
|
124
123
|
let href = navItem.a_attr?.href || "";
|
|
125
124
|
if (href.includes("#")) {
|
|
126
125
|
const [pathUrl] = href.split("#");
|
|
@@ -145,13 +144,11 @@ export class FetchContent {
|
|
|
145
144
|
}
|
|
146
145
|
|
|
147
146
|
private normalizeLanguage(language: ApiDocLanguage): DocLanguage {
|
|
147
|
+
|
|
148
148
|
return (
|
|
149
149
|
language && {
|
|
150
|
-
label:
|
|
151
|
-
|
|
152
|
-
this.languages,
|
|
153
|
-
language.locale
|
|
154
|
-
) || language.label,
|
|
150
|
+
label: getLanguageDisplayTextById(this.languages, language.locale) ||
|
|
151
|
+
language.label,
|
|
155
152
|
id: language.locale,
|
|
156
153
|
code: language.code,
|
|
157
154
|
url: language.url
|
|
@@ -25,11 +25,6 @@
|
|
|
25
25
|
</dx-button>
|
|
26
26
|
</dx-dropdown>
|
|
27
27
|
</div>
|
|
28
|
-
<doc-breadcrumbs
|
|
29
|
-
if:true={breadcrumbs}
|
|
30
|
-
breadcrumbs={breadcrumbs}
|
|
31
|
-
pixel-per-character={breadcrumbPixelPerCharacter}
|
|
32
|
-
></doc-breadcrumbs>
|
|
33
28
|
<doc-content
|
|
34
29
|
docs-data={docContent}
|
|
35
30
|
page-reference={pageReference}
|
|
@@ -8,26 +8,15 @@ import {
|
|
|
8
8
|
TreeNode,
|
|
9
9
|
Header,
|
|
10
10
|
HistoryState,
|
|
11
|
-
PageReference
|
|
12
|
-
TocMap
|
|
11
|
+
PageReference
|
|
13
12
|
} from "./types";
|
|
14
13
|
import { SearchSyncer } from "docUtils/SearchSyncer";
|
|
15
14
|
import { LightningElementWithState } from "docBaseElements/lightningElementWithState";
|
|
16
|
-
import {
|
|
15
|
+
import { Language } from "typings/custom";
|
|
17
16
|
|
|
18
17
|
// TODO: Imitating from actual implementation as doc-content use it like this. We should refactor it later.
|
|
19
18
|
const handleContentError = (error): void => console.log(error);
|
|
20
19
|
|
|
21
|
-
const FIRST_CRUMB = {
|
|
22
|
-
href: "/docs",
|
|
23
|
-
label: "Documentation"
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
const PIXEL_PER_CHARACTER_MAP: { [key: string]: number } = {
|
|
27
|
-
default: 7.7,
|
|
28
|
-
"ja-jp": 12.5
|
|
29
|
-
};
|
|
30
|
-
|
|
31
20
|
export default class DocXmlContent extends LightningElementWithState<{
|
|
32
21
|
isFetchingDocument: boolean;
|
|
33
22
|
isFetchingContent: boolean;
|
|
@@ -64,7 +53,7 @@ export default class DocXmlContent extends LightningElementWithState<{
|
|
|
64
53
|
private language: DocLanguage = null;
|
|
65
54
|
private loaded = false;
|
|
66
55
|
private pdfUrl = "";
|
|
67
|
-
private tocMap
|
|
56
|
+
private tocMap = null;
|
|
68
57
|
private sidebarContent: Array<TreeNode> = null;
|
|
69
58
|
private version: DocVersion = null;
|
|
70
59
|
private docTitle = "";
|
|
@@ -113,7 +102,6 @@ export default class DocXmlContent extends LightningElementWithState<{
|
|
|
113
102
|
private _allLanguages: Array<Language> = [];
|
|
114
103
|
|
|
115
104
|
@track private pageReference: PageReference = {};
|
|
116
|
-
@track breadcrumbs: Array<Breadcrumb> = [];
|
|
117
105
|
|
|
118
106
|
constructor() {
|
|
119
107
|
super();
|
|
@@ -279,13 +267,6 @@ export default class DocXmlContent extends LightningElementWithState<{
|
|
|
279
267
|
}));
|
|
280
268
|
}
|
|
281
269
|
|
|
282
|
-
private get breadcrumbPixelPerCharacter() {
|
|
283
|
-
return (
|
|
284
|
-
PIXEL_PER_CHARACTER_MAP[this.language.id] ||
|
|
285
|
-
PIXEL_PER_CHARACTER_MAP.default
|
|
286
|
-
);
|
|
287
|
-
}
|
|
288
|
-
|
|
289
270
|
private handlePopState = (): void =>
|
|
290
271
|
this.updatePageReference(this.getReferenceFromUrl());
|
|
291
272
|
|
|
@@ -299,15 +280,15 @@ export default class DocXmlContent extends LightningElementWithState<{
|
|
|
299
280
|
|
|
300
281
|
if (name) {
|
|
301
282
|
const hashIndex = name.indexOf("#");
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
this.
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
283
|
+
this.pageReference.hash =
|
|
284
|
+
hashIndex > -1 ? name.slice(hashIndex) : "";
|
|
285
|
+
|
|
286
|
+
const contentId = hashIndex > -1 ? name.slice(0, hashIndex) : name;
|
|
287
|
+
if (this.pageReference.contentDocumentId !== contentId) {
|
|
288
|
+
this.pageReference.contentDocumentId = contentId;
|
|
289
|
+
this.fetchContent().catch(handleContentError);
|
|
290
|
+
}
|
|
291
|
+
|
|
311
292
|
this.updateUrl();
|
|
312
293
|
}
|
|
313
294
|
}
|
|
@@ -340,17 +321,15 @@ export default class DocXmlContent extends LightningElementWithState<{
|
|
|
340
321
|
return;
|
|
341
322
|
}
|
|
342
323
|
|
|
343
|
-
const isSameDocId = this.pageReference.docId
|
|
324
|
+
const isSameDocId = this.pageReference.docId !== newPageReference.docId;
|
|
344
325
|
this.pageReference = newPageReference;
|
|
345
326
|
|
|
346
|
-
if (
|
|
327
|
+
if (isSameDocId) {
|
|
347
328
|
this.fetchDocument();
|
|
348
329
|
return;
|
|
349
330
|
}
|
|
350
331
|
|
|
351
|
-
this.fetchContent()
|
|
352
|
-
.then(() => this.buildBreadcrumbs())
|
|
353
|
-
.catch(handleContentError);
|
|
332
|
+
this.fetchContent().catch(handleContentError);
|
|
354
333
|
}
|
|
355
334
|
|
|
356
335
|
getReferenceFromUrl(): PageReference {
|
|
@@ -407,8 +386,6 @@ export default class DocXmlContent extends LightningElementWithState<{
|
|
|
407
386
|
|
|
408
387
|
this.updateHeader();
|
|
409
388
|
|
|
410
|
-
this.buildBreadcrumbs();
|
|
411
|
-
|
|
412
389
|
if (this.pageReference.deliverable !== data.deliverable) {
|
|
413
390
|
this.pageReference.deliverable = data.deliverable;
|
|
414
391
|
this.updateUrl(HistoryState.REPLACE_STATE);
|
|
@@ -581,32 +558,6 @@ export default class DocXmlContent extends LightningElementWithState<{
|
|
|
581
558
|
);
|
|
582
559
|
}
|
|
583
560
|
|
|
584
|
-
private buildBreadcrumbs(): void {
|
|
585
|
-
const { contentDocumentId } = this.pageReference;
|
|
586
|
-
if (!contentDocumentId) {
|
|
587
|
-
return;
|
|
588
|
-
}
|
|
589
|
-
|
|
590
|
-
const currentNode = this.tocMap[contentDocumentId];
|
|
591
|
-
this.breadcrumbs = this.nodeToBreadcrumb(currentNode);
|
|
592
|
-
}
|
|
593
|
-
|
|
594
|
-
private nodeToBreadcrumb(node?: TreeNode): Breadcrumb[] {
|
|
595
|
-
if (!node) {
|
|
596
|
-
return [FIRST_CRUMB];
|
|
597
|
-
}
|
|
598
|
-
return [
|
|
599
|
-
...this.nodeToBreadcrumb(node.parent),
|
|
600
|
-
{
|
|
601
|
-
href: this.pageReferenceToString({
|
|
602
|
-
...this.pageReference,
|
|
603
|
-
contentDocumentId: node.name
|
|
604
|
-
}),
|
|
605
|
-
label: node.label
|
|
606
|
-
}
|
|
607
|
-
];
|
|
608
|
-
}
|
|
609
|
-
|
|
610
561
|
addMetatags(): void {
|
|
611
562
|
const div = document.createElement("div");
|
|
612
563
|
div.innerHTML = this.docContent;
|