diff --git a/app/Entities/Repos/PageRepo.php b/app/Entities/Repos/PageRepo.php index e6cb309e7..21fe820d0 100644 --- a/app/Entities/Repos/PageRepo.php +++ b/app/Entities/Repos/PageRepo.php @@ -438,10 +438,10 @@ class PageRepo extends EntityRepo return mb_strlen($header['text']) > 0; }); - // Normalise headers if only smaller headers have been used - $minLevel = $tree->pluck('level')->min(); - $tree = $tree->map(function ($header) use ($minLevel) { - $header['level'] -= ($minLevel - 2); + // Shift headers if only smaller headers have been used + $levelChange = ($tree->pluck('level')->min() - 1); + $tree = $tree->map(function ($header) use ($levelChange) { + $header['level'] -= ($levelChange); return $header; }); diff --git a/resources/assets/sass/_lists.scss b/resources/assets/sass/_lists.scss index cafbfa781..c413bcd8e 100644 --- a/resources/assets/sass/_lists.scss +++ b/resources/assets/sass/_lists.scss @@ -108,7 +108,7 @@ padding-left: $nav-indent; } .h2 { - padding-left: $nav-indent; + padding-left: $nav-indent * 1.5; } .h3 { padding-left: $nav-indent * 2; diff --git a/tests/Unit/PageRepoTest.php b/tests/Unit/PageRepoTest.php index 36addcbe4..41e7c2f78 100644 --- a/tests/Unit/PageRepoTest.php +++ b/tests/Unit/PageRepoTest.php @@ -16,6 +16,32 @@ class PageRepoTest extends TestCase $this->pageRepo = app()->make(PageRepo::class); } + public function test_get_page_nav_sets_correct_properties() + { + $content = '

Hello

There

Donkey

'; + $navMap = $this->pageRepo->getPageNav($content); + + $this->assertCount(3, $navMap); + $this->assertArraySubset([ + 'nodeName' => 'h1', + 'link' => '#testa', + 'text' => 'Hello', + 'level' => 1, + ], $navMap[0]); + $this->assertArraySubset([ + 'nodeName' => 'h2', + 'link' => '#testb', + 'text' => 'There', + 'level' => 2, + ], $navMap[1]); + $this->assertArraySubset([ + 'nodeName' => 'h3', + 'link' => '#testc', + 'text' => 'Donkey', + 'level' => 3, + ], $navMap[2]); + } + public function test_get_page_nav_does_not_show_empty_titles() { $content = '

Hello

 

'; @@ -29,4 +55,24 @@ class PageRepoTest extends TestCase ], $navMap[0]); } + public function test_get_page_nav_shifts_headers_if_only_smaller_ones_are_used() + { + $content = '

Hello

There
Donkey
'; + $navMap = $this->pageRepo->getPageNav($content); + + $this->assertCount(3, $navMap); + $this->assertArraySubset([ + 'nodeName' => 'h4', + 'level' => 1, + ], $navMap[0]); + $this->assertArraySubset([ + 'nodeName' => 'h5', + 'level' => 2, + ], $navMap[1]); + $this->assertArraySubset([ + 'nodeName' => 'h6', + 'level' => 3, + ], $navMap[2]); + } + } \ No newline at end of file