Skip to content

Commit 2641995

Browse files
committed
[FEATURE] Introduce twig function to output menu
This way in the bootstrap template we can always output a menu even if no block is defined
1 parent 6da1964 commit 2641995

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+941
-39
lines changed

packages/guides-restructured-text/src/RestructuredText/Directives/AbstractAdmonitionDirective.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@
1313

1414
namespace phpDocumentor\Guides\RestructuredText\Directives;
1515

16+
use phpDocumentor\Guides\Nodes\CollectionNode;
1617
use phpDocumentor\Guides\Nodes\Node;
1718
use phpDocumentor\Guides\RestructuredText\Nodes\AdmonitionNode;
18-
use phpDocumentor\Guides\RestructuredText\Nodes\CollectionNode;
1919
use phpDocumentor\Guides\RestructuredText\Parser\Directive;
2020
use phpDocumentor\Guides\RestructuredText\Parser\Productions\Rule;
2121

packages/guides-restructured-text/src/RestructuredText/Directives/AbstractVersionChangeDirective.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@
1313

1414
namespace phpDocumentor\Guides\RestructuredText\Directives;
1515

16+
use phpDocumentor\Guides\Nodes\CollectionNode;
1617
use phpDocumentor\Guides\Nodes\Node;
17-
use phpDocumentor\Guides\RestructuredText\Nodes\CollectionNode;
1818
use phpDocumentor\Guides\RestructuredText\Nodes\VersionChangeNode;
1919
use phpDocumentor\Guides\RestructuredText\Parser\Directive;
2020
use phpDocumentor\Guides\RestructuredText\Parser\Productions\Rule;

packages/guides-restructured-text/src/RestructuredText/Directives/AdmonitionDirective.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@
1313

1414
namespace phpDocumentor\Guides\RestructuredText\Directives;
1515

16+
use phpDocumentor\Guides\Nodes\CollectionNode;
1617
use phpDocumentor\Guides\Nodes\Node;
1718
use phpDocumentor\Guides\RestructuredText\Nodes\AdmonitionNode;
18-
use phpDocumentor\Guides\RestructuredText\Nodes\CollectionNode;
1919
use phpDocumentor\Guides\RestructuredText\Parser\Directive;
2020

2121
use function preg_replace;

packages/guides-restructured-text/src/RestructuredText/Directives/ClassDirective.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
namespace phpDocumentor\Guides\RestructuredText\Directives;
66

77
use phpDocumentor\Guides\Nodes\ClassNode;
8+
use phpDocumentor\Guides\Nodes\CollectionNode;
89
use phpDocumentor\Guides\Nodes\DocumentNode;
910
use phpDocumentor\Guides\Nodes\Node;
10-
use phpDocumentor\Guides\RestructuredText\Nodes\CollectionNode;
1111
use phpDocumentor\Guides\RestructuredText\Parser\Directive;
1212
use Symfony\Component\String\Slugger\AsciiSlugger;
1313

packages/guides-restructured-text/src/RestructuredText/Directives/ContainerDirective.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44

55
namespace phpDocumentor\Guides\RestructuredText\Directives;
66

7+
use phpDocumentor\Guides\Nodes\CollectionNode;
78
use phpDocumentor\Guides\Nodes\Node;
8-
use phpDocumentor\Guides\RestructuredText\Nodes\CollectionNode;
99
use phpDocumentor\Guides\RestructuredText\Nodes\ContainerNode;
1010
use phpDocumentor\Guides\RestructuredText\Parser\Directive;
1111

packages/guides-restructured-text/src/RestructuredText/Directives/DocumentBlockDirective.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44

55
namespace phpDocumentor\Guides\RestructuredText\Directives;
66

7+
use phpDocumentor\Guides\Nodes\CollectionNode;
78
use phpDocumentor\Guides\Nodes\DocumentBlockNode;
89
use phpDocumentor\Guides\Nodes\Node;
9-
use phpDocumentor\Guides\RestructuredText\Nodes\CollectionNode;
1010
use phpDocumentor\Guides\RestructuredText\Parser\Directive;
1111

1212
class DocumentBlockDirective extends SubDirective

packages/guides-restructured-text/src/RestructuredText/Directives/EpigraphDirective.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44

