Skip to content

Commit 8c8d530

Browse files
authored
feat(dgeni,daffio): implement ToC for package guide API symbols (#3440)
1 parent 037df47 commit 8c8d530

File tree

7 files changed

+37
-23
lines changed

7 files changed

+37
-23
lines changed

apps/daffio/src/app/docs/components/table-of-contents/table-of-contents.component.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@
33
On this page
44
</div>
55
<div class="daffio-docs-table-of-contents__links">
6-
<a *ngFor="let entry of tableOfContents"class="daffio-docs-table-of-contents__item daffio-docs-table-of-contents__item--level-{{entry.lvl}}" routerLink="./" [fragment]="entry.slug">{{ entry.content }}</a>
6+
<a *ngFor="let entry of tableOfContents"class="daffio-docs-table-of-contents__item daffio-docs-table-of-contents__item--level-{{entry.lvl}}" routerLink="./" queryParamsHandling="merge" [fragment]="entry.slug">{{ entry.content }}</a>
77
</div>
88
</aside>

tools/dgeni/src/processors/add-api-symbols-to-package.ts

+18-6
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
import { Document } from 'dgeni';
2+
import { slugify } from 'markdown-toc';
23
import type { Environment } from 'nunjucks';
34

4-
import { DaffApiDoc } from '@daffodil/docs-utils';
5+
import {
6+
DaffApiDoc,
7+
DaffDocTableOfContents,
8+
} from '@daffodil/docs-utils';
59

610
import { CollectLinkableSymbolsProcessor } from './collect-linkable-symbols';
711
import { API_TEMPLATES_PATH } from '../transforms/config';
@@ -33,12 +37,20 @@ export class AddApiSymbolsToPackagesProcessor implements FilterableProcessor {
3337
const ret = docs.map(doc => {
3438
if (this.docTypes.includes(doc.docType)) {
3539
const exportDocs = CollectLinkableSymbolsProcessor.packages.get(this.lookup(doc));
36-
doc.symbols = exportDocs?.map((d) => d.path);
40+
doc.symbols = exportDocs?.map((d) => d.slug);
3741
doc.api = exportDocs?.map((symbol) => render(this.templateFinder.getFinder()(symbol), { doc: symbol, child: true }));
38-
doc.apiToc = exportDocs?.flatMap((symbol: DaffApiDoc) => symbol.tableOfContents.map((entry) => ({
39-
...entry,
40-
lvl: entry.lvl + 1,
41-
})));
42+
doc.apiToc = exportDocs?.flatMap((symbol: Document & DaffApiDoc): DaffDocTableOfContents => [
43+
{
44+
content: symbol.name,
45+
lvl: 2,
46+
slug: slugify(symbol.name),
47+
},
48+
...symbol.tableOfContents.map((entry) => ({
49+
...entry,
50+
lvl: entry.lvl + 1,
51+
slug: entry.slug === 'examples' ? `${symbol.slug}-examples` : entry.slug,
52+
})),
53+
]);
4254
}
4355
return doc;
4456
});

tools/dgeni/src/processors/markdown.ts

+1
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ export class MarkdownCodeProcessor implements FilterableProcessor {
9292
}));
9393
}
9494
this.docDescription = null;
95+
doc.slug = slugify(doc.name || doc.title);
9596
};
9697
return doc;
9798
});

tools/dgeni/src/templates/api/base.template.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{% block header %}
2-
{$'<h3>' if child else '<h1>'$}{$ doc.name $}{$'</h3>' if child else '</h1>'$}
2+
{$'<h3 id="' + doc.slug + '"><a href="' + doc.path + '">' if child else '<h1>'$}{$ doc.name $}{$'</a></h3>' if child else '</h1>'$}
33
{% endblock %}
44
<p>{$ doc.description $}</p>
55

tools/dgeni/src/templates/api/class.template.html

+15-13
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,19 @@
1010
<span class="selectors__name"><code>{$ doc.decorators[0].argumentInfo[0].selector $}</code></span>
1111
{% endif %}
1212

13-
{$'<h4>' if child else '<h2>'$}Properties{$'<h4>' if child else '<h2>'$}
14-
<table>
15-
<thead>
16-
<tr>
17-
<th>Name</th>
18-
<th>Type</th>
19-
<th>Description</th>
20-
</tr>
21-
</thead>
22-
{%- for i in range(0, doc.members.length) %}
23-
{$ member(doc.members[i]) $}
24-
{% endfor -%}
25-
</table>
13+
{% if doc.members.length > 0 %}
14+
{$'<h4>' if child else '<h2>'$}Properties{$'</h4>' if child else '</h2>'$}
15+
<table>
16+
<thead>
17+
<tr>
18+
<th>Name</th>
19+
<th>Type</th>
20+
<th>Description</th>
21+
</tr>
22+
</thead>
23+
{%- for i in range(0, doc.members.length) %}
24+
{$ member(doc.members[i]) $}
25+
{% endfor -%}
26+
</table>
27+
{% endif %}
2628
{% endblock %}

tools/dgeni/src/transforms/daffodil-api-package/processors/examples.ts

-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ export class ExamplesProcessor implements FilterableProcessor {
4040
{
4141
content: 'Examples',
4242
lvl: 2,
43-
// TODO: add doc-specific prefix
4443
slug: 'examples',
4544
},
4645
...genExamplesToc(doc.examples),

tools/dgeni/src/transforms/daffodil-guides-package/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ const base = new Package('daffodil-guides-base', [daffodilBasePackage])
8686
generateNavList.transform = (docs) => generateNavigationTrieFromDocuments(docs.map(transformGuideDoc), { id: '', title: '', path: '' });
8787
})
8888
.config((convertToJson: ConvertToJsonProcessor) => {
89-
convertToJson.extraFields.push('api');
89+
convertToJson.extraFields.push('api', 'apiToc');
9090
});
9191

9292
// global

0 commit comments

Comments
 (0)