Skip to content

Commit

Permalink
[FEATURE] Enable relative menu entries
Browse files Browse the repository at this point in the history
resolves #821
  • Loading branch information
linawolf committed Jan 26, 2024
1 parent 91c5377 commit 8c76e56
Show file tree
Hide file tree
Showing 13 changed files with 280 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
use phpDocumentor\Guides\Nodes\Menu\MenuNode;
use phpDocumentor\Guides\Nodes\Menu\TocNode;
use phpDocumentor\Guides\Nodes\Node;
use phpDocumentor\Guides\ReferenceResolvers\DocumentNameResolverInterface;
use Psr\Log\LoggerInterface;

use function array_pop;
use function assert;
Expand All @@ -34,6 +36,13 @@ final class InternalMenuEntryNodeTransformer extends AbstractMenuEntryNodeTransf
// Setting a default level prevents PHP errors in case of circular references
private const DEFAULT_MAX_LEVELS = 10;

public function __construct(
LoggerInterface $logger,
private readonly DocumentNameResolverInterface $documentNameResolver,
) {
parent::__construct($logger);
}

public function supports(Node $node): bool
{
return $node instanceof InternalMenuEntryNode;
Expand Down Expand Up @@ -81,7 +90,7 @@ protected function handleMenuEntry(MenuNode $currentMenu, MenuEntryNode $entryNo
return [];
}

private static function matches(string $actualFile, InternalMenuEntryNode $parsedMenuEntryNode, string $currentFile): bool
private function matches(string $actualFile, InternalMenuEntryNode $parsedMenuEntryNode, string $currentFile): bool
{
$expectedFile = $parsedMenuEntryNode->getUrl();
if (self::isAbsoluteFile($expectedFile)) {
Expand All @@ -90,8 +99,9 @@ private static function matches(string $actualFile, InternalMenuEntryNode $parse

$current = explode('/', $currentFile);
array_pop($current);
$current[] = $expectedFile;
$absoluteExpectedFile = implode('/', $current);


$absoluteExpectedFile = $this->documentNameResolver->canonicalUrl(implode('/', $current), $expectedFile);

return $absoluteExpectedFile === $actualFile;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,163 @@
<!DOCTYPE html>
<html class="no-js" lang="en">
<head>
<title>Document Title - Bootstrap Theme</title>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">

<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
</head>
<body>
<header class="">

<nav class="navbar navbar-expand-lg navbar-dark bg-primary">
<div class="container">

<a class="navbar-brand" href="#">Navbar</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">


<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a href="someDirectory/index.html" class="nav-link" >
Some Page
</a>
</li> <ul class="level-">
<li class="nav-item"><a href="someDirectory/index.html"
class="nav-link" >
Some Page
</a></li></ul>
</ul>


</div>
</div>
</nav>
</header>
<main id="main-content">
<div class="container">
<div class="container">
<div class="row">
<div class="col-lg-3">
<nav class="nav flex-column">
<ul class="menu-level-main">
<li><a href="someDirectory/index.html"
class="nav-link">
Some Page
</a>
<ul class="level-1">
<li><a href="levelup1.html"
class="nav-link">
Level up 1
</a></li>
<li><a href="someDirectory/anotherDirectory/index.html"
class="nav-link">
Another Page
</a>
<ul class="level-2">
<li><a href="levelup2.html"
class="nav-link">
Level up 2
</a></li>
<li><a href="someDirectory/anotherDirectory/yetAnotherDirectory/index.html"
class="nav-link">
Yet Another Page
</a>
<ul class="level-3">
<li><a href="levelup3.html"
class="nav-link">
Level up 3
</a></li>
<li><a href="someDirectory/anotherDirectory/yetAnotherDirectory/andYetAnotherDirectory/index.html"
class="nav-link">
And Yet Another Page
</a>
<ul class="level-4">
<li><a href="levelup4.html"
class="nav-link">
Level up 4
</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>

</nav>


</div>
<div class="col-lg-9">

<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="#">Document Title</a></li>
</ol>
</nav>

<!-- content start -->


<div class="section" id="document-title">
<h1>Document Title</h1>

<p>Lorem Ipsum Dolor.</p>
<div class="toc">
<ul class="menu-level">
<li class="toc-item"><a href="someDirectory/index.html#some-page">Some Page</a> <ul class="menu-level-1">
<li class="toc-item"><a href="levelup1.html#level-up-1">Level up 1</a></li>

<li class="toc-item"><a href="someDirectory/anotherDirectory/index.html#another-page">Another Page</a> <ul class="menu-level-2">
<li class="toc-item"><a href="levelup2.html#level-up-2">Level up 2</a></li>

<li class="toc-item"><a href="someDirectory/anotherDirectory/yetAnotherDirectory/index.html#yet-another-page">Yet Another Page</a> <ul class="menu-level-3">
<li class="toc-item"><a href="levelup3.html#level-up-3">Level up 3</a></li>

<li class="toc-item"><a href="someDirectory/anotherDirectory/yetAnotherDirectory/andYetAnotherDirectory/index.html#and-yet-another-page">And Yet Another Page</a> <ul class="menu-level-4">
<li class="toc-item"><a href="levelup4.html#level-up-4">Level up 4</a></li>

</ul></li>

</ul></li>

</ul></li>

</ul></li>

</ul>
</div>

</div>

<!-- content end -->
</div>
</div>
</div>
</div>
</main>
<footer class="bg-primary text-light">
<div class="container">
<p>Generated by <a href="https://www.phpdoc.org/">phpDocumentor</a>.</p>
</div>
</footer>

<!-- Optional JavaScript; choose one of the two! -->

<!-- Option 1: Bootstrap Bundle with Popper -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script>

<!-- Option 2: Separate Popper and Bootstrap JS -->
<!--
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.2/dist/umd/popper.min.js" integrity="sha384-IQsoLXl5PILFhosVNubq5LC7Qb9DXgDA9i+tQ8Zj3iwWAwPtgFTxbJ8NT4GN1R8p" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.min.js" integrity="sha384-cVKIPhGWiC2Al4u+LWgxfKTRIcfu0JTxR+EQDz/bgldoEyl4H0zUF0QKbrJ0EcQF" crossorigin="anonymous"></script>
-->
</body>
</html>
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8" ?>
<guides xmlns="https://www.phpdoc.org/guides"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://www.phpdoc.org/guides packages/guides-cli/resources/schema/guides.xsd"
theme="bootstrap"
links-are-relative="true"
>
<extension class="phpDocumentor\Guides\Bootstrap"/>
</guides>
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
.. documentblock::
:identifier: footer

Generated by `phpDocumentor <https://www.phpdoc.org/>`__.

.. role:: custom
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
.. include:: /include.rst.txt

:project:
Bootstrap Theme
:version:
1.0

==============
Document Title
==============

Lorem Ipsum Dolor.

.. toctree::
:glob:
:titlesonly:

*/index
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Level up 1
==========
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Level up 2
==========
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Level up 3
==========
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Level up 4
==========
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
.. include:: /include.rst.txt

============
Another Page
============

Lorem Ipsum Dolor.


.. toctree::
:hidden:
:glob:
:titlesonly:

../../levelup2
*/index
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
.. include:: /include.rst.txt

====================
And Yet Another Page
====================

Lorem Ipsum Dolor.

.. toctree::
:hidden:
:glob:
:titlesonly:

../../../../levelup4
*/index
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
.. include:: /include.rst.txt

================
Yet Another Page
================

Lorem Ipsum Dolor.


.. toctree::
:hidden:
:glob:
:titlesonly:

../../../levelup3
*/index
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
.. include:: /include.rst.txt

=========
Some Page
=========

Lorem Ipsum :custom:`Dolor`.

.. toctree::
:hidden:
:glob:
:titlesonly:

../levelup1
*/index

0 comments on commit 8c76e56

Please sign in to comment.