20
20
use Symfony \Component \DomCrawler \Crawler ;
21
21
use Symfony \Component \Filesystem \Filesystem ;
22
22
use SymfonyDocsBuilder \BuildConfig ;
23
+ use SymfonyDocsBuilder \Twig \TocExtension ;
23
24
use function Symfony \Component \String \u ;
24
25
25
26
class JsonGenerator
@@ -73,7 +74,8 @@ public function generateJson(string $masterDocument = 'index'): array
73
74
'title ' => $ metaEntry ->getTitle (),
74
75
'parents ' => $ this ->determineParents ($ parserFilename , $ tocTreeHierarchy ) ?: [],
75
76
'current_page_name ' => $ parserFilename ,
76
- 'toc ' => $ this ->generateToc ($ metaEntry , current ($ metaEntry ->getTitles ())[1 ]),
77
+ 'toc ' => $ toc = $ this ->generateToc ($ metaEntry , current ($ metaEntry ->getTitles ())[1 ]),
78
+ 'toc_options ' => TocExtension::getOptions ($ toc ),
77
79
'next ' => $ next ,
78
80
'prev ' => $ prev ,
79
81
'body ' => $ crawler ->filter ('body ' )->html (),
@@ -98,7 +100,7 @@ public function setOutput(SymfonyStyle $output)
98
100
$ this ->output = $ output ;
99
101
}
100
102
101
- private function generateToc (MetaEntry $ metaEntry , ?array $ titles ): array
103
+ private function generateToc (MetaEntry $ metaEntry , ?array $ titles, int $ level = 1 ): array
102
104
{
103
105
if (null === $ titles ) {
104
106
return [];
@@ -108,11 +110,12 @@ private function generateToc(MetaEntry $metaEntry, ?array $titles): array
108
110
109
111
foreach ($ titles as $ title ) {
110
112
$ tocTree [] = [
113
+ 'level ' => $ level ,
111
114
'url ' => sprintf ('%s#%s ' , $ metaEntry ->getUrl (), Environment::slugify ($ title [0 ])),
112
115
'page ' => u ($ metaEntry ->getUrl ())->beforeLast ('.html ' ),
113
116
'fragment ' => Environment::slugify ($ title [0 ]),
114
117
'title ' => $ title [0 ],
115
- 'children ' => $ this ->generateToc ($ metaEntry , $ title [1 ]),
118
+ 'children ' => $ this ->generateToc ($ metaEntry , $ title [1 ], $ level + 1 ),
116
119
];
117
120
}
118
121
0 commit comments