From c97adc604b5db529db7bc91f6f709a299aa78bbc Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Sat, 20 Mar 2021 18:24:23 +0100 Subject: [PATCH] Fix links in generated JSON --- src/Generator/JsonGenerator.php | 26 +++++++++++++------------- tests/JsonIntegrationTest.php | 18 ++++++++++++++---- 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/src/Generator/JsonGenerator.php b/src/Generator/JsonGenerator.php index b24ecc7..988528a 100644 --- a/src/Generator/JsonGenerator.php +++ b/src/Generator/JsonGenerator.php @@ -141,12 +141,7 @@ private function determineNext(string $parserFilename, array $flattenedTocTree): return null; } - $meta = $this->getMetaEntry($nextFileName); - - return [ - 'title' => $meta->getTitle(), - 'link' => $meta->getUrl(), - ]; + return $this->makeRelativeLink($parserFilename, $nextFileName); } private function determinePrev(string $parserFilename, array $flattenedTocTree): ?array @@ -167,12 +162,7 @@ private function determinePrev(string $parserFilename, array $flattenedTocTree): return null; } - $meta = $this->getMetaEntry($previousFileName); - - return [ - 'title' => $meta->getTitle(), - 'link' => $meta->getUrl(), - ]; + return $this->makeRelativeLink($parserFilename, $previousFileName); } private function getMetaEntry(string $parserFilename, bool $throwOnMissing = false): ?MetaEntry @@ -266,7 +256,7 @@ private function determineParents(string $parserFilename, array $tocTreeHierarch return $parents; } - $subParents = $this->determineParents($parserFilename, $tocTree, $parents + [$filename]); + $subParents = $this->determineParents($parserFilename, $tocTree, $parents + [$this->makeRelativeLink($parserFilename, $filename)]); if (null !== $subParents) { // the item WAS found and the parents were returned @@ -277,4 +267,14 @@ private function determineParents(string $parserFilename, array $tocTreeHierarch // item was not found return null; } + + private function makeRelativeLink(string $currentFilename, string $filename): array + { + $meta = $this->getMetaEntry($filename); + + return [ + 'title' => $meta->getTitle(), + 'link' => str_repeat('../', substr_count($currentFilename, '/')).$meta->getUrl(), + ]; + } } diff --git a/tests/JsonIntegrationTest.php b/tests/JsonIntegrationTest.php index c9217c1..0ef094d 100644 --- a/tests/JsonIntegrationTest.php +++ b/tests/JsonIntegrationTest.php @@ -80,7 +80,12 @@ public function getJsonTests() yield 'crud' => [ 'file' => 'crud', 'data' => [ - 'parents' => ['design'], + 'parents' => [ + [ + 'title' => 'Design', + 'link' => 'design.html', + ], + ], 'prev' => [ 'title' => 'Design', 'link' => 'design.html', @@ -96,14 +101,19 @@ public function getJsonTests() yield 'design/sub-page' => [ 'file' => 'design/sub-page', 'data' => [ - 'parents' => ['design'], + 'parents' => [ + [ + 'title' => 'Design', + 'link' => '../design.html', + ], + ], 'prev' => [ 'title' => 'CRUD', - 'link' => 'crud.html', + 'link' => '../crud.html', ], 'next' => [ 'title' => 'Fields', - 'link' => 'fields.html', + 'link' => '../fields.html', ], 'title' => 'Design Sub-Page', ]