55
namespace phpDocumentor\Guides\RestructuredText\Directives;
66

7+
use phpDocumentor\Guides\Nodes\CollectionNode;
78
use phpDocumentor\Guides\Nodes\Node;
89
use phpDocumentor\Guides\Nodes\QuoteNode;
9-
use phpDocumentor\Guides\RestructuredText\Nodes\CollectionNode;
1010
use phpDocumentor\Guides\RestructuredText\Parser\Directive;
1111

1212
/**

packages/guides-restructured-text/src/RestructuredText/Directives/FigureDirective.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44

55
namespace phpDocumentor\Guides\RestructuredText\Directives;
66

7+
use phpDocumentor\Guides\Nodes\CollectionNode;
78
use phpDocumentor\Guides\Nodes\FigureNode;
89
use phpDocumentor\Guides\Nodes\ImageNode;
910
use phpDocumentor\Guides\Nodes\Node;
10-
use phpDocumentor\Guides\RestructuredText\Nodes\CollectionNode;
1111
use phpDocumentor\Guides\RestructuredText\Parser\Directive;
1212
use phpDocumentor\Guides\RestructuredText\Parser\Productions\Rule;
1313
use phpDocumentor\Guides\UrlGeneratorInterface;

packages/guides-restructured-text/src/RestructuredText/Directives/GeneralDirective.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44

55
namespace phpDocumentor\Guides\RestructuredText\Directives;
66

7+
use phpDocumentor\Guides\Nodes\CollectionNode;
78
use phpDocumentor\Guides\Nodes\InlineCompoundNode;
89
use phpDocumentor\Guides\Nodes\Node;
9-
use phpDocumentor\Guides\RestructuredText\Nodes\CollectionNode;
1010
use phpDocumentor\Guides\RestructuredText\Nodes\GeneralDirectiveNode;
1111
use phpDocumentor\Guides\RestructuredText\Parser\Directive;
1212

packages/guides-restructured-text/src/RestructuredText/Directives/HighlightsDirective.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44

55
namespace phpDocumentor\Guides\RestructuredText\Directives;
66

7+
use phpDocumentor\Guides\Nodes\CollectionNode;
78
use phpDocumentor\Guides\Nodes\Node;
89
use phpDocumentor\Guides\Nodes\QuoteNode;
9-
use phpDocumentor\Guides\RestructuredText\Nodes\CollectionNode;
1010
use phpDocumentor\Guides\RestructuredText\Parser\Directive;
1111

1212
/**

packages/guides-restructured-text/src/RestructuredText/Directives/IncludeDirective.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@
1414
namespace phpDocumentor\Guides\RestructuredText\Directives;
1515

1616
use phpDocumentor\Guides\Nodes\CodeNode;
17+
use phpDocumentor\Guides\Nodes\CollectionNode;
1718
use phpDocumentor\Guides\Nodes\LiteralBlockNode;
1819
use phpDocumentor\Guides\Nodes\Node;
19-
use phpDocumentor\Guides\RestructuredText\Nodes\CollectionNode;
2020
use phpDocumentor\Guides\RestructuredText\Parser\BlockContext;
2121
use phpDocumentor\Guides\RestructuredText\Parser\Directive;
2222
use phpDocumentor\Guides\RestructuredText\Parser\Productions\DocumentRule;

packages/guides-restructured-text/src/RestructuredText/Directives/PullQuoteDirective.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44

55
namespace phpDocumentor\Guides\RestructuredText\Directives;
66

7+
use phpDocumentor\Guides\Nodes\CollectionNode;
78
use phpDocumentor\Guides\Nodes\Node;
89
use phpDocumentor\Guides\Nodes\QuoteNode;
9-
use phpDocumentor\Guides\RestructuredText\Nodes\CollectionNode;
1010
use phpDocumentor\Guides\RestructuredText\Parser\Directive;
1111

1212
/**

packages/guides-restructured-text/src/RestructuredText/Directives/ReplaceDirective.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44

55
namespace phpDocumentor\Guides\RestructuredText\Directives;
66

7+
use phpDocumentor\Guides\Nodes\CollectionNode;
78
use phpDocumentor\Guides\Nodes\InlineCompoundNode;
89
use phpDocumentor\Guides\Nodes\Node;
910
use phpDocumentor\Guides\Nodes\ParagraphNode;
1011
use phpDocumentor\Guides\Nodes\ReplacementNode;
11-
use phpDocumentor\Guides\RestructuredText\Nodes\CollectionNode;
1212
use phpDocumentor\Guides\RestructuredText\Parser\Directive;
1313

1414
use function count;

packages/guides-restructured-text/src/RestructuredText/Directives/SidebarDirective.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@
1313

1414
namespace phpDocumentor\Guides\RestructuredText\Directives;
1515

16+
use phpDocumentor\Guides\Nodes\CollectionNode;
1617
use phpDocumentor\Guides\Nodes\Node;
17-
use phpDocumentor\Guides\RestructuredText\Nodes\CollectionNode;
1818
use phpDocumentor\Guides\RestructuredText\Nodes\SidebarNode;
1919
use phpDocumentor\Guides\RestructuredText\Parser\Directive;
2020

packages/guides-restructured-text/src/RestructuredText/Directives/SubDirective.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44

55
namespace phpDocumentor\Guides\RestructuredText\Directives;
66

7+
use phpDocumentor\Guides\Nodes\CollectionNode;
78
use phpDocumentor\Guides\Nodes\Node;
8-
use phpDocumentor\Guides\RestructuredText\Nodes\CollectionNode;
99
use phpDocumentor\Guides\RestructuredText\Parser\BlockContext;
1010
use phpDocumentor\Guides\RestructuredText\Parser\Directive;
1111
use phpDocumentor\Guides\RestructuredText\Parser\Productions\Rule;

packages/guides-restructured-text/src/RestructuredText/Directives/TableDirective.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44

55
namespace phpDocumentor\Guides\RestructuredText\Directives;
66

7+
use phpDocumentor\Guides\Nodes\CollectionNode;
78
use phpDocumentor\Guides\Nodes\Node;
89
use phpDocumentor\Guides\Nodes\TableNode;
9-
use phpDocumentor\Guides\RestructuredText\Nodes\CollectionNode;
1010
use phpDocumentor\Guides\RestructuredText\Parser\Directive;
1111
use phpDocumentor\Guides\RestructuredText\Parser\Productions\Rule;
1212
use Psr\Log\LoggerInterface;

packages/guides-restructured-text/src/RestructuredText/Directives/TodoDirective.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44

55
namespace phpDocumentor\Guides\RestructuredText\Directives;
66

7+
use phpDocumentor\Guides\Nodes\CollectionNode;
78
use phpDocumentor\Guides\Nodes\Node;
8-
use phpDocumentor\Guides\RestructuredText\Nodes\CollectionNode;
99
use phpDocumentor\Guides\RestructuredText\Parser\Directive;
1010

1111
/**

packages/guides-restructured-text/src/RestructuredText/Directives/TopicDirective.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@
1313

1414
namespace phpDocumentor\Guides\RestructuredText\Directives;
1515

16+
use phpDocumentor\Guides\Nodes\CollectionNode;
1617
use phpDocumentor\Guides\Nodes\Node;
17-
use phpDocumentor\Guides\RestructuredText\Nodes\CollectionNode;
1818
use phpDocumentor\Guides\RestructuredText\Nodes\TopicNode;
1919
use phpDocumentor\Guides\RestructuredText\Parser\Directive;
2020

packages/guides-restructured-text/src/RestructuredText/Directives/WrapDirective.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44

55
namespace phpDocumentor\Guides\RestructuredText\Directives;
66

7+
use phpDocumentor\Guides\Nodes\CollectionNode;
78
use phpDocumentor\Guides\Nodes\Node;
8-
use phpDocumentor\Guides\RestructuredText\Nodes\CollectionNode;
99
use phpDocumentor\Guides\RestructuredText\Parser\Directive;
1010

1111
/**

packages/guides-restructured-text/src/RestructuredText/NodeRenderers/Html/CollectionNodeRenderer.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@
1515

1616
use InvalidArgumentException;
1717
use phpDocumentor\Guides\NodeRenderers\NodeRenderer;
18+
use phpDocumentor\Guides\Nodes\CollectionNode;
1819
use phpDocumentor\Guides\Nodes\Node;
1920
use phpDocumentor\Guides\RenderContext;
20-
use phpDocumentor\Guides\RestructuredText\Nodes\CollectionNode;
2121
use phpDocumentor\Guides\TemplateRenderer;
2222

2323
/** @implements NodeRenderer<CollectionNode> */

