wiki-grav/plugins/page-toc/classes/OrderedListRenderer.php
2022-06-06 18:16:01 +02:00

69 lines
1.6 KiB
PHP

<?php
/**
* PageTOC
*
* This plugin allows creation of Table of Contents + Link Anchors
*
* Based on the original version https://github.com/caseyamcl/toc
* by Casey McLaughlin <caseyamcl@gmail.com>
*
* Licensed under MIT, see LICENSE.
*/
declare(strict_types=1);
namespace Grav\Plugin\PageToc;
use Knp\Menu\ItemInterface;
use Knp\Menu\Renderer\ListRenderer;
use function str_repeat;
/**
* Class OrderedListRenderer
*
* @package TOC
*/
class OrderedListRenderer extends ListRenderer
{
/**
* @param ItemInterface $item
* @param array<string> $attributes
* @param array<mixed> $options
* @return string
*/
protected function renderList(ItemInterface $item, array $attributes, array $options): string
{
if (!$item->hasChildren() || 0 === $options['depth'] || !$item->getDisplayChildren()) {
return '';
}
$html = $this->format(
'<ol' . $this->renderHtmlAttributes($attributes) . '>',
'ol',
$item->getLevel(),
$options
);
$html .= $this->renderChildren($item, $options);
$html .= $this->format('</ol>', 'ol', $item->getLevel(), $options);
return $html;
}
/**
* @param string $html
* @param string $type
* @param int $level
* @param array<string, mixed> $options
* @return string
*/
protected function format(string $html, string $type, int $level, array $options): string
{
return $type === 'ol'
? str_repeat(' ', $level * 4) . $html . "\n"
: parent::format($html, $type, $level, $options);
}
}