3 namespace BookStack\Entities\Tools\Markdown;
5 use League\CommonMark\Block\Element\AbstractBlock;
6 use League\CommonMark\Block\Element\ListItem;
7 use League\CommonMark\Block\Element\Paragraph;
8 use League\CommonMark\Block\Renderer\BlockRendererInterface;
9 use League\CommonMark\Block\Renderer\ListItemRenderer;
10 use League\CommonMark\ElementRendererInterface;
11 use League\CommonMark\Extension\TaskList\TaskListItemMarker;
12 use League\CommonMark\HtmlElement;
14 class CustomListItemRenderer implements BlockRendererInterface
16 protected $baseRenderer;
18 public function __construct()
20 $this->baseRenderer = new ListItemRenderer();
24 * @return HtmlElement|string|null
26 public function render(AbstractBlock $block, ElementRendererInterface $htmlRenderer, bool $inTightList = false)
28 $listItem = $this->baseRenderer->render($block, $htmlRenderer, $inTightList);
30 if ($this->startsTaskListItem($block)) {
31 $listItem->setAttribute('class', 'task-list-item');
37 private function startsTaskListItem(ListItem $block): bool
39 $firstChild = $block->firstChild();
41 return $firstChild instanceof Paragraph && $firstChild->firstChild() instanceof TaskListItemMarker;