Dan Brown

Normalised page nav header inset when only small headers are used

...@@ -836,7 +836,7 @@ class EntityRepo ...@@ -836,7 +836,7 @@ class EntityRepo
836 /** 836 /**
837 * Parse the headers on the page to get a navigation menu 837 * Parse the headers on the page to get a navigation menu
838 * @param Page $page 838 * @param Page $page
839 - * @return array 839 + * @return Collection
840 */ 840 */
841 public function getPageNav(Page $page) 841 public function getPageNav(Page $page)
842 { 842 {
...@@ -849,15 +849,24 @@ class EntityRepo ...@@ -849,15 +849,24 @@ class EntityRepo
849 849
850 if (is_null($headers)) return null; 850 if (is_null($headers)) return null;
851 851
852 - $tree = []; 852 + $tree = collect([]);
853 foreach ($headers as $header) { 853 foreach ($headers as $header) {
854 $text = $header->nodeValue; 854 $text = $header->nodeValue;
855 - $tree[] = [ 855 + $tree->push([
856 'nodeName' => strtolower($header->nodeName), 856 'nodeName' => strtolower($header->nodeName),
857 'level' => intval(str_replace('h', '', $header->nodeName)), 857 'level' => intval(str_replace('h', '', $header->nodeName)),
858 'link' => '#' . $header->getAttribute('id'), 858 'link' => '#' . $header->getAttribute('id'),
859 'text' => strlen($text) > 30 ? substr($text, 0, 27) . '...' : $text 859 'text' => strlen($text) > 30 ? substr($text, 0, 27) . '...' : $text
860 - ]; 860 + ]);
861 + }
862 +
863 + // Normalise headers if only smaller headers have been used
864 + if (count($tree) > 0) {
865 + $minLevel = $tree->pluck('level')->min();
866 + $tree = $tree->map(function($header) use ($minLevel) {
867 + $header['level'] -= ($minLevel - 2);
868 + return $header;
869 + });
861 } 870 }
862 return $tree; 871 return $tree;
863 } 872 }
......
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
30 <h6 class="text-muted">{{ trans('entities.pages_navigation') }}</h6> 30 <h6 class="text-muted">{{ trans('entities.pages_navigation') }}</h6>
31 <div class="sidebar-page-nav menu"> 31 <div class="sidebar-page-nav menu">
32 @foreach($pageNav as $navItem) 32 @foreach($pageNav as $navItem)
33 - <li class="page-nav-item {{ $navItem['nodeName'] }}"> 33 + <li class="page-nav-item h{{ $navItem['level'] }}">
34 <a href="{{ $navItem['link'] }}">{{ $navItem['text'] }}</a> 34 <a href="{{ $navItem['link'] }}">{{ $navItem['text'] }}</a>
35 </li> 35 </li>
36 @endforeach 36 @endforeach
......