packages/guides-restructured-text/src/RestructuredText/Parser/Productions/BlockQuoteRule.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@
1313

1414
namespace phpDocumentor\Guides\RestructuredText\Parser\Productions;
1515

16+
use phpDocumentor\Guides\Nodes\CollectionNode;
1617
use phpDocumentor\Guides\Nodes\CompoundNode;
1718
use phpDocumentor\Guides\Nodes\Node;
1819
use phpDocumentor\Guides\Nodes\QuoteNode;
19-
use phpDocumentor\Guides\RestructuredText\Nodes\CollectionNode;
2020
use phpDocumentor\Guides\RestructuredText\Parser\BlockContext;
2121
use phpDocumentor\Guides\RestructuredText\Parser\Buffer;
2222

packages/guides-restructured-text/src/RestructuredText/Parser/Productions/DirectiveContentRule.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44

55
namespace phpDocumentor\Guides\RestructuredText\Parser\Productions;
66

7+
use phpDocumentor\Guides\Nodes\CollectionNode;
78
use phpDocumentor\Guides\Nodes\CompoundNode;
89
use phpDocumentor\Guides\Nodes\Node;
9-
use phpDocumentor\Guides\RestructuredText\Nodes\CollectionNode;
1010
use phpDocumentor\Guides\RestructuredText\Parser\BlockContext;
1111

