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

Expand   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 63
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 5
eloc 40
dl 0
loc 63
c 1
b 0
f 0
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A load() 0 18 3
A attrs() 0 6 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace DH\Adf\Node\Block;
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\MediaSingleBuilder;
13
use DH\Adf\Builder\OrderedListBuilder;
14
use DH\Adf\Builder\PanelBuilder;
15
use DH\Adf\Builder\ParagraphBuilder;
16
use DH\Adf\Builder\RuleBuilder;
17
use DH\Adf\Builder\TableBuilder;
18
use DH\Adf\Node\BlockNode;
19
use DH\Adf\Node\Node;
20
use JsonSerializable;
21
22
class Expand extends BlockNode implements JsonSerializable
23
{
24
    use BlockquoteBuilder;
25
    use BulletListBuilder;
26
    use CodeblockBuilder;
27
    use HeadingBuilder;
28
    use MediaGroupBuilder;
29
    use MediaSingleBuilder;
30
    use OrderedListBuilder;
31
    use PanelBuilder;
32
    use ParagraphBuilder;
33
    use RuleBuilder;
34
    use TableBuilder;
35
36
    protected string $type = 'expand';
37
    protected array $allowedContentTypes = [
38
        Blockquote::class,
39
        BulletList::class,
40
        CodeBlock::class,
41
        Heading::class,
42
        MediaGroup::class,
43
        MediaSingle::class,
44
        OrderedList::class,
45
        Panel::class,
46
        Paragraph::class,
47
        Rule::class,
48
        Table::class,
49
    ];
50
51
    private ?string $title;
52
53
    public function __construct(string $title, ?BlockNode $parent = null)
54
    {
55
        parent::__construct($parent);
56
        $this->title = $title;
57
    }
58
59
    public static function load(array $data, ?BlockNode $parent = null): self
60
    {
61
        self::checkNodeData(static::class, $data, ['attrs']);
62
        self::checkRequiredKeys(['title'], $data['attrs']);
63
64
        $node = new self($data['attrs']['title'], $parent);
65
66
        // set content if defined
67
        if (\array_key_exists('content', $data)) {
68
            foreach ($data['content'] as $nodeData) {
69
                $class = Node::NODE_MAPPING[$nodeData['type']];
70
                $child = $class::load($nodeData, $node);
71
72
                $node->append($child);
73
            }
74
        }
75
76
        return $node;
77
    }
78
79
    protected function attrs(): array
80
    {
81
        $attrs = parent::attrs();
82
        $attrs['title'] = $this->title;
83
84
        return $attrs;
85
    }
86
}
87