Passed
Push — main ( e16d46...16e3d2 )
by Damien
07:21
created

TableCell::attrs()   A

Complexity

Conditions 6
Paths 16

Size

Total Lines 18
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 10
dl 0
loc 18
c 0
b 0
f 0
rs 9.2222
cc 6
nc 16
nop 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace DH\Adf\Node\Child;
6
7
use DH\Adf\Builder\BlockquoteBuilder;
8
use DH\Adf\Builder\BulletListBuilder;
9
use DH\Adf\Builder\CodeblockBuilder;
10
use DH\Adf\Builder\HeadingBuilder;
11
use DH\Adf\Builder\MediaGroupBuilder;
12
use DH\Adf\Builder\OrderedListBuilder;
13
use DH\Adf\Builder\PanelBuilder;
14
use DH\Adf\Builder\ParagraphBuilder;
15
use DH\Adf\Builder\RuleBuilder;
16
use DH\Adf\Node\Block\Blockquote;
17
use DH\Adf\Node\Block\BulletList;
18
use DH\Adf\Node\Block\CodeBlock;
19
use DH\Adf\Node\Block\Heading;
20
use DH\Adf\Node\Block\MediaGroup;
21
use DH\Adf\Node\Block\OrderedList;
22
use DH\Adf\Node\Block\Panel;
23
use DH\Adf\Node\Block\Paragraph;
24
use DH\Adf\Node\Block\Rule;
25
use DH\Adf\Node\Block\Table;
26
use DH\Adf\Node\BlockNode;
27
use DH\Adf\Node\Node;
28
use JsonSerializable;
29
30
/**
31
 * @see https://developer.atlassian.com/cloud/jira/platform/apis/document/nodes/table_cell
32
 */
33
class TableCell extends BlockNode implements JsonSerializable
34
{
35
    use BlockquoteBuilder;
36
    use BulletListBuilder;
37
    use CodeblockBuilder;
38
    use HeadingBuilder;
39
    use MediaGroupBuilder;
40
    use OrderedListBuilder;
41
    use PanelBuilder;
42
    use ParagraphBuilder;
43
    use RuleBuilder;
44
45
    protected string $type = 'tableCell';
46
    protected array $allowedContentTypes = [
47
        Blockquote::class,
48
        BulletList::class,
49
        CodeBlock::class,
50
        Heading::class,
51
        MediaGroup::class,
52
        OrderedList::class,
53
        Panel::class,
54
        Paragraph::class,
55
        Rule::class,
56
    ];
57
    private ?string $background;
58
    private ?int $colspan;
59
    private ?int $rowspan;
60
    private ?array $colwidth;
61
62
    public function __construct(?string $background = null, ?int $colspan = null, ?int $rowspan = null, ?array $colwidth = null, ?BlockNode $parent = null)
63
    {
64
        parent::__construct($parent);
65
        $this->background = $background;
66
        $this->colspan = $colspan;
67
        $this->rowspan = $rowspan;
68
        $this->colwidth = $colwidth;
69
    }
70
71
    public static function load(array $data, ?BlockNode $parent = null): self
72
    {
73
        self::checkNodeData(static::class, $data);
74
75
        $node = new self(
76
            $data['attrs']['background'] ?? null,
77
            $data['attrs']['colspan'] ?? null,
78
            $data['attrs']['rowspan'] ?? null,
79
            $data['attrs']['colwidth'] ?? null,
80
            $parent
81
        );
82
83
        // set content if defined
84
        if (\array_key_exists('content', $data)) {
85
            foreach ($data['content'] as $nodeData) {
86
                $class = Node::NODE_MAPPING[$nodeData['type']];
87
                $child = $class::load($nodeData, $node);
88
89
                $node->append($child);
90
            }
91
        }
92
93
        return $node;
94
    }
95
96
    protected function attrs(): array
97
    {
98
        $attrs = parent::attrs();
99
100
        if ($this->background) {
101
            $attrs['background'] = $this->background;
102
        }
103
        if (null !== $this->colspan) {
104
            $attrs['colspan'] = $this->colspan;
105
        }
106
        if (null !== $this->rowspan) {
107
            $attrs['rowspan'] = $this->rowspan;
108
        }
109
        if (null !== $this->colwidth && \is_array($this->colwidth)) {
110
            $attrs['colwidth'] = $this->colwidth;
111
        }
112
113
        return $attrs;
114
    }
115
}
116