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