2020use Symfony \Component \DomCrawler \Crawler ;
2121use Symfony \Component \Filesystem \Filesystem ;
2222use SymfonyDocsBuilder \BuildConfig ;
23+ use SymfonyDocsBuilder \Twig \TocExtension ;
2324use function Symfony \Component \String \u ;
2425
2526class JsonGenerator
@@ -73,7 +74,8 @@ public function generateJson(string $masterDocument = 'index'): array
7374 'title ' => $ metaEntry ->getTitle (),
7475 'parents ' => $ this ->determineParents ($ parserFilename , $ tocTreeHierarchy ) ?: [],
7576 '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 ),
7779 'next ' => $ next ,
7880 'prev ' => $ prev ,
7981 'body ' => $ crawler ->filter ('body ' )->html (),
@@ -98,7 +100,7 @@ public function setOutput(SymfonyStyle $output)
98100 $ this ->output = $ output ;
99101 }
100102
101- private function generateToc (MetaEntry $ metaEntry , ?array $ titles ): array
103+ private function generateToc (MetaEntry $ metaEntry , ?array $ titles, int $ level = 1 ): array
102104 {
103105 if (null === $ titles ) {
104106 return [];
@@ -108,11 +110,12 @@ private function generateToc(MetaEntry $metaEntry, ?array $titles): array
108110
109111 foreach ($ titles as $ title ) {
110112 $ tocTree [] = [
113+ 'level ' => $ level ,
111114 'url ' => sprintf ('%s#%s ' , $ metaEntry ->getUrl (), Environment::slugify ($ title [0 ])),
112115 'page ' => u ($ metaEntry ->getUrl ())->beforeLast ('.html ' ),
113116 'fragment ' => Environment::slugify ($ title [0 ]),
114117 'title ' => $ title [0 ],
115- 'children ' => $ this ->generateToc ($ metaEntry , $ title [1 ]),
118+ 'children ' => $ this ->generateToc ($ metaEntry , $ title [1 ], $ level + 1 ),
116119 ];
117120 }
118121
0 commit comments