1<?php 2 3declare(strict_types=1); 4 5/* 6 * This file is part of the league/commonmark package. 7 * 8 * (c) Colin O'Dell <colinodell@gmail.com> 9 * 10 * For the full copyright and license information, please view the LICENSE 11 * file that was distributed with this source code. 12 */ 13 14namespace League\CommonMark\Extension\TaskList; 15 16use League\CommonMark\Node\Node; 17use League\CommonMark\Renderer\ChildNodeRendererInterface; 18use League\CommonMark\Renderer\NodeRendererInterface; 19use League\CommonMark\Util\HtmlElement; 20use League\CommonMark\Xml\XmlNodeRendererInterface; 21 22final class TaskListItemMarkerRenderer implements NodeRendererInterface, XmlNodeRendererInterface 23{ 24 /** 25 * @param TaskListItemMarker $node 26 * 27 * {@inheritDoc} 28 * 29 * @psalm-suppress MoreSpecificImplementedParamType 30 */ 31 public function render(Node $node, ChildNodeRendererInterface $childRenderer): \Stringable 32 { 33 TaskListItemMarker::assertInstanceOf($node); 34 35 $attrs = $node->data->get('attributes'); 36 $checkbox = new HtmlElement('input', $attrs, '', true); 37 38 if ($node->isChecked()) { 39 $checkbox->setAttribute('checked', ''); 40 } 41 42 $checkbox->setAttribute('disabled', ''); 43 $checkbox->setAttribute('type', 'checkbox'); 44 45 return $checkbox; 46 } 47 48 public function getXmlTagName(Node $node): string 49 { 50 return 'task_list_item_marker'; 51 } 52 53 /** 54 * @param TaskListItemMarker $node 55 * 56 * @return array<string, scalar> 57 * 58 * @psalm-suppress MoreSpecificImplementedParamType 59 */ 60 public function getXmlAttributes(Node $node): array 61 { 62 TaskListItemMarker::assertInstanceOf($node); 63 64 if ($node->isChecked()) { 65 return ['checked' => 'checked']; 66 } 67 68 return []; 69 } 70} 71