return [];
}
- $tree = collect([]);
- foreach ($headers as $header) {
- $text = $header->nodeValue;
- $tree->push([
+ $tree = collect($headers)->map(function($header) {
+ $text = trim(str_replace("\xc2\xa0", '', $header->nodeValue));
+ if (strlen($text) > 30) {
+ $text = substr($text, 0, 27) . '...';
+ }
+
+ return [
'nodeName' => strtolower($header->nodeName),
'level' => intval(str_replace('h', '', $header->nodeName)),
'link' => '#' . $header->getAttribute('id'),
- 'text' => strlen($text) > 30 ? substr($text, 0, 27) . '...' : $text
- ]);
- }
+ 'text' => $text,
+ ];
+ })->filter(function($header) {
+ return strlen($header['text']) > 0;
+ });
// Normalise headers if only smaller headers have been used
- if (count($tree) > 0) {
- $minLevel = $tree->pluck('level')->min();
- $tree = $tree->map(function ($header) use ($minLevel) {
- $header['level'] -= ($minLevel - 2);
- return $header;
- });
- }
+ $minLevel = $tree->pluck('level')->min();
+ $tree = $tree->map(function ($header) use ($minLevel) {
+ $header['level'] -= ($minLevel - 2);
+ return $header;
+ });
+
return $tree->toArray();
}
--- /dev/null
+<?php
+namespace Tests;
+
+use BookStack\Entities\Repos\PageRepo;
+
+class PageRepoTest extends TestCase
+{
+ /**
+ * @var PageRepo $pageRepo
+ */
+ protected $pageRepo;
+
+ protected function setUp()
+ {
+ parent::setUp();
+ $this->pageRepo = app()->make(PageRepo::class);
+ }
+
+ public function test_get_page_nav_does_not_show_empty_titles()
+ {
+ $content = '<h1 id="testa">Hello</h1><h2 id="testb"> </h2><h3 id="testc"></h3>';
+ $navMap = $this->pageRepo->getPageNav($content);
+
+ $this->assertCount(1, $navMap);
+ $this->assertArraySubset([
+ 'nodeName' => 'h1',
+ 'link' => '#testa',
+ 'text' => 'Hello'
+ ], $navMap[0]);
+ }
+
+}
\ No newline at end of file