1212
/** @implements Rule<CollectionNode> */

packages/guides-theme-bootstrap/resources/template/body/menu/mainmenu/menu.html.twig

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11

22
<nav class="nav flex-column">
3+
{% if node.options.caption %}
4+
<h2>{{ node.options.caption }}</h2>
5+
{% endif %}
36
<ul class="level-1">
47
{% for entry in node.menuEntries -%}
58
<li><a href="{{ renderLink(entry.url) }}"

packages/guides-theme-bootstrap/resources/template/structure/navigation/menu_doc.html.twig

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,6 @@
22
{% for child in parts.mainmenu -%}
33
{{ renderNode(child) }}
44
{%~ endfor -%}
5+
{% else %}
6+
{{ renderMenu('mainmenu') }}
57
{% endif %}

packages/guides-theme-bootstrap/resources/template/structure/navigation/navbar.html.twig

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
{% if parts.navbar %}
1+
22
<nav class="navbar navbar-expand-lg navbar-dark bg-primary">
33
<div class="container">
44

@@ -8,11 +8,13 @@
88
</button>
99
<div class="collapse navbar-collapse" id="navbarSupportedContent">
1010

11-
12-
{% for child in parts.navbar -%}
13-
{{ renderNode(child) }}
14-
{%~ endfor -%}
11+
{% if parts.navbar %}
12+
{% for child in parts.navbar -%}
13+
{{ renderNode(child) }}
14+
{%~ endfor -%}
15+
{% else %}
16+
{{ renderMenu('navbar', 1) }}
17+
{% endif %}
1518
</div>
1619
</div>
1720
</nav>
18-
{% endif %}

packages/guides-theme-bootstrap/src/Bootstrap/Directives/TabDirective.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@
1414
namespace phpDocumentor\Guides\Bootstrap\Directives;
1515

1616
use phpDocumentor\Guides\Bootstrap\Nodes\TabNode;
17+
use phpDocumentor\Guides\Nodes\CollectionNode;
1718
use phpDocumentor\Guides\Nodes\InlineCompoundNode;
1819
use phpDocumentor\Guides\Nodes\Node;
1920
use phpDocumentor\Guides\RestructuredText\Directives\SubDirective;
20-
use phpDocumentor\Guides\RestructuredText\Nodes\CollectionNode;
2121
use phpDocumentor\Guides\RestructuredText\Parser\Directive;
2222

2323
use function is_string;

packages/guides-theme-bootstrap/src/Bootstrap/Directives/TabsDirective.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@
1515

