2121use phpDocumentor \Guides \Meta \Target ;
2222use phpDocumentor \Guides \NodeRenderers \NodeRenderer ;
2323use phpDocumentor \Guides \Nodes \BreadCrumbNode ;
24- use phpDocumentor \Guides \Nodes \CollectionNode ;
2524use phpDocumentor \Guides \Nodes \Node ;
2625use phpDocumentor \Guides \ReferenceResolvers \DocumentNameResolverInterface ;
2726use phpDocumentor \Guides \RenderContext ;
2827use phpDocumentor \Guides \Renderer \UrlGenerator \UrlGeneratorInterface ;
2928use Psr \Log \LoggerInterface ;
3029use RuntimeException ;
3130use Stringable ;
32- use Throwable ;
3331use Twig \Extension \AbstractExtension ;
3432use Twig \TwigFunction ;
3533use Twig \TwigTest ;
3937
4038final class AssetsExtension extends AbstractExtension
4139{
40+ private GlobalMenuExtension $ menuExtension ;
41+
4242 /** @param NodeRenderer<Node> $nodeRenderer */
4343 public function __construct (
4444 private readonly LoggerInterface $ logger ,
4545 private readonly NodeRenderer $ nodeRenderer ,
4646 private readonly DocumentNameResolverInterface $ documentNameResolver ,
4747 private readonly UrlGeneratorInterface $ urlGenerator ,
4848 ) {
49+ $ this ->menuExtension = new GlobalMenuExtension ($ this ->nodeRenderer );
4950 }
5051
5152 /** @return TwigFunction[] */
@@ -56,7 +57,7 @@ public function getFunctions(): array
5657 new TwigFunction ('renderNode ' , $ this ->renderNode (...), ['is_safe ' => ['html ' ], 'needs_context ' => true ]),
5758 new TwigFunction ('renderLink ' , $ this ->renderLink (...), ['is_safe ' => ['html ' ], 'needs_context ' => true ]),
5859 new TwigFunction ('renderBreadcrumb ' , $ this ->renderBreadcrumb (...), ['is_safe ' => ['html ' ], 'needs_context ' => true ]),
59- new TwigFunction ('renderMenu ' , $ this ->renderMenu (...), ['is_safe ' => ['html ' ], 'needs_context ' => true ]),
60+ new TwigFunction ('renderMenu ' , $ this ->renderMenu (...), ['is_safe ' => ['html ' ], 'needs_context ' => true , ' deprecated ' => true ]),
6061 new TwigFunction ('renderTarget ' , $ this ->renderTarget (...), ['is_safe ' => ['html ' ], 'needs_context ' => true ]),
6162 ];
6263 }
@@ -136,22 +137,7 @@ public function renderBreadcrumb(array $context): string
136137 /** @param array{env: RenderContext} $context */
137138 public function renderMenu (array $ context , string $ menuType , int $ maxMenuCount = 0 ): string
138139 {
139- $ renderContext = $ this ->getRenderContext ($ context );
140- $ globalMenues = $ renderContext ->getProjectNode ()->getGlobalMenues ();
141- $ menues = [];
142- foreach ($ globalMenues as $ menu ) {
143- $ menu = $ menu ->withOptions (['menu ' => $ menuType ]);
144- try {
145- $ menu = $ menu ->withCurrentPath ($ renderContext ->getCurrentFileName ());
146- $ menu = $ menu ->withRootlinePaths ($ renderContext ->getCurrentFileRootline ());
147- } catch (Throwable ) {
148- // do nothing, we are in a context without active menu like single page or functional test
149- }
150-
151- $ menues [] = $ menu ;
152- }
153-
154- return $ this ->nodeRenderer ->render (new CollectionNode ($ menues ), $ renderContext );
140+ return $ this ->menuExtension ->renderMenu ($ context , $ menuType );
155141 }
156142
157143 /** @param array{env: RenderContext} $context */
0 commit comments