1616
use phpDocumentor\Guides\Bootstrap\Nodes\TabNode;
1717
use phpDocumentor\Guides\Bootstrap\Nodes\TabsNode;
18+
use phpDocumentor\Guides\Nodes\CollectionNode;
1819
use phpDocumentor\Guides\Nodes\InlineCompoundNode;
1920
use phpDocumentor\Guides\Nodes\Node;
2021
use phpDocumentor\Guides\RestructuredText\Directives\SubDirective;
21-
use phpDocumentor\Guides\RestructuredText\Nodes\CollectionNode;
2222
use phpDocumentor\Guides\RestructuredText\Parser\Directive;
2323
use phpDocumentor\Guides\RestructuredText\Parser\Productions\Rule;
2424
use Psr\Log\LoggerInterface;

packages/guides/src/Compiler/NodeTransformers/MenuNodeAddEntryTransformer.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,12 @@ public function leaveNode(Node $node, CompilerContext $compilerContext): Node|nu
9696
}
9797

9898
$menuEntries = array_unique($menuEntries);
99+
$node = $node->withMenuEntries($menuEntries);
100+
if ($node instanceof TocNode) {
101+
$compilerContext->getDocumentNode()->addTocNode($node);
102+
}
99103

100-
return $node->withMenuEntries($menuEntries);
104+
return $node;
101105
}
102106

103107
private function isInRootline(DocumentEntryNode $menuEntry, DocumentEntryNode $currentDoc): bool
Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,7 @@
1111
* @link https://phpdoc.org
1212
*/
1313

14-
namespace phpDocumentor\Guides\RestructuredText\Nodes;
15-
16-
use phpDocumentor\Guides\Nodes\CompoundNode;
17-
use phpDocumentor\Guides\Nodes\Node;
14+
namespace phpDocumentor\Guides\Nodes;
1815

1916
/**
2017
* A collection node is a node that renders all its children without adding

packages/guides/src/Nodes/DocumentNode.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
use phpDocumentor\Guides\Meta\FootnoteTarget;
1818
use phpDocumentor\Guides\Nodes\DocumentTree\DocumentEntryNode;
1919
use phpDocumentor\Guides\Nodes\DocumentTree\SectionEntryNode;
20+
use phpDocumentor\Guides\Nodes\Menu\TocNode;
2021
use phpDocumentor\Guides\Nodes\Metadata\MetadataNode;
2122

2223
use function array_filter;
@@ -45,6 +46,9 @@ final class DocumentNode extends CompoundNode
4546
/** @var array<int, FootnoteTarget> */
4647
private array $footnoteTargets = [];
4748

49+
/** @var TocNode[] */
50+
private array $tocNodes = [];
51+
4852
private int $maxFootnoteNumber = 0;
4953
private int $lastReturnedAnonymousFootnoteNumber = -1;
5054

@@ -201,6 +205,17 @@ public function hasDocumentPart(string $identifier): bool
201205
return isset($this->documentPartNodes[$identifier]);
202206
}
203207

208+
public function addTocNode(TocNode $tocNode): void
209+
{
210+
$this->tocNodes[] = $tocNode;
211+
}
212+
213+
/** @return TocNode[] */
214+
public function getTocNodes(): array
215+
{
216+
return $this->tocNodes;
217+
}
218+
204219
public function addFootnoteTarget(FootnoteTarget $target): int
205220
{
206221
if ($target->getNumber() > 0) {

packages/guides/src/Nodes/Menu/NavMenuNode.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
namespace phpDocumentor\Guides\Nodes\Menu;
1515

16+
use function assert;
1617
use function is_scalar;
1718

1819
class NavMenuNode extends MenuNode
@@ -34,4 +35,22 @@ public function isPageLevelOnly(): bool
3435
{
3536
return true;
3637
}
38+
39+
public static function fromTocNode(TocNode $tocNode, string|null $menuType = null): NavMenuNode
40+
{
41+
$node = new NavMenuNode($tocNode->getFiles());
42+
$node = $node->withMenuEntries($tocNode->getMenuEntries());
43+
$options = $tocNode->getOptions();
44+
unset($options['hidden']);
45+
unset($options['titlesonly']);
46+
unset($options['maxdepth']);
47+
if ($menuType !== null) {
48+
$options['menu'] = $menuType;
49+
}
50+
51+
$node = $node->withOptions($options);
52+
assert($node instanceof NavMenuNode);
53+
54+
return $node;
55+
}
3756
}

0 commit comments

Comments
 (0)